ZGlmZiAtLWdpdCBhL2xpYmMvQW5kcm9pZC5tayBiL2xpYmMvQW5kcm9pZC5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzA4MDJhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9BbmRyb2lkLm1rCkBAIC0wLDAgKzEsNTczIEBACitMT0NBTF9QQVRIOj0gJChjYWxsIG15LWRpcikKKworaW5jbHVkZSAkKExPQ0FMX1BBVEgpL2FyY2gtJChUQVJHRVRfQVJDSCkvc3lzY2FsbHMubWsKK2xpYmNfY29tbW9uX3NyY19maWxlcyA6PSBcCisJJChzeXNjYWxsX3NyYykgXAorCXVuaXN0ZC9hYm9ydC5jIFwKKwl1bmlzdGQvYWxhcm0uYyBcCisJdW5pc3RkL2Jyay5jIFwKKwl1bmlzdGQvY3JlYXQuYyBcCisJdW5pc3RkL2RhZW1vbi5jIFwKKwl1bmlzdGQvZXhlYy5jIFwKKwl1bmlzdGQvZmNudGwuYyBcCisJdW5pc3RkL2ZubWF0Y2guYyBcCisJdW5pc3RkL2Z0aW1lLmMgXAorCXVuaXN0ZC9mdG9rLmMgXAorCXVuaXN0ZC9nZXRjd2QuYyBcCisJdW5pc3RkL2dldGR0YWJsZXNpemUuYyBcCisJdW5pc3RkL2dldGhvc3RuYW1lLmMgXAorCXVuaXN0ZC9nZXRvcHRfbG9uZy5jIFwKKwl1bmlzdGQvZ2V0cGdycC5jIFwKKwl1bmlzdGQvZ2V0cHJpb3JpdHkuYyBcCisJdW5pc3RkL2dldHB0LmMgXAorCXVuaXN0ZC9pbml0Z3JvdXBzLmMgXAorCXVuaXN0ZC9pc2F0dHkuYyBcCisJdW5pc3RkL2lzc2V0dWdpZC5jIFwKKwl1bmlzdGQvbHNlZWs2NC5jIFwKKwl1bmlzdGQvbW1hcC5jIFwKKwl1bmlzdGQvbmljZS5jIFwKKwl1bmlzdGQvb3Blbi5jIFwKKwl1bmlzdGQvb3BlbmF0LmMgXAorCXVuaXN0ZC9vcGVuZGlyLmMgXAorCXVuaXN0ZC9wYXRoY29uZi5jIFwKKwl1bmlzdGQvcGVycm9yLmMgXAorCXVuaXN0ZC9wb3Blbi5jIFwKKwl1bmlzdGQvcHJlYWQuYyBcCisJdW5pc3RkL3BzZWxlY3QuYyBcCisJdW5pc3RkL3B0c25hbWUuYyBcCisJdW5pc3RkL3B0c25hbWVfci5jIFwKKwl1bmlzdGQvcHdyaXRlLmMgXAorCXVuaXN0ZC9yYWlzZS5jIFwKKwl1bmlzdGQvcmVib290LmMgXAorCXVuaXN0ZC9yZWN2LmMgXAorCXVuaXN0ZC9zYnJrLmMgXAorCXVuaXN0ZC9zZW5kLmMgXAorCXVuaXN0ZC9zZXRlZ2lkLmMgXAorCXVuaXN0ZC9zZXRldWlkLmMgXAorCXVuaXN0ZC9zZXRwZ3JwLmMgXAorCXVuaXN0ZC9zaWdibG9jay5jIFwKKwl1bmlzdGQvc2lnaW50ZXJydXB0LmMgXAorCXVuaXN0ZC9zaWdsaXN0LmMgXAorCXVuaXN0ZC9zaWduYWwuYyBcCisJdW5pc3RkL3NpZ3NldG1hc2suYyBcCisJdW5pc3RkL3NpZ3N1c3BlbmQuYyBcCisJdW5pc3RkL3NpZ3dhaXQuYyBcCisJdW5pc3RkL3NsZWVwLmMgXAorCXVuaXN0ZC9zdGF0ZnMuYyBcCisJdW5pc3RkL3N0cnNpZ25hbC5jIFwKKwl1bmlzdGQvc3lzY29uZi5jIFwKKwl1bmlzdGQvc3lzbG9nLmMgXAorCXVuaXN0ZC9zeXN0ZW0uYyBcCisJdW5pc3RkL3RjZ2V0cGdycC5jIFwKKwl1bmlzdGQvdGNzZXRwZ3JwLmMgXAorCXVuaXN0ZC90aW1lLmMgXAorCXVuaXN0ZC91bW91bnQuYyBcCisJdW5pc3RkL3VubG9ja3B0LmMgXAorCXVuaXN0ZC91c2xlZXAuYyBcCisJdW5pc3RkL3dhaXQuYyBcCisJc3RkaW8vYXNwcmludGYuYyBcCisJc3RkaW8vY2xyZXJyLmMgXAorCXN0ZGlvL2ZjbG9zZS5jIFwKKwlzdGRpby9mZG9wZW4uYyBcCisJc3RkaW8vZmVvZi5jIFwKKwlzdGRpby9mZXJyb3IuYyBcCisJc3RkaW8vZmZsdXNoLmMgXAorCXN0ZGlvL2ZnZXRjLmMgXAorCXN0ZGlvL2ZnZXRsbi5jIFwKKwlzdGRpby9mZ2V0cG9zLmMgXAorCXN0ZGlvL2ZnZXRzLmMgXAorCXN0ZGlvL2ZpbGVuby5jIFwKKwlzdGRpby9maW5kZnAuYyBcCisJc3RkaW8vZmxhZ3MuYyBcCisJc3RkaW8vZmxvY2tmaWxlLmMgXAorCXN0ZGlvL2ZvcGVuLmMgXAorCXN0ZGlvL2ZwcmludGYuYyBcCisJc3RkaW8vZnB1cmdlLmMgXAorCXN0ZGlvL2ZwdXRjLmMgXAorCXN0ZGlvL2ZwdXRzLmMgXAorCXN0ZGlvL2ZyZWFkLmMgXAorCXN0ZGlvL2ZyZW9wZW4uYyBcCisJc3RkaW8vZnNjYW5mLmMgXAorCXN0ZGlvL2ZzZWVrLmMgXAorCXN0ZGlvL2ZzZXRwb3MuYyBcCisJc3RkaW8vZnRlbGwuYyBcCisJc3RkaW8vZnVub3Blbi5jIFwKKwlzdGRpby9mdndyaXRlLmMgXAorCXN0ZGlvL2Z3YWxrLmMgXAorCXN0ZGlvL2Z3cml0ZS5jIFwKKwlzdGRpby9nZXRjLmMgXAorCXN0ZGlvL2dldGNoYXIuYyBcCisJc3RkaW8vZ2V0cy5jIFwKKwlzdGRpby9tYWtlYnVmLmMgXAorCXN0ZGlvL21rdGVtcC5jIFwKKwlzdGRpby9wcmludGYuYyBcCisJc3RkaW8vcHV0Yy5jIFwKKwlzdGRpby9wdXRjaGFyLmMgXAorCXN0ZGlvL3B1dHMuYyBcCisJc3RkaW8vcHV0dy5jIFwKKwlzdGRpby9yZWZpbGwuYyBcCisJc3RkaW8vcmVtb3ZlLmMgXAorCXN0ZGlvL3Jld2luZC5jIFwKKwlzdGRpby9yZ2V0LmMgXAorCXN0ZGlvL3NjYW5mLmMgXAorCXN0ZGlvL3NldGJ1Zi5jIFwKKwlzdGRpby9zZXRidWZmZXIuYyBcCisJc3RkaW8vc2V0dmJ1Zi5jIFwKKwlzdGRpby9zbnByaW50Zi5jXAorCXN0ZGlvL3NwcmludGYuYyBcCisJc3RkaW8vc3NjYW5mLmMgXAorCXN0ZGlvL3N0ZGlvLmMgXAorCXN0ZGlvL3RlbXBuYW0uYyBcCisJc3RkaW8vdG1wZmlsZS5jIFwKKwlzdGRpby90bXBuYW0uYyBcCisJc3RkaW8vdW5nZXRjLmMgXAorCXN0ZGlvL3Zhc3ByaW50Zi5jIFwKKwlzdGRpby92ZnByaW50Zi5jIFwKKwlzdGRpby92ZnNjYW5mLmMgXAorCXN0ZGlvL3ZwcmludGYuYyBcCisJc3RkaW8vdnNucHJpbnRmLmMgXAorCXN0ZGlvL3ZzcHJpbnRmLmMgXAorCXN0ZGlvL3ZzY2FuZi5jIFwKKwlzdGRpby92c3NjYW5mLmMgXAorCXN0ZGlvL3didWYuYyBcCisJc3RkaW8vd3NldHVwLmMgXAorCXN0ZGxpYi9fcmFuZDQ4LmMgXAorCXN0ZGxpYi9hc3NlcnQuYyBcCisJc3RkbGliL2F0ZXhpdC5jIFwKKwlzdGRsaWIvYXRvaS5jIFwKKwlzdGRsaWIvYXRvbC5jIFwKKwlzdGRsaWIvYXRvbGwuYyBcCisJc3RkbGliL2JzZWFyY2guYyBcCisJc3RkbGliL2N0eXBlXy5jIFwKKwlzdGRsaWIvZGl2LmMgXAorCXN0ZGxpYi9leGl0LmMgXAorCXN0ZGxpYi9nZXRlbnYuYyBcCisJc3RkbGliL2pyYW5kNDguYyBcCisJc3RkbGliL2xkaXYuYyBcCisJc3RkbGliL2xsZGl2LmMgXAorCXN0ZGxpYi9sb2NhbGUuYyBcCisJc3RkbGliL2xyYW5kNDguYyBcCisJc3RkbGliL21yYW5kNDguYyBcCisJc3RkbGliL25yYW5kNDguYyBcCisJc3RkbGliL3B1dGVudi5jIFwKKwlzdGRsaWIvcXNvcnQuYyBcCisJc3RkbGliL3NlZWQ0OC5jIFwKKwlzdGRsaWIvc2V0ZW52LmMgXAorCXN0ZGxpYi9zZXRqbXBlcnIuYyBcCisJc3RkbGliL3NyYW5kNDguYyBcCisJc3RkbGliL3N0cm50b2ltYXguYyBcCisJc3RkbGliL3N0cm50b3VtYXguYyBcCisJc3RkbGliL3N0cnRvZC5jIFwKKwlzdGRsaWIvc3RydG9pbWF4LmMgXAorCXN0ZGxpYi9zdHJ0b2wuYyBcCisJc3RkbGliL3N0cnRvbGwuYyBcCisJc3RkbGliL3N0cnRvdWwuYyBcCisJc3RkbGliL3N0cnRvdWxsLmMgXAorCXN0ZGxpYi9zdHJ0b3VtYXguYyBcCisJc3RkbGliL3RvbG93ZXJfLmMgXAorCXN0ZGxpYi90b3VwcGVyXy5jIFwKKwlzdGRsaWIvd2NoYXIuYyBcCisJc3RyaW5nL2Jjb3B5LmMgXAorCXN0cmluZy9pbmRleC5jIFwKKwlzdHJpbmcvbWVtY2NweS5jIFwKKwlzdHJpbmcvbWVtY2hyLmMgXAorCXN0cmluZy9tZW1tZW0uYyBcCisJc3RyaW5nL21lbW1vdmUuYy5hcm0gXAorCXN0cmluZy9tZW1yY2hyLmMgXAorCXN0cmluZy9tZW1zd2FwLmMgXAorCXN0cmluZy9zdHJjYXNlY21wLmMgXAorCXN0cmluZy9zdHJjYXNlc3RyLmMgXAorCXN0cmluZy9zdHJjYXQuYyBcCisJc3RyaW5nL3N0cmNoci5jIFwKKwlzdHJpbmcvc3RyY21wLmMgXAorCXN0cmluZy9zdHJjb2xsLmMgXAorCXN0cmluZy9zdHJjcHkuYyBcCisJc3RyaW5nL3N0cmNzcG4uYyBcCisJc3RyaW5nL3N0cmR1cC5jIFwKKwlzdHJpbmcvc3RyZXJyb3IuYyBcCisJc3RyaW5nL3N0cmVycm9yX3IuYyBcCisJc3RyaW5nL3N0cmxjYXQuYyBcCisJc3RyaW5nL3N0cmxjcHkuYyBcCisJc3RyaW5nL3N0cm5jYXQuYyBcCisJc3RyaW5nL3N0cm5jbXAuYyBcCisJc3RyaW5nL3N0cm5jcHkuYyBcCisJc3RyaW5nL3N0cm5kdXAuYyBcCisJc3RyaW5nL3N0cm5sZW4uYyBcCisJc3RyaW5nL3N0cnBicmsuYyBcCisJc3RyaW5nL3N0cnJjaHIuYyBcCisJc3RyaW5nL3N0cnNlcC5jIFwKKwlzdHJpbmcvc3Ryc3BuLmMgXAorCXN0cmluZy9zdHJzdHIuYyBcCisJc3RyaW5nL3N0cnRvay5jIFwKKwlzdHJpbmcvc3RydG90aW1ldmFsLmMgXAorCXN0cmluZy9zdHJ4ZnJtLmMgXAorCWluZXQvYmluZHJlc3Zwb3J0LmMgXAorCWluZXQvaW5ldF9hZGRyLmMgXAorCWluZXQvaW5ldF9hdG9uLmMgXAorCWluZXQvaW5ldF9udG9hLmMgXAorCWluZXQvaW5ldF9udG9wLmMgXAorCWluZXQvaW5ldF9wdG9uLmMgXAorCXR6Y29kZS9hc2N0aW1lLmMgXAorCXR6Y29kZS9kaWZmdGltZS5jIFwKKwl0emNvZGUvbG9jYWx0aW1lLmMgXAorCXR6Y29kZS9zdHJmdGltZS5jIFwKKwl0emNvZGUvc3RycHRpbWUuYyBcCisJYmlvbmljL19fZXJybm8uYyBcCisJYmlvbmljL19fc2V0X2Vycm5vLmMgXAorCWJpb25pYy9fcmFuZDQ4LmMgXAorCWJpb25pYy9hcmM0cmFuZG9tLmMgXAorCWJpb25pYy9iYXNlbmFtZS5jIFwKKwliaW9uaWMvYmFzZW5hbWVfci5jIFwKKwliaW9uaWMvZGlybmFtZS5jIFwKKwliaW9uaWMvZGlybmFtZV9yLmMgXAorCWJpb25pYy9kcmFuZDQ4LmMgXAorCWJpb25pYy9lcmFuZDQ4LmMgXAorCWJpb25pYy9mb3JrLmMgXAorCWJpb25pYy9pZl9uYW1ldG9pbmRleC5jIFwKKwliaW9uaWMvaWZfaW5kZXh0b25hbWUuYyBcCisJYmlvbmljL2lvY3RsLmMgXAorCWJpb25pYy9sZGV4cC5jIFwKKwliaW9uaWMvbGliY19pbml0X2NvbW1vbi5jIFwKKwliaW9uaWMvbG9nZF93cml0ZS5jIFwKKwliaW9uaWMvbWQ1LmMgXAorCWJpb25pYy9wdXR1dGxpbmUuYyBcCisJYmlvbmljL3JlYWxwYXRoLmMgXAorCWJpb25pYy9zZW1hcGhvcmUuYyBcCisJYmlvbmljL3NoYTEuYyBcCisJYmlvbmljL3NzcC5jIFwKKwliaW9uaWMvc3R1YnMuYyBcCisJYmlvbmljL3N5c3RlbV9wcm9wZXJ0aWVzLmMgXAorCWJpb25pYy90aW1lNjQuYyBcCisJYmlvbmljL3RocmVhZF9hdGV4aXQuYyBcCisJYmlvbmljL3V0aW1lLmMgXAorCWJpb25pYy91dG1wLmMgXAorCW5ldGJzZC9nZXRobmFtYWRkci5jIFwKKwluZXRic2QvaXNjL2V2X3RpbWVycy5jIFwKKwluZXRic2QvaXNjL2V2X3N0cmVhbXMuYyBcCisJbmV0YnNkL2luZXQvbnNhcF9hZGRyLmMgXAorCW5ldGJzZC9yZXNvbHYvX19kbl9jb21wLmMgXAorCW5ldGJzZC9yZXNvbHYvX19yZXNfY2xvc2UuYyBcCisJbmV0YnNkL3Jlc29sdi9fX3Jlc19zZW5kLmMgXAorCW5ldGJzZC9yZXNvbHYvaGVycm9yLmMgXAorCW5ldGJzZC9yZXNvbHYvcmVzX2NvbXAuYyBcCisJbmV0YnNkL3Jlc29sdi9yZXNfZGF0YS5jIFwKKwluZXRic2QvcmVzb2x2L3Jlc19kZWJ1Zy5jIFwKKwluZXRic2QvcmVzb2x2L3Jlc19pbml0LmMgXAorCW5ldGJzZC9yZXNvbHYvcmVzX21rcXVlcnkuYyBcCisJbmV0YnNkL3Jlc29sdi9yZXNfcXVlcnkuYyBcCisJbmV0YnNkL3Jlc29sdi9yZXNfc2VuZC5jIFwKKwluZXRic2QvcmVzb2x2L3Jlc19zdGF0ZS5jLmFybSBcCisJbmV0YnNkL3Jlc29sdi9yZXNfY2FjaGUuYyBcCisJbmV0YnNkL25ldC9uc2Rpc3BhdGNoLmMgXAorCW5ldGJzZC9uZXQvZ2V0YWRkcmluZm8uYyBcCisJbmV0YnNkL25ldC9nZXRuYW1laW5mby5jIFwKKwluZXRic2QvbmV0L2dldHNlcnZieW5hbWUuYyBcCisJbmV0YnNkL25ldC9nZXRzZXJ2ZW50LmMgXAorCW5ldGJzZC9uZXQvYmFzZTY0LmMgXAorCW5ldGJzZC9uZXQvZ2V0c2VydmJ5cG9ydC5jIFwKKwluZXRic2QvbmFtZXNlci9uc19uYW1lLmMgXAorCW5ldGJzZC9uYW1lc2VyL25zX3BhcnNlLmMgXAorCW5ldGJzZC9uYW1lc2VyL25zX3R0bC5jIFwKKwluZXRic2QvbmFtZXNlci9uc19uZXRpbnQuYyBcCisJbmV0YnNkL25hbWVzZXIvbnNfcHJpbnQuYyBcCisJbmV0YnNkL25hbWVzZXIvbnNfc2FtZWRvbWFpbi5jCisKK2lmZXEgKCQoVEFSR0VUX0FSQ0gpLGFybSkKK2xpYmNfY29tbW9uX3NyY19maWxlcyArPSBcCisJYmlvbmljL2VhYmkuYyBcCisJYXJjaC1hcm0vYmlvbmljL19fZ2V0X3BjLlMgXAorCWFyY2gtYXJtL2Jpb25pYy9fX2dldF9zcC5TIFwKKwlhcmNoLWFybS9iaW9uaWMvX2V4aXRfd2l0aF9zdGFja190ZWFyZG93bi5TIFwKKwlhcmNoLWFybS9iaW9uaWMvX3NldGptcC5TIFwKKwlhcmNoLWFybS9iaW9uaWMvYXRvbWljc19hcm0uUyBcCisJYXJjaC1hcm0vYmlvbmljL2Nsb25lLlMgXAorCWFyY2gtYXJtL2Jpb25pYy9mZnMuUyBcCisJYXJjaC1hcm0vYmlvbmljL2tpbGwuUyBcCisJYXJjaC1hcm0vYmlvbmljL3RraWxsLlMgXAorCWFyY2gtYXJtL2Jpb25pYy9tZW1jbXAuUyBcCisJYXJjaC1hcm0vYmlvbmljL21lbWNtcDE2LlMgXAorCWFyY2gtYXJtL2Jpb25pYy9tZW1jcHkuUyBcCisJYXJjaC1hcm0vYmlvbmljL21lbXNldC5TIFwKKwlhcmNoLWFybS9iaW9uaWMvc2V0am1wLlMgXAorCWFyY2gtYXJtL2Jpb25pYy9zaWdzZXRqbXAuUyBcCisJYXJjaC1hcm0vYmlvbmljL3N0cmxlbi5jLmFybSBcCisJYXJjaC1hcm0vYmlvbmljL3N5c2NhbGwuUyBcCisJdW5pc3RkL3NvY2tldGNhbGxzLmMKKworIyBUaGVzZSBmaWxlcyBuZWVkIHRvIGJlIGFybSBzbyB0aGF0IGdkYnNlcnZlcgorIyBjYW4gc2V0IGJyZWFrcG9pbnRzIGluIHRoZW0gd2l0aG91dCBtZXNzaW5nCisjIHVwIGFueSB0aHVtYiBjb2RlLgorbGliY19jb21tb25fc3JjX2ZpbGVzICs9IFwKKwliaW9uaWMvcHRocmVhZC5jLmFybSBcCisJYmlvbmljL3B0aHJlYWQtdGltZXJzLmMuYXJtIFwKKwliaW9uaWMvcHRyYWNlLmMuYXJtCitlbHNlICMgIWFybQorCitpZmVxICgkKFRBUkdFVF9BUkNIKSx4ODYpCitsaWJjX2NvbW1vbl9zcmNfZmlsZXMgKz0gXAorCWFyY2gteDg2L2Jpb25pYy9fX2dldF9zcC5TIFwKKwlhcmNoLXg4Ni9iaW9uaWMvX19nZXRfdGxzLmMgXAorCWFyY2gteDg2L2Jpb25pYy9fX3NldF90bHMuYyBcCisJYXJjaC14ODYvYmlvbmljL2F0b21pY3NfeDg2LlMgXAorCWFyY2gteDg2L2Jpb25pYy9jbG9uZS5TIFwKKwlhcmNoLXg4Ni9iaW9uaWMvX2V4aXRfd2l0aF9zdGFja190ZWFyZG93bi5TIFwKKwlhcmNoLXg4Ni9iaW9uaWMvc2V0am1wLlMgXAorCWFyY2gteDg2L2Jpb25pYy9fc2V0am1wLlMgXAorCWFyY2gteDg2L2Jpb25pYy92Zm9yay5TIFwKKwlhcmNoLXg4Ni9zdHJpbmcvYnplcm8uUyBcCisJYXJjaC14ODYvc3RyaW5nL21lbXNldC5TIFwKKwlhcmNoLXg4Ni9zdHJpbmcvbWVtY21wLlMgXAorCWFyY2gteDg2L3N0cmluZy9tZW1jcHkuUyBcCisJYXJjaC14ODYvc3RyaW5nL3N0cmxlbi5TIFwKKwliaW9uaWMvcHRocmVhZC5jIFwKKwliaW9uaWMvcHRocmVhZC10aW1lcnMuYyBcCisJYmlvbmljL3B0cmFjZS5jCitlbmRpZiAjIHg4NgorCitlbmRpZiAjICFhcm0KKworbGliY19jb21tb25fY2ZsYWdzIDo9IFwKKwkJLURXSVRIX0VSUkxJU1QJCQlcCisJCS1EQU5EUk9JRF9DSEFOR0VTCQlcCisJCS1EVVNFX0xPQ0tTIAkJCVwKKwkJLURSRUFMTE9DX1pFUk9fQllURVNfRlJFRVMgCVwKKwkJLURfTElCQz0xIAkJCVwKKwkJLURTT0ZURkxPQVQgICAgICAgICAgICAgICAgICAgICBcCisJCS1ERkxPQVRJTkdfUE9JTlQJCVwKKwkJLURORUVEX1BTRUxFQ1Q9MQkJXAorCQktRElORVQ2IFwKKwkJLUkkKExPQ0FMX1BBVEgpL3ByaXZhdGUgXAorCitpZmVxICgkKFRBUkdFVF9CVUlMRF9UWVBFKSxkZWJ1ZykKKyAgbGliY19jb21tb25fY2ZsYWdzICs9IC1EREVCVUcKK2VuZGlmCisKK2lmZXEgKCQoVEFSR0VUX0FSQ0gpLGFybSkKKyAgbGliY19jb21tb25fY2ZsYWdzICs9IC1mc3RyaWN0LWFsaWFzaW5nCitlbmRpZgorCitsaWJjX2NvbW1vbl9jX2luY2x1ZGVzIDo9IFwKKwkJJChMT0NBTF9QQVRIKS9zdGRsaWIgIFwKKwkJJChMT0NBTF9QQVRIKS9zdHJpbmcgIFwKKwkJJChMT0NBTF9QQVRIKS9zdGRpbworCisjIGxpYmNfY29tbW9uLmEKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworaW5jbHVkZSAkKENMRUFSX1ZBUlMpCisKK0xPQ0FMX1NSQ19GSUxFUyA6PSAkKGxpYmNfY29tbW9uX3NyY19maWxlcykKK0xPQ0FMX0NGTEFHUyA6PSAkKGxpYmNfY29tbW9uX2NmbGFncykgLURVU0VfRExfUFJFRklYCitMT0NBTF9DX0lOQ0xVREVTIDo9ICQobGliY19jb21tb25fY19pbmNsdWRlcykKKworaWZuZXEgKCQoVEFSR0VUX1NJTVVMQVRPUiksdHJ1ZSkKKyAgaWZlcSAoJChUQVJHRVRfQVJDSCksYXJtKQorICAgIGNydGVuZF90YXJnZXRfY2ZsYWdzIDo9IC1tdGh1bWItaW50ZXJ3b3JrCisgIGVsc2UKKyAgICBpZmVxICgkKFRBUkdFVF9BUkNIKSx4ODYpCisgICAgICBjcnRlbmRfdGFyZ2V0X2NmbGFncyA6PSAtbTMyCisgICAgZW5kaWYKKyAgZW5kaWYKKyMgV2UgcmVuYW1lIGNydGVuZC5vIHRvIGNydGVuZF9hbmRyb2lkLm8gdG8gYXZvaWQgYQorIyBuYW1lIGNsYXNoIGJldHdlZW4gZ2NjIGFuZCBiaW9uaWMuCitHRU4gOj0gJChUQVJHRVRfT1VUX1NUQVRJQ19MSUJSQVJJRVMpL2NydGVuZF9hbmRyb2lkLm8KKyQoR0VOKTogJChMT0NBTF9QQVRIKS9hcmNoLSQoVEFSR0VUX0FSQ0gpL2Jpb25pYy9jcnRlbmQuUworCUBta2RpciAtcCAkKGRpciAkQCkKKwkkKFRBUkdFVF9DQykgJChjcnRlbmRfdGFyZ2V0X2NmbGFncykgLW8gJEAgLWMgJDwKK0FMTF9HRU5FUkFURURfU09VUkNFUyArPSAkKEdFTikKK2VuZGlmCisKKworIyBjcnRiZWdpbl9zby5vL2NydGVuZF9zby5vCisjIFRoZXNlIGFyZSBuZWVkZWQgZm9yIGJ1aWxkaW5nIHRoZSBzaGFyZWQgbGlicy4KK2lmbmVxICgkKFRBUkdFVF9TSU1VTEFUT1IpLHRydWUpCisKK2lmZXEgKCQoVEFSR0VUX0FSQ0gpLHg4NikKKworY3J0X2JlZ2luX2VuZF9zb190YXJnZXRfY2ZsYWdzIDo9IC1tMzIKKworR0VOIDo9ICQoVEFSR0VUX09VVF9TVEFUSUNfTElCUkFSSUVTKS9jcnRiZWdpbl9zby5vCiskKEdFTik6ICQoTE9DQUxfUEFUSCkvYXJjaC0kKFRBUkdFVF9BUkNIKS9iaW9uaWMvY3J0YmVnaW5fc28uUworCUBta2RpciAtcCAkKGRpciAkQCkKKwkkKFRBUkdFVF9DQykgJChjcnRfYmVnaW5fZW5kX3NvX3RhcmdldF9jZmxhZ3MpIC1vICRAIC1jICQ8CitBTExfR0VORVJBVEVEX1NPVVJDRVMgKz0gJChHRU4pCisKK0dFTiA6PSAkKFRBUkdFVF9PVVRfU1RBVElDX0xJQlJBUklFUykvY3J0ZW5kX3NvLm8KKyQoR0VOKTogJChMT0NBTF9QQVRIKS9hcmNoLSQoVEFSR0VUX0FSQ0gpL2Jpb25pYy9jcnRlbmRfc28uUworCUBta2RpciAtcCAkKGRpciAkQCkKKwkkKFRBUkdFVF9DQykgJChjcnRfYmVnaW5fZW5kX3NvX3RhcmdldF9jZmxhZ3MpIC1vICRAIC1jICQ8CitBTExfR0VORVJBVEVEX1NPVVJDRVMgKz0gJChHRU4pCisKK2VuZGlmICMgVEFSR0VUX0FSQ0ggPT0geDg2CisKK2VuZGlmICMgIVRBUkdFVF9TSU1VTEFUT1IKKworCitMT0NBTF9NT0RVTEUgOj0gbGliY19jb21tb24KK0xPQ0FMX1NZU1RFTV9TSEFSRURfTElCUkFSSUVTIDo9CisKK2luY2x1ZGUgJChCVUlMRF9TVEFUSUNfTElCUkFSWSkKKworCisjIGxpYmMuYQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitpbmNsdWRlICQoQ0xFQVJfVkFSUykKKworaW5jbHVkZSAkKExPQ0FMX1BBVEgpL2FyY2gtJChUQVJHRVRfQVJDSCkvc3lzY2FsbHMubWsKKworIyBUbyBlbmFibGUgbWFsbG9jIGxlYWsgY2hlY2sgZm9yIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW1zLCBhZGQKKyMgIldJVEhfTUFMTE9DX0NIRUNLX0xJQkNfQSA6PSB0cnVlIiB0byBkZXZpY2UvYnVpbGRzcGVjLm1rCitXSVRIX01BTExPQ19DSEVDS19MSUJDX0EgOj0gJChzdHJpcCAkKFdJVEhfTUFMTE9DX0NIRUNLX0xJQkNfQSkpCisKK0xPQ0FMX1NSQ19GSUxFUyA6PSBcCisJJChsaWJjX2NvbW1vbl9zcmNfZmlsZXMpIFwKKwliaW9uaWMvZGxtYWxsb2MuYyBcCisJYmlvbmljL2xpYmNfaW5pdF9zdGF0aWMuYworCitpZmVxICgkKFdJVEhfTUFMTE9DX0NIRUNLX0xJQkNfQSksdHJ1ZSkKKyAgTE9DQUxfU1JDX0ZJTEVTICs9IGJpb25pYy9tYWxsb2NfbGVhay5jLmFybQorZW5kaWYKKworaWZlcSAoJChUQVJHRVRfQVJDSCksYXJtKQorTE9DQUxfU1JDX0ZJTEVTICs9IFwKKwlhcmNoLWFybS9iaW9uaWMvZXhpZHhfc3RhdGljLmMKKworZWxzZSAjIFRBUkdFVF9BUkNIICE9IGFybQorCitpZmVxICgkKFRBUkdFVF9BUkNIKSx4ODYpCitMT0NBTF9TUkNfRklMRVMgKz0gXAorCWFyY2gteDg2L2Jpb25pYy9kbF9pdGVyYXRlX3BoZHJfc3RhdGljLmMKK2VuZGlmCisKK2VuZGlmCisKK2lmbmVxICgkKFRBUkdFVF9TSU1VTEFUT1IpLHRydWUpCisgIGlmZXEgKCQoVEFSR0VUX0FSQ0gpLGFybSkKKyAgICBjcnRiZWdpbl9zdGF0aWNfdGFyZ2V0X2NmbGFncyA6PSAtbXRodW1iLWludGVyd29yaworICBlbHNlCisgICAgaWZlcSAoJChUQVJHRVRfQVJDSCkseDg2KQorICAgICAgY3J0YmVnaW5fc3RhdGljX3RhcmdldF9jZmxhZ3MgOj0gLW0zMgorICAgIGVuZGlmCisgIGVuZGlmCitHRU4gOj0gJChUQVJHRVRfT1VUX1NUQVRJQ19MSUJSQVJJRVMpL2NydGJlZ2luX3N0YXRpYy5vCiskKEdFTik6ICQoTE9DQUxfUEFUSCkvYXJjaC0kKFRBUkdFVF9BUkNIKS9iaW9uaWMvY3J0YmVnaW5fc3RhdGljLlMKKwlAbWtkaXIgLXAgJChkaXIgJEApCisJJChUQVJHRVRfQ0MpICQoY3J0YmVnaW5fc3RhdGljX3RhcmdldF9jZmxhZ3MpIC1vICRAIC1jICQ8CitBTExfR0VORVJBVEVEX1NPVVJDRVMgKz0gJChHRU4pCitlbmRpZgorCitMT0NBTF9DRkxBR1MgOj0gJChsaWJjX2NvbW1vbl9jZmxhZ3MpCisKK0xPQ0FMX0NfSU5DTFVERVMgOj0gJChsaWJjX2NvbW1vbl9jX2luY2x1ZGVzKQorCitpZmVxICgkKFdJVEhfTUFMTE9DX0NIRUNLX0xJQkNfQSksdHJ1ZSkKKyAgTE9DQUxfQ0ZMQUdTICs9IC1EVVNFX0RMX1BSRUZJWCAtRE1BTExPQ19MRUFLX0NIRUNLCitlbmRpZgorCitMT0NBTF9XSE9MRV9TVEFUSUNfTElCUkFSSUVTIDo9IGxpYmNfY29tbW9uCitMT0NBTF9NT0RVTEU6PSBsaWJjCitMT0NBTF9TWVNURU1fU0hBUkVEX0xJQlJBUklFUyA6PQorCitpbmNsdWRlICQoQlVJTERfU1RBVElDX0xJQlJBUlkpCisKKworIyBsaWJjLnNvCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorCitMT0NBTF9DRkxBR1MgOj0gJChsaWJjX2NvbW1vbl9jZmxhZ3MpCisKK0xPQ0FMX0NGTEFHUyArPSAtRFVTRV9ETF9QUkVGSVgKKworTE9DQUxfQ19JTkNMVURFUyA6PSAkKGxpYmNfY29tbW9uX2NfaW5jbHVkZXMpCisKK0xPQ0FMX1NSQ19GSUxFUyA6PSBcCisJYmlvbmljL2RsbWFsbG9jLmMgXAorCWJpb25pYy9tYWxsb2NfbGVhay5jLmFybSBcCisJYmlvbmljL2xpYmNfaW5pdF9keW5hbWljLmMKKworaWZlcSAoJChUQVJHRVRfQVJDSCksYXJtKQorTE9DQUxfU1JDX0ZJTEVTICs9IFwKKwlhcmNoLWFybS9iaW9uaWMvZXhpZHhfZHluYW1pYy5jCitlbmRpZgorCitMT0NBTF9NT0RVTEU6PSBsaWJjCisKKyMgV0FSTklORzogVGhlIG9ubHkgbGlicmFyeSBsaWJjLnNvIHNob3VsZCBkZXBlbmQgb24gaXMgbGliZGwuc28hICBJZiB5b3UgYWRkIG90aGVyIGxpYnJhcmllcywKKyMgbWFrZSBzdXJlIHRvIGFkZCAtV2wsLS1leGNsdWRlLWxpYnM9bGliZ2NjLmEgdG8gdGhlIExPQ0FMX0xERkxBR1MgZm9yIHRob3NlIGxpYnJhcmllcy4gIFRoaXMKKyMgZW5zdXJlcyB0aGF0IHN5bWJvbHMgdGhhdCBhcmUgcHVsbGVkIGludG8gdGhvc2UgbmV3IGxpYnJhcmllcyBmcm9tIGxpYmdjYy5hIGFyZSBub3QgZGVjbGFyZWQKKyMgZXh0ZXJuYWw7IGlmIHRoYXQgd2VyZSB0aGUgY2FzZSwgdGhlbiBsaWJjIHdvdWxkIG5vdCBwdWxsIHRob3NlIHN5bWJvbHMgZnJvbSBsaWJnY2MuYSBhcyBpdAorIyBzaG91bGQsIGluc3RlYWQgcmVseWluZyBvbiB0aGUgZXh0ZXJuYWwgc3ltYm9scyBmcm9tIHRoZSBkZXBlbmRlbnQgbGlicmFyaWVzLiAgVGhhdCB3b3VsZAorIyBjcmVhdGUgYW4gImNsb2FrZWQiIGRlcGVuZGVuY3kgb24gbGliZ2NjLmEgaW4gbGliYyB0aG91Z2ggdGhlIGxpYnJhcmllcywgd2hpY2ggaXMgbm90IHdoYXQKKyMgeW91IHdhbnRlZCEKKworTE9DQUxfU0hBUkVEX0xJQlJBUklFUyA6PSBsaWJkbAorTE9DQUxfV0hPTEVfU1RBVElDX0xJQlJBUklFUyA6PSBsaWJjX2NvbW1vbgorTE9DQUxfU1lTVEVNX1NIQVJFRF9MSUJSQVJJRVMgOj0KKworaWZuZXEgKCQoVEFSR0VUX1NJTVVMQVRPUiksdHJ1ZSkKKyAgaWZlcSAoJChUQVJHRVRfQVJDSCksYXJtKQorICAgIGNydGJlZ2luX2R5bmFtaWNfdGFyZ2V0X2NmbGFncyA6PSAtbXRodW1iLWludGVyd29yaworICBlbHNlCisgICAgaWZlcSAoJChUQVJHRVRfQVJDSCkseDg2KQorICAgICAgY3J0YmVnaW5fZHluYW1pY190YXJnZXRfY2ZsYWdzIDo9IC1tMzIKKyAgICBlbmRpZgorICBlbmRpZgorR0VOIDo9ICQoVEFSR0VUX09VVF9TVEFUSUNfTElCUkFSSUVTKS9jcnRiZWdpbl9keW5hbWljLm8KKyQoR0VOKTogJChMT0NBTF9QQVRIKS9hcmNoLSQoVEFSR0VUX0FSQ0gpL2Jpb25pYy9jcnRiZWdpbl9keW5hbWljLlMKKwlAbWtkaXIgLXAgJChkaXIgJEApCisJJChUQVJHRVRfQ0MpICQoY3J0YmVnaW5fZHluYW1pY190YXJnZXRfY2ZsYWdzKSAtbyAkQCAtYyAkPAorQUxMX0dFTkVSQVRFRF9TT1VSQ0VTICs9ICQoR0VOKQorZW5kaWYKKworaW5jbHVkZSAkKEJVSUxEX1NIQVJFRF9MSUJSQVJZKQorCisKKyMgbGliY19kZWJ1Zy5zbworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitpbmNsdWRlICQoQ0xFQVJfVkFSUykKKworTE9DQUxfQ0ZMQUdTIDo9ICQobGliY19jb21tb25fY2ZsYWdzKQorCitMT0NBTF9DRkxBR1MgKz0gLURVU0VfRExfUFJFRklYIC1ETUFMTE9DX0xFQUtfQ0hFQ0sKKworTE9DQUxfQ19JTkNMVURFUyA6PSAkKGxpYmNfY29tbW9uX2NfaW5jbHVkZXMpCisKK0xPQ0FMX1NSQ19GSUxFUyA6PSBcCisJYmlvbmljL2RsbWFsbG9jLmMgXAorCWJpb25pYy9tYWxsb2NfbGVhay5jLmFybSBcCisJYmlvbmljL2xpYmNfaW5pdF9keW5hbWljLmMKKworaWZlcSAoJChUQVJHRVRfQVJDSCksYXJtKQorTE9DQUxfU1JDX0ZJTEVTICs9IFwKKwlhcmNoLWFybS9iaW9uaWMvZXhpZHhfZHluYW1pYy5jCitlbmRpZgorCitMT0NBTF9NT0RVTEU6PSBsaWJjX2RlYnVnCisKKyMgV0FSTklORzogVGhlIG9ubHkgbGlicmFyeSBsaWJjLnNvIHNob3VsZCBkZXBlbmQgb24gaXMgbGliZGwuc28hICBJZiB5b3UgYWRkIG90aGVyIGxpYnJhcmllcywKKyMgbWFrZSBzdXJlIHRvIGFkZCAtV2wsLS1leGNsdWRlLWxpYnM9bGliZ2NjLmEgdG8gdGhlIExPQ0FMX0xERkxBR1MgZm9yIHRob3NlIGxpYnJhcmllcy4gIFRoaXMKKyMgZW5zdXJlcyB0aGF0IHN5bWJvbHMgdGhhdCBhcmUgcHVsbGVkIGludG8gdGhvc2UgbmV3IGxpYnJhcmllcyBmcm9tIGxpYmdjYy5hIGFyZSBub3QgZGVjbGFyZWQKKyMgZXh0ZXJuYWw7IGlmIHRoYXQgd2VyZSB0aGUgY2FzZSwgdGhlbiBsaWJjIHdvdWxkIG5vdCBwdWxsIHRob3NlIHN5bWJvbHMgZnJvbSBsaWJnY2MuYSBhcyBpdAorIyBzaG91bGQsIGluc3RlYWQgcmVseWluZyBvbiB0aGUgZXh0ZXJuYWwgc3ltYm9scyBmcm9tIHRoZSBkZXBlbmRlbnQgbGlicmFyaWVzLiAgVGhhdCB3b3VsZAorIyBjcmVhdGUgYW4gImNsb2FrZWQiIGRlcGVuZGVuY3kgb24gbGliZ2NjLmEgaW4gbGliYyB0aG91Z2ggdGhlIGxpYnJhcmllcywgd2hpY2ggaXMgbm90IHdoYXQKKyMgeW91IHdhbnRlZCEKKworTE9DQUxfU0hBUkVEX0xJQlJBUklFUyA6PSBsaWJkbAorTE9DQUxfV0hPTEVfU1RBVElDX0xJQlJBUklFUyA6PSBsaWJjX2NvbW1vbgorTE9DQUxfU1lTVEVNX1NIQVJFRF9MSUJSQVJJRVMgOj0KKyMgRG9uJ3QgcHJlbGluaworTE9DQUxfUFJFTElOS19NT0RVTEUgOj0gZmFsc2UKKyMgRG9uJ3QgaW5zdGFsbCBvbiByZWxlYXNlIGJ1aWxkCitMT0NBTF9NT0RVTEVfVEFHUyA6PSBlbmcKKworR0VOIDo9ICQoVEFSR0VUX09VVF9TVEFUSUNfTElCUkFSSUVTKS9jcnRiZWdpbl9keW5hbWljLm8KK0FMTF9HRU5FUkFURURfU09VUkNFUyArPSAkKEdFTikKKworaW5jbHVkZSAkKEJVSUxEX1NIQVJFRF9MSUJSQVJZKQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitpbmNsdWRlICQoY2FsbCBhbGwtbWFrZWZpbGVzLXVuZGVyLCQoTE9DQUxfUEFUSCkpCmRpZmYgLS1naXQgYS9saWJjL0NBVkVBVFMgYi9saWJjL0NBVkVBVFMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzIyODFhMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvQ0FWRUFUUwpAQCAtMCwwICsxLDI2IEBACitCaW9uaWMgaXMgYSB2ZXJ5IHNtYWxsIEMgbGlicmFyeSBiZWNhdXNlIHdlIGhhdmUgZGVjaWRlZCB0byAqbm90KiBpbXBsZW1lbnQgdmFyaW91cyBmZWF0dXJlcworb2YgdGhlIFBPU0lYIHN0YW5kYXJkLiB3ZSBvbmx5IGFkZCBmdW5jdGlvbnMgb24gYSBhcy1uZWVkZWQgYmFzaXMsIGFuZCB0aGVyZSBhcmUgYSBmZXcgdGhpbmdzCit3ZSB3aXNoIHdlJ2xsIG5ldmVyIHB1dCBpbiB0aGVyZS4KKwordGhpcyBmaWxlIGlzIGhlcmUgdG8gZG9jdW1lbnQgZXhwbGljaXRlbHkgd2hhdCB3ZSBkb24ndCB3YW50IHRvIHN1cHBvcnQgaW4gQmlvbmljOgorCistIEMrKyBleGNlcHRpb25zIGFyZSBub3Qgc3VwcG9ydGVkLiBvbiBlbWJlZGRlZCBzeXN0ZW1zLCB0aGV5IGxlYWQgdG8gZXh0cmVtZWx5IGxhcmdlciBhbmQKKyAgc2xvd2VyIGNvZGUgZm9yIG5vIGdvb2QgcmVhc29uIChldmVuIHdoZW4gc28tY2FsbGVkIHplcm8tY29zdCBleGNlcHRpb24gc2NoZW1lcyBhcmUKKyAgaW1wbGVtZW50ZWQsIHRoZXkgZW5mb3JjZSB2ZXJ5IGxhcmdlIG51bWJlcnMgb2YgcmVnaXN0ZXJzIHNwaWxscyB0byB0aGUgc3RhY2ssIGV2ZW4KKyAgaW4gZnVuY3Rpb25zIHRoYXQgZG8gbm90IHRocm93IGFuIGV4Y2VwdGlvbiB0aGVtc2VsdmVzKS4KKworLSBwdGhyZWFkIGNhbmNlbGxhdGlvbiBpcyAqbm90KiBzdXBwb3J0ZWQuIHRoaXMgc2VlbWluZ2x5IHNpbXBsZSAiZmVhdHVyZSIgaXMgdGhlIHNvdXJjZQorICBvZiBtdWNoIGJsb2F0IGFuZCBjb21wbGV4aXR5IGluIGEgQyBsaWJyYXJ5LiBCZXNpZGVzLCB5b3UnZCBiZXR0ZXIgd3JpdGUgY29ycmVjdAorICBtdWx0aS10aHJlYWRlZCBjb2RlIGluc3RlYWQgb2YgcmVseWluZyBvbiB0aGlzIHN0dWZmLgorCistIHB0aHJlYWRfb25jZSgpIGRvZXNuJ3Qgc3VwcG9ydCBDKysgZXhjZXB0aW9ucyB0aHJvd24gZnJvbSB0aGUgaW5pdCBmdW5jdGlvbiwgb3IgdGhlIGluaXQKKyAgZnVuY3Rpb24gZG9pbmcgYSBmb3JrKCkuCisKKy0gbG9jYWxlcyBhbmQgd2lkZSBjaGFyYWN0ZXJzIGFyZSBub3Qgc3VwcG9ydGVkLiB3ZSB1c2UgSUNVIGZvciBhbGwgdGhpcyBpMThuIHN0dWZmLCB3aGljaAorICBpcyBtdWNoIGJldHRlciB0aGFuIHRoZSBpbGwtZGVzaWduZWQgcmVsYXRlZCBDIGxpYnJhcmllcyBmdW5jdGlvbnMuCisKKy0gYXQgdGhlIG1vbWVudCwgc2V2ZXJhbCB1c2VyLWFjY291bnQtcmVsYXRlZCBmdW5jdGlvbnMgbGlrZSBnZXRwd2QgYXJlIHN0dWJiZWQgYW5kIHJldHVybgorICB0aGUgdmFsdWVzIGNvcnJlc3BvbmRpbmcgdG8gcm9vdC4gdGhpcyB3aWxsIGJlIGZpeGVkIHdoZW4gd2UnbGwgYmUgYWJsZSB0byBoYXZlIGRpc3RpbmN0CisgIHVzZXJzIG9uIHRoZSBBbmRyb2lkIGZpbGVzeXN0ZW0uIDotKAorCisgIHNlZSBiaW9uaWMvc3R1YnMuYyBmb3IgdGhlIGRldGFpbHMKZGlmZiAtLWdpdCBhL2xpYmMvSmFtZmlsZSBiL2xpYmMvSmFtZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjViZTVkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9KYW1maWxlCkBAIC0wLDAgKzEsNDQxIEBACisjIFRoaXMgZmlsZSBpcyB1c2VkIHRvIGJ1aWxkIHRoZSBCaW9uaWMgbGlicmFyeSB3aXRoIHRoZSBKYW0gYnVpbGQKKyMgdG9vbC4gRm9yIGluZm8sIHNlZSB3d3cucGVyZm9yY2UuY29tL2phbS9qYW0uaHRtbAorIworCitCSU9OSUNfVE9QID89ICQoRE9UKSA7CisKK0RFQlVHID0gMSA7CisKKyMgcGF0dGVybiB1c2VkIGZvciBhdXRvbWF0aWMgaGVhZGUgaW5jbHVzaW9uIGRldGVjdGlvbgorSERSUEFUVEVSTiA9ICJeWyAJXSojWyAJXSppbmNsdWRlWyAJXSpbPFwiXShbXlwiPl0qKVtcIj5dLiokIiA7CisKKworIyBkZWJ1Z2dpbmcgc3VwcG9ydCwgc2ltcGx5IGRlZmluZSB0aGUgREVCVUcgdmFyaWFibGUgdG8gYWN0aXZhdGUgdmVyYm9zZSBvdXRwdXQKK3J1bGUgRGVidWcKK3sKKyAgICBpZiAkKERFQlVHKSB7CisgICAgICAgIEVjaG8gJCgxKSA7CisgICAgfQorfQorCisjIHJldHVybiBhbGwgZWxlbWVudHMgZnJvbSAkKDEpIHRoYXQgYXJlIG5vdCBpbiAkKDIpCitydWxlIEZpbHRlciAgbGlzdCA6IGZpbHRlcgoreworICAgIGxvY2FsIHJlc3VsdCA9IDsKKyAgICBsb2NhbCBpdGVtIDsKKyAgICBmb3IgaXRlbSBpbiAkKGxpc3QpIHsKKyAgICAgICAgaWYgISAkKGl0ZW0pIGluICQoZmlsdGVyKSB7CisgICAgICAgICAgICByZXN1bHQgKz0gJChpdGVtKSA7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuICQocmVzdWx0KSA7Cit9CisKKworIyByZXZlcnNlIGEgbGlzdCBvZiBlbGVtZW50cworcnVsZSBSZXZlcnNlICBsaXN0Cit7CisgICAgbG9jYWwgIHJlc3VsdCA9IDsKKyAgICBsb2NhbCAgaXRlbSA7CisKKyAgICBmb3IgaXRlbSBpbiAkKGxpc3QpIHsKKyAgICAgICAgcmVzdWx0ID0gJChpdGVtKSAkKHJlc3VsdCkgOworICAgIH0KKyAgICByZXR1cm4gJChyZXN1bHQpIDsKK30KKworCisjIGRlY29tcG9zZSBhIHBhdGggaW50byBhIGxpc3Qgb2YgZWxlbWVudHMKK3J1bGUgUGF0aERlY29tcG9zZSAgZGlyCit7CisgICAgbG9jYWwgIHJlc3VsdCA7CisKKyAgICB3aGlsZSAkKGRpcjpEKQorICAgIHsKKyAgICAgICAgaWYgISAkKGRpcjpCUykgeyAgIyBmb3Igcm9vdGVkIHBhdGhzIGxpa2UgIi9mb28iCisgICAgICAgICAgICBicmVhayA7CisgICAgICAgIH0KKyAgICAgICAgcmVzdWx0ID0gJChkaXI6QlMpICQocmVzdWx0KSA7CisgICAgICAgIGRpciAgICA9ICQoZGlyOkQpIDsKKyAgICB9CisgICAgcmVzdWx0ID0gJChkaXIpICQocmVzdWx0KSA7CisgICAgcmV0dXJuICQocmVzdWx0KSA7Cit9CisKKworIyBzaW1wbHkgYSBmaWxlIHBhdGgsIGkuZS4gZ2V0IHJpZCBvZiAuIG9yIC4uIHdoZW4gcG9zc2libGUKK3J1bGUgX1BhdGhTaW1wbGlmeSAgZGlyCit7CisgICAgbG9jYWwgIHJlc3VsdCA9IDsKKyAgICBsb2NhbCAgZGlyMiBkIDsKKworICAgIGRpciAgPSBbIFBhdGhEZWNvbXBvc2UgJChkaXIpIF0gOworCisgICAgIyBnZXQgcmlkIG9mIGFueSBzaW5nbGUgZG90CisgICAgZGlyMiA9IDsKKyAgICBmb3IgZCBpbiAkKGRpcikgeworICAgICAgICBpZiAkKGQpID0gIi4iIHsKKyAgICAgICAgICAgIGNvbnRpbnVlIDsKKyAgICAgICAgfQorICAgICAgICBkaXIyICs9ICQoZCkgOworICAgIH0KKworICAgICMgZ2V0IHJpZCBvZiAuLiB3aGVuIHBvc3NpYmxlCisgICAgZm9yIGQgaW4gJChkaXIyKSB7CisgICAgICAgIGlmICQoZCkgPSAiLi4iICYmICQocmVzdWx0KSB7CisgICAgICAgICAgICByZXN1bHQgPSAkKHJlc3VsdFsyLV0pIDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICByZXN1bHQgPSAkKGQpICQocmVzdWx0KSA7CisgICAgfQorCisgICAgIyBub3cgaW52ZXJ0IHRoZSByZXN1bHQKKyAgICByZXN1bHQgPSBbIFJldmVyc2UgJChyZXN1bHQpIF0gOworICAgIGlmICEgJChyZXN1bHQpIHsKKyAgICAgICAgcmVzdWx0ID0gIi4iIDsKKyAgICB9CisgICAgcmV0dXJuICQocmVzdWx0Oko9Ii8iKSA7Cit9CisKKworcnVsZSBQYXRoU2ltcGxpZnkgIGRpcnMKK3sKKyAgICBsb2NhbCByZXN1bHQgOworICAgIGxvY2FsIGQgOworICAgIGZvciBkIGluICQoZGlycykgeworICAgICAgICByZXN1bHQgKz0gWyBfUGF0aFNpbXBsaWZ5ICQoZCkgXSA7CisgICAgfQorICAgIHJldHVybiAkKHJlc3VsdCkgOworfQorCisKKyMgcmV0cmlldmUgbGlzdCBvZiBzdWJkaXJlY3RvcmllcworcnVsZSBMaXN0U3ViRGlycyAgcGF0aHMKK3sKKyAgICBsb2NhbCAgcmVzdWx0ICA9IDsKKyAgICBsb2NhbCAgZW50cnkgOworICAgIGZvciBlbnRyeSBpbiBbIEdsb2IgJChwYXRocykgOiAqIF0geworICAgICAgICBpZiAhICQoZW50cnk6UykgeworICAgICAgICAgICAgcmVzdWx0ICs9ICQoZW50cnkpIDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gWyBQYXRoU2ltcGxpZnkgJChyZXN1bHQpIF0gOworfQorCisKKyMgcmV0cmlldmUgbGlzdCBvZiBzb3VyY2VzIGluIGEgZ2l2ZW4gZGlyZWN0b3J5CitydWxlIExpc3RTb3VyY2VzICBwYXRoCit7CisgICAgcmV0dXJuIFsgR2xvYiAkKHBhdGgpIDogKi5TICouYyBdIDsKK30KKworCisjIGZpbmQgdGhlIHByZWJ1aWx0IGRpcmVjdG9yeQorIworaWYgISAkKFRPUCkgeworICAgIEVjaG8gIlBsZWFzZSBkZWZpbmUgVE9QIGFzIHRoZSByb290IG9mIHlvdXIgZGV2aWNlIGJ1aWxkIHRyZWUiIDsKKyAgICBFeGl0IDsKK30KKworRGVidWcgIk9TIGlzIiAkKE9TKSA7CitEZWJ1ZyAiQ1BVIGlzIiAkKENQVSkgOworCitpZiAkKE9TKSA9IExJTlVYCit7CisgICAgUFJFQlVJTFQgPSAkKFRPUCkvcHJlYnVpbHQvTGludXggOworfQorZWxzZSBpZiAkKE9TKSA9IE1BQ09TWAoreworICAgIHN3aXRjaCAkKENQVSkgeworICAgICAgICBjYXNlIGkzODYgOiBQUkVCVUlMVCA9ICQoVE9QKS9wcmVidWlsdC9kYXJ3aW4teDg2IDsgYnJlYWsgOworICAgICAgICBjYXNlIHBwYyAgOiBQUkVCVUlMVCA9ICQoVE9QKS9wcmVidWlsdC9kYXJ3aW4tcHBjIDsgYnJlYWsgOworICAgICAgICBjYXNlICogICAgOiBFY2hvICJ1bnN1cHBvcnRlZCBDUFUiICIkKENQVSkgISEiIDsKKyAgICAgICAgICAgICAgICAgICAgRWNobyAiUGxlYXNlIGNvbnRhY3QgZGlnaXRAZ29vZ2xlLmNvbSBmb3IgaGVscCIgOworICAgICAgICAgICAgICAgICAgICBFeGl0IDsKKyAgICB9Cit9CitlbHNlCit7CisgICAgRWNobyAiVW5zdXBwb3J0ZWQgb3BlcmF0aW5nIHN5c3RlbSIgJChPUykgOworICAgIEVjaG8gIlBsZWFzZSBjb250YWN0IGRpZ2l0QGdvb2dsZS5jb20gZm9yIGhlbHAiIDsKKyAgICBFeGl0IDsKK30KKworRGVidWcgIlRPUCBpcyIgJChUT1ApIDsKK0RlYnVnICJQUkVCVUlMVCBpcyIgJChQUkVCVUlMVCkgOworCisKKyMgY2hlY2sgYXJjaGl0ZWN0dXJlcyBhbmQgc2V0dXAgdG9vbGNoYWluIHZhcmlhYmxlcworIworU1VQUE9SVEVEX0FSQ0hTID0geDg2IGFybSA7CisKK0FSQ0ggPz0gJChTVVBQT1JURURfQVJDSFMpIDsKKworaWYgISAkKEFSQ0gpIGluICQoU1VQUE9SVEVEX0FSQ0hTKSB7CisgICAgRWNobyAiVGhlIHZhcmlhYmxlIEFSQ0ggY29udGFpbnMgYW4gdW5zdXBwb3J0ZWQgdmFsdWUsIHVzZSBvbmUgb3IgbW9yZSBvZiB0aGVzZSBpbnN0ZWFkIiA7CisgICAgRWNobyAic2VwYXJhdGVkIGJ5IHNwYWNlczoiICQoU1VQUE9SVEVEX0FSQ0hTKSA7CisgICAgRXhpdCA7Cit9CisKK3g4Nl9UT09MU0VUX1BSRUZJWCA/PSAiIiA7Cithcm1fVE9PTFNFVF9QUkVGSVggPz0gJChUT1ApL3ByZWJ1aWx0L0xpbnV4L3Rvb2xjaGFpbi00LjEuMS9iaW4vYXJtLWVsZi0gOworCitmb3IgYXJjaCBpbiAkKEFSQ0gpIHsKKyAgICBDQ18kKGFyY2gpICA9ICQoJChhcmNoKV9UT09MU0VUX1BSRUZJWClnY2MgOworICAgIEMrK18kKGFyY2gpID0gJCgkKGFyY2gpX1RPT0xTRVRfUFJFRklYKWcrKyA7CisgICAgQVJfJChhcmNoKSAgPSAkKCQoYXJjaClfVE9PTFNFVF9QUkVGSVgpYXIgOworfQorCisKKyMgdGhlIGxpc3Qgb2YgYXJjaC1pbmRlcGVuZGVudCBzb3VyY2Ugc3ViZGlyZWN0b3JpZXMKK0JJT05JQ19TUkNfU1VCRElSUyA9IHN0cmluZyA7CitCSU9OSUNfeDg2X1NVQkRJUlMgPSA7CitCSU9OSUNfYXJtX1NVQkRJUlMgPSA7CisKK0NGTEFHUyAgID0gLU8wIC1nIC1XIDsKKworCisKKyMgZmluZCBzb3VyY2VzIGluIGEgZ2l2ZW4gbGlzdCBvZiBzdWJkaXJlY3RvcmllcworcnVsZSBGaW5kU291cmNlcyAgZGlycworeworICAgIGxvY2FsIGRpciA7CisKKyAgICBmb3IgZGlyIGluICQoZGlycykKKyAgICB7CisgICAgICAgIGxvY2FsIExPQ0FMX1NSQyBOT19MT0NBTF9TUkMgOworCisgICAgICAgIGlmIFsgR2xvYiAkKGRpcikgOiBydWxlcy5qYW0gXSB7CisgICAgICAgICAgICBpbmNsdWRlICQoZGlyKS9ydWxlcy5qYW0gOworICAgICAgICAgICAgaWYgJChMT0NBTF9TUkMpIHsKKyAgICAgICAgICAgICAgICBfc291cmNlcyA9ICQoTE9DQUxfU1JDKSA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBfc291cmNlcyA9IFsgR2xvYiAkKGRpcikgOiAqLlMgKi5jIF0gOworICAgICAgICAgICAgICAgIF9zb3VyY2VzID0gJChfc291cmNlczpCUykgOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgJChOT19MT0NBTF9TUkMpIHsKKyAgICAgICAgICAgICAgICBfc291cmNlcyA9IFsgRmlsdGVyICQoX3NvdXJjZXMpIDogJChOT19MT0NBTF9TUkMpIF0gOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc291cmNlcyArPSAkKGRpcikvJChfc291cmNlcykgOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNvdXJjZXMgKz0gWyBMaXN0U291cmNlcyAkKGRpcikgXSA7CisgICAgfQorfQorCisjIENvbXBpbGUgYSBnaXZlbiBvYmplY3QgZmlsZSBmcm9tIGEgc291cmNlCitydWxlIENvbXBpbGUgIG9iamVjdCA6IHNvdXJjZQoreworICAgIERlcGVuZHMgJChvYmplY3QpIDogJChzb3VyY2UpIDsKKyAgICBEZXBlbmRzIGJpb25pYyA6ICQob2JqZWN0KSA7CisgICAgQ2xlYW4gY2xlYW4gOiAkKG9iamVjdCkgOworCisgICAgTWFrZUxvY2F0ZSAkKG9iamVjdCkgOiAkKE9VVCkgOworCisKKyAgICBDQyBvbiAkKG9iamVjdCkgICAgICAgPSAkKENDXyQoYXJjaCkpIDsKKyAgICBDRkxBR1Mgb24gJChvYmplY3QpICAgPSAkKENGTEFHUykgOworICAgIElOQ0xVREVTIG9uICQob2JqZWN0KSA9ICQoSU5DTFVERVMpIDsKKyAgICBERUZJTkVTIG9uICQob2JqZWN0KSAgPSAkKERFRklORVMpIDsKKworICAgIEhEUlJVTEUgb24gJCg+KSA9IEhkclJ1bGUgOworICAgIEhEUlNDQU4gb24gJCg+KSA9ICQoSERSUEFUVEVSTikgOworICAgIEhEUlNFQVJDSCBvbiAkKD4pID0gJChJTkNMVURFUykgOworICAgIEhEUkdSSVNUIG9uICQoPikgPSAkKEhEUkdSSVNUKSA7Cit9CisKKworYWN0aW9ucyBDb21waWxlCit7CisgICAgJChDQykgLWMgLW8gJCgxKSAkKENGTEFHUykgLUkkKElOQ0xVREVTKSAtRCQoREVGSU5FUykgJCgyKQorfQorCisKK3J1bGUgUm1UZW1wcworeworICAgIFRlbXBvcmFyeSAkKDIpIDsKK30KKworYWN0aW9ucyBxdWlldGx5IHVwZGF0ZWQgcGllY2VtZWFsIHRvZ2V0aGVyIFJtVGVtcHMKK3sKKyAgICBybSAtZiAkKDIpCit9CisKK2FjdGlvbnMgQXJjaGl2ZQoreworICAgICQoQVIpIHJ1ICQoMSkgJCgyKQorfQorCitydWxlIExpYnJhcnkgIGxpYnJhcnkgOiBvYmplY3RzCit7CisgICAgbG9jYWwgIG9iaiA7CisKKyAgICBpZiAhICQobGlicmFyeTpTKSB7CisgICAgICAgIGxpYnJhcnkgPSAkKGxpYnJhcnk6Uz0uYSkgOworICAgIH0KKyAgICBsaWJyYXJ5ID0gJChsaWJyYXJ5Okc9PCQoYXJjaCk+KSA7CisKKyAgICBEZXBlbmRzIGFsbCA6ICQobGlicmFyeSkgOworCisgICAgaWYgISAkKGxpYnJhcnk6RCkgeworICAgICAgICBNYWtlTG9jYXRlICQobGlicmFyeSkgJChsaWJyYXJ5KSgkKG9iamVjdHM6QlMpKSA6ICQoT1VUKSA7CisgICAgfQorCisgICAgRGVwZW5kcyAkKGxpYnJhcnkpIDogJChsaWJyYXJ5KSgkKG9iamVjdHM6QlMpKSA7CisgICAgZm9yIG9iaiBpbiAkKG9iamVjdHMpIHsKKyAgICAgICAgRGVwZW5kcyAkKGxpYnJhcnkpKCQob2JqOkJTKSkgOiAkKG9iaikgOworICAgIH0KKworICAgIENsZWFuIGNsZWFuIDogJChsaWJyYXJ5KSA7CisKKyAgICBBUiBvbiAkKGxpYnJhcnkpID0gJChBUl8kKGFyY2gpKSA7CisgICAgQXJjaGl2ZSAkKGxpYnJhcnkpIDogJChvYmplY3RzKSA7CisKKyAgICBSbVRlbXBzICQobGlicmFyeSkgOiAkKG9iamVjdHMpIDsKK30KKworCitydWxlICBQcm9jZXNzRGlyCit7CisgICAgbG9jYWwgQ0ZMQUdTICAgPSAkKENGTEFHUykgOworICAgIGxvY2FsIERFRklORVMgID0gJChERUZJTkVTKSA7CisgICAgbG9jYWwgSU5DTFVERVMgPSAkKElOQ0xVREVTKSA7CisgICAgbG9jYWwgbG9jYWxfcnVsZXMgPSBbIEdsb2IgJCgxKSA6IHJ1bGVzLmphbSBdIDsKKyAgICBsb2NhbCBzb3VyY2Ugc291cmNlcyA7CisKKyAgICBpZiAkKGxvY2FsX3J1bGVzKSB7CisgICAgICAgIGxvY2FsIExPQ0FMX0NGTEFHUyBMT0NBTF9ERUZJTkVTIExPQ0FMX0lOQ0xVREVTIExPQ0FMX1NSQyBOT19MT0NBTF9TUkMgOworCisgICAgICAgIGluY2x1ZGUgJChsb2NhbF9ydWxlcykgOworICAgICAgICBDRkxBR1MgICArPSAkKExPQ0FMX0NGTEFHUykgOworICAgICAgICBERUZJTkVTICArPSAkKExPQ0FMX0RFRklORVMpIDsKKyAgICAgICAgSU5DTFVERVMgKz0gJChMT0NBTF9JTkNMVURFUykgOworCisgICAgICAgIGlmICQoTE9DQUxfU1JDKSB7CisgICAgICAgICAgICBzb3VyY2VzID0gJChMT0NBTF9TUkMpIDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHNvdXJjZXMgPSBbIEdsb2IgJCgxKSA6ICouUyAqLmMgXSA7CisgICAgICAgICAgICBzb3VyY2VzID0gJChzb3VyY2VzOkJTKSA7CisgICAgICAgIH0KKworICAgICAgICBpZiAkKE5PX0xPQ0FMX1NSQykgeworICAgICAgICAgICAgc291cmNlcyA9IFsgRmlsdGVyICQoc291cmNlcykgOiAkKE5PX0xPQ0FMX1NSQykgXSA7CisgICAgICAgIH0KKworICAgICAgICBzb3VyY2VzID0gJCgxKS8kKHNvdXJjZXMpIDsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBzb3VyY2VzID0gWyBHbG9iICQoMSkgOiAqLlMgKi5jIF0gOworCisgICAgZm9yIHNvdXJjZSBpbiAkKHNvdXJjZXMpIHsKKyAgICAgICAgbG9jYWwgbmFtZSA9ICQoc291cmNlOkIpIDsKKworICAgICAgICBpZiAkKHNvdXJjZTpTKSA9ICIuUyIgeworICAgICAgICAgICAgIyByZWNvcmQgdGhlIGxpc3Qgb2YgYXNzZW1ibGVyIHNvdXJjZXMKKyAgICAgICAgICAgIEFTU0VNQkxFUl9TT1VSQ0VTICs9ICQobmFtZSkgOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgJChzb3VyY2U6UykgPSAiLmMiICYmICQobmFtZSkgaW4gJChBU1NFTUJMRVJfU09VUkNFUykgeworICAgICAgICAgICAgIyBza2lwIEMgc291cmNlIGZpbGUgaWYgY29ycmVzcG9uZGluZyBhc3NlbWJsZXIgZXhpc3RzCisgICAgICAgICAgICBjb250aW51ZSA7CisgICAgICAgIH0KKworICAgICAgICBvYmpuYW1lID0gPCQoYXJjaCk+JChuYW1lKS5vICA7CisKKyAgICAgICAgQ29tcGlsZSAkKG9iam5hbWUpIDogJChzb3VyY2UpIDsKKyAgICAgICAgQUxMX09CSkVDVFMgKz0gJChvYmpuYW1lKSA7CisgICAgfQorfQorCitydWxlIFByb2Nlc3NEaXJzCit7CisgICAgbG9jYWwgIGRpciA7CisgICAgZm9yIGRpciBpbiAkKDEpIHsKKyAgICAgICAgUHJvY2Vzc0RpciAkKGRpcikgOworICAgIH0KK30KKworSU5DTFVERVNfeDg2ID0gL3Vzci9zcmMvbGludXgvaW5jbHVkZSA7CisKK0lOQ0xVREVTX2FybSA9IC4uL2tlcm5lbF9oZWFkZXJzCisgICAgICAgICAgICAgICBpbmNsdWRlL2FyY2gvYXJtCisgICAgICAgICAgICAgICBpbmNsdWRlL2JpdHMzMgorICAgICAgICAgICAgICAgOworCitJTkNMVURFUyA9IGluY2x1ZGUgc3RkaW8gc3RyaW5nIHN0ZGxpYiAuCisgICAgICAgICAgIC4uL21zdW4vaW5jbHVkZQorICAgICAgICAgICA7CisKK0RFRklORVMgID0gQU5EUk9JRF9DSEFOR0VTCisgICAgICAgICAgIFVTRV9MT0NLUworICAgICAgICAgICBSRUFMTE9DX1pFUk9fQllURVNfRlJFRVMKKyAgICAgICAgICAgX0xJQkM9MQorICAgICAgICAgICBTT0ZURkxPQVQKKyAgICAgICAgICAgRkxPQVRJTkdfUE9JTlQKKyAgICAgICAgICAgTkVFRF9QU0VMRUNUPTEKKyAgICAgICAgICAgQU5EUk9JRAorICAgICAgICAgICA7CisKK0NGTEFHU194ODYgPSA7CisKKworZm9yIGFyY2ggaW4gJChBUkNIKQoreworICAgIGxvY2FsIEFSQ0hfRElSID0gJChCSU9OSUNfVE9QKS9hcmNoLSQoYXJjaCkgOworICAgIGxvY2FsIElOQ0xVREVTID0gJChJTkNMVURFU18kKGFyY2gpKSAkKEFSQ0hfRElSKS9pbmNsdWRlICQoSU5DTFVERVMpIDsKKyAgICBsb2NhbCBERUZJTkVTICA9ICQoREVGSU5FU18kKGFyY2gpKSAkKERFRklORVMpIEFSQ0g9JChhcmNoKSAgOworICAgIGxvY2FsIENGTEFHUyAgID0gJChDRkxBR1MpICQoQ0ZMQUdTXyQoYXJjaCkpIDsKKyAgICBsb2NhbCBPVVQgICAgICA9IG91dC8kKGFyY2gpIDsKKyAgICBsb2NhbCBBU1NFTUJMRVJfU09VUkNFUyBBTExfT0JKRUNUUyA7CisKKyAgICBQcm9jZXNzRGlycyBbIExpc3RTdWJEaXJzICQoQVJDSF9ESVIpIF0gOworICAgIFByb2Nlc3NEaXJzIHN0ZGxpYiBzdGRpbyB1bmlzdGQgc3RyaW5nIHR6Y29kZSBpbmV0IDsKKyAgICBQcm9jZXNzRGlycyBbIExpc3RTdWJEaXJzIG5ldGJzZCBdIDsKKyAgICBQcm9jZXNzRGlycyBiaW9uaWMgOworCisgICAgTGlicmFyeSBiaW9uaWMgOiAkKEFMTF9PQkpFQ1RTKSA7Cit9CisKK0JJT05JQ19TRUFSQ0ggPSAkKEJJT05JQ19UT1ApL2luY2x1ZGUgOworCisKKworIyAvSGRyUnVsZSBzb3VyY2UgOiBoZWFkZXJzIDsKKyMKKyMgQXJyYW5nZXMgdGhlIHByb3BlciBkZXBlbmRlbmNpZXMgd2hlbiB0aGUgZmlsZSBfc291cmNlXyBpbmNsdWRlcyB0aGUgZmlsZXMKKyMgX2hlYWRlcnNfIHRocm91Z2ggdGhlICNpbmNsdWRlIEMgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZQorIworIyB0aGlzIHJ1bGUgaXMgbm90IGludGVuZGVuZCB0byBiZSBjYWxsZWQgZXhwbGljaXRlbHkuIEl0IGlzIGNhbGxlZAorIyBhdXRvbWF0aWNhbGx5IGR1cmluZyBoZWFkZXIgc2Nhbm5pbmcgb24gc291cmNlcyBoYW5kbGVkIGJ5IHRoZSBAT2JqZWN0CisjIHJ1bGUgKGUuZy4gc291cmNlcyBpbiBATWFpbiBvciBATGlicmFyeSBydWxlcykKKyMKK3J1bGUgSGRyUnVsZQoreworICAgICMgSGRyUnVsZSBzb3VyY2UgOiBoZWFkZXJzIDsKKworICAgICMgTi5CLiAgVGhpcyBydWxlIGlzIGNhbGxlZCBkdXJpbmcgYmluZGluZywgcG90ZW50aWFsbHkgYWZ0ZXIKKyAgICAjIHRoZSBmYXRlIG9mIG1hbnkgdGFyZ2V0cyBoYXMgYmVlbiBkZXRlcm1pbmVkLCBhbmQgbXVzdCBiZQorICAgICMgdXNlZCB3aXRoIGNhdXRpb246IGRvbid0IGFkZCBkZXBlbmRlbmNpZXMgdG8gdW5yZWxhdGVkCisgICAgIyB0YXJnZXRzLCBhbmQgZG9uJ3Qgc2V0IHZhcmlhYmxlcyBvbiAkKDwpLgorCisgICAgIyBUZWxsIEphbSB0aGF0IGFueXRoaW5nIGRlcGVuZGluZyBvbiAkKDwpIGFsc28gZGVwZW5kcyBvbiAkKD4pLAorICAgICMgc2V0IFNFQVJDSCBzbyBKYW0gY2FuIGZpbmQgdGhlIGhlYWRlcnMsIGJ1dCB0aGVuIHNheSB3ZSBkb24ndAorICAgICMgY2FyZSBpZiB3ZSBjYW4ndCBhY3R1YWxseSBmaW5kIHRoZSBoZWFkZXJzICh0aGV5IG1heSBoYXZlIGJlZW4KKyAgICAjIHdpdGhpbiBpZmRlZnMpLAorCisgICAgbG9jYWwgcyA9ICQoPjpHPSQoSERSR1JJU1Q6RSkpIDsKKworICAgIEluY2x1ZGVzICQoPCkgOiAkKHMpIDsKKyAgICBTRUFSQ0ggb24gJChzKSA9ICQoSERSU0VBUkNIKSA7CisgICAgTm9DYXJlICQocykgOworCisgICAgIyBQcm9wYWdhdGUgb24gJCg8KSB0byAkKD4pCisKKyAgICBIRFJTRUFSQ0ggb24gJChzKSA9ICQoSERSU0VBUkNIKSA7CisgICAgSERSU0NBTiBvbiAkKHMpID0gJChIRFJTQ0FOKSA7CisgICAgSERSUlVMRSBvbiAkKHMpID0gJChIRFJSVUxFKSA7CisgICAgSERSR1JJU1Qgb24gJChzKSA9ICQoSERSR1JJU1QpIDsKK30KKworCmRpZmYgLS1naXQgYS9saWJjL01PRFVMRV9MSUNFTlNFX0JTRCBiL2xpYmMvTU9EVUxFX0xJQ0VOU0VfQlNECm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL01PRFVMRV9MSUNFTlNFX0JTRApkaWZmIC0tZ2l0IGEvbGliYy9OT1RJQ0UgYi9saWJjL05PVElDRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODA3NmI1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9OT1RJQ0UKQEAgLTAsMCArMSwzODIgQEAKKworQ29weXJpZ2h0IChjKSAyMDA1LTIwMDgsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgCisgICBkaXN0cmlidXRpb24uCisgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3Qgbm9yIHRoZSBuYW1lcworICAgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbgorICAgcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCitGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKK0JVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIAorQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCitPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCisKK0NvcHlyaWdodCAoYykgMjAwNCBieSBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0sIEluYy4gKCJJU0MiKQorQ29weXJpZ2h0IChjKSAxOTk1LDE5OTYsMTk5OSBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKK3B1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKK2NvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCitXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgorQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCitBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAorT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKworCitQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTUgYnkgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcywgSW5jLgorCitJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzLCBJbmMuIChoZXJlaW5hZnRlciBjYWxsZWQgSUJNKSBncmFudHMKK3Blcm1pc3Npb24gdW5kZXIgaXRzIGNvcHlyaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKK1NvZnR3YXJlIHdpdGggb3Igd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kCithbGwgcGFyYWdyYXBocyBvZiB0aGlzIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgdGhlIG5hbWUgb2YgSUJNCitub3QgYmUgdXNlZCBpbiBjb25uZWN0aW9uIHdpdGggdGhlIG1hcmtldGluZyBvZiBhbnkgcHJvZHVjdCBpbmNvcnBvcmF0aW5nCit0aGUgU29mdHdhcmUgb3IgbW9kaWZpY2F0aW9ucyB0aGVyZW9mLCB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yCitwZXJtaXNzaW9uLgorCitUbyB0aGUgZXh0ZW50IGl0IGhhcyBhIHJpZ2h0IHRvIGRvIHNvLCBJQk0gZ3JhbnRzIGFuIGltbXVuaXR5IGZyb20gc3VpdAordW5kZXIgaXRzIHBhdGVudHMsIGlmIGFueSwgZm9yIHRoZSB1c2UsIHNhbGUgb3IgbWFudWZhY3R1cmUgb2YgcHJvZHVjdHMgdG8KK3RoZSBleHRlbnQgdGhhdCBzdWNoIHByb2R1Y3RzIGFyZSB1c2VkIGZvciBwZXJmb3JtaW5nIERvbWFpbiBOYW1lIFN5c3RlbQorZHluYW1pYyB1cGRhdGVzIGluIFRDUC9JUCBuZXR3b3JrcyBieSBtZWFucyBvZiB0aGUgU29mdHdhcmUuICBObyBpbW11bml0eSBpcworZ3JhbnRlZCBmb3IgYW55IHByb2R1Y3QgcGVyIHNlIG9yIGZvciBhbnkgb3RoZXIgZnVuY3Rpb24gb2YgYW55IHByb2R1Y3QuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBBTkQgSUJNIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUywKK0lOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQQorUEFSVElDVUxBUiBQVVJQT1NFLiAgSU4gTk8gRVZFTlQgU0hBTEwgSUJNIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsCitESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBBUklTSU5HCitPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTgorSUYgSUJNIElTIEFQUFJJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKK0NvcHlyaWdodCAoYykgMTk5NywgMTk5OCwgMTk5OSwgMjAwNCBUaGUgTmV0QlNEIEZvdW5kYXRpb24sIEluYy4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1RoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gVGhlIE5ldEJTRCBGb3VuZGF0aW9uCitieSBMdWtlIE1ld2J1cm47IGFuZCBieSBKYXNvbiBSLiBUaG9ycGUuCitUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIFRoZSBOZXRCU0QgRm91bmRhdGlvbgorYnkgQ2hyaXN0b3MgWm91bGFzLgorCitDb3B5cmlnaHQgKGMpIDE5OTMgQ2hyaXN0b3BoZXIgRy4gRGVtZXRyaW91CitDb3B5cmlnaHQgKGMpIDE5ODMsIDE5ODUsIDE5OTMgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCitDb3B5cmlnaHQgKGMpIDIwMDAgQmVuIEhhcnJpcy4KK0NvcHlyaWdodCAoQykgMTk5NSwgMTk5NiwgMTk5NywgYW5kIDE5OTggV0lERSBQcm9qZWN0LgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiszLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUFJPSkVDVCBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKworQ29weXJpZ2h0IChjKSAyMDAzIE5ldHdvcmtzIEFzc29jaWF0ZXMgVGVjaG5vbG9neSwgSW5jLgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUG9ydGlvbnMgb2YgdGhpcyBzb2Z0d2FyZSB3ZXJlIGRldmVsb3BlZCBmb3IgdGhlIEZyZWVCU0QgUHJvamVjdCBieQorSmFjcXVlcyBBLiBWaWRyaW5lLCBTYWZlcG9ydCBOZXR3b3JrIFNlcnZpY2VzLCBhbmQgTmV0d29yaworQXNzb2NpYXRlcyBMYWJvcmF0b3JpZXMsIHRoZSBTZWN1cml0eSBSZXNlYXJjaCBEaXZpc2lvbiBvZiBOZXR3b3JrCitBc3NvY2lhdGVzLCBJbmMuIHVuZGVyIERBUlBBL1NQQVdBUiBjb250cmFjdCBONjYwMDEtMDEtQy04MDM1CisoIkNCT1NTIiksIGFzIHBhcnQgb2YgdGhlIERBUlBBIENIQVRTIHJlc2VhcmNoIHByb2dyYW0uCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIAorU1VDSCBEQU1BR0UuCisKK1BvcnRpb25zIENvcHlyaWdodCAoYykgMTk5MyBieSBEaWdpdGFsIEVxdWlwbWVudCBDb3Jwb3JhdGlvbi4KKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CitwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCitjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLCBhbmQgdGhhdAordGhlIG5hbWUgb2YgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24gbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IKK3B1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgZG9jdW1lbnQgb3Igc29mdHdhcmUgd2l0aG91dAorc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIERJR0lUQUwgRVFVSVBNRU5UIENPUlAuIERJU0NMQUlNUyBBTEwKK1dBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMKK09GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gICBJTiBOTyBFVkVOVCBTSEFMTCBESUdJVEFMIEVRVUlQTUVOVAorQ09SUE9SQVRJT04gQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SCitQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUworQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTCitTT0ZUV0FSRS4KKworCitDb3B5cmlnaHQgKGMpIDE5OTcgTWFyayBCcmluaWNvbWJlCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICAgICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IE1hcmsgQnJpbmljb21iZQorNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCisKK0NvcHlyaWdodCAoYykgMTk5MyBNYXJ0aW4gQmlyZ21laWVyCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitZb3UgbWF5IHJlZGlzdHJpYnV0ZSB1bm1vZGlmaWVkIG9yIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoaXMgc291cmNlCitjb2RlIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgYW5kIHRoZQorZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIHJldGFpbmVkLgorCitUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGBgYXMgaXMnJywgYW5kIGNvbWVzIHdpdGggbm8gd2FycmFudGllcworb2YgYW55IGtpbmQuIEkgc2hhbGwgaW4gbm8gZXZlbnQgYmUgbGlhYmxlIGZvciBhbnl0aGluZyB0aGF0IGhhcHBlbnMKK3RvIGFueW9uZS9hbnl0aGluZyB3aGVuIHVzaW5nIHRoaXMgc29mdHdhcmUuCisKKworQXJjNCByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBmb3IgT3BlbkJTRC4KK0NvcHlyaWdodCAxOTk2IERhdmlkIE1hemllcmVzIDxkbUBsY3MubWl0LmVkdT4uCisKK01vZGlmaWNhdGlvbiBhbmQgcmVkaXN0cmlidXRpb24gaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMgaXMKK3Blcm1pdHRlZCBwcm92aWRlZCB0aGF0IGR1ZSBjcmVkaXQgaXMgZ2l2ZW4gdG8gdGhlIGF1dGhvciBhbmQgdGhlCitPcGVuQlNEIHByb2plY3QgYnkgbGVhdmluZyB0aGlzIGNvcHlyaWdodCBub3RpY2UgaW50YWN0LgorCisKK0NvcHlyaWdodCAoYykgMTk5OSBLdW5nbGlnYSBUZWtuaXNrYSBIw7Znc2tvbGFuCisoUm95YWwgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksIFN0b2NraG9sbSwgU3dlZGVuKS4gCitBbGwgcmlnaHRzIHJlc2VydmVkLiAKKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIAorYXJlIG1ldDogCisKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKworMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgCisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIAorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisKKzMuIE5laXRoZXIgdGhlIG5hbWUgb2YgS1RIIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUKKyAgIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBLVEggQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKK0VYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKK1BVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEtUSCBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFCitMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCitCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKK1dIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SCitPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCitBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gKi8KKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCitzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQoraXMgcHJlc2VydmVkLgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKK0NvcHlyaWdodCAoYykgMTk5NywgMjAwNSBUb2RkIEMuIE1pbGxlciA8VG9kZC5NaWxsZXJAY291cnRlc2FuLmNvbT4KKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CitwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCitjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKK1dJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCitBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCitXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KK0FDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCitPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorCisKK0NvcHlyaWdodCAoYykgMTk4OSwgMTk5MworICAgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyhjKSBVTklYIFN5c3RlbSBMYWJvcmF0b3JpZXMsIEluYy4KK0FsbCBvciBzb21lIHBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIG1hdGVyaWFsIGxpY2Vuc2VkCit0byB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhIGJ5IEFtZXJpY2FuIFRlbGVwaG9uZSBhbmQgVGVsZWdyYXBoCitDby4gb3IgVW5peCBTeXN0ZW0gTGFib3JhdG9yaWVzLCBJbmMuIGFuZCBhcmUgcmVwcm9kdWNlZCBoZXJlaW4gd2l0aAordGhlIHBlcm1pc3Npb24gb2YgVU5JWCBTeXN0ZW0gTGFib3JhdG9yaWVzLCBJbmMuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCisKKworQ29weXJpZ2h0IChjKSAxOTk1LCAxOTk2IENhcm5lZ2llLU1lbGxvbiBVbml2ZXJzaXR5LgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworQXV0aG9yOiBDaHJpcyBHLiBEZW1ldHJpb3UKKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZAoraXRzIGRvY3VtZW50YXRpb24gaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgYm90aCB0aGUgY29weXJpZ2h0Citub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgb2YgdGhlCitzb2Z0d2FyZSwgZGVyaXZhdGl2ZSB3b3JrcyBvciBtb2RpZmllZCB2ZXJzaW9ucywgYW5kIGFueSBwb3J0aW9ucwordGhlcmVvZiwgYW5kIHRoYXQgYm90aCBub3RpY2VzIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uCisKK0NBUk5FR0lFIE1FTExPTiBBTExPV1MgRlJFRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSBJTiBJVFMgIkFTIElTIgorQ09ORElUSU9OLiAgQ0FSTkVHSUUgTUVMTE9OIERJU0NMQUlNUyBBTlkgTElBQklMSVRZIE9GIEFOWSBLSU5ECitGT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUuCisKK0Nhcm5lZ2llIE1lbGxvbiByZXF1ZXN0cyB1c2VycyBvZiB0aGlzIHNvZnR3YXJlIHRvIHJldHVybiB0bworCisgU29mdHdhcmUgRGlzdHJpYnV0aW9uIENvb3JkaW5hdG9yICBvciAgU29mdHdhcmUuRGlzdHJpYnV0aW9uQENTLkNNVS5FRFUKKyBTY2hvb2wgb2YgQ29tcHV0ZXIgU2NpZW5jZQorIENhcm5lZ2llIE1lbGxvbiBVbml2ZXJzaXR5CisgUGl0dHNidXJnaCBQQSAxNTIxMy0zODkwCisKK2FueSBpbXByb3ZlbWVudHMgb3IgZXh0ZW5zaW9ucyB0aGF0IHRoZXkgbWFrZSBhbmQgZ3JhbnQgQ2FybmVnaWUgdGhlCityaWdodHMgdG8gcmVkaXN0cmlidXRlIHRoZXNlIGNoYW5nZXMuCisKKworQ29weXJpZ2h0IChjKSAxOTk1LCAxOTk2IENhcm5lZ2llLU1lbGxvbiBVbml2ZXJzaXR5LgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworQXV0aG9yOiBDaHJpcyBHLiBEZW1ldHJpb3UKKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZAoraXRzIGRvY3VtZW50YXRpb24gaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgYm90aCB0aGUgY29weXJpZ2h0Citub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgb2YgdGhlCitzb2Z0d2FyZSwgZGVyaXZhdGl2ZSB3b3JrcyBvciBtb2RpZmllZCB2ZXJzaW9ucywgYW5kIGFueSBwb3J0aW9ucwordGhlcmVvZiwgYW5kIHRoYXQgYm90aCBub3RpY2VzIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uCisKK0NBUk5FR0lFIE1FTExPTiBBTExPV1MgRlJFRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSBJTiBJVFMgIkFTIElTIgorQ09ORElUSU9OLiAgQ0FSTkVHSUUgTUVMTE9OIERJU0NMQUlNUyBBTlkgTElBQklMSVRZIE9GIEFOWSBLSU5ECitGT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUuCisKK0Nhcm5lZ2llIE1lbGxvbiByZXF1ZXN0cyB1c2VycyBvZiB0aGlzIHNvZnR3YXJlIHRvIHJldHVybiB0bworCisgU29mdHdhcmUgRGlzdHJpYnV0aW9uIENvb3JkaW5hdG9yICBvciAgU29mdHdhcmUuRGlzdHJpYnV0aW9uQENTLkNNVS5FRFUKKyBTY2hvb2wgb2YgQ29tcHV0ZXIgU2NpZW5jZQorIENhcm5lZ2llIE1lbGxvbiBVbml2ZXJzaXR5CisgUGl0dHNidXJnaCBQQSAxNTIxMy0zODkwCisKK2FueSBpbXByb3ZlbWVudHMgb3IgZXh0ZW5zaW9ucyB0aGF0IHRoZXkgbWFrZSBhbmQgZ3JhbnQgQ2FybmVnaWUgdGhlCityaWdodHMgdG8gcmVkaXN0cmlidXRlIHRoZXNlIGNoYW5nZXMuCisKKworQ29weXJpZ2h0IChjKSAyMDAzIE5ldHdvcmtzIEFzc29jaWF0ZXMgVGVjaG5vbG9neSwgSW5jLgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUG9ydGlvbnMgb2YgdGhpcyBzb2Z0d2FyZSB3ZXJlIGRldmVsb3BlZCBmb3IgdGhlIEZyZWVCU0QgUHJvamVjdCBieQorSmFjcXVlcyBBLiBWaWRyaW5lLCBTYWZlcG9ydCBOZXR3b3JrIFNlcnZpY2VzLCBhbmQgTmV0d29yaworQXNzb2NpYXRlcyBMYWJvcmF0b3JpZXMsIHRoZSBTZWN1cml0eSBSZXNlYXJjaCBEaXZpc2lvbiBvZiBOZXR3b3JrCitBc3NvY2lhdGVzLCBJbmMuIHVuZGVyIERBUlBBL1NQQVdBUiBjb250cmFjdCBONjYwMDEtMDEtQy04MDM1CisoIkNCT1NTIiksIGFzIHBhcnQgb2YgdGhlIERBUlBBIENIQVRTIHJlc2VhcmNoIHByb2dyYW0uCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIAorU1VDSCBEQU1BR0UuCisKKwpkaWZmIC0tZ2l0IGEvbGliYy9SRUFETUUgYi9saWJjL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTI5ZjEyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9SRUFETUUKQEAgLTAsMCArMSw1MyBAQAorV2VsY29tZSB0byBCaW9uaWMsIEFuZHJvaWQgc21hbGwgYW5kIGN1c3RvbSBDIGxpYnJhcnkgZm9yIHRoZSBBbmRyb2lkIHBsYXRmb3JtCisKK0Jpb25pYyBpcyBtYWlubHkgYSBwb3J0IG9mIHRoZSBCU0QgQyBsaWJyYXJ5IHRvIG91ciBMaW51eCBrZXJuZWwgd2l0aCB0aGUKK2ZvbGxvd2luZyBhZGRpdGlvbnMvY2hhbmdlczoKKworLSBubyBzdXBwb3J0IGZvciBsb2NhbGVzCistIG5vIHN1cHBvcnQgZm9yIHdpZGUgY2hhcnMgKGkuZS4gbXVsdGktYnl0ZSBjaGFyYWN0ZXJzKQorLSBpdHMgb3duIHNtYWxsaXNoIGltcGxlbWVudGF0aW9uIG9mIHB0aHJlYWRzIGJhc2VkIG9uIExpbnV4IGZ1dGV4ZXMKKy0gc3VwcG9ydCBmb3IgeDg2LCBBUk0gYW5kIEFSTSB0aHVtYiBDUFUgaW5zdHJ1Y3Rpb24gc2V0cyBhbmQga2VybmVsIGludGVyZmFjZXMKKworQmlvbmljIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBzdGFuZGFyZCAzLWNsYXVzZSBCU0QgTGljZW5zZQorCitCaW9uaWMgZG9lc24ndCB3YW50IHRvIGltcGxlbWVudCBhbGwgZmVhdHVyZXMgb2YgYSB0cmFkaXRpb25hbCBDIGxpYnJhcnksIHdlIG9ubHkKK2FkZCBmZWF0dXJlcyB0byBpdCBhcyB3ZSBuZWVkIHRoZW0sIGFuZCB3ZSB0cnkgdG8ga2VlcCB0aGluZ3MgYXMgc2ltcGxlIGFuZCBzbWFsbAorYXMgcG9zc2libGUuIE91ciBnb2FsIGlzIG5vdCB0byBzdXBwb3J0IHNjYWxpbmcgdG8gdGhvdXNhbmRzIG9mIGNvbmN1cnJlbnQgdGhyZWFkcworb24gbXVsdGktcHJvY2Vzc29ycyBtYWNoaW5lczsgd2UncmUgcnVubmluZyB0aGlzIG9uIGNlbGwtcGhvbmVzLCBkYW1uaXQgISEKKworTm90ZSB0aGF0IEJpb25pYyBkb2Vzbid0IHByb3ZpZGUgYSBsaWJ0aHJlYWRfZGIgb3IgYSBsaWJtIGltcGxlbWVudGF0aW9uLgorCisKK0FkZGluZyBuZXcgc3lzY2FsbHM6Cis9PT09PT09PT09PT09PT09PT09PQorCitCaW9uaWMgcHJvdmlkZXMgdGhlIGdlbnN5c2NhbGxzLnB5IFB5dGhvbiBzY3JpcHQgdG8gYXV0b21hdGljYWxseSBnZW5lcmF0ZSBzeXNjYWxsCitzdHVicyBmcm9tIHRoZSBsaXN0IGRlZmluZWQgaW4gdGhlIGZpbGUgU1lTQ0FMTFMuVFhULiBZb3UgY2FuIHRodXMgYWRkIGEgbmV3IHN5c2NhbGwKK2J5IGRvaW5nIHRoZSBmb2xsb3dpbmc6CisKKy0gZWRpdCBTWVNDQUxMUy5UWFQKKy0gYWRkIGEgbmV3IGxpbmUgZGVzY3JpYmluZyB5b3VyIHN5c2NhbGwsIGl0IHNob3VsZCBsb29rIGxpa2U6CisKKyAgIHJldHVybl90eXBlICBzeXNjYWxsX25hbWUocGFyYW1ldGVycykgICAgc3lzY2FsbF9udW1iZXIKKworLSBpbiB0aGUgZXZlbnQgd2hlcmUgeW91IHdhbnQgdG8gZGlmZmVyZW50aWF0ZSB0aGUgc3lzY2FsbCBmdW5jdGlvbiBmcm9tIGl0cyBlbnRyeSBuYW1lLAorICB1c2UgdGhlIGFsdGVybmF0ZToKKworICAgcmV0dXJuX3R5cGUgIGZ1bmNuYW1lOnN5c2NhbGxfbmFtZShwYXJhbWV0ZXJzKSAgc3lzY2FsbF9udW1iZXIKKworLSBhZGRpdGlvbmFsbHksIGlmIHRoZSBzeXNjYWxsIG51bWJlciBpcyBkaWZmZXJlbnQgYmV0d2VlbiBBUk0gYW5kIHg4NiwgdXNlOgorCisgICByZXR1cm5fdHlwZSAgZnVuY25hbWVbOnN5c2NhbGxfbmFtZV0ocGFyYW1ldGVycykgICBhcm1fbnVtYmVyLHg4Nl9udW1iZXIKKworLSBhIHN5c2NhbGwgbnVtYmVyIGNhbiBiZSAtMSB0byBpbmRpY2F0ZSB0aGF0IHRoZSBzeXNjYWxsIGlzIG5vdCBpbXBsZW1lbnRlZCBvbgorICBhIGdpdmVuIHBsYXRmb3JtLCBmb3IgZXhhbXBsZToKKworICAgdm9pZCAgIF9fc2V0X3Rscyh2b2lkKikgICBhcm1fbnVtYmVyLC0xCisKKwordGhlIGNvbW1lbnRzIGluIFNZU0NBTExTLlRYVCBjb250YWluIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxpbmUgZm9ybWF0CisKK1lvdSBjYW4gYWxzbyB1c2UgdGhlICdjaGVja3N5c2NhbGxzLnB5JyBzY3JpcHQgdG8gY2hlY2sgdGhhdCBhbGwgdGhlIHN5c2NhbGwKK251bWJlcnMgeW91IGVudGVyZWQgYXJlIGNvcnJlY3QuIEl0IGRvZXMgc28gYnkgbG9va2luZyBhdCB0aGUgdmFsdWVzIGRlZmluZWQgaW4KK3lvdXIgTGludXgga2VybmVsIGhlYWRlcnMuIFRoZSBzY3JpcHQgaW5kaWNhdGVzIHdoZXJlIHRoZSB2YWx1ZXMgYXJlIGluY29ycmVjdAorYW5kIHdoYXQgaXMgZXhwZWN0ZWQgaW5zdGVhZC4KZGlmZiAtLWdpdCBhL2xpYmMvU1lTQ0FMTFMuVFhUIGIvbGliYy9TWVNDQUxMUy5UWFQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVmMDZkMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvU1lTQ0FMTFMuVFhUCkBAIC0wLDAgKzEsMjQ1IEBACisjIHRoaXMgZmlsZSBpcyB1c2VkIHRvIGxpc3QgYWxsIHRoZSBzeXNjYWxscyB0aGF0IHdpbGwgYmUgc3VwcG9ydGVkIGJ5CisjIHRoZSBCaW9uaWMgQyBsaWJyYXJ5LiBJdCBpcyB1c2VkIHRvIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgdGhlIHN5c2NhbGwKKyMgc3R1YnMsIHRoZSBsaXN0IG9mIHN5c2NhbGwgY29uc3RhbnRzIChfX05SX3h4eHgpIGFuZCB0aGUgY29udGVudCBvZiA8bGludXgvX3VuaXRzZC5oPgorIworIyBlYWNoIG5vbiBjb21tZW50IGxpbmUgaGFzIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgorIworIyByZXR1cm5fdHlwZSAgICBmdW5jX25hbWVbOnN5c2NhbGxfbmFtZVs6Y2FsbF9pZF1dKFtwYXJhbWV0ZXJfbGlzdF0pICAoI3N5c2NhbGxfbnVtYmVyfHN0dWIpCisjCisjIG5vdGUgdGhhdDoKKyMgICAgICAtIHN5c2NhbGxfbmFtZSBjb3JyZXNwb25kIHRvIHRoZSBuYW1lIG9mIHRoZSBzeXNjYWxsLCB3aGljaCBtYXkgZGlmZmVyIGZyb20KKyMgICAgICAgIHRoZSBleHBvcnRlZCBmdW5jdGlvbiBuYW1lIChleGFtcGxlOiB0aGUgZXhpdCBzeXNjYWxsIGlzIGltcGxlbWVudGVkIGJ5IHRoZSBfZXhpdCgpCisjICAgICAgICBmdW5jdGlvbiwgd2hpY2ggaXMgbm90IHRoZSBzYW1lIGFzIHRoZSBzdGFuZGFyZCBDIGV4aXQoKSBmdW5jdGlvbiB3aGljaCBjYWxscyBpdCkKKyMgICAgICAgIFRoZSBjYWxsX2lkIHBhcmFtZXRlciwgZ2l2ZW4gdGhhdCBmdW5jX25hbWUgYW5kIHN5c2NhbGxfbmFtZSBoYXZlCisjICAgICAgICBiZWVuIHByb3ZpZGVkLCBhbGxvd3MgdGhlIHVzZXIgdG8gc3BlY2lmeSBkaXNwYXRjaCBzdHlsZSBzeXNjYWxscy4KKyMgICAgICAgIEZvciBleGFtcGxlLCBzb2NrZXQoKSBzeXNjYWxsIG9uIGkzODYgYWN0dWFsbHkgYmVjb21lczoKKyMgICAgICAgICAgc29ja2V0Y2FsbChfX05SX3NvY2tldCwgMSwgKihyZXN0IG9mIGFyZ3Mgb24gc3RhY2spKS4KKyMKKyMgICAgICAtIGVhY2ggcGFyYW1ldGVyIHR5cGUgaXMgYXNzdW1lZCB0byBiZSBzdG9yZWQgb24gMzIgYml0cywgdGhlcmUgaXMgbm8gcGxhbiB0byBzdXBwb3J0CisjICAgICAgICA2NC1iaXQgYXJjaGl0ZWN0dXJlcyBhdCB0aGUgbW9tZW50CisjCisjICAgICAgLSBpdCB0aGVyZSBpcyAic3R1YiIgaW5zdGVhZCBvZiBhIHN5c2NhbGwgbnVtYmVyLCB0aGUgdG9vbCB3aWxsIG5vdCBnZW5lcmF0ZSBhbnkKKyMgICAgICAgIGFzc2VtYmxlciB0ZW1wbGF0ZSBmb3IgdGhlIHN5c2NhbGw7IGl0J3MgdXAgdG8gdGhlIGJpb25pYyBpbXBsZW1lbnRhdGlvbiB0byBwcm92aWRlCisjICAgICAgICBhIHJlbGV2YW50IEMgc3R1YgorIworIyB0aGUgZmlsZSBpcyBwcm9jZXNzZWQgYnkgYSBweXRob24gc2NyaXB0IG5hbWVkIGdlbnN5c2NhbGxzLnB5CisjCisKKyMgcHJvY2VzcyBtYW5hZ2VtZW50Cit2b2lkICAgIF9leGl0OmV4aXRfZ3JvdXAgKGludCkgICAgICAyNDgsMjUyCit2b2lkICAgIF9leGl0X3RocmVhZDpleGl0IChpbnQpCSAgICAxCitwaWRfdCAgIF9fZm9yazpmb3JrICh2b2lkKSAgICAgICAgICAgMgorcGlkX3QgICBfd2FpdHBpZDp3YWl0cGlkIChwaWRfdCwgaW50KiwgaW50LCBzdHJ1Y3QgcnVzYWdlKikgICAtMSw3CitpbnQgICAgIHdhaXRpZChpbnQsIHBpZF90LCBzdHJ1Y3Qgc2lnaW5mb190KiwgaW50LHZvaWQqKSAgICAgICAgICAyODAsMjg0CitwaWRfdCAgIF9fY2xvbmU6Y2xvbmUoaW50ICgqZm4pKHZvaWQqKSwgdm9pZCAqY2hpbGRfc3RhY2ssIGludCBmbGFncywgdm9pZCAqYXJnKSAgMTIwCitpbnQgICAgIGV4ZWN2ZSAoY29uc3QgY2hhciosIGNoYXIqIGNvbnN0KiwgY2hhciogY29uc3QqKSAgMTEKKworaW50ICAgICBzZXR1aWQ6c2V0dWlkMzIgKHVpZF90KSAgICAyMTMKK3VpZF90ICAgZ2V0dWlkOmdldHVpZDMyICgpICAgICAgICAgMTk5CitnaWRfdCAgIGdldGdpZDpnZXRnaWQzMiAoKSAgICAgICAgIDIwMAordWlkX3QgICBnZXRldWlkOmdldGV1aWQzMiAoKSAgICAgICAyMDEKK2dpZF90ICAgZ2V0ZWdpZDpnZXRlZ2lkMzIgKCkgICAgICAgMjAyCit1aWRfdCAgIGdldHJlc3VpZDpnZXRyZXN1aWQzMiAoKSAgIDIwOQorZ2lkX3QgICBnZXRyZXNnaWQ6Z2V0cmVzZ2lkMzIgKCkgICAyMTEKK3BpZF90ICAgZ2V0dGlkKCkgICAgICAgICAgICAgICAgICAgMjI0CitpbnQgICAgIGdldGdyb3VwczpnZXRncm91cHMzMihpbnQsIGdpZF90ICopICAgIDIwNQorcGlkX3QgICBnZXRwZ2lkKHBpZF90KSAgICAgICAgICAgICAxMzIKK3BpZF90ICAgZ2V0cHBpZCgpCQkgICA2NAorcGlkX3QgICBzZXRzaWQoKSAgICAgICAgICAgICAgICAgICA2NgoraW50ICAgICBzZXRnaWQ6c2V0Z2lkMzIoZ2lkX3QpICAgICAyMTQKK2ludCAgICAgc2V0ZXVpZDpzZXRldWlkMzIodWlkX3QpICAgc3R1YgoraW50ICAgICBzZXRyZXVpZDpzZXRyZXVpZDMyKHVpZF90LCB1aWRfdCkgICAyMDMKK2ludCAgICAgc2V0cmVzdWlkOnNldHJlc3VpZDMyKHVpZF90LCB1aWRfdCwgdWlkX3QpICAgMjA4CitpbnQgICAgIHNldHJlc2dpZDpzZXRyZXNnaWQzMihnaWRfdCwgZ2lkX3QsIGdpZF90KSAgIDIxMAordm9pZCogICBfX2Jyazpicmsodm9pZCopICAgICAgICAgICA0NQorIyBzZWUgY29tbWVudHMgaW4gYXJjaC1hcm0vYmlvbmljL2tpbGwuUyB0byB1bmRlcnN0YW5kIHdoeSB3ZSBkb24ndCBnZW5lcmF0ZSBhbiBBUk0gc3R1YiBmb3Iga2lsbC90a2lsbAoraW50ICAgICBraWxsKHBpZF90LCBpbnQpICAgICAgICAgICAtMSwzNworaW50ICAgICB0a2lsbChwaWRfdCB0aWQsIGludCBzaWcpICAtMSwyMzgKK2ludCAgICAgX19wdHJhY2U6cHRyYWNlKGludCByZXF1ZXN0LCBpbnQgcGlkLCB2b2lkKiBhZGRyLCB2b2lkKiBkYXRhKSAgMjYKK2ludCAgICAgX19zZXRfdGhyZWFkX2FyZWE6c2V0X3RocmVhZF9hcmVhKHZvaWQqICB1c2VyX2Rlc2MpICAtMSwyNDMKK2ludCAgICAgX19nZXRwcmlvcml0eTpnZXRwcmlvcml0eShpbnQsIGludCkgIDk2CitpbnQgICAgIHNldHByaW9yaXR5KGludCwgaW50LCBpbnQpICAgOTcKK2ludCAgICAgc2V0cmxpbWl0KGludCByZXNvdXJjZSwgY29uc3Qgc3RydWN0IHJsaW1pdCAqcmxwKSAgNzUKK2ludCAgICAgZ2V0cmxpbWl0OnVnZXRybGltaXQoaW50IHJlc291cmNlLCBzdHJ1Y3QgcmxpbWl0ICpybHApICAxOTEKK2ludCAgICAgZ2V0cnVzYWdlKGludCB3aG8sIHN0cnVjdCBydXNhZ2UqICByX3VzYWdlKSAgNzcKK2ludCAgICAgc2V0Z3JvdXBzOnNldGdyb3VwczMyKGludCwgY29uc3QgZ2lkX3QgKikgICAyMDYKK3BpZF90ICAgZ2V0cGdycCh2b2lkKSAgc3R1YgoraW50ICAgICBzZXRwZ2lkKHBpZF90LCBwaWRfdCkgIDU3CitwaWRfdCAgIHZmb3JrKHZvaWQpICAxOTAsLTEKK2ludCAgICAgc2V0cmVnaWQ6c2V0cmVnaWQzMihnaWRfdCwgZ2lkX3QpICAyMDQKK2ludCAgICAgY2hyb290KGNvbnN0IGNoYXIgKikgIDYxCitpbnQgICAgIHByY3RsKGludCBvcHRpb24sIHVuc2lnbmVkIGludCBhcmcyLCB1bnNpZ25lZCBpbnQgYXJnMywgdW5zaWduZWQgaW50IGFyZzQsIHVuc2lnbmVkIGludCBhcmc1KSAgMTcyCitpbnQgICAgIGNhcGdldChjYXBfdXNlcl9oZWFkZXJfdCBoZWFkZXIsIGNhcF91c2VyX2RhdGFfdCBkYXRhKSAxODQKK2ludCAgICAgY2Fwc2V0KGNhcF91c2VyX2hlYWRlcl90IGhlYWRlciwgY29uc3QgY2FwX3VzZXJfZGF0YV90IGRhdGEpIDE4NQoraW50ICAgICBhY2N0KGNvbnN0IGNoYXIqICBmaWxlcGF0aCkgIDUxCisKKyMgZmlsZSBkZXNjcmlwdG9ycworc3NpemVfdCAgICAgcmVhZCAoaW50LCB2b2lkKiwgc2l6ZV90KSAgICAgICAgMworc3NpemVfdCAgICAgd3JpdGUgKGludCwgY29uc3Qgdm9pZCosIHNpemVfdCkgICAgICAgNAorc3NpemVfdCAgICAgX19wcmVhZDY0OnByZWFkNjQgKGludCwgdm9pZCAqLCBzaXplX3QsIG9mZl90LCBvZmZfdCkgMTgwCitzc2l6ZV90ICAgICBfX3B3cml0ZTY0OnB3cml0ZTY0IChpbnQsIHZvaWQgKiwgc2l6ZV90LCBvZmZfdCwgb2ZmX3QpIDE4MQoraW50ICAgICAgICAgX19vcGVuOm9wZW4gKGNvbnN0IGNoYXIqLCBpbnQsIG1vZGVfdCkgIDUKK2ludCAgICAgICAgIF9fb3BlbmF0Om9wZW5hdCAoaW50LCBjb25zdCBjaGFyKiwgaW50LCBtb2RlX3QpICAzMjIsMjk1CitpbnQgICAgICAgICBjbG9zZSAoaW50KSAgICAgICAgICAgICAgICAgICAgICA2CitpbnQgICAgICAgICBjcmVhdChjb25zdCBjaGFyKiwgbW9kZV90KSAgICAgICBzdHViCitvZmZfdCAgICAgICBsc2VlayhpbnQsIG9mZl90LCBpbnQpICAgICAgICAgICAxOQoraW50ICAgICAgICAgX19sbHNlZWs6X2xsc2VlayAoaW50LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBsb2ZmX3QqLCBpbnQpICAxNDAKK3BpZF90ICAgICAgIGdldHBpZCAoKSAgICAyMAordm9pZCAqICAgICAgbW1hcCh2b2lkICosIHNpemVfdCwgaW50LCBpbnQsIGludCwgbG9uZykgIHN0dWIKK3ZvaWQgKiAgICAgIF9fbW1hcDI6bW1hcDIodm9pZCosIHNpemVfdCwgaW50LCBpbnQsIGludCwgbG9uZykgICAxOTIKK2ludCAgICAgICAgIG11bm1hcCh2b2lkICosIHNpemVfdCkgIDkxCit2b2lkICogICAgICBtcmVtYXAodm9pZCAqLCBzaXplX3QsIHNpemVfdCwgdW5zaWduZWQgbG9uZykgIDE2MworaW50ICAgICAgICAgbXN5bmMoY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCkgICAgMTQ0CitpbnQgICAgICAgICBtcHJvdGVjdChjb25zdCB2b2lkICosIHNpemVfdCwgaW50KSAgMTI1CitpbnQgICAgICAgICBtYWR2aXNlKGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBpbnQpICAyMjAsMjE5CitpbnQgICAgICAgICBtbG9jayhjb25zdCB2b2lkICphZGRyLCBzaXplX3QgbGVuKSAgICAxNTAKK2ludCAgICAgICAgIG11bmxvY2soY29uc3Qgdm9pZCAqYWRkciwgc2l6ZV90IGxlbikgICAxNTEKK2ludCAgICAgICAgIG1pbmNvcmUodm9pZCogIHN0YXJ0LCBzaXplX3QgIGxlbmd0aCwgdW5zaWduZWQgY2hhciogIHZlYykgICAyMTksMjE4CitpbnQgICAgICAgICBfX2lvY3RsOmlvY3RsKGludCwgaW50LCB2b2lkICopICA1NAoraW50ICAgICAgICAgcmVhZHYoaW50LCBjb25zdCBzdHJ1Y3QgaW92ZWMgKiwgaW50KSAgIDE0NQoraW50ICAgICAgICAgd3JpdGV2KGludCwgY29uc3Qgc3RydWN0IGlvdmVjICosIGludCkgIDE0NgoraW50ICAgICAgICAgX19mY250bDpmY250bChpbnQsIGludCwgdm9pZCopICA1NQoraW50ICAgICAgICAgZmxvY2soaW50LCBpbnQpICAgMTQzCitpbnQgICAgICAgICBmY2htb2QoaW50LCBtb2RlX3QpICA5NAoraW50ICAgICAgICAgZHVwKGludCkgIDQxCitpbnQgICAgICAgICBwaXBlKGludCAqKSAgNDIKK2ludCAgICAgICAgIGR1cDIoaW50LCBpbnQpICAgNjMKK2ludCAgICAgICAgIHNlbGVjdDpfbmV3c2VsZWN0KGludCwgc3RydWN0IGZkX3NldCAqLCBzdHJ1Y3QgZmRfc2V0ICosIHN0cnVjdCBmZF9zZXQgKiwgc3RydWN0IHRpbWV2YWwgKikgIDE0MgoraW50ICAgICAgICAgZnRydW5jYXRlKGludCwgb2ZmX3QpICA5MworaW50ICAgICAgICAgZ2V0ZGVudHM6Z2V0ZGVudHM2NCh1bnNpZ25lZCBpbnQsIHN0cnVjdCBkaXJlbnQgKiwgdW5zaWduZWQgaW50KSAgIDIxNywyMjAKK2ludCAgICAgICAgIGZzeW5jKGludCkgIDExOAoraW50ICAgICAgICAgZmNob3duOmZjaG93bjMyKGludCwgdWlkX3QsIGdpZF90KSAgMjA3Cit2b2lkICAgICAgICBzeW5jKHZvaWQpICAzNgoraW50ICAgICAgICAgX19mY250bDY0OmZjbnRsNjQoaW50LCBpbnQsIHZvaWQgKikgIDIyMQoraW50ICAgICAgICAgZnN0YXRmczpmc3RhdGZzNjQoaW50LCBzaXplX3QsIHN0cnVjdCBzdGF0ZnMgKikgIDI2NywyNjkKK3NzaXplX3QgICAgIHNlbmRmaWxlKGludCBvdXRfZmQsIGludCBpbl9mZCwgb2ZmX3QgKm9mZnNldCwgc2l6ZV90IGNvdW50KSAgMTg3CitpbnQgICAgICAgICBmc3RhdGF0OmZzdGF0YXQ2NChpbnQgZGlyZmQsIGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBzdGF0ICpidWYsIGludCBmbGFncykgICAzMjcsMzAwCitpbnQgICAgICAgICBta2RpcmF0KGludCBkaXJmZCwgY29uc3QgY2hhciAqcGF0aG5hbWUsIG1vZGVfdCBtb2RlKSAgMzIzLDI5NgoraW50ICAgICAgICAgZmNob3duYXQoaW50IGRpcmZkLCBjb25zdCBjaGFyICpwYXRoLCB1aWRfdCBvd25lciwgZ2lkX3QgZ3JvdXAsIGludCBmbGFncykgIDMyNSwyOTgKK2ludCAgICAgICAgIGZjaG1vZGF0KGludCBkaXJmZCwgY29uc3QgY2hhciAqcGF0aCwgbW9kZV90IG1vZGUsIGludCBmbGFncykgIDMzMywzMDYKK2ludCAgICAgICAgIHJlbmFtZWF0KGludCBvbGRkaXJmZCwgY29uc3QgY2hhciAqb2xkcGF0aCwgaW50IG5ld2RpcmZkLCBjb25zdCBjaGFyICpuZXdwYXRoKSAgMzI5LDMwMgorCisjIGZpbGUgc3lzdGVtCitpbnQgICAgIGxpbmsgKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKikgIDkKK2ludCAgICAgdW5saW5rIChjb25zdCBjaGFyKikgICAgICAgICAgICAgMTAKK2ludCAgICAgdW5saW5rYXQgKGludCwgY29uc3QgY2hhciAqLCBpbnQpICAgMzI4LDMwMQoraW50ICAgICBjaGRpciAoY29uc3QgY2hhciopICAgICAgICAgICAgICAxMgoraW50ICAgICBta25vZCAoY29uc3QgY2hhciosIG1vZGVfdCwgZGV2X3QpICAxNAoraW50ICAgICBjaG1vZCAoY29uc3QgY2hhciosbW9kZV90KSAgICAgICAgICAxNQoraW50ICAgICBjaG93bjpjaG93bjMyKGNvbnN0IGNoYXIgKiwgdWlkX3QsIGdpZF90KSAgMjEyCitpbnQgICAgIGxjaG93bjpsY2hvd24zMiAoY29uc3QgY2hhciosIHVpZF90LCBnaWRfdCkgIDE5OAoraW50ICAgICBtb3VudCAoY29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgdW5zaWduZWQgbG9uZywgY29uc3Qgdm9pZCopICAyMQoraW50ICAgICB1bW91bnQoY29uc3QgY2hhciopICBzdHViCitpbnQgICAgIHVtb3VudDIgKGNvbnN0IGNoYXIqLCBpbnQpICA1MgoraW50ICAgICBmc3RhdDpmc3RhdDY0KGludCwgc3RydWN0IHN0YXQqKSAgICAxOTcKK2ludCAgICAgc3RhdDpzdGF0NjQoY29uc3QgY2hhciAqLCBzdHJ1Y3Qgc3RhdCAqKSAgMTk1CitpbnQgICAgIGxzdGF0OmxzdGF0NjQoY29uc3QgY2hhciAqLCBzdHJ1Y3Qgc3RhdCAqKSAgMTk2CitpbnQgICAgIG1rZGlyKGNvbnN0IGNoYXIgKiwgbW9kZV90KSAzOQoraW50ICAgICByZWFkbGluayhjb25zdCBjaGFyICosIGNoYXIgKiwgc2l6ZV90KSAgODUKK2ludCAgICAgcm1kaXIoY29uc3QgY2hhciAqKSAgNDAKK2ludCAgICAgcmVuYW1lKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKSAgMzgKK2ludCAgICAgX19nZXRjd2Q6Z2V0Y3dkKGNoYXIgKiBidWYsIHNpemVfdCBzaXplKSAgMTgzCitpbnQgICAgIGFjY2Vzcyhjb25zdCBjaGFyICosIGludCkgIDMzCitpbnQgICAgIHN5bWxpbmsoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopICA4MworaW50ICAgICBmY2hkaXIoaW50KSAgICAxMzMKK2ludCAgICAgdHJ1bmNhdGUoY29uc3QgY2hhciosIG9mZl90KSAgICA5MgoraW50ICAgICBfX3N0YXRmczY0OnN0YXRmczY0KGNvbnN0IGNoYXIgKiwgc2l6ZV90LCBzdHJ1Y3Qgc3RhdGZzICopICAyNjYsMjY4CisjIHRpbWUKK2ludCAgICAgICAgICAgcGF1c2UgKCkgICAgICAgICAgICAgICAgICAgICAgIDI5CitpbnQgICAgICAgICAgIGdldHRpbWVvZmRheShzdHJ1Y3QgdGltZXZhbCosIHN0cnVjdCB0aW1lem9uZSopICAgICAgIDc4CitpbnQgICAgICAgICAgIHNldHRpbWVvZmRheShjb25zdCBzdHJ1Y3QgdGltZXZhbCosIGNvbnN0IHN0cnVjdCB0aW1lem9uZSopICAgNzkKK2Nsb2NrX3QgICAgICAgdGltZXMoc3RydWN0IHRtcyAqKSAgICAgICA0MworaW50ICAgICAgICAgICBuYW5vc2xlZXAoY29uc3Qgc3RydWN0IHRpbWVzcGVjICosIHN0cnVjdCB0aW1lc3BlYyAqKSAgIDE2MgoraW50ICAgICAgICAgICBjbG9ja19nZXR0aW1lKGNsb2NraWRfdCBjbGtfaWQsIHN0cnVjdCB0aW1lc3BlYyAqdHApICAgIDI2MywyNjUKK2ludCAgICAgICAgICAgY2xvY2tfc2V0dGltZShjbG9ja2lkX3QgY2xrX2lkLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKnRwKSAgMjYyLDI2NAoraW50ICAgICAgICAgICBjbG9ja19nZXRyZXMoY2xvY2tpZF90IGNsa19pZCwgc3RydWN0IHRpbWVzcGVjICpyZXMpICAgMjY0LDI2NgoraW50ICAgICAgICAgICBjbG9ja19uYW5vc2xlZXAoY29uc3Qgc3RydWN0IHRpbWVzcGVjICpyZXEsIHN0cnVjdCB0aW1lc3BlYyAqcmVtKSAgMjY1LDI2NworaW50ICAgICAgICAgICBnZXRpdGltZXIoaW50LCBjb25zdCBzdHJ1Y3QgaXRpbWVydmFsICopICAgMTA1CitpbnQgICAgICAgICAgIHNldGl0aW1lcihpbnQsIGNvbnN0IHN0cnVjdCBpdGltZXJ2YWwgKiwgc3RydWN0IGl0aW1lcnZhbCAqKSAgMTA0CitpbnQgICAgICAgICAgIF9fdGltZXJfY3JlYXRlOnRpbWVyX2NyZWF0ZShjbG9ja2lkX3QgY2xvY2tpZCwgc3RydWN0IHNpZ2V2ZW50ICpldnAsIHRpbWVyX3QgKnRpbWVyaWQpICAgIDI1NywyNTkKK2ludCAgICAgICAgICAgX190aW1lcl9zZXR0aW1lOnRpbWVyX3NldHRpbWUodGltZXJfdCwgaW50LCBjb25zdCBzdHJ1Y3QgaXRpbWVyc3BlYyosIHN0cnVjdCBpdGltZXJzcGVjKikgMjU4LDI2MAoraW50ICAgICAgICAgICBfX3RpbWVyX2dldHRpbWU6dGltZXJfZ2V0dGltZSh0aW1lcl90LCBzdHJ1Y3QgaXRpbWVyc3BlYyopICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNTksMjYxCitpbnQgICAgICAgICAgIF9fdGltZXJfZ2V0b3ZlcnJ1bjp0aW1lcl9nZXRvdmVycnVuKHRpbWVyX3QpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2MCwyNjIKK2ludCAgICAgICAgICAgX190aW1lcl9kZWxldGU6dGltZXJfZGVsZXRlKHRpbWVyX3QpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYxLDI2MworaW50ICAgICAgICAgICB1dGltZXMoY29uc3QgY2hhciosIGNvbnN0IHN0cnVjdCB0aW1ldmFsIHR2cFsyXSkgICAgICAgICAgICAgICAgICAgICAgICAgIDI2OSwgMjcxCisKKyMgc2lnbmFscworaW50ICAgICBzaWdhY3Rpb24oaW50LCBjb25zdCBzdHJ1Y3Qgc2lnYWN0aW9uICosIHN0cnVjdCBzaWdhY3Rpb24gKikgIDY3CitpbnQgICAgIHNpZ3Byb2NtYXNrKGludCwgY29uc3Qgc2lnc2V0X3QgKiwgc2lnc2V0X3QgKikgIDEyNgoraW50ICAgICBfX3NpZ3N1c3BlbmQ6c2lnc3VzcGVuZChpbnQgdW51c2VkMSwgaW50IHVudXNlZDIsIHVuc2lnbmVkIG1hc2spICA3MgoraW50ICAgICBfX3J0X3NpZ2FjdGlvbjpydF9zaWdhY3Rpb24gKGludCBzaWcsIGNvbnN0IHN0cnVjdCBzaWdhY3Rpb24gKmFjdCwgc3RydWN0IHNpZ2FjdGlvbiAqb2FjdCwgc2l6ZV90IHNpZ3NldHNpemUpICAxNzQKK2ludCAgICAgX19ydF9zaWdwcm9jbWFzazpydF9zaWdwcm9jbWFzayAoaW50ICBob3csIGNvbnN0IHNpZ3NldF90ICpzZXQsIHNpZ3NldF90ICpvc2V0LCBzaXplX3Qgc2lnc2V0c2l6ZSkgIDE3NQoraW50ICAgICBfX3J0X3NpZ3RpbWVkd2FpdDpydF9zaWd0aW1lZHdhaXQoY29uc3Qgc2lnc2V0X3QgKnNldCwgc3RydWN0IHNpZ2luZm9fdCAgKmluZm8sIHN0cnVjdCB0aW1lc3BlY190ICAqdGltZW91dCwgc2l6ZV90ICBzaWdzZXRfc2l6ZSkgIDE3NworaW50ICAgICBzaWdwZW5kaW5nKHNpZ3NldF90ICopICA3MworCisjIHNvY2tldHMKK2ludCAgICAgICAgICAgc29ja2V0KGludCwgaW50LCBpbnQpICAgICAgICAgICAgICAyODEsLTEKK2ludCAgICAgICAgICAgc29ja2V0cGFpcihpbnQsIGludCwgaW50LCBpbnQqKSAgICAyODgsLTEKK2ludCAgICAgICAgICAgYmluZChpbnQsIHN0cnVjdCBzb2NrYWRkciAqLCBpbnQpICAyODIsLTEKK2ludCAgICAgICAgICAgY29ubmVjdChpbnQsIHN0cnVjdCBzb2NrYWRkciAqLCBzb2NrbGVuX3QpICAgMjgzLC0xCitpbnQgICAgICAgICAgIGxpc3RlbihpbnQsIGludCkgICAgICAgICAgICAgICAgICAgMjg0LC0xCitpbnQgICAgICAgICAgIGFjY2VwdChpbnQsIHN0cnVjdCBzb2NrYWRkciAqLCBzb2NrbGVuX3QgKikgIDI4NSwtMQoraW50ICAgICAgICAgICBnZXRzb2NrbmFtZShpbnQsIHN0cnVjdCBzb2NrYWRkciAqLCBzb2NrbGVuX3QgKikgIDI4NiwtMQoraW50ICAgICAgICAgICBnZXRwZWVybmFtZShpbnQsIHN0cnVjdCBzb2NrYWRkciAqLCBzb2NrbGVuX3QgKikgIDI4NywtMQoraW50ICAgICAgICAgICBzZW5kdG8oaW50LCBjb25zdCB2b2lkICosIHNpemVfdCwgaW50LCBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKiwgc29ja2xlbl90KSAgMjkwLC0xCitpbnQgICAgICAgICAgIHJlY3Zmcm9tKGludCwgdm9pZCAqLCBzaXplX3QsIHVuc2lnbmVkIGludCwgc3RydWN0IHNvY2thZGRyICosIHNvY2tsZW5fdCAqKSAgMjkyLC0xCitpbnQgICAgICAgICAgIHNodXRkb3duKGludCwgaW50KSAgMjkzLC0xCitpbnQgICAgICAgICAgIHNldHNvY2tvcHQoaW50LCBpbnQsIGludCwgY29uc3Qgdm9pZCAqLCBzb2NrbGVuX3QpICAyOTQsLTEKK2ludCAgICAgICAgICAgZ2V0c29ja29wdChpbnQsIGludCwgaW50LCB2b2lkICosIHNvY2tsZW5fdCAqKSAgICAyOTUsLTEKK2ludCAgICAgICAgICAgc2VuZG1zZyhpbnQsIGNvbnN0IHN0cnVjdCBtc2doZHIgKiwgdW5zaWduZWQgaW50KSAgMjk2LC0xCitpbnQgICAgICAgICAgIHJlY3Ztc2coaW50LCBzdHJ1Y3QgbXNnaGRyICosIHVuc2lnbmVkIGludCkgICAyOTcsLTEKKworIyBzb2NrZXRzIGZvciB4ODYuIFRoZXNlIGFyZSBkb25lIGFzIGFuICJpbmRleGVkIiBjYWxsIHRvIHNvY2tldGNhbGwgc3lzY2FsbC4KK2ludCAgICAgICAgICAgc29ja2V0OnNvY2tldGNhbGw6MSAoaW50LCBpbnQsIGludCkgLTEsMTAyCitpbnQgICAgICAgICAgIGJpbmQ6c29ja2V0Y2FsbDoyIChpbnQsIHN0cnVjdCBzb2NrYWRkciAqLCBpbnQpICAtMSwxMDIKK2ludCAgICAgICAgICAgY29ubmVjdDpzb2NrZXRjYWxsOjMoaW50LCBzdHJ1Y3Qgc29ja2FkZHIgKiwgc29ja2xlbl90KSAgIC0xLDEwMgoraW50ICAgICAgICAgICBsaXN0ZW46c29ja2V0Y2FsbDo0KGludCwgaW50KSAgICAgICAgICAgICAgICAgICAtMSwxMDIKK2ludCAgICAgICAgICAgYWNjZXB0OnNvY2tldGNhbGw6NShpbnQsIHN0cnVjdCBzb2NrYWRkciAqLCBzb2NrbGVuX3QgKikgIC0xLDEwMgoraW50ICAgICAgICAgICBnZXRzb2NrbmFtZTpzb2NrZXRjYWxsOjYoaW50LCBzdHJ1Y3Qgc29ja2FkZHIgKiwgc29ja2xlbl90ICopICAtMSwxMDIKK2ludCAgICAgICAgICAgZ2V0cGVlcm5hbWU6c29ja2V0Y2FsbDo3KGludCwgc3RydWN0IHNvY2thZGRyICosIHNvY2tsZW5fdCAqKSAgLTEsMTAyCitpbnQgICAgICAgICAgIHNvY2tldHBhaXI6c29ja2V0Y2FsbDo4KGludCwgaW50LCBpbnQsIGludCopICAgIC0xLDEwMgoraW50ICAgICAgICAgICBzZW5kdG86c29ja2V0Y2FsbDoxMShpbnQsIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBpbnQsIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqLCBzb2NrbGVuX3QpICAtMSwxMDIKK2ludCAgICAgICAgICAgcmVjdmZyb206c29ja2V0Y2FsbDoxMihpbnQsIHZvaWQgKiwgc2l6ZV90LCB1bnNpZ25lZCBpbnQsIHN0cnVjdCBzb2NrYWRkciAqLCBzb2NrbGVuX3QgKikgIC0xLDEwMgoraW50ICAgICAgICAgICBzaHV0ZG93bjpzb2NrZXRjYWxsOjEzKGludCwgaW50KSAgLTEsMTAyCitpbnQgICAgICAgICAgIHNldHNvY2tvcHQ6c29ja2V0Y2FsbDoxNChpbnQsIGludCwgaW50LCBjb25zdCB2b2lkICosIHNvY2tsZW5fdCkgIC0xLDEwMgoraW50ICAgICAgICAgICBnZXRzb2Nrb3B0OnNvY2tldGNhbGw6MTUoaW50LCBpbnQsIGludCwgdm9pZCAqLCBzb2NrbGVuX3QgKikgICAgLTEsMTAyCitpbnQgICAgICAgICAgIHNlbmRtc2c6c29ja2V0Y2FsbDoxNihpbnQsIGNvbnN0IHN0cnVjdCBtc2doZHIgKiwgdW5zaWduZWQgaW50KSAgLTEsMTAyCitpbnQgICAgICAgICAgIHJlY3Ztc2c6c29ja2V0Y2FsbDoxNyhpbnQsIHN0cnVjdCBtc2doZHIgKiwgdW5zaWduZWQgaW50KSAgIC0xLDEwMgorCisjIHNjaGVkdWxlciAmIHJlYWwtdGltZQoraW50IHNjaGVkX3NldHNjaGVkdWxlcihwaWRfdCBwaWQsIGludCBwb2xpY3ksIGNvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqcGFyYW0pICAxNTYKK2ludCBzY2hlZF9nZXRzY2hlZHVsZXIocGlkX3QgcGlkKSAgMTU3CitpbnQgc2NoZWRfeWllbGQodm9pZCkgIDE1OAoraW50IHNjaGVkX3NldHBhcmFtKHBpZF90IHBpZCwgY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpwYXJhbSkgIDE1NAoraW50IHNjaGVkX2dldHBhcmFtKHBpZF90IHBpZCwgc3RydWN0IHNjaGVkX3BhcmFtICpwYXJhbSkgIDE1NQoraW50IHNjaGVkX2dldF9wcmlvcml0eV9tYXgoaW50IHBvbGljeSkgIDE1OQoraW50IHNjaGVkX2dldF9wcmlvcml0eV9taW4oaW50IHBvbGljeSkgIDE2MAoraW50IHNjaGVkX3JyX2dldF9pbnRlcnZhbChwaWRfdCBwaWQsIHN0cnVjdCB0aW1lc3BlYyAqaW50ZXJ2YWwpICAxNjEKKworIyBvdGhlcgoraW50ICAgICB1bmFtZShzdHJ1Y3QgdXRzbmFtZSAqKSAgMTIyCitwaWRfdCAgIF9fd2FpdDQ6d2FpdDQocGlkX3QgcGlkLCBpbnQgKnN0YXR1cywgaW50IG9wdGlvbnMsIHN0cnVjdCBydXNhZ2UgKnJ1c2FnZSkgICAxMTQKK21vZGVfdCAgdW1hc2sobW9kZV90KSAgNjAKK2ludCAgICAgIF9fcmVib290OnJlYm9vdChpbnQsIGludCwgaW50LCB2b2lkICopICA4OAoraW50ICAgICBfX3N5c2xvZzpzeXNsb2coaW50LCBjaGFyICosIGludCkgIDEwMworaW50ICAgICBpbml0X21vZHVsZSh2b2lkICosIHVuc2lnbmVkIGxvbmcsIGNvbnN0IGNoYXIgKikgIDEyOAoraW50ICAgICBkZWxldGVfbW9kdWxlKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCBpbnQpICAgMTI5CitpbnQgICAgIGtsb2djdGw6c3lzbG9nKGludCwgY2hhciAqLCBpbnQpICAgMTAzCisKKyMgZnV0ZXgKK2ludAlmdXRleCh2b2lkICosIGludCwgaW50LCB2b2lkICosIHZvaWQgKiwgaW50KSAyNDAKKworIyBlcG9sbAoraW50ICAgICBlcG9sbF9jcmVhdGUoaW50IHNpemUpICAgICAyNTAsMjU0CitpbnQgICAgIGVwb2xsX2N0bChpbnQgZXBmZCwgaW50IG9wLCBpbnQgZmQsIHN0cnVjdCBlcG9sbF9ldmVudCAqZXZlbnQpICAgIDI1MSwyNTUKK2ludCAgICAgZXBvbGxfd2FpdChpbnQgZXBmZCwgc3RydWN0IGVwb2xsX2V2ZW50ICpldmVudHMsIGludCBtYXgsIGludCB0aW1lb3V0KSAgIDI1MiwyNTYKKworaW50ICAgICBpbm90aWZ5X2luaXQodm9pZCkgICAgICAzMTYsMjkxCitpbnQgICAgIGlub3RpZnlfYWRkX3dhdGNoKGludCwgY29uc3QgY2hhciAqLCB1bnNpZ25lZCBpbnQpICAzMTcsMjkyCitpbnQgICAgIGlub3RpZnlfcm1fd2F0Y2goaW50LCB1bnNpZ25lZCBpbnQpICAzMTgsMjkzCisKK2ludCAgICAgcG9sbChzdHJ1Y3QgcG9sbGZkICosIHVuc2lnbmVkIGludCwgbG9uZykgIDE2OAorCisjIEFSTS1zcGVjaWZpYyBBUk1fTlJfQkFTRSA9PSAweDBmMDAwMCA9PSA5ODMwNDAKK2ludCAgICAgX19zZXRfdGxzOkFSTV9zZXRfdGxzKHZvaWQqKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDk4MzA0NSwtMQoraW50ICAgICBjYWNoZWZsdXNoOkFSTV9jYWNoZWZsdXNoKGxvbmcgc3RhcnQsIGxvbmcgZW5kLCBsb25nIGZsYWdzKSAgOTgzMDQyLC0xCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2Jpb25pYy9fX2dldF9wYy5TIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvX19nZXRfcGMuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTM3N2M3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvX19nZXRfcGMuUwpAQCAtMCwwICsxLDMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisuZ2xvYmFsIF9fZ2V0X3BjCisKK19fZ2V0X3BjOgorCW1vdiByMCwgcGMKKwlieCBscgorCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2Jpb25pYy9fX2dldF9zcC5TIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvX19nZXRfc3AuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWNhZjNkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvX19nZXRfc3AuUwpAQCAtMCwwICsxLDMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisuZ2xvYmFsIF9fZ2V0X3NwCisKK19fZ2V0X3NwOgorCW1vdiByMCwgc3AKKwlieCBscgorCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2Jpb25pYy9fZXhpdF93aXRoX3N0YWNrX3RlYXJkb3duLlMgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9fZXhpdF93aXRoX3N0YWNrX3RlYXJkb3duLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODlmNmM5MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL19leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24uUwpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorCisudGV4dAorLnR5cGUgX2V4aXRfd2l0aF9zdGFja190ZWFyZG93biwgI2Z1bmN0aW9uCisuZ2xvYmwgX2V4aXRfd2l0aF9zdGFja190ZWFyZG93bgorLmFsaWduIDQKKworQCB2b2lkIF9leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24odm9pZCAqIHN0YWNrQmFzZSwgaW50IHN0YWNrU2l6ZSwgaW50IHJldENvZGUpCisKK19leGl0X3dpdGhfc3RhY2tfdGVhcmRvd246CisKKyNpZiBfX0FSTV9FQUJJX18KKyAgICBtb3YgICAgIGxyLCByMgorICAgIGxkciAgICAgcjcsID1fX05SX211bm1hcAorICAgIHN3aSAgICAgIzAgICAgICAgICAgICAgIEAgdGhlIHN0YWNrIGlzIGRlc3Ryb3llZCBieSB0aGlzIGNhbGwKKyAgICBtb3YgICAgIHIwLCBscgorICAgIGxkciAgICAgcjcsID1fX05SX2V4aXQKKyAgICBzd2kgICAgICMwCisjZWxzZQorICAgIG1vdiAgICAgbHIsIHIyCisgICAgc3dpICAgICAjIF9fTlJfbXVubWFwICAgQCB0aGUgc3RhY2sgaXMgZGVzdHJveWVkIGJ5IHRoaXMgY2FsbAorICAgIG1vdiAgICAgcjAsIGxyCisgICAgc3dpICAgICAjIF9fTlJfZXhpdAorI2VuZGlmCisKKyAgICBAIGV4aXQoKSBzaG91bGQgbmV2ZXIgcmV0dXJuLCBjYXVzZSBhIGNyYXNoIGlmIGl0IGRvZXMKKyAgICBtb3YJCXIwLCAjMAorICAgIGxkcgkJcjAsIFtyMF0KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL19zZXRqbXAuUyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL19zZXRqbXAuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTI3YWYyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvX3NldGptcC5TCkBAIC0wLDAgKzEsMTA2IEBACisvKgkkT3BlbkJTRDogX3NldGptcC5TLHYgMS4yIDIwMDQvMDIvMDEgMDU6NDA6NTIgZHJhaG4gRXhwICQJKi8KKy8qCSROZXRCU0Q6IF9zZXRqbXAuUyx2IDEuNSAyMDAzLzA0LzA1IDIzOjA4OjUxIGJqaDIxIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTcgTWFyayBCcmluaWNvbWJlCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKglUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IE1hcmsgQnJpbmljb21iZQorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8bWFjaGluZS9zZXRqbXAuaD4KKworLyoKKyAqIEMgbGlicmFyeSAtLSBfc2V0am1wLCBfbG9uZ2ptcAorICoKKyAqCV9sb25nam1wKGEsdikKKyAqIHdpbGwgZ2VuZXJhdGUgYSAicmV0dXJuKHYpIiBmcm9tIHRoZSBsYXN0IGNhbGwgdG8KKyAqCV9zZXRqbXAoYSkKKyAqIGJ5IHJlc3RvcmluZyByZWdpc3RlcnMgZnJvbSB0aGUgc3RhY2suCisgKiBUaGUgcHJldmlvdXMgc2lnbmFsIHN0YXRlIGlzIE5PVCByZXN0b3JlZC4KKyAqCisgKiBOb3RlOiByMCBpcyB0aGUgcmV0dXJuIHZhbHVlCisgKiAgICAgICByMS1yMyBhcmUgc2NyYXRjaCByZWdpc3RlcnMgaW4gZnVuY3Rpb25zCisgKi8KKworRU5UUlkoX3NldGptcCkKKwlsZHIJcjEsIC5MX3NldGptcF9tYWdpYworCXN0cglyMSwgW3IwXSwgIzQKKyNpZmRlZiBTT0ZURkxPQVQKKwlhZGQJcjAsIHIwLCAjNTIKKyNlbHNlCisJLyogU3RvcmUgZnAgcmVnaXN0ZXJzICovCisJc2ZtCWY0LCA0LCBbcjBdLCAjNDgKKwkvKiBTdG9yZSBmcHNyICovCisJcmZzCXIxCisJc3RyCXIxLCBbcjBdLCAjMHgwMDA0CisjZW5kaWYJLyogU09GVEZMT0FUICovCisJLyogU3RvcmUgaW50ZWdlciByZWdpc3RlcnMgKi8KKyAgICAgICAgc3RtaWEJcjAsIHtyNC1yMTR9CisKKyAgICAgICAgbW92CXIwLCAjMHgwMDAwMDAwMAorICAgICAgICBieCAgICAgIGxyCisKKy5MX3NldGptcF9tYWdpYzoKKwkud29yZAlfSkJfTUFHSUNfX1NFVEpNUAorCitFTlRSWShfbG9uZ2ptcCkKKwlsZHIJcjIsIC5MX3NldGptcF9tYWdpYworCWxkcglyMywgW3IwXSwgIzQKKwl0ZXEJcjIsIHIzCisJYm5lCWJvdGNoCisKKyNpZmRlZiBTT0ZURkxPQVQKKwlhZGQJcjAsIHIwLCAjNTIKKyNlbHNlCisJLyogUmVzdG9yZSBmcCByZWdpc3RlcnMgKi8KKwlsZm0JZjQsIDQsIFtyMF0sICM0OAorCS8qIFJlc3RvcmUgZnBzciAqLworCWxkcglyNCwgW3IwXSwgIzB4MDAwNAorCXdmcwlyNAorI2VuZGlmCS8qIFNPRlRGTE9BVCAqLworICAgICAgIAkvKiBSZXN0b3JlIGludGVnZXIgcmVnaXN0ZXJzICovCisgICAgICAgIGxkbWlhCXIwLCB7cjQtcjE0fQorCisJLyogVmFsaWRhdGUgc3AgYW5kIHIxNCAqLworCXRlcQlzcCwgIzAKKwl0ZXFuZQlyMTQsICMwCisJYmVxCWJvdGNoCisKKwkvKiBTZXQgcmV0dXJuIHZhbHVlICovCisJbW92CXIwLCByMQorCXRlcQlyMCwgIzB4MDAwMDAwMDAKKwltb3ZlcQlyMCwgIzB4MDAwMDAwMDEKKwlieCAgICAgIGxyCisKKwkvKiB2YWxpZGF0aW9uIGZhaWxlZCwgZGllIGRpZSBkaWUuICovCitib3RjaDoKKwlibAlQSUNfU1lNKF9DX0xBQkVMKGxvbmdqbXBlcnJvciksIFBMVCkKKwlibAlQSUNfU1lNKF9DX0xBQkVMKGFib3J0KSwgUExUKQorCWIJLiAtIDgJCS8qIENhbm5vdCBnZXQgaGVyZSAqLwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9iaW9uaWMvYXRvbWljc19hcm0uUyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL2F0b21pY3NfYXJtLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJkYTA5ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL2F0b21pY3NfYXJtLlMKQEAgLTAsMCArMSwxNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworLmdsb2JhbCBfX2F0b21pY19jbXB4Y2hnCisuZ2xvYmFsIF9fYXRvbWljX3N3YXAKKy5nbG9iYWwgX19hdG9taWNfZGVjCisuZ2xvYmFsIF9fYXRvbWljX2luYworLmdsb2JhbCBfX2Z1dGV4X3dhaXQKKy5nbG9iYWwgX19mdXRleF93YWtlCisKKyNkZWZpbmUgRlVURVhfV0FJVCAwCisjZGVmaW5lIEZVVEVYX1dBS0UgMQorCisjaWYgMQorICAgLmVxdSAgICAga2VybmVsX2NtcHhjaGcsIDB4RkZGRjBGQzAKKyAgIC5lcXUgICAgIGtlcm5lbF9hdG9taWNfYmFzZSwgMHhGRkZGMEZGRgorX19hdG9taWNfZGVjOgorICAgIHN0bWRiICAgc3AhLCB7cjQsIGxyfQorICAgIG1vdiAgICAgcjIsIHIwCisxOiBAIGF0b21pY19kZWMKKyAgICBsZHIgICAgIHIwLCBbcjJdCisgICAgbW92ICAgICByMywgI2tlcm5lbF9hdG9taWNfYmFzZQorICAgIGFkZCAgICAgbHIsIHBjLCAjNAorICAgIHN1YiAgICAgcjEsIHIwLCAjMQorICAgIGFkZCAgICAgcGMsIHIzLCAjKGtlcm5lbF9jbXB4Y2hnIC0ga2VybmVsX2F0b21pY19iYXNlKQorICAgIGJjYyAgICAgMWIKKyAgICBhZGQgICAgIHIwLCByMSwgIzEKKyAgICBsZG1pYSAgIHNwISwge3I0LCBscn0KKyAgICBieCAgICAgIGxyCisKK19fYXRvbWljX2luYzoKKyAgICBzdG1kYiAgIHNwISwge3I0LCBscn0KKyAgICBtb3YgICAgIHIyLCByMAorMTogQCBhdG9taWNfaW5jCisgICAgbGRyICAgICByMCwgW3IyXQorICAgIG1vdiAgICAgcjMsICNrZXJuZWxfYXRvbWljX2Jhc2UKKyAgICBhZGQgICAgIGxyLCBwYywgIzQKKyAgICBhZGQgICAgIHIxLCByMCwgIzEKKyAgICBhZGQgICAgIHBjLCByMywgIyhrZXJuZWxfY21weGNoZyAtIGtlcm5lbF9hdG9taWNfYmFzZSkKKyAgICBiY2MgICAgIDFiCisgICAgc3ViICAgICByMCwgcjEsICMxCisgICAgbGRtaWEgICBzcCEsIHtyNCwgbHJ9CisgICAgYnggICAgICBscgorCisvKiByMChvbGQpIHIxKG5ldykgcjIoYWRkcikgLT4gcjAoemVyb19pZl9zdWNjZWVkZWQpICovCitfX2F0b21pY19jbXB4Y2hnOgorICAgIHN0bWRiICAgc3AhLCB7cjQsIGxyfQorICAgIG1vdiAgICAgcjQsIHIwICAgICAgICAgIC8qIHI0ID0gc2F2ZSBvbGR2YWx1ZSAqLworMTogQCBhdG9taWNfY21weGNoZworICAgIG1vdiAgICAgcjMsICNrZXJuZWxfYXRvbWljX2Jhc2UKKyAgICBhZGQgICAgIGxyLCBwYywgIzQKKyAgICBtb3YgICAgIHIwLCByNCAgICAgICAgICAvKiByMCA9IG9sZHZhbHVlICovCisgICAgYWRkICAgICBwYywgcjMsICMoa2VybmVsX2NtcHhjaGcgLSBrZXJuZWxfYXRvbWljX2Jhc2UpCisgICAgYmNzICAgICAyZiAgICAgICAgICAgICAgLyogc3dhcCB3YXMgbWFkZS4gd2UncmUgZ29vZCwgcmV0dXJuLiAqLworICAgIGxkciAgICAgcjMsIFtyMl0gICAgICAgIC8qIHN3YXAgbm90IG1hZGUsIHNlZSBpZiBpdCdzIGJlY2F1c2UgKnB0ciE9b2xkdmFsdWUgKi8KKyAgICBjbXAgICAgIHIzLCByNAorICAgIGJlcSAgICAgMWIKKzI6IEAgYXRvbWljX2NtcHhjaGcKKyAgICBsZG1pYSAgIHNwISwge3I0LCBscn0KKyAgICBieCAgICAgIGxyCisjZWxzZQorI2RlZmluZSBLVVNFUl9DTVBYQ0hHIDB4ZmZmZmZmYzAKKworLyogcjAob2xkKSByMShuZXcpIHIyKGFkZHIpIC0+IHIwKHplcm9faWZfc3VjY2VlZGVkKSAqLworX19hdG9taWNfY21weGNoZzoKKyAgICBzdG1kYiAgIHNwISwge3I0LCBscn0KKyAgICBtb3YgICAgIHI0LCByMCAgICAgICAgICAvKiByNCA9IHNhdmUgb2xkdmFsdWUgKi8KKzE6ICBhZGQgICAgIGxyLCBwYywgIzQKKyAgICBtb3YgICAgIHIwLCByNCAgICAgICAgICAvKiByMCA9IG9sZHZhbHVlICovCisgICAgbW92ICAgICBwYywgI0tVU0VSX0NNUFhDSEcKKyAgICBiY3MgICAgIDJmICAgICAgICAgICAgICAvKiBzd2FwIHdhcyBtYWRlLiB3ZSdyZSBnb29kLCByZXR1cm4uICovCisgICAgbGRyICAgICByMywgW3IyXSAgICAgICAgLyogc3dhcCBub3QgbWFkZSwgc2VlIGlmIGl0J3MgYmVjYXVzZSAqcHRyIT1vbGR2YWx1ZSAqLworICAgIGNtcCAgICAgcjMsIHI0CisgICAgYmVxICAgICAxYgorMjogIGxkbWlhICAgc3AhLCB7cjQsIGxyfQorICAgIGJ4ICAgICAgbHIKKworLyogcjAoYWRkcikgLT4gcjAob2xkKSAqLworX19hdG9taWNfZGVjOgorICAgIHN0bWRiICAgc3AhLCB7cjQsIGxyfQorICAgIG1vdiAgICAgcjIsIHIwICAgICAgICAgIC8qIGFkZHJlc3MgKi8KKzE6ICBsZHIgICAgIHIwLCBbcjJdICAgICAgICAvKiBvbGR2YWx1ZSAqLworICAgIGFkZCAgICAgbHIsIHBjLCAjNAorICAgIHN1YiAgICAgcjEsIHIwLCAjMSAgICAgIC8qIG5ld3ZhbHVlID0gb2xkdmFsdWUgLSAxICovCisgICAgbW92ICAgICBwYywgI0tVU0VSX0NNUFhDSEcKKyAgICBiY2MgICAgIDFiICAgICAgICAgICAgICAvKiBubyBzd2FwLCB0cnkgYWdhaW4gdW50aWwgd2UgZ2V0IGl0IHJpZ2h0ICovCisgICAgbW92ICAgICByMCwgaXAgICAgICAgICAgLyogc3dhcHBlZCwgcmV0dXJuIHRoZSBvbGQgdmFsdWUgKi8KKyAgICBsZG1pYSAgIHNwISwge3I0LCBscn0KKyAgICBieCAgICAgIGxyCisKKy8qIHIwKGFkZHIpIC0+IHIwKG9sZCkgKi8KK19fYXRvbWljX2luYzoKKyAgICBzdG1kYiAgIHNwISwge3I0LCBscn0KKyAgICBtb3YgICAgIHIyLCByMCAgICAgICAgICAvKiBhZGRyZXNzICovCisxOiAgbGRyICAgICByMCwgW3IyXSAgICAgICAgLyogb2xkdmFsdWUgKi8KKyAgICBhZGQgICAgIGxyLCBwYywgIzQKKyAgICBhZGQgICAgIHIxLCByMCwgIzEgICAgICAvKiBuZXd2YWx1ZSA9IG9sZHZhbHVlICsgMSAqLworICAgIG1vdiAgICAgcGMsICNLVVNFUl9DTVBYQ0hHCisgICAgYmNjICAgICAxYiAgICAgICAgICAgICAgLyogbm8gc3dhcCwgdHJ5IGFnYWluIHVudGlsIHdlIGdldCBpdCByaWdodCAqLworICAgIG1vdiAgICAgcjAsIGlwICAgICAgICAgIC8qIHN3YXBwZWQsIHJldHVybiB0aGUgb2xkIHZhbHVlICovCisgICAgbGRtaWEgICBzcCEsIHtyNCwgbHJ9CisgICAgYnggICAgICBscgorI2VuZGlmCisKKy8qIHIwKG5ldykgcjEoYWRkcikgLT4gcjAob2xkKSAqLworX19hdG9taWNfc3dhcDoKKyAgICBzd3AgICAgIHIwLCByMCwgW3IxXQorICAgIGJ4ICAgICAgbHIKKworLyogX19mdXRleF93YWl0KCpmdHgsIHZhbCwgKnRpbWVzcGVjKSAqLworLyogX19mdXRleF9zeXNjYWxsKCpmdHgsIG9wLCB2YWwsICp0aW1lc3BlYywgKmFkZHIyLCB2YWwzKSAqLworCisjaWYgX19BUk1fRUFCSV9fCisKK19fZnV0ZXhfd2FpdDoKKyAgICAuZm5zdGFydAorICAgIHN0bWRiICAgc3AhLCB7cjQsIHI3fQorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBtb3YgICAgIHIzLCByMgorICAgIG1vdiAgICAgcjIsIHIxCisgICAgbW92ICAgICByMSwgI0ZVVEVYX1dBSVQKKyAgICBsZHIgICAgIHI3LCA9X19OUl9mdXRleAorICAgIHN3aSAgICAgIzAKKyAgICBsZG1pYSAgIHNwISwge3I0LCByN30KKyAgICBieCAgICAgIGxyCisgICAgLmZuZW5kCisKK19fZnV0ZXhfd2FrZToKKyAgICBzdG1kYiAgIHNwISwge3I0LCByN30KKyAgICBtb3YgICAgIHIyLCByMQorICAgIG1vdiAgICAgcjEsICNGVVRFWF9XQUtFCisgICAgbGRyICAgICByNywgPV9fTlJfZnV0ZXgKKyAgICBzd2kgICAgICMwCisgICAgbGRtaWEgICBzcCEsIHtyNCwgcjd9CisgICAgYnggICAgICBscgorCisjZWxzZQorCitfX2Z1dGV4X3dhaXQ6CisgICAgbW92ICAgICByMywgcjIKKyAgICBtb3YgICAgIHIyLCByMQorICAgIG1vdiAgICAgcjEsICNGVVRFWF9XQUlUCisgICAgc3dpICAgICAjX19OUl9mdXRleAorICAgIGJ4ICAgICAgbHIKKworX19mdXRleF93YWtlOgorICAgIG1vdiAgICAgcjIsIHIxCisgICAgbW92ICAgICByMSwgI0ZVVEVYX1dBS0UKKyAgICBzd2kgICAgICNfX05SX2Z1dGV4CisgICAgYnggICAgICBscgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL2Nsb25lLlMgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9jbG9uZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5MWM3M2QKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9jbG9uZS5TCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworCS50ZXh0CisJLnR5cGUgX19wdGhyZWFkX2Nsb25lLCAjZnVuY3Rpb24KKwkuZ2xvYmFsIF9fcHRocmVhZF9jbG9uZQorCS5hbGlnbiA0CisgICAgCitfX3B0aHJlYWRfY2xvbmU6CisJQCBpbnNlcnQgdGhlIGFyZ3Mgb250byB0aGUgbmV3IHN0YWNrCisJc3RyICAgICByMCwgW3IxLCAjLTRdCisJc3RyICAgICByMywgW3IxLCAjLThdCisKKwlAIGRvIHRoZSBzeXN0ZW0gY2FsbAorCUAgZ2V0IGZsYWdzCisJCisgICAgbW92ICAgICByMCwgcjIKKwkKKyAgICBAIG5ldyBzcCBpcyBhbHJlYWR5IGluIHIxCisKKyNpZiBfX0FSTV9FQUJJX18KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9jbG9uZQorCXN3aSAgICAgIzAKKyNlbHNlCisJc3dpICAgICAjX19OUl9jbG9uZQorI2VuZGlmCisKKwltb3ZzICAgIHIwLCByMAorI2lmIF9fQVJNX0VBQklfXworICAgIGxkbW5lZmQgc3AhLCB7cjQsIHI3fQorI2VuZGlmCisJYmx0ICAgICBfX2Vycm9yCisJYnhuZSAgICBscgorCisKKwlAIHBpY2sgdGhlIGZ1bmN0aW9uIGFyZyBhbmQgY2FsbCBhZGRyZXNzIG9mZiB0aGUgc3RhY2sgYW5kIGp1bXAKKwlAIHRvIHRoZSBDIF9fdGhyZWFkX2VudHJ5IGZ1bmN0aW9uIHdoaWNoIGRvZXMgc29tZSBzZXR1cCBhbmQgdGhlbgorCUAgY2FsbHMgdGhlIHRocmVhZCdzIHN0YXJ0IGZ1bmN0aW9uCisKKwlsZHIgICAgIHIwLCBbc3AsICMtNF0KKwlsZHIgICAgIHIxLCBbc3AsICMtOF0KKwltb3YgICAgIHIyLCBzcAkJCUAgX190aHJlYWRfZW50cnkgbmVlZHMgdGhlIFRMUyBwb2ludGVyCisJYiAgICAgICBfX3RocmVhZF9lbnRyeQorCitfX2Vycm9yOgorCW1vdiAgICAgcjAsICMtMQorCWJ4ICAgICAgbHIKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL2NydGJlZ2luX2R5bmFtaWMuUyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL2NydGJlZ2luX2R5bmFtaWMuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjY1OTIzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvY3J0YmVnaW5fZHluYW1pYy5TCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKwkudGV4dAorCS5hbGlnbiA0CisJLnR5cGUgX3N0YXJ0LCNmdW5jdGlvbgorCS5nbG9ibCBfc3RhcnQKKworIyB0aGlzIGlzIHRoZSBzbWFsbCBzdGFydHVwIGNvZGUgdGhhdCBpcyBmaXJzdCBydW4gd2hlbgorIyBhbnkgZXhlY3V0YWJsZSB0aGF0IGlzIHN0YXRpY2FsbHktbGlua2VkIHdpdGggQmlvbmljCisjIHJ1bnMuCisjCisjIGl0J3MgcHVycG9zZSBpcyB0byBjYWxsIF9fbGliY19pbml0IHdpdGggYXBwcm9wcmlhdGUKKyMgYXJndW1lbnRzLCB3aGljaCBhcmU6CisjCisjICAgIC0gdGhlIGFkZHJlc3Mgb2YgdGhlIHJhdyBkYXRhIGJsb2NrIHNldHVwIGJ5IHRoZSBMaW51eAorIyAgICAgIGtlcm5lbCBFTEYgbG9hZGVyCisjCisjICAgIC0gYWRkcmVzcyBvZiBhbiAib25leGl0IiBmdW5jdGlvbiwgbm90IHVzZWQgb24gYW55CisjICAgICAgcGxhdGZvcm0gc3VwcG9ydGVkIGJ5IEJpb25pYworIworIyAgICAtIGFkZHJlc3Mgb2YgdGhlICJtYWluIiBmdW5jdGlvbiBvZiB0aGUgcHJvZ3JhbS4gV2UKKyMgICAgICBjYW4ndCBoYXJkLWNvZGUgaXQgaW4gdGhlIGFkciBwc2V1ZG8gaW5zdHJ1Y3Rpb24KKyMgICAgICBzbyB3ZSB1c2UgYSB0aW55IHRyYW1wb2xpbmUgdGhhdCB3aWxsIGdldCByZWxvY2F0ZWQKKyMgICAgICBieSB0aGUgZHluYW1pYyBsaW5rZXIgYmVmb3JlIHRoaXMgY29kZSBydW5zCisjCisjICAgIC0gYWRkcmVzcyBvZiB0aGUgY29uc3RydWN0b3IgbGlzdAorIworX3N0YXJ0OgkKKwltb3YJcjAsIHNwCisJbW92CXIxLCAjMAorCWFkciByMiwgMGYKKwlhZHIgcjMsIDFmCisJYglfX2xpYmNfaW5pdAorCiswOiAgYiAgIG1haW4KKworMTogIC5sb25nICAgX19QUkVJTklUX0FSUkFZX18KKyAgICAubG9uZyAgIF9fSU5JVF9BUlJBWV9fCisgICAgLmxvbmcgICBfX0ZJTklfQVJSQVlfXworICAgIC5sb25nICAgX19DVE9SX0xJU1RfXworICAgICAgCisjIHRoZSAuY3RvcnMgc2VjdGlvbiBjb250YWlucyBhIGxpc3Qgb2YgcG9pbnRlcnMgdG8gImNvbnN0cnVjdG9yIgorIyBmdW5jdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGNhbGxlZCBpbiBvcmRlciBkdXJpbmcgQyBsaWJyYXJ5IGluaXRpYWxpemF0aW9uLAorIyBqdXN0IGJlZm9yZSB0aGUgcHJvZ3JhbSBpcyBiZWluZyBydW4uIFRoaXMgaXMgYSBDKysgcmVxdWlyZW1lbnQKKyMKKyMgdGhlIGxhc3QgZW50cnkgc2hhbGwgYmUgMCwgYW5kIGlzIGRlZmluZWQgaW4gY3J0ZW5kLlMKKyMKKwkuc2VjdGlvbiAucHJlaW5pdF9hcnJheSwgImF3IgorCS5nbG9ibCBfX1BSRUlOSVRfQVJSQVlfXworX19QUkVJTklUX0FSUkFZX186CisJLmxvbmcgLTEKKworCS5zZWN0aW9uIC5pbml0X2FycmF5LCAiYXciCisJLmdsb2JsIF9fSU5JVF9BUlJBWV9fCitfX0lOSVRfQVJSQVlfXzoKKwkubG9uZyAtMQorCisJLnNlY3Rpb24gLmZpbmlfYXJyYXksICJhdyIKKwkuZ2xvYmwgX19GSU5JX0FSUkFZX18KK19fRklOSV9BUlJBWV9fOgorCS5sb25nIC0xCisKKwkuc2VjdGlvbiAuY3RvcnMsICJhdyIKKwkuZ2xvYmwgX19DVE9SX0xJU1RfXworX19DVE9SX0xJU1RfXzoKKwkubG9uZyAtMQorCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2Jpb25pYy9jcnRiZWdpbl9zdGF0aWMuUyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL2NydGJlZ2luX3N0YXRpYy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyNjU5MjMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9jcnRiZWdpbl9zdGF0aWMuUwpAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisJLnRleHQKKwkuYWxpZ24gNAorCS50eXBlIF9zdGFydCwjZnVuY3Rpb24KKwkuZ2xvYmwgX3N0YXJ0CisKKyMgdGhpcyBpcyB0aGUgc21hbGwgc3RhcnR1cCBjb2RlIHRoYXQgaXMgZmlyc3QgcnVuIHdoZW4KKyMgYW55IGV4ZWN1dGFibGUgdGhhdCBpcyBzdGF0aWNhbGx5LWxpbmtlZCB3aXRoIEJpb25pYworIyBydW5zLgorIworIyBpdCdzIHB1cnBvc2UgaXMgdG8gY2FsbCBfX2xpYmNfaW5pdCB3aXRoIGFwcHJvcHJpYXRlCisjIGFyZ3VtZW50cywgd2hpY2ggYXJlOgorIworIyAgICAtIHRoZSBhZGRyZXNzIG9mIHRoZSByYXcgZGF0YSBibG9jayBzZXR1cCBieSB0aGUgTGludXgKKyMgICAgICBrZXJuZWwgRUxGIGxvYWRlcgorIworIyAgICAtIGFkZHJlc3Mgb2YgYW4gIm9uZXhpdCIgZnVuY3Rpb24sIG5vdCB1c2VkIG9uIGFueQorIyAgICAgIHBsYXRmb3JtIHN1cHBvcnRlZCBieSBCaW9uaWMKKyMKKyMgICAgLSBhZGRyZXNzIG9mIHRoZSAibWFpbiIgZnVuY3Rpb24gb2YgdGhlIHByb2dyYW0uIFdlCisjICAgICAgY2FuJ3QgaGFyZC1jb2RlIGl0IGluIHRoZSBhZHIgcHNldWRvIGluc3RydWN0aW9uCisjICAgICAgc28gd2UgdXNlIGEgdGlueSB0cmFtcG9saW5lIHRoYXQgd2lsbCBnZXQgcmVsb2NhdGVkCisjICAgICAgYnkgdGhlIGR5bmFtaWMgbGlua2VyIGJlZm9yZSB0aGlzIGNvZGUgcnVucworIworIyAgICAtIGFkZHJlc3Mgb2YgdGhlIGNvbnN0cnVjdG9yIGxpc3QKKyMKK19zdGFydDoJCisJbW92CXIwLCBzcAorCW1vdglyMSwgIzAKKwlhZHIgcjIsIDBmCisJYWRyIHIzLCAxZgorCWIJX19saWJjX2luaXQKKworMDogIGIgICBtYWluCisKKzE6ICAubG9uZyAgIF9fUFJFSU5JVF9BUlJBWV9fCisgICAgLmxvbmcgICBfX0lOSVRfQVJSQVlfXworICAgIC5sb25nICAgX19GSU5JX0FSUkFZX18KKyAgICAubG9uZyAgIF9fQ1RPUl9MSVNUX18KKyAgICAgIAorIyB0aGUgLmN0b3JzIHNlY3Rpb24gY29udGFpbnMgYSBsaXN0IG9mIHBvaW50ZXJzIHRvICJjb25zdHJ1Y3RvciIKKyMgZnVuY3Rpb25zIHRoYXQgbmVlZCB0byBiZSBjYWxsZWQgaW4gb3JkZXIgZHVyaW5nIEMgbGlicmFyeSBpbml0aWFsaXphdGlvbiwKKyMganVzdCBiZWZvcmUgdGhlIHByb2dyYW0gaXMgYmVpbmcgcnVuLiBUaGlzIGlzIGEgQysrIHJlcXVpcmVtZW50CisjCisjIHRoZSBsYXN0IGVudHJ5IHNoYWxsIGJlIDAsIGFuZCBpcyBkZWZpbmVkIGluIGNydGVuZC5TCisjCisJLnNlY3Rpb24gLnByZWluaXRfYXJyYXksICJhdyIKKwkuZ2xvYmwgX19QUkVJTklUX0FSUkFZX18KK19fUFJFSU5JVF9BUlJBWV9fOgorCS5sb25nIC0xCisKKwkuc2VjdGlvbiAuaW5pdF9hcnJheSwgImF3IgorCS5nbG9ibCBfX0lOSVRfQVJSQVlfXworX19JTklUX0FSUkFZX186CisJLmxvbmcgLTEKKworCS5zZWN0aW9uIC5maW5pX2FycmF5LCAiYXciCisJLmdsb2JsIF9fRklOSV9BUlJBWV9fCitfX0ZJTklfQVJSQVlfXzoKKwkubG9uZyAtMQorCisJLnNlY3Rpb24gLmN0b3JzLCAiYXciCisJLmdsb2JsIF9fQ1RPUl9MSVNUX18KK19fQ1RPUl9MSVNUX186CisJLmxvbmcgLTEKKwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9iaW9uaWMvY3J0ZW5kLlMgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9jcnRlbmQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjNiMWVkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvY3J0ZW5kLlMKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCQorCS5zZWN0aW9uIC5wcmVpbml0X2FycmF5LCAiYXciCisJLmxvbmcgMAorCisJLnNlY3Rpb24gLmluaXRfYXJyYXksICJhdyIKKwkubG9uZyAwCisKKwkuc2VjdGlvbiAuZmluaV9hcnJheSwgImF3IgorCS5sb25nIDAKKworCS5zZWN0aW9uIC5jdG9ycywgImF3IgorCS5sb25nIDAKKwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9iaW9uaWMvZXhpZHhfZHluYW1pYy5jIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvZXhpZHhfZHluYW1pYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2MjYwNmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9leGlkeF9keW5hbWljLmMKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLwordHlwZWRlZiBsb25nIHVuc2lnbmVkIGludCAqX1Vud2luZF9QdHI7CisKKy8qIFN0dWJiZWQgb3V0IGluIGxpYmRsIGFuZCBkZWZpbmVkIGluIHRoZSBkeW5hbWljIGxpbmtlci4KKyAqIFNhbWUgc2VtYW50aWNzIGFzIF9fZ251X1Vud2luZF9GaW5kX2V4aWR4KCkuCisgKi8KK2V4dGVybiBfVW53aW5kX1B0ciBkbF91bndpbmRfZmluZF9leGlkeChfVW53aW5kX1B0ciBwYywgaW50ICpwY291bnQpOworCisvKiBGb3IgYSBnaXZlbiBQQywgZmluZCB0aGUgLnNvIHRoYXQgaXQgYmVsb25ncyB0by4KKyAqIFJldHVybnMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgLkFSTS5leGlkeCBzZWN0aW9uCisgKiBmb3IgdGhhdCAuc28sIGFuZCB0aGUgbnVtYmVyIG9mIDgtYnl0ZSBlbnRyaWVzCisgKiBpbiB0aGF0IHNlY3Rpb24gKHZpYSAqcGNvdW50KS4KKyAqCisgKiBsaWJnY2MgZGVjbGFyZXMgX19nbnVfVW53aW5kX0ZpbmRfZXhpZHgoKSBhcyBhIHdlYWsgc3ltYm9sLCB3aXRoCisgKiB0aGUgZXhwZWN0YXRpb24gdGhhdCBsaWJjIHdpbGwgZGVmaW5lIGl0IGFuZCBjYWxsIHRocm91Z2ggdG8KKyAqIGEgZGlmZmVyZW50bHktbmFtZWQgZnVuY3Rpb24gaW4gdGhlIGR5bmFtaWMgbGlua2VyLgorICovCitfVW53aW5kX1B0ciBfX2dudV9VbndpbmRfRmluZF9leGlkeChfVW53aW5kX1B0ciBwYywgaW50ICpwY291bnQpCit7CisgICAgcmV0dXJuIGRsX3Vud2luZF9maW5kX2V4aWR4KHBjLCBwY291bnQpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9iaW9uaWMvZXhpZHhfc3RhdGljLmMgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9leGlkeF9zdGF0aWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzllOTUxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvZXhpZHhfc3RhdGljLmMKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLwordHlwZWRlZiBsb25nIHVuc2lnbmVkIGludCAqX1Vud2luZF9QdHI7CisKKy8qIEZpbmQgdGhlIC5BUk0uZXhpZHggc2VjdGlvbiAod2hpY2ggaW4gdGhlIGNhc2Ugb2YgYSBzdGF0aWMgZXhlY3V0YWJsZQorICogY2FuIGJlIGlkZW50aWZpZWQgdGhyb3VnaCBpdHMgc3RhcnQgYW5kIGVuZCBzeW1ib2xzKSwgYW5kIHJldHVybiBpdHMKKyAqIGJlZ2lubmluZyBhbmQgbnVtYmUgb2YgZW50cmllcyB0byB0aGUgY2FsbGVyLiAgTm90ZSB0aGF0IGZvciBzdGF0aWMKKyAqIGV4ZWN1dGFibGVzIHdlIGRvIG5vdCBuZWVkIHRvIHVzZSB0aGUgdmFsdWUgb2YgdGhlIFBDIHRvIGZpbmQgdGhlCisgKiBFWElEWCBzZWN0aW9uLgorICovCisKK2V4dGVybiB1bnNpZ25lZCBfX2V4aWR4X2VuZDsKK2V4dGVybiB1bnNpZ25lZCBfX2V4aWR4X3N0YXJ0OworCitfVW53aW5kX1B0ciBfX2dudV9VbndpbmRfRmluZF9leGlkeChfVW53aW5kX1B0ciBwYyBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnBjb3VudCkKK3sKKwkqcGNvdW50ID0gKF9fZXhpZHhfZW5kLV9fZXhpZHhfc3RhcnQpLzg7CisJcmV0dXJuIChfVW53aW5kX1B0cilfX2V4aWR4X3N0YXJ0OworfQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9iaW9uaWMvZmZzLlMgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9mZnMuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTExNDFjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvZmZzLlMKQEAgLTAsMCArMSw4MiBAQAorLyoJJE5ldEJTRDogZmZzLlMsdiAxLjUgMjAwMy8wNC8wNSAyMzowODo1MiBiamgyMSBFeHAgJAkqLworLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMSBDaHJpc3RvcGhlciBHaWxiZXJ0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gVGhlIG5hbWUgb2YgdGhlIGNvbXBhbnkgbm9yIHRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IGJlIHVzZWQgdG8KKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljCisgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisKKy8qCisgKiBmZnMgLSBmaW5kIGZpcnN0IHNldCBiaXQsIHRoaXMgYWxnb3JpdGhtIGlzb2xhdGVzIHRoZSBmaXJzdCBzZXQKKyAqIGJpdCwgdGhlbiBtdWx0aXBsaWVzIHRoZSBudW1iZXIgYnkgMHgwNDUwZmJhZiB3aGljaCBsZWF2ZXMgdGhlIHRvcAorICogNiBiaXRzIGFzIGFuIGluZGV4IGludG8gdGhlIHRhYmxlLiAgVGhpcyBhbGdvcml0aG0gc2hvdWxkIGJlIGEgd2luCisgKiBvdmVyIHRoZSBjaGVja2luZyBlYWNoIGJpdCBpbiB0dXJuIGFzIHBlciB0aGUgQyBjb21waWxlZCB2ZXJzaW9uLgorICoKKyAqIHVuZGVyIEFSTXY1IHRoZXJlJ3MgYW4gaW5zdHJ1Y3Rpb24gY2FsbGVkIENMWiAoY291bnQgbGVhZGluZyBaZXJvJ3MpIHRoYXQKKyAqIGNvdWxkIGJlIHVzZWQKKyAqCisgKiBUaGlzIGlzIHRoZSBmZnMgYWxnb3JpdGhtIGRldmlzZWQgYnkgZC5zZWFsIGFuZCBwb3N0ZWQgdG8gY29tcC5zeXMuYXJtIG9uCisgKiAxNiBGZWIgMTk5NC4KKyAqLworCitFTlRSWShmZnMpCisJLyogU3RhbmRhcmQgdHJpY2sgdG8gaXNvbGF0ZSBib3R0b20gYml0IGluIHIwIG9yIDAgaWYgcjAgPSAwIG9uIGVudHJ5ICovCisgCXJzYiAgICAgcjEsIHIwLCAjMAorIAlhbmRzICAgIHIwLCByMCwgcjEKKyNpZm5kZWYgX19BUk1fQVJDSF81X18KKwkvKgorCSAqIG5vdyByMCBoYXMgYXQgbW9zdCBvbmUgc2V0IGJpdCwgY2FsbCB0aGlzIFgKKwkgKiBpZiBYID0gMCwgYWxsIGZ1cnRoZXIgaW5zdHJ1Y3Rpb25zIGFyZSBza2lwcGVkCisJICovCisJYWRybmUgICByMiwgLkxfZmZzX3RhYmxlCisJb3JybmUgICByMCwgcjAsIHIwLCBsc2wgIzQgIC8qIHIwID0gWCAqIDB4MTEgKi8gCisJb3JybmUgICByMCwgcjAsIHIwLCBsc2wgIzYgIC8qIHIwID0gWCAqIDB4NDUxICovCisJcnNibmUgICByMCwgcjAsIHIwLCBsc2wgIzE2IC8qIHIwID0gWCAqIDB4MDQ1MGZiYWYgKi8KKyAgICAgICAgICAgICAgCisJLyogbm93IGxvb2t1cCBpbiB0YWJsZSBpbmRleGVkIG9uIHRvcCA2IGJpdHMgb2YgcjAgKi8KKwlsZHJuZWIgIHIwLCBbIHIyLCByMCwgbHNyICMyNiBdCisKKwlieAkJbHIKKworLnRleHQ7CisudHlwZSAuTF9mZnNfdGFibGUsIF9BU01fVFlQRV9PQkpFQ1Q7CisuTF9mZnNfdGFibGU6CisvKiAgICAgICAgICAgICAgIDAgICAxICAgMiAgIDMgICA0ICAgNSAgIDYgICA3ICAgICAgICAgICAqLworCS5ieXRlCSAwLCAgMSwgIDIsIDEzLCAgMywgIDcsICAwLCAxNCAgLyogIDAtIDcgKi8KKwkuYnl0ZQkgNCwgIDAsICA4LCAgMCwgIDAsICAwLCAgMCwgMTUgIC8qICA4LTE1ICovCisJLmJ5dGUJMTEsICA1LCAgMCwgIDAsICA5LCAgMCwgIDAsIDI2ICAvKiAxNi0yMyAqLworCS5ieXRlCSAwLCAgMCwgIDAsICAwLCAgMCwgMjIsIDI4LCAxNiAgLyogMjQtMzEgKi8KKwkuYnl0ZQkzMiwgMTIsICA2LCAgMCwgIDAsICAwLCAgMCwgIDAJLyogMzItMzkgKi8KKwkuYnl0ZQkxMCwgIDAsICAwLCAyNSwgIDAsICAwLCAyMSwgMjcgIC8qIDQwLTQ3ICovCisJLmJ5dGUJMzEsICAwLCAgMCwgIDAsICAwLCAyNCwgIDAsIDIwICAvKiA0OC01NSAqLworCS5ieXRlICAgMzAsICAwLCAyMywgMTksIDI5LCAxOCwgMTcsICAwICAvKiA1Ni02MyAqLworI2Vsc2UKKwljbHpuZQlyMCwgcjAKKwlyc2JuZQlyMCwgcjAsICMzMgorCWJ4CQlscgorI2VuZGlmCisKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL2tpbGwuUyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL2tpbGwuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTU0MDkxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9iaW9uaWMva2lsbC5TCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKy8qIHVubGlrZSBvdXIgYXV0by1nZW5lcmF0ZWQgc3lzY2FsbCBzdHVicywgdGhpcyBjb2RlIHNhdmVzIGxyCisgICBvbiB0aGUgc3RhY2ssIGFzIHdlbGwgYXMgYSBmZXcgb3RoZXIgcmVnaXN0ZXJzLiB0aGlzIG1ha2VzCisgICBvdXIgc3RhY2sgdW53aW5kZXIgaGFwcHksIHdoZW4gd2UgZ2VuZXJhdGUgZGVidWcgc3RhY2sKKyAgIHRyYWNlcyBhZnRlciB0aGUgQyBsaWJyYXJ5IG9yIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0KKyAgIGFib3J0IGR1ZSB0byBhIGZhdGFsIHJ1bnRpbWUgZXJyb3IgKGUuZy4gZGV0ZWN0aW9uCisgICBvZiBhIGNvcnJ1cHRlZCBtYWxsb2MgaGVhcCkuCisqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisjaWZuZGVmIF9fTlJfa2lsbAorI2RlZmluZSBfX05SX2tpbGwgICAzNworI2VuZGlmCisKKyAgICAudGV4dAorICAgIC50eXBlIGtpbGwsICNmdW5jdGlvbgorICAgIC5nbG9ibCBraWxsCisgICAgLmFsaWduIDQKKwora2lsbDoKKyAgICBzdG1mZCAgIHNwISwge3I0LXI3LCBpcCwgbHJ9CisgICAgbGRyICAgICByNywgPV9fTlJfa2lsbAorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LXI3LCBpcCwgbHJ9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2Jpb25pYy9tZW1jbXAuUyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL21lbWNtcC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0NWI1NmIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9tZW1jbXAuUwpAQCAtMCwwICsxLDI4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8bWFjaGluZS9jcHUtZmVhdHVyZXMuaD4KKworICAgIC50ZXh0CisKKyAgICAuZ2xvYmFsIG1lbWNtcAorICAgIC50eXBlIG1lbWNtcCwgJWZ1bmN0aW9uCisgICAgLmFsaWduIDQKKworLyoKKyAqIE9wdGltaXplZCBtZW1jbXAoKSBmb3IgQVJNOS4KKyAqIFRoaXMgd291bGQgbm90IGJlIG9wdGltYWwgb24gWFNjYWxlIG9yIEFSTTExLCB3aGVyZSBtb3JlIHByZWZldGNoaW5nCisgKiBhbmQgdXNlIG9mIFBMRCB3aWxsIGJlIG5lZWRlZC4KKyAqIFRoZSAyIG1ham9yIG9wdGltemF0aW9ucyBoZXJlIGFyZQorICogKDEpIFRoZSBtYWluIGxvb3AgY29tcGFyZXMgMTYgYnl0ZXMgYXQgYSB0aW1lCisgKiAoMikgVGhlIGxvYWRzIGFyZSBzY2hlZHVsZWQgaW4gYSB3YXkgdGhleSB3b24ndCBzdGFsbAorICovCisKK21lbWNtcDoKKyAgICAgICAgUExEICAgICAgICAgKHIwLCAjMCkKKyAgICAgICAgUExEICAgICAgICAgKHIxLCAjMCkKKworICAgICAgICAvKiB0YWtlIG9mIHRoZSBjYXNlIHdoZXJlIGxlbmd0aCBpcyAwIG9yIHRoZSBidWZmZXJzIGFyZSB0aGUgc2FtZSAqLworICAgICAgICBjbXAgICAgICAgICByMCwgcjEKKyAgICAgICAgY21wbmUgICAgICAgcjIsICMwCisgICAgICAgIG1vdmVxICAgICAgIHIwLCAjMAorICAgICAgICBieGVxICAgICAgICBscgorCisgICAgICAgIC8qIHNhdmUgcmVnaXN0ZXJzICovCisgICAgICAgIHN0bWZkICAgICAgIHNwISwge3I0LCBscn0KKyAgICAgICAgCisgICAgICAgIFBMRCAgICAgICAgIChyMCwgIzMyKQorICAgICAgICBQTEQgICAgICAgICAocjEsICMzMikKKworICAgICAgICAvKiBzaW5jZSByMCBob2xkIHRoZSByZXN1bHQsIG1vdmUgdGhlIGZpcnN0IHNvdXJjZQorICAgICAgICAgKiBwb2ludGVyIHNvbWV3aGVyZSBlbHNlCisgICAgICAgICAqLworICAgICAgICAgCisgICAgICAgICBtb3YgICAgICAgIHI0LCByMAorICAgICAgICAgCisgICAgICAgICAvKiBtYWtlIHN1cmUgd2UgaGF2ZSBhdCBsZWFzdCA4KzQgYnl0ZXMsIHRoaXMgc2ltcGxpZnkgdGhpbmdzIGJlbG93CisgICAgICAgICAgKiBhbmQgYXZvaWQgc29tZSBvdmVyaGVhZCBmb3Igc21hbGwgYmxvY2tzCisgICAgICAgICAgKi8KKyAgICAgICAgIGNtcCAgICAgICAgcjIsICMoOCs0KQorICAgICAgICAgYm1pICAgICAgICA4ZgorICAgICAgICAKKyAgICAgICAgLyogYWxpZ24gZmlyc3QgcG9pbnRlciB0byB3b3JkIGJvdW5kYXJ5CisgICAgICAgICAqIG9mZnNldCA9IC1zcmMgJiAzCisgICAgICAgICAqLworICAgICAgICByc2IgICAgICAgICByMywgcjQsICMwCisgICAgICAgIGFuZHMgICAgICAgIHIzLCByMywgIzMKKyAgICAgICAgYmVxICAgICAgICAgMGYKKworICAgICAgICAvKiBhbGlnbiBmaXJzdCBwb2ludGVyICAqLworICAgICAgICBzdWIgICAgICAgICByMiwgcjIsIHIzCisxOiAgICAgIGxkcmIgICAgICAgIHIwLCBbcjRdLCAjMQorICAgICAgICBsZHJiICAgICAgICBpcCwgW3IxXSwgIzEKKyAgICAgICAgc3VicyAgICAgICAgcjAsIHIwLCBpcAorICAgICAgICBibmUgICAgICAgICA5ZgorICAgICAgICBzdWJzICAgICAgICByMywgcjMsICMxCisgICAgICAgIGJuZSAgICAgICAgIDFiCisKKworMDogICAgICAvKiBoZXJlIHRoZSBmaXJzdCBwb2ludGVyIGlzIGFsaWduZWQsIGFuZCB3ZSBoYXZlIGF0IGxlYXN0IDQgYnl0ZXMKKyAgICAgICAgICogdG8gcHJvY2Vzcy4KKyAgICAgICAgICovCisKKyAgICAgICAgLyogc2VlIGlmIHRoZSBwb2ludGVycyBhcmUgY29uZ3J1ZW50ICovCisgICAgICAgIGVvciAgICAgICAgIHIwLCByNCwgcjEKKyAgICAgICAgYW5kcyAgICAgICAgcjAsIHIwLCAjMworICAgICAgICBibmUgICAgICAgICA1ZgorCisgICAgICAgIC8qIGNvbmdydWVudCBjYXNlLCAzMiBieXRlcyBwZXIgaXRlcmF0aW9uCisgICAgICAgICAqIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBhdCBsZWFzdCAzMis0IGJ5dGVzIGxlZnQKKyAgICAgICAgICogYmVjYXVzZSB3ZSBlZmZlY3RpdmVseSByZWFkIGFoZWFkIG9uZSB3b3JkLCBhbmQgd2UgY291bGQKKyAgICAgICAgICogcmVhZCBwYXN0IHRoZSBidWZmZXIgKGFuZCBzZWdmYXVsdCkgaWYgd2UncmUgbm90IGNhcmVmdWwuCisgICAgICAgICAqLworCisgICAgICAgIGxkciAgICAgICAgIGlwLCBbcjFdCisgICAgICAgIHN1YnMgICAgICAgIHIyLCByMiwgIygzMiArIDQpCisgICAgICAgIGJtaSAgICAgICAgIDFmCisgICAgICAgIAorMDogICAgICBQTEQgICAgICAgICAocjQsICM2NCkKKyAgICAgICAgUExEICAgICAgICAgKHIxLCAjNjQpCisgICAgICAgIGxkciAgICAgICAgIHIwLCBbcjRdLCAjNAorICAgICAgICBsZHIgICAgICAgICBsciwgW3IxLCAjNF0hCisgICAgICAgIGVvcnMgICAgICAgIHIwLCByMCwgaXAKKyAgICAgICAgbGRyZXEgICAgICAgcjAsIFtyNF0sICM0CisgICAgICAgIGxkcmVxICAgICAgIGlwLCBbcjEsICM0XSEKKyAgICAgICAgZW9yZXFzICAgICAgcjAsIHIwLCBscgorICAgICAgICBsZHJlcSAgICAgICByMCwgW3I0XSwgIzQKKyAgICAgICAgbGRyZXEgICAgICAgbHIsIFtyMSwgIzRdIQorICAgICAgICBlb3JlcXMgICAgICByMCwgcjAsIGlwCisgICAgICAgIGxkcmVxICAgICAgIHIwLCBbcjRdLCAjNAorICAgICAgICBsZHJlcSAgICAgICBpcCwgW3IxLCAjNF0hCisgICAgICAgIGVvcmVxcyAgICAgIHIwLCByMCwgbHIKKyAgICAgICAgbGRyZXEgICAgICAgcjAsIFtyNF0sICM0CisgICAgICAgIGxkcmVxICAgICAgIGxyLCBbcjEsICM0XSEKKyAgICAgICAgZW9yZXFzICAgICAgcjAsIHIwLCBpcAorICAgICAgICBsZHJlcSAgICAgICByMCwgW3I0XSwgIzQKKyAgICAgICAgbGRyZXEgICAgICAgaXAsIFtyMSwgIzRdIQorICAgICAgICBlb3JlcXMgICAgICByMCwgcjAsIGxyCisgICAgICAgIGxkcmVxICAgICAgIHIwLCBbcjRdLCAjNAorICAgICAgICBsZHJlcSAgICAgICBsciwgW3IxLCAjNF0hCisgICAgICAgIGVvcmVxcyAgICAgIHIwLCByMCwgaXAKKyAgICAgICAgbGRyZXEgICAgICAgcjAsIFtyNF0sICM0CisgICAgICAgIGxkcmVxICAgICAgIGlwLCBbcjEsICM0XSEKKyAgICAgICAgZW9yZXFzICAgICAgcjAsIHIwLCBscgorICAgICAgICBibmUgICAgICAgICAyZiAgICAgICAgCisgICAgICAgIHN1YnMgICAgICAgIHIyLCByMiwgIzMyCisgICAgICAgIGJocyAgICAgICAgIDBiCisKKyAgICAgICAgLyogZG8gd2UgaGF2ZSBhdCBsZWFzdCA0IGJ5dGVzIGxlZnQ/ICovCisxOiAgICAgIGFkZHMgICAgICAgIHIyLCByMiwgIygzMiAtIDQgKyA0KQorICAgICAgICBibWkgICAgICAgICA0ZgorICAgICAgICAKKyAgICAgICAgLyogZmluaXNoIG9mZiA0IGJ5dGVzIGF0IGEgdGltZSAqLworMzogICAgICBsZHIgICAgICAgICByMCwgW3I0XSwgIzQKKyAgICAgICAgbGRyICAgICAgICAgaXAsIFtyMV0sICM0CisgICAgICAgIGVvcnMgICAgICAgIHIwLCByMCwgaXAKKyAgICAgICAgYm5lICAgICAgICAgMmYKKyAgICAgICAgc3VicyAgICAgICAgcjIsIHIyLCAjNAorICAgICAgICBiaHMgICAgICAgICAzYgorCisgICAgICAgIC8qIGFyZSB3ZSBkb25lPyAqLworNDogICAgICBhZGRzICAgICAgICByMiwgcjIsICM0CisgICAgICAgIG1vdmVxICAgICAgIHIwLCAjMAorICAgICAgICBiZXEgICAgICAgICA5ZgorCisgICAgICAgIC8qIGZpbmlzaCBvZmYgdGhlIHJlbWFpbmluZyBieXRlcyAqLworICAgICAgICBiICAgICAgICAgICA4ZgorCisyOiAgICAgIC8qIHRoZSBsYXN0IDQgYnl0ZXMgYXJlIGRpZmZlcmVudCwgcmVzdGFydCB0aGVtICovCisgICAgICAgIHN1YiAgICAgICAgIHI0LCByNCwgIzQKKyAgICAgICAgc3ViICAgICAgICAgcjEsIHIxLCAjNAorICAgICAgICBtb3YgICAgICAgICByMiwgIzQKKworICAgICAgICAvKiBwcm9jZXNzIHRoZSBsYXN0IGZldyBieXRlcyAqLworODogICAgICBsZHJiICAgICAgICByMCwgW3I0XSwgIzEKKyAgICAgICAgbGRyYiAgICAgICAgaXAsIFtyMV0sICMxCisgICAgICAgIC8vIHN0YWxsCisgICAgICAgIHN1YnMgICAgICAgIHIwLCByMCwgaXAKKyAgICAgICAgYm5lICAgICAgICAgOWYKKyAgICAgICAgc3VicyAgICAgICAgcjIsIHIyLCAjMQorICAgICAgICBibmUgICAgICAgICA4YgorCis5OiAgICAgIC8qIHJlc3RvcmUgcmVnaXN0ZXJzIGFuZCByZXR1cm4gKi8KKyAgICAgICAgbGRtZmQgICAgICAgc3AhLCB7cjQsIGxyfQorICAgICAgICBieCAgICAgICAgICBscgorCisKKworCisKKzU6ICAgICAgLyoqKioqKioqKioqKioqKiBub24tY29uZ3J1ZW50IGNhc2UgKioqKioqKioqKioqKioqLworICAgICAgICBhbmQgICAgICAgICByMCwgcjEsICMzICAgICAgCisgICAgICAgIGNtcCAgICAgICAgIHIwLCAjMgorICAgICAgICBibmUgICAgICAgICA0ZgorCisgICAgICAgIC8qIGhlcmUsIG9mZnNldCBpcyAyICgxNi1iaXRzIGFsaWduZWQsIHNwZWNpYWwgY2FzZWQpICovCisgICAgICAgIAorICAgICAgICAvKiBtYWtlIHN1cmUgd2UgaGF2ZSBhdCBsZWFzdCAxNiBieXRlcyB0byBwcm9jZXNzICovCisgICAgICAgIHN1YnMgICAgICAgIHIyLCByMiwgIzE2CisgICAgICAgIGFkZG1pICAgICAgIHIyLCByMiwgIzE2CisgICAgICAgIGJtaSAgICAgICAgIDhiCisKKyAgICAgICAgLyogYWxpZ24gdGhlIHVuYWxpZ25lZCBwb2ludGVyICovCisgICAgICAgIGJpYyAgICAgICAgIHIxLCByMSwgIzMKKyAgICAgICAgbGRyICAgICAgICAgbHIsIFtyMV0sICM0CisKKzY6ICAgICAgUExEICAgICAgICAgKHIxLCAjNjQpCisgICAgICAgIFBMRCAgICAgICAgIChyNCwgIzY0KQorICAgICAgICBtb3YgICAgICAgICBpcCwgbHIsIGxzciAjMTYKKyAgICAgICAgbGRyICAgICAgICAgbHIsIFtyMV0sICM0CisgICAgICAgIGxkciAgICAgICAgIHIwLCBbcjRdLCAjNAorICAgICAgICBvcnIgICAgICAgICBpcCwgaXAsIGxyLCBsc2wgIzE2CisgICAgICAgIGVvcnMgICAgICAgIHIwLCByMCwgaXAKKyAgICAgICAgbW92ZXEgICAgICAgaXAsIGxyLCBsc3IgIzE2CisgICAgICAgIGxkcmVxICAgICAgIGxyLCBbcjFdLCAjNAorICAgICAgICBsZHJlcSAgICAgICByMCwgW3I0XSwgIzQKKyAgICAgICAgb3JyZXEgICAgICAgaXAsIGlwLCBsciwgbHNsICMxNgorICAgICAgICBlb3JlcXMgICAgICByMCwgcjAsIGlwCisgICAgICAgIG1vdmVxICAgICAgIGlwLCBsciwgbHNyICMxNgorICAgICAgICBsZHJlcSAgICAgICBsciwgW3IxXSwgIzQKKyAgICAgICAgbGRyZXEgICAgICAgcjAsIFtyNF0sICM0CisgICAgICAgIG9ycmVxICAgICAgIGlwLCBpcCwgbHIsIGxzbCAjMTYKKyAgICAgICAgZW9yZXFzICAgICAgcjAsIHIwLCBpcAorICAgICAgICBtb3ZlcSAgICAgICBpcCwgbHIsIGxzciAjMTYKKyAgICAgICAgbGRyZXEgICAgICAgbHIsIFtyMV0sICM0CisgICAgICAgIGxkcmVxICAgICAgIHIwLCBbcjRdLCAjNAorICAgICAgICBvcnJlcSAgICAgICBpcCwgaXAsIGxyLCBsc2wgIzE2CisgICAgICAgIGVvcmVxcyAgICAgIHIwLCByMCwgaXAKKyAgICAgICAgYm5lICAgICAgICAgN2YKKyAgICAgICAgc3VicyAgICAgICAgcjIsIHIyLCAjMTYKKyAgICAgICAgYmhzICAgICAgICAgNmIKKyAgICAgICAgc3ViICAgICAgICAgcjEsIHIxLCAjMgorICAgICAgICAvKiBhcmUgd2UgZG9uZT8gKi8KKyAgICAgICAgYWRkcyAgICAgICAgcjIsIHIyLCAjMTYKKyAgICAgICAgbW92ZXEgICAgICAgcjAsICMwCisgICAgICAgIGJlcSAgICAgICAgIDliCisgICAgICAgIC8qIGZpbmlzaCBvZmYgdGhlIHJlbWFpbmluZyBieXRlcyAqLworICAgICAgICBiICAgICAgICAgICA4YgorCis3OiAgICAgIC8qIGZpeCB1cCB0aGUgMiBwb2ludGVycyBhbmQgZmFsbHRocm91Z2guLi4gKi8KKyAgICAgICAgc3ViICAgICAgICAgcjEsIHIxLCAjKDQrMikKKyAgICAgICAgc3ViICAgICAgICAgcjQsIHI0LCAjNAorICAgICAgICBtb3YgICAgICAgICByMiwgIzQKKyAgICAgICAgYiAgICAgICAgICAgOGIKKworCis0OiAgICAgIC8qKioqKioqKioqKioqKiogb2Zmc2V0IGlzIDEgb3IgMyAobGVzcyBvcHRpbWl6ZWQpICoqKioqKioqKioqKioqKi8KKworCQlzdG1mZAkJc3AhLCB7cjUsIHI2LCByN30KKworICAgICAgICAvLyByNSA9IHJocworICAgICAgICAvLyByNiA9IGxocworICAgICAgICAvLyByNyA9IHNjcmF0Y2gKKworICAgICAgICBtb3YgICAgICAgICByNSwgcjAsIGxzbCAjMwkJLyogcjUgPSByaWdodCBzaGlmdCAqLworICAgICAgICByc2IgICAgICAgICByNiwgcjUsICMzMiAgICAgICAgIC8qIHI2ID0gbGVmdCBzaGlmdCAqLworCisgICAgICAgIC8qIGFsaWduIHRoZSB1bmFsaWduZWQgcG9pbnRlciAqLworICAgICAgICBiaWMgICAgICAgICByMSwgcjEsICMzCisgICAgICAgIGxkciAgICAgICAgIHI3LCBbcjFdLCAjNAorICAgICAgICBzdWIgICAgICAgICByMiwgcjIsICM4CisKKzY6ICAgICAgbW92ICAgICAgICAgaXAsIHI3LCBsc3IgcjUKKyAgICAgICAgbGRyICAgICAgICAgcjcsIFtyMV0sICM0CisgICAgICAgIGxkciAgICAgICAgIHIwLCBbcjRdLCAjNAorICAgICAgICBvcnIgICAgICAgICBpcCwgaXAsIHI3LCBsc2wgcjYKKyAgICAgICAgZW9ycyAgICAgICAgcjAsIHIwLCBpcAorICAgICAgICBtb3ZlcSAgICAgICBpcCwgcjcsIGxzciByNQorICAgICAgICBsZHJlcSAgICAgICByNywgW3IxXSwgIzQKKyAgICAgICAgbGRyZXEgICAgICAgcjAsIFtyNF0sICM0CisgICAgICAgIG9ycmVxICAgICAgIGlwLCBpcCwgcjcsIGxzbCByNgorICAgICAgICBlb3JlcXMgICAgICByMCwgcjAsIGlwCisgICAgICAgIGJuZSAgICAgICAgIDdmCisgICAgICAgIHN1YnMgICAgICAgIHIyLCByMiwgIzgKKyAgICAgICAgYmhzICAgICAgICAgNmIKKworICAgICAgICBzdWIgICAgICAgICByMSwgcjEsIHI2LCBsc3IgIzMKKwkJbGRtZmQgICAgICAgc3AhLCB7cjUsIHI2LCByN30KKworICAgICAgICAvKiBhcmUgd2UgZG9uZT8gKi8KKyAgICAgICAgYWRkcyAgICAgICAgcjIsIHIyLCAjOAorICAgICAgICBtb3ZlcSAgICAgICByMCwgIzAKKyAgICAgICAgYmVxICAgICAgICAgOWIKKworICAgICAgICAvKiBmaW5pc2ggb2ZmIHRoZSByZW1haW5pbmcgYnl0ZXMgKi8KKyAgICAgICAgYiAgICAgICAgICAgOGIKKworNzogICAgICAvKiBmaXggdXAgdGhlIDIgcG9pbnRlcnMgYW5kIGZhbGx0aHJvdWdoLi4uICovCisgICAgICAgIHN1YiAgICAgICAgIHIxLCByMSwgIzQKKyAgICAgICAgc3ViICAgICAgICAgcjEsIHIxLCByNiwgbHNyICMzCisgICAgICAgIHN1YiAgICAgICAgIHI0LCByNCwgIzQKKyAgICAgICAgbW92ICAgICAgICAgcjIsICM0CisJCWxkbWZkCQlzcCEsIHtyNSwgcjYsIHI3fQorICAgICAgICBiICAgICAgICAgICA4YgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9iaW9uaWMvbWVtY21wMTYuUyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL21lbWNtcDE2LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhkOGI2MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL21lbWNtcDE2LlMKQEAgLTAsMCArMSwyMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPG1hY2hpbmUvY3B1LWZlYXR1cmVzLmg+CisKKyAgICAudGV4dAorCisgICAgLmdsb2JhbCBfX21lbWNtcDE2CisgICAgLnR5cGUgX19tZW1jbXAxNiwgJWZ1bmN0aW9uCisgICAgLmFsaWduIDQKKworLyoKKyAqIE9wdGltaXplZCBtZW1jbXAxNigpIGZvciBBUk05LgorICogVGhpcyB3b3VsZCBub3QgYmUgb3B0aW1hbCBvbiBYU2NhbGUgb3IgQVJNMTEsIHdoZXJlIG1vcmUgcHJlZmV0Y2hpbmcKKyAqIGFuZCB1c2Ugb2YgUExEIHdpbGwgYmUgbmVlZGVkLgorICogVGhlIDIgbWFqb3Igb3B0aW16YXRpb25zIGhlcmUgYXJlCisgKiAoMSkgVGhlIG1haW4gbG9vcCBjb21wYXJlcyAxNiBieXRlcyBhdCBhIHRpbWUKKyAqICgyKSBUaGUgbG9hZHMgYXJlIHNjaGVkdWxlZCBpbiBhIHdheSB0aGV5IHdvbid0IHN0YWxsCisgKi8KKworX19tZW1jbXAxNjoKKyAgICAgICAgUExEICAgICAgICAgKHIwLCAjMCkKKyAgICAgICAgUExEICAgICAgICAgKHIxLCAjMCkKKworICAgICAgICAvKiB0YWtlIG9mIHRoZSBjYXNlIHdoZXJlIGxlbmd0aCBpcyBudWwgb3IgdGhlIGJ1ZmZlcnMgYXJlIHRoZSBzYW1lICovCisgICAgICAgIGNtcCAgICAgICAgIHIwLCByMQorICAgICAgICBjbXBuZSAgICAgICByMiwgIzAKKyAgICAgICAgbW92ZXEgICAgICAgcjAsICMwCisgICAgICAgIGJ4ZXEgICAgICAgIGxyCisKKyAgICAgICAgLyogc2luY2UgcjAgaG9sZCB0aGUgcmVzdWx0LCBtb3ZlIHRoZSBmaXJzdCBzb3VyY2UKKyAgICAgICAgICogcG9pbnRlciBzb21ld2hlcmUgZWxzZQorICAgICAgICAgKi8KKworICAgICAgICBtb3YgICAgICAgICByMywgcjAKKworICAgICAgICAgLyogbWFrZSBzdXJlIHdlIGhhdmUgYXQgbGVhc3QgMTIgd29yZHMsIHRoaXMgc2ltcGxpZnkgdGhpbmdzIGJlbG93CisgICAgICAgICAgKiBhbmQgYXZvaWQgc29tZSBvdmVyaGVhZCBmb3Igc21hbGwgYmxvY2tzCisgICAgICAgICAgKi8KKworICAgICAgICBjbXAgICAgICAgICByMiwgIzEyCisgICAgICAgIGJwbCAgICAgICAgIDBmCisKKyAgICAgICAgLyogc21hbGwgYmxvY2tzIChsZXNzIHRoZW4gMTIgd29yZHMpICovCisgICAgICAgIFBMRCAgICAgICAgIChyMCwgIzMyKQorICAgICAgICBQTEQgICAgICAgICAocjEsICMzMikKKworMTogICAgICBsZHJoICAgICAgICByMCwgW3IzXSwgIzIKKyAgICAgICAgbGRyaCAgICAgICAgaXAsIFtyMV0sICMyCisgICAgICAgIHN1YnMgICAgICAgIHIwLCByMCwgaXAKKyAgICAgICAgYnhuZSAgICAgICAgbHIgICAgICAgIAorICAgICAgICBzdWJzICAgICAgICByMiwgcjIsICMxCisgICAgICAgIGJuZSAgICAgICAgIDFiCisgICAgICAgIGJ4ICAgICAgICAgIGxyCisKKworICAgICAgICAvKiBzYXZlIHJlZ2lzdGVycyAqLworMDogICAgICBzdG1mZCAgICAgICBzcCEsIHtyNCwgbHJ9CisgICAgICAgIAorICAgICAgICAvKiBhbGlnbiBmaXJzdCBwb2ludGVyIHRvIHdvcmQgYm91bmRhcnkgKi8KKyAgICAgICAgdHN0ICAgICAgICAgcjMsICMyCisgICAgICAgIGJlcSAgICAgICAgIDBmCisgICAgICAgIAorICAgICAgICBsZHJoICAgICAgICByMCwgW3IzXSwgIzIKKyAgICAgICAgbGRyaCAgICAgICAgaXAsIFtyMV0sICMyCisgICAgICAgIHN1YiAgICAgICAgIHIyLCByMiwgIzEKKyAgICAgICAgc3VicyAgICAgICAgcjAsIHIwLCBpcAorICAgICAgICAvKiByZXN0b3JlIHJlZ2lzdGVycyBhbmQgcmV0dXJuICovCisgICAgICAgIGxkbW5lZmQgICAgIHNwISwge3I0LCBscn0KKyAgICAgICAgYnhuZSAgICAgICAgbHIKKworCisKKzA6ICAgICAgLyogaGVyZSB0aGUgZmlyc3QgcG9pbnRlciBpcyBhbGlnbmVkLCBhbmQgd2UgaGF2ZSBhdCBsZWFzdCAzIHdvcmRzCisgICAgICAgICAqIHRvIHByb2Nlc3MuCisgICAgICAgICAqLworCisgICAgICAgIC8qIHNlZSBpZiB0aGUgcG9pbnRlcnMgYXJlIGNvbmdydWVudCAqLworICAgICAgICBlb3IgICAgICAgICByMCwgcjMsIHIxCisgICAgICAgIGFuZHMgICAgICAgIHIwLCByMCwgIzIKKyAgICAgICAgYm5lICAgICAgICAgNWYKKworICAgICAgICAvKiBjb25ncnVlbnQgY2FzZSwgMTYgaGFsZi13b3JkcyBwZXIgaXRlcmF0aW9uCisgICAgICAgICAqIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBhdCBsZWFzdCAxNisyIHdvcmRzIGxlZnQKKyAgICAgICAgICogYmVjYXVzZSB3ZSBlZmZlY3RpdmVseSByZWFkIGFoZWFkIG9uZSBsb25nIHdvcmQsIGFuZCB3ZSBjb3VsZAorICAgICAgICAgKiByZWFkIHBhc3QgdGhlIGJ1ZmZlciAoYW5kIHNlZ2ZhdWx0KSBpZiB3ZSdyZSBub3QgY2FyZWZ1bC4KKyAgICAgICAgICovCisKKyAgICAgICAgbGRyICAgICAgICAgaXAsIFtyMV0KKyAgICAgICAgc3VicyAgICAgICAgcjIsIHIyLCAjKDE2ICsgMikKKyAgICAgICAgYm1pICAgICAgICAgMWYKKyAgICAgICAgCiswOgorICAgICAgICBQTEQgICAgICAgICAocjMsICM2NCkKKyAgICAgICAgUExEICAgICAgICAgKHIxLCAjNjQpCisgICAgICAgIGxkciAgICAgICAgIHIwLCBbcjNdLCAjNAorICAgICAgICBsZHIgICAgICAgICBsciwgW3IxLCAjNF0hCisgICAgICAgIGVvcnMgICAgICAgIHIwLCByMCwgaXAKKyAgICAgICAgbGRyZXEgICAgICAgcjAsIFtyM10sICM0CisgICAgICAgIGxkcmVxICAgICAgIGlwLCBbcjEsICM0XSEKKyAgICAgICAgZW9yZXFzICAgICAgcjAsIHIwLCBscgorICAgICAgICBsZHJlcSAgICAgICByMCwgW3IzXSwgIzQKKyAgICAgICAgbGRyZXEgICAgICAgbHIsIFtyMSwgIzRdIQorICAgICAgICBlb3JlcXMgICAgICByMCwgcjAsIGlwCisgICAgICAgIGxkcmVxICAgICAgIHIwLCBbcjNdLCAjNAorICAgICAgICBsZHJlcSAgICAgICBpcCwgW3IxLCAjNF0hCisgICAgICAgIGVvcmVxcyAgICAgIHIwLCByMCwgbHIKKyAgICAgICAgbGRyZXEgICAgICAgcjAsIFtyM10sICM0CisgICAgICAgIGxkcmVxICAgICAgIGxyLCBbcjEsICM0XSEKKyAgICAgICAgZW9yZXFzICAgICAgcjAsIHIwLCBpcAorICAgICAgICBsZHJlcSAgICAgICByMCwgW3IzXSwgIzQKKyAgICAgICAgbGRyZXEgICAgICAgaXAsIFtyMSwgIzRdIQorICAgICAgICBlb3JlcXMgICAgICByMCwgcjAsIGxyCisgICAgICAgIGxkcmVxICAgICAgIHIwLCBbcjNdLCAjNAorICAgICAgICBsZHJlcSAgICAgICBsciwgW3IxLCAjNF0hCisgICAgICAgIGVvcmVxcyAgICAgIHIwLCByMCwgaXAKKyAgICAgICAgbGRyZXEgICAgICAgcjAsIFtyM10sICM0CisgICAgICAgIGxkcmVxICAgICAgIGlwLCBbcjEsICM0XSEKKyAgICAgICAgZW9yZXFzICAgICAgcjAsIHIwLCBscgorICAgICAgICBibmUgICAgICAgICAyZiAgICAgICAgCisgICAgICAgIHN1YnMgICAgICAgIHIyLCByMiwgIzE2CisgICAgICAgIGJocyAgICAgICAgIDBiCisKKyAgICAgICAgLyogZG8gd2UgaGF2ZSBhdCBsZWFzdCAyIHdvcmRzIGxlZnQ/ICovCisxOiAgICAgIGFkZHMgICAgICAgIHIyLCByMiwgIygxNiAtIDIgKyAyKQorICAgICAgICBibWkgICAgICAgICA0ZgorICAgICAgICAKKyAgICAgICAgLyogZmluaXNoIG9mZiAyIHdvcmRzIGF0IGEgdGltZSAqLworMzogICAgICBsZHIgICAgICAgICByMCwgW3IzXSwgIzQKKyAgICAgICAgbGRyICAgICAgICAgaXAsIFtyMV0sICM0CisgICAgICAgIGVvcnMgICAgICAgIHIwLCByMCwgaXAKKyAgICAgICAgYm5lICAgICAgICAgMmYKKyAgICAgICAgc3VicyAgICAgICAgcjIsIHIyLCAjMgorICAgICAgICBiaHMgICAgICAgICAzYgorCisgICAgICAgIC8qIGFyZSB3ZSBkb25lPyAqLworNDogICAgICBhZGRzICAgICAgICByMiwgcjIsICMyCisgICAgICAgIGJuZSAgICAgICAgIDhmCisgICAgICAgIC8qIHJlc3RvcmUgcmVnaXN0ZXJzIGFuZCByZXR1cm4gKi8KKyAgICAgICAgbW92ICAgICAgICAgcjAsICMwCisgICAgICAgIGxkbWZkICAgICAgIHNwISwge3I0LCBscn0KKyAgICAgICAgYnggICAgICAgICAgbHIKKworMjogICAgICAvKiB0aGUgbGFzdCAyIHdvcmRzIGFyZSBkaWZmZXJlbnQsIHJlc3RhcnQgdGhlbSAqLworICAgICAgICBsZHJoICAgICAgICByMCwgW3IzLCAjLTRdCisgICAgICAgIGxkcmggICAgICAgIGlwLCBbcjEsICMtNF0KKyAgICAgICAgc3VicyAgICAgICAgcjAsIHIwLCBpcAorICAgICAgICBsZHJlcWggICAgICByMCwgW3IzLCAjLTJdCisgICAgICAgIGxkcmVxaCAgICAgIGlwLCBbcjEsICMtMl0KKyAgICAgICAgc3ViZXFzICAgICAgcjAsIHIwLCBpcAorICAgICAgICAvKiByZXN0b3JlIHJlZ2lzdGVycyBhbmQgcmV0dXJuICovCisgICAgICAgIGxkbWZkICAgICAgIHNwISwge3I0LCBscn0KKyAgICAgICAgYnggICAgICAgICAgbHIKKworICAgICAgICAvKiBwcm9jZXNzIHRoZSBsYXN0IGZldyB3b3JkcyAqLworODogICAgICBsZHJoICAgICAgICByMCwgW3IzXSwgIzIKKyAgICAgICAgbGRyaCAgICAgICAgaXAsIFtyMV0sICMyCisgICAgICAgIHN1YnMgICAgICAgIHIwLCByMCwgaXAKKyAgICAgICAgYm5lICAgICAgICAgOWYKKyAgICAgICAgc3VicyAgICAgICAgcjIsIHIyLCAjMQorICAgICAgICBibmUgICAgICAgICA4YgorCis5OiAgICAgIC8qIHJlc3RvcmUgcmVnaXN0ZXJzIGFuZCByZXR1cm4gKi8KKyAgICAgICAgbGRtZmQgICAgICAgc3AhLCB7cjQsIGxyfQorICAgICAgICBieCAgICAgICAgICBscgorCisKKzU6ICAgICAgLyoqKioqKioqKioqKioqKiBub24tY29uZ3J1ZW50IGNhc2UgKioqKioqKioqKioqKioqLworCisgICAgICAgIC8qIGFsaWduIHRoZSB1bmFsaWduZWQgcG9pbnRlciAqLworICAgICAgICBiaWMgICAgICAgICByMSwgcjEsICMzCisgICAgICAgIGxkciAgICAgICAgIGxyLCBbcjFdLCAjNAorICAgICAgICBzdWIgICAgICAgICByMiwgcjIsICM4CisKKzY6CisgICAgICAgIFBMRCAgICAgICAgIChyMywgIzY0KQorICAgICAgICBQTEQgICAgICAgICAocjEsICM2NCkKKyAgICAgICAgbW92ICAgICAgICAgaXAsIGxyLCBsc3IgIzE2CisgICAgICAgIGxkciAgICAgICAgIGxyLCBbcjFdLCAjNAorICAgICAgICBsZHIgICAgICAgICByMCwgW3IzXSwgIzQKKyAgICAgICAgb3JyICAgICAgICAgaXAsIGlwLCBsciwgbHNsICMxNgorICAgICAgICBlb3JzICAgICAgICByMCwgcjAsIGlwCisgICAgICAgIG1vdmVxICAgICAgIGlwLCBsciwgbHNyICMxNgorICAgICAgICBsZHJlcSAgICAgICBsciwgW3IxXSwgIzQKKyAgICAgICAgbGRyZXEgICAgICAgcjAsIFtyM10sICM0CisgICAgICAgIG9ycmVxICAgICAgIGlwLCBpcCwgbHIsIGxzbCAjMTYKKyAgICAgICAgZW9yZXFzICAgICAgcjAsIHIwLCBpcAorICAgICAgICBtb3ZlcSAgICAgICBpcCwgbHIsIGxzciAjMTYKKyAgICAgICAgbGRyZXEgICAgICAgbHIsIFtyMV0sICM0CisgICAgICAgIGxkcmVxICAgICAgIHIwLCBbcjNdLCAjNAorICAgICAgICBvcnJlcSAgICAgICBpcCwgaXAsIGxyLCBsc2wgIzE2CisgICAgICAgIGVvcmVxcyAgICAgIHIwLCByMCwgaXAKKyAgICAgICAgbW92ZXEgICAgICAgaXAsIGxyLCBsc3IgIzE2CisgICAgICAgIGxkcmVxICAgICAgIGxyLCBbcjFdLCAjNAorICAgICAgICBsZHJlcSAgICAgICByMCwgW3IzXSwgIzQKKyAgICAgICAgb3JyZXEgICAgICAgaXAsIGlwLCBsciwgbHNsICMxNgorICAgICAgICBlb3JlcXMgICAgICByMCwgcjAsIGlwCisgICAgICAgIGJuZSAgICAgICAgIDdmCisgICAgICAgIHN1YnMgICAgICAgIHIyLCByMiwgIzgKKyAgICAgICAgYmhzICAgICAgICAgNmIKKyAgICAgICAgc3ViICAgICAgICAgcjEsIHIxLCAjMgorICAgICAgICAvKiBhcmUgd2UgZG9uZT8gKi8KKyAgICAgICAgYWRkcyAgICAgICAgcjIsIHIyLCAjOAorICAgICAgICBtb3ZlcSAgICAgICByMCwgIzAKKyAgICAgICAgYmVxICAgICAgICAgOWIKKyAgICAgICAgLyogZmluaXNoIG9mZiB0aGUgcmVtYWluaW5nIGJ5dGVzICovCisgICAgICAgIGIgICAgICAgICAgIDhiCisKKzc6ICAgICAgLyogZml4IHVwIHRoZSAyIHBvaW50ZXJzIGFuZCBmYWxsdGhyb3VnaC4uLiAqLworICAgICAgICBzdWIgICAgICAgICByMSwgcjEsICMyCisgICAgICAgIGIgICAgICAgICAgIDJiCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2Jpb25pYy9tZW1jcHkuUyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL21lbWNweS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjYjU4Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9tZW1jcHkuUwpAQCAtMCwwICsxLDM4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8bWFjaGluZS9jcHUtZmVhdHVyZXMuaD4KKworCS50ZXh0CisKKyAgICAuZ2xvYmFsIG1lbWNweQorICAgIC50eXBlIG1lbWNweSwgJWZ1bmN0aW9uCisgICAgLmFsaWduIDQKKworCQkvKgorCQkgKiBPcHRpbWl6ZWQgbWVtY3B5KCkgZm9yIEFSTS4KKyAgICAgICAgICoKKwkJICogbm90ZSB0aGF0IG1lbWNweSgpIGFsd2F5cyByZXR1cm5zIHRoZSBkZXN0aW5hdGlvbiBwb2ludGVyLAorCQkgKiBzbyB3ZSBoYXZlIHRvIHByZXNlcnZlIFIwLgorCQkgKi8KKwkKK21lbWNweToJCisJCS8qIFRoZSBzdGFjayBtdXN0IGFsd2F5cyBiZSA2NC1iaXRzIGFsaWduZWQgdG8gYmUgY29tcGxpYW50IHdpdGggdGhlIAorCQkgKiBBUk0gQUJJLiBTaW5jZSB3ZSBoYXZlIHRvIHNhdmUgUjAsIHdlIG1pZ2h0IGFzIHdlbGwgc2F2ZSBSNAorCQkgKiB3aGljaCB3ZSBjYW4gdXNlIGZvciBiZXR0ZXIgcGlwZWxpbmluZyBvZiB0aGUgcmVhZHMgYmVsb3cKKwkJICovCisgICAgICAgIC5mbnN0YXJ0CisgICAgICAgIC5zYXZlICAgICAgIHtyMCwgcjQsIGxyfQorICAgICAgICBzdG1mZCAgICAgICBzcCEsIHtyMCwgcjQsIGxyfQorICAgICAgICAvKiBNYWtpbmcgcm9vbSBmb3IgcjUtcjExIHdoaWNoIHdpbGwgYmUgc3BpbGxlZCBsYXRlciAqLworICAgICAgICAucGFkICAgICAgICAjMjgKKyAgICAgICAgc3ViICAgICAgICAgc3AsIHNwLCAjMjgKKworICAgICAgICAvLyBwcmVsb2FkIHRoZSBkZXN0aW5hdGlvbiBiZWNhdXNlIHdlJ2xsIGFsaWduIGl0IHRvIGEgY2FjaGUgbGluZQorICAgICAgICAvLyB3aXRoIHNtYWxsIHdyaXRlcy4gQWxzbyBzdGFydCB0aGUgc291cmNlICJwdW1wIi4KKyAgICAgICAgUExEICAgICAgICAgKHIwLCAjMCkKKyAgICAgICAgUExEICAgICAgICAgKHIxLCAjMCkKKyAgICAgICAgUExEICAgICAgICAgKHIxLCAjMzIpCisKKwkJLyogaXQgc2ltcGxpZmllcyB0aGluZ3MgdG8gdGFrZSBjYXJlIG9mIGxlbjw0IGVhcmx5ICovCisJCWNtcAkJCXIyLCAjNAorCQlibG8JCQljb3B5X2xhc3RfM19hbmRfcmV0dXJuCisKKwkJLyogY29tcHV0ZSB0aGUgb2Zmc2V0IHRvIGFsaWduIHRoZSBzb3VyY2UKKwkJICogb2Zmc2V0ID0gKDQtKHNyYyYzKSkmMyA9IC1zcmMgJiAzCisJCSAqLworCQlyc2IJCQlyMywgcjEsICMwCisJCWFuZHMJCXIzLCByMywgIzMKKwkJYmVxCQkJc3JjX2FsaWduZWQKKworCQkvKiBhbGlnbiBzb3VyY2UgdG8gMzIgYml0cy4gV2UgbmVlZCB0byBpbnNlcnQgMiBpbnN0cnVjdGlvbnMgYmV0d2VlbgorCQkgKiBhIGxkcltifGhdIGFuZCBzdHJbYnxoXSBiZWNhdXNlIGJ5dGUgYW5kIGhhbGYtd29yZCBpbnN0cnVjdGlvbnMKKwkJICogc3RhbGwgMiBjeWNsZXMuCisJCSAqLworCQltb3ZzCQlyMTIsIHIzLCBsc2wgIzMxCisJCXN1YgkJCXIyLCByMiwgcjMJCS8qIHdlIGtub3cgdGhhdCByMyA8PSByMiBiZWNhdXNlIHIyID49IDQgKi8KKwkJbGRybWliCQlyMywgW3IxXSwgIzEKKwkJbGRyY3NiCQlyNCwgW3IxXSwgIzEKKwkJbGRyY3NiCQlyMTIsW3IxXSwgIzEKKyAgICAgICAgc3RybWliCQlyMywgW3IwXSwgIzEKKwkJc3RyY3NiCQlyNCwgW3IwXSwgIzEKKwkJc3RyY3NiCQlyMTIsW3IwXSwgIzEKKwkJCitzcmNfYWxpZ25lZDoKKworCQkvKiBzZWUgaWYgc3JjIGFuZCBkc3QgYXJlIGFsaWduZWQgdG9nZXRoZXIgKGNvbmdydWVudCkgKi8JCisJCWVvcgkJCXIxMiwgcjAsIHIxCisJCXRzdAkJCXIxMiwgIzMKKwkJYm5lCQkJbm9uX2NvbmdydWVudAorCisgICAgICAgIC8qIFVzZSBwb3N0LWluY3JpbWVudCBtb2RlIGZvciBzdG0gdG8gc3BpbGwgcjUtcjExIHRvIHJlc2VydmVkIHN0YWNrCisgICAgICAgICAqIGZyYW1lLiBEb24ndCB1cGRhdGUgc3AuCisgICAgICAgICAqLworICAgICAgICBzdG1lYQkJc3AsIHtyNS1yMTF9CisKKwkJLyogYWxpZ24gdGhlIGRlc3RpbmF0aW9uIHRvIGEgY2FjaGUtbGluZSAqLworCQlyc2IgICAgICAgICByMywgcjAsICMwCisJCWFuZHMJCXIzLCByMywgIzB4MUMKKwkJYmVxICAgICAgICAgY29uZ3J1ZW50X2FsaWduZWQzMgorCQljbXAgICAgICAgICByMywgcjIKKwkJYW5kaGkJCXIzLCByMiwgIzB4MUMKKworCQkvKiBjb25kaXRpb25uYWx5IGNvcGllcyAwIHRvIDcgd29yZHMgKGxlbmd0aCBpbiByMykgKi8KKwkJbW92cwkJcjEyLCByMywgbHNsICMyOCAKKwkJbGRtY3NpYQkJcjEhLCB7cjQsIHI1LCByNiwgcjd9CS8qIDE2IGJ5dGVzICovCisJCWxkbW1paWEJCXIxISwge3I4LCByOX0JCQkvKiAgOCBieXRlcyAqLworCQlzdG1jc2lhCQlyMCEsIHtyNCwgcjUsIHI2LCByN30KKwkJc3RtbWlpYQkJcjAhLCB7cjgsIHI5fQorCQl0c3QgICAgICAgICByMywgIzB4NAorCQlsZHJuZQkJcjEwLFtyMV0sICM0CQkJLyogIDQgYnl0ZXMgKi8KKwkJc3RybmUJCXIxMCxbcjBdLCAjNAorCQlzdWIgICAgICAgICByMiwgcjIsIHIzCisKK2NvbmdydWVudF9hbGlnbmVkMzI6CisJCS8qCisJCSAqIGhlcmUgc291cmNlIGlzIGFsaWduZWQgdG8gMzIgYnl0ZXMuCisJCSAqLworCitjYWNoZWRfYWxpZ25lZDMyOgorICAgICAgICBzdWJzICAgICAgICByMiwgcjIsICMzMgorICAgICAgICBibG8gICAgICAgICBsZXNzX3RoYW5fMzJfbGVmdAorCisgICAgICAgIC8qCisgICAgICAgICAqIFdlIHByZWxvYWQgYSBjYWNoZS1saW5lIHVwIHRvIDY0IGJ5dGVzIGFoZWFkLiBPbiB0aGUgOTI2LCB0aGlzIHdpbGwKKyAgICAgICAgICogc3RhbGwgb25seSB1bnRpbCB0aGUgcmVxdWVzdGVkIHdvcmxkIGlzIGZldGNoZWQsIGJ1dCB0aGUgbGluZWZpbGwgCisgICAgICAgICAqIGNvbnRpbnVlcyBpbiB0aGUgdGhlIGJhY2tncm91bmQuCisgICAgICAgICAqIFdoaWxlIHRoZSBsaW5lZmlsbCBpcyBnb2luZywgd2Ugd3JpdGUgb3VyIHByZXZpb3VzIGNhY2hlLWxpbmUKKyAgICAgICAgICogaW50byB0aGUgd3JpdGUtYnVmZmVyICh3aGljaCBzaG91bGQgaGF2ZSBzb21lIGZyZWUgc3BhY2UpLgorICAgICAgICAgKiBXaGVuIHRoZSBsaW5lZmlsbCBpcyBkb25lLCB0aGUgd3JpdGVidWZmZXIgd2lsbAorICAgICAgICAgKiBzdGFydCBkdW1waW5nIGl0cyBjb250ZW50IGludG8gbWVtb3J5CisgICAgICAgICAqCisgICAgICAgICAqIFdoaWxlIGFsbCB0aGlzIGlzIGdvaW5nLCB3ZSB0aGVuIGxvYWQgYSBmdWxsIGNhY2hlIGxpbmUgaW50bworICAgICAgICAgKiA4IHJlZ2lzdGVycywgdGhpcyBjYWNoZSBsaW5lIHNob3VsZCBiZSBpbiB0aGUgY2FjaGUgYnkgbm93CisgICAgICAgICAqIChvciBwYXJ0bHkgaW4gdGhlIGNhY2hlKS4KKyAgICAgICAgICoKKyAgICAgICAgICogVGhpcyBjb2RlIHNob3VsZCB3b3JrIHdlbGwgcmVnYXJkbGVzcyBvZiB0aGUgc291cmNlL2Rlc3QgYWxpZ25tZW50LgorICAgICAgICAgKgorICAgICAgICAgKi8KKworICAgICAgICAvLyBBbGlnbiB0aGUgcHJlbG9hZCByZWdpc3RlciB0byBhIGNhY2hlLWxpbmUgYmVjYXVzZSB0aGUgY3B1IGRvZXMKKyAgICAgICAgLy8gImNyaXRpY2FsIHdvcmQgZmlyc3QiICh0aGUgZmlyc3Qgd29yZCByZXF1ZXN0ZWQgaXMgbG9hZGVkIGZpcnN0KS4KKyAgICAgICAgYmljICAgICAgICAgcjEyLCByMSwgIzB4MUYKKyAgICAgICAgYWRkICAgICAgICAgcjEyLCByMTIsICM2NAorCisxOiAgICAgIGxkbWlhICAgICAgIHIxISwgeyByNC1yMTEgfQorICAgICAgICBQTEQgICAgICAgICAocjEyLCAjNjQpCisgICAgICAgIHN1YnMgICAgICAgIHIyLCByMiwgIzMyCisKKyAgICAgICAgLy8gTk9URTogaWYgcjEyIGlzIG1vcmUgdGhhbiA2NCBhaGVhZCBvZiByMSwgdGhlIGZvbGxvd2luZyBsZHJoaQorICAgICAgICAvLyBmb3IgQVJNOSBwcmVsb2FkIHdpbGwgbm90IGJlIHNhZmVseSBndWFyZGVkIGJ5IHRoZSBwcmVjZWRpbmcgc3Vicy4KKyAgICAgICAgLy8gV2hlbiBpdCBpcyBzYWZlbHkgZ3VhcmRlZCB0aGUgb25seSBwb3NzaWJpbGl0eSB0byBoYXZlIFNJR1NFR1YgaGVyZSAKKyAgICAgICAgLy8gaXMgYmVjYXVzZSB0aGUgY2FsbGVyIG92ZXJzdGF0ZXMgdGhlIGxlbmd0aC4KKyAgICAgICAgbGRyaGkgICAgICAgcjMsIFtyMTJdLCAjMzIgICAgICAvKiBjaGVhcCBBUk05IHByZWxvYWQgKi8KKyAgICAgICAgc3RtaWEgICAgICAgcjAhLCB7IHI0LXIxMSB9CisJCWJocyAgICAgICAgIDFiCisJCQorICAgICAgICBhZGQgICAgICAgICByMiwgcjIsICMzMgorCisKKworCitsZXNzX3RoYW5fMzJfbGVmdDoKKwkJLyogCisJCSAqIGxlc3MgdGhhbiAzMiBieXRlcyBsZWZ0IGF0IHRoaXMgcG9pbnQgKGxlbmd0aCBpbiByMikKKwkJICovCisKKwkJLyogc2tpcCBhbGwgdGhpcyBpZiB0aGVyZSBpcyBub3RoaW5nIHRvIGRvLCB3aGljaCBzaG91bGQKKwkJICogYmUgYSBjb21tb24gY2FzZSAoaWYgbm90IGV4ZWN1dGVkIHRoZSBjb2RlIGJlbG93IHRha2VzCisJCSAqIGFib3V0IDE2IGN5Y2xlcykKKwkJICovCisJCXRzdAkJCXIyLCAjMHgxRgorCQliZXEJCQkxZgorCisJCS8qIGNvbmRpdGlvbm5hbHkgY29waWVzIDAgdG8gMzEgYnl0ZXMgKi8KKwkJbW92cwkJcjEyLCByMiwgbHNsICMyOCAKKwkJbGRtY3NpYQkJcjEhLCB7cjQsIHI1LCByNiwgcjd9CS8qIDE2IGJ5dGVzICovCisJCWxkbW1paWEJCXIxISwge3I4LCByOX0JCQkvKiAgOCBieXRlcyAqLworCQlzdG1jc2lhCQlyMCEsIHtyNCwgcjUsIHI2LCByN30KKwkJc3RtbWlpYQkJcjAhLCB7cjgsIHI5fQorCQltb3ZzCQlyMTIsIHIyLCBsc2wgIzMwCisJCWxkcmNzCQlyMywgW3IxXSwgIzQJCQkvKiAgNCBieXRlcyAqLworCQlsZHJtaWgJCXI0LCBbcjFdLCAjMgkJCS8qICAyIGJ5dGVzICovCisJCXN0cmNzCQlyMywgW3IwXSwgIzQJCQorCQlzdHJtaWgJCXI0LCBbcjBdLCAjMgorCQl0c3QgICAgICAgICByMiwgIzB4MQorCQlsZHJuZWIJCXIzLCBbcjFdCQkJCS8qICBsYXN0IGJ5dGUgICovCisJCXN0cm5lYgkJcjMsIFtyMF0KKworCQkvKiB3ZSdyZSBkb25lISByZXN0b3JlIGV2ZXJ5dGhpbmcgYW5kIHJldHVybiAqLworMToJCWxkbWZkCQlzcCEsIHtyNS1yMTF9CisJCWxkbWZkCQlzcCEsIHtyMCwgcjQsIGxyfQorCQlieAkJCWxyCisKKwkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitub25fY29uZ3J1ZW50OgorCQkvKgorCQkgKiBoZXJlIHNvdXJjZSBpcyBhbGlnbmVkIHRvIDQgYnl0ZXMKKwkJICogYnV0IGRlc3RpbmF0aW9uIGlzIG5vdC4KKwkJICoKKwkJICogaW4gdGhlIGNvZGUgYmVsb3cgcjIgaXMgdGhlIG51bWJlciBvZiBieXRlcyByZWFkIAorCQkgKiAodGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuIGlzIGFsd2F5cyBzbWFsbGVyLCBiZWNhdXNlIHdlIGhhdmUKKwkJICogcGFydGlhbCB3b3JkcyBpbiB0aGUgc2hpZnQgcXVldWUpCisJCSAqLworCQljbXAJCQlyMiwgIzQKKwkJYmxvCQkJY29weV9sYXN0XzNfYW5kX3JldHVybgorCQkKKyAgICAgICAgLyogVXNlIHBvc3QtaW5jcmltZW50IG1vZGUgZm9yIHN0bSB0byBzcGlsbCByNS1yMTEgdG8gcmVzZXJ2ZWQgc3RhY2sKKyAgICAgICAgICogZnJhbWUuIERvbid0IHVwZGF0ZSBzcC4KKyAgICAgICAgICovCisgICAgICAgIHN0bWVhCQlzcCwge3I1LXIxMX0KKwkJCisJCS8qIGNvbXB1dGUgc2hpZnRzIG5lZWRlZCB0byBhbGlnbiBzcmMgdG8gZGVzdCAqLworCQlyc2IJCQlyNSwgcjAsICMwCisJCWFuZAkJCXI1LCByNSwgIzMJCQkvKiByNSA9ICMgYnl0ZXMgaW4gcGFydGlhbCB3b3JkcyAqLworCQltb3YJCQlyMTIsIHI1LCBsc2wgIzMJCS8qIHIxMiA9IHJpZ2h0ICovIAorCQlyc2IJCQlsciwgcjEyLCAjMzIJCS8qIGxyID0gbGVmdCAgKi8KKwkJCisJCS8qIHJlYWQgdGhlIGZpcnN0IHdvcmQgKi8KKwkJbGRyCQkJcjMsIFtyMV0sICM0CisJCXN1YgkJCXIyLCByMiwgIzQKKwkJCisJCS8qIHdyaXRlIGEgcGFydGlhbCB3b3JkICgwIHRvIDMgYnl0ZXMpLCBzdWNoIHRoYXQgZGVzdGluYXRpb24KKwkJICogYmVjb21lcyBhbGlnbmVkIHRvIDMyIGJpdHMgKHI1ID0gbmIgb2Ygd29yZHMgdG8gY29weSBmb3IgYWxpZ25tZW50KQorCQkgKi8KKwkJbW92cwkJcjUsIHI1LCBsc2wgIzMxCisJCXN0cm1pYgkJcjMsIFtyMF0sICMxCisJCW1vdm1pCQlyMywgcjMsIGxzciAjOAkJCisJCXN0cmNzYgkJcjMsIFtyMF0sICMxCisJCW1vdmNzCQlyMywgcjMsIGxzciAjOAorCQlzdHJjc2IJCXIzLCBbcjBdLCAjMQorCQltb3ZjcwkJcjMsIHIzLCBsc3IgIzgKKworCQljbXAJCQlyMiwgIzQKKwkJYmxvCQkJcGFydGlhbF93b3JkX3RhaWwKKwkJCisJCS8qIEFsaWduIGRlc3RpbmF0aW9uIHRvIDMyIGJ5dGVzIChjYWNoZSBsaW5lIGJvdW5kYXJ5KSAqLworMToJCXRzdAkJCXIwLCAjMHgxYworCQliZXEJCQkyZgorCQlsZHIJCQlyNSwgW3IxXSwgIzQKKwkJc3ViICAgICAgICAgcjIsIHIyLCAjNAorCQlvcnIJCQlyNCwgcjMsIHI1LAkJbHNsIGxyCisJCW1vdgkJCXIzLCByNSwJCQlsc3IgcjEyCisJCXN0cgkJCXI0LCBbcjBdLCAjNAorICAgICAgICBjbXAgICAgICAgICByMiwgIzQKKwkJYmhzCQkJMWIKKwkJYmxvCQkJcGFydGlhbF93b3JkX3RhaWwKKworCQkvKiBjb3B5IDMyIGJ5dGVzIGF0IGEgdGltZSAqLworMjoJCXN1YnMJCXIyLCByMiwgIzMyCisJCWJsbwkJCWxlc3NfdGhhbl90aGlydHl0d28KKworCQkvKiBVc2UgaW1tZWRpYXRlIG1vZGUgZm9yIHRoZSBzaGlmdHMsIGJlY2F1c2UgdGhlcmUgaXMgYW4gZXh0cmEgY3ljbGUKKwkJICogZm9yIHJlZ2lzdGVyIHNoaWZ0cywgd2hpY2ggY291bGQgYWNjb3VudCBmb3IgdXAgdG8gNTAlIG9mCisJCSAqIHBlcmZvcm1hbmNlIGhpdC4KKwkJICovCisKKyAgICAgICAgY21wCQkJcjEyLCAjMjQKKwkJYmVxCQkJbG9vcDI0CisJCWNtcAkJCXIxMiwgIzgKKwkJYmVxCQkJbG9vcDgKKworbG9vcDE2OgorICAgICAgICBsZHIgICAgICAgICByMTIsIFtyMV0sICM0CisxOiAgICAgIG1vdiAgICAgICAgIHI0LCByMTIKKwkJbGRtaWEJCXIxISwgeyAgIHI1LHI2LHI3LCAgcjgscjkscjEwLHIxMX0KKyAgICAgICAgUExEICAgICAgICAgKHIxLCAjNjQpCisgICAgICAgIHN1YnMgICAgICAgIHIyLCByMiwgIzMyCisgICAgICAgIGxkcmhzICAgICAgIHIxMiwgW3IxXSwgIzQKKwkJb3JyCQkJcjMsIHIzLCByNCwJCWxzbCAjMTYKKwkJbW92CQkJcjQsIHI0LAkJCWxzciAjMTYKKwkJb3JyCQkJcjQsIHI0LCByNSwJCWxzbCAjMTYKKwkJbW92CQkJcjUsIHI1LAkJCWxzciAjMTYKKwkJb3JyCQkJcjUsIHI1LCByNiwJCWxzbCAjMTYKKwkJbW92CQkJcjYsIHI2LAkJCWxzciAjMTYKKwkJb3JyCQkJcjYsIHI2LCByNywJCWxzbCAjMTYKKwkJbW92CQkJcjcsIHI3LAkJCWxzciAjMTYKKwkJb3JyCQkJcjcsIHI3LCByOCwJCWxzbCAjMTYKKwkJbW92CQkJcjgsIHI4LAkJCWxzciAjMTYKKwkJb3JyCQkJcjgsIHI4LCByOSwJCWxzbCAjMTYKKwkJbW92CQkJcjksIHI5LAkJCWxzciAjMTYKKwkJb3JyCQkJcjksIHI5LCByMTAsCWxzbCAjMTYKKwkJbW92CQkJcjEwLCByMTAsCQlsc3IgIzE2CisJCW9ycgkJCXIxMCwgcjEwLCByMTEsCWxzbCAjMTYKKwkJc3RtaWEJCXIwISwge3IzLHI0LHI1LHI2LCByNyxyOCxyOSxyMTB9CisJCW1vdgkJCXIzLCByMTEsCQlsc3IgIzE2CisJCWJocwkJCTFiCisJCWIJCQlsZXNzX3RoYW5fdGhpcnR5dHdvCisKK2xvb3A4OgorICAgICAgICBsZHIgICAgICAgICByMTIsIFtyMV0sICM0CisxOiAgICAgIG1vdiAgICAgICAgIHI0LCByMTIKKwkJbGRtaWEJCXIxISwgeyAgIHI1LHI2LHI3LCAgcjgscjkscjEwLHIxMX0KKyAgICAgICAgUExEICAgICAgICAgKHIxLCAjNjQpCisJCXN1YnMJCXIyLCByMiwgIzMyCisgICAgICAgIGxkcmhzICAgICAgIHIxMiwgW3IxXSwgIzQKKwkJb3JyCQkJcjMsIHIzLCByNCwJCWxzbCAjMjQKKwkJbW92CQkJcjQsIHI0LAkJCWxzciAjOAorCQlvcnIJCQlyNCwgcjQsIHI1LAkJbHNsICMyNAorCQltb3YJCQlyNSwgcjUsCQkJbHNyICM4CisJCW9ycgkJCXI1LCByNSwgcjYsCQlsc2wgIzI0CisJCW1vdgkJCXI2LCByNiwJCQlsc3IgIzgKKwkJb3JyCQkJcjYsIHI2LCByNywJCWxzbCAjMjQKKwkJbW92CQkJcjcsIHI3LAkJCWxzciAjOAorCQlvcnIJCQlyNywgcjcsIHI4LAkJbHNsICMyNAorCQltb3YJCQlyOCwgcjgsCQkJbHNyICM4CisJCW9ycgkJCXI4LCByOCwgcjksCQlsc2wgIzI0CisJCW1vdgkJCXI5LCByOSwJCQlsc3IgIzgKKwkJb3JyCQkJcjksIHI5LCByMTAsCWxzbCAjMjQKKwkJbW92CQkJcjEwLCByMTAsCQlsc3IgIzgKKwkJb3JyCQkJcjEwLCByMTAsIHIxMSwJbHNsICMyNAorCQlzdG1pYQkJcjAhLCB7cjMscjQscjUscjYsIHI3LHI4LHI5LHIxMH0KKwkJbW92CQkJcjMsIHIxMSwJCWxzciAjOAorCQliaHMJCQkxYgorCQliCQkJbGVzc190aGFuX3RoaXJ0eXR3bworCitsb29wMjQ6CisgICAgICAgIGxkciAgICAgICAgIHIxMiwgW3IxXSwgIzQKKzE6ICAgICAgbW92ICAgICAgICAgcjQsIHIxMgorCQlsZG1pYQkJcjEhLCB7ICAgcjUscjYscjcsICByOCxyOSxyMTAscjExfQorICAgICAgICBQTEQgICAgICAgICAocjEsICM2NCkKKwkJc3VicwkJcjIsIHIyLCAjMzIKKyAgICAgICAgbGRyaHMgICAgICAgcjEyLCBbcjFdLCAjNAorCQlvcnIJCQlyMywgcjMsIHI0LAkJbHNsICM4CisJCW1vdgkJCXI0LCByNCwJCQlsc3IgIzI0CisJCW9ycgkJCXI0LCByNCwgcjUsCQlsc2wgIzgKKwkJbW92CQkJcjUsIHI1LAkJCWxzciAjMjQKKwkJb3JyCQkJcjUsIHI1LCByNiwJCWxzbCAjOAorCQltb3YJCQlyNiwgcjYsCQkJbHNyICMyNAorCQlvcnIJCQlyNiwgcjYsIHI3LAkJbHNsICM4CisJCW1vdgkJCXI3LCByNywJCQlsc3IgIzI0CisJCW9ycgkJCXI3LCByNywgcjgsCQlsc2wgIzgKKwkJbW92CQkJcjgsIHI4LAkJCWxzciAjMjQKKwkJb3JyCQkJcjgsIHI4LCByOSwJCWxzbCAjOAorCQltb3YJCQlyOSwgcjksCQkJbHNyICMyNAorCQlvcnIJCQlyOSwgcjksIHIxMCwJbHNsICM4CisJCW1vdgkJCXIxMCwgcjEwLAkJbHNyICMyNAorCQlvcnIJCQlyMTAsIHIxMCwgcjExLAlsc2wgIzgKKwkJc3RtaWEJCXIwISwge3IzLHI0LHI1LHI2LCByNyxyOCxyOSxyMTB9CisJCW1vdgkJCXIzLCByMTEsCQlsc3IgIzI0CisJCWJocwkJCTFiCisKKworbGVzc190aGFuX3RoaXJ0eXR3bzoKKwkJLyogY29weSB0aGUgbGFzdCAwIHRvIDMxIGJ5dGVzIG9mIHRoZSBzb3VyY2UgKi8KKwkJcnNiCQkJcjEyLCBsciwgIzMyCQkvKiB3ZSBjb3JydXB0ZWQgcjEyLCByZWNvbXB1dGUgaXQgICovCisJCWFkZAkJCXIyLCByMiwgIzMyCisJCWNtcAkJCXIyLCAjNAorCQlibG8JCQlwYXJ0aWFsX3dvcmRfdGFpbAorCisxOgkJbGRyCQkJcjUsIFtyMV0sICM0CisJCXN1YiAgICAgICAgIHIyLCByMiwgIzQKKwkJb3JyCQkJcjQsIHIzLCByNSwJCWxzbCBscgorCQltb3YJCQlyMywJcjUsCQkJbHNyIHIxMgorCQlzdHIJCQlyNCwgW3IwXSwgIzQKKyAgICAgICAgY21wICAgICAgICAgcjIsICM0CisJCWJocwkJCTFiCisKK3BhcnRpYWxfd29yZF90YWlsOgorCQkvKiB3ZSBoYXZlIGEgcGFydGlhbCB3b3JkIGluIHRoZSBpbnB1dCBidWZmZXIgKi8KKwkJbW92cwkJcjUsIGxyLCBsc2wgIygzMS0zKQorCQlzdHJtaWIJCXIzLCBbcjBdLCAjMQorCQltb3ZtaQkJcjMsIHIzLCBsc3IgIzgKKwkJc3RyY3NiCQlyMywgW3IwXSwgIzEKKwkJbW92Y3MJCXIzLCByMywgbHNyICM4CisJCXN0cmNzYgkJcjMsIFtyMF0sICMxCisJCQorCQkvKiBSZWZpbGwgc3BpbGxlZCByZWdpc3RlcnMgZnJvbSB0aGUgc3RhY2suIERvbid0IHVwZGF0ZSBzcC4gKi8KKwkJbGRtZmQJCXNwLCB7cjUtcjExfQorCitjb3B5X2xhc3RfM19hbmRfcmV0dXJuOgorCQltb3ZzCQlyMiwgcjIsIGxzbCAjMzEJLyogY29weSByZW1haW5pbmcgMCwgMSwgMiBvciAzIGJ5dGVzICovCisJCWxkcm1pYgkJcjIsIFtyMV0sICMxCisJCWxkcmNzYgkJcjMsIFtyMV0sICMxCisJCWxkcmNzYgkJcjEyLFtyMV0KKwkJc3RybWliCQlyMiwgW3IwXSwgIzEKKwkJc3RyY3NiCQlyMywgW3IwXSwgIzEKKwkJc3RyY3NiCQlyMTIsW3IwXQorCisgICAgICAgIC8qIHdlJ3JlIGRvbmUhIHJlc3RvcmUgc3AgYW5kIHNwaWxsZWQgcmVnaXN0ZXJzIGFuZCByZXR1cm4gKi8KKyAgICAgICAgYWRkICAgICAgICAgc3AsICBzcCwgIzI4CisJCWxkbWZkCQlzcCEsIHtyMCwgcjQsIGxyfQorCQlieAkJCWxyCisgICAgICAgIC5mbmVuZAorCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2Jpb25pYy9tZW1zZXQuUyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL21lbXNldC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MmQ2MjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9tZW1zZXQuUwpAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCS50ZXh0CisKKyAgICAuZ2xvYmFsIG1lbXNldAorICAgIC50eXBlIG1lbXNldCwgJWZ1bmN0aW9uCisKKyAgICAuZ2xvYmFsIGJ6ZXJvCisgICAgLnR5cGUgYnplcm8sICVmdW5jdGlvbgorCisgICAgLmFsaWduCisJCisJCS8qCisJCSAqIE9wdGltaXplZCBtZW1zZXQoKSBmb3IgQVJNLgorICAgICAgICAgKgorICAgICAgICAgKiBtZW1zZXQoKSByZXR1cm5zIGl0cyBmaXJzdCBhcmd1bWVudC4KKwkJICovCisJCitiemVybzoKKyAgICAgICAgbW92ICAgICByMiwgcjEKKyAgICAgICAgbW92ICAgICByMSwgIzAKKworbWVtc2V0OgkKKwkJLyogY29tcHV0ZSB0aGUgb2Zmc2V0IHRvIGFsaWduIHRoZSBkZXN0aW5hdGlvbgorCQkgKiBvZmZzZXQgPSAoNC0oc3JjJjMpKSYzID0gLXNyYyAmIDMKKwkJICovCisgICAgICAgIC5mbnN0YXJ0CisgICAgICAgIC5zYXZlICAgICAgIHtyMCwgcjQtcjcsIGxyfQorCQlzdG1mZAkJc3AhLCB7cjAsIHI0LXI3LCBscn0KKwkJcnNiCQkJcjMsIHIwLCAjMAorCQlhbmRzCQlyMywgcjMsICMzCisgICAgICAgIGNtcCAgICAgICAgIHIzLCByMgorICAgICAgICBtb3ZoaSAgICAgICByMywgcjIKKworICAgICAgICAvKiBzcGxhdCByMSAqLworICAgICAgICBtb3YgICAgICAgICByMSwgcjEsIGxzbCAjMjQKKyAgICAgICAgb3JyICAgICAgICAgcjEsIHIxLCByMSwgbHNyICM4CisgICAgICAgIG9yciAgICAgICAgIHIxLCByMSwgcjEsIGxzciAjMTYKKworCQltb3ZzCQlyMTIsIHIzLCBsc2wgIzMxCisJCXN0cmNzYgkJcjEsIFtyMF0sICMxICAgIC8qIGNhbid0IHVzZSBzdHJoIChhbGlnbm1lbnQgdW5rbm93bikgKi8KKwkJc3RyY3NiCQlyMSwgW3IwXSwgIzEKKwkJc3RybWliCQlyMSwgW3IwXSwgIzEKKwkJc3VicwkJcjIsIHIyLCByMworICAgICAgICBsZG1sc2ZkICAgICBzcCEsIHtyMCwgcjQtcjcsIGxyfSAgIC8qIHJldHVybiAqLworICAgICAgICBieGxzICAgICAgICBscgorCisJCS8qIGFsaWduIHRoZSBkZXN0aW5hdGlvbiB0byBhIGNhY2hlLWxpbmUgKi8KKyAgICAgICAgbW92ICAgICAgICAgcjEyLCByMQorICAgICAgICBtb3YgICAgICAgICBsciwgcjEKKyAgICAgICAgbW92ICAgICAgICAgcjQsIHIxCisgICAgICAgIG1vdiAgICAgICAgIHI1LCByMQorICAgICAgICBtb3YgICAgICAgICByNiwgcjEKKyAgICAgICAgbW92ICAgICAgICAgcjcsIHIxCisgICAgICAgIAorCQlyc2IgICAgICAgICByMywgcjAsICMwCisJCWFuZHMJCXIzLCByMywgIzB4MUMKKwkJYmVxICAgICAgICAgYWxpZ25lZDMyCisJCWNtcCAgICAgICAgIHIzLCByMgorCQlhbmRoaQkJcjMsIHIyLCAjMHgxQworCQlzdWIgICAgICAgICByMiwgcjIsIHIzCisKKwkJLyogY29uZGl0aW9ubmFseSB3cml0ZXMgMCB0byA3IHdvcmRzIChsZW5ndGggaW4gcjMpICovCisJCW1vdnMJCXIzLCByMywgbHNsICMyOAorCQlzdG1jc2lhCQlyMCEsIHtyMSwgbHJ9CisJCXN0bWNzaWEJCXIwISwge3IxLCBscn0KKwkJc3RtbWlpYQkJcjAhLCB7cjEsIGxyfQorCQltb3ZzCQlyMywgcjMsIGxzbCAjMgorICAgICAgICBzdHJjcyAgICAgICByMSwgW3IwXSwgIzQKKworYWxpZ25lZDMyOgorICAgICAgICBzdWJzICAgICAgICByMiwgcjIsICMzMgorICAgICAgICBtb3YgICAgICAgICByMywgcjEKKyAgICAgICAgYm1pICAgICAgICAgMmYKKzE6ICAgICAgc3VicyAgICAgICAgcjIsIHIyLCAjMzIKKyAgICAgICAgc3RtaWEJCXIwISwge3IxLHIzLHI0LHI1LHI2LHI3LHIxMixscn0KKyAgICAgICAgYmhzICAgICAgICAgMWIKKzI6ICAgICAgYWRkICAgICAgICAgcjIsIHIyLCAjMzIKKworCQkvKiBjb25kaXRpb25uYWx5IHN0b3JlcyAwIHRvIDMxIGJ5dGVzICovCisJCW1vdnMJCXIyLCByMiwgbHNsICMyOAorCQlzdG1jc2lhCQlyMCEsIHtyMSxyMyxyMTIsbHJ9CisJCXN0bW1paWEJCXIwISwge3IxLCBscn0KKwkJbW92cwkJcjIsIHIyLCBsc2wgIzIKKyAgICAgICAgc3RyY3MgICAgICAgcjEsIFtyMF0sICM0CisJCXN0cm1paAkJcjEsIFtyMF0sICMyCisJCW1vdnMJCXIyLCByMiwgbHNsICMyCisJCXN0cmNzYgkJcjEsIFtyMF0KKyAgICAgICAgbGRtZmQJCXNwISwge3IwLCByNC1yNywgbHJ9CisgICAgICAgIGJ4ICAgICAgICAgIGxyCisgICAgICAgIC5mbmVuZAorICAgIApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9iaW9uaWMvc2V0am1wLlMgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9zZXRqbXAuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWY2ZWE0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvc2V0am1wLlMKQEAgLTAsMCArMSwxMzYgQEAKKy8qCSRPcGVuQlNEOiBzZXRqbXAuUyx2IDEuMiAyMDA0LzAyLzAxIDA1OjQwOjUyIGRyYWhuIEV4cCAkCSovCisvKgkkTmV0QlNEOiBzZXRqbXAuUyx2IDEuNSAyMDAzLzA0LzA1IDIzOjA4OjUxIGJqaDIxIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTcgTWFyayBCcmluaWNvbWJlCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKglUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IE1hcmsgQnJpbmljb21iZQorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8bWFjaGluZS9zZXRqbXAuaD4KKworLyoKKyAqIEMgbGlicmFyeSAtLSBzZXRqbXAsIGxvbmdqbXAKKyAqCisgKglsb25nam1wKGEsdikKKyAqIHdpbGwgZ2VuZXJhdGUgYSAicmV0dXJuKHYpIiBmcm9tIHRoZSBsYXN0IGNhbGwgdG8KKyAqCXNldGptcChhKQorICogYnkgcmVzdG9yaW5nIHJlZ2lzdGVycyBmcm9tIHRoZSBzdGFjay4KKyAqIFRoZSBwcmV2aW91cyBzaWduYWwgc3RhdGUgaXMgcmVzdG9yZWQuCisgKi8KKworRU5UUlkoc2V0am1wKQorCS8qIEJsb2NrIGFsbCBzaWduYWxzIGFuZCByZXRyaWV2ZSB0aGUgb2xkIHNpZ25hbCBtYXNrICovCisJc3RtZmQJc3AhLCB7cjAsIHIxNH0KKwltb3YJcjAsICMweDAwMDAwMDAwCisKKwlibAlQSUNfU1lNKF9DX0xBQkVMKHNpZ2Jsb2NrKSwgUExUKQorCW1vdglyMSwgcjAKKworCWxkbWZkCXNwISwge3IwLCByMTR9CisKKwkvKiBTdG9yZSBzaWduYWwgbWFzayAqLworCXN0cglyMSwgW3IwLCAjKDI1ICogNCldCisKKwlsZHIJcjEsIC5Mc2V0am1wX21hZ2ljCisJc3RyCXIxLCBbcjBdLCAjNAorCisjaWZkZWYgU09GVEZMT0FUCisJYWRkCXIwLCByMCwgIzUyCisjZWxzZQorCS8qIFN0b3JlIGZwIHJlZ2lzdGVycyAqLworCXNmbQlmNCwgNCwgW3IwXSwgIzQ4CisJLyogU3RvcmUgZnBzciAqLworCXJmcwlyMQorCXN0cglyMSwgW3IwXSwgIzB4MDAwNAorI2VuZGlmCS8qU09GVEZMT0FUKi8KKwkvKiBTdG9yZSBpbnRlZ2VyIHJlZ2lzdGVycyAqLworICAgICAgICBzdG1pYQlyMCwge3I0LXIxNH0KKyAgICAgICAgbW92CXIwLCAjMHgwMDAwMDAwMAorICAgICAgICBieCAgICAgIGxyCisKKy5Mc2V0am1wX21hZ2ljOgorCS53b3JkCV9KQl9NQUdJQ19TRVRKTVAKKworCitFTlRSWShsb25nam1wKQorCWxkcglyMiwgLkxzZXRqbXBfbWFnaWMKKwlsZHIJcjMsIFtyMF0KKwl0ZXEJcjIsIHIzCisJYm5lCWJvdGNoCisKKwkvKiBGZXRjaCBzaWduYWwgbWFzayAqLworCWxkcglyMiwgW3IwLCAjKDI1ICogNCldCisKKwkvKiBTZXQgc2lnbmFsIG1hc2sgKi8KKwlzdG1mZAlzcCEsIHtyMCwgcjEsIHIxNH0KKwlzdWIJc3AsIHNwLCAjNAkvKiBhbGlnbiB0aGUgc3RhY2sgKi8KKworCW1vdglyMCwgcjIKKwlibAlQSUNfU1lNKF9DX0xBQkVMKHNpZ3NldG1hc2spLCBQTFQpCisKKwlhZGQJc3AsIHNwLCAjNAkvKiB1bmFsaWduIHRoZSBzdGFjayAqLworCWxkbWZkCXNwISwge3IwLCByMSwgcjE0fSAKKworCWFkZAlyMCwgcjAsICM0CisjaWZkZWYgU09GVEZMT0FUCisJYWRkCXIwLCByMCwgIzUyCisjZWxzZQorCS8qIFJlc3RvcmUgZnAgcmVnaXN0ZXJzICovCisJbGZtCWY0LCA0LCBbcjBdLCAjNDgKKwkvKiBSZXN0b3JlIEZQU1IgKi8KKwlsZHIJcjQsIFtyMF0sICMweDAwMDQKKwl3ZnMJcjQKKyNlbmRpZgkvKiBTT0ZURkxPQVQgKi8KKwkvKiBSZXN0b3JlIGludGVnZXIgcmVnaXN0ZXJzICovCisgICAgICAgIGxkbWlhCXIwLCB7cjQtcjE0fQorCisJLyogVmFsaWRhdGUgc3AgYW5kIHIxNCAqLworCXRlcQlzcCwgIzAKKwl0ZXFuZQlyMTQsICMwCisJYmVxCWJvdGNoCisKKwkvKiBTZXQgcmV0dXJuIHZhbHVlICovCisKKwltb3YJcjAsIHIxCisJdGVxCXIwLCAjMHgwMDAwMDAwMAorCW1vdmVxCXIwLCAjMHgwMDAwMDAwMQorICAgICAgICBieCAgICAgIGxyCisjaWZkZWYgX19BUk1fMjZfXworCW1vdglyMTUsIHIxNAorI2Vsc2UKKwltb3YJcjE1LCByMTQKKyNlbmRpZgorCisJLyogdmFsaWRhdGlvbiBmYWlsZWQsIGRpZSBkaWUgZGllLiAqLworYm90Y2g6CisJYmwJUElDX1NZTShfQ19MQUJFTChsb25nam1wZXJyb3IpLCBQTFQpCisJYmwJUElDX1NZTShfQ19MQUJFTChhYm9ydCksIFBMVCkKKwliCS4gLSA4CQkvKiBDYW5ub3QgZ2V0IGhlcmUgKi8KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL3NpZ3NldGptcC5TIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvc2lnc2V0am1wLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBlNjQyOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL3NpZ3NldGptcC5TCkBAIC0wLDAgKzEsNjIgQEAKKy8qCSRPcGVuQlNEOiBzaWdzZXRqbXAuUyx2IDEuMiAyMDA0LzAyLzAxIDA1OjQwOjUyIGRyYWhuIEV4cCAkCSovCisvKgkkTmV0QlNEOiBzaWdzZXRqbXAuUyx2IDEuMyAyMDAyLzA4LzE3IDE5OjU0OjMwIHRob3JwZWogRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk5NyBNYXJrIEJyaW5pY29tYmUKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgTWFyayBCcmluaWNvbWJlCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxtYWNoaW5lL3NldGptcC5oPgorCisvKgorICogQyBsaWJyYXJ5IC0tIHNpZ3NldGptcCwgc2lnbG9uZ2ptcAorICoKKyAqCWxvbmdqbXAoYSx2KQorICogd2lsbCBnZW5lcmF0ZSBhICJyZXR1cm4odikiIGZyb20gdGhlIGxhc3QgY2FsbCB0bworICoJc2V0am1wKGEsIG0pCisgKiBieSByZXN0b3JpbmcgcmVnaXN0ZXJzIGZyb20gdGhlIHN0YWNrLgorICogVGhlIHByZXZpb3VzIHNpZ25hbCBzdGF0ZSBpcyByZXN0b3JlZC4KKyAqLworCitFTlRSWShzaWdzZXRqbXApCisJdGVxCXIxLCAjMAorCWJlcQlQSUNfU1lNKF9DX0xBQkVMKF9zZXRqbXApLCBQTFQpCisJYglQSUNfU1lNKF9DX0xBQkVMKHNldGptcCksIFBMVCkKKworLkxfc2V0am1wX21hZ2ljOgorCS53b3JkCV9KQl9NQUdJQ19fU0VUSk1QCisKK0VOVFJZKHNpZ2xvbmdqbXApCisJbGRyCXIyLCAuTF9zZXRqbXBfbWFnaWMKKwlsZHIJcjMsIFtyMF0KKwl0ZXEJcjIsIHIzCisJYmVxCVBJQ19TWU0oX0NfTEFCRUwoX2xvbmdqbXApLCBQTFQpCisJYglQSUNfU1lNKF9DX0xBQkVMKGxvbmdqbXApLCBQTFQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2Jpb25pYy9zdHJsZW4uYyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL3N0cmxlbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxNjMyZTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9zdHJsZW4uYwpAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPG1hY2hpbmUvY3B1LWZlYXR1cmVzLmg+CisKK3NpemVfdCBzdHJsZW4oY29uc3QgY2hhciAqcykKK3sKKyAgICBfX2J1aWx0aW5fcHJlZmV0Y2gocyk7CisgICAgX19idWlsdGluX3ByZWZldGNoKHMrMzIpOworICAgIAorICAgIHVuaW9uIHsKKyAgICAgICAgY29uc3QgY2hhciAgICAgICpiOworICAgICAgICBjb25zdCB1aW50MzJfdCAgKnc7CisgICAgICAgIHVpbnRwdHJfdCAgICAgICBpOworICAgIH0gdTsKKyAgICAKKyAgICAvLyB0aGVzZSBhcmUgc29tZSBzY3JhdGNoIHZhcmlhYmxlcyBmb3IgdGhlIGFzbSBjb2RlIGJlbG93CisgICAgdWludDMyX3QgdiwgdDsKKyAgICAKKyAgICAvLyBpbml0aWFsaXplIHRoZSBzdHJpbmcgbGVuZ3RoIHRvIHplcm8KKyAgICBzaXplX3QgbCA9IDA7CisKKyAgICAvLyBhbGlnbiB0aGUgcG9pbnRlciB0byBhIDMyLWJpdCB3b3JkIGJvdW5kYXJ5CisgICAgdS5iID0gczsKKyAgICB3aGlsZSAodS5pICYgMHgzKSAgeworICAgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCgqdS5iKysgPT0gMCwgMCkpIHsKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgfQorICAgICAgICBsKys7CisgICAgfQorCisgICAgLy8gbG9vcCBmb3IgZWFjaCB3b3JkLCB0ZXN0aW5nIGlmIGl0IGNvbnRhaW5zIGEgemVybyBieXRlCisgICAgLy8gaWYgc28sIGV4aXQgdGhlIGxvb3AgYW5kIHVwZGF0ZSB0aGUgbGVuZ3RoLgorICAgIC8vIFdlIG5lZWQgdG8gcHJvY2VzcyAzMiBieXRlcyBwZXIgbG9vcCB0byBzY2hlZHVsZSBQTEQgcHJvcGVybHkKKyAgICAvLyBhbmQgYWNoaWV2ZSB0aGUgbWF4aW11bSBidXMgc3BlZWQuCisgICAgYXNtKAorICAgICAgICAibGRyICAgICAlW3ZdLCBbICVbc10gXSwgIzQgICAgICAgICBcbiIKKyAgICAgICAgInN1YiAgICAgJVtsXSwgJVtsXSwgJVtzXSAgICAgICAgICAgXG4iCisgICAgICAgICIwOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorI2lmIF9fQVJNX0hBVkVfUExECisgICAgICAgICJwbGQgICAgIFsgJVtzXSwgIzY0IF0gICAgICAgICAgICAgIFxuIgorI2VuZGlmCisgICAgICAgICJzdWIgICAgICVbdF0sICVbdl0sICVbbWFza10sIGxzciAjN1xuIgorICAgICAgICAiYW5kICAgICAlW3RdLCAlW3RdLCAlW21hc2tdICAgICAgICBcbiIKKyAgICAgICAgImJpY3MgICAgJVt0XSwgJVt0XSwgJVt2XSAgICAgICAgICAgXG4iCisgICAgICAgICJsZHJlcSAgICVbdl0sIFsgJVtzXSBdLCAjNCAgICAgICAgIFxuIgorI2lmICFkZWZpbmVkKF9fT1BUSU1JWkVfU0laRV9fKQorICAgICAgICAiYm5lICAgICAxZiAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgInN1YiAgICAgJVt0XSwgJVt2XSwgJVttYXNrXSwgbHNyICM3XG4iCisgICAgICAgICJhbmQgICAgICVbdF0sICVbdF0sICVbbWFza10gICAgICAgIFxuIgorICAgICAgICAiYmljcyAgICAlW3RdLCAlW3RdLCAlW3ZdICAgICAgICAgICBcbiIKKyAgICAgICAgImxkcmVxICAgJVt2XSwgWyAlW3NdIF0sICM0ICAgICAgICAgXG4iCisgICAgICAgICJibmUgICAgIDFmICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAic3ViICAgICAlW3RdLCAlW3ZdLCAlW21hc2tdLCBsc3IgIzdcbiIKKyAgICAgICAgImFuZCAgICAgJVt0XSwgJVt0XSwgJVttYXNrXSAgICAgICAgXG4iCisgICAgICAgICJiaWNzICAgICVbdF0sICVbdF0sICVbdl0gICAgICAgICAgIFxuIgorICAgICAgICAibGRyZXEgICAlW3ZdLCBbICVbc10gXSwgIzQgICAgICAgICBcbiIKKyAgICAgICAgImJuZSAgICAgMWYgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJzdWIgICAgICVbdF0sICVbdl0sICVbbWFza10sIGxzciAjN1xuIgorICAgICAgICAiYW5kICAgICAlW3RdLCAlW3RdLCAlW21hc2tdICAgICAgICBcbiIKKyAgICAgICAgImJpY3MgICAgJVt0XSwgJVt0XSwgJVt2XSAgICAgICAgICAgXG4iCisgICAgICAgICJsZHJlcSAgICVbdl0sIFsgJVtzXSBdLCAjNCAgICAgICAgIFxuIgorICAgICAgICAiYm5lICAgICAxZiAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgInN1YiAgICAgJVt0XSwgJVt2XSwgJVttYXNrXSwgbHNyICM3XG4iCisgICAgICAgICJhbmQgICAgICVbdF0sICVbdF0sICVbbWFza10gICAgICAgIFxuIgorICAgICAgICAiYmljcyAgICAlW3RdLCAlW3RdLCAlW3ZdICAgICAgICAgICBcbiIKKyAgICAgICAgImxkcmVxICAgJVt2XSwgWyAlW3NdIF0sICM0ICAgICAgICAgXG4iCisgICAgICAgICJibmUgICAgIDFmICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAic3ViICAgICAlW3RdLCAlW3ZdLCAlW21hc2tdLCBsc3IgIzdcbiIKKyAgICAgICAgImFuZCAgICAgJVt0XSwgJVt0XSwgJVttYXNrXSAgICAgICAgXG4iCisgICAgICAgICJiaWNzICAgICVbdF0sICVbdF0sICVbdl0gICAgICAgICAgIFxuIgorICAgICAgICAibGRyZXEgICAlW3ZdLCBbICVbc10gXSwgIzQgICAgICAgICBcbiIKKyAgICAgICAgImJuZSAgICAgMWYgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJzdWIgICAgICVbdF0sICVbdl0sICVbbWFza10sIGxzciAjN1xuIgorICAgICAgICAiYW5kICAgICAlW3RdLCAlW3RdLCAlW21hc2tdICAgICAgICBcbiIKKyAgICAgICAgImJpY3MgICAgJVt0XSwgJVt0XSwgJVt2XSAgICAgICAgICAgXG4iCisgICAgICAgICJsZHJlcSAgICVbdl0sIFsgJVtzXSBdLCAjNCAgICAgICAgIFxuIgorICAgICAgICAiYm5lICAgICAxZiAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgInN1YiAgICAgJVt0XSwgJVt2XSwgJVttYXNrXSwgbHNyICM3XG4iCisgICAgICAgICJhbmQgICAgICVbdF0sICVbdF0sICVbbWFza10gICAgICAgIFxuIgorICAgICAgICAiYmljcyAgICAlW3RdLCAlW3RdLCAlW3ZdICAgICAgICAgICBcbiIKKyAgICAgICAgImxkcmVxICAgJVt2XSwgWyAlW3NdIF0sICM0ICAgICAgICAgXG4iCisjZW5kaWYKKyAgICAgICAgImJlcSAgICAgMGIgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICIxOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAiYWRkICAgICAlW2xdLCAlW2xdLCAlW3NdICAgICAgICAgICBcbiIKKyAgICAgICAgInRzdCAgICAgJVt2XSwgIzB4RkYgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJiZXEgICAgIDJmICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAiYWRkICAgICAlW2xdLCAlW2xdLCAjMSAgICAgICAgICAgICBcbiIKKyAgICAgICAgInRzdCAgICAgJVt2XSwgIzB4RkYwMCAgICAgICAgICAgICAgXG4iCisgICAgICAgICJiZXEgICAgIDJmICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAiYWRkICAgICAlW2xdLCAlW2xdLCAjMSAgICAgICAgICAgICBcbiIKKyAgICAgICAgInRzdCAgICAgJVt2XSwgIzB4RkYwMDAwICAgICAgICAgICAgXG4iCisgICAgICAgICJhZGRuZSAgICVbbF0sICVbbF0sICMxICAgICAgICAgICAgIFxuIgorICAgICAgICAiMjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgOiBbbF0iPSZyIihsKSwgW3ZdIj0mciIodiksIFt0XSI9JnIiKHQpLCBbc10iPSZyIih1LmIpCisgICAgICAgIDogIiVbbF0iKGwpLCAiJVtzXSIodS5iKSwgW21hc2tdInIiKDB4ODA4MDgwODBVTCkKKyAgICAgICAgOiAiY2MiCisgICAgKTsKKyAgICAKK2RvbmU6CisgICAgcmV0dXJuIGw7Cit9CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2Jpb25pYy9zeXNjYWxsLlMgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9zeXNjYWxsLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRhMTJhNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL3N5c2NhbGwuUwpAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKworCS50ZXh0CisJLmFsaWduIDQKKwkudHlwZSBzeXNjYWxsLCNmdW5jdGlvbgorCS5nbG9ibCBzeXNjYWxsCisgCisJLnRleHQKKwkuYWxpZ24KKworI2lmIF9fQVJNX0VBQklfXworCitzeXNjYWxsOgorICAgIG1vdiAgICAgaXAsIHNwCisgICAgc3RtZmQJc3AhLCB7cjQsIHI1LCByNiwgcjd9CisgICAgbW92ICAgICByNywgcjAKKyAgICBtb3YgICAgIHIwLCByMQorICAgIG1vdiAgICAgcjEsIHIyCisgICAgbW92ICAgICByMiwgcjMKKyAgICBsZG1mZAlpcCwge3IzLCByNCwgcjUsIHI2fQorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByNSwgcjYsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworCisjZWxzZQorCisjaWZuZGVmIF9fTlJfc3lzY2FsbAorI2RlZmluZSBfX05SX3N5c2NhbGwgICAgMTEzCisjZW5kaWYKKworc3lzY2FsbDoKKyAgICBzdG1mZCAgIHNwISwge3I0LCByNSwgbHJ9CisgICAgbGRyICAgICByNCwgW3NwLCAjMTJdCisgICAgbGRyICAgICByNSwgW3NwLCAjMTZdCisgICAgc3dpICAgICBfX05SX3N5c2NhbGwKKyAgICBsZG1mZCAgIHNwISwge3I0LCByNSwgbHJ9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9iaW9uaWMvdGtpbGwuUyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL3RraWxsLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IzMzAxYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL3RraWxsLlMKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworLyogdW5saWtlIG91ciBhdXRvLWdlbmVyYXRlZCBzeXNjYWxsIHN0dWJzLCB0aGlzIGNvZGUgc2F2ZXMgbHIKKyAgIG9uIHRoZSBzdGFjaywgYXMgd2VsbCBhcyBhIGZldyBvdGhlciByZWdpc3RlcnMuIHRoaXMgbWFrZXMKKyAgIG91ciBzdGFjayB1bndpbmRlciBoYXBweSwgd2hlbiB3ZSBnZW5lcmF0ZSBkZWJ1ZyBzdGFjaworICAgdHJhY2VzIGFmdGVyIHRoZSBDIGxpYnJhcnkgb3Igb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbQorICAgYWJvcnQgZHVlIHRvIGEgZmF0YWwgcnVudGltZSBlcnJvciAoZS5nLiBkZXRlY3Rpb24KKyAgIG9mIGEgY29ycnVwdGVkIG1hbGxvYyBoZWFwKS4KKyovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyNpZm5kZWYgX19OUl90a2lsbAorI2RlZmluZSBfX05SX3RraWxsICAyMzgKKyNlbmRpZgorCisgICAgLnRleHQKKyAgICAudHlwZSB0a2lsbCwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIHRraWxsCisgICAgLmFsaWduIDQKKwordGtpbGw6CisgICAgc3RtZmQgICBzcCEsIHtyNC1yNywgaXAsIGxyfQorICAgIGxkciAgICAgcjcsID1fX05SX3RraWxsCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQtcjcsIGlwLCBscn0KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vaW5jbHVkZS9lbmRpYW4uaCBiL2xpYmMvYXJjaC1hcm0vaW5jbHVkZS9lbmRpYW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDIwNGVkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9pbmNsdWRlL2VuZGlhbi5oCkBAIC0wLDAgKzEsMTAgQEAKKy8qCSRPcGVuQlNEOiBlbmRpYW4uaCx2IDEuMyAyMDA1LzEyLzEzIDAwOjM1OjIzIG1pbGxlcnQgRXhwICQJKi8KKworI2lmZGVmIF9fQVJNRUJfXworI2RlZmluZSBfQllURV9PUkRFUiBfQklHX0VORElBTgorI2Vsc2UKKyNkZWZpbmUgX0JZVEVfT1JERVIgX0xJVFRMRV9FTkRJQU4KKyNlbmRpZgorI2RlZmluZQlfX1NUUklDVF9BTElHTk1FTlQKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvZW5kaWFuLmg+CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2luY2x1ZGUvbWFjaGluZS9fdHlwZXMuaCBiL2xpYmMvYXJjaC1hcm0vaW5jbHVkZS9tYWNoaW5lL190eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkMTBlMTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL2luY2x1ZGUvbWFjaGluZS9fdHlwZXMuaApAQCAtMCwwICsxLDEyNyBAQAorLyoJJE9wZW5CU0Q6IF90eXBlcy5oLHYgMS4zIDIwMDYvMDIvMTQgMTg6MTI6NTggbWlvZCBFeHAgJAkqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqCUAoIyl0eXBlcy5oCTguMyAoQmVya2VsZXkpIDEvNS85NAorICoJQCgjKWFuc2kuaAk4LjIgKEJlcmtlbGV5KSAxLzQvOTQKKyAqLworCisjaWZuZGVmIF9BUk1fX1RZUEVTX0hfCisjZGVmaW5lIF9BUk1fX1RZUEVTX0hfCisKKworI2lmICFkZWZpbmVkKF9fQVJNX0VBQklfXykKKy8qIHRoZSBrZXJuZWwgZGVmaW5lcyBzaXplX3QgYXMgdW5zaWduZWQgaW50LCBidXQgZysrIHdhbnRzIGl0IHRvIGJlIHVuc2lnbmVkIGxvbmcgKi8KKyNkZWZpbmUgX1NJWkVfVAorI2RlZmluZSBfU1NJWkVfVAorI2RlZmluZSBfUFRSRElGRl9UCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgIHNpemVfdDsKK3R5cGVkZWYgbG9uZyAgICAgICAgICAgc3NpemVfdDsKK3R5cGVkZWYgbG9uZyAgICAgICAgICAgcHRyZGlmZl90OworI2VuZGlmCisKKy8vI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qIDcuMTguMS4xIEV4YWN0LXdpZHRoIGludGVnZXIgdHlwZXMgKi8KK3R5cGVkZWYJX19zaWduZWQgY2hhcgkJX19pbnQ4X3Q7Cit0eXBlZGVmCXVuc2lnbmVkIGNoYXIJCV9fdWludDhfdDsKK3R5cGVkZWYJc2hvcnQJCQlfX2ludDE2X3Q7Cit0eXBlZGVmCXVuc2lnbmVkIHNob3J0CQlfX3VpbnQxNl90OwordHlwZWRlZglpbnQJCQlfX2ludDMyX3Q7Cit0eXBlZGVmCXVuc2lnbmVkIGludAkJX191aW50MzJfdDsKKy8qIExPTkdMT05HICovCit0eXBlZGVmCWxvbmcgbG9uZwkJX19pbnQ2NF90OworLyogTE9OR0xPTkcgKi8KK3R5cGVkZWYJdW5zaWduZWQgbG9uZyBsb25nCV9fdWludDY0X3Q7CisKKy8qIDcuMTguMS4yIE1pbmltdW0td2lkdGggaW50ZWdlciB0eXBlcyAqLwordHlwZWRlZglfX2ludDhfdAkJX19pbnRfbGVhc3Q4X3Q7Cit0eXBlZGVmCV9fdWludDhfdAkJX191aW50X2xlYXN0OF90OwordHlwZWRlZglfX2ludDE2X3QJCV9faW50X2xlYXN0MTZfdDsKK3R5cGVkZWYJX191aW50MTZfdAkJX191aW50X2xlYXN0MTZfdDsKK3R5cGVkZWYJX19pbnQzMl90CQlfX2ludF9sZWFzdDMyX3Q7Cit0eXBlZGVmCV9fdWludDMyX3QJCV9fdWludF9sZWFzdDMyX3Q7Cit0eXBlZGVmCV9faW50NjRfdAkJX19pbnRfbGVhc3Q2NF90OwordHlwZWRlZglfX3VpbnQ2NF90CQlfX3VpbnRfbGVhc3Q2NF90OworCisvKiA3LjE4LjEuMyBGYXN0ZXN0IG1pbmltdW0td2lkdGggaW50ZWdlciB0eXBlcyAqLwordHlwZWRlZglfX2ludDMyX3QJCV9faW50X2Zhc3Q4X3Q7Cit0eXBlZGVmCV9fdWludDMyX3QJCV9fdWludF9mYXN0OF90OwordHlwZWRlZglfX2ludDMyX3QJCV9faW50X2Zhc3QxNl90OwordHlwZWRlZglfX3VpbnQzMl90CQlfX3VpbnRfZmFzdDE2X3Q7Cit0eXBlZGVmCV9faW50MzJfdAkJX19pbnRfZmFzdDMyX3Q7Cit0eXBlZGVmCV9fdWludDMyX3QJCV9fdWludF9mYXN0MzJfdDsKK3R5cGVkZWYJX19pbnQ2NF90CQlfX2ludF9mYXN0NjRfdDsKK3R5cGVkZWYJX191aW50NjRfdAkJX191aW50X2Zhc3Q2NF90OworCisvKiA3LjE4LjEuNCBJbnRlZ2VyIHR5cGVzIGNhcGFibGUgb2YgaG9sZGluZyBvYmplY3QgcG9pbnRlcnMgKi8KK3R5cGVkZWYJaW50IAkJCV9faW50cHRyX3Q7Cit0eXBlZGVmCXVuc2lnbmVkIGludCAJCV9fdWludHB0cl90OworCisvKiA3LjE4LjEuNSBHcmVhdGVzdC13aWR0aCBpbnRlZ2VyIHR5cGVzICovCit0eXBlZGVmCV9faW50NjRfdAkJX19pbnRtYXhfdDsKK3R5cGVkZWYJX191aW50NjRfdAkJX191aW50bWF4X3Q7CisKKy8qIFJlZ2lzdGVyIHNpemUgKi8KK3R5cGVkZWYgX19pbnQzMl90CQlfX3JlZ2lzdGVyX3Q7CisKKy8qIFZNIHN5c3RlbSB0eXBlcyAqLwordHlwZWRlZiB1bnNpZ25lZCBsb25nCQlfX3ZhZGRyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcJCV9fcGFkZHJfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZwkJX192c2l6ZV90OwordHlwZWRlZiB1bnNpZ25lZCBsb25nCQlfX3BzaXplX3Q7CisKKy8qIFN0YW5kYXJkIHN5c3RlbSB0eXBlcyAqLwordHlwZWRlZiBpbnQJCQlfX2Nsb2NrX3Q7Cit0eXBlZGVmIGludAkJCV9fY2xvY2tpZF90OwordHlwZWRlZiBsb25nCQkJX19wdHJkaWZmX3Q7Cit0eXBlZGVmCWludAkJCV9fdGltZV90OwordHlwZWRlZiBpbnQJCQlfX3RpbWVyX3Q7CisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgX19HTlVDX18gPj0gMwordHlwZWRlZglfX2J1aWx0aW5fdmFfbGlzdAlfX3ZhX2xpc3Q7CisjZWxzZQordHlwZWRlZgljaGFyICoJCQlfX3ZhX2xpc3Q7CisjZW5kaWYKKworLyogV2lkZSBjaGFyYWN0ZXIgc3VwcG9ydCB0eXBlcyAqLworI2lmbmRlZiBfX2NwbHVzcGx1cwordHlwZWRlZglpbnQJCQlfX3djaGFyX3Q7CisjZW5kaWYKK3R5cGVkZWYgaW50CQkJX193aW50X3Q7Cit0eXBlZGVmCWludAkJCV9fcnVuZV90OwordHlwZWRlZgl2b2lkICoJCQlfX3djdHJhbnNfdDsKK3R5cGVkZWYJdm9pZCAqCQkJX193Y3R5cGVfdDsKKworI2lmZGVmIF9fQVJNRUJfXworI2RlZmluZSBfQllURV9PUkRFUiBfQklHX0VORElBTgorI2Vsc2UKKyNkZWZpbmUgX0JZVEVfT1JERVIgX0xJVFRMRV9FTkRJQU4KKyNlbmRpZgorCisjZW5kaWYJLyogX0FSTV9fVFlQRVNfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vaW5jbHVkZS9tYWNoaW5lL2FzbS5oIGIvbGliYy9hcmNoLWFybS9pbmNsdWRlL21hY2hpbmUvYXNtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdiZDAxNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vaW5jbHVkZS9tYWNoaW5lL2FzbS5oCkBAIC0wLDAgKzEsMTMwIEBACisvKgkkT3BlbkJTRDogYXNtLmgsdiAxLjEgMjAwNC8wMi8wMSAwNTowOTo0OSBkcmFobiBFeHAgJAkqLworLyoJJE5ldEJTRDogYXNtLmgsdiAxLjQgMjAwMS8wNy8xNiAwNTo0MzozMiBtYXR0IEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogV2lsbGlhbSBKb2xpdHouCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqCWZyb206IEAoIylhc20uaAk1LjUgKEJlcmtlbGV5KSA1LzcvOTEKKyAqLworCisjaWZuZGVmIF9BUk0zMl9BU01fSF8KKyNkZWZpbmUgX0FSTTMyX0FTTV9IXworCisjaWZkZWYgX19FTEZfXworIyBkZWZpbmUgX0NfTEFCRUwoeCkJeAorI2Vsc2UKKyMgaWZkZWYgX19TVERDX18KKyMgIGRlZmluZSBfQ19MQUJFTCh4KQlfICMjIHgKKyMgZWxzZQorIyAgZGVmaW5lIF9DX0xBQkVMKHgpCV8vKioveAorIyBlbmRpZgorI2VuZGlmCisjZGVmaW5lCV9BU01fTEFCRUwoeCkJeAorCisjaWZkZWYgX19TVERDX18KKyMgZGVmaW5lIF9fQ09OQ0FUKHgseSkJeCAjIyB5CisjIGRlZmluZSBfX1NUUklORyh4KQkjeAorI2Vsc2UKKyMgZGVmaW5lIF9fQ09OQ0FUKHgseSkJeC8qKi95CisjIGRlZmluZSBfX1NUUklORyh4KQkieCIKKyNlbmRpZgorCisjaWZuZGVmIF9BTElHTl9URVhUCisjIGRlZmluZSBfQUxJR05fVEVYVCAuYWxpZ24gMAorI2VuZGlmCisKKy8qCisgKiBnYXMvYXJtIHVzZXMgQCBhcyBhIHNpbmdsZSBjb21tZW50IGNoYXJhY3RlciBhbmQgdGh1cyBjYW5ub3QgYmUgdXNlZCBoZXJlCisgKiBJbnN0ZWFkIGl0IHJlY29nbmlzZWQgdGhlICMgaW5zdGVhZCBvZiBhbiBAIHN5bWJvbHMgaW4gLnR5cGUgZGlyZWN0aXZlcworICogV2UgZGVmaW5lIGEgY291cGxlIG9mIG1hY3JvcyBzbyB0aGF0IGFzc2VtYmx5IGNvZGUgd2lsbCBub3QgYmUgZGVwZW5kYW50CisgKiBvbiBvbmUgb3IgdGhlIG90aGVyLgorICovCisjZGVmaW5lIF9BU01fVFlQRV9GVU5DVElPTgkjZnVuY3Rpb24KKyNkZWZpbmUgX0FTTV9UWVBFX09CSkVDVAkjb2JqZWN0CisjZGVmaW5lIF9FTlRSWSh4KSBcCisJLnRleHQ7IF9BTElHTl9URVhUOyAuZ2xvYmwgeDsgLnR5cGUgeCxfQVNNX1RZUEVfRlVOQ1RJT047IHg6CisKKyNpZmRlZiBHUFJPRgorIyBpZmRlZiBfX0VMRl9fCisjICBkZWZpbmUgX1BST0ZfUFJPTE9HVUUJXAorCW1vdiBpcCwgbHI7IGJsIF9fbWNvdW50CisjIGVsc2UKKyMgIGRlZmluZSBfUFJPRl9QUk9MT0dVRQlcCisJbW92IGlwLGxyOyBibCBtY291bnQKKyMgZW5kaWYKKyNlbHNlCisjIGRlZmluZSBfUFJPRl9QUk9MT0dVRQorI2VuZGlmCisKKyNkZWZpbmUJRU5UUlkoeSkJX0VOVFJZKF9DX0xBQkVMKHkpKTsgX1BST0ZfUFJPTE9HVUUKKyNkZWZpbmUJRU5UUllfTlAoeSkJX0VOVFJZKF9DX0xBQkVMKHkpKQorI2RlZmluZQlBU0VOVFJZKHkpCV9FTlRSWShfQVNNX0xBQkVMKHkpKTsgX1BST0ZfUFJPTE9HVUUKKyNkZWZpbmUJQVNFTlRSWV9OUCh5KQlfRU5UUlkoX0FTTV9MQUJFTCh5KSkKKworI2RlZmluZQlBU01TVFIJCS5hc2NpegorCisjaWYgZGVmaW5lZChfX0VMRl9fKSAmJiBkZWZpbmVkKFBJQykKKyNpZmRlZiBfX1NURENfXworI2RlZmluZQlQSUNfU1lNKHgseSkJeCAjIyAoICMjIHkgIyMgKQorI2Vsc2UKKyNkZWZpbmUJUElDX1NZTSh4LHkpCXgvKiovKC8qKi95LyoqLykKKyNlbmRpZgorI2Vsc2UKKyNkZWZpbmUJUElDX1NZTSh4LHkpCXgKKyNlbmRpZgorCisjaWZkZWYgX19FTEZfXworI2RlZmluZSBSQ1NJRCh4KQkuc2VjdGlvbiAiLmlkZW50IjsgLmFzY2l6IHgKKyNlbHNlCisjZGVmaW5lIFJDU0lEKHgpCS50ZXh0OyAuYXNjaXogeAorI2VuZGlmCisKKyNpZmRlZiBfX0VMRl9fCisjZGVmaW5lCVdFQUtfQUxJQVMoYWxpYXMsc3ltKQkJCQkJCVwKKwkud2VhayBhbGlhczsJCQkJCQkJXAorCWFsaWFzID0gc3ltCisjZW5kaWYKKworI2lmZGVmIF9fU1REQ19fCisjZGVmaW5lCVdBUk5fUkVGRVJFTkNFUyhzeW0sbXNnKQkJCQkJXAorCS5zdGFicyBtc2cgIyMgLDMwLDAsMCwwIDsJCQkJCVwKKwkuc3RhYnMgX19TVFJJTkcoX0NfTEFCRUwoc3ltKSkgIyMgLDEsMCwwLDAKKyNlbGlmIGRlZmluZWQoX19FTEZfXykKKyNkZWZpbmUJV0FSTl9SRUZFUkVOQ0VTKHN5bSxtc2cpCQkJCQlcCisJLnN0YWJzIG1zZywzMCwwLDAsMCA7CQkJCQkJXAorCS5zdGFicyBfX1NUUklORyhzeW0pLDEsMCwwLDAKKyNlbHNlCisjZGVmaW5lCVdBUk5fUkVGRVJFTkNFUyhzeW0sbXNnKQkJCQkJXAorCS5zdGFicyBtc2csMzAsMCwwLDAgOwkJCQkJCVwKKwkuc3RhYnMgX19TVFJJTkcoXy8qKi9zeW0pLDEsMCwwLDAKKyNlbmRpZiAvKiBfX1NURENfXyAqLworCisjZW5kaWYgLyogIV9BUk1fQVNNX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2luY2x1ZGUvbWFjaGluZS9jZGVmcy5oIGIvbGliYy9hcmNoLWFybS9pbmNsdWRlL21hY2hpbmUvY2RlZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGYxNTQyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9pbmNsdWRlL21hY2hpbmUvY2RlZnMuaApAQCAtMCwwICsxLDE5IEBACisvKgkkT3BlbkJTRDogY2RlZnMuaCx2IDEuMiAyMDA1LzExLzI0IDIwOjQ2OjQ0IGRlcmFhZHQgRXhwICQJKi8KKworI2lmbmRlZglfTUFDSElORV9DREVGU19IXworI2RlZmluZQlfTUFDSElORV9DREVGU19IXworCisjaWYgZGVmaW5lZChsaW50KQorI2RlZmluZSBfX2luZHJfcmVmZXJlbmNlKHN5bSxhbGlhcykJX19saW50X2VxdWFsX18oc3ltLGFsaWFzKQorI2RlZmluZSBfX3dhcm5fcmVmZXJlbmNlcyhzeW0sbXNnKQorI2RlZmluZSBfX3dlYWtfYWxpYXMoYWxpYXMsc3ltKQkJX19saW50X2VxdWFsX18oc3ltLGFsaWFzKQorI2VsaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgZGVmaW5lZChfX1NURENfXykKKyNkZWZpbmUgX193ZWFrX2FsaWFzKGFsaWFzLHN5bSkJCQkJCVwKKwlfX2FzbV9fKCIud2VhayAiIF9fU1RSSU5HKGFsaWFzKSAiIDsgIiBfX1NUUklORyhhbGlhcykJXAorCSAgICAiID0gIiBfX1NUUklORyhzeW0pKTsKKyNkZWZpbmUJX193YXJuX3JlZmVyZW5jZXMoc3ltLG1zZykJCQkJXAorCV9fYXNtX18oIi5zZWN0aW9uIC5nbnUud2FybmluZy4iIF9fU1RSSU5HKHN5bSkJCVwKKwkgICAgIiA7IC5hc2NpaSBcIiIgbXNnICJcIiA7IC50ZXh0Iik7CisjZW5kaWYKKworI2VuZGlmIC8qICFfTUFDSElORV9DREVGU19IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9pbmNsdWRlL21hY2hpbmUvY3B1LWZlYXR1cmVzLmggYi9saWJjL2FyY2gtYXJtL2luY2x1ZGUvbWFjaGluZS9jcHUtZmVhdHVyZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODM2MDA2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9pbmNsdWRlL21hY2hpbmUvY3B1LWZlYXR1cmVzLmgKQEAgLTAsMCArMSwxNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX0FSTV9NQUNISU5FX0NQVV9GRUFUVVJFU19ICisjZGVmaW5lIF9BUk1fTUFDSElORV9DUFVfRkVBVFVSRVNfSAorCisvKiBUaGUgcHVycG9zZSBvZiB0aGlzIGZpbGUgaXMgdG8gZGVmaW5lIHNldmVyYWwgbWFjcm9zIGNvcnJlc3BvbmRpbmcKKyAqIHRvIENQVSBmZWF0dXJlcyB0aGF0IG1heSBvciBtYXkgbm90IGJlIGF2YWlsYWJsZSBhdCBidWlsZCB0aW1lIG9uCisgKiBvbiB0aGUgdGFyZ2V0IENQVS4KKyAqCisgKiBUaGlzIGlzIGRvbmUgdG8gYWJzdHJhY3QgdXMgZnJvbSB0aGUgdmFyaW91cyBBUk0gQXJjaGl0ZWN0dXJlCisgKiBxdWlya3MgYW5kIGFscGhhYmV0IHNvdXAuCisgKgorICogSU1QT1JUQU5UOiBXZSBoYXZlIG5vIGludGVudGlvbiB0byBzdXBwb3J0IGFueXRoaW5nIGJlbG93IGFuIEFSTXY0VCAhCisgKi8KKworLyogX0FSTV9BUkNIX1JFVklTSU9OIGlzIGEgbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlIEFSTSByZXZpc2lvbgorICogd2UncmUgZ29pbmcgdG8gc3VwcG9ydAorICoKKyAqIGl0IGxvb2tzIGxpa2Ugb3VyIHRvb2xjaGFpbiBkb2Vzbid0IGRlZmluZSBfX0FSTV9BUkNIX18KKyAqIHNvIHRyeSB0byBndWVzcyBpdC4KKyAqCisgKgorICoKKyAqLworI2lmbmRlZiBfX0FSTV9BUkNIX18KKworIyAgaWYgZGVmaW5lZCBfX0FSTV9BUkNIXzdfXyAgIHx8IGRlZmluZWQgX19BUk1fQVJDSF83QV9fIHx8IFwKKyAgICAgIGRlZmluZWQgX19BUk1fQVJDSF83Ul9fICB8fCBkZWZpbmVkIF9fQVJNX0FSQ0hfN01fXworCisjICAgIGRlZmluZSBfX0FSTV9BUkNIX18gNworCisjICBlbGlmIGRlZmluZWQgX19BUk1fQVJDSF82X18gICB8fCBkZWZpbmVkIF9fQVJNX0FSQ0hfNkpfXyB8fCBcCisgICAgICBkZWZpbmVkIF9fQVJNX0FSQ0hfNktfXyAgfHwgZGVmaW5lZCBfX0FSTV9BUkNIXzZaX18gfHwgXAorICAgICAgZGVmaW5lZCBfX0FSTV9BUkNIXzZLWl9fIHx8IGRlZmluZWQgX19BUk1fQVJDSF82VDJfXworIworIyAgICBkZWZpbmUgX19BUk1fQVJDSF9fIDYKKyMKKyMgIGVsaWYgZGVmaW5lZCBfX0FSTV9BUkNIXzVfXyB8fCBkZWZpbmVkIF9fQVJNX0FSQ0hfNVRfXyB8fCBcCisgICAgICAgIGRlZmluZWQgX19BUk1fQVJDSF81VEVfXyB8fCBkZWZpbmVkIF9fQVJNX0FSQ0hfNVRFSl9fCisjCisjICAgIGRlZmluZSBfX0FSTV9BUkNIX18gNQorIworIyAgZWxpZiBkZWZpbmVkIF9fQVJNX0FSQ0hfNFRfXworIworIyAgICBkZWZpbmUgX19BUk1fQVJDSF9fIDQKKyMKKyMgIGVsaWYgZGVmaW5lZCBfX0FSTV9BUkNIXzRfXworIyAgICBlcnJvciBBUk12NCBpcyBub3Qgc3VwcG9ydGVkLCBwbGVhc2UgdXNlIEFSTXY0VCBhdCBhIG1pbmltdW0KKyMgIGVsc2UKKyMgICAgZXJyb3IgVW5rbm93biBvciB1bnN1cHBvcnRlZCBBUk0gYXJjaGl0ZWN0dXJlCisjICBlbmRpZgorI2VuZGlmCisKKy8qIGV4cGVyaW1lbnRhbCBmZWF0dXJlIHVzZWQgdG8gY2hlY2sgdGhhdCBvdXIgQVJNdjQgd29ya2Fyb3VuZHMKKyAqIHdvcmsgY29ycmVjdGx5IHdpdGhvdXQgYSByZWFsIEFSTXY0IG1hY2hpbmUgKi8KKyNpZmRlZiBCSU9OSUNfRVhQRVJJTUVOVEFMX0ZPUkNFX0FSTVY0CisjICB1bmRlZiAgX19BUk1fQVJDSF9fCisjICBkZWZpbmUgX19BUk1fQVJDSF9fICA0CisjZW5kaWYKKworLyogZGVmaW5lIF9fQVJNX0hBVkVfNVRFIGlmIHdlIGhhdmUgdGhlIEFSTXY1VEUgaW5zdHJ1Y3Rpb25zICovCisjaWYgX19BUk1fQVJDSF9fID4gNQorIyAgZGVmaW5lICBfX0FSTV9IQVZFXzVURSAgMQorI2VsaWYgX19BUk1fQVJDSF9fID09IDUKKyMgIGlmIGRlZmluZWQgX19BUk1fQVJDSF81VEVfXyB8fCBkZWZpbmVkIF9fQVJNX0FSQ0hfNVRFSl9fCisjICAgIGRlZmluZSBfX0FSTV9IQVZFXzVURSAgMQorIyAgZW5kaWYKKyNlbmRpZgorCisvKiBpbnN0cnVjdGlvbnMgaW50cm9kdWNlZCBpbiBBUk12NSAqLworI2lmIF9fQVJNX0FSQ0hfXyA+PSA1CisjICBkZWZpbmUgIF9fQVJNX0hBVkVfQkxYICAxCisjICBkZWZpbmUgIF9fQVJNX0hBVkVfQ0xaICAxCisjICBkZWZpbmUgIF9fQVJNX0hBVkVfTERDMiAxCisjICBkZWZpbmUgIF9fQVJNX0hBVkVfTUNSMiAxCisjICBkZWZpbmUgIF9fQVJNX0hBVkVfTVJDMiAxCisjICBkZWZpbmUgIF9fQVJNX0hBVkVfU1RDMiAxCisjZW5kaWYKKworLyogQVJNdjVURSBpbnRyb2R1Y2VzIGEgZmV3IGluc3RydWN0aW9ucyAqLworI2lmIF9fQVJNX0hBVkVfNVRFCisjICBkZWZpbmUgIF9fQVJNX0hBVkVfUExEICAgMQorIyAgZGVmaW5lICBfX0FSTV9IQVZFX01DUlIgIDEKKyMgIGRlZmluZSAgX19BUk1fSEFWRV9NUlJDICAxCisjZW5kaWYKKworLyogZGVmaW5lIF9fQVJNX0hBVkVfSEFMRldPUkRfTVVMVElQTFkgd2hlbiBoYWxmLXdvcmQgbXVsdGlwbHkgaW5zdHJ1Y3Rpb25zCisgKiB0aGlzIG1lYW5zIHZhcmlhbnRzIG9mOiBzbXVsLCBzbXVsdywgc21sYSwgc21sYXcsIHNtbGFsCisgKi8KKyNpZiBfX0FSTV9IQVZFXzVURQorIyAgZGVmaW5lICBfX0FSTV9IQVZFX0hBTEZXT1JEX01VTFRJUExZICAxCisjZW5kaWYKKworLyogZGVmaW5lIF9fQVJNX0hBVkVfUEFJUl9MT0FEX1NUT1JFIHdoZW4gNjQtYml0IG1lbW9yeSBsb2FkcyBhbmQgc3RvcmVkCisgKiBpbnRvL2Zyb20gYSBwYWlyIG9mIDMyLWJpdCByZWdpc3RlcnMgaXMgc3VwcG9ydGVkIHRocm91aGcgJ2xkcmQnIGFuZCAnc3RyZCcKKyAqLworI2lmIF9fQVJNX0hBVkVfNVRFCisjICBkZWZpbmUgIF9fQVJNX0hBVkVfUEFJUl9MT0FEX1NUT1JFIDEKKyNlbmRpZgorCisvKiBkZWZpbmUgX19BUk1fSEFWRV9TQVRVUkFURURfQVJJVEhNRVRJQyBpcyB5b3UgaGF2ZSB0aGUgc2F0dXJhdGVkIGludGVnZXIKKyAqIGFyaXRobWV0aWMgaW5zdHJ1Y3Rpb25zOiBxZGQsIHFkYWRkLCBxc3ViLCBxZHN1YgorICovCisjaWYgX19BUk1fSEFWRV81VEUKKyMgIGRlZmluZSAgX19BUk1fSEFWRV9TQVRVUkFURURfQVJJVEhNRVRJQyAxCisjZW5kaWYKKworLyogZGVmaW5lIF9fQVJNX0hBVkVfUENfSU5URVJXT1JLIHdoZW4gYSBkaXJlY3QgYXNzaWdubWVudCB0byB0aGUKKyAqIHBjIHJlZ2lzdGVyIHdpbGwgc3dpdGNoIGludG8gdGh1bWIvQVJNIG1vZGUgZGVwZW5kaW5nIG9uIGJpdCAwCisgKiBvZiB0aGUgbmV3IGluc3RydWN0aW9uIGFkZHJlc3MuIEJlZm9yZSBBUk12NSwgdGhpcyB3YXMgbm90IHRoZQorICogY2FzZSwgYW5kIHlvdSBoYXZlIHRvIHdyaXRlOgorICoKKyAqICAgICBtb3YgIHIwLCBbPHNvbWUgYWRkcmVzcz5dCisgKiAgICAgYnggICByMAorICoKKyAqIGluc3RlYWQgb2Y6CisgKgorICogICAgIGxkciAgcGMsIFs8c29tZSBhZGRyZXNzPl0KKyAqCisgKiBub3RlIHRoYXQgdGhpcyBhZmZlY3RzIGFueSBpbnN0cnVjdGlvbiB0aGF0IGV4cGxpY2l0ZWx5IGNoYW5nZXMgdGhlCisgKiB2YWx1ZSBvZiB0aGUgcGMgcmVnaXN0ZXIsIGluY2x1ZGluZyBsZG0geyAuLi4scGMgfSBvciAnYWRkIHBjLCAjb2Zmc2V0JworICovCisjaWYgX19BUk1fQVJDSF9fID49IDUKKyMgIGRlZmluZSBfX0FSTV9IQVZFX1BDX0lOVEVSV09SSworI2VuZGlmCisKKworLyogQXNzZW1ibHktb25seSBtYWNyb3MgKi8KKworLyogZGVmaW5lIGEgaGFuZHkgUExEKGFkZHJlc3MpIG1hY3JvIHNpbmNlIHRoZSBjYWNoZSBwcmVsb2FkCisgKiBpcyBhbiBvcHRpb25hbCBvcGNvZGUKKyAqLworI2lmIF9fQVJNX0hBVkVfUExECisjICBkZWZpbmUgIFBMRChyZWcsb2Zmc2V0KSAgICBwbGQgICAgW3JlZywgb2Zmc2V0XQorI2Vsc2UKKyMgIGRlZmluZSAgUExEKHJlZyxvZmZzZXQpICAgIC8qIG5vdGhpbmcgKi8KKyNlbmRpZgorCisjZW5kaWYgLyogX0FSTV9NQUNISU5FX0NQVV9GRUFUVVJFU19IICovCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2luY2x1ZGUvbWFjaGluZS9leGVjLmggYi9saWJjL2FyY2gtYXJtL2luY2x1ZGUvbWFjaGluZS9leGVjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI3YjIwNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vaW5jbHVkZS9tYWNoaW5lL2V4ZWMuaApAQCAtMCwwICsxLDUwIEBACisvKgkkT3BlbkJTRDogZXhlYy5oLHYgMS45IDIwMDMvMDQvMTcgMDM6NDI6MTQgZHJhaG4gRXhwICQJKi8KKy8qCSROZXRCU0Q6IGV4ZWMuaCx2IDEuNiAxOTk0LzEwLzI3IDA0OjE2OjA1IGNnZCBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTkzIENocmlzdG9waGVyIEcuIERlbWV0cmlvdQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfQVJNX0VYRUNfSF8KKyNkZWZpbmUgX0FSTV9FWEVDX0hfCisKKyNkZWZpbmUgX19MRFBHU1oJNDA5NgorCisjZGVmaW5lIE5BVElWRV9FWEVDX0VMRgorCisjZGVmaW5lIEFSQ0hfRUxGU0laRQkJMzIKKworI2RlZmluZSBFTEZfVEFSR19DTEFTUwkJRUxGQ0xBU1MzMgorI2RlZmluZSBFTEZfVEFSR19EQVRBCQlFTEZEQVRBMkxTQgorI2RlZmluZSBFTEZfVEFSR19NQUNICQlFTV9BUk0KKworI2RlZmluZSBfTkxJU1RfRE9fQU9VVAorI2RlZmluZSBfTkxJU1RfRE9fRUxGCisKKyNkZWZpbmUgX0tFUk5fRE9fQU9VVAorI2RlZmluZSBfS0VSTl9ET19FTEYKKworI2VuZGlmICAvKiBfQVJNX0VYRUNfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vaW5jbHVkZS9tYWNoaW5lL2llZWUuaCBiL2xpYmMvYXJjaC1hcm0vaW5jbHVkZS9tYWNoaW5lL2llZWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjliODllCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9pbmNsdWRlL21hY2hpbmUvaWVlZS5oCkBAIC0wLDAgKzEsMTkxIEBACisvKgkkT3BlbkJTRDogaWVlZS5oLHYgMS4xIDIwMDQvMDIvMDEgMDU6MDk6NDkgZHJhaG4gRXhwICQJKi8KKy8qCSROZXRCU0Q6IGllZWUuaCx2IDEuMiAyMDAxLzAyLzIxIDE3OjQzOjUwIGJqaDIxIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTIsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgd2FzIGRldmVsb3BlZCBieSB0aGUgQ29tcHV0ZXIgU3lzdGVtcyBFbmdpbmVlcmluZyBncm91cAorICogYXQgTGF3cmVuY2UgQmVya2VsZXkgTGFib3JhdG9yeSB1bmRlciBEQVJQQSBjb250cmFjdCBCRyA5MS02NiBhbmQKKyAqIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5LgorICoKKyAqIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICoJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgorICoJQ2FsaWZvcm5pYSwgTGF3cmVuY2UgQmVya2VsZXkgTGFib3JhdG9yeS4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICoJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgorICoJQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5kIGl0cyBjb250cmlidXRvcnMuCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqCUAoIylpZWVlLmgJOC4xIChCZXJrZWxleSkgNi8xMS85MworICovCisKKy8qCisgKiBpZWVlLmggZGVmaW5lcyB0aGUgbWFjaGluZS1kZXBlbmRlbnQgbGF5b3V0IG9mIHRoZSBtYWNoaW5lJ3MgSUVFRQorICogZmxvYXRpbmcgcG9pbnQuCisgKi8KKworLyoKKyAqIERlZmluZSB0aGUgbnVtYmVyIG9mIGJpdHMgaW4gZWFjaCBmcmFjdGlvbiBhbmQgZXhwb25lbnQuCisgKgorICoJCSAgICAgawkgICAgICAgICBrKzEKKyAqIE5vdGUgdGhhdCAgMS4wIHggMiAgPT0gMC4xIHggMiAgICAgIGFuZCB0aGF0IGRlbm9ybXMgYXJlIHJlcHJlc2VudGVkCisgKgorICoJCQkJCSAgKC1leHBfYmlhcysxKQorICogYXMgZnJhY3Rpb25zIHRoYXQgbG9vayBsaWtlIDAuZmZmZmYgeCAyICAgICAgICAgICAgIC4gIFRoaXMgbWVhbnMgdGhhdAorICoKKyAqCQkJIC0xMjYKKyAqIHRoZSBudW1iZXIgMC4xMDAwMCB4IDIgICAgLCBmb3IgaW5zdGFuY2UsIGlzIHRoZSBzYW1lIGFzIHRoZSBub3JtYWxpemVkCisgKgorICoJCS0xMjcJCQkgICAtMTI4CisgKiBmbG9hdCAxLjAgeCAyICAgIC4gIFRodXMsIHRvIHJlcHJlc2VudCAyICAgICwgd2UgbmVlZCBvbmUgbGVhZGluZyB6ZXJvCisgKgorICoJCQkJICAtMTI5CisgKiBpbiB0aGUgZnJhY3Rpb247IHRvIHJlcHJlc2VudCAyICAgICwgd2UgbmVlZCB0d28sIGFuZCBzbyBvbi4gIFRoaXMKKyAqCisgKgkJCQkJCSAgICAgKC1leHBfYmlhcy1mcmFjYml0cysxKQorICogaW1wbGllcyB0aGF0IHRoZSBzbWFsbGVzdCBkZW5vcm1hbGl6ZWQgbnVtYmVyIGlzIDIKKyAqCisgKiBmb3Igd2hpY2hldmVyIGZvcm1hdCB3ZSBhcmUgdGFsa2luZyBhYm91dDogZm9yIHNpbmdsZSBwcmVjaXNpb24sIGZvcgorICoKKyAqCQkJCQkJLTEyNgkJLTE0OQorICogaW5zdGFuY2UsIHdlIGdldCAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgeCAyICAgICwgb3IgMS4wIHggMiAgICAsIGFuZAorICoKKyAqIC0xNDkgPT0gLTEyNyAtIDIzICsgMS4KKyAqLworCisvKgorICogVGhlIEFSTSBoYXMgdHdvIHNldHMgb2YgRlAgZGF0YSBmb3JtYXRzLiAgVGhlIEZQQSBzdXBwb3J0cyAzMi1iaXQsIDY0LWJpdAorICogYW5kIDk2LWJpdCBJRUVFIGZvcm1hdHMsIHdpdGggdGhlIHdvcmRzIGluIGJpZy1lbmRpYW4gb3JkZXIuICBWRlAgc3VwcG9ydHMKKyAqIDMyLWJpbiBhbmQgNjQtYml0IElFRUUgZm9ybWF0cyB3aXRoIHRoZSB3b3JkcyBpbiB0aGUgQ1BVJ3MgbmF0aXZlIGJ5dGUKKyAqIG9yZGVyLgorICoKKyAqIFRoZSBGUEEgYWxzbyBoYXMgdHdvIHBhY2tlZCBkZWNpbWFsIGZvcm1hdHMsIGJ1dCB3ZSBpZ25vcmUgdGhlbSBoZXJlLgorICovCisKKyNkZWZpbmUJU05HX0VYUEJJVFMJOAorI2RlZmluZQlTTkdfRlJBQ0JJVFMJMjMKKworI2RlZmluZQlEQkxfRVhQQklUUwkxMQorI2RlZmluZQlEQkxfRlJBQ0JJVFMJNTIKKworI2lmbmRlZiBfX1ZGUF9GUF9fCisjZGVmaW5lCUU4MF9FWFBCSVRTCTE1CisjZGVmaW5lCUU4MF9GUkFDQklUUwk2NAorCisjZGVmaW5lCUVYVF9FWFBCSVRTCTE1CisjZGVmaW5lCUVYVF9GUkFDQklUUwkxMTIKKyNlbmRpZgorCitzdHJ1Y3QgaWVlZV9zaW5nbGUgeworCXVfaW50CXNuZ19mcmFjOjIzOworCXVfaW50CXNuZ19leHBvbmVudDo4OworCXVfaW50CXNuZ19zaWduOjE7Cit9OworCisjaWZkZWYgX19WRlBfRlBfXworc3RydWN0IGllZWVfZG91YmxlIHsKKyNpZmRlZiBfX0FSTUVCX18KKwl1X2ludAlkYmxfc2lnbjoxOworCXVfaW50CWRibF9leHA6MTE7CisJdV9pbnQJZGJsX2ZyYWNoOjIwOworCXVfaW50CWRibF9mcmFjbDsKKyNlbHNlIC8qICFfX0FSTUVCX18gKi8KKwl1X2ludAlkYmxfZnJhY2w7CisJdV9pbnQJZGJsX2ZyYWNoOjIwOworCXVfaW50CWRibF9leHA6MTE7CisJdV9pbnQJZGJsX3NpZ246MTsKKyNlbmRpZiAvKiAhX19BUk1FQl9fICovCit9OworI2Vsc2UgLyogIV9fVkZQX0ZQX18gKi8KK3N0cnVjdCBpZWVlX2RvdWJsZSB7CisJdV9pbnQJZGJsX2ZyYWNoOjIwOworCXVfaW50CWRibF9leHA6MTE7CisJdV9pbnQJZGJsX3NpZ246MTsKKwl1X2ludAlkYmxfZnJhY2w7Cit9OworCit1bmlvbiBpZWVlX2RvdWJsZV91IHsKKwlkb3VibGUgICAgICAgICAgICAgICAgICBkYmx1X2Q7CisJc3RydWN0IGllZWVfZG91YmxlICAgICAgZGJsdV9kYmw7Cit9OworCisKK3N0cnVjdCBpZWVlX2U4MCB7CisJdV9pbnQJZTgwX2V4cDoxNTsKKwl1X2ludAllODBfemVybzoxNjsKKwl1X2ludAllODBfc2lnbjoxOworCXVfaW50CWU4MF9mcmFjaDozMTsKKwl1X2ludAllODBfajoxOworCXVfaW50CWU4MF9mcmFjbDsKK307CisKK3N0cnVjdCBpZWVlX2V4dCB7CisJdV9pbnQJZXh0X2ZyYWNoOjE2OworCXVfaW50CWV4dF9leHA6MTU7CisJdV9pbnQJZXh0X3NpZ246MTsKKwl1X2ludAlleHRfZnJhY2htOworCXVfaW50CWV4dF9mcmFjbG07CisJdV9pbnQJZXh0X2ZyYWNsOworfTsKKyNlbmRpZiAvKiAhX19WRlBfRlBfXyAqLworCisvKgorICogRmxvYXRzIHdob3NlIGV4cG9uZW50IGlzIGluIFsxLi5JTkZOQU4pIChvZiB3aGF0ZXZlciB0eXBlKSBhcmUKKyAqIGBub3JtYWwnLiAgRmxvYXRzIHdob3NlIGV4cG9uZW50IGlzIElORk5BTiBhcmUgZWl0aGVyIEluZiBvciBOYU4uCisgKiBGbG9hdHMgd2hvc2UgZXhwb25lbnQgaXMgemVybyBhcmUgZWl0aGVyIHplcm8gKGlmZiBhbGwgZnJhY3Rpb24KKyAqIGJpdHMgYXJlIHplcm8pIG9yIHN1Ym5vcm1hbCB2YWx1ZXMuCisgKgorICogQSBOYU4gaXMgYSBgc2lnbmFsbGluZyBOYU4nIGlmIGl0cyBRVUlFVE5BTiBiaXQgaXMgY2xlYXIgaW4gaXRzCisgKiBoaWdoIGZyYWN0aW9uOyBpZiB0aGUgYml0IGlzIHNldCwgaXQgaXMgYSBgcXVpZXQgTmFOJy4KKyAqLworI2RlZmluZQlTTkdfRVhQX0lORk5BTgkyNTUKKyNkZWZpbmUJREJMX0VYUF9JTkZOQU4JMjA0NworI2lmbmRlZiBfX1ZGUF9GUF9fCisjZGVmaW5lCUU4MF9FWFBfSU5GTkFOCTMyNzY3CisjZGVmaW5lCUVYVF9FWFBfSU5GTkFOCTMyNzY3CisjZW5kaWYgLyogIV9fVkZQX0ZQX18gKi8KKworI2lmIDAKKyNkZWZpbmUJU05HX1FVSUVUTkFOCSgxIDw8IDIyKQorI2RlZmluZQlEQkxfUVVJRVROQU4JKDEgPDwgMTkpCisjaWZuZGVmIF9fVkZQX0ZQX18KKyNkZWZpbmUJRTgwX1FVSUVUTkFOCSgxIDw8IDE1KQorI2RlZmluZQlFWFRfUVVJRVROQU4JKDEgPDwgMTUpCisjZW5kaWYgLyogIV9fVkZQX0ZQX18gKi8KKyNlbmRpZgorCisvKgorICogRXhwb25lbnQgYmlhc2VzLgorICovCisjZGVmaW5lCVNOR19FWFBfQklBUwkxMjcKKyNkZWZpbmUJREJMX0VYUF9CSUFTCTEwMjMKKyNpZm5kZWYgX19WRlBfRlBfXworI2RlZmluZQlFODBfRVhQX0JJQVMJMTYzODMKKyNkZWZpbmUJRVhUX0VYUF9CSUFTCTE2MzgzCisjZW5kaWYgLyogIV9fVkZQX0ZQX18gKi8KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vaW5jbHVkZS9tYWNoaW5lL2ludGVybmFsX3R5cGVzLmggYi9saWJjL2FyY2gtYXJtL2luY2x1ZGUvbWFjaGluZS9pbnRlcm5hbF90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlNjEwYjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL2luY2x1ZGUvbWFjaGluZS9pbnRlcm5hbF90eXBlcy5oCkBAIC0wLDAgKzEsMTAgQEAKKy8qICRPcGVuQlNEOiBpbnRlcm5hbF90eXBlcy5oLHYgMS4yIDIwMDQvMDUvMDYgMTU6NTM6MzkgZHJhaG4gRXhwICQgKi8KKy8qIFB1YmxpYyBkb21haW4gKi8KKyNpZm5kZWYgX0FSTV9JTlRFUk5BTF9UWVBFU19IXworI2RlZmluZSBfQVJNX0lOVEVSTkFMX1RZUEVTX0hfCisKKyNpZmRlZiBfX0NIQVJfVU5TSUdORURfXworI2RlZmluZSBfX21hY2hpbmVfaGFzX3Vuc2lnbmVkX2NoYXJzCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2luY2x1ZGUvbWFjaGluZS9rZXJuZWwuaCBiL2xpYmMvYXJjaC1hcm0vaW5jbHVkZS9tYWNoaW5lL2tlcm5lbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2MmI4ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL2luY2x1ZGUvbWFjaGluZS9rZXJuZWwuaApAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9BUkNIX0FSTV9LRVJORUxfSAorI2RlZmluZSBfQVJDSF9BUk1fS0VSTkVMX0gKKworLyogdGhpcyBmaWxlIGNvbnRhaW5zIGtlcm5lbC1zcGVjaWZpYyBkZWZpbml0aW9ucyB0aGF0IHdlcmUgb3B0aW1pemVkIG91dCBvZgorICAgb3VyIHByb2Nlc3NlZCBrZXJuZWwgaGVhZGVycywgYnV0IHN0aWxsIHVzZWZ1bCBub25ldGhlbGVzcy4uLiAqLworCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgICBfX2tlcm5lbF9ibGtjbnRfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyAgIF9fa2VybmVsX2Jsa3NpemVfdDsKKworLyogdGhlc2UgYXJlbid0IHJlYWxseSBkZWZpbmVkIGJ5IHRoZSBrZXJuZWwgaGVhZGVycyB0aG91Z2guLi4gKi8KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyAgIF9fa2VybmVsX2ZzYmxrY250X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgICBfX2tlcm5lbF9mc2ZpbGNudF90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgX19rZXJuZWxfaWRfdDsKKworI2VuZGlmIC8qIF9BUkNIX0FSTV9LRVJORUxfSCAqLwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9pbmNsdWRlL21hY2hpbmUvbGltaXRzLmggYi9saWJjL2FyY2gtYXJtL2luY2x1ZGUvbWFjaGluZS9saW1pdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWMwNGZhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9pbmNsdWRlL21hY2hpbmUvbGltaXRzLmgKQEAgLTAsMCArMSw2MyBAQAorLyoJJE9wZW5CU0Q6IGxpbWl0cy5oLHYgMS4zIDIwMDYvMDEvMDYgMjI6NDg6NDYgbWlsbGVydCBFeHAgJAkqLworLyoJJE5ldEJTRDogbGltaXRzLmgsdiAxLjQgMjAwMy8wNC8yOCAyMzoxNjoxOCBiamgyMSBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTg4IFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglmcm9tOiBAKCMpbGltaXRzLmgJNy4yIChCZXJrZWxleSkgNi8yOC85MAorICovCisKKyNpZm5kZWYJX0FSTTMyX0xJTUlUU19IXworI2RlZmluZQlfQVJNMzJfTElNSVRTX0hfCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKworI2RlZmluZQlNQl9MRU5fTUFYCTEJCS8qIG5vIG11bHRpYnl0ZSBjaGFyYWN0ZXJzICovCisKKyNpZm5kZWYJU0laRV9NQVgKKyNkZWZpbmUJU0laRV9NQVgJVUlOVF9NQVgJLyogbWF4IHZhbHVlIGZvciBhIHNpemVfdCAqLworI2VuZGlmCisjaWZuZGVmIFNTSVpFX01BWAorI2RlZmluZQlTU0laRV9NQVgJSU5UX01BWAkJLyogbWF4IHZhbHVlIGZvciBhIHNzaXplX3QgKi8KKyNlbmRpZgorCisjaWYgX19CU0RfVklTSUJMRQorI2RlZmluZQlTSVpFX1RfTUFYCVVJTlRfTUFYCS8qIG1heCB2YWx1ZSBmb3IgYSBzaXplX3QgKGhpc3RvcmljKSAqLworCisjZGVmaW5lCVVRVUFEX01BWAkweGZmZmZmZmZmZmZmZmZmZmZVTEwJCS8qIG1heCB1bnNpZ25lZCBxdWFkICovCisjZGVmaW5lCVFVQURfTUFYCTB4N2ZmZmZmZmZmZmZmZmZmZkxMCQkvKiBtYXggc2lnbmVkIHF1YWQgKi8KKyNkZWZpbmUJUVVBRF9NSU4JKC0weDdmZmZmZmZmZmZmZmZmZmZMTC0xKQkvKiBtaW4gc2lnbmVkIHF1YWQgKi8KKworI2VuZGlmIC8qIF9fQlNEX1ZJU0lCTEUgKi8KKworI2RlZmluZSBMT05HTE9OR19CSVQgICAgNjQKKyNkZWZpbmUgTE9OR0xPTkdfTUlOICAgICgtOTIyMzM3MjAzNjg1NDc3NTgwN0xMLTEpCisjZGVmaW5lIExPTkdMT05HX01BWCAgICA5MjIzMzcyMDM2ODU0Nzc1ODA3TEwKKyNkZWZpbmUgVUxPTkdMT05HX01BWCAgIDE4NDQ2NzQ0MDczNzA5NTUxNjE1VUxMCisKKyNlbmRpZgkvKiBfQVJNMzJfTElNSVRTX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2luY2x1ZGUvbWFjaGluZS9zZXRqbXAuaCBiL2xpYmMvYXJjaC1hcm0vaW5jbHVkZS9tYWNoaW5lL3NldGptcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyMGNhYjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL2luY2x1ZGUvbWFjaGluZS9zZXRqbXAuaApAQCAtMCwwICsxLDg3IEBACisvKgkkT3BlbkJTRDogc2V0am1wLmgsdiAxLjEgMjAwNC8wMi8wMSAwNTowOTo0OSBkcmFobiBFeHAgJAkqLworLyoJJE5ldEJTRDogc2V0am1wLmgsdiAxLjIgMjAwMS8wOC8yNSAxNDo0NTo1OSBiamgyMSBFeHAgJAkqLworCisvKgorICogbWFjaGluZS9zZXRqbXAuaDogbWFjaGluZSBkZXBlbmRlbnQgc2V0am1wLXJlbGF0ZWQgaW5mb3JtYXRpb24uCisgKi8KKworI2lmZGVmIF9fRUxGX18KKyNkZWZpbmUJX0pCTEVOCTY0CQkvKiBzaXplLCBpbiBsb25ncywgb2YgYSBqbXBfYnVmICovCisjZWxzZQorI2RlZmluZQlfSkJMRU4JMjkJCS8qIHNpemUsIGluIGxvbmdzLCBvZiBhIGptcF9idWYgKi8KKyNlbmRpZgorCisvKgorICogTk9URTogVGhlIGludGVybmFsIHN0cnVjdHVyZSBvZiBhIGptcF9idWYgaXMgKlBSSVZBVEUqCisgKiAgICAgICBUaGlzIGluZm9ybWF0aW9uIGlzIHByb3ZpZGVkIGFzIHRoZXJlIGlzIHNvZnR3YXJlCisgKiAgICAgICB0aGF0IGZpZGRsZXMgd2l0aCB0aGlzIHdpdGggb2J0YWluIHRoZSBzdGFjayBwb2ludGVyCisgKgkgKHllcyByZWFsbHkgISBhbmQgaXRzIGNvbW1lcmNpYWwgISkuCisgKgorICogRGVzY3JpcHRpb24gb2YgdGhlIHNldGptcCBidWZmZXIKKyAqCisgKiB3b3JkICAwCW1hZ2ljIG51bWJlcgkoZGVwZW5kYW50IG9uIGNyZWF0b3IpCisgKiAgICAgICAxIC0gIDMJZjQJCWZwIHJlZ2lzdGVyIDQKKyAqCSA0IC0gIDYJZjUJCWZwIHJlZ2lzdGVyIDUKKyAqCSA3IC0gIDkgZjYJCWZwIHJlZ2lzdGVyIDYKKyAqCTEwIC0gMTIJZjcJCWZwIHJlZ2lzdGVyIDcKKyAqCTEzCWZwc3IJCWZwIHN0YXR1cyByZWdpc3RlcgorICoJMTQJcjQJCXJlZ2lzdGVyIDQKKyAqCTE1CXI1CQlyZWdpc3RlciA1CisgKgkxNglyNgkJcmVnaXN0ZXIgNgorICoJMTcJcjcJCXJlZ2lzdGVyIDcKKyAqCTE4CXI4CQlyZWdpc3RlciA4CisgKgkxOQlyOQkJcmVnaXN0ZXIgOQorICoJMjAJcjEwCQlyZWdpc3RlciAxMCAoc2wpCisgKgkyMQlyMTEJCXJlZ2lzdGVyIDExIChmcCkKKyAqCTIyCXIxMgkJcmVnaXN0ZXIgMTIgKGlwKQorICoJMjMJcjEzCQlyZWdpc3RlciAxMyAoc3ApCisgKgkyNAlyMTQJCXJlZ2lzdGVyIDE0IChscikKKyAqCTI1CXNpZ25hbCBtYXNrCShkZXBlbmRhbnQgb24gbWFnaWMpCisgKgkyNgkoY29uJ3QpCisgKgkyNwkoY29uJ3QpCisgKgkyOAkoY29uJ3QpCisgKgorICogVGhlIG1hZ2ljIG51bWJlciBudW1iZXIgaWRlbnRpZmllcyB0aGUgam1wX2J1ZiBhbmQKKyAqIGhvdyB0aGUgYnVmZmVyIHdhcyBjcmVhdGVkIGFzIHdlbGwgYXMgcHJvdmlkaW5nCisgKiBhIHNhbml0eSBjaGVjaworICoKKyAqIEEgc2lkZSBub3RlIEkgc2hvdWxkIG1lbnRpb24gLSBQbGVhc2UgZG8gbm90IHRhbXBlcgorICogd2l0aCB0aGUgZmxvYXRpbmcgcG9pbnQgZmllbGRzLiBXaGlsZSB0aGV5IGFyZQorICogYWx3YXlzIHNhdmVkIGFuZCByZXN0b3JlZCBhdCB0aGUgbW9tZW50IHRoaXMgY2Fubm90CisgKiBiZSBnYXJlbnRlZWQgZXNwZWNpYWxseSBpZiB0aGUgY29tcGlsZXIgaGFwcGVucworICogdG8gYmUgZ2VuZXJhdGluZyBzb2Z0LWZsb2F0IGNvZGUgc28gbm8gZnAKKyAqIHJlZ2lzdGVycyB3aWxsIGJlIHVzZWQuCisgKgorICogV2hpbHN0IHRoaXMgY2FuIGJlIHNlZW4gYW4gZW5jb3VyYWdpbmcgcGVvcGxlIHRvCisgKiB1c2UgdGhlIHNldGptcCBidWZmZXIgaW4gdGhpcyB3YXkgSSB0aGluayB0aGF0IGl0CisgKiBpcyBmb3IgdGhlIGJlc3QgdGhlbiBpZiBjaGFuZ2VzIG9jY3VyIGNvbXBpbGVzIHdpbGwKKyAqIGJyZWFrIHJhdGhlciB0aGFuIGp1c3QgaGF2aW5nIG5ldyBidWlsZHMgZmFsbGluZyBvdmVyCisgKiBteXN0ZXJpb3VzbHkuCisgKi8KKworI2RlZmluZSBfSkJfTUFHSUNfX1NFVEpNUAkweDQyNzhmNTAwCisjZGVmaW5lIF9KQl9NQUdJQ19TRVRKTVAJMHg0Mjc4ZjUwMQorCisvKiBWYWxpZCBmb3IgYWxsIGptcF9idWYncyAqLworCisjZGVmaW5lIF9KQl9NQUdJQwkJIDAKKyNkZWZpbmUgX0pCX1JFR19GNAkJIDEKKyNkZWZpbmUgX0pCX1JFR19GNQkJIDQKKyNkZWZpbmUgX0pCX1JFR19GNgkJIDcKKyNkZWZpbmUgX0pCX1JFR19GNwkJMTAKKyNkZWZpbmUgX0pCX1JFR19GUFNSCQkxMworI2RlZmluZSBfSkJfUkVHX1I0CQkxNAorI2RlZmluZSBfSkJfUkVHX1I1CQkxNQorI2RlZmluZSBfSkJfUkVHX1I2CQkxNgorI2RlZmluZSBfSkJfUkVHX1I3CQkxNworI2RlZmluZSBfSkJfUkVHX1I4CQkxOAorI2RlZmluZSBfSkJfUkVHX1I5CQkxOQorI2RlZmluZSBfSkJfUkVHX1IxMAkJMjAKKyNkZWZpbmUgX0pCX1JFR19SMTEJCTIxCisjZGVmaW5lIF9KQl9SRUdfUjEyCQkyMgorI2RlZmluZSBfSkJfUkVHX1IxMwkJMjMKKyNkZWZpbmUgX0pCX1JFR19SMTQJCTI0CisKKy8qIE9ubHkgdmFsaWQgd2l0aCB0aGUgX0pCX01BR0lDX1NFVEpNUCBtYWdpYyAqLworCisjZGVmaW5lIF9KQl9TSUdNQVNLCQkyNQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy5tayBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA2Y2IwYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMubWsKQEAgLTAsMCArMSwxNzAgQEAKKyMgYXV0by1nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHksIGRvIG5vdCB0b3VjaAorc3lzY2FsbF9zcmMgOj0gCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9fZXhpdC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9fZXhpdF90aHJlYWQuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvX19mb3JrLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3dhaXRpZC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9fX2Nsb25lLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2V4ZWN2ZS5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zZXR1aWQuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvZ2V0dWlkLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2dldGdpZC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9nZXRldWlkLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2dldGVnaWQuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cmVzdWlkLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2dldHJlc2dpZC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9nZXR0aWQuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvZ2V0Z3JvdXBzLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2dldHBnaWQuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cHBpZC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zZXRzaWQuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvc2V0Z2lkLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3NldHJldWlkLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3NldHJlc3VpZC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zZXRyZXNnaWQuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvX19icmsuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvX19wdHJhY2UuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvX19nZXRwcmlvcml0eS5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zZXRwcmlvcml0eS5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zZXRybGltaXQuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cmxpbWl0LlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2dldHJ1c2FnZS5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zZXRncm91cHMuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvc2V0cGdpZC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy92Zm9yay5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zZXRyZWdpZC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9jaHJvb3QuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvcHJjdGwuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvY2FwZ2V0LlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2NhcHNldC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9hY2N0LlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3JlYWQuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvd3JpdGUuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvX19wcmVhZDY0LlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL19fcHdyaXRlNjQuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvX19vcGVuLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL19fb3BlbmF0LlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2Nsb3NlLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2xzZWVrLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL19fbGxzZWVrLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2dldHBpZC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9fX21tYXAyLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL211bm1hcC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9tcmVtYXAuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvbXN5bmMuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvbXByb3RlY3QuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvbWFkdmlzZS5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9tbG9jay5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9tdW5sb2NrLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL21pbmNvcmUuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvX19pb2N0bC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9yZWFkdi5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy93cml0ZXYuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvX19mY250bC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9mbG9jay5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9mY2htb2QuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvZHVwLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3BpcGUuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvZHVwMi5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zZWxlY3QuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvZnRydW5jYXRlLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2dldGRlbnRzLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2ZzeW5jLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2ZjaG93bi5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zeW5jLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL19fZmNudGw2NC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9mc3RhdGZzLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3NlbmRmaWxlLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2ZzdGF0YXQuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvbWtkaXJhdC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9mY2hvd25hdC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9mY2htb2RhdC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9yZW5hbWVhdC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9saW5rLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3VubGluay5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy91bmxpbmthdC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9jaGRpci5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9ta25vZC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9jaG1vZC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9jaG93bi5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9sY2hvd24uUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvbW91bnQuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvdW1vdW50Mi5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9mc3RhdC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zdGF0LlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2xzdGF0LlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL21rZGlyLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3JlYWRsaW5rLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3JtZGlyLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3JlbmFtZS5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9fX2dldGN3ZC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9hY2Nlc3MuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvc3ltbGluay5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9mY2hkaXIuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvdHJ1bmNhdGUuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvX19zdGF0ZnM2NC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9wYXVzZS5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9nZXR0aW1lb2ZkYXkuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvc2V0dGltZW9mZGF5LlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3RpbWVzLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL25hbm9zbGVlcC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9jbG9ja19nZXR0aW1lLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2Nsb2NrX3NldHRpbWUuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvY2xvY2tfZ2V0cmVzLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2Nsb2NrX25hbm9zbGVlcC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9nZXRpdGltZXIuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvc2V0aXRpbWVyLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL19fdGltZXJfY3JlYXRlLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL19fdGltZXJfc2V0dGltZS5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9fX3RpbWVyX2dldHRpbWUuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvX190aW1lcl9nZXRvdmVycnVuLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL19fdGltZXJfZGVsZXRlLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3V0aW1lcy5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zaWdhY3Rpb24uUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvc2lncHJvY21hc2suUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvX19zaWdzdXNwZW5kLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL19fcnRfc2lnYWN0aW9uLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL19fcnRfc2lncHJvY21hc2suUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvX19ydF9zaWd0aW1lZHdhaXQuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvc2lncGVuZGluZy5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zb2NrZXQuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvc29ja2V0cGFpci5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9iaW5kLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2Nvbm5lY3QuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvbGlzdGVuLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2FjY2VwdC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9nZXRzb2NrbmFtZS5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9nZXRwZWVybmFtZS5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zZW5kdG8uUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvcmVjdmZyb20uUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvc2h1dGRvd24uUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvc2V0c29ja29wdC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9nZXRzb2Nrb3B0LlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3NlbmRtc2cuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvcmVjdm1zZy5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zY2hlZF9zZXRzY2hlZHVsZXIuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfZ2V0c2NoZWR1bGVyLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX3lpZWxkLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX3NldHBhcmFtLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX2dldHBhcmFtLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX2dldF9wcmlvcml0eV9tYXguUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfZ2V0X3ByaW9yaXR5X21pbi5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvdW5hbWUuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvX193YWl0NC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy91bWFzay5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9fX3JlYm9vdC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9fX3N5c2xvZy5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9pbml0X21vZHVsZS5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9kZWxldGVfbW9kdWxlLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2tsb2djdGwuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvZnV0ZXguUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvZXBvbGxfY3JlYXRlLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2Vwb2xsX2N0bC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9lcG9sbF93YWl0LlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2lub3RpZnlfaW5pdC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9pbm90aWZ5X2FkZF93YXRjaC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9pbm90aWZ5X3JtX3dhdGNoLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3BvbGwuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvX19zZXRfdGxzLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2NhY2hlZmx1c2guUwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2Jyay5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2Jyay5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5YWQyZTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fYnJrLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBfX2JyaywgI2Z1bmN0aW9uCisgICAgLmdsb2JsIF9fYnJrCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitfX2JyazoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfYnJrCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2Nsb25lLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fY2xvbmUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTBlMmMwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2Nsb25lLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBfX2Nsb25lLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgX19jbG9uZQorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworX19jbG9uZToKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfY2xvbmUKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fZmNudGwuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19mY250bC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiN2I5MmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fZmNudGwuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIF9fZmNudGwsICNmdW5jdGlvbgorICAgIC5nbG9ibCBfX2ZjbnRsCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitfX2ZjbnRsOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9mY250bAorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19mY250bDY0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fZmNudGw2NC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxYTZmYzgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fZmNudGw2NC5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgX19mY250bDY0LCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgX19mY250bDY0CisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitfX2ZjbnRsNjQ6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX2ZjbnRsNjQKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fZm9yay5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2ZvcmsuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGRkMjc2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2ZvcmsuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIF9fZm9yaywgI2Z1bmN0aW9uCisgICAgLmdsb2JsIF9fZm9yaworICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworX19mb3JrOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9mb3JrCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2dldGN3ZC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2dldGN3ZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwOThkMDkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fZ2V0Y3dkLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBfX2dldGN3ZCwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIF9fZ2V0Y3dkCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitfX2dldGN3ZDoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfZ2V0Y3dkCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2dldHByaW9yaXR5LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fZ2V0cHJpb3JpdHkuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjY1MmVmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2dldHByaW9yaXR5LlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBfX2dldHByaW9yaXR5LCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgX19nZXRwcmlvcml0eQorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworX19nZXRwcmlvcml0eToKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfZ2V0cHJpb3JpdHkKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19faW9jdGwuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19pb2N0bC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmYWQyMzEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19faW9jdGwuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIF9faW9jdGwsICNmdW5jdGlvbgorICAgIC5nbG9ibCBfX2lvY3RsCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitfX2lvY3RsOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9pb2N0bAorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19sbHNlZWsuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19sbHNlZWsuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzI1ZTJkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2xsc2Vlay5TCkBAIC0wLDAgKzEsMjEgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgX19sbHNlZWssICNmdW5jdGlvbgorICAgIC5nbG9ibCBfX2xsc2VlaworICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworX19sbHNlZWs6CisgICAgbW92ICAgICBpcCwgc3AKKyAgICAuc2F2ZSAgIHtyNCwgcjUsIHI2LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByNSwgcjYsIHI3fQorICAgIGxkbWZkICAgaXAsIHtyNCwgcjUsIHI2fQorICAgIGxkciAgICAgcjcsID1fX05SX19sbHNlZWsKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjUsIHI2LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19tbWFwMi5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX21tYXAyLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU3MDIwYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19tbWFwMi5TCkBAIC0wLDAgKzEsMjEgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgX19tbWFwMiwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIF9fbW1hcDIKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK19fbW1hcDI6CisgICAgbW92ICAgICBpcCwgc3AKKyAgICAuc2F2ZSAgIHtyNCwgcjUsIHI2LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByNSwgcjYsIHI3fQorICAgIGxkbWZkICAgaXAsIHtyNCwgcjUsIHI2fQorICAgIGxkciAgICAgcjcsID1fX05SX21tYXAyCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fb3Blbi5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX29wZW4uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTNmYjdhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX29wZW4uUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIF9fb3BlbiwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIF9fb3BlbgorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworX19vcGVuOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9vcGVuCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX29wZW5hdC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX29wZW5hdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlOTJiOWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fb3BlbmF0LlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBfX29wZW5hdCwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIF9fb3BlbmF0CisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitfX29wZW5hdDoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfb3BlbmF0CisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3ByZWFkNjQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19wcmVhZDY0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE2NDVlMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19wcmVhZDY0LlMKQEAgLTAsMCArMSwyMSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBfX3ByZWFkNjQsICNmdW5jdGlvbgorICAgIC5nbG9ibCBfX3ByZWFkNjQKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK19fcHJlYWQ2NDoKKyAgICBtb3YgICAgIGlwLCBzcAorICAgIC5zYXZlICAge3I0LCByNSwgcjYsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9CisgICAgbGRtZmQgICBpcCwge3I0LCByNSwgcjZ9CisgICAgbGRyICAgICByNywgPV9fTlJfcHJlYWQ2NAorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByNSwgcjYsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3B0cmFjZS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3B0cmFjZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyOWE1YWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fcHRyYWNlLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBfX3B0cmFjZSwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIF9fcHRyYWNlCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitfX3B0cmFjZToKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfcHRyYWNlCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3B3cml0ZTY0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fcHdyaXRlNjQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTI2M2JlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3B3cml0ZTY0LlMKQEAgLTAsMCArMSwyMSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBfX3B3cml0ZTY0LCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgX19wd3JpdGU2NAorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworX19wd3JpdGU2NDoKKyAgICBtb3YgICAgIGlwLCBzcAorICAgIC5zYXZlICAge3I0LCByNSwgcjYsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9CisgICAgbGRtZmQgICBpcCwge3I0LCByNSwgcjZ9CisgICAgbGRyICAgICByNywgPV9fTlJfcHdyaXRlNjQKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjUsIHI2LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19yZWJvb3QuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19yZWJvb3QuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzBlOWY4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3JlYm9vdC5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgX19yZWJvb3QsICNmdW5jdGlvbgorICAgIC5nbG9ibCBfX3JlYm9vdAorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworX19yZWJvb3Q6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX3JlYm9vdAorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19ydF9zaWdhY3Rpb24uUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19ydF9zaWdhY3Rpb24uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWFiZDU1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3J0X3NpZ2FjdGlvbi5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgX19ydF9zaWdhY3Rpb24sICNmdW5jdGlvbgorICAgIC5nbG9ibCBfX3J0X3NpZ2FjdGlvbgorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworX19ydF9zaWdhY3Rpb246CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX3J0X3NpZ2FjdGlvbgorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19ydF9zaWdwcm9jbWFzay5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3J0X3NpZ3Byb2NtYXNrLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNhY2I1NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19ydF9zaWdwcm9jbWFzay5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgX19ydF9zaWdwcm9jbWFzaywgI2Z1bmN0aW9uCisgICAgLmdsb2JsIF9fcnRfc2lncHJvY21hc2sKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK19fcnRfc2lncHJvY21hc2s6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX3J0X3NpZ3Byb2NtYXNrCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3J0X3NpZ3RpbWVkd2FpdC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3J0X3NpZ3RpbWVkd2FpdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmYjE1NzMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fcnRfc2lndGltZWR3YWl0LlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBfX3J0X3NpZ3RpbWVkd2FpdCwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIF9fcnRfc2lndGltZWR3YWl0CisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitfX3J0X3NpZ3RpbWVkd2FpdDoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfcnRfc2lndGltZWR3YWl0CisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3NldF90bHMuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19zZXRfdGxzLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZhMDk3ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19zZXRfdGxzLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBfX3NldF90bHMsICNmdW5jdGlvbgorICAgIC5nbG9ibCBfX3NldF90bHMKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK19fc2V0X3RsczoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfQVJNX3NldF90bHMKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fc2lnc3VzcGVuZC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3NpZ3N1c3BlbmQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTQxNmYxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3NpZ3N1c3BlbmQuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIF9fc2lnc3VzcGVuZCwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIF9fc2lnc3VzcGVuZAorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworX19zaWdzdXNwZW5kOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9zaWdzdXNwZW5kCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3N0YXRmczY0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fc3RhdGZzNjQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjAyNjM3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3N0YXRmczY0LlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBfX3N0YXRmczY0LCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgX19zdGF0ZnM2NAorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworX19zdGF0ZnM2NDoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfc3RhdGZzNjQKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fc3lzbG9nLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fc3lzbG9nLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMxOGQ3NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19zeXNsb2cuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIF9fc3lzbG9nLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgX19zeXNsb2cKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK19fc3lzbG9nOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9zeXNsb2cKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fdGltZXJfY3JlYXRlLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fdGltZXJfY3JlYXRlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJjMzk2NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX190aW1lcl9jcmVhdGUuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIF9fdGltZXJfY3JlYXRlLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgX190aW1lcl9jcmVhdGUKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK19fdGltZXJfY3JlYXRlOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl90aW1lcl9jcmVhdGUKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fdGltZXJfZGVsZXRlLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fdGltZXJfZGVsZXRlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRkZWUwMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX190aW1lcl9kZWxldGUuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIF9fdGltZXJfZGVsZXRlLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgX190aW1lcl9kZWxldGUKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK19fdGltZXJfZGVsZXRlOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl90aW1lcl9kZWxldGUKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fdGltZXJfZ2V0b3ZlcnJ1bi5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3RpbWVyX2dldG92ZXJydW4uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjBjODdkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3RpbWVyX2dldG92ZXJydW4uUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIF9fdGltZXJfZ2V0b3ZlcnJ1biwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIF9fdGltZXJfZ2V0b3ZlcnJ1bgorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworX190aW1lcl9nZXRvdmVycnVuOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl90aW1lcl9nZXRvdmVycnVuCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3RpbWVyX2dldHRpbWUuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX190aW1lcl9nZXR0aW1lLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ2ZTQ0NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX190aW1lcl9nZXR0aW1lLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBfX3RpbWVyX2dldHRpbWUsICNmdW5jdGlvbgorICAgIC5nbG9ibCBfX3RpbWVyX2dldHRpbWUKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK19fdGltZXJfZ2V0dGltZToKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfdGltZXJfZ2V0dGltZQorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX190aW1lcl9zZXR0aW1lLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fdGltZXJfc2V0dGltZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3YmUxMzIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fdGltZXJfc2V0dGltZS5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgX190aW1lcl9zZXR0aW1lLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgX190aW1lcl9zZXR0aW1lCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitfX3RpbWVyX3NldHRpbWU6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX3RpbWVyX3NldHRpbWUKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fd2FpdDQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX193YWl0NC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2NzAxNzcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fd2FpdDQuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIF9fd2FpdDQsICNmdW5jdGlvbgorICAgIC5nbG9ibCBfX3dhaXQ0CisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitfX3dhaXQ0OgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl93YWl0NAorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX2V4aXQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX2V4aXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzUwY2EzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fZXhpdC5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgX2V4aXQsICNmdW5jdGlvbgorICAgIC5nbG9ibCBfZXhpdAorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworX2V4aXQ6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX2V4aXRfZ3JvdXAKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19leGl0X3RocmVhZC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fZXhpdF90aHJlYWQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmY4NjhmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fZXhpdF90aHJlYWQuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIF9leGl0X3RocmVhZCwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIF9leGl0X3RocmVhZAorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworX2V4aXRfdGhyZWFkOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9leGl0CisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9hY2NlcHQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvYWNjZXB0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmMzMmYyNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvYWNjZXB0LlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBhY2NlcHQsICNmdW5jdGlvbgorICAgIC5nbG9ibCBhY2NlcHQKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK2FjY2VwdDoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfYWNjZXB0CisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9hY2Nlc3MuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvYWNjZXNzLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzYzOTEwNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvYWNjZXNzLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBhY2Nlc3MsICNmdW5jdGlvbgorICAgIC5nbG9ibCBhY2Nlc3MKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK2FjY2VzczoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfYWNjZXNzCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9hY2N0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2FjY3QuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2Q4NzgxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9hY2N0LlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBhY2N0LCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgYWNjdAorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworYWNjdDoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfYWNjdAorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvYmluZC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9iaW5kLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZjYzY2NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvYmluZC5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgYmluZCwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIGJpbmQKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK2JpbmQ6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX2JpbmQKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2NhY2hlZmx1c2guUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2FjaGVmbHVzaC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ZmJhOTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2NhY2hlZmx1c2guUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGNhY2hlZmx1c2gsICNmdW5jdGlvbgorICAgIC5nbG9ibCBjYWNoZWZsdXNoCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitjYWNoZWZsdXNoOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9BUk1fY2FjaGVmbHVzaAorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2FwZ2V0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2NhcGdldC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyMDgyYTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2NhcGdldC5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgY2FwZ2V0LCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgY2FwZ2V0CisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitjYXBnZXQ6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX2NhcGdldAorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2Fwc2V0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2NhcHNldC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMTY5ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2NhcHNldC5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgY2Fwc2V0LCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgY2Fwc2V0CisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitjYXBzZXQ6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX2NhcHNldAorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2hkaXIuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2hkaXIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjRlYzY4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jaGRpci5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgY2hkaXIsICNmdW5jdGlvbgorICAgIC5nbG9ibCBjaGRpcgorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworY2hkaXI6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX2NoZGlyCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jaG1vZC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jaG1vZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2ZTQzYzUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2NobW9kLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBjaG1vZCwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIGNobW9kCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitjaG1vZDoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfY2htb2QKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Nob3duLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Nob3duLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQzMDMyZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2hvd24uUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGNob3duLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgY2hvd24KKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK2Nob3duOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9jaG93bjMyCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jaHJvb3QuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2hyb290LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA2M2Q4YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2hyb290LlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBjaHJvb3QsICNmdW5jdGlvbgorICAgIC5nbG9ibCBjaHJvb3QKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK2Nocm9vdDoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfY2hyb290CisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jbG9ja19nZXRyZXMuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2xvY2tfZ2V0cmVzLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZkYmUzNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2xvY2tfZ2V0cmVzLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBjbG9ja19nZXRyZXMsICNmdW5jdGlvbgorICAgIC5nbG9ibCBjbG9ja19nZXRyZXMKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK2Nsb2NrX2dldHJlczoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfY2xvY2tfZ2V0cmVzCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jbG9ja19nZXR0aW1lLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Nsb2NrX2dldHRpbWUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTQxYjIzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jbG9ja19nZXR0aW1lLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBjbG9ja19nZXR0aW1lLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgY2xvY2tfZ2V0dGltZQorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworY2xvY2tfZ2V0dGltZToKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfY2xvY2tfZ2V0dGltZQorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2xvY2tfbmFub3NsZWVwLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Nsb2NrX25hbm9zbGVlcC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMTAxNTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Nsb2NrX25hbm9zbGVlcC5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgY2xvY2tfbmFub3NsZWVwLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgY2xvY2tfbmFub3NsZWVwCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitjbG9ja19uYW5vc2xlZXA6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX2Nsb2NrX25hbm9zbGVlcAorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2xvY2tfc2V0dGltZS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jbG9ja19zZXR0aW1lLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ2MTRmMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2xvY2tfc2V0dGltZS5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgY2xvY2tfc2V0dGltZSwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIGNsb2NrX3NldHRpbWUKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK2Nsb2NrX3NldHRpbWU6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX2Nsb2NrX3NldHRpbWUKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Nsb3NlLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Nsb3NlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU0YjEwMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2xvc2UuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGNsb3NlLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgY2xvc2UKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK2Nsb3NlOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9jbG9zZQorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY29ubmVjdC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jb25uZWN0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA1ZDZhMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY29ubmVjdC5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgY29ubmVjdCwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIGNvbm5lY3QKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK2Nvbm5lY3Q6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX2Nvbm5lY3QKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2RlbGV0ZV9tb2R1bGUuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZGVsZXRlX21vZHVsZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ZDU5NjYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2RlbGV0ZV9tb2R1bGUuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGRlbGV0ZV9tb2R1bGUsICNmdW5jdGlvbgorICAgIC5nbG9ibCBkZWxldGVfbW9kdWxlCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitkZWxldGVfbW9kdWxlOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9kZWxldGVfbW9kdWxlCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9kdXAuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZHVwLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE1ZDA1MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZHVwLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBkdXAsICNmdW5jdGlvbgorICAgIC5nbG9ibCBkdXAKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK2R1cDoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfZHVwCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9kdXAyLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2R1cDIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2VkNDU4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9kdXAyLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBkdXAyLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgZHVwMgorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworZHVwMjoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfZHVwMgorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZXBvbGxfY3JlYXRlLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Vwb2xsX2NyZWF0ZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4OWQ0YmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Vwb2xsX2NyZWF0ZS5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgZXBvbGxfY3JlYXRlLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgZXBvbGxfY3JlYXRlCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitlcG9sbF9jcmVhdGU6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX2Vwb2xsX2NyZWF0ZQorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZXBvbGxfY3RsLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Vwb2xsX2N0bC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNmQ4MGQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Vwb2xsX2N0bC5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgZXBvbGxfY3RsLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgZXBvbGxfY3RsCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitlcG9sbF9jdGw6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX2Vwb2xsX2N0bAorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZXBvbGxfd2FpdC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9lcG9sbF93YWl0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY3NDg3OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZXBvbGxfd2FpdC5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgZXBvbGxfd2FpdCwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIGVwb2xsX3dhaXQKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK2Vwb2xsX3dhaXQ6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX2Vwb2xsX3dhaXQKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2V4ZWN2ZS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9leGVjdmUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzA5YTFiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9leGVjdmUuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGV4ZWN2ZSwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIGV4ZWN2ZQorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworZXhlY3ZlOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9leGVjdmUKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZjaGRpci5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mY2hkaXIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDFmM2UyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mY2hkaXIuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGZjaGRpciwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIGZjaGRpcgorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworZmNoZGlyOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9mY2hkaXIKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZjaG1vZC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mY2htb2QuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWYxOTgzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mY2htb2QuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGZjaG1vZCwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIGZjaG1vZAorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworZmNobW9kOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9mY2htb2QKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZjaG1vZGF0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZjaG1vZGF0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZlMzkxNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZmNobW9kYXQuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGZjaG1vZGF0LCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgZmNobW9kYXQKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK2ZjaG1vZGF0OgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9mY2htb2RhdAorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZmNob3duLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZjaG93bi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4ODcyOTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZjaG93bi5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgZmNob3duLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgZmNob3duCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitmY2hvd246CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX2ZjaG93bjMyCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mY2hvd25hdC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mY2hvd25hdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyNzlkMmMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZjaG93bmF0LlMKQEAgLTAsMCArMSwyMSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBmY2hvd25hdCwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIGZjaG93bmF0CisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitmY2hvd25hdDoKKyAgICBtb3YgICAgIGlwLCBzcAorICAgIC5zYXZlICAge3I0LCByNSwgcjYsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9CisgICAgbGRtZmQgICBpcCwge3I0LCByNSwgcjZ9CisgICAgbGRyICAgICByNywgPV9fTlJfZmNob3duYXQKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjUsIHI2LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZmxvY2suUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZmxvY2suUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmUzOTFjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mbG9jay5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgZmxvY2ssICNmdW5jdGlvbgorICAgIC5nbG9ibCBmbG9jaworICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworZmxvY2s6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX2Zsb2NrCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mc3RhdC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mc3RhdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMTc1MmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZzdGF0LlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBmc3RhdCwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIGZzdGF0CisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitmc3RhdDoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfZnN0YXQ2NAorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZnN0YXRhdC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mc3RhdGF0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNkZDc0YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZnN0YXRhdC5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgZnN0YXRhdCwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIGZzdGF0YXQKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK2ZzdGF0YXQ6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX2ZzdGF0YXQ2NAorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZnN0YXRmcy5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mc3RhdGZzLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgxNTBkNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZnN0YXRmcy5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgZnN0YXRmcywgI2Z1bmN0aW9uCisgICAgLmdsb2JsIGZzdGF0ZnMKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK2ZzdGF0ZnM6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX2ZzdGF0ZnM2NAorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZnN5bmMuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZnN5bmMuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODhkZmEzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mc3luYy5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgZnN5bmMsICNmdW5jdGlvbgorICAgIC5nbG9ibCBmc3luYworICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworZnN5bmM6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX2ZzeW5jCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mdHJ1bmNhdGUuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZnRydW5jYXRlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ2MGI0MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZnRydW5jYXRlLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBmdHJ1bmNhdGUsICNmdW5jdGlvbgorICAgIC5nbG9ibCBmdHJ1bmNhdGUKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK2Z0cnVuY2F0ZToKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfZnRydW5jYXRlCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mdXRleC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mdXRleC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyZDRiN2UKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Z1dGV4LlMKQEAgLTAsMCArMSwyMSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBmdXRleCwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIGZ1dGV4CisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitmdXRleDoKKyAgICBtb3YgICAgIGlwLCBzcAorICAgIC5zYXZlICAge3I0LCByNSwgcjYsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9CisgICAgbGRtZmQgICBpcCwge3I0LCByNSwgcjZ9CisgICAgbGRyICAgICByNywgPV9fTlJfZnV0ZXgKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjUsIHI2LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0ZGVudHMuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0ZGVudHMuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTJhYTBkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRkZW50cy5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgZ2V0ZGVudHMsICNmdW5jdGlvbgorICAgIC5nbG9ibCBnZXRkZW50cworICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworZ2V0ZGVudHM6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX2dldGRlbnRzNjQKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldGVnaWQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0ZWdpZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2NzIzYmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldGVnaWQuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGdldGVnaWQsICNmdW5jdGlvbgorICAgIC5nbG9ibCBnZXRlZ2lkCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitnZXRlZ2lkOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9nZXRlZ2lkMzIKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldGV1aWQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0ZXVpZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4Njk1OWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldGV1aWQuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGdldGV1aWQsICNmdW5jdGlvbgorICAgIC5nbG9ibCBnZXRldWlkCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitnZXRldWlkOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9nZXRldWlkMzIKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldGdpZC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRnaWQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTAyZmRmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRnaWQuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGdldGdpZCwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIGdldGdpZAorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworZ2V0Z2lkOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9nZXRnaWQzMgorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0Z3JvdXBzLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldGdyb3Vwcy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OGZlMDUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldGdyb3Vwcy5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgZ2V0Z3JvdXBzLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgZ2V0Z3JvdXBzCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitnZXRncm91cHM6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX2dldGdyb3VwczMyCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRpdGltZXIuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0aXRpbWVyLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA0YzJmYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0aXRpbWVyLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBnZXRpdGltZXIsICNmdW5jdGlvbgorICAgIC5nbG9ibCBnZXRpdGltZXIKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK2dldGl0aW1lcjoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfZ2V0aXRpbWVyCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRwZWVybmFtZS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRwZWVybmFtZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwNGVjMzIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHBlZXJuYW1lLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBnZXRwZWVybmFtZSwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIGdldHBlZXJuYW1lCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitnZXRwZWVybmFtZToKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfZ2V0cGVlcm5hbWUKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHBnaWQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cGdpZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzOTc0NTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHBnaWQuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGdldHBnaWQsICNmdW5jdGlvbgorICAgIC5nbG9ibCBnZXRwZ2lkCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitnZXRwZ2lkOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9nZXRwZ2lkCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRwaWQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cGlkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJlNzkzYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cGlkLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBnZXRwaWQsICNmdW5jdGlvbgorICAgIC5nbG9ibCBnZXRwaWQKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK2dldHBpZDoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfZ2V0cGlkCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRwcGlkLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHBwaWQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDE4NWI5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRwcGlkLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBnZXRwcGlkLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgZ2V0cHBpZAorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworZ2V0cHBpZDoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfZ2V0cHBpZAorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cmVzZ2lkLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHJlc2dpZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwYzkwZGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHJlc2dpZC5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgZ2V0cmVzZ2lkLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgZ2V0cmVzZ2lkCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitnZXRyZXNnaWQ6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX2dldHJlc2dpZDMyCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRyZXN1aWQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cmVzdWlkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA2N2FjMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cmVzdWlkLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBnZXRyZXN1aWQsICNmdW5jdGlvbgorICAgIC5nbG9ibCBnZXRyZXN1aWQKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK2dldHJlc3VpZDoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfZ2V0cmVzdWlkMzIKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHJsaW1pdC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRybGltaXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWMxMzU3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRybGltaXQuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGdldHJsaW1pdCwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIGdldHJsaW1pdAorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworZ2V0cmxpbWl0OgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl91Z2V0cmxpbWl0CisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRydXNhZ2UuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cnVzYWdlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFkYjE1MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cnVzYWdlLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBnZXRydXNhZ2UsICNmdW5jdGlvbgorICAgIC5nbG9ibCBnZXRydXNhZ2UKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK2dldHJ1c2FnZToKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfZ2V0cnVzYWdlCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRzb2NrbmFtZS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRzb2NrbmFtZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhZTA4NzYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHNvY2tuYW1lLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBnZXRzb2NrbmFtZSwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIGdldHNvY2tuYW1lCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitnZXRzb2NrbmFtZToKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfZ2V0c29ja25hbWUKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHNvY2tvcHQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0c29ja29wdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2ZTFiMTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHNvY2tvcHQuUwpAQCAtMCwwICsxLDIxIEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGdldHNvY2tvcHQsICNmdW5jdGlvbgorICAgIC5nbG9ibCBnZXRzb2Nrb3B0CisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitnZXRzb2Nrb3B0OgorICAgIG1vdiAgICAgaXAsIHNwCisgICAgLnNhdmUgICB7cjQsIHI1LCByNiwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjUsIHI2LCByN30KKyAgICBsZG1mZCAgIGlwLCB7cjQsIHI1LCByNn0KKyAgICBsZHIgICAgIHI3LCA9X19OUl9nZXRzb2Nrb3B0CisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHRpZC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXR0aWQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWRhNDVkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXR0aWQuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGdldHRpZCwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIGdldHRpZAorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworZ2V0dGlkOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9nZXR0aWQKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHRpbWVvZmRheS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXR0aW1lb2ZkYXkuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTc1OWYyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXR0aW1lb2ZkYXkuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGdldHRpbWVvZmRheSwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIGdldHRpbWVvZmRheQorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworZ2V0dGltZW9mZGF5OgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9nZXR0aW1lb2ZkYXkKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHVpZC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXR1aWQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGMzMDU3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXR1aWQuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGdldHVpZCwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIGdldHVpZAorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworZ2V0dWlkOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9nZXR1aWQzMgorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvaW5pdF9tb2R1bGUuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvaW5pdF9tb2R1bGUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTljZDFmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9pbml0X21vZHVsZS5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgaW5pdF9tb2R1bGUsICNmdW5jdGlvbgorICAgIC5nbG9ibCBpbml0X21vZHVsZQorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworaW5pdF9tb2R1bGU6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX2luaXRfbW9kdWxlCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9pbm90aWZ5X2FkZF93YXRjaC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9pbm90aWZ5X2FkZF93YXRjaC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyM2YzMjEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2lub3RpZnlfYWRkX3dhdGNoLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBpbm90aWZ5X2FkZF93YXRjaCwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIGlub3RpZnlfYWRkX3dhdGNoCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitpbm90aWZ5X2FkZF93YXRjaDoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfaW5vdGlmeV9hZGRfd2F0Y2gKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2lub3RpZnlfaW5pdC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9pbm90aWZ5X2luaXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjEyYjgzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9pbm90aWZ5X2luaXQuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGlub3RpZnlfaW5pdCwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIGlub3RpZnlfaW5pdAorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworaW5vdGlmeV9pbml0OgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9pbm90aWZ5X2luaXQKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2lub3RpZnlfcm1fd2F0Y2guUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvaW5vdGlmeV9ybV93YXRjaC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjNDE2ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2lub3RpZnlfcm1fd2F0Y2guUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGlub3RpZnlfcm1fd2F0Y2gsICNmdW5jdGlvbgorICAgIC5nbG9ibCBpbm90aWZ5X3JtX3dhdGNoCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitpbm90aWZ5X3JtX3dhdGNoOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9pbm90aWZ5X3JtX3dhdGNoCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9rbG9nY3RsLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2tsb2djdGwuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWUzNDc0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9rbG9nY3RsLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBrbG9nY3RsLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwga2xvZ2N0bAorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKwora2xvZ2N0bDoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfc3lzbG9nCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9sY2hvd24uUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbGNob3duLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhlZTc5MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbGNob3duLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBsY2hvd24sICNmdW5jdGlvbgorICAgIC5nbG9ibCBsY2hvd24KKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK2xjaG93bjoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfbGNob3duMzIKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2xpbmsuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbGluay5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNjg1OTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2xpbmsuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGxpbmssICNmdW5jdGlvbgorICAgIC5nbG9ibCBsaW5rCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitsaW5rOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9saW5rCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9saXN0ZW4uUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbGlzdGVuLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFhOGE2ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbGlzdGVuLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBsaXN0ZW4sICNmdW5jdGlvbgorICAgIC5nbG9ibCBsaXN0ZW4KKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK2xpc3RlbjoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfbGlzdGVuCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9sc2Vlay5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9sc2Vlay5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3YmYwNmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2xzZWVrLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBsc2VlaywgI2Z1bmN0aW9uCisgICAgLmdsb2JsIGxzZWVrCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitsc2VlazoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfbHNlZWsKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2xzdGF0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2xzdGF0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE5ZDEyZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbHN0YXQuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGxzdGF0LCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgbHN0YXQKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK2xzdGF0OgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9sc3RhdDY0CisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tYWR2aXNlLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21hZHZpc2UuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTkyZjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tYWR2aXNlLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBtYWR2aXNlLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgbWFkdmlzZQorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworbWFkdmlzZToKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfbWFkdmlzZQorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbWluY29yZS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9taW5jb3JlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJiNTQzMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbWluY29yZS5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgbWluY29yZSwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIG1pbmNvcmUKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK21pbmNvcmU6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX21pbmNvcmUKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21rZGlyLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21rZGlyLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM4MzcyZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbWtkaXIuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIG1rZGlyLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgbWtkaXIKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK21rZGlyOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9ta2RpcgorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbWtkaXJhdC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9ta2RpcmF0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM3N2M2NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbWtkaXJhdC5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgbWtkaXJhdCwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIG1rZGlyYXQKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK21rZGlyYXQ6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX21rZGlyYXQKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21rbm9kLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21rbm9kLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE4YjZmYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbWtub2QuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIG1rbm9kLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgbWtub2QKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK21rbm9kOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9ta25vZAorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbWxvY2suUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbWxvY2suUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWZmNzBiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tbG9jay5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgbWxvY2ssICNmdW5jdGlvbgorICAgIC5nbG9ibCBtbG9jaworICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworbWxvY2s6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX21sb2NrCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tb3VudC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tb3VudC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyYjlmMWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21vdW50LlMKQEAgLTAsMCArMSwyMSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBtb3VudCwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIG1vdW50CisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCittb3VudDoKKyAgICBtb3YgICAgIGlwLCBzcAorICAgIC5zYXZlICAge3I0LCByNSwgcjYsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9CisgICAgbGRtZmQgICBpcCwge3I0LCByNSwgcjZ9CisgICAgbGRyICAgICByNywgPV9fTlJfbW91bnQKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjUsIHI2LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbXByb3RlY3QuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbXByb3RlY3QuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTAyOTFlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tcHJvdGVjdC5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgbXByb3RlY3QsICNmdW5jdGlvbgorICAgIC5nbG9ibCBtcHJvdGVjdAorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworbXByb3RlY3Q6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX21wcm90ZWN0CisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tcmVtYXAuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbXJlbWFwLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk3ODQ0YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbXJlbWFwLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBtcmVtYXAsICNmdW5jdGlvbgorICAgIC5nbG9ibCBtcmVtYXAKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK21yZW1hcDoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfbXJlbWFwCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tc3luYy5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tc3luYy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhYzdjZDIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21zeW5jLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBtc3luYywgI2Z1bmN0aW9uCisgICAgLmdsb2JsIG1zeW5jCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCittc3luYzoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfbXN5bmMKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL211bmxvY2suUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbXVubG9jay5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxZWU0ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL211bmxvY2suUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIG11bmxvY2ssICNmdW5jdGlvbgorICAgIC5nbG9ibCBtdW5sb2NrCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCittdW5sb2NrOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9tdW5sb2NrCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tdW5tYXAuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbXVubWFwLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc2NWIwMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbXVubWFwLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBtdW5tYXAsICNmdW5jdGlvbgorICAgIC5nbG9ibCBtdW5tYXAKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK211bm1hcDoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfbXVubWFwCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9uYW5vc2xlZXAuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbmFub3NsZWVwLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY5YjE4MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbmFub3NsZWVwLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBuYW5vc2xlZXAsICNmdW5jdGlvbgorICAgIC5nbG9ibCBuYW5vc2xlZXAKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK25hbm9zbGVlcDoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfbmFub3NsZWVwCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9wYXVzZS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9wYXVzZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhMTZlYzMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3BhdXNlLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBwYXVzZSwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIHBhdXNlCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitwYXVzZToKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfcGF1c2UKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3BpcGUuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcGlwZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlZGM3NWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3BpcGUuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHBpcGUsICNmdW5jdGlvbgorICAgIC5nbG9ibCBwaXBlCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitwaXBlOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9waXBlCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9wb2xsLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3BvbGwuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGIxOGUzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9wb2xsLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBwb2xsLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgcG9sbAorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworcG9sbDoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfcG9sbAorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcHJjdGwuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcHJjdGwuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGQ0MTdiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9wcmN0bC5TCkBAIC0wLDAgKzEsMjEgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgcHJjdGwsICNmdW5jdGlvbgorICAgIC5nbG9ibCBwcmN0bAorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworcHJjdGw6CisgICAgbW92ICAgICBpcCwgc3AKKyAgICAuc2F2ZSAgIHtyNCwgcjUsIHI2LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByNSwgcjYsIHI3fQorICAgIGxkbWZkICAgaXAsIHtyNCwgcjUsIHI2fQorICAgIGxkciAgICAgcjcsID1fX05SX3ByY3RsCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3JlYWQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcmVhZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhOWQ4MWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3JlYWQuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHJlYWQsICNmdW5jdGlvbgorICAgIC5nbG9ibCByZWFkCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCityZWFkOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9yZWFkCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9yZWFkbGluay5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9yZWFkbGluay5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViOGFlOGIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3JlYWRsaW5rLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSByZWFkbGluaywgI2Z1bmN0aW9uCisgICAgLmdsb2JsIHJlYWRsaW5rCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCityZWFkbGluazoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfcmVhZGxpbmsKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3JlYWR2LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3JlYWR2LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ1NjQ4ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcmVhZHYuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHJlYWR2LCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgcmVhZHYKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK3JlYWR2OgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9yZWFkdgorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcmVjdmZyb20uUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcmVjdmZyb20uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDRiNjBkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9yZWN2ZnJvbS5TCkBAIC0wLDAgKzEsMjEgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgcmVjdmZyb20sICNmdW5jdGlvbgorICAgIC5nbG9ibCByZWN2ZnJvbQorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworcmVjdmZyb206CisgICAgbW92ICAgICBpcCwgc3AKKyAgICAuc2F2ZSAgIHtyNCwgcjUsIHI2LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByNSwgcjYsIHI3fQorICAgIGxkbWZkICAgaXAsIHtyNCwgcjUsIHI2fQorICAgIGxkciAgICAgcjcsID1fX05SX3JlY3Zmcm9tCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3JlY3Ztc2cuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcmVjdm1zZy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiNGIxYmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3JlY3Ztc2cuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHJlY3Ztc2csICNmdW5jdGlvbgorICAgIC5nbG9ibCByZWN2bXNnCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCityZWN2bXNnOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9yZWN2bXNnCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9yZW5hbWUuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcmVuYW1lLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODlmMjNiNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcmVuYW1lLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSByZW5hbWUsICNmdW5jdGlvbgorICAgIC5nbG9ibCByZW5hbWUKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK3JlbmFtZToKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfcmVuYW1lCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9yZW5hbWVhdC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9yZW5hbWVhdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4MDdkZTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3JlbmFtZWF0LlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSByZW5hbWVhdCwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIHJlbmFtZWF0CisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCityZW5hbWVhdDoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfcmVuYW1lYXQKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3JtZGlyLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3JtZGlyLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWMyZjRiNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcm1kaXIuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHJtZGlyLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgcm1kaXIKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK3JtZGlyOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9ybWRpcgorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfZ2V0X3ByaW9yaXR5X21heC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk0ZWM5MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfZ2V0X3ByaW9yaXR5X21heC5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgc2NoZWRfZ2V0X3ByaW9yaXR5X21heCwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIHNjaGVkX2dldF9wcmlvcml0eV9tYXgKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK3NjaGVkX2dldF9wcmlvcml0eV9tYXg6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX3NjaGVkX2dldF9wcmlvcml0eV9tYXgKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX2dldF9wcmlvcml0eV9taW4uUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfZ2V0X3ByaW9yaXR5X21pbi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyYWU4N2UKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX2dldF9wcmlvcml0eV9taW4uUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHNjaGVkX2dldF9wcmlvcml0eV9taW4sICNmdW5jdGlvbgorICAgIC5nbG9ibCBzY2hlZF9nZXRfcHJpb3JpdHlfbWluCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitzY2hlZF9nZXRfcHJpb3JpdHlfbWluOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWluCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zY2hlZF9nZXRwYXJhbS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zY2hlZF9nZXRwYXJhbS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5YWRkZGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX2dldHBhcmFtLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzY2hlZF9nZXRwYXJhbSwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIHNjaGVkX2dldHBhcmFtCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitzY2hlZF9nZXRwYXJhbToKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfc2NoZWRfZ2V0cGFyYW0KKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX2dldHNjaGVkdWxlci5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zY2hlZF9nZXRzY2hlZHVsZXIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTA3MGMxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zY2hlZF9nZXRzY2hlZHVsZXIuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHNjaGVkX2dldHNjaGVkdWxlciwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIHNjaGVkX2dldHNjaGVkdWxlcgorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworc2NoZWRfZ2V0c2NoZWR1bGVyOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9zY2hlZF9nZXRzY2hlZHVsZXIKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX3JyX2dldF9pbnRlcnZhbC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDM4OTUzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHNjaGVkX3JyX2dldF9pbnRlcnZhbCwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIHNjaGVkX3JyX2dldF9pbnRlcnZhbAorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworc2NoZWRfcnJfZ2V0X2ludGVydmFsOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX3NldHBhcmFtLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX3NldHBhcmFtLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY3ZjkyZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfc2V0cGFyYW0uUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHNjaGVkX3NldHBhcmFtLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgc2NoZWRfc2V0cGFyYW0KKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK3NjaGVkX3NldHBhcmFtOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9zY2hlZF9zZXRwYXJhbQorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfc2V0c2NoZWR1bGVyLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX3NldHNjaGVkdWxlci5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExNjY3YzcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX3NldHNjaGVkdWxlci5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgc2NoZWRfc2V0c2NoZWR1bGVyLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgc2NoZWRfc2V0c2NoZWR1bGVyCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitzY2hlZF9zZXRzY2hlZHVsZXI6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX3NjaGVkX3NldHNjaGVkdWxlcgorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfeWllbGQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfeWllbGQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmYwMTQxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zY2hlZF95aWVsZC5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgc2NoZWRfeWllbGQsICNmdW5jdGlvbgorICAgIC5nbG9ibCBzY2hlZF95aWVsZAorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworc2NoZWRfeWllbGQ6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX3NjaGVkX3lpZWxkCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZWxlY3QuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2VsZWN0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGEwY2U1ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2VsZWN0LlMKQEAgLTAsMCArMSwyMSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzZWxlY3QsICNmdW5jdGlvbgorICAgIC5nbG9ibCBzZWxlY3QKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK3NlbGVjdDoKKyAgICBtb3YgICAgIGlwLCBzcAorICAgIC5zYXZlICAge3I0LCByNSwgcjYsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9CisgICAgbGRtZmQgICBpcCwge3I0LCByNSwgcjZ9CisgICAgbGRyICAgICByNywgPV9fTlJfX25ld3NlbGVjdAorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByNSwgcjYsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZW5kZmlsZS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZW5kZmlsZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMWRhNGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NlbmRmaWxlLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzZW5kZmlsZSwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIHNlbmRmaWxlCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitzZW5kZmlsZToKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfc2VuZGZpbGUKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NlbmRtc2cuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2VuZG1zZy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhYzJkNjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NlbmRtc2cuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHNlbmRtc2csICNmdW5jdGlvbgorICAgIC5nbG9ibCBzZW5kbXNnCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitzZW5kbXNnOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9zZW5kbXNnCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZW5kdG8uUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2VuZHRvLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ0ODkxYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2VuZHRvLlMKQEAgLTAsMCArMSwyMSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzZW5kdG8sICNmdW5jdGlvbgorICAgIC5nbG9ibCBzZW5kdG8KKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK3NlbmR0bzoKKyAgICBtb3YgICAgIGlwLCBzcAorICAgIC5zYXZlICAge3I0LCByNSwgcjYsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9CisgICAgbGRtZmQgICBpcCwge3I0LCByNSwgcjZ9CisgICAgbGRyICAgICByNywgPV9fTlJfc2VuZHRvCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldGdpZC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRnaWQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGQ0ZWU2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRnaWQuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHNldGdpZCwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIHNldGdpZAorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworc2V0Z2lkOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9zZXRnaWQzMgorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0Z3JvdXBzLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldGdyb3Vwcy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiYTlkZmIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldGdyb3Vwcy5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgc2V0Z3JvdXBzLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgc2V0Z3JvdXBzCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitzZXRncm91cHM6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX3NldGdyb3VwczMyCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRpdGltZXIuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0aXRpbWVyLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRhZDU2YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0aXRpbWVyLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzZXRpdGltZXIsICNmdW5jdGlvbgorICAgIC5nbG9ibCBzZXRpdGltZXIKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK3NldGl0aW1lcjoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfc2V0aXRpbWVyCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRwZ2lkLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHBnaWQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWM5OGM2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRwZ2lkLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzZXRwZ2lkLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgc2V0cGdpZAorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworc2V0cGdpZDoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfc2V0cGdpZAorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0cHJpb3JpdHkuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0cHJpb3JpdHkuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTQxMTBhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRwcmlvcml0eS5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgc2V0cHJpb3JpdHksICNmdW5jdGlvbgorICAgIC5nbG9ibCBzZXRwcmlvcml0eQorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworc2V0cHJpb3JpdHk6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX3NldHByaW9yaXR5CisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRyZWdpZC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRyZWdpZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzZDk0MjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHJlZ2lkLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzZXRyZWdpZCwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIHNldHJlZ2lkCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitzZXRyZWdpZDoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfc2V0cmVnaWQzMgorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0cmVzZ2lkLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHJlc2dpZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzODI5MTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHJlc2dpZC5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgc2V0cmVzZ2lkLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgc2V0cmVzZ2lkCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitzZXRyZXNnaWQ6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX3NldHJlc2dpZDMyCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRyZXN1aWQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0cmVzdWlkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY2YzFhMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0cmVzdWlkLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzZXRyZXN1aWQsICNmdW5jdGlvbgorICAgIC5nbG9ibCBzZXRyZXN1aWQKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK3NldHJlc3VpZDoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfc2V0cmVzdWlkMzIKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHJldWlkLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHJldWlkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY5NGI0NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0cmV1aWQuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHNldHJldWlkLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgc2V0cmV1aWQKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK3NldHJldWlkOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9zZXRyZXVpZDMyCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRybGltaXQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0cmxpbWl0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE1ZGU0OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0cmxpbWl0LlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzZXRybGltaXQsICNmdW5jdGlvbgorICAgIC5nbG9ibCBzZXRybGltaXQKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK3NldHJsaW1pdDoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfc2V0cmxpbWl0CisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRzaWQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0c2lkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJiMDYxNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0c2lkLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzZXRzaWQsICNmdW5jdGlvbgorICAgIC5nbG9ibCBzZXRzaWQKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK3NldHNpZDoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfc2V0c2lkCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRzb2Nrb3B0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHNvY2tvcHQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWYxMDRmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRzb2Nrb3B0LlMKQEAgLTAsMCArMSwyMSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzZXRzb2Nrb3B0LCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgc2V0c29ja29wdAorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworc2V0c29ja29wdDoKKyAgICBtb3YgICAgIGlwLCBzcAorICAgIC5zYXZlICAge3I0LCByNSwgcjYsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9CisgICAgbGRtZmQgICBpcCwge3I0LCByNSwgcjZ9CisgICAgbGRyICAgICByNywgPV9fTlJfc2V0c29ja29wdAorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByNSwgcjYsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXR0aW1lb2ZkYXkuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0dGltZW9mZGF5LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY3OTA0MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0dGltZW9mZGF5LlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzZXR0aW1lb2ZkYXksICNmdW5jdGlvbgorICAgIC5nbG9ibCBzZXR0aW1lb2ZkYXkKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK3NldHRpbWVvZmRheToKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfc2V0dGltZW9mZGF5CisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXR1aWQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0dWlkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFjZjQ0NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0dWlkLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzZXR1aWQsICNmdW5jdGlvbgorICAgIC5nbG9ibCBzZXR1aWQKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK3NldHVpZDoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfc2V0dWlkMzIKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NodXRkb3duLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NodXRkb3duLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJlYzAzMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2h1dGRvd24uUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHNodXRkb3duLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgc2h1dGRvd24KKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK3NodXRkb3duOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9zaHV0ZG93bgorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2lnYWN0aW9uLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NpZ2FjdGlvbi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2OTZmMWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NpZ2FjdGlvbi5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgc2lnYWN0aW9uLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgc2lnYWN0aW9uCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitzaWdhY3Rpb246CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX3NpZ2FjdGlvbgorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2lncGVuZGluZy5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zaWdwZW5kaW5nLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThmNTY1YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2lncGVuZGluZy5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgc2lncGVuZGluZywgI2Z1bmN0aW9uCisgICAgLmdsb2JsIHNpZ3BlbmRpbmcKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK3NpZ3BlbmRpbmc6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX3NpZ3BlbmRpbmcKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NpZ3Byb2NtYXNrLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NpZ3Byb2NtYXNrLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE1N2Q3NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2lncHJvY21hc2suUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHNpZ3Byb2NtYXNrLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgc2lncHJvY21hc2sKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK3NpZ3Byb2NtYXNrOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9zaWdwcm9jbWFzaworICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc29ja2V0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NvY2tldC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzYzlhNTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NvY2tldC5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgc29ja2V0LCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgc29ja2V0CisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitzb2NrZXQ6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX3NvY2tldAorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc29ja2V0cGFpci5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zb2NrZXRwYWlyLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJmMDdkNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc29ja2V0cGFpci5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgc29ja2V0cGFpciwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIHNvY2tldHBhaXIKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK3NvY2tldHBhaXI6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX3NvY2tldHBhaXIKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3N0YXQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc3RhdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2YWZjYzUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3N0YXQuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHN0YXQsICNmdW5jdGlvbgorICAgIC5nbG9ibCBzdGF0CisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitzdGF0OgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9zdGF0NjQKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3N5bWxpbmsuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc3ltbGluay5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzYjU1NGUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3N5bWxpbmsuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHN5bWxpbmssICNmdW5jdGlvbgorICAgIC5nbG9ibCBzeW1saW5rCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitzeW1saW5rOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9zeW1saW5rCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zeW5jLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3N5bmMuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzhkMzhlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zeW5jLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzeW5jLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgc3luYworICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworc3luYzoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfc3luYworICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdGltZXMuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdGltZXMuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWFiMGNlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy90aW1lcy5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgdGltZXMsICNmdW5jdGlvbgorICAgIC5nbG9ibCB0aW1lcworICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKwordGltZXM6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX3RpbWVzCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy90cnVuY2F0ZS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy90cnVuY2F0ZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3NGM4MjgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3RydW5jYXRlLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSB0cnVuY2F0ZSwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIHRydW5jYXRlCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCit0cnVuY2F0ZToKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfdHJ1bmNhdGUKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3VtYXNrLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3VtYXNrLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmYxODI1OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdW1hc2suUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHVtYXNrLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgdW1hc2sKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK3VtYXNrOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl91bWFzaworICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdW1vdW50Mi5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy91bW91bnQyLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU5YzNjMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdW1vdW50Mi5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgdW1vdW50MiwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIHVtb3VudDIKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK3Vtb3VudDI6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX3Vtb3VudDIKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3VuYW1lLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3VuYW1lLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRhMDVlOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdW5hbWUuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHVuYW1lLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgdW5hbWUKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK3VuYW1lOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl91bmFtZQorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdW5saW5rLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3VubGluay5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3YWU5YjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3VubGluay5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgdW5saW5rLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgdW5saW5rCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCit1bmxpbms6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX3VubGluaworICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdW5saW5rYXQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdW5saW5rYXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjMxZTg1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy91bmxpbmthdC5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgdW5saW5rYXQsICNmdW5jdGlvbgorICAgIC5nbG9ibCB1bmxpbmthdAorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKwordW5saW5rYXQ6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX3VubGlua2F0CisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy91dGltZXMuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdXRpbWVzLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTlmZThlMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdXRpbWVzLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSB1dGltZXMsICNmdW5jdGlvbgorICAgIC5nbG9ibCB1dGltZXMKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK3V0aW1lczoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfdXRpbWVzCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy92Zm9yay5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy92Zm9yay5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNDE3NjEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3Zmb3JrLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSB2Zm9yaywgI2Z1bmN0aW9uCisgICAgLmdsb2JsIHZmb3JrCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCit2Zm9yazoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfdmZvcmsKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3dhaXRpZC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy93YWl0aWQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTM0ZTUzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy93YWl0aWQuUwpAQCAtMCwwICsxLDIxIEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHdhaXRpZCwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIHdhaXRpZAorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKword2FpdGlkOgorICAgIG1vdiAgICAgaXAsIHNwCisgICAgLnNhdmUgICB7cjQsIHI1LCByNiwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjUsIHI2LCByN30KKyAgICBsZG1mZCAgIGlwLCB7cjQsIHI1LCByNn0KKyAgICBsZHIgICAgIHI3LCA9X19OUl93YWl0aWQKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjUsIHI2LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvd3JpdGUuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvd3JpdGUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmRmMzNkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy93cml0ZS5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgd3JpdGUsICNmdW5jdGlvbgorICAgIC5nbG9ibCB3cml0ZQorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKword3JpdGU6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX3dyaXRlCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy93cml0ZXYuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvd3JpdGV2LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZiMDRkYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvd3JpdGV2LlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSB3cml0ZXYsICNmdW5jdGlvbgorICAgIC5nbG9ibCB3cml0ZXYKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK3dyaXRldjoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfd3JpdGV2CisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9iaW9uaWMvX19nZXRfc3AuUyBiL2xpYmMvYXJjaC14ODYvYmlvbmljL19fZ2V0X3NwLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVhYWE2NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvYmlvbmljL19fZ2V0X3NwLlMKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworICAgIC50ZXh0CisgICAgLnR5cGUgX19nZXRfc3AsIEBmdW5jdGlvbgorICAgIC5nbG9iYWwgX19nZXRfc3AKKyAgICAuYWxpZ24gNAorCitfX2dldF9zcDoKKyAgICBtb3YgICVlc3AsICVlYXgKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvYmlvbmljL19fZ2V0X3Rscy5jIGIvbGliYy9hcmNoLXg4Ni9iaW9uaWMvX19nZXRfdGxzLmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWFjNmU0NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvYmlvbmljL19fZ2V0X3Rscy5jCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKy8qIHNlZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgX19zZXRfdGxzIGFuZCBwdGhyZWFkLmMgdG8gdW5kZXJzdGFuZCB0aGlzCisgKiBjb2RlLiBCYXNpY2FsbHksIHRoZSBjb250ZW50IG9mIGdzOlswXSBhbHdheXMgaXMgYSBwb2ludGVyIHRvIHRoZSBiYXNlCisgKiBhZGRyZXNzIG9mIHRoZSB0bHMgcmVnaW9uCisgKi8KK3ZvaWQqICAgX19nZXRfdGxzKHZvaWQpCit7CisgIHZvaWQqICB0bHM7CisgIGFzbSAoICIgICBtb3ZsICAlJWdzOjAsICUwIiA6ICI9ciIodGxzKSApOworICByZXR1cm4gdGxzOworfQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9iaW9uaWMvX19zZXRfdGxzLmMgYi9saWJjL2FyY2gteDg2L2Jpb25pYy9fX3NldF90bHMuYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40OGI1NWYwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9iaW9uaWMvX19zZXRfdGxzLmMKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHB0aHJlYWQuaD4KKworCitzdHJ1Y3QgdXNlcl9kZXNjIHsKKyAgICB1bnNpZ25lZCBpbnQgICAgZW50cnlfbnVtYmVyOworICAgIHVuc2lnbmVkIGxvbmcgICBiYXNlX2FkZHI7CisgICAgdW5zaWduZWQgaW50ICAgIGxpbWl0OworICAgIHVuc2lnbmVkIGludCAgICBzZWdfMzJiaXQ6MTsKKyAgICB1bnNpZ25lZCBpbnQgICAgY29udGVudHM6MjsKKyAgICB1bnNpZ25lZCBpbnQgICAgcmVhZF9leGVjX29ubHk6MTsKKyAgICB1bnNpZ25lZCBpbnQgICAgbGltaXRfaW5fcGFnZXM6MTsKKyAgICB1bnNpZ25lZCBpbnQgICAgc2VnX25vdF9wcmVzZW50OjE7CisgICAgdW5zaWduZWQgaW50ICAgIHVzZWFibGU6MTsKKyAgICB1bnNpZ25lZCBpbnQgICAgZW1wdHk6MjU7Cit9OworCitleHRlcm4gaW50IF9fc2V0X3RocmVhZF9hcmVhKHN0cnVjdCB1c2VyX2Rlc2MgKnVfaW5mbyk7CisKKy8qIHRoZSBmb2xsb3dpbmcgY2FuJ3QgYmUgY29uc3QsIHNpbmNlIHRoZSBmaXJzdCBjYWxsIHdpbGwKKyAqIHVwZGF0ZSB0aGUgJ2VudHJ5X251bWJlcicgZmllbGQKKyAqLworc3RhdGljIHN0cnVjdCB1c2VyX2Rlc2MgIF90bHNfZGVzYyA9Cit7CisgICAgLTEsCisgICAgMCwKKyAgICAweDEwMDAsCisgICAgMSwKKyAgICAwLAorICAgIDAsCisgICAgMSwKKyAgICAwLAorICAgIDEsCisgICAgMAorfTsKKworc3RydWN0IF90aHJlYWRfYXJlYV9oZWFkIHsKKyAgICB2b2lkICpzZWxmOworfTsKKworLyogd2UgaW1wbGVtZW50IHRocmVhZCBsb2NhbCBzdG9yYWdlIHRocm91Z2ggdGhlIGdzOiBzZWdtZW50IGRlc2NyaXB0b3IKKyAqIHdlIGNyZWF0ZSBhIHNlZ21lbnQgZGVzY3JpcHRvciBmb3IgdGhlIHRscworICovCitpbnQgX19zZXRfdGxzKHZvaWQgKnB0cikKK3sKKyAgICBpbnQgICByYywgc2VnbWVudDsKKworICAgIF90bHNfZGVzYy5iYXNlX2FkZHIgPSAodW5zaWduZWQgbG9uZylwdHI7CisKKyAgICAvKiBXZSBhbHNvIG5lZWQgdG8gd3JpdGUgdGhlIGxvY2F0aW9uIG9mIHRoZSB0bHMgdG8gcHRyWzBdICovCisgICAgKChzdHJ1Y3QgX3RocmVhZF9hcmVhX2hlYWQgKilwdHIpLT5zZWxmID0gcHRyOworCisgICAgcmMgPSBfX3NldF90aHJlYWRfYXJlYSggJl90bHNfZGVzYyApOworICAgIGlmIChyYyAhPSAwKQorICAgIHsKKyAgICAgICAgLyogY291bGQgbm90IHNldCB0aHJlYWQgbG9jYWwgYXJlYSAqLworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLyogdGhpcyB3ZWlyZCBjb21wdXRhdGlvbiBjb21lcyBmcm9tIEdMaWJjICovCisgICAgc2VnbWVudCA9IF90bHNfZGVzYy5lbnRyeV9udW1iZXIqOCArIDM7CisgICAgYXNtIF9fdm9sYXRpbGVfXyAoCisgICAgICAgICIgICBtb3Z3ICV3MCwgJSVncyIgOjogInEiKHNlZ21lbnQpCisgICAgKTsKKyAgICByZXR1cm4gMDsKK30KKworCisKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvYmlvbmljL19leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24uUyBiL2xpYmMvYXJjaC14ODYvYmlvbmljL19leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2E1MDRkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9iaW9uaWMvX2V4aXRfd2l0aF9zdGFja190ZWFyZG93bi5TCkBAIC0wLDAgKzEsMzQgQEAKKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworLnRleHQKKy50eXBlIF9leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24sIEBmdW5jdGlvbgorLmdsb2JsIF9leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24KKy5hbGlnbiA0CisKKy8qCisgKiB2b2lkIF9leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24odm9pZCAqc3RhY2tCYXNlLCBpbnQgc3RhY2tTaXplLCBpbnQgKnJldENvZGUpIAorICovCisKK19leGl0X3dpdGhfc3RhY2tfdGVhcmRvd246CisgICAgLyogd2UgY2FuIHRyYXNoICVlYnggaGVyZSBzaW5jZSB0aGlzIGNhbGwgc2hvdWxkIG5ldmVyIHJldHVybi4gKi8KKyAgICAvKiBXZSBjYW4gYWxzbyB0YWtlIGFkdmFudGFnZSBvZiB0aGUgZmFjdCB0aGF0IHRoZSBsaW51eCBzeXNjYWxsIHRyYXAKKyAgICAgKiBoYW5kbGVyIHNhdmVzIGFsbCB0aGUgcmVnaXN0ZXJzLCBzbyB3ZSBkb24ndCBuZWVkIGEgc3RhY2sgdG8ga2VlcAorICAgICAqIHRoZSByZXRDb2RlIGFyZ3VtZW50IGZvciBleGl0IHdoaWxlIGRvaW5nIHRoZSBtdW5tYXAgKi8KKworICAgIC8qIFRPRE8oZG10cml5eik6IE5vIG9uZSBleHBlY3RzIHRoaXMgY29kZSB0byByZXR1cm4sIHNvIGV2ZW4gaWYKKyAgICAgKiBtdW5tYXAgZmFpbHMsIHdlIGhhdmUgdG8gZXhpdC4gVGhpcyBzaG91bGQgcHJvYmFibHkgYmUgZml4ZWQsIGJ1dAorICAgICAqIHNpbmNlIEFSTSBzaWRlIGRvZXMgdGhlIHNhbWUgdGhpbmcsIGxlYXZlIGl0IGFzIGlzLgorICAgICAqLworICAgIG1vdiAgICAgNCglZXNwKSwgJWVieCAgICAgICAgICAgICAvKiBzdGFja0Jhc2UgKi8KKyAgICBtb3YgICAgIDgoJWVzcCksICVlY3ggICAgICAgICAgICAgLyogc3RhY2tTaXplICovCisgICAgbW92ICAgICAxMiglZXNwKSwgJWVkeCAgICAgICAgICAgLyogcmV0Q29kZSwgbm90IHVzZWQgZm9yIG11bm1hcCAqLworICAgIG1vdiAgICAgJF9fTlJfbXVubWFwLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIG1vdiAgICAgJWVkeCwgJWVieCAgICAgICAgICAgICAgICAvKiByZXRyaWV2ZSB0aGUgcmV0Q29kZSAqLworICAgIG1vdmwgICAgJF9fTlJfZXhpdCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICAvKiBleGl0IGRvZXMgbm90IHJldHVybiAqLworICAgIC8qIGNhbid0IGhhdmUgYSByZXQgaGVyZSBzaW5jZSB3ZSBubyBsb25nZXIgaGF2ZSBhIHVzYWJsZSBzdGFjay4gU2VlbXMKKyAgICAgKiB0aGF0IHByZXNlbnRseSwgJ2hsdCcgd2lsbCBjYXVzZSB0aGUgcHJvZ3JhbSB0byBzZWdmYXVsdC4uIGJ1dCB0aGlzCisgICAgICogc2hvdWxkIG5ldmVyIGhhcHBlbiA6KSAqLworICAgIGhsdApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9iaW9uaWMvX3NldGptcC5TIGIvbGliYy9hcmNoLXg4Ni9iaW9uaWMvX3NldGptcC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjNjI2MzUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L2Jpb25pYy9fc2V0am1wLlMKQEAgLTAsMCArMSw3MSBAQAorLyogJE9wZW5CU0Q6IF9zZXRqbXAuUyx2IDEuNSAyMDA1LzA4LzA3IDExOjMwOjM4IGVzcGllIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBXaWxsaWFtIEpvbGl0ei4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisKKy8qCisgKiBDIGxpYnJhcnkgLS0gX3NldGptcCwgX2xvbmdqbXAKKyAqCisgKglfbG9uZ2ptcChhLHYpCisgKiB3aWxsIGdlbmVyYXRlIGEgInJldHVybih2KSIgZnJvbSB0aGUgbGFzdCBjYWxsIHRvCisgKglfc2V0am1wKGEpCisgKiBieSByZXN0b3JpbmcgcmVnaXN0ZXJzIGZyb20gdGhlIHN0YWNrLgorICogVGhlIHByZXZpb3VzIHNpZ25hbCBzdGF0ZSBpcyBOT1QgcmVzdG9yZWQuCisgKi8KKworRU5UUlkoX3NldGptcCkKKwltb3ZsCTQoJWVzcCksJWVheAorCW1vdmwJMCglZXNwKSwlZWR4CisJbW92bAklZWR4LCAwKCVlYXgpCQkvKiBydGEgKi8KKwltb3ZsCSVlYngsIDQoJWVheCkKKwltb3ZsCSVlc3AsIDgoJWVheCkKKwltb3ZsCSVlYnAsMTIoJWVheCkKKwltb3ZsCSVlc2ksMTYoJWVheCkKKwltb3ZsCSVlZGksMjAoJWVheCkKKwl4b3JsCSVlYXgsJWVheAorCXJldAorCitFTlRSWShfbG9uZ2ptcCkKKwltb3ZsCTQoJWVzcCksJWVkeAorCW1vdmwJOCglZXNwKSwlZWF4CisJbW92bAkwKCVlZHgpLCVlY3gKKwltb3ZsCTQoJWVkeCksJWVieAorCW1vdmwJOCglZWR4KSwlZXNwCisJbW92bAkxMiglZWR4KSwlZWJwCisJbW92bAkxNiglZWR4KSwlZXNpCisJbW92bAkyMCglZWR4KSwlZWRpCisJdGVzdGwJJWVheCwlZWF4CisJam56CTFmCisJaW5jbAklZWF4CisxOgltb3ZsCSVlY3gsMCglZXNwKQorCXJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9iaW9uaWMvYXRvbWljc194ODYuUyBiL2xpYmMvYXJjaC14ODYvYmlvbmljL2F0b21pY3NfeDg2LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM3MGYyMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvYmlvbmljL2F0b21pY3NfeDg2LlMKQEAgLTAsMCArMSwxNDAgQEAKKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworI2RlZmluZSBGVVRFWF9XQUlUIDAKKyNkZWZpbmUgRlVURVhfV0FLRSAxCisKKworLyoKKyAqIGludCBfX2Z1dGV4X3dhaXQodm9sYXRpbGUgdm9pZCAqZnR4LCBpbnQgdmFsLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKnRpbWVvdXQpCisgKi8KKy50ZXh0CisuZ2xvYmwgX19mdXRleF93YWl0CisudHlwZSBfX2Z1dGV4X3dhaXQsIEBmdW5jdGlvbgorLmFsaWduIDQKK19fZnV0ZXhfd2FpdDoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlc2kKKyAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4ICAgICAgICAgICAvKiBmdHggKi8KKyAgICBtb3ZsICAgICRGVVRFWF9XQUlULCAlZWN4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVkeCAgICAgICAgICAgLyogdmFsICovCisgICAgbW92ICAgICAyMCglZXNwKSwgJWVzaSAgICAgICAgICAgLyogdGltZW91dCAqLworICAgIG1vdmwgICAgJF9fTlJfZnV0ZXgsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgcG9wbCAgICAlZXNpCisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CisKKworLyogaW50IF9fZnV0ZXhfd2FrZSh2b2xhdGlsZSB2b2lkICpmdHgsIGludCBjb3VudCkgKi8KKworLnRleHQKKy5nbG9ibCBfX2Z1dGV4X3dha2UKKy50eXBlIF9fZnV0ZXhfd2FrZSwgQGZ1bmN0aW9uCisuYWxpZ24gNAorX19mdXRleF93YWtlOgorICAgIHB1c2hsICAgJWVieAorICAgIG1vdiAgICAgOCglZXNwKSwgJWVieCAgICAgICAgICAgIC8qIGZ0eCAqLworICAgIG1vdmwgICAgJEZVVEVYX1dBS0UsICVlY3gKKyAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWR4ICAgICAgICAgICAvKiBjb3VudCAqLworICAgIG1vdmwgICAgJF9fTlJfZnV0ZXgsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CisKKworLyogaW50IF9fYXRvbWljX2NtcHhjaGcoaW50IG9sZCwgaW50IG5ldywgdm9sYXRpbGUgaW50KiBhZGRyKSAqLworCisudGV4dAorLmdsb2JsIF9fYXRvbWljX2NtcHhjaGcKKy50eXBlIF9fYXRvbWljX2NtcHhjaGcsIEBmdW5jdGlvbgorLmFsaWduIDQKK19fYXRvbWljX2NtcHhjaGc6CisgICAgbW92ICAgICA0KCVlc3ApLCAlZWF4ICAgICAgICAgICAgIC8qIG9sZCAqLworICAgIG1vdiAgICAgOCglZXNwKSwgJWVjeCAgICAgICAgICAgICAvKiBuZXcgKi8KKyAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWR4ICAgICAgICAgICAgLyogYWRkciAqLworICAgIGxvY2sgY21weGNoZyAlZWN4LCAoJWVkeCkKKyAgICBqbnogMWYKKyAgICB4b3IgICAgJWVheCwgJWVheAorICAgIGptcCAyZgorMToKKyAgICBtb3ZsICAgJDEsICVlYXgKKzI6CisgICAgcmV0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDAgPT0gc3VjY2VzcywgMSA9PSBmYWlsdXJlICovCisKKworLyogaW50IF9fYXRvbWljX3N3YXAoaW50IG5ldywgdm9sYXRpbGUgaW50KiBhZGRyKSAqLworCisudGV4dAorLmdsb2JsIF9fYXRvbWljX3N3YXAKKy50eXBlIF9fYXRvbWljX3N3YXAsIEBmdW5jdGlvbgorLmFsaWduIDQKK19fYXRvbWljX3N3YXA6CisgICAgbW92ICAgICA0KCVlc3ApLCAlZWN4ICAgICAgICAgICAgIC8qIG5ldyAqLworICAgIG1vdiAgICAgOCglZXNwKSwgJWVkeCAgICAgICAgICAgICAvKiBhZGRyICovCisgICAgbG9jayB4Y2hnICVlY3gsICglZWR4KQorICAgIG1vdiAgICAgJWVjeCwgJWVheAorICAgIHJldAorCisKKy8qCisgKiBpbnQgX19hdG9taWNfZGVjKHZvbGF0aWxlIGludCogYWRkcikKKyAqCisgKiBNeSB4ODYgYXNtIGlzIHJlYWxseSBydXN0eS4uIHRoaXMgaXMgcHJvYmFibHkgc3Vib3B0aW1hbAorICovCisKKy50ZXh0CisuZ2xvYmwgX19hdG9taWNfZGVjCisudHlwZSBfX2F0b21pY19kZWMsIEBmdW5jdGlvbgorLmFsaWduIDQKK19fYXRvbWljX2RlYzoKKyAgIHB1c2hsICAgICVlYngKKyAgIHB1c2hsICAgICVlc2kKKyAgIG1vdmwgICAgIDEyKCVlc3ApLCAlZWJ4ICAgICAgICAgICAgIC8qIGFkZHIgKi8KKworMToKKyAgIG1vdmwgICAgICglZWJ4KSwgJWVzaSAgICAgICAgICAgICAgIC8qIG9sZCA9ICphZGRyICovCisgICBtb3ZsICAgICAlZXNpLCAlZWR4CisgICBzdWJsICAgICAkMSwgJWVkeCAgICAgICAgICAgICAgICAgICAvKiBuZXcgPSBvbGQgLSAxICovCisKKyAgIHB1c2hsICAgICVlYngKKyAgIHB1c2hsICAgICVlZHgKKyAgIHB1c2hsICAgICVlc2kKKyAgIGNhbGwgICAgIF9fYXRvbWljX2NtcHhjaGcKKyAgIGFkZGwgICAgICQxMiwgJWVzcAorICAgdGVzdCAgICAgJWVheCwgJWVheAorICAgam56ICAgICAgMWIKKworICAgbW92bCAgICAgJWVzaSwgJWVheCAgICAgICAgICAgICAgIC8qIHJldHVybiBvbGQgKi8KKyAgIHBvcGwgICAgICVlc2kKKyAgIHBvcGwgICAgICVlYngKKyAgIHJldAorCisKKy50ZXh0CisvKiBpbnQgX19hdG9taWNfaW5jKHZvbGF0aWxlIGludCogYWRkcikgKi8KKy5nbG9ibCBfX2F0b21pY19pbmMKKy50eXBlIF9fYXRvbWljX2luYywgQGZ1bmN0aW9uCisuYWxpZ24gNAorX19hdG9taWNfaW5jOgorICAgcHVzaGwgICAgJWVieAorICAgcHVzaGwgICAgJWVzaQorICAgbW92bCAgICAgMTIoJWVzcCksICVlYnggICAgICAgICAgICAgLyogYWRkciAqLworCisxOgorICAgbW92bCAgICAgKCVlYngpLCAlZXNpICAgICAgICAgICAgICAgLyogb2xkID0gKmFkZHIgKi8KKyAgIG1vdmwgICAgICVlc2ksICVlZHgKKyAgIGFkZGwgICAgICQxLCAlZWR4ICAgICAgICAgICAgICAgICAgIC8qIG5ldyA9IG9sZCArIDEgKi8KKworICAgcHVzaGwgICAgJWVieAorICAgcHVzaGwgICAgJWVkeAorICAgcHVzaGwgICAgJWVzaQorICAgY2FsbCAgICAgX19hdG9taWNfY21weGNoZworICAgYWRkbCAgICAgJDEyLCAlZXNwCisgICB0ZXN0ICAgICAlZWF4LCAlZWF4CisgICBqbnogICAgICAxYgorCisgICBtb3ZsICAgICAlZXNpLCAlZWF4ICAgICAgICAgICAgICAgLyogcmV0dXJuIG9sZCAqLworICAgcG9wbCAgICAgJWVzaQorICAgcG9wbCAgICAgJWVieAorICAgcmV0CisKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvYmlvbmljL2F0b21pY3NfeDg2LmMgYi9saWJjL2FyY2gteDg2L2Jpb25pYy9hdG9taWNzX3g4Ni5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3YjIwZTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L2Jpb25pYy9hdG9taWNzX3g4Ni5jCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8c3lzL2F0b21pY3MuaD4KKworI2RlZmluZSBGVVRFWF9TWVNDQUxMIDI0MAorI2RlZmluZSBGVVRFWF9XQUlUIDAKKyNkZWZpbmUgRlVURVhfV0FLRSAxCisKK2ludCBfX2Z1dGV4X3dhaXQodm9sYXRpbGUgdm9pZCAqZnR4LCBpbnQgdmFsKQoreworICAgIGludCByZXQ7CisgICAgYXNtIHZvbGF0aWxlICgKKyAgICAgICAgImludCAkMHg4MDsiCisgICAgICAgIDogIj1hIiAocmV0KQorICAgICAgICA6ICIwIiAoRlVURVhfU1lTQ0FMTCksCisgICAgICAgICAgImIiIChmdHgpLAorICAgICAgICAgICJjIiAoRlVURVhfV0FJVCksCisgICAgICAgICAgImQiICh2YWwpLAorICAgICAgICAgICJTIiAoMCkKKyAgICApOworICAgIHJldHVybiByZXQ7Cit9CisKK2ludCBfX2Z1dGV4X3dha2Uodm9sYXRpbGUgdm9pZCAqZnR4LCBpbnQgY291bnQpCit7CisgICAgaW50IHJldDsKKyAgICBhc20gdm9sYXRpbGUgKAorICAgICAgICAiaW50ICQweDgwOyIKKyAgICAgICAgOiAiPWEiIChyZXQpCisgICAgICAgIDogIjAiIChGVVRFWF9TWVNDQUxMKSwKKyAgICAgICAgICAiYiIgKGZ0eCksCisgICAgICAgICAgImMiIChGVVRFWF9XQUtFKSwKKyAgICAgICAgICAiZCIgKGNvdW50KQorICAgICk7CisgICAgcmV0dXJuIHJldDsKK30KKworaW50IF9fYXRvbWljX2NtcHhjaGcoaW50IG9sZCwgaW50IG5ldywgdm9sYXRpbGUgaW50KiBhZGRyKSB7CisgICAgaW50IHhjaGc7CisgICAgYXNtIHZvbGF0aWxlICgKKyAgICAgICAgImxvY2s7IgorICAgICAgICAiY21weGNoZyAlJWVjeCwgKCUlZWR4KTsiCisgICAgICAgICJzZXRuZSAlJWFsOyIKKyAgICAgICAgOiAiPWEiICh4Y2hnKQorICAgICAgICA6ICJhIiAob2xkKSwKKyAgICAgICAgICAiYyIgKG5ldyksCisgICAgICAgICAgImQiIChhZGRyKQorICAgICk7CisgICAgcmV0dXJuIHhjaGc7Cit9CisKK2ludCBfX2F0b21pY19zd2FwKGludCBuZXcsIHZvbGF0aWxlIGludCogYWRkcikgeworICAgIGludCBvbGQ7CisgICAgYXNtIHZvbGF0aWxlICgKKyAgICAgICAgImxvY2s7IgorICAgICAgICAieGNoZyAlJWVjeCwgKCUlZWR4KTsiCisgICAgICAgIDogIj1jIiAob2xkKQorICAgICAgICA6ICJjIiAobmV3KSwKKyAgICAgICAgICAiZCIgKGFkZHIpCisgICAgKTsKKyAgICByZXR1cm4gb2xkOworfQorCitpbnQgX19hdG9taWNfZGVjKHZvbGF0aWxlIGludCogYWRkcikgeworICAgIGludCBvbGQ7CisgICAgZG8geworICAgICAgICBvbGQgPSAqYWRkcjsKKyAgICB9IHdoaWxlIChhdG9taWNfY21weGNoZyhvbGQsIG9sZC0xLCBhZGRyKSk7CisgICAgcmV0dXJuIG9sZDsKK30KKworaW50IF9fYXRvbWljX2luYyh2b2xhdGlsZSBpbnQqIGFkZHIpIHsKKyAgICBpbnQgb2xkOworICAgIGRvIHsKKyAgICAgICAgb2xkID0gKmFkZHI7CisgICAgfSB3aGlsZSAoYXRvbWljX2NtcHhjaGcob2xkLCBvbGQrMSwgYWRkcikpOworICAgIHJldHVybiBvbGQ7Cit9CisKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvYmlvbmljL2Nsb25lLlMgYi9saWJjL2FyY2gteDg2L2Jpb25pYy9jbG9uZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2MTgwOGQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L2Jpb25pYy9jbG9uZS5TCkBAIC0wLDAgKzEsNTAgQEAKKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworLnRleHQKKworLyoKKyAqIGludCAgX19wdGhyZWFkX2Nsb25lKGludCAoKmZuKSh2b2lkKiksIHZvaWQgKnRscywgaW50IGZsYWdzLAorICogICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXJnKTsKKyAqLworLmdsb2JsIF9fcHRocmVhZF9jbG9uZQorLnR5cGUgX19wdGhyZWFkX2Nsb25lLCBAZnVuY3Rpb24KKy5hbGlnbiA0CitfX3B0aHJlYWRfY2xvbmU6CisgICAgICAgIHB1c2hsICAgJWVieAorICAgICAgICBwdXNobCAgICVlY3gKKyAgICAgICAgbW92bCAgICAxNiglZXNwKSwgJWVjeAorICAgICAgICBtb3ZsICAgIDIwKCVlc3ApLCAlZWJ4CisKKyAgICAgICAgIyBpbnNlcnQgYXJndW1lbnRzIG9udG8gdGhlIGNoaWxkIHN0YWNrCisgICAgICAgIG1vdmwgICAgMTIoJWVzcCksICVlYXgKKyAgICAgICAgbW92bCAgICAlZWF4LCAtMTIoJWVjeCkKKyAgICAgICAgbW92bCAgICAyNCglZXNwKSwgJWVheAorICAgICAgICBtb3ZsICAgICVlYXgsIC04KCVlY3gpCisgICAgICAgIGxlYSAgICAgKCVlY3gpLCAlZWF4CisgICAgICAgIG1vdmwgICAgJWVheCwgLTQoJWVjeCkKKworICAgICAgICBtb3ZsICAgICRfX05SX2Nsb25lLCAlZWF4CisgICAgICAgIGludCAgICAgJDB4ODAKKyAgICAgICAgdGVzdCAgICAlZWF4LCAlZWF4CisgICAgICAgIGpucyAgICAgMWYKKworICAgICAgICAjIGFuIGVycm9yIG9jY3VyZWQsIHNldCBlcnJubyBhbmQgcmV0dXJuIC0xCisgICAgICAgIG5lZ2wgICAgJWVheAorICAgICAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgICAgIG9ybCAgICAgJC0xLCAlZWF4CisgICAgICAgIGptcCAgICAgMmYKKworMToKKyAgICAgICAgam56ICAgICAyZgorCisgICAgICAgICMgd2UncmUgaW4gdGhlIGNoaWxkIHRocmVhZCBub3csIGNhbGwgX190aHJlYWRfZW50cnkKKyAgICAgICAgIyB3aXRoIHRoZSBhcHByb3ByaWF0ZSBhcmd1bWVudHMgb24gdGhlIGNoaWxkIHN0YWNrCisgICAgICAgICMgd2UgYWxyZWFkeSBwbGFjZWQgbW9zdCBvZiB0aGVtCisgICAgICAgIHN1YmwgICAgJDE2LCAlZXNwCisgICAgICAgIGptcCAgICAgX190aHJlYWRfZW50cnkKKyAgICAgICAgaGx0CisKKzI6CisgICAgICAgIHBvcGwgICAgJWVjeAorICAgICAgICBwb3BsICAgICVlYngKKyAgICAgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L2Jpb25pYy9jcnRiZWdpbl9keW5hbWljLlMgYi9saWJjL2FyY2gteDg2L2Jpb25pYy9jcnRiZWdpbl9keW5hbWljLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I0N2IxOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvYmlvbmljL2NydGJlZ2luX2R5bmFtaWMuUwpAQCAtMCwwICsxLDk2IEBACisjIGJpb25pYy9hcmNoLXg4Ni9iaW9uaWMvY3J0YmVnaW5fZHluYW1pYy5TCisjCisjIENvcHlyaWdodCAyMDA2LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorIyAgICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorIyAgICAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBHb29nbGUgSW5jLiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIAorIyBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisjIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIAorIyBFVkVOVCBTSEFMTCBHb29nbGUgSW5jLiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyAKKyMgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIAorIyBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiAKKyMgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgorIyBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCS50ZXh0CisJLmFsaWduIDQKKwkudHlwZSBfc3RhcnQsIEBmdW5jdGlvbgorCS5nbG9ibCBfc3RhcnQKKworIyB0aGlzIGlzIHRoZSBzbWFsbCBzdGFydHVwIGNvZGUgdGhhdCBpcyBmaXJzdCBydW4gd2hlbgorIyBhbnkgZXhlY3V0YWJsZSB0aGF0IGlzIHN0YXRpY2FsbHktbGlua2VkIHdpdGggQmlvbmljCisjIHJ1bnMuCisjCisjIGl0J3MgcHVycG9zZSBpcyB0byBjYWxsIF9fbGliY19pbml0IHdpdGggYXBwcm9wcmlhdGUKKyMgYXJndW1lbnRzLCB3aGljaCBhcmU6CisjCisjICAgIC0gdGhlIGFkZHJlc3Mgb2YgdGhlIHJhdyBkYXRhIGJsb2NrIHNldHVwIGJ5IHRoZSBMaW51eAorIyAgICAgIGtlcm5lbCBFTEYgbG9hZGVyCisjCisjICAgIC0gYWRkcmVzcyBvZiBhbiAib25leGl0IiBmdW5jdGlvbiwgbm90IHVzZWQgb24gYW55CisjICAgICAgcGxhdGZvcm0gc3VwcG9ydGVkIGJ5IEJpb25pYworIworIyAgICAtIGFkZHJlc3Mgb2YgdGhlICJtYWluIiBmdW5jdGlvbiBvZiB0aGUgcHJvZ3JhbS4gV2UKKyMgICAgICBjYW4ndCBoYXJkLWNvZGUgaXQgaW4gdGhlIGFkciBwc2V1ZG8gaW5zdHJ1Y3Rpb24KKyMgICAgICBzbyB3ZSB1c2UgYSB0aW55IHRyYW1wb2xpbmUgdGhhdCB3aWxsIGdldCByZWxvY2F0ZWQKKyMgICAgICBieSB0aGUgZHluYW1pYyBsaW5rZXIgYmVmb3JlIHRoaXMgY29kZSBydW5zCisjCisjICAgIC0gYWRkcmVzcyBvZiB0aGUgY29uc3RydWN0b3IgbGlzdAorIworX3N0YXJ0OgkKKyAgICAgICAgbW92ICAgICAlZXNwLCAlZWF4CisgICAgICAgIG1vdiAgICAgJDFmLCAlZWR4CisgICAgICAgIHB1c2hsICAgJWVkeAorICAgICAgICBtb3YgICAgICQwZiwgJWVkeAorICAgICAgICBwdXNobCAgICVlZHgKKyAgICAgICAgbW92ICAgICAkMCwgJWVkeAorICAgICAgICBwdXNobCAgICVlZHgKKyAgICAgICAgcHVzaGwgICAlZWF4CisgICAgICAgIGNhbGwgICAgIF9fbGliY19pbml0CisKKzA6CisgICAgICAgIGptcCAgIG1haW4KKworMTogIC5sb25nICAgX19QUkVJTklUX0FSUkFZX18KKyAgICAubG9uZyAgIF9fSU5JVF9BUlJBWV9fCisgICAgLmxvbmcgICBfX0ZJTklfQVJSQVlfXworICAgIC5sb25nICAgX19DVE9SX0xJU1RfXworICAgICAgCisjIHRoZSAuY3RvcnMgc2VjdGlvbiBjb250YWlucyBhIGxpc3Qgb2YgcG9pbnRlcnMgdG8gImNvbnN0cnVjdG9yIgorIyBmdW5jdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGNhbGxlZCBpbiBvcmRlciBkdXJpbmcgQyBsaWJyYXJ5IGluaXRpYWxpemF0aW9uLAorIyBqdXN0IGJlZm9yZSB0aGUgcHJvZ3JhbSBpcyBiZWluZyBydW4uIFRoaXMgaXMgYSBDKysgcmVxdWlyZW1lbnQKKyMKKyMgdGhlIGxhc3QgZW50cnkgc2hhbGwgYmUgMCwgYW5kIGlzIGRlZmluZWQgaW4gY3J0ZW5kLlMKKyMKKwkuc2VjdGlvbiAucHJlaW5pdF9hcnJheSwgImF3IgorCS5nbG9ibCBfX1BSRUlOSVRfQVJSQVlfXworX19QUkVJTklUX0FSUkFZX186CisJLmxvbmcgLTEKKworCS5zZWN0aW9uIC5pbml0X2FycmF5LCAiYXciCisJLmdsb2JsIF9fSU5JVF9BUlJBWV9fCitfX0lOSVRfQVJSQVlfXzoKKwkubG9uZyAtMQorCisJLnNlY3Rpb24gLmZpbmlfYXJyYXksICJhdyIKKwkuZ2xvYmwgX19GSU5JX0FSUkFZX18KK19fRklOSV9BUlJBWV9fOgorCS5sb25nIC0xCisKKwkuc2VjdGlvbiAuY3RvcnMsICJhdyIKKwkuZ2xvYmwgX19DVE9SX0xJU1RfXworX19DVE9SX0xJU1RfXzoKKwkubG9uZyAtMQorCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L2Jpb25pYy9jcnRiZWdpbl9zby5TIGIvbGliYy9hcmNoLXg4Ni9iaW9uaWMvY3J0YmVnaW5fc28uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDllOWRmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9iaW9uaWMvY3J0YmVnaW5fc28uUwpAQCAtMCwwICsxLDI5IEBACisvKiB3ZSBwdXQgdGhlIF9pbml0KCkgZnVuY3Rpb24gaGVyZSBpbiBjYXNlIHRoZSB1c2VyIGZpbGVzIGZvciB0aGUgc2hhcmVkCisgKiBsaWJzIHdhbnQgdG8gZHJvcCB0aGluZ3MgaW50byAuaW5pdCBzZWN0aW9uLgorICogV2UgdGhlbiB3aWxsIGNhbGwgb3VyIGN0b3JzIGZyb20gY3J0ZW5kX3NvLm8gKi8KKy5zZWN0aW9uIC5pbml0CisuYWxpZ24gNAorLnR5cGUgX2luaXQsIEBmdW5jdGlvbgorLmdsb2JsIF9pbml0CitfaW5pdDoKKworLnNlY3Rpb24gLmluaXRfYXJyYXksICJhdyIKKy5hbGlnbiA0CisudHlwZSBfX0lOSVRfQVJSQVlfXywgQG9iamVjdAorLmdsb2JsIF9fSU5JVF9BUlJBWV9fCitfX0lOSVRfQVJSQVlfXzoKKyAgICAubG9uZyAtMQorCisuc2VjdGlvbiAuZmluaV9hcnJheSwgImF3IgorLmFsaWduIDQKKy50eXBlIF9fRklOSV9BUlJBWV9fLCBAb2JqZWN0CisuZ2xvYmwgX19GSU5JX0FSUkFZX18KK19fRklOSV9BUlJBWV9fOgorICAgIC5sb25nIC0xCisKKy5zZWN0aW9uIC5jdG9ycywgImF3IgorLmFsaWduIDQKKy50eXBlIF9fQ1RPUl9MSVNUX18sIEBvYmplY3QKKy5nbG9ibCBfX0NUT1JfTElTVF9fCitfX0NUT1JfTElTVF9fOgorICAgICAgICAubG9uZyAtMQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9iaW9uaWMvY3J0YmVnaW5fc3RhdGljLlMgYi9saWJjL2FyY2gteDg2L2Jpb25pYy9jcnRiZWdpbl9zdGF0aWMuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjRhY2VlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9iaW9uaWMvY3J0YmVnaW5fc3RhdGljLlMKQEAgLTAsMCArMSw5NSBAQAorIyBiaW9uaWMvYXJjaC14ODYvYmlvbmljL2NydGJlZ2luX3N0YXRpYy5TCisjCisjIENvcHlyaWdodCAyMDA2LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorIyAgICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorIyAgICAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBHb29nbGUgSW5jLiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIAorIyBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisjIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIAorIyBFVkVOVCBTSEFMTCBHb29nbGUgSW5jLiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyAKKyMgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIAorIyBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiAKKyMgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgorIyBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCS50ZXh0CisJLmFsaWduIDQKKwkudHlwZSBfc3RhcnQsIEBmdW5jdGlvbgorCS5nbG9ibCBfc3RhcnQKKworIyB0aGlzIGlzIHRoZSBzbWFsbCBzdGFydHVwIGNvZGUgdGhhdCBpcyBmaXJzdCBydW4gd2hlbgorIyBhbnkgZXhlY3V0YWJsZSB0aGF0IGlzIHN0YXRpY2FsbHktbGlua2VkIHdpdGggQmlvbmljCisjIHJ1bnMuCisjCisjIGl0J3MgcHVycG9zZSBpcyB0byBjYWxsIF9fbGliY19pbml0IHdpdGggYXBwcm9wcmlhdGUKKyMgYXJndW1lbnRzLCB3aGljaCBhcmU6CisjCisjICAgIC0gdGhlIGFkZHJlc3Mgb2YgdGhlIHJhdyBkYXRhIGJsb2NrIHNldHVwIGJ5IHRoZSBMaW51eAorIyAgICAgIGtlcm5lbCBFTEYgbG9hZGVyCisjCisjICAgIC0gYWRkcmVzcyBvZiBhbiAib25leGl0IiBmdW5jdGlvbiwgbm90IHVzZWQgb24gYW55CisjICAgICAgcGxhdGZvcm0gc3VwcG9ydGVkIGJ5IEJpb25pYworIworIyAgICAtIGFkZHJlc3Mgb2YgdGhlICJtYWluIiBmdW5jdGlvbiBvZiB0aGUgcHJvZ3JhbS4gV2UKKyMgICAgICBjYW4ndCBoYXJkLWNvZGUgaXQgaW4gdGhlIGFkciBwc2V1ZG8gaW5zdHJ1Y3Rpb24KKyMgICAgICBzbyB3ZSB1c2UgYSB0aW55IHRyYW1wb2xpbmUgdGhhdCB3aWxsIGdldCByZWxvY2F0ZWQKKyMgICAgICBieSB0aGUgZHluYW1pYyBsaW5rZXIgYmVmb3JlIHRoaXMgY29kZSBydW5zCisjCisjICAgIC0gYWRkcmVzcyBvZiB0aGUgY29uc3RydWN0b3IgbGlzdAorIworX3N0YXJ0OgkKKyAgICAgICAgbW92ICAgICAlZXNwLCAlZWF4CisgICAgICAgIG1vdiAgICAgJDFmLCAlZWR4CisgICAgICAgIHB1c2hsICAgJWVkeAorICAgICAgICBtb3YgICAgICQwZiwgJWVkeAorICAgICAgICBwdXNobCAgICVlZHgKKyAgICAgICAgbW92ICAgICAkMCwgJWVkeAorICAgICAgICBwdXNobCAgICVlZHgKKyAgICAgICAgcHVzaGwgICAlZWF4CisgICAgICAgIGNhbGwgICAgX19saWJjX2luaXQKKworMDogIGptcCAgIG1haW4KKworMTogIC5sb25nICAgX19QUkVJTklUX0FSUkFZX18KKyAgICAubG9uZyAgIF9fSU5JVF9BUlJBWV9fCisgICAgLmxvbmcgICBfX0ZJTklfQVJSQVlfXworICAgIC5sb25nICAgX19DVE9SX0xJU1RfXworCisjIHRoZSAuY3RvcnMgc2VjdGlvbiBjb250YWlucyBhIGxpc3Qgb2YgcG9pbnRlcnMgdG8gImNvbnN0cnVjdG9yIgorIyBmdW5jdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGNhbGxlZCBpbiBvcmRlciBkdXJpbmcgQyBsaWJyYXJ5IGluaXRpYWxpemF0aW9uLAorIyBqdXN0IGJlZm9yZSB0aGUgcHJvZ3JhbSBpcyBiZWluZyBydW4uIFRoaXMgaXMgYSBDKysgcmVxdWlyZW1lbnQKKyMKKyMgdGhlIGxhc3QgZW50cnkgc2hhbGwgYmUgMCwgYW5kIGlzIGRlZmluZWQgaW4gY3J0ZW5kLlMKKyMKKwkuc2VjdGlvbiAucHJlaW5pdF9hcnJheSwgImF3IgorCS5nbG9ibCBfX1BSRUlOSVRfQVJSQVlfXworX19QUkVJTklUX0FSUkFZX186CisJLmxvbmcgLTEKKworCS5zZWN0aW9uIC5pbml0X2FycmF5LCAiYXciCisJLmdsb2JsIF9fSU5JVF9BUlJBWV9fCitfX0lOSVRfQVJSQVlfXzoKKwkubG9uZyAtMQorCisJLnNlY3Rpb24gLmZpbmlfYXJyYXksICJhdyIKKwkuZ2xvYmwgX19GSU5JX0FSUkFZX18KK19fRklOSV9BUlJBWV9fOgorCS5sb25nIC0xCisKKwkuc2VjdGlvbiAuY3RvcnMsICJhdyIKKwkuZ2xvYmwgX19DVE9SX0xJU1RfXworX19DVE9SX0xJU1RfXzoKKwkubG9uZyAtMQorCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L2Jpb25pYy9jcnRlbmQuUyBiL2xpYmMvYXJjaC14ODYvYmlvbmljL2NydGVuZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmNWZiNjYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L2Jpb25pYy9jcnRlbmQuUwpAQCAtMCwwICsxLDEzIEBACisJCisJLnNlY3Rpb24gLnByZWluaXRfYXJyYXksICJhdyIKKwkubG9uZyAwCisKKwkuc2VjdGlvbiAuaW5pdF9hcnJheSwgImF3IgorCS5sb25nIDAKKworCS5zZWN0aW9uIC5maW5pX2FycmF5LCAiYXciCisJLmxvbmcgMAorCisJLnNlY3Rpb24gLmN0b3JzLCAiYXciCisJLmxvbmcgMAorCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L2Jpb25pYy9jcnRlbmRfc28uUyBiL2xpYmMvYXJjaC14ODYvYmlvbmljL2NydGVuZF9zby5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmYjIyODAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L2Jpb25pYy9jcnRlbmRfc28uUwpAQCAtMCwwICsxLDQ3IEBACisudGV4dAorLmFsaWduIDQKKy50eXBlIF9fYmlvbmljX2NhbGxfY3RvcnMsIEBmdW5jdGlvbgorCisvKgorICogVGhlIENUT1JTX0xJU1QgaXMgbWFya2VkIGJ5IC0xIChzdGFydCkgYW5kIDAgKGVuZCkuCisgKiBXZSBtYXJrIHRoZSBlbmQgb2YgdGhlIC5jdG9ycyBzZWN0aW9uIHdpdGggdGhlIF9fQ1RPUl9FTkRfXyBzZWN0aW9uIHNvCisgKiB0aGF0IHdlIGNhbiBqdXN0IGl0ZXJhdGUgYmFja3dhcmRzIGZyb20gaXQgdW50aWwgd2UgaGl0IC0xIGFuZCBleGVjdXRlCisgKiBhbGwgdGhlIGZ1bmN0aW9uIHBvaW50ZXJzLiBUaGlzIHNlZW1zIHRvIGJlIHRoZSB3YXkgdG8gZG8gaXQgZm9yIFNWUjQKKyAqIGRlcml2ZWQgc3lzdGVtcy4KKyAqLworX19iaW9uaWNfY2FsbF9jdG9yczoKKyAgICBwdXNobCAgJWVzaQorICAgIG1vdiAgICAkX19DVE9SX0VORF9fLCAlZXNpCisKKzA6CisgICAgLyogbm93IGdyYWIgdGhlIG5leHQgZnVuY3Rpb24gcG9pbnRlciBhbmQgY2hlY2sgaWYgaXRzIC0xLiBJZiBub3QsCisgICAgICogY2FsbCBpdCwgb3RoZXJ3aXNlIHdlJ3JlIGRvbmUuIFdlIHVzZSAlZXNpIHNpbmNlIGl0J3MgY2FsbGVlIHNhdmVkLgorICAgICAqLworICAgIHN1YmwgICAgJDQsICVlc2kKKyAgICBtb3YgICAgICglZXNpKSwgJWVheAorICAgIGNtcCAgICAgJDB4ZmZmZmZmZmYsICVlYXgKKyAgICBqZSAgICAgIDFmCisgICAgY2FsbCAgICAqJWVheAorICAgIGptcCAgICAgMGIKKworMToKKyAgICAvKiB3ZSdyZSBkb25lICovCisgICAgcG9wbCAgICAlZXNpCisgICAgcmV0CisKKy5zZWN0aW9uIC5pbml0CisuYWxpZ24gNAorICAgIGNhbGwgX19iaW9uaWNfY2FsbF9jdG9ycworICAgIHJldAorCisuc2VjdGlvbiAuY3RvcnMsICJhdyIsIEBwcm9nYml0cworLmFsaWduIDQKKy50eXBlIF9fQ1RPUl9FTkRfXywgQG9iamVjdAorX19DVE9SX0VORF9fOgorICAgIC5sb25nIDAKKworLnNlY3Rpb24gLmluaXRfYXJyYXksICJhdyIKKyAgICAubG9uZyAwCisKKy5zZWN0aW9uIC5maW5pX2FycmF5LCAiYXciCisgICAgLmxvbmcgMApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9iaW9uaWMvZGxfaXRlcmF0ZV9waGRyX3N0YXRpYy5jIGIvbGliYy9hcmNoLXg4Ni9iaW9uaWMvZGxfaXRlcmF0ZV9waGRyX3N0YXRpYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkMTIxMDYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L2Jpb25pYy9kbF9pdGVyYXRlX3BoZHJfc3RhdGljLmMKQEAgLTAsMCArMSw3NCBAQAorLyogYmlvbmljL2FyY2gteDg2L2Jpb25pYy9kbF9pdGVyYXRlX3BoZHJfc3RhdGljLmMKKyoqCisqKiBDb3B5cmlnaHQgMjAwNiwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorKioKKyoqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKiogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyoqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyoqICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyoqICAgICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisqKiAgICAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoqCisqKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdvb2dsZSBJbmMuIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyoqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyoqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PCisqKiBFVkVOVCBTSEFMTCBHb29nbGUgSW5jLiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKiogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorKiogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7CisqKiBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyoqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SCisqKiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCisqKiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9lbGYuaD4KKworLyogVE9ETzogTW92ZSB0aGlzIGludG8gYSBoZWFkZXIgdGhhdCBsaW5rZXIuaCBjYW4gYWxzbyBwdWxsIGl0IGluLgorICogU2lsbHkgdG8gaGF2ZSBzYW1lIHN0cnVjdCBpbiAyIHBsYWNlcy4gVGhpcyBpcyB0ZW1wb3JhcnkuICovCitzdHJ1Y3QgZGxfcGhkcl9pbmZvCit7CisgICAgRWxmMzJfQWRkciBkbHBpX2FkZHI7CisgICAgY29uc3QgY2hhciAqZGxwaV9uYW1lOworICAgIGNvbnN0IEVsZjMyX1BoZHIgKmRscGlfcGhkcjsKKyAgICBFbGYzMl9IYWxmIGRscGlfcGhudW07Cit9OworCisvKiBEeW5hbWljIGJpbmFyaWVzIGdldCB0aGlzIGZyb20gdGhlIGR5bmFtaWMgbGlua2VyIChzeXN0ZW0vbGlua2VyKSwgd2hpY2gKKyAqIHdlIGRvbid0IHB1bGwgaW4gZm9yIHN0YXRpYyBiaW5zLiBXZSBhbHNvIGRvbid0IGhhdmUgYSBsaXN0IG9mIHNvJ3MgdG8KKyAqIGl0ZXJhdGUgb3Zlciwgc2luY2UgdGhlcmUncyByZWFsbHkgb25seSBhIHNpbmdsZSBtb25vbGl0aGljIGJsb2Igb2YKKyAqIGNvZGUvZGF0YS4KKyAqCisgKiBBbGwgd2UgbmVlZCB0byBkbyBpcyB0byBmaW5kIHdoZXJlIHRoZSBleGVjdXRhYmxlIGlzIGluIG1lbW9yeSwgYW5kIGdyYWIgdGhlCisgKiBwaGRyIGFuZCBwaG51bSBmcm9tIHRoZXJlLgorICovCisKKy8qIGxkIHByb3ZpZGVzIHRoaXMgdG8gdXMgaW4gdGhlIGRlZmF1bHQgbGluayBzY3JpcHQgKi8KK2V4dGVybiB2b2lkICpfX2V4ZWN1dGFibGVfc3RhcnQ7CisKK2ludAorZGxfaXRlcmF0ZV9waGRyKGludCAoKmNiKShzdHJ1Y3QgZGxfcGhkcl9pbmZvICppbmZvLCBzaXplX3Qgc2l6ZSwgdm9pZCAqZGF0YSksCisgICAgICAgICAgICAgICAgdm9pZCAqZGF0YSkKK3sKKyAgICBzdHJ1Y3QgZGxfcGhkcl9pbmZvIGRsX2luZm87CisgICAgRWxmMzJfRWhkciAqZWhkciA9IChFbGYzMl9FaGRyICopICZfX2V4ZWN1dGFibGVfc3RhcnQ7CisgICAgRWxmMzJfUGhkciAqcGhkciA9IChFbGYzMl9QaGRyICopKCh1bnNpZ25lZCBsb25nKWVoZHIgKyBlaGRyLT5lX3Bob2ZmKTsKKworICAgIC8qIFRPRE86IGFnYWluLCBjb3BpZWQgZnJvbSBsaW5rZXIuYy4gRmluZCBhIGJldHRlciBob21lIGZvciB0aGlzCisgICAgICogbGF0ZXIuICovCisgICAgaWYgKGVoZHItPmVfaWRlbnRbRUlfTUFHMF0gIT0gRUxGTUFHMCkgcmV0dXJuIC0xOworICAgIGlmIChlaGRyLT5lX2lkZW50W0VJX01BRzFdICE9IEVMRk1BRzEpIHJldHVybiAtMTsKKyAgICBpZiAoZWhkci0+ZV9pZGVudFtFSV9NQUcyXSAhPSBFTEZNQUcyKSByZXR1cm4gLTE7CisgICAgaWYgKGVoZHItPmVfaWRlbnRbRUlfTUFHM10gIT0gRUxGTUFHMykgcmV0dXJuIC0xOworCisgICAgZGxfaW5mby5kbHBpX2FkZHIgPSAwOworICAgIGRsX2luZm8uZGxwaV9uYW1lID0gTlVMTDsKKyAgICBkbF9pbmZvLmRscGlfcGhkciA9IHBoZHI7CisgICAgZGxfaW5mby5kbHBpX3BobnVtID0gZWhkci0+ZV9waG51bTsKKyAgICByZXR1cm4gY2IoJmRsX2luZm8sIHNpemVvZiAoc3RydWN0IGRsX3BoZHJfaW5mbyksIGRhdGEpOworfQorCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L2Jpb25pYy9zZXRqbXAuUyBiL2xpYmMvYXJjaC14ODYvYmlvbmljL3NldGptcC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjYjVmOWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L2Jpb25pYy9zZXRqbXAuUwpAQCAtMCwwICsxLDkzIEBACisvKiAkT3BlbkJTRDogc2V0am1wLlMsdiAxLjggMjAwNS8wOC8wNyAxMTozMDozOCBlc3BpZSBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogV2lsbGlhbSBKb2xpdHouCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorCisvKgorICogQyBsaWJyYXJ5IC0tIHNldGptcCwgbG9uZ2ptcAorICoKKyAqCWxvbmdqbXAoYSx2KQorICogd2lsbCBnZW5lcmF0ZSBhICJyZXR1cm4odikiIGZyb20gdGhlIGxhc3QgY2FsbCB0bworICoJc2V0am1wKGEpCisgKiBieSByZXN0b3JpbmcgcmVnaXN0ZXJzIGZyb20gdGhlIHN0YWNrLgorICogVGhlIHByZXZpb3VzIHNpZ25hbCBzdGF0ZSBpcyByZXN0b3JlZC4KKyAqLworCitFTlRSWShzZXRqbXApCisJUElDX1BST0xPR1VFCisJcHVzaGwJJDAKKyNpZmRlZiBQSUMKKwljYWxsCVBJQ19QTFQoX0NfTEFCRUwoc2lnYmxvY2spKQorI2Vsc2UKKwljYWxsCV9DX0xBQkVMKHNpZ2Jsb2NrKQorI2VuZGlmCisJYWRkbAkkNCwlZXNwCisJUElDX0VQSUxPR1VFIAorCisJbW92bAk0KCVlc3ApLCVlY3gKKwltb3ZsCTAoJWVzcCksJWVkeAorCW1vdmwJJWVkeCwgMCglZWN4KQorCW1vdmwJJWVieCwgNCglZWN4KQorCW1vdmwJJWVzcCwgOCglZWN4KQorCW1vdmwJJWVicCwxMiglZWN4KQorCW1vdmwJJWVzaSwxNiglZWN4KQorCW1vdmwJJWVkaSwyMCglZWN4KQorCW1vdmwJJWVheCwyNCglZWN4KQorCXhvcmwJJWVheCwlZWF4CisJcmV0CisKK0VOVFJZKGxvbmdqbXApCisJbW92bAk0KCVlc3ApLCVlZHgKKwlQSUNfUFJPTE9HVUUKKwlwdXNobAkyNCglZWR4KQorI2lmZGVmIFBJQworCWNhbGwJUElDX1BMVChfQ19MQUJFTChzaWdzZXRtYXNrKSkKKyNlbHNlCisJY2FsbAlfQ19MQUJFTChzaWdzZXRtYXNrKQorI2VuZGlmCisJYWRkbAkkNCwlZXNwCisJUElDX0VQSUxPR1VFIAorCisJbW92bAk0KCVlc3ApLCVlZHgKKwltb3ZsCTgoJWVzcCksJWVheAorCW1vdmwJMCglZWR4KSwlZWN4CisJbW92bAk0KCVlZHgpLCVlYngKKwltb3ZsCTgoJWVkeCksJWVzcAorCW1vdmwJMTIoJWVkeCksJWVicAorCW1vdmwJMTYoJWVkeCksJWVzaQorCW1vdmwJMjAoJWVkeCksJWVkaQorCXRlc3RsCSVlYXgsJWVheAorCWpuegkxZgorCWluY2wJJWVheAorMToJbW92bAklZWN4LDAoJWVzcCkKKwlyZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvYmlvbmljL3Zmb3JrLlMgYi9saWJjL2FyY2gteDg2L2Jpb25pYy92Zm9yay5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzOTEwYWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L2Jpb25pYy92Zm9yay5TCkBAIC0wLDAgKzEsMzAgQEAKKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworI2lmbmRlZiBfX05SX3Zmb3JrCisjZGVmaW5lIF9fTlJfdmZvcmsgIDE5MAorI2VuZGlmCisKKworICAgIC50ZXh0CisgICAgLnR5cGUgdmZvcmssIEBmdW5jdGlvbgorICAgIC5nbG9ibCB2Zm9yaworICAgIC5hbGlnbiA0CisKKy8qIEdldCByaWQgb2YgdGhlIHN0YWNrIG1vZGlmaWNhdGlvbnMgKHBvcGwvcmV0KSBhZnRlciB2Zm9yaygpIHN1Y2Nlc3MuCisgKiB2Zm9yayBpcyBWRVJZIHNuZWFreS4gT25lIGhhcyB0byBiZSB2ZXJ5IGNhcmVmdWwgYWJvdXQgd2hhdCBjYW4gYmUgZG9uZQorICogYmV0d2VlbiBhIHN1Y2Nlc3NmdWwgdmZvcmsgYW5kIGEgYSBzdWJzZXF1ZW50IGV4ZWN2ZSgpCisgKi8KKwordmZvcms6CisgICAgLyogZ3JhYiB0aGUgcmV0dXJuIGFkZHJlc3MgKi8KKyAgICBwb3BsICAgICVlY3gKKyAgICBtb3ZsICAgICRfX05SX3Zmb3JrLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIGptcCAgICAgKiVlY3gKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvaW5jbHVkZS9lbmRpYW4uaCBiL2xpYmMvYXJjaC14ODYvaW5jbHVkZS9lbmRpYW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDM3OTE5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9pbmNsdWRlL2VuZGlhbi5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qCSRPcGVuQlNEOiBlbmRpYW4uaCx2IDEuMTQgMjAwNS8xMi8xMyAwMDozNToyMyBtaWxsZXJ0IEV4cCAkCSovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTk3IE5pa2xhcyBIYWxscXZpc3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIF9JMzg2X0VORElBTl9IXworI2RlZmluZSBfSTM4Nl9FTkRJQU5fSF8KKworI2lmZGVmIF9fR05VQ19fCisKKyNpZiBkZWZpbmVkKF9LRVJORUwpICYmICFkZWZpbmVkKEkzODZfQ1BVKQorI2RlZmluZQlfX3N3YXAzMm1kKHgpICh7CQkJCQkJXAorCXVfaW50MzJfdCBfX3N3YXAzMm1kX3ggPSAoeCk7CQkJCQlcCisJCQkJCQkJCQlcCisJX19hc20gKCJic3dhcCAlMSIgOiAiK3IiIChfX3N3YXAzMm1kX3gpKTsJCQlcCisJX19zd2FwMzJtZF94OwkJCQkJCQlcCit9KQorI2Vsc2UKKyNkZWZpbmUJX19zd2FwMzJtZCh4KSAoewkJCQkJCVwKKwl1X2ludDMyX3QgX19zd2FwMzJtZF94ID0gKHgpOwkJCQkJXAorCQkJCQkJCQkJXAorCV9fYXNtICgicm9ydyAkOCwgJXcxOyByb3JsICQxNiwgJTE7IHJvcncgJDgsICV3MSIgOgkJXAorCSAgICAiK3IiIChfX3N3YXAzMm1kX3gpKTsJCQkJCVwKKwlfX3N3YXAzMm1kX3g7CQkJCQkJCVwKK30pCisjZW5kaWYJLyogX0tFUk5FTCAmJiAhSTM4Nl9DUFUgKi8KKworI2RlZmluZQlfX3N3YXA2NG1kKHgpICh7CQkJCQkJXAorCXVfaW50NjRfdCBfX3N3YXA2NG1kX3ggPSAoeCk7CQkJCQlcCisJCQkJCQkJCQlcCisJKHVfaW50NjRfdClfX3N3YXAzMm1kKF9fc3dhcDY0bWRfeCA+PiAzMikgfAkJCVwKKwkgICAgKHVfaW50NjRfdClfX3N3YXAzMm1kKF9fc3dhcDY0bWRfeCAmIDB4ZmZmZmZmZmYpIDw8IDMyOwlcCit9KQorI2RlZmluZQlfX3N3YXAxNm1kKHgpICh7CQkJCQkJXAorCXVfaW50MTZfdCBfX3N3YXAxNm1kX3ggPSAoeCk7CQkJCQlcCisJCQkJCQkJCQlcCisJX19hc20gKCJyb3J3ICQ4LCAldzEiIDogIityIiAoX19zd2FwMTZtZF94KSk7CQkJXAorCV9fc3dhcDE2bWRfeDsJCQkJCQkJXAorfSkKKworLyogVGVsbCBzeXMvZW5kaWFuLmggd2UgaGF2ZSBNRCB2YXJpYW50cyBvZiB0aGUgc3dhcCBtYWNyb3MuICAqLworI2RlZmluZSBNRF9TV0FQCisKKyNlbmRpZgkvKiBfX0dOVUNfXyAqLworCisjZGVmaW5lIF9CWVRFX09SREVSIF9MSVRUTEVfRU5ESUFOCisjaW5jbHVkZSA8c3lzL2VuZGlhbi5oPgorCisjZW5kaWYgLyogX0kzODZfRU5ESUFOX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L2luY2x1ZGUvbWFjaGluZS9fdHlwZXMuaCBiL2xpYmMvYXJjaC14ODYvaW5jbHVkZS9tYWNoaW5lL190eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhMzFlMjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L2luY2x1ZGUvbWFjaGluZS9fdHlwZXMuaApAQCAtMCwwICsxLDEyMyBAQAorLyoJJE9wZW5CU0Q6IF90eXBlcy5oLHYgMS4yIDIwMDYvMDEvMTMgMTc6NTA6MDYgbWlsbGVydCBFeHAgJAkqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqCUAoIyl0eXBlcy5oCTguMyAoQmVya2VsZXkpIDEvNS85NAorICoJQCgjKWFuc2kuaAk4LjIgKEJlcmtlbGV5KSAxLzQvOTQKKyAqLworCisjaWZuZGVmIF9JMzg2X19UWVBFU19IXworI2RlZmluZSBfSTM4Nl9fVFlQRVNfSF8KKworLyogdGhlIGtlcm5lbCBkZWZpbmVzIHNpemVfdCBhcyB1bnNpZ25lZCBpbnQsIGJ1dCBnKysgd2FudHMgaXQgdG8gYmUgdW5zaWduZWQgbG9uZyAqLworI2RlZmluZSBfU0laRV9UCisjZGVmaW5lIF9QVFJESUZGX1QKK3R5cGVkZWYgdW5zaWduZWQgaW50ICAgc2l6ZV90OwordHlwZWRlZiBpbnQgICAgICAgICAgICBwdHJkaWZmX3Q7CisKKyNkZWZpbmUgX09GRl9UX0RFRklORURfCisjZGVmaW5lIF9TSVpFX1RfREVGSU5FRF8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qIDcuMTguMS4xIEV4YWN0LXdpZHRoIGludGVnZXIgdHlwZXMgKi8KK3R5cGVkZWYJX19zaWduZWQgY2hhcgkJX19pbnQ4X3Q7Cit0eXBlZGVmCXVuc2lnbmVkIGNoYXIJCV9fdWludDhfdDsKK3R5cGVkZWYJc2hvcnQJCQlfX2ludDE2X3Q7Cit0eXBlZGVmCXVuc2lnbmVkIHNob3J0CQlfX3VpbnQxNl90OwordHlwZWRlZglpbnQJCQlfX2ludDMyX3Q7Cit0eXBlZGVmCXVuc2lnbmVkIGludAkJX191aW50MzJfdDsKKy8qIExPTkdMT05HICovCit0eXBlZGVmCWxvbmcgbG9uZwkJX19pbnQ2NF90OworLyogTE9OR0xPTkcgKi8KK3R5cGVkZWYJdW5zaWduZWQgbG9uZyBsb25nCV9fdWludDY0X3Q7CisKKy8qIDcuMTguMS4yIE1pbmltdW0td2lkdGggaW50ZWdlciB0eXBlcyAqLwordHlwZWRlZglfX2ludDhfdAkJX19pbnRfbGVhc3Q4X3Q7Cit0eXBlZGVmCV9fdWludDhfdAkJX191aW50X2xlYXN0OF90OwordHlwZWRlZglfX2ludDE2X3QJCV9faW50X2xlYXN0MTZfdDsKK3R5cGVkZWYJX191aW50MTZfdAkJX191aW50X2xlYXN0MTZfdDsKK3R5cGVkZWYJX19pbnQzMl90CQlfX2ludF9sZWFzdDMyX3Q7Cit0eXBlZGVmCV9fdWludDMyX3QJCV9fdWludF9sZWFzdDMyX3Q7Cit0eXBlZGVmCV9faW50NjRfdAkJX19pbnRfbGVhc3Q2NF90OwordHlwZWRlZglfX3VpbnQ2NF90CQlfX3VpbnRfbGVhc3Q2NF90OworCisvKiA3LjE4LjEuMyBGYXN0ZXN0IG1pbmltdW0td2lkdGggaW50ZWdlciB0eXBlcyAqLwordHlwZWRlZglfX2ludDMyX3QJCV9faW50X2Zhc3Q4X3Q7Cit0eXBlZGVmCV9fdWludDMyX3QJCV9fdWludF9mYXN0OF90OwordHlwZWRlZglfX2ludDMyX3QJCV9faW50X2Zhc3QxNl90OwordHlwZWRlZglfX3VpbnQzMl90CQlfX3VpbnRfZmFzdDE2X3Q7Cit0eXBlZGVmCV9faW50MzJfdAkJX19pbnRfZmFzdDMyX3Q7Cit0eXBlZGVmCV9fdWludDMyX3QJCV9fdWludF9mYXN0MzJfdDsKK3R5cGVkZWYJX19pbnQ2NF90CQlfX2ludF9mYXN0NjRfdDsKK3R5cGVkZWYJX191aW50NjRfdAkJX191aW50X2Zhc3Q2NF90OworCisvKiA3LjE4LjEuNCBJbnRlZ2VyIHR5cGVzIGNhcGFibGUgb2YgaG9sZGluZyBvYmplY3QgcG9pbnRlcnMgKi8KK3R5cGVkZWYJaW50IAkJCV9faW50cHRyX3Q7Cit0eXBlZGVmCXVuc2lnbmVkIGludCAJX191aW50cHRyX3Q7CisKKy8qIDcuMTguMS41IEdyZWF0ZXN0LXdpZHRoIGludGVnZXIgdHlwZXMgKi8KK3R5cGVkZWYJX19pbnQ2NF90CQlfX2ludG1heF90OwordHlwZWRlZglfX3VpbnQ2NF90CQlfX3VpbnRtYXhfdDsKKworLyogUmVnaXN0ZXIgc2l6ZSAqLwordHlwZWRlZiBfX2ludDMyX3QJCV9fcmVnaXN0ZXJfdDsKKworLyogVk0gc3lzdGVtIHR5cGVzICovCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcJCV9fdmFkZHJfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZwkJX19wYWRkcl90OwordHlwZWRlZiB1bnNpZ25lZCBsb25nCQlfX3ZzaXplX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcJCV9fcHNpemVfdDsKKworLyogU3RhbmRhcmQgc3lzdGVtIHR5cGVzICovCit0eXBlZGVmIGludAkJCV9fY2xvY2tfdDsKK3R5cGVkZWYgaW50CQkJX19jbG9ja2lkX3Q7Cit0eXBlZGVmIGxvbmcJCQlfX3B0cmRpZmZfdDsKK3R5cGVkZWYJaW50CQkJX190aW1lX3Q7Cit0eXBlZGVmIGludAkJCV9fdGltZXJfdDsKKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBfX0dOVUNfXyA+PSAzCit0eXBlZGVmCV9fYnVpbHRpbl92YV9saXN0CV9fdmFfbGlzdDsKKyNlbHNlCit0eXBlZGVmCWNoYXIgKgkJCV9fdmFfbGlzdDsKKyNlbmRpZgorCisvKiBXaWRlIGNoYXJhY3RlciBzdXBwb3J0IHR5cGVzICovCisjaWZuZGVmIF9fY3BsdXNwbHVzCit0eXBlZGVmCWludAkJCV9fd2NoYXJfdDsKKyNlbmRpZgordHlwZWRlZiBpbnQJCQlfX3dpbnRfdDsKK3R5cGVkZWYJaW50CQkJX19ydW5lX3Q7Cit0eXBlZGVmCXZvaWQgKgkJCV9fd2N0cmFuc190OwordHlwZWRlZgl2b2lkICoJCQlfX3djdHlwZV90OworCisvKiBGZWF0dXJlIHRlc3QgbWFjcm9zICovCisjZGVmaW5lIF9fSEFWRV9DUFVJTkZPCisjZGVmaW5lIF9fSEFWRV9NVVRFWAorCisjZW5kaWYJLyogX0kzODZfX1RZUEVTX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L2luY2x1ZGUvbWFjaGluZS9hc20uaCBiL2xpYmMvYXJjaC14ODYvaW5jbHVkZS9tYWNoaW5lL2FzbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhMjMwNjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L2luY2x1ZGUvbWFjaGluZS9hc20uaApAQCAtMCwwICsxLDEyNCBAQAorLyoJJE9wZW5CU0Q6IGFzbS5oLHYgMS44IDIwMDQvMDYvMTMgMjE6NDk6MTYgbmlrbGFzIEV4cCAkCSovCisvKgkkTmV0QlNEOiBhc20uaCx2IDEuNyAxOTk0LzEwLzI3IDA0OjE1OjU2IGNnZCBFeHAgJAkqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBXaWxsaWFtIEpvbGl0ei4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICoJQCgjKWFzbS5oCTUuNSAoQmVya2VsZXkpIDUvNy85MQorICovCisKKyNpZm5kZWYgX0kzODZfQVNNX0hfCisjZGVmaW5lIF9JMzg2X0FTTV9IXworCisvKiBUaGlzIGlzIGJvcnJvd2VkIGZyb20gRnJlZUJTRCAvc3JjL3N5cy9pMzg2L2luY2x1ZGUvYXNtYWNyb3MuaCB2MS4yNyAqLworLyoKKyAqIENOQU1FIGFuZCBISURFTkFNRSBtYW5hZ2UgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHN5bWJvbCBuYW1lcyBpbiBDCisgKiBhbmQgdGhlIGVxdWl2YWxlbnQgYXNzZW1ibHkgbGFuZ3VhZ2UgbmFtZXMuICBDTkFNRSBpcyBnaXZlbiBhIG5hbWUgYXMKKyAqIGl0IHdvdWxkIGJlIHVzZWQgaW4gYSBDIHByb2dyYW0uICBJdCBleHBhbmRzIHRvIHRoZSBlcXVpdmFsZW50IGFzc2VtYmx5CisgKiBsYW5ndWFnZSBuYW1lLiAgSElERU5BTUUgaXMgZ2l2ZW4gYW4gYXNzZW1ibHktbGFuZ3VhZ2UgbmFtZSwgYW5kIGV4cGFuZHMKKyAqIHRvIGEgcG9zc2libHktbW9kaWZpZWQgZm9ybSB0aGF0IHdpbGwgYmUgaW52aXNpYmxlIHRvIEMgcHJvZ3JhbXMuCisgKi8KKyNkZWZpbmUgQ05BTUUoY3N5bSkgICAgICAgICAgICAgY3N5bQorI2RlZmluZSBISURFTkFNRShhc21zeW0pICAgICAgICAuYXNtc3ltCisKKyNpZmRlZiBQSUMKKyNkZWZpbmUgUElDX1BST0xPR1VFCVwKKwlwdXNobAklZWJ4OwlcCisJY2FsbAk2NjZmOwlcCis2NjY6CQkJXAorCXBvcGwJJWVieDsJXAorCWFkZGwJJF9DX0xBQkVMKF9HTE9CQUxfT0ZGU0VUX1RBQkxFXykrWy4tNjY2Yl0sICVlYngKKyNkZWZpbmUgUElDX0VQSUxPR1VFCVwKKwlwb3BsCSVlYngKKyNkZWZpbmUgUElDX1BMVCh4KQl4QFBMVAorI2RlZmluZSBQSUNfR09UKHgpCXhAR09UKCVlYngpCisjZGVmaW5lIFBJQ19HT1RPRkYoeCkJeEBHT1RPRkYoJWVieCkKKyNlbHNlCisjZGVmaW5lIFBJQ19QUk9MT0dVRQorI2RlZmluZSBQSUNfRVBJTE9HVUUKKyNkZWZpbmUgUElDX1BMVCh4KQl4CisjZGVmaW5lIFBJQ19HT1QoeCkJeAorI2RlZmluZSBQSUNfR09UT0ZGKHgpCXgKKyNlbmRpZgorCisjZGVmaW5lIF9DX0xBQkVMKG5hbWUpCW5hbWUKKyNkZWZpbmUJX0FTTV9MQUJFTCh4KQl4CisKKyNkZWZpbmUgQ1ZBUk9GRih4LCB5KQlfQ19MQUJFTCh4KSArIHkKKworI2lmZGVmIF9fU1REQ19fCisjIGRlZmluZSBfX0NPTkNBVCh4LHkpCXggIyMgeQorIyBkZWZpbmUgX19TVFJJTkcoeCkJI3gKKyNlbHNlCisjIGRlZmluZSBfX0NPTkNBVCh4LHkpCXgvKioveQorIyBkZWZpbmUgX19TVFJJTkcoeCkJIngiCisjZW5kaWYKKworLyoKKyAqIFdFQUsgQUxJQVM6IGNyZWF0ZSBhIHdlYWsgYWxpYXMKKyAqLworI2RlZmluZSBXRUFLX0FMSUFTKGFsaWFzLHN5bSkgXAorCS53ZWFrIGFsaWFzOyBcCisJYWxpYXMgPSBzeW0KKworLyoKKyAqIFdBUk5fUkVGRVJFTkNFUzogY3JlYXRlIGEgd2FybmluZyBpZiB0aGUgc3BlY2lmaWVkIHN5bWJvbCBpcyByZWZlcmVuY2VkCisgKi8KKyNkZWZpbmUgV0FSTl9SRUZFUkVOQ0VTKF9zeW0sX21zZykJXAorCS5zZWN0aW9uIC5nbnUud2FybmluZy4gIyMgX3N5bSA7IC5hc2NpaSBfbXNnIDsgLnRleHQKKworLyogbGV0IGtlcm5lbHMgYW5kIG90aGVycyBvdmVycmlkZSBlbnRyeXBvaW50IGFsaWdubWVudCAqLworI2lmbmRlZiBfQUxJR05fVEVYVAorIyBkZWZpbmUgX0FMSUdOX1RFWFQgLmFsaWduIDIsIDB4OTAKKyNlbmRpZgorCisjZGVmaW5lIF9FTlRSWSh4KSBcCisJLnRleHQ7IF9BTElHTl9URVhUOyAuZ2xvYmwgeDsgLnR5cGUgeCxAZnVuY3Rpb247IHg6CisKKyNpZmRlZiBHUFJPRgorIyBkZWZpbmUgX1BST0ZfUFJPTE9HVUUJXAorCXB1c2hsICVlYnA7IG1vdmwgJWVzcCwlZWJwOyBjYWxsIFBJQ19QTFQobWNvdW50KTsgcG9wbCAlZWJwCisjZWxzZQorIyBkZWZpbmUgX1BST0ZfUFJPTE9HVUUKKyNlbmRpZgorCisjZGVmaW5lCUVOVFJZKHkpCV9FTlRSWShfQ19MQUJFTCh5KSk7IF9QUk9GX1BST0xPR1VFCisjZGVmaW5lCU5FTlRSWSh5KQlfRU5UUlkoX0NfTEFCRUwoeSkpCisjZGVmaW5lCUFTRU5UUlkoeSkJX0VOVFJZKF9BU01fTEFCRUwoeSkpOyBfUFJPRl9QUk9MT0dVRQorCisjZGVmaW5lCUFMVEVOVFJZKG5hbWUpCS5nbG9ibCBfQ19MQUJFTChuYW1lKTsgX0NfTEFCRUwobmFtZSk6CisKKyNkZWZpbmUJQVNNU1RSCQkuYXNjaXoKKworI2RlZmluZSBSQ1NJRCh4KQkudGV4dDsgLmFzY2l6IHgKKyNkZWZpbmUgX19GQlNESUQoeCkgICAgIFJDU0lEKHgpCisKKyNlbmRpZiAvKiAhX0kzODZfQVNNX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L2luY2x1ZGUvbWFjaGluZS9jZGVmcy5oIGIvbGliYy9hcmNoLXg4Ni9pbmNsdWRlL21hY2hpbmUvY2RlZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWZlZTZhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9pbmNsdWRlL21hY2hpbmUvY2RlZnMuaApAQCAtMCwwICsxLDI0IEBACisvKgkkT3BlbkJTRDogY2RlZnMuaCx2IDEuOSAyMDA1LzExLzI0IDIwOjQ2OjQ1IGRlcmFhZHQgRXhwICQJKi8KKworLyoKKyAqIFdyaXR0ZW4gYnkgSi5ULiBDb25rbGluIDxqdGNAd2ltc2V5LmNvbT4gMDEvMTcvOTUuCisgKiBQdWJsaWMgZG9tYWluLgorICovCisKKyNpZm5kZWYJX01BQ0hJTkVfQ0RFRlNfSF8KKyNkZWZpbmUJX01BQ0hJTkVfQ0RFRlNfSF8KKworI2lmIGRlZmluZWQobGludCkKKyNkZWZpbmUgX19pbmRyX3JlZmVyZW5jZShzeW0sYWxpYXMpCV9fbGludF9lcXVhbF9fKHN5bSxhbGlhcykKKyNkZWZpbmUgX193YXJuX3JlZmVyZW5jZXMoc3ltLG1zZykKKyNkZWZpbmUgX193ZWFrX2FsaWFzKGFsaWFzLHN5bSkJCV9fbGludF9lcXVhbF9fKHN5bSxhbGlhcykKKyNlbGlmIGRlZmluZWQoX19HTlVDX18pICYmIGRlZmluZWQoX19TVERDX18pCisjZGVmaW5lIF9fd2Vha19hbGlhcyhhbGlhcyxzeW0pCQkJCVwKKwlfX2FzbV9fKCIud2VhayAiIF9fU1RSSU5HKGFsaWFzKSAiIDsgIgkJXAorCSAgICBfX1NUUklORyhhbGlhcykgIiA9ICIgX19TVFJJTkcoc3ltKSk7CisjZGVmaW5lIF9fd2Fybl9yZWZlcmVuY2VzKHN5bSxtc2cpCQkJXAorCV9fYXNtX18oIi5zZWN0aW9uIC5nbnUud2FybmluZy4iIF9fU1RSSU5HKHN5bSkJXAorCSAgICAiIDsgLmFzY2lpIFwiIiBtc2cgIlwiIDsgLnRleHQiKTsKKyNlbmRpZgorCisjZW5kaWYgLyogIV9NQUNISU5FX0NERUZTX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L2luY2x1ZGUvbWFjaGluZS9leGVjLmggYi9saWJjL2FyY2gteDg2L2luY2x1ZGUvbWFjaGluZS9leGVjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA5MTc0MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvaW5jbHVkZS9tYWNoaW5lL2V4ZWMuaApAQCAtMCwwICsxLDUxIEBACisvKgkkT3BlbkJTRDogZXhlYy5oLHYgMS45IDIwMDMvMDQvMTcgMDM6NDI6MTQgZHJhaG4gRXhwICQJKi8KKy8qCSROZXRCU0Q6IGV4ZWMuaCx2IDEuNiAxOTk0LzEwLzI3IDA0OjE2OjA1IGNnZCBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTkzIENocmlzdG9waGVyIEcuIERlbWV0cmlvdQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfSTM4Nl9FWEVDX0hfCisjZGVmaW5lIF9JMzg2X0VYRUNfSF8KKworI2RlZmluZSBfX0xEUEdTWgk0MDk2CisKKyNkZWZpbmUgTkFUSVZFX0VYRUNfRUxGCisKKyNkZWZpbmUgQVJDSF9FTEZTSVpFCQkzMgorCisjZGVmaW5lIEVMRl9UQVJHX0NMQVNTCQlFTEZDTEFTUzMyCisjZGVmaW5lIEVMRl9UQVJHX0RBVEEJCUVMRkRBVEEyTFNCCisjZGVmaW5lIEVMRl9UQVJHX01BQ0gJCUVNXzM4NiAvKiBYWFggLSBFTV80ODYgaXMgY3VycmVudGx5IHVudXNlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgYWxsIE9Tcy9jb21waWxlcnMvbGlua2VycyAqLworCisjZGVmaW5lIF9OTElTVF9ET19BT1VUCisjZGVmaW5lIF9OTElTVF9ET19FTEYKKworI2RlZmluZSBfS0VSTl9ET19BT1VUCisjZGVmaW5lIF9LRVJOX0RPX0VMRgorCisjZW5kaWYgIC8qIF9JMzg2X0VYRUNfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvaW5jbHVkZS9tYWNoaW5lL2llZWUuaCBiL2xpYmMvYXJjaC14ODYvaW5jbHVkZS9tYWNoaW5lL2llZWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWIzNzAzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9pbmNsdWRlL21hY2hpbmUvaWVlZS5oCkBAIC0wLDAgKzEsMTMzIEBACisvKgkkT3BlbkJTRDogaWVlZS5oLHYgMS4yIDIwMDMvMDYvMDIgMjM6Mjc6NDcgbWlsbGVydCBFeHAgJCAqLworLyoJJE5ldEJTRDogaWVlZS5oLHYgMS4xIDE5OTYvMDkvMzAgMTY6MzQ6MjUgd3MgRXhwICQgKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk5MiwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSB3YXMgZGV2ZWxvcGVkIGJ5IHRoZSBDb21wdXRlciBTeXN0ZW1zIEVuZ2luZWVyaW5nIGdyb3VwCisgKiBhdCBMYXdyZW5jZSBCZXJrZWxleSBMYWJvcmF0b3J5IHVuZGVyIERBUlBBIGNvbnRyYWN0IEJHIDkxLTY2IGFuZAorICogY29udHJpYnV0ZWQgdG8gQmVya2VsZXkuCisgKgorICogQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgKiBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKglUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCisgKglDYWxpZm9ybmlhLCBMYXdyZW5jZSBCZXJrZWxleSBMYWJvcmF0b3J5LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglAKCMpaWVlZS5oCTguMSAoQmVya2VsZXkpIDYvMTEvOTMKKyAqLworCisvKgorICogaWVlZS5oIGRlZmluZXMgdGhlIG1hY2hpbmUtZGVwZW5kZW50IGxheW91dCBvZiB0aGUgbWFjaGluZSdzIElFRUUKKyAqIGZsb2F0aW5nIHBvaW50LiAgSXQgZG9lcyAqbm90KiBkZWZpbmUgKHlldD8pIGFueSBvZiB0aGUgcm91bmRpbmcKKyAqIG1vZGUgYml0cywgZXhjZXB0aW9ucywgYW5kIHNvIGZvcnRoLgorICovCisKKy8qCisgKiBEZWZpbmUgdGhlIG51bWJlciBvZiBiaXRzIGluIGVhY2ggZnJhY3Rpb24gYW5kIGV4cG9uZW50LgorICoKKyAqCQkgICAgIGsJICAgICAgICAgaysxCisgKiBOb3RlIHRoYXQgIDEuMCB4IDIgID09IDAuMSB4IDIgICAgICBhbmQgdGhhdCBkZW5vcm1zIGFyZSByZXByZXNlbnRlZAorICoKKyAqCQkJCQkgICgtZXhwX2JpYXMrMSkKKyAqIGFzIGZyYWN0aW9ucyB0aGF0IGxvb2sgbGlrZSAwLmZmZmZmIHggMiAgICAgICAgICAgICAuICBUaGlzIG1lYW5zIHRoYXQKKyAqCisgKgkJCSAtMTI2CisgKiB0aGUgbnVtYmVyIDAuMTAwMDAgeCAyICAgICwgZm9yIGluc3RhbmNlLCBpcyB0aGUgc2FtZSBhcyB0aGUgbm9ybWFsaXplZAorICoKKyAqCQktMTI3CQkJICAgLTEyOAorICogZmxvYXQgMS4wIHggMiAgICAuICBUaHVzLCB0byByZXByZXNlbnQgMiAgICAsIHdlIG5lZWQgb25lIGxlYWRpbmcgemVybworICoKKyAqCQkJCSAgLTEyOQorICogaW4gdGhlIGZyYWN0aW9uOyB0byByZXByZXNlbnQgMiAgICAsIHdlIG5lZWQgdHdvLCBhbmQgc28gb24uICBUaGlzCisgKgorICoJCQkJCQkgICAgICgtZXhwX2JpYXMtZnJhY2JpdHMrMSkKKyAqIGltcGxpZXMgdGhhdCB0aGUgc21hbGxlc3QgZGVub3JtYWxpemVkIG51bWJlciBpcyAyCisgKgorICogZm9yIHdoaWNoZXZlciBmb3JtYXQgd2UgYXJlIHRhbGtpbmcgYWJvdXQ6IGZvciBzaW5nbGUgcHJlY2lzaW9uLCBmb3IKKyAqCisgKgkJCQkJCS0xMjYJCS0xNDkKKyAqIGluc3RhbmNlLCB3ZSBnZXQgLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIHggMiAgICAsIG9yIDEuMCB4IDIgICAgLCBhbmQKKyAqCisgKiAtMTQ5ID09IC0xMjcgLSAyMyArIDEuCisgKi8KKyNkZWZpbmUJU05HX0VYUEJJVFMJOAorI2RlZmluZQlTTkdfRlJBQ0JJVFMJMjMKKworI2RlZmluZQlEQkxfRVhQQklUUwkxMQorI2RlZmluZQlEQkxfRlJBQ0JJVFMJNTIKKworI2RlZmluZQlFWFRfRVhQQklUUwkxNQorI2RlZmluZQlFWFRfRlJBQ0JJVFMJMTEyCisKK3N0cnVjdCBpZWVlX3NpbmdsZSB7CisJdV9pbnQJc25nX2ZyYWM6MjM7CisJdV9pbnQJc25nX2V4cDo4OworCXVfaW50CXNuZ19zaWduOjE7Cit9OworCitzdHJ1Y3QgaWVlZV9kb3VibGUgeworCXVfaW50CWRibF9mcmFjbDsKKwl1X2ludAlkYmxfZnJhY2g6MjA7CisJdV9pbnQJZGJsX2V4cDoxMTsKKwl1X2ludAlkYmxfc2lnbjoxOworfTsKKworc3RydWN0IGllZWVfZXh0IHsKKwl1X2ludAlleHRfZnJhY2w7CisJdV9pbnQJZXh0X2ZyYWNsbTsKKwl1X2ludAlleHRfZnJhY2htOworCXVfaW50CWV4dF9mcmFjaDoxNjsKKwl1X2ludAlleHRfZXhwOjE1OworCXVfaW50CWV4dF9zaWduOjE7Cit9OworCisvKgorICogRmxvYXRzIHdob3NlIGV4cG9uZW50IGlzIGluIFsxLi5JTkZOQU4pIChvZiB3aGF0ZXZlciB0eXBlKSBhcmUKKyAqIGBub3JtYWwnLiAgRmxvYXRzIHdob3NlIGV4cG9uZW50IGlzIElORk5BTiBhcmUgZWl0aGVyIEluZiBvciBOYU4uCisgKiBGbG9hdHMgd2hvc2UgZXhwb25lbnQgaXMgemVybyBhcmUgZWl0aGVyIHplcm8gKGlmZiBhbGwgZnJhY3Rpb24KKyAqIGJpdHMgYXJlIHplcm8pIG9yIHN1Ym5vcm1hbCB2YWx1ZXMuCisgKgorICogQSBOYU4gaXMgYSBgc2lnbmFsbGluZyBOYU4nIGlmIGl0cyBRVUlFVE5BTiBiaXQgaXMgY2xlYXIgaW4gaXRzCisgKiBoaWdoIGZyYWN0aW9uOyBpZiB0aGUgYml0IGlzIHNldCwgaXQgaXMgYSBgcXVpZXQgTmFOJy4KKyAqLworI2RlZmluZQlTTkdfRVhQX0lORk5BTgkyNTUKKyNkZWZpbmUJREJMX0VYUF9JTkZOQU4JMjA0NworI2RlZmluZQlFWFRfRVhQX0lORk5BTgkzMjc2NworCisjaWYgMAorI2RlZmluZQlTTkdfUVVJRVROQU4JKDEgPDwgMjIpCisjZGVmaW5lCURCTF9RVUlFVE5BTgkoMSA8PCAxOSkKKyNkZWZpbmUJRVhUX1FVSUVUTkFOCSgxIDw8IDE1KQorI2VuZGlmCisKKy8qCisgKiBFeHBvbmVudCBiaWFzZXMuCisgKi8KKyNkZWZpbmUJU05HX0VYUF9CSUFTCTEyNworI2RlZmluZQlEQkxfRVhQX0JJQVMJMTAyMworI2RlZmluZQlFWFRfRVhQX0JJQVMJMTYzODMKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvaW5jbHVkZS9tYWNoaW5lL2ludGVybmFsX3R5cGVzLmggYi9saWJjL2FyY2gteDg2L2luY2x1ZGUvbWFjaGluZS9pbnRlcm5hbF90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkMTgzM2MKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L2luY2x1ZGUvbWFjaGluZS9pbnRlcm5hbF90eXBlcy5oCkBAIC0wLDAgKzEsNiBAQAorLyogJE9wZW5CU0Q6IGludGVybmFsX3R5cGVzLmgsdiAxLjEgMjAwMi8wNC8yNCAyMTo1MzoxMSBlc3BpZSBFeHAgJCAqLworLyogUHVibGljIGRvbWFpbiAqLworI2lmbmRlZiBfTUFDSElORV9JTlRFUk5BTF9UWVBFU19IXworI2RlZmluZSBfTUFDSElORV9JTlRFUk5BTF9UWVBFU19IXworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvaW5jbHVkZS9tYWNoaW5lL2tlcm5lbC5oIGIvbGliYy9hcmNoLXg4Ni9pbmNsdWRlL21hY2hpbmUva2VybmVsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTlkMTU3NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvaW5jbHVkZS9tYWNoaW5lL2tlcm5lbC5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qIGJpb25pYy9hcmNoLWFybS9pbmNsdWRlL21hY2hpbmUva2VybmVsLmgKKyoqCisqKiBDb3B5cmlnaHQgMjAwNi0yMDA4LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisqKgorKiogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKiogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiogICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiogICAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyoqICAgICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKioKKyoqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgR29vZ2xlIEluYy4gYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorKiogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8KKyoqIEVWRU5UIFNIQUxMIEdvb2dsZSBJbmMuIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisqKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsKKyoqIE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorKiogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IKKyoqIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKKyoqIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKyNpZm5kZWYgX0FSQ0hfWDg2X0tFUk5FTF9ICisjZGVmaW5lIF9BUkNIX1g4Nl9LRVJORUxfSAorCisvKiB0aGlzIGZpbGUgY29udGFpbnMga2VybmVsLXNwZWNpZmljIGRlZmluaXRpb25zIHRoYXQgd2VyZSBvcHRpbWl6ZWQgb3V0IG9mCisgICBvdXIgcHJvY2Vzc2VkIGtlcm5lbCBoZWFkZXJzLCBidXQgc3RpbGwgdXNlZnVsIG5vbmV0aGVsZXNzLi4uICovCisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyAgIF9fa2VybmVsX2Jsa2NudF90OwordHlwZWRlZiB1bnNpZ25lZCBsb25nICAgX19rZXJuZWxfYmxrc2l6ZV90OworCisvKiB0aGVzZSBhcmVuJ3QgcmVhbGx5IGRlZmluZWQgYnkgdGhlIGtlcm5lbCBoZWFkZXJzIHRob3VnaC4uLiAqLwordHlwZWRlZiB1bnNpZ25lZCBsb25nICAgX19rZXJuZWxfZnNibGtjbnRfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyAgIF9fa2VybmVsX2ZzZmlsY250X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludCAgICBfX2tlcm5lbF9pZF90OworCisjZW5kaWYgLyogX0FSQ0hfWDg2X0tFUk5FTF9IICovCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L2luY2x1ZGUvbWFjaGluZS9saW1pdHMuaCBiL2xpYmMvYXJjaC14ODYvaW5jbHVkZS9tYWNoaW5lL2xpbWl0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2ZmQ4NTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L2luY2x1ZGUvbWFjaGluZS9saW1pdHMuaApAQCAtMCwwICsxLDYzIEBACisvKgkkT3BlbkJTRDogbGltaXRzLmgsdiAxLjExIDIwMDYvMDEvMDYgMjI6NDg6NDcgbWlsbGVydCBFeHAgJAkqLworLyoJJE5ldEJTRDogbGltaXRzLmgsdiAxLjExIDE5OTUvMTIvMjEgMDE6MDg6NTkgbXljcm9mdCBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTg4IFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglAKCMpbGltaXRzLmgJNy4yIChCZXJrZWxleSkgNi8yOC85MAorICovCisKKyNpZm5kZWYgX01BQ0hJTkVfTElNSVRTX0hfCisjZGVmaW5lIF9NQUNISU5FX0xJTUlUU19IXworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisKKyNkZWZpbmUJTUJfTEVOX01BWAkxCQkvKiBubyBtdWx0aWJ5dGUgY2hhcmFjdGVycyAqLworCisjaWZuZGVmCVNJWkVfTUFYCisjZGVmaW5lCVNJWkVfTUFYCVVJTlRfTUFYCS8qIG1heCB2YWx1ZSBmb3IgYSBzaXplX3QgKi8KKyNlbmRpZgorI2lmbmRlZiBTU0laRV9NQVgKKyNkZWZpbmUJU1NJWkVfTUFYCUlOVF9NQVgJCS8qIG1heCB2YWx1ZSBmb3IgYSBzc2l6ZV90ICovCisjZW5kaWYKKworI2lmIF9fQlNEX1ZJU0lCTEUKKyNkZWZpbmUJU0laRV9UX01BWAlVSU5UX01BWAkvKiBtYXggdmFsdWUgZm9yIGEgc2l6ZV90IChoaXN0b3JpYykgKi8KKworI2RlZmluZQlVUVVBRF9NQVgJMHhmZmZmZmZmZmZmZmZmZmZmVUxMCQkvKiBtYXggdW5zaWduZWQgcXVhZCAqLworI2RlZmluZQlRVUFEX01BWAkweDdmZmZmZmZmZmZmZmZmZmZMTAkJLyogbWF4IHNpZ25lZCBxdWFkICovCisjZGVmaW5lCVFVQURfTUlOCSgtMHg3ZmZmZmZmZmZmZmZmZmZmTEwtMSkJLyogbWluIHNpZ25lZCBxdWFkICovCisKKyNlbmRpZiAvKiBfX0JTRF9WSVNJQkxFICovCisKKyNkZWZpbmUgTE9OR0xPTkdfQklUICAgIDY0CisjZGVmaW5lIExPTkdMT05HX01JTiAgICAoLTkyMjMzNzIwMzY4NTQ3NzU4MDdMTC0xKQorI2RlZmluZSBMT05HTE9OR19NQVggICAgOTIyMzM3MjAzNjg1NDc3NTgwN0xMCisjZGVmaW5lIFVMT05HTE9OR19NQVggICAxODQ0Njc0NDA3MzcwOTU1MTYxNVVMTAorCisjZW5kaWYgLyogX01BQ0hJTkVfTElNSVRTX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L2luY2x1ZGUvbWFjaGluZS9zZXRqbXAuaCBiL2xpYmMvYXJjaC14ODYvaW5jbHVkZS9tYWNoaW5lL3NldGptcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlZDA5NWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L2luY2x1ZGUvbWFjaGluZS9zZXRqbXAuaApAQCAtMCwwICsxLDggQEAKKy8qCSRPcGVuQlNEOiBzZXRqbXAuaCx2IDEuMiAyMDAwLzA4LzA1IDIyOjA3OjMyIG5pa2xhcyBFeHAgJAkqLworLyoJJE5ldEJTRDogc2V0am1wLmgsdiAxLjEgMTk5NC8xMi8yMCAxMDozNjo0MyBjZ2QgRXhwICQJKi8KKworLyoKKyAqIG1hY2hpbmUvc2V0am1wLmg6IG1hY2hpbmUgZGVwZW5kZW50IHNldGptcC1yZWxhdGVkIGluZm9ybWF0aW9uLgorICovCisKKyNkZWZpbmUJX0pCTEVOCTEwCQkvKiBzaXplLCBpbiBsb25ncywgb2YgYSBqbXBfYnVmICovCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N0cmluZy9iY21wLlMgYi9saWJjL2FyY2gteDg2L3N0cmluZy9iY21wLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTViNDZhZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL2JjbXAuUwpAQCAtMCwwICsxLDMyIEBACisvKgkkT3BlbkJTRDogYmNtcC5TLHYgMS4zIDIwMDUvMDgvMDcgMTE6MzA6MzggZXNwaWUgRXhwICQgKi8KKy8qCisgKiBXcml0dGVuIGJ5IEouVC4gQ29ua2xpbiA8anRjQG5ldGJzZC5vcmc+LgorICogUHVibGljIGRvbWFpbi4KKyAqLworCisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKworRU5UUlkoYmNtcCkKKwlwdXNobAklZWRpCisJcHVzaGwJJWVzaQorCW1vdmwJMTIoJWVzcCksJWVkaQorCW1vdmwJMTYoJWVzcCksJWVzaQorCXhvcmwJJWVheCwlZWF4CQkvKiBjbGVhciByZXR1cm4gdmFsdWUgKi8KKwljbGQJCQkJLyogc2V0IGNvbXBhcmUgZGlyZWN0aW9uIGZvcndhcmQgKi8KKworCW1vdmwJMjAoJWVzcCksJWVjeAkJLyogY29tcGFyZSBieSB3b3JkcyAqLworCXNocmwJJDIsJWVjeAorCXJlcGUKKwljbXBzbAorCWpuZQlMMQorCisJbW92bAkyMCglZXNwKSwlZWN4CQkvKiBjb21wYXJlIHJlbWFpbmRlciBieSBieXRlcyAqLworCWFuZGwJJDMsJWVjeAorCXJlcGUKKwljbXBzYgorCWplCUwyCisKK0wxOglpbmNsCSVlYXgKK0wyOglwb3BsCSVlc2kKKwlwb3BsCSVlZGkKKwlyZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL2Jjb3B5LlMgYi9saWJjL2FyY2gteDg2L3N0cmluZy9iY29weS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkZTVhZTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N0cmluZy9iY29weS5TCkBAIC0wLDAgKzEsOTMgQEAKKy8qCSRPcGVuQlNEOiBiY29weS5TLHYgMS41IDIwMDUvMDgvMDcgMTE6MzA6MzggZXNwaWUgRXhwICQJKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBsb2NvcmUucy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisKKwkvKgorCSAqIChvdiliY29weSAoc3JjLGRzdCxjbnQpCisJICogIHdzQHRvb2xzLmRlICAgICAoV29sZmdhbmcgU29sZnJhbmssIFRvb0xzIEdtYkgpICs0OS0yMjgtOTg1ODAwCisJICovCisKKyNpZmRlZiBNRU1DT1BZCitFTlRSWShtZW1jcHkpCisjZWxzZQorI2lmZGVmIE1FTU1PVkUKK0VOVFJZKG1lbW1vdmUpCisjZWxzZQorRU5UUlkoYmNvcHkpCisjZW5kaWYKKyNlbmRpZgorCXB1c2hsCSVlc2kKKwlwdXNobAklZWRpCisjaWYgZGVmaW5lZChNRU1DT1BZKSB8fCBkZWZpbmVkKE1FTU1PVkUpCisJbW92bAkxMiglZXNwKSwlZWRpCisJbW92bAkxNiglZXNwKSwlZXNpCisJbW92bAklZWRpLCAlZWF4CisjZWxzZQorCW1vdmwJMTIoJWVzcCksJWVzaQorCW1vdmwJMTYoJWVzcCksJWVkaQorI2VuZGlmCisJbW92bAkyMCglZXNwKSwlZWN4CisJbW92bAklZWN4LCVlZHgKKwljbXBsCSVlc2ksJWVkaQkvKiBwb3RlbnRpYWxseSBvdmVybGFwcGluZz8gKi8KKwlqbmIJMWYKKwljbGQJCQkvKiBub3BlLCBjb3B5IGZvcndhcmRzLiAqLworCXNocmwJJDIsJWVjeAkJLyogY29weSBieSB3b3JkcyAqLworCXJlcAorCW1vdnNsCisJbW92bAklZWR4LCVlY3gKKwlhbmRsCSQzLCVlY3gJCS8qIGFueSBieXRlcyBsZWZ0PyAqLworCXJlcAorCW1vdnNiCisJcG9wbAklZWRpCisJcG9wbAklZXNpCisJcmV0CisxOgorCWFkZGwJJWVjeCwlZWRpCS8qIGNvcHkgYmFja3dhcmRzLiAqLworCWFkZGwJJWVjeCwlZXNpCisJc3RkCisJYW5kbAkkMywlZWN4CQkvKiBhbnkgZnJhY3Rpb25hbCBieXRlcz8gKi8KKwlkZWNsCSVlZGkKKwlkZWNsCSVlc2kKKwlyZXAKKwltb3ZzYgorCW1vdmwJJWVkeCwlZWN4CisJc2hybAkkMiwlZWN4CisJc3VibAkkMywlZXNpCisJc3VibAkkMywlZWRpCisJcmVwCisJbW92c2wKKwlwb3BsCSVlZGkKKwlwb3BsCSVlc2kKKwljbGQKKwlyZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL2J6ZXJvLlMgYi9saWJjL2FyY2gteDg2L3N0cmluZy9iemVyby5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlYzljN2QKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N0cmluZy9iemVyby5TCkBAIC0wLDAgKzEsNDMgQEAKKy8qCSRPcGVuQlNEOiBiemVyby5TLHYgMS4zIDIwMDUvMDgvMDcgMTE6MzA6MzggZXNwaWUgRXhwICQgKi8KKy8qCisgKiBXcml0dGVuIGJ5IEouVC4gQ29ua2xpbiA8anRjQG5ldGJzZC5vcmc+LgorICogUHVibGljIGRvbWFpbi4KKyAqLworCisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKworRU5UUlkoYnplcm8pCisJcHVzaGwJJWVkaQorCW1vdmwJOCglZXNwKSwlZWRpCisJbW92bAkxMiglZXNwKSwlZWR4CisKKwljbGQJCQkJLyogc2V0IGZpbGwgZGlyZWN0aW9uIGZvcndhcmQgKi8KKwl4b3JsCSVlYXgsJWVheAkJLyogc2V0IGZpbGwgZGF0YSB0byAwICovCisKKwkvKgorCSAqIGlmIHRoZSBzdHJpbmcgaXMgdG9vIHNob3J0LCBpdCdzIHJlYWxseSBub3Qgd29ydGggdGhlIG92ZXJoZWFkCisJICogb2YgYWxpZ25pbmcgdG8gd29yZCBib3VuZHJpZXMsIGV0Yy4gIFNvIHdlIGp1bXAgdG8gYSBwbGFpbgorCSAqIHVuYWxpZ25lZCBzZXQuCisJICovCisJY21wbAkkMTYsJWVkeAorCWpiCUwxCisKKwltb3ZsCSVlZGksJWVjeAkJLyogY29tcHV0ZSBtaXNhbGlnbm1lbnQgKi8KKwluZWdsCSVlY3gKKwlhbmRsCSQzLCVlY3gKKwlzdWJsCSVlY3gsJWVkeAorCXJlcAkJCQkvKiB6ZXJvIHVudGlsIHdvcmQgYWxpZ25lZCAqLworCXN0b3NiCisKKwltb3ZsCSVlZHgsJWVjeAkJLyogemVybyBieSB3b3JkcyAqLworCXNocmwJJDIsJWVjeAorCWFuZGwJJDMsJWVkeAorCXJlcAorCXN0b3NsCisKK0wxOgltb3ZsCSVlZHgsJWVjeAkJLyogemVybyByZW1haW5kZXIgYnkgYnl0ZXMgKi8KKwlyZXAKKwlzdG9zYgorCisJcG9wbAklZWRpCisJcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N0cmluZy9mc3MuUyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL2Zzcy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2YWZmYWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N0cmluZy9mc3MuUwpAQCAtMCwwICsxLDE3IEBACisvKgkkT3BlbkJTRDogZmZzLlMsdiAxLjMgMjAwNS8wOC8wNyAxMTozMDozOCBlc3BpZSBFeHAgJCAqLworLyoKKyAqIFdyaXR0ZW4gYnkgSi5ULiBDb25rbGluIDxqdGNAbmV0YnNkLm9yZz4uCisgKiBQdWJsaWMgZG9tYWluLgorICovCisKKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorCitFTlRSWShmZnMpCisJYnNmbAk0KCVlc3ApLCVlYXgKKwlqeglMMQkgCQkvKiBaRiBpcyBzZXQgaWYgYWxsIGJpdHMgYXJlIDAgKi8KKwlpbmNsCSVlYXgJCQkvKiBiaXRzIG51bWJlcmVkIGZyb20gMSwgbm90IDAgKi8KKwlyZXQKKworCS5hbGlnbiAyCitMMToJeG9ybAklZWF4LCVlYXgJCS8qIGNsZWFyIHJlc3VsdCAqLworCXJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvaW5kZXguUyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL2luZGV4LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y4M2VmNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL2luZGV4LlMKQEAgLTAsMCArMSwyNiBAQAorLyoJJE9wZW5CU0Q6IGluZGV4LlMsdiAxLjQgMjAwNS8wOC8wNyAxMTozMDozOCBlc3BpZSBFeHAgJCAqLworLyoKKyAqIFdyaXR0ZW4gYnkgSi5ULiBDb25rbGluIDxqdGNAbmV0YnNkLm9yZz4uCisgKiBQdWJsaWMgZG9tYWluLgorICovCisKKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorCisjaWZkZWYgU1RSQ0hSCitFTlRSWShzdHJjaHIpCisjZWxzZQorRU5UUlkoaW5kZXgpCisjZW5kaWYKKwltb3ZsCTQoJWVzcCksJWVheAorCW1vdmIJOCglZXNwKSwlY2wKKwkuYWxpZ24gMiwweDkwCitMMToKKwltb3ZiCSglZWF4KSwlZGwKKwljbXBiCSVkbCwlY2wJCQkvKiBmb3VuZCBjaGFyPz8/ICovCisJamUgCUwyCisJaW5jbAklZWF4CisJdGVzdGIJJWRsLCVkbAkJCS8qIG51bGwgdGVybWluYXRvcj8/PyAqLworCWpueglMMQorCXhvcmwJJWVheCwlZWF4CitMMjoKKwlyZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL21lbWNoci5TIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvbWVtY2hyLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZiY2JlNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL21lbWNoci5TCkBAIC0wLDAgKzEsMjYgQEAKKy8qCSRPcGVuQlNEOiBtZW1jaHIuUyx2IDEuMyAyMDA1LzA4LzA3IDExOjMwOjM4IGVzcGllIEV4cCAkICovCisvKgorICogV3JpdHRlbiBieSBKLlQuIENvbmtsaW4gPGp0Y0BuZXRic2Qub3JnPi4KKyAqIFB1YmxpYyBkb21haW4uCisgKi8KKworI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisKK0VOVFJZKG1lbWNocikKKwlwdXNobAklZWRpCisJbW92bAk4KCVlc3ApLCVlZGkJCS8qIHN0cmluZyBhZGRyZXNzICovCisJbW92bAkxMiglZXNwKSwlZWF4CQkvKiBzZXQgY2hhcmFjdGVyIHRvIHNlYXJjaCBmb3IgKi8KKwltb3ZsCTE2KCVlc3ApLCVlY3gJCS8qIHNldCBsZW5ndGggb2Ygc2VhcmNoICovCisJdGVzdGwJJWVjeCwlZWN4CQkvKiB0ZXN0IGZvciBsZW4gPT0gMCAqLworCWp6CUwxCisJY2xkCQkJCS8qIHNldCBzZWFyY2ggZm9yd2FyZCAqLworCXJlcG5lCQkJCS8qIHNlYXJjaCEgKi8KKwlzY2FzYgorCWpuZQlMMQkJCS8qIHNjYW4gZmFpbGVkLCByZXR1cm4gbnVsbCAqLworCWxlYWwJLTEoJWVkaSksJWVheAkJLyogYWRqdXN0IHJlc3VsdCBvZiBzY2FuICovCisJcG9wbAklZWRpCisJcmV0CisJLmFsaWduIDIsMHg5MAorTDE6CXhvcmwJJWVheCwlZWF4CisJcG9wbAklZWRpCisJcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N0cmluZy9tZW1jbXAuUyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL21lbWNtcC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiZTE4OWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N0cmluZy9tZW1jbXAuUwpAQCAtMCwwICsxLDQzIEBACisvKgkkT3BlbkJTRDogbWVtY21wLlMsdiAxLjQgMjAwNS8wOC8wNyAxMTozMDozOCBlc3BpZSBFeHAgJCAqLworLyoKKyAqIFdyaXR0ZW4gYnkgSi5ULiBDb25rbGluIDxqdGNAbmV0YnNkLm9yZz4uCisgKiBQdWJsaWMgZG9tYWluLgorICovCisKKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorCitFTlRSWShtZW1jbXApCisJcHVzaGwJJWVkaQorCXB1c2hsCSVlc2kKKwltb3ZsCTEyKCVlc3ApLCVlZGkKKwltb3ZsCTE2KCVlc3ApLCVlc2kKKwljbGQJCQkJLyogc2V0IGNvbXBhcmUgZGlyZWN0aW9uIGZvcndhcmQgKi8KKworCW1vdmwJMjAoJWVzcCksJWVjeAkJLyogY29tcGFyZSBieSB3b3JkcyAqLworCXNocmwJJDIsJWVjeAorCXJlcGUKKwljbXBzbAorCWpuZQlMNQkJCS8qIGRvIHdlIG1hdGNoIHNvIGZhcj8gKi8KKworCW1vdmwJMjAoJWVzcCksJWVjeAkJLyogY29tcGFyZSByZW1haW5kZXIgYnkgYnl0ZXMgKi8KKwlhbmRsCSQzLCVlY3gKKwlyZXBlCisJY21wc2IKKwlqbmUJTDYJCQkvKiBkbyB3ZSBtYXRjaD8gKi8KKworCXhvcmwJJWVheCwlZWF4CQkvKiB3ZSBtYXRjaCwgcmV0dXJuIHplcm8JKi8KKwlwb3BsCSVlc2kKKwlwb3BsCSVlZGkKKwlyZXQKKworTDU6CW1vdmwJJDQsJWVjeAkJCS8qIFdlIGtub3cgdGhhdCBvbmUgb2YgdGhlIG5leHQJKi8KKwlzdWJsCSVlY3gsJWVkaQkJLyogZm91ciBwYWlycyBvZiBieXRlcyBkbyBub3QJKi8KKwlzdWJsCSVlY3gsJWVzaQkJLyogbWF0Y2guCQkJKi8KKwlyZXBlCisJY21wc2IKK0w2Ogltb3Z6YmwgIC0xKCVlZGkpLCVlYXgJCS8qIFBlcmZvcm0gdW5zaWduZWQgY29tcGFyaXNvbgkqLworCW1vdnpibAktMSglZXNpKSwlZWR4CisJc3VibAklZWR4LCVlYXgKKwlwb3BsCSVlc2kKKwlwb3BsCSVlZGkKKwlyZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL21lbWNweS5TIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvbWVtY3B5LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVjOGE4MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL21lbWNweS5TCkBAIC0wLDAgKzEsMyBAQAorLyoJJE9wZW5CU0Q6IG1lbWNweS5TLHYgMS4zIDIwMDUvMDgvMDcgMTE6MzA6MzggZXNwaWUgRXhwICQgKi8KKyNkZWZpbmUgTUVNQ09QWQorI2luY2x1ZGUgImJjb3B5LlMiCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N0cmluZy9tZW1tb3ZlLlMgYi9saWJjL2FyY2gteDg2L3N0cmluZy9tZW1tb3ZlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzViZmQxOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL21lbW1vdmUuUwpAQCAtMCwwICsxLDMgQEAKKy8qCSRPcGVuQlNEOiBtZW1tb3ZlLlMsdiAxLjMgMjAwNS8wOC8wNyAxMTozMDozOCBlc3BpZSBFeHAgJCAqLworI2RlZmluZSBNRU1NT1ZFCisjaW5jbHVkZSAiYmNvcHkuUyIKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL21lbXNldC5TIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvbWVtc2V0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA1OWNjYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL21lbXNldC5TCkBAIC0wLDAgKzEsNTUgQEAKKy8qCSRPcGVuQlNEOiBtZW1zZXQuUyx2IDEuMyAyMDA1LzA4LzA3IDExOjMwOjM4IGVzcGllIEV4cCAkICovCisvKgorICogV3JpdHRlbiBieSBKLlQuIENvbmtsaW4gPGp0Y0BuZXRic2Qub3JnPi4KKyAqIFB1YmxpYyBkb21haW4uCisgKi8KKworI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisKK0VOVFJZKG1lbXNldCkKKwlwdXNobAklZWRpCisJcHVzaGwJJWVieAorCW1vdmwJMTIoJWVzcCksJWVkaQorCW1vdnpibAkxNiglZXNwKSwlZWF4CQkvKiB1bnNpZ25lZCBjaGFyLCB6ZXJvIGV4dGVuZCAqLworCW1vdmwJMjAoJWVzcCksJWVjeAorCXB1c2hsCSVlZGkJCQkvKiBwdXNoIGFkZHJlc3Mgb2YgYnVmZmVyICovCisKKwljbGQJCQkJLyogc2V0IGZpbGwgZGlyZWN0aW9uIGZvcndhcmQgKi8KKworCS8qCisJICogaWYgdGhlIHN0cmluZyBpcyB0b28gc2hvcnQsIGl0J3MgcmVhbGx5IG5vdCB3b3J0aCB0aGUgb3ZlcmhlYWQKKwkgKiBvZiBhbGlnbmluZyB0byB3b3JkIGJvdW5kcmllcywgZXRjLiAgU28gd2UganVtcCB0byBhIHBsYWluCisJICogdW5hbGlnbmVkIHNldC4KKwkgKi8KKwljbXBsCSQweDBmLCVlY3gKKwlqbGUJTDEKKworCW1vdmIJJWFsLCVhaAkJCS8qIGNvcHkgY2hhciB0byBhbGwgYnl0ZXMgaW4gd29yZCAqLworCW1vdmwJJWVheCwlZWR4CisJc2FsbAkkMTYsJWVheAorCW9ybAklZWR4LCVlYXgKKworCW1vdmwJJWVkaSwlZWR4CQkvKiBjb21wdXRlIG1pc2FsaWdubWVudCAqLworCW5lZ2wJJWVkeAorCWFuZGwJJDMsJWVkeAorCW1vdmwJJWVjeCwlZWJ4CisJc3VibAklZWR4LCVlYngKKworCW1vdmwJJWVkeCwlZWN4CQkvKiBzZXQgdW50aWwgd29yZCBhbGlnbmVkICovCisJcmVwCisJc3Rvc2IKKworCW1vdmwJJWVieCwlZWN4CisJc2hybAkkMiwlZWN4CQkJLyogc2V0IGJ5IHdvcmRzICovCisJcmVwCisJc3Rvc2wKKworCW1vdmwJJWVieCwlZWN4CQkvKiBzZXQgcmVtYWluZGVyIGJ5IGJ5dGVzICovCisJYW5kbAkkMywlZWN4CitMMToJcmVwCisJc3Rvc2IKKworCXBvcGwJJWVheAkJCS8qIHBvcCBhZGRyZXNzIG9mIGJ1ZmZlciAqLworCXBvcGwJJWVieAorCXBvcGwJJWVkaQorCXJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvcmluZGV4LlMgYi9saWJjL2FyY2gteDg2L3N0cmluZy9yaW5kZXguUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjYwZDM4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvcmluZGV4LlMKQEAgLTAsMCArMSwyOSBAQAorLyoJJE9wZW5CU0Q6IHJpbmRleC5TLHYgMS4zIDIwMDUvMDgvMDcgMTE6MzA6MzggZXNwaWUgRXhwICQgKi8KKy8qCisgKiBXcml0dGVuIGJ5IEouVC4gQ29ua2xpbiA8anRjQG5ldGJzZC5vcmc+LgorICogUHVibGljIGRvbWFpbi4KKyAqLworCisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKworI2lmZGVmIFNUUlJDSFIKK0VOVFJZKHN0cnJjaHIpCisjZWxzZQorRU5UUlkocmluZGV4KQorI2VuZGlmCisJcHVzaGwJJWVieAorCW1vdmwJOCglZXNwKSwlZWR4CisJbW92YgkxMiglZXNwKSwlY2wKKwl4b3JsCSVlYXgsJWVheAkJLyogaW5pdCBwb2ludGVyIHRvIG51bGwgKi8KKwkuYWxpZ24gMiwweDkwCitMMToKKwltb3ZiCSglZWR4KSwlYmwKKwljbXBiCSVibCwlY2wKKwlqbmUJTDIKKwltb3ZsCSVlZHgsJWVheAorTDI6CisJaW5jbAklZWR4CisJdGVzdGIJJWJsLCVibAkJCS8qIG51bGwgdGVybWluYXRvcj8/PyAqLworCWpueglMMQorCXBvcGwJJWVieAorCXJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3RyY2F0LlMgYi9saWJjL2FyY2gteDg2L3N0cmluZy9zdHJjYXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGZkZDU1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3RyY2F0LlMKQEAgLTAsMCArMSw3MyBAQAorLyoJJE9wZW5CU0Q6IHN0cmNhdC5TLHYgMS44IDIwMDUvMDgvMDcgMTE6MzA6MzggZXNwaWUgRXhwICQgKi8KKy8qCisgKiBXcml0dGVuIGJ5IEouVC4gQ29ua2xpbiA8anRjQG5ldGJzZC5vcmc+LgorICogUHVibGljIGRvbWFpbi4KKyAqLworCisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKworI2lmIGRlZmluZWQoQVBJV0FSTikKKyNBUFAKKwkuc2VjdGlvbiAuZ251Lndhcm5pbmcuc3RyY2F0CisJLmFzY2lpICJ3YXJuaW5nOiBzdHJjYXQoKSBpcyBhbG1vc3QgYWx3YXlzIG1pc3VzZWQsIHBsZWFzZSB1c2Ugc3RybGNhdCgpIgorI05PX0FQUAorI2VuZGlmCisKKy8qCisgKiBOT1RFOiBJJ3ZlIHVucm9sbGVkIHRoZSBsb29wIGVpZ2h0IHRpbWVzOiBsYXJnZSBlbm91Z2ggdG8gbWFrZSBhCisgKiBzaWduaWZpY2FudCBkaWZmZXJlbmNlLCBhbmQgc21hbGwgZW5vdWdoIG5vdCB0byB0b3RhbGx5IHRyYXNoIHRoZQorICogY2FjaGUuCisgKi8KKworRU5UUlkoc3RyY2F0KQorCXB1c2hsCSVlZGkJCQkvKiBzYXZlIGVkaSAqLworCW1vdmwJOCglZXNwKSwlZWRpCQkvKiBkc3QgYWRkcmVzcyAqLworCW1vdmwJMTIoJWVzcCksJWVkeAkJLyogc3JjIGFkZHJlc3MgKi8KKwlwdXNobAklZWRpCQkJLyogcHVzaCBkZXN0aW5hdGlvbiBhZGRyZXNzICovCisKKwljbGQJCQkJLyogc2V0IHNlYXJjaCBmb3J3YXJkICovCisJeG9ybAklZWF4LCVlYXgJCS8qIHNldCBzZWFyY2ggZm9yIG51bGwgdGVybWluYXRvciAqLworCW1vdmwJJC0xLCVlY3gJCS8qIHNldCBzZWFyY2ggZm9yIGxvdHMgb2YgY2hhcmFjdGVycyAqLworCXJlcG5lCQkJCS8qIHNlYXJjaCEgKi8KKwlzY2FzYgorCisJbGVhbAktMSglZWRpKSwlZWN4CQkvKiBjb3JyZWN0IGRzdCBhZGRyZXNzICovCisKKwkuYWxpZ24gMiwweDkwCitMMToJbW92YgkoJWVkeCksJWFsCQkvKiB1bnJvbGwgbG9vcCwgYnV0IG5vdCB0b28gbXVjaCAqLworCW1vdmIJJWFsLCglZWN4KQorCXRlc3RiCSVhbCwlYWwKKwlqeglMMgorCW1vdmIJMSglZWR4KSwlYWwKKwltb3ZiCSVhbCwxKCVlY3gpCisJdGVzdGIJJWFsLCVhbAorCWp6CUwyCisJbW92YgkyKCVlZHgpLCVhbAorCW1vdmIJJWFsLDIoJWVjeCkKKwl0ZXN0YgklYWwsJWFsCisJanoJTDIKKwltb3ZiCTMoJWVkeCksJWFsCisJbW92YgklYWwsMyglZWN4KQorCXRlc3RiCSVhbCwlYWwKKwlqeglMMgorCW1vdmIJNCglZWR4KSwlYWwKKwltb3ZiCSVhbCw0KCVlY3gpCisJdGVzdGIJJWFsLCVhbAorCWp6CUwyCisJbW92Ygk1KCVlZHgpLCVhbAorCW1vdmIJJWFsLDUoJWVjeCkKKwl0ZXN0YgklYWwsJWFsCisJanoJTDIKKwltb3ZiCTYoJWVkeCksJWFsCisJbW92YgklYWwsNiglZWN4KQorCXRlc3RiCSVhbCwlYWwKKwlqeglMMgorCW1vdmIJNyglZWR4KSwlYWwKKwltb3ZiCSVhbCw3KCVlY3gpCisJYWRkbAkkOCwlZWR4CisJYWRkbAkkOCwlZWN4CisJdGVzdGIJJWFsLCVhbAorCWpueglMMQorTDI6CXBvcGwJJWVheAkJCS8qIHBvcCBkZXN0aW5hdGlvbiBhZGRyZXNzICovCisJcG9wbAklZWRpCQkJLyogcmVzdG9yZSBlZGkgKi8KKwlyZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL3N0cmNoci5TIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3RyY2hyLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc2ZTU5MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL3N0cmNoci5TCkBAIC0wLDAgKzEsMyBAQAorLyoJJE9wZW5CU0Q6IHN0cmNoci5TLHYgMS4zIDIwMDUvMDgvMDcgMTE6MzA6MzggZXNwaWUgRXhwICQgKi8KKyNkZWZpbmUgU1RSQ0hSCisjaW5jbHVkZSAiaW5kZXguUyIKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL3N0cmNtcC5TIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3RyY21wLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJiYTU0NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL3N0cmNtcC5TCkBAIC0wLDAgKzEsODEgQEAKKy8qCSRPcGVuQlNEOiBzdHJjbXAuUyx2IDEuMyAyMDA1LzA4LzA3IDExOjMwOjM4IGVzcGllIEV4cCAkICovCisvKgorICogV3JpdHRlbiBieSBKLlQuIENvbmtsaW4gPGp0Y0BuZXRic2Qub3JnPi4KKyAqIFB1YmxpYyBkb21haW4uCisgKi8KKworI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisKKy8qCisgKiBOT1RFOiBJJ3ZlIHVucm9sbGVkIHRoZSBsb29wIGVpZ2h0IHRpbWVzOiBsYXJnZSBlbm91Z2ggdG8gbWFrZSBhCisgKiBzaWduaWZpY2FudCBkaWZmZXJlbmNlLCBhbmQgc21hbGwgZW5vdWdoIG5vdCB0byB0b3RhbGx5IHRyYXNoIHRoZQorICogY2FjaGUuCisgKi8KKworRU5UUlkoc3RyY21wKQorCW1vdmwJMHgwNCglZXNwKSwlZWF4CisJbW92bAkweDA4KCVlc3ApLCVlZHgKKwlqbXAJTDIJCQkvKiBKdW1wIGludG8gdGhlIGxvb3AhICovCisKKwkuYWxpZ24JMiwweDkwCitMMToJaW5jbAklZWF4CisJaW5jbAklZWR4CitMMjoJbW92YgkoJWVheCksJWNsCisJdGVzdGIJJWNsLCVjbAkJCS8qIG51bGwgdGVybWluYXRvcj8/PyAqLworCWp6CUwzCisJY21wYgklY2wsKCVlZHgpCQkvKiBjaGFycyBtYXRjaD8/PyAqLworCWpuZQlMMworCWluY2wJJWVheAorCWluY2wJJWVkeAorCW1vdmIJKCVlYXgpLCVjbAorCXRlc3RiCSVjbCwlY2wKKwlqeglMMworCWNtcGIJJWNsLCglZWR4KQorCWpuZQlMMworCWluY2wJJWVheAorCWluY2wJJWVkeAorCW1vdmIJKCVlYXgpLCVjbAorCXRlc3RiCSVjbCwlY2wKKwlqeglMMworCWNtcGIJJWNsLCglZWR4KQorCWpuZQlMMworCWluY2wJJWVheAorCWluY2wJJWVkeAorCW1vdmIJKCVlYXgpLCVjbAorCXRlc3RiCSVjbCwlY2wKKwlqeglMMworCWNtcGIJJWNsLCglZWR4KQorCWpuZQlMMworCWluY2wJJWVheAorCWluY2wJJWVkeAorCW1vdmIJKCVlYXgpLCVjbAorCXRlc3RiCSVjbCwlY2wKKwlqeglMMworCWNtcGIJJWNsLCglZWR4KQorCWpuZQlMMworCWluY2wJJWVheAorCWluY2wJJWVkeAorCW1vdmIJKCVlYXgpLCVjbAorCXRlc3RiCSVjbCwlY2wKKwlqeglMMworCWNtcGIJJWNsLCglZWR4KQorCWpuZQlMMworCWluY2wJJWVheAorCWluY2wJJWVkeAorCW1vdmIJKCVlYXgpLCVjbAorCXRlc3RiCSVjbCwlY2wKKwlqeglMMworCWNtcGIJJWNsLCglZWR4KQorCWpuZQlMMworCWluY2wJJWVheAorCWluY2wJJWVkeAorCW1vdmIJKCVlYXgpLCVjbAorCXRlc3RiCSVjbCwlY2wKKwlqeglMMworCWNtcGIJJWNsLCglZWR4KQorCWplCUwxCisJLmFsaWduIDIsIDB4OTAKK0wzOgltb3Z6YmwJKCVlYXgpLCVlYXgJCS8qIHVuc2lnbmVkIGNvbXBhcmlzb24gKi8KKwltb3Z6YmwJKCVlZHgpLCVlZHgKKwlzdWJsCSVlZHgsJWVheAorCXJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3RyY3B5LlMgYi9saWJjL2FyY2gteDg2L3N0cmluZy9zdHJjcHkuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDFlYjZjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3RyY3B5LlMKQEAgLTAsMCArMSw2MyBAQAorLyoJJE9wZW5CU0Q6IHN0cmNweS5TLHYgMS44IDIwMDUvMDgvMDcgMTE6MzA6MzggZXNwaWUgRXhwICQgKi8KKy8qCisgKiBXcml0dGVuIGJ5IEouVC4gQ29ua2xpbiA8anRjQG5ldGJzZC5vcmc+LgorICogUHVibGljIGRvbWFpbi4KKyAqLworCisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKworI2lmIGRlZmluZWQoQVBJV0FSTikKKyNBUFAKKwkuc2VjdGlvbiAuZ251Lndhcm5pbmcuc3RyY3B5CisJLmFzY2lpICJ3YXJuaW5nOiBzdHJjcHkoKSBpcyBhbG1vc3QgYWx3YXlzIG1pc3VzZWQsIHBsZWFzZSB1c2Ugc3RybGNweSgpIgorI05PX0FQUAorI2VuZGlmCisKKy8qCisgKiBOT1RFOiBJJ3ZlIHVucm9sbGVkIHRoZSBsb29wIGVpZ2h0IHRpbWVzOiBsYXJnZSBlbm91Z2ggdG8gbWFrZSBhCisgKiBzaWduaWZpY2FudCBkaWZmZXJlbmNlLCBhbmQgc21hbGwgZW5vdWdoIG5vdCB0byB0b3RhbGx5IHRyYXNoIHRoZQorICogY2FjaGUuCisgKi8KKworRU5UUlkoc3RyY3B5KQorCW1vdmwJNCglZXNwKSwlZWN4CQkvKiBkc3QgYWRkcmVzcyAqLworCW1vdmwJOCglZXNwKSwlZWR4CQkvKiBzcmMgYWRkcmVzcyAqLworCXB1c2hsCSVlY3gJCQkvKiBwdXNoIGRzdCBhZGRyZXNzICovCisKKwkuYWxpZ24gMiwweDkwCitMMToJbW92YgkoJWVkeCksJWFsCQkvKiB1bnJvbGwgbG9vcCwgYnV0IG5vdCB0b28gbXVjaCAqLworCW1vdmIJJWFsLCglZWN4KQorCXRlc3RiCSVhbCwlYWwKKwlqeglMMgorCW1vdmIJMSglZWR4KSwlYWwKKwltb3ZiCSVhbCwxKCVlY3gpCisJdGVzdGIJJWFsLCVhbAorCWp6CUwyCisJbW92YgkyKCVlZHgpLCVhbAorCW1vdmIJJWFsLDIoJWVjeCkKKwl0ZXN0YgklYWwsJWFsCisJanoJTDIKKwltb3ZiCTMoJWVkeCksJWFsCisJbW92YgklYWwsMyglZWN4KQorCXRlc3RiCSVhbCwlYWwKKwlqeglMMgorCW1vdmIJNCglZWR4KSwlYWwKKwltb3ZiCSVhbCw0KCVlY3gpCisJdGVzdGIJJWFsLCVhbAorCWp6CUwyCisJbW92Ygk1KCVlZHgpLCVhbAorCW1vdmIJJWFsLDUoJWVjeCkKKwl0ZXN0YgklYWwsJWFsCisJanoJTDIKKwltb3ZiCTYoJWVkeCksJWFsCisJbW92YgklYWwsNiglZWN4KQorCXRlc3RiCSVhbCwlYWwKKwlqeglMMgorCW1vdmIJNyglZWR4KSwlYWwKKwltb3ZiCSVhbCw3KCVlY3gpCisJYWRkbAkkOCwlZWR4CisJYWRkbAkkOCwlZWN4CisJdGVzdGIJJWFsLCVhbAorCWpueglMMQorTDI6CXBvcGwJJWVheAkJCS8qIHBvcCBkc3QgYWRkcmVzcyAqLworCXJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3RybGVuLlMgYi9saWJjL2FyY2gteDg2L3N0cmluZy9zdHJsZW4uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjA0ZmZjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3RybGVuLlMKQEAgLTAsMCArMSwyMCBAQAorLyoJJE9wZW5CU0Q6IHN0cmxlbi5TLHYgMS4zIDIwMDUvMDgvMDcgMTE6MzA6MzggZXNwaWUgRXhwICQgKi8KKy8qCisgKiBXcml0dGVuIGJ5IEouVC4gQ29ua2xpbiA8anRjQG5ldGJzZC5vcmc+LgorICogUHVibGljIGRvbWFpbi4KKyAqLworCisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKworRU5UUlkoc3RybGVuKQorCXB1c2hsCSVlZGkKKwltb3ZsCTgoJWVzcCksJWVkaQkJLyogc3RyaW5nIGFkZHJlc3MgKi8KKwljbGQJCQkJLyogc2V0IHNlYXJjaCBmb3J3YXJkICovCisJeG9ybAklZWF4LCVlYXgJCS8qIHNldCBzZWFyY2ggZm9yIG51bGwgdGVybWluYXRvciAqLworCW1vdmwJJC0xLCVlY3gJCS8qIHNldCBzZWFyY2ggZm9yIGxvdHMgb2YgY2hhcmFjdGVycyAqLworCXJlcG5lCQkJCS8qIHNlYXJjaCEgKi8KKwlzY2FzYgorCW5vdGwJJWVjeAkJCS8qIGdldCBsZW5ndGggYnkgdGFraW5nCWNvbXBsZW1lbnQgKi8KKwlsZWFsCS0xKCVlY3gpLCVlYXgJCS8qIGFuZCBzdWJ0cmFjdGluZyBvbmUgKi8KKwlwb3BsCSVlZGkKKwlyZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL3N0cm5jbXAuUyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL3N0cm5jbXAuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWE4OGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3RybmNtcC5TCkBAIC0wLDAgKzEsMTEzIEBACisvKgkkT3BlbkJTRDogc3RybmNtcC5TLHYgMS4zIDIwMDUvMDgvMDcgMTE6MzA6MzggZXNwaWUgRXhwICQgKi8KKy8qCisgKiBXcml0dGVuIGJ5IEouVC4gQ29ua2xpbiA8anRjQG5ldGJzZC5vcmc+LgorICogUHVibGljIGRvbWFpbi4KKyAqLworCisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKworLyoKKyAqIE5PVEU6IEkndmUgdW5yb2xsZWQgdGhlIGxvb3AgZWlnaHQgdGltZXM6IGxhcmdlIGVub3VnaCB0byBtYWtlIGEKKyAqIHNpZ25pZmljYW50IGRpZmZlcmVuY2UsIGFuZCBzbWFsbCBlbm91Z2ggbm90IHRvIHRvdGFsbHkgdHJhc2ggdGhlCisgKiBjYWNoZS4KKyAqLworCitFTlRSWShzdHJuY21wKQorCXB1c2hsCSVlYngKKwltb3ZsCTgoJWVzcCksJWVheAorCW1vdmwJMTIoJWVzcCksJWVjeAorCW1vdmwJMTYoJWVzcCksJWVkeAorCXRlc3RsCSVlZHgsJWVkeAorCWptcAlMMgkJCS8qIEp1bXAgaW50byB0aGUgbG9vcCEgKi8KKworCS5hbGlnbiAyLDB4OTAKK0wxOglpbmNsCSVlYXgKKwlpbmNsCSVlY3gKKwlkZWNsCSVlZHgKK0wyOglqeglMNAkJCS8qIHN0cmluZ3MgYXJlIGVxdWFsICovCisJbW92YgkoJWVheCksJWJsCisJdGVzdGIJJWJsLCVibAorCWp6CUwzCisJY21wYgklYmwsKCVlY3gpCisJam5lCUwzCisKKwlpbmNsCSVlYXgKKwlpbmNsCSVlY3gKKwlkZWNsCSVlZHgKKwlqeglMNAorCW1vdmIJKCVlYXgpLCVibAorCXRlc3RiCSVibCwlYmwKKwlqeglMMworCWNtcGIJJWJsLCglZWN4KQorCWpuZQlMMworCisJaW5jbAklZWF4CisJaW5jbAklZWN4CisJZGVjbAklZWR4CisJanoJTDQKKwltb3ZiCSglZWF4KSwlYmwKKwl0ZXN0YgklYmwsJWJsCisJanoJTDMKKwljbXBiCSVibCwoJWVjeCkKKwlqbmUJTDMKKworCWluY2wJJWVheAorCWluY2wJJWVjeAorCWRlY2wJJWVkeAorCWp6CUw0CisJbW92YgkoJWVheCksJWJsCisJdGVzdGIJJWJsLCVibAorCWp6CUwzCisJY21wYgklYmwsKCVlY3gpCisJam5lCUwzCisKKwlpbmNsCSVlYXgKKwlpbmNsCSVlY3gKKwlkZWNsCSVlZHgKKwlqeglMNAorCW1vdmIJKCVlYXgpLCVibAorCXRlc3RiCSVibCwlYmwKKwlqeglMMworCWNtcGIJJWJsLCglZWN4KQorCWpuZQlMMworCisJaW5jbAklZWF4CisJaW5jbAklZWN4CisJZGVjbAklZWR4CisJanoJTDQKKwltb3ZiCSglZWF4KSwlYmwKKwl0ZXN0YgklYmwsJWJsCisJanoJTDMKKwljbXBiCSVibCwoJWVjeCkKKwlqbmUJTDMKKworCWluY2wJJWVheAorCWluY2wJJWVjeAorCWRlY2wJJWVkeAorCWp6CUw0CisJbW92YgkoJWVheCksJWJsCisJdGVzdGIJJWJsLCVibAorCWp6CUwzCisJY21wYgklYmwsKCVlY3gpCisJam5lCUwzCisKKwlpbmNsCSVlYXgKKwlpbmNsCSVlY3gKKwlkZWNsCSVlZHgKKwlqeglMNAorCW1vdmIJKCVlYXgpLCVibAorCXRlc3RiCSVibCwlYmwKKwlqeglMMworCWNtcGIJJWJsLCglZWN4KQorCWplCUwxCisKKwkuYWxpZ24gMiwweDkwCitMMzoJbW92emJsCSglZWF4KSwlZWF4CQkvKiB1bnNpZ25lZCBjb21wYXJpc2lvbiAqLworCW1vdnpibAkoJWVjeCksJWVjeAorCXN1YmwJJWVjeCwlZWF4CisJcG9wbAklZWJ4CisJcmV0CisJLmFsaWduIDIsMHg5MAorTDQ6CXhvcmwJJWVheCwlZWF4CisJcG9wbAklZWJ4CisJcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N0cmluZy9zdHJyY2hyLlMgYi9saWJjL2FyY2gteDg2L3N0cmluZy9zdHJyY2hyLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVlMTUzZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL3N0cnJjaHIuUwpAQCAtMCwwICsxLDMgQEAKKy8qCSRPcGVuQlNEOiBzdHJyY2hyLlMsdiAxLjMgMjAwNS8wOC8wNyAxMTozMDozOCBlc3BpZSBFeHAgJCAqLworI2RlZmluZSBTVFJSQ0hSCisjaW5jbHVkZSAicmluZGV4LlMiCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N0cmluZy9zd2FiLlMgYi9saWJjL2FyY2gteDg2L3N0cmluZy9zd2FiLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA1NTg2MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL3N3YWIuUwpAQCAtMCwwICsxLDY3IEBACisvKgkkT3BlbkJTRDogc3dhYi5TLHYgMS4zIDIwMDUvMDgvMDcgMTE6MzA6MzggZXNwaWUgRXhwICQgKi8KKy8qCisgKiBXcml0dGVuIGJ5IEouVC4gQ29ua2xpbiA8anRjQG5ldGJzZC5vcmc+LgorICogUHVibGljIGRvbWFpbi4KKyAqLworCisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKworLyoKKyAqIE9uIHRoZSBpNDg2LCB0aGlzIGNvZGUgaXMgbmVnbGlnaWJseSBmYXN0ZXIgdGhhbiB0aGUgY29kZSBnZW5lcmF0ZWQKKyAqIGJ5IGdjYyBhdCBhYm91dCBoYWxmIHRoZSBzaXplLiAgSWYgbXkgaTM4NiBkYXRhYm9vayBpcyBjb3JyZWN0LCBpdAorICogc2hvdWxkIGJlIGNvbnNpZGVyYWJseSBmYXN0ZXIgdGhhbiB0aGUgZ2NjIGNvZGUgb24gYSBpMzg2LgorICovCisKK0VOVFJZKHN3YWIpCisJcHVzaGwJJWVzaQorCXB1c2hsCSVlZGkKKwltb3ZsCTEyKCVlc3ApLCVlc2kKKwltb3ZsCTE2KCVlc3ApLCVlZGkKKwltb3ZsCTIwKCVlc3ApLCVlY3gKKworCWNsZAkJCQkjIHNldCBkaXJlY3Rpb24gZm9yd2FyZAorCisJc2hybAkkMSwlZWN4CisJdGVzdGwJJDcsJWVjeAkJCSMgY29weSBmaXJzdCBncm91cCBvZiAxIHRvIDcgd29yZHMKKwlqeglMMgkJCSMgd2hpbGUgc3dhcGluZyBhbHRlcm5hdGUgYnl0ZXMuCisJLmFsaWduCTIsMHg5MAorTDE6CWxvZHN3CisJcm9ydwkkOCwlYXgKKwlzdG9zdworCWRlY2wJJWVjeAorCXRlc3RsCSQ3LCVlY3gKKwlqbnoJTDEKKworTDI6CXNocmwJJDMsJWVjeAkJCSMgY29weSByZW1haW5kZXIgOCB3b3JkcyBhdCBhIHRpbWUKKwlqeglMNAkJCSMgd2hpbGUgc3dhcHBpbmcgYWx0ZXJuYXRlIGJ5dGVzLgorCS5hbGlnbgkyLDB4OTAKK0wzOglsb2RzdworCXJvcncJJDgsJWF4CisJc3Rvc3cKKwlsb2RzdworCXJvcncJJDgsJWF4CisJc3Rvc3cKKwlsb2RzdworCXJvcncJJDgsJWF4CisJc3Rvc3cKKwlsb2RzdworCXJvcncJJDgsJWF4CisJc3Rvc3cKKwlsb2RzdworCXJvcncJJDgsJWF4CisJc3Rvc3cKKwlsb2RzdworCXJvcncJJDgsJWF4CisJc3Rvc3cKKwlsb2RzdworCXJvcncJJDgsJWF4CisJc3Rvc3cKKwlsb2RzdworCXJvcncJJDgsJWF4CisJc3Rvc3cKKwlkZWNsCSVlY3gKKwlqbnoJTDMKKworTDQ6CXBvcGwJJWVkaQorCXBvcGwJJWVzaQorCXJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy5tayBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZkMjMwOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMubWsKQEAgLTAsMCArMSwxNzEgQEAKKyMgYXV0by1nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHksIGRvIG5vdCB0b3VjaAorc3lzY2FsbF9zcmMgOj0gCitzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9fZXhpdC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9fZXhpdF90aHJlYWQuUworc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvX19mb3JrLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL193YWl0cGlkLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3dhaXRpZC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9fX2Nsb25lLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2V4ZWN2ZS5TCitzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9zZXR1aWQuUworc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvZ2V0dWlkLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2dldGdpZC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9nZXRldWlkLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2dldGVnaWQuUworc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvZ2V0cmVzdWlkLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2dldHJlc2dpZC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9nZXR0aWQuUworc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvZ2V0Z3JvdXBzLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2dldHBnaWQuUworc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvZ2V0cHBpZC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9zZXRzaWQuUworc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvc2V0Z2lkLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3NldHJldWlkLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3NldHJlc3VpZC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9zZXRyZXNnaWQuUworc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvX19icmsuUworc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMva2lsbC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy90a2lsbC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9fX3B0cmFjZS5TCitzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9fX3NldF90aHJlYWRfYXJlYS5TCitzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9fX2dldHByaW9yaXR5LlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3NldHByaW9yaXR5LlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3NldHJsaW1pdC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9nZXRybGltaXQuUworc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvZ2V0cnVzYWdlLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3NldGdyb3Vwcy5TCitzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9zZXRwZ2lkLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3NldHJlZ2lkLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2Nocm9vdC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9wcmN0bC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9jYXBnZXQuUworc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvY2Fwc2V0LlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2FjY3QuUworc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvcmVhZC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy93cml0ZS5TCitzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9fX3ByZWFkNjQuUworc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvX19wd3JpdGU2NC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9fX29wZW4uUworc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvX19vcGVuYXQuUworc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvY2xvc2UuUworc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvbHNlZWsuUworc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvX19sbHNlZWsuUworc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvZ2V0cGlkLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL19fbW1hcDIuUworc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvbXVubWFwLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL21yZW1hcC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9tc3luYy5TCitzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9tcHJvdGVjdC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9tYWR2aXNlLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL21sb2NrLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL211bmxvY2suUworc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvbWluY29yZS5TCitzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9fX2lvY3RsLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3JlYWR2LlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3dyaXRldi5TCitzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9fX2ZjbnRsLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2Zsb2NrLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2ZjaG1vZC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9kdXAuUworc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvcGlwZS5TCitzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9kdXAyLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3NlbGVjdC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9mdHJ1bmNhdGUuUworc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvZ2V0ZGVudHMuUworc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvZnN5bmMuUworc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvZmNob3duLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3N5bmMuUworc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvX19mY250bDY0LlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2ZzdGF0ZnMuUworc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvc2VuZGZpbGUuUworc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvZnN0YXRhdC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9ta2RpcmF0LlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2ZjaG93bmF0LlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2ZjaG1vZGF0LlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3JlbmFtZWF0LlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2xpbmsuUworc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvdW5saW5rLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3VubGlua2F0LlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2NoZGlyLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL21rbm9kLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2NobW9kLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2Nob3duLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2xjaG93bi5TCitzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9tb3VudC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy91bW91bnQyLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2ZzdGF0LlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3N0YXQuUworc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvbHN0YXQuUworc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvbWtkaXIuUworc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvcmVhZGxpbmsuUworc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvcm1kaXIuUworc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvcmVuYW1lLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL19fZ2V0Y3dkLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2FjY2Vzcy5TCitzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9zeW1saW5rLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2ZjaGRpci5TCitzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy90cnVuY2F0ZS5TCitzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9fX3N0YXRmczY0LlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3BhdXNlLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2dldHRpbWVvZmRheS5TCitzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9zZXR0aW1lb2ZkYXkuUworc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvdGltZXMuUworc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvbmFub3NsZWVwLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2Nsb2NrX2dldHRpbWUuUworc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvY2xvY2tfc2V0dGltZS5TCitzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9jbG9ja19nZXRyZXMuUworc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvY2xvY2tfbmFub3NsZWVwLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2dldGl0aW1lci5TCitzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9zZXRpdGltZXIuUworc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvX190aW1lcl9jcmVhdGUuUworc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvX190aW1lcl9zZXR0aW1lLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL19fdGltZXJfZ2V0dGltZS5TCitzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9fX3RpbWVyX2dldG92ZXJydW4uUworc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvX190aW1lcl9kZWxldGUuUworc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvdXRpbWVzLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3NpZ2FjdGlvbi5TCitzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9zaWdwcm9jbWFzay5TCitzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9fX3NpZ3N1c3BlbmQuUworc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvX19ydF9zaWdhY3Rpb24uUworc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvX19ydF9zaWdwcm9jbWFzay5TCitzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9fX3J0X3NpZ3RpbWVkd2FpdC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9zaWdwZW5kaW5nLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3NvY2tldC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9iaW5kLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2Nvbm5lY3QuUworc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvbGlzdGVuLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2FjY2VwdC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9nZXRzb2NrbmFtZS5TCitzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9nZXRwZWVybmFtZS5TCitzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9zb2NrZXRwYWlyLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3NlbmR0by5TCitzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9yZWN2ZnJvbS5TCitzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9zaHV0ZG93bi5TCitzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9zZXRzb2Nrb3B0LlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2dldHNvY2tvcHQuUworc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvc2VuZG1zZy5TCitzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9yZWN2bXNnLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3NjaGVkX3NldHNjaGVkdWxlci5TCitzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF9nZXRzY2hlZHVsZXIuUworc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfeWllbGQuUworc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfc2V0cGFyYW0uUworc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfZ2V0cGFyYW0uUworc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfZ2V0X3ByaW9yaXR5X21heC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF9nZXRfcHJpb3JpdHlfbWluLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3NjaGVkX3JyX2dldF9pbnRlcnZhbC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy91bmFtZS5TCitzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9fX3dhaXQ0LlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3VtYXNrLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL19fcmVib290LlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL19fc3lzbG9nLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2luaXRfbW9kdWxlLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2RlbGV0ZV9tb2R1bGUuUworc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMva2xvZ2N0bC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9mdXRleC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9lcG9sbF9jcmVhdGUuUworc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvZXBvbGxfY3RsLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2Vwb2xsX3dhaXQuUworc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvaW5vdGlmeV9pbml0LlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2lub3RpZnlfYWRkX3dhdGNoLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2lub3RpZnlfcm1fd2F0Y2guUworc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvcG9sbC5TCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fYnJrLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fYnJrLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM1Y2M0ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19icmsuUwpAQCAtMCwwICsxLDIzIEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIF9fYnJrLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgX19icmsKKyAgICAuYWxpZ24gNAorCitfX2JyazoKKyAgICBwdXNobCAgICVlYngKKyAgICBtb3YgICAgIDgoJWVzcCksICVlYngKKyAgICBtb3ZsICAgICRfX05SX2JyaywgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fY2xvbmUuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19jbG9uZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4NjIxMjkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fY2xvbmUuUwpAQCAtMCwwICsxLDMyIEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIF9fY2xvbmUsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBfX2Nsb25lCisgICAgLmFsaWduIDQKKworX19jbG9uZToKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBwdXNobCAgICVlZHgKKyAgICBwdXNobCAgICVlc2kKKyAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAyNCglZXNwKSwgJWVjeAorICAgIG1vdiAgICAgMjgoJWVzcCksICVlZHgKKyAgICBtb3YgICAgIDMyKCVlc3ApLCAlZXNpCisgICAgbW92bCAgICAkX19OUl9jbG9uZSwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZXNpCisgICAgcG9wbCAgICAlZWR4CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fZmNudGwuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19mY250bC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3N2YwOGUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fZmNudGwuUwpAQCAtMCwwICsxLDI5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIF9fZmNudGwsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBfX2ZjbnRsCisgICAgLmFsaWduIDQKKworX19mY250bDoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBwdXNobCAgICVlZHgKKyAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAyMCglZXNwKSwgJWVjeAorICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKKyAgICBtb3ZsICAgICRfX05SX2ZjbnRsLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlZHgKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19mY250bDY0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fZmNudGw2NC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlZDQ3ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fZmNudGw2NC5TCkBAIC0wLDAgKzEsMjkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgX19mY250bDY0LCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgX19mY250bDY0CisgICAgLmFsaWduIDQKKworX19mY250bDY0OgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIHB1c2hsICAgJWVkeAorICAgIG1vdiAgICAgMTYoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWN4CisgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeAorICAgIG1vdmwgICAgJF9fTlJfZmNudGw2NCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWR4CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fZm9yay5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2ZvcmsuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjVkMWM2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2ZvcmsuUwpAQCAtMCwwICsxLDIzIEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIF9fZm9yaywgQGZ1bmN0aW9uCisgICAgLmdsb2JsIF9fZm9yaworICAgIC5hbGlnbiA0CisKK19fZm9yazoKKyAgICBwdXNobCAgICVlYngKKyAgICBtb3YgICAgIDgoJWVzcCksICVlYngKKyAgICBtb3ZsICAgICRfX05SX2ZvcmssICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2dldGN3ZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2dldGN3ZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyYmQ1MjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fZ2V0Y3dkLlMKQEAgLTAsMCArMSwyNiBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBfX2dldGN3ZCwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIF9fZ2V0Y3dkCisgICAgLmFsaWduIDQKKworX19nZXRjd2Q6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKKyAgICBtb3ZsICAgICRfX05SX2dldGN3ZCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fZ2V0cHJpb3JpdHkuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19nZXRwcmlvcml0eS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NTAzZDgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fZ2V0cHJpb3JpdHkuUwpAQCAtMCwwICsxLDI2IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIF9fZ2V0cHJpb3JpdHksIEBmdW5jdGlvbgorICAgIC5nbG9ibCBfX2dldHByaW9yaXR5CisgICAgLmFsaWduIDQKKworX19nZXRwcmlvcml0eToKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAorICAgIG1vdmwgICAgJF9fTlJfZ2V0cHJpb3JpdHksICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2lvY3RsLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19faW9jdGwuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGRlOWFiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2lvY3RsLlMKQEAgLTAsMCArMSwyOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBfX2lvY3RsLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgX19pb2N0bAorICAgIC5hbGlnbiA0CisKK19faW9jdGw6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgcHVzaGwgICAlZWR4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMjAoJWVzcCksICVlY3gKKyAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CisgICAgbW92bCAgICAkX19OUl9pb2N0bCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWR4CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fbGxzZWVrLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fbGxzZWVrLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY0OWE5NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19sbHNlZWsuUwpAQCAtMCwwICsxLDM1IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIF9fbGxzZWVrLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgX19sbHNlZWsKKyAgICAuYWxpZ24gNAorCitfX2xsc2VlazoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBwdXNobCAgICVlZHgKKyAgICBwdXNobCAgICVlc2kKKyAgICBwdXNobCAgICVlZGkKKyAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAyOCglZXNwKSwgJWVjeAorICAgIG1vdiAgICAgMzIoJWVzcCksICVlZHgKKyAgICBtb3YgICAgIDM2KCVlc3ApLCAlZXNpCisgICAgbW92ICAgICA0MCglZXNwKSwgJWVkaQorICAgIG1vdmwgICAgJF9fTlJfX2xsc2VlaywgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWRpCisgICAgcG9wbCAgICAlZXNpCisgICAgcG9wbCAgICAlZWR4CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fbW1hcDIuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19tbWFwMi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlYTU3MWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fbW1hcDIuUwpAQCAtMCwwICsxLDM4IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIF9fbW1hcDIsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBfX21tYXAyCisgICAgLmFsaWduIDQKKworX19tbWFwMjoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBwdXNobCAgICVlZHgKKyAgICBwdXNobCAgICVlc2kKKyAgICBwdXNobCAgICVlZGkKKyAgICBwdXNobCAgICVlYnAKKyAgICBtb3YgICAgIDI4KCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAzMiglZXNwKSwgJWVjeAorICAgIG1vdiAgICAgMzYoJWVzcCksICVlZHgKKyAgICBtb3YgICAgIDQwKCVlc3ApLCAlZXNpCisgICAgbW92ICAgICA0NCglZXNwKSwgJWVkaQorICAgIG1vdiAgICAgNDgoJWVzcCksICVlYnAKKyAgICBtb3ZsICAgICRfX05SX21tYXAyLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlYnAKKyAgICBwb3BsICAgICVlZGkKKyAgICBwb3BsICAgICVlc2kKKyAgICBwb3BsICAgICVlZHgKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19vcGVuLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fb3Blbi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmNmZkOTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fb3Blbi5TCkBAIC0wLDAgKzEsMjkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgX19vcGVuLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgX19vcGVuCisgICAgLmFsaWduIDQKKworX19vcGVuOgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIHB1c2hsICAgJWVkeAorICAgIG1vdiAgICAgMTYoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWN4CisgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeAorICAgIG1vdmwgICAgJF9fTlJfb3BlbiwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWR4CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fb3BlbmF0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fb3BlbmF0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWExNDkyNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19vcGVuYXQuUwpAQCAtMCwwICsxLDMyIEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIF9fb3BlbmF0LCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgX19vcGVuYXQKKyAgICAuYWxpZ24gNAorCitfX29wZW5hdDoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBwdXNobCAgICVlZHgKKyAgICBwdXNobCAgICVlc2kKKyAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAyNCglZXNwKSwgJWVjeAorICAgIG1vdiAgICAgMjgoJWVzcCksICVlZHgKKyAgICBtb3YgICAgIDMyKCVlc3ApLCAlZXNpCisgICAgbW92bCAgICAkX19OUl9vcGVuYXQsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVzaQorICAgIHBvcGwgICAgJWVkeAorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3ByZWFkNjQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19wcmVhZDY0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzExNDY3MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19wcmVhZDY0LlMKQEAgLTAsMCArMSwzNSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBfX3ByZWFkNjQsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBfX3ByZWFkNjQKKyAgICAuYWxpZ24gNAorCitfX3ByZWFkNjQ6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgcHVzaGwgICAlZWR4CisgICAgcHVzaGwgICAlZXNpCisgICAgcHVzaGwgICAlZWRpCisgICAgbW92ICAgICAyNCglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMjgoJWVzcCksICVlY3gKKyAgICBtb3YgICAgIDMyKCVlc3ApLCAlZWR4CisgICAgbW92ICAgICAzNiglZXNwKSwgJWVzaQorICAgIG1vdiAgICAgNDAoJWVzcCksICVlZGkKKyAgICBtb3ZsICAgICRfX05SX3ByZWFkNjQsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVkaQorICAgIHBvcGwgICAgJWVzaQorICAgIHBvcGwgICAgJWVkeAorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3B0cmFjZS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3B0cmFjZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlYzk1MmIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fcHRyYWNlLlMKQEAgLTAsMCArMSwzMiBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBfX3B0cmFjZSwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIF9fcHRyYWNlCisgICAgLmFsaWduIDQKKworX19wdHJhY2U6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgcHVzaGwgICAlZWR4CisgICAgcHVzaGwgICAlZXNpCisgICAgbW92ICAgICAyMCglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMjQoJWVzcCksICVlY3gKKyAgICBtb3YgICAgIDI4KCVlc3ApLCAlZWR4CisgICAgbW92ICAgICAzMiglZXNwKSwgJWVzaQorICAgIG1vdmwgICAgJF9fTlJfcHRyYWNlLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlc2kKKyAgICBwb3BsICAgICVlZHgKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19wd3JpdGU2NC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3B3cml0ZTY0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhmNjUzNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19wd3JpdGU2NC5TCkBAIC0wLDAgKzEsMzUgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgX19wd3JpdGU2NCwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIF9fcHdyaXRlNjQKKyAgICAuYWxpZ24gNAorCitfX3B3cml0ZTY0OgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIHB1c2hsICAgJWVkeAorICAgIHB1c2hsICAgJWVzaQorICAgIHB1c2hsICAgJWVkaQorICAgIG1vdiAgICAgMjQoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDI4KCVlc3ApLCAlZWN4CisgICAgbW92ICAgICAzMiglZXNwKSwgJWVkeAorICAgIG1vdiAgICAgMzYoJWVzcCksICVlc2kKKyAgICBtb3YgICAgIDQwKCVlc3ApLCAlZWRpCisgICAgbW92bCAgICAkX19OUl9wd3JpdGU2NCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWRpCisgICAgcG9wbCAgICAlZXNpCisgICAgcG9wbCAgICAlZWR4CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fcmVib290LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fcmVib290LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNiNzRlMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19yZWJvb3QuUwpAQCAtMCwwICsxLDMyIEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIF9fcmVib290LCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgX19yZWJvb3QKKyAgICAuYWxpZ24gNAorCitfX3JlYm9vdDoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBwdXNobCAgICVlZHgKKyAgICBwdXNobCAgICVlc2kKKyAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAyNCglZXNwKSwgJWVjeAorICAgIG1vdiAgICAgMjgoJWVzcCksICVlZHgKKyAgICBtb3YgICAgIDMyKCVlc3ApLCAlZXNpCisgICAgbW92bCAgICAkX19OUl9yZWJvb3QsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVzaQorICAgIHBvcGwgICAgJWVkeAorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3J0X3NpZ2FjdGlvbi5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3J0X3NpZ2FjdGlvbi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1N2Y1ODAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fcnRfc2lnYWN0aW9uLlMKQEAgLTAsMCArMSwzMiBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBfX3J0X3NpZ2FjdGlvbiwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIF9fcnRfc2lnYWN0aW9uCisgICAgLmFsaWduIDQKKworX19ydF9zaWdhY3Rpb246CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgcHVzaGwgICAlZWR4CisgICAgcHVzaGwgICAlZXNpCisgICAgbW92ICAgICAyMCglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMjQoJWVzcCksICVlY3gKKyAgICBtb3YgICAgIDI4KCVlc3ApLCAlZWR4CisgICAgbW92ICAgICAzMiglZXNwKSwgJWVzaQorICAgIG1vdmwgICAgJF9fTlJfcnRfc2lnYWN0aW9uLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlc2kKKyAgICBwb3BsICAgICVlZHgKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19ydF9zaWdwcm9jbWFzay5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3J0X3NpZ3Byb2NtYXNrLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjIzMzMxYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19ydF9zaWdwcm9jbWFzay5TCkBAIC0wLDAgKzEsMzIgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgX19ydF9zaWdwcm9jbWFzaywgQGZ1bmN0aW9uCisgICAgLmdsb2JsIF9fcnRfc2lncHJvY21hc2sKKyAgICAuYWxpZ24gNAorCitfX3J0X3NpZ3Byb2NtYXNrOgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIHB1c2hsICAgJWVkeAorICAgIHB1c2hsICAgJWVzaQorICAgIG1vdiAgICAgMjAoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWN4CisgICAgbW92ICAgICAyOCglZXNwKSwgJWVkeAorICAgIG1vdiAgICAgMzIoJWVzcCksICVlc2kKKyAgICBtb3ZsICAgICRfX05SX3J0X3NpZ3Byb2NtYXNrLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlc2kKKyAgICBwb3BsICAgICVlZHgKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19ydF9zaWd0aW1lZHdhaXQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19ydF9zaWd0aW1lZHdhaXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTE0YTg5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3J0X3NpZ3RpbWVkd2FpdC5TCkBAIC0wLDAgKzEsMzIgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgX19ydF9zaWd0aW1lZHdhaXQsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBfX3J0X3NpZ3RpbWVkd2FpdAorICAgIC5hbGlnbiA0CisKK19fcnRfc2lndGltZWR3YWl0OgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIHB1c2hsICAgJWVkeAorICAgIHB1c2hsICAgJWVzaQorICAgIG1vdiAgICAgMjAoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWN4CisgICAgbW92ICAgICAyOCglZXNwKSwgJWVkeAorICAgIG1vdiAgICAgMzIoJWVzcCksICVlc2kKKyAgICBtb3ZsICAgICRfX05SX3J0X3NpZ3RpbWVkd2FpdCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZXNpCisgICAgcG9wbCAgICAlZWR4CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fc2V0X3RocmVhZF9hcmVhLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fc2V0X3RocmVhZF9hcmVhLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QyMjA0MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19zZXRfdGhyZWFkX2FyZWEuUwpAQCAtMCwwICsxLDIzIEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIF9fc2V0X3RocmVhZF9hcmVhLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgX19zZXRfdGhyZWFkX2FyZWEKKyAgICAuYWxpZ24gNAorCitfX3NldF90aHJlYWRfYXJlYToKKyAgICBwdXNobCAgICVlYngKKyAgICBtb3YgICAgIDgoJWVzcCksICVlYngKKyAgICBtb3ZsICAgICRfX05SX3NldF90aHJlYWRfYXJlYSwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fc2lnc3VzcGVuZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3NpZ3N1c3BlbmQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGRlNzU2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3NpZ3N1c3BlbmQuUwpAQCAtMCwwICsxLDI5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIF9fc2lnc3VzcGVuZCwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIF9fc2lnc3VzcGVuZAorICAgIC5hbGlnbiA0CisKK19fc2lnc3VzcGVuZDoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBwdXNobCAgICVlZHgKKyAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAyMCglZXNwKSwgJWVjeAorICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKKyAgICBtb3ZsICAgICRfX05SX3NpZ3N1c3BlbmQsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVkeAorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3N0YXRmczY0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fc3RhdGZzNjQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDY4NWI3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3N0YXRmczY0LlMKQEAgLTAsMCArMSwyOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBfX3N0YXRmczY0LCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgX19zdGF0ZnM2NAorICAgIC5hbGlnbiA0CisKK19fc3RhdGZzNjQ6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgcHVzaGwgICAlZWR4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMjAoJWVzcCksICVlY3gKKyAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CisgICAgbW92bCAgICAkX19OUl9zdGF0ZnM2NCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWR4CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fc3lzbG9nLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fc3lzbG9nLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk4MmRiNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19zeXNsb2cuUwpAQCAtMCwwICsxLDI5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIF9fc3lzbG9nLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgX19zeXNsb2cKKyAgICAuYWxpZ24gNAorCitfX3N5c2xvZzoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBwdXNobCAgICVlZHgKKyAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAyMCglZXNwKSwgJWVjeAorICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKKyAgICBtb3ZsICAgICRfX05SX3N5c2xvZywgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWR4CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fdGltZXJfY3JlYXRlLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fdGltZXJfY3JlYXRlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZiMGNlYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX190aW1lcl9jcmVhdGUuUwpAQCAtMCwwICsxLDI5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIF9fdGltZXJfY3JlYXRlLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgX190aW1lcl9jcmVhdGUKKyAgICAuYWxpZ24gNAorCitfX3RpbWVyX2NyZWF0ZToKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBwdXNobCAgICVlZHgKKyAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAyMCglZXNwKSwgJWVjeAorICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKKyAgICBtb3ZsICAgICRfX05SX3RpbWVyX2NyZWF0ZSwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWR4CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fdGltZXJfZGVsZXRlLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fdGltZXJfZGVsZXRlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM0NGQwOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX190aW1lcl9kZWxldGUuUwpAQCAtMCwwICsxLDIzIEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIF9fdGltZXJfZGVsZXRlLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgX190aW1lcl9kZWxldGUKKyAgICAuYWxpZ24gNAorCitfX3RpbWVyX2RlbGV0ZToKKyAgICBwdXNobCAgICVlYngKKyAgICBtb3YgICAgIDgoJWVzcCksICVlYngKKyAgICBtb3ZsICAgICRfX05SX3RpbWVyX2RlbGV0ZSwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fdGltZXJfZ2V0b3ZlcnJ1bi5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3RpbWVyX2dldG92ZXJydW4uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzcxNDE1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3RpbWVyX2dldG92ZXJydW4uUwpAQCAtMCwwICsxLDIzIEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIF9fdGltZXJfZ2V0b3ZlcnJ1biwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIF9fdGltZXJfZ2V0b3ZlcnJ1bgorICAgIC5hbGlnbiA0CisKK19fdGltZXJfZ2V0b3ZlcnJ1bjoKKyAgICBwdXNobCAgICVlYngKKyAgICBtb3YgICAgIDgoJWVzcCksICVlYngKKyAgICBtb3ZsICAgICRfX05SX3RpbWVyX2dldG92ZXJydW4sICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3RpbWVyX2dldHRpbWUuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX190aW1lcl9nZXR0aW1lLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzkyM2IwYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX190aW1lcl9nZXR0aW1lLlMKQEAgLTAsMCArMSwyNiBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBfX3RpbWVyX2dldHRpbWUsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBfX3RpbWVyX2dldHRpbWUKKyAgICAuYWxpZ24gNAorCitfX3RpbWVyX2dldHRpbWU6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKKyAgICBtb3ZsICAgICRfX05SX3RpbWVyX2dldHRpbWUsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3RpbWVyX3NldHRpbWUuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX190aW1lcl9zZXR0aW1lLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FiYjdkZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX190aW1lcl9zZXR0aW1lLlMKQEAgLTAsMCArMSwzMiBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBfX3RpbWVyX3NldHRpbWUsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBfX3RpbWVyX3NldHRpbWUKKyAgICAuYWxpZ24gNAorCitfX3RpbWVyX3NldHRpbWU6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgcHVzaGwgICAlZWR4CisgICAgcHVzaGwgICAlZXNpCisgICAgbW92ICAgICAyMCglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMjQoJWVzcCksICVlY3gKKyAgICBtb3YgICAgIDI4KCVlc3ApLCAlZWR4CisgICAgbW92ICAgICAzMiglZXNwKSwgJWVzaQorICAgIG1vdmwgICAgJF9fTlJfdGltZXJfc2V0dGltZSwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZXNpCisgICAgcG9wbCAgICAlZWR4CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fd2FpdDQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX193YWl0NC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ZmZiOTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fd2FpdDQuUwpAQCAtMCwwICsxLDMyIEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIF9fd2FpdDQsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBfX3dhaXQ0CisgICAgLmFsaWduIDQKKworX193YWl0NDoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBwdXNobCAgICVlZHgKKyAgICBwdXNobCAgICVlc2kKKyAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAyNCglZXNwKSwgJWVjeAorICAgIG1vdiAgICAgMjgoJWVzcCksICVlZHgKKyAgICBtb3YgICAgIDMyKCVlc3ApLCAlZXNpCisgICAgbW92bCAgICAkX19OUl93YWl0NCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZXNpCisgICAgcG9wbCAgICAlZWR4CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19leGl0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19leGl0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFhYTQ5ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX2V4aXQuUwpAQCAtMCwwICsxLDIzIEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIF9leGl0LCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgX2V4aXQKKyAgICAuYWxpZ24gNAorCitfZXhpdDoKKyAgICBwdXNobCAgICVlYngKKyAgICBtb3YgICAgIDgoJWVzcCksICVlYngKKyAgICBtb3ZsICAgICRfX05SX2V4aXRfZ3JvdXAsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fZXhpdF90aHJlYWQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX2V4aXRfdGhyZWFkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZhYWE1YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX2V4aXRfdGhyZWFkLlMKQEAgLTAsMCArMSwyMyBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBfZXhpdF90aHJlYWQsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBfZXhpdF90aHJlYWQKKyAgICAuYWxpZ24gNAorCitfZXhpdF90aHJlYWQ6CisgICAgcHVzaGwgICAlZWJ4CisgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CisgICAgbW92bCAgICAkX19OUl9leGl0LCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX3dhaXRwaWQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX3dhaXRwaWQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTc2NDk2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fd2FpdHBpZC5TCkBAIC0wLDAgKzEsMzIgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgX3dhaXRwaWQsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBfd2FpdHBpZAorICAgIC5hbGlnbiA0CisKK193YWl0cGlkOgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIHB1c2hsICAgJWVkeAorICAgIHB1c2hsICAgJWVzaQorICAgIG1vdiAgICAgMjAoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWN4CisgICAgbW92ICAgICAyOCglZXNwKSwgJWVkeAorICAgIG1vdiAgICAgMzIoJWVzcCksICVlc2kKKyAgICBtb3ZsICAgICRfX05SX3dhaXRwaWQsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVzaQorICAgIHBvcGwgICAgJWVkeAorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9hY2NlcHQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvYWNjZXB0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NkNTZlNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvYWNjZXB0LlMKQEAgLTAsMCArMSwyNyBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBhY2NlcHQsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBhY2NlcHQKKyAgICAuYWxpZ24gNAorCithY2NlcHQ6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgbW92ICAgICAkNSwgJWVieAorICAgIG1vdiAgICAgJWVzcCwgJWVjeAorICAgIGFkZGwgICAgJDEyLCAlZWN4CisgICAgbW92bCAgICAkX19OUl9zb2NrZXRjYWxsLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvYWNjZXNzLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2FjY2Vzcy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmZjI2YTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2FjY2Vzcy5TCkBAIC0wLDAgKzEsMjYgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgYWNjZXNzLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgYWNjZXNzCisgICAgLmFsaWduIDQKKworYWNjZXNzOgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CisgICAgbW92bCAgICAkX19OUl9hY2Nlc3MsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9hY2N0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2FjY3QuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTFiNmZjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9hY2N0LlMKQEAgLTAsMCArMSwyMyBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBhY2N0LCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgYWNjdAorICAgIC5hbGlnbiA0CisKK2FjY3Q6CisgICAgcHVzaGwgICAlZWJ4CisgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CisgICAgbW92bCAgICAkX19OUl9hY2N0LCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvYmluZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9iaW5kLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE3MmNmYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvYmluZC5TCkBAIC0wLDAgKzEsMjcgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgYmluZCwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIGJpbmQKKyAgICAuYWxpZ24gNAorCitiaW5kOgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIG1vdiAgICAgJDIsICVlYngKKyAgICBtb3YgICAgICVlc3AsICVlY3gKKyAgICBhZGRsICAgICQxMiwgJWVjeAorICAgIG1vdmwgICAgJF9fTlJfc29ja2V0Y2FsbCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2NhcGdldC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jYXBnZXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjg3Y2IyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jYXBnZXQuUwpAQCAtMCwwICsxLDI2IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGNhcGdldCwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIGNhcGdldAorICAgIC5hbGlnbiA0CisKK2NhcGdldDoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAorICAgIG1vdmwgICAgJF9fTlJfY2FwZ2V0LCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvY2Fwc2V0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2NhcHNldC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNzFmNmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2NhcHNldC5TCkBAIC0wLDAgKzEsMjYgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgY2Fwc2V0LCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgY2Fwc2V0CisgICAgLmFsaWduIDQKKworY2Fwc2V0OgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CisgICAgbW92bCAgICAkX19OUl9jYXBzZXQsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jaGRpci5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jaGRpci5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlODg4NDcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2NoZGlyLlMKQEAgLTAsMCArMSwyMyBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBjaGRpciwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIGNoZGlyCisgICAgLmFsaWduIDQKKworY2hkaXI6CisgICAgcHVzaGwgICAlZWJ4CisgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CisgICAgbW92bCAgICAkX19OUl9jaGRpciwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2NobW9kLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2NobW9kLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAyM2E3ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvY2htb2QuUwpAQCAtMCwwICsxLDI2IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGNobW9kLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgY2htb2QKKyAgICAuYWxpZ24gNAorCitjaG1vZDoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAorICAgIG1vdmwgICAgJF9fTlJfY2htb2QsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jaG93bi5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jaG93bi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NDYwODgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Nob3duLlMKQEAgLTAsMCArMSwyOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBjaG93biwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIGNob3duCisgICAgLmFsaWduIDQKKworY2hvd246CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgcHVzaGwgICAlZWR4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMjAoJWVzcCksICVlY3gKKyAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CisgICAgbW92bCAgICAkX19OUl9jaG93bjMyLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlZHgKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvY2hyb290LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Nocm9vdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2MTA4N2MKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Nocm9vdC5TCkBAIC0wLDAgKzEsMjMgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgY2hyb290LCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgY2hyb290CisgICAgLmFsaWduIDQKKworY2hyb290OgorICAgIHB1c2hsICAgJWVieAorICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAorICAgIG1vdmwgICAgJF9fTlJfY2hyb290LCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvY2xvY2tfZ2V0cmVzLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Nsb2NrX2dldHJlcy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3NzQyYWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Nsb2NrX2dldHJlcy5TCkBAIC0wLDAgKzEsMjYgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgY2xvY2tfZ2V0cmVzLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgY2xvY2tfZ2V0cmVzCisgICAgLmFsaWduIDQKKworY2xvY2tfZ2V0cmVzOgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CisgICAgbW92bCAgICAkX19OUl9jbG9ja19nZXRyZXMsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jbG9ja19nZXR0aW1lLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Nsb2NrX2dldHRpbWUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmUxNGE0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jbG9ja19nZXR0aW1lLlMKQEAgLTAsMCArMSwyNiBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBjbG9ja19nZXR0aW1lLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgY2xvY2tfZ2V0dGltZQorICAgIC5hbGlnbiA0CisKK2Nsb2NrX2dldHRpbWU6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKKyAgICBtb3ZsICAgICRfX05SX2Nsb2NrX2dldHRpbWUsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jbG9ja19uYW5vc2xlZXAuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvY2xvY2tfbmFub3NsZWVwLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQwMGUzZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvY2xvY2tfbmFub3NsZWVwLlMKQEAgLTAsMCArMSwyNiBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBjbG9ja19uYW5vc2xlZXAsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBjbG9ja19uYW5vc2xlZXAKKyAgICAuYWxpZ24gNAorCitjbG9ja19uYW5vc2xlZXA6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKKyAgICBtb3ZsICAgICRfX05SX2Nsb2NrX25hbm9zbGVlcCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Nsb2NrX3NldHRpbWUuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvY2xvY2tfc2V0dGltZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4NDk1YmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Nsb2NrX3NldHRpbWUuUwpAQCAtMCwwICsxLDI2IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGNsb2NrX3NldHRpbWUsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBjbG9ja19zZXR0aW1lCisgICAgLmFsaWduIDQKKworY2xvY2tfc2V0dGltZToKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAorICAgIG1vdmwgICAgJF9fTlJfY2xvY2tfc2V0dGltZSwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Nsb3NlLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Nsb3NlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk0NGE4MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvY2xvc2UuUwpAQCAtMCwwICsxLDIzIEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGNsb3NlLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgY2xvc2UKKyAgICAuYWxpZ24gNAorCitjbG9zZToKKyAgICBwdXNobCAgICVlYngKKyAgICBtb3YgICAgIDgoJWVzcCksICVlYngKKyAgICBtb3ZsICAgICRfX05SX2Nsb3NlLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvY29ubmVjdC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jb25uZWN0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI4Y2U0ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvY29ubmVjdC5TCkBAIC0wLDAgKzEsMjcgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgY29ubmVjdCwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIGNvbm5lY3QKKyAgICAuYWxpZ24gNAorCitjb25uZWN0OgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIG1vdiAgICAgJDMsICVlYngKKyAgICBtb3YgICAgICVlc3AsICVlY3gKKyAgICBhZGRsICAgICQxMiwgJWVjeAorICAgIG1vdmwgICAgJF9fTlJfc29ja2V0Y2FsbCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2RlbGV0ZV9tb2R1bGUuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZGVsZXRlX21vZHVsZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4NjVkNmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2RlbGV0ZV9tb2R1bGUuUwpAQCAtMCwwICsxLDI2IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGRlbGV0ZV9tb2R1bGUsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBkZWxldGVfbW9kdWxlCisgICAgLmFsaWduIDQKKworZGVsZXRlX21vZHVsZToKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAorICAgIG1vdmwgICAgJF9fTlJfZGVsZXRlX21vZHVsZSwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2R1cC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9kdXAuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTVkZTc5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9kdXAuUwpAQCAtMCwwICsxLDIzIEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGR1cCwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIGR1cAorICAgIC5hbGlnbiA0CisKK2R1cDoKKyAgICBwdXNobCAgICVlYngKKyAgICBtb3YgICAgIDgoJWVzcCksICVlYngKKyAgICBtb3ZsICAgICRfX05SX2R1cCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2R1cDIuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZHVwMi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5ZjgzMjkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2R1cDIuUwpAQCAtMCwwICsxLDI2IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGR1cDIsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBkdXAyCisgICAgLmFsaWduIDQKKworZHVwMjoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAorICAgIG1vdmwgICAgJF9fTlJfZHVwMiwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Vwb2xsX2NyZWF0ZS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9lcG9sbF9jcmVhdGUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTA2YzU4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9lcG9sbF9jcmVhdGUuUwpAQCAtMCwwICsxLDIzIEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGVwb2xsX2NyZWF0ZSwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIGVwb2xsX2NyZWF0ZQorICAgIC5hbGlnbiA0CisKK2Vwb2xsX2NyZWF0ZToKKyAgICBwdXNobCAgICVlYngKKyAgICBtb3YgICAgIDgoJWVzcCksICVlYngKKyAgICBtb3ZsICAgICRfX05SX2Vwb2xsX2NyZWF0ZSwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Vwb2xsX2N0bC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9lcG9sbF9jdGwuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjJjMTEyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9lcG9sbF9jdGwuUwpAQCAtMCwwICsxLDMyIEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGVwb2xsX2N0bCwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIGVwb2xsX2N0bAorICAgIC5hbGlnbiA0CisKK2Vwb2xsX2N0bDoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBwdXNobCAgICVlZHgKKyAgICBwdXNobCAgICVlc2kKKyAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAyNCglZXNwKSwgJWVjeAorICAgIG1vdiAgICAgMjgoJWVzcCksICVlZHgKKyAgICBtb3YgICAgIDMyKCVlc3ApLCAlZXNpCisgICAgbW92bCAgICAkX19OUl9lcG9sbF9jdGwsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVzaQorICAgIHBvcGwgICAgJWVkeAorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9lcG9sbF93YWl0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Vwb2xsX3dhaXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDgxYTE0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9lcG9sbF93YWl0LlMKQEAgLTAsMCArMSwzMiBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBlcG9sbF93YWl0LCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgZXBvbGxfd2FpdAorICAgIC5hbGlnbiA0CisKK2Vwb2xsX3dhaXQ6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgcHVzaGwgICAlZWR4CisgICAgcHVzaGwgICAlZXNpCisgICAgbW92ICAgICAyMCglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMjQoJWVzcCksICVlY3gKKyAgICBtb3YgICAgIDI4KCVlc3ApLCAlZWR4CisgICAgbW92ICAgICAzMiglZXNwKSwgJWVzaQorICAgIG1vdmwgICAgJF9fTlJfZXBvbGxfd2FpdCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZXNpCisgICAgcG9wbCAgICAlZWR4CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2V4ZWN2ZS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9leGVjdmUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWIxZDc1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9leGVjdmUuUwpAQCAtMCwwICsxLDI5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGV4ZWN2ZSwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIGV4ZWN2ZQorICAgIC5hbGlnbiA0CisKK2V4ZWN2ZToKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBwdXNobCAgICVlZHgKKyAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAyMCglZXNwKSwgJWVjeAorICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKKyAgICBtb3ZsICAgICRfX05SX2V4ZWN2ZSwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWR4CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZjaGRpci5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mY2hkaXIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTY4MWJlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mY2hkaXIuUwpAQCAtMCwwICsxLDIzIEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGZjaGRpciwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIGZjaGRpcgorICAgIC5hbGlnbiA0CisKK2ZjaGRpcjoKKyAgICBwdXNobCAgICVlYngKKyAgICBtb3YgICAgIDgoJWVzcCksICVlYngKKyAgICBtb3ZsICAgICRfX05SX2ZjaGRpciwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZjaG1vZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mY2htb2QuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGY4YTk0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mY2htb2QuUwpAQCAtMCwwICsxLDI2IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGZjaG1vZCwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIGZjaG1vZAorICAgIC5hbGlnbiA0CisKK2ZjaG1vZDoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAorICAgIG1vdmwgICAgJF9fTlJfZmNobW9kLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZmNobW9kYXQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZmNobW9kYXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWI5YzZkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mY2htb2RhdC5TCkBAIC0wLDAgKzEsMzIgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgZmNobW9kYXQsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBmY2htb2RhdAorICAgIC5hbGlnbiA0CisKK2ZjaG1vZGF0OgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIHB1c2hsICAgJWVkeAorICAgIHB1c2hsICAgJWVzaQorICAgIG1vdiAgICAgMjAoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWN4CisgICAgbW92ICAgICAyOCglZXNwKSwgJWVkeAorICAgIG1vdiAgICAgMzIoJWVzcCksICVlc2kKKyAgICBtb3ZsICAgICRfX05SX2ZjaG1vZGF0LCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlc2kKKyAgICBwb3BsICAgICVlZHgKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZmNob3duLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZjaG93bi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2NDhkN2YKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZjaG93bi5TCkBAIC0wLDAgKzEsMjkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgZmNob3duLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgZmNob3duCisgICAgLmFsaWduIDQKKworZmNob3duOgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIHB1c2hsICAgJWVkeAorICAgIG1vdiAgICAgMTYoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWN4CisgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeAorICAgIG1vdmwgICAgJF9fTlJfZmNob3duMzIsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVkeAorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mY2hvd25hdC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mY2hvd25hdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiZWM4NDMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZjaG93bmF0LlMKQEAgLTAsMCArMSwzNSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBmY2hvd25hdCwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIGZjaG93bmF0CisgICAgLmFsaWduIDQKKworZmNob3duYXQ6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgcHVzaGwgICAlZWR4CisgICAgcHVzaGwgICAlZXNpCisgICAgcHVzaGwgICAlZWRpCisgICAgbW92ICAgICAyNCglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMjgoJWVzcCksICVlY3gKKyAgICBtb3YgICAgIDMyKCVlc3ApLCAlZWR4CisgICAgbW92ICAgICAzNiglZXNwKSwgJWVzaQorICAgIG1vdiAgICAgNDAoJWVzcCksICVlZGkKKyAgICBtb3ZsICAgICRfX05SX2ZjaG93bmF0LCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlZGkKKyAgICBwb3BsICAgICVlc2kKKyAgICBwb3BsICAgICVlZHgKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZmxvY2suUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZmxvY2suUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2EwOWE1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mbG9jay5TCkBAIC0wLDAgKzEsMjYgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgZmxvY2ssIEBmdW5jdGlvbgorICAgIC5nbG9ibCBmbG9jaworICAgIC5hbGlnbiA0CisKK2Zsb2NrOgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CisgICAgbW92bCAgICAkX19OUl9mbG9jaywgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZzdGF0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZzdGF0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY1ODMxNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZnN0YXQuUwpAQCAtMCwwICsxLDI2IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGZzdGF0LCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgZnN0YXQKKyAgICAuYWxpZ24gNAorCitmc3RhdDoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAorICAgIG1vdmwgICAgJF9fTlJfZnN0YXQ2NCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZzdGF0YXQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZnN0YXRhdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5MjZlOTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZzdGF0YXQuUwpAQCAtMCwwICsxLDMyIEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGZzdGF0YXQsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBmc3RhdGF0CisgICAgLmFsaWduIDQKKworZnN0YXRhdDoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBwdXNobCAgICVlZHgKKyAgICBwdXNobCAgICVlc2kKKyAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAyNCglZXNwKSwgJWVjeAorICAgIG1vdiAgICAgMjgoJWVzcCksICVlZHgKKyAgICBtb3YgICAgIDMyKCVlc3ApLCAlZXNpCisgICAgbW92bCAgICAkX19OUl9mc3RhdGF0NjQsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVzaQorICAgIHBvcGwgICAgJWVkeAorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mc3RhdGZzLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZzdGF0ZnMuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzJiM2Q0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mc3RhdGZzLlMKQEAgLTAsMCArMSwyOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBmc3RhdGZzLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgZnN0YXRmcworICAgIC5hbGlnbiA0CisKK2ZzdGF0ZnM6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgcHVzaGwgICAlZWR4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMjAoJWVzcCksICVlY3gKKyAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CisgICAgbW92bCAgICAkX19OUl9mc3RhdGZzNjQsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVkeAorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mc3luYy5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mc3luYy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5ZmQyMjUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZzeW5jLlMKQEAgLTAsMCArMSwyMyBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBmc3luYywgQGZ1bmN0aW9uCisgICAgLmdsb2JsIGZzeW5jCisgICAgLmFsaWduIDQKKworZnN5bmM6CisgICAgcHVzaGwgICAlZWJ4CisgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CisgICAgbW92bCAgICAkX19OUl9mc3luYywgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Z0cnVuY2F0ZS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mdHJ1bmNhdGUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWI3ZGY1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mdHJ1bmNhdGUuUwpAQCAtMCwwICsxLDI2IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGZ0cnVuY2F0ZSwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIGZ0cnVuY2F0ZQorICAgIC5hbGlnbiA0CisKK2Z0cnVuY2F0ZToKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAorICAgIG1vdmwgICAgJF9fTlJfZnRydW5jYXRlLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZnV0ZXguUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZnV0ZXguUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzUxMzE2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mdXRleC5TCkBAIC0wLDAgKzEsMzggQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgZnV0ZXgsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBmdXRleAorICAgIC5hbGlnbiA0CisKK2Z1dGV4OgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIHB1c2hsICAgJWVkeAorICAgIHB1c2hsICAgJWVzaQorICAgIHB1c2hsICAgJWVkaQorICAgIHB1c2hsICAgJWVicAorICAgIG1vdiAgICAgMjgoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDMyKCVlc3ApLCAlZWN4CisgICAgbW92ICAgICAzNiglZXNwKSwgJWVkeAorICAgIG1vdiAgICAgNDAoJWVzcCksICVlc2kKKyAgICBtb3YgICAgIDQ0KCVlc3ApLCAlZWRpCisgICAgbW92ICAgICA0OCglZXNwKSwgJWVicAorICAgIG1vdmwgICAgJF9fTlJfZnV0ZXgsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVicAorICAgIHBvcGwgICAgJWVkaQorICAgIHBvcGwgICAgJWVzaQorICAgIHBvcGwgICAgJWVkeAorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRkZW50cy5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRkZW50cy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4YzUyN2YKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldGRlbnRzLlMKQEAgLTAsMCArMSwyOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBnZXRkZW50cywgQGZ1bmN0aW9uCisgICAgLmdsb2JsIGdldGRlbnRzCisgICAgLmFsaWduIDQKKworZ2V0ZGVudHM6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgcHVzaGwgICAlZWR4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMjAoJWVzcCksICVlY3gKKyAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CisgICAgbW92bCAgICAkX19OUl9nZXRkZW50czY0LCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlZHgKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0ZWdpZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRlZ2lkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM0YTE0NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0ZWdpZC5TCkBAIC0wLDAgKzEsMjAgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgZ2V0ZWdpZCwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIGdldGVnaWQKKyAgICAuYWxpZ24gNAorCitnZXRlZ2lkOgorICAgIG1vdmwgICAgJF9fTlJfZ2V0ZWdpZDMyLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0ZXVpZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRldWlkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVjNzI5NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0ZXVpZC5TCkBAIC0wLDAgKzEsMjAgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgZ2V0ZXVpZCwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIGdldGV1aWQKKyAgICAuYWxpZ24gNAorCitnZXRldWlkOgorICAgIG1vdmwgICAgJF9fTlJfZ2V0ZXVpZDMyLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0Z2lkLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldGdpZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2OWQ3MjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldGdpZC5TCkBAIC0wLDAgKzEsMjAgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgZ2V0Z2lkLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgZ2V0Z2lkCisgICAgLmFsaWduIDQKKworZ2V0Z2lkOgorICAgIG1vdmwgICAgJF9fTlJfZ2V0Z2lkMzIsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRncm91cHMuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0Z3JvdXBzLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZhOTkxMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0Z3JvdXBzLlMKQEAgLTAsMCArMSwyNiBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBnZXRncm91cHMsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBnZXRncm91cHMKKyAgICAuYWxpZ24gNAorCitnZXRncm91cHM6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKKyAgICBtb3ZsICAgICRfX05SX2dldGdyb3VwczMyLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0aXRpbWVyLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldGl0aW1lci5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxNzBlYmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldGl0aW1lci5TCkBAIC0wLDAgKzEsMjYgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgZ2V0aXRpbWVyLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgZ2V0aXRpbWVyCisgICAgLmFsaWduIDQKKworZ2V0aXRpbWVyOgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CisgICAgbW92bCAgICAkX19OUl9nZXRpdGltZXIsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRwZWVybmFtZS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRwZWVybmFtZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2ZjhlYjgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHBlZXJuYW1lLlMKQEAgLTAsMCArMSwyNyBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBnZXRwZWVybmFtZSwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIGdldHBlZXJuYW1lCisgICAgLmFsaWduIDQKKworZ2V0cGVlcm5hbWU6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgbW92ICAgICAkNywgJWVieAorICAgIG1vdiAgICAgJWVzcCwgJWVjeAorICAgIGFkZGwgICAgJDEyLCAlZWN4CisgICAgbW92bCAgICAkX19OUl9zb2NrZXRjYWxsLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0cGdpZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRwZ2lkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ExZTY1OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0cGdpZC5TCkBAIC0wLDAgKzEsMjMgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgZ2V0cGdpZCwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIGdldHBnaWQKKyAgICAuYWxpZ24gNAorCitnZXRwZ2lkOgorICAgIHB1c2hsICAgJWVieAorICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAorICAgIG1vdmwgICAgJF9fTlJfZ2V0cGdpZCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHBpZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRwaWQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjQzYjg4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRwaWQuUwpAQCAtMCwwICsxLDIwIEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGdldHBpZCwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIGdldHBpZAorICAgIC5hbGlnbiA0CisKK2dldHBpZDoKKyAgICBtb3ZsICAgICRfX05SX2dldHBpZCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHBwaWQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0cHBpZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhODgyYmQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHBwaWQuUwpAQCAtMCwwICsxLDIwIEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGdldHBwaWQsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBnZXRwcGlkCisgICAgLmFsaWduIDQKKworZ2V0cHBpZDoKKyAgICBtb3ZsICAgICRfX05SX2dldHBwaWQsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRyZXNnaWQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0cmVzZ2lkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU0ZDMyYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0cmVzZ2lkLlMKQEAgLTAsMCArMSwyMCBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBnZXRyZXNnaWQsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBnZXRyZXNnaWQKKyAgICAuYWxpZ24gNAorCitnZXRyZXNnaWQ6CisgICAgbW92bCAgICAkX19OUl9nZXRyZXNnaWQzMiwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHJlc3VpZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRyZXN1aWQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDdiNWM1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRyZXN1aWQuUwpAQCAtMCwwICsxLDIwIEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGdldHJlc3VpZCwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIGdldHJlc3VpZAorICAgIC5hbGlnbiA0CisKK2dldHJlc3VpZDoKKyAgICBtb3ZsICAgICRfX05SX2dldHJlc3VpZDMyLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0cmxpbWl0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHJsaW1pdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0YzMzNGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHJsaW1pdC5TCkBAIC0wLDAgKzEsMjYgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgZ2V0cmxpbWl0LCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgZ2V0cmxpbWl0CisgICAgLmFsaWduIDQKKworZ2V0cmxpbWl0OgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CisgICAgbW92bCAgICAkX19OUl91Z2V0cmxpbWl0LCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0cnVzYWdlLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHJ1c2FnZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1MGFiNWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHJ1c2FnZS5TCkBAIC0wLDAgKzEsMjYgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgZ2V0cnVzYWdlLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgZ2V0cnVzYWdlCisgICAgLmFsaWduIDQKKworZ2V0cnVzYWdlOgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CisgICAgbW92bCAgICAkX19OUl9nZXRydXNhZ2UsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRzb2NrbmFtZS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRzb2NrbmFtZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4NGFjZDkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHNvY2tuYW1lLlMKQEAgLTAsMCArMSwyNyBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBnZXRzb2NrbmFtZSwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIGdldHNvY2tuYW1lCisgICAgLmFsaWduIDQKKworZ2V0c29ja25hbWU6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgbW92ICAgICAkNiwgJWVieAorICAgIG1vdiAgICAgJWVzcCwgJWVjeAorICAgIGFkZGwgICAgJDEyLCAlZWN4CisgICAgbW92bCAgICAkX19OUl9zb2NrZXRjYWxsLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0c29ja29wdC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRzb2Nrb3B0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTYwNjUzMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0c29ja29wdC5TCkBAIC0wLDAgKzEsMjcgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgZ2V0c29ja29wdCwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIGdldHNvY2tvcHQKKyAgICAuYWxpZ24gNAorCitnZXRzb2Nrb3B0OgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIG1vdiAgICAgJDE1LCAlZWJ4CisgICAgbW92ICAgICAlZXNwLCAlZWN4CisgICAgYWRkbCAgICAkMTIsICVlY3gKKyAgICBtb3ZsICAgICRfX05SX3NvY2tldGNhbGwsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXR0aWQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0dGlkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU4Y2I1OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0dGlkLlMKQEAgLTAsMCArMSwyMCBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBnZXR0aWQsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBnZXR0aWQKKyAgICAuYWxpZ24gNAorCitnZXR0aWQ6CisgICAgbW92bCAgICAkX19OUl9nZXR0aWQsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXR0aW1lb2ZkYXkuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0dGltZW9mZGF5LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVmZmU5MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0dGltZW9mZGF5LlMKQEAgLTAsMCArMSwyNiBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBnZXR0aW1lb2ZkYXksIEBmdW5jdGlvbgorICAgIC5nbG9ibCBnZXR0aW1lb2ZkYXkKKyAgICAuYWxpZ24gNAorCitnZXR0aW1lb2ZkYXk6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKKyAgICBtb3ZsICAgICRfX05SX2dldHRpbWVvZmRheSwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHVpZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXR1aWQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzUxMDVlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXR1aWQuUwpAQCAtMCwwICsxLDIwIEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGdldHVpZCwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIGdldHVpZAorICAgIC5hbGlnbiA0CisKK2dldHVpZDoKKyAgICBtb3ZsICAgICRfX05SX2dldHVpZDMyLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvaW5pdF9tb2R1bGUuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvaW5pdF9tb2R1bGUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTJiMDg4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9pbml0X21vZHVsZS5TCkBAIC0wLDAgKzEsMjkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgaW5pdF9tb2R1bGUsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBpbml0X21vZHVsZQorICAgIC5hbGlnbiA0CisKK2luaXRfbW9kdWxlOgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIHB1c2hsICAgJWVkeAorICAgIG1vdiAgICAgMTYoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWN4CisgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeAorICAgIG1vdmwgICAgJF9fTlJfaW5pdF9tb2R1bGUsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVkeAorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9pbm90aWZ5X2FkZF93YXRjaC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9pbm90aWZ5X2FkZF93YXRjaC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyYTEyZTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2lub3RpZnlfYWRkX3dhdGNoLlMKQEAgLTAsMCArMSwyOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBpbm90aWZ5X2FkZF93YXRjaCwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIGlub3RpZnlfYWRkX3dhdGNoCisgICAgLmFsaWduIDQKKworaW5vdGlmeV9hZGRfd2F0Y2g6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgcHVzaGwgICAlZWR4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMjAoJWVzcCksICVlY3gKKyAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CisgICAgbW92bCAgICAkX19OUl9pbm90aWZ5X2FkZF93YXRjaCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWR4CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2lub3RpZnlfaW5pdC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9pbm90aWZ5X2luaXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDE4NmM0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9pbm90aWZ5X2luaXQuUwpAQCAtMCwwICsxLDIzIEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGlub3RpZnlfaW5pdCwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIGlub3RpZnlfaW5pdAorICAgIC5hbGlnbiA0CisKK2lub3RpZnlfaW5pdDoKKyAgICBwdXNobCAgICVlYngKKyAgICBtb3YgICAgIDgoJWVzcCksICVlYngKKyAgICBtb3ZsICAgICRfX05SX2lub3RpZnlfaW5pdCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2lub3RpZnlfcm1fd2F0Y2guUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvaW5vdGlmeV9ybV93YXRjaC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5MzE4MzMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2lub3RpZnlfcm1fd2F0Y2guUwpAQCAtMCwwICsxLDI2IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGlub3RpZnlfcm1fd2F0Y2gsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBpbm90aWZ5X3JtX3dhdGNoCisgICAgLmFsaWduIDQKKworaW5vdGlmeV9ybV93YXRjaDoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAorICAgIG1vdmwgICAgJF9fTlJfaW5vdGlmeV9ybV93YXRjaCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2tpbGwuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMva2lsbC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0OTVjNTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2tpbGwuUwpAQCAtMCwwICsxLDI2IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGtpbGwsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBraWxsCisgICAgLmFsaWduIDQKKwora2lsbDoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAorICAgIG1vdmwgICAgJF9fTlJfa2lsbCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2tsb2djdGwuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMva2xvZ2N0bC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0NmM4YWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2tsb2djdGwuUwpAQCAtMCwwICsxLDI5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGtsb2djdGwsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBrbG9nY3RsCisgICAgLmFsaWduIDQKKwora2xvZ2N0bDoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBwdXNobCAgICVlZHgKKyAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAyMCglZXNwKSwgJWVjeAorICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKKyAgICBtb3ZsICAgICRfX05SX3N5c2xvZywgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWR4CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2xjaG93bi5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9sY2hvd24uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTg0YTMyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9sY2hvd24uUwpAQCAtMCwwICsxLDI5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGxjaG93biwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIGxjaG93bgorICAgIC5hbGlnbiA0CisKK2xjaG93bjoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBwdXNobCAgICVlZHgKKyAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAyMCglZXNwKSwgJWVjeAorICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKKyAgICBtb3ZsICAgICRfX05SX2xjaG93bjMyLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlZHgKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbGluay5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9saW5rLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk0NmRiZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbGluay5TCkBAIC0wLDAgKzEsMjYgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgbGluaywgQGZ1bmN0aW9uCisgICAgLmdsb2JsIGxpbmsKKyAgICAuYWxpZ24gNAorCitsaW5rOgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CisgICAgbW92bCAgICAkX19OUl9saW5rLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbGlzdGVuLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2xpc3Rlbi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMzEwY2YKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2xpc3Rlbi5TCkBAIC0wLDAgKzEsMjcgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgbGlzdGVuLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgbGlzdGVuCisgICAgLmFsaWduIDQKKworbGlzdGVuOgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIG1vdiAgICAgJDQsICVlYngKKyAgICBtb3YgICAgICVlc3AsICVlY3gKKyAgICBhZGRsICAgICQxMiwgJWVjeAorICAgIG1vdmwgICAgJF9fTlJfc29ja2V0Y2FsbCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2xzZWVrLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2xzZWVrLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGIyYzU3YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbHNlZWsuUwpAQCAtMCwwICsxLDI5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGxzZWVrLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgbHNlZWsKKyAgICAuYWxpZ24gNAorCitsc2VlazoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBwdXNobCAgICVlZHgKKyAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAyMCglZXNwKSwgJWVjeAorICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKKyAgICBtb3ZsICAgICRfX05SX2xzZWVrLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlZHgKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbHN0YXQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbHN0YXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzM5ZjMyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9sc3RhdC5TCkBAIC0wLDAgKzEsMjYgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgbHN0YXQsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBsc3RhdAorICAgIC5hbGlnbiA0CisKK2xzdGF0OgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CisgICAgbW92bCAgICAkX19OUl9sc3RhdDY0LCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbWFkdmlzZS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9tYWR2aXNlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQyM2NjMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbWFkdmlzZS5TCkBAIC0wLDAgKzEsMjkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgbWFkdmlzZSwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIG1hZHZpc2UKKyAgICAuYWxpZ24gNAorCittYWR2aXNlOgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIHB1c2hsICAgJWVkeAorICAgIG1vdiAgICAgMTYoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWN4CisgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeAorICAgIG1vdmwgICAgJF9fTlJfbWFkdmlzZSwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWR4CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21pbmNvcmUuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbWluY29yZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMDJhYzIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21pbmNvcmUuUwpAQCAtMCwwICsxLDI5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIG1pbmNvcmUsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBtaW5jb3JlCisgICAgLmFsaWduIDQKKworbWluY29yZToKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBwdXNobCAgICVlZHgKKyAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAyMCglZXNwKSwgJWVjeAorICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKKyAgICBtb3ZsICAgICRfX05SX21pbmNvcmUsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVkeAorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9ta2Rpci5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9ta2Rpci5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmMWQxNTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21rZGlyLlMKQEAgLTAsMCArMSwyNiBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBta2RpciwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIG1rZGlyCisgICAgLmFsaWduIDQKKworbWtkaXI6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKKyAgICBtb3ZsICAgICRfX05SX21rZGlyLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbWtkaXJhdC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9ta2RpcmF0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA0MDZkMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbWtkaXJhdC5TCkBAIC0wLDAgKzEsMjkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgbWtkaXJhdCwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIG1rZGlyYXQKKyAgICAuYWxpZ24gNAorCitta2RpcmF0OgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIHB1c2hsICAgJWVkeAorICAgIG1vdiAgICAgMTYoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWN4CisgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeAorICAgIG1vdmwgICAgJF9fTlJfbWtkaXJhdCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWR4CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21rbm9kLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21rbm9kLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRmMTAxMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbWtub2QuUwpAQCAtMCwwICsxLDI5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIG1rbm9kLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgbWtub2QKKyAgICAuYWxpZ24gNAorCitta25vZDoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBwdXNobCAgICVlZHgKKyAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAyMCglZXNwKSwgJWVjeAorICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKKyAgICBtb3ZsICAgICRfX05SX21rbm9kLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlZHgKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbWxvY2suUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbWxvY2suUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTMyM2QyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9tbG9jay5TCkBAIC0wLDAgKzEsMjYgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgbWxvY2ssIEBmdW5jdGlvbgorICAgIC5nbG9ibCBtbG9jaworICAgIC5hbGlnbiA0CisKK21sb2NrOgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CisgICAgbW92bCAgICAkX19OUl9tbG9jaywgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21vdW50LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21vdW50LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYyMzdkMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbW91bnQuUwpAQCAtMCwwICsxLDM1IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIG1vdW50LCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgbW91bnQKKyAgICAuYWxpZ24gNAorCittb3VudDoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBwdXNobCAgICVlZHgKKyAgICBwdXNobCAgICVlc2kKKyAgICBwdXNobCAgICVlZGkKKyAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAyOCglZXNwKSwgJWVjeAorICAgIG1vdiAgICAgMzIoJWVzcCksICVlZHgKKyAgICBtb3YgICAgIDM2KCVlc3ApLCAlZXNpCisgICAgbW92ICAgICA0MCglZXNwKSwgJWVkaQorICAgIG1vdmwgICAgJF9fTlJfbW91bnQsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVkaQorICAgIHBvcGwgICAgJWVzaQorICAgIHBvcGwgICAgJWVkeAorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9tcHJvdGVjdC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9tcHJvdGVjdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0NGQ1NjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21wcm90ZWN0LlMKQEAgLTAsMCArMSwyOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBtcHJvdGVjdCwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIG1wcm90ZWN0CisgICAgLmFsaWduIDQKKworbXByb3RlY3Q6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgcHVzaGwgICAlZWR4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMjAoJWVzcCksICVlY3gKKyAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CisgICAgbW92bCAgICAkX19OUl9tcHJvdGVjdCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWR4CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21yZW1hcC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9tcmVtYXAuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTEyNjFjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9tcmVtYXAuUwpAQCAtMCwwICsxLDMyIEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIG1yZW1hcCwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIG1yZW1hcAorICAgIC5hbGlnbiA0CisKK21yZW1hcDoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBwdXNobCAgICVlZHgKKyAgICBwdXNobCAgICVlc2kKKyAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAyNCglZXNwKSwgJWVjeAorICAgIG1vdiAgICAgMjgoJWVzcCksICVlZHgKKyAgICBtb3YgICAgIDMyKCVlc3ApLCAlZXNpCisgICAgbW92bCAgICAkX19OUl9tcmVtYXAsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVzaQorICAgIHBvcGwgICAgJWVkeAorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9tc3luYy5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9tc3luYy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4M2NlMDEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21zeW5jLlMKQEAgLTAsMCArMSwyOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBtc3luYywgQGZ1bmN0aW9uCisgICAgLmdsb2JsIG1zeW5jCisgICAgLmFsaWduIDQKKworbXN5bmM6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgcHVzaGwgICAlZWR4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMjAoJWVzcCksICVlY3gKKyAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CisgICAgbW92bCAgICAkX19OUl9tc3luYywgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWR4CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL211bmxvY2suUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbXVubG9jay5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ZWU3NWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL211bmxvY2suUwpAQCAtMCwwICsxLDI2IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIG11bmxvY2ssIEBmdW5jdGlvbgorICAgIC5nbG9ibCBtdW5sb2NrCisgICAgLmFsaWduIDQKKworbXVubG9jazoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAorICAgIG1vdmwgICAgJF9fTlJfbXVubG9jaywgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL211bm1hcC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9tdW5tYXAuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjUxODQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9tdW5tYXAuUwpAQCAtMCwwICsxLDI2IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIG11bm1hcCwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIG11bm1hcAorICAgIC5hbGlnbiA0CisKK211bm1hcDoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAorICAgIG1vdmwgICAgJF9fTlJfbXVubWFwLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbmFub3NsZWVwLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL25hbm9zbGVlcC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyNzRkNGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL25hbm9zbGVlcC5TCkBAIC0wLDAgKzEsMjYgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgbmFub3NsZWVwLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgbmFub3NsZWVwCisgICAgLmFsaWduIDQKKworbmFub3NsZWVwOgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CisgICAgbW92bCAgICAkX19OUl9uYW5vc2xlZXAsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9wYXVzZS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9wYXVzZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmZTE1NDYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3BhdXNlLlMKQEAgLTAsMCArMSwyMCBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBwYXVzZSwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIHBhdXNlCisgICAgLmFsaWduIDQKKworcGF1c2U6CisgICAgbW92bCAgICAkX19OUl9wYXVzZSwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3BpcGUuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcGlwZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxMzA5MDkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3BpcGUuUwpAQCAtMCwwICsxLDIzIEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHBpcGUsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBwaXBlCisgICAgLmFsaWduIDQKKworcGlwZToKKyAgICBwdXNobCAgICVlYngKKyAgICBtb3YgICAgIDgoJWVzcCksICVlYngKKyAgICBtb3ZsICAgICRfX05SX3BpcGUsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9wb2xsLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3BvbGwuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzMyYWY2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9wb2xsLlMKQEAgLTAsMCArMSwyOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBwb2xsLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgcG9sbAorICAgIC5hbGlnbiA0CisKK3BvbGw6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgcHVzaGwgICAlZWR4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMjAoJWVzcCksICVlY3gKKyAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CisgICAgbW92bCAgICAkX19OUl9wb2xsLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlZHgKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcHJjdGwuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcHJjdGwuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2U1ZDg5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9wcmN0bC5TCkBAIC0wLDAgKzEsMzUgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgcHJjdGwsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBwcmN0bAorICAgIC5hbGlnbiA0CisKK3ByY3RsOgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIHB1c2hsICAgJWVkeAorICAgIHB1c2hsICAgJWVzaQorICAgIHB1c2hsICAgJWVkaQorICAgIG1vdiAgICAgMjQoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDI4KCVlc3ApLCAlZWN4CisgICAgbW92ICAgICAzMiglZXNwKSwgJWVkeAorICAgIG1vdiAgICAgMzYoJWVzcCksICVlc2kKKyAgICBtb3YgICAgIDQwKCVlc3ApLCAlZWRpCisgICAgbW92bCAgICAkX19OUl9wcmN0bCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWRpCisgICAgcG9wbCAgICAlZXNpCisgICAgcG9wbCAgICAlZWR4CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3JlYWQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcmVhZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzNTQ5ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3JlYWQuUwpAQCAtMCwwICsxLDI5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHJlYWQsIEBmdW5jdGlvbgorICAgIC5nbG9ibCByZWFkCisgICAgLmFsaWduIDQKKworcmVhZDoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBwdXNobCAgICVlZHgKKyAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAyMCglZXNwKSwgJWVjeAorICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKKyAgICBtb3ZsICAgICRfX05SX3JlYWQsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVkeAorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9yZWFkbGluay5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9yZWFkbGluay5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzYzc2MzIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3JlYWRsaW5rLlMKQEAgLTAsMCArMSwyOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSByZWFkbGluaywgQGZ1bmN0aW9uCisgICAgLmdsb2JsIHJlYWRsaW5rCisgICAgLmFsaWduIDQKKworcmVhZGxpbms6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgcHVzaGwgICAlZWR4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMjAoJWVzcCksICVlY3gKKyAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CisgICAgbW92bCAgICAkX19OUl9yZWFkbGluaywgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWR4CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3JlYWR2LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3JlYWR2LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQzNTJkMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcmVhZHYuUwpAQCAtMCwwICsxLDI5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHJlYWR2LCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgcmVhZHYKKyAgICAuYWxpZ24gNAorCityZWFkdjoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBwdXNobCAgICVlZHgKKyAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAyMCglZXNwKSwgJWVjeAorICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKKyAgICBtb3ZsICAgICRfX05SX3JlYWR2LCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlZHgKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcmVjdmZyb20uUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcmVjdmZyb20uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTM4NTE4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9yZWN2ZnJvbS5TCkBAIC0wLDAgKzEsMjcgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgcmVjdmZyb20sIEBmdW5jdGlvbgorICAgIC5nbG9ibCByZWN2ZnJvbQorICAgIC5hbGlnbiA0CisKK3JlY3Zmcm9tOgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIG1vdiAgICAgJDEyLCAlZWJ4CisgICAgbW92ICAgICAlZXNwLCAlZWN4CisgICAgYWRkbCAgICAkMTIsICVlY3gKKyAgICBtb3ZsICAgICRfX05SX3NvY2tldGNhbGwsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9yZWN2bXNnLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3JlY3Ztc2cuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWU2OWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9yZWN2bXNnLlMKQEAgLTAsMCArMSwyNyBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSByZWN2bXNnLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgcmVjdm1zZworICAgIC5hbGlnbiA0CisKK3JlY3Ztc2c6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgbW92ICAgICAkMTcsICVlYngKKyAgICBtb3YgICAgICVlc3AsICVlY3gKKyAgICBhZGRsICAgICQxMiwgJWVjeAorICAgIG1vdmwgICAgJF9fTlJfc29ja2V0Y2FsbCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3JlbmFtZS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9yZW5hbWUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWFlMTE5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9yZW5hbWUuUwpAQCAtMCwwICsxLDI2IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHJlbmFtZSwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIHJlbmFtZQorICAgIC5hbGlnbiA0CisKK3JlbmFtZToKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAorICAgIG1vdmwgICAgJF9fTlJfcmVuYW1lLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcmVuYW1lYXQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcmVuYW1lYXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGJhMjEwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9yZW5hbWVhdC5TCkBAIC0wLDAgKzEsMzIgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgcmVuYW1lYXQsIEBmdW5jdGlvbgorICAgIC5nbG9ibCByZW5hbWVhdAorICAgIC5hbGlnbiA0CisKK3JlbmFtZWF0OgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIHB1c2hsICAgJWVkeAorICAgIHB1c2hsICAgJWVzaQorICAgIG1vdiAgICAgMjAoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWN4CisgICAgbW92ICAgICAyOCglZXNwKSwgJWVkeAorICAgIG1vdiAgICAgMzIoJWVzcCksICVlc2kKKyAgICBtb3ZsICAgICRfX05SX3JlbmFtZWF0LCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlc2kKKyAgICBwb3BsICAgICVlZHgKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcm1kaXIuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcm1kaXIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjRjMTBkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9ybWRpci5TCkBAIC0wLDAgKzEsMjMgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgcm1kaXIsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBybWRpcgorICAgIC5hbGlnbiA0CisKK3JtZGlyOgorICAgIHB1c2hsICAgJWVieAorICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAorICAgIG1vdmwgICAgJF9fTlJfcm1kaXIsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NjaGVkX2dldF9wcmlvcml0eV9tYXguUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmQwOWE2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4LlMKQEAgLTAsMCArMSwyMyBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzY2hlZF9nZXRfcHJpb3JpdHlfbWF4LCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgc2NoZWRfZ2V0X3ByaW9yaXR5X21heAorICAgIC5hbGlnbiA0CisKK3NjaGVkX2dldF9wcmlvcml0eV9tYXg6CisgICAgcHVzaGwgICAlZWJ4CisgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CisgICAgbW92bCAgICAkX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4LCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfZ2V0X3ByaW9yaXR5X21pbi5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF9nZXRfcHJpb3JpdHlfbWluLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY2NmVlZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfZ2V0X3ByaW9yaXR5X21pbi5TCkBAIC0wLDAgKzEsMjMgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIHNjaGVkX2dldF9wcmlvcml0eV9taW4KKyAgICAuYWxpZ24gNAorCitzY2hlZF9nZXRfcHJpb3JpdHlfbWluOgorICAgIHB1c2hsICAgJWVieAorICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAorICAgIG1vdmwgICAgJF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NjaGVkX2dldHBhcmFtLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NjaGVkX2dldHBhcmFtLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE4YmQwZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfZ2V0cGFyYW0uUwpAQCAtMCwwICsxLDI2IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHNjaGVkX2dldHBhcmFtLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgc2NoZWRfZ2V0cGFyYW0KKyAgICAuYWxpZ24gNAorCitzY2hlZF9nZXRwYXJhbToKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAorICAgIG1vdmwgICAgJF9fTlJfc2NoZWRfZ2V0cGFyYW0sICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF9nZXRzY2hlZHVsZXIuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfZ2V0c2NoZWR1bGVyLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFhNWY4YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfZ2V0c2NoZWR1bGVyLlMKQEAgLTAsMCArMSwyMyBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzY2hlZF9nZXRzY2hlZHVsZXIsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBzY2hlZF9nZXRzY2hlZHVsZXIKKyAgICAuYWxpZ24gNAorCitzY2hlZF9nZXRzY2hlZHVsZXI6CisgICAgcHVzaGwgICAlZWJ4CisgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CisgICAgbW92bCAgICAkX19OUl9zY2hlZF9nZXRzY2hlZHVsZXIsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfcnJfZ2V0X2ludGVydmFsLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThjY2RkZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfcnJfZ2V0X2ludGVydmFsLlMKQEAgLTAsMCArMSwyNiBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzY2hlZF9ycl9nZXRfaW50ZXJ2YWwsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBzY2hlZF9ycl9nZXRfaW50ZXJ2YWwKKyAgICAuYWxpZ24gNAorCitzY2hlZF9ycl9nZXRfaW50ZXJ2YWw6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKKyAgICBtb3ZsICAgICRfX05SX3NjaGVkX3JyX2dldF9pbnRlcnZhbCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NjaGVkX3NldHBhcmFtLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NjaGVkX3NldHBhcmFtLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI4NjliZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfc2V0cGFyYW0uUwpAQCAtMCwwICsxLDI2IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHNjaGVkX3NldHBhcmFtLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgc2NoZWRfc2V0cGFyYW0KKyAgICAuYWxpZ24gNAorCitzY2hlZF9zZXRwYXJhbToKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAorICAgIG1vdmwgICAgJF9fTlJfc2NoZWRfc2V0cGFyYW0sICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF9zZXRzY2hlZHVsZXIuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfc2V0c2NoZWR1bGVyLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk5YTZkMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfc2V0c2NoZWR1bGVyLlMKQEAgLTAsMCArMSwyOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzY2hlZF9zZXRzY2hlZHVsZXIsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBzY2hlZF9zZXRzY2hlZHVsZXIKKyAgICAuYWxpZ24gNAorCitzY2hlZF9zZXRzY2hlZHVsZXI6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgcHVzaGwgICAlZWR4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMjAoJWVzcCksICVlY3gKKyAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CisgICAgbW92bCAgICAkX19OUl9zY2hlZF9zZXRzY2hlZHVsZXIsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVkeAorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF95aWVsZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF95aWVsZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjZDcyODEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NjaGVkX3lpZWxkLlMKQEAgLTAsMCArMSwyMyBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzY2hlZF95aWVsZCwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIHNjaGVkX3lpZWxkCisgICAgLmFsaWduIDQKKworc2NoZWRfeWllbGQ6CisgICAgcHVzaGwgICAlZWJ4CisgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CisgICAgbW92bCAgICAkX19OUl9zY2hlZF95aWVsZCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NlbGVjdC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZWxlY3QuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzM1OWE5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZWxlY3QuUwpAQCAtMCwwICsxLDM1IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHNlbGVjdCwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIHNlbGVjdAorICAgIC5hbGlnbiA0CisKK3NlbGVjdDoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBwdXNobCAgICVlZHgKKyAgICBwdXNobCAgICVlc2kKKyAgICBwdXNobCAgICVlZGkKKyAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAyOCglZXNwKSwgJWVjeAorICAgIG1vdiAgICAgMzIoJWVzcCksICVlZHgKKyAgICBtb3YgICAgIDM2KCVlc3ApLCAlZXNpCisgICAgbW92ICAgICA0MCglZXNwKSwgJWVkaQorICAgIG1vdmwgICAgJF9fTlJfX25ld3NlbGVjdCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWRpCisgICAgcG9wbCAgICAlZXNpCisgICAgcG9wbCAgICAlZWR4CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NlbmRmaWxlLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NlbmRmaWxlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc1MmVlYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2VuZGZpbGUuUwpAQCAtMCwwICsxLDMyIEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHNlbmRmaWxlLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgc2VuZGZpbGUKKyAgICAuYWxpZ24gNAorCitzZW5kZmlsZToKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBwdXNobCAgICVlZHgKKyAgICBwdXNobCAgICVlc2kKKyAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAyNCglZXNwKSwgJWVjeAorICAgIG1vdiAgICAgMjgoJWVzcCksICVlZHgKKyAgICBtb3YgICAgIDMyKCVlc3ApLCAlZXNpCisgICAgbW92bCAgICAkX19OUl9zZW5kZmlsZSwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZXNpCisgICAgcG9wbCAgICAlZWR4CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NlbmRtc2cuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2VuZG1zZy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmMjY2MjMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NlbmRtc2cuUwpAQCAtMCwwICsxLDI3IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHNlbmRtc2csIEBmdW5jdGlvbgorICAgIC5nbG9ibCBzZW5kbXNnCisgICAgLmFsaWduIDQKKworc2VuZG1zZzoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBtb3YgICAgICQxNiwgJWVieAorICAgIG1vdiAgICAgJWVzcCwgJWVjeAorICAgIGFkZGwgICAgJDEyLCAlZWN4CisgICAgbW92bCAgICAkX19OUl9zb2NrZXRjYWxsLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2VuZHRvLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NlbmR0by5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3OWEyYmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NlbmR0by5TCkBAIC0wLDAgKzEsMjcgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgc2VuZHRvLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgc2VuZHRvCisgICAgLmFsaWduIDQKKworc2VuZHRvOgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIG1vdiAgICAgJDExLCAlZWJ4CisgICAgbW92ICAgICAlZXNwLCAlZWN4CisgICAgYWRkbCAgICAkMTIsICVlY3gKKyAgICBtb3ZsICAgICRfX05SX3NvY2tldGNhbGwsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRnaWQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0Z2lkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdmZDAyZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0Z2lkLlMKQEAgLTAsMCArMSwyMyBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzZXRnaWQsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBzZXRnaWQKKyAgICAuYWxpZ24gNAorCitzZXRnaWQ6CisgICAgcHVzaGwgICAlZWJ4CisgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CisgICAgbW92bCAgICAkX19OUl9zZXRnaWQzMiwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldGdyb3Vwcy5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRncm91cHMuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmJhYjExCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRncm91cHMuUwpAQCAtMCwwICsxLDI2IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHNldGdyb3VwcywgQGZ1bmN0aW9uCisgICAgLmdsb2JsIHNldGdyb3VwcworICAgIC5hbGlnbiA0CisKK3NldGdyb3VwczoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAorICAgIG1vdmwgICAgJF9fTlJfc2V0Z3JvdXBzMzIsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRpdGltZXIuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0aXRpbWVyLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjlkNGJjNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0aXRpbWVyLlMKQEAgLTAsMCArMSwyOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzZXRpdGltZXIsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBzZXRpdGltZXIKKyAgICAuYWxpZ24gNAorCitzZXRpdGltZXI6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgcHVzaGwgICAlZWR4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMjAoJWVzcCksICVlY3gKKyAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CisgICAgbW92bCAgICAkX19OUl9zZXRpdGltZXIsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVkeAorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRwZ2lkLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHBnaWQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjcyMzgyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRwZ2lkLlMKQEAgLTAsMCArMSwyNiBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzZXRwZ2lkLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgc2V0cGdpZAorICAgIC5hbGlnbiA0CisKK3NldHBnaWQ6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKKyAgICBtb3ZsICAgICRfX05SX3NldHBnaWQsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRwcmlvcml0eS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRwcmlvcml0eS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5ZDdhMTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHByaW9yaXR5LlMKQEAgLTAsMCArMSwyOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzZXRwcmlvcml0eSwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIHNldHByaW9yaXR5CisgICAgLmFsaWduIDQKKworc2V0cHJpb3JpdHk6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgcHVzaGwgICAlZWR4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMjAoJWVzcCksICVlY3gKKyAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CisgICAgbW92bCAgICAkX19OUl9zZXRwcmlvcml0eSwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWR4CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHJlZ2lkLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHJlZ2lkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMxMTJkZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0cmVnaWQuUwpAQCAtMCwwICsxLDI2IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHNldHJlZ2lkLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgc2V0cmVnaWQKKyAgICAuYWxpZ24gNAorCitzZXRyZWdpZDoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAorICAgIG1vdmwgICAgJF9fTlJfc2V0cmVnaWQzMiwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHJlc2dpZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRyZXNnaWQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTZjOGM5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRyZXNnaWQuUwpAQCAtMCwwICsxLDI5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHNldHJlc2dpZCwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIHNldHJlc2dpZAorICAgIC5hbGlnbiA0CisKK3NldHJlc2dpZDoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBwdXNobCAgICVlZHgKKyAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAyMCglZXNwKSwgJWVjeAorICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKKyAgICBtb3ZsICAgICRfX05SX3NldHJlc2dpZDMyLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlZHgKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0cmVzdWlkLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHJlc3VpZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4MWNiMzkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHJlc3VpZC5TCkBAIC0wLDAgKzEsMjkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgc2V0cmVzdWlkLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgc2V0cmVzdWlkCisgICAgLmFsaWduIDQKKworc2V0cmVzdWlkOgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIHB1c2hsICAgJWVkeAorICAgIG1vdiAgICAgMTYoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWN4CisgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeAorICAgIG1vdmwgICAgJF9fTlJfc2V0cmVzdWlkMzIsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVkeAorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRyZXVpZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRyZXVpZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5ZTVkNWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHJldWlkLlMKQEAgLTAsMCArMSwyNiBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzZXRyZXVpZCwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIHNldHJldWlkCisgICAgLmFsaWduIDQKKworc2V0cmV1aWQ6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKKyAgICBtb3ZsICAgICRfX05SX3NldHJldWlkMzIsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRybGltaXQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0cmxpbWl0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE2MTNjNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0cmxpbWl0LlMKQEAgLTAsMCArMSwyNiBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzZXRybGltaXQsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBzZXRybGltaXQKKyAgICAuYWxpZ24gNAorCitzZXRybGltaXQ6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKKyAgICBtb3ZsICAgICRfX05SX3NldHJsaW1pdCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHNpZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRzaWQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjMxMzgwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRzaWQuUwpAQCAtMCwwICsxLDIwIEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHNldHNpZCwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIHNldHNpZAorICAgIC5hbGlnbiA0CisKK3NldHNpZDoKKyAgICBtb3ZsICAgICRfX05SX3NldHNpZCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHNvY2tvcHQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0c29ja29wdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxYzk4NmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHNvY2tvcHQuUwpAQCAtMCwwICsxLDI3IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHNldHNvY2tvcHQsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBzZXRzb2Nrb3B0CisgICAgLmFsaWduIDQKKworc2V0c29ja29wdDoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBtb3YgICAgICQxNCwgJWVieAorICAgIG1vdiAgICAgJWVzcCwgJWVjeAorICAgIGFkZGwgICAgJDEyLCAlZWN4CisgICAgbW92bCAgICAkX19OUl9zb2NrZXRjYWxsLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0dGltZW9mZGF5LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHRpbWVvZmRheS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3N2ZhMWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHRpbWVvZmRheS5TCkBAIC0wLDAgKzEsMjYgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgc2V0dGltZW9mZGF5LCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgc2V0dGltZW9mZGF5CisgICAgLmFsaWduIDQKKworc2V0dGltZW9mZGF5OgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CisgICAgbW92bCAgICAkX19OUl9zZXR0aW1lb2ZkYXksICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXR1aWQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0dWlkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGUzMzRjMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0dWlkLlMKQEAgLTAsMCArMSwyMyBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzZXR1aWQsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBzZXR1aWQKKyAgICAuYWxpZ24gNAorCitzZXR1aWQ6CisgICAgcHVzaGwgICAlZWJ4CisgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CisgICAgbW92bCAgICAkX19OUl9zZXR1aWQzMiwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NodXRkb3duLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NodXRkb3duLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVmMDY2NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2h1dGRvd24uUwpAQCAtMCwwICsxLDI3IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHNodXRkb3duLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgc2h1dGRvd24KKyAgICAuYWxpZ24gNAorCitzaHV0ZG93bjoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBtb3YgICAgICQxMywgJWVieAorICAgIG1vdiAgICAgJWVzcCwgJWVjeAorICAgIGFkZGwgICAgJDEyLCAlZWN4CisgICAgbW92bCAgICAkX19OUl9zb2NrZXRjYWxsLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2lnYWN0aW9uLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NpZ2FjdGlvbi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxNmUzYWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NpZ2FjdGlvbi5TCkBAIC0wLDAgKzEsMjkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgc2lnYWN0aW9uLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgc2lnYWN0aW9uCisgICAgLmFsaWduIDQKKworc2lnYWN0aW9uOgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIHB1c2hsICAgJWVkeAorICAgIG1vdiAgICAgMTYoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWN4CisgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeAorICAgIG1vdmwgICAgJF9fTlJfc2lnYWN0aW9uLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlZHgKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2lncGVuZGluZy5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zaWdwZW5kaW5nLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI4MDg4NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2lncGVuZGluZy5TCkBAIC0wLDAgKzEsMjMgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgc2lncGVuZGluZywgQGZ1bmN0aW9uCisgICAgLmdsb2JsIHNpZ3BlbmRpbmcKKyAgICAuYWxpZ24gNAorCitzaWdwZW5kaW5nOgorICAgIHB1c2hsICAgJWVieAorICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAorICAgIG1vdmwgICAgJF9fTlJfc2lncGVuZGluZywgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NpZ3Byb2NtYXNrLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NpZ3Byb2NtYXNrLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJmY2Y5MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2lncHJvY21hc2suUwpAQCAtMCwwICsxLDI5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHNpZ3Byb2NtYXNrLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgc2lncHJvY21hc2sKKyAgICAuYWxpZ24gNAorCitzaWdwcm9jbWFzazoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBwdXNobCAgICVlZHgKKyAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAyMCglZXNwKSwgJWVjeAorICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKKyAgICBtb3ZsICAgICRfX05SX3NpZ3Byb2NtYXNrLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlZHgKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc29ja2V0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NvY2tldC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5YTgzNTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NvY2tldC5TCkBAIC0wLDAgKzEsMjcgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgc29ja2V0LCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgc29ja2V0CisgICAgLmFsaWduIDQKKworc29ja2V0OgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIG1vdiAgICAgJDEsICVlYngKKyAgICBtb3YgICAgICVlc3AsICVlY3gKKyAgICBhZGRsICAgICQxMiwgJWVjeAorICAgIG1vdmwgICAgJF9fTlJfc29ja2V0Y2FsbCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NvY2tldHBhaXIuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc29ja2V0cGFpci5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyMjI5ODkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NvY2tldHBhaXIuUwpAQCAtMCwwICsxLDI3IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHNvY2tldHBhaXIsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBzb2NrZXRwYWlyCisgICAgLmFsaWduIDQKKworc29ja2V0cGFpcjoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBtb3YgICAgICQ4LCAlZWJ4CisgICAgbW92ICAgICAlZXNwLCAlZWN4CisgICAgYWRkbCAgICAkMTIsICVlY3gKKyAgICBtb3ZsICAgICRfX05SX3NvY2tldGNhbGwsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zdGF0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3N0YXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTk4NGYxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zdGF0LlMKQEAgLTAsMCArMSwyNiBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzdGF0LCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgc3RhdAorICAgIC5hbGlnbiA0CisKK3N0YXQ6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKKyAgICBtb3ZsICAgICRfX05SX3N0YXQ2NCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3N5bWxpbmsuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc3ltbGluay5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0YzQyOTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3N5bWxpbmsuUwpAQCAtMCwwICsxLDI2IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHN5bWxpbmssIEBmdW5jdGlvbgorICAgIC5nbG9ibCBzeW1saW5rCisgICAgLmFsaWduIDQKKworc3ltbGluazoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAorICAgIG1vdmwgICAgJF9fTlJfc3ltbGluaywgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3N5bmMuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc3luYy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhNmE3MjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3N5bmMuUwpAQCAtMCwwICsxLDIzIEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHN5bmMsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBzeW5jCisgICAgLmFsaWduIDQKKworc3luYzoKKyAgICBwdXNobCAgICVlYngKKyAgICBtb3YgICAgIDgoJWVzcCksICVlYngKKyAgICBtb3ZsICAgICRfX05SX3N5bmMsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy90aW1lcy5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy90aW1lcy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0M2YyYmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3RpbWVzLlMKQEAgLTAsMCArMSwyMyBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSB0aW1lcywgQGZ1bmN0aW9uCisgICAgLmdsb2JsIHRpbWVzCisgICAgLmFsaWduIDQKKwordGltZXM6CisgICAgcHVzaGwgICAlZWJ4CisgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CisgICAgbW92bCAgICAkX19OUl90aW1lcywgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3RraWxsLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3RraWxsLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFmMTc0YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdGtpbGwuUwpAQCAtMCwwICsxLDI2IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHRraWxsLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgdGtpbGwKKyAgICAuYWxpZ24gNAorCit0a2lsbDoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAorICAgIG1vdmwgICAgJF9fTlJfdGtpbGwsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy90cnVuY2F0ZS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy90cnVuY2F0ZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjNjY0NmQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3RydW5jYXRlLlMKQEAgLTAsMCArMSwyNiBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSB0cnVuY2F0ZSwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIHRydW5jYXRlCisgICAgLmFsaWduIDQKKwordHJ1bmNhdGU6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKKyAgICBtb3ZsICAgICRfX05SX3RydW5jYXRlLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdW1hc2suUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdW1hc2suUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTNkOGNkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy91bWFzay5TCkBAIC0wLDAgKzEsMjMgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgdW1hc2ssIEBmdW5jdGlvbgorICAgIC5nbG9ibCB1bWFzaworICAgIC5hbGlnbiA0CisKK3VtYXNrOgorICAgIHB1c2hsICAgJWVieAorICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAorICAgIG1vdmwgICAgJF9fTlJfdW1hc2ssICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy91bW91bnQyLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3Vtb3VudDIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGI1MzU0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy91bW91bnQyLlMKQEAgLTAsMCArMSwyNiBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSB1bW91bnQyLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgdW1vdW50MgorICAgIC5hbGlnbiA0CisKK3Vtb3VudDI6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKKyAgICBtb3ZsICAgICRfX05SX3Vtb3VudDIsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy91bmFtZS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy91bmFtZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ZThiZmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3VuYW1lLlMKQEAgLTAsMCArMSwyMyBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSB1bmFtZSwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIHVuYW1lCisgICAgLmFsaWduIDQKKwordW5hbWU6CisgICAgcHVzaGwgICAlZWJ4CisgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CisgICAgbW92bCAgICAkX19OUl91bmFtZSwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3VubGluay5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy91bmxpbmsuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmU1MmJmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy91bmxpbmsuUwpAQCAtMCwwICsxLDIzIEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHVubGluaywgQGZ1bmN0aW9uCisgICAgLmdsb2JsIHVubGluaworICAgIC5hbGlnbiA0CisKK3VubGluazoKKyAgICBwdXNobCAgICVlYngKKyAgICBtb3YgICAgIDgoJWVzcCksICVlYngKKyAgICBtb3ZsICAgICRfX05SX3VubGluaywgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3VubGlua2F0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3VubGlua2F0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZmOGMxNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdW5saW5rYXQuUwpAQCAtMCwwICsxLDI5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHVubGlua2F0LCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgdW5saW5rYXQKKyAgICAuYWxpZ24gNAorCit1bmxpbmthdDoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBwdXNobCAgICVlZHgKKyAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAyMCglZXNwKSwgJWVjeAorICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKKyAgICBtb3ZsICAgICRfX05SX3VubGlua2F0LCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlZHgKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdXRpbWVzLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3V0aW1lcy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMWI1MWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3V0aW1lcy5TCkBAIC0wLDAgKzEsMjYgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgdXRpbWVzLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgdXRpbWVzCisgICAgLmFsaWduIDQKKwordXRpbWVzOgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CisgICAgbW92bCAgICAkX19OUl91dGltZXMsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy93YWl0aWQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvd2FpdGlkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE1MzI4YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvd2FpdGlkLlMKQEAgLTAsMCArMSwzNSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSB3YWl0aWQsIEBmdW5jdGlvbgorICAgIC5nbG9ibCB3YWl0aWQKKyAgICAuYWxpZ24gNAorCit3YWl0aWQ6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgcHVzaGwgICAlZWR4CisgICAgcHVzaGwgICAlZXNpCisgICAgcHVzaGwgICAlZWRpCisgICAgbW92ICAgICAyNCglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMjgoJWVzcCksICVlY3gKKyAgICBtb3YgICAgIDMyKCVlc3ApLCAlZWR4CisgICAgbW92ICAgICAzNiglZXNwKSwgJWVzaQorICAgIG1vdiAgICAgNDAoJWVzcCksICVlZGkKKyAgICBtb3ZsICAgICRfX05SX3dhaXRpZCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWRpCisgICAgcG9wbCAgICAlZXNpCisgICAgcG9wbCAgICAlZWR4CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3dyaXRlLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3dyaXRlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FhNDUwZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvd3JpdGUuUwpAQCAtMCwwICsxLDI5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHdyaXRlLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgd3JpdGUKKyAgICAuYWxpZ24gNAorCit3cml0ZToKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBwdXNobCAgICVlZHgKKyAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAyMCglZXNwKSwgJWVjeAorICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKKyAgICBtb3ZsICAgICRfX05SX3dyaXRlLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlZHgKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvd3JpdGV2LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3dyaXRldi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzZDM3MzEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3dyaXRldi5TCkBAIC0wLDAgKzEsMjkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgd3JpdGV2LCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgd3JpdGV2CisgICAgLmFsaWduIDQKKword3JpdGV2OgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIHB1c2hsICAgJWVkeAorICAgIG1vdiAgICAgMTYoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWN4CisgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeAorICAgIG1vdmwgICAgJF9fTlJfd3JpdGV2LCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlZHgKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL19fZXJybm8uYyBiL2xpYmMvYmlvbmljL19fZXJybm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjMzY2NlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvX19lcnJuby5jCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGJpb25pY190bHMuaD4KKwordm9sYXRpbGUgaW50KiAgX19lcnJubyggdm9pZCApCit7CisgIHJldHVybiAgJigodm9sYXRpbGUgaW50KilfX2dldF90bHMoKSlbVExTX1NMT1RfRVJSTk9dOworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvX19zZXRfZXJybm8uYyBiL2xpYmMvYmlvbmljL19fc2V0X2Vycm5vLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzcyZDRmNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL19fc2V0X2Vycm5vLmMKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8ZXJybm8uaD4KKworCitpbnQgX19zZXRfZXJybm8oaW50IG4pCit7CisgICAgZXJybm8gPSBuOworICAgIHJldHVybiAtMTsKK30KKworLyoKKyAqIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gc3lzY2FsbCBzdHVicywKKyAqICh0YWlsLWNhbGxlZCBpbiB0aGUgY2FzZSBvZiAwLTQgYXJnIHZlcnNpb25zKQorICovCisKK2ludCBfX3NldF9zeXNjYWxsX2Vycm5vKGludCBuKQoreworICAgICAgICAvKiBzb21lIHN5c2NhbGxzLCBtbWFwKCkgZm9yIGV4YW1wbGUsIGhhdmUgdmFsaWQgcmV0dXJuCisgICAgICAgICoqIHZhbHVlcyB0aGF0IGFyZSAibmVnYXRpdmUiLiAgU2luY2UgZXJybm8gdmFsdWVzIGFyZSBub3QKKyAgICAgICAgKiogZ3JlYXRlciB0aGFuIDEzMSBvbiBMaW51eCwgd2Ugd2lsbCBqdXN0IGNvbnNpZGVyIAorICAgICAgICAqKiBhbnl0aGluZyBzaWduaWZpY2FudGx5IG91dCBvZiByYW5nZSBhcyBub3QtYW4tZXJyb3IKKyAgICAgICAgKi8KKyAgICBpZihuID4gLTI1NikgeworICAgICAgICByZXR1cm4gX19zZXRfZXJybm8oLW4pOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBuOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL19yYW5kNDguYyBiL2xpYmMvYmlvbmljL19yYW5kNDguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDIyNzgxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvX3JhbmQ0OC5jCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTMgTWFydGluIEJpcmdtZWllcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBZb3UgbWF5IHJlZGlzdHJpYnV0ZSB1bm1vZGlmaWVkIG9yIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoaXMgc291cmNlCisgKiBjb2RlIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgYW5kIHRoZQorICogZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIHJldGFpbmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYGBhcyBpcycnLCBhbmQgY29tZXMgd2l0aCBubyB3YXJyYW50aWVzCisgKiBvZiBhbnkga2luZC4gSSBzaGFsbCBpbiBubyBldmVudCBiZSBsaWFibGUgZm9yIGFueXRoaW5nIHRoYXQgaGFwcGVucworICogdG8gYW55b25lL2FueXRoaW5nIHdoZW4gdXNpbmcgdGhpcyBzb2Z0d2FyZS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSAicmFuZDQ4LmgiCisKK3Vuc2lnbmVkIHNob3J0IF9yYW5kNDhfc2VlZFszXSA9IHsKKwlSQU5ENDhfU0VFRF8wLAorCVJBTkQ0OF9TRUVEXzEsCisJUkFORDQ4X1NFRURfMgorfTsKK3Vuc2lnbmVkIHNob3J0IF9yYW5kNDhfbXVsdFszXSA9IHsKKwlSQU5ENDhfTVVMVF8wLAorCVJBTkQ0OF9NVUxUXzEsCisJUkFORDQ4X01VTFRfMgorfTsKK3Vuc2lnbmVkIHNob3J0IF9yYW5kNDhfYWRkID0gUkFORDQ4X0FERDsKKwordm9pZAorX2RvcmFuZDQ4KHVuc2lnbmVkIHNob3J0IHhzZWVkWzNdKQoreworCXVuc2lnbmVkIGxvbmcgYWNjdTsKKwl1bnNpZ25lZCBzaG9ydCB0ZW1wWzJdOworCisJYWNjdSA9ICh1bnNpZ25lZCBsb25nKSBfcmFuZDQ4X211bHRbMF0gKiAodW5zaWduZWQgbG9uZykgeHNlZWRbMF0gKworCSAodW5zaWduZWQgbG9uZykgX3JhbmQ0OF9hZGQ7CisJdGVtcFswXSA9ICh1bnNpZ25lZCBzaG9ydCkgYWNjdTsJLyogbG93ZXIgMTYgYml0cyAqLworCWFjY3UgPj49IHNpemVvZih1bnNpZ25lZCBzaG9ydCkgKiA4OworCWFjY3UgKz0gKHVuc2lnbmVkIGxvbmcpIF9yYW5kNDhfbXVsdFswXSAqICh1bnNpZ25lZCBsb25nKSB4c2VlZFsxXSArCisJICh1bnNpZ25lZCBsb25nKSBfcmFuZDQ4X211bHRbMV0gKiAodW5zaWduZWQgbG9uZykgeHNlZWRbMF07CisJdGVtcFsxXSA9ICh1bnNpZ25lZCBzaG9ydCkgYWNjdTsJLyogbWlkZGxlIDE2IGJpdHMgKi8KKwlhY2N1ID4+PSBzaXplb2YodW5zaWduZWQgc2hvcnQpICogODsKKwlhY2N1ICs9IF9yYW5kNDhfbXVsdFswXSAqIHhzZWVkWzJdICsgX3JhbmQ0OF9tdWx0WzFdICogeHNlZWRbMV0gKyBfcmFuZDQ4X211bHRbMl0gKiB4c2VlZFswXTsKKwl4c2VlZFswXSA9IHRlbXBbMF07CisJeHNlZWRbMV0gPSB0ZW1wWzFdOworCXhzZWVkWzJdID0gKHVuc2lnbmVkIHNob3J0KSBhY2N1OworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvYXJjNHJhbmRvbS5jIGIvbGliYy9iaW9uaWMvYXJjNHJhbmRvbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3MDU4MGEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9hcmM0cmFuZG9tLmMKQEAgLTAsMCArMSwzMDggQEAKKy8qICAgICAgJE9wZW5CU0Q6IGFyYzRyYW5kb20uYyx2IDEuMTkgMjAwOC8wNi8wNCAwMDo1MDoyMyBkam0gRXhwICQgICAgICAgICovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTYsIERhdmlkIE1hemllcmVzIDxkbUB1dW4ub3JnPgorICogQ29weXJpZ2h0IChjKSAyMDA4LCBEYW1pZW4gTWlsbGVyIDxkam1Ab3BlbmJzZC5vcmc+CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworLyoKKyAqIEFyYzQgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgZm9yIE9wZW5CU0QuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzZWN0aW9uIDE3LjEgb2YgQXBwbGllZCBDcnlwdG9ncmFwaHksCisgKiBzZWNvbmQgZWRpdGlvbiwgd2hpY2ggZGVzY3JpYmVzIGEgc3RyZWFtIGNpcGhlciBhbGxlZ2VkbHkKKyAqIGNvbXBhdGlibGUgd2l0aCBSU0EgTGFicyAiUkM0IiBjaXBoZXIgKHRoZSBhY3R1YWwgZGVzY3JpcHRpb24gb2YKKyAqIHdoaWNoIGlzIGEgdHJhZGUgc2VjcmV0KS4gIFRoZSBzYW1lIGFsZ29yaXRobSBpcyB1c2VkIGFzIGEgc3RyZWFtCisgKiBjaXBoZXIgY2FsbGVkICJhcmNmb3VyIiBpbiBUYXR1IFlsb25lbidzIHNzaCBwYWNrYWdlLgorICoKKyAqIEhlcmUgdGhlIHN0cmVhbSBjaXBoZXIgaGFzIGJlZW4gbW9kaWZpZWQgYWx3YXlzIHRvIGluY2x1ZGUgdGhlIHRpbWUKKyAqIHdoZW4gaW5pdGlhbGl6aW5nIHRoZSBzdGF0ZS4gIFRoYXQgbWFrZXMgaXQgaW1wb3NzaWJsZSB0bworICogcmVnZW5lcmF0ZSB0aGUgc2FtZSByYW5kb20gc2VxdWVuY2UgdHdpY2UsIHNvIHRoaXMgY2FuJ3QgYmUgdXNlZAorICogZm9yIGVuY3J5cHRpb24sIGJ1dCB3aWxsIGdlbmVyYXRlIGdvb2QgcmFuZG9tIG51bWJlcnMuCisgKgorICogUkM0IGlzIGEgcmVnaXN0ZXJlZCB0cmFkZW1hcmsgb2YgUlNBIExhYm9yYXRvcmllcy4KKyAqLworCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgInRocmVhZF9wcml2YXRlLmgiCisKKy8qIEJJT05JQy1CRUdJTiAqLworLyogdGhpcyBsb2NrIHNob3VsZCBwcm90ZWN0IHRoZSBnbG9iYWwgdmFyaWFibGVzIGluIHRoaXMgZmlsZSAqLworc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCAgX2FyYzRfbG9jayA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7CisjZGVmaW5lICBfQVJDNF9MT0NLKCkgICAgICBwdGhyZWFkX211dGV4X2xvY2soJl9hcmM0X2xvY2spCisjZGVmaW5lICBfQVJDNF9VTkxPQ0soKSAgICBwdGhyZWFkX211dGV4X3VubG9jaygmX2FyYzRfbG9jaykKKy8qIEJJT05JQy1FTkQgKi8KKworI2lmZGVmIF9fR05VQ19fCisjZGVmaW5lIGlubGluZSBfX2lubGluZQorI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAhX19HTlVDX18gKi8KKyNkZWZpbmUgaW5saW5lCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICFfX0dOVUNfXyAqLworCitzdHJ1Y3QgYXJjNF9zdHJlYW0geworICAgICAgICB1X2ludDhfdCBpOworICAgICAgICB1X2ludDhfdCBqOworICAgICAgICB1X2ludDhfdCBzWzI1Nl07Cit9OworCitzdGF0aWMgaW50IHJzX2luaXRpYWxpemVkOworc3RhdGljIHN0cnVjdCBhcmM0X3N0cmVhbSByczsKK3N0YXRpYyBwaWRfdCBhcmM0X3N0aXJfcGlkOworc3RhdGljIGludCBhcmM0X2NvdW50OworCitzdGF0aWMgaW5saW5lIHVfaW50OF90IGFyYzRfZ2V0Ynl0ZSh2b2lkKTsKKworc3RhdGljIGlubGluZSB2b2lkCithcmM0X2luaXQodm9pZCkKK3sKKyAgICAgICAgaW50ICAgICBuOworCisgICAgICAgIGZvciAobiA9IDA7IG4gPCAyNTY7IG4rKykKKyAgICAgICAgICAgICAgICBycy5zW25dID0gbjsKKyAgICAgICAgcnMuaSA9IDA7CisgICAgICAgIHJzLmogPSAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2FyYzRfYWRkcmFuZG9tKHVfY2hhciAqZGF0LCBpbnQgZGF0bGVuKQoreworICAgICAgICBpbnQgICAgIG47CisgICAgICAgIHVfaW50OF90IHNpOworCisgICAgICAgIHJzLmktLTsKKyAgICAgICAgZm9yIChuID0gMDsgbiA8IDI1NjsgbisrKSB7CisgICAgICAgICAgICAgICAgcnMuaSA9IChycy5pICsgMSk7CisgICAgICAgICAgICAgICAgc2kgPSBycy5zW3JzLmldOworICAgICAgICAgICAgICAgIHJzLmogPSAocnMuaiArIHNpICsgZGF0W24gJSBkYXRsZW5dKTsKKyAgICAgICAgICAgICAgICBycy5zW3JzLmldID0gcnMuc1tycy5qXTsKKyAgICAgICAgICAgICAgICBycy5zW3JzLmpdID0gc2k7CisgICAgICAgIH0KKyAgICAgICAgcnMuaiA9IHJzLmk7Cit9CisKK3N0YXRpYyB2b2lkCithcmM0X3N0aXIodm9pZCkKK3sKKyNpZiAxICAvKiBCSU9OSUMtQkVHSU4gKi8KKwlpbnQgICAgIGksIGZkOworCXVuaW9uIHsKKwkJc3RydWN0IHRpbWV2YWwgdHY7CisJCXVfaW50IHJuZFsxMjggLyBzaXplb2YodV9pbnQpXTsKKwl9ICAgICAgIHJkYXQ7CisJaW50CW47CisKKyAgICAgICAgaWYgKCFyc19pbml0aWFsaXplZCkgeworICAgICAgICAgICAgICAgIGFyYzRfaW5pdCgpOworICAgICAgICAgICAgICAgIHJzX2luaXRpYWxpemVkID0gMTsKKyAgICAgICAgfQorCisJZmQgPSBvcGVuKCIvZGV2L3VyYW5kb20iLCBPX1JET05MWSk7CisJaWYgKGZkICE9IC0xKSB7CisJCXJlYWQoZmQsIHJkYXQucm5kLCBzaXplb2YocmRhdC5ybmQpKTsKKwkJY2xvc2UoZmQpOworCX0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisJICAgIC8qIGZkIDwgMCA/ICBBaCwgd2hhdCB0aGUgaGVjay4gV2UnbGwganVzdCB0YWtlCisJICAgICAqIHdoYXRldmVyIHdhcyBvbiB0aGUgc3RhY2suIGp1c3QgYWRkIGEgbGl0dGxlIG1vcmUKKyAgICAgICAgICAgICAqIHRpbWUtYmFzZWQgcmFuZG9tbmVzcyB0aG91Z2gKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgZ2V0dGltZW9mZGF5KCZyZGF0LnR2LCBOVUxMKTsKKyAgICAgICAgfQorCisgICAgICAgIGFyYzRfc3Rpcl9waWQgPSBnZXRwaWQoKTsKKwlhcmM0X2FkZHJhbmRvbSgodm9pZCAqKSAmcmRhdCwgc2l6ZW9mKHJkYXQpKTsKKyNlbHNlICAvKiBCSU9OSUMtRU5EICovCisgICAgICAgIGludCAgICAgaSwgbWliWzJdOworICAgICAgICBzaXplX3QgICAgICAgIGxlbjsKKyAgICAgICAgdV9jaGFyIHJuZFsxMjhdOworCisgICAgICAgIGlmICghcnNfaW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgICAgICAgICBhcmM0X2luaXQoKTsKKyAgICAgICAgICAgICAgICByc19pbml0aWFsaXplZCA9IDE7CisgICAgICAgIH0KKworICAgICAgICBtaWJbMF0gPSBDVExfS0VSTjsKKyAgICAgICAgbWliWzFdID0gS0VSTl9BUk5EOworCisgICAgICAgIGxlbiA9IHNpemVvZihybmQpOworICAgICAgICBzeXNjdGwobWliLCAyLCBybmQsICZsZW4sIE5VTEwsIDApOworCisgICAgICAgIGFyYzRfc3Rpcl9waWQgPSBnZXRwaWQoKTsKKyAgICAgICAgYXJjNF9hZGRyYW5kb20ocm5kLCBzaXplb2Yocm5kKSk7CisjZW5kaWYKKyAgICAgICAgLyoKKyAgICAgICAgICogRGlzY2FyZCBlYXJseSBrZXlzdHJlYW0sIGFzIHBlciByZWNvbW1lbmRhdGlvbnMgaW46CisgICAgICAgICAqIGh0dHA6Ly93d3cud2lzZG9tLndlaXptYW5uLmFjLmlsL35pdHNpay9SQzQvUGFwZXJzL1JjNF9rc2EucHMKKyAgICAgICAgICovCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKKyAgICAgICAgICAgICAgICAodm9pZClhcmM0X2dldGJ5dGUoKTsKKyAgICAgICAgYXJjNF9jb3VudCA9IDE2MDAwMDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdV9pbnQ4X3QKK2FyYzRfZ2V0Ynl0ZSh2b2lkKQoreworICAgICAgICB1X2ludDhfdCBzaSwgc2o7CisKKyAgICAgICAgcnMuaSA9IChycy5pICsgMSk7CisgICAgICAgIHNpID0gcnMuc1tycy5pXTsKKyAgICAgICAgcnMuaiA9IChycy5qICsgc2kpOworICAgICAgICBzaiA9IHJzLnNbcnMual07CisgICAgICAgIHJzLnNbcnMuaV0gPSBzajsKKyAgICAgICAgcnMuc1tycy5qXSA9IHNpOworICAgICAgICByZXR1cm4gKHJzLnNbKHNpICsgc2opICYgMHhmZl0pOworfQorCit1X2ludDhfdAorX19hcmM0X2dldGJ5dGUodm9pZCkKK3sKKyAgICAgICAgdV9pbnQ4X3QgdmFsOworCisgICAgICAgIF9BUkM0X0xPQ0soKTsKKyAgICAgICAgaWYgKC0tYXJjNF9jb3VudCA9PSAwIHx8ICFyc19pbml0aWFsaXplZCkKKyAgICAgICAgICAgICAgICBhcmM0X3N0aXIoKTsKKyAgICAgICAgdmFsID0gYXJjNF9nZXRieXRlKCk7CisgICAgICAgIF9BUkM0X1VOTE9DSygpOworICAgICAgICByZXR1cm4gdmFsOworfQorCitzdGF0aWMgaW5saW5lIHVfaW50MzJfdAorYXJjNF9nZXR3b3JkKHZvaWQpCit7CisgICAgICAgIHVfaW50MzJfdCB2YWw7CisgICAgICAgIHZhbCA9IGFyYzRfZ2V0Ynl0ZSgpIDw8IDI0OworICAgICAgICB2YWwgfD0gYXJjNF9nZXRieXRlKCkgPDwgMTY7CisgICAgICAgIHZhbCB8PSBhcmM0X2dldGJ5dGUoKSA8PCA4OworICAgICAgICB2YWwgfD0gYXJjNF9nZXRieXRlKCk7CisgICAgICAgIHJldHVybiB2YWw7Cit9CisKK3ZvaWQKK2FyYzRyYW5kb21fc3Rpcih2b2lkKQoreworICAgICAgICBfQVJDNF9MT0NLKCk7CisgICAgICAgIGFyYzRfc3RpcigpOworICAgICAgICBfQVJDNF9VTkxPQ0soKTsKK30KKwordm9pZAorYXJjNHJhbmRvbV9hZGRyYW5kb20odV9jaGFyICpkYXQsIGludCBkYXRsZW4pCit7CisgICAgICAgIF9BUkM0X0xPQ0soKTsKKyAgICAgICAgaWYgKCFyc19pbml0aWFsaXplZCkKKyAgICAgICAgICAgICAgICBhcmM0X3N0aXIoKTsKKyAgICAgICAgYXJjNF9hZGRyYW5kb20oZGF0LCBkYXRsZW4pOworICAgICAgICBfQVJDNF9VTkxPQ0soKTsKK30KKwordV9pbnQzMl90CithcmM0cmFuZG9tKHZvaWQpCit7CisgICAgICAgIHVfaW50MzJfdCB2YWw7CisgICAgICAgIF9BUkM0X0xPQ0soKTsKKyAgICAgICAgYXJjNF9jb3VudCAtPSA0OworICAgICAgICBpZiAoYXJjNF9jb3VudCA8PSAwIHx8ICFyc19pbml0aWFsaXplZCB8fCBhcmM0X3N0aXJfcGlkICE9IGdldHBpZCgpKQorICAgICAgICAgICAgICAgIGFyYzRfc3RpcigpOworICAgICAgICB2YWwgPSBhcmM0X2dldHdvcmQoKTsKKyAgICAgICAgX0FSQzRfVU5MT0NLKCk7CisgICAgICAgIHJldHVybiB2YWw7Cit9CisKK3ZvaWQKK2FyYzRyYW5kb21fYnVmKHZvaWQgKl9idWYsIHNpemVfdCBuKQoreworICAgICAgICB1X2NoYXIgKmJ1ZiA9ICh1X2NoYXIgKilfYnVmOworICAgICAgICBfQVJDNF9MT0NLKCk7CisgICAgICAgIGlmICghcnNfaW5pdGlhbGl6ZWQgfHwgYXJjNF9zdGlyX3BpZCAhPSBnZXRwaWQoKSkKKyAgICAgICAgICAgICAgICBhcmM0X3N0aXIoKTsKKyAgICAgICAgd2hpbGUgKG4tLSkgeworICAgICAgICAgICAgICAgIGlmICgtLWFyYzRfY291bnQgPD0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyYzRfc3RpcigpOworICAgICAgICAgICAgICAgIGJ1ZltuXSA9IGFyYzRfZ2V0Ynl0ZSgpOworICAgICAgICB9CisgICAgICAgIF9BUkM0X1VOTE9DSygpOworfQorCisvKgorICogQ2FsY3VsYXRlIGEgdW5pZm9ybWx5IGRpc3RyaWJ1dGVkIHJhbmRvbSBudW1iZXIgbGVzcyB0aGFuIHVwcGVyX2JvdW5kCisgKiBhdm9pZGluZyAibW9kdWxvIGJpYXMiLgorICoKKyAqIFVuaWZvcm1pdHkgaXMgYWNoaWV2ZWQgYnkgZ2VuZXJhdGluZyBuZXcgcmFuZG9tIG51bWJlcnMgdW50aWwgdGhlIG9uZQorICogcmV0dXJuZWQgaXMgb3V0c2lkZSB0aGUgcmFuZ2UgWzAsIDIqKjMyICUgdXBwZXJfYm91bmQpLiAgVGhpcworICogZ3VhcmFudGVlcyB0aGUgc2VsZWN0ZWQgcmFuZG9tIG51bWJlciB3aWxsIGJlIGluc2lkZQorICogWzIqKjMyICUgdXBwZXJfYm91bmQsIDIqKjMyKSB3aGljaCBtYXBzIGJhY2sgdG8gWzAsIHVwcGVyX2JvdW5kKQorICogYWZ0ZXIgcmVkdWN0aW9uIG1vZHVsbyB1cHBlcl9ib3VuZC4KKyAqLwordV9pbnQzMl90CithcmM0cmFuZG9tX3VuaWZvcm0odV9pbnQzMl90IHVwcGVyX2JvdW5kKQoreworICAgICAgICB1X2ludDMyX3QgciwgbWluOworCisgICAgICAgIGlmICh1cHBlcl9ib3VuZCA8IDIpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisKKyNpZiAoVUxPTkdfTUFYID4gMHhmZmZmZmZmZlVMKQorICAgICAgICBtaW4gPSAweDEwMDAwMDAwMFVMICUgdXBwZXJfYm91bmQ7CisjZWxzZQorICAgICAgICAvKiBDYWxjdWxhdGUgKDIqKjMyICUgdXBwZXJfYm91bmQpIGF2b2lkaW5nIDY0LWJpdCBtYXRoICovCisgICAgICAgIGlmICh1cHBlcl9ib3VuZCA+IDB4ODAwMDAwMDApCisgICAgICAgICAgICAgICAgbWluID0gMSArIH51cHBlcl9ib3VuZDsgICAgICAgICAgICAgICAgLyogMioqMzIgLSB1cHBlcl9ib3VuZCAqLworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAvKiAoMioqMzIgLSAoeCAqIDIpKSAlIHggPT0gMioqMzIgJSB4IHdoZW4geCA8PSAyKiozMSAqLworICAgICAgICAgICAgICAgIG1pbiA9ICgoMHhmZmZmZmZmZiAtICh1cHBlcl9ib3VuZCAqIDIpKSArIDEpICUgdXBwZXJfYm91bmQ7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIC8qCisgICAgICAgICAqIFRoaXMgY291bGQgdGhlb3JldGljYWxseSBsb29wIGZvcmV2ZXIgYnV0IGVhY2ggcmV0cnkgaGFzCisgICAgICAgICAqIHAgPiAwLjUgKHdvcnN0IGNhc2UsIHVzdWFsbHkgZmFyIGJldHRlcikgb2Ygc2VsZWN0aW5nIGEKKyAgICAgICAgICogbnVtYmVyIGluc2lkZSB0aGUgcmFuZ2Ugd2UgbmVlZCwgc28gaXQgc2hvdWxkIHJhcmVseSBuZWVkCisgICAgICAgICAqIHRvIHJlLXJvbGwuCisgICAgICAgICAqLworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICAgICAgciA9IGFyYzRyYW5kb20oKTsKKyAgICAgICAgICAgICAgICBpZiAociA+PSBtaW4pCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByICUgdXBwZXJfYm91bmQ7Cit9CisKKyNpZiAwCisvKi0tLS0tLS0tIFRlc3QgY29kZSBmb3IgaTM4NiAtLS0tLS0tLSovCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxtYWNoaW5lL3BjdHIuaD4KK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgICAgIGNvbnN0IGludCBpdGVyID0gMTAwMDAwMDsKKyAgICAgICAgaW50ICAgICBpOworICAgICAgICBwY3RydmFsIHY7CisKKyAgICAgICAgdiA9IHJkdHNjKCk7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpdGVyOyBpKyspCisgICAgICAgICAgICAgICAgYXJjNHJhbmRvbSgpOworICAgICAgICB2ID0gcmR0c2MoKSAtIHY7CisgICAgICAgIHYgLz0gaXRlcjsKKworICAgICAgICBwcmludGYoIiVxZCBjeWNsZXNcbiIsIHYpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9hdG9taWNzX3g4Ni5jIGIvbGliYy9iaW9uaWMvYXRvbWljc194ODYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDYwZjRmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvYXRvbWljc194ODYuYwpAQCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8c3lzL2F0b21pY3MuaD4KKworI2RlZmluZSBGVVRFWF9TWVNDQUxMIDI0MAorI2RlZmluZSBGVVRFWF9XQUlUIDAKKyNkZWZpbmUgRlVURVhfV0FLRSAxCisKK2ludCBfX2Z1dGV4X3dhaXQodm9sYXRpbGUgdm9pZCAqZnR4LCBpbnQgdmFsKQoreworICAgIGludCByZXQ7CisgICAgYXNtIHZvbGF0aWxlICgKKyAgICAgICAgImludCAkMHg4MDsiCisgICAgICAgIDogIj1hIiAocmV0KQorICAgICAgICA6ICIwIiAoRlVURVhfU1lTQ0FMTCksCisgICAgICAgICAgImIiIChmdHgpLAorICAgICAgICAgICJjIiAoRlVURVhfV0FJVCksCisgICAgICAgICAgImQiICh2YWwpLAorICAgICAgICAgICJTIiAoMCkKKyAgICApOworICAgIHJldHVybiByZXQ7Cit9CisKK2ludCBfX2Z1dGV4X3dha2Uodm9sYXRpbGUgdm9pZCAqZnR4LCBpbnQgY291bnQpCit7CisgICAgaW50IHJldDsKKyAgICBhc20gdm9sYXRpbGUgKAorICAgICAgICAiaW50ICQweDgwOyIKKyAgICAgICAgOiAiPWEiIChyZXQpCisgICAgICAgIDogIjAiIChGVVRFWF9TWVNDQUxMKSwKKyAgICAgICAgICAiYiIgKGZ0eCksCisgICAgICAgICAgImMiIChGVVRFWF9XQUtFKSwKKyAgICAgICAgICAiZCIgKGNvdW50KQorICAgICk7CisgICAgcmV0dXJuIHJldDsKK30KKworaW50IF9fYXRvbWljX2NtcHhjaGcoaW50IG9sZCwgaW50IG5ldywgdm9sYXRpbGUgaW50KiBhZGRyKSB7CisgICAgaW50IHhjaGc7CisgICAgYXNtIHZvbGF0aWxlICgKKyAgICAgICAgImxvY2s7IgorICAgICAgICAiY21weGNoZyAlJWVjeCwgKCUlZWR4KTsiCisgICAgICAgICJzZXRuZSAlJWFsOyIKKyAgICAgICAgOiAiPWEiICh4Y2hnKQorICAgICAgICA6ICJhIiAob2xkKSwKKyAgICAgICAgICAiYyIgKG5ldyksCisgICAgICAgICAgImQiIChhZGRyKQorICAgICk7CisgICAgcmV0dXJuIHhjaGc7Cit9CisKK2ludCBfX2F0b21pY19zd2FwKGludCBuZXcsIHZvbGF0aWxlIGludCogYWRkcikgeworICAgIGludCBvbGQ7CisgICAgYXNtIHZvbGF0aWxlICgKKyAgICAgICAgImxvY2s7IgorICAgICAgICAieGNoZyAlJWVjeCwgKCUlZWR4KTsiCisgICAgICAgIDogIj1jIiAob2xkKQorICAgICAgICA6ICJjIiAobmV3KSwKKyAgICAgICAgICAiZCIgKGFkZHIpCisgICAgKTsKKyAgICByZXR1cm4gb2xkOworfQorCitpbnQgX19hdG9taWNfZGVjKHZvbGF0aWxlIGludCogYWRkcikgeworICAgIGludCBvbGQ7CisgICAgZG8geworICAgICAgICBvbGQgPSAqYWRkcjsKKyAgICB9IHdoaWxlIChhdG9taWNfY21weGNoZyhvbGQsIG9sZC0xLCBhZGRyKSk7CisgICAgcmV0dXJuIG9sZDsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2Jhc2VuYW1lLmMgYi9saWJjL2Jpb25pYy9iYXNlbmFtZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhYWFlNTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9iYXNlbmFtZS5jCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8bGliZ2VuLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisKK2NoYXIqCitiYXNlbmFtZShjb25zdCBjaGFyKiAgcGF0aCkKK3sKKyAgICBzdGF0aWMgY2hhciogIGJuYW1lID0gTlVMTDsKKyAgICBpbnQgICAgICAgICAgIHJldDsKKworICAgIGlmIChibmFtZSA9PSBOVUxMKSB7CisgICAgICAgIGJuYW1lID0gKGNoYXIgKiltYWxsb2MoTUFYUEFUSExFTik7CisgICAgICAgIGlmIChibmFtZSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuKE5VTEwpOworICAgIH0KKyAgICByZXQgPSBiYXNlbmFtZV9yKHBhdGgsIGJuYW1lLCBNQVhQQVRITEVOKTsKKyAgICByZXR1cm4gKHJldCA8IDApID8gTlVMTCA6IGJuYW1lOworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvYmFzZW5hbWVfci5jIGIvbGliYy9iaW9uaWMvYmFzZW5hbWVfci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5MDgwZjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9iYXNlbmFtZV9yLmMKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPGxpYmdlbi5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisKK2ludAorYmFzZW5hbWVfcihjb25zdCBjaGFyKiBwYXRoLCBjaGFyKiAgYnVmZmVyLCBzaXplX3QgIGJ1ZmZsZW4pCit7CisgICAgY29uc3QgY2hhciAqZW5kcCwgKnN0YXJ0cDsKKyAgICBpbnQgICAgICAgICBsZW4sIHJlc3VsdDsKKyAgICBjaGFyICAgICAgICB0ZW1wWzJdOworCisgICAgLyogRW1wdHkgb3IgTlVMTCBzdHJpbmcgZ2V0cyB0cmVhdGVkIGFzICIuIiAqLworICAgIGlmIChwYXRoID09IE5VTEwgfHwgKnBhdGggPT0gJ1wwJykgeworICAgICAgICBzdGFydHAgID0gIi4iOworICAgICAgICBsZW4gICAgID0gMTsKKyAgICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIC8qIFN0cmlwIHRyYWlsaW5nIHNsYXNoZXMgKi8KKyAgICBlbmRwID0gcGF0aCArIHN0cmxlbihwYXRoKSAtIDE7CisgICAgd2hpbGUgKGVuZHAgPiBwYXRoICYmICplbmRwID09ICcvJykKKyAgICAgICAgZW5kcC0tOworCisgICAgLyogQWxsIHNsYXNoZXMgYmVjb21lcyAiLyIgKi8KKyAgICBpZiAoZW5kcCA9PSBwYXRoICYmICplbmRwID09ICcvJykgeworICAgICAgICBzdGFydHAgPSAiLyI7CisgICAgICAgIGxlbiAgICA9IDE7CisgICAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICAvKiBGaW5kIHRoZSBzdGFydCBvZiB0aGUgYmFzZSAqLworICAgIHN0YXJ0cCA9IGVuZHA7CisgICAgd2hpbGUgKHN0YXJ0cCA+IHBhdGggJiYgKihzdGFydHAgLSAxKSAhPSAnLycpCisgICAgICAgIHN0YXJ0cC0tOworCisgICAgbGVuID0gZW5kcCAtIHN0YXJ0cCArMTsKKworRXhpdDoKKyAgICByZXN1bHQgPSBsZW47CisgICAgaWYgKGJ1ZmZlciA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIGlmIChsZW4gPiAoaW50KWJ1ZmZsZW4tMSkgeworICAgICAgICBsZW4gICAgPSAoaW50KWJ1ZmZsZW4tMTsKKyAgICAgICAgcmVzdWx0ID0gLTE7CisgICAgICAgIGVycm5vICA9IEVSQU5HRTsKKyAgICB9CisKKyAgICBpZiAobGVuID49IDApIHsKKyAgICAgICAgbWVtY3B5KCBidWZmZXIsIHN0YXJ0cCwgbGVuICk7CisgICAgICAgIGJ1ZmZlcltsZW5dID0gMDsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2Rpcm5hbWUuYyBiL2xpYmMvYmlvbmljL2Rpcm5hbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTFkYjkwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvZGlybmFtZS5jCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8bGliZ2VuLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisKK2NoYXIqCitkaXJuYW1lKGNvbnN0IGNoYXIqICBwYXRoKQoreworICAgIHN0YXRpYyBjaGFyKiAgYm5hbWUgPSBOVUxMOworICAgIGludCAgICAgICAgICAgcmV0OworCisgICAgaWYgKGJuYW1lID09IE5VTEwpIHsKKyAgICAgICAgYm5hbWUgPSAoY2hhciAqKW1hbGxvYyhNQVhQQVRITEVOKTsKKyAgICAgICAgaWYgKGJuYW1lID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4oTlVMTCk7CisgICAgfQorCisgICAgcmV0ID0gZGlybmFtZV9yKHBhdGgsIGJuYW1lLCBNQVhQQVRITEVOKTsKKyAgICByZXR1cm4gKHJldCA8IDApID8gTlVMTCA6IGJuYW1lOworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvZGlybmFtZV9yLmMgYi9saWJjL2Jpb25pYy9kaXJuYW1lX3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjJlOWJmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvZGlybmFtZV9yLmMKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPGxpYmdlbi5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisKK2ludAorZGlybmFtZV9yKGNvbnN0IGNoYXIqICBwYXRoLCBjaGFyKiAgYnVmZmVyLCBzaXplX3QgIGJ1ZmZsZW4pCit7CisgICAgY29uc3QgY2hhciAqZW5kcDsKKyAgICBpbnQgICAgICAgICByZXN1bHQsIGxlbjsKKworICAgIC8qIEVtcHR5IG9yIE5VTEwgc3RyaW5nIGdldHMgdHJlYXRlZCBhcyAiLiIgKi8KKyAgICBpZiAocGF0aCA9PSBOVUxMIHx8ICpwYXRoID09ICdcMCcpIHsKKyAgICAgICAgcGF0aCA9ICIuIjsKKyAgICAgICAgbGVuICA9IDE7CisgICAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICAvKiBTdHJpcCB0cmFpbGluZyBzbGFzaGVzICovCisgICAgZW5kcCA9IHBhdGggKyBzdHJsZW4ocGF0aCkgLSAxOworICAgIHdoaWxlIChlbmRwID4gcGF0aCAmJiAqZW5kcCA9PSAnLycpCisgICAgICAgIGVuZHAtLTsKKworICAgIC8qIEZpbmQgdGhlIHN0YXJ0IG9mIHRoZSBkaXIgKi8KKyAgICB3aGlsZSAoZW5kcCA+IHBhdGggJiYgKmVuZHAgIT0gJy8nKQorICAgICAgICBlbmRwLS07CisKKyAgICAvKiBFaXRoZXIgdGhlIGRpciBpcyAiLyIgb3IgdGhlcmUgYXJlIG5vIHNsYXNoZXMgKi8KKyAgICBpZiAoZW5kcCA9PSBwYXRoKSB7CisgICAgICAgIHBhdGggPSAoKmVuZHAgPT0gJy8nKSA/ICIvIiA6ICIuIjsKKyAgICAgICAgbGVuICA9IDE7CisgICAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICBkbyB7CisgICAgICAgIGVuZHAtLTsKKyAgICB9IHdoaWxlIChlbmRwID4gcGF0aCAmJiAqZW5kcCA9PSAnLycpOworCisgICAgbGVuID0gZW5kcCAtIHBhdGggKzE7CisKK0V4aXQ6CisgICAgcmVzdWx0ID0gbGVuOworICAgIGlmIChsZW4rMSA+IE1BWFBBVEhMRU4pIHsKKyAgICAgICAgZXJybm8gPSBFTkFNRVRPT0xPTkc7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaWYgKGJ1ZmZlciA9PSBOVUxMKQorICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgaWYgKGxlbiA+IChpbnQpYnVmZmxlbi0xKSB7CisgICAgICAgIGxlbiAgICA9IChpbnQpYnVmZmxlbi0xOworICAgICAgICByZXN1bHQgPSAtMTsKKyAgICAgICAgZXJybm8gID0gRVJBTkdFOworICAgIH0KKworICAgIGlmIChsZW4gPj0gMCkgeworICAgICAgICBtZW1jcHkoIGJ1ZmZlciwgcGF0aCwgbGVuICk7CisgICAgICAgIGJ1ZmZlcltsZW5dID0gMDsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2RsbWFsbG9jLmMgYi9saWJjL2Jpb25pYy9kbG1hbGxvYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4ZjIwYzAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9kbG1hbGxvYy5jCkBAIC0wLDAgKzEsNTM3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworLyoKKyAgVGhpcyBpcyBhIHZlcnNpb24gKGFrYSBkbG1hbGxvYykgb2YgbWFsbG9jL2ZyZWUvcmVhbGxvYyB3cml0dGVuIGJ5CisgIERvdWcgTGVhIGFuZCByZWxlYXNlZCB0byB0aGUgcHVibGljIGRvbWFpbiwgYXMgZXhwbGFpbmVkIGF0CisgIGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL3B1YmxpY2RvbWFpbi4gIFNlbmQgcXVlc3Rpb25zLAorICBjb21tZW50cywgY29tcGxhaW50cywgcGVyZm9ybWFuY2UgZGF0YSwgZXRjIHRvIGRsQGNzLm9zd2Vnby5lZHUKKworKiBWZXJzaW9uIDIuOC4zIFRodSBTZXAgMjIgMTE6MTY6MTUgMjAwNSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisKKyAgIE5vdGU6IFRoZXJlIG1heSBiZSBhbiB1cGRhdGVkIHZlcnNpb24gb2YgdGhpcyBtYWxsb2Mgb2J0YWluYWJsZSBhdAorICAgICAgICAgICBmdHA6Ly9nZWUuY3Mub3N3ZWdvLmVkdS9wdWIvbWlzYy9tYWxsb2MuYworICAgICAgICAgQ2hlY2sgYmVmb3JlIGluc3RhbGxpbmchCisKKyogUXVpY2tzdGFydAorCisgIFRoaXMgbGlicmFyeSBpcyBhbGwgaW4gb25lIGZpbGUgdG8gc2ltcGxpZnkgdGhlIG1vc3QgY29tbW9uIHVzYWdlOgorICBmdHAgaXQsIGNvbXBpbGUgaXQgKC1PMyksIGFuZCBsaW5rIGl0IGludG8gYW5vdGhlciBwcm9ncmFtLiBBbGwgb2YKKyAgdGhlIGNvbXBpbGUtdGltZSBvcHRpb25zIGRlZmF1bHQgdG8gcmVhc29uYWJsZSB2YWx1ZXMgZm9yIHVzZSBvbgorICBtb3N0IHBsYXRmb3Jtcy4gIFlvdSBtaWdodCBsYXRlciB3YW50IHRvIHN0ZXAgdGhyb3VnaCB2YXJpb3VzCisgIGNvbXBpbGUtdGltZSBhbmQgZHluYW1pYyB0dW5pbmcgb3B0aW9ucy4KKworICBGb3IgY29udmVuaWVuY2UsIGFuIGluY2x1ZGUgZmlsZSBmb3IgY29kZSB1c2luZyB0aGlzIG1hbGxvYyBpcyBhdDoKKyAgICAgZnRwOi8vZ2VlLmNzLm9zd2Vnby5lZHUvcHViL21pc2MvbWFsbG9jLTIuOC4zLmgKKyAgWW91IGRvbid0IHJlYWxseSBuZWVkIHRoaXMgLmggZmlsZSB1bmxlc3MgeW91IGNhbGwgZnVuY3Rpb25zIG5vdAorICBkZWZpbmVkIGluIHlvdXIgc3lzdGVtIGluY2x1ZGUgZmlsZXMuICBUaGUgLmggZmlsZSBjb250YWlucyBvbmx5IHRoZQorICBleGNlcnB0cyBmcm9tIHRoaXMgZmlsZSBuZWVkZWQgZm9yIHVzaW5nIHRoaXMgbWFsbG9jIG9uIEFOU0kgQy9DKysKKyAgc3lzdGVtcywgc28gbG9uZyBhcyB5b3UgaGF2ZW4ndCBjaGFuZ2VkIGNvbXBpbGUtdGltZSBvcHRpb25zIGFib3V0CisgIG5hbWluZyBhbmQgdHVuaW5nIHBhcmFtZXRlcnMuICBJZiB5b3UgZG8sIHRoZW4geW91IGNhbiBjcmVhdGUgeW91cgorICBvd24gbWFsbG9jLmggdGhhdCBkb2VzIGluY2x1ZGUgYWxsIHNldHRpbmdzIGJ5IGN1dHRpbmcgYXQgdGhlIHBvaW50CisgIGluZGljYXRlZCBiZWxvdy4gTm90ZSB0aGF0IHlvdSBtYXkgYWxyZWFkeSBieSBkZWZhdWx0IGJlIHVzaW5nIGEgQworICBsaWJyYXJ5IGNvbnRhaW5pbmcgYSBtYWxsb2MgdGhhdCBpcyBiYXNlZCBvbiBzb21lIHZlcnNpb24gb2YgdGhpcworICBtYWxsb2MgKGZvciBleGFtcGxlIGluIGxpbnV4KS4gWW91IG1pZ2h0IHN0aWxsIHdhbnQgdG8gdXNlIHRoZSBvbmUKKyAgaW4gdGhpcyBmaWxlIHRvIGN1c3RvbWl6ZSBzZXR0aW5ncyBvciB0byBhdm9pZCBvdmVyaGVhZHMgYXNzb2NpYXRlZAorICB3aXRoIGxpYnJhcnkgdmVyc2lvbnMuCisKKyogVml0YWwgc3RhdGlzdGljczoKKworICBTdXBwb3J0ZWQgcG9pbnRlci9zaXplX3QgcmVwcmVzZW50YXRpb246ICAgICAgIDQgb3IgOCBieXRlcworICAgICAgIHNpemVfdCBNVVNUIGJlIGFuIHVuc2lnbmVkIHR5cGUgb2YgdGhlIHNhbWUgd2lkdGggYXMKKyAgICAgICBwb2ludGVycy4gKElmIHlvdSBhcmUgdXNpbmcgYW4gYW5jaWVudCBzeXN0ZW0gdGhhdCBkZWNsYXJlcworICAgICAgIHNpemVfdCBhcyBhIHNpZ25lZCB0eXBlLCBvciBuZWVkIGl0IHRvIGJlIGEgZGlmZmVyZW50IHdpZHRoCisgICAgICAgdGhhbiBwb2ludGVycywgeW91IGNhbiB1c2UgYSBwcmV2aW91cyByZWxlYXNlIG9mIHRoaXMgbWFsbG9jCisgICAgICAgKGUuZy4gMi43LjIpIHN1cHBvcnRpbmcgdGhlc2UuKQorCisgIEFsaWdubWVudDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCBieXRlcyAoZGVmYXVsdCkKKyAgICAgICBUaGlzIHN1ZmZpY2VzIGZvciBuZWFybHkgYWxsIGN1cnJlbnQgbWFjaGluZXMgYW5kIEMgY29tcGlsZXJzLgorICAgICAgIEhvd2V2ZXIsIHlvdSBjYW4gZGVmaW5lIE1BTExPQ19BTElHTk1FTlQgdG8gYmUgd2lkZXIgdGhhbiB0aGlzCisgICAgICAgaWYgbmVjZXNzYXJ5ICh1cCB0byAxMjhieXRlcyksIGF0IHRoZSBleHBlbnNlIG9mIHVzaW5nIG1vcmUgc3BhY2UuCisKKyAgTWluaW11bSBvdmVyaGVhZCBwZXIgYWxsb2NhdGVkIGNodW5rOiAgIDQgb3IgIDggYnl0ZXMgKGlmIDRieXRlIHNpemVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCBvciAxNiBieXRlcyAoaWYgOGJ5dGUgc2l6ZXMpCisgICAgICAgRWFjaCBtYWxsb2NlZCBjaHVuayBoYXMgYSBoaWRkZW4gd29yZCBvZiBvdmVyaGVhZCBob2xkaW5nIHNpemUKKyAgICAgICBhbmQgc3RhdHVzIGluZm9ybWF0aW9uLCBhbmQgYWRkaXRpb25hbCBjcm9zcy1jaGVjayB3b3JkCisgICAgICAgaWYgRk9PVEVSUyBpcyBkZWZpbmVkLgorCisgIE1pbmltdW0gYWxsb2NhdGVkIHNpemU6IDQtYnl0ZSBwdHJzOiAgMTYgYnl0ZXMgICAgKGluY2x1ZGluZyBvdmVyaGVhZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOC1ieXRlIHB0cnM6ICAzMiBieXRlcyAgICAoaW5jbHVkaW5nIG92ZXJoZWFkKQorCisgICAgICAgRXZlbiBhIHJlcXVlc3QgZm9yIHplcm8gYnl0ZXMgKGkuZS4sIG1hbGxvYygwKSkgcmV0dXJucyBhCisgICAgICAgcG9pbnRlciB0byBzb21ldGhpbmcgb2YgdGhlIG1pbmltdW0gYWxsb2NhdGFibGUgc2l6ZS4KKyAgICAgICBUaGUgbWF4aW11bSBvdmVyaGVhZCB3YXN0YWdlIChpLmUuLCBudW1iZXIgb2YgZXh0cmEgYnl0ZXMKKyAgICAgICBhbGxvY2F0ZWQgdGhhbiB3ZXJlIHJlcXVlc3RlZCBpbiBtYWxsb2MpIGlzIGxlc3MgdGhhbiBvciBlcXVhbAorICAgICAgIHRvIHRoZSBtaW5pbXVtIHNpemUsIGV4Y2VwdCBmb3IgcmVxdWVzdHMgPj0gbW1hcF90aHJlc2hvbGQgdGhhdAorICAgICAgIGFyZSBzZXJ2aWNlZCB2aWEgbW1hcCgpLCB3aGVyZSB0aGUgd29yc3QgY2FzZSB3YXN0YWdlIGlzIGFib3V0CisgICAgICAgMzIgYnl0ZXMgcGx1cyB0aGUgcmVtYWluZGVyIGZyb20gYSBzeXN0ZW0gcGFnZSAodGhlIG1pbmltYWwKKyAgICAgICBtbWFwIHVuaXQpOyB0eXBpY2FsbHkgNDA5NiBvciA4MTkyIGJ5dGVzLgorCisgIFNlY3VyaXR5OiBzdGF0aWMtc2FmZTsgb3B0aW9uYWxseSBtb3JlIG9yIGxlc3MKKyAgICAgICBUaGUgInNlY3VyaXR5IiBvZiBtYWxsb2MgcmVmZXJzIHRvIHRoZSBhYmlsaXR5IG9mIG1hbGljaW91cworICAgICAgIGNvZGUgdG8gYWNjZW50dWF0ZSB0aGUgZWZmZWN0cyBvZiBlcnJvcnMgKGZvciBleGFtcGxlLCBmcmVlaW5nCisgICAgICAgc3BhY2UgdGhhdCBpcyBub3QgY3VycmVudGx5IG1hbGxvYydlZCBvciBvdmVyd3JpdGluZyBwYXN0IHRoZQorICAgICAgIGVuZHMgb2YgY2h1bmtzKSBpbiBjb2RlIHRoYXQgY2FsbHMgbWFsbG9jLiAgVGhpcyBtYWxsb2MKKyAgICAgICBndWFyYW50ZWVzIG5vdCB0byBtb2RpZnkgYW55IG1lbW9yeSBsb2NhdGlvbnMgYmVsb3cgdGhlIGJhc2Ugb2YKKyAgICAgICBoZWFwLCBpLmUuLCBzdGF0aWMgdmFyaWFibGVzLCBldmVuIGluIHRoZSBwcmVzZW5jZSBvZiB1c2FnZQorICAgICAgIGVycm9ycy4gIFRoZSByb3V0aW5lcyBhZGRpdGlvbmFsbHkgZGV0ZWN0IG1vc3QgaW1wcm9wZXIgZnJlZXMKKyAgICAgICBhbmQgcmVhbGxvY3MuICBBbGwgdGhpcyBob2xkcyBhcyBsb25nIGFzIHRoZSBzdGF0aWMgYm9va2tlZXBpbmcKKyAgICAgICBmb3IgbWFsbG9jIGl0c2VsZiBpcyBub3QgY29ycnVwdGVkIGJ5IHNvbWUgb3RoZXIgbWVhbnMuICBUaGlzCisgICAgICAgaXMgb25seSBvbmUgYXNwZWN0IG9mIHNlY3VyaXR5IC0tIHRoZXNlIGNoZWNrcyBkbyBub3QsIGFuZAorICAgICAgIGNhbm5vdCwgZGV0ZWN0IGFsbCBwb3NzaWJsZSBwcm9ncmFtbWluZyBlcnJvcnMuCisKKyAgICAgICBJZiBGT09URVJTIGlzIGRlZmluZWQgbm9uemVybywgdGhlbiBlYWNoIGFsbG9jYXRlZCBjaHVuaworICAgICAgIGNhcnJpZXMgYW4gYWRkaXRpb25hbCBjaGVjayB3b3JkIHRvIHZlcmlmeSB0aGF0IGl0IHdhcyBtYWxsb2NlZAorICAgICAgIGZyb20gaXRzIHNwYWNlLiAgVGhlc2UgY2hlY2sgd29yZHMgYXJlIHRoZSBzYW1lIHdpdGhpbiBlYWNoCisgICAgICAgZXhlY3V0aW9uIG9mIGEgcHJvZ3JhbSB1c2luZyBtYWxsb2MsIGJ1dCBkaWZmZXIgYWNyb3NzCisgICAgICAgZXhlY3V0aW9ucywgc28gZXh0ZXJuYWxseSBjcmFmdGVkIGZha2UgY2h1bmtzIGNhbm5vdCBiZQorICAgICAgIGZyZWVkLiBUaGlzIGltcHJvdmVzIHNlY3VyaXR5IGJ5IHJlamVjdGluZyBmcmVlcy9yZWFsbG9jcyB0aGF0CisgICAgICAgY291bGQgY29ycnVwdCBoZWFwIG1lbW9yeSwgaW4gYWRkaXRpb24gdG8gdGhlIGNoZWNrcyBwcmV2ZW50aW5nCisgICAgICAgd3JpdGVzIHRvIHN0YXRpY3MgdGhhdCBhcmUgYWx3YXlzIG9uLiAgVGhpcyBtYXkgZnVydGhlciBpbXByb3ZlCisgICAgICAgc2VjdXJpdHkgYXQgdGhlIGV4cGVuc2Ugb2YgdGltZSBhbmQgc3BhY2Ugb3ZlcmhlYWQuICAoTm90ZSB0aGF0CisgICAgICAgRk9PVEVSUyBtYXkgYWxzbyBiZSB3b3J0aCB1c2luZyB3aXRoIE1TUEFDRVMuKQorCisgICAgICAgQnkgZGVmYXVsdCBkZXRlY3RlZCBlcnJvcnMgY2F1c2UgdGhlIHByb2dyYW0gdG8gYWJvcnQgKGNhbGxpbmcKKyAgICAgICAiYWJvcnQoKSIpLiBZb3UgY2FuIG92ZXJyaWRlIHRoaXMgdG8gaW5zdGVhZCBwcm9jZWVkIHBhc3QKKyAgICAgICBlcnJvcnMgYnkgZGVmaW5pbmcgUFJPQ0VFRF9PTl9FUlJPUi4gIEluIHRoaXMgY2FzZSwgYSBiYWQgZnJlZQorICAgICAgIGhhcyBubyBlZmZlY3QsIGFuZCBhIG1hbGxvYyB0aGF0IGVuY291bnRlcnMgYSBiYWQgYWRkcmVzcworICAgICAgIGNhdXNlZCBieSB1c2VyIG92ZXJ3cml0ZXMgd2lsbCBpZ25vcmUgdGhlIGJhZCBhZGRyZXNzIGJ5CisgICAgICAgZHJvcHBpbmcgcG9pbnRlcnMgYW5kIGluZGljZXMgdG8gYWxsIGtub3duIG1lbW9yeS4gVGhpcyBtYXkKKyAgICAgICBiZSBhcHByb3ByaWF0ZSBmb3IgcHJvZ3JhbXMgdGhhdCBzaG91bGQgY29udGludWUgaWYgYXQgYWxsCisgICAgICAgcG9zc2libGUgaW4gdGhlIGZhY2Ugb2YgcHJvZ3JhbW1pbmcgZXJyb3JzLCBhbHRob3VnaCB0aGV5IG1heQorICAgICAgIHJ1biBvdXQgb2YgbWVtb3J5IGJlY2F1c2UgZHJvcHBlZCBtZW1vcnkgaXMgbmV2ZXIgcmVjbGFpbWVkLgorCisgICAgICAgSWYgeW91IGRvbid0IGxpa2UgZWl0aGVyIG9mIHRoZXNlIG9wdGlvbnMsIHlvdSBjYW4gZGVmaW5lCisgICAgICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04gYW5kIFVTQUdFX0VSUk9SX0FDVElPTiB0byBkbyBhbnl0aGluZworICAgICAgIGVsc2UuIEFuZCBpZiBpZiB5b3UgYXJlIHN1cmUgdGhhdCB5b3VyIHByb2dyYW0gdXNpbmcgbWFsbG9jIGhhcworICAgICAgIG5vIGVycm9ycyBvciB2dWxuZXJhYmlsaXRpZXMsIHlvdSBjYW4gZGVmaW5lIElOU0VDVVJFIHRvIDEsCisgICAgICAgd2hpY2ggbWlnaHQgKG9yIG1pZ2h0IG5vdCkgcHJvdmlkZSBhIHNtYWxsIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50LgorCisgIFRocmVhZC1zYWZldHk6IE5PVCB0aHJlYWQtc2FmZSB1bmxlc3MgVVNFX0xPQ0tTIGRlZmluZWQKKyAgICAgICBXaGVuIFVTRV9MT0NLUyBpcyBkZWZpbmVkLCBlYWNoIHB1YmxpYyBjYWxsIHRvIG1hbGxvYywgZnJlZSwKKyAgICAgICBldGMgaXMgc3Vycm91bmRlZCB3aXRoIGVpdGhlciBhIHB0aHJlYWQgbXV0ZXggb3IgYSB3aW4zMgorICAgICAgIHNwaW5sb2NrIChkZXBlbmRpbmcgb24gV0lOMzIpLiBUaGlzIGlzIG5vdCBlc3BlY2lhbGx5IGZhc3QsIGFuZAorICAgICAgIGNhbiBiZSBhIG1ham9yIGJvdHRsZW5lY2suICBJdCBpcyBkZXNpZ25lZCBvbmx5IHRvIHByb3ZpZGUKKyAgICAgICBtaW5pbWFsIHByb3RlY3Rpb24gaW4gY29uY3VycmVudCBlbnZpcm9ubWVudHMsIGFuZCB0byBwcm92aWRlIGEKKyAgICAgICBiYXNpcyBmb3IgZXh0ZW5zaW9ucy4gIElmIHlvdSBhcmUgdXNpbmcgbWFsbG9jIGluIGEgY29uY3VycmVudAorICAgICAgIHByb2dyYW0sIGNvbnNpZGVyIGluc3RlYWQgdXNpbmcgcHRtYWxsb2MsIHdoaWNoIGlzIGRlcml2ZWQgZnJvbQorICAgICAgIGEgdmVyc2lvbiBvZiB0aGlzIG1hbGxvYy4gKFNlZSBodHRwOi8vd3d3Lm1hbGxvYy5kZSkuCisKKyAgU3lzdGVtIHJlcXVpcmVtZW50czogQW55IGNvbWJpbmF0aW9uIG9mIE1PUkVDT1JFIGFuZC9vciBNTUFQL01VTk1BUAorICAgICAgIFRoaXMgbWFsbG9jIGNhbiB1c2UgdW5peCBzYnJrIG9yIGFueSBlbXVsYXRpb24gKGludm9rZWQgdXNpbmcKKyAgICAgICB0aGUgQ0FMTF9NT1JFQ09SRSBtYWNybykgYW5kL29yIG1tYXAvbXVubWFwIG9yIGFueSBlbXVsYXRpb24KKyAgICAgICAoaW52b2tlZCB1c2luZyBDQUxMX01NQVAvQ0FMTF9NVU5NQVApIHRvIGdldCBhbmQgcmVsZWFzZSBzeXN0ZW0KKyAgICAgICBtZW1vcnkuICBPbiBtb3N0IHVuaXggc3lzdGVtcywgaXQgdGVuZHMgdG8gd29yayBiZXN0IGlmIGJvdGgKKyAgICAgICBNT1JFQ09SRSBhbmQgTU1BUCBhcmUgZW5hYmxlZC4gIE9uIFdpbjMyLCBpdCB1c2VzIGVtdWxhdGlvbnMKKyAgICAgICBiYXNlZCBvbiBWaXJ0dWFsQWxsb2MuIEl0IGFsc28gdXNlcyBjb21tb24gQyBsaWJyYXJ5IGZ1bmN0aW9ucworICAgICAgIGxpa2UgbWVtc2V0LgorCisgIENvbXBsaWFuY2U6IEkgYmVsaWV2ZSBpdCBpcyBjb21wbGlhbnQgd2l0aCB0aGUgU2luZ2xlIFVuaXggU3BlY2lmaWNhdGlvbgorICAgICAgIChTZWUgaHR0cDovL3d3dy51bml4Lm9yZykuIEFsc28gU1ZJRC9YUEcsIEFOU0kgQywgYW5kIHByb2JhYmx5CisgICAgICAgb3RoZXJzIGFzIHdlbGwuCisKKyogT3ZlcnZpZXcgb2YgYWxnb3JpdGhtcworCisgIFRoaXMgaXMgbm90IHRoZSBmYXN0ZXN0LCBtb3N0IHNwYWNlLWNvbnNlcnZpbmcsIG1vc3QgcG9ydGFibGUsIG9yCisgIG1vc3QgdHVuYWJsZSBtYWxsb2MgZXZlciB3cml0dGVuLiBIb3dldmVyIGl0IGlzIGFtb25nIHRoZSBmYXN0ZXN0CisgIHdoaWxlIGFsc28gYmVpbmcgYW1vbmcgdGhlIG1vc3Qgc3BhY2UtY29uc2VydmluZywgcG9ydGFibGUgYW5kCisgIHR1bmFibGUuICBDb25zaXN0ZW50IGJhbGFuY2UgYWNyb3NzIHRoZXNlIGZhY3RvcnMgcmVzdWx0cyBpbiBhIGdvb2QKKyAgZ2VuZXJhbC1wdXJwb3NlIGFsbG9jYXRvciBmb3IgbWFsbG9jLWludGVuc2l2ZSBwcm9ncmFtcy4KKworICBJbiBtb3N0IHdheXMsIHRoaXMgbWFsbG9jIGlzIGEgYmVzdC1maXQgYWxsb2NhdG9yLiBHZW5lcmFsbHksIGl0CisgIGNob29zZXMgdGhlIGJlc3QtZml0dGluZyBleGlzdGluZyBjaHVuayBmb3IgYSByZXF1ZXN0LCB3aXRoIHRpZXMKKyAgYnJva2VuIGluIGFwcHJveGltYXRlbHkgbGVhc3QtcmVjZW50bHktdXNlZCBvcmRlci4gKFRoaXMgc3RyYXRlZ3kKKyAgbm9ybWFsbHkgbWFpbnRhaW5zIGxvdyBmcmFnbWVudGF0aW9uLikgSG93ZXZlciwgZm9yIHJlcXVlc3RzIGxlc3MKKyAgdGhhbiAyNTZieXRlcywgaXQgZGV2aWF0ZXMgZnJvbSBiZXN0LWZpdCB3aGVuIHRoZXJlIGlzIG5vdCBhbgorICBleGFjdGx5IGZpdHRpbmcgYXZhaWxhYmxlIGNodW5rIGJ5IHByZWZlcnJpbmcgdG8gdXNlIHNwYWNlIGFkamFjZW50CisgIHRvIHRoYXQgdXNlZCBmb3IgdGhlIHByZXZpb3VzIHNtYWxsIHJlcXVlc3QsIGFzIHdlbGwgYXMgYnkgYnJlYWtpbmcKKyAgdGllcyBpbiBhcHByb3hpbWF0ZWx5IG1vc3QtcmVjZW50bHktdXNlZCBvcmRlci4gKFRoZXNlIGVuaGFuY2UKKyAgbG9jYWxpdHkgb2Ygc2VyaWVzIG9mIHNtYWxsIGFsbG9jYXRpb25zLikgIEFuZCBmb3IgdmVyeSBsYXJnZSByZXF1ZXN0cworICAoPj0gMjU2S2IgYnkgZGVmYXVsdCksIGl0IHJlbGllcyBvbiBzeXN0ZW0gbWVtb3J5IG1hcHBpbmcKKyAgZmFjaWxpdGllcywgaWYgc3VwcG9ydGVkLiAgKFRoaXMgaGVscHMgYXZvaWQgY2FycnlpbmcgYXJvdW5kIGFuZAorICBwb3NzaWJseSBmcmFnbWVudGluZyBtZW1vcnkgdXNlZCBvbmx5IGZvciBsYXJnZSBjaHVua3MuKQorCisgIEFsbCBvcGVyYXRpb25zIChleGNlcHQgbWFsbG9jX3N0YXRzIGFuZCBtYWxsaW5mbykgaGF2ZSBleGVjdXRpb24KKyAgdGltZXMgdGhhdCBhcmUgYm91bmRlZCBieSBhIGNvbnN0YW50IGZhY3RvciBvZiB0aGUgbnVtYmVyIG9mIGJpdHMgaW4KKyAgYSBzaXplX3QsIG5vdCBjb3VudGluZyBhbnkgY2xlYXJpbmcgaW4gY2FsbG9jIG9yIGNvcHlpbmcgaW4gcmVhbGxvYywKKyAgb3IgYWN0aW9ucyBzdXJyb3VuZGluZyBNT1JFQ09SRSBhbmQgTU1BUCB0aGF0IGhhdmUgdGltZXMKKyAgcHJvcG9ydGlvbmFsIHRvIHRoZSBudW1iZXIgb2Ygbm9uLWNvbnRpZ3VvdXMgcmVnaW9ucyByZXR1cm5lZCBieQorICBzeXN0ZW0gYWxsb2NhdGlvbiByb3V0aW5lcywgd2hpY2ggaXMgb2Z0ZW4ganVzdCAxLgorCisgIFRoZSBpbXBsZW1lbnRhdGlvbiBpcyBub3QgdmVyeSBtb2R1bGFyIGFuZCBzZXJpb3VzbHkgb3ZlcnVzZXMKKyAgbWFjcm9zLiBQZXJoYXBzIHNvbWVkYXkgYWxsIEMgY29tcGlsZXJzIHdpbGwgZG8gYXMgZ29vZCBhIGpvYgorICBpbmxpbmluZyBtb2R1bGFyIGNvZGUgYXMgY2FuIG5vdyBiZSBkb25lIGJ5IGJydXRlLWZvcmNlIGV4cGFuc2lvbiwKKyAgYnV0IG5vdywgZW5vdWdoIG9mIHRoZW0gc2VlbSBub3QgdG8uCisKKyAgU29tZSBjb21waWxlcnMgaXNzdWUgYSBsb3Qgb2Ygd2FybmluZ3MgYWJvdXQgY29kZSB0aGF0IGlzCisgIGRlYWQvdW5yZWFjaGFibGUgb25seSBvbiBzb21lIHBsYXRmb3JtcywgYW5kIGFsc28gYWJvdXQgaW50ZW50aW9uYWwKKyAgdXNlcyBvZiBuZWdhdGlvbiBvbiB1bnNpZ25lZCB0eXBlcy4gQWxsIGtub3duIGNhc2VzIG9mIGVhY2ggY2FuIGJlCisgIGlnbm9yZWQuCisKKyAgRm9yIGEgbG9uZ2VyIGJ1dCBvdXQgb2YgZGF0ZSBoaWdoLWxldmVsIGRlc2NyaXB0aW9uLCBzZWUKKyAgICAgaHR0cDovL2dlZS5jcy5vc3dlZ28uZWR1L2RsL2h0bWwvbWFsbG9jLmh0bWwKKworKiBNU1BBQ0VTCisgIElmIE1TUEFDRVMgaXMgZGVmaW5lZCwgdGhlbiBpbiBhZGRpdGlvbiB0byBtYWxsb2MsIGZyZWUsIGV0Yy4sCisgIHRoaXMgZmlsZSBhbHNvIGRlZmluZXMgbXNwYWNlX21hbGxvYywgbXNwYWNlX2ZyZWUsIGV0Yy4gVGhlc2UKKyAgYXJlIHZlcnNpb25zIG9mIG1hbGxvYyByb3V0aW5lcyB0aGF0IHRha2UgYW4gIm1zcGFjZSIgYXJndW1lbnQKKyAgb2J0YWluZWQgdXNpbmcgY3JlYXRlX21zcGFjZSwgdG8gY29udHJvbCBhbGwgaW50ZXJuYWwgYm9va2tlZXBpbmcuCisgIElmIE9OTFlfTVNQQUNFUyBpcyBkZWZpbmVkLCBvbmx5IHRoZXNlIHZlcnNpb25zIGFyZSBjb21waWxlZC4KKyAgU28gaWYgeW91IHdvdWxkIGxpa2UgdG8gdXNlIHRoaXMgYWxsb2NhdG9yIGZvciBvbmx5IHNvbWUgYWxsb2NhdGlvbnMsCisgIGFuZCB5b3VyIHN5c3RlbSBtYWxsb2MgZm9yIG90aGVycywgeW91IGNhbiBjb21waWxlIHdpdGgKKyAgT05MWV9NU1BBQ0VTIGFuZCB0aGVuIGRvIHNvbWV0aGluZyBsaWtlLi4uCisgICAgc3RhdGljIG1zcGFjZSBteW1zcGFjZSA9IGNyZWF0ZV9tc3BhY2UoMCwwKTsgLy8gZm9yIGV4YW1wbGUKKyAgICAjZGVmaW5lIG15bWFsbG9jKGJ5dGVzKSAgbXNwYWNlX21hbGxvYyhteW1zcGFjZSwgYnl0ZXMpCisKKyAgKE5vdGU6IElmIHlvdSBvbmx5IG5lZWQgb25lIGluc3RhbmNlIG9mIGFuIG1zcGFjZSwgeW91IGNhbiBpbnN0ZWFkCisgIHVzZSAiVVNFX0RMX1BSRUZJWCIgdG8gcmVsYWJlbCB0aGUgZ2xvYmFsIG1hbGxvYy4pCisKKyAgWW91IGNhbiBzaW1pbGFybHkgY3JlYXRlIHRocmVhZC1sb2NhbCBhbGxvY2F0b3JzIGJ5IHN0b3JpbmcKKyAgbXNwYWNlcyBhcyB0aHJlYWQtbG9jYWxzLiBGb3IgZXhhbXBsZToKKyAgICBzdGF0aWMgX190aHJlYWQgbXNwYWNlIHRsbXMgPSAwOworICAgIHZvaWQqICB0bG1hbGxvYyhzaXplX3QgYnl0ZXMpIHsKKyAgICAgIGlmICh0bG1zID09IDApIHRsbXMgPSBjcmVhdGVfbXNwYWNlKDAsIDApOworICAgICAgcmV0dXJuIG1zcGFjZV9tYWxsb2ModGxtcywgYnl0ZXMpOworICAgIH0KKyAgICB2b2lkICB0bGZyZWUodm9pZCogbWVtKSB7IG1zcGFjZV9mcmVlKHRsbXMsIG1lbSk7IH0KKworICBVbmxlc3MgRk9PVEVSUyBpcyBkZWZpbmVkLCBlYWNoIG1zcGFjZSBpcyBjb21wbGV0ZWx5IGluZGVwZW5kZW50LgorICBZb3UgY2Fubm90IGFsbG9jYXRlIGZyb20gb25lIGFuZCBmcmVlIHRvIGFub3RoZXIgKGFsdGhvdWdoCisgIGNvbmZvcm1hbmNlIGlzIG9ubHkgd2Vha2x5IGNoZWNrZWQsIHNvIHVzYWdlIGVycm9ycyBhcmUgbm90IGFsd2F5cworICBjYXVnaHQpLiBJZiBGT09URVJTIGlzIGRlZmluZWQsIHRoZW4gZWFjaCBjaHVuayBjYXJyaWVzIGFyb3VuZCBhIHRhZworICBpbmRpY2F0aW5nIGl0cyBvcmlnaW5hdGluZyBtc3BhY2UsIGFuZCBmcmVlcyBhcmUgZGlyZWN0ZWQgdG8gdGhlaXIKKyAgb3JpZ2luYXRpbmcgc3BhY2VzLgorCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ29tcGlsZS10aW1lIG9wdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0JlIGNhcmVmdWwgaW4gc2V0dGluZyAjZGVmaW5lIHZhbHVlcyBmb3IgbnVtZXJpY2FsIGNvbnN0YW50cyBvZiB0eXBlCitzaXplX3QuIE9uIHNvbWUgc3lzdGVtcywgbGl0ZXJhbCB2YWx1ZXMgYXJlIG5vdCBhdXRvbWF0aWNhbGx5IGV4dGVuZGVkCit0byBzaXplX3QgcHJlY2lzaW9uIHVubGVzcyB0aGV5IGFyZSBleHBsaWNpdGx5IGNhc3RlZC4KKworV0lOMzIgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGRlZmluZWQgaWYgX1dJTjMyIGRlZmluZWQKKyAgRGVmaW5pbmcgV0lOMzIgc2V0cyB1cCBkZWZhdWx0cyBmb3IgTVMgZW52aXJvbm1lbnQgYW5kIGNvbXBpbGVycy4KKyAgT3RoZXJ3aXNlIGRlZmF1bHRzIGFyZSBmb3IgdW5peC4KKworTUFMTE9DX0FMSUdOTUVOVCAgICAgICAgIGRlZmF1bHQ6IChzaXplX3QpOAorICBDb250cm9scyB0aGUgbWluaW11bSBhbGlnbm1lbnQgZm9yIG1hbGxvYydlZCBjaHVua3MuICBJdCBtdXN0IGJlIGEKKyAgcG93ZXIgb2YgdHdvIGFuZCBhdCBsZWFzdCA4LCBldmVuIG9uIG1hY2hpbmVzIGZvciB3aGljaCBzbWFsbGVyCisgIGFsaWdubWVudHMgd291bGQgc3VmZmljZS4gSXQgbWF5IGJlIGRlZmluZWQgYXMgbGFyZ2VyIHRoYW4gdGhpcworICB0aG91Z2guIE5vdGUgaG93ZXZlciB0aGF0IGNvZGUgYW5kIGRhdGEgc3RydWN0dXJlcyBhcmUgb3B0aW1pemVkIGZvcgorICB0aGUgY2FzZSBvZiA4LWJ5dGUgYWxpZ25tZW50LgorCitNU1BBQ0VTICAgICAgICAgICAgICAgICAgZGVmYXVsdDogMCAoZmFsc2UpCisgIElmIHRydWUsIGNvbXBpbGUgaW4gc3VwcG9ydCBmb3IgaW5kZXBlbmRlbnQgYWxsb2NhdGlvbiBzcGFjZXMuCisgIFRoaXMgaXMgb25seSBzdXBwb3J0ZWQgaWYgSEFWRV9NTUFQIGlzIHRydWUuCisKK09OTFlfTVNQQUNFUyAgICAgICAgICAgICBkZWZhdWx0OiAwIChmYWxzZSkKKyAgSWYgdHJ1ZSwgb25seSBjb21waWxlIGluIG1zcGFjZSB2ZXJzaW9ucywgbm90IHJlZ3VsYXIgdmVyc2lvbnMuCisKK1VTRV9MT0NLUyAgICAgICAgICAgICAgICBkZWZhdWx0OiAwIChmYWxzZSkKKyAgQ2F1c2VzIGVhY2ggY2FsbCB0byBlYWNoIHB1YmxpYyByb3V0aW5lIHRvIGJlIHN1cnJvdW5kZWQgd2l0aAorICBwdGhyZWFkIG9yIFdJTjMyIG11dGV4IGxvY2svdW5sb2NrLiAoSWYgc2V0IHRydWUsIHRoaXMgY2FuIGJlCisgIG92ZXJyaWRkZW4gb24gYSBwZXItbXNwYWNlIGJhc2lzIGZvciBtc3BhY2UgdmVyc2lvbnMuKQorCitGT09URVJTICAgICAgICAgICAgICAgICAgZGVmYXVsdDogMAorICBJZiB0cnVlLCBwcm92aWRlIGV4dHJhIGNoZWNraW5nIGFuZCBkaXNwYXRjaGluZyBieSBwbGFjaW5nCisgIGluZm9ybWF0aW9uIGluIHRoZSBmb290ZXJzIG9mIGFsbG9jYXRlZCBjaHVua3MuIFRoaXMgYWRkcworICBzcGFjZSBhbmQgdGltZSBvdmVyaGVhZC4KKworSU5TRUNVUkUgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDAKKyAgSWYgdHJ1ZSwgb21pdCBjaGVja3MgZm9yIHVzYWdlIGVycm9ycyBhbmQgaGVhcCBzcGFjZSBvdmVyd3JpdGVzLgorCitVU0VfRExfUFJFRklYICAgICAgICAgICAgZGVmYXVsdDogTk9UIGRlZmluZWQKKyAgQ2F1c2VzIGNvbXBpbGVyIHRvIHByZWZpeCBhbGwgcHVibGljIHJvdXRpbmVzIHdpdGggdGhlIHN0cmluZyAnZGwnLgorICBUaGlzIGNhbiBiZSB1c2VmdWwgd2hlbiB5b3Ugb25seSB3YW50IHRvIHVzZSB0aGlzIG1hbGxvYyBpbiBvbmUgcGFydAorICBvZiBhIHByb2dyYW0sIHVzaW5nIHlvdXIgcmVndWxhciBzeXN0ZW0gbWFsbG9jIGVsc2V3aGVyZS4KKworQUJPUlQgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGRlZmluZWQgYXMgYWJvcnQoKQorICBEZWZpbmVzIGhvdyB0byBhYm9ydCBvbiBmYWlsZWQgY2hlY2tzLiAgT24gbW9zdCBzeXN0ZW1zLCBhIGZhaWxlZAorICBjaGVjayBjYW5ub3QgZGllIHdpdGggYW4gImFzc2VydCIgb3IgZXZlbiBwcmludCBhbiBpbmZvcm1hdGl2ZQorICBtZXNzYWdlLCBiZWNhdXNlIHRoZSB1bmRlcmx5aW5nIHByaW50IHJvdXRpbmVzIGluIHR1cm4gY2FsbCBtYWxsb2MsCisgIHdoaWNoIHdpbGwgZmFpbCBhZ2Fpbi4gIEdlbmVyYWxseSwgdGhlIGJlc3QgcG9saWN5IGlzIHRvIHNpbXBseSBjYWxsCisgIGFib3J0KCkuIEl0J3Mgbm90IHZlcnkgdXNlZnVsIHRvIGRvIG1vcmUgdGhhbiB0aGlzIGJlY2F1c2UgbWFueQorICBlcnJvcnMgZHVlIHRvIG92ZXJ3cml0aW5nIHdpbGwgc2hvdyB1cCBhcyBhZGRyZXNzIGZhdWx0cyAobnVsbCwgb2RkCisgIGFkZHJlc3NlcyBldGMpIHJhdGhlciB0aGFuIG1hbGxvYy10cmlnZ2VyZWQgY2hlY2tzLCBzbyB3aWxsIGFsc28KKyAgYWJvcnQuICBBbHNvLCBtb3N0IGNvbXBpbGVycyBrbm93IHRoYXQgYWJvcnQoKSBkb2VzIG5vdCByZXR1cm4sIHNvCisgIGNhbiBiZXR0ZXIgb3B0aW1pemUgY29kZSBjb25kaXRpb25hbGx5IGNhbGxpbmcgaXQuCisKK1BST0NFRURfT05fRVJST1IgICAgICAgICAgIGRlZmF1bHQ6IGRlZmluZWQgYXMgMCAoZmFsc2UpCisgIENvbnRyb2xzIHdoZXRoZXIgZGV0ZWN0ZWQgYmFkIGFkZHJlc3NlcyBjYXVzZSB0aGVtIHRvIGJ5cGFzc2VkCisgIHJhdGhlciB0aGFuIGFib3J0aW5nLiBJZiBzZXQsIGRldGVjdGVkIGJhZCBhcmd1bWVudHMgdG8gZnJlZSBhbmQKKyAgcmVhbGxvYyBhcmUgaWdub3JlZC4gQW5kIGFsbCBib29ra2VlcGluZyBpbmZvcm1hdGlvbiBpcyB6ZXJvZWQgb3V0CisgIHVwb24gYSBkZXRlY3RlZCBvdmVyd3JpdGUgb2YgZnJlZWQgaGVhcCBzcGFjZSwgdGh1cyBsb3NpbmcgdGhlCisgIGFiaWxpdHkgdG8gZXZlciByZXR1cm4gaXQgZnJvbSBtYWxsb2MgYWdhaW4sIGJ1dCBlbmFibGluZyB0aGUKKyAgYXBwbGljYXRpb24gdG8gcHJvY2VlZC4gSWYgUFJPQ0VFRF9PTl9FUlJPUiBpcyBkZWZpbmVkLCB0aGUKKyAgc3RhdGljIHZhcmlhYmxlIG1hbGxvY19jb3JydXB0aW9uX2Vycm9yX2NvdW50IGlzIGNvbXBpbGVkIGluCisgIGFuZCBjYW4gYmUgZXhhbWluZWQgdG8gc2VlIGlmIGVycm9ycyBoYXZlIG9jY3VycmVkLiBUaGlzIG9wdGlvbgorICBnZW5lcmF0ZXMgc2xvd2VyIGNvZGUgdGhhbiB0aGUgZGVmYXVsdCBhYm9ydCBwb2xpY3kuCisKK0RFQlVHICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBOT1QgZGVmaW5lZAorICBUaGUgREVCVUcgc2V0dGluZyBpcyBtYWlubHkgaW50ZW5kZWQgZm9yIHBlb3BsZSB0cnlpbmcgdG8gbW9kaWZ5CisgIHRoaXMgY29kZSBvciBkaWFnbm9zZSBwcm9ibGVtcyB3aGVuIHBvcnRpbmcgdG8gbmV3IHBsYXRmb3Jtcy4KKyAgSG93ZXZlciwgaXQgbWF5IGFsc28gYmUgYWJsZSB0byBiZXR0ZXIgaXNvbGF0ZSB1c2VyIGVycm9ycyB0aGFuIGp1c3QKKyAgdXNpbmcgcnVudGltZSBjaGVja3MuICBUaGUgYXNzZXJ0aW9ucyBpbiB0aGUgY2hlY2sgcm91dGluZXMgc3BlbGwKKyAgb3V0IGluIG1vcmUgZGV0YWlsIHRoZSBhc3N1bXB0aW9ucyBhbmQgaW52YXJpYW50cyB1bmRlcmx5aW5nIHRoZQorICBhbGdvcml0aG1zLiAgVGhlIGNoZWNraW5nIGlzIGZhaXJseSBleHRlbnNpdmUsIGFuZCB3aWxsIHNsb3cgZG93bgorICBleGVjdXRpb24gbm90aWNlYWJseS4gQ2FsbGluZyBtYWxsb2Nfc3RhdHMgb3IgbWFsbGluZm8gd2l0aCBERUJVRworICBzZXQgd2lsbCBhdHRlbXB0IHRvIGNoZWNrIGV2ZXJ5IG5vbi1tbWFwcGVkIGFsbG9jYXRlZCBhbmQgZnJlZSBjaHVuaworICBpbiB0aGUgY291cnNlIG9mIGNvbXB1dGluZyB0aGUgc3VtbWFyaWVzLgorCitBQk9SVF9PTl9BU1NFUlRfRkFJTFVSRSAgIGRlZmF1bHQ6IGRlZmluZWQgYXMgMSAodHJ1ZSkKKyAgRGVidWdnaW5nIGFzc2VydGlvbiBmYWlsdXJlcyBjYW4gYmUgbmVhcmx5IGltcG9zc2libGUgaWYgeW91cgorICB2ZXJzaW9uIG9mIHRoZSBhc3NlcnQgbWFjcm8gY2F1c2VzIG1hbGxvYyB0byBiZSBjYWxsZWQsIHdoaWNoIHdpbGwKKyAgbGVhZCB0byBhIGNhc2NhZGUgb2YgZnVydGhlciBmYWlsdXJlcywgYmxvd2luZyB0aGUgcnVudGltZSBzdGFjay4KKyAgQUJPUlRfT05fQVNTRVJUX0ZBSUxVUkUgY2F1c2UgYXNzZXJ0aW9ucyBmYWlsdXJlcyB0byBjYWxsIGFib3J0KCksCisgIHdoaWNoIHdpbGwgdXN1YWxseSBtYWtlIGRlYnVnZ2luZyBlYXNpZXIuCisKK01BTExPQ19GQUlMVVJFX0FDVElPTiAgICAgZGVmYXVsdDogc2V0cyBlcnJubyB0byBFTk9NRU0sIG9yIG5vLW9wIG9uIHdpbjMyCisgIFRoZSBhY3Rpb24gdG8gdGFrZSBiZWZvcmUgInJldHVybiAwIiB3aGVuIG1hbGxvYyBmYWlscyB0byBiZSBhYmxlIHRvCisgIHJldHVybiBtZW1vcnkgYmVjYXVzZSB0aGVyZSBpcyBub25lIGF2YWlsYWJsZS4KKworSEFWRV9NT1JFQ09SRSAgICAgICAgICAgICBkZWZhdWx0OiAxICh0cnVlKSB1bmxlc3Mgd2luMzIgb3IgT05MWV9NU1BBQ0VTCisgIFRydWUgaWYgdGhpcyBzeXN0ZW0gc3VwcG9ydHMgc2JyayBvciBhbiBlbXVsYXRpb24gb2YgaXQuCisKK01PUkVDT1JFICAgICAgICAgICAgICAgICAgZGVmYXVsdDogc2JyaworICBUaGUgbmFtZSBvZiB0aGUgc2Jyay1zdHlsZSBzeXN0ZW0gcm91dGluZSB0byBjYWxsIHRvIG9idGFpbiBtb3JlCisgIG1lbW9yeS4gIFNlZSBiZWxvdyBmb3IgZ3VpZGFuY2Ugb24gd3JpdGluZyBjdXN0b20gTU9SRUNPUkUKKyAgZnVuY3Rpb25zLiBUaGUgdHlwZSBvZiB0aGUgYXJndW1lbnQgdG8gc2Jyay9NT1JFQ09SRSB2YXJpZXMgYWNyb3NzCisgIHN5c3RlbXMuICBJdCBjYW5ub3QgYmUgc2l6ZV90LCBiZWNhdXNlIGl0IHN1cHBvcnRzIG5lZ2F0aXZlCisgIGFyZ3VtZW50cywgc28gaXQgaXMgbm9ybWFsbHkgdGhlIHNpZ25lZCB0eXBlIG9mIHRoZSBzYW1lIHdpZHRoIGFzCisgIHNpemVfdCAoc29tZXRpbWVzIGRlY2xhcmVkIGFzICJpbnRwdHJfdCIpLiAgSXQgZG9lc24ndCBtdWNoIG1hdHRlcgorICB0aG91Z2guIEludGVybmFsbHksIHdlIG9ubHkgY2FsbCBpdCB3aXRoIGFyZ3VtZW50cyBsZXNzIHRoYW4gaGFsZgorICB0aGUgbWF4IHZhbHVlIG9mIGEgc2l6ZV90LCB3aGljaCBzaG91bGQgd29yayBhY3Jvc3MgYWxsIHJlYXNvbmFibGUKKyAgcG9zc2liaWxpdGllcywgYWx0aG91Z2ggc29tZXRpbWVzIGdlbmVyYXRpbmcgY29tcGlsZXIgd2FybmluZ3MuICBTZWUKKyAgbmVhciB0aGUgZW5kIG9mIHRoaXMgZmlsZSBmb3IgZ3VpZGVsaW5lcyBmb3IgY3JlYXRpbmcgYSBjdXN0b20KKyAgdmVyc2lvbiBvZiBNT1JFQ09SRS4KKworTU9SRUNPUkVfQ09OVElHVU9VUyAgICAgICBkZWZhdWx0OiAxICh0cnVlKQorICBJZiB0cnVlLCB0YWtlIGFkdmFudGFnZSBvZiBmYWN0IHRoYXQgY29uc2VjdXRpdmUgY2FsbHMgdG8gTU9SRUNPUkUKKyAgd2l0aCBwb3NpdGl2ZSBhcmd1bWVudHMgYWx3YXlzIHJldHVybiBjb250aWd1b3VzIGluY3JlYXNpbmcKKyAgYWRkcmVzc2VzLiAgVGhpcyBpcyB0cnVlIG9mIHVuaXggc2Jyay4gSXQgZG9lcyBub3QgaHVydCB0b28gbXVjaCB0bworICBzZXQgaXQgdHJ1ZSBhbnl3YXksIHNpbmNlIG1hbGxvYyBjb3BlcyB3aXRoIG5vbi1jb250aWd1aXRpZXMuCisgIFNldHRpbmcgaXQgZmFsc2Ugd2hlbiBkZWZpbml0ZWx5IG5vbi1jb250aWd1b3VzIHNhdmVzIHRpbWUKKyAgYW5kIHBvc3NpYmx5IHdhc3RlZCBzcGFjZSBpdCB3b3VsZCB0YWtlIHRvIGRpc2NvdmVyIHRoaXMgdGhvdWdoLgorCitNT1JFQ09SRV9DQU5OT1RfVFJJTSAgICAgIGRlZmF1bHQ6IE5PVCBkZWZpbmVkCisgIFRydWUgaWYgTU9SRUNPUkUgY2Fubm90IHJlbGVhc2Ugc3BhY2UgYmFjayB0byB0aGUgc3lzdGVtIHdoZW4gZ2l2ZW4KKyAgbmVnYXRpdmUgYXJndW1lbnRzLiBUaGlzIGlzIGdlbmVyYWxseSBuZWNlc3Nhcnkgb25seSBpZiB5b3UgYXJlCisgIHVzaW5nIGEgaGFuZC1jcmFmdGVkIE1PUkVDT1JFIGZ1bmN0aW9uIHRoYXQgY2Fubm90IGhhbmRsZSBuZWdhdGl2ZQorICBhcmd1bWVudHMuCisKK0hBVkVfTU1BUCAgICAgICAgICAgICAgICAgZGVmYXVsdDogMSAodHJ1ZSkKKyAgVHJ1ZSBpZiB0aGlzIHN5c3RlbSBzdXBwb3J0cyBtbWFwIG9yIGFuIGVtdWxhdGlvbiBvZiBpdC4gIElmIHNvLCBhbmQKKyAgSEFWRV9NT1JFQ09SRSBpcyBub3QgdHJ1ZSwgTU1BUCBpcyB1c2VkIGZvciBhbGwgc3lzdGVtCisgIGFsbG9jYXRpb24uIElmIHNldCBhbmQgSEFWRV9NT1JFQ09SRSBpcyB0cnVlIGFzIHdlbGwsIE1NQVAgaXMKKyAgcHJpbWFyaWx5IHVzZWQgdG8gZGlyZWN0bHkgYWxsb2NhdGUgdmVyeSBsYXJnZSBibG9ja3MuIEl0IGlzIGFsc28KKyAgdXNlZCBhcyBhIGJhY2t1cCBzdHJhdGVneSBpbiBjYXNlcyB3aGVyZSBNT1JFQ09SRSBmYWlscyB0byBwcm92aWRlCisgIHNwYWNlIGZyb20gc3lzdGVtLiBOb3RlOiBBIHNpbmdsZSBjYWxsIHRvIE1VTk1BUCBpcyBhc3N1bWVkIHRvIGJlCisgIGFibGUgdG8gdW5tYXAgbWVtb3J5IHRoYXQgbWF5IGhhdmUgYmUgYWxsb2NhdGVkIHVzaW5nIG11bHRpcGxlIGNhbGxzCisgIHRvIE1NQVAsIHNvIGxvbmcgYXMgdGhleSBhcmUgYWRqYWNlbnQuCisKK0hBVkVfTVJFTUFQICAgICAgICAgICAgICAgZGVmYXVsdDogMSBvbiBsaW51eCwgZWxzZSAwCisgIElmIHRydWUgcmVhbGxvYygpIHVzZXMgbXJlbWFwKCkgdG8gcmUtYWxsb2NhdGUgbGFyZ2UgYmxvY2tzIGFuZAorICBleHRlbmQgb3Igc2hyaW5rIGFsbG9jYXRpb24gc3BhY2VzLgorCitNTUFQX0NMRUFSUyAgICAgICAgICAgICAgIGRlZmF1bHQ6IDEgb24gdW5peAorICBUcnVlIGlmIG1tYXAgY2xlYXJzIG1lbW9yeSBzbyBjYWxsb2MgZG9lc24ndCBuZWVkIHRvLiBUaGlzIGlzIHRydWUKKyAgZm9yIHN0YW5kYXJkIHVuaXggbW1hcCB1c2luZyAvZGV2L3plcm8uCisKK1VTRV9CVUlMVElOX0ZGUyAgICAgICAgICAgIGRlZmF1bHQ6IDAgKGkuZS4sIG5vdCB1c2VkKQorICBDYXVzZXMgbWFsbG9jIHRvIHVzZSB0aGUgYnVpbHRpbiBmZnMoKSBmdW5jdGlvbiB0byBjb21wdXRlIGluZGljZXMuCisgIFNvbWUgY29tcGlsZXJzIG1heSByZWNvZ25pemUgYW5kIGludHJpbnNpZnkgZmZzIHRvIGJlIGZhc3RlciB0aGFuIHRoZQorICBzdXBwbGllZCBDIHZlcnNpb24uIEFsc28sIHRoZSBjYXNlIG9mIHg4NiB1c2luZyBnY2MgaXMgc3BlY2lhbC1jYXNlZAorICB0byBhbiBhc20gaW5zdHJ1Y3Rpb24sIHNvIGlzIGFscmVhZHkgYXMgZmFzdCBhcyBpdCBjYW4gYmUsIGFuZCBzbworICB0aGlzIHNldHRpbmcgaGFzIG5vIGVmZmVjdC4gKE9uIG1vc3QgeDg2cywgdGhlIGFzbSB2ZXJzaW9uIGlzIG9ubHkKKyAgc2xpZ2h0bHkgZmFzdGVyIHRoYW4gdGhlIEMgdmVyc2lvbi4pCisKK21hbGxvY19nZXRwYWdlc2l6ZSAgICAgICAgIGRlZmF1bHQ6IGRlcml2ZSBmcm9tIHN5c3RlbSBpbmNsdWRlcywgb3IgNDA5Ni4KKyAgVGhlIHN5c3RlbSBwYWdlIHNpemUuIFRvIHRoZSBleHRlbnQgcG9zc2libGUsIHRoaXMgbWFsbG9jIG1hbmFnZXMKKyAgbWVtb3J5IGZyb20gdGhlIHN5c3RlbSBpbiBwYWdlLXNpemUgdW5pdHMuICBUaGlzIG1heSBiZSAoYW5kCisgIHVzdWFsbHkgaXMpIGEgZnVuY3Rpb24gcmF0aGVyIHRoYW4gYSBjb25zdGFudC4gVGhpcyBpcyBpZ25vcmVkCisgIGlmIFdJTjMyLCB3aGVyZSBwYWdlIHNpemUgaXMgZGV0ZXJtaW5lZCB1c2luZyBnZXRTeXN0ZW1JbmZvIGR1cmluZworICBpbml0aWFsaXphdGlvbi4KKworVVNFX0RFVl9SQU5ET00gICAgICAgICAgICAgZGVmYXVsdDogMCAoaS5lLiwgbm90IHVzZWQpCisgIENhdXNlcyBtYWxsb2MgdG8gdXNlIC9kZXYvcmFuZG9tIHRvIGluaXRpYWxpemUgc2VjdXJlIG1hZ2ljIHNlZWQgZm9yCisgIHN0YW1waW5nIGZvb3RlcnMuIE90aGVyd2lzZSwgdGhlIGN1cnJlbnQgdGltZSBpcyB1c2VkLgorCitOT19NQUxMSU5GTyAgICAgICAgICAgICAgICBkZWZhdWx0OiAwCisgIElmIGRlZmluZWQsIGRvbid0IGNvbXBpbGUgIm1hbGxpbmZvIi4gVGhpcyBjYW4gYmUgYSBzaW1wbGUgd2F5CisgIG9mIGRlYWxpbmcgd2l0aCBtaXNtYXRjaGVzIGJldHdlZW4gc3lzdGVtIGRlY2xhcmF0aW9ucyBhbmQKKyAgdGhvc2UgaW4gdGhpcyBmaWxlLgorCitNQUxMSU5GT19GSUVMRF9UWVBFICAgICAgICBkZWZhdWx0OiBzaXplX3QKKyAgVGhlIHR5cGUgb2YgdGhlIGZpZWxkcyBpbiB0aGUgbWFsbGluZm8gc3RydWN0LiBUaGlzIHdhcyBvcmlnaW5hbGx5CisgIGRlZmluZWQgYXMgImludCIgaW4gU1ZJRCBldGMsIGJ1dCBpcyBtb3JlIHVzZWZ1bGx5IGRlZmluZWQgYXMKKyAgc2l6ZV90LiBUaGUgdmFsdWUgaXMgdXNlZCBvbmx5IGlmICBIQVZFX1VTUl9JTkNMVURFX01BTExPQ19IIGlzIG5vdCBzZXQKKworUkVBTExPQ19aRVJPX0JZVEVTX0ZSRUVTICAgIGRlZmF1bHQ6IG5vdCBkZWZpbmVkCisgIFRoaXMgc2hvdWxkIGJlIHNldCBpZiBhIGNhbGwgdG8gcmVhbGxvYyB3aXRoIHplcm8gYnl0ZXMgc2hvdWxkIAorICBiZSB0aGUgc2FtZSBhcyBhIGNhbGwgdG8gZnJlZS4gU29tZSBwZW9wbGUgdGhpbmsgaXQgc2hvdWxkLiBPdGhlcndpc2UsIAorICBzaW5jZSB0aGlzIG1hbGxvYyByZXR1cm5zIGEgdW5pcXVlIHBvaW50ZXIgZm9yIG1hbGxvYygwKSwgc28gZG9lcyAKKyAgcmVhbGxvYyhwLCAwKS4KKworTEFDS1NfVU5JU1REX0gsIExBQ0tTX0ZDTlRMX0gsIExBQ0tTX1NZU19QQVJBTV9ILCBMQUNLU19TWVNfTU1BTl9ICitMQUNLU19TVFJJTkdTX0gsIExBQ0tTX1NUUklOR19ILCBMQUNLU19TWVNfVFlQRVNfSCwgIExBQ0tTX0VSUk5PX0gKK0xBQ0tTX1NURExJQl9IICAgICAgICAgICAgICAgIGRlZmF1bHQ6IE5PVCBkZWZpbmVkIHVubGVzcyBvbiBXSU4zMgorICBEZWZpbmUgdGhlc2UgaWYgeW91ciBzeXN0ZW0gZG9lcyBub3QgaGF2ZSB0aGVzZSBoZWFkZXIgZmlsZXMuCisgIFlvdSBtaWdodCBuZWVkIHRvIG1hbnVhbGx5IGluc2VydCBzb21lIG9mIHRoZSBkZWNsYXJhdGlvbnMgdGhleSBwcm92aWRlLgorCitERUZBVUxUX0dSQU5VTEFSSVRZICAgICAgICBkZWZhdWx0OiBwYWdlIHNpemUgaWYgTU9SRUNPUkVfQ09OVElHVU9VUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtX2luZm8uZHdBbGxvY2F0aW9uR3JhbnVsYXJpdHkgaW4gV0lOMzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyd2lzZSA2NEsuCisgICAgICBBbHNvIHNldHRhYmxlIHVzaW5nIG1hbGxvcHQoTV9HUkFOVUxBUklUWSwgeCkKKyAgVGhlIHVuaXQgZm9yIGFsbG9jYXRpbmcgYW5kIGRlYWxsb2NhdGluZyBtZW1vcnkgZnJvbSB0aGUgc3lzdGVtLiAgT24KKyAgbW9zdCBzeXN0ZW1zIHdpdGggY29udGlndW91cyBNT1JFQ09SRSwgdGhlcmUgaXMgbm8gcmVhc29uIHRvCisgIG1ha2UgdGhpcyBtb3JlIHRoYW4gYSBwYWdlLiBIb3dldmVyLCBzeXN0ZW1zIHdpdGggTU1BUCB0ZW5kIHRvCisgIGVpdGhlciByZXF1aXJlIG9yIGVuY291cmFnZSBsYXJnZXIgZ3JhbnVsYXJpdGllcy4gIFlvdSBjYW4gaW5jcmVhc2UKKyAgdGhpcyB2YWx1ZSB0byBwcmV2ZW50IHN5c3RlbSBhbGxvY2F0aW9uIGZ1bmN0aW9ucyB0byBiZSBjYWxsZWQgc28KKyAgb2Z0ZW4sIGVzcGVjaWFsbHkgaWYgdGhleSBhcmUgc2xvdy4gIFRoZSB2YWx1ZSBtdXN0IGJlIGF0IGxlYXN0IG9uZQorICBwYWdlIGFuZCBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLiAgU2V0dGluZyB0byAwIGNhdXNlcyBpbml0aWFsaXphdGlvbgorICB0byBlaXRoZXIgcGFnZSBzaXplIG9yIHdpbjMyIHJlZ2lvbiBzaXplLiAgKE5vdGU6IEluIHByZXZpb3VzCisgIHZlcnNpb25zIG9mIG1hbGxvYywgdGhlIGVxdWl2YWxlbnQgb2YgdGhpcyBvcHRpb24gd2FzIGNhbGxlZAorICAiVE9QX1BBRCIpCisKK0RFRkFVTFRfVFJJTV9USFJFU0hPTEQgICAgZGVmYXVsdDogMk1CCisgICAgICBBbHNvIHNldHRhYmxlIHVzaW5nIG1hbGxvcHQoTV9UUklNX1RIUkVTSE9MRCwgeCkKKyAgVGhlIG1heGltdW0gYW1vdW50IG9mIHVudXNlZCB0b3AtbW9zdCBtZW1vcnkgdG8ga2VlcCBiZWZvcmUKKyAgcmVsZWFzaW5nIHZpYSBtYWxsb2NfdHJpbSBpbiBmcmVlKCkuICBBdXRvbWF0aWMgdHJpbW1pbmcgaXMgbWFpbmx5CisgIHVzZWZ1bCBpbiBsb25nLWxpdmVkIHByb2dyYW1zIHVzaW5nIGNvbnRpZ3VvdXMgTU9SRUNPUkUuICBCZWNhdXNlCisgIHRyaW1taW5nIHZpYSBzYnJrIGNhbiBiZSBzbG93IG9uIHNvbWUgc3lzdGVtcywgYW5kIGNhbiBzb21ldGltZXMgYmUKKyAgd2FzdGVmdWwgKGluIGNhc2VzIHdoZXJlIHByb2dyYW1zIGltbWVkaWF0ZWx5IGFmdGVyd2FyZCBhbGxvY2F0ZQorICBtb3JlIGxhcmdlIGNodW5rcykgdGhlIHZhbHVlIHNob3VsZCBiZSBoaWdoIGVub3VnaCBzbyB0aGF0IHlvdXIKKyAgb3ZlcmFsbCBzeXN0ZW0gcGVyZm9ybWFuY2Ugd291bGQgaW1wcm92ZSBieSByZWxlYXNpbmcgdGhpcyBtdWNoCisgIG1lbW9yeS4gIEFzIGEgcm91Z2ggZ3VpZGUsIHlvdSBtaWdodCBzZXQgdG8gYSB2YWx1ZSBjbG9zZSB0byB0aGUKKyAgYXZlcmFnZSBzaXplIG9mIGEgcHJvY2VzcyAocHJvZ3JhbSkgcnVubmluZyBvbiB5b3VyIHN5c3RlbS4KKyAgUmVsZWFzaW5nIHRoaXMgbXVjaCBtZW1vcnkgd291bGQgYWxsb3cgc3VjaCBhIHByb2Nlc3MgdG8gcnVuIGluCisgIG1lbW9yeS4gIEdlbmVyYWxseSwgaXQgaXMgd29ydGggdHVuaW5nIHRyaW0gdGhyZXNob2xkcyB3aGVuIGEKKyAgcHJvZ3JhbSB1bmRlcmdvZXMgcGhhc2VzIHdoZXJlIHNldmVyYWwgbGFyZ2UgY2h1bmtzIGFyZSBhbGxvY2F0ZWQKKyAgYW5kIHJlbGVhc2VkIGluIHdheXMgdGhhdCBjYW4gcmV1c2UgZWFjaCBvdGhlcidzIHN0b3JhZ2UsIHBlcmhhcHMKKyAgbWl4ZWQgd2l0aCBwaGFzZXMgd2hlcmUgdGhlcmUgYXJlIG5vIHN1Y2ggY2h1bmtzIGF0IGFsbC4gVGhlIHRyaW0KKyAgdmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gcGFnZSBzaXplIHRvIGhhdmUgYW55IHVzZWZ1bCBlZmZlY3QuICBUbworICBkaXNhYmxlIHRyaW1taW5nIGNvbXBsZXRlbHksIHlvdSBjYW4gc2V0IHRvIE1BWF9TSVpFX1QuIE5vdGUgdGhhdCB0aGUgdHJpY2sKKyAgc29tZSBwZW9wbGUgdXNlIG9mIG1hbGxvY2luZyBhIGh1Z2Ugc3BhY2UgYW5kIHRoZW4gZnJlZWluZyBpdCBhdAorICBwcm9ncmFtIHN0YXJ0dXAsIGluIGFuIGF0dGVtcHQgdG8gcmVzZXJ2ZSBzeXN0ZW0gbWVtb3J5LCBkb2Vzbid0CisgIGhhdmUgdGhlIGludGVuZGVkIGVmZmVjdCB1bmRlciBhdXRvbWF0aWMgdHJpbW1pbmcsIHNpbmNlIHRoYXQgbWVtb3J5CisgIHdpbGwgaW1tZWRpYXRlbHkgYmUgcmV0dXJuZWQgdG8gdGhlIHN5c3RlbS4KKworREVGQVVMVF9NTUFQX1RIUkVTSE9MRCAgICAgICBkZWZhdWx0OiAyNTZLCisgICAgICBBbHNvIHNldHRhYmxlIHVzaW5nIG1hbGxvcHQoTV9NTUFQX1RIUkVTSE9MRCwgeCkKKyAgVGhlIHJlcXVlc3Qgc2l6ZSB0aHJlc2hvbGQgZm9yIHVzaW5nIE1NQVAgdG8gZGlyZWN0bHkgc2VydmljZSBhCisgIHJlcXVlc3QuIFJlcXVlc3RzIG9mIGF0IGxlYXN0IHRoaXMgc2l6ZSB0aGF0IGNhbm5vdCBiZSBhbGxvY2F0ZWQKKyAgdXNpbmcgYWxyZWFkeS1leGlzdGluZyBzcGFjZSB3aWxsIGJlIHNlcnZpY2VkIHZpYSBtbWFwLiAgKElmIGVub3VnaAorICBub3JtYWwgZnJlZWQgc3BhY2UgYWxyZWFkeSBleGlzdHMgaXQgaXMgdXNlZCBpbnN0ZWFkLikgIFVzaW5nIG1tYXAKKyAgc2VncmVnYXRlcyByZWxhdGl2ZWx5IGxhcmdlIGNodW5rcyBvZiBtZW1vcnkgc28gdGhhdCB0aGV5IGNhbiBiZQorICBpbmRpdmlkdWFsbHkgb2J0YWluZWQgYW5kIHJlbGVhc2VkIGZyb20gdGhlIGhvc3Qgc3lzdGVtLiBBIHJlcXVlc3QKKyAgc2VydmljZWQgdGhyb3VnaCBtbWFwIGlzIG5ldmVyIHJldXNlZCBieSBhbnkgb3RoZXIgcmVxdWVzdCAoYXQgbGVhc3QKKyAgbm90IGRpcmVjdGx5OyB0aGUgc3lzdGVtIG1heSBqdXN0IHNvIGhhcHBlbiB0byByZW1hcCBzdWNjZXNzaXZlCisgIHJlcXVlc3RzIHRvIHRoZSBzYW1lIGxvY2F0aW9ucykuICBTZWdyZWdhdGluZyBzcGFjZSBpbiB0aGlzIHdheSBoYXMKKyAgdGhlIGJlbmVmaXRzIHRoYXQ6IE1tYXBwZWQgc3BhY2UgY2FuIGFsd2F5cyBiZSBpbmRpdmlkdWFsbHkgcmVsZWFzZWQKKyAgYmFjayB0byB0aGUgc3lzdGVtLCB3aGljaCBoZWxwcyBrZWVwIHRoZSBzeXN0ZW0gbGV2ZWwgbWVtb3J5IGRlbWFuZHMKKyAgb2YgYSBsb25nLWxpdmVkIHByb2dyYW0gbG93LiAgQWxzbywgbWFwcGVkIG1lbW9yeSBkb2Vzbid0IGJlY29tZQorICBgbG9ja2VkJyBiZXR3ZWVuIG90aGVyIGNodW5rcywgYXMgY2FuIGhhcHBlbiB3aXRoIG5vcm1hbGx5IGFsbG9jYXRlZAorICBjaHVua3MsIHdoaWNoIG1lYW5zIHRoYXQgZXZlbiB0cmltbWluZyB2aWEgbWFsbG9jX3RyaW0gd291bGQgbm90CisgIHJlbGVhc2UgdGhlbS4gIEhvd2V2ZXIsIGl0IGhhcyB0aGUgZGlzYWR2YW50YWdlIHRoYXQgdGhlIHNwYWNlCisgIGNhbm5vdCBiZSByZWNsYWltZWQsIGNvbnNvbGlkYXRlZCwgYW5kIHRoZW4gdXNlZCB0byBzZXJ2aWNlIGxhdGVyCisgIHJlcXVlc3RzLCBhcyBoYXBwZW5zIHdpdGggbm9ybWFsIGNodW5rcy4gIFRoZSBhZHZhbnRhZ2VzIG9mIG1tYXAKKyAgbmVhcmx5IGFsd2F5cyBvdXR3ZWlnaCBkaXNhZHZhbnRhZ2VzIGZvciAibGFyZ2UiIGNodW5rcywgYnV0IHRoZQorICB2YWx1ZSBvZiAibGFyZ2UiIG1heSB2YXJ5IGFjcm9zcyBzeXN0ZW1zLiAgVGhlIGRlZmF1bHQgaXMgYW4KKyAgZW1waXJpY2FsbHkgZGVyaXZlZCB2YWx1ZSB0aGF0IHdvcmtzIHdlbGwgaW4gbW9zdCBzeXN0ZW1zLiBZb3UgY2FuCisgIGRpc2FibGUgbW1hcCBieSBzZXR0aW5nIHRvIE1BWF9TSVpFX1QuCisKKyovCisKKyNpZm5kZWYgV0lOMzIKKyNpZmRlZiBfV0lOMzIKKyNkZWZpbmUgV0lOMzIgMQorI2VuZGlmICAvKiBfV0lOMzIgKi8KKyNlbmRpZiAgLyogV0lOMzIgKi8KKyNpZmRlZiBXSU4zMgorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2RlZmluZSBIQVZFX01NQVAgMQorI2RlZmluZSBIQVZFX01PUkVDT1JFIDAKKyNkZWZpbmUgTEFDS1NfVU5JU1REX0gKKyNkZWZpbmUgTEFDS1NfU1lTX1BBUkFNX0gKKyNkZWZpbmUgTEFDS1NfU1lTX01NQU5fSAorI2RlZmluZSBMQUNLU19TVFJJTkdfSAorI2RlZmluZSBMQUNLU19TVFJJTkdTX0gKKyNkZWZpbmUgTEFDS1NfU1lTX1RZUEVTX0gKKyNkZWZpbmUgTEFDS1NfRVJSTk9fSAorI2RlZmluZSBNQUxMT0NfRkFJTFVSRV9BQ1RJT04KKyNkZWZpbmUgTU1BUF9DTEVBUlMgMCAvKiBXSU5DRSBhbmQgc29tZSBvdGhlcnMgYXBwYXJlbnRseSBkb24ndCBjbGVhciAqLworI2VuZGlmICAvKiBXSU4zMiAqLworCisjaWYgZGVmaW5lZChEQVJXSU4pIHx8IGRlZmluZWQoX0RBUldJTikKKy8qIE1hYyBPU1ggZG9jcyBhZHZpc2Ugbm90IHRvIHVzZSBzYnJrOyBpdCBzZWVtcyBiZXR0ZXIgdG8gdXNlIG1tYXAgKi8KKyNpZm5kZWYgSEFWRV9NT1JFQ09SRQorI2RlZmluZSBIQVZFX01PUkVDT1JFIDAKKyNkZWZpbmUgSEFWRV9NTUFQIDEKKyNlbmRpZiAgLyogSEFWRV9NT1JFQ09SRSAqLworI2VuZGlmICAvKiBEQVJXSU4gKi8KKworI2lmbmRlZiBMQUNLU19TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPiAgLyogRm9yIHNpemVfdCAqLworI2VuZGlmICAvKiBMQUNLU19TWVNfVFlQRVNfSCAqLworCisvKiBUaGUgbWF4aW11bSBwb3NzaWJsZSBzaXplX3QgdmFsdWUgaGFzIGFsbCBiaXRzIHNldCAqLworI2RlZmluZSBNQVhfU0laRV9UICAgICAgICAgICAofihzaXplX3QpMCkKKworI2lmbmRlZiBPTkxZX01TUEFDRVMKKyNkZWZpbmUgT05MWV9NU1BBQ0VTIDAKKyNlbmRpZiAgLyogT05MWV9NU1BBQ0VTICovCisjaWZuZGVmIE1TUEFDRVMKKyNpZiBPTkxZX01TUEFDRVMKKyNkZWZpbmUgTVNQQUNFUyAxCisjZWxzZSAgIC8qIE9OTFlfTVNQQUNFUyAqLworI2RlZmluZSBNU1BBQ0VTIDAKKyNlbmRpZiAgLyogT05MWV9NU1BBQ0VTICovCisjZW5kaWYgIC8qIE1TUEFDRVMgKi8KKyNpZm5kZWYgTUFMTE9DX0FMSUdOTUVOVAorI2RlZmluZSBNQUxMT0NfQUxJR05NRU5UICgoc2l6ZV90KThVKQorI2VuZGlmICAvKiBNQUxMT0NfQUxJR05NRU5UICovCisjaWZuZGVmIEZPT1RFUlMKKyNkZWZpbmUgRk9PVEVSUyAwCisjZW5kaWYgIC8qIEZPT1RFUlMgKi8KKyNpZm5kZWYgVVNFX01BWF9BTExPV0VEX0ZPT1RQUklOVAorI2RlZmluZSBVU0VfTUFYX0FMTE9XRURfRk9PVFBSSU5UIDAKKyNlbmRpZgorI2lmbmRlZiBBQk9SVAorI2RlZmluZSBBQk9SVCAgYWJvcnQoKQorI2VuZGlmICAvKiBBQk9SVCAqLworI2lmbmRlZiBBQk9SVF9PTl9BU1NFUlRfRkFJTFVSRQorI2RlZmluZSBBQk9SVF9PTl9BU1NFUlRfRkFJTFVSRSAxCisjZW5kaWYgIC8qIEFCT1JUX09OX0FTU0VSVF9GQUlMVVJFICovCisjaWZuZGVmIFBST0NFRURfT05fRVJST1IKKyNkZWZpbmUgUFJPQ0VFRF9PTl9FUlJPUiAwCisjZW5kaWYgIC8qIFBST0NFRURfT05fRVJST1IgKi8KKyNpZm5kZWYgVVNFX0xPQ0tTCisjZGVmaW5lIFVTRV9MT0NLUyAwCisjZW5kaWYgIC8qIFVTRV9MT0NLUyAqLworI2lmbmRlZiBJTlNFQ1VSRQorI2RlZmluZSBJTlNFQ1VSRSAwCisjZW5kaWYgIC8qIElOU0VDVVJFICovCisjaWZuZGVmIEhBVkVfTU1BUAorI2RlZmluZSBIQVZFX01NQVAgMQorI2VuZGlmICAvKiBIQVZFX01NQVAgKi8KKyNpZm5kZWYgTU1BUF9DTEVBUlMKKyNkZWZpbmUgTU1BUF9DTEVBUlMgMQorI2VuZGlmICAvKiBNTUFQX0NMRUFSUyAqLworI2lmbmRlZiBIQVZFX01SRU1BUAorI2lmZGVmIGxpbnV4CisjZGVmaW5lIEhBVkVfTVJFTUFQIDEKKyNlbHNlICAgLyogbGludXggKi8KKyNkZWZpbmUgSEFWRV9NUkVNQVAgMAorI2VuZGlmICAvKiBsaW51eCAqLworI2VuZGlmICAvKiBIQVZFX01SRU1BUCAqLworI2lmbmRlZiBNQUxMT0NfRkFJTFVSRV9BQ1RJT04KKyNkZWZpbmUgTUFMTE9DX0ZBSUxVUkVfQUNUSU9OICBlcnJubyA9IEVOT01FTTsKKyNlbmRpZiAgLyogTUFMTE9DX0ZBSUxVUkVfQUNUSU9OICovCisjaWZuZGVmIEhBVkVfTU9SRUNPUkUKKyNpZiBPTkxZX01TUEFDRVMKKyNkZWZpbmUgSEFWRV9NT1JFQ09SRSAwCisjZWxzZSAgIC8qIE9OTFlfTVNQQUNFUyAqLworI2RlZmluZSBIQVZFX01PUkVDT1JFIDEKKyNlbmRpZiAgLyogT05MWV9NU1BBQ0VTICovCisjZW5kaWYgIC8qIEhBVkVfTU9SRUNPUkUgKi8KKyNpZiAhSEFWRV9NT1JFQ09SRQorI2RlZmluZSBNT1JFQ09SRV9DT05USUdVT1VTIDAKKyNlbHNlICAgLyogIUhBVkVfTU9SRUNPUkUgKi8KKyNpZm5kZWYgTU9SRUNPUkUKKyNkZWZpbmUgTU9SRUNPUkUgc2JyaworI2VuZGlmICAvKiBNT1JFQ09SRSAqLworI2lmbmRlZiBNT1JFQ09SRV9DT05USUdVT1VTCisjZGVmaW5lIE1PUkVDT1JFX0NPTlRJR1VPVVMgMQorI2VuZGlmICAvKiBNT1JFQ09SRV9DT05USUdVT1VTICovCisjZW5kaWYgIC8qIEhBVkVfTU9SRUNPUkUgKi8KKyNpZm5kZWYgREVGQVVMVF9HUkFOVUxBUklUWQorI2lmIE1PUkVDT1JFX0NPTlRJR1VPVVMKKyNkZWZpbmUgREVGQVVMVF9HUkFOVUxBUklUWSAoMCkgIC8qIDAgbWVhbnMgdG8gY29tcHV0ZSBpbiBpbml0X21wYXJhbXMgKi8KKyNlbHNlICAgLyogTU9SRUNPUkVfQ09OVElHVU9VUyAqLworI2RlZmluZSBERUZBVUxUX0dSQU5VTEFSSVRZICgoc2l6ZV90KTY0VSAqIChzaXplX3QpMTAyNFUpCisjZW5kaWYgIC8qIE1PUkVDT1JFX0NPTlRJR1VPVVMgKi8KKyNlbmRpZiAgLyogREVGQVVMVF9HUkFOVUxBUklUWSAqLworI2lmbmRlZiBERUZBVUxUX1RSSU1fVEhSRVNIT0xECisjaWZuZGVmIE1PUkVDT1JFX0NBTk5PVF9UUklNCisjZGVmaW5lIERFRkFVTFRfVFJJTV9USFJFU0hPTEQgKChzaXplX3QpMlUgKiAoc2l6ZV90KTEwMjRVICogKHNpemVfdCkxMDI0VSkKKyNlbHNlICAgLyogTU9SRUNPUkVfQ0FOTk9UX1RSSU0gKi8KKyNkZWZpbmUgREVGQVVMVF9UUklNX1RIUkVTSE9MRCBNQVhfU0laRV9UCisjZW5kaWYgIC8qIE1PUkVDT1JFX0NBTk5PVF9UUklNICovCisjZW5kaWYgIC8qIERFRkFVTFRfVFJJTV9USFJFU0hPTEQgKi8KKyNpZm5kZWYgREVGQVVMVF9NTUFQX1RIUkVTSE9MRAorI2lmIEhBVkVfTU1BUAorI2RlZmluZSBERUZBVUxUX01NQVBfVEhSRVNIT0xEICgoc2l6ZV90KTY0VSAqIChzaXplX3QpMTAyNFUpCisjZWxzZSAgIC8qIEhBVkVfTU1BUCAqLworI2RlZmluZSBERUZBVUxUX01NQVBfVEhSRVNIT0xEIE1BWF9TSVpFX1QKKyNlbmRpZiAgLyogSEFWRV9NTUFQICovCisjZW5kaWYgIC8qIERFRkFVTFRfTU1BUF9USFJFU0hPTEQgKi8KKyNpZm5kZWYgVVNFX0JVSUxUSU5fRkZTCisjZGVmaW5lIFVTRV9CVUlMVElOX0ZGUyAwCisjZW5kaWYgIC8qIFVTRV9CVUlMVElOX0ZGUyAqLworI2lmbmRlZiBVU0VfREVWX1JBTkRPTQorI2RlZmluZSBVU0VfREVWX1JBTkRPTSAwCisjZW5kaWYgIC8qIFVTRV9ERVZfUkFORE9NICovCisjaWZuZGVmIE5PX01BTExJTkZPCisjZGVmaW5lIE5PX01BTExJTkZPIDAKKyNlbmRpZiAgLyogTk9fTUFMTElORk8gKi8KKyNpZm5kZWYgTUFMTElORk9fRklFTERfVFlQRQorI2RlZmluZSBNQUxMSU5GT19GSUVMRF9UWVBFIHNpemVfdAorI2VuZGlmICAvKiBNQUxMSU5GT19GSUVMRF9UWVBFICovCisKKy8qCisgIG1hbGxvcHQgdHVuaW5nIG9wdGlvbnMuICBTVklEL1hQRyBkZWZpbmVzIGZvdXIgc3RhbmRhcmQgcGFyYW1ldGVyCisgIG51bWJlcnMgZm9yIG1hbGxvcHQsIG5vcm1hbGx5IGRlZmluZWQgaW4gbWFsbG9jLmguICBOb25lIG9mIHRoZXNlCisgIGFyZSB1c2VkIGluIHRoaXMgbWFsbG9jLCBzbyBzZXR0aW5nIHRoZW0gaGFzIG5vIGVmZmVjdC4gQnV0IHRoaXMKKyAgbWFsbG9jIGRvZXMgc3VwcG9ydCB0aGUgZm9sbG93aW5nIG9wdGlvbnMuCisqLworCisjZGVmaW5lIE1fVFJJTV9USFJFU0hPTEQgICAgICgtMSkKKyNkZWZpbmUgTV9HUkFOVUxBUklUWSAgICAgICAgKC0yKQorI2RlZmluZSBNX01NQVBfVEhSRVNIT0xEICAgICAoLTMpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBNYWxsaW5mbyBkZWNsYXJhdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiAhTk9fTUFMTElORk8KKy8qCisgIFRoaXMgdmVyc2lvbiBvZiBtYWxsb2Mgc3VwcG9ydHMgdGhlIHN0YW5kYXJkIFNWSUQvWFBHIG1hbGxpbmZvCisgIHJvdXRpbmUgdGhhdCByZXR1cm5zIGEgc3RydWN0IGNvbnRhaW5pbmcgdXNhZ2UgcHJvcGVydGllcyBhbmQKKyAgc3RhdGlzdGljcy4gSXQgc2hvdWxkIHdvcmsgb24gYW55IHN5c3RlbSB0aGF0IGhhcyBhCisgIC91c3IvaW5jbHVkZS9tYWxsb2MuaCBkZWZpbmluZyBzdHJ1Y3QgbWFsbGluZm8uICBUaGUgbWFpbgorICBkZWNsYXJhdGlvbiBuZWVkZWQgaXMgdGhlIG1hbGxpbmZvIHN0cnVjdCB0aGF0IGlzIHJldHVybmVkIChieS1jb3B5KQorICBieSBtYWxsaW5mbygpLiAgVGhlIG1hbGxvaW5mbyBzdHJ1Y3QgY29udGFpbnMgYSBidW5jaCBvZiBmaWVsZHMgdGhhdAorICBhcmUgbm90IGV2ZW4gbWVhbmluZ2Z1bCBpbiB0aGlzIHZlcnNpb24gb2YgbWFsbG9jLiAgVGhlc2UgZmllbGRzIGFyZQorICBhcmUgaW5zdGVhZCBmaWxsZWQgYnkgbWFsbGluZm8oKSB3aXRoIG90aGVyIG51bWJlcnMgdGhhdCBtaWdodCBiZSBvZgorICBpbnRlcmVzdC4KKworICBIQVZFX1VTUl9JTkNMVURFX01BTExPQ19IIHNob3VsZCBiZSBzZXQgaWYgeW91IGhhdmUgYQorICAvdXNyL2luY2x1ZGUvbWFsbG9jLmggZmlsZSB0aGF0IGluY2x1ZGVzIGEgZGVjbGFyYXRpb24gb2Ygc3RydWN0CisgIG1hbGxpbmZvLiAgSWYgc28sIGl0IGlzIGluY2x1ZGVkOyBlbHNlIGEgY29tcGxpYW50IHZlcnNpb24gaXMKKyAgZGVjbGFyZWQgYmVsb3cuICBUaGVzZSBtdXN0IGJlIHByZWNpc2VseSB0aGUgc2FtZSBmb3IgbWFsbGluZm8oKSB0bworICB3b3JrLiAgVGhlIG9yaWdpbmFsIFNWSUQgdmVyc2lvbiBvZiB0aGlzIHN0cnVjdCwgZGVmaW5lZCBvbiBtb3N0CisgIHN5c3RlbXMgd2l0aCBtYWxsaW5mbywgZGVjbGFyZXMgYWxsIGZpZWxkcyBhcyBpbnRzLiBCdXQgc29tZSBvdGhlcnMKKyAgZGVmaW5lIGFzIHVuc2lnbmVkIGxvbmcuIElmIHlvdXIgc3lzdGVtIGRlZmluZXMgdGhlIGZpZWxkcyB1c2luZyBhCisgIHR5cGUgb2YgZGlmZmVyZW50IHdpZHRoIHRoYW4gbGlzdGVkIGhlcmUsIHlvdSBNVVNUICNpbmNsdWRlIHlvdXIKKyAgc3lzdGVtIHZlcnNpb24gYW5kICNkZWZpbmUgSEFWRV9VU1JfSU5DTFVERV9NQUxMT0NfSC4KKyovCisKKy8qICNkZWZpbmUgSEFWRV9VU1JfSU5DTFVERV9NQUxMT0NfSCAqLworCisjaWYgIUFORFJPSUQKKyNpZmRlZiBIQVZFX1VTUl9JTkNMVURFX01BTExPQ19ICisjaW5jbHVkZSAiL3Vzci9pbmNsdWRlL21hbGxvYy5oIgorI2Vsc2UgLyogSEFWRV9VU1JfSU5DTFVERV9NQUxMT0NfSCAqLworCitzdHJ1Y3QgbWFsbGluZm8geworICBNQUxMSU5GT19GSUVMRF9UWVBFIGFyZW5hOyAgICAvKiBub24tbW1hcHBlZCBzcGFjZSBhbGxvY2F0ZWQgZnJvbSBzeXN0ZW0gKi8KKyAgTUFMTElORk9fRklFTERfVFlQRSBvcmRibGtzOyAgLyogbnVtYmVyIG9mIGZyZWUgY2h1bmtzICovCisgIE1BTExJTkZPX0ZJRUxEX1RZUEUgc21ibGtzOyAgIC8qIGFsd2F5cyAwICovCisgIE1BTExJTkZPX0ZJRUxEX1RZUEUgaGJsa3M7ICAgIC8qIGFsd2F5cyAwICovCisgIE1BTExJTkZPX0ZJRUxEX1RZUEUgaGJsa2hkOyAgIC8qIHNwYWNlIGluIG1tYXBwZWQgcmVnaW9ucyAqLworICBNQUxMSU5GT19GSUVMRF9UWVBFIHVzbWJsa3M7ICAvKiBtYXhpbXVtIHRvdGFsIGFsbG9jYXRlZCBzcGFjZSAqLworICBNQUxMSU5GT19GSUVMRF9UWVBFIGZzbWJsa3M7ICAvKiBhbHdheXMgMCAqLworICBNQUxMSU5GT19GSUVMRF9UWVBFIHVvcmRibGtzOyAvKiB0b3RhbCBhbGxvY2F0ZWQgc3BhY2UgKi8KKyAgTUFMTElORk9fRklFTERfVFlQRSBmb3JkYmxrczsgLyogdG90YWwgZnJlZSBzcGFjZSAqLworICBNQUxMSU5GT19GSUVMRF9UWVBFIGtlZXBjb3N0OyAvKiByZWxlYXNhYmxlICh2aWEgbWFsbG9jX3RyaW0pIHNwYWNlICovCit9OworCisjZW5kaWYgLyogSEFWRV9VU1JfSU5DTFVERV9NQUxMT0NfSCAqLworI2VuZGlmIC8qIE5PX01BTExJTkZPICovCisjZW5kaWYgLyogQU5EUk9JRCAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNpZiAhT05MWV9NU1BBQ0VTCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0gRGVjbGFyYXRpb25zIG9mIHB1YmxpYyByb3V0aW5lcyAtLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIENoZWNrIGFuIGFkZGl0aW9uYWwgbWFjcm8gZm9yIHRoZSBmaXZlIHByaW1hcnkgZnVuY3Rpb25zICovCisjaWYgIWRlZmluZWQoVVNFX0RMX1BSRUZJWCkgfHwgIWRlZmluZWQoTUFMTE9DX0xFQUtfQ0hFQ0spIAorI2RlZmluZSBkbGNhbGxvYyAgICAgICAgICAgICAgIGNhbGxvYworI2RlZmluZSBkbGZyZWUgICAgICAgICAgICAgICAgIGZyZWUKKyNkZWZpbmUgZGxtYWxsb2MgICAgICAgICAgICAgICBtYWxsb2MKKyNkZWZpbmUgZGxtZW1hbGlnbiAgICAgICAgICAgICBtZW1hbGlnbgorI2RlZmluZSBkbHJlYWxsb2MgICAgICAgICAgICAgIHJlYWxsb2MKKyNlbmRpZgorCisjaWZuZGVmIFVTRV9ETF9QUkVGSVgKKyNkZWZpbmUgZGx2YWxsb2MgICAgICAgICAgICAgICB2YWxsb2MKKyNkZWZpbmUgZGxwdmFsbG9jICAgICAgICAgICAgICBwdmFsbG9jCisjZGVmaW5lIGRsbWFsbGluZm8gICAgICAgICAgICAgbWFsbGluZm8KKyNkZWZpbmUgZGxtYWxsb3B0ICAgICAgICAgICAgICBtYWxsb3B0CisjZGVmaW5lIGRsbWFsbG9jX3RyaW0gICAgICAgICAgbWFsbG9jX3RyaW0KKyNkZWZpbmUgZGxtYWxsb2Nfd2Fsa19mcmVlX3BhZ2VzIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWxsb2Nfd2Fsa19mcmVlX3BhZ2VzCisjZGVmaW5lIGRsbWFsbG9jX3dhbGtfaGVhcCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFsbG9jX3dhbGtfaGVhcAorI2RlZmluZSBkbG1hbGxvY19zdGF0cyAgICAgICAgIG1hbGxvY19zdGF0cworI2RlZmluZSBkbG1hbGxvY191c2FibGVfc2l6ZSAgIG1hbGxvY191c2FibGVfc2l6ZQorI2RlZmluZSBkbG1hbGxvY19mb290cHJpbnQgICAgIG1hbGxvY19mb290cHJpbnQKKyNkZWZpbmUgZGxtYWxsb2NfbWF4X2FsbG93ZWRfZm9vdHByaW50IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWxsb2NfbWF4X2FsbG93ZWRfZm9vdHByaW50CisjZGVmaW5lIGRsbWFsbG9jX3NldF9tYXhfYWxsb3dlZF9mb290cHJpbnQgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hbGxvY19zZXRfbWF4X2FsbG93ZWRfZm9vdHByaW50CisjZGVmaW5lIGRsbWFsbG9jX21heF9mb290cHJpbnQgbWFsbG9jX21heF9mb290cHJpbnQKKyNkZWZpbmUgZGxpbmRlcGVuZGVudF9jYWxsb2MgICBpbmRlcGVuZGVudF9jYWxsb2MKKyNkZWZpbmUgZGxpbmRlcGVuZGVudF9jb21hbGxvYyBpbmRlcGVuZGVudF9jb21hbGxvYworI2VuZGlmIC8qIFVTRV9ETF9QUkVGSVggKi8KKworCisvKgorICBtYWxsb2Moc2l6ZV90IG4pCisgIFJldHVybnMgYSBwb2ludGVyIHRvIGEgbmV3bHkgYWxsb2NhdGVkIGNodW5rIG9mIGF0IGxlYXN0IG4gYnl0ZXMsIG9yCisgIG51bGwgaWYgbm8gc3BhY2UgaXMgYXZhaWxhYmxlLCBpbiB3aGljaCBjYXNlIGVycm5vIGlzIHNldCB0byBFTk9NRU0KKyAgb24gQU5TSSBDIHN5c3RlbXMuCisKKyAgSWYgbiBpcyB6ZXJvLCBtYWxsb2MgcmV0dXJucyBhIG1pbmltdW0tc2l6ZWQgY2h1bmsuIChUaGUgbWluaW11bQorICBzaXplIGlzIDE2IGJ5dGVzIG9uIG1vc3QgMzJiaXQgc3lzdGVtcywgYW5kIDMyIGJ5dGVzIG9uIDY0Yml0CisgIHN5c3RlbXMuKSAgTm90ZSB0aGF0IHNpemVfdCBpcyBhbiB1bnNpZ25lZCB0eXBlLCBzbyBjYWxscyB3aXRoCisgIGFyZ3VtZW50cyB0aGF0IHdvdWxkIGJlIG5lZ2F0aXZlIGlmIHNpZ25lZCBhcmUgaW50ZXJwcmV0ZWQgYXMKKyAgcmVxdWVzdHMgZm9yIGh1Z2UgYW1vdW50cyBvZiBzcGFjZSwgd2hpY2ggd2lsbCBvZnRlbiBmYWlsLiBUaGUKKyAgbWF4aW11bSBzdXBwb3J0ZWQgdmFsdWUgb2YgbiBkaWZmZXJzIGFjcm9zcyBzeXN0ZW1zLCBidXQgaXMgaW4gYWxsCisgIGNhc2VzIGxlc3MgdGhhbiB0aGUgbWF4aW11bSByZXByZXNlbnRhYmxlIHZhbHVlIG9mIGEgc2l6ZV90LgorKi8KK3ZvaWQqIGRsbWFsbG9jKHNpemVfdCk7CisKKy8qCisgIGZyZWUodm9pZCogcCkKKyAgUmVsZWFzZXMgdGhlIGNodW5rIG9mIG1lbW9yeSBwb2ludGVkIHRvIGJ5IHAsIHRoYXQgaGFkIGJlZW4gcHJldmlvdXNseQorICBhbGxvY2F0ZWQgdXNpbmcgbWFsbG9jIG9yIGEgcmVsYXRlZCByb3V0aW5lIHN1Y2ggYXMgcmVhbGxvYy4KKyAgSXQgaGFzIG5vIGVmZmVjdCBpZiBwIGlzIG51bGwuIElmIHAgd2FzIG5vdCBtYWxsb2NlZCBvciBhbHJlYWR5CisgIGZyZWVkLCBmcmVlKHApIHdpbGwgYnkgZGVmYXVsdCBjYXVzZSB0aGUgY3VycmVudCBwcm9ncmFtIHRvIGFib3J0LgorKi8KK3ZvaWQgIGRsZnJlZSh2b2lkKik7CisKKy8qCisgIGNhbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVsZW1lbnRfc2l6ZSk7CisgIFJldHVybnMgYSBwb2ludGVyIHRvIG5fZWxlbWVudHMgKiBlbGVtZW50X3NpemUgYnl0ZXMsIHdpdGggYWxsIGxvY2F0aW9ucworICBzZXQgdG8gemVyby4KKyovCit2b2lkKiBkbGNhbGxvYyhzaXplX3QsIHNpemVfdCk7CisKKy8qCisgIHJlYWxsb2Modm9pZCogcCwgc2l6ZV90IG4pCisgIFJldHVybnMgYSBwb2ludGVyIHRvIGEgY2h1bmsgb2Ygc2l6ZSBuIHRoYXQgY29udGFpbnMgdGhlIHNhbWUgZGF0YQorICBhcyBkb2VzIGNodW5rIHAgdXAgdG8gdGhlIG1pbmltdW0gb2YgKG4sIHAncyBzaXplKSBieXRlcywgb3IgbnVsbAorICBpZiBubyBzcGFjZSBpcyBhdmFpbGFibGUuCisKKyAgVGhlIHJldHVybmVkIHBvaW50ZXIgbWF5IG9yIG1heSBub3QgYmUgdGhlIHNhbWUgYXMgcC4gVGhlIGFsZ29yaXRobQorICBwcmVmZXJzIGV4dGVuZGluZyBwIGluIG1vc3QgY2FzZXMgd2hlbiBwb3NzaWJsZSwgb3RoZXJ3aXNlIGl0CisgIGVtcGxveXMgdGhlIGVxdWl2YWxlbnQgb2YgYSBtYWxsb2MtY29weS1mcmVlIHNlcXVlbmNlLgorCisgIElmIHAgaXMgbnVsbCwgcmVhbGxvYyBpcyBlcXVpdmFsZW50IHRvIG1hbGxvYy4KKworICBJZiBzcGFjZSBpcyBub3QgYXZhaWxhYmxlLCByZWFsbG9jIHJldHVybnMgbnVsbCwgZXJybm8gaXMgc2V0IChpZiBvbgorICBBTlNJKSBhbmQgcCBpcyBOT1QgZnJlZWQuCisKKyAgaWYgbiBpcyBmb3IgZmV3ZXIgYnl0ZXMgdGhhbiBhbHJlYWR5IGhlbGQgYnkgcCwgdGhlIG5ld2x5IHVudXNlZAorICBzcGFjZSBpcyBsb3BwZWQgb2ZmIGFuZCBmcmVlZCBpZiBwb3NzaWJsZS4gIHJlYWxsb2Mgd2l0aCBhIHNpemUKKyAgYXJndW1lbnQgb2YgemVybyAocmUpYWxsb2NhdGVzIGEgbWluaW11bS1zaXplZCBjaHVuay4KKworICBUaGUgb2xkIHVuaXggcmVhbGxvYyBjb252ZW50aW9uIG9mIGFsbG93aW5nIHRoZSBsYXN0LWZyZWUnZCBjaHVuaworICB0byBiZSB1c2VkIGFzIGFuIGFyZ3VtZW50IHRvIHJlYWxsb2MgaXMgbm90IHN1cHBvcnRlZC4KKyovCisKK3ZvaWQqIGRscmVhbGxvYyh2b2lkKiwgc2l6ZV90KTsKKworLyoKKyAgbWVtYWxpZ24oc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IG4pOworICBSZXR1cm5zIGEgcG9pbnRlciB0byBhIG5ld2x5IGFsbG9jYXRlZCBjaHVuayBvZiBuIGJ5dGVzLCBhbGlnbmVkCisgIGluIGFjY29yZCB3aXRoIHRoZSBhbGlnbm1lbnQgYXJndW1lbnQuCisKKyAgVGhlIGFsaWdubWVudCBhcmd1bWVudCBzaG91bGQgYmUgYSBwb3dlciBvZiB0d28uIElmIHRoZSBhcmd1bWVudCBpcworICBub3QgYSBwb3dlciBvZiB0d28sIHRoZSBuZWFyZXN0IGdyZWF0ZXIgcG93ZXIgaXMgdXNlZC4KKyAgOC1ieXRlIGFsaWdubWVudCBpcyBndWFyYW50ZWVkIGJ5IG5vcm1hbCBtYWxsb2MgY2FsbHMsIHNvIGRvbid0CisgIGJvdGhlciBjYWxsaW5nIG1lbWFsaWduIHdpdGggYW4gYXJndW1lbnQgb2YgOCBvciBsZXNzLgorCisgIE92ZXJyZWxpYW5jZSBvbiBtZW1hbGlnbiBpcyBhIHN1cmUgd2F5IHRvIGZyYWdtZW50IHNwYWNlLgorKi8KK3ZvaWQqIGRsbWVtYWxpZ24oc2l6ZV90LCBzaXplX3QpOworCisvKgorICB2YWxsb2Moc2l6ZV90IG4pOworICBFcXVpdmFsZW50IHRvIG1lbWFsaWduKHBhZ2VzaXplLCBuKSwgd2hlcmUgcGFnZXNpemUgaXMgdGhlIHBhZ2UKKyAgc2l6ZSBvZiB0aGUgc3lzdGVtLiBJZiB0aGUgcGFnZXNpemUgaXMgdW5rbm93biwgNDA5NiBpcyB1c2VkLgorKi8KK3ZvaWQqIGRsdmFsbG9jKHNpemVfdCk7CisKKy8qCisgIG1hbGxvcHQoaW50IHBhcmFtZXRlcl9udW1iZXIsIGludCBwYXJhbWV0ZXJfdmFsdWUpCisgIFNldHMgdHVuYWJsZSBwYXJhbWV0ZXJzIFRoZSBmb3JtYXQgaXMgdG8gcHJvdmlkZSBhCisgIChwYXJhbWV0ZXItbnVtYmVyLCBwYXJhbWV0ZXItdmFsdWUpIHBhaXIuICBtYWxsb3B0IHRoZW4gc2V0cyB0aGUKKyAgY29ycmVzcG9uZGluZyBwYXJhbWV0ZXIgdG8gdGhlIGFyZ3VtZW50IHZhbHVlIGlmIGl0IGNhbiAoaS5lLiwgc28KKyAgbG9uZyBhcyB0aGUgdmFsdWUgaXMgbWVhbmluZ2Z1bCksIGFuZCByZXR1cm5zIDEgaWYgc3VjY2Vzc2Z1bCBlbHNlCisgIDAuICBTVklEL1hQRy9BTlNJIGRlZmluZXMgZm91ciBzdGFuZGFyZCBwYXJhbSBudW1iZXJzIGZvciBtYWxsb3B0LAorICBub3JtYWxseSBkZWZpbmVkIGluIG1hbGxvYy5oLiAgTm9uZSBvZiB0aGVzZSBhcmUgdXNlIGluIHRoaXMgbWFsbG9jLAorICBzbyBzZXR0aW5nIHRoZW0gaGFzIG5vIGVmZmVjdC4gQnV0IHRoaXMgbWFsbG9jIGFsc28gc3VwcG9ydHMgb3RoZXIKKyAgb3B0aW9ucyBpbiBtYWxsb3B0LiBTZWUgYmVsb3cgZm9yIGRldGFpbHMuICBCcmllZmx5LCBzdXBwb3J0ZWQKKyAgcGFyYW1ldGVycyBhcmUgYXMgZm9sbG93cyAobGlzdGVkIGRlZmF1bHRzIGFyZSBmb3IgInR5cGljYWwiCisgIGNvbmZpZ3VyYXRpb25zKS4KKworICBTeW1ib2wgICAgICAgICAgICBwYXJhbSAjICBkZWZhdWx0ICAgIGFsbG93ZWQgcGFyYW0gdmFsdWVzCisgIE1fVFJJTV9USFJFU0hPTEQgICAgIC0xICAgMioxMDI0KjEwMjQgICBhbnkgICAoTUFYX1NJWkVfVCBkaXNhYmxlcykKKyAgTV9HUkFOVUxBUklUWSAgICAgICAgLTIgICAgIHBhZ2Ugc2l6ZSAgIGFueSBwb3dlciBvZiAyID49IHBhZ2Ugc2l6ZQorICBNX01NQVBfVEhSRVNIT0xEICAgICAtMyAgICAgIDI1NioxMDI0ICAgYW55ICAgKG9yIDAgaWYgbm8gTU1BUCBzdXBwb3J0KQorKi8KK2ludCBkbG1hbGxvcHQoaW50LCBpbnQpOworCisvKgorICBtYWxsb2NfZm9vdHByaW50KCk7CisgIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBvYnRhaW5lZCBmcm9tIHRoZSBzeXN0ZW0uICBUaGUgdG90YWwKKyAgbnVtYmVyIG9mIGJ5dGVzIGFsbG9jYXRlZCBieSBtYWxsb2MsIHJlYWxsb2MgZXRjLiwgaXMgbGVzcyB0aGFuIHRoaXMKKyAgdmFsdWUuIFVubGlrZSBtYWxsaW5mbywgdGhpcyBmdW5jdGlvbiByZXR1cm5zIG9ubHkgYSBwcmVjb21wdXRlZAorICByZXN1bHQsIHNvIGNhbiBiZSBjYWxsZWQgZnJlcXVlbnRseSB0byBtb25pdG9yIG1lbW9yeSBjb25zdW1wdGlvbi4KKyAgRXZlbiBpZiBsb2NrcyBhcmUgb3RoZXJ3aXNlIGRlZmluZWQsIHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgdXNlIHRoZW0sCisgIHNvIHJlc3VsdHMgbWlnaHQgbm90IGJlIHVwIHRvIGRhdGUuCisqLworc2l6ZV90IGRsbWFsbG9jX2Zvb3RwcmludCh2b2lkKTsKKworI2lmIFVTRV9NQVhfQUxMT1dFRF9GT09UUFJJTlQKKy8qCisgIG1hbGxvY19tYXhfYWxsb3dlZF9mb290cHJpbnQoKTsKKyAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgdGhlIGhlYXAgaXMgYWxsb3dlZCB0byBvYnRhaW4KKyAgZnJvbSB0aGUgc3lzdGVtLiAgbWFsbG9jX2Zvb3RwcmludCgpIHNob3VsZCBhbHdheXMgcmV0dXJuIGEKKyAgc2l6ZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gbWF4X2FsbG93ZWRfZm9vdHByaW50LCB1bmxlc3MgdGhlCisgIG1heF9hbGxvd2VkX2Zvb3RwcmludCB3YXMgc2V0IHRvIGEgdmFsdWUgc21hbGxlciB0aGFuIHRoZQorICBmb290cHJpbnQgYXQgdGhlIHRpbWUuCisqLworc2l6ZV90IGRsbWFsbG9jX21heF9hbGxvd2VkX2Zvb3RwcmludCgpOworCisvKgorICBtYWxsb2Nfc2V0X21heF9hbGxvd2VkX2Zvb3RwcmludCgpOworICBTZXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRoYXQgdGhlIGhlYXAgaXMgYWxsb3dlZCB0bworICBvYnRhaW4gZnJvbSB0aGUgc3lzdGVtLiAgVGhlIHNpemUgd2lsbCBiZSByb3VuZGVkIHVwIHRvIGEgd2hvbGUKKyAgcGFnZSwgYW5kIHRoZSByb3VuZGVkIG51bWJlciB3aWxsIGJlIHJldHVybmVkIGZyb20gZnV0dXJlIGNhbGxzCisgIHRvIG1hbGxvY19tYXhfYWxsb3dlZF9mb290cHJpbnQoKS4gIElmIHRoZSBuZXcgbWF4X2FsbG93ZWRfZm9vdHByaW50CisgIGlzIGxhcmdlciB0aGFuIHRoZSBjdXJyZW50IGZvb3RwcmludCwgdGhlIGhlYXAgd2lsbCBuZXZlciBncm93CisgIGxhcmdlciB0aGFuIG1heF9hbGxvd2VkX2Zvb3RwcmludC4gIElmIHRoZSBuZXcgbWF4X2FsbG93ZWRfZm9vdHByaW50CisgIGlzIHNtYWxsZXIgdGhhbiB0aGUgY3VycmVudCBmb290cHJpbnQsIHRoZSBoZWFwIHdpbGwgbm90IGdyb3cKKyAgZnVydGhlci4KKworICBUT0RPOiB0cnkgdG8gZm9yY2UgdGhlIGhlYXAgdG8gZ2l2ZSB1cCBtZW1vcnkgaW4gdGhlIHNocmluayBjYXNlLAorICAgICAgICBhbmQgdXBkYXRlIHRoaXMgY29tbWVudCBvbmNlIHRoYXQgaGFwcGVucy4KKyovCit2b2lkIGRsbWFsbG9jX3NldF9tYXhfYWxsb3dlZF9mb290cHJpbnQoc2l6ZV90IGJ5dGVzKTsKKyNlbmRpZiAvKiBVU0VfTUFYX0FMTE9XRURfRk9PVFBSSU5UICovCisKKy8qCisgIG1hbGxvY19tYXhfZm9vdHByaW50KCk7CisgIFJldHVybnMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIG9idGFpbmVkIGZyb20gdGhlIHN5c3RlbS4gVGhpcworICB2YWx1ZSB3aWxsIGJlIGdyZWF0ZXIgdGhhbiBjdXJyZW50IGZvb3RwcmludCBpZiBkZWFsbG9jYXRlZCBzcGFjZQorICBoYXMgYmVlbiByZWNsYWltZWQgYnkgdGhlIHN5c3RlbS4gVGhlIHBlYWsgbnVtYmVyIG9mIGJ5dGVzIGFsbG9jYXRlZAorICBieSBtYWxsb2MsIHJlYWxsb2MgZXRjLiwgaXMgbGVzcyB0aGFuIHRoaXMgdmFsdWUuIFVubGlrZSBtYWxsaW5mbywKKyAgdGhpcyBmdW5jdGlvbiByZXR1cm5zIG9ubHkgYSBwcmVjb21wdXRlZCByZXN1bHQsIHNvIGNhbiBiZSBjYWxsZWQKKyAgZnJlcXVlbnRseSB0byBtb25pdG9yIG1lbW9yeSBjb25zdW1wdGlvbi4gIEV2ZW4gaWYgbG9ja3MgYXJlCisgIG90aGVyd2lzZSBkZWZpbmVkLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IHVzZSB0aGVtLCBzbyByZXN1bHRzIG1pZ2h0CisgIG5vdCBiZSB1cCB0byBkYXRlLgorKi8KK3NpemVfdCBkbG1hbGxvY19tYXhfZm9vdHByaW50KHZvaWQpOworCisjaWYgIU5PX01BTExJTkZPCisvKgorICBtYWxsaW5mbygpCisgIFJldHVybnMgKGJ5IGNvcHkpIGEgc3RydWN0IGNvbnRhaW5pbmcgdmFyaW91cyBzdW1tYXJ5IHN0YXRpc3RpY3M6CisKKyAgYXJlbmE6ICAgICBjdXJyZW50IHRvdGFsIG5vbi1tbWFwcGVkIGJ5dGVzIGFsbG9jYXRlZCBmcm9tIHN5c3RlbQorICBvcmRibGtzOiAgIHRoZSBudW1iZXIgb2YgZnJlZSBjaHVua3MKKyAgc21ibGtzOiAgICBhbHdheXMgemVyby4KKyAgaGJsa3M6ICAgICBjdXJyZW50IG51bWJlciBvZiBtbWFwcGVkIHJlZ2lvbnMKKyAgaGJsa2hkOiAgICB0b3RhbCBieXRlcyBoZWxkIGluIG1tYXBwZWQgcmVnaW9ucworICB1c21ibGtzOiAgIHRoZSBtYXhpbXVtIHRvdGFsIGFsbG9jYXRlZCBzcGFjZS4gVGhpcyB3aWxsIGJlIGdyZWF0ZXIKKyAgICAgICAgICAgICAgICB0aGFuIGN1cnJlbnQgdG90YWwgaWYgdHJpbW1pbmcgaGFzIG9jY3VycmVkLgorICBmc21ibGtzOiAgIGFsd2F5cyB6ZXJvCisgIHVvcmRibGtzOiAgY3VycmVudCB0b3RhbCBhbGxvY2F0ZWQgc3BhY2UgKG5vcm1hbCBvciBtbWFwcGVkKQorICBmb3JkYmxrczogIHRvdGFsIGZyZWUgc3BhY2UKKyAga2VlcGNvc3Q6ICB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBjb3VsZCBpZGVhbGx5IGJlIHJlbGVhc2VkCisgICAgICAgICAgICAgICBiYWNrIHRvIHN5c3RlbSB2aWEgbWFsbG9jX3RyaW0uICgiaWRlYWxseSIgbWVhbnMgdGhhdAorICAgICAgICAgICAgICAgaXQgaWdub3JlcyBwYWdlIHJlc3RyaWN0aW9ucyBldGMuKQorCisgIEJlY2F1c2UgdGhlc2UgZmllbGRzIGFyZSBpbnRzLCBidXQgaW50ZXJuYWwgYm9va2tlZXBpbmcgbWF5CisgIGJlIGtlcHQgYXMgbG9uZ3MsIHRoZSByZXBvcnRlZCB2YWx1ZXMgbWF5IHdyYXAgYXJvdW5kIHplcm8gYW5kCisgIHRodXMgYmUgaW5hY2N1cmF0ZS4KKyovCitzdHJ1Y3QgbWFsbGluZm8gZGxtYWxsaW5mbyh2b2lkKTsKKyNlbmRpZiAvKiBOT19NQUxMSU5GTyAqLworCisvKgorICBpbmRlcGVuZGVudF9jYWxsb2Moc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBlbGVtZW50X3NpemUsIHZvaWQqIGNodW5rc1tdKTsKKworICBpbmRlcGVuZGVudF9jYWxsb2MgaXMgc2ltaWxhciB0byBjYWxsb2MsIGJ1dCBpbnN0ZWFkIG9mIHJldHVybmluZyBhCisgIHNpbmdsZSBjbGVhcmVkIHNwYWNlLCBpdCByZXR1cm5zIGFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIG5fZWxlbWVudHMKKyAgaW5kZXBlbmRlbnQgZWxlbWVudHMgdGhhdCBjYW4gaG9sZCBjb250ZW50cyBvZiBzaXplIGVsZW1fc2l6ZSwgZWFjaAorICBvZiB3aGljaCBzdGFydHMgb3V0IGNsZWFyZWQsIGFuZCBjYW4gYmUgaW5kZXBlbmRlbnRseSBmcmVlZCwKKyAgcmVhbGxvYydlZCBldGMuIFRoZSBlbGVtZW50cyBhcmUgZ3VhcmFudGVlZCB0byBiZSBhZGphY2VudGx5CisgIGFsbG9jYXRlZCAodGhpcyBpcyBub3QgZ3VhcmFudGVlZCB0byBvY2N1ciB3aXRoIG11bHRpcGxlIGNhbGxvY3Mgb3IKKyAgbWFsbG9jcyksIHdoaWNoIG1heSBhbHNvIGltcHJvdmUgY2FjaGUgbG9jYWxpdHkgaW4gc29tZQorICBhcHBsaWNhdGlvbnMuCisKKyAgVGhlICJjaHVua3MiIGFyZ3VtZW50IGlzIG9wdGlvbmFsIChpLmUuLCBtYXkgYmUgbnVsbCwgd2hpY2ggaXMKKyAgcHJvYmFibHkgdGhlIG1vc3QgdHlwaWNhbCB1c2FnZSkuIElmIGl0IGlzIG51bGwsIHRoZSByZXR1cm5lZCBhcnJheQorICBpcyBpdHNlbGYgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFuZCBzaG91bGQgYWxzbyBiZSBmcmVlZCB3aGVuIGl0IGlzCisgIG5vIGxvbmdlciBuZWVkZWQuIE90aGVyd2lzZSwgdGhlIGNodW5rcyBhcnJheSBtdXN0IGJlIG9mIGF0IGxlYXN0CisgIG5fZWxlbWVudHMgaW4gbGVuZ3RoLiBJdCBpcyBmaWxsZWQgaW4gd2l0aCB0aGUgcG9pbnRlcnMgdG8gdGhlCisgIGNodW5rcy4KKworICBJbiBlaXRoZXIgY2FzZSwgaW5kZXBlbmRlbnRfY2FsbG9jIHJldHVybnMgdGhpcyBwb2ludGVyIGFycmF5LCBvcgorICBudWxsIGlmIHRoZSBhbGxvY2F0aW9uIGZhaWxlZC4gIElmIG5fZWxlbWVudHMgaXMgemVybyBhbmQgImNodW5rcyIKKyAgaXMgbnVsbCwgaXQgcmV0dXJucyBhIGNodW5rIHJlcHJlc2VudGluZyBhbiBhcnJheSB3aXRoIHplcm8gZWxlbWVudHMKKyAgKHdoaWNoIHNob3VsZCBiZSBmcmVlZCBpZiBub3Qgd2FudGVkKS4KKworICBFYWNoIGVsZW1lbnQgbXVzdCBiZSBpbmRpdmlkdWFsbHkgZnJlZWQgd2hlbiBpdCBpcyBubyBsb25nZXIKKyAgbmVlZGVkLiBJZiB5b3UnZCBsaWtlIHRvIGluc3RlYWQgYmUgYWJsZSB0byBmcmVlIGFsbCBhdCBvbmNlLCB5b3UKKyAgc2hvdWxkIGluc3RlYWQgdXNlIHJlZ3VsYXIgY2FsbG9jIGFuZCBhc3NpZ24gcG9pbnRlcnMgaW50byB0aGlzCisgIHNwYWNlIHRvIHJlcHJlc2VudCBlbGVtZW50cy4gIChJbiB0aGlzIGNhc2UgdGhvdWdoLCB5b3UgY2Fubm90CisgIGluZGVwZW5kZW50bHkgZnJlZSBlbGVtZW50cy4pCisKKyAgaW5kZXBlbmRlbnRfY2FsbG9jIHNpbXBsaWZpZXMgYW5kIHNwZWVkcyB1cCBpbXBsZW1lbnRhdGlvbnMgb2YgbWFueQorICBraW5kcyBvZiBwb29scy4gIEl0IG1heSBhbHNvIGJlIHVzZWZ1bCB3aGVuIGNvbnN0cnVjdGluZyBsYXJnZSBkYXRhCisgIHN0cnVjdHVyZXMgdGhhdCBpbml0aWFsbHkgaGF2ZSBhIGZpeGVkIG51bWJlciBvZiBmaXhlZC1zaXplZCBub2RlcywKKyAgYnV0IHRoZSBudW1iZXIgaXMgbm90IGtub3duIGF0IGNvbXBpbGUgdGltZSwgYW5kIHNvbWUgb2YgdGhlIG5vZGVzCisgIG1heSBsYXRlciBuZWVkIHRvIGJlIGZyZWVkLiBGb3IgZXhhbXBsZToKKworICBzdHJ1Y3QgTm9kZSB7IGludCBpdGVtOyBzdHJ1Y3QgTm9kZSogbmV4dDsgfTsKKworICBzdHJ1Y3QgTm9kZSogYnVpbGRfbGlzdCgpIHsKKyAgICBzdHJ1Y3QgTm9kZSoqIHBvb2w7CisgICAgaW50IG4gPSByZWFkX251bWJlcl9vZl9ub2Rlc19uZWVkZWQoKTsKKyAgICBpZiAobiA8PSAwKSByZXR1cm4gMDsKKyAgICBwb29sID0gKHN0cnVjdCBOb2RlKiopKGluZGVwZW5kZW50X2NhbGxvYyhuLCBzaXplb2Yoc3RydWN0IE5vZGUpLCAwKTsKKyAgICBpZiAocG9vbCA9PSAwKSBkaWUoKTsKKyAgICAvLyBvcmdhbml6ZSBpbnRvIGEgbGlua2VkIGxpc3QuLi4KKyAgICBzdHJ1Y3QgTm9kZSogZmlyc3QgPSBwb29sWzBdOworICAgIGZvciAoaSA9IDA7IGkgPCBuLTE7ICsraSkKKyAgICAgIHBvb2xbaV0tPm5leHQgPSBwb29sW2krMV07CisgICAgZnJlZShwb29sKTsgICAgIC8vIENhbiBub3cgZnJlZSB0aGUgYXJyYXkgKG9yIG5vdCwgaWYgaXQgaXMgbmVlZGVkIGxhdGVyKQorICAgIHJldHVybiBmaXJzdDsKKyAgfQorKi8KK3ZvaWQqKiBkbGluZGVwZW5kZW50X2NhbGxvYyhzaXplX3QsIHNpemVfdCwgdm9pZCoqKTsKKworLyoKKyAgaW5kZXBlbmRlbnRfY29tYWxsb2Moc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBzaXplc1tdLCB2b2lkKiBjaHVua3NbXSk7CisKKyAgaW5kZXBlbmRlbnRfY29tYWxsb2MgYWxsb2NhdGVzLCBhbGwgYXQgb25jZSwgYSBzZXQgb2Ygbl9lbGVtZW50cworICBjaHVua3Mgd2l0aCBzaXplcyBpbmRpY2F0ZWQgaW4gdGhlICJzaXplcyIgYXJyYXkuICAgIEl0IHJldHVybnMKKyAgYW4gYXJyYXkgb2YgcG9pbnRlcnMgdG8gdGhlc2UgZWxlbWVudHMsIGVhY2ggb2Ygd2hpY2ggY2FuIGJlCisgIGluZGVwZW5kZW50bHkgZnJlZWQsIHJlYWxsb2MnZWQgZXRjLiBUaGUgZWxlbWVudHMgYXJlIGd1YXJhbnRlZWQgdG8KKyAgYmUgYWRqYWNlbnRseSBhbGxvY2F0ZWQgKHRoaXMgaXMgbm90IGd1YXJhbnRlZWQgdG8gb2NjdXIgd2l0aAorICBtdWx0aXBsZSBjYWxsb2NzIG9yIG1hbGxvY3MpLCB3aGljaCBtYXkgYWxzbyBpbXByb3ZlIGNhY2hlIGxvY2FsaXR5CisgIGluIHNvbWUgYXBwbGljYXRpb25zLgorCisgIFRoZSAiY2h1bmtzIiBhcmd1bWVudCBpcyBvcHRpb25hbCAoaS5lLiwgbWF5IGJlIG51bGwpLiBJZiBpdCBpcyBudWxsCisgIHRoZSByZXR1cm5lZCBhcnJheSBpcyBpdHNlbGYgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFuZCBzaG91bGQgYWxzbworICBiZSBmcmVlZCB3aGVuIGl0IGlzIG5vIGxvbmdlciBuZWVkZWQuIE90aGVyd2lzZSwgdGhlIGNodW5rcyBhcnJheQorICBtdXN0IGJlIG9mIGF0IGxlYXN0IG5fZWxlbWVudHMgaW4gbGVuZ3RoLiBJdCBpcyBmaWxsZWQgaW4gd2l0aCB0aGUKKyAgcG9pbnRlcnMgdG8gdGhlIGNodW5rcy4KKworICBJbiBlaXRoZXIgY2FzZSwgaW5kZXBlbmRlbnRfY29tYWxsb2MgcmV0dXJucyB0aGlzIHBvaW50ZXIgYXJyYXksIG9yCisgIG51bGwgaWYgdGhlIGFsbG9jYXRpb24gZmFpbGVkLiAgSWYgbl9lbGVtZW50cyBpcyB6ZXJvIGFuZCBjaHVua3MgaXMKKyAgbnVsbCwgaXQgcmV0dXJucyBhIGNodW5rIHJlcHJlc2VudGluZyBhbiBhcnJheSB3aXRoIHplcm8gZWxlbWVudHMKKyAgKHdoaWNoIHNob3VsZCBiZSBmcmVlZCBpZiBub3Qgd2FudGVkKS4KKworICBFYWNoIGVsZW1lbnQgbXVzdCBiZSBpbmRpdmlkdWFsbHkgZnJlZWQgd2hlbiBpdCBpcyBubyBsb25nZXIKKyAgbmVlZGVkLiBJZiB5b3UnZCBsaWtlIHRvIGluc3RlYWQgYmUgYWJsZSB0byBmcmVlIGFsbCBhdCBvbmNlLCB5b3UKKyAgc2hvdWxkIGluc3RlYWQgdXNlIGEgc2luZ2xlIHJlZ3VsYXIgbWFsbG9jLCBhbmQgYXNzaWduIHBvaW50ZXJzIGF0CisgIHBhcnRpY3VsYXIgb2Zmc2V0cyBpbiB0aGUgYWdncmVnYXRlIHNwYWNlLiAoSW4gdGhpcyBjYXNlIHRob3VnaCwgeW91CisgIGNhbm5vdCBpbmRlcGVuZGVudGx5IGZyZWUgZWxlbWVudHMuKQorCisgIGluZGVwZW5kZW50X2NvbWFsbGFjIGRpZmZlcnMgZnJvbSBpbmRlcGVuZGVudF9jYWxsb2MgaW4gdGhhdCBlYWNoCisgIGVsZW1lbnQgbWF5IGhhdmUgYSBkaWZmZXJlbnQgc2l6ZSwgYW5kIGFsc28gdGhhdCBpdCBkb2VzIG5vdAorICBhdXRvbWF0aWNhbGx5IGNsZWFyIGVsZW1lbnRzLgorCisgIGluZGVwZW5kZW50X2NvbWFsbG9jIGNhbiBiZSB1c2VkIHRvIHNwZWVkIHVwIGFsbG9jYXRpb24gaW4gY2FzZXMKKyAgd2hlcmUgc2V2ZXJhbCBzdHJ1Y3RzIG9yIG9iamVjdHMgbXVzdCBhbHdheXMgYmUgYWxsb2NhdGVkIGF0IHRoZQorICBzYW1lIHRpbWUuICBGb3IgZXhhbXBsZToKKworICBzdHJ1Y3QgSGVhZCB7IC4uLiB9CisgIHN0cnVjdCBGb290IHsgLi4uIH0KKworICB2b2lkIHNlbmRfbWVzc2FnZShjaGFyKiBtc2cpIHsKKyAgICBpbnQgbXNnbGVuID0gc3RybGVuKG1zZyk7CisgICAgc2l6ZV90IHNpemVzWzNdID0geyBzaXplb2Yoc3RydWN0IEhlYWQpLCBtc2dsZW4sIHNpemVvZihzdHJ1Y3QgRm9vdCkgfTsKKyAgICB2b2lkKiBjaHVua3NbM107CisgICAgaWYgKGluZGVwZW5kZW50X2NvbWFsbG9jKDMsIHNpemVzLCBjaHVua3MpID09IDApCisgICAgICBkaWUoKTsKKyAgICBzdHJ1Y3QgSGVhZCogaGVhZCA9IChzdHJ1Y3QgSGVhZCopKGNodW5rc1swXSk7CisgICAgY2hhciogICAgICAgIGJvZHkgPSAoY2hhciopKGNodW5rc1sxXSk7CisgICAgc3RydWN0IEZvb3QqIGZvb3QgPSAoc3RydWN0IEZvb3QqKShjaHVua3NbMl0pOworICAgIC8vIC4uLgorICB9CisKKyAgSW4gZ2VuZXJhbCB0aG91Z2gsIGluZGVwZW5kZW50X2NvbWFsbG9jIGlzIHdvcnRoIHVzaW5nIG9ubHkgZm9yCisgIGxhcmdlciB2YWx1ZXMgb2Ygbl9lbGVtZW50cy4gRm9yIHNtYWxsIHZhbHVlcywgeW91IHByb2JhYmx5IHdvbid0CisgIGRldGVjdCBlbm91Z2ggZGlmZmVyZW5jZSBmcm9tIHNlcmllcyBvZiBtYWxsb2MgY2FsbHMgdG8gYm90aGVyLgorCisgIE92ZXJ1c2Ugb2YgaW5kZXBlbmRlbnRfY29tYWxsb2MgY2FuIGluY3JlYXNlIG92ZXJhbGwgbWVtb3J5IHVzYWdlLAorICBzaW5jZSBpdCBjYW5ub3QgcmV1c2UgZXhpc3Rpbmcgbm9uY29udGlndW91cyBzbWFsbCBjaHVua3MgdGhhdAorICBtaWdodCBiZSBhdmFpbGFibGUgZm9yIHNvbWUgb2YgdGhlIGVsZW1lbnRzLgorKi8KK3ZvaWQqKiBkbGluZGVwZW5kZW50X2NvbWFsbG9jKHNpemVfdCwgc2l6ZV90Kiwgdm9pZCoqKTsKKworCisvKgorICBwdmFsbG9jKHNpemVfdCBuKTsKKyAgRXF1aXZhbGVudCB0byB2YWxsb2MobWluaW11bS1wYWdlLXRoYXQtaG9sZHMobikpLCB0aGF0IGlzLAorICByb3VuZCB1cCBuIHRvIG5lYXJlc3QgcGFnZXNpemUuCisgKi8KK3ZvaWQqICBkbHB2YWxsb2Moc2l6ZV90KTsKKworLyoKKyAgbWFsbG9jX3RyaW0oc2l6ZV90IHBhZCk7CisKKyAgSWYgcG9zc2libGUsIGdpdmVzIG1lbW9yeSBiYWNrIHRvIHRoZSBzeXN0ZW0gKHZpYSBuZWdhdGl2ZSBhcmd1bWVudHMKKyAgdG8gc2JyaykgaWYgdGhlcmUgaXMgdW51c2VkIG1lbW9yeSBhdCB0aGUgYGhpZ2gnIGVuZCBvZiB0aGUgbWFsbG9jCisgIHBvb2wgb3IgaW4gdW51c2VkIE1NQVAgc2VnbWVudHMuIFlvdSBjYW4gY2FsbCB0aGlzIGFmdGVyIGZyZWVpbmcKKyAgbGFyZ2UgYmxvY2tzIG9mIG1lbW9yeSB0byBwb3RlbnRpYWxseSByZWR1Y2UgdGhlIHN5c3RlbS1sZXZlbCBtZW1vcnkKKyAgcmVxdWlyZW1lbnRzIG9mIGEgcHJvZ3JhbS4gSG93ZXZlciwgaXQgY2Fubm90IGd1YXJhbnRlZSB0byByZWR1Y2UKKyAgbWVtb3J5LiBVbmRlciBzb21lIGFsbG9jYXRpb24gcGF0dGVybnMsIHNvbWUgbGFyZ2UgZnJlZSBibG9ja3Mgb2YKKyAgbWVtb3J5IHdpbGwgYmUgbG9ja2VkIGJldHdlZW4gdHdvIHVzZWQgY2h1bmtzLCBzbyB0aGV5IGNhbm5vdCBiZQorICBnaXZlbiBiYWNrIHRvIHRoZSBzeXN0ZW0uCisKKyAgVGhlIGBwYWQnIGFyZ3VtZW50IHRvIG1hbGxvY190cmltIHJlcHJlc2VudHMgdGhlIGFtb3VudCBvZiBmcmVlCisgIHRyYWlsaW5nIHNwYWNlIHRvIGxlYXZlIHVudHJpbW1lZC4gSWYgdGhpcyBhcmd1bWVudCBpcyB6ZXJvLCBvbmx5CisgIHRoZSBtaW5pbXVtIGFtb3VudCBvZiBtZW1vcnkgdG8gbWFpbnRhaW4gaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzCisgIHdpbGwgYmUgbGVmdC4gTm9uLXplcm8gYXJndW1lbnRzIGNhbiBiZSBzdXBwbGllZCB0byBtYWludGFpbiBlbm91Z2gKKyAgdHJhaWxpbmcgc3BhY2UgdG8gc2VydmljZSBmdXR1cmUgZXhwZWN0ZWQgYWxsb2NhdGlvbnMgd2l0aG91dCBoYXZpbmcKKyAgdG8gcmUtb2J0YWluIG1lbW9yeSBmcm9tIHRoZSBzeXN0ZW0uCisKKyAgTWFsbG9jX3RyaW0gcmV0dXJucyAxIGlmIGl0IGFjdHVhbGx5IHJlbGVhc2VkIGFueSBtZW1vcnksIGVsc2UgMC4KKyovCitpbnQgIGRsbWFsbG9jX3RyaW0oc2l6ZV90KTsKKworLyoKKyAgbWFsbG9jX3dhbGtfZnJlZV9wYWdlcyhoYW5kbGVyLCBoYXJnKQorCisgIENhbGxzIHRoZSBwcm92aWRlZCBoYW5kbGVyIG9uIGVhY2ggZnJlZSByZWdpb24gaW4gdGhlIGhlYXAuICBUaGUKKyAgbWVtb3J5IGJldHdlZW4gc3RhcnQgYW5kIGVuZCBhcmUgZ3VhcmFudGVlZCBub3QgdG8gY29udGFpbiBhbnkKKyAgaW1wb3J0YW50IGRhdGEsIHNvIHRoZSBoYW5kbGVyIGlzIGZyZWUgdG8gYWx0ZXIgdGhlIGNvbnRlbnRzCisgIGluIGFueSB3YXkuICBUaGlzIGNhbiBiZSB1c2VkIHRvIGFkdmlzZSB0aGUgT1MgdGhhdCBsYXJnZSBmcmVlCisgIHJlZ2lvbnMgbWF5IGJlIHN3YXBwZWQgb3V0LgorCisgIFRoZSB2YWx1ZSBpbiBoYXJnIHdpbGwgYmUgcGFzc2VkIHRvIGVhY2ggY2FsbCBvZiB0aGUgaGFuZGxlci4KKyAqLwordm9pZCBkbG1hbGxvY193YWxrX2ZyZWVfcGFnZXModm9pZCgqKSh2b2lkKiwgdm9pZCosIHZvaWQqKSwgdm9pZCopOworCisvKgorICBtYWxsb2Nfd2Fsa19oZWFwKGhhbmRsZXIsIGhhcmcpCisKKyAgQ2FsbHMgdGhlIHByb3ZpZGVkIGhhbmRsZXIgb24gZWFjaCBvYmplY3Qgb3IgZnJlZSByZWdpb24gaW4gdGhlCisgIGhlYXAuICBUaGUgaGFuZGxlciB3aWxsIHJlY2VpdmUgdGhlIGNodW5rIHBvaW50ZXIgYW5kIGxlbmd0aCwgdGhlCisgIG9iamVjdCBwb2ludGVyIGFuZCBsZW5ndGgsIGFuZCB0aGUgdmFsdWUgaW4gaGFyZyBvbiBlYWNoIGNhbGwuCisgKi8KK3ZvaWQgZGxtYWxsb2Nfd2Fsa19oZWFwKHZvaWQoKikoY29uc3Qgdm9pZCosIHNpemVfdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCosIHNpemVfdCwgdm9pZCopLAorICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCopOworCisvKgorICBtYWxsb2NfdXNhYmxlX3NpemUodm9pZCogcCk7CisKKyAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHlvdSBjYW4gYWN0dWFsbHkgdXNlIGluCisgIGFuIGFsbG9jYXRlZCBjaHVuaywgd2hpY2ggbWF5IGJlIG1vcmUgdGhhbiB5b3UgcmVxdWVzdGVkIChhbHRob3VnaAorICBvZnRlbiBub3QpIGR1ZSB0byBhbGlnbm1lbnQgYW5kIG1pbmltdW0gc2l6ZSBjb25zdHJhaW50cy4KKyAgWW91IGNhbiB1c2UgdGhpcyBtYW55IGJ5dGVzIHdpdGhvdXQgd29ycnlpbmcgYWJvdXQKKyAgb3ZlcndyaXRpbmcgb3RoZXIgYWxsb2NhdGVkIG9iamVjdHMuIFRoaXMgaXMgbm90IGEgcGFydGljdWxhcmx5IGdyZWF0CisgIHByb2dyYW1taW5nIHByYWN0aWNlLiBtYWxsb2NfdXNhYmxlX3NpemUgY2FuIGJlIG1vcmUgdXNlZnVsIGluCisgIGRlYnVnZ2luZyBhbmQgYXNzZXJ0aW9ucywgZm9yIGV4YW1wbGU6CisKKyAgcCA9IG1hbGxvYyhuKTsKKyAgYXNzZXJ0KG1hbGxvY191c2FibGVfc2l6ZShwKSA+PSAyNTYpOworKi8KK3NpemVfdCBkbG1hbGxvY191c2FibGVfc2l6ZSh2b2lkKik7CisKKy8qCisgIG1hbGxvY19zdGF0cygpOworICBQcmludHMgb24gc3RkZXJyIHRoZSBhbW91bnQgb2Ygc3BhY2Ugb2J0YWluZWQgZnJvbSB0aGUgc3lzdGVtIChib3RoCisgIHZpYSBzYnJrIGFuZCBtbWFwKSwgdGhlIG1heGltdW0gYW1vdW50ICh3aGljaCBtYXkgYmUgbW9yZSB0aGFuCisgIGN1cnJlbnQgaWYgbWFsbG9jX3RyaW0gYW5kL29yIG11bm1hcCBnb3QgY2FsbGVkKSwgYW5kIHRoZSBjdXJyZW50CisgIG51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQgdmlhIG1hbGxvYyAob3IgcmVhbGxvYywgZXRjKSBidXQgbm90IHlldAorICBmcmVlZC4gTm90ZSB0aGF0IHRoaXMgaXMgdGhlIG51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQsIG5vdCB0aGUKKyAgbnVtYmVyIHJlcXVlc3RlZC4gSXQgd2lsbCBiZSBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyIHJlcXVlc3RlZAorICBiZWNhdXNlIG9mIGFsaWdubWVudCBhbmQgYm9va2tlZXBpbmcgb3ZlcmhlYWQuIEJlY2F1c2UgaXQgaW5jbHVkZXMKKyAgYWxpZ25tZW50IHdhc3RhZ2UgYXMgYmVpbmcgaW4gdXNlLCB0aGlzIGZpZ3VyZSBtYXkgYmUgZ3JlYXRlciB0aGFuCisgIHplcm8gZXZlbiB3aGVuIG5vIHVzZXItbGV2ZWwgY2h1bmtzIGFyZSBhbGxvY2F0ZWQuCisKKyAgVGhlIHJlcG9ydGVkIGN1cnJlbnQgYW5kIG1heGltdW0gc3lzdGVtIG1lbW9yeSBjYW4gYmUgaW5hY2N1cmF0ZSBpZgorICBhIHByb2dyYW0gbWFrZXMgb3RoZXIgY2FsbHMgdG8gc3lzdGVtIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9ucworICAobm9ybWFsbHkgc2Jyaykgb3V0c2lkZSBvZiBtYWxsb2MuCisKKyAgbWFsbG9jX3N0YXRzIHByaW50cyBvbmx5IHRoZSBtb3N0IGNvbW1vbmx5IGludGVyZXN0aW5nIHN0YXRpc3RpY3MuCisgIE1vcmUgaW5mb3JtYXRpb24gY2FuIGJlIG9idGFpbmVkIGJ5IGNhbGxpbmcgbWFsbGluZm8uCisqLwordm9pZCAgZGxtYWxsb2Nfc3RhdHModm9pZCk7CisKKyNlbmRpZiAvKiBPTkxZX01TUEFDRVMgKi8KKworI2lmIE1TUEFDRVMKKworLyoKKyAgbXNwYWNlIGlzIGFuIG9wYXF1ZSB0eXBlIHJlcHJlc2VudGluZyBhbiBpbmRlcGVuZGVudAorICByZWdpb24gb2Ygc3BhY2UgdGhhdCBzdXBwb3J0cyBtc3BhY2VfbWFsbG9jLCBldGMuCisqLwordHlwZWRlZiB2b2lkKiBtc3BhY2U7CisKKy8qCisgIGNyZWF0ZV9tc3BhY2UgY3JlYXRlcyBhbmQgcmV0dXJucyBhIG5ldyBpbmRlcGVuZGVudCBzcGFjZSB3aXRoIHRoZQorICBnaXZlbiBpbml0aWFsIGNhcGFjaXR5LCBvciwgaWYgMCwgdGhlIGRlZmF1bHQgZ3JhbnVsYXJpdHkgc2l6ZS4gIEl0CisgIHJldHVybnMgbnVsbCBpZiB0aGVyZSBpcyBubyBzeXN0ZW0gbWVtb3J5IGF2YWlsYWJsZSB0byBjcmVhdGUgdGhlCisgIHNwYWNlLiAgSWYgYXJndW1lbnQgbG9ja2VkIGlzIG5vbi16ZXJvLCB0aGUgc3BhY2UgdXNlcyBhIHNlcGFyYXRlCisgIGxvY2sgdG8gY29udHJvbCBhY2Nlc3MuIFRoZSBjYXBhY2l0eSBvZiB0aGUgc3BhY2Ugd2lsbCBncm93CisgIGR5bmFtaWNhbGx5IGFzIG5lZWRlZCB0byBzZXJ2aWNlIG1zcGFjZV9tYWxsb2MgcmVxdWVzdHMuICBZb3UgY2FuCisgIGNvbnRyb2wgdGhlIHNpemVzIG9mIGluY3JlbWVudGFsIGluY3JlYXNlcyBvZiB0aGlzIHNwYWNlIGJ5CisgIGNvbXBpbGluZyB3aXRoIGEgZGlmZmVyZW50IERFRkFVTFRfR1JBTlVMQVJJVFkgb3IgZHluYW1pY2FsbHkKKyAgc2V0dGluZyB3aXRoIG1hbGxvcHQoTV9HUkFOVUxBUklUWSwgdmFsdWUpLgorKi8KK21zcGFjZSBjcmVhdGVfbXNwYWNlKHNpemVfdCBjYXBhY2l0eSwgaW50IGxvY2tlZCk7CisKKy8qCisgIGRlc3Ryb3lfbXNwYWNlIGRlc3Ryb3lzIHRoZSBnaXZlbiBzcGFjZSwgYW5kIGF0dGVtcHRzIHRvIHJldHVybiBhbGwKKyAgb2YgaXRzIG1lbW9yeSBiYWNrIHRvIHRoZSBzeXN0ZW0sIHJldHVybmluZyB0aGUgdG90YWwgbnVtYmVyIG9mCisgIGJ5dGVzIGZyZWVkLiBBZnRlciBkZXN0cnVjdGlvbiwgdGhlIHJlc3VsdHMgb2YgYWNjZXNzIHRvIGFsbCBtZW1vcnkKKyAgdXNlZCBieSB0aGUgc3BhY2UgYmVjb21lIHVuZGVmaW5lZC4KKyovCitzaXplX3QgZGVzdHJveV9tc3BhY2UobXNwYWNlIG1zcCk7CisKKy8qCisgIGNyZWF0ZV9tc3BhY2Vfd2l0aF9iYXNlIHVzZXMgdGhlIG1lbW9yeSBzdXBwbGllZCBhcyB0aGUgaW5pdGlhbCBiYXNlCisgIG9mIGEgbmV3IG1zcGFjZS4gUGFydCAobGVzcyB0aGFuIDEyOCpzaXplb2Yoc2l6ZV90KSBieXRlcykgb2YgdGhpcworICBzcGFjZSBpcyB1c2VkIGZvciBib29ra2VlcGluZywgc28gdGhlIGNhcGFjaXR5IG11c3QgYmUgYXQgbGVhc3QgdGhpcworICBsYXJnZS4gKE90aGVyd2lzZSAwIGlzIHJldHVybmVkLikgV2hlbiB0aGlzIGluaXRpYWwgc3BhY2UgaXMKKyAgZXhoYXVzdGVkLCBhZGRpdGlvbmFsIG1lbW9yeSB3aWxsIGJlIG9idGFpbmVkIGZyb20gdGhlIHN5c3RlbS4KKyAgRGVzdHJveWluZyB0aGlzIHNwYWNlIHdpbGwgZGVhbGxvY2F0ZSBhbGwgYWRkaXRpb25hbGx5IGFsbG9jYXRlZAorICBzcGFjZSAoaWYgcG9zc2libGUpIGJ1dCBub3QgdGhlIGluaXRpYWwgYmFzZS4KKyovCittc3BhY2UgY3JlYXRlX21zcGFjZV93aXRoX2Jhc2Uodm9pZCogYmFzZSwgc2l6ZV90IGNhcGFjaXR5LCBpbnQgbG9ja2VkKTsKKworLyoKKyAgbXNwYWNlX21hbGxvYyBiZWhhdmVzIGFzIG1hbGxvYywgYnV0IG9wZXJhdGVzIHdpdGhpbgorICB0aGUgZ2l2ZW4gc3BhY2UuCisqLwordm9pZCogbXNwYWNlX21hbGxvYyhtc3BhY2UgbXNwLCBzaXplX3QgYnl0ZXMpOworCisvKgorICBtc3BhY2VfZnJlZSBiZWhhdmVzIGFzIGZyZWUsIGJ1dCBvcGVyYXRlcyB3aXRoaW4KKyAgdGhlIGdpdmVuIHNwYWNlLgorCisgIElmIGNvbXBpbGVkIHdpdGggRk9PVEVSUz09MSwgbXNwYWNlX2ZyZWUgaXMgbm90IGFjdHVhbGx5IG5lZWRlZC4KKyAgZnJlZSBtYXkgYmUgY2FsbGVkIGluc3RlYWQgb2YgbXNwYWNlX2ZyZWUgYmVjYXVzZSBmcmVlZCBjaHVua3MgZnJvbQorICBhbnkgc3BhY2UgYXJlIGhhbmRsZWQgYnkgdGhlaXIgb3JpZ2luYXRpbmcgc3BhY2VzLgorKi8KK3ZvaWQgbXNwYWNlX2ZyZWUobXNwYWNlIG1zcCwgdm9pZCogbWVtKTsKKworLyoKKyAgbXNwYWNlX3JlYWxsb2MgYmVoYXZlcyBhcyByZWFsbG9jLCBidXQgb3BlcmF0ZXMgd2l0aGluCisgIHRoZSBnaXZlbiBzcGFjZS4KKworICBJZiBjb21waWxlZCB3aXRoIEZPT1RFUlM9PTEsIG1zcGFjZV9yZWFsbG9jIGlzIG5vdCBhY3R1YWxseQorICBuZWVkZWQuICByZWFsbG9jIG1heSBiZSBjYWxsZWQgaW5zdGVhZCBvZiBtc3BhY2VfcmVhbGxvYyBiZWNhdXNlCisgIHJlYWxsb2NlZCBjaHVua3MgZnJvbSBhbnkgc3BhY2UgYXJlIGhhbmRsZWQgYnkgdGhlaXIgb3JpZ2luYXRpbmcKKyAgc3BhY2VzLgorKi8KK3ZvaWQqIG1zcGFjZV9yZWFsbG9jKG1zcGFjZSBtc3AsIHZvaWQqIG1lbSwgc2l6ZV90IG5ld3NpemUpOworCisvKgorICBtc3BhY2VfY2FsbG9jIGJlaGF2ZXMgYXMgY2FsbG9jLCBidXQgb3BlcmF0ZXMgd2l0aGluCisgIHRoZSBnaXZlbiBzcGFjZS4KKyovCit2b2lkKiBtc3BhY2VfY2FsbG9jKG1zcGFjZSBtc3AsIHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxlbV9zaXplKTsKKworLyoKKyAgbXNwYWNlX21lbWFsaWduIGJlaGF2ZXMgYXMgbWVtYWxpZ24sIGJ1dCBvcGVyYXRlcyB3aXRoaW4KKyAgdGhlIGdpdmVuIHNwYWNlLgorKi8KK3ZvaWQqIG1zcGFjZV9tZW1hbGlnbihtc3BhY2UgbXNwLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3QgYnl0ZXMpOworCisvKgorICBtc3BhY2VfaW5kZXBlbmRlbnRfY2FsbG9jIGJlaGF2ZXMgYXMgaW5kZXBlbmRlbnRfY2FsbG9jLCBidXQKKyAgb3BlcmF0ZXMgd2l0aGluIHRoZSBnaXZlbiBzcGFjZS4KKyovCit2b2lkKiogbXNwYWNlX2luZGVwZW5kZW50X2NhbGxvYyhtc3BhY2UgbXNwLCBzaXplX3Qgbl9lbGVtZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBlbGVtX3NpemUsIHZvaWQqIGNodW5rc1tdKTsKKworLyoKKyAgbXNwYWNlX2luZGVwZW5kZW50X2NvbWFsbG9jIGJlaGF2ZXMgYXMgaW5kZXBlbmRlbnRfY29tYWxsb2MsIGJ1dAorICBvcGVyYXRlcyB3aXRoaW4gdGhlIGdpdmVuIHNwYWNlLgorKi8KK3ZvaWQqKiBtc3BhY2VfaW5kZXBlbmRlbnRfY29tYWxsb2MobXNwYWNlIG1zcCwgc2l6ZV90IG5fZWxlbWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplc1tdLCB2b2lkKiBjaHVua3NbXSk7CisKKy8qCisgIG1zcGFjZV9mb290cHJpbnQoKSByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgb2J0YWluZWQgZnJvbSB0aGUKKyAgc3lzdGVtIGZvciB0aGlzIHNwYWNlLgorKi8KK3NpemVfdCBtc3BhY2VfZm9vdHByaW50KG1zcGFjZSBtc3ApOworCisvKgorICBtc3BhY2VfbWF4X2Zvb3RwcmludCgpIHJldHVybnMgdGhlIHBlYWsgbnVtYmVyIG9mIGJ5dGVzIG9idGFpbmVkIGZyb20gdGhlCisgIHN5c3RlbSBmb3IgdGhpcyBzcGFjZS4KKyovCitzaXplX3QgbXNwYWNlX21heF9mb290cHJpbnQobXNwYWNlIG1zcCk7CisKKworI2lmICFOT19NQUxMSU5GTworLyoKKyAgbXNwYWNlX21hbGxpbmZvIGJlaGF2ZXMgYXMgbWFsbGluZm8sIGJ1dCByZXBvcnRzIHByb3BlcnRpZXMgb2YKKyAgdGhlIGdpdmVuIHNwYWNlLgorKi8KK3N0cnVjdCBtYWxsaW5mbyBtc3BhY2VfbWFsbGluZm8obXNwYWNlIG1zcCk7CisjZW5kaWYgLyogTk9fTUFMTElORk8gKi8KKworLyoKKyAgbXNwYWNlX21hbGxvY19zdGF0cyBiZWhhdmVzIGFzIG1hbGxvY19zdGF0cywgYnV0IHJlcG9ydHMKKyAgcHJvcGVydGllcyBvZiB0aGUgZ2l2ZW4gc3BhY2UuCisqLwordm9pZCBtc3BhY2VfbWFsbG9jX3N0YXRzKG1zcGFjZSBtc3ApOworCisvKgorICBtc3BhY2VfdHJpbSBiZWhhdmVzIGFzIG1hbGxvY190cmltLCBidXQKKyAgb3BlcmF0ZXMgd2l0aGluIHRoZSBnaXZlbiBzcGFjZS4KKyovCitpbnQgbXNwYWNlX3RyaW0obXNwYWNlIG1zcCwgc2l6ZV90IHBhZCk7CisKKy8qCisgIEFuIGFsaWFzIGZvciBtYWxsb3B0LgorKi8KK2ludCBtc3BhY2VfbWFsbG9wdChpbnQsIGludCk7CisKKyNlbmRpZiAvKiBNU1BBQ0VTICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfTsgIC8qIGVuZCBvZiBleHRlcm4gIkMiICovCisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworLyoKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIFRvIG1ha2UgYSBmdWxseSBjdXN0b21pemFibGUgbWFsbG9jLmggaGVhZGVyIGZpbGUsIGN1dCBldmVyeXRoaW5nCisgIGFib3ZlIHRoaXMgbGluZSwgcHV0IGludG8gZmlsZSBtYWxsb2MuaCwgZWRpdCB0byBzdWl0LCBhbmQgI2luY2x1ZGUgaXQKKyAgb24gdGhlIG5leHQgbGluZSwgYXMgd2VsbCBhcyBpbiBwcm9ncmFtcyB0aGF0IHVzZSB0aGlzIG1hbGxvYy4KKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworCisvKiAjaW5jbHVkZSAibWFsbG9jLmgiICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGludGVybmFsICNpbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZmRlZiBXSU4zMgorI3ByYWdtYSB3YXJuaW5nKCBkaXNhYmxlIDogNDE0NiApIC8qIG5vICJ1bnNpZ25lZCIgd2FybmluZ3MgKi8KKyNlbmRpZiAvKiBXSU4zMiAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4gICAgICAgLyogZm9yIHByaW50aW5nIGluIG1hbGxvY19zdGF0cyAqLworCisjaWZuZGVmIExBQ0tTX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPiAgICAgICAvKiBmb3IgTUFMTE9DX0ZBSUxVUkVfQUNUSU9OICovCisjZW5kaWYgLyogTEFDS1NfRVJSTk9fSCAqLworI2lmIEZPT1RFUlMKKyNpbmNsdWRlIDx0aW1lLmg+ICAgICAgICAvKiBmb3IgbWFnaWMgaW5pdGlhbGl6YXRpb24gKi8KKyNlbmRpZiAvKiBGT09URVJTICovCisjaWZuZGVmIExBQ0tTX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+ICAgICAgLyogZm9yIGFib3J0KCkgKi8KKyNlbmRpZiAvKiBMQUNLU19TVERMSUJfSCAqLworI2lmZGVmIERFQlVHCisjaWYgQUJPUlRfT05fQVNTRVJUX0ZBSUxVUkUKKyNkZWZpbmUgYXNzZXJ0KHgpIGlmKCEoeCkpIEFCT1JUCisjZWxzZSAvKiBBQk9SVF9PTl9BU1NFUlRfRkFJTFVSRSAqLworI2luY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmIC8qIEFCT1JUX09OX0FTU0VSVF9GQUlMVVJFICovCisjZWxzZSAgLyogREVCVUcgKi8KKyNkZWZpbmUgYXNzZXJ0KHgpCisjZW5kaWYgLyogREVCVUcgKi8KKyNpZm5kZWYgTEFDS1NfU1RSSU5HX0gKKyNpbmNsdWRlIDxzdHJpbmcuaD4gICAgICAvKiBmb3IgbWVtc2V0IGV0YyAqLworI2VuZGlmICAvKiBMQUNLU19TVFJJTkdfSCAqLworI2lmIFVTRV9CVUlMVElOX0ZGUworI2lmbmRlZiBMQUNLU19TVFJJTkdTX0gKKyNpbmNsdWRlIDxzdHJpbmdzLmg+ICAgICAvKiBmb3IgZmZzICovCisjZW5kaWYgLyogTEFDS1NfU1RSSU5HU19IICovCisjZW5kaWYgLyogVVNFX0JVSUxUSU5fRkZTICovCisjaWYgSEFWRV9NTUFQCisjaWZuZGVmIExBQ0tTX1NZU19NTUFOX0gKKyNpbmNsdWRlIDxzeXMvbW1hbi5oPiAgICAvKiBmb3IgbW1hcCAqLworI2VuZGlmIC8qIExBQ0tTX1NZU19NTUFOX0ggKi8KKyNpZm5kZWYgTEFDS1NfRkNOVExfSAorI2luY2x1ZGUgPGZjbnRsLmg+CisjZW5kaWYgLyogTEFDS1NfRkNOVExfSCAqLworI2VuZGlmIC8qIEhBVkVfTU1BUCAqLworI2lmIEhBVkVfTU9SRUNPUkUKKyNpZm5kZWYgTEFDS1NfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4gICAgIC8qIGZvciBzYnJrICovCisjZWxzZSAvKiBMQUNLU19VTklTVERfSCAqLworI2lmICFkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX09wZW5CU0RfXykgJiYgIWRlZmluZWQoX19OZXRCU0RfXykKK2V4dGVybiB2b2lkKiAgICAgc2JyayhwdHJkaWZmX3QpOworI2VuZGlmIC8qIEZyZWVCU0QgZXRjICovCisjZW5kaWYgLyogTEFDS1NfVU5JU1REX0ggKi8KKyNlbmRpZiAvKiBIQVZFX01NQVAgKi8KKworI2lmbmRlZiBXSU4zMgorI2lmbmRlZiBtYWxsb2NfZ2V0cGFnZXNpemUKKyMgIGlmZGVmIF9TQ19QQUdFU0laRSAgICAgICAgIC8qIHNvbWUgU1ZSNCBzeXN0ZW1zIG9taXQgYW4gdW5kZXJzY29yZSAqLworIyAgICBpZm5kZWYgX1NDX1BBR0VfU0laRQorIyAgICAgIGRlZmluZSBfU0NfUEFHRV9TSVpFIF9TQ19QQUdFU0laRQorIyAgICBlbmRpZgorIyAgZW5kaWYKKyMgIGlmZGVmIF9TQ19QQUdFX1NJWkUKKyMgICAgZGVmaW5lIG1hbGxvY19nZXRwYWdlc2l6ZSBzeXNjb25mKF9TQ19QQUdFX1NJWkUpCisjICBlbHNlCisjICAgIGlmIGRlZmluZWQoQlNEKSB8fCBkZWZpbmVkKERHVVgpIHx8IGRlZmluZWQoSEFWRV9HRVRQQUdFU0laRSkKKyAgICAgICBleHRlcm4gc2l6ZV90IGdldHBhZ2VzaXplKCk7CisjICAgICAgZGVmaW5lIG1hbGxvY19nZXRwYWdlc2l6ZSBnZXRwYWdlc2l6ZSgpCisjICAgIGVsc2UKKyMgICAgICBpZmRlZiBXSU4zMiAvKiB1c2Ugc3VwcGxpZWQgZW11bGF0aW9uIG9mIGdldHBhZ2VzaXplICovCisjICAgICAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplIGdldHBhZ2VzaXplKCkKKyMgICAgICBlbHNlCisjICAgICAgICBpZm5kZWYgTEFDS1NfU1lTX1BBUkFNX0gKKyMgICAgICAgICAgaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjICAgICAgICBlbmRpZgorIyAgICAgICAgaWZkZWYgRVhFQ19QQUdFU0laRQorIyAgICAgICAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplIEVYRUNfUEFHRVNJWkUKKyMgICAgICAgIGVsc2UKKyMgICAgICAgICAgaWZkZWYgTkJQRworIyAgICAgICAgICAgIGlmbmRlZiBDTFNJWkUKKyMgICAgICAgICAgICAgIGRlZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUgTkJQRworIyAgICAgICAgICAgIGVsc2UKKyMgICAgICAgICAgICAgIGRlZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUgKE5CUEcgKiBDTFNJWkUpCisjICAgICAgICAgICAgZW5kaWYKKyMgICAgICAgICAgZWxzZQorIyAgICAgICAgICAgIGlmZGVmIE5CUEMKKyMgICAgICAgICAgICAgIGRlZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUgTkJQQworIyAgICAgICAgICAgIGVsc2UKKyMgICAgICAgICAgICAgIGlmZGVmIFBBR0VTSVpFCisjICAgICAgICAgICAgICAgIGRlZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUgUEFHRVNJWkUKKyMgICAgICAgICAgICAgIGVsc2UgLyoganVzdCBndWVzcyAqLworIyAgICAgICAgICAgICAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplICgoc2l6ZV90KTQwOTZVKQorIyAgICAgICAgICAgICAgZW5kaWYKKyMgICAgICAgICAgICBlbmRpZgorIyAgICAgICAgICBlbmRpZgorIyAgICAgICAgZW5kaWYKKyMgICAgICBlbmRpZgorIyAgICBlbmRpZgorIyAgZW5kaWYKKyNlbmRpZgorI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0gc2l6ZV90IGFuZCBhbGlnbm1lbnQgcHJvcGVydGllcyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBUaGUgYnl0ZSBhbmQgYml0IHNpemUgb2YgYSBzaXplX3QgKi8KKyNkZWZpbmUgU0laRV9UX1NJWkUgICAgICAgICAoc2l6ZW9mKHNpemVfdCkpCisjZGVmaW5lIFNJWkVfVF9CSVRTSVpFICAgICAgKHNpemVvZihzaXplX3QpIDw8IDMpCisKKy8qIFNvbWUgY29uc3RhbnRzIGNvZXJjZWQgdG8gc2l6ZV90ICovCisvKiBBbm5veWluZyBidXQgbmVjZXNzYXJ5IHRvIGF2b2lkIGVycm9ycyBvbiBzb21lIHBsYWZ0b3JtcyAqLworI2RlZmluZSBTSVpFX1RfWkVSTyAgICAgICAgICgoc2l6ZV90KTApCisjZGVmaW5lIFNJWkVfVF9PTkUgICAgICAgICAgKChzaXplX3QpMSkKKyNkZWZpbmUgU0laRV9UX1RXTyAgICAgICAgICAoKHNpemVfdCkyKQorI2RlZmluZSBUV09fU0laRV9UX1NJWkVTICAgIChTSVpFX1RfU0laRTw8MSkKKyNkZWZpbmUgRk9VUl9TSVpFX1RfU0laRVMgICAoU0laRV9UX1NJWkU8PDIpCisjZGVmaW5lIFNJWF9TSVpFX1RfU0laRVMgICAgKEZPVVJfU0laRV9UX1NJWkVTK1RXT19TSVpFX1RfU0laRVMpCisjZGVmaW5lIEhBTEZfTUFYX1NJWkVfVCAgICAgKE1BWF9TSVpFX1QgLyAyVSkKKworLyogVGhlIGJpdCBtYXNrIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gTUFMTE9DX0FMSUdOTUVOVCAqLworI2RlZmluZSBDSFVOS19BTElHTl9NQVNLICAgIChNQUxMT0NfQUxJR05NRU5UIC0gU0laRV9UX09ORSkKKworLyogVHJ1ZSBpZiBhZGRyZXNzIGEgaGFzIGFjY2VwdGFibGUgYWxpZ25tZW50ICovCisjZGVmaW5lIGlzX2FsaWduZWQoQSkgICAgICAgKCgoc2l6ZV90KSgoQSkpICYgKENIVU5LX0FMSUdOX01BU0spKSA9PSAwKQorCisvKiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIG9mZnNldCBhbiBhZGRyZXNzIHRvIGFsaWduIGl0ICovCisjZGVmaW5lIGFsaWduX29mZnNldChBKVwKKyAoKCgoc2l6ZV90KShBKSAmIENIVU5LX0FMSUdOX01BU0spID09IDApPyAwIDpcCisgICgoTUFMTE9DX0FMSUdOTUVOVCAtICgoc2l6ZV90KShBKSAmIENIVU5LX0FMSUdOX01BU0spKSAmIENIVU5LX0FMSUdOX01BU0spKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBNTUFQIHByZWxpbWluYXJpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICAgSWYgSEFWRV9NT1JFQ09SRSBvciBIQVZFX01NQVAgYXJlIGZhbHNlLCB3ZSBqdXN0IGRlZmluZSBjYWxscyBhbmQKKyAgIGNoZWNrcyB0byBmYWlsIHNvIGNvbXBpbGVyIG9wdGltaXplciBjYW4gZGVsZXRlIGNvZGUgcmF0aGVyIHRoYW4KKyAgIHVzaW5nIHNvIG1hbnkgIiNpZiJzLgorKi8KKworCisvKiBNT1JFQ09SRSBhbmQgTU1BUCBtdXN0IHJldHVybiBNRkFJTCBvbiBmYWlsdXJlICovCisjZGVmaW5lIE1GQUlMICAgICAgICAgICAgICAgICgodm9pZCopKE1BWF9TSVpFX1QpKQorI2RlZmluZSBDTUZBSUwgICAgICAgICAgICAgICAoKGNoYXIqKShNRkFJTCkpIC8qIGRlZmluZWQgZm9yIGNvbnZlbmllbmNlICovCisKKyNpZiAhSEFWRV9NTUFQCisjZGVmaW5lIElTX01NQVBQRURfQklUICAgICAgIChTSVpFX1RfWkVSTykKKyNkZWZpbmUgVVNFX01NQVBfQklUICAgICAgICAgKFNJWkVfVF9aRVJPKQorI2RlZmluZSBDQUxMX01NQVAocykgICAgICAgICBNRkFJTAorI2RlZmluZSBDQUxMX01VTk1BUChhLCBzKSAgICAoLTEpCisjZGVmaW5lIERJUkVDVF9NTUFQKHMpICAgICAgIE1GQUlMCisKKyNlbHNlIC8qIEhBVkVfTU1BUCAqLworI2RlZmluZSBJU19NTUFQUEVEX0JJVCAgICAgICAoU0laRV9UX09ORSkKKyNkZWZpbmUgVVNFX01NQVBfQklUICAgICAgICAgKFNJWkVfVF9PTkUpCisKKyNpZm5kZWYgV0lOMzIKKyNkZWZpbmUgQ0FMTF9NVU5NQVAoYSwgcykgICAgbXVubWFwKChhKSwgKHMpKQorI2RlZmluZSBNTUFQX1BST1QgICAgICAgICAgICAoUFJPVF9SRUFEfFBST1RfV1JJVEUpCisjaWYgIWRlZmluZWQoTUFQX0FOT05ZTU9VUykgJiYgZGVmaW5lZChNQVBfQU5PTikKKyNkZWZpbmUgTUFQX0FOT05ZTU9VUyAgICAgICAgTUFQX0FOT04KKyNlbmRpZiAvKiBNQVBfQU5PTiAqLworI2lmZGVmIE1BUF9BTk9OWU1PVVMKKyNkZWZpbmUgTU1BUF9GTEFHUyAgICAgICAgICAgKE1BUF9QUklWQVRFfE1BUF9BTk9OWU1PVVMpCisjZGVmaW5lIENBTExfTU1BUChzKSAgICAgICAgIG1tYXAoMCwgKHMpLCBNTUFQX1BST1QsIE1NQVBfRkxBR1MsIC0xLCAwKQorI2Vsc2UgLyogTUFQX0FOT05ZTU9VUyAqLworLyoKKyAgIE5lYXJseSBhbGwgdmVyc2lvbnMgb2YgbW1hcCBzdXBwb3J0IE1BUF9BTk9OWU1PVVMsIHNvIHRoZSBmb2xsb3dpbmcKKyAgIGlzIHVubGlrZWx5IHRvIGJlIG5lZWRlZCwgYnV0IGlzIHN1cHBsaWVkIGp1c3QgaW4gY2FzZS4KKyovCisjZGVmaW5lIE1NQVBfRkxBR1MgICAgICAgICAgIChNQVBfUFJJVkFURSkKK3N0YXRpYyBpbnQgZGV2X3plcm9fZmQgPSAtMTsgLyogQ2FjaGVkIGZpbGUgZGVzY3JpcHRvciBmb3IgL2Rldi96ZXJvLiAqLworI2RlZmluZSBDQUxMX01NQVAocykgKChkZXZfemVyb19mZCA8IDApID8gXAorICAgICAgICAgICAoZGV2X3plcm9fZmQgPSBvcGVuKCIvZGV2L3plcm8iLCBPX1JEV1IpLCBcCisgICAgICAgICAgICBtbWFwKDAsIChzKSwgTU1BUF9QUk9ULCBNTUFQX0ZMQUdTLCBkZXZfemVyb19mZCwgMCkpIDogXAorICAgICAgICAgICAgbW1hcCgwLCAocyksIE1NQVBfUFJPVCwgTU1BUF9GTEFHUywgZGV2X3plcm9fZmQsIDApKQorI2VuZGlmIC8qIE1BUF9BTk9OWU1PVVMgKi8KKworI2RlZmluZSBESVJFQ1RfTU1BUChzKSAgICAgICBDQUxMX01NQVAocykKKyNlbHNlIC8qIFdJTjMyICovCisKKy8qIFdpbjMyIE1NQVAgdmlhIFZpcnR1YWxBbGxvYyAqLworc3RhdGljIHZvaWQqIHdpbjMybW1hcChzaXplX3Qgc2l6ZSkgeworICB2b2lkKiBwdHIgPSBWaXJ0dWFsQWxsb2MoMCwgc2l6ZSwgTUVNX1JFU0VSVkV8TUVNX0NPTU1JVCwgUEFHRV9SRUFEV1JJVEUpOworICByZXR1cm4gKHB0ciAhPSAwKT8gcHRyOiBNRkFJTDsKK30KKworLyogRm9yIGRpcmVjdCBNTUFQLCB1c2UgTUVNX1RPUF9ET1dOIHRvIG1pbmltaXplIGludGVyZmVyZW5jZSAqLworc3RhdGljIHZvaWQqIHdpbjMyZGlyZWN0X21tYXAoc2l6ZV90IHNpemUpIHsKKyAgdm9pZCogcHRyID0gVmlydHVhbEFsbG9jKDAsIHNpemUsIE1FTV9SRVNFUlZFfE1FTV9DT01NSVR8TUVNX1RPUF9ET1dOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFHRV9SRUFEV1JJVEUpOworICByZXR1cm4gKHB0ciAhPSAwKT8gcHRyOiBNRkFJTDsKK30KKworLyogVGhpcyBmdW5jdGlvbiBzdXBwb3J0cyByZWxlYXNpbmcgY29hbGVzZWQgc2VnbWVudHMgKi8KK3N0YXRpYyBpbnQgd2luMzJtdW5tYXAodm9pZCogcHRyLCBzaXplX3Qgc2l6ZSkgeworICBNRU1PUllfQkFTSUNfSU5GT1JNQVRJT04gbWluZm87CisgIGNoYXIqIGNwdHIgPSBwdHI7CisgIHdoaWxlIChzaXplKSB7CisgICAgaWYgKFZpcnR1YWxRdWVyeShjcHRyLCAmbWluZm8sIHNpemVvZihtaW5mbykpID09IDApCisgICAgICByZXR1cm4gLTE7CisgICAgaWYgKG1pbmZvLkJhc2VBZGRyZXNzICE9IGNwdHIgfHwgbWluZm8uQWxsb2NhdGlvbkJhc2UgIT0gY3B0ciB8fAorICAgICAgICBtaW5mby5TdGF0ZSAhPSBNRU1fQ09NTUlUIHx8IG1pbmZvLlJlZ2lvblNpemUgPiBzaXplKQorICAgICAgcmV0dXJuIC0xOworICAgIGlmIChWaXJ0dWFsRnJlZShjcHRyLCAwLCBNRU1fUkVMRUFTRSkgPT0gMCkKKyAgICAgIHJldHVybiAtMTsKKyAgICBjcHRyICs9IG1pbmZvLlJlZ2lvblNpemU7CisgICAgc2l6ZSAtPSBtaW5mby5SZWdpb25TaXplOworICB9CisgIHJldHVybiAwOworfQorCisjZGVmaW5lIENBTExfTU1BUChzKSAgICAgICAgIHdpbjMybW1hcChzKQorI2RlZmluZSBDQUxMX01VTk1BUChhLCBzKSAgICB3aW4zMm11bm1hcCgoYSksIChzKSkKKyNkZWZpbmUgRElSRUNUX01NQVAocykgICAgICAgd2luMzJkaXJlY3RfbW1hcChzKQorI2VuZGlmIC8qIFdJTjMyICovCisjZW5kaWYgLyogSEFWRV9NTUFQICovCisKKyNpZiBIQVZFX01NQVAgJiYgSEFWRV9NUkVNQVAKKyNkZWZpbmUgQ0FMTF9NUkVNQVAoYWRkciwgb3N6LCBuc3osIG12KSBtcmVtYXAoKGFkZHIpLCAob3N6KSwgKG5zeiksIChtdikpCisjZWxzZSAgLyogSEFWRV9NTUFQICYmIEhBVkVfTVJFTUFQICovCisjZGVmaW5lIENBTExfTVJFTUFQKGFkZHIsIG9zeiwgbnN6LCBtdikgTUZBSUwKKyNlbmRpZiAvKiBIQVZFX01NQVAgJiYgSEFWRV9NUkVNQVAgKi8KKworI2lmIEhBVkVfTU9SRUNPUkUKKyNkZWZpbmUgQ0FMTF9NT1JFQ09SRShTKSAgICAgTU9SRUNPUkUoUykKKyNlbHNlICAvKiBIQVZFX01PUkVDT1JFICovCisjZGVmaW5lIENBTExfTU9SRUNPUkUoUykgICAgIE1GQUlMCisjZW5kaWYgLyogSEFWRV9NT1JFQ09SRSAqLworCisvKiBtc3RhdGUgYml0IHNldCBpZiBjb250aW5ndW91cyBtb3JlY29yZSBkaXNhYmxlZCBvciBmYWlsZWQgKi8KKyNkZWZpbmUgVVNFX05PTkNPTlRJR1VPVVNfQklUICg0VSkKKworLyogc2VnbWVudCBiaXQgc2V0IGluIGNyZWF0ZV9tc3BhY2Vfd2l0aF9iYXNlICovCisjZGVmaW5lIEVYVEVSTl9CSVQgICAgICAgICAgICAoOFUpCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExvY2sgcHJlbGltaW5hcmllcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmIFVTRV9MT0NLUworCisvKgorICBXaGVuIGxvY2tzIGFyZSBkZWZpbmVkLCB0aGVyZSBhcmUgdXAgdG8gdHdvIGdsb2JhbCBsb2NrczoKKworICAqIElmIEhBVkVfTU9SRUNPUkUsIG1vcmVjb3JlX211dGV4IHByb3RlY3RzIHNlcXVlbmNlcyBvZiBjYWxscyB0bworICAgIE1PUkVDT1JFLiAgSW4gbWFueSBjYXNlcyBzeXNfYWxsb2MgcmVxdWlyZXMgdHdvIGNhbGxzLCB0aGF0IHNob3VsZAorICAgIG5vdCBiZSBpbnRlcmxlYXZlZCB3aXRoIGNhbGxzIGJ5IG90aGVyIHRocmVhZHMuICBUaGlzIGRvZXMgbm90CisgICAgcHJvdGVjdCBhZ2FpbnN0IGRpcmVjdCBjYWxscyB0byBNT1JFQ09SRSBieSBvdGhlciB0aHJlYWRzIG5vdAorICAgIHVzaW5nIHRoaXMgbG9jaywgc28gdGhlcmUgaXMgc3RpbGwgY29kZSB0byBjb3BlIHRoZSBiZXN0IHdlIGNhbiBvbgorICAgIGludGVyZmVyZW5jZS4KKworICAqIG1hZ2ljX2luaXRfbXV0ZXggZW5zdXJlcyB0aGF0IG1wYXJhbXMubWFnaWMgYW5kIG90aGVyCisgICAgdW5pcXVlIG1wYXJhbXMgdmFsdWVzIGFyZSBpbml0aWFsaXplZCBvbmx5IG9uY2UuCisqLworCisjaWZuZGVmIFdJTjMyCisvKiBCeSBkZWZhdWx0IHVzZSBwb3NpeCBsb2NrcyAqLworI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNkZWZpbmUgTUxPQ0tfVCBwdGhyZWFkX211dGV4X3QKKyNkZWZpbmUgSU5JVElBTF9MT0NLKGwpICAgICAgcHRocmVhZF9tdXRleF9pbml0KGwsIE5VTEwpCisjZGVmaW5lIEFDUVVJUkVfTE9DSyhsKSAgICAgIHB0aHJlYWRfbXV0ZXhfbG9jayhsKQorI2RlZmluZSBSRUxFQVNFX0xPQ0sobCkgICAgICBwdGhyZWFkX211dGV4X3VubG9jayhsKQorCisjaWYgSEFWRV9NT1JFQ09SRQorc3RhdGljIE1MT0NLX1QgbW9yZWNvcmVfbXV0ZXggPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOworI2VuZGlmIC8qIEhBVkVfTU9SRUNPUkUgKi8KKworc3RhdGljIE1MT0NLX1QgbWFnaWNfaW5pdF9tdXRleCA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7CisKKyNlbHNlIC8qIFdJTjMyICovCisvKgorICAgQmVjYXVzZSBsb2NrLXByb3RlY3RlZCByZWdpb25zIGhhdmUgYm91bmRlZCB0aW1lcywgYW5kIHRoZXJlCisgICBhcmUgbm8gcmVjdXJzaXZlIGxvY2sgY2FsbHMsIHdlIGNhbiB1c2Ugc2ltcGxlIHNwaW5sb2Nrcy4KKyovCisKKyNkZWZpbmUgTUxPQ0tfVCBsb25nCitzdGF0aWMgaW50IHdpbjMyX2FjcXVpcmVfbG9jayAoTUxPQ0tfVCAqc2wpIHsKKyAgZm9yICg7OykgeworI2lmZGVmIEludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlUG9pbnRlcgorICAgIGlmICghSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2Uoc2wsIDEsIDApKQorICAgICAgcmV0dXJuIDA7CisjZWxzZSAgLyogVXNlIG9sZGVyIHZvaWQqIHZlcnNpb24gKi8KKyAgICBpZiAoIUludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlKCh2b2lkKiopc2wsICh2b2lkKikxLCAodm9pZCopMCkpCisgICAgICByZXR1cm4gMDsKKyNlbmRpZiAvKiBJbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZVBvaW50ZXIgKi8KKyAgICBTbGVlcCAoMCk7CisgIH0KK30KKworc3RhdGljIHZvaWQgd2luMzJfcmVsZWFzZV9sb2NrIChNTE9DS19UICpzbCkgeworICBJbnRlcmxvY2tlZEV4Y2hhbmdlIChzbCwgMCk7Cit9CisKKyNkZWZpbmUgSU5JVElBTF9MT0NLKGwpICAgICAgKihsKT0wCisjZGVmaW5lIEFDUVVJUkVfTE9DSyhsKSAgICAgIHdpbjMyX2FjcXVpcmVfbG9jayhsKQorI2RlZmluZSBSRUxFQVNFX0xPQ0sobCkgICAgICB3aW4zMl9yZWxlYXNlX2xvY2sobCkKKyNpZiBIQVZFX01PUkVDT1JFCitzdGF0aWMgTUxPQ0tfVCBtb3JlY29yZV9tdXRleDsKKyNlbmRpZiAvKiBIQVZFX01PUkVDT1JFICovCitzdGF0aWMgTUxPQ0tfVCBtYWdpY19pbml0X211dGV4OworI2VuZGlmIC8qIFdJTjMyICovCisKKyNkZWZpbmUgVVNFX0xPQ0tfQklUICAgICAgICAgICAgICAgKDJVKQorI2Vsc2UgIC8qIFVTRV9MT0NLUyAqLworI2RlZmluZSBVU0VfTE9DS19CSVQgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIElOSVRJQUxfTE9DSyhsKQorI2VuZGlmIC8qIFVTRV9MT0NLUyAqLworCisjaWYgVVNFX0xPQ0tTICYmIEhBVkVfTU9SRUNPUkUKKyNkZWZpbmUgQUNRVUlSRV9NT1JFQ09SRV9MT0NLKCkgICAgQUNRVUlSRV9MT0NLKCZtb3JlY29yZV9tdXRleCk7CisjZGVmaW5lIFJFTEVBU0VfTU9SRUNPUkVfTE9DSygpICAgIFJFTEVBU0VfTE9DSygmbW9yZWNvcmVfbXV0ZXgpOworI2Vsc2UgLyogVVNFX0xPQ0tTICYmIEhBVkVfTU9SRUNPUkUgKi8KKyNkZWZpbmUgQUNRVUlSRV9NT1JFQ09SRV9MT0NLKCkKKyNkZWZpbmUgUkVMRUFTRV9NT1JFQ09SRV9MT0NLKCkKKyNlbmRpZiAvKiBVU0VfTE9DS1MgJiYgSEFWRV9NT1JFQ09SRSAqLworCisjaWYgVVNFX0xPQ0tTCisjZGVmaW5lIEFDUVVJUkVfTUFHSUNfSU5JVF9MT0NLKCkgIEFDUVVJUkVfTE9DSygmbWFnaWNfaW5pdF9tdXRleCk7CisjZGVmaW5lIFJFTEVBU0VfTUFHSUNfSU5JVF9MT0NLKCkgIFJFTEVBU0VfTE9DSygmbWFnaWNfaW5pdF9tdXRleCk7CisjZWxzZSAgLyogVVNFX0xPQ0tTICovCisjZGVmaW5lIEFDUVVJUkVfTUFHSUNfSU5JVF9MT0NLKCkKKyNkZWZpbmUgUkVMRUFTRV9NQUdJQ19JTklUX0xPQ0soKQorI2VuZGlmIC8qIFVTRV9MT0NLUyAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDaHVuayByZXByZXNlbnRhdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgIChUaGUgZm9sbG93aW5nIGluY2x1ZGVzIGxpZ2h0bHkgZWRpdGVkIGV4cGxhbmF0aW9ucyBieSBDb2xpbiBQbHVtYi4pCisKKyAgVGhlIG1hbGxvY19jaHVuayBkZWNsYXJhdGlvbiBiZWxvdyBpcyBtaXNsZWFkaW5nIChidXQgYWNjdXJhdGUgYW5kCisgIG5lY2Vzc2FyeSkuICBJdCBkZWNsYXJlcyBhICJ2aWV3IiBpbnRvIG1lbW9yeSBhbGxvd2luZyBhY2Nlc3MgdG8KKyAgbmVjZXNzYXJ5IGZpZWxkcyBhdCBrbm93biBvZmZzZXRzIGZyb20gYSBnaXZlbiBiYXNlLgorCisgIENodW5rcyBvZiBtZW1vcnkgYXJlIG1haW50YWluZWQgdXNpbmcgYSBgYm91bmRhcnkgdGFnJyBtZXRob2QgYXMKKyAgb3JpZ2luYWxseSBkZXNjcmliZWQgYnkgS251dGguICAoU2VlIHRoZSBwYXBlciBieSBQYXVsIFdpbHNvbgorICBmdHA6Ly9mdHAuY3MudXRleGFzLmVkdS9wdWIvZ2FyYmFnZS9hbGxvY3Nydi5wcyBmb3IgYSBzdXJ2ZXkgb2Ygc3VjaAorICB0ZWNobmlxdWVzLikgIFNpemVzIG9mIGZyZWUgY2h1bmtzIGFyZSBzdG9yZWQgYm90aCBpbiB0aGUgZnJvbnQgb2YKKyAgZWFjaCBjaHVuayBhbmQgYXQgdGhlIGVuZC4gIFRoaXMgbWFrZXMgY29uc29saWRhdGluZyBmcmFnbWVudGVkCisgIGNodW5rcyBpbnRvIGJpZ2dlciBjaHVua3MgZmFzdC4gIFRoZSBoZWFkIGZpZWxkcyBhbHNvIGhvbGQgYml0cworICByZXByZXNlbnRpbmcgd2hldGhlciBjaHVua3MgYXJlIGZyZWUgb3IgaW4gdXNlLgorCisgIEhlcmUgYXJlIHNvbWUgcGljdHVyZXMgdG8gbWFrZSBpdCBjbGVhcmVyLiAgVGhleSBhcmUgImV4cGxvZGVkIiB0bworICBzaG93IHRoYXQgdGhlIHN0YXRlIG9mIGEgY2h1bmsgY2FuIGJlIHRob3VnaHQgb2YgYXMgZXh0ZW5kaW5nIGZyb20KKyAgdGhlIGhpZ2ggMzEgYml0cyBvZiB0aGUgaGVhZCBmaWVsZCBvZiBpdHMgaGVhZGVyIHRocm91Z2ggdGhlCisgIHByZXZfZm9vdCBhbmQgUElOVVNFX0JJVCBiaXQgb2YgdGhlIGZvbGxvd2luZyBjaHVuayBoZWFkZXIuCisKKyAgQSBjaHVuayB0aGF0J3MgaW4gdXNlIGxvb2tzIGxpa2U6CisKKyAgIGNodW5rLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICAgICAgfCBTaXplIG9mIHByZXZpb3VzIGNodW5rIChpZiBQID0gMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKyB8UHwKKyAgICAgICAgIHwgU2l6ZSBvZiB0aGlzIGNodW5rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxfCArLSsKKyAgIG1lbS0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSsKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICArLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKworICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoKKyAgICAgICAgICstICAgICAgc2l6ZSAtIHNpemVvZihzaXplX3QpIGF2YWlsYWJsZSBwYXlsb2FkIGJ5dGVzICAgICAgICAgIC0rCisgICAgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIGNodW5rLT4gKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSsKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKyB8MXwKKyAgICAgICB8IFNpemUgb2YgbmV4dCBjaHVuayAobWF5IG9yIG1heSBub3QgYmUgaW4gdXNlKSAgICAgICAgICAgICAgIHwgKy0rCisgbWVtLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKworICAgIEFuZCBpZiBpdCdzIGZyZWUsIGl0IGxvb2tzIGxpa2UgdGhpczoKKworICAgY2h1bmstPiArLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKworICAgICAgICAgICB8IFVzZXIgcGF5bG9hZCAobXVzdCBiZSBpbiB1c2UsIG9yIHdlIHdvdWxkIGhhdmUgbWVyZ2VkISkgICAgICAgfAorICAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rIHxQfAorICAgICAgICAgfCBTaXplIG9mIHRoaXMgY2h1bmsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB8ICstKworICAgbWVtLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICAgIHwgTmV4dCBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICAgfCBQcmV2IHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOgorICAgICAgICAgKy0gICAgICBzaXplIC0gc2l6ZW9mKHN0cnVjdCBjaHVuaykgdW51c2VkIGJ5dGVzICAgICAgICAgICAgICAgLSsKKyAgICAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgY2h1bmstPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICAgfCBTaXplIG9mIHRoaXMgY2h1bmsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rIHwwfAorICAgICAgIHwgU2l6ZSBvZiBuZXh0IGNodW5rIChtdXN0IGJlIGluIHVzZSwgb3Igd2Ugd291bGQgaGF2ZSBtZXJnZWQpfCArLSsKKyBtZW0tPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6CisgICAgICAgKy0gVXNlciBwYXlsb2FkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSsKKyAgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8MHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstKworICBOb3RlIHRoYXQgc2luY2Ugd2UgYWx3YXlzIG1lcmdlIGFkamFjZW50IGZyZWUgY2h1bmtzLCB0aGUgY2h1bmtzCisgIGFkamFjZW50IHRvIGEgZnJlZSBjaHVuayBtdXN0IGJlIGluIHVzZS4KKworICBHaXZlbiBhIHBvaW50ZXIgdG8gYSBjaHVuayAod2hpY2ggY2FuIGJlIGRlcml2ZWQgdHJpdmlhbGx5IGZyb20gdGhlCisgIHBheWxvYWQgcG9pbnRlcikgd2UgY2FuLCBpbiBPKDEpIHRpbWUsIGZpbmQgb3V0IHdoZXRoZXIgdGhlIGFkamFjZW50CisgIGNodW5rcyBhcmUgZnJlZSwgYW5kIGlmIHNvLCB1bmxpbmsgdGhlbSBmcm9tIHRoZSBsaXN0cyB0aGF0IHRoZXkKKyAgYXJlIG9uIGFuZCBtZXJnZSB0aGVtIHdpdGggdGhlIGN1cnJlbnQgY2h1bmsuCisKKyAgQ2h1bmtzIGFsd2F5cyBiZWdpbiBvbiBldmVuIHdvcmQgYm91bmRhcmllcywgc28gdGhlIG1lbSBwb3J0aW9uCisgICh3aGljaCBpcyByZXR1cm5lZCB0byB0aGUgdXNlcikgaXMgYWxzbyBvbiBhbiBldmVuIHdvcmQgYm91bmRhcnksIGFuZAorICB0aHVzIGF0IGxlYXN0IGRvdWJsZS13b3JkIGFsaWduZWQuCisKKyAgVGhlIFAgKFBJTlVTRV9CSVQpIGJpdCwgc3RvcmVkIGluIHRoZSB1bnVzZWQgbG93LW9yZGVyIGJpdCBvZiB0aGUKKyAgY2h1bmsgc2l6ZSAod2hpY2ggaXMgYWx3YXlzIGEgbXVsdGlwbGUgb2YgdHdvIHdvcmRzKSwgaXMgYW4gaW4tdXNlCisgIGJpdCBmb3IgdGhlICpwcmV2aW91cyogY2h1bmsuICBJZiB0aGF0IGJpdCBpcyAqY2xlYXIqLCB0aGVuIHRoZQorICB3b3JkIGJlZm9yZSB0aGUgY3VycmVudCBjaHVuayBzaXplIGNvbnRhaW5zIHRoZSBwcmV2aW91cyBjaHVuaworICBzaXplLCBhbmQgY2FuIGJlIHVzZWQgdG8gZmluZCB0aGUgZnJvbnQgb2YgdGhlIHByZXZpb3VzIGNodW5rLgorICBUaGUgdmVyeSBmaXJzdCBjaHVuayBhbGxvY2F0ZWQgYWx3YXlzIGhhcyB0aGlzIGJpdCBzZXQsIHByZXZlbnRpbmcKKyAgYWNjZXNzIHRvIG5vbi1leGlzdGVudCAob3Igbm9uLW93bmVkKSBtZW1vcnkuIElmIHBpbnVzZSBpcyBzZXQgZm9yCisgIGFueSBnaXZlbiBjaHVuaywgdGhlbiB5b3UgQ0FOTk9UIGRldGVybWluZSB0aGUgc2l6ZSBvZiB0aGUKKyAgcHJldmlvdXMgY2h1bmssIGFuZCBtaWdodCBldmVuIGdldCBhIG1lbW9yeSBhZGRyZXNzaW5nIGZhdWx0IHdoZW4KKyAgdHJ5aW5nIHRvIGRvIHNvLgorCisgIFRoZSBDIChDSU5VU0VfQklUKSBiaXQsIHN0b3JlZCBpbiB0aGUgdW51c2VkIHNlY29uZC1sb3dlc3QgYml0IG9mCisgIHRoZSBjaHVuayBzaXplIHJlZHVuZGFudGx5IHJlY29yZHMgd2hldGhlciB0aGUgY3VycmVudCBjaHVuayBpcworICBpbnVzZS4gVGhpcyByZWR1bmRhbmN5IGVuYWJsZXMgdXNhZ2UgY2hlY2tzIHdpdGhpbiBmcmVlIGFuZCByZWFsbG9jLAorICBhbmQgcmVkdWNlcyBpbmRpcmVjdGlvbiB3aGVuIGZyZWVpbmcgYW5kIGNvbnNvbGlkYXRpbmcgY2h1bmtzLgorCisgIEVhY2ggZnJlc2hseSBhbGxvY2F0ZWQgY2h1bmsgbXVzdCBoYXZlIGJvdGggY2ludXNlIGFuZCBwaW51c2Ugc2V0LgorICBUaGF0IGlzLCBlYWNoIGFsbG9jYXRlZCBjaHVuayBib3JkZXJzIGVpdGhlciBhIHByZXZpb3VzbHkgYWxsb2NhdGVkCisgIGFuZCBzdGlsbCBpbi11c2UgY2h1bmssIG9yIHRoZSBiYXNlIG9mIGl0cyBtZW1vcnkgYXJlbmEuIFRoaXMgaXMKKyAgZW5zdXJlZCBieSBtYWtpbmcgYWxsIGFsbG9jYXRpb25zIGZyb20gdGhlIHRoZSBgbG93ZXN0JyBwYXJ0IG9mIGFueQorICBmb3VuZCBjaHVuay4gIEZ1cnRoZXIsIG5vIGZyZWUgY2h1bmsgcGh5c2ljYWxseSBib3JkZXJzIGFub3RoZXIgb25lLAorICBzbyBlYWNoIGZyZWUgY2h1bmsgaXMga25vd24gdG8gYmUgcHJlY2VkZWQgYW5kIGZvbGxvd2VkIGJ5IGVpdGhlcgorICBpbnVzZSBjaHVua3Mgb3IgdGhlIGVuZHMgb2YgbWVtb3J5LgorCisgIE5vdGUgdGhhdCB0aGUgYGZvb3QnIG9mIHRoZSBjdXJyZW50IGNodW5rIGlzIGFjdHVhbGx5IHJlcHJlc2VudGVkCisgIGFzIHRoZSBwcmV2X2Zvb3Qgb2YgdGhlIE5FWFQgY2h1bmsuIFRoaXMgbWFrZXMgaXQgZWFzaWVyIHRvCisgIGRlYWwgd2l0aCBhbGlnbm1lbnRzIGV0YyBidXQgY2FuIGJlIHZlcnkgY29uZnVzaW5nIHdoZW4gdHJ5aW5nCisgIHRvIGV4dGVuZCBvciBhZGFwdCB0aGlzIGNvZGUuCisKKyAgVGhlIGV4Y2VwdGlvbnMgdG8gYWxsIHRoaXMgYXJlCisKKyAgICAgMS4gVGhlIHNwZWNpYWwgY2h1bmsgYHRvcCcgaXMgdGhlIHRvcC1tb3N0IGF2YWlsYWJsZSBjaHVuayAoaS5lLiwKKyAgICAgICAgdGhlIG9uZSBib3JkZXJpbmcgdGhlIGVuZCBvZiBhdmFpbGFibGUgbWVtb3J5KS4gSXQgaXMgdHJlYXRlZAorICAgICAgICBzcGVjaWFsbHkuICBUb3AgaXMgbmV2ZXIgaW5jbHVkZWQgaW4gYW55IGJpbiwgaXMgdXNlZCBvbmx5IGlmCisgICAgICAgIG5vIG90aGVyIGNodW5rIGlzIGF2YWlsYWJsZSwgYW5kIGlzIHJlbGVhc2VkIGJhY2sgdG8gdGhlCisgICAgICAgIHN5c3RlbSBpZiBpdCBpcyB2ZXJ5IGxhcmdlIChzZWUgTV9UUklNX1RIUkVTSE9MRCkuICBJbiBlZmZlY3QsCisgICAgICAgIHRoZSB0b3AgY2h1bmsgaXMgdHJlYXRlZCBhcyBsYXJnZXIgKGFuZCB0aHVzIGxlc3Mgd2VsbAorICAgICAgICBmaXR0aW5nKSB0aGFuIGFueSBvdGhlciBhdmFpbGFibGUgY2h1bmsuICBUaGUgdG9wIGNodW5rCisgICAgICAgIGRvZXNuJ3QgdXBkYXRlIGl0cyB0cmFpbGluZyBzaXplIGZpZWxkIHNpbmNlIHRoZXJlIGlzIG5vIG5leHQKKyAgICAgICAgY29udGlndW91cyBjaHVuayB0aGF0IHdvdWxkIGhhdmUgdG8gaW5kZXggb2ZmIGl0LiBIb3dldmVyLAorICAgICAgICBzcGFjZSBpcyBzdGlsbCBhbGxvY2F0ZWQgZm9yIGl0IChUT1BfRk9PVF9TSVpFKSB0byBlbmFibGUKKyAgICAgICAgc2VwYXJhdGlvbiBvciBtZXJnaW5nIHdoZW4gc3BhY2UgaXMgZXh0ZW5kZWQuCisKKyAgICAgMy4gQ2h1bmtzIGFsbG9jYXRlZCB2aWEgbW1hcCwgd2hpY2ggaGF2ZSB0aGUgbG93ZXN0LW9yZGVyIGJpdAorICAgICAgICAoSVNfTU1BUFBFRF9CSVQpIHNldCBpbiB0aGVpciBwcmV2X2Zvb3QgZmllbGRzLCBhbmQgZG8gbm90IHNldAorICAgICAgICBQSU5VU0VfQklUIGluIHRoZWlyIGhlYWQgZmllbGRzLiAgQmVjYXVzZSB0aGV5IGFyZSBhbGxvY2F0ZWQKKyAgICAgICAgb25lLWJ5LW9uZSwgZWFjaCBtdXN0IGNhcnJ5IGl0cyBvd24gcHJldl9mb290IGZpZWxkLCB3aGljaCBpcworICAgICAgICBhbHNvIHVzZWQgdG8gaG9sZCB0aGUgb2Zmc2V0IHRoaXMgY2h1bmsgaGFzIHdpdGhpbiBpdHMgbW1hcHBlZAorICAgICAgICByZWdpb24sIHdoaWNoIGlzIG5lZWRlZCB0byBwcmVzZXJ2ZSBhbGlnbm1lbnQuIEVhY2ggbW1hcHBlZAorICAgICAgICBjaHVuayBpcyB0cmFpbGVkIGJ5IHRoZSBmaXJzdCB0d28gZmllbGRzIG9mIGEgZmFrZSBuZXh0LWNodW5rCisgICAgICAgIGZvciBzYWtlIG9mIHVzYWdlIGNoZWNrcy4KKworKi8KKworc3RydWN0IG1hbGxvY19jaHVuayB7CisgIHNpemVfdCAgICAgICAgICAgICAgIHByZXZfZm9vdDsgIC8qIFNpemUgb2YgcHJldmlvdXMgY2h1bmsgKGlmIGZyZWUpLiAgKi8KKyAgc2l6ZV90ICAgICAgICAgICAgICAgaGVhZDsgICAgICAgLyogU2l6ZSBhbmQgaW51c2UgYml0cy4gKi8KKyAgc3RydWN0IG1hbGxvY19jaHVuayogZmQ7ICAgICAgICAgLyogZG91YmxlIGxpbmtzIC0tIHVzZWQgb25seSBpZiBmcmVlLiAqLworICBzdHJ1Y3QgbWFsbG9jX2NodW5rKiBiazsKK307CisKK3R5cGVkZWYgc3RydWN0IG1hbGxvY19jaHVuayAgbWNodW5rOwordHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX2NodW5rKiBtY2h1bmtwdHI7Cit0eXBlZGVmIHN0cnVjdCBtYWxsb2NfY2h1bmsqIHNiaW5wdHI7ICAvKiBUaGUgdHlwZSBvZiBiaW5zIG9mIGNodW5rcyAqLwordHlwZWRlZiB1bnNpZ25lZCBpbnQgYmluZGV4X3Q7ICAgICAgICAgLyogRGVzY3JpYmVkIGJlbG93ICovCit0eXBlZGVmIHVuc2lnbmVkIGludCBiaW5tYXBfdDsgICAgICAgICAvKiBEZXNjcmliZWQgYmVsb3cgKi8KK3R5cGVkZWYgdW5zaWduZWQgaW50IGZsYWdfdDsgICAgICAgICAgIC8qIFRoZSB0eXBlIG9mIHZhcmlvdXMgYml0IGZsYWcgc2V0cyAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tIENodW5rcyBzaXplcyBhbmQgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIE1DSFVOS19TSVpFICAgICAgICAgKHNpemVvZihtY2h1bmspKQorCisjaWYgRk9PVEVSUworI2RlZmluZSBDSFVOS19PVkVSSEVBRCAgICAgIChUV09fU0laRV9UX1NJWkVTKQorI2Vsc2UgLyogRk9PVEVSUyAqLworI2RlZmluZSBDSFVOS19PVkVSSEVBRCAgICAgIChTSVpFX1RfU0laRSkKKyNlbmRpZiAvKiBGT09URVJTICovCisKKy8qIE1NYXBwZWQgY2h1bmtzIG5lZWQgYSBzZWNvbmQgd29yZCBvZiBvdmVyaGVhZCAuLi4gKi8KKyNkZWZpbmUgTU1BUF9DSFVOS19PVkVSSEVBRCAoVFdPX1NJWkVfVF9TSVpFUykKKy8qIC4uLiBhbmQgYWRkaXRpb25hbCBwYWRkaW5nIGZvciBmYWtlIG5leHQtY2h1bmsgYXQgZm9vdCAqLworI2RlZmluZSBNTUFQX0ZPT1RfUEFEICAgICAgIChGT1VSX1NJWkVfVF9TSVpFUykKKworLyogVGhlIHNtYWxsZXN0IHNpemUgd2UgY2FuIG1hbGxvYyBpcyBhbiBhbGlnbmVkIG1pbmltYWwgY2h1bmsgKi8KKyNkZWZpbmUgTUlOX0NIVU5LX1NJWkVcCisgICgoTUNIVU5LX1NJWkUgKyBDSFVOS19BTElHTl9NQVNLKSAmIH5DSFVOS19BTElHTl9NQVNLKQorCisvKiBjb252ZXJzaW9uIGZyb20gbWFsbG9jIGhlYWRlcnMgdG8gdXNlciBwb2ludGVycywgYW5kIGJhY2sgKi8KKyNkZWZpbmUgY2h1bmsybWVtKHApICAgICAgICAoKHZvaWQqKSgoY2hhciopKHApICAgICAgICsgVFdPX1NJWkVfVF9TSVpFUykpCisjZGVmaW5lIG1lbTJjaHVuayhtZW0pICAgICAgKChtY2h1bmtwdHIpKChjaGFyKikobWVtKSAtIFRXT19TSVpFX1RfU0laRVMpKQorLyogY2h1bmsgYXNzb2NpYXRlZCB3aXRoIGFsaWduZWQgYWRkcmVzcyBBICovCisjZGVmaW5lIGFsaWduX2FzX2NodW5rKEEpICAgKG1jaHVua3B0cikoKEEpICsgYWxpZ25fb2Zmc2V0KGNodW5rMm1lbShBKSkpCisKKy8qIEJvdW5kcyBvbiByZXF1ZXN0IChub3QgY2h1bmspIHNpemVzLiAqLworI2RlZmluZSBNQVhfUkVRVUVTVCAgICAgICAgICgoLU1JTl9DSFVOS19TSVpFKSA8PCAyKQorI2RlZmluZSBNSU5fUkVRVUVTVCAgICAgICAgIChNSU5fQ0hVTktfU0laRSAtIENIVU5LX09WRVJIRUFEIC0gU0laRV9UX09ORSkKKworLyogcGFkIHJlcXVlc3QgYnl0ZXMgaW50byBhIHVzYWJsZSBzaXplICovCisjZGVmaW5lIHBhZF9yZXF1ZXN0KHJlcSkgXAorICAgKCgocmVxKSArIENIVU5LX09WRVJIRUFEICsgQ0hVTktfQUxJR05fTUFTSykgJiB+Q0hVTktfQUxJR05fTUFTSykKKworLyogcGFkIHJlcXVlc3QsIGNoZWNraW5nIGZvciBtaW5pbXVtIChidXQgbm90IG1heGltdW0pICovCisjZGVmaW5lIHJlcXVlc3Qyc2l6ZShyZXEpIFwKKyAgKCgocmVxKSA8IE1JTl9SRVFVRVNUKT8gTUlOX0NIVU5LX1NJWkUgOiBwYWRfcmVxdWVzdChyZXEpKQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLSBPcGVyYXRpb25zIG9uIGhlYWQgYW5kIGZvb3QgZmllbGRzIC0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgIFRoZSBoZWFkIGZpZWxkIG9mIGEgY2h1bmsgaXMgb3InZWQgd2l0aCBQSU5VU0VfQklUIHdoZW4gcHJldmlvdXMKKyAgYWRqYWNlbnQgY2h1bmsgaW4gdXNlLCBhbmQgb3InZWQgd2l0aCBDSU5VU0VfQklUIGlmIHRoaXMgY2h1bmsgaXMgaW4KKyAgdXNlLiBJZiB0aGUgY2h1bmsgd2FzIG9idGFpbmVkIHdpdGggbW1hcCwgdGhlIHByZXZfZm9vdCBmaWVsZCBoYXMKKyAgSVNfTU1BUFBFRF9CSVQgc2V0LCBvdGhlcndpc2UgaG9sZGluZyB0aGUgb2Zmc2V0IG9mIHRoZSBiYXNlIG9mIHRoZQorICBtbWFwcGVkIHJlZ2lvbiB0byB0aGUgYmFzZSBvZiB0aGUgY2h1bmsuCisqLworCisjZGVmaW5lIFBJTlVTRV9CSVQgICAgICAgICAgKFNJWkVfVF9PTkUpCisjZGVmaW5lIENJTlVTRV9CSVQgICAgICAgICAgKFNJWkVfVF9UV08pCisjZGVmaW5lIElOVVNFX0JJVFMgICAgICAgICAgKFBJTlVTRV9CSVR8Q0lOVVNFX0JJVCkKKworLyogSGVhZCB2YWx1ZSBmb3IgZmVuY2Vwb3N0cyAqLworI2RlZmluZSBGRU5DRVBPU1RfSEVBRCAgICAgIChJTlVTRV9CSVRTfFNJWkVfVF9TSVpFKQorCisvKiBleHRyYWN0aW9uIG9mIGZpZWxkcyBmcm9tIGhlYWQgd29yZHMgKi8KKyNkZWZpbmUgY2ludXNlKHApICAgICAgICAgICAoKHApLT5oZWFkICYgQ0lOVVNFX0JJVCkKKyNkZWZpbmUgcGludXNlKHApICAgICAgICAgICAoKHApLT5oZWFkICYgUElOVVNFX0JJVCkKKyNkZWZpbmUgY2h1bmtzaXplKHApICAgICAgICAoKHApLT5oZWFkICYgfihJTlVTRV9CSVRTKSkKKworI2RlZmluZSBjbGVhcl9waW51c2UocCkgICAgICgocCktPmhlYWQgJj0gflBJTlVTRV9CSVQpCisjZGVmaW5lIGNsZWFyX2NpbnVzZShwKSAgICAgKChwKS0+aGVhZCAmPSB+Q0lOVVNFX0JJVCkKKworLyogVHJlYXQgc3BhY2UgYXQgcHRyICsvLSBvZmZzZXQgYXMgYSBjaHVuayAqLworI2RlZmluZSBjaHVua19wbHVzX29mZnNldChwLCBzKSAgKChtY2h1bmtwdHIpKCgoY2hhciopKHApKSArIChzKSkpCisjZGVmaW5lIGNodW5rX21pbnVzX29mZnNldChwLCBzKSAoKG1jaHVua3B0cikoKChjaGFyKikocCkpIC0gKHMpKSkKKworLyogUHRyIHRvIG5leHQgb3IgcHJldmlvdXMgcGh5c2ljYWwgbWFsbG9jX2NodW5rLiAqLworI2RlZmluZSBuZXh0X2NodW5rKHApICgobWNodW5rcHRyKSggKChjaGFyKikocCkpICsgKChwKS0+aGVhZCAmIH5JTlVTRV9CSVRTKSkpCisjZGVmaW5lIHByZXZfY2h1bmsocCkgKChtY2h1bmtwdHIpKCAoKGNoYXIqKShwKSkgLSAoKHApLT5wcmV2X2Zvb3QpICkpCisKKy8qIGV4dHJhY3QgbmV4dCBjaHVuaydzIHBpbnVzZSBiaXQgKi8KKyNkZWZpbmUgbmV4dF9waW51c2UocCkgICgobmV4dF9jaHVuayhwKS0+aGVhZCkgJiBQSU5VU0VfQklUKQorCisvKiBHZXQvc2V0IHNpemUgYXQgZm9vdGVyICovCisjZGVmaW5lIGdldF9mb290KHAsIHMpICAoKChtY2h1bmtwdHIpKChjaGFyKikocCkgKyAocykpKS0+cHJldl9mb290KQorI2RlZmluZSBzZXRfZm9vdChwLCBzKSAgKCgobWNodW5rcHRyKSgoY2hhciopKHApICsgKHMpKSktPnByZXZfZm9vdCA9IChzKSkKKworLyogU2V0IHNpemUsIHBpbnVzZSBiaXQsIGFuZCBmb290ICovCisjZGVmaW5lIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhwLCBzKVwKKyAgKChwKS0+aGVhZCA9IChzfFBJTlVTRV9CSVQpLCBzZXRfZm9vdChwLCBzKSkKKworLyogU2V0IHNpemUsIHBpbnVzZSBiaXQsIGZvb3QsIGFuZCBjbGVhciBuZXh0IHBpbnVzZSAqLworI2RlZmluZSBzZXRfZnJlZV93aXRoX3BpbnVzZShwLCBzLCBuKVwKKyAgKGNsZWFyX3BpbnVzZShuKSwgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHAsIHMpKQorCisjZGVmaW5lIGlzX21tYXBwZWQocClcCisgICghKChwKS0+aGVhZCAmIFBJTlVTRV9CSVQpICYmICgocCktPnByZXZfZm9vdCAmIElTX01NQVBQRURfQklUKSkKKworLyogR2V0IHRoZSBpbnRlcm5hbCBvdmVyaGVhZCBhc3NvY2lhdGVkIHdpdGggY2h1bmsgcCAqLworI2RlZmluZSBvdmVyaGVhZF9mb3IocClcCisgKGlzX21tYXBwZWQocCk/IE1NQVBfQ0hVTktfT1ZFUkhFQUQgOiBDSFVOS19PVkVSSEVBRCkKKworLyogUmV0dXJuIHRydWUgaWYgbWFsbG9jZWQgc3BhY2UgaXMgbm90IG5lY2Vzc2FyaWx5IGNsZWFyZWQgKi8KKyNpZiBNTUFQX0NMRUFSUworI2RlZmluZSBjYWxsb2NfbXVzdF9jbGVhcihwKSAoIWlzX21tYXBwZWQocCkpCisjZWxzZSAvKiBNTUFQX0NMRUFSUyAqLworI2RlZmluZSBjYWxsb2NfbXVzdF9jbGVhcihwKSAoMSkKKyNlbmRpZiAvKiBNTUFQX0NMRUFSUyAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE92ZXJsYWlkIGRhdGEgc3RydWN0dXJlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICBXaGVuIGNodW5rcyBhcmUgbm90IGluIHVzZSwgdGhleSBhcmUgdHJlYXRlZCBhcyBub2RlcyBvZiBlaXRoZXIKKyAgbGlzdHMgb3IgdHJlZXMuCisKKyAgIlNtYWxsIiAgY2h1bmtzIGFyZSBzdG9yZWQgaW4gY2lyY3VsYXIgZG91Ymx5LWxpbmtlZCBsaXN0cywgYW5kIGxvb2sKKyAgbGlrZSB0aGlzOgorCisgICAgY2h1bmstPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICAgICAgfCAgICAgICAgICAgICBTaXplIG9mIHByZXZpb3VzIGNodW5rICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgYGhlYWQ6JyB8ICAgICAgICAgICAgIFNpemUgb2YgY2h1bmssIGluIGJ5dGVzICAgICAgICAgICAgICAgICAgICAgICAgIHxQfAorICAgICAgbWVtLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICAgICAgIHwgICAgICAgICAgICAgRm9yd2FyZCBwb2ludGVyIHRvIG5leHQgY2h1bmsgaW4gbGlzdCAgICAgICAgICAgICB8CisgICAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICAgICAgfCAgICAgICAgICAgICBCYWNrIHBvaW50ZXIgdG8gcHJldmlvdXMgY2h1bmsgaW4gbGlzdCAgICAgICAgICAgIHwKKyAgICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgICAgICB8ICAgICAgICAgICAgIFVudXNlZCBzcGFjZSAobWF5IGJlIDAgYnl0ZXMgbG9uZykgICAgICAgICAgICAgICAgLgorICAgICAgICAgICAgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4KKyAgICAgICAgICAgIC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CituZXh0Y2h1bmstPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgIGBmb290OicgfCAgICAgICAgICAgICBTaXplIG9mIGNodW5rLCBpbiBieXRlcyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisKKyAgTGFyZ2VyIGNodW5rcyBhcmUga2VwdCBpbiBhIGZvcm0gb2YgYml0d2lzZSBkaWdpdGFsIHRyZWVzIChha2EKKyAgdHJpZXMpIGtleWVkIG9uIGNodW5rc2l6ZXMuICBCZWNhdXNlIG1hbGxvY190cmVlX2NodW5rcyBhcmUgb25seSBmb3IKKyAgZnJlZSBjaHVua3MgZ3JlYXRlciB0aGFuIDI1NiBieXRlcywgdGhlaXIgc2l6ZSBkb2Vzbid0IGltcG9zZSBhbnkKKyAgY29uc3RyYWludHMgb24gdXNlciBjaHVuayBzaXplcy4gIEVhY2ggbm9kZSBsb29rcyBsaWtlOgorCisgICAgY2h1bmstPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICAgICAgfCAgICAgICAgICAgICBTaXplIG9mIHByZXZpb3VzIGNodW5rICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgYGhlYWQ6JyB8ICAgICAgICAgICAgIFNpemUgb2YgY2h1bmssIGluIGJ5dGVzICAgICAgICAgICAgICAgICAgICAgICAgIHxQfAorICAgICAgbWVtLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICAgICAgIHwgICAgICAgICAgICAgRm9yd2FyZCBwb2ludGVyIHRvIG5leHQgY2h1bmsgb2Ygc2FtZSBzaXplICAgICAgICB8CisgICAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICAgICAgfCAgICAgICAgICAgICBCYWNrIHBvaW50ZXIgdG8gcHJldmlvdXMgY2h1bmsgb2Ygc2FtZSBzaXplICAgICAgIHwKKyAgICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgICAgICB8ICAgICAgICAgICAgIFBvaW50ZXIgdG8gbGVmdCBjaGlsZCAoY2hpbGRbMF0pICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICAgICAgIHwgICAgICAgICAgICAgUG9pbnRlciB0byByaWdodCBjaGlsZCAoY2hpbGRbMV0pICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICAgICAgfCAgICAgICAgICAgICBQb2ludGVyIHRvIHBhcmVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgICAgICB8ICAgICAgICAgICAgIGJpbiBpbmRleCBvZiB0aGlzIGNodW5rICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICAgICAgIHwgICAgICAgICAgICAgVW51c2VkIHNwYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuCisgICAgICAgICAgICAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorbmV4dGNodW5rLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICBgZm9vdDonIHwgICAgICAgICAgICAgU2l6ZSBvZiBjaHVuaywgaW4gYnl0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCisgIEVhY2ggdHJlZSBob2xkaW5nIHRyZWVub2RlcyBpcyBhIHRyZWUgb2YgdW5pcXVlIGNodW5rIHNpemVzLiAgQ2h1bmtzCisgIG9mIHRoZSBzYW1lIHNpemUgYXJlIGFycmFuZ2VkIGluIGEgY2lyY3VsYXJseS1saW5rZWQgbGlzdCwgd2l0aCBvbmx5CisgIHRoZSBvbGRlc3QgY2h1bmsgKHRoZSBuZXh0IHRvIGJlIHVzZWQsIGluIG91ciBGSUZPIG9yZGVyaW5nKQorICBhY3R1YWxseSBpbiB0aGUgdHJlZS4gIChUcmVlIG1lbWJlcnMgYXJlIGRpc3Rpbmd1aXNoZWQgYnkgYSBub24tbnVsbAorICBwYXJlbnQgcG9pbnRlci4pICBJZiBhIGNodW5rIHdpdGggdGhlIHNhbWUgc2l6ZSBhbiBhbiBleGlzdGluZyBub2RlCisgIGlzIGluc2VydGVkLCBpdCBpcyBsaW5rZWQgb2ZmIHRoZSBleGlzdGluZyBub2RlIHVzaW5nIHBvaW50ZXJzIHRoYXQKKyAgd29yayBpbiB0aGUgc2FtZSB3YXkgYXMgZmQvYmsgcG9pbnRlcnMgb2Ygc21hbGwgY2h1bmtzLgorCisgIEVhY2ggdHJlZSBjb250YWlucyBhIHBvd2VyIG9mIDIgc2l6ZWQgcmFuZ2Ugb2YgY2h1bmsgc2l6ZXMgKHRoZQorICBzbWFsbGVzdCBpcyAweDEwMCA8PSB4IDwgMHgxODApLCB3aGljaCBpcyBpcyBkaXZpZGVkIGluIGhhbGYgYXQgZWFjaAorICB0cmVlIGxldmVsLCB3aXRoIHRoZSBjaHVua3MgaW4gdGhlIHNtYWxsZXIgaGFsZiBvZiB0aGUgcmFuZ2UgKDB4MTAwCisgIDw9IHggPCAweDE0MCBmb3IgdGhlIHRvcCBub3NlKSBpbiB0aGUgbGVmdCBzdWJ0cmVlIGFuZCB0aGUgbGFyZ2VyCisgIGhhbGYgKDB4MTQwIDw9IHggPCAweDE4MCkgaW4gdGhlIHJpZ2h0IHN1YnRyZWUuICBUaGlzIGlzLCBvZiBjb3Vyc2UsCisgIGRvbmUgYnkgaW5zcGVjdGluZyBpbmRpdmlkdWFsIGJpdHMuCisKKyAgVXNpbmcgdGhlc2UgcnVsZXMsIGVhY2ggbm9kZSdzIGxlZnQgc3VidHJlZSBjb250YWlucyBhbGwgc21hbGxlcgorICBzaXplcyB0aGFuIGl0cyByaWdodCBzdWJ0cmVlLiAgSG93ZXZlciwgdGhlIG5vZGUgYXQgdGhlIHJvb3Qgb2YgZWFjaAorICBzdWJ0cmVlIGhhcyBubyBwYXJ0aWN1bGFyIG9yZGVyaW5nIHJlbGF0aW9uc2hpcCB0byBlaXRoZXIuICAoVGhlCisgIGRpdmlkaW5nIGxpbmUgYmV0d2VlbiB0aGUgc3VidHJlZSBzaXplcyBpcyBiYXNlZCBvbiB0cmllIHJlbGF0aW9uLikKKyAgSWYgd2UgcmVtb3ZlIHRoZSBsYXN0IGNodW5rIG9mIGEgZ2l2ZW4gc2l6ZSBmcm9tIHRoZSBpbnRlcmlvciBvZiB0aGUKKyAgdHJlZSwgd2UgbmVlZCB0byByZXBsYWNlIGl0IHdpdGggYSBsZWFmIG5vZGUuICBUaGUgdHJlZSBvcmRlcmluZworICBydWxlcyBwZXJtaXQgYSBub2RlIHRvIGJlIHJlcGxhY2VkIGJ5IGFueSBsZWFmIGJlbG93IGl0LgorCisgIFRoZSBzbWFsbGVzdCBjaHVuayBpbiBhIHRyZWUgKGEgY29tbW9uIG9wZXJhdGlvbiBpbiBhIGJlc3QtZml0CisgIGFsbG9jYXRvcikgY2FuIGJlIGZvdW5kIGJ5IHdhbGtpbmcgYSBwYXRoIHRvIHRoZSBsZWZ0bW9zdCBsZWFmIGluCisgIHRoZSB0cmVlLiAgVW5saWtlIGEgdXN1YWwgYmluYXJ5IHRyZWUsIHdoZXJlIHdlIGZvbGxvdyBsZWZ0IGNoaWxkCisgIHBvaW50ZXJzIHVudGlsIHdlIHJlYWNoIGEgbnVsbCwgaGVyZSB3ZSBmb2xsb3cgdGhlIHJpZ2h0IGNoaWxkCisgIHBvaW50ZXIgYW55IHRpbWUgdGhlIGxlZnQgb25lIGlzIG51bGwsIHVudGlsIHdlIHJlYWNoIGEgbGVhZiB3aXRoCisgIGJvdGggY2hpbGQgcG9pbnRlcnMgbnVsbC4gVGhlIHNtYWxsZXN0IGNodW5rIGluIHRoZSB0cmVlIHdpbGwgYmUKKyAgc29tZXdoZXJlIGFsb25nIHRoYXQgcGF0aC4KKworICBUaGUgd29yc3QgY2FzZSBudW1iZXIgb2Ygc3RlcHMgdG8gYWRkLCBmaW5kLCBvciByZW1vdmUgYSBub2RlIGlzCisgIGJvdW5kZWQgYnkgdGhlIG51bWJlciBvZiBiaXRzIGRpZmZlcmVudGlhdGluZyBjaHVua3Mgd2l0aGluCisgIGJpbnMuIFVuZGVyIGN1cnJlbnQgYmluIGNhbGN1bGF0aW9ucywgdGhpcyByYW5nZXMgZnJvbSA2IHVwIHRvIDIxCisgIChmb3IgMzIgYml0IHNpemVzKSBvciB1cCB0byA1MyAoZm9yIDY0IGJpdCBzaXplcykuIFRoZSB0eXBpY2FsIGNhc2UKKyAgaXMgb2YgY291cnNlIG11Y2ggYmV0dGVyLgorKi8KKworc3RydWN0IG1hbGxvY190cmVlX2NodW5rIHsKKyAgLyogVGhlIGZpcnN0IGZvdXIgZmllbGRzIG11c3QgYmUgY29tcGF0aWJsZSB3aXRoIG1hbGxvY19jaHVuayAqLworICBzaXplX3QgICAgICAgICAgICAgICAgICAgIHByZXZfZm9vdDsKKyAgc2l6ZV90ICAgICAgICAgICAgICAgICAgICBoZWFkOworICBzdHJ1Y3QgbWFsbG9jX3RyZWVfY2h1bmsqIGZkOworICBzdHJ1Y3QgbWFsbG9jX3RyZWVfY2h1bmsqIGJrOworCisgIHN0cnVjdCBtYWxsb2NfdHJlZV9jaHVuayogY2hpbGRbMl07CisgIHN0cnVjdCBtYWxsb2NfdHJlZV9jaHVuayogcGFyZW50OworICBiaW5kZXhfdCAgICAgICAgICAgICAgICAgIGluZGV4OworfTsKKwordHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX3RyZWVfY2h1bmsgIHRjaHVuazsKK3R5cGVkZWYgc3RydWN0IG1hbGxvY190cmVlX2NodW5rKiB0Y2h1bmtwdHI7Cit0eXBlZGVmIHN0cnVjdCBtYWxsb2NfdHJlZV9jaHVuayogdGJpbnB0cjsgLyogVGhlIHR5cGUgb2YgYmlucyBvZiB0cmVlcyAqLworCisvKiBBIGxpdHRsZSBoZWxwZXIgbWFjcm8gZm9yIHRyZWVzICovCisjZGVmaW5lIGxlZnRtb3N0X2NoaWxkKHQpICgodCktPmNoaWxkWzBdICE9IDA/ICh0KS0+Y2hpbGRbMF0gOiAodCktPmNoaWxkWzFdKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTZWdtZW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICBFYWNoIG1hbGxvYyBzcGFjZSBtYXkgaW5jbHVkZSBub24tY29udGlndW91cyBzZWdtZW50cywgaGVsZCBpbiBhCisgIGxpc3QgaGVhZGVkIGJ5IGFuIGVtYmVkZGVkIG1hbGxvY19zZWdtZW50IHJlY29yZCByZXByZXNlbnRpbmcgdGhlCisgIHRvcC1tb3N0IHNwYWNlLiBTZWdtZW50cyBhbHNvIGluY2x1ZGUgZmxhZ3MgaG9sZGluZyBwcm9wZXJ0aWVzIG9mCisgIHRoZSBzcGFjZS4gTGFyZ2UgY2h1bmtzIHRoYXQgYXJlIGRpcmVjdGx5IGFsbG9jYXRlZCBieSBtbWFwIGFyZSBub3QKKyAgaW5jbHVkZWQgaW4gdGhpcyBsaXN0LiBUaGV5IGFyZSBpbnN0ZWFkIGluZGVwZW5kZW50bHkgY3JlYXRlZCBhbmQKKyAgZGVzdHJveWVkIHdpdGhvdXQgb3RoZXJ3aXNlIGtlZXBpbmcgdHJhY2sgb2YgdGhlbS4KKworICBTZWdtZW50IG1hbmFnZW1lbnQgbWFpbmx5IGNvbWVzIGludG8gcGxheSBmb3Igc3BhY2VzIGFsbG9jYXRlZCBieQorICBNTUFQLiAgQW55IGNhbGwgdG8gTU1BUCBtaWdodCBvciBtaWdodCBub3QgcmV0dXJuIG1lbW9yeSB0aGF0IGlzCisgIGFkamFjZW50IHRvIGFuIGV4aXN0aW5nIHNlZ21lbnQuICBNT1JFQ09SRSBub3JtYWxseSBjb250aWd1b3VzbHkKKyAgZXh0ZW5kcyB0aGUgY3VycmVudCBzcGFjZSwgc28gdGhpcyBzcGFjZSBpcyBhbG1vc3QgYWx3YXlzIGFkamFjZW50LAorICB3aGljaCBpcyBzaW1wbGVyIGFuZCBmYXN0ZXIgdG8gZGVhbCB3aXRoLiAoVGhpcyBpcyB3aHkgTU9SRUNPUkUgaXMKKyAgdXNlZCBwcmVmZXJlbnRpYWxseSB0byBNTUFQIHdoZW4gYm90aCBhcmUgYXZhaWxhYmxlIC0tIHNlZQorICBzeXNfYWxsb2MuKSAgV2hlbiBhbGxvY2F0aW5nIHVzaW5nIE1NQVAsIHdlIGRvbid0IHVzZSBhbnkgb2YgdGhlCisgIGhpbnRpbmcgbWVjaGFuaXNtcyAoaW5jb25zaXN0ZW50bHkpIHN1cHBvcnRlZCBpbiB2YXJpb3VzCisgIGltcGxlbWVudGF0aW9ucyBvZiB1bml4IG1tYXAsIG9yIGRpc3Rpbmd1aXNoIHJlc2VydmluZyBmcm9tCisgIGNvbW1pdHRpbmcgbWVtb3J5LiBJbnN0ZWFkLCB3ZSBqdXN0IGFzayBmb3Igc3BhY2UsIGFuZCBleHBsb2l0CisgIGNvbnRpZ3VpdHkgd2hlbiB3ZSBnZXQgaXQuICBJdCBpcyBwcm9iYWJseSBwb3NzaWJsZSB0byBkbworICBiZXR0ZXIgdGhhbiB0aGlzIG9uIHNvbWUgc3lzdGVtcywgYnV0IG5vIGdlbmVyYWwgc2NoZW1lIHNlZW1zCisgIHRvIGJlIHNpZ25pZmljYW50bHkgYmV0dGVyLgorCisgIE1hbmFnZW1lbnQgZW50YWlscyBhIHNpbXBsZXIgdmFyaWFudCBvZiB0aGUgY29uc29saWRhdGlvbiBzY2hlbWUKKyAgdXNlZCBmb3IgY2h1bmtzIHRvIHJlZHVjZSBmcmFnbWVudGF0aW9uIC0tIG5ldyBhZGphY2VudCBtZW1vcnkgaXMKKyAgbm9ybWFsbHkgcHJlcGVuZGVkIG9yIGFwcGVuZGVkIHRvIGFuIGV4aXN0aW5nIHNlZ21lbnQuIEhvd2V2ZXIsCisgIHRoZXJlIGFyZSBsaW1pdGF0aW9ucyBjb21wYXJlZCB0byBjaHVuayBjb25zb2xpZGF0aW9uIHRoYXQgbW9zdGx5CisgIHJlZmxlY3QgdGhlIGZhY3QgdGhhdCBzZWdtZW50IHByb2Nlc3NpbmcgaXMgcmVsYXRpdmVseSBpbmZyZXF1ZW50CisgIChvY2N1cnJpbmcgb25seSB3aGVuIGdldHRpbmcgbWVtb3J5IGZyb20gc3lzdGVtKSBhbmQgdGhhdCB3ZQorICBkb24ndCBleHBlY3QgdG8gaGF2ZSBodWdlIG51bWJlcnMgb2Ygc2VnbWVudHM6CisKKyAgKiBTZWdtZW50cyBhcmUgbm90IGluZGV4ZWQsIHNvIHRyYXZlcnNhbCByZXF1aXJlcyBsaW5lYXIgc2NhbnMuICAoSXQKKyAgICB3b3VsZCBiZSBwb3NzaWJsZSB0byBpbmRleCB0aGVzZSwgYnV0IGlzIG5vdCB3b3J0aCB0aGUgZXh0cmEKKyAgICBvdmVyaGVhZCBhbmQgY29tcGxleGl0eSBmb3IgbW9zdCBwcm9ncmFtcyBvbiBtb3N0IHBsYXRmb3Jtcy4pCisgICogTmV3IHNlZ21lbnRzIGFyZSBvbmx5IGFwcGVuZGVkIHRvIG9sZCBvbmVzIHdoZW4gaG9sZGluZyB0b3AtbW9zdAorICAgIG1lbW9yeTsgaWYgdGhleSBjYW5ub3QgYmUgcHJlcGVuZGVkIHRvIG90aGVycywgdGhleSBhcmUgaGVsZCBpbgorICAgIGRpZmZlcmVudCBzZWdtZW50cy4KKworICBFeGNlcHQgZm9yIHRoZSB0b3AtbW9zdCBzZWdtZW50IG9mIGFuIG1zdGF0ZSwgZWFjaCBzZWdtZW50IHJlY29yZAorICBpcyBrZXB0IGF0IHRoZSB0YWlsIG9mIGl0cyBzZWdtZW50LiBTZWdtZW50cyBhcmUgYWRkZWQgYnkgcHVzaGluZworICBzZWdtZW50IHJlY29yZHMgb250byB0aGUgbGlzdCBoZWFkZWQgYnkgJm1zdGF0ZS5zZWcgZm9yIHRoZQorICBjb250YWluaW5nIG1zdGF0ZS4KKworICBTZWdtZW50IGZsYWdzIGNvbnRyb2wgYWxsb2NhdGlvbi9tZXJnZS9kZWFsbG9jYXRpb24gcG9saWNpZXM6CisgICogSWYgRVhURVJOX0JJVCBzZXQsIHRoZW4gd2UgZGlkIG5vdCBhbGxvY2F0ZSB0aGlzIHNlZ21lbnQsCisgICAgYW5kIHNvIHNob3VsZCBub3QgdHJ5IHRvIGRlYWxsb2NhdGUgb3IgbWVyZ2Ugd2l0aCBvdGhlcnMuCisgICAgKFRoaXMgY3VycmVudGx5IGhvbGRzIG9ubHkgZm9yIHRoZSBpbml0aWFsIHNlZ21lbnQgcGFzc2VkCisgICAgaW50byBjcmVhdGVfbXNwYWNlX3dpdGhfYmFzZS4pCisgICogSWYgSVNfTU1BUFBFRF9CSVQgc2V0LCB0aGUgc2VnbWVudCBtYXkgYmUgbWVyZ2VkIHdpdGgKKyAgICBvdGhlciBzdXJyb3VuZGluZyBtbWFwcGVkIHNlZ21lbnRzIGFuZCB0cmltbWVkL2RlLWFsbG9jYXRlZAorICAgIHVzaW5nIG11bm1hcC4KKyAgKiBJZiBuZWl0aGVyIGJpdCBpcyBzZXQsIHRoZW4gdGhlIHNlZ21lbnQgd2FzIG9idGFpbmVkIHVzaW5nCisgICAgTU9SRUNPUkUgc28gY2FuIGJlIG1lcmdlZCB3aXRoIHN1cnJvdW5kaW5nIE1PUkVDT1JFJ2Qgc2VnbWVudHMKKyAgICBhbmQgZGVhbGxvY2F0ZWQvdHJpbW1lZCB1c2luZyBNT1JFQ09SRSB3aXRoIG5lZ2F0aXZlIGFyZ3VtZW50cy4KKyovCisKK3N0cnVjdCBtYWxsb2Nfc2VnbWVudCB7CisgIGNoYXIqICAgICAgICBiYXNlOyAgICAgICAgICAgICAvKiBiYXNlIGFkZHJlc3MgKi8KKyAgc2l6ZV90ICAgICAgIHNpemU7ICAgICAgICAgICAgIC8qIGFsbG9jYXRlZCBzaXplICovCisgIHN0cnVjdCBtYWxsb2Nfc2VnbWVudCogbmV4dDsgICAvKiBwdHIgdG8gbmV4dCBzZWdtZW50ICovCisgIGZsYWdfdCAgICAgICBzZmxhZ3M7ICAgICAgICAgICAvKiBtbWFwIGFuZCBleHRlcm4gZmxhZyAqLworfTsKKworI2RlZmluZSBpc19tbWFwcGVkX3NlZ21lbnQoUykgICgoUyktPnNmbGFncyAmIElTX01NQVBQRURfQklUKQorI2RlZmluZSBpc19leHRlcm5fc2VnbWVudChTKSAgICgoUyktPnNmbGFncyAmIEVYVEVSTl9CSVQpCisKK3R5cGVkZWYgc3RydWN0IG1hbGxvY19zZWdtZW50ICBtc2VnbWVudDsKK3R5cGVkZWYgc3RydWN0IG1hbGxvY19zZWdtZW50KiBtc2VnbWVudHB0cjsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBtYWxsb2Nfc3RhdGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgIEEgbWFsbG9jX3N0YXRlIGhvbGRzIGFsbCBvZiB0aGUgYm9va2tlZXBpbmcgZm9yIGEgc3BhY2UuCisgICBUaGUgbWFpbiBmaWVsZHMgYXJlOgorCisgIFRvcAorICAgIFRoZSB0b3Btb3N0IGNodW5rIG9mIHRoZSBjdXJyZW50bHkgYWN0aXZlIHNlZ21lbnQuIEl0cyBzaXplIGlzCisgICAgY2FjaGVkIGluIHRvcHNpemUuICBUaGUgYWN0dWFsIHNpemUgb2YgdG9wbW9zdCBzcGFjZSBpcworICAgIHRvcHNpemUrVE9QX0ZPT1RfU0laRSwgd2hpY2ggaW5jbHVkZXMgc3BhY2UgcmVzZXJ2ZWQgZm9yIGFkZGluZworICAgIGZlbmNlcG9zdHMgYW5kIHNlZ21lbnQgcmVjb3JkcyBpZiBuZWNlc3Nhcnkgd2hlbiBnZXR0aW5nIG1vcmUKKyAgICBzcGFjZSBmcm9tIHRoZSBzeXN0ZW0uICBUaGUgc2l6ZSBhdCB3aGljaCB0byBhdXRvdHJpbSB0b3AgaXMKKyAgICBjYWNoZWQgZnJvbSBtcGFyYW1zIGluIHRyaW1fY2hlY2ssIGV4Y2VwdCB0aGF0IGl0IGlzIGRpc2FibGVkIGlmCisgICAgYW4gYXV0b3RyaW0gZmFpbHMuCisKKyAgRGVzaWduYXRlZCB2aWN0aW0gKGR2KQorICAgIFRoaXMgaXMgdGhlIHByZWZlcnJlZCBjaHVuayBmb3Igc2VydmljaW5nIHNtYWxsIHJlcXVlc3RzIHRoYXQKKyAgICBkb24ndCBoYXZlIGV4YWN0IGZpdHMuICBJdCBpcyBub3JtYWxseSB0aGUgY2h1bmsgc3BsaXQgb2ZmIG1vc3QKKyAgICByZWNlbnRseSB0byBzZXJ2aWNlIGFub3RoZXIgc21hbGwgcmVxdWVzdC4gIEl0cyBzaXplIGlzIGNhY2hlZCBpbgorICAgIGR2c2l6ZS4gVGhlIGxpbmsgZmllbGRzIG9mIHRoaXMgY2h1bmsgYXJlIG5vdCBtYWludGFpbmVkIHNpbmNlIGl0CisgICAgaXMgbm90IGtlcHQgaW4gYSBiaW4uCisKKyAgU21hbGxCaW5zCisgICAgQW4gYXJyYXkgb2YgYmluIGhlYWRlcnMgZm9yIGZyZWUgY2h1bmtzLiAgVGhlc2UgYmlucyBob2xkIGNodW5rcworICAgIHdpdGggc2l6ZXMgbGVzcyB0aGFuIE1JTl9MQVJHRV9TSVpFIGJ5dGVzLiBFYWNoIGJpbiBjb250YWlucworICAgIGNodW5rcyBvZiBhbGwgdGhlIHNhbWUgc2l6ZSwgc3BhY2VkIDggYnl0ZXMgYXBhcnQuICBUbyBzaW1wbGlmeQorICAgIHVzZSBpbiBkb3VibGUtbGlua2VkIGxpc3RzLCBlYWNoIGJpbiBoZWFkZXIgYWN0cyBhcyBhIG1hbGxvY19jaHVuaworICAgIHBvaW50aW5nIHRvIHRoZSByZWFsIGZpcnN0IG5vZGUsIGlmIGl0IGV4aXN0cyAoZWxzZSBwb2ludGluZyB0bworICAgIGl0c2VsZikuICBUaGlzIGF2b2lkcyBzcGVjaWFsLWNhc2luZyBmb3IgaGVhZGVycy4gIEJ1dCB0byBhdm9pZAorICAgIHdhc3RlLCB3ZSBhbGxvY2F0ZSBvbmx5IHRoZSBmZC9iayBwb2ludGVycyBvZiBiaW5zLCBhbmQgdGhlbiB1c2UKKyAgICByZXBvc2l0aW9uaW5nIHRyaWNrcyB0byB0cmVhdCB0aGVzZSBhcyB0aGUgZmllbGRzIG9mIGEgY2h1bmsuCisKKyAgVHJlZUJpbnMKKyAgICBUcmVlYmlucyBhcmUgcG9pbnRlcnMgdG8gdGhlIHJvb3RzIG9mIHRyZWVzIGhvbGRpbmcgYSByYW5nZSBvZgorICAgIHNpemVzLiBUaGVyZSBhcmUgMiBlcXVhbGx5IHNwYWNlZCB0cmVlYmlucyBmb3IgZWFjaCBwb3dlciBvZiB0d28KKyAgICBmcm9tIFRSRUVfU0hJRlQgdG8gVFJFRV9TSElGVCsxNi4gVGhlIGxhc3QgYmluIGhvbGRzIGFueXRoaW5nCisgICAgbGFyZ2VyLgorCisgIEJpbiBtYXBzCisgICAgVGhlcmUgaXMgb25lIGJpdCBtYXAgZm9yIHNtYWxsIGJpbnMgKCJzbWFsbG1hcCIpIGFuZCBvbmUgZm9yCisgICAgdHJlZWJpbnMgKCJ0cmVlbWFwKS4gIEVhY2ggYmluIHNldHMgaXRzIGJpdCB3aGVuIG5vbi1lbXB0eSwgYW5kCisgICAgY2xlYXJzIHRoZSBiaXQgd2hlbiBlbXB0eS4gIEJpdCBvcGVyYXRpb25zIGFyZSB0aGVuIHVzZWQgdG8gYXZvaWQKKyAgICBiaW4tYnktYmluIHNlYXJjaGluZyAtLSBuZWFybHkgYWxsICJzZWFyY2giIGlzIGRvbmUgd2l0aG91dCBldmVyCisgICAgbG9va2luZyBhdCBiaW5zIHRoYXQgd29uJ3QgYmUgc2VsZWN0ZWQuICBUaGUgYml0IG1hcHMKKyAgICBjb25zZXJ2YXRpdmVseSB1c2UgMzIgYml0cyBwZXIgbWFwIHdvcmQsIGV2ZW4gaWYgb24gNjRiaXQgc3lzdGVtLgorICAgIEZvciBhIGdvb2QgZGVzY3JpcHRpb24gb2Ygc29tZSBvZiB0aGUgYml0LWJhc2VkIHRlY2huaXF1ZXMgdXNlZAorICAgIGhlcmUsIHNlZSBIZW5yeSBTLiBXYXJyZW4gSnIncyBib29rICJIYWNrZXIncyBEZWxpZ2h0IiAoYW5kCisgICAgc3VwcGxlbWVudCBhdCBodHRwOi8vaGFja2Vyc2RlbGlnaHQub3JnLykuIE1hbnkgb2YgdGhlc2UgYXJlCisgICAgaW50ZW5kZWQgdG8gcmVkdWNlIHRoZSBicmFuY2hpbmVzcyBvZiBwYXRocyB0aHJvdWdoIG1hbGxvYyBldGMsIGFzCisgICAgd2VsbCBhcyB0byByZWR1Y2UgdGhlIG51bWJlciBvZiBtZW1vcnkgbG9jYXRpb25zIHJlYWQgb3Igd3JpdHRlbi4KKworICBTZWdtZW50cworICAgIEEgbGlzdCBvZiBzZWdtZW50cyBoZWFkZWQgYnkgYW4gZW1iZWRkZWQgbWFsbG9jX3NlZ21lbnQgcmVjb3JkCisgICAgcmVwcmVzZW50aW5nIHRoZSBpbml0aWFsIHNwYWNlLgorCisgIEFkZHJlc3MgY2hlY2sgc3VwcG9ydAorICAgIFRoZSBsZWFzdF9hZGRyIGZpZWxkIGlzIHRoZSBsZWFzdCBhZGRyZXNzIGV2ZXIgb2J0YWluZWQgZnJvbQorICAgIE1PUkVDT1JFIG9yIE1NQVAuIEF0dGVtcHRlZCBmcmVlcyBhbmQgcmVhbGxvY3Mgb2YgYW55IGFkZHJlc3MgbGVzcworICAgIHRoYW4gdGhpcyBhcmUgdHJhcHBlZCAodW5sZXNzIElOU0VDVVJFIGlzIGRlZmluZWQpLgorCisgIE1hZ2ljIHRhZworICAgIEEgY3Jvc3MtY2hlY2sgZmllbGQgdGhhdCBzaG91bGQgYWx3YXlzIGhvbGQgc2FtZSB2YWx1ZSBhcyBtcGFyYW1zLm1hZ2ljLgorCisgIEZsYWdzCisgICAgQml0cyByZWNvcmRpbmcgd2hldGhlciB0byB1c2UgTU1BUCwgbG9ja3MsIG9yIGNvbnRpZ3VvdXMgTU9SRUNPUkUKKworICBTdGF0aXN0aWNzCisgICAgRWFjaCBzcGFjZSBrZWVwcyB0cmFjayBvZiBjdXJyZW50IGFuZCBtYXhpbXVtIHN5c3RlbSBtZW1vcnkKKyAgICBvYnRhaW5lZCB2aWEgTU9SRUNPUkUgb3IgTU1BUC4KKworICBMb2NraW5nCisgICAgSWYgVVNFX0xPQ0tTIGlzIGRlZmluZWQsIHRoZSAibXV0ZXgiIGxvY2sgaXMgYWNxdWlyZWQgYW5kIHJlbGVhc2VkCisgICAgYXJvdW5kIGV2ZXJ5IHB1YmxpYyBjYWxsIHVzaW5nIHRoaXMgbXNwYWNlLgorKi8KKworLyogQmluIHR5cGVzLCB3aWR0aHMgYW5kIHNpemVzICovCisjZGVmaW5lIE5TTUFMTEJJTlMgICAgICAgICgzMlUpCisjZGVmaW5lIE5UUkVFQklOUyAgICAgICAgICgzMlUpCisjZGVmaW5lIFNNQUxMQklOX1NISUZUICAgICgzVSkKKyNkZWZpbmUgU01BTExCSU5fV0lEVEggICAgKFNJWkVfVF9PTkUgPDwgU01BTExCSU5fU0hJRlQpCisjZGVmaW5lIFRSRUVCSU5fU0hJRlQgICAgICg4VSkKKyNkZWZpbmUgTUlOX0xBUkdFX1NJWkUgICAgKFNJWkVfVF9PTkUgPDwgVFJFRUJJTl9TSElGVCkKKyNkZWZpbmUgTUFYX1NNQUxMX1NJWkUgICAgKE1JTl9MQVJHRV9TSVpFIC0gU0laRV9UX09ORSkKKyNkZWZpbmUgTUFYX1NNQUxMX1JFUVVFU1QgKE1BWF9TTUFMTF9TSVpFIC0gQ0hVTktfQUxJR05fTUFTSyAtIENIVU5LX09WRVJIRUFEKQorCitzdHJ1Y3QgbWFsbG9jX3N0YXRlIHsKKyAgYmlubWFwX3QgICBzbWFsbG1hcDsKKyAgYmlubWFwX3QgICB0cmVlbWFwOworICBzaXplX3QgICAgIGR2c2l6ZTsKKyAgc2l6ZV90ICAgICB0b3BzaXplOworICBjaGFyKiAgICAgIGxlYXN0X2FkZHI7CisgIG1jaHVua3B0ciAgZHY7CisgIG1jaHVua3B0ciAgdG9wOworICBzaXplX3QgICAgIHRyaW1fY2hlY2s7CisgIHNpemVfdCAgICAgbWFnaWM7CisgIG1jaHVua3B0ciAgc21hbGxiaW5zWyhOU01BTExCSU5TKzEpKjJdOworICB0YmlucHRyICAgIHRyZWViaW5zW05UUkVFQklOU107CisgIHNpemVfdCAgICAgZm9vdHByaW50OworI2lmIFVTRV9NQVhfQUxMT1dFRF9GT09UUFJJTlQKKyAgc2l6ZV90ICAgICBtYXhfYWxsb3dlZF9mb290cHJpbnQ7CisjZW5kaWYKKyAgc2l6ZV90ICAgICBtYXhfZm9vdHByaW50OworICBmbGFnX3QgICAgIG1mbGFnczsKKyNpZiBVU0VfTE9DS1MKKyAgTUxPQ0tfVCAgICBtdXRleDsgICAgIC8qIGxvY2F0ZSBsb2NrIGFtb25nIGZpZWxkcyB0aGF0IHJhcmVseSBjaGFuZ2UgKi8KKyNlbmRpZiAvKiBVU0VfTE9DS1MgKi8KKyAgbXNlZ21lbnQgICBzZWc7Cit9OworCit0eXBlZGVmIHN0cnVjdCBtYWxsb2Nfc3RhdGUqICAgIG1zdGF0ZTsKKworLyogLS0tLS0tLS0tLS0tLSBHbG9iYWwgbWFsbG9jX3N0YXRlIGFuZCBtYWxsb2NfcGFyYW1zIC0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgbWFsbG9jX3BhcmFtcyBob2xkcyBnbG9iYWwgcHJvcGVydGllcywgaW5jbHVkaW5nIHRob3NlIHRoYXQgY2FuIGJlCisgIGR5bmFtaWNhbGx5IHNldCB1c2luZyBtYWxsb3B0LiBUaGVyZSBpcyBhIHNpbmdsZSBpbnN0YW5jZSwgbXBhcmFtcywKKyAgaW5pdGlhbGl6ZWQgaW4gaW5pdF9tcGFyYW1zLgorKi8KKworc3RydWN0IG1hbGxvY19wYXJhbXMgeworICBzaXplX3QgbWFnaWM7CisgIHNpemVfdCBwYWdlX3NpemU7CisgIHNpemVfdCBncmFudWxhcml0eTsKKyAgc2l6ZV90IG1tYXBfdGhyZXNob2xkOworICBzaXplX3QgdHJpbV90aHJlc2hvbGQ7CisgIGZsYWdfdCBkZWZhdWx0X21mbGFnczsKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWFsbG9jX3BhcmFtcyBtcGFyYW1zOworCisvKiBUaGUgZ2xvYmFsIG1hbGxvY19zdGF0ZSB1c2VkIGZvciBhbGwgbm9uLSJtc3BhY2UiIGNhbGxzICovCitzdGF0aWMgc3RydWN0IG1hbGxvY19zdGF0ZSBfZ21fCisjaWYgVVNFX01BWF9BTExPV0VEX0ZPT1RQUklOVAorICAgICAgICA9IHsgLm1heF9hbGxvd2VkX2Zvb3RwcmludCA9IE1BWF9TSVpFX1QgfTsKKyNlbHNlCisgICAgICAgIDsKKyNlbmRpZgorCisjZGVmaW5lIGdtICAgICAgICAgICAgICAgICAoJl9nbV8pCisjZGVmaW5lIGlzX2dsb2JhbChNKSAgICAgICAoKE0pID09ICZfZ21fKQorI2RlZmluZSBpc19pbml0aWFsaXplZChNKSAgKChNKS0+dG9wICE9IDApCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHN5c3RlbSBhbGxvYyBzZXR1cCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIE9wZXJhdGlvbnMgb24gbWZsYWdzICovCisKKyNkZWZpbmUgdXNlX2xvY2soTSkgICAgICAgICAgICgoTSktPm1mbGFncyAmICAgVVNFX0xPQ0tfQklUKQorI2RlZmluZSBlbmFibGVfbG9jayhNKSAgICAgICAgKChNKS0+bWZsYWdzIHw9ICBVU0VfTE9DS19CSVQpCisjZGVmaW5lIGRpc2FibGVfbG9jayhNKSAgICAgICAoKE0pLT5tZmxhZ3MgJj0gflVTRV9MT0NLX0JJVCkKKworI2RlZmluZSB1c2VfbW1hcChNKSAgICAgICAgICAgKChNKS0+bWZsYWdzICYgICBVU0VfTU1BUF9CSVQpCisjZGVmaW5lIGVuYWJsZV9tbWFwKE0pICAgICAgICAoKE0pLT5tZmxhZ3MgfD0gIFVTRV9NTUFQX0JJVCkKKyNkZWZpbmUgZGlzYWJsZV9tbWFwKE0pICAgICAgICgoTSktPm1mbGFncyAmPSB+VVNFX01NQVBfQklUKQorCisjZGVmaW5lIHVzZV9ub25jb250aWd1b3VzKE0pICAoKE0pLT5tZmxhZ3MgJiAgIFVTRV9OT05DT05USUdVT1VTX0JJVCkKKyNkZWZpbmUgZGlzYWJsZV9jb250aWd1b3VzKE0pICgoTSktPm1mbGFncyB8PSAgVVNFX05PTkNPTlRJR1VPVVNfQklUKQorCisjZGVmaW5lIHNldF9sb2NrKE0sTClcCisgKChNKS0+bWZsYWdzID0gKEwpP1wKKyAgKChNKS0+bWZsYWdzIHwgVVNFX0xPQ0tfQklUKSA6XAorICAoKE0pLT5tZmxhZ3MgJiB+VVNFX0xPQ0tfQklUKSkKKworLyogcGFnZS1hbGlnbiBhIHNpemUgKi8KKyNkZWZpbmUgcGFnZV9hbGlnbihTKVwKKyAoKChTKSArIChtcGFyYW1zLnBhZ2Vfc2l6ZSkpICYgfihtcGFyYW1zLnBhZ2Vfc2l6ZSAtIFNJWkVfVF9PTkUpKQorCisvKiBncmFudWxhcml0eS1hbGlnbiBhIHNpemUgKi8KKyNkZWZpbmUgZ3JhbnVsYXJpdHlfYWxpZ24oUylcCisgICgoKFMpICsgKG1wYXJhbXMuZ3JhbnVsYXJpdHkpKSAmIH4obXBhcmFtcy5ncmFudWxhcml0eSAtIFNJWkVfVF9PTkUpKQorCisjZGVmaW5lIGlzX3BhZ2VfYWxpZ25lZChTKVwKKyAgICgoKHNpemVfdCkoUykgJiAobXBhcmFtcy5wYWdlX3NpemUgLSBTSVpFX1RfT05FKSkgPT0gMCkKKyNkZWZpbmUgaXNfZ3JhbnVsYXJpdHlfYWxpZ25lZChTKVwKKyAgICgoKHNpemVfdCkoUykgJiAobXBhcmFtcy5ncmFudWxhcml0eSAtIFNJWkVfVF9PTkUpKSA9PSAwKQorCisvKiAgVHJ1ZSBpZiBzZWdtZW50IFMgaG9sZHMgYWRkcmVzcyBBICovCisjZGVmaW5lIHNlZ21lbnRfaG9sZHMoUywgQSlcCisgICgoY2hhciopKEEpID49IFMtPmJhc2UgJiYgKGNoYXIqKShBKSA8IFMtPmJhc2UgKyBTLT5zaXplKQorCisvKiBSZXR1cm4gc2VnbWVudCBob2xkaW5nIGdpdmVuIGFkZHJlc3MgKi8KK3N0YXRpYyBtc2VnbWVudHB0ciBzZWdtZW50X2hvbGRpbmcobXN0YXRlIG0sIGNoYXIqIGFkZHIpIHsKKyAgbXNlZ21lbnRwdHIgc3AgPSAmbS0+c2VnOworICBmb3IgKDs7KSB7CisgICAgaWYgKGFkZHIgPj0gc3AtPmJhc2UgJiYgYWRkciA8IHNwLT5iYXNlICsgc3AtPnNpemUpCisgICAgICByZXR1cm4gc3A7CisgICAgaWYgKChzcCA9IHNwLT5uZXh0KSA9PSAwKQorICAgICAgcmV0dXJuIDA7CisgIH0KK30KKworLyogUmV0dXJuIHRydWUgaWYgc2VnbWVudCBjb250YWlucyBhIHNlZ21lbnQgbGluayAqLworc3RhdGljIGludCBoYXNfc2VnbWVudF9saW5rKG1zdGF0ZSBtLCBtc2VnbWVudHB0ciBzcykgeworICBtc2VnbWVudHB0ciBzcCA9ICZtLT5zZWc7CisgIGZvciAoOzspIHsKKyAgICBpZiAoKGNoYXIqKXNwID49IHNzLT5iYXNlICYmIChjaGFyKilzcCA8IHNzLT5iYXNlICsgc3MtPnNpemUpCisgICAgICByZXR1cm4gMTsKKyAgICBpZiAoKHNwID0gc3AtPm5leHQpID09IDApCisgICAgICByZXR1cm4gMDsKKyAgfQorfQorCisjaWZuZGVmIE1PUkVDT1JFX0NBTk5PVF9UUklNCisjZGVmaW5lIHNob3VsZF90cmltKE0scykgICgocykgPiAoTSktPnRyaW1fY2hlY2spCisjZWxzZSAgLyogTU9SRUNPUkVfQ0FOTk9UX1RSSU0gKi8KKyNkZWZpbmUgc2hvdWxkX3RyaW0oTSxzKSAgKDApCisjZW5kaWYgLyogTU9SRUNPUkVfQ0FOTk9UX1RSSU0gKi8KKworLyoKKyAgVE9QX0ZPT1RfU0laRSBpcyBwYWRkaW5nIGF0IHRoZSBlbmQgb2YgYSBzZWdtZW50LCBpbmNsdWRpbmcgc3BhY2UKKyAgdGhhdCBtYXkgYmUgbmVlZGVkIHRvIHBsYWNlIHNlZ21lbnQgcmVjb3JkcyBhbmQgZmVuY2Vwb3N0cyB3aGVuIG5ldworICBub25jb250aWd1b3VzIHNlZ21lbnRzIGFyZSBhZGRlZC4KKyovCisjZGVmaW5lIFRPUF9GT09UX1NJWkVcCisgIChhbGlnbl9vZmZzZXQoY2h1bmsybWVtKDApKStwYWRfcmVxdWVzdChzaXplb2Yoc3RydWN0IG1hbGxvY19zZWdtZW50KSkrTUlOX0NIVU5LX1NJWkUpCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSG9va3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgUFJFQUNUSU9OIHNob3VsZCBiZSBkZWZpbmVkIHRvIHJldHVybiAwIG9uIHN1Y2Nlc3MsIGFuZCBub256ZXJvIG9uCisgIGZhaWx1cmUuIElmIHlvdSBhcmUgbm90IHVzaW5nIGxvY2tpbmcsIHlvdSBjYW4gcmVkZWZpbmUgdGhlc2UgdG8gZG8KKyAgYW55dGhpbmcgeW91IGxpa2UuCisqLworCisjaWYgVVNFX0xPQ0tTCisKKy8qIEVuc3VyZSBsb2NrcyBhcmUgaW5pdGlhbGl6ZWQgKi8KKyNkZWZpbmUgR0xPQkFMTFlfSU5JVElBTElaRSgpIChtcGFyYW1zLnBhZ2Vfc2l6ZSA9PSAwICYmIGluaXRfbXBhcmFtcygpKQorCisjZGVmaW5lIFBSRUFDVElPTihNKSAgKChHTE9CQUxMWV9JTklUSUFMSVpFKCkgfHwgdXNlX2xvY2soTSkpPyBBQ1FVSVJFX0xPQ0soJihNKS0+bXV0ZXgpIDogMCkKKyNkZWZpbmUgUE9TVEFDVElPTihNKSB7IGlmICh1c2VfbG9jayhNKSkgUkVMRUFTRV9MT0NLKCYoTSktPm11dGV4KTsgfQorI2Vsc2UgLyogVVNFX0xPQ0tTICovCisKKyNpZm5kZWYgUFJFQUNUSU9OCisjZGVmaW5lIFBSRUFDVElPTihNKSAoMCkKKyNlbmRpZiAgLyogUFJFQUNUSU9OICovCisKKyNpZm5kZWYgUE9TVEFDVElPTgorI2RlZmluZSBQT1NUQUNUSU9OKE0pCisjZW5kaWYgIC8qIFBPU1RBQ1RJT04gKi8KKworI2VuZGlmIC8qIFVTRV9MT0NLUyAqLworCisvKgorICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTiBpcyB0cmlnZ2VyZWQgdXBvbiBkZXRlY3RlZCBiYWQgYWRkcmVzc2VzLgorICBVU0FHRV9FUlJPUl9BQ1RJT04gaXMgdHJpZ2dlcmVkIG9uIGRldGVjdGVkIGJhZCBmcmVlcyBhbmQKKyAgcmVhbGxvY3MuIFRoZSBhcmd1bWVudCBwIGlzIGFuIGFkZHJlc3MgdGhhdCBtaWdodCBoYXZlIHRyaWdnZXJlZCB0aGUKKyAgZmF1bHQuIEl0IGlzIGlnbm9yZWQgYnkgdGhlIHR3byBwcmVkZWZpbmVkIGFjdGlvbnMsIGJ1dCBtaWdodCBiZQorICB1c2VmdWwgaW4gY3VzdG9tIGFjdGlvbnMgdGhhdCB0cnkgdG8gaGVscCBkaWFnbm9zZSBlcnJvcnMuCisqLworCisjaWYgUFJPQ0VFRF9PTl9FUlJPUgorCisvKiBBIGNvdW50IG9mIHRoZSBudW1iZXIgb2YgY29ycnVwdGlvbiBlcnJvcnMgY2F1c2luZyByZXNldHMgKi8KK2ludCBtYWxsb2NfY29ycnVwdGlvbl9lcnJvcl9jb3VudDsKKworLyogZGVmYXVsdCBjb3JydXB0aW9uIGFjdGlvbiAqLworc3RhdGljIHZvaWQgcmVzZXRfb25fZXJyb3IobXN0YXRlIG0pOworCisjZGVmaW5lIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKG0pICByZXNldF9vbl9lcnJvcihtKQorI2RlZmluZSBVU0FHRV9FUlJPUl9BQ1RJT04obSwgcCkKKworI2Vsc2UgLyogUFJPQ0VFRF9PTl9FUlJPUiAqLworCisjaWZuZGVmIENPUlJVUFRJT05fRVJST1JfQUNUSU9OCisjZGVmaW5lIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKG0pIEFCT1JUCisjZW5kaWYgLyogQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04gKi8KKworI2lmbmRlZiBVU0FHRV9FUlJPUl9BQ1RJT04KKyNkZWZpbmUgVVNBR0VfRVJST1JfQUNUSU9OKG0scCkgQUJPUlQKKyNlbmRpZiAvKiBVU0FHRV9FUlJPUl9BQ1RJT04gKi8KKworI2VuZGlmIC8qIFBST0NFRURfT05fRVJST1IgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGVidWdnaW5nIHNldHVwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmICEgREVCVUcKKworI2RlZmluZSBjaGVja19mcmVlX2NodW5rKE0sUCkKKyNkZWZpbmUgY2hlY2tfaW51c2VfY2h1bmsoTSxQKQorI2RlZmluZSBjaGVja19tYWxsb2NlZF9jaHVuayhNLFAsTikKKyNkZWZpbmUgY2hlY2tfbW1hcHBlZF9jaHVuayhNLFApCisjZGVmaW5lIGNoZWNrX21hbGxvY19zdGF0ZShNKQorI2RlZmluZSBjaGVja190b3BfY2h1bmsoTSxQKQorCisjZWxzZSAvKiBERUJVRyAqLworI2RlZmluZSBjaGVja19mcmVlX2NodW5rKE0sUCkgICAgICAgZG9fY2hlY2tfZnJlZV9jaHVuayhNLFApCisjZGVmaW5lIGNoZWNrX2ludXNlX2NodW5rKE0sUCkgICAgICBkb19jaGVja19pbnVzZV9jaHVuayhNLFApCisjZGVmaW5lIGNoZWNrX3RvcF9jaHVuayhNLFApICAgICAgICBkb19jaGVja190b3BfY2h1bmsoTSxQKQorI2RlZmluZSBjaGVja19tYWxsb2NlZF9jaHVuayhNLFAsTikgZG9fY2hlY2tfbWFsbG9jZWRfY2h1bmsoTSxQLE4pCisjZGVmaW5lIGNoZWNrX21tYXBwZWRfY2h1bmsoTSxQKSAgICBkb19jaGVja19tbWFwcGVkX2NodW5rKE0sUCkKKyNkZWZpbmUgY2hlY2tfbWFsbG9jX3N0YXRlKE0pICAgICAgIGRvX2NoZWNrX21hbGxvY19zdGF0ZShNKQorCitzdGF0aWMgdm9pZCAgIGRvX2NoZWNrX2FueV9jaHVuayhtc3RhdGUgbSwgbWNodW5rcHRyIHApOworc3RhdGljIHZvaWQgICBkb19jaGVja190b3BfY2h1bmsobXN0YXRlIG0sIG1jaHVua3B0ciBwKTsKK3N0YXRpYyB2b2lkICAgZG9fY2hlY2tfbW1hcHBlZF9jaHVuayhtc3RhdGUgbSwgbWNodW5rcHRyIHApOworc3RhdGljIHZvaWQgICBkb19jaGVja19pbnVzZV9jaHVuayhtc3RhdGUgbSwgbWNodW5rcHRyIHApOworc3RhdGljIHZvaWQgICBkb19jaGVja19mcmVlX2NodW5rKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCk7CitzdGF0aWMgdm9pZCAgIGRvX2NoZWNrX21hbGxvY2VkX2NodW5rKG1zdGF0ZSBtLCB2b2lkKiBtZW0sIHNpemVfdCBzKTsKK3N0YXRpYyB2b2lkICAgZG9fY2hlY2tfdHJlZShtc3RhdGUgbSwgdGNodW5rcHRyIHQpOworc3RhdGljIHZvaWQgICBkb19jaGVja190cmVlYmluKG1zdGF0ZSBtLCBiaW5kZXhfdCBpKTsKK3N0YXRpYyB2b2lkICAgZG9fY2hlY2tfc21hbGxiaW4obXN0YXRlIG0sIGJpbmRleF90IGkpOworc3RhdGljIHZvaWQgICBkb19jaGVja19tYWxsb2Nfc3RhdGUobXN0YXRlIG0pOworc3RhdGljIGludCAgICBiaW5fZmluZChtc3RhdGUgbSwgbWNodW5rcHRyIHgpOworc3RhdGljIHNpemVfdCB0cmF2ZXJzZV9hbmRfY2hlY2sobXN0YXRlIG0pOworI2VuZGlmIC8qIERFQlVHICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSW5kZXhpbmcgQmlucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgaXNfc21hbGwocykgICAgICAgICAoKChzKSA+PiBTTUFMTEJJTl9TSElGVCkgPCBOU01BTExCSU5TKQorI2RlZmluZSBzbWFsbF9pbmRleChzKSAgICAgICgocykgID4+IFNNQUxMQklOX1NISUZUKQorI2RlZmluZSBzbWFsbF9pbmRleDJzaXplKGkpICgoaSkgIDw8IFNNQUxMQklOX1NISUZUKQorI2RlZmluZSBNSU5fU01BTExfSU5ERVggICAgIChzbWFsbF9pbmRleChNSU5fQ0hVTktfU0laRSkpCisKKy8qIGFkZHJlc3NpbmcgYnkgaW5kZXguIFNlZSBhYm92ZSBhYm91dCBzbWFsbGJpbiByZXBvc2l0aW9uaW5nICovCisjZGVmaW5lIHNtYWxsYmluX2F0KE0sIGkpICAgKChzYmlucHRyKSgoY2hhciopJigoTSktPnNtYWxsYmluc1soaSk8PDFdKSkpCisjZGVmaW5lIHRyZWViaW5fYXQoTSxpKSAgICAgKCYoKE0pLT50cmVlYmluc1tpXSkpCisKKy8qIGFzc2lnbiB0cmVlIGluZGV4IGZvciBzaXplIFMgdG8gdmFyaWFibGUgSSAqLworI2lmIGRlZmluZWQoX19HTlVDX18pICYmIGRlZmluZWQoaTM4NikKKyNkZWZpbmUgY29tcHV0ZV90cmVlX2luZGV4KFMsIEkpXAore1wKKyAgc2l6ZV90IFggPSBTID4+IFRSRUVCSU5fU0hJRlQ7XAorICBpZiAoWCA9PSAwKVwKKyAgICBJID0gMDtcCisgIGVsc2UgaWYgKFggPiAweEZGRkYpXAorICAgIEkgPSBOVFJFRUJJTlMtMTtcCisgIGVsc2Uge1wKKyAgICB1bnNpZ25lZCBpbnQgSztcCisgICAgX19hc21fXygiYnNybCAlMSwlMFxuXHQiIDogIj1yIiAoSykgOiAicm0iICAoWCkpO1wKKyAgICBJID0gIChiaW5kZXhfdCkoKEsgPDwgMSkgKyAoKFMgPj4gKEsgKyAoVFJFRUJJTl9TSElGVC0xKSkgJiAxKSkpO1wKKyAgfVwKK30KKyNlbHNlIC8qIEdOVUMgKi8KKyNkZWZpbmUgY29tcHV0ZV90cmVlX2luZGV4KFMsIEkpXAore1wKKyAgc2l6ZV90IFggPSBTID4+IFRSRUVCSU5fU0hJRlQ7XAorICBpZiAoWCA9PSAwKVwKKyAgICBJID0gMDtcCisgIGVsc2UgaWYgKFggPiAweEZGRkYpXAorICAgIEkgPSBOVFJFRUJJTlMtMTtcCisgIGVsc2Uge1wKKyAgICB1bnNpZ25lZCBpbnQgWSA9ICh1bnNpZ25lZCBpbnQpWDtcCisgICAgdW5zaWduZWQgaW50IE4gPSAoKFkgLSAweDEwMCkgPj4gMTYpICYgODtcCisgICAgdW5zaWduZWQgaW50IEsgPSAoKChZIDw8PSBOKSAtIDB4MTAwMCkgPj4gMTYpICYgNDtcCisgICAgTiArPSBLO1wKKyAgICBOICs9IEsgPSAoKChZIDw8PSBLKSAtIDB4NDAwMCkgPj4gMTYpICYgMjtcCisgICAgSyA9IDE0IC0gTiArICgoWSA8PD0gSykgPj4gMTUpO1wKKyAgICBJID0gKEsgPDwgMSkgKyAoKFMgPj4gKEsgKyAoVFJFRUJJTl9TSElGVC0xKSkgJiAxKSk7XAorICB9XAorfQorI2VuZGlmIC8qIEdOVUMgKi8KKworLyogQml0IHJlcHJlc2VudGluZyBtYXhpbXVtIHJlc29sdmVkIHNpemUgaW4gYSB0cmVlYmluIGF0IGkgKi8KKyNkZWZpbmUgYml0X2Zvcl90cmVlX2luZGV4KGkpIFwKKyAgIChpID09IE5UUkVFQklOUy0xKT8gKFNJWkVfVF9CSVRTSVpFLTEpIDogKCgoaSkgPj4gMSkgKyBUUkVFQklOX1NISUZUIC0gMikKKworLyogU2hpZnQgcGxhY2luZyBtYXhpbXVtIHJlc29sdmVkIGJpdCBpbiBhIHRyZWViaW4gYXQgaSBhcyBzaWduIGJpdCAqLworI2RlZmluZSBsZWZ0c2hpZnRfZm9yX3RyZWVfaW5kZXgoaSkgXAorICAgKChpID09IE5UUkVFQklOUy0xKT8gMCA6IFwKKyAgICAoKFNJWkVfVF9CSVRTSVpFLVNJWkVfVF9PTkUpIC0gKCgoaSkgPj4gMSkgKyBUUkVFQklOX1NISUZUIC0gMikpKQorCisvKiBUaGUgc2l6ZSBvZiB0aGUgc21hbGxlc3QgY2h1bmsgaGVsZCBpbiBiaW4gd2l0aCBpbmRleCBpICovCisjZGVmaW5lIG1pbnNpemVfZm9yX3RyZWVfaW5kZXgoaSkgXAorICAgKChTSVpFX1RfT05FIDw8ICgoKGkpID4+IDEpICsgVFJFRUJJTl9TSElGVCkpIHwgIFwKKyAgICgoKHNpemVfdCkoKGkpICYgU0laRV9UX09ORSkpIDw8ICgoKGkpID4+IDEpICsgVFJFRUJJTl9TSElGVCAtIDEpKSkKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT3BlcmF0aW9ucyBvbiBiaW4gbWFwcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBiaXQgY29ycmVzcG9uZGluZyB0byBnaXZlbiBpbmRleCAqLworI2RlZmluZSBpZHgyYml0KGkpICAgICAgICAgICAgICAoKGJpbm1hcF90KSgxKSA8PCAoaSkpCisKKy8qIE1hcmsvQ2xlYXIgYml0cyB3aXRoIGdpdmVuIGluZGV4ICovCisjZGVmaW5lIG1hcmtfc21hbGxtYXAoTSxpKSAgICAgICgoTSktPnNtYWxsbWFwIHw9ICBpZHgyYml0KGkpKQorI2RlZmluZSBjbGVhcl9zbWFsbG1hcChNLGkpICAgICAoKE0pLT5zbWFsbG1hcCAmPSB+aWR4MmJpdChpKSkKKyNkZWZpbmUgc21hbGxtYXBfaXNfbWFya2VkKE0saSkgKChNKS0+c21hbGxtYXAgJiAgIGlkeDJiaXQoaSkpCisKKyNkZWZpbmUgbWFya190cmVlbWFwKE0saSkgICAgICAgKChNKS0+dHJlZW1hcCAgfD0gIGlkeDJiaXQoaSkpCisjZGVmaW5lIGNsZWFyX3RyZWVtYXAoTSxpKSAgICAgICgoTSktPnRyZWVtYXAgICY9IH5pZHgyYml0KGkpKQorI2RlZmluZSB0cmVlbWFwX2lzX21hcmtlZChNLGkpICAoKE0pLT50cmVlbWFwICAmICAgaWR4MmJpdChpKSkKKworLyogaW5kZXggY29ycmVzcG9uZGluZyB0byBnaXZlbiBiaXQgKi8KKworI2lmIGRlZmluZWQoX19HTlVDX18pICYmIGRlZmluZWQoaTM4NikKKyNkZWZpbmUgY29tcHV0ZV9iaXQyaWR4KFgsIEkpXAore1wKKyAgdW5zaWduZWQgaW50IEo7XAorICBfX2FzbV9fKCJic2ZsICUxLCUwXG5cdCIgOiAiPXIiIChKKSA6ICJybSIgKFgpKTtcCisgIEkgPSAoYmluZGV4X3QpSjtcCit9CisKKyNlbHNlIC8qIEdOVUMgKi8KKyNpZiAgVVNFX0JVSUxUSU5fRkZTCisjZGVmaW5lIGNvbXB1dGVfYml0MmlkeChYLCBJKSBJID0gZmZzKFgpLTEKKworI2Vsc2UgLyogVVNFX0JVSUxUSU5fRkZTICovCisjZGVmaW5lIGNvbXB1dGVfYml0MmlkeChYLCBJKVwKK3tcCisgIHVuc2lnbmVkIGludCBZID0gWCAtIDE7XAorICB1bnNpZ25lZCBpbnQgSyA9IFkgPj4gKDE2LTQpICYgMTY7XAorICB1bnNpZ25lZCBpbnQgTiA9IEs7ICAgICAgICBZID4+PSBLO1wKKyAgTiArPSBLID0gWSA+PiAoOC0zKSAmICA4OyAgWSA+Pj0gSztcCisgIE4gKz0gSyA9IFkgPj4gKDQtMikgJiAgNDsgIFkgPj49IEs7XAorICBOICs9IEsgPSBZID4+ICgyLTEpICYgIDI7ICBZID4+PSBLO1wKKyAgTiArPSBLID0gWSA+PiAoMS0wKSAmICAxOyAgWSA+Pj0gSztcCisgIEkgPSAoYmluZGV4X3QpKE4gKyBZKTtcCit9CisjZW5kaWYgLyogVVNFX0JVSUxUSU5fRkZTICovCisjZW5kaWYgLyogR05VQyAqLworCisvKiBpc29sYXRlIHRoZSBsZWFzdCBzZXQgYml0IG9mIGEgYml0bWFwICovCisjZGVmaW5lIGxlYXN0X2JpdCh4KSAgICAgICAgICgoeCkgJiAtKHgpKQorCisvKiBtYXNrIHdpdGggYWxsIGJpdHMgdG8gbGVmdCBvZiBsZWFzdCBiaXQgb2YgeCBvbiAqLworI2RlZmluZSBsZWZ0X2JpdHMoeCkgICAgICAgICAoKHg8PDEpIHwgLSh4PDwxKSkKKworLyogbWFzayB3aXRoIGFsbCBiaXRzIHRvIGxlZnQgb2Ygb3IgZXF1YWwgdG8gbGVhc3QgYml0IG9mIHggb24gKi8KKyNkZWZpbmUgc2FtZV9vcl9sZWZ0X2JpdHMoeCkgKCh4KSB8IC0oeCkpCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUnVudGltZSBDaGVjayBTdXBwb3J0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgRm9yIHNlY3VyaXR5LCB0aGUgbWFpbiBpbnZhcmlhbnQgaXMgdGhhdCBtYWxsb2MvZnJlZS9ldGMgbmV2ZXIKKyAgd3JpdGVzIHRvIGEgc3RhdGljIGFkZHJlc3Mgb3RoZXIgdGhhbiBtYWxsb2Nfc3RhdGUsIHVubGVzcyBzdGF0aWMKKyAgbWFsbG9jX3N0YXRlIGl0c2VsZiBoYXMgYmVlbiBjb3JydXB0ZWQsIHdoaWNoIGNhbm5vdCBvY2N1ciB2aWEKKyAgbWFsbG9jIChiZWNhdXNlIG9mIHRoZXNlIGNoZWNrcykuIEluIGVzc2VuY2UgdGhpcyBtZWFucyB0aGF0IHdlCisgIGJlbGlldmUgYWxsIHBvaW50ZXJzLCBzaXplcywgbWFwcyBldGMgaGVsZCBpbiBtYWxsb2Nfc3RhdGUsIGJ1dAorICBjaGVjayBhbGwgb2YgdGhvc2UgbGlua2VkIG9yIG9mZnNldHRlZCBmcm9tIG90aGVyIGVtYmVkZGVkIGRhdGEKKyAgc3RydWN0dXJlcy4gIFRoZXNlIGNoZWNrcyBhcmUgaW50ZXJzcGVyc2VkIHdpdGggbWFpbiBjb2RlIGluIGEgd2F5CisgIHRoYXQgdGVuZHMgdG8gbWluaW1pemUgdGhlaXIgcnVuLXRpbWUgY29zdC4KKworICBXaGVuIEZPT1RFUlMgaXMgZGVmaW5lZCwgaW4gYWRkaXRpb24gdG8gcmFuZ2UgY2hlY2tpbmcsIHdlIGFsc28KKyAgdmVyaWZ5IGZvb3RlciBmaWVsZHMgb2YgaW51c2UgY2h1bmtzLCB3aGljaCBjYW4gYmUgdXNlZCBndWFyYW50ZWUKKyAgdGhhdCB0aGUgbXN0YXRlIGNvbnRyb2xsaW5nIG1hbGxvYy9mcmVlIGlzIGludGFjdC4gIFRoaXMgaXMgYQorICBzdHJlYW1saW5lZCB2ZXJzaW9uIG9mIHRoZSBhcHByb2FjaCBkZXNjcmliZWQgYnkgV2lsbGlhbSBSb2JlcnRzb24KKyAgZXQgYWwgaW4gIlJ1bi10aW1lIERldGVjdGlvbiBvZiBIZWFwLWJhc2VkIE92ZXJmbG93cyIgTElTQScwMworICBodHRwOi8vd3d3LnVzZW5peC5vcmcvZXZlbnRzL2xpc2EwMy90ZWNoL3JvYmVydHNvbi5odG1sIFRoZSBmb290ZXIKKyAgb2YgYW4gaW51c2UgY2h1bmsgaG9sZHMgdGhlIHhvciBvZiBpdHMgbXN0YXRlIGFuZCBhIHJhbmRvbSBzZWVkLAorICB0aGF0IGlzIGNoZWNrZWQgdXBvbiBjYWxscyB0byBmcmVlKCkgYW5kIHJlYWxsb2MoKS4gIFRoaXMgaXMKKyAgKHByb2JhYmxpc3RpY2FsbHkpIHVuZ3Vlc3NhYmxlIGZyb20gb3V0c2lkZSB0aGUgcHJvZ3JhbSwgYnV0IGNhbiBiZQorICBjb21wdXRlZCBieSBhbnkgY29kZSBzdWNjZXNzZnVsbHkgbWFsbG9jJ2luZyBhbnkgY2h1bmssIHNvIGRvZXMgbm90CisgIGl0c2VsZiBwcm92aWRlIHByb3RlY3Rpb24gYWdhaW5zdCBjb2RlIHRoYXQgaGFzIGFscmVhZHkgYnJva2VuCisgIHNlY3VyaXR5IHRocm91Z2ggc29tZSBvdGhlciBtZWFucy4gIFVubGlrZSBSb2JlcnRzb24gZXQgYWwsIHdlCisgIGFsd2F5cyBkeW5hbWljYWxseSBjaGVjayBhZGRyZXNzZXMgb2YgYWxsIG9mZnNldCBjaHVua3MgKHByZXZpb3VzLAorICBuZXh0LCBldGMpLiBUaGlzIHR1cm5zIG91dCB0byBiZSBjaGVhcGVyIHRoYW4gcmVseWluZyBvbiBoYXNoZXMuCisqLworCisjaWYgIUlOU0VDVVJFCisvKiBDaGVjayBpZiBhZGRyZXNzIGEgaXMgYXQgbGVhc3QgYXMgaGlnaCBhcyBhbnkgZnJvbSBNT1JFQ09SRSBvciBNTUFQICovCisjZGVmaW5lIG9rX2FkZHJlc3MoTSwgYSkgKChjaGFyKikoYSkgPj0gKE0pLT5sZWFzdF9hZGRyKQorLyogQ2hlY2sgaWYgYWRkcmVzcyBvZiBuZXh0IGNodW5rIG4gaXMgaGlnaGVyIHRoYW4gYmFzZSBjaHVuayBwICovCisjZGVmaW5lIG9rX25leHQocCwgbikgICAgKChjaGFyKikocCkgPCAoY2hhciopKG4pKQorLyogQ2hlY2sgaWYgcCBoYXMgaXRzIGNpbnVzZSBiaXQgb24gKi8KKyNkZWZpbmUgb2tfY2ludXNlKHApICAgICBjaW51c2UocCkKKy8qIENoZWNrIGlmIHAgaGFzIGl0cyBwaW51c2UgYml0IG9uICovCisjZGVmaW5lIG9rX3BpbnVzZShwKSAgICAgcGludXNlKHApCisKKyNlbHNlIC8qICFJTlNFQ1VSRSAqLworI2RlZmluZSBva19hZGRyZXNzKE0sIGEpICgxKQorI2RlZmluZSBva19uZXh0KGIsIG4pICAgICgxKQorI2RlZmluZSBva19jaW51c2UocCkgICAgICgxKQorI2RlZmluZSBva19waW51c2UocCkgICAgICgxKQorI2VuZGlmIC8qICFJTlNFQ1VSRSAqLworCisjaWYgKEZPT1RFUlMgJiYgIUlOU0VDVVJFKQorLyogQ2hlY2sgaWYgKGFsbGVnZWQpIG1zdGF0ZSBtIGhhcyBleHBlY3RlZCBtYWdpYyBmaWVsZCAqLworI2RlZmluZSBva19tYWdpYyhNKSAgICAgICgoTSktPm1hZ2ljID09IG1wYXJhbXMubWFnaWMpCisjZWxzZSAgLyogKEZPT1RFUlMgJiYgIUlOU0VDVVJFKSAqLworI2RlZmluZSBva19tYWdpYyhNKSAgICAgICgxKQorI2VuZGlmIC8qIChGT09URVJTICYmICFJTlNFQ1VSRSkgKi8KKworCisvKiBJbiBnY2MsIHVzZSBfX2J1aWx0aW5fZXhwZWN0IHRvIG1pbmltaXplIGltcGFjdCBvZiBjaGVja3MgKi8KKyNpZiAhSU5TRUNVUkUKKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBfX0dOVUNfXyA+PSAzCisjZGVmaW5lIFJUQ0hFQ0soZSkgIF9fYnVpbHRpbl9leHBlY3QoZSwgMSkKKyNlbHNlIC8qIEdOVUMgKi8KKyNkZWZpbmUgUlRDSEVDSyhlKSAgKGUpCisjZW5kaWYgLyogR05VQyAqLworI2Vsc2UgLyogIUlOU0VDVVJFICovCisjZGVmaW5lIFJUQ0hFQ0soZSkgICgxKQorI2VuZGlmIC8qICFJTlNFQ1VSRSAqLworCisvKiBtYWNyb3MgdG8gc2V0IHVwIGludXNlIGNodW5rcyB3aXRoIG9yIHdpdGhvdXQgZm9vdGVycyAqLworCisjaWYgIUZPT1RFUlMKKworI2RlZmluZSBtYXJrX2ludXNlX2Zvb3QoTSxwLHMpCisKKy8qIFNldCBjaW51c2UgYml0IGFuZCBwaW51c2UgYml0IG9mIG5leHQgY2h1bmsgKi8KKyNkZWZpbmUgc2V0X2ludXNlKE0scCxzKVwKKyAgKChwKS0+aGVhZCA9ICgoKHApLT5oZWFkICYgUElOVVNFX0JJVCl8c3xDSU5VU0VfQklUKSxcCisgICgobWNodW5rcHRyKSgoKGNoYXIqKShwKSkgKyAocykpKS0+aGVhZCB8PSBQSU5VU0VfQklUKQorCisvKiBTZXQgY2ludXNlIGFuZCBwaW51c2Ugb2YgdGhpcyBjaHVuayBhbmQgcGludXNlIG9mIG5leHQgY2h1bmsgKi8KKyNkZWZpbmUgc2V0X2ludXNlX2FuZF9waW51c2UoTSxwLHMpXAorICAoKHApLT5oZWFkID0gKHN8UElOVVNFX0JJVHxDSU5VU0VfQklUKSxcCisgICgobWNodW5rcHRyKSgoKGNoYXIqKShwKSkgKyAocykpKS0+aGVhZCB8PSBQSU5VU0VfQklUKQorCisvKiBTZXQgc2l6ZSwgY2ludXNlIGFuZCBwaW51c2UgYml0IG9mIHRoaXMgY2h1bmsgKi8KKyNkZWZpbmUgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhNLCBwLCBzKVwKKyAgKChwKS0+aGVhZCA9IChzfFBJTlVTRV9CSVR8Q0lOVVNFX0JJVCkpCisKKyNlbHNlIC8qIEZPT1RFUlMgKi8KKworLyogU2V0IGZvb3Qgb2YgaW51c2UgY2h1bmsgdG8gYmUgeG9yIG9mIG1zdGF0ZSBhbmQgc2VlZCAqLworI2RlZmluZSBtYXJrX2ludXNlX2Zvb3QoTSxwLHMpXAorICAoKChtY2h1bmtwdHIpKChjaGFyKikocCkgKyAocykpKS0+cHJldl9mb290ID0gKChzaXplX3QpKE0pIF4gbXBhcmFtcy5tYWdpYykpCisKKyNkZWZpbmUgZ2V0X21zdGF0ZV9mb3IocClcCisgICgobXN0YXRlKSgoKG1jaHVua3B0cikoKGNoYXIqKShwKSArXAorICAgIChjaHVua3NpemUocCkpKSktPnByZXZfZm9vdCBeIG1wYXJhbXMubWFnaWMpKQorCisjZGVmaW5lIHNldF9pbnVzZShNLHAscylcCisgICgocCktPmhlYWQgPSAoKChwKS0+aGVhZCAmIFBJTlVTRV9CSVQpfHN8Q0lOVVNFX0JJVCksXAorICAoKChtY2h1bmtwdHIpKCgoY2hhciopKHApKSArIChzKSkpLT5oZWFkIHw9IFBJTlVTRV9CSVQpLCBcCisgIG1hcmtfaW51c2VfZm9vdChNLHAscykpCisKKyNkZWZpbmUgc2V0X2ludXNlX2FuZF9waW51c2UoTSxwLHMpXAorICAoKHApLT5oZWFkID0gKHN8UElOVVNFX0JJVHxDSU5VU0VfQklUKSxcCisgICgoKG1jaHVua3B0cikoKChjaGFyKikocCkpICsgKHMpKSktPmhlYWQgfD0gUElOVVNFX0JJVCksXAorIG1hcmtfaW51c2VfZm9vdChNLHAscykpCisKKyNkZWZpbmUgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhNLCBwLCBzKVwKKyAgKChwKS0+aGVhZCA9IChzfFBJTlVTRV9CSVR8Q0lOVVNFX0JJVCksXAorICBtYXJrX2ludXNlX2Zvb3QoTSwgcCwgcykpCisKKyNlbmRpZiAvKiAhRk9PVEVSUyAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHNldHRpbmcgbXBhcmFtcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBJbml0aWFsaXplIG1wYXJhbXMgKi8KK3N0YXRpYyBpbnQgaW5pdF9tcGFyYW1zKHZvaWQpIHsKKyAgaWYgKG1wYXJhbXMucGFnZV9zaXplID09IDApIHsKKyAgICBzaXplX3QgczsKKworICAgIG1wYXJhbXMubW1hcF90aHJlc2hvbGQgPSBERUZBVUxUX01NQVBfVEhSRVNIT0xEOworICAgIG1wYXJhbXMudHJpbV90aHJlc2hvbGQgPSBERUZBVUxUX1RSSU1fVEhSRVNIT0xEOworI2lmIE1PUkVDT1JFX0NPTlRJR1VPVVMKKyAgICBtcGFyYW1zLmRlZmF1bHRfbWZsYWdzID0gVVNFX0xPQ0tfQklUfFVTRV9NTUFQX0JJVDsKKyNlbHNlICAvKiBNT1JFQ09SRV9DT05USUdVT1VTICovCisgICAgbXBhcmFtcy5kZWZhdWx0X21mbGFncyA9IFVTRV9MT0NLX0JJVHxVU0VfTU1BUF9CSVR8VVNFX05PTkNPTlRJR1VPVVNfQklUOworI2VuZGlmIC8qIE1PUkVDT1JFX0NPTlRJR1VPVVMgKi8KKworI2lmIChGT09URVJTICYmICFJTlNFQ1VSRSkKKyAgICB7CisjaWYgVVNFX0RFVl9SQU5ET00KKyAgICAgIGludCBmZDsKKyAgICAgIHVuc2lnbmVkIGNoYXIgYnVmW3NpemVvZihzaXplX3QpXTsKKyAgICAgIC8qIFRyeSB0byB1c2UgL2Rldi91cmFuZG9tLCBlbHNlIGZhbGwgYmFjayBvbiB1c2luZyB0aW1lICovCisgICAgICBpZiAoKGZkID0gb3BlbigiL2Rldi91cmFuZG9tIiwgT19SRE9OTFkpKSA+PSAwICYmCisgICAgICAgICAgcmVhZChmZCwgYnVmLCBzaXplb2YoYnVmKSkgPT0gc2l6ZW9mKGJ1ZikpIHsKKyAgICAgICAgcyA9ICooKHNpemVfdCAqKSBidWYpOworICAgICAgICBjbG9zZShmZCk7CisgICAgICB9CisgICAgICBlbHNlCisjZW5kaWYgLyogVVNFX0RFVl9SQU5ET00gKi8KKyAgICAgICAgcyA9IChzaXplX3QpKHRpbWUoMCkgXiAoc2l6ZV90KTB4NTU1NTU1NTVVKTsKKworICAgICAgcyB8PSAoc2l6ZV90KThVOyAgICAvKiBlbnN1cmUgbm9uemVybyAqLworICAgICAgcyAmPSB+KHNpemVfdCk3VTsgICAvKiBpbXByb3ZlIGNoYW5jZXMgb2YgZmF1bHQgZm9yIGJhZCB2YWx1ZXMgKi8KKworICAgIH0KKyNlbHNlIC8qIChGT09URVJTICYmICFJTlNFQ1VSRSkgKi8KKyAgICBzID0gKHNpemVfdCkweDU4NTg1ODU4VTsKKyNlbmRpZiAvKiAoRk9PVEVSUyAmJiAhSU5TRUNVUkUpICovCisgICAgQUNRVUlSRV9NQUdJQ19JTklUX0xPQ0soKTsKKyAgICBpZiAobXBhcmFtcy5tYWdpYyA9PSAwKSB7CisgICAgICBtcGFyYW1zLm1hZ2ljID0gczsKKyAgICAgIC8qIFNldCB1cCBsb2NrIGZvciBtYWluIG1hbGxvYyBhcmVhICovCisgICAgICBJTklUSUFMX0xPQ0soJmdtLT5tdXRleCk7CisgICAgICBnbS0+bWZsYWdzID0gbXBhcmFtcy5kZWZhdWx0X21mbGFnczsKKyAgICB9CisgICAgUkVMRUFTRV9NQUdJQ19JTklUX0xPQ0soKTsKKworI2lmbmRlZiBXSU4zMgorICAgIG1wYXJhbXMucGFnZV9zaXplID0gbWFsbG9jX2dldHBhZ2VzaXplOworICAgIG1wYXJhbXMuZ3JhbnVsYXJpdHkgPSAoKERFRkFVTFRfR1JBTlVMQVJJVFkgIT0gMCk/CisgICAgICAgICAgICAgICAgICAgICAgICAgICBERUZBVUxUX0dSQU5VTEFSSVRZIDogbXBhcmFtcy5wYWdlX3NpemUpOworI2Vsc2UgLyogV0lOMzIgKi8KKyAgICB7CisgICAgICBTWVNURU1fSU5GTyBzeXN0ZW1faW5mbzsKKyAgICAgIEdldFN5c3RlbUluZm8oJnN5c3RlbV9pbmZvKTsKKyAgICAgIG1wYXJhbXMucGFnZV9zaXplID0gc3lzdGVtX2luZm8uZHdQYWdlU2l6ZTsKKyAgICAgIG1wYXJhbXMuZ3JhbnVsYXJpdHkgPSBzeXN0ZW1faW5mby5kd0FsbG9jYXRpb25HcmFudWxhcml0eTsKKyAgICB9CisjZW5kaWYgLyogV0lOMzIgKi8KKworICAgIC8qIFNhbml0eS1jaGVjayBjb25maWd1cmF0aW9uOgorICAgICAgIHNpemVfdCBtdXN0IGJlIHVuc2lnbmVkIGFuZCBhcyB3aWRlIGFzIHBvaW50ZXIgdHlwZS4KKyAgICAgICBpbnRzIG11c3QgYmUgYXQgbGVhc3QgNCBieXRlcy4KKyAgICAgICBhbGlnbm1lbnQgbXVzdCBiZSBhdCBsZWFzdCA4LgorICAgICAgIEFsaWdubWVudCwgbWluIGNodW5rIHNpemUsIGFuZCBwYWdlIHNpemUgbXVzdCBhbGwgYmUgcG93ZXJzIG9mIDIuCisgICAgKi8KKyAgICBpZiAoKHNpemVvZihzaXplX3QpICE9IHNpemVvZihjaGFyKikpIHx8CisgICAgICAgIChNQVhfU0laRV9UIDwgTUlOX0NIVU5LX1NJWkUpICB8fAorICAgICAgICAoc2l6ZW9mKGludCkgPCA0KSAgfHwKKyAgICAgICAgKE1BTExPQ19BTElHTk1FTlQgPCAoc2l6ZV90KThVKSB8fAorICAgICAgICAoKE1BTExPQ19BTElHTk1FTlQgICAgJiAoTUFMTE9DX0FMSUdOTUVOVC1TSVpFX1RfT05FKSkgICAgIT0gMCkgfHwKKyAgICAgICAgKChNQ0hVTktfU0laRSAgICAgICAgICYgKE1DSFVOS19TSVpFLVNJWkVfVF9PTkUpKSAgICAgICAgICE9IDApIHx8CisgICAgICAgICgobXBhcmFtcy5ncmFudWxhcml0eSAmIChtcGFyYW1zLmdyYW51bGFyaXR5LVNJWkVfVF9PTkUpKSAhPSAwKSB8fAorICAgICAgICAoKG1wYXJhbXMucGFnZV9zaXplICAgJiAobXBhcmFtcy5wYWdlX3NpemUtU0laRV9UX09ORSkpICAgIT0gMCkpCisgICAgICBBQk9SVDsKKyAgfQorICByZXR1cm4gMDsKK30KKworLyogc3VwcG9ydCBmb3IgbWFsbG9wdCAqLworc3RhdGljIGludCBjaGFuZ2VfbXBhcmFtKGludCBwYXJhbV9udW1iZXIsIGludCB2YWx1ZSkgeworICBzaXplX3QgdmFsID0gKHNpemVfdCl2YWx1ZTsKKyAgaW5pdF9tcGFyYW1zKCk7CisgIHN3aXRjaChwYXJhbV9udW1iZXIpIHsKKyAgY2FzZSBNX1RSSU1fVEhSRVNIT0xEOgorICAgIG1wYXJhbXMudHJpbV90aHJlc2hvbGQgPSB2YWw7CisgICAgcmV0dXJuIDE7CisgIGNhc2UgTV9HUkFOVUxBUklUWToKKyAgICBpZiAodmFsID49IG1wYXJhbXMucGFnZV9zaXplICYmICgodmFsICYgKHZhbC0xKSkgPT0gMCkpIHsKKyAgICAgIG1wYXJhbXMuZ3JhbnVsYXJpdHkgPSB2YWw7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgZWxzZQorICAgICAgcmV0dXJuIDA7CisgIGNhc2UgTV9NTUFQX1RIUkVTSE9MRDoKKyAgICBtcGFyYW1zLm1tYXBfdGhyZXNob2xkID0gdmFsOworICAgIHJldHVybiAxOworICBkZWZhdWx0OgorICAgIHJldHVybiAwOworICB9Cit9CisKKyNpZiBERUJVRworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEZWJ1Z2dpbmcgU3VwcG9ydCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogQ2hlY2sgcHJvcGVydGllcyBvZiBhbnkgY2h1bmssIHdoZXRoZXIgZnJlZSwgaW51c2UsIG1tYXBwZWQgZXRjICAqLworc3RhdGljIHZvaWQgZG9fY2hlY2tfYW55X2NodW5rKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCkgeworICBhc3NlcnQoKGlzX2FsaWduZWQoY2h1bmsybWVtKHApKSkgfHwgKHAtPmhlYWQgPT0gRkVOQ0VQT1NUX0hFQUQpKTsKKyAgYXNzZXJ0KG9rX2FkZHJlc3MobSwgcCkpOworfQorCisvKiBDaGVjayBwcm9wZXJ0aWVzIG9mIHRvcCBjaHVuayAqLworc3RhdGljIHZvaWQgZG9fY2hlY2tfdG9wX2NodW5rKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCkgeworICBtc2VnbWVudHB0ciBzcCA9IHNlZ21lbnRfaG9sZGluZyhtLCAoY2hhciopcCk7CisgIHNpemVfdCAgc3ogPSBjaHVua3NpemUocCk7CisgIGFzc2VydChzcCAhPSAwKTsKKyAgYXNzZXJ0KChpc19hbGlnbmVkKGNodW5rMm1lbShwKSkpIHx8IChwLT5oZWFkID09IEZFTkNFUE9TVF9IRUFEKSk7CisgIGFzc2VydChva19hZGRyZXNzKG0sIHApKTsKKyAgYXNzZXJ0KHN6ID09IG0tPnRvcHNpemUpOworICBhc3NlcnQoc3ogPiAwKTsKKyAgYXNzZXJ0KHN6ID09ICgoc3AtPmJhc2UgKyBzcC0+c2l6ZSkgLSAoY2hhciopcCkgLSBUT1BfRk9PVF9TSVpFKTsKKyAgYXNzZXJ0KHBpbnVzZShwKSk7CisgIGFzc2VydCghbmV4dF9waW51c2UocCkpOworfQorCisvKiBDaGVjayBwcm9wZXJ0aWVzIG9mIChpbnVzZSkgbW1hcHBlZCBjaHVua3MgKi8KK3N0YXRpYyB2b2lkIGRvX2NoZWNrX21tYXBwZWRfY2h1bmsobXN0YXRlIG0sIG1jaHVua3B0ciBwKSB7CisgIHNpemVfdCAgc3ogPSBjaHVua3NpemUocCk7CisgIHNpemVfdCBsZW4gPSAoc3ogKyAocC0+cHJldl9mb290ICYgfklTX01NQVBQRURfQklUKSArIE1NQVBfRk9PVF9QQUQpOworICBhc3NlcnQoaXNfbW1hcHBlZChwKSk7CisgIGFzc2VydCh1c2VfbW1hcChtKSk7CisgIGFzc2VydCgoaXNfYWxpZ25lZChjaHVuazJtZW0ocCkpKSB8fCAocC0+aGVhZCA9PSBGRU5DRVBPU1RfSEVBRCkpOworICBhc3NlcnQob2tfYWRkcmVzcyhtLCBwKSk7CisgIGFzc2VydCghaXNfc21hbGwoc3opKTsKKyAgYXNzZXJ0KChsZW4gJiAobXBhcmFtcy5wYWdlX3NpemUtU0laRV9UX09ORSkpID09IDApOworICBhc3NlcnQoY2h1bmtfcGx1c19vZmZzZXQocCwgc3opLT5oZWFkID09IEZFTkNFUE9TVF9IRUFEKTsKKyAgYXNzZXJ0KGNodW5rX3BsdXNfb2Zmc2V0KHAsIHN6K1NJWkVfVF9TSVpFKS0+aGVhZCA9PSAwKTsKK30KKworLyogQ2hlY2sgcHJvcGVydGllcyBvZiBpbnVzZSBjaHVua3MgKi8KK3N0YXRpYyB2b2lkIGRvX2NoZWNrX2ludXNlX2NodW5rKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCkgeworICBkb19jaGVja19hbnlfY2h1bmsobSwgcCk7CisgIGFzc2VydChjaW51c2UocCkpOworICBhc3NlcnQobmV4dF9waW51c2UocCkpOworICAvKiBJZiBub3QgcGludXNlIGFuZCBub3QgbW1hcHBlZCwgcHJldmlvdXMgY2h1bmsgaGFzIE9LIG9mZnNldCAqLworICBhc3NlcnQoaXNfbW1hcHBlZChwKSB8fCBwaW51c2UocCkgfHwgbmV4dF9jaHVuayhwcmV2X2NodW5rKHApKSA9PSBwKTsKKyAgaWYgKGlzX21tYXBwZWQocCkpCisgICAgZG9fY2hlY2tfbW1hcHBlZF9jaHVuayhtLCBwKTsKK30KKworLyogQ2hlY2sgcHJvcGVydGllcyBvZiBmcmVlIGNodW5rcyAqLworc3RhdGljIHZvaWQgZG9fY2hlY2tfZnJlZV9jaHVuayhtc3RhdGUgbSwgbWNodW5rcHRyIHApIHsKKyAgc2l6ZV90IHN6ID0gcC0+aGVhZCAmIH4oUElOVVNFX0JJVHxDSU5VU0VfQklUKTsKKyAgbWNodW5rcHRyIG5leHQgPSBjaHVua19wbHVzX29mZnNldChwLCBzeik7CisgIGRvX2NoZWNrX2FueV9jaHVuayhtLCBwKTsKKyAgYXNzZXJ0KCFjaW51c2UocCkpOworICBhc3NlcnQoIW5leHRfcGludXNlKHApKTsKKyAgYXNzZXJ0ICghaXNfbW1hcHBlZChwKSk7CisgIGlmIChwICE9IG0tPmR2ICYmIHAgIT0gbS0+dG9wKSB7CisgICAgaWYgKHN6ID49IE1JTl9DSFVOS19TSVpFKSB7CisgICAgICBhc3NlcnQoKHN6ICYgQ0hVTktfQUxJR05fTUFTSykgPT0gMCk7CisgICAgICBhc3NlcnQoaXNfYWxpZ25lZChjaHVuazJtZW0ocCkpKTsKKyAgICAgIGFzc2VydChuZXh0LT5wcmV2X2Zvb3QgPT0gc3opOworICAgICAgYXNzZXJ0KHBpbnVzZShwKSk7CisgICAgICBhc3NlcnQgKG5leHQgPT0gbS0+dG9wIHx8IGNpbnVzZShuZXh0KSk7CisgICAgICBhc3NlcnQocC0+ZmQtPmJrID09IHApOworICAgICAgYXNzZXJ0KHAtPmJrLT5mZCA9PSBwKTsKKyAgICB9CisgICAgZWxzZSAgLyogbWFya2VycyBhcmUgYWx3YXlzIG9mIHNpemUgU0laRV9UX1NJWkUgKi8KKyAgICAgIGFzc2VydChzeiA9PSBTSVpFX1RfU0laRSk7CisgIH0KK30KKworLyogQ2hlY2sgcHJvcGVydGllcyBvZiBtYWxsb2NlZCBjaHVua3MgYXQgdGhlIHBvaW50IHRoZXkgYXJlIG1hbGxvY2VkICovCitzdGF0aWMgdm9pZCBkb19jaGVja19tYWxsb2NlZF9jaHVuayhtc3RhdGUgbSwgdm9pZCogbWVtLCBzaXplX3QgcykgeworICBpZiAobWVtICE9IDApIHsKKyAgICBtY2h1bmtwdHIgcCA9IG1lbTJjaHVuayhtZW0pOworICAgIHNpemVfdCBzeiA9IHAtPmhlYWQgJiB+KFBJTlVTRV9CSVR8Q0lOVVNFX0JJVCk7CisgICAgZG9fY2hlY2tfaW51c2VfY2h1bmsobSwgcCk7CisgICAgYXNzZXJ0KChzeiAmIENIVU5LX0FMSUdOX01BU0spID09IDApOworICAgIGFzc2VydChzeiA+PSBNSU5fQ0hVTktfU0laRSk7CisgICAgYXNzZXJ0KHN6ID49IHMpOworICAgIC8qIHVubGVzcyBtbWFwcGVkLCBzaXplIGlzIGxlc3MgdGhhbiBNSU5fQ0hVTktfU0laRSBtb3JlIHRoYW4gcmVxdWVzdCAqLworICAgIGFzc2VydChpc19tbWFwcGVkKHApIHx8IHN6IDwgKHMgKyBNSU5fQ0hVTktfU0laRSkpOworICB9Cit9CisKKy8qIENoZWNrIGEgdHJlZSBhbmQgaXRzIHN1YnRyZWVzLiAgKi8KK3N0YXRpYyB2b2lkIGRvX2NoZWNrX3RyZWUobXN0YXRlIG0sIHRjaHVua3B0ciB0KSB7CisgIHRjaHVua3B0ciBoZWFkID0gMDsKKyAgdGNodW5rcHRyIHUgPSB0OworICBiaW5kZXhfdCB0aW5kZXggPSB0LT5pbmRleDsKKyAgc2l6ZV90IHRzaXplID0gY2h1bmtzaXplKHQpOworICBiaW5kZXhfdCBpZHg7CisgIGNvbXB1dGVfdHJlZV9pbmRleCh0c2l6ZSwgaWR4KTsKKyAgYXNzZXJ0KHRpbmRleCA9PSBpZHgpOworICBhc3NlcnQodHNpemUgPj0gTUlOX0xBUkdFX1NJWkUpOworICBhc3NlcnQodHNpemUgPj0gbWluc2l6ZV9mb3JfdHJlZV9pbmRleChpZHgpKTsKKyAgYXNzZXJ0KChpZHggPT0gTlRSRUVCSU5TLTEpIHx8ICh0c2l6ZSA8IG1pbnNpemVfZm9yX3RyZWVfaW5kZXgoKGlkeCsxKSkpKTsKKworICBkbyB7IC8qIHRyYXZlcnNlIHRocm91Z2ggY2hhaW4gb2Ygc2FtZS1zaXplZCBub2RlcyAqLworICAgIGRvX2NoZWNrX2FueV9jaHVuayhtLCAoKG1jaHVua3B0cil1KSk7CisgICAgYXNzZXJ0KHUtPmluZGV4ID09IHRpbmRleCk7CisgICAgYXNzZXJ0KGNodW5rc2l6ZSh1KSA9PSB0c2l6ZSk7CisgICAgYXNzZXJ0KCFjaW51c2UodSkpOworICAgIGFzc2VydCghbmV4dF9waW51c2UodSkpOworICAgIGFzc2VydCh1LT5mZC0+YmsgPT0gdSk7CisgICAgYXNzZXJ0KHUtPmJrLT5mZCA9PSB1KTsKKyAgICBpZiAodS0+cGFyZW50ID09IDApIHsKKyAgICAgIGFzc2VydCh1LT5jaGlsZFswXSA9PSAwKTsKKyAgICAgIGFzc2VydCh1LT5jaGlsZFsxXSA9PSAwKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBhc3NlcnQoaGVhZCA9PSAwKTsgLyogb25seSBvbmUgbm9kZSBvbiBjaGFpbiBoYXMgcGFyZW50ICovCisgICAgICBoZWFkID0gdTsKKyAgICAgIGFzc2VydCh1LT5wYXJlbnQgIT0gdSk7CisgICAgICBhc3NlcnQgKHUtPnBhcmVudC0+Y2hpbGRbMF0gPT0gdSB8fAorICAgICAgICAgICAgICB1LT5wYXJlbnQtPmNoaWxkWzFdID09IHUgfHwKKyAgICAgICAgICAgICAgKigodGJpbnB0ciopKHUtPnBhcmVudCkpID09IHUpOworICAgICAgaWYgKHUtPmNoaWxkWzBdICE9IDApIHsKKyAgICAgICAgYXNzZXJ0KHUtPmNoaWxkWzBdLT5wYXJlbnQgPT0gdSk7CisgICAgICAgIGFzc2VydCh1LT5jaGlsZFswXSAhPSB1KTsKKyAgICAgICAgZG9fY2hlY2tfdHJlZShtLCB1LT5jaGlsZFswXSk7CisgICAgICB9CisgICAgICBpZiAodS0+Y2hpbGRbMV0gIT0gMCkgeworICAgICAgICBhc3NlcnQodS0+Y2hpbGRbMV0tPnBhcmVudCA9PSB1KTsKKyAgICAgICAgYXNzZXJ0KHUtPmNoaWxkWzFdICE9IHUpOworICAgICAgICBkb19jaGVja190cmVlKG0sIHUtPmNoaWxkWzFdKTsKKyAgICAgIH0KKyAgICAgIGlmICh1LT5jaGlsZFswXSAhPSAwICYmIHUtPmNoaWxkWzFdICE9IDApIHsKKyAgICAgICAgYXNzZXJ0KGNodW5rc2l6ZSh1LT5jaGlsZFswXSkgPCBjaHVua3NpemUodS0+Y2hpbGRbMV0pKTsKKyAgICAgIH0KKyAgICB9CisgICAgdSA9IHUtPmZkOworICB9IHdoaWxlICh1ICE9IHQpOworICBhc3NlcnQoaGVhZCAhPSAwKTsKK30KKworLyogIENoZWNrIGFsbCB0aGUgY2h1bmtzIGluIGEgdHJlZWJpbi4gICovCitzdGF0aWMgdm9pZCBkb19jaGVja190cmVlYmluKG1zdGF0ZSBtLCBiaW5kZXhfdCBpKSB7CisgIHRiaW5wdHIqIHRiID0gdHJlZWJpbl9hdChtLCBpKTsKKyAgdGNodW5rcHRyIHQgPSAqdGI7CisgIGludCBlbXB0eSA9IChtLT50cmVlbWFwICYgKDFVIDw8IGkpKSA9PSAwOworICBpZiAodCA9PSAwKQorICAgIGFzc2VydChlbXB0eSk7CisgIGlmICghZW1wdHkpCisgICAgZG9fY2hlY2tfdHJlZShtLCB0KTsKK30KKworLyogIENoZWNrIGFsbCB0aGUgY2h1bmtzIGluIGEgc21hbGxiaW4uICAqLworc3RhdGljIHZvaWQgZG9fY2hlY2tfc21hbGxiaW4obXN0YXRlIG0sIGJpbmRleF90IGkpIHsKKyAgc2JpbnB0ciBiID0gc21hbGxiaW5fYXQobSwgaSk7CisgIG1jaHVua3B0ciBwID0gYi0+Yms7CisgIHVuc2lnbmVkIGludCBlbXB0eSA9IChtLT5zbWFsbG1hcCAmICgxVSA8PCBpKSkgPT0gMDsKKyAgaWYgKHAgPT0gYikKKyAgICBhc3NlcnQoZW1wdHkpOworICBpZiAoIWVtcHR5KSB7CisgICAgZm9yICg7IHAgIT0gYjsgcCA9IHAtPmJrKSB7CisgICAgICBzaXplX3Qgc2l6ZSA9IGNodW5rc2l6ZShwKTsKKyAgICAgIG1jaHVua3B0ciBxOworICAgICAgLyogZWFjaCBjaHVuayBjbGFpbXMgdG8gYmUgZnJlZSAqLworICAgICAgZG9fY2hlY2tfZnJlZV9jaHVuayhtLCBwKTsKKyAgICAgIC8qIGNodW5rIGJlbG9uZ3MgaW4gYmluICovCisgICAgICBhc3NlcnQoc21hbGxfaW5kZXgoc2l6ZSkgPT0gaSk7CisgICAgICBhc3NlcnQocC0+YmsgPT0gYiB8fCBjaHVua3NpemUocC0+YmspID09IGNodW5rc2l6ZShwKSk7CisgICAgICAvKiBjaHVuayBpcyBmb2xsb3dlZCBieSBhbiBpbnVzZSBjaHVuayAqLworICAgICAgcSA9IG5leHRfY2h1bmsocCk7CisgICAgICBpZiAocS0+aGVhZCAhPSBGRU5DRVBPU1RfSEVBRCkKKyAgICAgICAgZG9fY2hlY2tfaW51c2VfY2h1bmsobSwgcSk7CisgICAgfQorICB9Cit9CisKKy8qIEZpbmQgeCBpbiBhIGJpbi4gVXNlZCBpbiBvdGhlciBjaGVjayBmdW5jdGlvbnMuICovCitzdGF0aWMgaW50IGJpbl9maW5kKG1zdGF0ZSBtLCBtY2h1bmtwdHIgeCkgeworICBzaXplX3Qgc2l6ZSA9IGNodW5rc2l6ZSh4KTsKKyAgaWYgKGlzX3NtYWxsKHNpemUpKSB7CisgICAgYmluZGV4X3Qgc2lkeCA9IHNtYWxsX2luZGV4KHNpemUpOworICAgIHNiaW5wdHIgYiA9IHNtYWxsYmluX2F0KG0sIHNpZHgpOworICAgIGlmIChzbWFsbG1hcF9pc19tYXJrZWQobSwgc2lkeCkpIHsKKyAgICAgIG1jaHVua3B0ciBwID0gYjsKKyAgICAgIGRvIHsKKyAgICAgICAgaWYgKHAgPT0geCkKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0gd2hpbGUgKChwID0gcC0+ZmQpICE9IGIpOworICAgIH0KKyAgfQorICBlbHNlIHsKKyAgICBiaW5kZXhfdCB0aWR4OworICAgIGNvbXB1dGVfdHJlZV9pbmRleChzaXplLCB0aWR4KTsKKyAgICBpZiAodHJlZW1hcF9pc19tYXJrZWQobSwgdGlkeCkpIHsKKyAgICAgIHRjaHVua3B0ciB0ID0gKnRyZWViaW5fYXQobSwgdGlkeCk7CisgICAgICBzaXplX3Qgc2l6ZWJpdHMgPSBzaXplIDw8IGxlZnRzaGlmdF9mb3JfdHJlZV9pbmRleCh0aWR4KTsKKyAgICAgIHdoaWxlICh0ICE9IDAgJiYgY2h1bmtzaXplKHQpICE9IHNpemUpIHsKKyAgICAgICAgdCA9IHQtPmNoaWxkWyhzaXplYml0cyA+PiAoU0laRV9UX0JJVFNJWkUtU0laRV9UX09ORSkpICYgMV07CisgICAgICAgIHNpemViaXRzIDw8PSAxOworICAgICAgfQorICAgICAgaWYgKHQgIT0gMCkgeworICAgICAgICB0Y2h1bmtwdHIgdSA9IHQ7CisgICAgICAgIGRvIHsKKyAgICAgICAgICBpZiAodSA9PSAodGNodW5rcHRyKXgpCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfSB3aGlsZSAoKHUgPSB1LT5mZCkgIT0gdCk7CisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiAwOworfQorCisvKiBUcmF2ZXJzZSBlYWNoIGNodW5rIGFuZCBjaGVjayBpdDsgcmV0dXJuIHRvdGFsICovCitzdGF0aWMgc2l6ZV90IHRyYXZlcnNlX2FuZF9jaGVjayhtc3RhdGUgbSkgeworICBzaXplX3Qgc3VtID0gMDsKKyAgaWYgKGlzX2luaXRpYWxpemVkKG0pKSB7CisgICAgbXNlZ21lbnRwdHIgcyA9ICZtLT5zZWc7CisgICAgc3VtICs9IG0tPnRvcHNpemUgKyBUT1BfRk9PVF9TSVpFOworICAgIHdoaWxlIChzICE9IDApIHsKKyAgICAgIG1jaHVua3B0ciBxID0gYWxpZ25fYXNfY2h1bmsocy0+YmFzZSk7CisgICAgICBtY2h1bmtwdHIgbGFzdHEgPSAwOworICAgICAgYXNzZXJ0KHBpbnVzZShxKSk7CisgICAgICB3aGlsZSAoc2VnbWVudF9ob2xkcyhzLCBxKSAmJgorICAgICAgICAgICAgIHEgIT0gbS0+dG9wICYmIHEtPmhlYWQgIT0gRkVOQ0VQT1NUX0hFQUQpIHsKKyAgICAgICAgc3VtICs9IGNodW5rc2l6ZShxKTsKKyAgICAgICAgaWYgKGNpbnVzZShxKSkgeworICAgICAgICAgIGFzc2VydCghYmluX2ZpbmQobSwgcSkpOworICAgICAgICAgIGRvX2NoZWNrX2ludXNlX2NodW5rKG0sIHEpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgIGFzc2VydChxID09IG0tPmR2IHx8IGJpbl9maW5kKG0sIHEpKTsKKyAgICAgICAgICBhc3NlcnQobGFzdHEgPT0gMCB8fCBjaW51c2UobGFzdHEpKTsgLyogTm90IDIgY29uc2VjdXRpdmUgZnJlZSAqLworICAgICAgICAgIGRvX2NoZWNrX2ZyZWVfY2h1bmsobSwgcSk7CisgICAgICAgIH0KKyAgICAgICAgbGFzdHEgPSBxOworICAgICAgICBxID0gbmV4dF9jaHVuayhxKTsKKyAgICAgIH0KKyAgICAgIHMgPSBzLT5uZXh0OworICAgIH0KKyAgfQorICByZXR1cm4gc3VtOworfQorCisvKiBDaGVjayBhbGwgcHJvcGVydGllcyBvZiBtYWxsb2Nfc3RhdGUuICovCitzdGF0aWMgdm9pZCBkb19jaGVja19tYWxsb2Nfc3RhdGUobXN0YXRlIG0pIHsKKyAgYmluZGV4X3QgaTsKKyAgc2l6ZV90IHRvdGFsOworICAvKiBjaGVjayBiaW5zICovCisgIGZvciAoaSA9IDA7IGkgPCBOU01BTExCSU5TOyArK2kpCisgICAgZG9fY2hlY2tfc21hbGxiaW4obSwgaSk7CisgIGZvciAoaSA9IDA7IGkgPCBOVFJFRUJJTlM7ICsraSkKKyAgICBkb19jaGVja190cmVlYmluKG0sIGkpOworCisgIGlmIChtLT5kdnNpemUgIT0gMCkgeyAvKiBjaGVjayBkdiBjaHVuayAqLworICAgIGRvX2NoZWNrX2FueV9jaHVuayhtLCBtLT5kdik7CisgICAgYXNzZXJ0KG0tPmR2c2l6ZSA9PSBjaHVua3NpemUobS0+ZHYpKTsKKyAgICBhc3NlcnQobS0+ZHZzaXplID49IE1JTl9DSFVOS19TSVpFKTsKKyAgICBhc3NlcnQoYmluX2ZpbmQobSwgbS0+ZHYpID09IDApOworICB9CisKKyAgaWYgKG0tPnRvcCAhPSAwKSB7ICAgLyogY2hlY2sgdG9wIGNodW5rICovCisgICAgZG9fY2hlY2tfdG9wX2NodW5rKG0sIG0tPnRvcCk7CisgICAgYXNzZXJ0KG0tPnRvcHNpemUgPT0gY2h1bmtzaXplKG0tPnRvcCkpOworICAgIGFzc2VydChtLT50b3BzaXplID4gMCk7CisgICAgYXNzZXJ0KGJpbl9maW5kKG0sIG0tPnRvcCkgPT0gMCk7CisgIH0KKworICB0b3RhbCA9IHRyYXZlcnNlX2FuZF9jaGVjayhtKTsKKyAgYXNzZXJ0KHRvdGFsIDw9IG0tPmZvb3RwcmludCk7CisgIGFzc2VydChtLT5mb290cHJpbnQgPD0gbS0+bWF4X2Zvb3RwcmludCk7CisjaWYgVVNFX01BWF9BTExPV0VEX0ZPT1RQUklOVAorICAvL1RPRE86IGNoYW5nZSB0aGVzZSBhc3NlcnRpb25zIGlmIHdlIGFsbG93IGZvciBzaHJpbmtpbmcuCisgIGFzc2VydChtLT5mb290cHJpbnQgPD0gbS0+bWF4X2FsbG93ZWRfZm9vdHByaW50KTsKKyAgYXNzZXJ0KG0tPm1heF9mb290cHJpbnQgPD0gbS0+bWF4X2FsbG93ZWRfZm9vdHByaW50KTsKKyNlbmRpZgorfQorI2VuZGlmIC8qIERFQlVHICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHN0YXRpc3RpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiAhTk9fTUFMTElORk8KK3N0YXRpYyBzdHJ1Y3QgbWFsbGluZm8gaW50ZXJuYWxfbWFsbGluZm8obXN0YXRlIG0pIHsKKyAgc3RydWN0IG1hbGxpbmZvIG5tID0geyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH07CisgIGlmICghUFJFQUNUSU9OKG0pKSB7CisgICAgY2hlY2tfbWFsbG9jX3N0YXRlKG0pOworICAgIGlmIChpc19pbml0aWFsaXplZChtKSkgeworICAgICAgc2l6ZV90IG5mcmVlID0gU0laRV9UX09ORTsgLyogdG9wIGFsd2F5cyBmcmVlICovCisgICAgICBzaXplX3QgbWZyZWUgPSBtLT50b3BzaXplICsgVE9QX0ZPT1RfU0laRTsKKyAgICAgIHNpemVfdCBzdW0gPSBtZnJlZTsKKyAgICAgIG1zZWdtZW50cHRyIHMgPSAmbS0+c2VnOworICAgICAgd2hpbGUgKHMgIT0gMCkgeworICAgICAgICBtY2h1bmtwdHIgcSA9IGFsaWduX2FzX2NodW5rKHMtPmJhc2UpOworICAgICAgICB3aGlsZSAoc2VnbWVudF9ob2xkcyhzLCBxKSAmJgorICAgICAgICAgICAgICAgcSAhPSBtLT50b3AgJiYgcS0+aGVhZCAhPSBGRU5DRVBPU1RfSEVBRCkgeworICAgICAgICAgIHNpemVfdCBzeiA9IGNodW5rc2l6ZShxKTsKKyAgICAgICAgICBzdW0gKz0gc3o7CisgICAgICAgICAgaWYgKCFjaW51c2UocSkpIHsKKyAgICAgICAgICAgIG1mcmVlICs9IHN6OworICAgICAgICAgICAgKytuZnJlZTsKKyAgICAgICAgICB9CisgICAgICAgICAgcSA9IG5leHRfY2h1bmsocSk7CisgICAgICAgIH0KKyAgICAgICAgcyA9IHMtPm5leHQ7CisgICAgICB9CisKKyAgICAgIG5tLmFyZW5hICAgID0gc3VtOworICAgICAgbm0ub3JkYmxrcyAgPSBuZnJlZTsKKyAgICAgIG5tLmhibGtoZCAgID0gbS0+Zm9vdHByaW50IC0gc3VtOworICAgICAgbm0udXNtYmxrcyAgPSBtLT5tYXhfZm9vdHByaW50OworICAgICAgbm0udW9yZGJsa3MgPSBtLT5mb290cHJpbnQgLSBtZnJlZTsKKyAgICAgIG5tLmZvcmRibGtzID0gbWZyZWU7CisgICAgICBubS5rZWVwY29zdCA9IG0tPnRvcHNpemU7CisgICAgfQorCisgICAgUE9TVEFDVElPTihtKTsKKyAgfQorICByZXR1cm4gbm07Cit9CisjZW5kaWYgLyogIU5PX01BTExJTkZPICovCisKK3N0YXRpYyB2b2lkIGludGVybmFsX21hbGxvY19zdGF0cyhtc3RhdGUgbSkgeworICBpZiAoIVBSRUFDVElPTihtKSkgeworICAgIHNpemVfdCBtYXhmcCA9IDA7CisgICAgc2l6ZV90IGZwID0gMDsKKyAgICBzaXplX3QgdXNlZCA9IDA7CisgICAgY2hlY2tfbWFsbG9jX3N0YXRlKG0pOworICAgIGlmIChpc19pbml0aWFsaXplZChtKSkgeworICAgICAgbXNlZ21lbnRwdHIgcyA9ICZtLT5zZWc7CisgICAgICBtYXhmcCA9IG0tPm1heF9mb290cHJpbnQ7CisgICAgICBmcCA9IG0tPmZvb3RwcmludDsKKyAgICAgIHVzZWQgPSBmcCAtIChtLT50b3BzaXplICsgVE9QX0ZPT1RfU0laRSk7CisKKyAgICAgIHdoaWxlIChzICE9IDApIHsKKyAgICAgICAgbWNodW5rcHRyIHEgPSBhbGlnbl9hc19jaHVuayhzLT5iYXNlKTsKKyAgICAgICAgd2hpbGUgKHNlZ21lbnRfaG9sZHMocywgcSkgJiYKKyAgICAgICAgICAgICAgIHEgIT0gbS0+dG9wICYmIHEtPmhlYWQgIT0gRkVOQ0VQT1NUX0hFQUQpIHsKKyAgICAgICAgICBpZiAoIWNpbnVzZShxKSkKKyAgICAgICAgICAgIHVzZWQgLT0gY2h1bmtzaXplKHEpOworICAgICAgICAgIHEgPSBuZXh0X2NodW5rKHEpOworICAgICAgICB9CisgICAgICAgIHMgPSBzLT5uZXh0OworICAgICAgfQorICAgIH0KKworICAgIGZwcmludGYoc3RkZXJyLCAibWF4IHN5c3RlbSBieXRlcyA9ICUxMGx1XG4iLCAodW5zaWduZWQgbG9uZykobWF4ZnApKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgInN5c3RlbSBieXRlcyAgICAgPSAlMTBsdVxuIiwgKHVuc2lnbmVkIGxvbmcpKGZwKSk7CisgICAgZnByaW50ZihzdGRlcnIsICJpbiB1c2UgYnl0ZXMgICAgID0gJTEwbHVcbiIsICh1bnNpZ25lZCBsb25nKSh1c2VkKSk7CisKKyAgICBQT1NUQUNUSU9OKG0pOworICB9Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE9wZXJhdGlvbnMgb24gc21hbGxiaW5zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgIFZhcmlvdXMgZm9ybXMgb2YgbGlua2luZyBhbmQgdW5saW5raW5nIGFyZSBkZWZpbmVkIGFzIG1hY3Jvcy4gIEV2ZW4KKyAgdGhlIG9uZXMgZm9yIHRyZWVzLCB3aGljaCBhcmUgdmVyeSBsb25nIGJ1dCBoYXZlIHZlcnkgc2hvcnQgdHlwaWNhbAorICBwYXRocy4gIFRoaXMgaXMgdWdseSBidXQgcmVkdWNlcyByZWxpYW5jZSBvbiBpbmxpbmluZyBzdXBwb3J0IG9mCisgIGNvbXBpbGVycy4KKyovCisKKy8qIExpbmsgYSBmcmVlIGNodW5rIGludG8gYSBzbWFsbGJpbiAgKi8KKyNkZWZpbmUgaW5zZXJ0X3NtYWxsX2NodW5rKE0sIFAsIFMpIHtcCisgIGJpbmRleF90IEkgID0gc21hbGxfaW5kZXgoUyk7XAorICBtY2h1bmtwdHIgQiA9IHNtYWxsYmluX2F0KE0sIEkpO1wKKyAgbWNodW5rcHRyIEYgPSBCO1wKKyAgYXNzZXJ0KFMgPj0gTUlOX0NIVU5LX1NJWkUpO1wKKyAgaWYgKCFzbWFsbG1hcF9pc19tYXJrZWQoTSwgSSkpXAorICAgIG1hcmtfc21hbGxtYXAoTSwgSSk7XAorICBlbHNlIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoTSwgQi0+ZmQpKSlcCisgICAgRiA9IEItPmZkO1wKKyAgZWxzZSB7XAorICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKKyAgfVwKKyAgQi0+ZmQgPSBQO1wKKyAgRi0+YmsgPSBQO1wKKyAgUC0+ZmQgPSBGO1wKKyAgUC0+YmsgPSBCO1wKK30KKworLyogVW5saW5rIGEgY2h1bmsgZnJvbSBhIHNtYWxsYmluCisgKiBBZGRlZCBjaGVjazogaWYgRi0+YmsgIT0gUCBvciBCLT5mZCAhPSBQLCB3ZSBoYXZlIGRvdWJsZSBsaW5rZWQgbGlzdAorICogY29ycnVwdGlvbiwgYW5kIGFib3J0LgorICovCisjZGVmaW5lIHVubGlua19zbWFsbF9jaHVuayhNLCBQLCBTKSB7XAorICBtY2h1bmtwdHIgRiA9IFAtPmZkO1wKKyAgbWNodW5rcHRyIEIgPSBQLT5iaztcCisgIGJpbmRleF90IEkgPSBzbWFsbF9pbmRleChTKTtcCisgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChGLT5iayAhPSBQIHx8IEItPmZkICE9IFAsIDApKVwKKyAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcCisgIGFzc2VydChQICE9IEIpO1wKKyAgYXNzZXJ0KFAgIT0gRik7XAorICBhc3NlcnQoY2h1bmtzaXplKFApID09IHNtYWxsX2luZGV4MnNpemUoSSkpO1wKKyAgaWYgKEYgPT0gQilcCisgICAgY2xlYXJfc21hbGxtYXAoTSwgSSk7XAorICBlbHNlIGlmIChSVENIRUNLKChGID09IHNtYWxsYmluX2F0KE0sSSkgfHwgb2tfYWRkcmVzcyhNLCBGKSkgJiZcCisgICAgICAgICAgICAgICAgICAgKEIgPT0gc21hbGxiaW5fYXQoTSxJKSB8fCBva19hZGRyZXNzKE0sIEIpKSkpIHtcCisgICAgRi0+YmsgPSBCO1wKKyAgICBCLT5mZCA9IEY7XAorICB9XAorICBlbHNlIHtcCisgICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04oTSk7XAorICB9XAorfQorCisvKiBVbmxpbmsgdGhlIGZpcnN0IGNodW5rIGZyb20gYSBzbWFsbGJpbgorICogQWRkZWQgY2hlY2s6IGlmIEYtPmJrICE9IFAgb3IgQi0+ZmQgIT0gUCwgd2UgaGF2ZSBkb3VibGUgbGlua2VkIGxpc3QKKyAqIGNvcnJ1cHRpb24sIGFuZCBhYm9ydC4KKyAqLworI2RlZmluZSB1bmxpbmtfZmlyc3Rfc21hbGxfY2h1bmsoTSwgQiwgUCwgSSkge1wKKyAgbWNodW5rcHRyIEYgPSBQLT5mZDtcCisgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChGLT5iayAhPSBQIHx8IEItPmZkICE9IFAsIDApKVwKKyAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcCisgIGFzc2VydChQICE9IEIpO1wKKyAgYXNzZXJ0KFAgIT0gRik7XAorICBhc3NlcnQoY2h1bmtzaXplKFApID09IHNtYWxsX2luZGV4MnNpemUoSSkpO1wKKyAgaWYgKEIgPT0gRilcCisgICAgY2xlYXJfc21hbGxtYXAoTSwgSSk7XAorICBlbHNlIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoTSwgRikpKSB7XAorICAgIEItPmZkID0gRjtcCisgICAgRi0+YmsgPSBCO1wKKyAgfVwKKyAgZWxzZSB7XAorICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKKyAgfVwKK30KKworLyogUmVwbGFjZSBkdiBub2RlLCBiaW5uaW5nIHRoZSBvbGQgb25lICovCisvKiBVc2VkIG9ubHkgd2hlbiBkdnNpemUga25vd24gdG8gYmUgc21hbGwgKi8KKyNkZWZpbmUgcmVwbGFjZV9kdihNLCBQLCBTKSB7XAorICBzaXplX3QgRFZTID0gTS0+ZHZzaXplO1wKKyAgaWYgKERWUyAhPSAwKSB7XAorICAgIG1jaHVua3B0ciBEViA9IE0tPmR2O1wKKyAgICBhc3NlcnQoaXNfc21hbGwoRFZTKSk7XAorICAgIGluc2VydF9zbWFsbF9jaHVuayhNLCBEViwgRFZTKTtcCisgIH1cCisgIE0tPmR2c2l6ZSA9IFM7XAorICBNLT5kdiA9IFA7XAorfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE9wZXJhdGlvbnMgb24gdHJlZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBJbnNlcnQgY2h1bmsgaW50byB0cmVlICovCisjZGVmaW5lIGluc2VydF9sYXJnZV9jaHVuayhNLCBYLCBTKSB7XAorICB0YmlucHRyKiBIO1wKKyAgYmluZGV4X3QgSTtcCisgIGNvbXB1dGVfdHJlZV9pbmRleChTLCBJKTtcCisgIEggPSB0cmVlYmluX2F0KE0sIEkpO1wKKyAgWC0+aW5kZXggPSBJO1wKKyAgWC0+Y2hpbGRbMF0gPSBYLT5jaGlsZFsxXSA9IDA7XAorICBpZiAoIXRyZWVtYXBfaXNfbWFya2VkKE0sIEkpKSB7XAorICAgIG1hcmtfdHJlZW1hcChNLCBJKTtcCisgICAgKkggPSBYO1wKKyAgICBYLT5wYXJlbnQgPSAodGNodW5rcHRyKUg7XAorICAgIFgtPmZkID0gWC0+YmsgPSBYO1wKKyAgfVwKKyAgZWxzZSB7XAorICAgIHRjaHVua3B0ciBUID0gKkg7XAorICAgIHNpemVfdCBLID0gUyA8PCBsZWZ0c2hpZnRfZm9yX3RyZWVfaW5kZXgoSSk7XAorICAgIGZvciAoOzspIHtcCisgICAgICBpZiAoY2h1bmtzaXplKFQpICE9IFMpIHtcCisgICAgICAgIHRjaHVua3B0ciogQyA9ICYoVC0+Y2hpbGRbKEsgPj4gKFNJWkVfVF9CSVRTSVpFLVNJWkVfVF9PTkUpKSAmIDFdKTtcCisgICAgICAgIEsgPDw9IDE7XAorICAgICAgICBpZiAoKkMgIT0gMClcCisgICAgICAgICAgVCA9ICpDO1wKKyAgICAgICAgZWxzZSBpZiAoUlRDSEVDSyhva19hZGRyZXNzKE0sIEMpKSkge1wKKyAgICAgICAgICAqQyA9IFg7XAorICAgICAgICAgIFgtPnBhcmVudCA9IFQ7XAorICAgICAgICAgIFgtPmZkID0gWC0+YmsgPSBYO1wKKyAgICAgICAgICBicmVhaztcCisgICAgICAgIH1cCisgICAgICAgIGVsc2Uge1wKKyAgICAgICAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcCisgICAgICAgICAgYnJlYWs7XAorICAgICAgICB9XAorICAgICAgfVwKKyAgICAgIGVsc2Uge1wKKyAgICAgICAgdGNodW5rcHRyIEYgPSBULT5mZDtcCisgICAgICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoTSwgVCkgJiYgb2tfYWRkcmVzcyhNLCBGKSkpIHtcCisgICAgICAgICAgVC0+ZmQgPSBGLT5iayA9IFg7XAorICAgICAgICAgIFgtPmZkID0gRjtcCisgICAgICAgICAgWC0+YmsgPSBUO1wKKyAgICAgICAgICBYLT5wYXJlbnQgPSAwO1wKKyAgICAgICAgICBicmVhaztcCisgICAgICAgIH1cCisgICAgICAgIGVsc2Uge1wKKyAgICAgICAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcCisgICAgICAgICAgYnJlYWs7XAorICAgICAgICB9XAorICAgICAgfVwKKyAgICB9XAorICB9XAorfQorCisvKgorICBVbmxpbmsgc3RlcHM6CisKKyAgMS4gSWYgeCBpcyBhIGNoYWluZWQgbm9kZSwgdW5saW5rIGl0IGZyb20gaXRzIHNhbWUtc2l6ZWQgZmQvYmsgbGlua3MKKyAgICAgYW5kIGNob29zZSBpdHMgYmsgbm9kZSBhcyBpdHMgcmVwbGFjZW1lbnQuCisgIDIuIElmIHggd2FzIHRoZSBsYXN0IG5vZGUgb2YgaXRzIHNpemUsIGJ1dCBub3QgYSBsZWFmIG5vZGUsIGl0IG11c3QKKyAgICAgYmUgcmVwbGFjZWQgd2l0aCBhIGxlYWYgbm9kZSAobm90IG1lcmVseSBvbmUgd2l0aCBhbiBvcGVuIGxlZnQgb3IKKyAgICAgcmlnaHQpLCB0byBtYWtlIHN1cmUgdGhhdCBsZWZ0cyBhbmQgcmlnaHRzIG9mIGRlc2NlbmRlbnRzCisgICAgIGNvcnJlc3BvbmQgcHJvcGVybHkgdG8gYml0IG1hc2tzLiAgV2UgdXNlIHRoZSByaWdodG1vc3QgZGVzY2VuZGVudAorICAgICBvZiB4LiAgV2UgY291bGQgdXNlIGFueSBvdGhlciBsZWFmLCBidXQgdGhpcyBpcyBlYXN5IHRvIGxvY2F0ZSBhbmQKKyAgICAgdGVuZHMgdG8gY291bnRlcmFjdCByZW1vdmFsIG9mIGxlZnRtb3N0cyBlbHNld2hlcmUsIGFuZCBzbyBrZWVwcworICAgICBwYXRocyBzaG9ydGVyIHRoYW4gbWluaW1hbGx5IGd1YXJhbnRlZWQuICBUaGlzIGRvZXNuJ3QgbG9vcCBtdWNoCisgICAgIGJlY2F1c2Ugb24gYXZlcmFnZSBhIG5vZGUgaW4gYSB0cmVlIGlzIG5lYXIgdGhlIGJvdHRvbS4KKyAgMy4gSWYgeCBpcyB0aGUgYmFzZSBvZiBhIGNoYWluIChpLmUuLCBoYXMgcGFyZW50IGxpbmtzKSByZWxpbmsKKyAgICAgeCdzIHBhcmVudCBhbmQgY2hpbGRyZW4gdG8geCdzIHJlcGxhY2VtZW50IChvciBudWxsIGlmIG5vbmUpLgorCisgIEFkZGVkIGNoZWNrOiBpZiBGLT5iayAhPSBYIG9yIFItPmZkICE9IFgsIHdlIGhhdmUgZG91YmxlIGxpbmtlZCBsaXN0CisgIGNvcnJ1cHRpb24sIGFuZCBhYm9ydC4KKyovCisKKyNkZWZpbmUgdW5saW5rX2xhcmdlX2NodW5rKE0sIFgpIHtcCisgIHRjaHVua3B0ciBYUCA9IFgtPnBhcmVudDtcCisgIHRjaHVua3B0ciBSO1wKKyAgaWYgKFgtPmJrICE9IFgpIHtcCisgICAgdGNodW5rcHRyIEYgPSBYLT5mZDtcCisgICAgUiA9IFgtPmJrO1wKKyAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoRi0+YmsgIT0gWCB8fCBSLT5mZCAhPSBYLCAwKSlcCisgICAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcCisgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhNLCBGKSkpIHtcCisgICAgICBGLT5iayA9IFI7XAorICAgICAgUi0+ZmQgPSBGO1wKKyAgICB9XAorICAgIGVsc2Uge1wKKyAgICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKKyAgICB9XAorICB9XAorICBlbHNlIHtcCisgICAgdGNodW5rcHRyKiBSUDtcCisgICAgaWYgKCgoUiA9ICooUlAgPSAmKFgtPmNoaWxkWzFdKSkpICE9IDApIHx8XAorICAgICAgICAoKFIgPSAqKFJQID0gJihYLT5jaGlsZFswXSkpKSAhPSAwKSkge1wKKyAgICAgIHRjaHVua3B0ciogQ1A7XAorICAgICAgd2hpbGUgKCgqKENQID0gJihSLT5jaGlsZFsxXSkpICE9IDApIHx8XAorICAgICAgICAgICAgICgqKENQID0gJihSLT5jaGlsZFswXSkpICE9IDApKSB7XAorICAgICAgICBSID0gKihSUCA9IENQKTtcCisgICAgICB9XAorICAgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhNLCBSUCkpKVwKKyAgICAgICAgKlJQID0gMDtcCisgICAgICBlbHNlIHtcCisgICAgICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKKyAgICAgIH1cCisgICAgfVwKKyAgfVwKKyAgaWYgKFhQICE9IDApIHtcCisgICAgdGJpbnB0ciogSCA9IHRyZWViaW5fYXQoTSwgWC0+aW5kZXgpO1wKKyAgICBpZiAoWCA9PSAqSCkge1wKKyAgICAgIGlmICgoKkggPSBSKSA9PSAwKSBcCisgICAgICAgIGNsZWFyX3RyZWVtYXAoTSwgWC0+aW5kZXgpO1wKKyAgICB9XAorICAgIGVsc2UgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhNLCBYUCkpKSB7XAorICAgICAgaWYgKFhQLT5jaGlsZFswXSA9PSBYKSBcCisgICAgICAgIFhQLT5jaGlsZFswXSA9IFI7XAorICAgICAgZWxzZSBcCisgICAgICAgIFhQLT5jaGlsZFsxXSA9IFI7XAorICAgIH1cCisgICAgZWxzZVwKKyAgICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKKyAgICBpZiAoUiAhPSAwKSB7XAorICAgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhNLCBSKSkpIHtcCisgICAgICAgIHRjaHVua3B0ciBDMCwgQzE7XAorICAgICAgICBSLT5wYXJlbnQgPSBYUDtcCisgICAgICAgIGlmICgoQzAgPSBYLT5jaGlsZFswXSkgIT0gMCkge1wKKyAgICAgICAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKE0sIEMwKSkpIHtcCisgICAgICAgICAgICBSLT5jaGlsZFswXSA9IEMwO1wKKyAgICAgICAgICAgIEMwLT5wYXJlbnQgPSBSO1wKKyAgICAgICAgICB9XAorICAgICAgICAgIGVsc2VcCisgICAgICAgICAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcCisgICAgICAgIH1cCisgICAgICAgIGlmICgoQzEgPSBYLT5jaGlsZFsxXSkgIT0gMCkge1wKKyAgICAgICAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKE0sIEMxKSkpIHtcCisgICAgICAgICAgICBSLT5jaGlsZFsxXSA9IEMxO1wKKyAgICAgICAgICAgIEMxLT5wYXJlbnQgPSBSO1wKKyAgICAgICAgICB9XAorICAgICAgICAgIGVsc2VcCisgICAgICAgICAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcCisgICAgICAgIH1cCisgICAgICB9XAorICAgICAgZWxzZVwKKyAgICAgICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04oTSk7XAorICAgIH1cCisgIH1cCit9CisKKy8qIFJlbGF5cyB0byBsYXJnZSB2cyBzbWFsbCBiaW4gb3BlcmF0aW9ucyAqLworCisjZGVmaW5lIGluc2VydF9jaHVuayhNLCBQLCBTKVwKKyAgaWYgKGlzX3NtYWxsKFMpKSBpbnNlcnRfc21hbGxfY2h1bmsoTSwgUCwgUylcCisgIGVsc2UgeyB0Y2h1bmtwdHIgVFAgPSAodGNodW5rcHRyKShQKTsgaW5zZXJ0X2xhcmdlX2NodW5rKE0sIFRQLCBTKTsgfQorCisjZGVmaW5lIHVubGlua19jaHVuayhNLCBQLCBTKVwKKyAgaWYgKGlzX3NtYWxsKFMpKSB1bmxpbmtfc21hbGxfY2h1bmsoTSwgUCwgUylcCisgIGVsc2UgeyB0Y2h1bmtwdHIgVFAgPSAodGNodW5rcHRyKShQKTsgdW5saW5rX2xhcmdlX2NodW5rKE0sIFRQKTsgfQorCisKKy8qIFJlbGF5cyB0byBpbnRlcm5hbCBjYWxscyB0byBtYWxsb2MvZnJlZSBmcm9tIHJlYWxsb2MsIG1lbWFsaWduIGV0YyAqLworCisjaWYgT05MWV9NU1BBQ0VTCisjZGVmaW5lIGludGVybmFsX21hbGxvYyhtLCBiKSBtc3BhY2VfbWFsbG9jKG0sIGIpCisjZGVmaW5lIGludGVybmFsX2ZyZWUobSwgbWVtKSBtc3BhY2VfZnJlZShtLG1lbSk7CisjZWxzZSAvKiBPTkxZX01TUEFDRVMgKi8KKyNpZiBNU1BBQ0VTCisjZGVmaW5lIGludGVybmFsX21hbGxvYyhtLCBiKVwKKyAgIChtID09IGdtKT8gZGxtYWxsb2MoYikgOiBtc3BhY2VfbWFsbG9jKG0sIGIpCisjZGVmaW5lIGludGVybmFsX2ZyZWUobSwgbWVtKVwKKyAgIGlmIChtID09IGdtKSBkbGZyZWUobWVtKTsgZWxzZSBtc3BhY2VfZnJlZShtLG1lbSk7CisjZWxzZSAvKiBNU1BBQ0VTICovCisjZGVmaW5lIGludGVybmFsX21hbGxvYyhtLCBiKSBkbG1hbGxvYyhiKQorI2RlZmluZSBpbnRlcm5hbF9mcmVlKG0sIG1lbSkgZGxmcmVlKG1lbSkKKyNlbmRpZiAvKiBNU1BBQ0VTICovCisjZW5kaWYgLyogT05MWV9NU1BBQ0VTICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBEaXJlY3QtbW1hcHBpbmcgY2h1bmtzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgIERpcmVjdGx5IG1tYXBwZWQgY2h1bmtzIGFyZSBzZXQgdXAgd2l0aCBhbiBvZmZzZXQgdG8gdGhlIHN0YXJ0IG9mCisgIHRoZSBtbWFwcGVkIHJlZ2lvbiBzdG9yZWQgaW4gdGhlIHByZXZfZm9vdCBmaWVsZCBvZiB0aGUgY2h1bmsuIFRoaXMKKyAgYWxsb3dzIHJlY29uc3RydWN0aW9uIG9mIHRoZSByZXF1aXJlZCBhcmd1bWVudCB0byBNVU5NQVAgd2hlbiBmcmVlZCwKKyAgYW5kIGFsc28gYWxsb3dzIGFkanVzdG1lbnQgb2YgdGhlIHJldHVybmVkIGNodW5rIHRvIG1lZXQgYWxpZ25tZW50CisgIHJlcXVpcmVtZW50cyAoZXNwZWNpYWxseSBpbiBtZW1hbGlnbikuICBUaGVyZSBpcyBhbHNvIGVub3VnaCBzcGFjZQorICBhbGxvY2F0ZWQgdG8gaG9sZCBhIGZha2UgbmV4dCBjaHVuayBvZiBzaXplIFNJWkVfVF9TSVpFIHRvIG1haW50YWluCisgIHRoZSBQSU5VU0UgYml0IHNvIGZyZWVzIGNhbiBiZSBjaGVja2VkLgorKi8KKworLyogTWFsbG9jIHVzaW5nIG1tYXAgKi8KK3N0YXRpYyB2b2lkKiBtbWFwX2FsbG9jKG1zdGF0ZSBtLCBzaXplX3QgbmIpIHsKKyAgc2l6ZV90IG1tc2l6ZSA9IGdyYW51bGFyaXR5X2FsaWduKG5iICsgU0lYX1NJWkVfVF9TSVpFUyArIENIVU5LX0FMSUdOX01BU0spOworI2lmIFVTRV9NQVhfQUxMT1dFRF9GT09UUFJJTlQKKyAgc2l6ZV90IG5ld19mb290cHJpbnQgPSBtLT5mb290cHJpbnQgKyBtbXNpemU7CisgIGlmIChuZXdfZm9vdHByaW50IDw9IG0tPmZvb3RwcmludCB8fCAgLyogQ2hlY2sgZm9yIHdyYXAgYXJvdW5kIDAgKi8KKyAgICAgIG5ld19mb290cHJpbnQgPiBtLT5tYXhfYWxsb3dlZF9mb290cHJpbnQpCisgICAgcmV0dXJuIDA7CisjZW5kaWYKKyAgaWYgKG1tc2l6ZSA+IG5iKSB7ICAgICAvKiBDaGVjayBmb3Igd3JhcCBhcm91bmQgMCAqLworICAgIGNoYXIqIG1tID0gKGNoYXIqKShESVJFQ1RfTU1BUChtbXNpemUpKTsKKyAgICBpZiAobW0gIT0gQ01GQUlMKSB7CisgICAgICBzaXplX3Qgb2Zmc2V0ID0gYWxpZ25fb2Zmc2V0KGNodW5rMm1lbShtbSkpOworICAgICAgc2l6ZV90IHBzaXplID0gbW1zaXplIC0gb2Zmc2V0IC0gTU1BUF9GT09UX1BBRDsKKyAgICAgIG1jaHVua3B0ciBwID0gKG1jaHVua3B0cikobW0gKyBvZmZzZXQpOworICAgICAgcC0+cHJldl9mb290ID0gb2Zmc2V0IHwgSVNfTU1BUFBFRF9CSVQ7CisgICAgICAocCktPmhlYWQgPSAocHNpemV8Q0lOVVNFX0JJVCk7CisgICAgICBtYXJrX2ludXNlX2Zvb3QobSwgcCwgcHNpemUpOworICAgICAgY2h1bmtfcGx1c19vZmZzZXQocCwgcHNpemUpLT5oZWFkID0gRkVOQ0VQT1NUX0hFQUQ7CisgICAgICBjaHVua19wbHVzX29mZnNldChwLCBwc2l6ZStTSVpFX1RfU0laRSktPmhlYWQgPSAwOworCisgICAgICBpZiAobW0gPCBtLT5sZWFzdF9hZGRyKQorICAgICAgICBtLT5sZWFzdF9hZGRyID0gbW07CisgICAgICBpZiAoKG0tPmZvb3RwcmludCArPSBtbXNpemUpID4gbS0+bWF4X2Zvb3RwcmludCkKKyAgICAgICAgbS0+bWF4X2Zvb3RwcmludCA9IG0tPmZvb3RwcmludDsKKyAgICAgIGFzc2VydChpc19hbGlnbmVkKGNodW5rMm1lbShwKSkpOworICAgICAgY2hlY2tfbW1hcHBlZF9jaHVuayhtLCBwKTsKKyAgICAgIHJldHVybiBjaHVuazJtZW0ocCk7CisgICAgfQorICB9CisgIHJldHVybiAwOworfQorCisvKiBSZWFsbG9jIHVzaW5nIG1tYXAgKi8KK3N0YXRpYyBtY2h1bmtwdHIgbW1hcF9yZXNpemUobXN0YXRlIG0sIG1jaHVua3B0ciBvbGRwLCBzaXplX3QgbmIpIHsKKyAgc2l6ZV90IG9sZHNpemUgPSBjaHVua3NpemUob2xkcCk7CisgIGlmIChpc19zbWFsbChuYikpIC8qIENhbid0IHNocmluayBtbWFwIHJlZ2lvbnMgYmVsb3cgc21hbGwgc2l6ZSAqLworICAgIHJldHVybiAwOworICAvKiBLZWVwIG9sZCBjaHVuayBpZiBiaWcgZW5vdWdoIGJ1dCBub3QgdG9vIGJpZyAqLworICBpZiAob2xkc2l6ZSA+PSBuYiArIFNJWkVfVF9TSVpFICYmCisgICAgICAob2xkc2l6ZSAtIG5iKSA8PSAobXBhcmFtcy5ncmFudWxhcml0eSA8PCAxKSkKKyAgICByZXR1cm4gb2xkcDsKKyAgZWxzZSB7CisgICAgc2l6ZV90IG9mZnNldCA9IG9sZHAtPnByZXZfZm9vdCAmIH5JU19NTUFQUEVEX0JJVDsKKyAgICBzaXplX3Qgb2xkbW1zaXplID0gb2xkc2l6ZSArIG9mZnNldCArIE1NQVBfRk9PVF9QQUQ7CisgICAgc2l6ZV90IG5ld21tc2l6ZSA9IGdyYW51bGFyaXR5X2FsaWduKG5iICsgU0lYX1NJWkVfVF9TSVpFUyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIVU5LX0FMSUdOX01BU0spOworICAgIGNoYXIqIGNwID0gKGNoYXIqKUNBTExfTVJFTUFQKChjaGFyKilvbGRwIC0gb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZG1tc2l6ZSwgbmV3bW1zaXplLCAxKTsKKyAgICBpZiAoY3AgIT0gQ01GQUlMKSB7CisgICAgICBtY2h1bmtwdHIgbmV3cCA9IChtY2h1bmtwdHIpKGNwICsgb2Zmc2V0KTsKKyAgICAgIHNpemVfdCBwc2l6ZSA9IG5ld21tc2l6ZSAtIG9mZnNldCAtIE1NQVBfRk9PVF9QQUQ7CisgICAgICBuZXdwLT5oZWFkID0gKHBzaXplfENJTlVTRV9CSVQpOworICAgICAgbWFya19pbnVzZV9mb290KG0sIG5ld3AsIHBzaXplKTsKKyAgICAgIGNodW5rX3BsdXNfb2Zmc2V0KG5ld3AsIHBzaXplKS0+aGVhZCA9IEZFTkNFUE9TVF9IRUFEOworICAgICAgY2h1bmtfcGx1c19vZmZzZXQobmV3cCwgcHNpemUrU0laRV9UX1NJWkUpLT5oZWFkID0gMDsKKworICAgICAgaWYgKGNwIDwgbS0+bGVhc3RfYWRkcikKKyAgICAgICAgbS0+bGVhc3RfYWRkciA9IGNwOworICAgICAgaWYgKChtLT5mb290cHJpbnQgKz0gbmV3bW1zaXplIC0gb2xkbW1zaXplKSA+IG0tPm1heF9mb290cHJpbnQpCisgICAgICAgIG0tPm1heF9mb290cHJpbnQgPSBtLT5mb290cHJpbnQ7CisgICAgICBjaGVja19tbWFwcGVkX2NodW5rKG0sIG5ld3ApOworICAgICAgcmV0dXJuIG5ld3A7CisgICAgfQorICB9CisgIHJldHVybiAwOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBtc3BhY2UgbWFuYWdlbWVudCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBJbml0aWFsaXplIHRvcCBjaHVuayBhbmQgaXRzIHNpemUgKi8KK3N0YXRpYyB2b2lkIGluaXRfdG9wKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCwgc2l6ZV90IHBzaXplKSB7CisgIC8qIEVuc3VyZSBhbGlnbm1lbnQgKi8KKyAgc2l6ZV90IG9mZnNldCA9IGFsaWduX29mZnNldChjaHVuazJtZW0ocCkpOworICBwID0gKG1jaHVua3B0cikoKGNoYXIqKXAgKyBvZmZzZXQpOworICBwc2l6ZSAtPSBvZmZzZXQ7CisKKyAgbS0+dG9wID0gcDsKKyAgbS0+dG9wc2l6ZSA9IHBzaXplOworICBwLT5oZWFkID0gcHNpemUgfCBQSU5VU0VfQklUOworICAvKiBzZXQgc2l6ZSBvZiBmYWtlIHRyYWlsaW5nIGNodW5rIGhvbGRpbmcgb3ZlcmhlYWQgc3BhY2Ugb25seSBvbmNlICovCisgIGNodW5rX3BsdXNfb2Zmc2V0KHAsIHBzaXplKS0+aGVhZCA9IFRPUF9GT09UX1NJWkU7CisgIG0tPnRyaW1fY2hlY2sgPSBtcGFyYW1zLnRyaW1fdGhyZXNob2xkOyAvKiByZXNldCBvbiBlYWNoIHVwZGF0ZSAqLworfQorCisvKiBJbml0aWFsaXplIGJpbnMgZm9yIGEgbmV3IG1zdGF0ZSB0aGF0IGlzIG90aGVyd2lzZSB6ZXJvZWQgb3V0ICovCitzdGF0aWMgdm9pZCBpbml0X2JpbnMobXN0YXRlIG0pIHsKKyAgLyogRXN0YWJsaXNoIGNpcmN1bGFyIGxpbmtzIGZvciBzbWFsbGJpbnMgKi8KKyAgYmluZGV4X3QgaTsKKyAgZm9yIChpID0gMDsgaSA8IE5TTUFMTEJJTlM7ICsraSkgeworICAgIHNiaW5wdHIgYmluID0gc21hbGxiaW5fYXQobSxpKTsKKyAgICBiaW4tPmZkID0gYmluLT5iayA9IGJpbjsKKyAgfQorfQorCisjaWYgUFJPQ0VFRF9PTl9FUlJPUgorCisvKiBkZWZhdWx0IGNvcnJ1cHRpb24gYWN0aW9uICovCitzdGF0aWMgdm9pZCByZXNldF9vbl9lcnJvcihtc3RhdGUgbSkgeworICBpbnQgaTsKKyAgKyttYWxsb2NfY29ycnVwdGlvbl9lcnJvcl9jb3VudDsKKyAgLyogUmVpbml0aWFsaXplIGZpZWxkcyB0byBmb3JnZXQgYWJvdXQgYWxsIG1lbW9yeSAqLworICBtLT5zbWFsbGJpbnMgPSBtLT50cmVlYmlucyA9IDA7CisgIG0tPmR2c2l6ZSA9IG0tPnRvcHNpemUgPSAwOworICBtLT5zZWcuYmFzZSA9IDA7CisgIG0tPnNlZy5zaXplID0gMDsKKyAgbS0+c2VnLm5leHQgPSAwOworICBtLT50b3AgPSBtLT5kdiA9IDA7CisgIGZvciAoaSA9IDA7IGkgPCBOVFJFRUJJTlM7ICsraSkKKyAgICAqdHJlZWJpbl9hdChtLCBpKSA9IDA7CisgIGluaXRfYmlucyhtKTsKK30KKyNlbmRpZiAvKiBQUk9DRUVEX09OX0VSUk9SICovCisKKy8qIEFsbG9jYXRlIGNodW5rIGFuZCBwcmVwZW5kIHJlbWFpbmRlciB3aXRoIGNodW5rIGluIHN1Y2Nlc3NvciBiYXNlLiAqLworc3RhdGljIHZvaWQqIHByZXBlbmRfYWxsb2MobXN0YXRlIG0sIGNoYXIqIG5ld2Jhc2UsIGNoYXIqIG9sZGJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbmIpIHsKKyAgbWNodW5rcHRyIHAgPSBhbGlnbl9hc19jaHVuayhuZXdiYXNlKTsKKyAgbWNodW5rcHRyIG9sZGZpcnN0ID0gYWxpZ25fYXNfY2h1bmsob2xkYmFzZSk7CisgIHNpemVfdCBwc2l6ZSA9IChjaGFyKilvbGRmaXJzdCAtIChjaGFyKilwOworICBtY2h1bmtwdHIgcSA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIG5iKTsKKyAgc2l6ZV90IHFzaXplID0gcHNpemUgLSBuYjsKKyAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtLCBwLCBuYik7CisKKyAgYXNzZXJ0KChjaGFyKilvbGRmaXJzdCA+IChjaGFyKilxKTsKKyAgYXNzZXJ0KHBpbnVzZShvbGRmaXJzdCkpOworICBhc3NlcnQocXNpemUgPj0gTUlOX0NIVU5LX1NJWkUpOworCisgIC8qIGNvbnNvbGlkYXRlIHJlbWFpbmRlciB3aXRoIGZpcnN0IGNodW5rIG9mIG9sZCBiYXNlICovCisgIGlmIChvbGRmaXJzdCA9PSBtLT50b3ApIHsKKyAgICBzaXplX3QgdHNpemUgPSBtLT50b3BzaXplICs9IHFzaXplOworICAgIG0tPnRvcCA9IHE7CisgICAgcS0+aGVhZCA9IHRzaXplIHwgUElOVVNFX0JJVDsKKyAgICBjaGVja190b3BfY2h1bmsobSwgcSk7CisgIH0KKyAgZWxzZSBpZiAob2xkZmlyc3QgPT0gbS0+ZHYpIHsKKyAgICBzaXplX3QgZHNpemUgPSBtLT5kdnNpemUgKz0gcXNpemU7CisgICAgbS0+ZHYgPSBxOworICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhxLCBkc2l6ZSk7CisgIH0KKyAgZWxzZSB7CisgICAgaWYgKCFjaW51c2Uob2xkZmlyc3QpKSB7CisgICAgICBzaXplX3QgbnNpemUgPSBjaHVua3NpemUob2xkZmlyc3QpOworICAgICAgdW5saW5rX2NodW5rKG0sIG9sZGZpcnN0LCBuc2l6ZSk7CisgICAgICBvbGRmaXJzdCA9IGNodW5rX3BsdXNfb2Zmc2V0KG9sZGZpcnN0LCBuc2l6ZSk7CisgICAgICBxc2l6ZSArPSBuc2l6ZTsKKyAgICB9CisgICAgc2V0X2ZyZWVfd2l0aF9waW51c2UocSwgcXNpemUsIG9sZGZpcnN0KTsKKyAgICBpbnNlcnRfY2h1bmsobSwgcSwgcXNpemUpOworICAgIGNoZWNrX2ZyZWVfY2h1bmsobSwgcSk7CisgIH0KKworICBjaGVja19tYWxsb2NlZF9jaHVuayhtLCBjaHVuazJtZW0ocCksIG5iKTsKKyAgcmV0dXJuIGNodW5rMm1lbShwKTsKK30KKworCisvKiBBZGQgYSBzZWdtZW50IHRvIGhvbGQgYSBuZXcgbm9uY29udGlndW91cyByZWdpb24gKi8KK3N0YXRpYyB2b2lkIGFkZF9zZWdtZW50KG1zdGF0ZSBtLCBjaGFyKiB0YmFzZSwgc2l6ZV90IHRzaXplLCBmbGFnX3QgbW1hcHBlZCkgeworICAvKiBEZXRlcm1pbmUgbG9jYXRpb25zIGFuZCBzaXplcyBvZiBzZWdtZW50LCBmZW5jZXBvc3RzLCBvbGQgdG9wICovCisgIGNoYXIqIG9sZF90b3AgPSAoY2hhciopbS0+dG9wOworICBtc2VnbWVudHB0ciBvbGRzcCA9IHNlZ21lbnRfaG9sZGluZyhtLCBvbGRfdG9wKTsKKyAgY2hhciogb2xkX2VuZCA9IG9sZHNwLT5iYXNlICsgb2xkc3AtPnNpemU7CisgIHNpemVfdCBzc2l6ZSA9IHBhZF9yZXF1ZXN0KHNpemVvZihzdHJ1Y3QgbWFsbG9jX3NlZ21lbnQpKTsKKyAgY2hhciogcmF3c3AgPSBvbGRfZW5kIC0gKHNzaXplICsgRk9VUl9TSVpFX1RfU0laRVMgKyBDSFVOS19BTElHTl9NQVNLKTsKKyAgc2l6ZV90IG9mZnNldCA9IGFsaWduX29mZnNldChjaHVuazJtZW0ocmF3c3ApKTsKKyAgY2hhciogYXNwID0gcmF3c3AgKyBvZmZzZXQ7CisgIGNoYXIqIGNzcCA9IChhc3AgPCAob2xkX3RvcCArIE1JTl9DSFVOS19TSVpFKSk/IG9sZF90b3AgOiBhc3A7CisgIG1jaHVua3B0ciBzcCA9IChtY2h1bmtwdHIpY3NwOworICBtc2VnbWVudHB0ciBzcyA9IChtc2VnbWVudHB0cikoY2h1bmsybWVtKHNwKSk7CisgIG1jaHVua3B0ciB0bmV4dCA9IGNodW5rX3BsdXNfb2Zmc2V0KHNwLCBzc2l6ZSk7CisgIG1jaHVua3B0ciBwID0gdG5leHQ7CisgIGludCBuZmVuY2VzID0gMDsKKworICAvKiByZXNldCB0b3AgdG8gbmV3IHNwYWNlICovCisgIGluaXRfdG9wKG0sIChtY2h1bmtwdHIpdGJhc2UsIHRzaXplIC0gVE9QX0ZPT1RfU0laRSk7CisKKyAgLyogU2V0IHVwIHNlZ21lbnQgcmVjb3JkICovCisgIGFzc2VydChpc19hbGlnbmVkKHNzKSk7CisgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsobSwgc3AsIHNzaXplKTsKKyAgKnNzID0gbS0+c2VnOyAvKiBQdXNoIGN1cnJlbnQgcmVjb3JkICovCisgIG0tPnNlZy5iYXNlID0gdGJhc2U7CisgIG0tPnNlZy5zaXplID0gdHNpemU7CisgIG0tPnNlZy5zZmxhZ3MgPSBtbWFwcGVkOworICBtLT5zZWcubmV4dCA9IHNzOworCisgIC8qIEluc2VydCB0cmFpbGluZyBmZW5jZXBvc3RzICovCisgIGZvciAoOzspIHsKKyAgICBtY2h1bmtwdHIgbmV4dHAgPSBjaHVua19wbHVzX29mZnNldChwLCBTSVpFX1RfU0laRSk7CisgICAgcC0+aGVhZCA9IEZFTkNFUE9TVF9IRUFEOworICAgICsrbmZlbmNlczsKKyAgICBpZiAoKGNoYXIqKSgmKG5leHRwLT5oZWFkKSkgPCBvbGRfZW5kKQorICAgICAgcCA9IG5leHRwOworICAgIGVsc2UKKyAgICAgIGJyZWFrOworICB9CisgIGFzc2VydChuZmVuY2VzID49IDIpOworCisgIC8qIEluc2VydCB0aGUgcmVzdCBvZiBvbGQgdG9wIGludG8gYSBiaW4gYXMgYW4gb3JkaW5hcnkgZnJlZSBjaHVuayAqLworICBpZiAoY3NwICE9IG9sZF90b3ApIHsKKyAgICBtY2h1bmtwdHIgcSA9IChtY2h1bmtwdHIpb2xkX3RvcDsKKyAgICBzaXplX3QgcHNpemUgPSBjc3AgLSBvbGRfdG9wOworICAgIG1jaHVua3B0ciB0biA9IGNodW5rX3BsdXNfb2Zmc2V0KHEsIHBzaXplKTsKKyAgICBzZXRfZnJlZV93aXRoX3BpbnVzZShxLCBwc2l6ZSwgdG4pOworICAgIGluc2VydF9jaHVuayhtLCBxLCBwc2l6ZSk7CisgIH0KKworICBjaGVja190b3BfY2h1bmsobSwgbS0+dG9wKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU3lzdGVtIGFsbG9jYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogR2V0IG1lbW9yeSBmcm9tIHN5c3RlbSB1c2luZyBNT1JFQ09SRSBvciBNTUFQICovCitzdGF0aWMgdm9pZCogc3lzX2FsbG9jKG1zdGF0ZSBtLCBzaXplX3QgbmIpIHsKKyAgY2hhciogdGJhc2UgPSBDTUZBSUw7CisgIHNpemVfdCB0c2l6ZSA9IDA7CisgIGZsYWdfdCBtbWFwX2ZsYWcgPSAwOworCisgIGluaXRfbXBhcmFtcygpOworCisgIC8qIERpcmVjdGx5IG1hcCBsYXJnZSBjaHVua3MgKi8KKyAgaWYgKHVzZV9tbWFwKG0pICYmIG5iID49IG1wYXJhbXMubW1hcF90aHJlc2hvbGQpIHsKKyAgICB2b2lkKiBtZW0gPSBtbWFwX2FsbG9jKG0sIG5iKTsKKyAgICBpZiAobWVtICE9IDApCisgICAgICByZXR1cm4gbWVtOworICB9CisKKyNpZiBVU0VfTUFYX0FMTE9XRURfRk9PVFBSSU5UCisgIC8qIE1ha2Ugc3VyZSB0aGUgZm9vdHByaW50IGRvZXNuJ3QgZ3JvdyBwYXN0IG1heF9hbGxvd2VkX2Zvb3RwcmludC4KKyAgICogVGhpcyBjb3ZlcnMgYWxsIGNhc2VzIGV4Y2VwdCBmb3Igd2hlcmUgd2UgbmVlZCB0byBwYWdlIGFsaWduLCBiZWxvdy4KKyAgICovCisgIHsKKyAgICBzaXplX3QgbmV3X2Zvb3RwcmludCA9IG0tPmZvb3RwcmludCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICBncmFudWxhcml0eV9hbGlnbihuYiArIFRPUF9GT09UX1NJWkUgKyBTSVpFX1RfT05FKTsKKyAgICBpZiAobmV3X2Zvb3RwcmludCA8PSBtLT5mb290cHJpbnQgfHwgIC8qIENoZWNrIGZvciB3cmFwIGFyb3VuZCAwICovCisgICAgICAgIG5ld19mb290cHJpbnQgPiBtLT5tYXhfYWxsb3dlZF9mb290cHJpbnQpCisgICAgICByZXR1cm4gMDsKKyAgfQorI2VuZGlmCisKKyAgLyoKKyAgICBUcnkgZ2V0dGluZyBtZW1vcnkgaW4gYW55IG9mIHRocmVlIHdheXMgKGluIG1vc3QtcHJlZmVycmVkIHRvCisgICAgbGVhc3QtcHJlZmVycmVkIG9yZGVyKToKKyAgICAxLiBBIGNhbGwgdG8gTU9SRUNPUkUgdGhhdCBjYW4gbm9ybWFsbHkgY29udGlndW91c2x5IGV4dGVuZCBtZW1vcnkuCisgICAgICAgKGRpc2FibGVkIGlmIG5vdCBNT1JFQ09SRV9DT05USUdVT1VTIG9yIG5vdCBIQVZFX01PUkVDT1JFIG9yCisgICAgICAgb3IgbWFpbiBzcGFjZSBpcyBtbWFwcGVkIG9yIGEgcHJldmlvdXMgY29udGlndW91cyBjYWxsIGZhaWxlZCkKKyAgICAyLiBBIGNhbGwgdG8gTU1BUCBuZXcgc3BhY2UgKGRpc2FibGVkIGlmIG5vdCBIQVZFX01NQVApLgorICAgICAgIE5vdGUgdGhhdCB1bmRlciB0aGUgZGVmYXVsdCBzZXR0aW5ncywgaWYgTU9SRUNPUkUgaXMgdW5hYmxlIHRvCisgICAgICAgZnVsZmlsbCBhIHJlcXVlc3QsIGFuZCBIQVZFX01NQVAgaXMgdHJ1ZSwgdGhlbiBtbWFwIGlzCisgICAgICAgdXNlZCBhcyBhIG5vbmNvbnRpZ3VvdXMgc3lzdGVtIGFsbG9jYXRvci4gVGhpcyBpcyBhIHVzZWZ1bCBiYWNrdXAKKyAgICAgICBzdHJhdGVneSBmb3Igc3lzdGVtcyB3aXRoIGhvbGVzIGluIGFkZHJlc3Mgc3BhY2VzIC0tIGluIHRoaXMgY2FzZQorICAgICAgIHNicmsgY2Fubm90IGNvbnRpZ3VvdXNseSBleHBhbmQgdGhlIGhlYXAsIGJ1dCBtbWFwIG1heSBiZSBhYmxlIHRvCisgICAgICAgZmluZCBzcGFjZS4KKyAgICAzLiBBIGNhbGwgdG8gTU9SRUNPUkUgdGhhdCBjYW5ub3QgdXN1YWxseSBjb250aWd1b3VzbHkgZXh0ZW5kIG1lbW9yeS4KKyAgICAgICAoZGlzYWJsZWQgaWYgbm90IEhBVkVfTU9SRUNPUkUpCisgICovCisKKyAgaWYgKE1PUkVDT1JFX0NPTlRJR1VPVVMgJiYgIXVzZV9ub25jb250aWd1b3VzKG0pKSB7CisgICAgY2hhciogYnIgPSBDTUZBSUw7CisgICAgbXNlZ21lbnRwdHIgc3MgPSAobS0+dG9wID09IDApPyAwIDogc2VnbWVudF9ob2xkaW5nKG0sIChjaGFyKiltLT50b3ApOworICAgIHNpemVfdCBhc2l6ZSA9IDA7CisgICAgQUNRVUlSRV9NT1JFQ09SRV9MT0NLKCk7CisKKyAgICBpZiAoc3MgPT0gMCkgeyAgLyogRmlyc3QgdGltZSB0aHJvdWdoIG9yIHJlY292ZXJ5ICovCisgICAgICBjaGFyKiBiYXNlID0gKGNoYXIqKUNBTExfTU9SRUNPUkUoMCk7CisgICAgICBpZiAoYmFzZSAhPSBDTUZBSUwpIHsKKyAgICAgICAgYXNpemUgPSBncmFudWxhcml0eV9hbGlnbihuYiArIFRPUF9GT09UX1NJWkUgKyBTSVpFX1RfT05FKTsKKyAgICAgICAgLyogQWRqdXN0IHRvIGVuZCBvbiBhIHBhZ2UgYm91bmRhcnkgKi8KKyAgICAgICAgaWYgKCFpc19wYWdlX2FsaWduZWQoYmFzZSkpIHsKKyAgICAgICAgICBhc2l6ZSArPSAocGFnZV9hbGlnbigoc2l6ZV90KWJhc2UpIC0gKHNpemVfdCliYXNlKTsKKyNpZiBVU0VfTUFYX0FMTE9XRURfRk9PVFBSSU5UCisgICAgICAgICAgLyogSWYgdGhlIGFsaWdubWVudCBwdXNoZXMgdXMgb3ZlciBtYXhfYWxsb3dlZF9mb290cHJpbnQsCisgICAgICAgICAgICogcG9pc29uIHRoZSB1cGNvbWluZyBjYWxsIHRvIE1PUkVDT1JFIGFuZCBjb250aW51ZS4KKyAgICAgICAgICAgKi8KKyAgICAgICAgICB7CisgICAgICAgICAgICBzaXplX3QgbmV3X2Zvb3RwcmludCA9IG0tPmZvb3RwcmludCArIGFzaXplOworICAgICAgICAgICAgaWYgKG5ld19mb290cHJpbnQgPD0gbS0+Zm9vdHByaW50IHx8ICAvKiBDaGVjayBmb3Igd3JhcCBhcm91bmQgMCAqLworICAgICAgICAgICAgICAgIG5ld19mb290cHJpbnQgPiBtLT5tYXhfYWxsb3dlZF9mb290cHJpbnQpIHsKKyAgICAgICAgICAgICAgYXNpemUgPSBIQUxGX01BWF9TSVpFX1Q7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorI2VuZGlmCisgICAgICAgIH0KKyAgICAgICAgLyogQ2FuJ3QgY2FsbCBNT1JFQ09SRSBpZiBzaXplIGlzIG5lZ2F0aXZlIHdoZW4gdHJlYXRlZCBhcyBzaWduZWQgKi8KKyAgICAgICAgaWYgKGFzaXplIDwgSEFMRl9NQVhfU0laRV9UICYmCisgICAgICAgICAgICAoYnIgPSAoY2hhciopKENBTExfTU9SRUNPUkUoYXNpemUpKSkgPT0gYmFzZSkgeworICAgICAgICAgIHRiYXNlID0gYmFzZTsKKyAgICAgICAgICB0c2l6ZSA9IGFzaXplOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgLyogU3VidHJhY3Qgb3V0IGV4aXN0aW5nIGF2YWlsYWJsZSB0b3Agc3BhY2UgZnJvbSBNT1JFQ09SRSByZXF1ZXN0LiAqLworICAgICAgYXNpemUgPSBncmFudWxhcml0eV9hbGlnbihuYiAtIG0tPnRvcHNpemUgKyBUT1BfRk9PVF9TSVpFICsgU0laRV9UX09ORSk7CisgICAgICAvKiBVc2UgbWVtIGhlcmUgb25seSBpZiBpdCBkaWQgY29udGludW91c2x5IGV4dGVuZCBvbGQgc3BhY2UgKi8KKyAgICAgIGlmIChhc2l6ZSA8IEhBTEZfTUFYX1NJWkVfVCAmJgorICAgICAgICAgIChiciA9IChjaGFyKikoQ0FMTF9NT1JFQ09SRShhc2l6ZSkpKSA9PSBzcy0+YmFzZStzcy0+c2l6ZSkgeworICAgICAgICB0YmFzZSA9IGJyOworICAgICAgICB0c2l6ZSA9IGFzaXplOworICAgICAgfQorICAgIH0KKworICAgIGlmICh0YmFzZSA9PSBDTUZBSUwpIHsgICAgLyogQ29wZSB3aXRoIHBhcnRpYWwgZmFpbHVyZSAqLworICAgICAgaWYgKGJyICE9IENNRkFJTCkgeyAgICAvKiBUcnkgdG8gdXNlL2V4dGVuZCB0aGUgc3BhY2Ugd2UgZGlkIGdldCAqLworICAgICAgICBpZiAoYXNpemUgPCBIQUxGX01BWF9TSVpFX1QgJiYKKyAgICAgICAgICAgIGFzaXplIDwgbmIgKyBUT1BfRk9PVF9TSVpFICsgU0laRV9UX09ORSkgeworICAgICAgICAgIHNpemVfdCBlc2l6ZSA9IGdyYW51bGFyaXR5X2FsaWduKG5iICsgVE9QX0ZPT1RfU0laRSArIFNJWkVfVF9PTkUgLSBhc2l6ZSk7CisgICAgICAgICAgaWYgKGVzaXplIDwgSEFMRl9NQVhfU0laRV9UKSB7CisgICAgICAgICAgICBjaGFyKiBlbmQgPSAoY2hhciopQ0FMTF9NT1JFQ09SRShlc2l6ZSk7CisgICAgICAgICAgICBpZiAoZW5kICE9IENNRkFJTCkKKyAgICAgICAgICAgICAgYXNpemUgKz0gZXNpemU7CisgICAgICAgICAgICBlbHNlIHsgICAgICAgICAgICAvKiBDYW4ndCB1c2U7IHRyeSB0byByZWxlYXNlICovCisgICAgICAgICAgICAgIENBTExfTU9SRUNPUkUoLWFzaXplKTsKKyAgICAgICAgICAgICAgYnIgPSBDTUZBSUw7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgICBpZiAoYnIgIT0gQ01GQUlMKSB7ICAgIC8qIFVzZSB0aGUgc3BhY2Ugd2UgZGlkIGdldCAqLworICAgICAgICB0YmFzZSA9IGJyOworICAgICAgICB0c2l6ZSA9IGFzaXplOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgICBkaXNhYmxlX2NvbnRpZ3VvdXMobSk7IC8qIERvbid0IHRyeSBjb250aWd1b3VzIHBhdGggaW4gdGhlIGZ1dHVyZSAqLworICAgIH0KKworICAgIFJFTEVBU0VfTU9SRUNPUkVfTE9DSygpOworICB9CisKKyAgaWYgKEhBVkVfTU1BUCAmJiB0YmFzZSA9PSBDTUZBSUwpIHsgIC8qIFRyeSBNTUFQICovCisgICAgc2l6ZV90IHJlcSA9IG5iICsgVE9QX0ZPT1RfU0laRSArIFNJWkVfVF9PTkU7CisgICAgc2l6ZV90IHJzaXplID0gZ3JhbnVsYXJpdHlfYWxpZ24ocmVxKTsKKyAgICBpZiAocnNpemUgPiBuYikgeyAvKiBGYWlsIGlmIHdyYXBzIGFyb3VuZCB6ZXJvICovCisgICAgICBjaGFyKiBtcCA9IChjaGFyKikoQ0FMTF9NTUFQKHJzaXplKSk7CisgICAgICBpZiAobXAgIT0gQ01GQUlMKSB7CisgICAgICAgIHRiYXNlID0gbXA7CisgICAgICAgIHRzaXplID0gcnNpemU7CisgICAgICAgIG1tYXBfZmxhZyA9IElTX01NQVBQRURfQklUOworICAgICAgfQorICAgIH0KKyAgfQorCisgIGlmIChIQVZFX01PUkVDT1JFICYmIHRiYXNlID09IENNRkFJTCkgeyAvKiBUcnkgbm9uY29udGlndW91cyBNT1JFQ09SRSAqLworICAgIHNpemVfdCBhc2l6ZSA9IGdyYW51bGFyaXR5X2FsaWduKG5iICsgVE9QX0ZPT1RfU0laRSArIFNJWkVfVF9PTkUpOworICAgIGlmIChhc2l6ZSA8IEhBTEZfTUFYX1NJWkVfVCkgeworICAgICAgY2hhciogYnIgPSBDTUZBSUw7CisgICAgICBjaGFyKiBlbmQgPSBDTUZBSUw7CisgICAgICBBQ1FVSVJFX01PUkVDT1JFX0xPQ0soKTsKKyAgICAgIGJyID0gKGNoYXIqKShDQUxMX01PUkVDT1JFKGFzaXplKSk7CisgICAgICBlbmQgPSAoY2hhciopKENBTExfTU9SRUNPUkUoMCkpOworICAgICAgUkVMRUFTRV9NT1JFQ09SRV9MT0NLKCk7CisgICAgICBpZiAoYnIgIT0gQ01GQUlMICYmIGVuZCAhPSBDTUZBSUwgJiYgYnIgPCBlbmQpIHsKKyAgICAgICAgc2l6ZV90IHNzaXplID0gZW5kIC0gYnI7CisgICAgICAgIGlmIChzc2l6ZSA+IG5iICsgVE9QX0ZPT1RfU0laRSkgeworICAgICAgICAgIHRiYXNlID0gYnI7CisgICAgICAgICAgdHNpemUgPSBzc2l6ZTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorCisgIGlmICh0YmFzZSAhPSBDTUZBSUwpIHsKKworICAgIGlmICgobS0+Zm9vdHByaW50ICs9IHRzaXplKSA+IG0tPm1heF9mb290cHJpbnQpCisgICAgICBtLT5tYXhfZm9vdHByaW50ID0gbS0+Zm9vdHByaW50OworCisgICAgaWYgKCFpc19pbml0aWFsaXplZChtKSkgeyAvKiBmaXJzdC10aW1lIGluaXRpYWxpemF0aW9uICovCisgICAgICBtLT5zZWcuYmFzZSA9IG0tPmxlYXN0X2FkZHIgPSB0YmFzZTsKKyAgICAgIG0tPnNlZy5zaXplID0gdHNpemU7CisgICAgICBtLT5zZWcuc2ZsYWdzID0gbW1hcF9mbGFnOworICAgICAgbS0+bWFnaWMgPSBtcGFyYW1zLm1hZ2ljOworICAgICAgaW5pdF9iaW5zKG0pOworICAgICAgaWYgKGlzX2dsb2JhbChtKSkgCisgICAgICAgIGluaXRfdG9wKG0sIChtY2h1bmtwdHIpdGJhc2UsIHRzaXplIC0gVE9QX0ZPT1RfU0laRSk7CisgICAgICBlbHNlIHsKKyAgICAgICAgLyogT2Zmc2V0IHRvcCBieSBlbWJlZGRlZCBtYWxsb2Nfc3RhdGUgKi8KKyAgICAgICAgbWNodW5rcHRyIG1uID0gbmV4dF9jaHVuayhtZW0yY2h1bmsobSkpOworICAgICAgICBpbml0X3RvcChtLCBtbiwgKHNpemVfdCkoKHRiYXNlICsgdHNpemUpIC0gKGNoYXIqKW1uKSAtVE9QX0ZPT1RfU0laRSk7CisgICAgICB9CisgICAgfQorCisgICAgZWxzZSB7CisgICAgICAvKiBUcnkgdG8gbWVyZ2Ugd2l0aCBhbiBleGlzdGluZyBzZWdtZW50ICovCisgICAgICBtc2VnbWVudHB0ciBzcCA9ICZtLT5zZWc7CisgICAgICB3aGlsZSAoc3AgIT0gMCAmJiB0YmFzZSAhPSBzcC0+YmFzZSArIHNwLT5zaXplKQorICAgICAgICBzcCA9IHNwLT5uZXh0OworICAgICAgaWYgKHNwICE9IDAgJiYKKyAgICAgICAgICAhaXNfZXh0ZXJuX3NlZ21lbnQoc3ApICYmCisgICAgICAgICAgKHNwLT5zZmxhZ3MgJiBJU19NTUFQUEVEX0JJVCkgPT0gbW1hcF9mbGFnICYmCisgICAgICAgICAgc2VnbWVudF9ob2xkcyhzcCwgbS0+dG9wKSkgeyAvKiBhcHBlbmQgKi8KKyAgICAgICAgc3AtPnNpemUgKz0gdHNpemU7CisgICAgICAgIGluaXRfdG9wKG0sIG0tPnRvcCwgbS0+dG9wc2l6ZSArIHRzaXplKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBpZiAodGJhc2UgPCBtLT5sZWFzdF9hZGRyKQorICAgICAgICAgIG0tPmxlYXN0X2FkZHIgPSB0YmFzZTsKKyAgICAgICAgc3AgPSAmbS0+c2VnOworICAgICAgICB3aGlsZSAoc3AgIT0gMCAmJiBzcC0+YmFzZSAhPSB0YmFzZSArIHRzaXplKQorICAgICAgICAgIHNwID0gc3AtPm5leHQ7CisgICAgICAgIGlmIChzcCAhPSAwICYmCisgICAgICAgICAgICAhaXNfZXh0ZXJuX3NlZ21lbnQoc3ApICYmCisgICAgICAgICAgICAoc3AtPnNmbGFncyAmIElTX01NQVBQRURfQklUKSA9PSBtbWFwX2ZsYWcpIHsKKyAgICAgICAgICBjaGFyKiBvbGRiYXNlID0gc3AtPmJhc2U7CisgICAgICAgICAgc3AtPmJhc2UgPSB0YmFzZTsKKyAgICAgICAgICBzcC0+c2l6ZSArPSB0c2l6ZTsKKyAgICAgICAgICByZXR1cm4gcHJlcGVuZF9hbGxvYyhtLCB0YmFzZSwgb2xkYmFzZSwgbmIpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICBhZGRfc2VnbWVudChtLCB0YmFzZSwgdHNpemUsIG1tYXBfZmxhZyk7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKG5iIDwgbS0+dG9wc2l6ZSkgeyAvKiBBbGxvY2F0ZSBmcm9tIG5ldyBvciBleHRlbmRlZCB0b3Agc3BhY2UgKi8KKyAgICAgIHNpemVfdCByc2l6ZSA9IG0tPnRvcHNpemUgLT0gbmI7CisgICAgICBtY2h1bmtwdHIgcCA9IG0tPnRvcDsKKyAgICAgIG1jaHVua3B0ciByID0gbS0+dG9wID0gY2h1bmtfcGx1c19vZmZzZXQocCwgbmIpOworICAgICAgci0+aGVhZCA9IHJzaXplIHwgUElOVVNFX0JJVDsKKyAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsobSwgcCwgbmIpOworICAgICAgY2hlY2tfdG9wX2NodW5rKG0sIG0tPnRvcCk7CisgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhtLCBjaHVuazJtZW0ocCksIG5iKTsKKyAgICAgIHJldHVybiBjaHVuazJtZW0ocCk7CisgICAgfQorICB9CisKKyAgTUFMTE9DX0ZBSUxVUkVfQUNUSU9OOworICByZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIHN5c3RlbSBkZWFsbG9jYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogVW5tYXAgYW5kIHVubGluayBhbnkgbW1hcHBlZCBzZWdtZW50cyB0aGF0IGRvbid0IGNvbnRhaW4gdXNlZCBjaHVua3MgKi8KK3N0YXRpYyBzaXplX3QgcmVsZWFzZV91bnVzZWRfc2VnbWVudHMobXN0YXRlIG0pIHsKKyAgc2l6ZV90IHJlbGVhc2VkID0gMDsKKyAgbXNlZ21lbnRwdHIgcHJlZCA9ICZtLT5zZWc7CisgIG1zZWdtZW50cHRyIHNwID0gcHJlZC0+bmV4dDsKKyAgd2hpbGUgKHNwICE9IDApIHsKKyAgICBjaGFyKiBiYXNlID0gc3AtPmJhc2U7CisgICAgc2l6ZV90IHNpemUgPSBzcC0+c2l6ZTsKKyAgICBtc2VnbWVudHB0ciBuZXh0ID0gc3AtPm5leHQ7CisgICAgaWYgKGlzX21tYXBwZWRfc2VnbWVudChzcCkgJiYgIWlzX2V4dGVybl9zZWdtZW50KHNwKSkgeworICAgICAgbWNodW5rcHRyIHAgPSBhbGlnbl9hc19jaHVuayhiYXNlKTsKKyAgICAgIHNpemVfdCBwc2l6ZSA9IGNodW5rc2l6ZShwKTsKKyAgICAgIC8qIENhbiB1bm1hcCBpZiBmaXJzdCBjaHVuayBob2xkcyBlbnRpcmUgc2VnbWVudCBhbmQgbm90IHBpbm5lZCAqLworICAgICAgaWYgKCFjaW51c2UocCkgJiYgKGNoYXIqKXAgKyBwc2l6ZSA+PSBiYXNlICsgc2l6ZSAtIFRPUF9GT09UX1NJWkUpIHsKKyAgICAgICAgdGNodW5rcHRyIHRwID0gKHRjaHVua3B0cilwOworICAgICAgICBhc3NlcnQoc2VnbWVudF9ob2xkcyhzcCwgKGNoYXIqKXNwKSk7CisgICAgICAgIGlmIChwID09IG0tPmR2KSB7CisgICAgICAgICAgbS0+ZHYgPSAwOworICAgICAgICAgIG0tPmR2c2l6ZSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgdW5saW5rX2xhcmdlX2NodW5rKG0sIHRwKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoQ0FMTF9NVU5NQVAoYmFzZSwgc2l6ZSkgPT0gMCkgeworICAgICAgICAgIHJlbGVhc2VkICs9IHNpemU7CisgICAgICAgICAgbS0+Zm9vdHByaW50IC09IHNpemU7CisgICAgICAgICAgLyogdW5saW5rIG9ic29sZXRlZCByZWNvcmQgKi8KKyAgICAgICAgICBzcCA9IHByZWQ7CisgICAgICAgICAgc3AtPm5leHQgPSBuZXh0OworICAgICAgICB9CisgICAgICAgIGVsc2UgeyAvKiBiYWNrIG91dCBpZiBjYW5ub3QgdW5tYXAgKi8KKyAgICAgICAgICBpbnNlcnRfbGFyZ2VfY2h1bmsobSwgdHAsIHBzaXplKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICBwcmVkID0gc3A7CisgICAgc3AgPSBuZXh0OworICB9CisgIHJldHVybiByZWxlYXNlZDsKK30KKworc3RhdGljIGludCBzeXNfdHJpbShtc3RhdGUgbSwgc2l6ZV90IHBhZCkgeworICBzaXplX3QgcmVsZWFzZWQgPSAwOworICBpZiAocGFkIDwgTUFYX1JFUVVFU1QgJiYgaXNfaW5pdGlhbGl6ZWQobSkpIHsKKyAgICBwYWQgKz0gVE9QX0ZPT1RfU0laRTsgLyogZW5zdXJlIGVub3VnaCByb29tIGZvciBzZWdtZW50IG92ZXJoZWFkICovCisKKyAgICBpZiAobS0+dG9wc2l6ZSA+IHBhZCkgeworICAgICAgLyogU2hyaW5rIHRvcCBzcGFjZSBpbiBncmFudWxhcml0eS1zaXplIHVuaXRzLCBrZWVwaW5nIGF0IGxlYXN0IG9uZSAqLworICAgICAgc2l6ZV90IHVuaXQgPSBtcGFyYW1zLmdyYW51bGFyaXR5OworICAgICAgc2l6ZV90IGV4dHJhID0gKChtLT50b3BzaXplIC0gcGFkICsgKHVuaXQgLSBTSVpFX1RfT05FKSkgLyB1bml0IC0KKyAgICAgICAgICAgICAgICAgICAgICBTSVpFX1RfT05FKSAqIHVuaXQ7CisgICAgICBtc2VnbWVudHB0ciBzcCA9IHNlZ21lbnRfaG9sZGluZyhtLCAoY2hhciopbS0+dG9wKTsKKworICAgICAgaWYgKCFpc19leHRlcm5fc2VnbWVudChzcCkpIHsKKyAgICAgICAgaWYgKGlzX21tYXBwZWRfc2VnbWVudChzcCkpIHsKKyAgICAgICAgICBpZiAoSEFWRV9NTUFQICYmCisgICAgICAgICAgICAgIHNwLT5zaXplID49IGV4dHJhICYmCisgICAgICAgICAgICAgICFoYXNfc2VnbWVudF9saW5rKG0sIHNwKSkgeyAvKiBjYW4ndCBzaHJpbmsgaWYgcGlubmVkICovCisgICAgICAgICAgICBzaXplX3QgbmV3c2l6ZSA9IHNwLT5zaXplIC0gZXh0cmE7CisgICAgICAgICAgICAvKiBQcmVmZXIgbXJlbWFwLCBmYWxsIGJhY2sgdG8gbXVubWFwICovCisgICAgICAgICAgICBpZiAoKENBTExfTVJFTUFQKHNwLT5iYXNlLCBzcC0+c2l6ZSwgbmV3c2l6ZSwgMCkgIT0gTUZBSUwpIHx8CisgICAgICAgICAgICAgICAgKENBTExfTVVOTUFQKHNwLT5iYXNlICsgbmV3c2l6ZSwgZXh0cmEpID09IDApKSB7CisgICAgICAgICAgICAgIHJlbGVhc2VkID0gZXh0cmE7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKEhBVkVfTU9SRUNPUkUpIHsKKyAgICAgICAgICBpZiAoZXh0cmEgPj0gSEFMRl9NQVhfU0laRV9UKSAvKiBBdm9pZCB3cmFwcGluZyBuZWdhdGl2ZSAqLworICAgICAgICAgICAgZXh0cmEgPSAoSEFMRl9NQVhfU0laRV9UKSArIFNJWkVfVF9PTkUgLSB1bml0OworICAgICAgICAgIEFDUVVJUkVfTU9SRUNPUkVfTE9DSygpOworICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIE1ha2Ugc3VyZSBlbmQgb2YgbWVtb3J5IGlzIHdoZXJlIHdlIGxhc3Qgc2V0IGl0LiAqLworICAgICAgICAgICAgY2hhciogb2xkX2JyID0gKGNoYXIqKShDQUxMX01PUkVDT1JFKDApKTsKKyAgICAgICAgICAgIGlmIChvbGRfYnIgPT0gc3AtPmJhc2UgKyBzcC0+c2l6ZSkgeworICAgICAgICAgICAgICBjaGFyKiByZWxfYnIgPSAoY2hhciopKENBTExfTU9SRUNPUkUoLWV4dHJhKSk7CisgICAgICAgICAgICAgIGNoYXIqIG5ld19iciA9IChjaGFyKikoQ0FMTF9NT1JFQ09SRSgwKSk7CisgICAgICAgICAgICAgIGlmIChyZWxfYnIgIT0gQ01GQUlMICYmIG5ld19iciA8IG9sZF9icikKKyAgICAgICAgICAgICAgICByZWxlYXNlZCA9IG9sZF9iciAtIG5ld19icjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgUkVMRUFTRV9NT1JFQ09SRV9MT0NLKCk7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaWYgKHJlbGVhc2VkICE9IDApIHsKKyAgICAgICAgc3AtPnNpemUgLT0gcmVsZWFzZWQ7CisgICAgICAgIG0tPmZvb3RwcmludCAtPSByZWxlYXNlZDsKKyAgICAgICAgaW5pdF90b3AobSwgbS0+dG9wLCBtLT50b3BzaXplIC0gcmVsZWFzZWQpOworICAgICAgICBjaGVja190b3BfY2h1bmsobSwgbS0+dG9wKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvKiBVbm1hcCBhbnkgdW51c2VkIG1tYXBwZWQgc2VnbWVudHMgKi8KKyAgICBpZiAoSEFWRV9NTUFQKSAKKyAgICAgIHJlbGVhc2VkICs9IHJlbGVhc2VfdW51c2VkX3NlZ21lbnRzKG0pOworCisgICAgLyogT24gZmFpbHVyZSwgZGlzYWJsZSBhdXRvdHJpbSB0byBhdm9pZCByZXBlYXRlZCBmYWlsZWQgZnV0dXJlIGNhbGxzICovCisgICAgaWYgKHJlbGVhc2VkID09IDApCisgICAgICBtLT50cmltX2NoZWNrID0gTUFYX1NJWkVfVDsKKyAgfQorCisgIHJldHVybiAocmVsZWFzZWQgIT0gMCk/IDEgOiAwOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIG1hbGxvYyBzdXBwb3J0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBhbGxvY2F0ZSBhIGxhcmdlIHJlcXVlc3QgZnJvbSB0aGUgYmVzdCBmaXR0aW5nIGNodW5rIGluIGEgdHJlZWJpbiAqLworc3RhdGljIHZvaWQqIHRtYWxsb2NfbGFyZ2UobXN0YXRlIG0sIHNpemVfdCBuYikgeworICB0Y2h1bmtwdHIgdiA9IDA7CisgIHNpemVfdCByc2l6ZSA9IC1uYjsgLyogVW5zaWduZWQgbmVnYXRpb24gKi8KKyAgdGNodW5rcHRyIHQ7CisgIGJpbmRleF90IGlkeDsKKyAgY29tcHV0ZV90cmVlX2luZGV4KG5iLCBpZHgpOworCisgIGlmICgodCA9ICp0cmVlYmluX2F0KG0sIGlkeCkpICE9IDApIHsKKyAgICAvKiBUcmF2ZXJzZSB0cmVlIGZvciB0aGlzIGJpbiBsb29raW5nIGZvciBub2RlIHdpdGggc2l6ZSA9PSBuYiAqLworICAgIHNpemVfdCBzaXplYml0cyA9IG5iIDw8IGxlZnRzaGlmdF9mb3JfdHJlZV9pbmRleChpZHgpOworICAgIHRjaHVua3B0ciByc3QgPSAwOyAgLyogVGhlIGRlZXBlc3QgdW50YWtlbiByaWdodCBzdWJ0cmVlICovCisgICAgZm9yICg7OykgeworICAgICAgdGNodW5rcHRyIHJ0OworICAgICAgc2l6ZV90IHRyZW0gPSBjaHVua3NpemUodCkgLSBuYjsKKyAgICAgIGlmICh0cmVtIDwgcnNpemUpIHsKKyAgICAgICAgdiA9IHQ7CisgICAgICAgIGlmICgocnNpemUgPSB0cmVtKSA9PSAwKQorICAgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgcnQgPSB0LT5jaGlsZFsxXTsKKyAgICAgIHQgPSB0LT5jaGlsZFsoc2l6ZWJpdHMgPj4gKFNJWkVfVF9CSVRTSVpFLVNJWkVfVF9PTkUpKSAmIDFdOworICAgICAgaWYgKHJ0ICE9IDAgJiYgcnQgIT0gdCkKKyAgICAgICAgcnN0ID0gcnQ7CisgICAgICBpZiAodCA9PSAwKSB7CisgICAgICAgIHQgPSByc3Q7IC8qIHNldCB0IHRvIGxlYXN0IHN1YnRyZWUgaG9sZGluZyBzaXplcyA+IG5iICovCisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgc2l6ZWJpdHMgPDw9IDE7CisgICAgfQorICB9CisKKyAgaWYgKHQgPT0gMCAmJiB2ID09IDApIHsgLyogc2V0IHQgdG8gcm9vdCBvZiBuZXh0IG5vbi1lbXB0eSB0cmVlYmluICovCisgICAgYmlubWFwX3QgbGVmdGJpdHMgPSBsZWZ0X2JpdHMoaWR4MmJpdChpZHgpKSAmIG0tPnRyZWVtYXA7CisgICAgaWYgKGxlZnRiaXRzICE9IDApIHsKKyAgICAgIGJpbmRleF90IGk7CisgICAgICBiaW5tYXBfdCBsZWFzdGJpdCA9IGxlYXN0X2JpdChsZWZ0Yml0cyk7CisgICAgICBjb21wdXRlX2JpdDJpZHgobGVhc3RiaXQsIGkpOworICAgICAgdCA9ICp0cmVlYmluX2F0KG0sIGkpOworICAgIH0KKyAgfQorCisgIHdoaWxlICh0ICE9IDApIHsgLyogZmluZCBzbWFsbGVzdCBvZiB0cmVlIG9yIHN1YnRyZWUgKi8KKyAgICBzaXplX3QgdHJlbSA9IGNodW5rc2l6ZSh0KSAtIG5iOworICAgIGlmICh0cmVtIDwgcnNpemUpIHsKKyAgICAgIHJzaXplID0gdHJlbTsKKyAgICAgIHYgPSB0OworICAgIH0KKyAgICB0ID0gbGVmdG1vc3RfY2hpbGQodCk7CisgIH0KKworICAvKiAgSWYgZHYgaXMgYSBiZXR0ZXIgZml0LCByZXR1cm4gMCBzbyBtYWxsb2Mgd2lsbCB1c2UgaXQgKi8KKyAgaWYgKHYgIT0gMCAmJiByc2l6ZSA8IChzaXplX3QpKG0tPmR2c2l6ZSAtIG5iKSkgeworICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MobSwgdikpKSB7IC8qIHNwbGl0ICovCisgICAgICBtY2h1bmtwdHIgciA9IGNodW5rX3BsdXNfb2Zmc2V0KHYsIG5iKTsKKyAgICAgIGFzc2VydChjaHVua3NpemUodikgPT0gcnNpemUgKyBuYik7CisgICAgICBpZiAoUlRDSEVDSyhva19uZXh0KHYsIHIpKSkgeworICAgICAgICB1bmxpbmtfbGFyZ2VfY2h1bmsobSwgdik7CisgICAgICAgIGlmIChyc2l6ZSA8IE1JTl9DSFVOS19TSVpFKQorICAgICAgICAgIHNldF9pbnVzZV9hbmRfcGludXNlKG0sIHYsIChyc2l6ZSArIG5iKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsobSwgdiwgbmIpOworICAgICAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhyLCByc2l6ZSk7CisgICAgICAgICAgaW5zZXJ0X2NodW5rKG0sIHIsIHJzaXplKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gY2h1bmsybWVtKHYpOworICAgICAgfQorICAgIH0KKyAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihtKTsKKyAgfQorICByZXR1cm4gMDsKK30KKworLyogYWxsb2NhdGUgYSBzbWFsbCByZXF1ZXN0IGZyb20gdGhlIGJlc3QgZml0dGluZyBjaHVuayBpbiBhIHRyZWViaW4gKi8KK3N0YXRpYyB2b2lkKiB0bWFsbG9jX3NtYWxsKG1zdGF0ZSBtLCBzaXplX3QgbmIpIHsKKyAgdGNodW5rcHRyIHQsIHY7CisgIHNpemVfdCByc2l6ZTsKKyAgYmluZGV4X3QgaTsKKyAgYmlubWFwX3QgbGVhc3RiaXQgPSBsZWFzdF9iaXQobS0+dHJlZW1hcCk7CisgIGNvbXB1dGVfYml0MmlkeChsZWFzdGJpdCwgaSk7CisKKyAgdiA9IHQgPSAqdHJlZWJpbl9hdChtLCBpKTsKKyAgcnNpemUgPSBjaHVua3NpemUodCkgLSBuYjsKKworICB3aGlsZSAoKHQgPSBsZWZ0bW9zdF9jaGlsZCh0KSkgIT0gMCkgeworICAgIHNpemVfdCB0cmVtID0gY2h1bmtzaXplKHQpIC0gbmI7CisgICAgaWYgKHRyZW0gPCByc2l6ZSkgeworICAgICAgcnNpemUgPSB0cmVtOworICAgICAgdiA9IHQ7CisgICAgfQorICB9CisKKyAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhtLCB2KSkpIHsKKyAgICBtY2h1bmtwdHIgciA9IGNodW5rX3BsdXNfb2Zmc2V0KHYsIG5iKTsKKyAgICBhc3NlcnQoY2h1bmtzaXplKHYpID09IHJzaXplICsgbmIpOworICAgIGlmIChSVENIRUNLKG9rX25leHQodiwgcikpKSB7CisgICAgICB1bmxpbmtfbGFyZ2VfY2h1bmsobSwgdik7CisgICAgICBpZiAocnNpemUgPCBNSU5fQ0hVTktfU0laRSkKKyAgICAgICAgc2V0X2ludXNlX2FuZF9waW51c2UobSwgdiwgKHJzaXplICsgbmIpKTsKKyAgICAgIGVsc2UgeworICAgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG0sIHYsIG5iKTsKKyAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHIsIHJzaXplKTsKKyAgICAgICAgcmVwbGFjZV9kdihtLCByLCByc2l6ZSk7CisgICAgICB9CisgICAgICByZXR1cm4gY2h1bmsybWVtKHYpOworICAgIH0KKyAgfQorCisgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKG0pOworICByZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHJlYWxsb2Mgc3VwcG9ydCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHZvaWQqIGludGVybmFsX3JlYWxsb2MobXN0YXRlIG0sIHZvaWQqIG9sZG1lbSwgc2l6ZV90IGJ5dGVzKSB7CisgIGlmIChieXRlcyA+PSBNQVhfUkVRVUVTVCkgeworICAgIE1BTExPQ19GQUlMVVJFX0FDVElPTjsKKyAgICByZXR1cm4gMDsKKyAgfQorICBpZiAoIVBSRUFDVElPTihtKSkgeworICAgIG1jaHVua3B0ciBvbGRwID0gbWVtMmNodW5rKG9sZG1lbSk7CisgICAgc2l6ZV90IG9sZHNpemUgPSBjaHVua3NpemUob2xkcCk7CisgICAgbWNodW5rcHRyIG5leHQgPSBjaHVua19wbHVzX29mZnNldChvbGRwLCBvbGRzaXplKTsKKyAgICBtY2h1bmtwdHIgbmV3cCA9IDA7CisgICAgdm9pZCogZXh0cmEgPSAwOworCisgICAgLyogVHJ5IHRvIGVpdGhlciBzaHJpbmsgb3IgZXh0ZW5kIGludG8gdG9wLiBFbHNlIG1hbGxvYy1jb3B5LWZyZWUgKi8KKworICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MobSwgb2xkcCkgJiYgb2tfY2ludXNlKG9sZHApICYmCisgICAgICAgICAgICAgICAgb2tfbmV4dChvbGRwLCBuZXh0KSAmJiBva19waW51c2UobmV4dCkpKSB7CisgICAgICBzaXplX3QgbmIgPSByZXF1ZXN0MnNpemUoYnl0ZXMpOworICAgICAgaWYgKGlzX21tYXBwZWQob2xkcCkpCisgICAgICAgIG5ld3AgPSBtbWFwX3Jlc2l6ZShtLCBvbGRwLCBuYik7CisgICAgICBlbHNlIGlmIChvbGRzaXplID49IG5iKSB7IC8qIGFscmVhZHkgYmlnIGVub3VnaCAqLworICAgICAgICBzaXplX3QgcnNpemUgPSBvbGRzaXplIC0gbmI7CisgICAgICAgIG5ld3AgPSBvbGRwOworICAgICAgICBpZiAocnNpemUgPj0gTUlOX0NIVU5LX1NJWkUpIHsKKyAgICAgICAgICBtY2h1bmtwdHIgcmVtYWluZGVyID0gY2h1bmtfcGx1c19vZmZzZXQobmV3cCwgbmIpOworICAgICAgICAgIHNldF9pbnVzZShtLCBuZXdwLCBuYik7CisgICAgICAgICAgc2V0X2ludXNlKG0sIHJlbWFpbmRlciwgcnNpemUpOworICAgICAgICAgIGV4dHJhID0gY2h1bmsybWVtKHJlbWFpbmRlcik7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGVsc2UgaWYgKG5leHQgPT0gbS0+dG9wICYmIG9sZHNpemUgKyBtLT50b3BzaXplID4gbmIpIHsKKyAgICAgICAgLyogRXhwYW5kIGludG8gdG9wICovCisgICAgICAgIHNpemVfdCBuZXdzaXplID0gb2xkc2l6ZSArIG0tPnRvcHNpemU7CisgICAgICAgIHNpemVfdCBuZXd0b3BzaXplID0gbmV3c2l6ZSAtIG5iOworICAgICAgICBtY2h1bmtwdHIgbmV3dG9wID0gY2h1bmtfcGx1c19vZmZzZXQob2xkcCwgbmIpOworICAgICAgICBzZXRfaW51c2UobSwgb2xkcCwgbmIpOworICAgICAgICBuZXd0b3AtPmhlYWQgPSBuZXd0b3BzaXplIHxQSU5VU0VfQklUOworICAgICAgICBtLT50b3AgPSBuZXd0b3A7CisgICAgICAgIG0tPnRvcHNpemUgPSBuZXd0b3BzaXplOworICAgICAgICBuZXdwID0gb2xkcDsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICBVU0FHRV9FUlJPUl9BQ1RJT04obSwgb2xkbWVtKTsKKyAgICAgIFBPU1RBQ1RJT04obSk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBQT1NUQUNUSU9OKG0pOworCisgICAgaWYgKG5ld3AgIT0gMCkgeworICAgICAgaWYgKGV4dHJhICE9IDApIHsKKyAgICAgICAgaW50ZXJuYWxfZnJlZShtLCBleHRyYSk7CisgICAgICB9CisgICAgICBjaGVja19pbnVzZV9jaHVuayhtLCBuZXdwKTsKKyAgICAgIHJldHVybiBjaHVuazJtZW0obmV3cCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgdm9pZCogbmV3bWVtID0gaW50ZXJuYWxfbWFsbG9jKG0sIGJ5dGVzKTsKKyAgICAgIGlmIChuZXdtZW0gIT0gMCkgeworICAgICAgICBzaXplX3Qgb2MgPSBvbGRzaXplIC0gb3ZlcmhlYWRfZm9yKG9sZHApOworICAgICAgICBtZW1jcHkobmV3bWVtLCBvbGRtZW0sIChvYyA8IGJ5dGVzKT8gb2MgOiBieXRlcyk7CisgICAgICAgIGludGVybmFsX2ZyZWUobSwgb2xkbWVtKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBuZXdtZW07CisgICAgfQorICB9CisgIHJldHVybiAwOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbWVtYWxpZ24gc3VwcG9ydCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgdm9pZCogaW50ZXJuYWxfbWVtYWxpZ24obXN0YXRlIG0sIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBieXRlcykgeworICBpZiAoYWxpZ25tZW50IDw9IE1BTExPQ19BTElHTk1FTlQpICAgIC8qIENhbiBqdXN0IHVzZSBtYWxsb2MgKi8KKyAgICByZXR1cm4gaW50ZXJuYWxfbWFsbG9jKG0sIGJ5dGVzKTsKKyAgaWYgKGFsaWdubWVudCA8ICBNSU5fQ0hVTktfU0laRSkgLyogbXVzdCBiZSBhdCBsZWFzdCBhIG1pbmltdW0gY2h1bmsgc2l6ZSAqLworICAgIGFsaWdubWVudCA9IE1JTl9DSFVOS19TSVpFOworICBpZiAoKGFsaWdubWVudCAmIChhbGlnbm1lbnQtU0laRV9UX09ORSkpICE9IDApIHsvKiBFbnN1cmUgYSBwb3dlciBvZiAyICovCisgICAgc2l6ZV90IGEgPSBNQUxMT0NfQUxJR05NRU5UIDw8IDE7CisgICAgd2hpbGUgKGEgPCBhbGlnbm1lbnQpIGEgPDw9IDE7CisgICAgYWxpZ25tZW50ID0gYTsKKyAgfQorICAKKyAgaWYgKGJ5dGVzID49IE1BWF9SRVFVRVNUIC0gYWxpZ25tZW50KSB7CisgICAgaWYgKG0gIT0gMCkgIHsgLyogVGVzdCBpc24ndCBuZWVkZWQgYnV0IGF2b2lkcyBjb21waWxlciB3YXJuaW5nICovCisgICAgICBNQUxMT0NfRkFJTFVSRV9BQ1RJT047CisgICAgfQorICB9CisgIGVsc2UgeworICAgIHNpemVfdCBuYiA9IHJlcXVlc3Qyc2l6ZShieXRlcyk7CisgICAgc2l6ZV90IHJlcSA9IG5iICsgYWxpZ25tZW50ICsgTUlOX0NIVU5LX1NJWkUgLSBDSFVOS19PVkVSSEVBRDsKKyAgICBjaGFyKiBtZW0gPSAoY2hhciopaW50ZXJuYWxfbWFsbG9jKG0sIHJlcSk7CisgICAgaWYgKG1lbSAhPSAwKSB7CisgICAgICB2b2lkKiBsZWFkZXIgPSAwOworICAgICAgdm9pZCogdHJhaWxlciA9IDA7CisgICAgICBtY2h1bmtwdHIgcCA9IG1lbTJjaHVuayhtZW0pOworCisgICAgICBpZiAoUFJFQUNUSU9OKG0pKSByZXR1cm4gMDsKKyAgICAgIGlmICgoKChzaXplX3QpKG1lbSkpICUgYWxpZ25tZW50KSAhPSAwKSB7IC8qIG1pc2FsaWduZWQgKi8KKyAgICAgICAgLyoKKyAgICAgICAgICBGaW5kIGFuIGFsaWduZWQgc3BvdCBpbnNpZGUgY2h1bmsuICBTaW5jZSB3ZSBuZWVkIHRvIGdpdmUKKyAgICAgICAgICBiYWNrIGxlYWRpbmcgc3BhY2UgaW4gYSBjaHVuayBvZiBhdCBsZWFzdCBNSU5fQ0hVTktfU0laRSwgaWYKKyAgICAgICAgICB0aGUgZmlyc3QgY2FsY3VsYXRpb24gcGxhY2VzIHVzIGF0IGEgc3BvdCB3aXRoIGxlc3MgdGhhbgorICAgICAgICAgIE1JTl9DSFVOS19TSVpFIGxlYWRlciwgd2UgY2FuIG1vdmUgdG8gdGhlIG5leHQgYWxpZ25lZCBzcG90LgorICAgICAgICAgIFdlJ3ZlIGFsbG9jYXRlZCBlbm91Z2ggdG90YWwgcm9vbSBzbyB0aGF0IHRoaXMgaXMgYWx3YXlzCisgICAgICAgICAgcG9zc2libGUuCisgICAgICAgICovCisgICAgICAgIGNoYXIqIGJyID0gKGNoYXIqKW1lbTJjaHVuaygoc2l6ZV90KSgoKHNpemVfdCkobWVtICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnQgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJWkVfVF9PTkUpKSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtYWxpZ25tZW50KSk7CisgICAgICAgIGNoYXIqIHBvcyA9ICgoc2l6ZV90KShiciAtIChjaGFyKikocCkpID49IE1JTl9DSFVOS19TSVpFKT8KKyAgICAgICAgICBiciA6IGJyK2FsaWdubWVudDsKKyAgICAgICAgbWNodW5rcHRyIG5ld3AgPSAobWNodW5rcHRyKXBvczsKKyAgICAgICAgc2l6ZV90IGxlYWRzaXplID0gcG9zIC0gKGNoYXIqKShwKTsKKyAgICAgICAgc2l6ZV90IG5ld3NpemUgPSBjaHVua3NpemUocCkgLSBsZWFkc2l6ZTsKKworICAgICAgICBpZiAoaXNfbW1hcHBlZChwKSkgeyAvKiBGb3IgbW1hcHBlZCBjaHVua3MsIGp1c3QgYWRqdXN0IG9mZnNldCAqLworICAgICAgICAgIG5ld3AtPnByZXZfZm9vdCA9IHAtPnByZXZfZm9vdCArIGxlYWRzaXplOworICAgICAgICAgIG5ld3AtPmhlYWQgPSAobmV3c2l6ZXxDSU5VU0VfQklUKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsgLyogT3RoZXJ3aXNlLCBnaXZlIGJhY2sgbGVhZGVyLCB1c2UgdGhlIHJlc3QgKi8KKyAgICAgICAgICBzZXRfaW51c2UobSwgbmV3cCwgbmV3c2l6ZSk7CisgICAgICAgICAgc2V0X2ludXNlKG0sIHAsIGxlYWRzaXplKTsKKyAgICAgICAgICBsZWFkZXIgPSBjaHVuazJtZW0ocCk7CisgICAgICAgIH0KKyAgICAgICAgcCA9IG5ld3A7CisgICAgICB9CisKKyAgICAgIC8qIEdpdmUgYmFjayBzcGFyZSByb29tIGF0IHRoZSBlbmQgKi8KKyAgICAgIGlmICghaXNfbW1hcHBlZChwKSkgeworICAgICAgICBzaXplX3Qgc2l6ZSA9IGNodW5rc2l6ZShwKTsKKyAgICAgICAgaWYgKHNpemUgPiBuYiArIE1JTl9DSFVOS19TSVpFKSB7CisgICAgICAgICAgc2l6ZV90IHJlbWFpbmRlcl9zaXplID0gc2l6ZSAtIG5iOworICAgICAgICAgIG1jaHVua3B0ciByZW1haW5kZXIgPSBjaHVua19wbHVzX29mZnNldChwLCBuYik7CisgICAgICAgICAgc2V0X2ludXNlKG0sIHAsIG5iKTsKKyAgICAgICAgICBzZXRfaW51c2UobSwgcmVtYWluZGVyLCByZW1haW5kZXJfc2l6ZSk7CisgICAgICAgICAgdHJhaWxlciA9IGNodW5rMm1lbShyZW1haW5kZXIpOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGFzc2VydCAoY2h1bmtzaXplKHApID49IG5iKTsKKyAgICAgIGFzc2VydCgoKChzaXplX3QpKGNodW5rMm1lbShwKSkpICUgYWxpZ25tZW50KSA9PSAwKTsKKyAgICAgIGNoZWNrX2ludXNlX2NodW5rKG0sIHApOworICAgICAgUE9TVEFDVElPTihtKTsKKyAgICAgIGlmIChsZWFkZXIgIT0gMCkgeworICAgICAgICBpbnRlcm5hbF9mcmVlKG0sIGxlYWRlcik7CisgICAgICB9CisgICAgICBpZiAodHJhaWxlciAhPSAwKSB7CisgICAgICAgIGludGVybmFsX2ZyZWUobSwgdHJhaWxlcik7CisgICAgICB9CisgICAgICByZXR1cm4gY2h1bmsybWVtKHApOworICAgIH0KKyAgfQorICByZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGNvbWFsbG9jL2NvYWxsb2Mgc3VwcG9ydCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHZvaWQqKiBpYWxsb2MobXN0YXRlIG0sCisgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgbl9lbGVtZW50cywKKyAgICAgICAgICAgICAgICAgICAgIHNpemVfdCogc2l6ZXMsCisgICAgICAgICAgICAgICAgICAgICBpbnQgb3B0cywKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGNodW5rc1tdKSB7CisgIC8qCisgICAgVGhpcyBwcm92aWRlcyBjb21tb24gc3VwcG9ydCBmb3IgaW5kZXBlbmRlbnRfWCByb3V0aW5lcywgaGFuZGxpbmcKKyAgICBhbGwgb2YgdGhlIGNvbWJpbmF0aW9ucyB0aGF0IGNhbiByZXN1bHQuCisKKyAgICBUaGUgb3B0cyBhcmcgaGFzOgorICAgIGJpdCAwIHNldCBpZiBhbGwgZWxlbWVudHMgYXJlIHNhbWUgc2l6ZSAodXNpbmcgc2l6ZXNbMF0pCisgICAgYml0IDEgc2V0IGlmIGVsZW1lbnRzIHNob3VsZCBiZSB6ZXJvZWQKKyAgKi8KKworICBzaXplX3QgICAgZWxlbWVudF9zaXplOyAgIC8qIGNodW5rc2l6ZSBvZiBlYWNoIGVsZW1lbnQsIGlmIGFsbCBzYW1lICovCisgIHNpemVfdCAgICBjb250ZW50c19zaXplOyAgLyogdG90YWwgc2l6ZSBvZiBlbGVtZW50cyAqLworICBzaXplX3QgICAgYXJyYXlfc2l6ZTsgICAgIC8qIHJlcXVlc3Qgc2l6ZSBvZiBwb2ludGVyIGFycmF5ICovCisgIHZvaWQqICAgICBtZW07ICAgICAgICAgICAgLyogbWFsbG9jZWQgYWdncmVnYXRlIHNwYWNlICovCisgIG1jaHVua3B0ciBwOyAgICAgICAgICAgICAgLyogY29ycmVzcG9uZGluZyBjaHVuayAqLworICBzaXplX3QgICAgcmVtYWluZGVyX3NpemU7IC8qIHJlbWFpbmluZyBieXRlcyB3aGlsZSBzcGxpdHRpbmcgKi8KKyAgdm9pZCoqICAgIG1hcnJheTsgICAgICAgICAvKiBlaXRoZXIgImNodW5rcyIgb3IgbWFsbG9jZWQgcHRyIGFycmF5ICovCisgIG1jaHVua3B0ciBhcnJheV9jaHVuazsgICAgLyogY2h1bmsgZm9yIG1hbGxvY2VkIHB0ciBhcnJheSAqLworICBmbGFnX3QgICAgd2FzX2VuYWJsZWQ7ICAgIC8qIHRvIGRpc2FibGUgbW1hcCAqLworICBzaXplX3QgICAgc2l6ZTsKKyAgc2l6ZV90ICAgIGk7CisKKyAgLyogY29tcHV0ZSBhcnJheSBsZW5ndGgsIGlmIG5lZWRlZCAqLworICBpZiAoY2h1bmtzICE9IDApIHsKKyAgICBpZiAobl9lbGVtZW50cyA9PSAwKQorICAgICAgcmV0dXJuIGNodW5rczsgLyogbm90aGluZyB0byBkbyAqLworICAgIG1hcnJheSA9IGNodW5rczsKKyAgICBhcnJheV9zaXplID0gMDsKKyAgfQorICBlbHNlIHsKKyAgICAvKiBpZiBlbXB0eSByZXEsIG11c3Qgc3RpbGwgcmV0dXJuIGNodW5rIHJlcHJlc2VudGluZyBlbXB0eSBhcnJheSAqLworICAgIGlmIChuX2VsZW1lbnRzID09IDApCisgICAgICByZXR1cm4gKHZvaWQqKilpbnRlcm5hbF9tYWxsb2MobSwgMCk7CisgICAgbWFycmF5ID0gMDsKKyAgICBhcnJheV9zaXplID0gcmVxdWVzdDJzaXplKG5fZWxlbWVudHMgKiAoc2l6ZW9mKHZvaWQqKSkpOworICB9CisKKyAgLyogY29tcHV0ZSB0b3RhbCBlbGVtZW50IHNpemUgKi8KKyAgaWYgKG9wdHMgJiAweDEpIHsgLyogYWxsLXNhbWUtc2l6ZSAqLworICAgIGVsZW1lbnRfc2l6ZSA9IHJlcXVlc3Qyc2l6ZSgqc2l6ZXMpOworICAgIGNvbnRlbnRzX3NpemUgPSBuX2VsZW1lbnRzICogZWxlbWVudF9zaXplOworICB9CisgIGVsc2UgeyAvKiBhZGQgdXAgYWxsIHRoZSBzaXplcyAqLworICAgIGVsZW1lbnRfc2l6ZSA9IDA7CisgICAgY29udGVudHNfc2l6ZSA9IDA7CisgICAgZm9yIChpID0gMDsgaSAhPSBuX2VsZW1lbnRzOyArK2kpCisgICAgICBjb250ZW50c19zaXplICs9IHJlcXVlc3Qyc2l6ZShzaXplc1tpXSk7CisgIH0KKworICBzaXplID0gY29udGVudHNfc2l6ZSArIGFycmF5X3NpemU7CisKKyAgLyoKKyAgICAgQWxsb2NhdGUgdGhlIGFnZ3JlZ2F0ZSBjaHVuay4gIEZpcnN0IGRpc2FibGUgZGlyZWN0LW1tYXBwaW5nIHNvCisgICAgIG1hbGxvYyB3b24ndCB1c2UgaXQsIHNpbmNlIHdlIHdvdWxkIG5vdCBiZSBhYmxlIHRvIGxhdGVyCisgICAgIGZyZWUvcmVhbGxvYyBzcGFjZSBpbnRlcm5hbCB0byBhIHNlZ3JlZ2F0ZWQgbW1hcCByZWdpb24uCisgICovCisgIHdhc19lbmFibGVkID0gdXNlX21tYXAobSk7CisgIGRpc2FibGVfbW1hcChtKTsKKyAgbWVtID0gaW50ZXJuYWxfbWFsbG9jKG0sIHNpemUgLSBDSFVOS19PVkVSSEVBRCk7CisgIGlmICh3YXNfZW5hYmxlZCkKKyAgICBlbmFibGVfbW1hcChtKTsKKyAgaWYgKG1lbSA9PSAwKQorICAgIHJldHVybiAwOworCisgIGlmIChQUkVBQ1RJT04obSkpIHJldHVybiAwOworICBwID0gbWVtMmNodW5rKG1lbSk7CisgIHJlbWFpbmRlcl9zaXplID0gY2h1bmtzaXplKHApOworCisgIGFzc2VydCghaXNfbW1hcHBlZChwKSk7CisKKyAgaWYgKG9wdHMgJiAweDIpIHsgICAgICAgLyogb3B0aW9uYWxseSBjbGVhciB0aGUgZWxlbWVudHMgKi8KKyAgICBtZW1zZXQoKHNpemVfdCopbWVtLCAwLCByZW1haW5kZXJfc2l6ZSAtIFNJWkVfVF9TSVpFIC0gYXJyYXlfc2l6ZSk7CisgIH0KKworICAvKiBJZiBub3QgcHJvdmlkZWQsIGFsbG9jYXRlIHRoZSBwb2ludGVyIGFycmF5IGFzIGZpbmFsIHBhcnQgb2YgY2h1bmsgKi8KKyAgaWYgKG1hcnJheSA9PSAwKSB7CisgICAgc2l6ZV90ICBhcnJheV9jaHVua19zaXplOworICAgIGFycmF5X2NodW5rID0gY2h1bmtfcGx1c19vZmZzZXQocCwgY29udGVudHNfc2l6ZSk7CisgICAgYXJyYXlfY2h1bmtfc2l6ZSA9IHJlbWFpbmRlcl9zaXplIC0gY29udGVudHNfc2l6ZTsKKyAgICBtYXJyYXkgPSAodm9pZCoqKSAoY2h1bmsybWVtKGFycmF5X2NodW5rKSk7CisgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtLCBhcnJheV9jaHVuaywgYXJyYXlfY2h1bmtfc2l6ZSk7CisgICAgcmVtYWluZGVyX3NpemUgPSBjb250ZW50c19zaXplOworICB9CisKKyAgLyogc3BsaXQgb3V0IGVsZW1lbnRzICovCisgIGZvciAoaSA9IDA7IDsgKytpKSB7CisgICAgbWFycmF5W2ldID0gY2h1bmsybWVtKHApOworICAgIGlmIChpICE9IG5fZWxlbWVudHMtMSkgeworICAgICAgaWYgKGVsZW1lbnRfc2l6ZSAhPSAwKQorICAgICAgICBzaXplID0gZWxlbWVudF9zaXplOworICAgICAgZWxzZQorICAgICAgICBzaXplID0gcmVxdWVzdDJzaXplKHNpemVzW2ldKTsKKyAgICAgIHJlbWFpbmRlcl9zaXplIC09IHNpemU7CisgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG0sIHAsIHNpemUpOworICAgICAgcCA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIHNpemUpOworICAgIH0KKyAgICBlbHNlIHsgLyogdGhlIGZpbmFsIGVsZW1lbnQgYWJzb3JicyBhbnkgb3ZlcmFsbG9jYXRpb24gc2xvcCAqLworICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtLCBwLCByZW1haW5kZXJfc2l6ZSk7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKworI2lmIERFQlVHCisgIGlmIChtYXJyYXkgIT0gY2h1bmtzKSB7CisgICAgLyogZmluYWwgZWxlbWVudCBtdXN0IGhhdmUgZXhhY3RseSBleGhhdXN0ZWQgY2h1bmsgKi8KKyAgICBpZiAoZWxlbWVudF9zaXplICE9IDApIHsKKyAgICAgIGFzc2VydChyZW1haW5kZXJfc2l6ZSA9PSBlbGVtZW50X3NpemUpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIGFzc2VydChyZW1haW5kZXJfc2l6ZSA9PSByZXF1ZXN0MnNpemUoc2l6ZXNbaV0pKTsKKyAgICB9CisgICAgY2hlY2tfaW51c2VfY2h1bmsobSwgbWVtMmNodW5rKG1hcnJheSkpOworICB9CisgIGZvciAoaSA9IDA7IGkgIT0gbl9lbGVtZW50czsgKytpKQorICAgIGNoZWNrX2ludXNlX2NodW5rKG0sIG1lbTJjaHVuayhtYXJyYXlbaV0pKTsKKworI2VuZGlmIC8qIERFQlVHICovCisKKyAgUE9TVEFDVElPTihtKTsKKyAgcmV0dXJuIG1hcnJheTsKK30KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBwdWJsaWMgcm91dGluZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgIU9OTFlfTVNQQUNFUworCit2b2lkKiBkbG1hbGxvYyhzaXplX3QgYnl0ZXMpIHsKKyAgLyoKKyAgICAgQmFzaWMgYWxnb3JpdGhtOgorICAgICBJZiBhIHNtYWxsIHJlcXVlc3QgKDwgMjU2IGJ5dGVzIG1pbnVzIHBlci1jaHVuayBvdmVyaGVhZCk6CisgICAgICAgMS4gSWYgb25lIGV4aXN0cywgdXNlIGEgcmVtYWluZGVybGVzcyBjaHVuayBpbiBhc3NvY2lhdGVkIHNtYWxsYmluLgorICAgICAgICAgIChSZW1haW5kZXJsZXNzIG1lYW5zIHRoYXQgdGhlcmUgYXJlIHRvbyBmZXcgZXhjZXNzIGJ5dGVzIHRvCisgICAgICAgICAgcmVwcmVzZW50IGFzIGEgY2h1bmsuKQorICAgICAgIDIuIElmIGl0IGlzIGJpZyBlbm91Z2gsIHVzZSB0aGUgZHYgY2h1bmssIHdoaWNoIGlzIG5vcm1hbGx5IHRoZQorICAgICAgICAgIGNodW5rIGFkamFjZW50IHRvIHRoZSBvbmUgdXNlZCBmb3IgdGhlIG1vc3QgcmVjZW50IHNtYWxsIHJlcXVlc3QuCisgICAgICAgMy4gSWYgb25lIGV4aXN0cywgc3BsaXQgdGhlIHNtYWxsZXN0IGF2YWlsYWJsZSBjaHVuayBpbiBhIGJpbiwKKyAgICAgICAgICBzYXZpbmcgcmVtYWluZGVyIGluIGR2LgorICAgICAgIDQuIElmIGl0IGlzIGJpZyBlbm91Z2gsIHVzZSB0aGUgdG9wIGNodW5rLgorICAgICAgIDUuIElmIGF2YWlsYWJsZSwgZ2V0IG1lbW9yeSBmcm9tIHN5c3RlbSBhbmQgdXNlIGl0CisgICAgIE90aGVyd2lzZSwgZm9yIGEgbGFyZ2UgcmVxdWVzdDoKKyAgICAgICAxLiBGaW5kIHRoZSBzbWFsbGVzdCBhdmFpbGFibGUgYmlubmVkIGNodW5rIHRoYXQgZml0cywgYW5kIHVzZSBpdAorICAgICAgICAgIGlmIGl0IGlzIGJldHRlciBmaXR0aW5nIHRoYW4gZHYgY2h1bmssIHNwbGl0dGluZyBpZiBuZWNlc3NhcnkuCisgICAgICAgMi4gSWYgYmV0dGVyIGZpdHRpbmcgdGhhbiBhbnkgYmlubmVkIGNodW5rLCB1c2UgdGhlIGR2IGNodW5rLgorICAgICAgIDMuIElmIGl0IGlzIGJpZyBlbm91Z2gsIHVzZSB0aGUgdG9wIGNodW5rLgorICAgICAgIDQuIElmIHJlcXVlc3Qgc2l6ZSA+PSBtbWFwIHRocmVzaG9sZCwgdHJ5IHRvIGRpcmVjdGx5IG1tYXAgdGhpcyBjaHVuay4KKyAgICAgICA1LiBJZiBhdmFpbGFibGUsIGdldCBtZW1vcnkgZnJvbSBzeXN0ZW0gYW5kIHVzZSBpdAorCisgICAgIFRoZSB1Z2x5IGdvdG8ncyBoZXJlIGVuc3VyZSB0aGF0IHBvc3RhY3Rpb24gb2NjdXJzIGFsb25nIGFsbCBwYXRocy4KKyAgKi8KKworICBpZiAoIVBSRUFDVElPTihnbSkpIHsKKyAgICB2b2lkKiBtZW07CisgICAgc2l6ZV90IG5iOworICAgIGlmIChieXRlcyA8PSBNQVhfU01BTExfUkVRVUVTVCkgeworICAgICAgYmluZGV4X3QgaWR4OworICAgICAgYmlubWFwX3Qgc21hbGxiaXRzOworICAgICAgbmIgPSAoYnl0ZXMgPCBNSU5fUkVRVUVTVCk/IE1JTl9DSFVOS19TSVpFIDogcGFkX3JlcXVlc3QoYnl0ZXMpOworICAgICAgaWR4ID0gc21hbGxfaW5kZXgobmIpOworICAgICAgc21hbGxiaXRzID0gZ20tPnNtYWxsbWFwID4+IGlkeDsKKworICAgICAgaWYgKChzbWFsbGJpdHMgJiAweDNVKSAhPSAwKSB7IC8qIFJlbWFpbmRlcmxlc3MgZml0IHRvIGEgc21hbGxiaW4uICovCisgICAgICAgIG1jaHVua3B0ciBiLCBwOworICAgICAgICBpZHggKz0gfnNtYWxsYml0cyAmIDE7ICAgICAgIC8qIFVzZXMgbmV4dCBiaW4gaWYgaWR4IGVtcHR5ICovCisgICAgICAgIGIgPSBzbWFsbGJpbl9hdChnbSwgaWR4KTsKKyAgICAgICAgcCA9IGItPmZkOworICAgICAgICBhc3NlcnQoY2h1bmtzaXplKHApID09IHNtYWxsX2luZGV4MnNpemUoaWR4KSk7CisgICAgICAgIHVubGlua19maXJzdF9zbWFsbF9jaHVuayhnbSwgYiwgcCwgaWR4KTsKKyAgICAgICAgc2V0X2ludXNlX2FuZF9waW51c2UoZ20sIHAsIHNtYWxsX2luZGV4MnNpemUoaWR4KSk7CisgICAgICAgIG1lbSA9IGNodW5rMm1lbShwKTsKKyAgICAgICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsoZ20sIG1lbSwgbmIpOworICAgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgICB9CisKKyAgICAgIGVsc2UgaWYgKG5iID4gZ20tPmR2c2l6ZSkgeworICAgICAgICBpZiAoc21hbGxiaXRzICE9IDApIHsgLyogVXNlIGNodW5rIGluIG5leHQgbm9uZW1wdHkgc21hbGxiaW4gKi8KKyAgICAgICAgICBtY2h1bmtwdHIgYiwgcCwgcjsKKyAgICAgICAgICBzaXplX3QgcnNpemU7CisgICAgICAgICAgYmluZGV4X3QgaTsKKyAgICAgICAgICBiaW5tYXBfdCBsZWZ0Yml0cyA9IChzbWFsbGJpdHMgPDwgaWR4KSAmIGxlZnRfYml0cyhpZHgyYml0KGlkeCkpOworICAgICAgICAgIGJpbm1hcF90IGxlYXN0Yml0ID0gbGVhc3RfYml0KGxlZnRiaXRzKTsKKyAgICAgICAgICBjb21wdXRlX2JpdDJpZHgobGVhc3RiaXQsIGkpOworICAgICAgICAgIGIgPSBzbWFsbGJpbl9hdChnbSwgaSk7CisgICAgICAgICAgcCA9IGItPmZkOworICAgICAgICAgIGFzc2VydChjaHVua3NpemUocCkgPT0gc21hbGxfaW5kZXgyc2l6ZShpKSk7CisgICAgICAgICAgdW5saW5rX2ZpcnN0X3NtYWxsX2NodW5rKGdtLCBiLCBwLCBpKTsKKyAgICAgICAgICByc2l6ZSA9IHNtYWxsX2luZGV4MnNpemUoaSkgLSBuYjsKKyAgICAgICAgICAvKiBGaXQgaGVyZSBjYW5ub3QgYmUgcmVtYWluZGVybGVzcyBpZiA0Ynl0ZSBzaXplcyAqLworICAgICAgICAgIGlmIChTSVpFX1RfU0laRSAhPSA0ICYmIHJzaXplIDwgTUlOX0NIVU5LX1NJWkUpCisgICAgICAgICAgICBzZXRfaW51c2VfYW5kX3BpbnVzZShnbSwgcCwgc21hbGxfaW5kZXgyc2l6ZShpKSk7CisgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKGdtLCBwLCBuYik7CisgICAgICAgICAgICByID0gY2h1bmtfcGx1c19vZmZzZXQocCwgbmIpOworICAgICAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHIsIHJzaXplKTsKKyAgICAgICAgICAgIHJlcGxhY2VfZHYoZ20sIHIsIHJzaXplKTsKKyAgICAgICAgICB9CisgICAgICAgICAgbWVtID0gY2h1bmsybWVtKHApOworICAgICAgICAgIGNoZWNrX21hbGxvY2VkX2NodW5rKGdtLCBtZW0sIG5iKTsKKyAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgICAgIH0KKworICAgICAgICBlbHNlIGlmIChnbS0+dHJlZW1hcCAhPSAwICYmIChtZW0gPSB0bWFsbG9jX3NtYWxsKGdtLCBuYikpICE9IDApIHsKKyAgICAgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhnbSwgbWVtLCBuYik7CisgICAgICAgICAgZ290byBwb3N0YWN0aW9uOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGJ5dGVzID49IE1BWF9SRVFVRVNUKQorICAgICAgbmIgPSBNQVhfU0laRV9UOyAvKiBUb28gYmlnIHRvIGFsbG9jYXRlLiBGb3JjZSBmYWlsdXJlIChpbiBzeXMgYWxsb2MpICovCisgICAgZWxzZSB7CisgICAgICBuYiA9IHBhZF9yZXF1ZXN0KGJ5dGVzKTsKKyAgICAgIGlmIChnbS0+dHJlZW1hcCAhPSAwICYmIChtZW0gPSB0bWFsbG9jX2xhcmdlKGdtLCBuYikpICE9IDApIHsKKyAgICAgICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsoZ20sIG1lbSwgbmIpOworICAgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgICB9CisgICAgfQorCisgICAgaWYgKG5iIDw9IGdtLT5kdnNpemUpIHsKKyAgICAgIHNpemVfdCByc2l6ZSA9IGdtLT5kdnNpemUgLSBuYjsKKyAgICAgIG1jaHVua3B0ciBwID0gZ20tPmR2OworICAgICAgaWYgKHJzaXplID49IE1JTl9DSFVOS19TSVpFKSB7IC8qIHNwbGl0IGR2ICovCisgICAgICAgIG1jaHVua3B0ciByID0gZ20tPmR2ID0gY2h1bmtfcGx1c19vZmZzZXQocCwgbmIpOworICAgICAgICBnbS0+ZHZzaXplID0gcnNpemU7CisgICAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhyLCByc2l6ZSk7CisgICAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsoZ20sIHAsIG5iKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeyAvKiBleGhhdXN0IGR2ICovCisgICAgICAgIHNpemVfdCBkdnMgPSBnbS0+ZHZzaXplOworICAgICAgICBnbS0+ZHZzaXplID0gMDsKKyAgICAgICAgZ20tPmR2ID0gMDsKKyAgICAgICAgc2V0X2ludXNlX2FuZF9waW51c2UoZ20sIHAsIGR2cyk7CisgICAgICB9CisgICAgICBtZW0gPSBjaHVuazJtZW0ocCk7CisgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhnbSwgbWVtLCBuYik7CisgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgfQorCisgICAgZWxzZSBpZiAobmIgPCBnbS0+dG9wc2l6ZSkgeyAvKiBTcGxpdCB0b3AgKi8KKyAgICAgIHNpemVfdCByc2l6ZSA9IGdtLT50b3BzaXplIC09IG5iOworICAgICAgbWNodW5rcHRyIHAgPSBnbS0+dG9wOworICAgICAgbWNodW5rcHRyIHIgPSBnbS0+dG9wID0gY2h1bmtfcGx1c19vZmZzZXQocCwgbmIpOworICAgICAgci0+aGVhZCA9IHJzaXplIHwgUElOVVNFX0JJVDsKKyAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsoZ20sIHAsIG5iKTsKKyAgICAgIG1lbSA9IGNodW5rMm1lbShwKTsKKyAgICAgIGNoZWNrX3RvcF9jaHVuayhnbSwgZ20tPnRvcCk7CisgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhnbSwgbWVtLCBuYik7CisgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgfQorCisgICAgbWVtID0gc3lzX2FsbG9jKGdtLCBuYik7CisKKyAgcG9zdGFjdGlvbjoKKyAgICBQT1NUQUNUSU9OKGdtKTsKKyAgICByZXR1cm4gbWVtOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgZGxmcmVlKHZvaWQqIG1lbSkgeworICAvKgorICAgICBDb25zb2xpZGF0ZSBmcmVlZCBjaHVua3Mgd2l0aCBwcmVjZWVkaW5nIG9yIHN1Y2NlZWRpbmcgYm9yZGVyaW5nCisgICAgIGZyZWUgY2h1bmtzLCBpZiB0aGV5IGV4aXN0LCBhbmQgdGhlbiBwbGFjZSBpbiBhIGJpbi4gIEludGVybWl4ZWQKKyAgICAgd2l0aCBzcGVjaWFsIGNhc2VzIGZvciB0b3AsIGR2LCBtbWFwcGVkIGNodW5rcywgYW5kIHVzYWdlIGVycm9ycy4KKyAgKi8KKworICBpZiAobWVtICE9IDApIHsKKyAgICBtY2h1bmtwdHIgcCAgPSBtZW0yY2h1bmsobWVtKTsKKyNpZiBGT09URVJTCisgICAgbXN0YXRlIGZtID0gZ2V0X21zdGF0ZV9mb3IocCk7CisgICAgaWYgKCFva19tYWdpYyhmbSkpIHsKKyAgICAgIFVTQUdFX0VSUk9SX0FDVElPTihmbSwgcCk7CisgICAgICByZXR1cm47CisgICAgfQorI2Vsc2UgLyogRk9PVEVSUyAqLworI2RlZmluZSBmbSBnbQorI2VuZGlmIC8qIEZPT1RFUlMgKi8KKyAgICBpZiAoIVBSRUFDVElPTihmbSkpIHsKKyAgICAgIGNoZWNrX2ludXNlX2NodW5rKGZtLCBwKTsKKyAgICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoZm0sIHApICYmIG9rX2NpbnVzZShwKSkpIHsKKyAgICAgICAgc2l6ZV90IHBzaXplID0gY2h1bmtzaXplKHApOworICAgICAgICBtY2h1bmtwdHIgbmV4dCA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIHBzaXplKTsKKyAgICAgICAgaWYgKCFwaW51c2UocCkpIHsKKyAgICAgICAgICBzaXplX3QgcHJldnNpemUgPSBwLT5wcmV2X2Zvb3Q7CisgICAgICAgICAgaWYgKChwcmV2c2l6ZSAmIElTX01NQVBQRURfQklUKSAhPSAwKSB7CisgICAgICAgICAgICBwcmV2c2l6ZSAmPSB+SVNfTU1BUFBFRF9CSVQ7CisgICAgICAgICAgICBwc2l6ZSArPSBwcmV2c2l6ZSArIE1NQVBfRk9PVF9QQUQ7CisgICAgICAgICAgICBpZiAoQ0FMTF9NVU5NQVAoKGNoYXIqKXAgLSBwcmV2c2l6ZSwgcHNpemUpID09IDApCisgICAgICAgICAgICAgIGZtLT5mb290cHJpbnQgLT0gcHNpemU7CisgICAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbWNodW5rcHRyIHByZXYgPSBjaHVua19taW51c19vZmZzZXQocCwgcHJldnNpemUpOworICAgICAgICAgICAgcHNpemUgKz0gcHJldnNpemU7CisgICAgICAgICAgICBwID0gcHJldjsKKyAgICAgICAgICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoZm0sIHByZXYpKSkgeyAvKiBjb25zb2xpZGF0ZSBiYWNrd2FyZCAqLworICAgICAgICAgICAgICBpZiAocCAhPSBmbS0+ZHYpIHsKKyAgICAgICAgICAgICAgICB1bmxpbmtfY2h1bmsoZm0sIHAsIHByZXZzaXplKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBlbHNlIGlmICgobmV4dC0+aGVhZCAmIElOVVNFX0JJVFMpID09IElOVVNFX0JJVFMpIHsKKyAgICAgICAgICAgICAgICBmbS0+ZHZzaXplID0gcHNpemU7CisgICAgICAgICAgICAgICAgc2V0X2ZyZWVfd2l0aF9waW51c2UocCwgcHNpemUsIG5leHQpOworICAgICAgICAgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBnb3RvIGVycm9yYWN0aW9uOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChSVENIRUNLKG9rX25leHQocCwgbmV4dCkgJiYgb2tfcGludXNlKG5leHQpKSkgeworICAgICAgICAgIGlmICghY2ludXNlKG5leHQpKSB7ICAvKiBjb25zb2xpZGF0ZSBmb3J3YXJkICovCisgICAgICAgICAgICBpZiAobmV4dCA9PSBmbS0+dG9wKSB7CisgICAgICAgICAgICAgIHNpemVfdCB0c2l6ZSA9IGZtLT50b3BzaXplICs9IHBzaXplOworICAgICAgICAgICAgICBmbS0+dG9wID0gcDsKKyAgICAgICAgICAgICAgcC0+aGVhZCA9IHRzaXplIHwgUElOVVNFX0JJVDsKKyAgICAgICAgICAgICAgaWYgKHAgPT0gZm0tPmR2KSB7CisgICAgICAgICAgICAgICAgZm0tPmR2ID0gMDsKKyAgICAgICAgICAgICAgICBmbS0+ZHZzaXplID0gMDsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBpZiAoc2hvdWxkX3RyaW0oZm0sIHRzaXplKSkKKyAgICAgICAgICAgICAgICBzeXNfdHJpbShmbSwgMCk7CisgICAgICAgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG5leHQgPT0gZm0tPmR2KSB7CisgICAgICAgICAgICAgIHNpemVfdCBkc2l6ZSA9IGZtLT5kdnNpemUgKz0gcHNpemU7CisgICAgICAgICAgICAgIGZtLT5kdiA9IHA7CisgICAgICAgICAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhwLCBkc2l6ZSk7CisgICAgICAgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICBzaXplX3QgbnNpemUgPSBjaHVua3NpemUobmV4dCk7CisgICAgICAgICAgICAgIHBzaXplICs9IG5zaXplOworICAgICAgICAgICAgICB1bmxpbmtfY2h1bmsoZm0sIG5leHQsIG5zaXplKTsKKyAgICAgICAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHAsIHBzaXplKTsKKyAgICAgICAgICAgICAgaWYgKHAgPT0gZm0tPmR2KSB7CisgICAgICAgICAgICAgICAgZm0tPmR2c2l6ZSA9IHBzaXplOworICAgICAgICAgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBzZXRfZnJlZV93aXRoX3BpbnVzZShwLCBwc2l6ZSwgbmV4dCk7CisgICAgICAgICAgaW5zZXJ0X2NodW5rKGZtLCBwLCBwc2l6ZSk7CisgICAgICAgICAgY2hlY2tfZnJlZV9jaHVuayhmbSwgcCk7CisgICAgICAgICAgZ290byBwb3N0YWN0aW9uOworICAgICAgICB9CisgICAgICB9CisgICAgZXJyb3JhY3Rpb246CisgICAgICBVU0FHRV9FUlJPUl9BQ1RJT04oZm0sIHApOworICAgIHBvc3RhY3Rpb246CisgICAgICBQT1NUQUNUSU9OKGZtKTsKKyAgICB9CisgIH0KKyNpZiAhRk9PVEVSUworI3VuZGVmIGZtCisjZW5kaWYgLyogRk9PVEVSUyAqLworfQorCit2b2lkKiBkbGNhbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVsZW1fc2l6ZSkgeworICB2b2lkICptZW07CisgIGlmIChuX2VsZW1lbnRzICYmIE1BWF9TSVpFX1QgLyBuX2VsZW1lbnRzIDwgZWxlbV9zaXplKSB7CisgICAgLyogRmFpbCBvbiBvdmVyZmxvdyAqLworICAgIE1BTExPQ19GQUlMVVJFX0FDVElPTjsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorICBlbGVtX3NpemUgKj0gbl9lbGVtZW50czsKKyAgbWVtID0gZGxtYWxsb2MoZWxlbV9zaXplKTsKKyAgaWYgKG1lbSAmJiBjYWxsb2NfbXVzdF9jbGVhcihtZW0yY2h1bmsobWVtKSkpCisgICAgbWVtc2V0KG1lbSwgMCwgZWxlbV9zaXplKTsKKyAgcmV0dXJuIG1lbTsKK30KKwordm9pZCogZGxyZWFsbG9jKHZvaWQqIG9sZG1lbSwgc2l6ZV90IGJ5dGVzKSB7CisgIGlmIChvbGRtZW0gPT0gMCkKKyAgICByZXR1cm4gZGxtYWxsb2MoYnl0ZXMpOworI2lmZGVmIFJFQUxMT0NfWkVST19CWVRFU19GUkVFUworICBpZiAoYnl0ZXMgPT0gMCkgeworICAgIGRsZnJlZShvbGRtZW0pOworICAgIHJldHVybiAwOworICB9CisjZW5kaWYgLyogUkVBTExPQ19aRVJPX0JZVEVTX0ZSRUVTICovCisgIGVsc2UgeworI2lmICEgRk9PVEVSUworICAgIG1zdGF0ZSBtID0gZ207CisjZWxzZSAvKiBGT09URVJTICovCisgICAgbXN0YXRlIG0gPSBnZXRfbXN0YXRlX2ZvcihtZW0yY2h1bmsob2xkbWVtKSk7CisgICAgaWYgKCFva19tYWdpYyhtKSkgeworICAgICAgVVNBR0VfRVJST1JfQUNUSU9OKG0sIG9sZG1lbSk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisjZW5kaWYgLyogRk9PVEVSUyAqLworICAgIHJldHVybiBpbnRlcm5hbF9yZWFsbG9jKG0sIG9sZG1lbSwgYnl0ZXMpOworICB9Cit9CisKK3ZvaWQqIGRsbWVtYWxpZ24oc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IGJ5dGVzKSB7CisgIHJldHVybiBpbnRlcm5hbF9tZW1hbGlnbihnbSwgYWxpZ25tZW50LCBieXRlcyk7Cit9CisKK3ZvaWQqKiBkbGluZGVwZW5kZW50X2NhbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVsZW1fc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGNodW5rc1tdKSB7CisgIHNpemVfdCBzeiA9IGVsZW1fc2l6ZTsgLyogc2VydmVzIGFzIDEtZWxlbWVudCBhcnJheSAqLworICByZXR1cm4gaWFsbG9jKGdtLCBuX2VsZW1lbnRzLCAmc3osIDMsIGNodW5rcyk7Cit9CisKK3ZvaWQqKiBkbGluZGVwZW5kZW50X2NvbWFsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3Qgc2l6ZXNbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogY2h1bmtzW10pIHsKKyAgcmV0dXJuIGlhbGxvYyhnbSwgbl9lbGVtZW50cywgc2l6ZXMsIDAsIGNodW5rcyk7Cit9CisKK3ZvaWQqIGRsdmFsbG9jKHNpemVfdCBieXRlcykgeworICBzaXplX3QgcGFnZXN6OworICBpbml0X21wYXJhbXMoKTsKKyAgcGFnZXN6ID0gbXBhcmFtcy5wYWdlX3NpemU7CisgIHJldHVybiBkbG1lbWFsaWduKHBhZ2VzeiwgYnl0ZXMpOworfQorCit2b2lkKiBkbHB2YWxsb2Moc2l6ZV90IGJ5dGVzKSB7CisgIHNpemVfdCBwYWdlc3o7CisgIGluaXRfbXBhcmFtcygpOworICBwYWdlc3ogPSBtcGFyYW1zLnBhZ2Vfc2l6ZTsKKyAgcmV0dXJuIGRsbWVtYWxpZ24ocGFnZXN6LCAoYnl0ZXMgKyBwYWdlc3ogLSBTSVpFX1RfT05FKSAmIH4ocGFnZXN6IC0gU0laRV9UX09ORSkpOworfQorCitpbnQgZGxtYWxsb2NfdHJpbShzaXplX3QgcGFkKSB7CisgIGludCByZXN1bHQgPSAwOworICBpZiAoIVBSRUFDVElPTihnbSkpIHsKKyAgICByZXN1bHQgPSBzeXNfdHJpbShnbSwgcGFkKTsKKyAgICBQT1NUQUNUSU9OKGdtKTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCitzaXplX3QgZGxtYWxsb2NfZm9vdHByaW50KHZvaWQpIHsKKyAgcmV0dXJuIGdtLT5mb290cHJpbnQ7Cit9CisKKyNpZiBVU0VfTUFYX0FMTE9XRURfRk9PVFBSSU5UCitzaXplX3QgZGxtYWxsb2NfbWF4X2FsbG93ZWRfZm9vdHByaW50KHZvaWQpIHsKKyAgcmV0dXJuIGdtLT5tYXhfYWxsb3dlZF9mb290cHJpbnQ7Cit9CisKK3ZvaWQgZGxtYWxsb2Nfc2V0X21heF9hbGxvd2VkX2Zvb3RwcmludChzaXplX3QgYnl0ZXMpIHsKKyAgaWYgKGJ5dGVzID4gZ20tPmZvb3RwcmludCkgeworICAgIC8qIEluY3JlYXNlIHRoZSBzaXplIGluIG11bHRpcGxlcyBvZiB0aGUgZ3JhbnVsYXJpdHksCisgICAgICogd2hpY2ggaXMgdGhlIHNtYWxsZXN0IHVuaXQgd2UgcmVxdWVzdCBmcm9tIHRoZSBzeXN0ZW0uCisgICAgICovCisgICAgZ20tPm1heF9hbGxvd2VkX2Zvb3RwcmludCA9IGdtLT5mb290cHJpbnQgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmFudWxhcml0eV9hbGlnbihieXRlcyAtIGdtLT5mb290cHJpbnQpOworICB9CisgIGVsc2UgeworICAgIC8vVE9ETzogYWxsb3cgZm9yIHJlZHVjaW5nIHRoZSBtYXggZm9vdHByaW50CisgICAgZ20tPm1heF9hbGxvd2VkX2Zvb3RwcmludCA9IGdtLT5mb290cHJpbnQ7CisgIH0KK30KKyNlbmRpZgorCitzaXplX3QgZGxtYWxsb2NfbWF4X2Zvb3RwcmludCh2b2lkKSB7CisgIHJldHVybiBnbS0+bWF4X2Zvb3RwcmludDsKK30KKworI2lmICFOT19NQUxMSU5GTworc3RydWN0IG1hbGxpbmZvIGRsbWFsbGluZm8odm9pZCkgeworICByZXR1cm4gaW50ZXJuYWxfbWFsbGluZm8oZ20pOworfQorI2VuZGlmIC8qIE5PX01BTExJTkZPICovCisKK3ZvaWQgZGxtYWxsb2Nfc3RhdHMoKSB7CisgIGludGVybmFsX21hbGxvY19zdGF0cyhnbSk7Cit9CisKK3NpemVfdCBkbG1hbGxvY191c2FibGVfc2l6ZSh2b2lkKiBtZW0pIHsKKyAgaWYgKG1lbSAhPSAwKSB7CisgICAgbWNodW5rcHRyIHAgPSBtZW0yY2h1bmsobWVtKTsKKyAgICBpZiAoY2ludXNlKHApKQorICAgICAgcmV0dXJuIGNodW5rc2l6ZShwKSAtIG92ZXJoZWFkX2ZvcihwKTsKKyAgfQorICByZXR1cm4gMDsKK30KKworaW50IGRsbWFsbG9wdChpbnQgcGFyYW1fbnVtYmVyLCBpbnQgdmFsdWUpIHsKKyAgcmV0dXJuIGNoYW5nZV9tcGFyYW0ocGFyYW1fbnVtYmVyLCB2YWx1ZSk7Cit9CisKKyNlbmRpZiAvKiAhT05MWV9NU1BBQ0VTICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHVzZXIgbXNwYWNlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiBNU1BBQ0VTCisKK3N0YXRpYyBtc3RhdGUgaW5pdF91c2VyX21zdGF0ZShjaGFyKiB0YmFzZSwgc2l6ZV90IHRzaXplKSB7CisgIHNpemVfdCBtc2l6ZSA9IHBhZF9yZXF1ZXN0KHNpemVvZihzdHJ1Y3QgbWFsbG9jX3N0YXRlKSk7CisgIG1jaHVua3B0ciBtbjsKKyAgbWNodW5rcHRyIG1zcCA9IGFsaWduX2FzX2NodW5rKHRiYXNlKTsKKyAgbXN0YXRlIG0gPSAobXN0YXRlKShjaHVuazJtZW0obXNwKSk7CisgIG1lbXNldChtLCAwLCBtc2l6ZSk7CisgIElOSVRJQUxfTE9DSygmbS0+bXV0ZXgpOworICBtc3AtPmhlYWQgPSAobXNpemV8UElOVVNFX0JJVHxDSU5VU0VfQklUKTsKKyAgbS0+c2VnLmJhc2UgPSBtLT5sZWFzdF9hZGRyID0gdGJhc2U7CisgIG0tPnNlZy5zaXplID0gbS0+Zm9vdHByaW50ID0gbS0+bWF4X2Zvb3RwcmludCA9IHRzaXplOworI2lmIFVTRV9NQVhfQUxMT1dFRF9GT09UUFJJTlQKKyAgbS0+bWF4X2FsbG93ZWRfZm9vdHByaW50ID0gTUFYX1NJWkVfVDsKKyNlbmRpZgorICBtLT5tYWdpYyA9IG1wYXJhbXMubWFnaWM7CisgIG0tPm1mbGFncyA9IG1wYXJhbXMuZGVmYXVsdF9tZmxhZ3M7CisgIGRpc2FibGVfY29udGlndW91cyhtKTsKKyAgaW5pdF9iaW5zKG0pOworICBtbiA9IG5leHRfY2h1bmsobWVtMmNodW5rKG0pKTsKKyAgaW5pdF90b3AobSwgbW4sIChzaXplX3QpKCh0YmFzZSArIHRzaXplKSAtIChjaGFyKiltbikgLSBUT1BfRk9PVF9TSVpFKTsKKyAgY2hlY2tfdG9wX2NodW5rKG0sIG0tPnRvcCk7CisgIHJldHVybiBtOworfQorCittc3BhY2UgY3JlYXRlX21zcGFjZShzaXplX3QgY2FwYWNpdHksIGludCBsb2NrZWQpIHsKKyAgbXN0YXRlIG0gPSAwOworICBzaXplX3QgbXNpemUgPSBwYWRfcmVxdWVzdChzaXplb2Yoc3RydWN0IG1hbGxvY19zdGF0ZSkpOworICBpbml0X21wYXJhbXMoKTsgLyogRW5zdXJlIHBhZ2VzaXplIGV0YyBpbml0aWFsaXplZCAqLworCisgIGlmIChjYXBhY2l0eSA8IChzaXplX3QpIC0obXNpemUgKyBUT1BfRk9PVF9TSVpFICsgbXBhcmFtcy5wYWdlX3NpemUpKSB7CisgICAgc2l6ZV90IHJzID0gKChjYXBhY2l0eSA9PSAwKT8gbXBhcmFtcy5ncmFudWxhcml0eSA6CisgICAgICAgICAgICAgICAgIChjYXBhY2l0eSArIFRPUF9GT09UX1NJWkUgKyBtc2l6ZSkpOworICAgIHNpemVfdCB0c2l6ZSA9IGdyYW51bGFyaXR5X2FsaWduKHJzKTsKKyAgICBjaGFyKiB0YmFzZSA9IChjaGFyKikoQ0FMTF9NTUFQKHRzaXplKSk7CisgICAgaWYgKHRiYXNlICE9IENNRkFJTCkgeworICAgICAgbSA9IGluaXRfdXNlcl9tc3RhdGUodGJhc2UsIHRzaXplKTsKKyAgICAgIG0tPnNlZy5zZmxhZ3MgPSBJU19NTUFQUEVEX0JJVDsKKyAgICAgIHNldF9sb2NrKG0sIGxvY2tlZCk7CisgICAgfQorICB9CisgIHJldHVybiAobXNwYWNlKW07Cit9CisKK21zcGFjZSBjcmVhdGVfbXNwYWNlX3dpdGhfYmFzZSh2b2lkKiBiYXNlLCBzaXplX3QgY2FwYWNpdHksIGludCBsb2NrZWQpIHsKKyAgbXN0YXRlIG0gPSAwOworICBzaXplX3QgbXNpemUgPSBwYWRfcmVxdWVzdChzaXplb2Yoc3RydWN0IG1hbGxvY19zdGF0ZSkpOworICBpbml0X21wYXJhbXMoKTsgLyogRW5zdXJlIHBhZ2VzaXplIGV0YyBpbml0aWFsaXplZCAqLworCisgIGlmIChjYXBhY2l0eSA+IG1zaXplICsgVE9QX0ZPT1RfU0laRSAmJgorICAgICAgY2FwYWNpdHkgPCAoc2l6ZV90KSAtKG1zaXplICsgVE9QX0ZPT1RfU0laRSArIG1wYXJhbXMucGFnZV9zaXplKSkgeworICAgIG0gPSBpbml0X3VzZXJfbXN0YXRlKChjaGFyKiliYXNlLCBjYXBhY2l0eSk7CisgICAgbS0+c2VnLnNmbGFncyA9IEVYVEVSTl9CSVQ7CisgICAgc2V0X2xvY2sobSwgbG9ja2VkKTsKKyAgfQorICByZXR1cm4gKG1zcGFjZSltOworfQorCitzaXplX3QgZGVzdHJveV9tc3BhY2UobXNwYWNlIG1zcCkgeworICBzaXplX3QgZnJlZWQgPSAwOworICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKKyAgaWYgKG9rX21hZ2ljKG1zKSkgeworICAgIG1zZWdtZW50cHRyIHNwID0gJm1zLT5zZWc7CisgICAgd2hpbGUgKHNwICE9IDApIHsKKyAgICAgIGNoYXIqIGJhc2UgPSBzcC0+YmFzZTsKKyAgICAgIHNpemVfdCBzaXplID0gc3AtPnNpemU7CisgICAgICBmbGFnX3QgZmxhZyA9IHNwLT5zZmxhZ3M7CisgICAgICBzcCA9IHNwLT5uZXh0OworICAgICAgaWYgKChmbGFnICYgSVNfTU1BUFBFRF9CSVQpICYmICEoZmxhZyAmIEVYVEVSTl9CSVQpICYmCisgICAgICAgICAgQ0FMTF9NVU5NQVAoYmFzZSwgc2l6ZSkgPT0gMCkKKyAgICAgICAgZnJlZWQgKz0gc2l6ZTsKKyAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLG1zKTsKKyAgfQorICByZXR1cm4gZnJlZWQ7Cit9CisKKy8qCisgIG1zcGFjZSB2ZXJzaW9ucyBvZiByb3V0aW5lcyBhcmUgbmVhci1jbG9uZXMgb2YgdGhlIGdsb2JhbAorICB2ZXJzaW9ucy4gVGhpcyBpcyBub3Qgc28gbmljZSBidXQgYmV0dGVyIHRoYW4gdGhlIGFsdGVybmF0aXZlcy4KKyovCisKKwordm9pZCogbXNwYWNlX21hbGxvYyhtc3BhY2UgbXNwLCBzaXplX3QgYnl0ZXMpIHsKKyAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisgIGlmICghb2tfbWFnaWMobXMpKSB7CisgICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLG1zKTsKKyAgICByZXR1cm4gMDsKKyAgfQorICBpZiAoIVBSRUFDVElPTihtcykpIHsKKyAgICB2b2lkKiBtZW07CisgICAgc2l6ZV90IG5iOworICAgIGlmIChieXRlcyA8PSBNQVhfU01BTExfUkVRVUVTVCkgeworICAgICAgYmluZGV4X3QgaWR4OworICAgICAgYmlubWFwX3Qgc21hbGxiaXRzOworICAgICAgbmIgPSAoYnl0ZXMgPCBNSU5fUkVRVUVTVCk/IE1JTl9DSFVOS19TSVpFIDogcGFkX3JlcXVlc3QoYnl0ZXMpOworICAgICAgaWR4ID0gc21hbGxfaW5kZXgobmIpOworICAgICAgc21hbGxiaXRzID0gbXMtPnNtYWxsbWFwID4+IGlkeDsKKworICAgICAgaWYgKChzbWFsbGJpdHMgJiAweDNVKSAhPSAwKSB7IC8qIFJlbWFpbmRlcmxlc3MgZml0IHRvIGEgc21hbGxiaW4uICovCisgICAgICAgIG1jaHVua3B0ciBiLCBwOworICAgICAgICBpZHggKz0gfnNtYWxsYml0cyAmIDE7ICAgICAgIC8qIFVzZXMgbmV4dCBiaW4gaWYgaWR4IGVtcHR5ICovCisgICAgICAgIGIgPSBzbWFsbGJpbl9hdChtcywgaWR4KTsKKyAgICAgICAgcCA9IGItPmZkOworICAgICAgICBhc3NlcnQoY2h1bmtzaXplKHApID09IHNtYWxsX2luZGV4MnNpemUoaWR4KSk7CisgICAgICAgIHVubGlua19maXJzdF9zbWFsbF9jaHVuayhtcywgYiwgcCwgaWR4KTsKKyAgICAgICAgc2V0X2ludXNlX2FuZF9waW51c2UobXMsIHAsIHNtYWxsX2luZGV4MnNpemUoaWR4KSk7CisgICAgICAgIG1lbSA9IGNodW5rMm1lbShwKTsKKyAgICAgICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsobXMsIG1lbSwgbmIpOworICAgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgICB9CisKKyAgICAgIGVsc2UgaWYgKG5iID4gbXMtPmR2c2l6ZSkgeworICAgICAgICBpZiAoc21hbGxiaXRzICE9IDApIHsgLyogVXNlIGNodW5rIGluIG5leHQgbm9uZW1wdHkgc21hbGxiaW4gKi8KKyAgICAgICAgICBtY2h1bmtwdHIgYiwgcCwgcjsKKyAgICAgICAgICBzaXplX3QgcnNpemU7CisgICAgICAgICAgYmluZGV4X3QgaTsKKyAgICAgICAgICBiaW5tYXBfdCBsZWZ0Yml0cyA9IChzbWFsbGJpdHMgPDwgaWR4KSAmIGxlZnRfYml0cyhpZHgyYml0KGlkeCkpOworICAgICAgICAgIGJpbm1hcF90IGxlYXN0Yml0ID0gbGVhc3RfYml0KGxlZnRiaXRzKTsKKyAgICAgICAgICBjb21wdXRlX2JpdDJpZHgobGVhc3RiaXQsIGkpOworICAgICAgICAgIGIgPSBzbWFsbGJpbl9hdChtcywgaSk7CisgICAgICAgICAgcCA9IGItPmZkOworICAgICAgICAgIGFzc2VydChjaHVua3NpemUocCkgPT0gc21hbGxfaW5kZXgyc2l6ZShpKSk7CisgICAgICAgICAgdW5saW5rX2ZpcnN0X3NtYWxsX2NodW5rKG1zLCBiLCBwLCBpKTsKKyAgICAgICAgICByc2l6ZSA9IHNtYWxsX2luZGV4MnNpemUoaSkgLSBuYjsKKyAgICAgICAgICAvKiBGaXQgaGVyZSBjYW5ub3QgYmUgcmVtYWluZGVybGVzcyBpZiA0Ynl0ZSBzaXplcyAqLworICAgICAgICAgIGlmIChTSVpFX1RfU0laRSAhPSA0ICYmIHJzaXplIDwgTUlOX0NIVU5LX1NJWkUpCisgICAgICAgICAgICBzZXRfaW51c2VfYW5kX3BpbnVzZShtcywgcCwgc21hbGxfaW5kZXgyc2l6ZShpKSk7CisgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG1zLCBwLCBuYik7CisgICAgICAgICAgICByID0gY2h1bmtfcGx1c19vZmZzZXQocCwgbmIpOworICAgICAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHIsIHJzaXplKTsKKyAgICAgICAgICAgIHJlcGxhY2VfZHYobXMsIHIsIHJzaXplKTsKKyAgICAgICAgICB9CisgICAgICAgICAgbWVtID0gY2h1bmsybWVtKHApOworICAgICAgICAgIGNoZWNrX21hbGxvY2VkX2NodW5rKG1zLCBtZW0sIG5iKTsKKyAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgICAgIH0KKworICAgICAgICBlbHNlIGlmIChtcy0+dHJlZW1hcCAhPSAwICYmIChtZW0gPSB0bWFsbG9jX3NtYWxsKG1zLCBuYikpICE9IDApIHsKKyAgICAgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhtcywgbWVtLCBuYik7CisgICAgICAgICAgZ290byBwb3N0YWN0aW9uOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGJ5dGVzID49IE1BWF9SRVFVRVNUKQorICAgICAgbmIgPSBNQVhfU0laRV9UOyAvKiBUb28gYmlnIHRvIGFsbG9jYXRlLiBGb3JjZSBmYWlsdXJlIChpbiBzeXMgYWxsb2MpICovCisgICAgZWxzZSB7CisgICAgICBuYiA9IHBhZF9yZXF1ZXN0KGJ5dGVzKTsKKyAgICAgIGlmIChtcy0+dHJlZW1hcCAhPSAwICYmIChtZW0gPSB0bWFsbG9jX2xhcmdlKG1zLCBuYikpICE9IDApIHsKKyAgICAgICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsobXMsIG1lbSwgbmIpOworICAgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgICB9CisgICAgfQorCisgICAgaWYgKG5iIDw9IG1zLT5kdnNpemUpIHsKKyAgICAgIHNpemVfdCByc2l6ZSA9IG1zLT5kdnNpemUgLSBuYjsKKyAgICAgIG1jaHVua3B0ciBwID0gbXMtPmR2OworICAgICAgaWYgKHJzaXplID49IE1JTl9DSFVOS19TSVpFKSB7IC8qIHNwbGl0IGR2ICovCisgICAgICAgIG1jaHVua3B0ciByID0gbXMtPmR2ID0gY2h1bmtfcGx1c19vZmZzZXQocCwgbmIpOworICAgICAgICBtcy0+ZHZzaXplID0gcnNpemU7CisgICAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhyLCByc2l6ZSk7CisgICAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsobXMsIHAsIG5iKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeyAvKiBleGhhdXN0IGR2ICovCisgICAgICAgIHNpemVfdCBkdnMgPSBtcy0+ZHZzaXplOworICAgICAgICBtcy0+ZHZzaXplID0gMDsKKyAgICAgICAgbXMtPmR2ID0gMDsKKyAgICAgICAgc2V0X2ludXNlX2FuZF9waW51c2UobXMsIHAsIGR2cyk7CisgICAgICB9CisgICAgICBtZW0gPSBjaHVuazJtZW0ocCk7CisgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhtcywgbWVtLCBuYik7CisgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgfQorCisgICAgZWxzZSBpZiAobmIgPCBtcy0+dG9wc2l6ZSkgeyAvKiBTcGxpdCB0b3AgKi8KKyAgICAgIHNpemVfdCByc2l6ZSA9IG1zLT50b3BzaXplIC09IG5iOworICAgICAgbWNodW5rcHRyIHAgPSBtcy0+dG9wOworICAgICAgbWNodW5rcHRyIHIgPSBtcy0+dG9wID0gY2h1bmtfcGx1c19vZmZzZXQocCwgbmIpOworICAgICAgci0+aGVhZCA9IHJzaXplIHwgUElOVVNFX0JJVDsKKyAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsobXMsIHAsIG5iKTsKKyAgICAgIG1lbSA9IGNodW5rMm1lbShwKTsKKyAgICAgIGNoZWNrX3RvcF9jaHVuayhtcywgbXMtPnRvcCk7CisgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhtcywgbWVtLCBuYik7CisgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgfQorCisgICAgbWVtID0gc3lzX2FsbG9jKG1zLCBuYik7CisKKyAgcG9zdGFjdGlvbjoKKyAgICBQT1NUQUNUSU9OKG1zKTsKKyAgICByZXR1cm4gbWVtOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgbXNwYWNlX2ZyZWUobXNwYWNlIG1zcCwgdm9pZCogbWVtKSB7CisgIGlmIChtZW0gIT0gMCkgeworICAgIG1jaHVua3B0ciBwICA9IG1lbTJjaHVuayhtZW0pOworI2lmIEZPT1RFUlMKKyAgICBtc3RhdGUgZm0gPSBnZXRfbXN0YXRlX2ZvcihwKTsKKyNlbHNlIC8qIEZPT1RFUlMgKi8KKyAgICBtc3RhdGUgZm0gPSAobXN0YXRlKW1zcDsKKyNlbmRpZiAvKiBGT09URVJTICovCisgICAgaWYgKCFva19tYWdpYyhmbSkpIHsKKyAgICAgIFVTQUdFX0VSUk9SX0FDVElPTihmbSwgcCk7CisgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghUFJFQUNUSU9OKGZtKSkgeworICAgICAgY2hlY2tfaW51c2VfY2h1bmsoZm0sIHApOworICAgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhmbSwgcCkgJiYgb2tfY2ludXNlKHApKSkgeworICAgICAgICBzaXplX3QgcHNpemUgPSBjaHVua3NpemUocCk7CisgICAgICAgIG1jaHVua3B0ciBuZXh0ID0gY2h1bmtfcGx1c19vZmZzZXQocCwgcHNpemUpOworICAgICAgICBpZiAoIXBpbnVzZShwKSkgeworICAgICAgICAgIHNpemVfdCBwcmV2c2l6ZSA9IHAtPnByZXZfZm9vdDsKKyAgICAgICAgICBpZiAoKHByZXZzaXplICYgSVNfTU1BUFBFRF9CSVQpICE9IDApIHsKKyAgICAgICAgICAgIHByZXZzaXplICY9IH5JU19NTUFQUEVEX0JJVDsKKyAgICAgICAgICAgIHBzaXplICs9IHByZXZzaXplICsgTU1BUF9GT09UX1BBRDsKKyAgICAgICAgICAgIGlmIChDQUxMX01VTk1BUCgoY2hhciopcCAtIHByZXZzaXplLCBwc2l6ZSkgPT0gMCkKKyAgICAgICAgICAgICAgZm0tPmZvb3RwcmludCAtPSBwc2l6ZTsKKyAgICAgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtY2h1bmtwdHIgcHJldiA9IGNodW5rX21pbnVzX29mZnNldChwLCBwcmV2c2l6ZSk7CisgICAgICAgICAgICBwc2l6ZSArPSBwcmV2c2l6ZTsKKyAgICAgICAgICAgIHAgPSBwcmV2OworICAgICAgICAgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhmbSwgcHJldikpKSB7IC8qIGNvbnNvbGlkYXRlIGJhY2t3YXJkICovCisgICAgICAgICAgICAgIGlmIChwICE9IGZtLT5kdikgeworICAgICAgICAgICAgICAgIHVubGlua19jaHVuayhmbSwgcCwgcHJldnNpemUpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGVsc2UgaWYgKChuZXh0LT5oZWFkICYgSU5VU0VfQklUUykgPT0gSU5VU0VfQklUUykgeworICAgICAgICAgICAgICAgIGZtLT5kdnNpemUgPSBwc2l6ZTsKKyAgICAgICAgICAgICAgICBzZXRfZnJlZV93aXRoX3BpbnVzZShwLCBwc2l6ZSwgbmV4dCk7CisgICAgICAgICAgICAgICAgZ290byBwb3N0YWN0aW9uOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIGdvdG8gZXJyb3JhY3Rpb247CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKFJUQ0hFQ0sob2tfbmV4dChwLCBuZXh0KSAmJiBva19waW51c2UobmV4dCkpKSB7CisgICAgICAgICAgaWYgKCFjaW51c2UobmV4dCkpIHsgIC8qIGNvbnNvbGlkYXRlIGZvcndhcmQgKi8KKyAgICAgICAgICAgIGlmIChuZXh0ID09IGZtLT50b3ApIHsKKyAgICAgICAgICAgICAgc2l6ZV90IHRzaXplID0gZm0tPnRvcHNpemUgKz0gcHNpemU7CisgICAgICAgICAgICAgIGZtLT50b3AgPSBwOworICAgICAgICAgICAgICBwLT5oZWFkID0gdHNpemUgfCBQSU5VU0VfQklUOworICAgICAgICAgICAgICBpZiAocCA9PSBmbS0+ZHYpIHsKKyAgICAgICAgICAgICAgICBmbS0+ZHYgPSAwOworICAgICAgICAgICAgICAgIGZtLT5kdnNpemUgPSAwOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGlmIChzaG91bGRfdHJpbShmbSwgdHNpemUpKQorICAgICAgICAgICAgICAgIHN5c190cmltKGZtLCAwKTsKKyAgICAgICAgICAgICAgZ290byBwb3N0YWN0aW9uOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAobmV4dCA9PSBmbS0+ZHYpIHsKKyAgICAgICAgICAgICAgc2l6ZV90IGRzaXplID0gZm0tPmR2c2l6ZSArPSBwc2l6ZTsKKyAgICAgICAgICAgICAgZm0tPmR2ID0gcDsKKyAgICAgICAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHAsIGRzaXplKTsKKyAgICAgICAgICAgICAgZ290byBwb3N0YWN0aW9uOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgIHNpemVfdCBuc2l6ZSA9IGNodW5rc2l6ZShuZXh0KTsKKyAgICAgICAgICAgICAgcHNpemUgKz0gbnNpemU7CisgICAgICAgICAgICAgIHVubGlua19jaHVuayhmbSwgbmV4dCwgbnNpemUpOworICAgICAgICAgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsocCwgcHNpemUpOworICAgICAgICAgICAgICBpZiAocCA9PSBmbS0+ZHYpIHsKKyAgICAgICAgICAgICAgICBmbS0+ZHZzaXplID0gcHNpemU7CisgICAgICAgICAgICAgICAgZ290byBwb3N0YWN0aW9uOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNldF9mcmVlX3dpdGhfcGludXNlKHAsIHBzaXplLCBuZXh0KTsKKyAgICAgICAgICBpbnNlcnRfY2h1bmsoZm0sIHAsIHBzaXplKTsKKyAgICAgICAgICBjaGVja19mcmVlX2NodW5rKGZtLCBwKTsKKyAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgICAgIH0KKyAgICAgIH0KKyAgICBlcnJvcmFjdGlvbjoKKyAgICAgIFVTQUdFX0VSUk9SX0FDVElPTihmbSwgcCk7CisgICAgcG9zdGFjdGlvbjoKKyAgICAgIFBPU1RBQ1RJT04oZm0pOworICAgIH0KKyAgfQorfQorCit2b2lkKiBtc3BhY2VfY2FsbG9jKG1zcGFjZSBtc3AsIHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxlbV9zaXplKSB7CisgIHZvaWQgKm1lbTsKKyAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisgIGlmICghb2tfbWFnaWMobXMpKSB7CisgICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLG1zKTsKKyAgICByZXR1cm4gMDsKKyAgfQorICBpZiAobl9lbGVtZW50cyAmJiBNQVhfU0laRV9UIC8gbl9lbGVtZW50cyA8IGVsZW1fc2l6ZSkgeworICAgIC8qIEZhaWwgb24gb3ZlcmZsb3cgKi8KKyAgICBNQUxMT0NfRkFJTFVSRV9BQ1RJT047CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKyAgZWxlbV9zaXplICo9IG5fZWxlbWVudHM7CisgIG1lbSA9IGludGVybmFsX21hbGxvYyhtcywgZWxlbV9zaXplKTsKKyAgaWYgKG1lbSAmJiBjYWxsb2NfbXVzdF9jbGVhcihtZW0yY2h1bmsobWVtKSkpCisgICAgbWVtc2V0KG1lbSwgMCwgZWxlbV9zaXplKTsKKyAgcmV0dXJuIG1lbTsKK30KKwordm9pZCogbXNwYWNlX3JlYWxsb2MobXNwYWNlIG1zcCwgdm9pZCogb2xkbWVtLCBzaXplX3QgYnl0ZXMpIHsKKyAgaWYgKG9sZG1lbSA9PSAwKQorICAgIHJldHVybiBtc3BhY2VfbWFsbG9jKG1zcCwgYnl0ZXMpOworI2lmZGVmIFJFQUxMT0NfWkVST19CWVRFU19GUkVFUworICBpZiAoYnl0ZXMgPT0gMCkgeworICAgIG1zcGFjZV9mcmVlKG1zcCwgb2xkbWVtKTsKKyAgICByZXR1cm4gMDsKKyAgfQorI2VuZGlmIC8qIFJFQUxMT0NfWkVST19CWVRFU19GUkVFUyAqLworICBlbHNlIHsKKyNpZiBGT09URVJTCisgICAgbWNodW5rcHRyIHAgID0gbWVtMmNodW5rKG9sZG1lbSk7CisgICAgbXN0YXRlIG1zID0gZ2V0X21zdGF0ZV9mb3IocCk7CisjZWxzZSAvKiBGT09URVJTICovCisgICAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisjZW5kaWYgLyogRk9PVEVSUyAqLworICAgIGlmICghb2tfbWFnaWMobXMpKSB7CisgICAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsbXMpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiBpbnRlcm5hbF9yZWFsbG9jKG1zLCBvbGRtZW0sIGJ5dGVzKTsKKyAgfQorfQorCit2b2lkKiBtc3BhY2VfbWVtYWxpZ24obXNwYWNlIG1zcCwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IGJ5dGVzKSB7CisgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOworICBpZiAoIW9rX21hZ2ljKG1zKSkgeworICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgcmV0dXJuIGludGVybmFsX21lbWFsaWduKG1zLCBhbGlnbm1lbnQsIGJ5dGVzKTsKK30KKwordm9pZCoqIG1zcGFjZV9pbmRlcGVuZGVudF9jYWxsb2MobXNwYWNlIG1zcCwgc2l6ZV90IG5fZWxlbWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZWxlbV9zaXplLCB2b2lkKiBjaHVua3NbXSkgeworICBzaXplX3Qgc3ogPSBlbGVtX3NpemU7IC8qIHNlcnZlcyBhcyAxLWVsZW1lbnQgYXJyYXkgKi8KKyAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisgIGlmICghb2tfbWFnaWMobXMpKSB7CisgICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLG1zKTsKKyAgICByZXR1cm4gMDsKKyAgfQorICByZXR1cm4gaWFsbG9jKG1zLCBuX2VsZW1lbnRzLCAmc3osIDMsIGNodW5rcyk7Cit9CisKK3ZvaWQqKiBtc3BhY2VfaW5kZXBlbmRlbnRfY29tYWxsb2MobXNwYWNlIG1zcCwgc2l6ZV90IG5fZWxlbWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplc1tdLCB2b2lkKiBjaHVua3NbXSkgeworICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKKyAgaWYgKCFva19tYWdpYyhtcykpIHsKKyAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsbXMpOworICAgIHJldHVybiAwOworICB9CisgIHJldHVybiBpYWxsb2MobXMsIG5fZWxlbWVudHMsIHNpemVzLCAwLCBjaHVua3MpOworfQorCitpbnQgbXNwYWNlX3RyaW0obXNwYWNlIG1zcCwgc2l6ZV90IHBhZCkgeworICBpbnQgcmVzdWx0ID0gMDsKKyAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisgIGlmIChva19tYWdpYyhtcykpIHsKKyAgICBpZiAoIVBSRUFDVElPTihtcykpIHsKKyAgICAgIHJlc3VsdCA9IHN5c190cmltKG1zLCBwYWQpOworICAgICAgUE9TVEFDVElPTihtcyk7CisgICAgfQorICB9CisgIGVsc2UgeworICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBtc3BhY2VfbWFsbG9jX3N0YXRzKG1zcGFjZSBtc3ApIHsKKyAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisgIGlmIChva19tYWdpYyhtcykpIHsKKyAgICBpbnRlcm5hbF9tYWxsb2Nfc3RhdHMobXMpOworICB9CisgIGVsc2UgeworICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7CisgIH0KK30KKworc2l6ZV90IG1zcGFjZV9mb290cHJpbnQobXNwYWNlIG1zcCkgeworICBzaXplX3QgcmVzdWx0OworICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKKyAgaWYgKG9rX21hZ2ljKG1zKSkgeworICAgIHJlc3VsdCA9IG1zLT5mb290cHJpbnQ7CisgIH0KKyAgZWxzZSB7CisgICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLG1zKTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCisjaWYgVVNFX01BWF9BTExPV0VEX0ZPT1RQUklOVAorc2l6ZV90IG1zcGFjZV9tYXhfYWxsb3dlZF9mb290cHJpbnQobXNwYWNlIG1zcCkgeworICBzaXplX3QgcmVzdWx0OworICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKKyAgaWYgKG9rX21hZ2ljKG1zKSkgeworICAgIHJlc3VsdCA9IG1zLT5tYXhfYWxsb3dlZF9mb290cHJpbnQ7CisgIH0KKyAgZWxzZSB7CisgICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLG1zKTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIG1zcGFjZV9zZXRfbWF4X2FsbG93ZWRfZm9vdHByaW50KG1zcGFjZSBtc3AsIHNpemVfdCBieXRlcykgeworICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKKyAgaWYgKG9rX21hZ2ljKG1zKSkgeworICAgIGlmIChieXRlcyA+IG1zLT5mb290cHJpbnQpIHsKKyAgICAgIC8qIEluY3JlYXNlIHRoZSBzaXplIGluIG11bHRpcGxlcyBvZiB0aGUgZ3JhbnVsYXJpdHksCisgICAgICAgKiB3aGljaCBpcyB0aGUgc21hbGxlc3QgdW5pdCB3ZSByZXF1ZXN0IGZyb20gdGhlIHN5c3RlbS4KKyAgICAgICAqLworICAgICAgbXMtPm1heF9hbGxvd2VkX2Zvb3RwcmludCA9IG1zLT5mb290cHJpbnQgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyYW51bGFyaXR5X2FsaWduKGJ5dGVzIC0gbXMtPmZvb3RwcmludCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgLy9UT0RPOiBhbGxvdyBmb3IgcmVkdWNpbmcgdGhlIG1heCBmb290cHJpbnQKKyAgICAgIG1zLT5tYXhfYWxsb3dlZF9mb290cHJpbnQgPSBtcy0+Zm9vdHByaW50OworICAgIH0KKyAgfQorICBlbHNlIHsKKyAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsbXMpOworICB9Cit9CisjZW5kaWYKKworc2l6ZV90IG1zcGFjZV9tYXhfZm9vdHByaW50KG1zcGFjZSBtc3ApIHsKKyAgc2l6ZV90IHJlc3VsdDsKKyAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisgIGlmIChva19tYWdpYyhtcykpIHsKKyAgICByZXN1bHQgPSBtcy0+bWF4X2Zvb3RwcmludDsKKyAgfQorICBlbHNlIHsKKyAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsbXMpOworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKKworI2lmICFOT19NQUxMSU5GTworc3RydWN0IG1hbGxpbmZvIG1zcGFjZV9tYWxsaW5mbyhtc3BhY2UgbXNwKSB7CisgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOworICBpZiAoIW9rX21hZ2ljKG1zKSkgeworICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7CisgIH0KKyAgcmV0dXJuIGludGVybmFsX21hbGxpbmZvKG1zKTsKK30KKyNlbmRpZiAvKiBOT19NQUxMSU5GTyAqLworCitpbnQgbXNwYWNlX21hbGxvcHQoaW50IHBhcmFtX251bWJlciwgaW50IHZhbHVlKSB7CisgIHJldHVybiBjaGFuZ2VfbXBhcmFtKHBhcmFtX251bWJlciwgdmFsdWUpOworfQorCisjZW5kaWYgLyogTVNQQUNFUyAqLworCisjaWYgTVNQQUNFUyAmJiBPTkxZX01TUEFDRVMKK3ZvaWQgbXNwYWNlX3dhbGtfZnJlZV9wYWdlcyhtc3BhY2UgbXNwLAorICAgIHZvaWQoKmhhbmRsZXIpKHZvaWQgKnN0YXJ0LCB2b2lkICplbmQsIHZvaWQgKmFyZyksIHZvaWQgKmhhcmcpCit7CisgIG1zdGF0ZSBtID0gKG1zdGF0ZSltc3A7CisgIGlmICghb2tfbWFnaWMobSkpIHsKKyAgICBVU0FHRV9FUlJPUl9BQ1RJT04obSxtKTsKKyAgICByZXR1cm47CisgIH0KKyNlbHNlCit2b2lkIGRsbWFsbG9jX3dhbGtfZnJlZV9wYWdlcyh2b2lkKCpoYW5kbGVyKSh2b2lkICpzdGFydCwgdm9pZCAqZW5kLCB2b2lkICphcmcpLAorICAgIHZvaWQgKmhhcmcpCit7CisgIG1zdGF0ZSBtID0gKG1zdGF0ZSlnbTsKKyNlbmRpZgorICBpZiAoIVBSRUFDVElPTihtKSkgeworICAgIGlmIChpc19pbml0aWFsaXplZChtKSkgeworICAgICAgbXNlZ21lbnRwdHIgcyA9ICZtLT5zZWc7CisgICAgICB3aGlsZSAocyAhPSAwKSB7CisgICAgICAgIG1jaHVua3B0ciBwID0gYWxpZ25fYXNfY2h1bmsocy0+YmFzZSk7CisgICAgICAgIHdoaWxlIChzZWdtZW50X2hvbGRzKHMsIHApICYmCisgICAgICAgICAgICAgICBwICE9IG0tPnRvcCAmJiBwLT5oZWFkICE9IEZFTkNFUE9TVF9IRUFEKSB7CisgICAgICAgICAgdm9pZCAqY2h1bmtwdHIsICp1c2VycHRyOworICAgICAgICAgIHNpemVfdCBjaHVua2xlbiwgdXNlcmxlbjsKKyAgICAgICAgICBjaHVua3B0ciA9IHA7CisgICAgICAgICAgY2h1bmtsZW4gPSBjaHVua3NpemUocCk7CisgICAgICAgICAgaWYgKCFjaW51c2UocCkpIHsKKyAgICAgICAgICAgIHZvaWQgKnN0YXJ0OworICAgICAgICAgICAgaWYgKGlzX3NtYWxsKGNodW5rbGVuKSkgeworICAgICAgICAgICAgICBzdGFydCA9ICh2b2lkICopKHAgKyAxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICBzdGFydCA9ICh2b2lkICopKCh0Y2h1bmtwdHIpcCArIDEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaGFuZGxlcihzdGFydCwgbmV4dF9jaHVuayhwKSwgaGFyZyk7CisgICAgICAgICAgfQorICAgICAgICAgIHAgPSBuZXh0X2NodW5rKHApOworICAgICAgICB9CisgICAgICAgIGlmIChwID09IG0tPnRvcCkgeworICAgICAgICAgIGhhbmRsZXIoKHZvaWQgKikocCArIDEpLCBuZXh0X2NodW5rKHApLCBoYXJnKTsKKyAgICAgICAgfQorICAgICAgICBzID0gcy0+bmV4dDsKKyAgICAgIH0KKyAgICB9CisgICAgUE9TVEFDVElPTihtKTsKKyAgfQorfQorCisKKyNpZiBNU1BBQ0VTICYmIE9OTFlfTVNQQUNFUwordm9pZCBtc3BhY2Vfd2Fsa19oZWFwKG1zcGFjZSBtc3AsCisgICAgICAgICAgICAgICAgICAgICAgdm9pZCgqaGFuZGxlcikoY29uc3Qgdm9pZCAqY2h1bmtwdHIsIHNpemVfdCBjaHVua2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICp1c2VycHRyLCBzaXplX3QgdXNlcmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICphcmcpLAorICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmhhcmcpCit7CisgIG1zZWdtZW50cHRyIHM7CisgIG1zdGF0ZSBtID0gKG1zdGF0ZSltc3A7CisgIGlmICghb2tfbWFnaWMobSkpIHsKKyAgICBVU0FHRV9FUlJPUl9BQ1RJT04obSxtKTsKKyAgICByZXR1cm47CisgIH0KKyNlbHNlCit2b2lkIGRsbWFsbG9jX3dhbGtfaGVhcCh2b2lkKCpoYW5kbGVyKShjb25zdCB2b2lkICpjaHVua3B0ciwgc2l6ZV90IGNodW5rbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqdXNlcnB0ciwgc2l6ZV90IHVzZXJsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICphcmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqaGFyZykKK3sKKyAgbXNlZ21lbnRwdHIgczsKKyAgbXN0YXRlIG0gPSAobXN0YXRlKWdtOworI2VuZGlmCisKKyAgcyA9ICZtLT5zZWc7CisgIHdoaWxlIChzICE9IDApIHsKKyAgICBtY2h1bmtwdHIgcCA9IGFsaWduX2FzX2NodW5rKHMtPmJhc2UpOworICAgIHdoaWxlIChzZWdtZW50X2hvbGRzKHMsIHApICYmCisgICAgICAgICAgIHAgIT0gbS0+dG9wICYmIHAtPmhlYWQgIT0gRkVOQ0VQT1NUX0hFQUQpIHsKKyAgICAgIHZvaWQgKmNodW5rcHRyLCAqdXNlcnB0cjsKKyAgICAgIHNpemVfdCBjaHVua2xlbiwgdXNlcmxlbjsKKyAgICAgIGNodW5rcHRyID0gcDsKKyAgICAgIGNodW5rbGVuID0gY2h1bmtzaXplKHApOworICAgICAgaWYgKGNpbnVzZShwKSkgeworICAgICAgICB1c2VycHRyID0gY2h1bmsybWVtKHApOworICAgICAgICB1c2VybGVuID0gY2h1bmtsZW4gLSBvdmVyaGVhZF9mb3IocCk7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgdXNlcnB0ciA9IE5VTEw7CisgICAgICAgIHVzZXJsZW4gPSAwOworICAgICAgfQorICAgICAgaGFuZGxlcihjaHVua3B0ciwgY2h1bmtsZW4sIHVzZXJwdHIsIHVzZXJsZW4sIGhhcmcpOworICAgICAgcCA9IG5leHRfY2h1bmsocCk7CisgICAgfQorICAgIGlmIChwID09IG0tPnRvcCkgeworICAgICAgLyogVGhlIHRvcCBjaHVuayBpcyBqdXN0IGEgYmlnIGZyZWUgY2h1bmsgZm9yIG91ciBwdXJwb3Nlcy4KKyAgICAgICAqLworICAgICAgaGFuZGxlcihtLT50b3AsIG0tPnRvcHNpemUsIE5VTEwsIDAsIGhhcmcpOworICAgIH0KKyAgICBzID0gcy0+bmV4dDsKKyAgfQorfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLSBBbHRlcm5hdGl2ZSBNT1JFQ09SRSBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICBHdWlkZWxpbmVzIGZvciBjcmVhdGluZyBhIGN1c3RvbSB2ZXJzaW9uIG9mIE1PUkVDT1JFOgorCisgICogRm9yIGJlc3QgcGVyZm9ybWFuY2UsIE1PUkVDT1JFIHNob3VsZCBhbGxvY2F0ZSBpbiBtdWx0aXBsZXMgb2YgcGFnZXNpemUuCisgICogTU9SRUNPUkUgbWF5IGFsbG9jYXRlIG1vcmUgbWVtb3J5IHRoYW4gcmVxdWVzdGVkLiAoT3IgZXZlbiBsZXNzLAorICAgICAgYnV0IHRoaXMgd2lsbCB1c3VhbGx5IHJlc3VsdCBpbiBhIG1hbGxvYyBmYWlsdXJlLikKKyAgKiBNT1JFQ09SRSBtdXN0IG5vdCBhbGxvY2F0ZSBtZW1vcnkgd2hlbiBnaXZlbiBhcmd1bWVudCB6ZXJvLCBidXQKKyAgICAgIGluc3RlYWQgcmV0dXJuIG9uZSBwYXN0IHRoZSBlbmQgYWRkcmVzcyBvZiBtZW1vcnkgZnJvbSBwcmV2aW91cworICAgICAgbm9uemVybyBjYWxsLgorICAqIEZvciBiZXN0IHBlcmZvcm1hbmNlLCBjb25zZWN1dGl2ZSBjYWxscyB0byBNT1JFQ09SRSB3aXRoIHBvc2l0aXZlCisgICAgICBhcmd1bWVudHMgc2hvdWxkIHJldHVybiBpbmNyZWFzaW5nIGFkZHJlc3NlcywgaW5kaWNhdGluZyB0aGF0CisgICAgICBzcGFjZSBoYXMgYmVlbiBjb250aWd1b3VzbHkgZXh0ZW5kZWQuCisgICogRXZlbiB0aG91Z2ggY29uc2VjdXRpdmUgY2FsbHMgdG8gTU9SRUNPUkUgbmVlZCBub3QgcmV0dXJuIGNvbnRpZ3VvdXMKKyAgICAgIGFkZHJlc3NlcywgaXQgbXVzdCBiZSBPSyBmb3IgbWFsbG9jJ2VkIGNodW5rcyB0byBzcGFuIG11bHRpcGxlCisgICAgICByZWdpb25zIGluIHRob3NlIGNhc2VzIHdoZXJlIHRoZXkgZG8gaGFwcGVuIHRvIGJlIGNvbnRpZ3VvdXMuCisgICogTU9SRUNPUkUgbmVlZCBub3QgaGFuZGxlIG5lZ2F0aXZlIGFyZ3VtZW50cyAtLSBpdCBtYXkgaW5zdGVhZAorICAgICAganVzdCByZXR1cm4gTUZBSUwgd2hlbiBnaXZlbiBuZWdhdGl2ZSBhcmd1bWVudHMuCisgICAgICBOZWdhdGl2ZSBhcmd1bWVudHMgYXJlIGFsd2F5cyBtdWx0aXBsZXMgb2YgcGFnZXNpemUuIE1PUkVDT1JFCisgICAgICBtdXN0IG5vdCBtaXNpbnRlcnByZXQgbmVnYXRpdmUgYXJncyBhcyBsYXJnZSBwb3NpdGl2ZSB1bnNpZ25lZAorICAgICAgYXJncy4gWW91IGNhbiBzdXBwcmVzcyBhbGwgc3VjaCBjYWxscyBmcm9tIGV2ZW4gb2NjdXJyaW5nIGJ5IGRlZmluaW5nCisgICAgICBNT1JFQ09SRV9DQU5OT1RfVFJJTSwKKworICBBcyBhbiBleGFtcGxlIGFsdGVybmF0aXZlIE1PUkVDT1JFLCBoZXJlIGlzIGEgY3VzdG9tIGFsbG9jYXRvcgorICBraW5kbHkgY29udHJpYnV0ZWQgZm9yIHByZS1PU1ggbWFjT1MuICBJdCB1c2VzIHZpcnR1YWxseSBidXQgbm90CisgIG5lY2Vzc2FyaWx5IHBoeXNpY2FsbHkgY29udGlndW91cyBub24tcGFnZWQgbWVtb3J5IChsb2NrZWQgaW4sCisgIHByZXNlbnQgYW5kIHdvbid0IGdldCBzd2FwcGVkIG91dCkuICBZb3UgY2FuIHVzZSBpdCBieSB1bmNvbW1lbnRpbmcKKyAgdGhpcyBzZWN0aW9uLCBhZGRpbmcgc29tZSAjaW5jbHVkZXMsIGFuZCBzZXR0aW5nIHVwIHRoZSBhcHByb3ByaWF0ZQorICBkZWZpbmVzIGFib3ZlOgorCisgICAgICAjZGVmaW5lIE1PUkVDT1JFIG9zTW9yZUNvcmUKKworICBUaGVyZSBpcyBhbHNvIGEgc2h1dGRvd24gcm91dGluZSB0aGF0IHNob3VsZCBzb21laG93IGJlIGNhbGxlZCBmb3IKKyAgY2xlYW51cCB1cG9uIHByb2dyYW0gZXhpdC4KKworICAjZGVmaW5lIE1BWF9QT09MX0VOVFJJRVMgMTAwCisgICNkZWZpbmUgTUlOSU1VTV9NT1JFQ09SRV9TSVpFICAoNjQgKiAxMDI0VSkKKyAgc3RhdGljIGludCBuZXh0X29zX3Bvb2w7CisgIHZvaWQgKm91cl9vc19wb29sc1tNQVhfUE9PTF9FTlRSSUVTXTsKKworICB2b2lkICpvc01vcmVDb3JlKGludCBzaXplKQorICB7CisgICAgdm9pZCAqcHRyID0gMDsKKyAgICBzdGF0aWMgdm9pZCAqc2Jya190b3AgPSAwOworCisgICAgaWYgKHNpemUgPiAwKQorICAgIHsKKyAgICAgIGlmIChzaXplIDwgTUlOSU1VTV9NT1JFQ09SRV9TSVpFKQorICAgICAgICAgc2l6ZSA9IE1JTklNVU1fTU9SRUNPUkVfU0laRTsKKyAgICAgIGlmIChDdXJyZW50RXhlY3V0aW9uTGV2ZWwoKSA9PSBrVGFza0xldmVsKQorICAgICAgICAgcHRyID0gUG9vbEFsbG9jYXRlUmVzaWRlbnQoc2l6ZSArIFJNX1BBR0VfU0laRSwgMCk7CisgICAgICBpZiAocHRyID09IDApCisgICAgICB7CisgICAgICAgIHJldHVybiAodm9pZCAqKSBNRkFJTDsKKyAgICAgIH0KKyAgICAgIC8vIHNhdmUgcHRycyBzbyB0aGV5IGNhbiBiZSBmcmVlZCBkdXJpbmcgY2xlYW51cAorICAgICAgb3VyX29zX3Bvb2xzW25leHRfb3NfcG9vbF0gPSBwdHI7CisgICAgICBuZXh0X29zX3Bvb2wrKzsKKyAgICAgIHB0ciA9ICh2b2lkICopICgoKChzaXplX3QpIHB0cikgKyBSTV9QQUdFX01BU0spICYgflJNX1BBR0VfTUFTSyk7CisgICAgICBzYnJrX3RvcCA9IChjaGFyICopIHB0ciArIHNpemU7CisgICAgICByZXR1cm4gcHRyOworICAgIH0KKyAgICBlbHNlIGlmIChzaXplIDwgMCkKKyAgICB7CisgICAgICAvLyB3ZSBkb24ndCBjdXJyZW50bHkgc3VwcG9ydCBzaHJpbmsgYmVoYXZpb3IKKyAgICAgIHJldHVybiAodm9pZCAqKSBNRkFJTDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIHJldHVybiBzYnJrX3RvcDsKKyAgICB9CisgIH0KKworICAvLyBjbGVhbnVwIGFueSBhbGxvY2F0ZWQgbWVtb3J5IHBvb2xzCisgIC8vIGNhbGxlZCBhcyBsYXN0IHRoaW5nIGJlZm9yZSBzaHV0dGluZyBkb3duIGRyaXZlcgorCisgIHZvaWQgb3NDbGVhbnVwTWVtKHZvaWQpCisgIHsKKyAgICB2b2lkICoqcHRyOworCisgICAgZm9yIChwdHIgPSBvdXJfb3NfcG9vbHM7IHB0ciA8ICZvdXJfb3NfcG9vbHNbTUFYX1BPT0xfRU5UUklFU107IHB0cisrKQorICAgICAgaWYgKCpwdHIpCisgICAgICB7CisgICAgICAgICBQb29sRGVhbGxvY2F0ZSgqcHRyKTsKKyAgICAgICAgICpwdHIgPSAwOworICAgICAgfQorICB9CisKKyovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0hpc3Rvcnk6CisgICAgVjIuOC4zIFRodSBTZXAgMjIgMTE6MTY6MzIgMjAwNSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIEFkZCBtYXhfZm9vdHByaW50IGZ1bmN0aW9ucworICAgICAgKiBFbnN1cmUgYWxsIGFwcHJvcHJpYXRlIGxpdGVyYWxzIGFyZSBzaXplX3QKKyAgICAgICogRml4IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHByb2JsZW0gZm9yIHNvbWUgI2RlZmluZSBzZXR0aW5ncworICAgICAgKiBBdm9pZCBjb25jYXRlbmF0aW5nIHNlZ21lbnRzIHdpdGggdGhlIG9uZSBwcm92aWRlZAorICAgICAgICBpbiBjcmVhdGVfbXNwYWNlX3dpdGhfYmFzZQorICAgICAgKiBSZW5hbWUgc29tZSB2YXJpYWJsZXMgdG8gYXZvaWQgY29tcGlsZXIgc2hhZG93aW5nIHdhcm5pbmdzCisgICAgICAqIFVzZSBleHBsaWNpdCBsb2NrIGluaXRpYWxpemF0aW9uLgorICAgICAgKiBCZXR0ZXIgaGFuZGxpbmcgb2Ygc2JyayBpbnRlcmZlcmVuY2UuCisgICAgICAqIFNpbXBsaWZ5IGFuZCBmaXggc2VnbWVudCBpbnNlcnRpb24sIHRyaW1taW5nIGFuZCBtc3BhY2VfZGVzdHJveQorICAgICAgKiBSZWluc3RhdGUgUkVBTExPQ19aRVJPX0JZVEVTX0ZSRUVTIG9wdGlvbiBmcm9tIDIuNy54CisgICAgICAqIFRoYW5rcyBlc3BlY2lhbGx5IHRvIERlbm5pcyBGbGFuYWdhbiBmb3IgaGVscCBvbiB0aGVzZS4KKworICAgIFYyLjguMiBTdW4gSnVuIDEyIDE2OjAxOjEwIDIwMDUgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQorICAgICAgKiBGaXggbWVtYWxpZ24gYnJhY2UgZXJyb3IuCisKKyAgICBWMi44LjEgV2VkIEp1biAgOCAxNjoxMTo0NiAyMDA1ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogRml4IGltcHJvcGVyICNlbmRpZiBuZXN0aW5nIGluIEMrKworICAgICAgKiBBZGQgZXhwbGljaXQgY2FzdHMgbmVlZGVkIGZvciBDKysKKworICAgIFYyLjguMCBNb24gTWF5IDMwIDE0OjA5OjAyIDIwMDUgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQorICAgICAgKiBVc2UgdHJlZXMgZm9yIGxhcmdlIGJpbnMKKyAgICAgICogU3VwcG9ydCBtc3BhY2VzCisgICAgICAqIFVzZSBzZWdtZW50cyB0byB1bmlmeSBzYnJrLWJhc2VkIGFuZCBtbWFwLWJhc2VkIHN5c3RlbSBhbGxvY2F0aW9uLAorICAgICAgICByZW1vdmluZyBuZWVkIGZvciBlbXVsYXRpb24gb24gbW9zdCBwbGF0Zm9ybXMgd2l0aG91dCBzYnJrLgorICAgICAgKiBEZWZhdWx0IHNhZmV0eSBjaGVja3MKKyAgICAgICogT3B0aW9uYWwgZm9vdGVyIGNoZWNrcy4gVGhhbmtzIHRvIFdpbGxpYW0gUm9iZXJ0c29uIGZvciB0aGUgaWRlYS4KKyAgICAgICogSW50ZXJuYWwgY29kZSByZWZhY3RvcmluZworICAgICAgKiBJbmNvcnBvcmF0ZSBzdWdnZXN0aW9ucyBhbmQgcGxhdGZvcm0tc3BlY2lmaWMgY2hhbmdlcy4KKyAgICAgICAgVGhhbmtzIHRvIERlbm5pcyBGbGFuYWdhbiwgQ29saW4gUGx1bWIsIE5pYWxsIERvdWdsYXMsCisgICAgICAgIEFhcm9uIEJhY2htYW5uLCAgRW1lcnkgQmVyZ2VyLCBhbmQgb3RoZXJzLgorICAgICAgKiBTcGVlZCB1cCBub24tZmFzdGJpbiBwcm9jZXNzaW5nIGVub3VnaCB0byByZW1vdmUgZmFzdGJpbnMuCisgICAgICAqIFJlbW92ZSB1c2VsZXNzIGNmcmVlKCkgdG8gYXZvaWQgY29uZmxpY3RzIHdpdGggb3RoZXIgYXBwcy4KKyAgICAgICogUmVtb3ZlIGludGVybmFsIG1lbWNweSwgbWVtc2V0LiBDb21waWxlcnMgaGFuZGxlIGJ1aWx0aW5zIGJldHRlci4KKyAgICAgICogUmVtb3ZlIHNvbWUgb3B0aW9ucyB0aGF0IG5vIG9uZSBldmVyIHVzZWQgYW5kIHJlbmFtZSBvdGhlcnMuCisKKyAgICBWMi43LjIgU2F0IEF1ZyAxNyAwOTowNzozMCAyMDAyICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogRml4IG1hbGxvY19zdGF0ZSBiaXRtYXAgYXJyYXkgbWlzZGVjbGFyYXRpb24KKworICAgIFYyLjcuMSBUaHUgSnVsIDI1IDEwOjU4OjAzIDIwMDIgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQorICAgICAgKiBBbGxvdyB0dW5pbmcgb2YgRklSU1RfU09SVEVEX0JJTl9TSVpFCisgICAgICAqIFVzZSBQVFJfVUlOVCBhcyB0eXBlIGZvciBhbGwgcHRyLT5pbnQgY2FzdHMuIFRoYW5rcyB0byBKb2huIEJlbG1vbnRlLgorICAgICAgKiBCZXR0ZXIgZGV0ZWN0aW9uIGFuZCBzdXBwb3J0IGZvciBub24tY29udGlndW91c25lc3Mgb2YgTU9SRUNPUkUuCisgICAgICAgIFRoYW5rcyB0byBBbmRyZWFzIE11ZWxsZXIsIENvbmFsIFdhbHNoLCBhbmQgV29sZnJhbSBHbG9nZXIKKyAgICAgICogQnlwYXNzIG1vc3Qgb2YgbWFsbG9jIGlmIG5vIGZyZWVzLiBUaGFua3MgVG8gRW1lcnkgQmVyZ2VyLgorICAgICAgKiBGaXggZnJlZWluZyBvZiBvbGQgdG9wIG5vbi1jb250aWd1b3VzIGNodW5rIGltIHN5c21hbGxvYy4KKyAgICAgICogUmFpc2VkIGRlZmF1bHQgdHJpbSBhbmQgbWFwIHRocmVzaG9sZHMgdG8gMjU2Sy4KKyAgICAgICogRml4IG1tYXAtcmVsYXRlZCAjZGVmaW5lcy4gVGhhbmtzIHRvIEx1Ym9zIEx1bmFrLgorICAgICAgKiBGaXggY29weSBtYWNyb3M7IGFkZGVkIExBQ0tTX0ZDTlRMX0guIFRoYW5rcyB0byBOZWFsIFdhbGZpZWxkLgorICAgICAgKiBCcmFuY2gtZnJlZSBiaW4gY2FsY3VsYXRpb24KKyAgICAgICogRGVmYXVsdCB0cmltIGFuZCBtbWFwIHRocmVzaG9sZHMgbm93IDI1NksuCisKKyAgICBWMi43LjAgU3VuIE1hciAxMSAxNDoxNDowNiAyMDAxICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogSW50cm9kdWNlIGluZGVwZW5kZW50X2NvbWFsbG9jIGFuZCBpbmRlcGVuZGVudF9jYWxsb2MuCisgICAgICAgIFRoYW5rcyB0byBNaWNoYWVsIFBhY2hvcyBmb3IgbW90aXZhdGlvbiBhbmQgaGVscC4KKyAgICAgICogTWFrZSBvcHRpb25hbCAuaCBmaWxlIGF2YWlsYWJsZQorICAgICAgKiBBbGxvdyA+IDJHQiByZXF1ZXN0cyBvbiAzMmJpdCBzeXN0ZW1zLgorICAgICAgKiBuZXcgV0lOMzIgc2JyaywgbW1hcCwgbXVubWFwLCBsb2NrIGNvZGUgZnJvbSA8V2FsdGVyQEdlTmVTeXMtZS5kZT4uCisgICAgICAgIFRoYW5rcyBhbHNvIHRvIEFuZHJlYXMgTXVlbGxlciA8YS5tdWVsbGVyIGF0IHBhcmFkYXRlYy5kZT4sCisgICAgICAgIGFuZCBBbm9ueW1vdXMuCisgICAgICAqIEFsbG93IG92ZXJyaWRlIG9mIE1BTExPQ19BTElHTk1FTlQgKFRoYW5rcyB0byBSdXVkIFdhaWogZm9yCisgICAgICAgIGhlbHBpbmcgdGVzdCB0aGlzLikKKyAgICAgICogbWVtYWxpZ246IGNoZWNrIGFsaWdubWVudCBhcmcKKyAgICAgICogcmVhbGxvYzogZG9uJ3QgdHJ5IHRvIHNoaWZ0IGNodW5rcyBiYWNrd2FyZHMsIHNpbmNlIHRoaXMKKyAgICAgICAgbGVhZHMgdG8gIG1vcmUgZnJhZ21lbnRhdGlvbiBpbiBzb21lIHByb2dyYW1zIGFuZCBkb2Vzbid0CisgICAgICAgIHNlZW0gdG8gaGVscCBpbiBhbnkgb3RoZXJzLgorICAgICAgKiBDb2xsZWN0IGFsbCBjYXNlcyBpbiBtYWxsb2MgcmVxdWlyaW5nIHN5c3RlbSBtZW1vcnkgaW50byBzeXNtYWxsb2MKKyAgICAgICogVXNlIG1tYXAgYXMgYmFja3VwIHRvIHNicmsKKyAgICAgICogUGxhY2UgYWxsIGludGVybmFsIHN0YXRlIGluIG1hbGxvY19zdGF0ZQorICAgICAgKiBJbnRyb2R1Y2UgZmFzdGJpbnMgKGFsdGhvdWdoIHNpbWlsYXIgdG8gMi41LjEpCisgICAgICAqIE1hbnkgbWlub3IgdHVuaW5ncyBhbmQgY29zbWV0aWMgaW1wcm92ZW1lbnRzCisgICAgICAqIEludHJvZHVjZSBVU0VfUFVCTElDX01BTExPQ19XUkFQUEVSUywgVVNFX01BTExPQ19MT0NLCisgICAgICAqIEludHJvZHVjZSBNQUxMT0NfRkFJTFVSRV9BQ1RJT04sIE1PUkVDT1JFX0NPTlRJR1VPVVMKKyAgICAgICAgVGhhbmtzIHRvIFRvbnkgRS4gQmVubmV0dCA8dGJlbm5ldHRAbnZpZGlhLmNvbT4gYW5kIG90aGVycy4KKyAgICAgICogSW5jbHVkZSBlcnJuby5oIHRvIHN1cHBvcnQgZGVmYXVsdCBmYWlsdXJlIGFjdGlvbi4KKworICAgIFYyLjYuNiBTdW4gRGVjICA1IDA3OjQyOjE5IDE5OTkgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQorICAgICAgKiByZXR1cm4gbnVsbCBmb3IgbmVnYXRpdmUgYXJndW1lbnRzCisgICAgICAqIEFkZGVkIFNldmVyYWwgV0lOMzIgY2xlYW51cHMgZnJvbSBNYXJ0aW4gQy4gRm9uZyA8bWNmb25nIGF0IHlhaG9vLmNvbT4KKyAgICAgICAgICogQWRkICdMQUNLU19TWVNfUEFSQU1fSCcgZm9yIHRob3NlIHN5c3RlbXMgd2l0aG91dCAnc3lzL3BhcmFtLmgnCisgICAgICAgICAgKGUuZy4gV0lOMzIgcGxhdGZvcm1zKQorICAgICAgICAgKiBDbGVhbnVwIGhlYWRlciBmaWxlIGluY2x1c2lvbiBmb3IgV0lOMzIgcGxhdGZvcm1zCisgICAgICAgICAqIENsZWFudXAgY29kZSB0byBhdm9pZCBNaWNyb3NvZnQgVmlzdWFsIEMrKyBjb21waWxlciBjb21wbGFpbnRzCisgICAgICAgICAqIEFkZCAnVVNFX0RMX1BSRUZJWCcgdG8gcXVpY2tseSBhbGxvdyBjby1leGlzdGVuY2Ugd2l0aCBleGlzdGluZworICAgICAgICAgICBtZW1vcnkgYWxsb2NhdGlvbiByb3V0aW5lcworICAgICAgICAgKiBTZXQgJ21hbGxvY19nZXRwYWdlc2l6ZScgZm9yIFdJTjMyIHBsYXRmb3JtcyAobmVlZHMgbW9yZSB3b3JrKQorICAgICAgICAgKiBVc2UgJ2Fzc2VydCcgcmF0aGVyIHRoYW4gJ0FTU0VSVCcgaW4gV0lOMzIgY29kZSB0byBjb25mb3JtIHRvCisgICAgICAgICAgIHVzYWdlIG9mICdhc3NlcnQnIGluIG5vbi1XSU4zMiBjb2RlCisgICAgICAgICAqIEltcHJvdmUgV0lOMzIgJ3NicmsoKScgZW11bGF0aW9uJ3MgJ2ZpbmRSZWdpb24oKScgcm91dGluZSB0bworICAgICAgICAgICBhdm9pZCBpbmZpbml0ZSBsb29wCisgICAgICAqIEFsd2F5cyBjYWxsICdmUkVlKCknIHJhdGhlciB0aGFuICdmcmVlKCknCisKKyAgICBWMi42LjUgV2VkIEp1biAxNyAxNTo1NzozMSAxOTk4ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogRml4ZWQgb3JkZXJpbmcgcHJvYmxlbSB3aXRoIGJvdW5kYXJ5LXN0YW1waW5nCisKKyAgICBWMi42LjMgU3VuIE1heSAxOSAwODoxNzo1OCAxOTk2ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogQWRkZWQgcHZhbGxvYywgYXMgcmVjb21tZW5kZWQgYnkgSC5KLiBMaXUKKyAgICAgICogQWRkZWQgNjRiaXQgcG9pbnRlciBzdXBwb3J0IG1haW5seSBmcm9tIFdvbGZyYW0gR2xvZ2VyCisgICAgICAqIEFkZGVkIGFub255bW91c2x5IGRvbmF0ZWQgV0lOMzIgc2JyayBlbXVsYXRpb24KKyAgICAgICogTWFsbG9jLCBjYWxsb2MsIGdldHBhZ2VzaXplOiBhZGQgb3B0aW1pemF0aW9ucyBmcm9tIFJheW1vbmQgTmlqc3NlbgorICAgICAgKiBtYWxsb2NfZXh0ZW5kX3RvcDogZml4IG1hc2sgZXJyb3IgdGhhdCBjYXVzZWQgd2FzdGFnZSBhZnRlcgorICAgICAgICBmb3JlaWduIHNicmtzCisgICAgICAqIEFkZCBsaW51eCBtcmVtYXAgc3VwcG9ydCBjb2RlIGZyb20gSEogTGl1CisKKyAgICBWMi42LjIgVHVlIERlYyAgNSAwNjo1Mjo1NSAxOTk1ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogSW50ZWdyYXRlZCBtb3N0IGRvY3VtZW50YXRpb24gd2l0aCB0aGUgY29kZS4KKyAgICAgICogQWRkIHN1cHBvcnQgZm9yIG1tYXAsIHdpdGggaGVscCBmcm9tCisgICAgICAgIFdvbGZyYW0gR2xvZ2VyIChHbG9nZXJAbHJ6LnVuaS1tdWVuY2hlbi5kZSkuCisgICAgICAqIFVzZSBsYXN0X3JlbWFpbmRlciBpbiBtb3JlIGNhc2VzLgorICAgICAgKiBQYWNrIGJpbnMgdXNpbmcgaWRlYSBmcm9tICBjb2xpbkBueXgxMC5jcy5kdS5lZHUKKyAgICAgICogVXNlIG9yZGVyZWQgYmlucyBpbnN0ZWFkIG9mIGJlc3QtZml0IHRocmVzaGhvbGQKKyAgICAgICogRWxpbWluYXRlIGJsb2NrLWxvY2FsIGRlY2xzIHRvIHNpbXBsaWZ5IHRyYWNpbmcgYW5kIGRlYnVnZ2luZy4KKyAgICAgICogU3VwcG9ydCBhbm90aGVyIGNhc2Ugb2YgcmVhbGxvYyB2aWEgbW92ZSBpbnRvIHRvcAorICAgICAgKiBGaXggZXJyb3Igb2NjdXJpbmcgd2hlbiBpbml0aWFsIHNicmtfYmFzZSBub3Qgd29yZC1hbGlnbmVkLgorICAgICAgKiBSZWx5IG9uIHBhZ2Ugc2l6ZSBmb3IgdW5pdHMgaW5zdGVhZCBvZiBTQlJLX1VOSVQgdG8KKyAgICAgICAgYXZvaWQgc3VycHJpc2VzIGFib3V0IHNicmsgYWxpZ25tZW50IGNvbnZlbnRpb25zLgorICAgICAgKiBBZGQgbWFsbGluZm8sIG1hbGxvcHQuIFRoYW5rcyB0byBSYXltb25kIE5panNzZW4KKyAgICAgICAgKHJheW1vbmRAZXMuZWxlLnR1ZS5ubCkgZm9yIHRoZSBzdWdnZXN0aW9uLgorICAgICAgKiBBZGQgYHBhZCcgYXJndW1lbnQgdG8gbWFsbG9jX3RyaW0gYW5kIHRvcF9wYWQgbWFsbG9wdCBwYXJhbWV0ZXIuCisgICAgICAqIE1vcmUgcHJlY2F1dGlvbnMgZm9yIGNhc2VzIHdoZXJlIG90aGVyIHJvdXRpbmVzIGNhbGwgc2JyaywKKyAgICAgICAgY291cnRlc3kgb2YgV29sZnJhbSBHbG9nZXIgKEdsb2dlckBscnoudW5pLW11ZW5jaGVuLmRlKS4KKyAgICAgICogQWRkZWQgbWFjcm9zIGV0Yy4sIGFsbG93aW5nIHVzZSBpbiBsaW51eCBsaWJjIGZyb20KKyAgICAgICAgSC5KLiBMdSAoaGpsQGdudS5haS5taXQuZWR1KQorICAgICAgKiBJbnZlcnRlZCB0aGlzIGhpc3RvcnkgbGlzdAorCisgICAgVjIuNi4xIFNhdCBEZWMgIDIgMTQ6MTA6NTcgMTk5NSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIFJlLXR1bmVkIGFuZCBmaXhlZCB0byBiZWhhdmUgbW9yZSBuaWNlbHkgd2l0aCBWMi42LjAgY2hhbmdlcy4KKyAgICAgICogUmVtb3ZlZCBhbGwgcHJlYWxsb2NhdGlvbiBjb2RlIHNpbmNlIHVuZGVyIGN1cnJlbnQgc2NoZW1lCisgICAgICAgIHRoZSB3b3JrIHJlcXVpcmVkIHRvIHVuZG8gYmFkIHByZWFsbG9jYXRpb25zIGV4Y2VlZHMKKyAgICAgICAgdGhlIHdvcmsgc2F2ZWQgaW4gZ29vZCBjYXNlcyBmb3IgbW9zdCB0ZXN0IHByb2dyYW1zLgorICAgICAgKiBObyBsb25nZXIgdXNlIHJldHVybiBsaXN0IG9yIHVuY29uc29saWRhdGVkIGJpbnMgc2luY2UKKyAgICAgICAgbm8gc2NoZW1lIHVzaW5nIHRoZW0gY29uc2lzdGVudGx5IG91dHBlcmZvcm1zIHRob3NlIHRoYXQgZG9uJ3QKKyAgICAgICAgZ2l2ZW4gYWJvdmUgY2hhbmdlcy4KKyAgICAgICogVXNlIGJlc3QgZml0IGZvciB2ZXJ5IGxhcmdlIGNodW5rcyB0byBwcmV2ZW50IHNvbWUgd29yc3QtY2FzZXMuCisgICAgICAqIEFkZGVkIHNvbWUgc3VwcG9ydCBmb3IgZGVidWdnaW5nCisKKyAgICBWMi42LjAgU2F0IE5vdiAgNCAwNzowNToyMyAxOTk1ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogUmVtb3ZlZCBmb290ZXJzIHdoZW4gY2h1bmtzIGFyZSBpbiB1c2UuIFRoYW5rcyB0bworICAgICAgICBQYXVsIFdpbHNvbiAod2lsc29uQGNzLnRleGFzLmVkdSkgZm9yIHRoZSBzdWdnZXN0aW9uLgorCisgICAgVjIuNS40IFdlZCBOb3YgIDEgMDc6NTQ6NTEgMTk5NSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIEFkZGVkIG1hbGxvY190cmltLCB3aXRoIGhlbHAgZnJvbSBXb2xmcmFtIEdsb2dlcgorICAgICAgICAod21nbG9ARGVudC5NRUQuVW5pLU11ZW5jaGVuLkRFKS4KKworICAgIFYyLjUuMyBUdWUgQXByIDI2IDEwOjE2OjAxIDE5OTQgIERvdWcgTGVhICAoZGwgYXQgZykKKworICAgIFYyLjUuMiBUdWUgQXByICA1IDE2OjIwOjQwIDE5OTQgIERvdWcgTGVhICAoZGwgYXQgZykKKyAgICAgICogcmVhbGxvYzogdHJ5IHRvIGV4cGFuZCBpbiBib3RoIGRpcmVjdGlvbnMKKyAgICAgICogbWFsbG9jOiBzd2FwIG9yZGVyIG9mIGNsZWFuLWJpbiBzdHJhdGVneTsKKyAgICAgICogcmVhbGxvYzogb25seSBjb25kaXRpb25hbGx5IGV4cGFuZCBiYWNrd2FyZHMKKyAgICAgICogVHJ5IG5vdCB0byBzY2F2ZW5nZSB1c2VkIGJpbnMKKyAgICAgICogVXNlIGJpbiBjb3VudHMgYXMgYSBndWlkZSB0byBwcmVhbGxvY2F0aW9uCisgICAgICAqIE9jY2FzaW9uYWxseSBiaW4gcmV0dXJuIGxpc3QgY2h1bmtzIGluIGZpcnN0IHNjYW4KKyAgICAgICogQWRkIGEgZmV3IG9wdGltaXphdGlvbnMgZnJvbSBjb2xpbkBueXgxMC5jcy5kdS5lZHUKKworICAgIFYyLjUuMSBTYXQgQXVnIDE0IDE1OjQwOjQzIDE5OTMgIERvdWcgTGVhICAoZGwgYXQgZykKKyAgICAgICogZmFzdGVyIGJpbiBjb21wdXRhdGlvbiAmIHNsaWdodGx5IGRpZmZlcmVudCBiaW5uaW5nCisgICAgICAqIG1lcmdlZCBhbGwgY29uc29saWRhdGlvbnMgdG8gb25lIHBhcnQgb2YgbWFsbG9jIHByb3BlcgorICAgICAgICAgKGVsaW1pbmF0aW5nIG9sZCBtYWxsb2NfZmluZF9zcGFjZSAmIG1hbGxvY19jbGVhbl9iaW4pCisgICAgICAqIFNjYW4gMiByZXR1cm5zIGNodW5rcyAobm90IGp1c3QgMSkKKyAgICAgICogUHJvcGFnYXRlIGZhaWx1cmUgaW4gcmVhbGxvYyBpZiBtYWxsb2MgcmV0dXJucyAwCisgICAgICAqIEFkZCBzdHVmZiB0byBhbGxvdyBjb21waWxhdGlvbiBvbiBub24tQU5TSSBjb21waWxlcnMKKyAgICAgICAgICBmcm9tIGtwdkByZXNlYXJjaC5hdHQuY29tCisKKyAgICBWMi41IFNhdCBBdWcgIDcgMDc6NDE6NTkgMTk5MyAgRG91ZyBMZWEgIChkbCBhdCBnLm9zd2Vnby5lZHUpCisgICAgICAqIHJlbW92ZWQgcG90ZW50aWFsIGZvciBvZGQgYWRkcmVzcyBhY2Nlc3MgaW4gcHJldl9jaHVuaworICAgICAgKiByZW1vdmVkIGRlcGVuZGVuY3kgb24gZ2V0cGFnZXNpemUuaAorICAgICAgKiBtaXNjIGNvc21ldGljcyBhbmQgYSBiaXQgbW9yZSBpbnRlcm5hbCBkb2N1bWVudGF0aW9uCisgICAgICAqIGFudGljb3NtZXRpY3M6IG1hbmdsZWQgbmFtZXMgaW4gbWFjcm9zIHRvIGV2YWRlIGRlYnVnZ2VyIHN0cmFuZ2VuZXNzCisgICAgICAqIHRlc3RlZCBvbiBzcGFyYywgaHAtNzAwLCBkZWMtbWlwcywgcnM2MDAwCisgICAgICAgICAgd2l0aCBnY2MgJiBuYXRpdmUgY2MgKGhwLCBkZWMgb25seSkgYWxsb3dpbmcKKyAgICAgICAgICBEZXRsZWZzICYgWm9ybiBjb21wYXJpc29uIHN0dWR5IChpbiBTSUdQTEFOIE5vdGljZXMuKQorCisgICAgVHJpYWwgdmVyc2lvbiBGcmkgQXVnIDI4IDEzOjE0OjI5IDE5OTIgIERvdWcgTGVhICAoZGwgYXQgZy5vc3dlZ28uZWR1KQorICAgICAgKiBCYXNlZCBsb29zZWx5IG9uIGxpYmcrKy0xLjJYIG1hbGxvYy4gKEl0IHJldGFpbnMgc29tZSBvZiB0aGUgb3ZlcmFsbAorICAgICAgICAgc3RydWN0dXJlIG9mIG9sZCB2ZXJzaW9uLCAgYnV0IG1vc3QgZGV0YWlscyBkaWZmZXIuKQorIAorKi8KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2RsbWFsbG9jLmggYi9saWJjL2Jpb25pYy9kbG1hbGxvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1YjVlMWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9kbG1hbGxvYy5oCkBAIC0wLDAgKzEsNjQwIEBACisvKgorICBEZWZhdWx0IGhlYWRlciBmaWxlIGZvciBtYWxsb2MtMi44LngsIHdyaXR0ZW4gYnkgRG91ZyBMZWEKKyAgYW5kIHJlbGVhc2VkIHRvIHRoZSBwdWJsaWMgZG9tYWluLCBhcyBleHBsYWluZWQgYXQKKyAgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvcHVibGljZG9tYWluLiAKKyAKKyAgbGFzdCB1cGRhdGU6IE1vbiBBdWcgMTUgMDg6NTU6NTIgMjAwNSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisKKyAgVGhpcyBoZWFkZXIgaXMgZm9yIEFOU0kgQy9DKysgb25seS4gIFlvdSBjYW4gc2V0IGFueSBvZgorICB0aGUgZm9sbG93aW5nICNkZWZpbmVzIGJlZm9yZSBpbmNsdWRpbmc6CisKKyAgKiBJZiBVU0VfRExfUFJFRklYIGlzIGRlZmluZWQsIGl0IGlzIGFzc3VtZWQgdGhhdCBtYWxsb2MuYyAKKyAgICB3YXMgYWxzbyBjb21waWxlZCB3aXRoIHRoaXMgb3B0aW9uLCBzbyBhbGwgcm91dGluZXMKKyAgICBoYXZlIG5hbWVzIHN0YXJ0aW5nIHdpdGggImRsIi4KKworICAqIElmIEhBVkVfVVNSX0lOQ0xVREVfTUFMTE9DX0ggaXMgZGVmaW5lZCwgaXQgaXMgYXNzdW1lZCB0aGF0IHRoaXMKKyAgICBmaWxlIHdpbGwgYmUgI2luY2x1ZGVkIEFGVEVSIDxtYWxsb2MuaD4uIFRoaXMgaXMgbmVlZGVkIG9ubHkgaWYKKyAgICB5b3VyIHN5c3RlbSBkZWZpbmVzIGEgc3RydWN0IG1hbGxpbmZvIHRoYXQgaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlCisgICAgc3RhbmRhcmQgb25lIGRlY2xhcmVkIGhlcmUuICBPdGhlcndpc2UsIHlvdSBjYW4gaW5jbHVkZSB0aGlzIGZpbGUKKyAgICBJTlNURUFEIG9mIHlvdXIgc3lzdGVtIHN5c3RlbSA8bWFsbG9jLmg+LiAgQXQgbGVhc3Qgb24gQU5TSSwgYWxsCisgICAgZGVjbGFyYXRpb25zIHNob3VsZCBiZSBjb21wYXRpYmxlIHdpdGggc3lzdGVtIHZlcnNpb25zCisKKyAgKiBJZiBNU1BBQ0VTIGlzIGRlZmluZWQsIGRlY2xhcmF0aW9ucyBmb3IgbXNwYWNlIHZlcnNpb25zIGFyZSBpbmNsdWRlZC4KKyovCisKKyNpZm5kZWYgTUFMTE9DXzI4MF9ICisjZGVmaW5lIE1BTExPQ18yODBfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4gICAvKiBmb3Igc2l6ZV90ICovCisKKyNpZiAhT05MWV9NU1BBQ0VTCisKKy8qIENoZWNrIGFuIGFkZGl0aW9uYWwgbWFjcm8gZm9yIHRoZSBmaXZlIHByaW1hcnkgZnVuY3Rpb25zICovCisjaWYgIWRlZmluZWQoVVNFX0RMX1BSRUZJWCkgfHwgIWRlZmluZWQoTUFMTE9DX0xFQUtfQ0hFQ0spIAorI2RlZmluZSBkbGNhbGxvYyAgICAgICAgICAgICAgIGNhbGxvYworI2RlZmluZSBkbGZyZWUgICAgICAgICAgICAgICAgIGZyZWUKKyNkZWZpbmUgZGxtYWxsb2MgICAgICAgICAgICAgICBtYWxsb2MKKyNkZWZpbmUgZGxtZW1hbGlnbiAgICAgICAgICAgICBtZW1hbGlnbgorI2RlZmluZSBkbHJlYWxsb2MgICAgICAgICAgICAgIHJlYWxsb2MKKyNlbmRpZgorCisjaWZuZGVmIFVTRV9ETF9QUkVGSVgKKyNkZWZpbmUgZGx2YWxsb2MgICAgICAgICAgICAgICB2YWxsb2MKKyNkZWZpbmUgZGxwdmFsbG9jICAgICAgICAgICAgICBwdmFsbG9jCisjZGVmaW5lIGRsbWFsbGluZm8gICAgICAgICAgICAgbWFsbGluZm8KKyNkZWZpbmUgZGxtYWxsb3B0ICAgICAgICAgICAgICBtYWxsb3B0CisjZGVmaW5lIGRsbWFsbG9jX3RyaW0gICAgICAgICAgbWFsbG9jX3RyaW0KKyNkZWZpbmUgZGxtYWxsb2Nfd2Fsa19mcmVlX3BhZ2VzIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWxsb2Nfd2Fsa19mcmVlX3BhZ2VzCisjZGVmaW5lIGRsbWFsbG9jX3dhbGtfaGVhcCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFsbG9jX3dhbGtfaGVhcAorI2RlZmluZSBkbG1hbGxvY19zdGF0cyAgICAgICAgIG1hbGxvY19zdGF0cworI2RlZmluZSBkbG1hbGxvY191c2FibGVfc2l6ZSAgIG1hbGxvY191c2FibGVfc2l6ZQorI2RlZmluZSBkbG1hbGxvY19mb290cHJpbnQgICAgIG1hbGxvY19mb290cHJpbnQKKyNkZWZpbmUgZGxtYWxsb2NfbWF4X2FsbG93ZWRfZm9vdHByaW50IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWxsb2NfbWF4X2FsbG93ZWRfZm9vdHByaW50CisjZGVmaW5lIGRsbWFsbG9jX3NldF9tYXhfYWxsb3dlZF9mb290cHJpbnQgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hbGxvY19zZXRfbWF4X2FsbG93ZWRfZm9vdHByaW50CisjZGVmaW5lIGRsbWFsbG9jX21heF9mb290cHJpbnQgbWFsbG9jX21heF9mb290cHJpbnQKKyNkZWZpbmUgZGxpbmRlcGVuZGVudF9jYWxsb2MgICBpbmRlcGVuZGVudF9jYWxsb2MKKyNkZWZpbmUgZGxpbmRlcGVuZGVudF9jb21hbGxvYyBpbmRlcGVuZGVudF9jb21hbGxvYworI2VuZGlmIC8qIFVTRV9ETF9QUkVGSVggKi8KKworCisvKgorICBtYWxsb2Moc2l6ZV90IG4pCisgIFJldHVybnMgYSBwb2ludGVyIHRvIGEgbmV3bHkgYWxsb2NhdGVkIGNodW5rIG9mIGF0IGxlYXN0IG4gYnl0ZXMsIG9yCisgIG51bGwgaWYgbm8gc3BhY2UgaXMgYXZhaWxhYmxlLCBpbiB3aGljaCBjYXNlIGVycm5vIGlzIHNldCB0byBFTk9NRU0KKyAgb24gQU5TSSBDIHN5c3RlbXMuCisKKyAgSWYgbiBpcyB6ZXJvLCBtYWxsb2MgcmV0dXJucyBhIG1pbmltdW0tc2l6ZWQgY2h1bmsuIChUaGUgbWluaW11bQorICBzaXplIGlzIDE2IGJ5dGVzIG9uIG1vc3QgMzJiaXQgc3lzdGVtcywgYW5kIDMyIGJ5dGVzIG9uIDY0Yml0CisgIHN5c3RlbXMuKSAgTm90ZSB0aGF0IHNpemVfdCBpcyBhbiB1bnNpZ25lZCB0eXBlLCBzbyBjYWxscyB3aXRoCisgIGFyZ3VtZW50cyB0aGF0IHdvdWxkIGJlIG5lZ2F0aXZlIGlmIHNpZ25lZCBhcmUgaW50ZXJwcmV0ZWQgYXMKKyAgcmVxdWVzdHMgZm9yIGh1Z2UgYW1vdW50cyBvZiBzcGFjZSwgd2hpY2ggd2lsbCBvZnRlbiBmYWlsLiBUaGUKKyAgbWF4aW11bSBzdXBwb3J0ZWQgdmFsdWUgb2YgbiBkaWZmZXJzIGFjcm9zcyBzeXN0ZW1zLCBidXQgaXMgaW4gYWxsCisgIGNhc2VzIGxlc3MgdGhhbiB0aGUgbWF4aW11bSByZXByZXNlbnRhYmxlIHZhbHVlIG9mIGEgc2l6ZV90LgorKi8KK3ZvaWQqIGRsbWFsbG9jKHNpemVfdCk7CisKKy8qCisgIGZyZWUodm9pZCogcCkKKyAgUmVsZWFzZXMgdGhlIGNodW5rIG9mIG1lbW9yeSBwb2ludGVkIHRvIGJ5IHAsIHRoYXQgaGFkIGJlZW4gcHJldmlvdXNseQorICBhbGxvY2F0ZWQgdXNpbmcgbWFsbG9jIG9yIGEgcmVsYXRlZCByb3V0aW5lIHN1Y2ggYXMgcmVhbGxvYy4KKyAgSXQgaGFzIG5vIGVmZmVjdCBpZiBwIGlzIG51bGwuIElmIHAgd2FzIG5vdCBtYWxsb2NlZCBvciBhbHJlYWR5CisgIGZyZWVkLCBmcmVlKHApIHdpbGwgYnkgZGVmYXVsdCBjdWFzZSB0aGUgY3VycmVudCBwcm9ncmFtIHRvIGFib3J0LgorKi8KK3ZvaWQgIGRsZnJlZSh2b2lkKik7CisKKy8qCisgIGNhbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVsZW1lbnRfc2l6ZSk7CisgIFJldHVybnMgYSBwb2ludGVyIHRvIG5fZWxlbWVudHMgKiBlbGVtZW50X3NpemUgYnl0ZXMsIHdpdGggYWxsIGxvY2F0aW9ucworICBzZXQgdG8gemVyby4KKyovCit2b2lkKiBkbGNhbGxvYyhzaXplX3QsIHNpemVfdCk7CisKKy8qCisgIHJlYWxsb2Modm9pZCogcCwgc2l6ZV90IG4pCisgIFJldHVybnMgYSBwb2ludGVyIHRvIGEgY2h1bmsgb2Ygc2l6ZSBuIHRoYXQgY29udGFpbnMgdGhlIHNhbWUgZGF0YQorICBhcyBkb2VzIGNodW5rIHAgdXAgdG8gdGhlIG1pbmltdW0gb2YgKG4sIHAncyBzaXplKSBieXRlcywgb3IgbnVsbAorICBpZiBubyBzcGFjZSBpcyBhdmFpbGFibGUuCisKKyAgVGhlIHJldHVybmVkIHBvaW50ZXIgbWF5IG9yIG1heSBub3QgYmUgdGhlIHNhbWUgYXMgcC4gVGhlIGFsZ29yaXRobQorICBwcmVmZXJzIGV4dGVuZGluZyBwIGluIG1vc3QgY2FzZXMgd2hlbiBwb3NzaWJsZSwgb3RoZXJ3aXNlIGl0CisgIGVtcGxveXMgdGhlIGVxdWl2YWxlbnQgb2YgYSBtYWxsb2MtY29weS1mcmVlIHNlcXVlbmNlLgorCisgIElmIHAgaXMgbnVsbCwgcmVhbGxvYyBpcyBlcXVpdmFsZW50IHRvIG1hbGxvYy4KKworICBJZiBzcGFjZSBpcyBub3QgYXZhaWxhYmxlLCByZWFsbG9jIHJldHVybnMgbnVsbCwgZXJybm8gaXMgc2V0IChpZiBvbgorICBBTlNJKSBhbmQgcCBpcyBOT1QgZnJlZWQuCisKKyAgaWYgbiBpcyBmb3IgZmV3ZXIgYnl0ZXMgdGhhbiBhbHJlYWR5IGhlbGQgYnkgcCwgdGhlIG5ld2x5IHVudXNlZAorICBzcGFjZSBpcyBsb3BwZWQgb2ZmIGFuZCBmcmVlZCBpZiBwb3NzaWJsZS4gIHJlYWxsb2Mgd2l0aCBhIHNpemUKKyAgYXJndW1lbnQgb2YgemVybyAocmUpYWxsb2NhdGVzIGEgbWluaW11bS1zaXplZCBjaHVuay4KKworICBUaGUgb2xkIHVuaXggcmVhbGxvYyBjb252ZW50aW9uIG9mIGFsbG93aW5nIHRoZSBsYXN0LWZyZWUnZCBjaHVuaworICB0byBiZSB1c2VkIGFzIGFuIGFyZ3VtZW50IHRvIHJlYWxsb2MgaXMgbm90IHN1cHBvcnRlZC4KKyovCisKK3ZvaWQqIGRscmVhbGxvYyh2b2lkKiwgc2l6ZV90KTsKKworLyoKKyAgbWVtYWxpZ24oc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IG4pOworICBSZXR1cm5zIGEgcG9pbnRlciB0byBhIG5ld2x5IGFsbG9jYXRlZCBjaHVuayBvZiBuIGJ5dGVzLCBhbGlnbmVkCisgIGluIGFjY29yZCB3aXRoIHRoZSBhbGlnbm1lbnQgYXJndW1lbnQuCisKKyAgVGhlIGFsaWdubWVudCBhcmd1bWVudCBzaG91bGQgYmUgYSBwb3dlciBvZiB0d28uIElmIHRoZSBhcmd1bWVudCBpcworICBub3QgYSBwb3dlciBvZiB0d28sIHRoZSBuZWFyZXN0IGdyZWF0ZXIgcG93ZXIgaXMgdXNlZC4KKyAgOC1ieXRlIGFsaWdubWVudCBpcyBndWFyYW50ZWVkIGJ5IG5vcm1hbCBtYWxsb2MgY2FsbHMsIHNvIGRvbid0CisgIGJvdGhlciBjYWxsaW5nIG1lbWFsaWduIHdpdGggYW4gYXJndW1lbnQgb2YgOCBvciBsZXNzLgorCisgIE92ZXJyZWxpYW5jZSBvbiBtZW1hbGlnbiBpcyBhIHN1cmUgd2F5IHRvIGZyYWdtZW50IHNwYWNlLgorKi8KK3ZvaWQqIGRsbWVtYWxpZ24oc2l6ZV90LCBzaXplX3QpOworCisvKgorICB2YWxsb2Moc2l6ZV90IG4pOworICBFcXVpdmFsZW50IHRvIG1lbWFsaWduKHBhZ2VzaXplLCBuKSwgd2hlcmUgcGFnZXNpemUgaXMgdGhlIHBhZ2UKKyAgc2l6ZSBvZiB0aGUgc3lzdGVtLiBJZiB0aGUgcGFnZXNpemUgaXMgdW5rbm93biwgNDA5NiBpcyB1c2VkLgorKi8KK3ZvaWQqIGRsdmFsbG9jKHNpemVfdCk7CisKKy8qCisgIG1hbGxvcHQoaW50IHBhcmFtZXRlcl9udW1iZXIsIGludCBwYXJhbWV0ZXJfdmFsdWUpCisgIFNldHMgdHVuYWJsZSBwYXJhbWV0ZXJzIFRoZSBmb3JtYXQgaXMgdG8gcHJvdmlkZSBhCisgIChwYXJhbWV0ZXItbnVtYmVyLCBwYXJhbWV0ZXItdmFsdWUpIHBhaXIuICBtYWxsb3B0IHRoZW4gc2V0cyB0aGUKKyAgY29ycmVzcG9uZGluZyBwYXJhbWV0ZXIgdG8gdGhlIGFyZ3VtZW50IHZhbHVlIGlmIGl0IGNhbiAoaS5lLiwgc28KKyAgbG9uZyBhcyB0aGUgdmFsdWUgaXMgbWVhbmluZ2Z1bCksIGFuZCByZXR1cm5zIDEgaWYgc3VjY2Vzc2Z1bCBlbHNlCisgIDAuICBTVklEL1hQRy9BTlNJIGRlZmluZXMgZm91ciBzdGFuZGFyZCBwYXJhbSBudW1iZXJzIGZvciBtYWxsb3B0LAorICBub3JtYWxseSBkZWZpbmVkIGluIG1hbGxvYy5oLiAgTm9uZSBvZiB0aGVzZSBhcmUgdXNlIGluIHRoaXMgbWFsbG9jLAorICBzbyBzZXR0aW5nIHRoZW0gaGFzIG5vIGVmZmVjdC4gQnV0IHRoaXMgbWFsbG9jIGFsc28gc3VwcG9ydHMgb3RoZXIKKyAgb3B0aW9ucyBpbiBtYWxsb3B0OgorCisgIFN5bWJvbCAgICAgICAgICAgIHBhcmFtICMgIGRlZmF1bHQgICAgYWxsb3dlZCBwYXJhbSB2YWx1ZXMKKyAgTV9UUklNX1RIUkVTSE9MRCAgICAgLTEgICAyKjEwMjQqMTAyNCAgIGFueSAgICgtMVUgZGlzYWJsZXMgdHJpbW1pbmcpCisgIE1fR1JBTlVMQVJJVFkgICAgICAgIC0yICAgICBwYWdlIHNpemUgICBhbnkgcG93ZXIgb2YgMiA+PSBwYWdlIHNpemUKKyAgTV9NTUFQX1RIUkVTSE9MRCAgICAgLTMgICAgICAyNTYqMTAyNCAgIGFueSAgIChvciAwIGlmIG5vIE1NQVAgc3VwcG9ydCkKKyovCitpbnQgZGxtYWxsb3B0KGludCwgaW50KTsKKworI2RlZmluZSBNX1RSSU1fVEhSRVNIT0xEICAgICAoLTEpCisjZGVmaW5lIE1fR1JBTlVMQVJJVFkgICAgICAgICgtMikKKyNkZWZpbmUgTV9NTUFQX1RIUkVTSE9MRCAgICAgKC0zKQorCisKKy8qCisgIG1hbGxvY19mb290cHJpbnQoKTsKKyAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9idGFpbmVkIGZyb20gdGhlIHN5c3RlbS4gIFRoZSB0b3RhbAorICBudW1iZXIgb2YgYnl0ZXMgYWxsb2NhdGVkIGJ5IG1hbGxvYywgcmVhbGxvYyBldGMuLCBpcyBsZXNzIHRoYW4gdGhpcworICB2YWx1ZS4gVW5saWtlIG1hbGxpbmZvLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgb25seSBhIHByZWNvbXB1dGVkCisgIHJlc3VsdCwgc28gY2FuIGJlIGNhbGxlZCBmcmVxdWVudGx5IHRvIG1vbml0b3IgbWVtb3J5IGNvbnN1bXB0aW9uLgorICBFdmVuIGlmIGxvY2tzIGFyZSBvdGhlcndpc2UgZGVmaW5lZCwgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB1c2UgdGhlbSwKKyAgc28gcmVzdWx0cyBtaWdodCBub3QgYmUgdXAgdG8gZGF0ZS4KKyovCitzaXplX3QgZGxtYWxsb2NfZm9vdHByaW50KCk7CisKKy8qCisgIG1hbGxvY19tYXhfYWxsb3dlZF9mb290cHJpbnQoKTsKKyAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgdGhlIGhlYXAgaXMgYWxsb3dlZCB0byBvYnRhaW4KKyAgZnJvbSB0aGUgc3lzdGVtLiAgbWFsbG9jX2Zvb3RwcmludCgpIHNob3VsZCBhbHdheXMgcmV0dXJuIGEKKyAgc2l6ZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gbWF4X2FsbG93ZWRfZm9vdHByaW50LCB1bmxlc3MgdGhlCisgIG1heF9hbGxvd2VkX2Zvb3RwcmludCB3YXMgc2V0IHRvIGEgdmFsdWUgc21hbGxlciB0aGFuIHRoZQorICBmb290cHJpbnQgYXQgdGhlIHRpbWUuCisKKyAgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGF2YWlsYWJsZSBpZiBkbG1hbGxvYy5jIHdhcyBjb21waWxlZAorICB3aXRoIFVTRV9NQVhfQUxMT1dFRF9GT09UUFJJTlQgc2V0LgorKi8KK3NpemVfdCBkbG1hbGxvY19tYXhfYWxsb3dlZF9mb290cHJpbnQoKTsKKworLyoKKyAgbWFsbG9jX3NldF9tYXhfYWxsb3dlZF9mb290cHJpbnQoKTsKKyAgU2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB0aGF0IHRoZSBoZWFwIGlzIGFsbG93ZWQgdG8KKyAgb2J0YWluIGZyb20gdGhlIHN5c3RlbS4gIFRoZSBzaXplIHdpbGwgYmUgcm91bmRlZCB1cCB0byBhIHdob2xlCisgIHBhZ2UsIGFuZCB0aGUgcm91bmRlZCBudW1iZXIgd2lsbCBiZSByZXR1cm5lZCBmcm9tIGZ1dHVyZSBjYWxscworICB0byBtYWxsb2NfbWF4X2FsbG93ZWRfZm9vdHByaW50KCkuICBJZiB0aGUgbmV3IG1heF9hbGxvd2VkX2Zvb3RwcmludAorICBpcyBsYXJnZXIgdGhhbiB0aGUgY3VycmVudCBmb290cHJpbnQsIHRoZSBoZWFwIHdpbGwgbmV2ZXIgZ3JvdworICBsYXJnZXIgdGhhbiBtYXhfYWxsb3dlZF9mb290cHJpbnQuICBJZiB0aGUgbmV3IG1heF9hbGxvd2VkX2Zvb3RwcmludAorICBpcyBzbWFsbGVyIHRoYW4gdGhlIGN1cnJlbnQgZm9vdHByaW50LCB0aGUgaGVhcCB3aWxsIG5vdCBncm93CisgIGZ1cnRoZXIuCisKKyAgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGF2YWlsYWJsZSBpZiBkbG1hbGxvYy5jIHdhcyBjb21waWxlZAorICB3aXRoIFVTRV9NQVhfQUxMT1dFRF9GT09UUFJJTlQgc2V0LgorCisgIFRPRE86IHRyeSB0byBmb3JjZSB0aGUgaGVhcCB0byBnaXZlIHVwIG1lbW9yeSBpbiB0aGUgc2hyaW5rIGNhc2UsCisgICAgICAgIGFuZCB1cGRhdGUgdGhpcyBjb21tZW50IG9uY2UgdGhhdCBoYXBwZW5zLgorKi8KK3ZvaWQgZGxtYWxsb2Nfc2V0X21heF9hbGxvd2VkX2Zvb3RwcmludChzaXplX3QgYnl0ZXMpOworCisvKgorICBtYWxsb2NfbWF4X2Zvb3RwcmludCgpOworICBSZXR1cm5zIHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyBvYnRhaW5lZCBmcm9tIHRoZSBzeXN0ZW0uIFRoaXMKKyAgdmFsdWUgd2lsbCBiZSBncmVhdGVyIHRoYW4gY3VycmVudCBmb290cHJpbnQgaWYgZGVhbGxvY2F0ZWQgc3BhY2UKKyAgaGFzIGJlZW4gcmVjbGFpbWVkIGJ5IHRoZSBzeXN0ZW0uIFRoZSBwZWFrIG51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQKKyAgYnkgbWFsbG9jLCByZWFsbG9jIGV0Yy4sIGlzIGxlc3MgdGhhbiB0aGlzIHZhbHVlLiBVbmxpa2UgbWFsbGluZm8sCisgIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBvbmx5IGEgcHJlY29tcHV0ZWQgcmVzdWx0LCBzbyBjYW4gYmUgY2FsbGVkCisgIGZyZXF1ZW50bHkgdG8gbW9uaXRvciBtZW1vcnkgY29uc3VtcHRpb24uICBFdmVuIGlmIGxvY2tzIGFyZQorICBvdGhlcndpc2UgZGVmaW5lZCwgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB1c2UgdGhlbSwgc28gcmVzdWx0cyBtaWdodAorICBub3QgYmUgdXAgdG8gZGF0ZS4KKyovCitzaXplX3QgZGxtYWxsb2NfbWF4X2Zvb3RwcmludCh2b2lkKTsKKworI2lmICFOT19NQUxMSU5GTworLyoKKyAgbWFsbGluZm8oKQorICBSZXR1cm5zIChieSBjb3B5KSBhIHN0cnVjdCBjb250YWluaW5nIHZhcmlvdXMgc3VtbWFyeSBzdGF0aXN0aWNzOgorCisgIGFyZW5hOiAgICAgY3VycmVudCB0b3RhbCBub24tbW1hcHBlZCBieXRlcyBhbGxvY2F0ZWQgZnJvbSBzeXN0ZW0KKyAgb3JkYmxrczogICB0aGUgbnVtYmVyIG9mIGZyZWUgY2h1bmtzCisgIHNtYmxrczogICAgYWx3YXlzIHplcm8uCisgIGhibGtzOiAgICAgY3VycmVudCBudW1iZXIgb2YgbW1hcHBlZCByZWdpb25zCisgIGhibGtoZDogICAgdG90YWwgYnl0ZXMgaGVsZCBpbiBtbWFwcGVkIHJlZ2lvbnMKKyAgdXNtYmxrczogICB0aGUgbWF4aW11bSB0b3RhbCBhbGxvY2F0ZWQgc3BhY2UuIFRoaXMgd2lsbCBiZSBncmVhdGVyCisgICAgICAgICAgICAgICAgdGhhbiBjdXJyZW50IHRvdGFsIGlmIHRyaW1taW5nIGhhcyBvY2N1cnJlZC4KKyAgZnNtYmxrczogICBhbHdheXMgemVybworICB1b3JkYmxrczogIGN1cnJlbnQgdG90YWwgYWxsb2NhdGVkIHNwYWNlIChub3JtYWwgb3IgbW1hcHBlZCkKKyAgZm9yZGJsa3M6ICB0b3RhbCBmcmVlIHNwYWNlCisgIGtlZXBjb3N0OiAgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRoYXQgY291bGQgaWRlYWxseSBiZSByZWxlYXNlZAorICAgICAgICAgICAgICAgYmFjayB0byBzeXN0ZW0gdmlhIG1hbGxvY190cmltLiAoImlkZWFsbHkiIG1lYW5zIHRoYXQKKyAgICAgICAgICAgICAgIGl0IGlnbm9yZXMgcGFnZSByZXN0cmljdGlvbnMgZXRjLikKKworICBCZWNhdXNlIHRoZXNlIGZpZWxkcyBhcmUgaW50cywgYnV0IGludGVybmFsIGJvb2trZWVwaW5nIG1heQorICBiZSBrZXB0IGFzIGxvbmdzLCB0aGUgcmVwb3J0ZWQgdmFsdWVzIG1heSB3cmFwIGFyb3VuZCB6ZXJvIGFuZAorICB0aHVzIGJlIGluYWNjdXJhdGUuCisqLworI2lmbmRlZiBIQVZFX1VTUl9JTkNMVURFX01BTExPQ19ICisjaWZuZGVmIF9NQUxMT0NfSF8KKyNpZm5kZWYgTUFMTElORk9fRklFTERfVFlQRQorI2RlZmluZSBNQUxMSU5GT19GSUVMRF9UWVBFIHNpemVfdAorI2VuZGlmIC8qIE1BTExJTkZPX0ZJRUxEX1RZUEUgKi8KK3N0cnVjdCBtYWxsaW5mbyB7CisgIE1BTExJTkZPX0ZJRUxEX1RZUEUgYXJlbmE7ICAgIC8qIG5vbi1tbWFwcGVkIHNwYWNlIGFsbG9jYXRlZCBmcm9tIHN5c3RlbSAqLworICBNQUxMSU5GT19GSUVMRF9UWVBFIG9yZGJsa3M7ICAvKiBudW1iZXIgb2YgZnJlZSBjaHVua3MgKi8KKyAgTUFMTElORk9fRklFTERfVFlQRSBzbWJsa3M7ICAgLyogYWx3YXlzIDAgKi8KKyAgTUFMTElORk9fRklFTERfVFlQRSBoYmxrczsgICAgLyogYWx3YXlzIDAgKi8KKyAgTUFMTElORk9fRklFTERfVFlQRSBoYmxraGQ7ICAgLyogc3BhY2UgaW4gbW1hcHBlZCByZWdpb25zICovCisgIE1BTExJTkZPX0ZJRUxEX1RZUEUgdXNtYmxrczsgIC8qIG1heGltdW0gdG90YWwgYWxsb2NhdGVkIHNwYWNlICovCisgIE1BTExJTkZPX0ZJRUxEX1RZUEUgZnNtYmxrczsgIC8qIGFsd2F5cyAwICovCisgIE1BTExJTkZPX0ZJRUxEX1RZUEUgdW9yZGJsa3M7IC8qIHRvdGFsIGFsbG9jYXRlZCBzcGFjZSAqLworICBNQUxMSU5GT19GSUVMRF9UWVBFIGZvcmRibGtzOyAvKiB0b3RhbCBmcmVlIHNwYWNlICovCisgIE1BTExJTkZPX0ZJRUxEX1RZUEUga2VlcGNvc3Q7IC8qIHJlbGVhc2FibGUgKHZpYSBtYWxsb2NfdHJpbSkgc3BhY2UgKi8KK307CisjZW5kaWYgIC8qIF9NQUxMT0NfSF8gKi8KKyNlbmRpZiAgLyogSEFWRV9VU1JfSU5DTFVERV9NQUxMT0NfSCAqLworCitzdHJ1Y3QgbWFsbGluZm8gZGxtYWxsaW5mbyh2b2lkKTsKKyNlbmRpZiAgLyogTk9fTUFMTElORk8gKi8KKworLyoKKyAgaW5kZXBlbmRlbnRfY2FsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxlbWVudF9zaXplLCB2b2lkKiBjaHVua3NbXSk7CisKKyAgaW5kZXBlbmRlbnRfY2FsbG9jIGlzIHNpbWlsYXIgdG8gY2FsbG9jLCBidXQgaW5zdGVhZCBvZiByZXR1cm5pbmcgYQorICBzaW5nbGUgY2xlYXJlZCBzcGFjZSwgaXQgcmV0dXJucyBhbiBhcnJheSBvZiBwb2ludGVycyB0byBuX2VsZW1lbnRzCisgIGluZGVwZW5kZW50IGVsZW1lbnRzIHRoYXQgY2FuIGhvbGQgY29udGVudHMgb2Ygc2l6ZSBlbGVtX3NpemUsIGVhY2gKKyAgb2Ygd2hpY2ggc3RhcnRzIG91dCBjbGVhcmVkLCBhbmQgY2FuIGJlIGluZGVwZW5kZW50bHkgZnJlZWQsCisgIHJlYWxsb2MnZWQgZXRjLiBUaGUgZWxlbWVudHMgYXJlIGd1YXJhbnRlZWQgdG8gYmUgYWRqYWNlbnRseQorICBhbGxvY2F0ZWQgKHRoaXMgaXMgbm90IGd1YXJhbnRlZWQgdG8gb2NjdXIgd2l0aCBtdWx0aXBsZSBjYWxsb2NzIG9yCisgIG1hbGxvY3MpLCB3aGljaCBtYXkgYWxzbyBpbXByb3ZlIGNhY2hlIGxvY2FsaXR5IGluIHNvbWUKKyAgYXBwbGljYXRpb25zLgorCisgIFRoZSAiY2h1bmtzIiBhcmd1bWVudCBpcyBvcHRpb25hbCAoaS5lLiwgbWF5IGJlIG51bGwsIHdoaWNoIGlzCisgIHByb2JhYmx5IHRoZSBtb3N0IHR5cGljYWwgdXNhZ2UpLiBJZiBpdCBpcyBudWxsLCB0aGUgcmV0dXJuZWQgYXJyYXkKKyAgaXMgaXRzZWxmIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBhbmQgc2hvdWxkIGFsc28gYmUgZnJlZWQgd2hlbiBpdCBpcworICBubyBsb25nZXIgbmVlZGVkLiBPdGhlcndpc2UsIHRoZSBjaHVua3MgYXJyYXkgbXVzdCBiZSBvZiBhdCBsZWFzdAorICBuX2VsZW1lbnRzIGluIGxlbmd0aC4gSXQgaXMgZmlsbGVkIGluIHdpdGggdGhlIHBvaW50ZXJzIHRvIHRoZQorICBjaHVua3MuCisKKyAgSW4gZWl0aGVyIGNhc2UsIGluZGVwZW5kZW50X2NhbGxvYyByZXR1cm5zIHRoaXMgcG9pbnRlciBhcnJheSwgb3IKKyAgbnVsbCBpZiB0aGUgYWxsb2NhdGlvbiBmYWlsZWQuICBJZiBuX2VsZW1lbnRzIGlzIHplcm8gYW5kICJjaHVua3MiCisgIGlzIG51bGwsIGl0IHJldHVybnMgYSBjaHVuayByZXByZXNlbnRpbmcgYW4gYXJyYXkgd2l0aCB6ZXJvIGVsZW1lbnRzCisgICh3aGljaCBzaG91bGQgYmUgZnJlZWQgaWYgbm90IHdhbnRlZCkuCisKKyAgRWFjaCBlbGVtZW50IG11c3QgYmUgaW5kaXZpZHVhbGx5IGZyZWVkIHdoZW4gaXQgaXMgbm8gbG9uZ2VyCisgIG5lZWRlZC4gSWYgeW91J2QgbGlrZSB0byBpbnN0ZWFkIGJlIGFibGUgdG8gZnJlZSBhbGwgYXQgb25jZSwgeW91CisgIHNob3VsZCBpbnN0ZWFkIHVzZSByZWd1bGFyIGNhbGxvYyBhbmQgYXNzaWduIHBvaW50ZXJzIGludG8gdGhpcworICBzcGFjZSB0byByZXByZXNlbnQgZWxlbWVudHMuICAoSW4gdGhpcyBjYXNlIHRob3VnaCwgeW91IGNhbm5vdAorICBpbmRlcGVuZGVudGx5IGZyZWUgZWxlbWVudHMuKQorCisgIGluZGVwZW5kZW50X2NhbGxvYyBzaW1wbGlmaWVzIGFuZCBzcGVlZHMgdXAgaW1wbGVtZW50YXRpb25zIG9mIG1hbnkKKyAga2luZHMgb2YgcG9vbHMuICBJdCBtYXkgYWxzbyBiZSB1c2VmdWwgd2hlbiBjb25zdHJ1Y3RpbmcgbGFyZ2UgZGF0YQorICBzdHJ1Y3R1cmVzIHRoYXQgaW5pdGlhbGx5IGhhdmUgYSBmaXhlZCBudW1iZXIgb2YgZml4ZWQtc2l6ZWQgbm9kZXMsCisgIGJ1dCB0aGUgbnVtYmVyIGlzIG5vdCBrbm93biBhdCBjb21waWxlIHRpbWUsIGFuZCBzb21lIG9mIHRoZSBub2RlcworICBtYXkgbGF0ZXIgbmVlZCB0byBiZSBmcmVlZC4gRm9yIGV4YW1wbGU6CisKKyAgc3RydWN0IE5vZGUgeyBpbnQgaXRlbTsgc3RydWN0IE5vZGUqIG5leHQ7IH07CisKKyAgc3RydWN0IE5vZGUqIGJ1aWxkX2xpc3QoKSB7CisgICAgc3RydWN0IE5vZGUqKiBwb29sOworICAgIGludCBuID0gcmVhZF9udW1iZXJfb2Zfbm9kZXNfbmVlZGVkKCk7CisgICAgaWYgKG4gPD0gMCkgcmV0dXJuIDA7CisgICAgcG9vbCA9IChzdHJ1Y3QgTm9kZSoqKShpbmRlcGVuZGVudF9jYWxsb2Mobiwgc2l6ZW9mKHN0cnVjdCBOb2RlKSwgMCk7CisgICAgaWYgKHBvb2wgPT0gMCkgZGllKCk7CisgICAgLy8gb3JnYW5pemUgaW50byBhIGxpbmtlZCBsaXN0Li4uCisgICAgc3RydWN0IE5vZGUqIGZpcnN0ID0gcG9vbFswXTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbi0xOyArK2kpCisgICAgICBwb29sW2ldLT5uZXh0ID0gcG9vbFtpKzFdOworICAgIGZyZWUocG9vbCk7ICAgICAvLyBDYW4gbm93IGZyZWUgdGhlIGFycmF5IChvciBub3QsIGlmIGl0IGlzIG5lZWRlZCBsYXRlcikKKyAgICByZXR1cm4gZmlyc3Q7CisgIH0KKyovCit2b2lkKiogZGxpbmRlcGVuZGVudF9jYWxsb2Moc2l6ZV90LCBzaXplX3QsIHZvaWQqKik7CisKKy8qCisgIGluZGVwZW5kZW50X2NvbWFsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3Qgc2l6ZXNbXSwgdm9pZCogY2h1bmtzW10pOworCisgIGluZGVwZW5kZW50X2NvbWFsbG9jIGFsbG9jYXRlcywgYWxsIGF0IG9uY2UsIGEgc2V0IG9mIG5fZWxlbWVudHMKKyAgY2h1bmtzIHdpdGggc2l6ZXMgaW5kaWNhdGVkIGluIHRoZSAic2l6ZXMiIGFycmF5LiAgICBJdCByZXR1cm5zCisgIGFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIHRoZXNlIGVsZW1lbnRzLCBlYWNoIG9mIHdoaWNoIGNhbiBiZQorICBpbmRlcGVuZGVudGx5IGZyZWVkLCByZWFsbG9jJ2VkIGV0Yy4gVGhlIGVsZW1lbnRzIGFyZSBndWFyYW50ZWVkIHRvCisgIGJlIGFkamFjZW50bHkgYWxsb2NhdGVkICh0aGlzIGlzIG5vdCBndWFyYW50ZWVkIHRvIG9jY3VyIHdpdGgKKyAgbXVsdGlwbGUgY2FsbG9jcyBvciBtYWxsb2NzKSwgd2hpY2ggbWF5IGFsc28gaW1wcm92ZSBjYWNoZSBsb2NhbGl0eQorICBpbiBzb21lIGFwcGxpY2F0aW9ucy4KKworICBUaGUgImNodW5rcyIgYXJndW1lbnQgaXMgb3B0aW9uYWwgKGkuZS4sIG1heSBiZSBudWxsKS4gSWYgaXQgaXMgbnVsbAorICB0aGUgcmV0dXJuZWQgYXJyYXkgaXMgaXRzZWxmIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBhbmQgc2hvdWxkIGFsc28KKyAgYmUgZnJlZWQgd2hlbiBpdCBpcyBubyBsb25nZXIgbmVlZGVkLiBPdGhlcndpc2UsIHRoZSBjaHVua3MgYXJyYXkKKyAgbXVzdCBiZSBvZiBhdCBsZWFzdCBuX2VsZW1lbnRzIGluIGxlbmd0aC4gSXQgaXMgZmlsbGVkIGluIHdpdGggdGhlCisgIHBvaW50ZXJzIHRvIHRoZSBjaHVua3MuCisKKyAgSW4gZWl0aGVyIGNhc2UsIGluZGVwZW5kZW50X2NvbWFsbG9jIHJldHVybnMgdGhpcyBwb2ludGVyIGFycmF5LCBvcgorICBudWxsIGlmIHRoZSBhbGxvY2F0aW9uIGZhaWxlZC4gIElmIG5fZWxlbWVudHMgaXMgemVybyBhbmQgY2h1bmtzIGlzCisgIG51bGwsIGl0IHJldHVybnMgYSBjaHVuayByZXByZXNlbnRpbmcgYW4gYXJyYXkgd2l0aCB6ZXJvIGVsZW1lbnRzCisgICh3aGljaCBzaG91bGQgYmUgZnJlZWQgaWYgbm90IHdhbnRlZCkuCisKKyAgRWFjaCBlbGVtZW50IG11c3QgYmUgaW5kaXZpZHVhbGx5IGZyZWVkIHdoZW4gaXQgaXMgbm8gbG9uZ2VyCisgIG5lZWRlZC4gSWYgeW91J2QgbGlrZSB0byBpbnN0ZWFkIGJlIGFibGUgdG8gZnJlZSBhbGwgYXQgb25jZSwgeW91CisgIHNob3VsZCBpbnN0ZWFkIHVzZSBhIHNpbmdsZSByZWd1bGFyIG1hbGxvYywgYW5kIGFzc2lnbiBwb2ludGVycyBhdAorICBwYXJ0aWN1bGFyIG9mZnNldHMgaW4gdGhlIGFnZ3JlZ2F0ZSBzcGFjZS4gKEluIHRoaXMgY2FzZSB0aG91Z2gsIHlvdQorICBjYW5ub3QgaW5kZXBlbmRlbnRseSBmcmVlIGVsZW1lbnRzLikKKworICBpbmRlcGVuZGVudF9jb21hbGxhYyBkaWZmZXJzIGZyb20gaW5kZXBlbmRlbnRfY2FsbG9jIGluIHRoYXQgZWFjaAorICBlbGVtZW50IG1heSBoYXZlIGEgZGlmZmVyZW50IHNpemUsIGFuZCBhbHNvIHRoYXQgaXQgZG9lcyBub3QKKyAgYXV0b21hdGljYWxseSBjbGVhciBlbGVtZW50cy4KKworICBpbmRlcGVuZGVudF9jb21hbGxvYyBjYW4gYmUgdXNlZCB0byBzcGVlZCB1cCBhbGxvY2F0aW9uIGluIGNhc2VzCisgIHdoZXJlIHNldmVyYWwgc3RydWN0cyBvciBvYmplY3RzIG11c3QgYWx3YXlzIGJlIGFsbG9jYXRlZCBhdCB0aGUKKyAgc2FtZSB0aW1lLiAgRm9yIGV4YW1wbGU6CisKKyAgc3RydWN0IEhlYWQgeyAuLi4gfQorICBzdHJ1Y3QgRm9vdCB7IC4uLiB9CisKKyAgdm9pZCBzZW5kX21lc3NhZ2UoY2hhciogbXNnKSB7CisgICAgaW50IG1zZ2xlbiA9IHN0cmxlbihtc2cpOworICAgIHNpemVfdCBzaXplc1szXSA9IHsgc2l6ZW9mKHN0cnVjdCBIZWFkKSwgbXNnbGVuLCBzaXplb2Yoc3RydWN0IEZvb3QpIH07CisgICAgdm9pZCogY2h1bmtzWzNdOworICAgIGlmIChpbmRlcGVuZGVudF9jb21hbGxvYygzLCBzaXplcywgY2h1bmtzKSA9PSAwKQorICAgICAgZGllKCk7CisgICAgc3RydWN0IEhlYWQqIGhlYWQgPSAoc3RydWN0IEhlYWQqKShjaHVua3NbMF0pOworICAgIGNoYXIqICAgICAgICBib2R5ID0gKGNoYXIqKShjaHVua3NbMV0pOworICAgIHN0cnVjdCBGb290KiBmb290ID0gKHN0cnVjdCBGb290KikoY2h1bmtzWzJdKTsKKyAgICAvLyAuLi4KKyAgfQorCisgIEluIGdlbmVyYWwgdGhvdWdoLCBpbmRlcGVuZGVudF9jb21hbGxvYyBpcyB3b3J0aCB1c2luZyBvbmx5IGZvcgorICBsYXJnZXIgdmFsdWVzIG9mIG5fZWxlbWVudHMuIEZvciBzbWFsbCB2YWx1ZXMsIHlvdSBwcm9iYWJseSB3b24ndAorICBkZXRlY3QgZW5vdWdoIGRpZmZlcmVuY2UgZnJvbSBzZXJpZXMgb2YgbWFsbG9jIGNhbGxzIHRvIGJvdGhlci4KKworICBPdmVydXNlIG9mIGluZGVwZW5kZW50X2NvbWFsbG9jIGNhbiBpbmNyZWFzZSBvdmVyYWxsIG1lbW9yeSB1c2FnZSwKKyAgc2luY2UgaXQgY2Fubm90IHJldXNlIGV4aXN0aW5nIG5vbmNvbnRpZ3VvdXMgc21hbGwgY2h1bmtzIHRoYXQKKyAgbWlnaHQgYmUgYXZhaWxhYmxlIGZvciBzb21lIG9mIHRoZSBlbGVtZW50cy4KKyovCit2b2lkKiogZGxpbmRlcGVuZGVudF9jb21hbGxvYyhzaXplX3QsIHNpemVfdCosIHZvaWQqKik7CisKKworLyoKKyAgcHZhbGxvYyhzaXplX3Qgbik7CisgIEVxdWl2YWxlbnQgdG8gdmFsbG9jKG1pbmltdW0tcGFnZS10aGF0LWhvbGRzKG4pKSwgdGhhdCBpcywKKyAgcm91bmQgdXAgbiB0byBuZWFyZXN0IHBhZ2VzaXplLgorICovCit2b2lkKiAgZGxwdmFsbG9jKHNpemVfdCk7CisKKy8qCisgIG1hbGxvY190cmltKHNpemVfdCBwYWQpOworCisgIElmIHBvc3NpYmxlLCBnaXZlcyBtZW1vcnkgYmFjayB0byB0aGUgc3lzdGVtICh2aWEgbmVnYXRpdmUgYXJndW1lbnRzCisgIHRvIHNicmspIGlmIHRoZXJlIGlzIHVudXNlZCBtZW1vcnkgYXQgdGhlIGBoaWdoJyBlbmQgb2YgdGhlIG1hbGxvYworICBwb29sIG9yIGluIHVudXNlZCBNTUFQIHNlZ21lbnRzLiBZb3UgY2FuIGNhbGwgdGhpcyBhZnRlciBmcmVlaW5nCisgIGxhcmdlIGJsb2NrcyBvZiBtZW1vcnkgdG8gcG90ZW50aWFsbHkgcmVkdWNlIHRoZSBzeXN0ZW0tbGV2ZWwgbWVtb3J5CisgIHJlcXVpcmVtZW50cyBvZiBhIHByb2dyYW0uIEhvd2V2ZXIsIGl0IGNhbm5vdCBndWFyYW50ZWUgdG8gcmVkdWNlCisgIG1lbW9yeS4gVW5kZXIgc29tZSBhbGxvY2F0aW9uIHBhdHRlcm5zLCBzb21lIGxhcmdlIGZyZWUgYmxvY2tzIG9mCisgIG1lbW9yeSB3aWxsIGJlIGxvY2tlZCBiZXR3ZWVuIHR3byB1c2VkIGNodW5rcywgc28gdGhleSBjYW5ub3QgYmUKKyAgZ2l2ZW4gYmFjayB0byB0aGUgc3lzdGVtLgorCisgIFRoZSBgcGFkJyBhcmd1bWVudCB0byBtYWxsb2NfdHJpbSByZXByZXNlbnRzIHRoZSBhbW91bnQgb2YgZnJlZQorICB0cmFpbGluZyBzcGFjZSB0byBsZWF2ZSB1bnRyaW1tZWQuIElmIHRoaXMgYXJndW1lbnQgaXMgemVybywgb25seQorICB0aGUgbWluaW11bSBhbW91bnQgb2YgbWVtb3J5IHRvIG1haW50YWluIGludGVybmFsIGRhdGEgc3RydWN0dXJlcworICB3aWxsIGJlIGxlZnQuIE5vbi16ZXJvIGFyZ3VtZW50cyBjYW4gYmUgc3VwcGxpZWQgdG8gbWFpbnRhaW4gZW5vdWdoCisgIHRyYWlsaW5nIHNwYWNlIHRvIHNlcnZpY2UgZnV0dXJlIGV4cGVjdGVkIGFsbG9jYXRpb25zIHdpdGhvdXQgaGF2aW5nCisgIHRvIHJlLW9idGFpbiBtZW1vcnkgZnJvbSB0aGUgc3lzdGVtLgorCisgIE1hbGxvY190cmltIHJldHVybnMgMSBpZiBpdCBhY3R1YWxseSByZWxlYXNlZCBhbnkgbWVtb3J5LCBlbHNlIDAuCisqLworaW50ICBkbG1hbGxvY190cmltKHNpemVfdCk7CisKKy8qCisgIG1hbGxvY193YWxrX2ZyZWVfcGFnZXMoaGFuZGxlciwgaGFyZykKKworICBDYWxscyB0aGUgcHJvdmlkZWQgaGFuZGxlciBvbiBlYWNoIGZyZWUgcmVnaW9uIGluIHRoZSBoZWFwLiAgVGhlCisgIG1lbW9yeSBiZXR3ZWVuIHN0YXJ0IGFuZCBlbmQgYXJlIGd1YXJhbnRlZWQgbm90IHRvIGNvbnRhaW4gYW55CisgIGltcG9ydGFudCBkYXRhLCBzbyB0aGUgaGFuZGxlciBpcyBmcmVlIHRvIGFsdGVyIHRoZSBjb250ZW50cworICBpbiBhbnkgd2F5LiAgVGhpcyBjYW4gYmUgdXNlZCB0byBhZHZpc2UgdGhlIE9TIHRoYXQgbGFyZ2UgZnJlZQorICByZWdpb25zIG1heSBiZSBzd2FwcGVkIG91dC4KKworICBUaGUgdmFsdWUgaW4gaGFyZyB3aWxsIGJlIHBhc3NlZCB0byBlYWNoIGNhbGwgb2YgdGhlIGhhbmRsZXIuCisgKi8KK3ZvaWQgZGxtYWxsb2Nfd2Fsa19mcmVlX3BhZ2VzKHZvaWQoKmhhbmRsZXIpKHZvaWQgKnN0YXJ0LCB2b2lkICplbmQsIHZvaWQgKmFyZyksCisgICAgdm9pZCAqaGFyZyk7CisKKy8qCisgIG1hbGxvY193YWxrX2hlYXAoaGFuZGxlciwgaGFyZykKKworICBDYWxscyB0aGUgcHJvdmlkZWQgaGFuZGxlciBvbiBlYWNoIG9iamVjdCBvciBmcmVlIHJlZ2lvbiBpbiB0aGUKKyAgaGVhcC4gIFRoZSBoYW5kbGVyIHdpbGwgcmVjZWl2ZSB0aGUgY2h1bmsgcG9pbnRlciBhbmQgbGVuZ3RoLCB0aGUKKyAgb2JqZWN0IHBvaW50ZXIgYW5kIGxlbmd0aCwgYW5kIHRoZSB2YWx1ZSBpbiBoYXJnIG9uIGVhY2ggY2FsbC4KKyAqLwordm9pZCBkbG1hbGxvY193YWxrX2hlYXAodm9pZCgqaGFuZGxlcikoY29uc3Qgdm9pZCAqY2h1bmtwdHIsIHNpemVfdCBjaHVua2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKnVzZXJwdHIsIHNpemVfdCB1c2VybGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXJnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmhhcmcpOworCisvKgorICBtYWxsb2NfdXNhYmxlX3NpemUodm9pZCogcCk7CisKKyAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHlvdSBjYW4gYWN0dWFsbHkgdXNlIGluCisgIGFuIGFsbG9jYXRlZCBjaHVuaywgd2hpY2ggbWF5IGJlIG1vcmUgdGhhbiB5b3UgcmVxdWVzdGVkIChhbHRob3VnaAorICBvZnRlbiBub3QpIGR1ZSB0byBhbGlnbm1lbnQgYW5kIG1pbmltdW0gc2l6ZSBjb25zdHJhaW50cy4KKyAgWW91IGNhbiB1c2UgdGhpcyBtYW55IGJ5dGVzIHdpdGhvdXQgd29ycnlpbmcgYWJvdXQKKyAgb3ZlcndyaXRpbmcgb3RoZXIgYWxsb2NhdGVkIG9iamVjdHMuIFRoaXMgaXMgbm90IGEgcGFydGljdWxhcmx5IGdyZWF0CisgIHByb2dyYW1taW5nIHByYWN0aWNlLiBtYWxsb2NfdXNhYmxlX3NpemUgY2FuIGJlIG1vcmUgdXNlZnVsIGluCisgIGRlYnVnZ2luZyBhbmQgYXNzZXJ0aW9ucywgZm9yIGV4YW1wbGU6CisKKyAgcCA9IG1hbGxvYyhuKTsKKyAgYXNzZXJ0KG1hbGxvY191c2FibGVfc2l6ZShwKSA+PSAyNTYpOworKi8KK3NpemVfdCBkbG1hbGxvY191c2FibGVfc2l6ZSh2b2lkKik7CisKKy8qCisgIG1hbGxvY19zdGF0cygpOworICBQcmludHMgb24gc3RkZXJyIHRoZSBhbW91bnQgb2Ygc3BhY2Ugb2J0YWluZWQgZnJvbSB0aGUgc3lzdGVtIChib3RoCisgIHZpYSBzYnJrIGFuZCBtbWFwKSwgdGhlIG1heGltdW0gYW1vdW50ICh3aGljaCBtYXkgYmUgbW9yZSB0aGFuCisgIGN1cnJlbnQgaWYgbWFsbG9jX3RyaW0gYW5kL29yIG11bm1hcCBnb3QgY2FsbGVkKSwgYW5kIHRoZSBjdXJyZW50CisgIG51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQgdmlhIG1hbGxvYyAob3IgcmVhbGxvYywgZXRjKSBidXQgbm90IHlldAorICBmcmVlZC4gTm90ZSB0aGF0IHRoaXMgaXMgdGhlIG51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQsIG5vdCB0aGUKKyAgbnVtYmVyIHJlcXVlc3RlZC4gSXQgd2lsbCBiZSBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyIHJlcXVlc3RlZAorICBiZWNhdXNlIG9mIGFsaWdubWVudCBhbmQgYm9va2tlZXBpbmcgb3ZlcmhlYWQuIEJlY2F1c2UgaXQgaW5jbHVkZXMKKyAgYWxpZ25tZW50IHdhc3RhZ2UgYXMgYmVpbmcgaW4gdXNlLCB0aGlzIGZpZ3VyZSBtYXkgYmUgZ3JlYXRlciB0aGFuCisgIHplcm8gZXZlbiB3aGVuIG5vIHVzZXItbGV2ZWwgY2h1bmtzIGFyZSBhbGxvY2F0ZWQuCisKKyAgVGhlIHJlcG9ydGVkIGN1cnJlbnQgYW5kIG1heGltdW0gc3lzdGVtIG1lbW9yeSBjYW4gYmUgaW5hY2N1cmF0ZSBpZgorICBhIHByb2dyYW0gbWFrZXMgb3RoZXIgY2FsbHMgdG8gc3lzdGVtIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9ucworICAobm9ybWFsbHkgc2Jyaykgb3V0c2lkZSBvZiBtYWxsb2MuCisKKyAgbWFsbG9jX3N0YXRzIHByaW50cyBvbmx5IHRoZSBtb3N0IGNvbW1vbmx5IGludGVyZXN0aW5nIHN0YXRpc3RpY3MuCisgIE1vcmUgaW5mb3JtYXRpb24gY2FuIGJlIG9idGFpbmVkIGJ5IGNhbGxpbmcgbWFsbGluZm8uCisqLwordm9pZCAgZGxtYWxsb2Nfc3RhdHMoKTsKKworI2VuZGlmIC8qICFPTkxZX01TUEFDRVMgKi8KKworI2lmIE1TUEFDRVMKKworLyoKKyAgbXNwYWNlIGlzIGFuIG9wYXF1ZSB0eXBlIHJlcHJlc2VudGluZyBhbiBpbmRlcGVuZGVudAorICByZWdpb24gb2Ygc3BhY2UgdGhhdCBzdXBwb3J0cyBtc3BhY2VfbWFsbG9jLCBldGMuCisqLwordHlwZWRlZiB2b2lkKiBtc3BhY2U7CisKKy8qCisgIGNyZWF0ZV9tc3BhY2UgY3JlYXRlcyBhbmQgcmV0dXJucyBhIG5ldyBpbmRlcGVuZGVudCBzcGFjZSB3aXRoIHRoZQorICBnaXZlbiBpbml0aWFsIGNhcGFjaXR5LCBvciwgaWYgMCwgdGhlIGRlZmF1bHQgZ3JhbnVsYXJpdHkgc2l6ZS4gIEl0CisgIHJldHVybnMgbnVsbCBpZiB0aGVyZSBpcyBubyBzeXN0ZW0gbWVtb3J5IGF2YWlsYWJsZSB0byBjcmVhdGUgdGhlCisgIHNwYWNlLiAgSWYgYXJndW1lbnQgbG9ja2VkIGlzIG5vbi16ZXJvLCB0aGUgc3BhY2UgdXNlcyBhIHNlcGFyYXRlCisgIGxvY2sgdG8gY29udHJvbCBhY2Nlc3MuIFRoZSBjYXBhY2l0eSBvZiB0aGUgc3BhY2Ugd2lsbCBncm93CisgIGR5bmFtaWNhbGx5IGFzIG5lZWRlZCB0byBzZXJ2aWNlIG1zcGFjZV9tYWxsb2MgcmVxdWVzdHMuICBZb3UgY2FuCisgIGNvbnRyb2wgdGhlIHNpemVzIG9mIGluY3JlbWVudGFsIGluY3JlYXNlcyBvZiB0aGlzIHNwYWNlIGJ5CisgIGNvbXBpbGluZyB3aXRoIGEgZGlmZmVyZW50IERFRkFVTFRfR1JBTlVMQVJJVFkgb3IgZHluYW1pY2FsbHkKKyAgc2V0dGluZyB3aXRoIG1hbGxvcHQoTV9HUkFOVUxBUklUWSwgdmFsdWUpLgorKi8KK21zcGFjZSBjcmVhdGVfbXNwYWNlKHNpemVfdCBjYXBhY2l0eSwgaW50IGxvY2tlZCk7CisKKy8qCisgIGRlc3Ryb3lfbXNwYWNlIGRlc3Ryb3lzIHRoZSBnaXZlbiBzcGFjZSwgYW5kIGF0dGVtcHRzIHRvIHJldHVybiBhbGwKKyAgb2YgaXRzIG1lbW9yeSBiYWNrIHRvIHRoZSBzeXN0ZW0sIHJldHVybmluZyB0aGUgdG90YWwgbnVtYmVyIG9mCisgIGJ5dGVzIGZyZWVkLiBBZnRlciBkZXN0cnVjdGlvbiwgdGhlIHJlc3VsdHMgb2YgYWNjZXNzIHRvIGFsbCBtZW1vcnkKKyAgdXNlZCBieSB0aGUgc3BhY2UgYmVjb21lIHVuZGVmaW5lZC4KKyovCitzaXplX3QgZGVzdHJveV9tc3BhY2UobXNwYWNlIG1zcCk7CisKKy8qCisgIGNyZWF0ZV9tc3BhY2Vfd2l0aF9iYXNlIHVzZXMgdGhlIG1lbW9yeSBzdXBwbGllZCBhcyB0aGUgaW5pdGlhbCBiYXNlCisgIG9mIGEgbmV3IG1zcGFjZS4gUGFydCAobGVzcyB0aGFuIDEyOCpzaXplb2Yoc2l6ZV90KSBieXRlcykgb2YgdGhpcworICBzcGFjZSBpcyB1c2VkIGZvciBib29ra2VlcGluZywgc28gdGhlIGNhcGFjaXR5IG11c3QgYmUgYXQgbGVhc3QgdGhpcworICBsYXJnZS4gKE90aGVyd2lzZSAwIGlzIHJldHVybmVkLikgV2hlbiB0aGlzIGluaXRpYWwgc3BhY2UgaXMKKyAgZXhoYXVzdGVkLCBhZGRpdGlvbmFsIG1lbW9yeSB3aWxsIGJlIG9idGFpbmVkIGZyb20gdGhlIHN5c3RlbS4KKyAgRGVzdHJveWluZyB0aGlzIHNwYWNlIHdpbGwgZGVhbGxvY2F0ZSBhbGwgYWRkaXRpb25hbGx5IGFsbG9jYXRlZAorICBzcGFjZSAoaWYgcG9zc2libGUpIGJ1dCBub3QgdGhlIGluaXRpYWwgYmFzZS4KKyovCittc3BhY2UgY3JlYXRlX21zcGFjZV93aXRoX2Jhc2Uodm9pZCogYmFzZSwgc2l6ZV90IGNhcGFjaXR5LCBpbnQgbG9ja2VkKTsKKworLyoKKyAgbXNwYWNlX21hbGxvYyBiZWhhdmVzIGFzIG1hbGxvYywgYnV0IG9wZXJhdGVzIHdpdGhpbgorICB0aGUgZ2l2ZW4gc3BhY2UuCisqLwordm9pZCogbXNwYWNlX21hbGxvYyhtc3BhY2UgbXNwLCBzaXplX3QgYnl0ZXMpOworCisvKgorICBtc3BhY2VfZnJlZSBiZWhhdmVzIGFzIGZyZWUsIGJ1dCBvcGVyYXRlcyB3aXRoaW4KKyAgdGhlIGdpdmVuIHNwYWNlLgorCisgIElmIGNvbXBpbGVkIHdpdGggRk9PVEVSUz09MSwgbXNwYWNlX2ZyZWUgaXMgbm90IGFjdHVhbGx5IG5lZWRlZC4KKyAgZnJlZSBtYXkgYmUgY2FsbGVkIGluc3RlYWQgb2YgbXNwYWNlX2ZyZWUgYmVjYXVzZSBmcmVlZCBjaHVua3MgZnJvbQorICBhbnkgc3BhY2UgYXJlIGhhbmRsZWQgYnkgdGhlaXIgb3JpZ2luYXRpbmcgc3BhY2VzLgorKi8KK3ZvaWQgbXNwYWNlX2ZyZWUobXNwYWNlIG1zcCwgdm9pZCogbWVtKTsKKworLyoKKyAgbXNwYWNlX3JlYWxsb2MgYmVoYXZlcyBhcyByZWFsbG9jLCBidXQgb3BlcmF0ZXMgd2l0aGluCisgIHRoZSBnaXZlbiBzcGFjZS4KKworICBJZiBjb21waWxlZCB3aXRoIEZPT1RFUlM9PTEsIG1zcGFjZV9yZWFsbG9jIGlzIG5vdCBhY3R1YWxseQorICBuZWVkZWQuICByZWFsbG9jIG1heSBiZSBjYWxsZWQgaW5zdGVhZCBvZiBtc3BhY2VfcmVhbGxvYyBiZWNhdXNlCisgIHJlYWxsb2NlZCBjaHVua3MgZnJvbSBhbnkgc3BhY2UgYXJlIGhhbmRsZWQgYnkgdGhlaXIgb3JpZ2luYXRpbmcKKyAgc3BhY2VzLgorKi8KK3ZvaWQqIG1zcGFjZV9yZWFsbG9jKG1zcGFjZSBtc3AsIHZvaWQqIG1lbSwgc2l6ZV90IG5ld3NpemUpOworCisvKgorICBtc3BhY2VfY2FsbG9jIGJlaGF2ZXMgYXMgY2FsbG9jLCBidXQgb3BlcmF0ZXMgd2l0aGluCisgIHRoZSBnaXZlbiBzcGFjZS4KKyovCit2b2lkKiBtc3BhY2VfY2FsbG9jKG1zcGFjZSBtc3AsIHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxlbV9zaXplKTsKKworLyoKKyAgbXNwYWNlX21lbWFsaWduIGJlaGF2ZXMgYXMgbWVtYWxpZ24sIGJ1dCBvcGVyYXRlcyB3aXRoaW4KKyAgdGhlIGdpdmVuIHNwYWNlLgorKi8KK3ZvaWQqIG1zcGFjZV9tZW1hbGlnbihtc3BhY2UgbXNwLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3QgYnl0ZXMpOworCisvKgorICBtc3BhY2VfaW5kZXBlbmRlbnRfY2FsbG9jIGJlaGF2ZXMgYXMgaW5kZXBlbmRlbnRfY2FsbG9jLCBidXQKKyAgb3BlcmF0ZXMgd2l0aGluIHRoZSBnaXZlbiBzcGFjZS4KKyovCit2b2lkKiogbXNwYWNlX2luZGVwZW5kZW50X2NhbGxvYyhtc3BhY2UgbXNwLCBzaXplX3Qgbl9lbGVtZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBlbGVtX3NpemUsIHZvaWQqIGNodW5rc1tdKTsKKworLyoKKyAgbXNwYWNlX2luZGVwZW5kZW50X2NvbWFsbG9jIGJlaGF2ZXMgYXMgaW5kZXBlbmRlbnRfY29tYWxsb2MsIGJ1dAorICBvcGVyYXRlcyB3aXRoaW4gdGhlIGdpdmVuIHNwYWNlLgorKi8KK3ZvaWQqKiBtc3BhY2VfaW5kZXBlbmRlbnRfY29tYWxsb2MobXNwYWNlIG1zcCwgc2l6ZV90IG5fZWxlbWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplc1tdLCB2b2lkKiBjaHVua3NbXSk7CisKKy8qCisgIG1zcGFjZV9mb290cHJpbnQoKSByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgb2J0YWluZWQgZnJvbSB0aGUKKyAgc3lzdGVtIGZvciB0aGlzIHNwYWNlLgorKi8KK3NpemVfdCBtc3BhY2VfZm9vdHByaW50KG1zcGFjZSBtc3ApOworCisvKgorICBtc3BhY2VfbWF4X2FsbG93ZWRfZm9vdHByaW50KCkgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQKKyAgdGhpcyBzcGFjZSBpcyBhbGxvd2VkIHRvIG9idGFpbiBmcm9tIHRoZSBzeXN0ZW0uIFNlZQorICBtYWxsb2NfbWF4X2FsbG93ZWRfZm9vdHByaW50KCkgZm9yIGEgbW9yZSBpbi1kZXB0aCBkZXNjcmlwdGlvbi4KKworICBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgYXZhaWxhYmxlIGlmIGRsbWFsbG9jLmMgd2FzIGNvbXBpbGVkCisgIHdpdGggVVNFX01BWF9BTExPV0VEX0ZPT1RQUklOVCBzZXQuCisqLworc2l6ZV90IG1zcGFjZV9tYXhfYWxsb3dlZF9mb290cHJpbnQobXNwYWNlIG1zcCk7CisKKy8qCisgIG1zcGFjZV9zZXRfbWF4X2FsbG93ZWRfZm9vdHByaW50KCkgc2V0cyB0aGUgbWF4aW11bSBudW1iZXIgb2YKKyAgYnl0ZXMgKHJvdW5kZWQgdXAgdG8gYSBwYWdlKSB0aGF0IHRoaXMgc3BhY2UgaXMgYWxsb3dlZCB0bworICBvYnRhaW4gZnJvbSB0aGUgc3lzdGVtLiAgU2VlIG1hbGxvY19zZXRfbWF4X2FsbG93ZWRfZm9vdHByaW50KCkKKyAgZm9yIGEgbW9yZSBpbi1kZXB0aCBkZXNjcmlwdGlvbi4KKworICBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgYXZhaWxhYmxlIGlmIGRsbWFsbG9jLmMgd2FzIGNvbXBpbGVkCisgIHdpdGggVVNFX01BWF9BTExPV0VEX0ZPT1RQUklOVCBzZXQuCisqLwordm9pZCBtc3BhY2Vfc2V0X21heF9hbGxvd2VkX2Zvb3RwcmludChtc3BhY2UgbXNwLCBzaXplX3QgYnl0ZXMpOworCisvKgorICBtc3BhY2VfbWF4X2Zvb3RwcmludCgpIHJldHVybnMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIG9idGFpbmVkCisgIGZyb20gdGhlIHN5c3RlbSBvdmVyIHRoZSBsaWZldGltZSBvZiB0aGlzIHNwYWNlLgorKi8KK3NpemVfdCBtc3BhY2VfbWF4X2Zvb3RwcmludChtc3BhY2UgbXNwKTsKKworCisjaWYgIU5PX01BTExJTkZPCisvKgorICBtc3BhY2VfbWFsbGluZm8gYmVoYXZlcyBhcyBtYWxsaW5mbywgYnV0IHJlcG9ydHMgcHJvcGVydGllcyBvZgorICB0aGUgZ2l2ZW4gc3BhY2UuCisqLworc3RydWN0IG1hbGxpbmZvIG1zcGFjZV9tYWxsaW5mbyhtc3BhY2UgbXNwKTsKKyNlbmRpZiAvKiBOT19NQUxMSU5GTyAqLworCisvKgorICBtc3BhY2VfbWFsbG9jX3N0YXRzIGJlaGF2ZXMgYXMgbWFsbG9jX3N0YXRzLCBidXQgcmVwb3J0cworICBwcm9wZXJ0aWVzIG9mIHRoZSBnaXZlbiBzcGFjZS4KKyovCit2b2lkIG1zcGFjZV9tYWxsb2Nfc3RhdHMobXNwYWNlIG1zcCk7CisKKy8qCisgIG1zcGFjZV90cmltIGJlaGF2ZXMgYXMgbWFsbG9jX3RyaW0sIGJ1dAorICBvcGVyYXRlcyB3aXRoaW4gdGhlIGdpdmVuIHNwYWNlLgorKi8KK2ludCBtc3BhY2VfdHJpbShtc3BhY2UgbXNwLCBzaXplX3QgcGFkKTsKKworLyoKKyAgQW4gYWxpYXMgZm9yIG1hbGxvcHQuCisqLworaW50IG1zcGFjZV9tYWxsb3B0KGludCwgaW50KTsKKworI2VuZGlmICAvKiBNU1BBQ0VTICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfTsgIC8qIGVuZCBvZiBleHRlcm4gIkMiICovCisjZW5kaWYKKworI2VuZGlmIC8qIE1BTExPQ18yODBfSCAqLwpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvZHJhbmQ0OC5jIGIvbGliYy9iaW9uaWMvZHJhbmQ0OC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkNDgxOTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9kcmFuZDQ4LmMKQEAgLTAsMCArMSwyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMTk5MyBNYXJ0aW4gQmlyZ21laWVyCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFlvdSBtYXkgcmVkaXN0cmlidXRlIHVubW9kaWZpZWQgb3IgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhpcyBzb3VyY2UKKyAqIGNvZGUgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBhbmQgdGhlCisgKiBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgcmV0YWluZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBgYGFzIGlzJycsIGFuZCBjb21lcyB3aXRoIG5vIHdhcnJhbnRpZXMKKyAqIG9mIGFueSBraW5kLiBJIHNoYWxsIGluIG5vIGV2ZW50IGJlIGxpYWJsZSBmb3IgYW55dGhpbmcgdGhhdCBoYXBwZW5zCisgKiB0byBhbnlvbmUvYW55dGhpbmcgd2hlbiB1c2luZyB0aGlzIHNvZnR3YXJlLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKworI2luY2x1ZGUgInJhbmQ0OC5oIgorCitleHRlcm4gdW5zaWduZWQgc2hvcnQgX3JhbmQ0OF9zZWVkWzNdOworCitkb3VibGUKK2RyYW5kNDgodm9pZCkKK3sKKwlyZXR1cm4gZXJhbmQ0OChfcmFuZDQ4X3NlZWQpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvZWFiaS5jIGIvbGliYy9iaW9uaWMvZWFiaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyMTJkMDUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9lYWJpLmMKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCit2b2lkKiBfX2Rzb19oYW5kbGUgPSAwOworCisvKiBNYWtlIHRoaXMgYSB3ZWFrIHN5bWJvbCB0byBhdm9pZCBhIG11bHRpcGxlIGRlZmluaXRpb24gZXJyb3Igd2hlbiBsaW5raW5nCisgKiB3aXRoIGxpYnN0ZGMrKy12My4gICovCitpbnQgX19hdHRyaWJ1dGVfXygod2VhaykpCitfX2FlYWJpX2F0ZXhpdCAodm9pZCAqb2JqZWN0LCB2b2lkICgqZGVzdHJ1Y3RvcikgKHZvaWQgKiksIHZvaWQgKmRzb19oYW5kbGUpCit7CisgICAgLy9yZXR1cm4gX19jeGFfYXRleGl0KGRlc3RydWN0b3IsIG9iamVjdCwgZHNvX2hhbmRsZSk7CisgICAgcmV0dXJuIDA7Cit9CisKKwordm9pZCBfX2FlYWJpX21lbWNweTgodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbikgeworICAgIG1lbWNweShkZXN0LCBzcmMsIG4pOworfQorCit2b2lkIF9fYWVhYmlfbWVtY3B5NCh2b2lkICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBuKSB7CisgICAgbWVtY3B5KGRlc3QsIHNyYywgbik7Cit9CisKK3ZvaWQgX19hZWFiaV9tZW1jcHkodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbikgeworICAgIG1lbWNweShkZXN0LCBzcmMsIG4pOworfQorCisKK3ZvaWQgX19hZWFiaV9tZW1tb3ZlOCh2b2lkICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBuKSB7CisgICAgbWVtbW92ZShkZXN0LCBzcmMsIG4pOworfQorCit2b2lkIF9fYWVhYmlfbWVtbW92ZTQodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbikgeworICAgIG1lbW1vdmUoZGVzdCwgc3JjLCBuKTsKK30KKwordm9pZCBfX2FlYWJpX21lbW1vdmUodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbikgeworICAgIG1lbW1vdmUoZGVzdCwgc3JjLCBuKTsKK30KKworLyoKKyAqIF9fYWVhYmlfbWVtc2V0IGhhcyB0aGUgb3JkZXIgb2YgaXRzIHNlY29uZCBhbmQgdGhpcmQgYXJndW1lbnRzIHJldmVyc2VkLiAKKyAqICBUaGlzIGFsbG93cyBfX2FlYWJpX21lbWNsciB0byB0YWlsLWNhbGwgX19hZWFiaV9tZW1zZXQKKyAqLworIAordm9pZCBfX2FlYWJpX21lbXNldDgodm9pZCAqZGVzdCwgc2l6ZV90IG4sIGludCBjKSB7CisgICAgbWVtc2V0KGRlc3QsIGMsIG4pOworfQorCit2b2lkIF9fYWVhYmlfbWVtc2V0NCh2b2lkICpkZXN0LCBzaXplX3QgbiwgaW50IGMpIHsKKyAgICBtZW1zZXQoZGVzdCwgYywgbik7Cit9CisKK3ZvaWQgX19hZWFiaV9tZW1zZXQodm9pZCAqZGVzdCwgc2l6ZV90IG4sIGludCBjKSB7CisgICAgbWVtc2V0KGRlc3QsIGMsIG4pOworfQorCisKK3ZvaWQgX19hZWFiaV9tZW1jbHI4KHZvaWQgKmRlc3QsIHNpemVfdCBuKSB7CisgICAgX19hZWFiaV9tZW1zZXQ4KGRlc3QsIG4sIDApOworfQorCit2b2lkIF9fYWVhYmlfbWVtY2xyNCh2b2lkICpkZXN0LCBzaXplX3QgbikgeworICAgIF9fYWVhYmlfbWVtc2V0NChkZXN0LCBuLCAwKTsKK30KKwordm9pZCBfX2FlYWJpX21lbWNscih2b2lkICpkZXN0LCBzaXplX3QgbikgeworICAgIF9fYWVhYmlfbWVtc2V0KGRlc3QsIG4sIDApOworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvZXJhbmQ0OC5jIGIvbGliYy9iaW9uaWMvZXJhbmQ0OC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0M2ZmMzQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9lcmFuZDQ4LmMKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMTk5MyBNYXJ0aW4gQmlyZ21laWVyCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFlvdSBtYXkgcmVkaXN0cmlidXRlIHVubW9kaWZpZWQgb3IgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhpcyBzb3VyY2UKKyAqIGNvZGUgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBhbmQgdGhlCisgKiBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgcmV0YWluZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBgYGFzIGlzJycsIGFuZCBjb21lcyB3aXRoIG5vIHdhcnJhbnRpZXMKKyAqIG9mIGFueSBraW5kLiBJIHNoYWxsIGluIG5vIGV2ZW50IGJlIGxpYWJsZSBmb3IgYW55dGhpbmcgdGhhdCBoYXBwZW5zCisgKiB0byBhbnlvbmUvYW55dGhpbmcgd2hlbiB1c2luZyB0aGlzIHNvZnR3YXJlLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKworI2luY2x1ZGUgInJhbmQ0OC5oIgorCitkb3VibGUKK2VyYW5kNDgodW5zaWduZWQgc2hvcnQgeHNlZWRbM10pCit7CisJX2RvcmFuZDQ4KHhzZWVkKTsKKwlyZXR1cm4gbGRleHAoKGRvdWJsZSkgeHNlZWRbMF0sIC00OCkgKworCSAgICAgICBsZGV4cCgoZG91YmxlKSB4c2VlZFsxXSwgLTMyKSArCisJICAgICAgIGxkZXhwKChkb3VibGUpIHhzZWVkWzJdLCAtMTYpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvZm9yay5jIGIvbGliYy9iaW9uaWMvZm9yay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjNmE0YmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9mb3JrLmMKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSAicHRocmVhZF9pbnRlcm5hbC5oIgorCitleHRlcm4gaW50ICBfX2Zvcmsodm9pZCk7CisKK2ludCAgZm9yayh2b2lkKQoreworICAgIGludCAgcmV0OworCisgICAgLyogUG9zaXggbWFuZGF0ZXMgdGhhdCB0aGUgdGltZXJzIG9mIGEgZm9yayBjaGlsZCBwcm9jZXNzIGJlCisgICAgICogZGlzYXJtZWQsIGJ1dCBub3QgZGVzdHJveWVkLiBUbyBhdm9pZCBhIHJhY2UgY29uZGl0aW9uLCB3ZSdyZQorICAgICAqIGdvaW5nIHRvIHN0b3AgYWxsIHRpbWVycyBub3csIGFuZCBvbmx5IHJlLXN0YXJ0IHRoZW0gaW4gY2FzZQorICAgICAqIG9mIGVycm9yLCBvciBpbiB0aGUgcGFyZW50IHByb2Nlc3MKKyAgICAgKi8KKyAgICBfX3RpbWVyX3RhYmxlX3N0YXJ0X3N0b3AoMSk7CisgICAgcmV0ID0gX19mb3JrKCk7CisgICAgaWYgKHJldCAhPSAwKSB7ICAvKiBub3QgYSBjaGlsZCBwcm9jZXNzICovCisgICAgICAgIF9fdGltZXJfdGFibGVfc3RhcnRfc3RvcCgwKTsKKyAgICB9CisgICAgcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2hhc2guaCBiL2xpYmMvYmlvbmljL2hhc2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjQ4M2YxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvaGFzaC5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTkgS3VuZ2xpZ2EgVGVrbmlza2EgSPZnc2tvbGFuCisgKiAoUm95YWwgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksIFN0b2NraG9sbSwgU3dlZGVuKS4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgCisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgCisgKiBhcmUgbWV0OiAKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCAKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgCisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIAorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBLVEggbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZQorICogICAgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgS1RIIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBLVEggT1IgSVRTIENPTlRSSUJVVE9SUyBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorICogQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgorICogT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgorICogQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuICovCisKKy8qICRIZWltZGFsOiBoYXNoLmgsdiAxLjEgMTk5OS8wMy8yMiAxOToxNjoyNSBqb2RhIEV4cCAkCisgICAkTmV0QlNEOiBoYXNoLmgsdiAxLjEuMS4zIDIwMDIvMDkvMTIgMTI6NDE6NDIgam9kYSBFeHAgJCAqLworCisvKiBzdHVmZiBpbiBjb21tb24gYmV0d2VlbiBtZDQsIG1kNSwgYW5kIHNoYTEgKi8KKworI2lmbmRlZiBfX2hhc2hfaF9fCisjZGVmaW5lIF9faGFzaF9oX18KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWZuZGVmIG1pbgorI2RlZmluZSBtaW4oYSxiKSAoKChhKT4oYikpPyhiKTooYSkpCisjZW5kaWYKKworLyogVmVjdG9yIENyYXlzIGRvZXNuJ3QgaGF2ZSBhIGdvb2QgMzItYml0IHR5cGUsIG9yIG1vcmUgcHJlY2lzZWx5LAorICAgaW50MzJfdCBhcyBkZWZpbmVkIGJ5IDxiaW5kL2JpdHlwZXMuaD4gaXNuJ3QgMzIgYml0cywgYW5kIHdlIGRvbid0CisgICB3YW50IHRvIGRlcGVuZCBpbiBiZWluZyBhYmxlIHRvIHJlZGVmaW5lIHRoaXMgdHlwZS4gIFRvIGNvcGUgd2l0aAorICAgdGhpcyB3ZSBoYXZlIHRvIGNsYW1wIHRoZSByZXN1bHQgaW4gc29tZSBwbGFjZXMgdG8gWzAsMl4zMik7IG5vCisgICBuZWVkIHRvIGRvIHRoaXMgb24gb3RoZXIgbWFjaGluZXMuICBEaWQgSSBzYXkgdGhpcyB3YXMgYSBtZXNzPworICAgKi8KKworI2lmZGVmIF9DUkFZCisjZGVmaW5lIENSQVlGSVgoWCkgKChYKSAmIDB4ZmZmZmZmZmYpCisjZWxzZQorI2RlZmluZSBDUkFZRklYKFgpIChYKQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdV9pbnQzMl90Citjc2hpZnQgKHVfaW50MzJfdCB4LCB1bnNpZ25lZCBpbnQgbikKK3sKKyAgICB4ID0gQ1JBWUZJWCh4KTsKKyAgICByZXR1cm4gQ1JBWUZJWCgoeCA8PCBuKSB8ICh4ID4+ICgzMiAtIG4pKSk7Cit9CisKKyNlbmRpZiAvKiBfX2hhc2hfaF9fICovCmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9pZl9pbmRleHRvbmFtZS5jIGIvbGliYy9iaW9uaWMvaWZfaW5kZXh0b25hbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzA4YjI4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvaWZfaW5kZXh0b25hbWUuYwpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9zb2NraW9zLmg+CisjaW5jbHVkZSA8bmV0L2lmLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKy8qCisgKiBNYXAgYW4gaW50ZXJmYWNlIGluZGV4IGludG8gaXRzIG5hbWUuCisgKiBSZXR1cm5zIE5VTEwgb24gZXJyb3IuCisgKi8KK2NoYXIqCitpZl9pbmRleHRvbmFtZSh1bnNpZ25lZCBpZmluZGV4LCBjaGFyICppZm5hbWUpCit7CisgICAgaW50IGluZGV4OworICAgIGludCBjdGxfc29jazsKKyAgICBzdHJ1Y3QgaWZyZXEgaWZyOworICAgIGNoYXIqICByZXQgPSBOVUxMOworCisgICAgbWVtc2V0KCZpZnIsIDAsIHNpemVvZihzdHJ1Y3QgaWZyZXEpKTsKKyAgICBpZnIuaWZyX2lmaW5kZXggPSBpZmluZGV4OworCisgICAgaWYgKChjdGxfc29jayA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCAwKSkgPj0gMCkgeworICAgICAgICBpZiAoaW9jdGwoY3RsX3NvY2ssIFNJT0NHSUZOQU1FLCAmaWZyKSA+PSAwKSB7CisgICAgICAgICAgICByZXQgPSBzdHJuY3B5IChpZm5hbWUsIGlmci5pZnJfbmFtZSwgSUZOQU1TSVopOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyogUG9zaXggcmVxdWlyZXMgRU5YSU8gKi8KKyAgICAgICAgICAgIGlmIChlcnJubyA9PSBFTk9ERVYpCisgICAgICAgICAgICAgICAgZXJybm8gPSBFTlhJTzsKKyAgICAgICAgfQorICAgICAgICBjbG9zZShjdGxfc29jayk7CisgICAgfQorICAgIHJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9pZl9uYW1ldG9pbmRleC5jIGIvbGliYy9iaW9uaWMvaWZfbmFtZXRvaW5kZXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjcwZTQzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvaWZfbmFtZXRvaW5kZXguYwpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9zb2NraW9zLmg+CisjaW5jbHVkZSA8bmV0L2lmLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorCisvKgorICogTWFwIGFuIGludGVyZmFjZSBuYW1lIGludG8gaXRzIGNvcnJlc3BvbmRpbmcgaW5kZXguCisgKiBSZXR1cm5zIDAgb24gZXJyb3IsIGFzIDAgaXMgbm90IGEgdmFsaWQgaW5kZXguCisgKi8KK3Vuc2lnbmVkIGludCBpZl9uYW1ldG9pbmRleChjb25zdCBjaGFyICppZm5hbWUpCit7CisgICAgaW50IGluZGV4OworICAgIGludCBjdGxfc29jazsKKyAgICBzdHJ1Y3QgaWZyZXEgaWZyOworCisgICAgbWVtc2V0KCZpZnIsIDAsIHNpemVvZihzdHJ1Y3QgaWZyZXEpKTsKKyAgICBzdHJuY3B5KGlmci5pZnJfbmFtZSwgaWZuYW1lLCBJRk5BTVNJWik7CisgICAgaWZyLmlmcl9uYW1lW0lGTkFNU0laIC0gMV0gPSAwOworCisgICAgaW5kZXggPSAwOworICAgIGlmICgoY3RsX3NvY2sgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgMCkpID49IDApIHsKKyAgICAgICAgaWYgKGlvY3RsKGN0bF9zb2NrLCBTSU9DR0lGSU5ERVgsICZpZnIpID49IDApIHsKKyAgICAgICAgICAgIGluZGV4ID0gaWZyLmlmcl9pZmluZGV4OworICAgICAgICB9CisgICAgICAgIGNsb3NlKGN0bF9zb2NrKTsKKyAgICB9CisgICAgcmV0dXJuIGluZGV4OworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvaW9jdGwuYyBiL2xpYmMvYmlvbmljL2lvY3RsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRkOTVkMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL2lvY3RsLmMKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHN0ZGFyZy5oPgorCitleHRlcm4gaW50IF9faW9jdGwoaW50LCBpbnQsIHZvaWQgKik7CisKK2ludCBpb2N0bChpbnQgZmQsIGludCByZXF1ZXN0LCAuLi4pCit7CisgICAgdmFfbGlzdCBhcDsKKyAgICB2b2lkICogYXJnOworCisgICAgdmFfc3RhcnQoYXAsIHJlcXVlc3QpOworICAgIGFyZyA9IHZhX2FyZyhhcCwgdm9pZCAqKTsKKyAgICB2YV9lbmQoYXApOworCisgICAgcmV0dXJuIF9faW9jdGwoZmQsIHJlcXVlc3QsIGFyZyk7Cit9CisKZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2xkZXhwLmMgYi9saWJjL2Jpb25pYy9sZGV4cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjMWYzZGQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9sZGV4cC5jCkBAIC0wLDAgKzEsMTIyIEBACisvKiBAKCMpc19zY2FsYm4uYyA1LjEgOTMvMDkvMjQgKi8KKy8qIEAoIylmZGxpYm0uaCA1LjEgOTMvMDkvMjQgKi8KKy8qCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8ZW5kaWFuLmg+CisjaW5jbHVkZSA8bWF0aC5oPgorCisvKiBCaXQgZmlkZGxpbmcgcm91dGluZXMgY29waWVkIGZyb20gbXN1bi9zcmMvbWF0aF9wcml2YXRlLmgsdiAxLjE1ICovCisKKyNpZiBCWVRFX09SREVSID09IEJJR19FTkRJQU4KKwordHlwZWRlZiB1bmlvbgoreworICBkb3VibGUgdmFsdWU7CisgIHN0cnVjdAorICB7CisgICAgdV9pbnQzMl90IG1zdzsKKyAgICB1X2ludDMyX3QgbHN3OworICB9IHBhcnRzOworfSBpZWVlX2RvdWJsZV9zaGFwZV90eXBlOworCisjZW5kaWYKKworI2lmIEJZVEVfT1JERVIgPT0gTElUVExFX0VORElBTgorCit0eXBlZGVmIHVuaW9uCit7CisgIGRvdWJsZSB2YWx1ZTsKKyAgc3RydWN0CisgIHsKKyAgICB1X2ludDMyX3QgbHN3OworICAgIHVfaW50MzJfdCBtc3c7CisgIH0gcGFydHM7Cit9IGllZWVfZG91YmxlX3NoYXBlX3R5cGU7CisKKyNlbmRpZgorCisvKiBHZXQgdHdvIDMyIGJpdCBpbnRzIGZyb20gYSBkb3VibGUuICAqLworCisjZGVmaW5lIEVYVFJBQ1RfV09SRFMoaXgwLGl4MSxkKQkJCQlcCitkbyB7CQkJCQkJCQlcCisgIGllZWVfZG91YmxlX3NoYXBlX3R5cGUgZXdfdTsJCQkJCVwKKyAgZXdfdS52YWx1ZSA9IChkKTsJCQkJCQlcCisgIChpeDApID0gZXdfdS5wYXJ0cy5tc3c7CQkJCQlcCisgIChpeDEpID0gZXdfdS5wYXJ0cy5sc3c7CQkJCQlcCit9IHdoaWxlICgwKQorCisvKiBHZXQgdGhlIG1vcmUgc2lnbmlmaWNhbnQgMzIgYml0IGludCBmcm9tIGEgZG91YmxlLiAgKi8KKworI2RlZmluZSBHRVRfSElHSF9XT1JEKGksZCkJCQkJCVwKK2RvIHsJCQkJCQkJCVwKKyAgaWVlZV9kb3VibGVfc2hhcGVfdHlwZSBnaF91OwkJCQkJXAorICBnaF91LnZhbHVlID0gKGQpOwkJCQkJCVwKKyAgKGkpID0gZ2hfdS5wYXJ0cy5tc3c7CQkJCQkJXAorfSB3aGlsZSAoMCkKKworLyogU2V0IHRoZSBtb3JlIHNpZ25pZmljYW50IDMyIGJpdHMgb2YgYSBkb3VibGUgZnJvbSBhbiBpbnQuICAqLworCisjZGVmaW5lIFNFVF9ISUdIX1dPUkQoZCx2KQkJCQkJXAorZG8gewkJCQkJCQkJXAorICBpZWVlX2RvdWJsZV9zaGFwZV90eXBlIHNoX3U7CQkJCQlcCisgIHNoX3UudmFsdWUgPSAoZCk7CQkJCQkJXAorICBzaF91LnBhcnRzLm1zdyA9ICh2KTsJCQkJCQlcCisgIChkKSA9IHNoX3UudmFsdWU7CQkJCQkJXAorfSB3aGlsZSAoMCkKKworCitzdGF0aWMgY29uc3QgZG91YmxlCit0d281NCAgID0gIDEuODAxNDM5ODUwOTQ4MTk4NDAwMDBlKzE2LCAvKiAweDQzNTAwMDAwLCAweDAwMDAwMDAwICovCit0d29tNTQgID0gIDUuNTUxMTE1MTIzMTI1NzgyNzAyMTJlLTE3LCAvKiAweDNDOTAwMDAwLCAweDAwMDAwMDAwICovCitodWdlICAgPSAxLjBlKzMwMCwKK3RpbnkgICA9IDEuMGUtMzAwOworCitzdGF0aWMgZG91YmxlCitfY29weXNpZ24oZG91YmxlIHgsIGRvdWJsZSB5KQoreworCXVfaW50MzJfdCBoeCxoeTsKKwlHRVRfSElHSF9XT1JEKGh4LHgpOworCUdFVF9ISUdIX1dPUkQoaHkseSk7CisJU0VUX0hJR0hfV09SRCh4LChoeCYweDdmZmZmZmZmKXwoaHkmMHg4MDAwMDAwMCkpOworCXJldHVybiB4OworfQorCitkb3VibGUKK2xkZXhwKGRvdWJsZSB4LCBpbnQgbikKK3sKKwlpbnQzMl90IGssaHgsbHg7CisJRVhUUkFDVF9XT1JEUyhoeCxseCx4KTsKKyAgICAgICAgayA9IChoeCYweDdmZjAwMDAwKT4+MjA7CQkvKiBleHRyYWN0IGV4cG9uZW50ICovCisgICAgICAgIGlmIChrPT0wKSB7CQkJCS8qIDAgb3Igc3Vibm9ybWFsIHggKi8KKyAgICAgICAgICAgIGlmICgobHh8KGh4JjB4N2ZmZmZmZmYpKT09MCkgcmV0dXJuIHg7IC8qICstMCAqLworCSAgICB4ICo9IHR3bzU0OworCSAgICBHRVRfSElHSF9XT1JEKGh4LHgpOworCSAgICBrID0gKChoeCYweDdmZjAwMDAwKT4+MjApIC0gNTQ7CisgICAgICAgICAgICBpZiAobjwgLTUwMDAwKSByZXR1cm4gdGlueSp4OyAJLyp1bmRlcmZsb3cqLworCSAgICB9CisgICAgICAgIGlmIChrPT0weDdmZikgcmV0dXJuIHgreDsJCS8qIE5hTiBvciBJbmYgKi8KKyAgICAgICAgayA9IGsrbjsKKyAgICAgICAgaWYgKGsgPiAgMHg3ZmUpIHJldHVybiBodWdlKl9jb3B5c2lnbihodWdlLHgpOyAvKiBvdmVyZmxvdyAgKi8KKyAgICAgICAgaWYgKGsgPiAwKSAJCQkJLyogbm9ybWFsIHJlc3VsdCAqLworCSAgICB7U0VUX0hJR0hfV09SRCh4LChoeCYweDgwMGZmZmZmKXwoazw8MjApKTsgcmV0dXJuIHg7fQorICAgICAgICBpZiAoayA8PSAtNTQpIHsKKyAgICAgICAgICAgIGlmIChuID4gNTAwMDApIAkvKiBpbiBjYXNlIGludGVnZXIgb3ZlcmZsb3cgaW4gbitrICovCisJCXJldHVybiBodWdlKl9jb3B5c2lnbihodWdlLHgpOwkvKm92ZXJmbG93Ki8KKwkgICAgZWxzZSByZXR1cm4gdGlueSpfY29weXNpZ24odGlueSx4KTsgCS8qdW5kZXJmbG93Ki8KKwl9CisgICAgICAgIGsgKz0gNTQ7CQkJCS8qIHN1Ym5vcm1hbCByZXN1bHQgKi8KKwlTRVRfSElHSF9XT1JEKHgsKGh4JjB4ODAwZmZmZmYpfChrPDwyMCkpOworICAgICAgICByZXR1cm4geCp0d29tNTQ7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9saWJjX2luaXRfY29tbW9uLmMgYi9saWJjL2Jpb25pYy9saWJjX2luaXRfY29tbW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU0OTE5ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL2xpYmNfaW5pdF9jb21tb24uYwpAQCAtMCwwICsxLDEyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxlbGYuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgInB0aHJlYWRfaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJhdGV4aXQuaCIKKyNpbmNsdWRlICJsaWJjX2luaXRfY29tbW9uLmgiCisKKyNpbmNsdWRlIDxiaW9uaWNfdGxzLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworZXh0ZXJuIHZvaWQgX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBfZmluaSh2b2lkKTsKKworc3RhdGljIHZvaWQgY2FsbF9hcnJheSh2b2lkKCoqbGlzdCkoKSkKK3sKKyAgICAvLyBGaXJzdCBlbGVtZW50IGlzIC0xLCBsaXN0IGlzIG51bGwtdGVybWluYXRlZAorICAgIHdoaWxlICgqKytsaXN0KSB7CisgICAgICAgICgqbGlzdCkoKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIF9fYmlvbmljX2RvX2dsb2JhbF9kdG9ycyhzdHJ1Y3RvcnNfYXJyYXlfdCBjb25zdCAqIGNvbnN0IHApCit7CisgICAgY2FsbF9hcnJheShwLT5maW5pX2FycmF5KTsKKyAgICAvL19maW5pKCk7Cit9CisKK2V4dGVybiB1bnNpZ25lZCBfX2dldF9zcCh2b2lkKTsKK2V4dGVybiBwaWRfdCAgICBnZXR0aWQodm9pZCk7CisKK2NoYXIqICBfX3Byb2duYW1lOworY2hhciAqKmVudmlyb247CisKKy8qIGZyb20gYXNtL3BhZ2UuaCAqLwordW5zaWduZWQgaW50IF9fcGFnZV9zaXplID0gUEFHRV9TSVpFOwordW5zaWduZWQgaW50IF9fcGFnZV9zaGlmdCA9IFBBR0VfU0hJRlQ7CisKKworaW50IF9fc3lzdGVtX3Byb3BlcnRpZXNfaW5pdCh2b2lkKTsKKwordm9pZCBfX2xpYmNfaW5pdF9jb21tb24odWludHB0cl90ICplbGZkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqb25leGl0KSh2b2lkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqc2xpbmdzaG90KShpbnQsIGNoYXIqKiwgY2hhcioqKSwKKyAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0b3JzX2FycmF5X3QgY29uc3QgKiBjb25zdCBzdHJ1Y3RvcnMsCisgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpwcmVfY3Rvcl9ob29rKSgpKQoreworICAgIHB0aHJlYWRfaW50ZXJuYWxfdCB0aHJlYWQ7CisgICAgcHRocmVhZF9hdHRyX3QgdGhyZWFkX2F0dHI7CisgICAgdm9pZCAqdGxzX2FyZWFbQklPTklDX1RMU19TTE9UU107CisgICAgaW50IGFyZ2M7CisgICAgY2hhciAqKmFyZ3YsICoqZW52cCwgKiplbnZlbmQ7CisgICAgc3RydWN0IGF1eGVudHJ5ICphdXhlbnRyeTsKKyAgICB1bnNpZ25lZCBpbnQgcGFnZV9zaXplID0gMCwgcGFnZV9zaGlmdCA9IDA7CisKKyAgICAvKiBUaGUgbWFpbiB0aHJlYWQncyBzdGFjayBoYXMgZW1waXJpY2FsbHkgc2hvd24gdG8gYmUgODRrICovCisgICAgdW5zaWduZWQgc3RhY2t0b3AgPSAoX19nZXRfc3AoKSAmIH4oUEFHRV9TSVpFIC0gMSkpICsgUEFHRV9TSVpFOworICAgIHVuc2lnbmVkIHN0YWNrc2l6ZSA9IDEyOCAqIDEwMjQ7IC8vODQgKiAxMDI0OworICAgIHVuc2lnbmVkIHN0YWNrYm90dG9tID0gc3RhY2t0b3AgLSBzdGFja3NpemU7CisKKyAgICBwdGhyZWFkX2F0dHJfaW5pdCgmdGhyZWFkX2F0dHIpOworICAgIHB0aHJlYWRfYXR0cl9zZXRzdGFjaygmdGhyZWFkX2F0dHIsICh2b2lkKilzdGFja2JvdHRvbSwgc3RhY2tzaXplKTsKKyAgICBfaW5pdF90aHJlYWQoJnRocmVhZCwgZ2V0dGlkKCksICZ0aHJlYWRfYXR0ciwgKHZvaWQqKXN0YWNrYm90dG9tKTsKKyAgICBfX2luaXRfdGxzKHRsc19hcmVhLCAmdGhyZWFkKTsKKworICAgIGFyZ2MgPSAoaW50KSAqZWxmZGF0YSsrOworICAgIGFyZ3YgPSAoY2hhcioqKSBlbGZkYXRhOworICAgIGVudnAgPSBhcmd2KyhhcmdjKzEpOworICAgIGVudmlyb24gPSBlbnZwOworCisgICAgX19wcm9nbmFtZSA9IGFyZ3ZbMF0gPyBhcmd2WzBdIDogIjx1bmtub3duPiI7CisKKyAgICBlcnJubyA9IDA7CisKKyAgICBfX3N5c3RlbV9wcm9wZXJ0aWVzX2luaXQoKTsKKworICAgIGlmIChwcmVfY3Rvcl9ob29rKSBwcmVfY3Rvcl9ob29rKCk7CisKKyAgICAvLyBYWFg6IHdlIHNob3VsZCBleGVjdXRlIHRoZSAuZmluaV9hcnJheSB1cG9uIGV4aXQKKworICAgIC8vIHByZS1pbml0IGFycmF5LgorICAgIC8vIFhYWDogSSdtIG5vdCBzdXJlIHdoYXQncyB0aGUgZGlmZmVyZW50IHdpdGggdGhlIGluaXQgYXJyYXkuCisgICAgY2FsbF9hcnJheShzdHJ1Y3RvcnMtPnByZWluaXRfYXJyYXkpOworCisgICAgLy8gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24tZWFiaSBiaW5hcnksIGNhbGwgdGhlIC5jdG9ycyBzZWN0aW9uCisgICAgY2FsbF9hcnJheShzdHJ1Y3RvcnMtPmN0b3JzX2FycmF5KTsKKworICAgIC8vIGNhbGwgc3RhdGljIGNvbnN0cnVjdG9ycworICAgIGNhbGxfYXJyYXkoc3RydWN0b3JzLT5pbml0X2FycmF5KTsKKworICAgIGV4aXQoc2xpbmdzaG90KGFyZ2MsIGFyZ3YsIGVudnApKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2xpYmNfaW5pdF9jb21tb24uaCBiL2xpYmMvYmlvbmljL2xpYmNfaW5pdF9jb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmM4MmU0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvbGliY19pbml0X2NvbW1vbi5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgTElCQ19JTklUX0NPTU1PTl9ICisjZGVmaW5lIExJQkNfSU5JVF9DT01NT05fSAorCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgdm9pZCAoKipwcmVpbml0X2FycmF5KSh2b2lkKTsKKyAgICB2b2lkICgqKmluaXRfYXJyYXkpKHZvaWQpOworICAgIHZvaWQgKCoqZmluaV9hcnJheSkodm9pZCk7CisgICAgdm9pZCAoKipjdG9yc19hcnJheSkodm9pZCk7Cit9IHN0cnVjdG9yc19hcnJheV90OworCitleHRlcm4gX19ub3JldHVybiB2b2lkIF9fbGliY19pbml0X2NvbW1vbih1aW50cHRyX3QgKmVsZmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpvbmV4aXQpKHZvaWQpLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpzbGluZ3Nob3QpKGludCwgY2hhcioqLCBjaGFyKiopLAorICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3RvcnNfYXJyYXlfdCBjb25zdCAqIGNvbnN0IHN0cnVjdG9ycywKKyAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKnByZV9jdG9yX2hvb2spKCkpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2xpYmNfaW5pdF9keW5hbWljLmMgYi9saWJjL2Jpb25pYy9saWJjX2luaXRfZHluYW1pYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjZjI0YjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9saWJjX2luaXRfZHluYW1pYy5jCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKy8qCisgKiBsaWJjX2luaXRfc3RhdGljLmMKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHRha2VzIHRoZSByYXcgZGF0YSBibG9jayBzZXQgdXAgYnkgdGhlIEVMRiBsb2FkZXIKKyAqIGluIHRoZSBrZXJuZWwgYW5kIHBhcnNlcyBpdC4gIEl0IGlzIGludm9rZWQgYnkgY3J0MC5TIHdoaWNoIG1ha2VzCisgKiBhbnkgbmVjZXNzYXJ5IGFkanVzdG1lbnRzIGFuZCBwYXNzZXMgY2FsbHMgdGhpcyBmdW5jdGlvbiB1c2luZworICogdGhlIHN0YW5kYXJkIEMgY2FsbGluZyBjb252ZW50aW9uLgorICoKKyAqIFRoZSBhcmd1bWVudHMgYXJlOgorICogIHVpbnRwdHJfdCAqZWxmZGF0YQkgLS0gVGhlIEVMRiBsb2FkZXIgZGF0YSBibG9jazsgdXN1YWxseSBmcm9tIHRoZSBzdGFjay4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBCYXNpY2FsbHkgYSBwb2ludGVyIHRvIGFyZ2MuCisgKiAgdm9pZCAoKm9uZXhpdCkodm9pZCkgLS0gRnVuY3Rpb24gdG8gaW5zdGFsbCBpbnRvIG9uZXhpdAorICovCisKKy8qCisgKiBTZXZlcmFsIExpbnV4IEFCSXMgZG9uJ3QgcGFzcyB0aGUgb25leGl0IHBvaW50ZXIsIGFuZCB0aGUgb25lcyB0aGF0CisgKiBkbyBuZXZlciB1c2UgaXQuICBUaGVyZWZvcmUsIHVubGVzcyBVU0VfT05FWElUIGlzIGRlZmluZWQsIHdlIGp1c3QKKyAqIGlnbm9yZSB0aGUgb25leGl0IHBvaW50ZXIuCisgKi8KKy8qICNkZWZpbmUgVVNFX09ORVhJVCAqLworCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxlbGYuaD4KKyNpbmNsdWRlICJwdGhyZWFkX2ludGVybmFsLmgiCisjaW5jbHVkZSAiYXRleGl0LmgiCisjaW5jbHVkZSAibGliY19pbml0X2NvbW1vbi5oIgorCitleHRlcm4gdm9pZCBtYWxsb2NfZGVidWdfaW5pdCgpOworCitfX25vcmV0dXJuIHZvaWQgX19saWJjX2luaXQodWludHB0cl90ICplbGZkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqb25leGl0KSh2b2lkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqc2xpbmdzaG90KShpbnQsIGNoYXIqKiwgY2hhcioqKSwKKyAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0b3JzX2FycmF5X3QgY29uc3QgKiBjb25zdCBzdHJ1Y3RvcnMpCit7CisgICAgX19saWJjX2luaXRfY29tbW9uKGVsZmRhdGEsIG9uZXhpdCwgc2xpbmdzaG90LCBzdHJ1Y3RvcnMsIG1hbGxvY19kZWJ1Z19pbml0KTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2xpYmNfaW5pdF9zdGF0aWMuYyBiL2xpYmMvYmlvbmljL2xpYmNfaW5pdF9zdGF0aWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzQ2M2Y3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvbGliY19pbml0X3N0YXRpYy5jCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKy8qCisgKiBsaWJjX2luaXRfc3RhdGljLmMKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHRha2VzIHRoZSByYXcgZGF0YSBibG9jayBzZXQgdXAgYnkgdGhlIEVMRiBsb2FkZXIKKyAqIGluIHRoZSBrZXJuZWwgYW5kIHBhcnNlcyBpdC4gIEl0IGlzIGludm9rZWQgYnkgY3J0MC5TIHdoaWNoIG1ha2VzCisgKiBhbnkgbmVjZXNzYXJ5IGFkanVzdG1lbnRzIGFuZCBwYXNzZXMgY2FsbHMgdGhpcyBmdW5jdGlvbiB1c2luZworICogdGhlIHN0YW5kYXJkIEMgY2FsbGluZyBjb252ZW50aW9uLgorICoKKyAqIFRoZSBhcmd1bWVudHMgYXJlOgorICogIHVpbnRwdHJfdCAqZWxmZGF0YQkgLS0gVGhlIEVMRiBsb2FkZXIgZGF0YSBibG9jazsgdXN1YWxseSBmcm9tIHRoZSBzdGFjay4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBCYXNpY2FsbHkgYSBwb2ludGVyIHRvIGFyZ2MuCisgKiAgdm9pZCAoKm9uZXhpdCkodm9pZCkgLS0gRnVuY3Rpb24gdG8gaW5zdGFsbCBpbnRvIG9uZXhpdAorICovCisKKy8qCisgKiBTZXZlcmFsIExpbnV4IEFCSXMgZG9uJ3QgcGFzcyB0aGUgb25leGl0IHBvaW50ZXIsIGFuZCB0aGUgb25lcyB0aGF0CisgKiBkbyBuZXZlciB1c2UgaXQuICBUaGVyZWZvcmUsIHVubGVzcyBVU0VfT05FWElUIGlzIGRlZmluZWQsIHdlIGp1c3QKKyAqIGlnbm9yZSB0aGUgb25leGl0IHBvaW50ZXIuCisgKi8KKy8qICNkZWZpbmUgVVNFX09ORVhJVCAqLworCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxlbGYuaD4KKyNpbmNsdWRlICJwdGhyZWFkX2ludGVybmFsLmgiCisjaW5jbHVkZSAiYXRleGl0LmgiCisjaW5jbHVkZSAibGliY19pbml0X2NvbW1vbi5oIgorCisjaW5jbHVkZSA8YmlvbmljX3Rscy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKK19fbm9yZXR1cm4gdm9pZCBfX2xpYmNfaW5pdCh1aW50cHRyX3QgKmVsZmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpvbmV4aXQpKHZvaWQpLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpzbGluZ3Nob3QpKGludCwgY2hhcioqLCBjaGFyKiopLAorICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3RvcnNfYXJyYXlfdCBjb25zdCAqIGNvbnN0IHN0cnVjdG9ycykKK3sKKy8qIAorICogVG8gZW5hYmxlIG1hbGxvYyBjaGVja3MgZm9yIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW1zLCBhZGQKKyAqICJXSVRIX01BTExPQ19DSEVDS19MSUJDX0EgOj0gdHJ1ZSIgaW4gZGV2aWNlL2J1aWxkc3BlYy5taworICovCisjaWZkZWYgTUFMTE9DX0xFQUtfQ0hFQ0sKKyAgICBleHRlcm4gdm9pZCBtYWxsb2NfZGVidWdfaW5pdCgpOworICAgIF9fbGliY19pbml0X2NvbW1vbihlbGZkYXRhLCBvbmV4aXQsIHNsaW5nc2hvdCwgc3RydWN0b3JzLCBtYWxsb2NfZGVidWdfaW5pdCk7CisjZWxzZQorICAgIF9fbGliY19pbml0X2NvbW1vbihlbGZkYXRhLCBvbmV4aXQsIHNsaW5nc2hvdCwgc3RydWN0b3JzLCBOVUxMKTsKKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvbG9nZF93cml0ZS5jIGIvbGliYy9iaW9uaWMvbG9nZF93cml0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMzYwOGIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9sb2dkX3dyaXRlLmMKQEAgLTAsMCArMSwxNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3Vpby5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKworI2luY2x1ZGUgPGN1dGlscy9sb2dnZXIuaD4KKyNpbmNsdWRlICJsb2dkLmgiCisKKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisKKyNkZWZpbmUgTE9HX0JVRl9TSVpFCTEwMjQKKwordHlwZWRlZiBlbnVtIHsKKyAgICBMT0dfSURfTUFJTiA9IDAsCisgICAgTE9HX0lEX1JBRElPLAorICAgIExPR19JRF9NQVgKK30gbG9nX2lkX3Q7CisKK3N0YXRpYyBpbnQgX193cml0ZV90b19sb2dfaW5pdChsb2dfaWRfdCwgc3RydWN0IGlvdmVjICp2ZWMpOworc3RhdGljIGludCAoKndyaXRlX3RvX2xvZykobG9nX2lkX3QsIHN0cnVjdCBpb3ZlYyAqdmVjKSA9IF9fd3JpdGVfdG9fbG9nX2luaXQ7CitzdGF0aWMgcHRocmVhZF9tdXRleF90IGxvZ19pbml0X2xvY2sgPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOworCitzdGF0aWMgaW50IGxvZ19mZHNbKGludClMT0dfSURfTUFYXSA9IHsgLTEsIC0xIH07CisKK3N0YXRpYyBpbnQgX193cml0ZV90b19sb2dfbnVsbChsb2dfaWRfdCBsb2dfZmQsIHN0cnVjdCBpb3ZlYyAqdmVjKQoreworICAgIHJldHVybiAtMTsKK30KKworc3RhdGljIGludCBfX3dyaXRlX3RvX2xvZ19rZXJuZWwobG9nX2lkX3QgbG9nX2lkLCBzdHJ1Y3QgaW92ZWMgKnZlYykKK3sKKyAgICBzc2l6ZV90IHJldDsKKyAgICBpbnQgbG9nX2ZkOworCisgICAgaWYgKChpbnQpbG9nX2lkID49IDAgJiYgKGludClsb2dfaWQgPCAoaW50KUxPR19JRF9NQVgpIHsKKyAgICAgICAgbG9nX2ZkID0gbG9nX2Zkc1soaW50KWxvZ19pZF07CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIEVCQURGOworICAgIH0KKworICAgIGRvIHsKKyAgICAgICAgcmV0ID0gd3JpdGV2KGxvZ19mZCwgdmVjLCAzKTsKKyAgICB9IHdoaWxlIChyZXQgPCAwICYmIGVycm5vID09IEVJTlRSKTsKKworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX193cml0ZV90b19sb2dfaW5pdChsb2dfaWRfdCBsb2dfaWQsIHN0cnVjdCBpb3ZlYyAqdmVjKQoreworICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmbG9nX2luaXRfbG9jayk7CisKKyAgICBpZiAod3JpdGVfdG9fbG9nID09IF9fd3JpdGVfdG9fbG9nX2luaXQpIHsKKyAgICAgICAgbG9nX2Zkc1tMT0dfSURfTUFJTl0gPSBvcGVuKCIvZGV2LyJMT0dHRVJfTE9HX01BSU4sIE9fV1JPTkxZKTsKKyAgICAgICAgbG9nX2Zkc1tMT0dfSURfUkFESU9dID0gb3BlbigiL2Rldi8iTE9HR0VSX0xPR19SQURJTywgT19XUk9OTFkpOworCisgICAgICAgIHdyaXRlX3RvX2xvZyA9IF9fd3JpdGVfdG9fbG9nX2tlcm5lbDsKKworICAgICAgICBpZiAobG9nX2Zkc1tMT0dfSURfTUFJTl0gPCAwIHx8IGxvZ19mZHNbTE9HX0lEX1JBRElPXSA8IDApIHsKKyAgICAgICAgICAgIGNsb3NlKGxvZ19mZHNbTE9HX0lEX01BSU5dKTsKKyAgICAgICAgICAgIGNsb3NlKGxvZ19mZHNbTE9HX0lEX1JBRElPXSk7CisgICAgICAgICAgICBsb2dfZmRzW0xPR19JRF9NQUlOXSA9IC0xOworICAgICAgICAgICAgbG9nX2Zkc1tMT0dfSURfUkFESU9dID0gLTE7CisgICAgICAgICAgICB3cml0ZV90b19sb2cgPSBfX3dyaXRlX3RvX2xvZ19udWxsOworICAgICAgICB9CisgICAgfQorCisgICAgcHRocmVhZF9tdXRleF91bmxvY2soJmxvZ19pbml0X2xvY2spOworCisgICAgcmV0dXJuIHdyaXRlX3RvX2xvZyhsb2dfaWQsIHZlYyk7Cit9CisKK3N0YXRpYyBpbnQgX19hbmRyb2lkX2xvZ193cml0ZShpbnQgcHJpbywgY29uc3QgY2hhciAqdGFnLCBjb25zdCBjaGFyICptc2cpCit7CisgICAgc3RydWN0IGlvdmVjIHZlY1szXTsKKyAgICBsb2dfaWRfdCBsb2dfaWQgPSBMT0dfSURfTUFJTjsKKworICAgIGlmICghdGFnKQorICAgICAgICB0YWcgPSAiIjsKKworICAgIGlmICghc3RyY21wKHRhZywgIkhUQ19SSUwiKSkKKyAgICAgICAgbG9nX2lkID0gTE9HX0lEX1JBRElPOworCisgICAgdmVjWzBdLmlvdl9iYXNlICAgPSAodW5zaWduZWQgY2hhciAqKSAmcHJpbzsKKyAgICB2ZWNbMF0uaW92X2xlbiAgICA9IDE7CisgICAgdmVjWzFdLmlvdl9iYXNlICAgPSAodm9pZCAqKSB0YWc7CisgICAgdmVjWzFdLmlvdl9sZW4gICAgPSBzdHJsZW4odGFnKSArIDE7CisgICAgdmVjWzJdLmlvdl9iYXNlICAgPSAodm9pZCAqKSBtc2c7CisgICAgdmVjWzJdLmlvdl9sZW4gICAgPSBzdHJsZW4obXNnKSArIDE7CisKKyAgICByZXR1cm4gd3JpdGVfdG9fbG9nKGxvZ19pZCwgdmVjKTsKK30KKworCitzdGF0aWMgaW50IF9fYW5kcm9pZF9sb2dfdnByaW50KGludCBwcmlvLCBjb25zdCBjaGFyICp0YWcsIGNvbnN0IGNoYXIgKmZtdCwKKwkJCQl2YV9saXN0IGFwKQoreworICAgIGNoYXIgYnVmW0xPR19CVUZfU0laRV07ICAgIAorCisgICAgdnNucHJpbnRmKGJ1ZiwgTE9HX0JVRl9TSVpFLCBmbXQsIGFwKTsKKworICAgIHJldHVybiBfX2FuZHJvaWRfbG9nX3dyaXRlKHByaW8sIHRhZywgYnVmKTsKK30KKworaW50IF9fbGliY19hbmRyb2lkX2xvZ19wcmludChpbnQgcHJpbywgY29uc3QgY2hhciAqdGFnLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKyAgICB2YV9saXN0IGFwOworICAgIGNoYXIgYnVmW0xPR19CVUZfU0laRV07ICAgIAorCisgICAgdmFfc3RhcnQoYXAsIGZtdCk7CisgICAgdnNucHJpbnRmKGJ1ZiwgTE9HX0JVRl9TSVpFLCBmbXQsIGFwKTsKKyAgICB2YV9lbmQoYXApOworCisgICAgcmV0dXJuIF9fYW5kcm9pZF9sb2dfd3JpdGUocHJpbywgdGFnLCBidWYpOworfQorCitpbnQgX19saWJjX2FuZHJvaWRfbG9nX2Fzc2VydChjb25zdCBjaGFyICpjb25kLCBjb25zdCBjaGFyICp0YWcsCisJCQkgICAgICBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKyAgICB2YV9saXN0IGFwOworICAgIGNoYXIgYnVmW0xPR19CVUZfU0laRV07ICAgIAorCisgICAgdmFfc3RhcnQoYXAsIGZtdCk7CisgICAgdnNucHJpbnRmKGJ1ZiwgTE9HX0JVRl9TSVpFLCBmbXQsIGFwKTsKKyAgICB2YV9lbmQoYXApOworCisgICAgX19hbmRyb2lkX2xvZ193cml0ZShBTkRST0lEX0xPR19GQVRBTCwgdGFnLCBidWYpOworCisgICAgZXhpdCgxKTsKKworICAgIHJldHVybiAtMTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL21hbGxvY19sZWFrLmMgYi9saWJjL2Jpb25pYy9tYWxsb2NfbGVhay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwYWEyYWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9tYWxsb2NfbGVhay5jCkBAIC0wLDAgKzEsOTAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHVud2luZC5oPgorCisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN5cy91bi5oPgorI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3lzdGVtX3Byb3BlcnRpZXMuaD4KKworI2luY2x1ZGUgImRsbWFsbG9jLmgiCisjaW5jbHVkZSAibG9nZC5oIgorCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gVXRpbGl0aWVzIGRpcmVjdGx5IHVzZWQgYnkgRGFsdmlrCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjZGVmaW5lIEhBU0hUQUJMRV9TSVpFICAgICAgMTU0MworI2RlZmluZSBCQUNLVFJBQ0VfU0laRSAgICAgIDMyCisvKiBmbGFnIGRlZmluaXRpb25zLCBjdXJyZW50bHkgc2hhcmluZyBzdG9yYWdlIHdpdGggInNpemUiICovCisjZGVmaW5lIFNJWkVfRkxBR19aWUdPVEVfQ0hJTEQgICgxPDwzMSkKKyNkZWZpbmUgU0laRV9GTEFHX01BU0sgICAgICAgICAgKFNJWkVfRkxBR19aWUdPVEVfQ0hJTEQpCisKKyNkZWZpbmUgTUFYX1NJWkVfVCAgICAgICAgICAgKH4oc2l6ZV90KTApCisKKy8qCisgKiBJbiBhIFZNIHByb2Nlc3MsIHRoaXMgaXMgc2V0IHRvIDEgYWZ0ZXIgZm9yaygpaW5nIG91dCBvZiB6eWdvdGUuCisgKi8KK2ludCBnTWFsbG9jTGVha1p5Z290ZUNoaWxkID0gMDsKKworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIFN0cnVjdHVyZXMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3R5cGVkZWYgc3RydWN0IEhhc2hFbnRyeSBIYXNoRW50cnk7CitzdHJ1Y3QgSGFzaEVudHJ5IHsKKyAgICBzaXplX3Qgc2xvdDsKKyAgICBIYXNoRW50cnkqIHByZXY7CisgICAgSGFzaEVudHJ5KiBuZXh0OworICAgIHNpemVfdCBudW1FbnRyaWVzOworICAgIC8vIGZpZWxkcyBhYm92ZSAic2l6ZSIgYXJlIE5PVCBzZW50IHRvIHRoZSBob3N0CisgICAgc2l6ZV90IHNpemU7CisgICAgc2l6ZV90IGFsbG9jYXRpb25zOworICAgIGludHB0cl90IGJhY2t0cmFjZVswXTsKK307CisKK3R5cGVkZWYgc3RydWN0IEhhc2hUYWJsZSBIYXNoVGFibGU7CitzdHJ1Y3QgSGFzaFRhYmxlIHsKKyAgICBzaXplX3QgY291bnQ7CisgICAgSGFzaEVudHJ5KiBzbG90c1tIQVNIVEFCTEVfU0laRV07Cit9OworCitzdGF0aWMgcHRocmVhZF9tdXRleF90IGdBbGxvY2F0aW9uc011dGV4ID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKK3N0YXRpYyBIYXNoVGFibGUgZ0hhc2hUYWJsZTsKKworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIG91dHB1dCBmdWNudGlvbnMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3N0YXRpYyBpbnQgaGFzaF9lbnRyeV9jb21wYXJlKGNvbnN0IHZvaWQqIGFyZzEsIGNvbnN0IHZvaWQqIGFyZzIpCit7CisgICAgSGFzaEVudHJ5KiBlMSA9ICooSGFzaEVudHJ5KiopYXJnMTsKKyAgICBIYXNoRW50cnkqIGUyID0gKihIYXNoRW50cnkqKilhcmcyOworCisgICAgc2l6ZV90IG5iQWxsb2MxID0gZTEtPmFsbG9jYXRpb25zOworICAgIHNpemVfdCBuYkFsbG9jMiA9IGUyLT5hbGxvY2F0aW9uczsKKyAgICBzaXplX3Qgc2l6ZTEgPSBlMS0+c2l6ZSAmIH5TSVpFX0ZMQUdfTUFTSzsKKyAgICBzaXplX3Qgc2l6ZTIgPSBlMi0+c2l6ZSAmIH5TSVpFX0ZMQUdfTUFTSzsKKyAgICBzaXplX3QgYWxsb2MxID0gbmJBbGxvYzEgKiBzaXplMTsKKyAgICBzaXplX3QgYWxsb2MyID0gbmJBbGxvYzIgKiBzaXplMjsKKworICAgIC8vIHNvcnQgaW4gZGVzY2VuZGluZyBvcmRlciBieToKKyAgICAvLyAxKSB0b3RhbCBzaXplCisgICAgLy8gMikgbnVtYmVyIG9mIGFsbG9jYXRpb25zCisgICAgLy8KKyAgICAvLyBUaGlzIGlzIHVzZWQgZm9yIHNvcnRpbmcsIG5vdCBkZXRlcm1pbmF0aW9uIG9mIGVxdWFsaXR5LCBzbyB3ZSBkb24ndAorICAgIC8vIG5lZWQgdG8gY29tcGFyZSB0aGUgYml0IGZsYWdzLgorICAgIGludCByZXN1bHQ7CisgICAgaWYgKGFsbG9jMSA+IGFsbG9jMikgeworICAgICAgICByZXN1bHQgPSAtMTsKKyAgICB9IGVsc2UgaWYgKGFsbG9jMSA8IGFsbG9jMikgeworICAgICAgICByZXN1bHQgPSAxOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChuYkFsbG9jMSA+IG5iQWxsb2MyKSB7CisgICAgICAgICAgICByZXN1bHQgPSAtMTsKKyAgICAgICAgfSBlbHNlIGlmIChuYkFsbG9jMSA8IG5iQWxsb2MyKSB7CisgICAgICAgICAgICByZXN1bHQgPSAxOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmVzdWx0ID0gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvKgorICogUmV0cmlldmUgbmF0aXZlIGhlYXAgaW5mb3JtYXRpb24uCisgKgorICogIippbmZvIiBpcyBzZXQgdG8gYSBidWZmZXIgd2UgYWxsb2NhdGUKKyAqICIqb3ZlcmFsbFNpemUiIGlzIHNldCB0byB0aGUgc2l6ZSBvZiB0aGUgImluZm8iIGJ1ZmZlcgorICogIippbmZvU2l6ZSIgaXMgc2V0IHRvIHRoZSBzaXplIG9mIGEgc2luZ2xlIGVudHJ5CisgKiAiKnRvdGFsTWVtb3J5IiBpcyBzZXQgdG8gdGhlIHN1bSBvZiBhbGwgYWxsb2NhdGlvbnMgd2UncmUgdHJhY2tpbmc7IGRvZXMKKyAqICAgbm90IGluY2x1ZGUgaGVhcCBvdmVyaGVhZAorICogIipiYWNrdHJhY2VTaXplIiBpcyBzZXQgdG8gdGhlIG1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIGJhY2sgdHJhY2UKKyAqLwordm9pZCBnZXRfbWFsbG9jX2xlYWtfaW5mbyh1aW50OF90KiogaW5mbywgc2l6ZV90KiBvdmVyYWxsU2l6ZSwKKyAgICAgICAgc2l6ZV90KiBpbmZvU2l6ZSwgc2l6ZV90KiB0b3RhbE1lbW9yeSwgc2l6ZV90KiBiYWNrdHJhY2VTaXplKQoreworICAgIC8vIGRvbid0IGRvIGFueXRoaW5nIGlmIHdlIGhhdmUgaW52YWxpZCBhcmd1bWVudHMKKyAgICBpZiAoaW5mbyA9PSBOVUxMIHx8IG92ZXJhbGxTaXplID09IE5VTEwgfHwgaW5mb1NpemUgPT0gTlVMTCB8fAorICAgICAgICAgICAgdG90YWxNZW1vcnkgPT0gTlVMTCB8fCBiYWNrdHJhY2VTaXplID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmZ0FsbG9jYXRpb25zTXV0ZXgpOworCisgICAgaWYgKGdIYXNoVGFibGUuY291bnQgPT0gMCkgeworICAgICAgICAqaW5mbyA9IE5VTEw7CisgICAgICAgICpvdmVyYWxsU2l6ZSA9IDA7CisgICAgICAgICppbmZvU2l6ZSA9IDA7CisgICAgICAgICp0b3RhbE1lbW9yeSA9IDA7CisgICAgICAgICpiYWNrdHJhY2VTaXplID0gMDsKKyAgICAgICAgZ290byBkb25lOworICAgIH0KKyAgICAKKyAgICB2b2lkKiogbGlzdCA9ICh2b2lkKiopZGxtYWxsb2Moc2l6ZW9mKHZvaWQqKSAqIGdIYXNoVGFibGUuY291bnQpOworCisgICAgLy8gZGVidWdfbG9nKCIqKioqKlxuZ0hhc2hUYWJsZS5jb3VudCA9ICVkXG4iLCBnSGFzaFRhYmxlLmNvdW50KTsKKyAgICAvLyBkZWJ1Z19sb2coImxpc3QgPSAlcFxuIiwgbGlzdCk7CisKKyAgICAvLyBnZXQgdGhlIGVudHJpZXMgaW50byBhbiBhcnJheSB0byBiZSBzb3J0ZWQKKyAgICBpbnQgaW5kZXggPSAwOworICAgIGludCBpOworICAgIGZvciAoaSA9IDAgOyBpIDwgSEFTSFRBQkxFX1NJWkUgOyBpKyspIHsKKyAgICAgICAgSGFzaEVudHJ5KiBlbnRyeSA9IGdIYXNoVGFibGUuc2xvdHNbaV07CisgICAgICAgIHdoaWxlIChlbnRyeSAhPSBOVUxMKSB7CisgICAgICAgICAgICBsaXN0W2luZGV4XSA9IGVudHJ5OworICAgICAgICAgICAgKnRvdGFsTWVtb3J5ID0gKnRvdGFsTWVtb3J5ICsKKyAgICAgICAgICAgICAgICAoKGVudHJ5LT5zaXplICYgflNJWkVfRkxBR19NQVNLKSAqIGVudHJ5LT5hbGxvY2F0aW9ucyk7CisgICAgICAgICAgICBpbmRleCsrOworICAgICAgICAgICAgZW50cnkgPSBlbnRyeS0+bmV4dDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIGRlYnVnX2xvZygic29ydGVkIGxpc3QhXG4iKTsKKyAgICAvLyBYWFg6IHRoZSBwcm90b2NvbCBkb2Vzbid0IGFsbG93IHZhcmlhYmxlIHNpemUgZm9yIHRoZSBzdGFjayB0cmFjZSAoeWV0KQorICAgICppbmZvU2l6ZSA9IChzaXplb2Yoc2l6ZV90KSAqIDIpICsgKHNpemVvZihpbnRwdHJfdCkgKiBCQUNLVFJBQ0VfU0laRSk7CisgICAgKm92ZXJhbGxTaXplID0gKmluZm9TaXplICogZ0hhc2hUYWJsZS5jb3VudDsKKyAgICAqYmFja3RyYWNlU2l6ZSA9IEJBQ0tUUkFDRV9TSVpFOworCisgICAgLy8gZGVidWdfbG9nKCJpbmZvU2l6ZSA9IDB4JXggb3ZlcmFsbCA9IDB4JXhcbiIsICppbmZvU2l6ZSwgKm92ZXJhbGxTaXplKTsKKyAgICAvLyBub3cgZ2V0IEEgYnl0ZSBhcnJheSBiaWcgZW5vdWdoIGZvciB0aGlzCisgICAgKmluZm8gPSAodWludDhfdCopZGxtYWxsb2MoKm92ZXJhbGxTaXplKTsKKworICAgIC8vIGRlYnVnX2xvZygiaW5mbyA9ICVwXG4iLCBpbmZvKTsKKyAgICBpZiAoKmluZm8gPT0gTlVMTCkgeworICAgICAgICAqb3ZlcmFsbFNpemUgPSAwOworICAgICAgICBnb3RvIGRvbmU7CisgICAgfQorCisgICAgLy8gZGVidWdfbG9nKCJzb3J0aW5nIGxpc3QuLi5cbiIpOworICAgIHFzb3J0KCh2b2lkKilsaXN0LCBnSGFzaFRhYmxlLmNvdW50LCBzaXplb2Yodm9pZCopLCBoYXNoX2VudHJ5X2NvbXBhcmUpOworCisgICAgdWludDhfdCogaGVhZCA9ICppbmZvOworICAgIGNvbnN0IGludCBjb3VudCA9IGdIYXNoVGFibGUuY291bnQ7CisgICAgZm9yIChpID0gMCA7IGkgPCBjb3VudCA7IGkrKykgeworICAgICAgICBIYXNoRW50cnkqIGVudHJ5ID0gbGlzdFtpXTsKKyAgICAgICAgc2l6ZV90IGVudHJ5U2l6ZSA9IChzaXplb2Yoc2l6ZV90KSAqIDIpICsgKHNpemVvZihpbnRwdHJfdCkgKiBlbnRyeS0+bnVtRW50cmllcyk7CisgICAgICAgIGlmIChlbnRyeVNpemUgPCAqaW5mb1NpemUpIHsKKyAgICAgICAgICAgIC8qIHdlJ3JlIHdyaXRpbmcgbGVzcyB0aGFuIGEgZnVsbCBlbnRyeSwgY2xlYXIgb3V0IHRoZSByZXN0ICovCisgICAgICAgICAgICAvKiBUT0RPOiBvbmx5IGNsZWFyIG91dCB0aGUgcGFydCB3ZSdyZSBub3Qgb3ZlcndyaXRpbmc/ICovCisgICAgICAgICAgICBtZW1zZXQoaGVhZCwgMCwgKmluZm9TaXplKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qIG1ha2Ugc3VyZSB0aGUgYW1vdW50IHdlJ3JlIGNvcHlpbmcgZG9lc24ndCBleGNlZWQgdGhlIGxpbWl0ICovCisgICAgICAgICAgICBlbnRyeVNpemUgPSAqaW5mb1NpemU7CisgICAgICAgIH0KKyAgICAgICAgbWVtY3B5KGhlYWQsICYoZW50cnktPnNpemUpLCBlbnRyeVNpemUpOworICAgICAgICBoZWFkICs9ICppbmZvU2l6ZTsKKyAgICB9CisKKyAgICBkbGZyZWUobGlzdCk7CisKK2RvbmU6CisgICAgLy8gZGVidWdfbG9nKCIrKysrKyBkb25lIVxuIik7CisgICAgcHRocmVhZF9tdXRleF91bmxvY2soJmdBbGxvY2F0aW9uc011dGV4KTsKK30KKwordm9pZCBmcmVlX21hbGxvY19sZWFrX2luZm8odWludDhfdCogaW5mbykKK3sKKyAgICBkbGZyZWUoaW5mbyk7Cit9CisKK3N0cnVjdCBtYWxsaW5mbyBtYWxsaW5mbygpCit7CisgICAgcmV0dXJuIGRsbWFsbGluZm8oKTsKK30KKwordm9pZCogdmFsbG9jKHNpemVfdCBieXRlcykgeworICAgIC8qIGFzc3VtZSBwYWdlIHNpemUgb2YgNDA5NiBieXRlcyAqLworICAgIHJldHVybiBtZW1hbGlnbiggZ2V0cGFnZXNpemUoKSwgYnl0ZXMgKTsKK30KKworCisvKgorICogQ29kZSBndWFyZGVkIGJ5IE1BTExPQ19MRUFLX0NIRUNLIGlzIG9ubHkgbmVlZGVkIHdoZW4gbWFsbG9jIGNoZWNrIGlzCisgKiBlbmFibGVkLiBDdXJyZW50bHkgd2UgZXhjbHVkZSB0aGVtIGluIGxpYmMuc28sIGFuZCBvbmx5IGluY2x1ZGUgdGhlbSBpbgorICogbGliY19kZWJ1Zy5zby4KKyAqLworI2lmZGVmIE1BTExPQ19MRUFLX0NIRUNLCisjZGVmaW5lIE1BTExPQ19BTElHTk1FTlQgICAgOAorI2RlZmluZSBHVUFSRCAgICAgICAgICAgICAgIDB4NDgxNTE2NDIKKworI2RlZmluZSBERUJVRyAgICAgICAgICAgICAgIDAKKworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIFN0cnVjdHVyZXMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cit0eXBlZGVmIHN0cnVjdCBBbGxvY2F0aW9uRW50cnkgQWxsb2NhdGlvbkVudHJ5Oworc3RydWN0IEFsbG9jYXRpb25FbnRyeSB7CisgICAgSGFzaEVudHJ5KiBlbnRyeTsKKyAgICB1aW50MzJfdCBndWFyZDsKK307CisKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBsb2cgZnVudGlvbnMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyNkZWZpbmUgZGVidWdfbG9nKGZvcm1hdCwgLi4uKSAgXAorICAgIF9fbGliY19hbmRyb2lkX2xvZ19wcmludChBTkRST0lEX0xPR19ERUJVRywgIm1hbGxvY19sZWFrIiwgKGZvcm1hdCksICMjX19WQV9BUkdTX18gKQorCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gSGFzaCBUYWJsZSBmdW5jdGlvbnMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitzdGF0aWMgdWludDMyX3QgZ2V0X2hhc2goaW50cHRyX3QqIGJhY2t0cmFjZSwgc2l6ZV90IG51bUVudHJpZXMpCit7CisgICAgaWYgKGJhY2t0cmFjZSA9PSBOVUxMKSByZXR1cm4gMDsKKworICAgIGludCBoYXNoID0gMDsKKyAgICBzaXplX3QgaTsKKyAgICBmb3IgKGkgPSAwIDsgaSA8IG51bUVudHJpZXMgOyBpKyspIHsKKyAgICAgICAgaGFzaCA9IChoYXNoICogMzMpICsgKGJhY2t0cmFjZVtpXSA+PiAyKTsKKyAgICB9CisKKyAgICByZXR1cm4gaGFzaDsKK30KKworc3RhdGljIEhhc2hFbnRyeSogZmluZF9lbnRyeShIYXNoVGFibGUqIHRhYmxlLCBpbnQgc2xvdCwKKyAgICAgICAgaW50cHRyX3QqIGJhY2t0cmFjZSwgc2l6ZV90IG51bUVudHJpZXMsIHNpemVfdCBzaXplKQoreworICAgIEhhc2hFbnRyeSogZW50cnkgPSB0YWJsZS0+c2xvdHNbc2xvdF07CisgICAgd2hpbGUgKGVudHJ5ICE9IE5VTEwpIHsKKyAgICAgICAgLy9kZWJ1Z19sb2coImJhY2t0cmFjZTogJXAsIGVudHJ5OiAlcCBlbnRyeS0+YmFja3RyYWNlOiAlcFxuIiwKKyAgICAgICAgLy8gICAgICAgIGJhY2t0cmFjZSwgZW50cnksIChlbnRyeSAhPSBOVUxMKSA/IGVudHJ5LT5iYWNrdHJhY2UgOiBOVUxMKTsKKyAgICAgICAgLyoKKyAgICAgICAgICogU2VlIGlmIHRoZSBlbnRyeSBtYXRjaGVzIGV4YWN0bHkuICBXZSBjb21wYXJlIHRoZSAic2l6ZSIgZmllbGQsCisgICAgICAgICAqIGluY2x1ZGluZyB0aGUgZmxhZyBiaXRzLgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKGVudHJ5LT5zaXplID09IHNpemUgJiYgZW50cnktPm51bUVudHJpZXMgPT0gbnVtRW50cmllcyAmJgorICAgICAgICAgICAgICAgICFtZW1jbXAoYmFja3RyYWNlLCBlbnRyeS0+YmFja3RyYWNlLCBudW1FbnRyaWVzICogc2l6ZW9mKGludHB0cl90KSkpIHsKKyAgICAgICAgICAgIHJldHVybiBlbnRyeTsKKyAgICAgICAgfQorCisgICAgICAgIGVudHJ5ID0gZW50cnktPm5leHQ7CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBIYXNoRW50cnkqIHJlY29yZF9iYWNrdHJhY2UoaW50cHRyX3QqIGJhY2t0cmFjZSwgc2l6ZV90IG51bUVudHJpZXMsIHNpemVfdCBzaXplKQoreworICAgIHNpemVfdCBoYXNoID0gZ2V0X2hhc2goYmFja3RyYWNlLCBudW1FbnRyaWVzKTsKKyAgICBzaXplX3Qgc2xvdCA9IGhhc2ggJSBIQVNIVEFCTEVfU0laRTsKKworICAgIGlmIChzaXplICYgU0laRV9GTEFHX01BU0spIHsKKyAgICAgICAgZGVidWdfbG9nKCJtYWxsb2NfZGVidWc6IGFsbG9jYXRpb24gJXp4IGV4Y2VlZHMgYml0IHdpZHRoXG4iLCBzaXplKTsKKyAgICAgICAgYWJvcnQoKTsKKyAgICB9CisKKyAgICBpZiAoZ01hbGxvY0xlYWtaeWdvdGVDaGlsZCkKKyAgICAgICAgc2l6ZSB8PSBTSVpFX0ZMQUdfWllHT1RFX0NISUxEOworCisgICAgSGFzaEVudHJ5KiBlbnRyeSA9IGZpbmRfZW50cnkoJmdIYXNoVGFibGUsIHNsb3QsIGJhY2t0cmFjZSwgbnVtRW50cmllcywgc2l6ZSk7CisKKyAgICBpZiAoZW50cnkgIT0gTlVMTCkgeworICAgICAgICBlbnRyeS0+YWxsb2NhdGlvbnMrKzsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBjcmVhdGUgYSBuZXcgZW50cnkKKyAgICAgICAgZW50cnkgPSAoSGFzaEVudHJ5KilkbG1hbGxvYyhzaXplb2YoSGFzaEVudHJ5KSArIG51bUVudHJpZXMqc2l6ZW9mKGludHB0cl90KSk7CisgICAgICAgIGVudHJ5LT5hbGxvY2F0aW9ucyA9IDE7CisgICAgICAgIGVudHJ5LT5zbG90ID0gc2xvdDsKKyAgICAgICAgZW50cnktPnByZXYgPSBOVUxMOworICAgICAgICBlbnRyeS0+bmV4dCA9IGdIYXNoVGFibGUuc2xvdHNbc2xvdF07CisgICAgICAgIGVudHJ5LT5udW1FbnRyaWVzID0gbnVtRW50cmllczsKKyAgICAgICAgZW50cnktPnNpemUgPSBzaXplOworCisgICAgICAgIG1lbWNweShlbnRyeS0+YmFja3RyYWNlLCBiYWNrdHJhY2UsIG51bUVudHJpZXMgKiBzaXplb2YoaW50cHRyX3QpKTsKKworICAgICAgICBnSGFzaFRhYmxlLnNsb3RzW3Nsb3RdID0gZW50cnk7CisKKyAgICAgICAgaWYgKGVudHJ5LT5uZXh0ICE9IE5VTEwpIHsKKyAgICAgICAgICAgIGVudHJ5LT5uZXh0LT5wcmV2ID0gZW50cnk7CisgICAgICAgIH0KKworICAgICAgICAvLyB3ZSBqdXN0IGFkZGVkIGFuIGVudHJ5LCBpbmNyZWFzZSB0aGUgc2l6ZSBvZiB0aGUgaGFzaHRhYmxlCisgICAgICAgIGdIYXNoVGFibGUuY291bnQrKzsKKyAgICB9CisKKyAgICByZXR1cm4gZW50cnk7Cit9CisKK3N0YXRpYyBpbnQgaXNfdmFsaWRfZW50cnkoSGFzaEVudHJ5KiBlbnRyeSkKK3sKKyAgICBpZiAoZW50cnkgIT0gTlVMTCkgeworICAgICAgICBpbnQgaTsKKyAgICAgICAgZm9yIChpID0gMCA7IGkgPCBIQVNIVEFCTEVfU0laRSA7IGkrKykgeworICAgICAgICAgICAgSGFzaEVudHJ5KiBlMSA9IGdIYXNoVGFibGUuc2xvdHNbaV07CisKKyAgICAgICAgICAgIHdoaWxlIChlMSAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgaWYgKGUxID09IGVudHJ5KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGUxID0gZTEtPm5leHQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcmVtb3ZlX2VudHJ5KEhhc2hFbnRyeSogZW50cnkpCit7CisgICAgSGFzaEVudHJ5KiBwcmV2ID0gZW50cnktPnByZXY7CisgICAgSGFzaEVudHJ5KiBuZXh0ID0gZW50cnktPm5leHQ7CisKKyAgICBpZiAocHJldiAhPSBOVUxMKSBlbnRyeS0+cHJldi0+bmV4dCA9IG5leHQ7CisgICAgaWYgKG5leHQgIT0gTlVMTCkgZW50cnktPm5leHQtPnByZXYgPSBwcmV2OworCisgICAgaWYgKHByZXYgPT0gTlVMTCkgeworICAgICAgICAvLyB3ZSBhcmUgdGhlIGhlYWQgb2YgdGhlIGxpc3QuIHNldCB0aGUgaGVhZCB0byBiZSBuZXh0CisgICAgICAgIGdIYXNoVGFibGUuc2xvdHNbZW50cnktPnNsb3RdID0gZW50cnktPm5leHQ7CisgICAgfQorCisgICAgLy8gd2UganVzdCByZW1vdmVkIGFuZCBlbnRyeSwgZGVjcmVhc2UgdGhlIHNpemUgb2YgdGhlIGhhc2h0YWJsZQorICAgIGdIYXNoVGFibGUuY291bnQtLTsKK30KKworCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gc3RhY2sgdHJhY2UgZnVuY3Rpb25zCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCit0eXBlZGVmIHN0cnVjdAoreworICAgIHNpemVfdCBjb3VudDsKKyAgICBpbnRwdHJfdCogYWRkcnM7Cit9IHN0YWNrX2NyYXdsX3N0YXRlX3Q7CisKKworLyogZGVwZW5kcyBob3cgdGhlIHN5c3RlbSBpbmNsdWRlcyBkZWZpbmUgdGhpcyAqLworI2lmZGVmIEhBVkVfVU5XSU5EX0NPTlRFWFRfU1RSVUNUCit0eXBlZGVmIHN0cnVjdCBfVW53aW5kX0NvbnRleHQgX191bndpbmRfY29udGV4dDsKKyNlbHNlCit0eXBlZGVmIF9VbndpbmRfQ29udGV4dCBfX3Vud2luZF9jb250ZXh0OworI2VuZGlmCisKK3N0YXRpYyBfVW53aW5kX1JlYXNvbl9Db2RlIHRyYWNlX2Z1bmN0aW9uKF9fdW53aW5kX2NvbnRleHQgKmNvbnRleHQsIHZvaWQgKmFyZykKK3sKKyAgICBzdGFja19jcmF3bF9zdGF0ZV90KiBzdGF0ZSA9IChzdGFja19jcmF3bF9zdGF0ZV90Kilhcmc7CisgICAgaWYgKHN0YXRlLT5jb3VudCkgeworICAgICAgICBpbnRwdHJfdCBpcCA9IChpbnRwdHJfdClfVW53aW5kX0dldElQKGNvbnRleHQpOworICAgICAgICBpZiAoaXApIHsKKyAgICAgICAgICAgIHN0YXRlLT5hZGRyc1swXSA9IGlwOyAKKyAgICAgICAgICAgIHN0YXRlLT5hZGRycysrOworICAgICAgICAgICAgc3RhdGUtPmNvdW50LS07CisgICAgICAgICAgICByZXR1cm4gX1VSQ19OT19SRUFTT047CisgICAgICAgIH0KKyAgICB9CisgICAgLyogCisgICAgICogSWYgd2UgcnVuIG91dCBvZiBzcGFjZSB0byByZWNvcmQgdGhlIGFkZHJlc3Mgb3IgMCBoYXMgYmVlbiBzZWVuLCBzdG9wCisgICAgICogdW53aW5kaW5nIHRoZSBzdGFjay4KKyAgICAgKi8KKyAgICByZXR1cm4gX1VSQ19FTkRfT0ZfU1RBQ0s7Cit9CisKK3N0YXRpYyBpbmxpbmUKK2ludCBnZXRfYmFja3RyYWNlKGludHB0cl90KiBhZGRycywgc2l6ZV90IG1heF9lbnRyaWVzKQoreworICAgIHN0YWNrX2NyYXdsX3N0YXRlX3Qgc3RhdGU7CisgICAgc3RhdGUuY291bnQgPSBtYXhfZW50cmllczsKKyAgICBzdGF0ZS5hZGRycyA9IChpbnRwdHJfdCopYWRkcnM7CisgICAgX1Vud2luZF9CYWNrdHJhY2UodHJhY2VfZnVuY3Rpb24sICh2b2lkKikmc3RhdGUpOworICAgIHJldHVybiBtYXhfZW50cmllcyAtIHN0YXRlLmNvdW50OworfQorCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gbWFsbG9jIGxlYWsgZnVuY3Rpb24gZGlzcGF0Y2hlcgorLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworc3RhdGljIHZvaWQqIGxlYWtfbWFsbG9jKHNpemVfdCBieXRlcyk7CitzdGF0aWMgdm9pZCAgbGVha19mcmVlKHZvaWQqIG1lbSk7CitzdGF0aWMgdm9pZCogbGVha19jYWxsb2Moc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBlbGVtX3NpemUpOworc3RhdGljIHZvaWQqIGxlYWtfcmVhbGxvYyh2b2lkKiBvbGRNZW0sIHNpemVfdCBieXRlcyk7CitzdGF0aWMgdm9pZCogbGVha19tZW1hbGlnbihzaXplX3QgYWxpZ25tZW50LCBzaXplX3QgYnl0ZXMpOworCitzdGF0aWMgdm9pZCogZmlsbF9tYWxsb2Moc2l6ZV90IGJ5dGVzKTsKK3N0YXRpYyB2b2lkICBmaWxsX2ZyZWUodm9pZCogbWVtKTsKK3N0YXRpYyB2b2lkKiBmaWxsX3JlYWxsb2Modm9pZCogb2xkTWVtLCBzaXplX3QgYnl0ZXMpOworc3RhdGljIHZvaWQqIGZpbGxfbWVtYWxpZ24oc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IGJ5dGVzKTsKKworc3RhdGljIHZvaWQqIGNoa19tYWxsb2Moc2l6ZV90IGJ5dGVzKTsKK3N0YXRpYyB2b2lkICBjaGtfZnJlZSh2b2lkKiBtZW0pOworc3RhdGljIHZvaWQqIGNoa19jYWxsb2Moc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBlbGVtX3NpemUpOworc3RhdGljIHZvaWQqIGNoa19yZWFsbG9jKHZvaWQqIG9sZE1lbSwgc2l6ZV90IGJ5dGVzKTsKK3N0YXRpYyB2b2lkKiBjaGtfbWVtYWxpZ24oc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IGJ5dGVzKTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIHZvaWQqICgqbWFsbG9jKShzaXplX3QgYnl0ZXMpOworICAgIHZvaWQgICgqZnJlZSkodm9pZCogbWVtKTsKKyAgICB2b2lkKiAoKmNhbGxvYykoc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBlbGVtX3NpemUpOworICAgIHZvaWQqICgqcmVhbGxvYykodm9pZCogb2xkTWVtLCBzaXplX3QgYnl0ZXMpOworICAgIHZvaWQqICgqbWVtYWxpZ24pKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBieXRlcyk7Cit9IE1hbGxvY0RlYnVnOworCitzdGF0aWMgY29uc3QgTWFsbG9jRGVidWcgZ01hbGxvY0VuZ2luZVRhYmxlW10gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgzMikpKSA9Cit7CisgICAgeyBkbG1hbGxvYywgICAgIGRsZnJlZSwgICAgIGRsY2FsbG9jLCAgICAgICBkbHJlYWxsb2MsICAgICBkbG1lbWFsaWduIH0sCisgICAgeyBsZWFrX21hbGxvYywgIGxlYWtfZnJlZSwgIGxlYWtfY2FsbG9jLCAgICBsZWFrX3JlYWxsb2MsICBsZWFrX21lbWFsaWduIH0sCisgICAgeyBmaWxsX21hbGxvYywgIGZpbGxfZnJlZSwgIGRsY2FsbG9jLCAgICAgICBmaWxsX3JlYWxsb2MsICBmaWxsX21lbWFsaWduIH0sCisgICAgeyBjaGtfbWFsbG9jLCAgIGNoa19mcmVlLCAgIGNoa19jYWxsb2MsICAgICBjaGtfcmVhbGxvYywgICBjaGtfbWVtYWxpZ24gfQorfTsKKworZW51bSB7CisgICAgSU5ERVhfTk9STUFMID0gMCwKKyAgICBJTkRFWF9MRUFLX0NIRUNLLAorICAgIElOREVYX01BTExPQ19GSUxMLAorICAgIElOREVYX01BTExPQ19DSEVDSywKK307CisKK3N0YXRpYyBNYWxsb2NEZWJ1ZyBjb25zdCAqIGdNYWxsb2NEaXNwYXRjaCA9ICZnTWFsbG9jRW5naW5lVGFibGVbSU5ERVhfTk9STUFMXTsKK3N0YXRpYyBpbnQgZ01hbGxvY0RlYnVnTGV2ZWw7CitzdGF0aWMgaW50IGdUcmFwT25FcnJvciA9IDE7CisKK3ZvaWQqIG1hbGxvYyhzaXplX3QgYnl0ZXMpIHsKKyAgICByZXR1cm4gZ01hbGxvY0Rpc3BhdGNoLT5tYWxsb2MoYnl0ZXMpOworfQordm9pZCBmcmVlKHZvaWQqIG1lbSkgeworICAgIGdNYWxsb2NEaXNwYXRjaC0+ZnJlZShtZW0pOworfQordm9pZCogY2FsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxlbV9zaXplKSB7CisgICAgcmV0dXJuIGdNYWxsb2NEaXNwYXRjaC0+Y2FsbG9jKG5fZWxlbWVudHMsIGVsZW1fc2l6ZSk7Cit9Cit2b2lkKiByZWFsbG9jKHZvaWQqIG9sZE1lbSwgc2l6ZV90IGJ5dGVzKSB7CisgICAgcmV0dXJuIGdNYWxsb2NEaXNwYXRjaC0+cmVhbGxvYyhvbGRNZW0sIGJ5dGVzKTsKK30KK3ZvaWQqIG1lbWFsaWduKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBieXRlcykgeworICAgIHJldHVybiBnTWFsbG9jRGlzcGF0Y2gtPm1lbWFsaWduKGFsaWdubWVudCwgYnl0ZXMpOworfQorCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gbWFsbG9jIGNoZWNrIGZ1bmN0aW9ucworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworI2RlZmluZSBDSEtfRklMTF9GUkVFICAgICAgICAgICAweGVmCisjZGVmaW5lIENIS19TRU5USU5FTF9WQUxVRSAgICAgIDB4ZWIKKyNkZWZpbmUgQ0hLX1NFTlRJTkVMX0hFQURfU0laRSAgMTYKKyNkZWZpbmUgQ0hLX1NFTlRJTkVMX1RBSUxfU0laRSAgMTYKKyNkZWZpbmUgQ0hLX09WRVJIRUFEX1NJWkUgICAgICAgKCAgIENIS19TRU5USU5FTF9IRUFEX1NJWkUgKyAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSEtfU0VOVElORUxfVEFJTF9TSVpFICsgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHNpemVfdCkgKQorCitzdGF0aWMgdm9pZCBkdW1wX3N0YWNrX3RyYWNlKCkKK3sKKyAgICBpbnRwdHJfdCBhZGRyc1syMF07CisgICAgaW50IGMgPSBnZXRfYmFja3RyYWNlKGFkZHJzLCAyMCk7CisgICAgY2hhciBidWZbMTZdOworICAgIGNoYXIgdG1wWzE2KjIwXTsKKyAgICBpbnQgaTsKKworICAgIHRtcFswXSA9IDA7IC8vIE5lZWQgdG8gaW5pdGlhbGl6ZSB0bXBbMF0gZm9yIHRoZSBmaXJzdCBzdHJjYXQKKyAgICBmb3IgKGk9MCA7IGk8YzsgaSsrKSB7CisgICAgICAgIHNwcmludGYoYnVmLCAiJTJkOiAlMDh4XG4iLCBpLCBhZGRyc1tpXSk7CisgICAgICAgIHN0cmNhdCh0bXAsIGJ1Zik7CisgICAgfQorICAgIF9fbGliY19hbmRyb2lkX2xvZ19wcmludChBTkRST0lEX0xPR19FUlJPUiwgImxpYmMiLCAiY2FsbCBzdGFjazpcbiVzIiwgdG1wKTsKK30KKworc3RhdGljIGludCBpc192YWxpZF9tYWxsb2NfcG9pbnRlcih2b2lkKiBhZGRyKQoreworICAgIHJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBhc3NlcnRfdmFsaWRfbWFsbG9jX3BvaW50ZXIodm9pZCogbWVtKQoreworICAgIGlmIChtZW0gJiYgIWlzX3ZhbGlkX21hbGxvY19wb2ludGVyKG1lbSkpIHsKKyAgICAgICAgcHRocmVhZF9tdXRleF9sb2NrKCZnQWxsb2NhdGlvbnNNdXRleCk7CisgICAgICAgIGdNYWxsb2NEaXNwYXRjaCA9ICZnTWFsbG9jRW5naW5lVGFibGVbSU5ERVhfTk9STUFMXTsKKyAgICAgICAgICAgIF9fbGliY19hbmRyb2lkX2xvZ19wcmludChBTkRST0lEX0xPR19FUlJPUiwgImxpYmMiLAorICAgICAgICAgICAgICAgICAgICAiKioqIE1BTExPQyBDSEVDSzogYnVmZmVyICVwLCBpcyBub3QgYSB2YWxpZCAiCisgICAgICAgICAgICAgICAgICAgICJtYWxsb2MgcG9pbnRlciAoYXJlIHlvdSBtaXhpbmcgdXAgbmV3L2RlbGV0ZSAiCisgICAgICAgICAgICAgICAgICAgICJhbmQgbWFsbG9jL2ZyZWU/KSIsIG1lbSk7CisgICAgICAgICAgICBkdW1wX3N0YWNrX3RyYWNlKCk7CisgICAgICAgICAgICAgICAgaWYgKGdUcmFwT25FcnJvcikgeworICAgICAgICAgICAgICAgICAgICBfX2J1aWx0aW5fdHJhcCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgZ01hbGxvY0Rpc3BhdGNoID0gJmdNYWxsb2NFbmdpbmVUYWJsZVtJTkRFWF9NQUxMT0NfQ0hFQ0tdOworICAgICAgICBwdGhyZWFkX211dGV4X3VubG9jaygmZ0FsbG9jYXRpb25zTXV0ZXgpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgY2hrX291dF9vZl9ib3VuZHNfY2hlY2tfX2xvY2tlZCh2b2lkKiBidWZmZXIsIHNpemVfdCBzaXplKQoreworICAgIGludCBpOworICAgIGNoYXIqIGJ1ZiA9IChjaGFyKilidWZmZXIgLSBDSEtfU0VOVElORUxfSEVBRF9TSVpFOworICAgIGZvciAoaT0wIDsgaTxDSEtfU0VOVElORUxfSEVBRF9TSVpFIDsgaSsrKSB7CisgICAgICAgIGlmIChidWZbaV0gIT0gQ0hLX1NFTlRJTkVMX1ZBTFVFKSB7CisgICAgICAgICAgICBnTWFsbG9jRGlzcGF0Y2ggPSAmZ01hbGxvY0VuZ2luZVRhYmxlW0lOREVYX05PUk1BTF07CisgICAgICAgICAgICBfX2xpYmNfYW5kcm9pZF9sb2dfcHJpbnQoQU5EUk9JRF9MT0dfRVJST1IsICJsaWJjIiwKKyAgICAgICAgICAgICAgICAgICAgIioqKiBNQUxMT0MgQ0hFQ0s6IGJ1ZmZlciAlcCwgc2l6ZT0lbHUsICIKKyAgICAgICAgICAgICAgICAgICAgImNvcnJ1cHRlZCAlZCBieXRlcyBiZWZvcmUgYWxsb2NhdGlvbiIsCisgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgc2l6ZSwgQ0hLX1NFTlRJTkVMX0hFQURfU0laRS1pKTsKKyAgICAgICAgICAgIGR1bXBfc3RhY2tfdHJhY2UoKTsKKyAgICAgICAgICAgIGlmIChnVHJhcE9uRXJyb3IpIHsKKyAgICAgICAgICAgICAgICBfX2J1aWx0aW5fdHJhcCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZ01hbGxvY0Rpc3BhdGNoID0gJmdNYWxsb2NFbmdpbmVUYWJsZVtJTkRFWF9NQUxMT0NfQ0hFQ0tdOworICAgICAgICB9CisgICAgfQorICAgIGJ1ZiA9IChjaGFyKilidWZmZXIgKyBzaXplOworICAgIGZvciAoaT1DSEtfU0VOVElORUxfVEFJTF9TSVpFLTEgOyBpPj0wIDsgaS0tKSB7CisgICAgICAgIGlmIChidWZbaV0gIT0gQ0hLX1NFTlRJTkVMX1ZBTFVFKSB7CisgICAgICAgICAgICBnTWFsbG9jRGlzcGF0Y2ggPSAmZ01hbGxvY0VuZ2luZVRhYmxlW0lOREVYX05PUk1BTF07CisgICAgICAgICAgICBfX2xpYmNfYW5kcm9pZF9sb2dfcHJpbnQoQU5EUk9JRF9MT0dfRVJST1IsICJsaWJjIiwKKyAgICAgICAgICAgICAgICAgICAgIioqKiBNQUxMT0MgQ0hFQ0s6IGJ1ZmZlciAlcCwgc2l6ZT0lbHUsICIKKyAgICAgICAgICAgICAgICAgICAgImNvcnJ1cHRlZCAlZCBieXRlcyBhZnRlciBhbGxvY2F0aW9uIiwKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVyLCBzaXplLCBpKzEpOworICAgICAgICAgICAgZHVtcF9zdGFja190cmFjZSgpOworICAgICAgICAgICAgaWYgKGdUcmFwT25FcnJvcikgeworICAgICAgICAgICAgICAgIF9fYnVpbHRpbl90cmFwKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBnTWFsbG9jRGlzcGF0Y2ggPSAmZ01hbGxvY0VuZ2luZVRhYmxlW0lOREVYX01BTExPQ19DSEVDS107CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQqIGNoa19tYWxsb2Moc2l6ZV90IGJ5dGVzKQoreworICAgIGNoYXIqIGJ1ZmZlciA9IChjaGFyKilkbG1hbGxvYyhieXRlcyArIENIS19PVkVSSEVBRF9TSVpFKTsKKyAgICBpZiAoYnVmZmVyKSB7CisgICAgICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmZ0FsbG9jYXRpb25zTXV0ZXgpOworICAgICAgICAgICAgbWVtc2V0KGJ1ZmZlciwgQ0hLX1NFTlRJTkVMX1ZBTFVFLCBieXRlcyArIENIS19PVkVSSEVBRF9TSVpFKTsKKyAgICAgICAgICAgIHNpemVfdCBvZmZzZXQgPSBkbG1hbGxvY191c2FibGVfc2l6ZShidWZmZXIpIC0gc2l6ZW9mKHNpemVfdCk7CisgICAgICAgICAgICAqKHNpemVfdCAqKShidWZmZXIgKyBvZmZzZXQpID0gYnl0ZXM7CisgICAgICAgICAgICBidWZmZXIgKz0gQ0hLX1NFTlRJTkVMX0hFQURfU0laRTsKKyAgICAgICAgcHRocmVhZF9tdXRleF91bmxvY2soJmdBbGxvY2F0aW9uc011dGV4KTsKKyAgICB9CisgICAgcmV0dXJuIGJ1ZmZlcjsKK30KKwordm9pZCAgY2hrX2ZyZWUodm9pZCogbWVtKQoreworICAgIGFzc2VydF92YWxpZF9tYWxsb2NfcG9pbnRlcihtZW0pOworICAgIGlmIChtZW0pIHsKKyAgICAgICAgcHRocmVhZF9tdXRleF9sb2NrKCZnQWxsb2NhdGlvbnNNdXRleCk7CisgICAgICAgICAgICBjaGFyKiBidWZmZXIgPSAoY2hhciopbWVtIC0gQ0hLX1NFTlRJTkVMX0hFQURfU0laRTsKKyAgICAgICAgICAgIHNpemVfdCBvZmZzZXQgPSBkbG1hbGxvY191c2FibGVfc2l6ZShidWZmZXIpIC0gc2l6ZW9mKHNpemVfdCk7CisgICAgICAgICAgICBzaXplX3QgYnl0ZXMgPSAqKHNpemVfdCAqKShidWZmZXIgKyBvZmZzZXQpOworICAgICAgICAgICAgY2hrX291dF9vZl9ib3VuZHNfY2hlY2tfX2xvY2tlZChtZW0sIGJ5dGVzKTsKKyAgICAgICAgcHRocmVhZF9tdXRleF91bmxvY2soJmdBbGxvY2F0aW9uc011dGV4KTsKKyAgICAgICAgbWVtc2V0KGJ1ZmZlciwgQ0hLX0ZJTExfRlJFRSwgYnl0ZXMpOworICAgICAgICBkbGZyZWUoYnVmZmVyKTsKKyAgICB9Cit9CisKK3ZvaWQqIGNoa19jYWxsb2Moc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBlbGVtX3NpemUpCit7CisgICAgc2l6ZV90ICBzaXplOworICAgIHZvaWQqICAgcHRyOworCisgICAgLyogRmFpbCBvbiBvdmVyZmxvdyAtIGp1c3QgdG8gYmUgc2FmZSBldmVuIHRob3VnaCB0aGlzIGNvZGUgcnVucyBvbmx5CisgICAgICogd2l0aGluIHRoZSBkZWJ1Z2dpbmcgQyBsaWJyYXJ5LCBub3QgdGhlIHByb2R1Y3Rpb24gb25lICovCisgICAgaWYgKG5fZWxlbWVudHMgJiYgTUFYX1NJWkVfVCAvIG5fZWxlbWVudHMgPCBlbGVtX3NpemUpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHNpemUgPSBuX2VsZW1lbnRzICogZWxlbV9zaXplOworICAgIHB0ciAgPSBjaGtfbWFsbG9jKHNpemUpOworICAgIGlmIChwdHIgIT0gTlVMTCkgeworICAgICAgICBtZW1zZXQocHRyLCAwLCBzaXplKTsKKyAgICB9CisgICAgcmV0dXJuIHB0cjsKK30KKwordm9pZCogY2hrX3JlYWxsb2Modm9pZCogbWVtLCBzaXplX3QgYnl0ZXMpCit7CisgICAgYXNzZXJ0X3ZhbGlkX21hbGxvY19wb2ludGVyKG1lbSk7CisgICAgY2hhciogbmV3X2J1ZmZlciA9IGNoa19tYWxsb2MoYnl0ZXMpOworICAgIGlmIChtZW0gPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gbmV3X2J1ZmZlcjsKKyAgICB9CisKKyAgICBwdGhyZWFkX211dGV4X2xvY2soJmdBbGxvY2F0aW9uc011dGV4KTsKKyAgICAgICAgY2hhciogYnVmZmVyID0gKGNoYXIqKW1lbSAtIENIS19TRU5USU5FTF9IRUFEX1NJWkU7CisgICAgICAgIHNpemVfdCBvZmZzZXQgPSBkbG1hbGxvY191c2FibGVfc2l6ZShidWZmZXIpIC0gc2l6ZW9mKHNpemVfdCk7CisgICAgICAgIHNpemVfdCBvbGRfYnl0ZXMgPSAqKHNpemVfdCAqKShidWZmZXIgKyBvZmZzZXQpOworICAgICAgICBjaGtfb3V0X29mX2JvdW5kc19jaGVja19fbG9ja2VkKG1lbSwgb2xkX2J5dGVzKTsKKyAgICBwdGhyZWFkX211dGV4X3VubG9jaygmZ0FsbG9jYXRpb25zTXV0ZXgpOworCisgICAgaWYgKG5ld19idWZmZXIpIHsKKyAgICAgICAgc2l6ZV90IHNpemUgPSAoYnl0ZXMgPCBvbGRfYnl0ZXMpPyhieXRlcyk6KG9sZF9ieXRlcyk7CisgICAgICAgIG1lbWNweShuZXdfYnVmZmVyLCBtZW0sIHNpemUpOworICAgICAgICBjaGtfZnJlZShtZW0pOworICAgIH0KKworICAgIHJldHVybiBuZXdfYnVmZmVyOworfQorCit2b2lkKiBjaGtfbWVtYWxpZ24oc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IGJ5dGVzKQoreworICAgIC8vIFhYWDogaXQncyBiZXR0ZXIgdG8gdXNlIG1hbGxvYywgdGhhbiBiZWluZyB3cm9uZworICAgIHJldHVybiBjaGtfbWFsbG9jKGJ5dGVzKTsKK30KKworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIG1hbGxvYyBmaWxsIGZ1bmN0aW9ucworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwordm9pZCogZmlsbF9tYWxsb2Moc2l6ZV90IGJ5dGVzKQoreworICAgIHZvaWQqIGJ1ZmZlciA9IGRsbWFsbG9jKGJ5dGVzKTsKKyAgICBpZiAoYnVmZmVyKSB7CisgICAgICAgIG1lbXNldChidWZmZXIsIENIS19TRU5USU5FTF9WQUxVRSwgYnl0ZXMpOworICAgIH0KKyAgICByZXR1cm4gYnVmZmVyOworfQorCit2b2lkICBmaWxsX2ZyZWUodm9pZCogbWVtKQoreworICAgIHNpemVfdCBieXRlcyA9IGRsbWFsbG9jX3VzYWJsZV9zaXplKG1lbSk7CisgICAgbWVtc2V0KG1lbSwgQ0hLX0ZJTExfRlJFRSwgYnl0ZXMpOworICAgIGRsZnJlZShtZW0pOworfQorCit2b2lkKiBmaWxsX3JlYWxsb2Modm9pZCogbWVtLCBzaXplX3QgYnl0ZXMpCit7CisgICAgdm9pZCogYnVmZmVyID0gZmlsbF9tYWxsb2MoYnl0ZXMpOworICAgIGlmIChtZW0gPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gYnVmZmVyOworICAgIH0KKyAgICBpZiAoYnVmZmVyKSB7CisgICAgICAgIHNpemVfdCBvbGRfc2l6ZSA9IGRsbWFsbG9jX3VzYWJsZV9zaXplKG1lbSk7CisgICAgICAgIHNpemVfdCBzaXplID0gKGJ5dGVzIDwgb2xkX3NpemUpPyhieXRlcyk6KG9sZF9zaXplKTsKKyAgICAgICAgbWVtY3B5KGJ1ZmZlciwgbWVtLCBzaXplKTsKKyAgICAgICAgZmlsbF9mcmVlKG1lbSk7CisgICAgfQorICAgIHJldHVybiBidWZmZXI7Cit9CisKK3ZvaWQqIGZpbGxfbWVtYWxpZ24oc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IGJ5dGVzKQoreworICAgIHZvaWQqIGJ1ZmZlciA9IGRsbWVtYWxpZ24oYWxpZ25tZW50LCBieXRlcyk7CisgICAgaWYgKGJ1ZmZlcikgeworICAgICAgICBtZW1zZXQoYnVmZmVyLCBDSEtfU0VOVElORUxfVkFMVUUsIGJ5dGVzKTsKKyAgICB9CisgICAgcmV0dXJuIGJ1ZmZlcjsKK30KKworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIG1hbGxvYyBsZWFrIGZ1bmN0aW9ucworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworI2RlZmluZSBNRU1BTElHTl9HVUFSRCAgKCh2b2lkKikweEExQTQxNTIwKQorCit2b2lkKiBsZWFrX21hbGxvYyhzaXplX3QgYnl0ZXMpCit7CisgICAgLy8gYWxsb2NhdGUgZW5vdWdoIHNwYWNlIGluZnJvbnQgb2YgdGhlIGFsbG9jYXRpb24gdG8gc3RvcmUgdGhlIHBvaW50ZXIgZm9yCisgICAgLy8gdGhlIGFsbG9jIHN0cnVjdHVyZS4gVGhpcyB3aWxsIG1ha2luZyBmcmVlJ2luZyB0aGUgc3RydWN0ZXIgcmVhbGx5IGZhc3QhCisKKyAgICAvLyAxLiBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGFuZCBpbmNsdWRlIG91ciBoZWFkZXIKKyAgICAvLyAyLiBzZXQgdGhlIGJhc2UgcG9pbnRlciB0byBiZSByaWdodCBhZnRlciBvdXIgaGVhZGVyCisKKyAgICB2b2lkKiBiYXNlID0gZGxtYWxsb2MoYnl0ZXMgKyBzaXplb2YoQWxsb2NhdGlvbkVudHJ5KSk7CisgICAgaWYgKGJhc2UgIT0gTlVMTCkgeworICAgICAgICBwdGhyZWFkX211dGV4X2xvY2soJmdBbGxvY2F0aW9uc011dGV4KTsKKworICAgICAgICAgICAgaW50cHRyX3QgYmFja3RyYWNlW0JBQ0tUUkFDRV9TSVpFXTsKKyAgICAgICAgICAgIHNpemVfdCBudW1FbnRyaWVzID0gZ2V0X2JhY2t0cmFjZShiYWNrdHJhY2UsIEJBQ0tUUkFDRV9TSVpFKTsKKyAgICAKKyAgICAgICAgICAgIEFsbG9jYXRpb25FbnRyeSogaGVhZGVyID0gKEFsbG9jYXRpb25FbnRyeSopYmFzZTsKKyAgICAgICAgICAgIGhlYWRlci0+ZW50cnkgPSByZWNvcmRfYmFja3RyYWNlKGJhY2t0cmFjZSwgbnVtRW50cmllcywgYnl0ZXMpOworICAgICAgICAgICAgaGVhZGVyLT5ndWFyZCA9IEdVQVJEOworICAgIAorICAgICAgICAgICAgLy8gbm93IGluY3JlbWVudCBiYXNlIHRvIHBvaW50IHRvIGFmdGVyIG91ciBoZWFkZXIuCisgICAgICAgICAgICAvLyB0aGlzIHNob3VsZCBqdXN0IHdvcmsgc2luY2Ugb3VyIGhlYWRlciBpcyA4IGJ5dGVzLgorICAgICAgICAgICAgYmFzZSA9IChBbGxvY2F0aW9uRW50cnkqKWJhc2UgKyAxOworCisgICAgICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZnQWxsb2NhdGlvbnNNdXRleCk7CisgICAgfQorCisgICAgcmV0dXJuIGJhc2U7Cit9CisKK3ZvaWQgbGVha19mcmVlKHZvaWQqIG1lbSkKK3sKKyAgICBpZiAobWVtICE9IE5VTEwpIHsKKyAgICAgICAgcHRocmVhZF9tdXRleF9sb2NrKCZnQWxsb2NhdGlvbnNNdXRleCk7CisKKyAgICAgICAgLy8gY2hlY2sgdGhlIGd1YXJkIHRvIG1ha2Ugc3VyZSBpdCBpcyB2YWxpZAorICAgICAgICBBbGxvY2F0aW9uRW50cnkqIGhlYWRlciA9IChBbGxvY2F0aW9uRW50cnkqKW1lbSAtIDE7CisgICAgICAgIAorICAgICAgICBpZiAoaGVhZGVyLT5ndWFyZCAhPSBHVUFSRCkgeworICAgICAgICAgICAgLy8gY291bGQgYmUgYSBtZW1hbGlnbmVkIGJsb2NrCisgICAgICAgICAgICBpZiAoKCh2b2lkKiopbWVtKVstMV0gPT0gTUVNQUxJR05fR1VBUkQpIHsKKyAgICAgICAgICAgICAgICBtZW0gPSAoKHZvaWQqKiltZW0pWy0yXTsKKyAgICAgICAgICAgICAgICBoZWFkZXIgPSAoQWxsb2NhdGlvbkVudHJ5KiltZW0gLSAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoaGVhZGVyLT5ndWFyZCA9PSBHVUFSRCB8fCBpc192YWxpZF9lbnRyeShoZWFkZXItPmVudHJ5KSkgeworICAgICAgICAgICAgLy8gZGVjcmVtZW50IHRoZSBhbGxvY2F0aW9ucworICAgICAgICAgICAgSGFzaEVudHJ5KiBlbnRyeSA9IGhlYWRlci0+ZW50cnk7CisgICAgICAgICAgICBlbnRyeS0+YWxsb2NhdGlvbnMtLTsKKyAgICAgICAgICAgIGlmIChlbnRyeS0+YWxsb2NhdGlvbnMgPD0gMCkgeworICAgICAgICAgICAgICAgIHJlbW92ZV9lbnRyeShlbnRyeSk7CisgICAgICAgICAgICAgICAgZGxmcmVlKGVudHJ5KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gbm93IGZyZWUgdGhlIG1lbW9yeSEKKyAgICAgICAgICAgIGRsZnJlZShoZWFkZXIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGVidWdfbG9nKCJXQVJOSU5HIGJhZCBoZWFkZXIgZ3VhcmQ6ICcweCV4JyEgYW5kIGludmFsaWQgZW50cnk6ICVwXG4iLAorICAgICAgICAgICAgICAgICAgICBoZWFkZXItPmd1YXJkLCBoZWFkZXItPmVudHJ5KTsKKyAgICAgICAgfQorCisgICAgICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZnQWxsb2NhdGlvbnNNdXRleCk7CisgICAgfQorfQorCit2b2lkKiBsZWFrX2NhbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVsZW1fc2l6ZSkKK3sKKyAgICBzaXplX3QgIHNpemU7CisgICAgdm9pZCogICBwdHI7CisKKyAgICAvKiBGYWlsIG9uIG92ZXJmbG93IC0ganVzdCB0byBiZSBzYWZlIGV2ZW4gdGhvdWdoIHRoaXMgY29kZSBydW5zIG9ubHkKKyAgICAgKiB3aXRoaW4gdGhlIGRlYnVnZ2luZyBDIGxpYnJhcnksIG5vdCB0aGUgcHJvZHVjdGlvbiBvbmUgKi8KKyAgICBpZiAobl9lbGVtZW50cyAmJiBNQVhfU0laRV9UIC8gbl9lbGVtZW50cyA8IGVsZW1fc2l6ZSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgc2l6ZSA9IG5fZWxlbWVudHMgKiBlbGVtX3NpemU7CisgICAgcHRyICA9IGxlYWtfbWFsbG9jKHNpemUpOworICAgIGlmIChwdHIgIT0gTlVMTCkgeworICAgICAgICBtZW1zZXQocHRyLCAwLCBzaXplKTsKKyAgICB9CisgICAgcmV0dXJuIHB0cjsKK30KKwordm9pZCogbGVha19yZWFsbG9jKHZvaWQqIG9sZE1lbSwgc2l6ZV90IGJ5dGVzKQoreworICAgIGlmIChvbGRNZW0gPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gbGVha19tYWxsb2MoYnl0ZXMpOworICAgIH0KKyAgICB2b2lkKiBuZXdNZW0gPSBOVUxMOworICAgIEFsbG9jYXRpb25FbnRyeSogaGVhZGVyID0gKEFsbG9jYXRpb25FbnRyeSopb2xkTWVtIC0gMTsKKyAgICBpZiAoaGVhZGVyICYmIGhlYWRlci0+Z3VhcmQgPT0gR1VBUkQpIHsKKyAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBoZWFkZXItPmVudHJ5LT5zaXplICYgflNJWkVfRkxBR19NQVNLOworICAgICAgICBuZXdNZW0gPSBsZWFrX21hbGxvYyhieXRlcyk7CisgICAgICAgIGlmIChuZXdNZW0gIT0gTlVMTCkgeworICAgICAgICAgICAgc2l6ZV90IGNvcHlTaXplID0gKG9sZFNpemUgPD0gYnl0ZXMpID8gb2xkU2l6ZSA6IGJ5dGVzOworICAgICAgICAgICAgbWVtY3B5KG5ld01lbSwgb2xkTWVtLCBjb3B5U2l6ZSk7CisgICAgICAgICAgICBsZWFrX2ZyZWUob2xkTWVtKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIG5ld01lbSA9IGRscmVhbGxvYyhvbGRNZW0sIGJ5dGVzKTsKKyAgICB9CisgICAgcmV0dXJuIG5ld01lbTsKK30KKwordm9pZCogbGVha19tZW1hbGlnbihzaXplX3QgYWxpZ25tZW50LCBzaXplX3QgYnl0ZXMpCit7CisgICAgLy8gd2UgY2FuIGp1c3QgdXNlIG1hbGxvYworICAgIGlmIChhbGlnbm1lbnQgPD0gTUFMTE9DX0FMSUdOTUVOVCkKKyAgICAgICAgcmV0dXJuIGxlYWtfbWFsbG9jKGJ5dGVzKTsKKworICAgIC8vIG5lZWQgdG8gbWFrZSBzdXJlIGl0J3MgYSBwb3dlciBvZiB0d28KKyAgICBpZiAoYWxpZ25tZW50ICYgKGFsaWdubWVudC0xKSkKKyAgICAgICAgYWxpZ25tZW50ID0gMUwgPDwgKDMxIC0gX19idWlsdGluX2NseihhbGlnbm1lbnQpKTsKKyAgICAKKyAgICAvLyBoZXJlLCBhbGlnbWVudCBpcyBhdCBsZWFzdCBNQUxMT0NfQUxJR05NRU5UPDwxIGJ5dGVzCisgICAgLy8gd2Ugd2lsbCBhbGlnbiBieSBhdCBsZWFzdCBNQUxMT0NfQUxJR05NRU5UIGJ5dGVzCisgICAgLy8gYW5kIGF0IG1vc3QgYWxpZ25tZW50LU1BTExPQ19BTElHTk1FTlQgYnl0ZXMKKyAgICBzaXplX3Qgc2l6ZSA9IChhbGlnbm1lbnQtTUFMTE9DX0FMSUdOTUVOVCkgKyBieXRlczsKKyAgICB2b2lkKiBiYXNlID0gbGVha19tYWxsb2Moc2l6ZSk7CisgICAgaWYgKGJhc2UgIT0gTlVMTCkgeworICAgICAgICBpbnRwdHJfdCBwdHIgPSAoaW50cHRyX3QpYmFzZTsKKyAgICAgICAgaWYgKChwdHIgJSBhbGlnbm1lbnQpID09IDApCisgICAgICAgICAgICByZXR1cm4gYmFzZTsKKworICAgICAgICAvLyBhbGlnbiB0aGUgcG9pbnRlcgorICAgICAgICBwdHIgKz0gKCgtcHRyKSAlIGFsaWdubWVudCk7CisgICAgICAgIAorICAgICAgICAvLyB0aGVyZSBpcyBhbHdheXMgZW5vdWdoIHNwYWNlIGZvciB0aGUgYmFzZSBwb2ludGVyIGFuZCB0aGUgZ3VhcmQKKyAgICAgICAgKCh2b2lkKiopcHRyKVstMV0gPSBNRU1BTElHTl9HVUFSRDsKKyAgICAgICAgKCh2b2lkKiopcHRyKVstMl0gPSBiYXNlOworCisgICAgICAgIHJldHVybiAodm9pZCopcHRyOworICAgIH0KKyAgICByZXR1cm4gYmFzZTsKK30KKyNlbmRpZiAvKiBNQUxMT0NfTEVBS19DSEVDSyAqLworCisvLyBjYWxsZWQgZnJvbSBsaWJjX2luaXQoKQorZXh0ZXJuIGNoYXIqICBfX3Byb2duYW1lOworCit2b2lkIG1hbGxvY19kZWJ1Z19pbml0KCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgbGV2ZWwgPSAwOworI2lmZGVmIE1BTExPQ19MRUFLX0NIRUNLCisgICAgLy8gaWYgTUFMTE9DX0xFQUtfQ0hFQ0sgaXMgZW5hYmxlZCwgdXNlIGxldmVsPTEgYnkgZGVmYXVsdAorICAgIGxldmVsID0gMTsKKyNlbmRpZgorICAgIGNoYXIgZW52W1BST1BfVkFMVUVfTUFYXTsKKyAgICBpbnQgbGVuID0gX19zeXN0ZW1fcHJvcGVydHlfZ2V0KCJsaWJjLmRlYnVnLm1hbGxvYyIsIGVudik7CisKKyAgICBpZiAobGVuKSB7CisgICAgICAgIGxldmVsID0gYXRvaShlbnYpOworI2lmbmRlZiBNQUxMT0NfTEVBS19DSEVDSworICAgICAgICAvKiBBbGVydCB0aGUgdXNlciB0aGF0IGxpYmNfZGVidWcuc28gbmVlZHMgdG8gYmUgaW5zdGFsbGVkIGFzIGxpYmMuc28KKyAgICAgICAgICogd2hlbiBwZXJmb3JtaW5nIG1hbGxvYyBjaGVja3MuCisgICAgICAgICAqLworICAgICAgICBpZiAobGV2ZWwgIT0gMCkgeworICAgICAgICAgICAgX19saWJjX2FuZHJvaWRfbG9nX3ByaW50KEFORFJPSURfTE9HX0lORk8sICJsaWJjIiwKKyAgICAgICAgICAgICAgICAgIk1hbGxvYyBjaGVja3MgbmVlZCBsaWJjX2RlYnVnLnNvIHB1c2hlZCB0byB0aGUgZGV2aWNlIVxuIik7CisKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQorCisjaWZkZWYgTUFMTE9DX0xFQUtfQ0hFQ0sKKyAgICBnTWFsbG9jRGVidWdMZXZlbCA9IGxldmVsOworICAgIHN3aXRjaCAobGV2ZWwpIHsKKyAgICBkZWZhdWx0OgorICAgIGNhc2UgMDoKKyAgICAgICAgZ01hbGxvY0Rpc3BhdGNoID0gJmdNYWxsb2NFbmdpbmVUYWJsZVtJTkRFWF9OT1JNQUxdOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDE6CisgICAgICAgIF9fbGliY19hbmRyb2lkX2xvZ19wcmludChBTkRST0lEX0xPR19JTkZPLCAibGliYyIsCisgICAgICAgICAgICAgICAgIiVzIHVzaW5nIE1BTExPQ19ERUJVRyA9ICVkIChsZWFrIGNoZWNrZXIpXG4iLAorICAgICAgICAgICAgICAgIF9fcHJvZ25hbWUsIGxldmVsKTsKKyAgICAgICAgZ01hbGxvY0Rpc3BhdGNoID0gJmdNYWxsb2NFbmdpbmVUYWJsZVtJTkRFWF9MRUFLX0NIRUNLXTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSA1OgorICAgICAgICBfX2xpYmNfYW5kcm9pZF9sb2dfcHJpbnQoQU5EUk9JRF9MT0dfSU5GTywgImxpYmMiLAorICAgICAgICAgICAgICAgICIlcyB1c2luZyBNQUxMT0NfREVCVUcgPSAlZCAoZmlsbClcbiIsIAorICAgICAgICAgICAgICAgIF9fcHJvZ25hbWUsIGxldmVsKTsKKyAgICAgICAgZ01hbGxvY0Rpc3BhdGNoID0gJmdNYWxsb2NFbmdpbmVUYWJsZVtJTkRFWF9NQUxMT0NfRklMTF07CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMTA6CisgICAgICAgIF9fbGliY19hbmRyb2lkX2xvZ19wcmludChBTkRST0lEX0xPR19JTkZPLCAibGliYyIsCisgICAgICAgICAgICAgICAgIiVzIHVzaW5nIE1BTExPQ19ERUJVRyA9ICVkIChzZW50aW5lbHMsIGZpbGwpXG4iLCAKKyAgICAgICAgICAgICAgICBfX3Byb2duYW1lLCBsZXZlbCk7CisgICAgICAgIGdNYWxsb2NEaXNwYXRjaCA9ICZnTWFsbG9jRW5naW5lVGFibGVbSU5ERVhfTUFMTE9DX0NIRUNLXTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorI2VuZGlmCit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9tZDUuYyBiL2xpYmMvYmlvbmljL21kNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4Nzc4NmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9tZDUuYwpAQCAtMCwwICsxLDI3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMTk5NSAtIDIwMDEgS3VuZ2xpZ2EgVGVrbmlza2EgSPZnc2tvbGFuCisgKiAoUm95YWwgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksIFN0b2NraG9sbSwgU3dlZGVuKS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgSW5zdGl0dXRlIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgSU5TVElUVVRFIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgSU5TVElUVVRFIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlICJjb25maWcuaCIKKworX19SQ1NJRCgiJEhlaW1kYWw6IG1kNS5jLHYgMS4xNSAyMDAxLzAxLzI5IDA0OjMzOjQ0IGFzc2FyIEV4cCAkIgorICAgICAgICAiJE5ldEJTRDogbWQ1LmMsdiAxLjEuMS40IDIwMDIvMDkvMTIgMTI6NDE6NDIgam9kYSBFeHAgJCIpOworI2VuZGlmCisKKyNpbmNsdWRlICJtZDUuaCIKKyNpbmNsdWRlICJoYXNoLmgiCisKKyNkZWZpbmUgQSBtLT5jb3VudGVyWzBdCisjZGVmaW5lIEIgbS0+Y291bnRlclsxXQorI2RlZmluZSBDIG0tPmNvdW50ZXJbMl0KKyNkZWZpbmUgRCBtLT5jb3VudGVyWzNdCisjZGVmaW5lIFggZGF0YQorCit2b2lkCitNRDVfSW5pdCAoc3RydWN0IG1kNSAqbSkKK3sKKyAgbS0+c3pbMF0gPSAwOworICBtLT5zelsxXSA9IDA7CisgIEQgPSAweDEwMzI1NDc2OworICBDID0gMHg5OGJhZGNmZTsKKyAgQiA9IDB4ZWZjZGFiODk7CisgIEEgPSAweDY3NDUyMzAxOworfQorCisjZGVmaW5lIEYoeCx5LHopIENSQVlGSVgoKHggJiB5KSB8ICh+eCAmIHopKQorI2RlZmluZSBHKHgseSx6KSBDUkFZRklYKCh4ICYgeikgfCAoeSAmIH56KSkKKyNkZWZpbmUgSCh4LHkseikgKHggXiB5IF4geikKKyNkZWZpbmUgSSh4LHkseikgQ1JBWUZJWCh5IF4gKHggfCB+eikpCisKKyNkZWZpbmUgRE9JVChhLGIsYyxkLGsscyxpLE9QKSBcCithID0gYiArIGNzaGlmdChhICsgT1AoYixjLGQpICsgWFtrXSArIChpKSwgcykKKworI2RlZmluZSBETzEoYSxiLGMsZCxrLHMsaSkgRE9JVChhLGIsYyxkLGsscyxpLEYpCisjZGVmaW5lIERPMihhLGIsYyxkLGsscyxpKSBET0lUKGEsYixjLGQsayxzLGksRykKKyNkZWZpbmUgRE8zKGEsYixjLGQsayxzLGkpIERPSVQoYSxiLGMsZCxrLHMsaSxIKQorI2RlZmluZSBETzQoYSxiLGMsZCxrLHMsaSkgRE9JVChhLGIsYyxkLGsscyxpLEkpCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorY2FsYyAoc3RydWN0IG1kNSAqbSwgdV9pbnQzMl90ICpkYXRhKQoreworICB1X2ludDMyX3QgQUEsIEJCLCBDQywgREQ7CisKKyAgQUEgPSBBOworICBCQiA9IEI7CisgIENDID0gQzsKKyAgREQgPSBEOworCisgIC8qIFJvdW5kIDEgKi8KKworICBETzEoQSxCLEMsRCwwLDcsMHhkNzZhYTQ3OCk7CisgIERPMShELEEsQixDLDEsMTIsMHhlOGM3Yjc1Nik7CisgIERPMShDLEQsQSxCLDIsMTcsMHgyNDIwNzBkYik7CisgIERPMShCLEMsRCxBLDMsMjIsMHhjMWJkY2VlZSk7CisKKyAgRE8xKEEsQixDLEQsNCw3LDB4ZjU3YzBmYWYpOworICBETzEoRCxBLEIsQyw1LDEyLDB4NDc4N2M2MmEpOworICBETzEoQyxELEEsQiw2LDE3LDB4YTgzMDQ2MTMpOworICBETzEoQixDLEQsQSw3LDIyLDB4ZmQ0Njk1MDEpOworCisgIERPMShBLEIsQyxELDgsNywweDY5ODA5OGQ4KTsKKyAgRE8xKEQsQSxCLEMsOSwxMiwweDhiNDRmN2FmKTsKKyAgRE8xKEMsRCxBLEIsMTAsMTcsMHhmZmZmNWJiMSk7CisgIERPMShCLEMsRCxBLDExLDIyLDB4ODk1Y2Q3YmUpOworCisgIERPMShBLEIsQyxELDEyLDcsMHg2YjkwMTEyMik7CisgIERPMShELEEsQixDLDEzLDEyLDB4ZmQ5ODcxOTMpOworICBETzEoQyxELEEsQiwxNCwxNywweGE2Nzk0MzhlKTsKKyAgRE8xKEIsQyxELEEsMTUsMjIsMHg0OWI0MDgyMSk7CisKKyAgLyogUm91bmQgMiAqLworCisgIERPMihBLEIsQyxELDEsNSwweGY2MWUyNTYyKTsKKyAgRE8yKEQsQSxCLEMsNiw5LDB4YzA0MGIzNDApOworICBETzIoQyxELEEsQiwxMSwxNCwweDI2NWU1YTUxKTsKKyAgRE8yKEIsQyxELEEsMCwyMCwweGU5YjZjN2FhKTsKKworICBETzIoQSxCLEMsRCw1LDUsMHhkNjJmMTA1ZCk7CisgIERPMihELEEsQixDLDEwLDksMHgyNDQxNDUzKTsKKyAgRE8yKEMsRCxBLEIsMTUsMTQsMHhkOGExZTY4MSk7CisgIERPMihCLEMsRCxBLDQsMjAsMHhlN2QzZmJjOCk7CisKKyAgRE8yKEEsQixDLEQsOSw1LDB4MjFlMWNkZTYpOworICBETzIoRCxBLEIsQywxNCw5LDB4YzMzNzA3ZDYpOworICBETzIoQyxELEEsQiwzLDE0LDB4ZjRkNTBkODcpOworICBETzIoQixDLEQsQSw4LDIwLDB4NDU1YTE0ZWQpOworCisgIERPMihBLEIsQyxELDEzLDUsMHhhOWUzZTkwNSk7CisgIERPMihELEEsQixDLDIsOSwweGZjZWZhM2Y4KTsKKyAgRE8yKEMsRCxBLEIsNywxNCwweDY3NmYwMmQ5KTsKKyAgRE8yKEIsQyxELEEsMTIsMjAsMHg4ZDJhNGM4YSk7CisKKyAgLyogUm91bmQgMyAqLworCisgIERPMyhBLEIsQyxELDUsNCwweGZmZmEzOTQyKTsKKyAgRE8zKEQsQSxCLEMsOCwxMSwweDg3NzFmNjgxKTsKKyAgRE8zKEMsRCxBLEIsMTEsMTYsMHg2ZDlkNjEyMik7CisgIERPMyhCLEMsRCxBLDE0LDIzLDB4ZmRlNTM4MGMpOworCisgIERPMyhBLEIsQyxELDEsNCwweGE0YmVlYTQ0KTsKKyAgRE8zKEQsQSxCLEMsNCwxMSwweDRiZGVjZmE5KTsKKyAgRE8zKEMsRCxBLEIsNywxNiwweGY2YmI0YjYwKTsKKyAgRE8zKEIsQyxELEEsMTAsMjMsMHhiZWJmYmM3MCk7CisKKyAgRE8zKEEsQixDLEQsMTMsNCwweDI4OWI3ZWM2KTsKKyAgRE8zKEQsQSxCLEMsMCwxMSwweGVhYTEyN2ZhKTsKKyAgRE8zKEMsRCxBLEIsMywxNiwweGQ0ZWYzMDg1KTsKKyAgRE8zKEIsQyxELEEsNiwyMywweDQ4ODFkMDUpOworCisgIERPMyhBLEIsQyxELDksNCwweGQ5ZDRkMDM5KTsKKyAgRE8zKEQsQSxCLEMsMTIsMTEsMHhlNmRiOTllNSk7CisgIERPMyhDLEQsQSxCLDE1LDE2LDB4MWZhMjdjZjgpOworICBETzMoQixDLEQsQSwyLDIzLDB4YzRhYzU2NjUpOworCisgIC8qIFJvdW5kIDQgKi8KKworICBETzQoQSxCLEMsRCwwLDYsMHhmNDI5MjI0NCk7CisgIERPNChELEEsQixDLDcsMTAsMHg0MzJhZmY5Nyk7CisgIERPNChDLEQsQSxCLDE0LDE1LDB4YWI5NDIzYTcpOworICBETzQoQixDLEQsQSw1LDIxLDB4ZmM5M2EwMzkpOworCisgIERPNChBLEIsQyxELDEyLDYsMHg2NTViNTljMyk7CisgIERPNChELEEsQixDLDMsMTAsMHg4ZjBjY2M5Mik7CisgIERPNChDLEQsQSxCLDEwLDE1LDB4ZmZlZmY0N2QpOworICBETzQoQixDLEQsQSwxLDIxLDB4ODU4NDVkZDEpOworCisgIERPNChBLEIsQyxELDgsNiwweDZmYTg3ZTRmKTsKKyAgRE80KEQsQSxCLEMsMTUsMTAsMHhmZTJjZTZlMCk7CisgIERPNChDLEQsQSxCLDYsMTUsMHhhMzAxNDMxNCk7CisgIERPNChCLEMsRCxBLDEzLDIxLDB4NGUwODExYTEpOworCisgIERPNChBLEIsQyxELDQsNiwweGY3NTM3ZTgyKTsKKyAgRE80KEQsQSxCLEMsMTEsMTAsMHhiZDNhZjIzNSk7CisgIERPNChDLEQsQSxCLDIsMTUsMHgyYWQ3ZDJiYik7CisgIERPNChCLEMsRCxBLDksMjEsMHhlYjg2ZDM5MSk7CisKKyAgQSArPSBBQTsKKyAgQiArPSBCQjsKKyAgQyArPSBDQzsKKyAgRCArPSBERDsKK30KKworLyoKKyAqIEZyb20gYFBlcmZvcm1hbmNlIGFuYWx5c2lzIG9mIE1ENScgYnkgSm9zZXBoIEQuIFRvdWNoIDx0b3VjaEBpc2kuZWR1PgorICovCisKKyNpZiBkZWZpbmVkKFdPUkRTX0JJR0VORElBTikKK3N0YXRpYyBpbmxpbmUgdV9pbnQzMl90Citzd2FwX3VfaW50MzJfdCAodV9pbnQzMl90IHQpCit7CisgIHVfaW50MzJfdCB0ZW1wMSwgdGVtcDI7CisKKyAgdGVtcDEgICA9IGNzaGlmdCh0LCAxNik7CisgIHRlbXAyICAgPSB0ZW1wMSA+PiA4OworICB0ZW1wMSAgJj0gMHgwMGZmMDBmZjsKKyAgdGVtcDIgICY9IDB4MDBmZjAwZmY7CisgIHRlbXAxIDw8PSA4OworICByZXR1cm4gdGVtcDEgfCB0ZW1wMjsKK30KKyNlbmRpZgorCitzdHJ1Y3QgeDMyeworICB1bnNpZ25lZCBpbnQgYTozMjsKKyAgdW5zaWduZWQgaW50IGI6MzI7Cit9OworCit2b2lkCitNRDVfVXBkYXRlIChzdHJ1Y3QgbWQ1ICptLCBjb25zdCB2b2lkICp2LCBzaXplX3QgbGVuKQoreworICBjb25zdCB1bnNpZ25lZCBjaGFyICpwID0gdjsKKyAgc2l6ZV90IG9sZF9zeiA9IG0tPnN6WzBdOworICBzaXplX3Qgb2Zmc2V0OworCisgIG0tPnN6WzBdICs9IGxlbiAqIDg7CisgIGlmIChtLT5zelswXSA8IG9sZF9zeikKKyAgICAgICsrbS0+c3pbMV07CisgIG9mZnNldCA9IChvbGRfc3ogLyA4KSAgJSA2NDsKKyAgd2hpbGUobGVuID4gMCl7CisgICAgc2l6ZV90IGwgPSBtaW4obGVuLCA2NCAtIG9mZnNldCk7CisgICAgbWVtY3B5KG0tPnNhdmUgKyBvZmZzZXQsIHAsIGwpOworICAgIG9mZnNldCArPSBsOworICAgIHAgKz0gbDsKKyAgICBsZW4gLT0gbDsKKyAgICBpZihvZmZzZXQgPT0gNjQpeworI2lmIGRlZmluZWQoV09SRFNfQklHRU5ESUFOKQorICAgICAgaW50IGk7CisgICAgICB1X2ludDMyX3QgY3VycmVudFsxNl07CisgICAgICBzdHJ1Y3QgeDMyICp1ID0gKHN0cnVjdCB4MzIqKW0tPnNhdmU7CisgICAgICBmb3IoaSA9IDA7IGkgPCA4OyBpKyspeworCWN1cnJlbnRbMippKzBdID0gc3dhcF91X2ludDMyX3QodVtpXS5hKTsKKwljdXJyZW50WzIqaSsxXSA9IHN3YXBfdV9pbnQzMl90KHVbaV0uYik7CisgICAgICB9CisgICAgICBjYWxjKG0sIGN1cnJlbnQpOworI2Vsc2UKKyAgICAgIGNhbGMobSwgKHVfaW50MzJfdCopbS0+c2F2ZSk7CisjZW5kaWYKKyAgICAgIG9mZnNldCA9IDA7CisgICAgfQorICB9Cit9CisKK3ZvaWQKK01ENV9GaW5hbCAodm9pZCAqcmVzLCBzdHJ1Y3QgbWQ1ICptKQoreworICBzdGF0aWMgdW5zaWduZWQgY2hhciB6ZXJvc1s3Ml07CisgIHVuc2lnbmVkIG9mZnNldCA9IChtLT5zelswXSAvIDgpICUgNjQ7CisgIHVuc2lnbmVkIGludCBkc3RhcnQgPSAoMTIwIC0gb2Zmc2V0IC0gMSkgJSA2NCArIDE7CisKKyAgKnplcm9zID0gMHg4MDsKKyAgbWVtc2V0ICh6ZXJvcyArIDEsIDAsIHNpemVvZih6ZXJvcykgLSAxKTsKKyAgemVyb3NbZHN0YXJ0KzBdID0gKG0tPnN6WzBdID4+IDApICYgMHhmZjsKKyAgemVyb3NbZHN0YXJ0KzFdID0gKG0tPnN6WzBdID4+IDgpICYgMHhmZjsKKyAgemVyb3NbZHN0YXJ0KzJdID0gKG0tPnN6WzBdID4+IDE2KSAmIDB4ZmY7CisgIHplcm9zW2RzdGFydCszXSA9IChtLT5zelswXSA+PiAyNCkgJiAweGZmOworICB6ZXJvc1tkc3RhcnQrNF0gPSAobS0+c3pbMV0gPj4gMCkgJiAweGZmOworICB6ZXJvc1tkc3RhcnQrNV0gPSAobS0+c3pbMV0gPj4gOCkgJiAweGZmOworICB6ZXJvc1tkc3RhcnQrNl0gPSAobS0+c3pbMV0gPj4gMTYpICYgMHhmZjsKKyAgemVyb3NbZHN0YXJ0KzddID0gKG0tPnN6WzFdID4+IDI0KSAmIDB4ZmY7CisgIE1ENV9VcGRhdGUgKG0sIHplcm9zLCBkc3RhcnQgKyA4KTsKKyAgeworICAgICAgaW50IGk7CisgICAgICB1bnNpZ25lZCBjaGFyICpyID0gKHVuc2lnbmVkIGNoYXIgKilyZXM7CisKKyAgICAgIGZvciAoaSA9IDA7IGkgPCA0OyArK2kpIHsKKwkgIHJbNCppXSAgID0gbS0+Y291bnRlcltpXSAmIDB4RkY7CisJICByWzQqaSsxXSA9IChtLT5jb3VudGVyW2ldID4+IDgpICYgMHhGRjsKKwkgIHJbNCppKzJdID0gKG0tPmNvdW50ZXJbaV0gPj4gMTYpICYgMHhGRjsKKwkgIHJbNCppKzNdID0gKG0tPmNvdW50ZXJbaV0gPj4gMjQpICYgMHhGRjsKKyAgICAgIH0KKyAgfQorI2lmIDAKKyAgeworICAgIGludCBpOworICAgIHVfaW50MzJfdCAqciA9ICh1X2ludDMyX3QgKilyZXM7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgNDsgKytpKQorICAgICAgcltpXSA9IHN3YXBfdV9pbnQzMl90IChtLT5jb3VudGVyW2ldKTsKKyAgfQorI2VuZGlmCit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9tZDUuaCBiL2xpYmMvYmlvbmljL21kNS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzODE5OTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9tZDUuaApAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAxOTk1IC0gMjAwMSBLdW5nbGlnYSBUZWtuaXNrYSBI9mdza29sYW4KKyAqIChSb3lhbCBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgU3RvY2tob2xtLCBTd2VkZW4pLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAKKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBJbnN0aXR1dGUgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBJTlNUSVRVVEUgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBJTlNUSVRVVEUgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisvKiAkSGVpbWRhbDogbWQ1LmgsdiAxLjggMjAwMS8wMS8yOSAwMjowODo1NyBhc3NhciBFeHAgJAorICAgJE5ldEJTRDogbWQ1LmgsdiAxLjEuMS40IDIwMDIvMDkvMTIgMTI6NDE6NDIgam9kYSBFeHAgJCAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKK3N0cnVjdCBtZDUgeworICB1bnNpZ25lZCBpbnQgc3pbMl07CisgIHVfaW50MzJfdCBjb3VudGVyWzRdOworICB1bnNpZ25lZCBjaGFyIHNhdmVbNjRdOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgbWQ1IE1ENV9DVFg7CisKK3ZvaWQgTUQ1X0luaXQgKHN0cnVjdCBtZDUgKm0pOwordm9pZCBNRDVfVXBkYXRlIChzdHJ1Y3QgbWQ1ICptLCBjb25zdCB2b2lkICpwLCBzaXplX3QgbGVuKTsKK3ZvaWQgTUQ1X0ZpbmFsICh2b2lkICpyZXMsIHN0cnVjdCBtZDUgKm0pOyAvKiB1X2ludDMyX3QgcmVzWzRdICovCmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9wdGhyZWFkLXRpbWVycy5jIGIvbGliYy9iaW9uaWMvcHRocmVhZC10aW1lcnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjljOTllCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvcHRocmVhZC10aW1lcnMuYwpAQCAtMCwwICsxLDYzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSAicHRocmVhZF9pbnRlcm5hbC5oIgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisvKiBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgc3VwcG9ydCByZXF1aXJlZCB0byBpbXBsZW1lbnQgU0lHRVZfVEhSRUFEIHBvc2l4IAorICogdGltZXJzLiBTZWUgdGhlIGZvbGxvd2luZyBwYWdlcyBmb3IgYWRkaXRpb25uYWwgZGV0YWlsczoKKyAqCisgKiB3d3cub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzAwMDA5NTM5OS9mdW5jdGlvbnMvdGltZXJfY3JlYXRlLmh0bWwKKyAqIHd3dy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvMDAwMDk1Mzk5L2Z1bmN0aW9ucy90aW1lcl9zZXR0aW1lLmh0bWwKKyAqIHd3dy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvMDAwMDk1Mzk5L2Z1bmN0aW9ucy94c2hfY2hhcDAyXzA0Lmh0bWwjdGFnXzAyXzA0XzAxCisgKgorICogVGhlIExpbnV4IGtlcm5lbCBkb2Vzbid0IHN1cHBvcnQgdGhlc2UsIHNvIHdlIG5lZWQgdG8gaW1wbGVtZW50IHRoZW0gaW4gdGhlCisgKiBDIGxpYnJhcnkuIFdlIHVzZSBhIHZlcnkgYmFzaWMgc2NoZW1lIHdoZXJlIGVhY2ggdGltZXIgaXMgYXNzb2NpYXRlZCB0byBhCisgKiB0aHJlYWQgdGhhdCB3aWxsIGxvb3AsIHdhaXRpbmcgZm9yIHRpbWVvdXRzIG9yIG1lc3NhZ2VzIGZyb20gdGhlIHByb2dyYW0KKyAqIGNvcnJlc3BvbmRpbmcgdG8gY2FsbHMgdG8gdGltZXJfc2V0dGltZSgpIGFuZCB0aW1lcl9kZWxldGUoKS4KKyAqCisgKiBOb3RlIGFsc28gYW4gaW1wb3J0YW50IHRoaW5nOiBQb3NpeCBtYW5kYXRlcyB0aGF0IGluIHRoZSBjYXNlIG9mIGZvcmsoKSwKKyAqIHRoZSB0aW1lcnMgb2YgdGhlIGNoaWxkIHByb2Nlc3Mgc2hvdWxkIGJlIGRpc2FybWVkLCBidXQgbm90IGRlbGV0ZWQuCisgKiB0aGlzIGlzIGltcGxlbWVudGVkIGJ5IHByb3ZpZGluZyBhIGZvcmsoKSB3cmFwcGVyIChzZWUgYmlvbmljL2ZvcmsuYykgd2hpY2gKKyAqIHN0b3BzIGFsbCB0aW1lcnMgYmVmb3JlIHRoZSBmb3JrLCBhbmQgb25seSByZS1zdGFydCB0aGVtIGluIGNhc2Ugb2YgZXJyb3IKKyAqIG9yIGluIHRoZSBwYXJlbnQgcHJvY2Vzcy4KKyAqCisgKiB0aGUgc3RvcC9zdGFydCBpcyBpbXBsZW1lbnRlZCBieSB0aGUgX190aW1lcl90YWJsZV9zdGFydF9zdG9wKCkgZnVuY3Rpb24KKyAqIGJlbG93LgorICovCisKKy8qIG5vcm1hbCAoaS5lLiBub24tU0lHRVZfVEhSRUFEKSB0aW1lciBpZHMgYXJlIGNyZWF0ZWQgZGlyZWN0bHkgYnkgdGhlIGtlcm5lbAorICogYW5kIGFyZSBwYXNzZWQgYXMgaXMgdG8vZnJvbSB0aGUgY2FsbGVyLgorICoKKyAqIG9uIHRoZSBvdGhlciBoYW5kLCBhIFNJR0VWX1RIUkVBRCB0aW1lciBJRCB3aWxsIGhhdmUgaXRzIFRJTUVSX0lEX1dSQVBfQklUCisgKiBhbHdheXMgc2V0IHRvIDEuIEluIHRoaXMgaW1wbGVtZW50YXRpb24sIHRoaXMgaXMgYWx3YXlzIGJpdCAzMSwgd2hpY2ggaXMKKyAqIGd1YXJhbnRlZWQgdG8gbmV2ZXIgYmUgdXNlZCBieSBrZXJuZWwtcHJvdmlkZWQgdGltZXIgaWRzCisgKgorICogKHNlZSBjb2RlIGluIDxrZXJuZWw+L2xpYi9pZHIuYywgdXNlZCB0byBtYW5hZ2UgSURzLCB0byBzZWUgd2h5KQorICovCisKKyNkZWZpbmUgIFRJTUVSX0lEX1dSQVBfQklUICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lICBUSU1FUl9JRF9XUkFQKGlkKSAgICAgICAgKCh0aW1lcl90KSgoaWQpIHwgIFRJTUVSX0lEX1dSQVBfQklUKSkKKyNkZWZpbmUgIFRJTUVSX0lEX1VOV1JBUChpZCkgICAgICAoKHRpbWVyX3QpKChpZCkgJiB+VElNRVJfSURfV1JBUF9CSVQpKQorI2RlZmluZSAgVElNRVJfSURfSVNfV1JBUFBFRChpZCkgICgoKGlkKSAmIFRJTUVSX0lEX1dSQVBfQklUKSAhPSAwKQorCisvKiB0aGlzIHZhbHVlIGlzIHVzZWQgaW50ZXJuYWxseSB0byBpbmRpY2F0ZSBhICdmcmVlJyBvciAnem9tYmllJyAKKyAqIHRocl90aW1lciBzdHJ1Y3R1cmUuIEhlcmUsICd6b21iaWUnIG1lYW5zIHRoYXQgdGltZXJfZGVsZXRlKCkKKyAqIGhhcyBiZWVuIGNhbGxlZCwgYnV0IHRoYXQgdGhlIGNvcnJlc3BvbmRpbmcgdGhyZWFkIGhhc24ndAorICogZXhpdGVkIHlldC4KKyAqLworI2RlZmluZSAgVElNRVJfSURfTk9ORSAgICAgICAgICAgICgodGltZXJfdCkweGZmZmZmZmZmKQorCisvKiBUcnVlIGlmZiBhIHRpbWVyIGlkIGlzIHZhbGlkICovCisjZGVmaW5lICBUSU1FUl9JRF9JU19WQUxJRChpZCkgICAgKChpZCkgIT0gVElNRVJfSURfTk9ORSkKKworLyogdGhlIG1heGltdW0gdmFsdWUgb2Ygb3ZlcnJ1biBjb3VudGVycyAqLworI2RlZmluZSAgREVMQVlUSU1FUl9NQVggICAgMHg3ZmZmZmZmZgorCisjZGVmaW5lICBfX2xpa2VseSh4KSAgIF9fYnVpbHRpbl9leHBlY3QoISEoeCksMSkKKyNkZWZpbmUgIF9fdW5saWtlbHkoeCkgX19idWlsdGluX2V4cGVjdCghISh4KSwwKQorCit0eXBlZGVmIHN0cnVjdCB0aHJfdGltZXIgICAgICAgICAgdGhyX3RpbWVyX3Q7Cit0eXBlZGVmIHN0cnVjdCB0aHJfdGltZXJfdGFibGUgICAgdGhyX3RpbWVyX3RhYmxlX3Q7CisKKy8qIFRoZSBQb3NpeCBzcGVjIHNheXMgdGhlIGZ1bmN0aW9uIHJlY2VpdmVzIGFuIHVuc2lnbmVkIHBhcmFtZXRlciwgYnV0CisgKiBpdCdzIHJlYWxseSBhICd1bmlvbiBzaWd2YWwnIGEuay5hLiBzaWd2YWxfdCAqLwordHlwZWRlZiB2b2lkICgqdGhyX3RpbWVyX2Z1bmNfdCkoIHNpZ3ZhbF90ICk7CisKK3N0cnVjdCB0aHJfdGltZXIgeworICAgIHRocl90aW1lcl90KiAgICAgICBuZXh0OyAgICAgLyogbmV4dCBpbiBmcmVlIGxpc3QgKi8KKyAgICB0aW1lcl90ICAgICAgICAgICAgaWQ7ICAgICAgIC8qIFRJTUVSX0lEX05PTkUgaWZmIGZyZWUgb3IgZHlpbmcgKi8KKyAgICBjbG9ja2lkX3QgICAgICAgICAgY2xvY2s7CisgICAgcHRocmVhZF90ICAgICAgICAgIHRocmVhZDsKKyAgICBwdGhyZWFkX2F0dHJfdCAgICAgYXR0cmlidXRlczsKKyAgICB0aHJfdGltZXJfZnVuY190ICAgY2FsbGJhY2s7CisgICAgc2lndmFsX3QgICAgICAgICAgIHZhbHVlOworCisgICAgLyogdGhlIGZvbGxvd2luZyBhcmUgdXNlZCB0byBjb21tdW5pY2F0ZSBiZXR3ZWVuCisgICAgICogdGhlIHRpbWVyIHRocmVhZCBhbmQgdGhlIHRpbWVyX1hYWCgpIGZ1bmN0aW9ucworICAgICAqLworICAgIHB0aHJlYWRfbXV0ZXhfdCAgICAgICAgICAgbXV0ZXg7ICAgICAvKiBsb2NrICovCisgICAgcHRocmVhZF9jb25kX3QgICAgICAgICAgICBjb25kOyAgICAgIC8qIHNpZ25hbCBhIHN0YXRlIGNoYW5nZSB0byB0aHJlYWQgKi8KKyAgICBpbnQgdm9sYXRpbGUgICAgICAgICAgICAgIGRvbmU7ICAgICAgLyogc2V0IGJ5IHRpbWVyX2RlbGV0ZSAqLworICAgIGludCB2b2xhdGlsZSAgICAgICAgICAgICAgc3RvcHBlZDsgICAvKiBzZXQgYnkgX3N0YXJ0X3N0b3AoKSAqLworICAgIHN0cnVjdCB0aW1lc3BlYyB2b2xhdGlsZSAgZXhwaXJlczsgICAvKiBuZXh0IGV4cGlyYXRpb24gdGltZSwgb3IgMCAqLworICAgIHN0cnVjdCB0aW1lc3BlYyB2b2xhdGlsZSAgcGVyaW9kOyAgICAvKiByZWxvYWQgdmFsdWUsIG9yIDAgKi8KKyAgICBpbnQgdm9sYXRpbGUgICAgICAgICAgICAgIG92ZXJydW5zOyAgLyogY3VycmVudCBudW1iZXIgb2Ygb3ZlcnJ1bnMgKi8KK307CisKKyNkZWZpbmUgIE1BWF9USFJFQURfVElNRVJTICAzMgorCitzdHJ1Y3QgdGhyX3RpbWVyX3RhYmxlIHsKKyAgICBwdGhyZWFkX211dGV4X3QgIGxvY2s7CisgICAgdGhyX3RpbWVyX3QqICAgICBmcmVlX3RpbWVyOworICAgIHRocl90aW1lcl90ICAgICAgdGltZXJzWyBNQVhfVEhSRUFEX1RJTUVSUyBdOworfTsKKworLyoqIEdMT0JBTCBUQUJMRSBPRiBUSFJFQUQgVElNRVJTCisgKiovCisKK3N0YXRpYyB2b2lkCit0aHJfdGltZXJfdGFibGVfaW5pdCggdGhyX3RpbWVyX3RhYmxlX3QqICB0ICkKK3sKKyAgICBpbnQgIG5uOworCisgICAgbWVtc2V0KHQsIDAsIHNpemVvZiAqdCk7CisgICAgcHRocmVhZF9tdXRleF9pbml0KCAmdC0+bG9jaywgTlVMTCApOworCisgICAgZm9yIChubiA9IDA7IG5uIDwgTUFYX1RIUkVBRF9USU1FUlM7IG5uKyspCisgICAgICAgIHQtPnRpbWVyc1tubl0uaWQgPSBUSU1FUl9JRF9OT05FOworCisgICAgdC0+ZnJlZV90aW1lciA9ICZ0LT50aW1lcnNbMF07CisgICAgZm9yIChubiA9IDE7IG5uIDwgTUFYX1RIUkVBRF9USU1FUlM7IG5uKyspCisgICAgICAgIHQtPnRpbWVyc1tubi0xXS5uZXh0ID0gJnQtPnRpbWVyc1tubl07Cit9CisKKworc3RhdGljIHRocl90aW1lcl90KgordGhyX3RpbWVyX3RhYmxlX2FsbG9jKCB0aHJfdGltZXJfdGFibGVfdCogIHQgKQoreworICAgIHRocl90aW1lcl90KiAgdGltZXI7CisKKyAgICBpZiAodCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmdC0+bG9jayk7CisgICAgdGltZXIgPSB0LT5mcmVlX3RpbWVyOworICAgIGlmICh0aW1lciAhPSBOVUxMKSB7CisgICAgICAgIHQtPmZyZWVfdGltZXIgPSB0aW1lci0+bmV4dDsKKyAgICAgICAgdGltZXItPm5leHQgICA9IE5VTEw7CisgICAgICAgIHRpbWVyLT5pZCAgICAgPSBUSU1FUl9JRF9XUkFQKCh0aW1lciAtIHQtPnRpbWVycykpOworICAgIH0KKyAgICBwdGhyZWFkX211dGV4X3VubG9jaygmdC0+bG9jayk7CisgICAgcmV0dXJuIHRpbWVyOworfQorCisKK3N0YXRpYyB2b2lkCit0aHJfdGltZXJfdGFibGVfZnJlZSggdGhyX3RpbWVyX3RhYmxlX3QqICB0LCB0aHJfdGltZXJfdCogIHRpbWVyICkKK3sKKyAgICBwdGhyZWFkX211dGV4X2xvY2soICZ0LT5sb2NrICk7CisgICAgdGltZXItPmlkICAgICA9IFRJTUVSX0lEX05PTkU7CisgICAgdGltZXItPnRocmVhZCA9IDA7CisgICAgdGltZXItPm5leHQgICA9IHQtPmZyZWVfdGltZXI7CisgICAgdC0+ZnJlZV90aW1lciA9IHRpbWVyOworICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCAmdC0+bG9jayApOworfQorCisKK3N0YXRpYyB2b2lkCit0aHJfdGltZXJfdGFibGVfc3RhcnRfc3RvcCggdGhyX3RpbWVyX3RhYmxlX3QqICB0LCBpbnQgIHN0b3AgKQoreworICAgIGludCAgbm47CisKKyAgICBwdGhyZWFkX211dGV4X2xvY2soJnQtPmxvY2spOworCisgICAgZm9yIChubiA9IDA7IG5uIDwgTUFYX1RIUkVBRF9USU1FUlM7IG5uKyspIHsKKyAgICAgICAgdGhyX3RpbWVyX3QqICB0aW1lciAgPSAmdC0+dGltZXJzW25uXTsKKworICAgICAgICBpZiAoVElNRVJfSURfSVNfVkFMSUQodGltZXItPmlkKSkgeworICAgICAgICAgICAgLyogdGVsbCB0aGUgdGhyZWFkIHRvIHN0YXJ0L3N0b3AgKi8KKyAgICAgICAgICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmdGltZXItPm11dGV4KTsKKyAgICAgICAgICAgIHRpbWVyLT5zdG9wcGVkID0gc3RvcDsKKyAgICAgICAgICAgIHB0aHJlYWRfY29uZF9zaWduYWwoICZ0aW1lci0+Y29uZCApOworICAgICAgICAgICAgcHRocmVhZF9tdXRleF91bmxvY2soJnRpbWVyLT5tdXRleCk7CisgICAgICAgIH0KKyAgICB9CisgICAgcHRocmVhZF9tdXRleF91bmxvY2soJnQtPmxvY2spOworfQorCisKKy8qIGNvbnZlcnQgYSB0aW1lcl9pZCBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIHRocl90aW1lcl90KiBwb2ludGVyCisgKiByZXR1cm5zIE5VTEwgaWYgdGhlIGlkIGlzIG5vdCB3cmFwcGVkIG9yIGlzIGludmFsaWQvZnJlZQorICovCitzdGF0aWMgdGhyX3RpbWVyX3QqCit0aHJfdGltZXJfdGFibGVfZnJvbV9pZCggdGhyX3RpbWVyX3RhYmxlX3QqICB0LAorICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX3QgICAgICAgICAgICAgaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgICByZW1vdmUgKQoreworICAgIHVuc2lnbmVkICAgICAgaW5kZXg7CisgICAgdGhyX3RpbWVyX3QqICB0aW1lcjsKKworICAgIGlmICh0ID09IE5VTEwgfHwgIVRJTUVSX0lEX0lTX1dSQVBQRUQoaWQpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGluZGV4ID0gKHVuc2lnbmVkKSBUSU1FUl9JRF9VTldSQVAoaWQpOworICAgIGlmIChpbmRleCA+PSBNQVhfVEhSRUFEX1RJTUVSUykKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBwdGhyZWFkX211dGV4X2xvY2soJnQtPmxvY2spOworCisgICAgdGltZXIgPSAmdC0+dGltZXJzW2luZGV4XTsKKworICAgIGlmICghVElNRVJfSURfSVNfVkFMSUQodGltZXItPmlkKSkgeworICAgICAgICB0aW1lciA9IE5VTEw7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLyogaWYgd2UncmUgcmVtb3ZpbmcgdGhpcyB0aW1lciwgY2xlYXIgdGhlIGlkCisgICAgICAgICAqIHJpZ2h0IG5vdyB0byBwcmV2ZW50IGFub3RoZXIgdGhyZWFkIHRvCisgICAgICAgICAqIHVzZSB0aGUgc2FtZSBpZCBhZnRlciB0aGUgdW5sb2NrICovCisgICAgICAgIGlmIChyZW1vdmUpCisgICAgICAgICAgICB0aW1lci0+aWQgPSBUSU1FUl9JRF9OT05FOworICAgIH0KKyAgICBwdGhyZWFkX211dGV4X3VubG9jaygmdC0+bG9jayk7CisKKyAgICByZXR1cm4gdGltZXI7Cit9CisKKy8qIHRoZSBzdGF0aWMgdGltZXIgdGFibGUgLSB3ZSBvbmx5IGNyZWF0ZSBpdCBpZiB0aGUgcHJvY2VzcworICogcmVhbGx5IHdhbnRzIHRvIHVzZSBTSUdFVl9USFJFQUQgdGltZXJzLCB3aGljaCBzaG91bGQgYmUKKyAqIHByZXR0eSBpbmZyZXF1ZW50CisgKi8KKworc3RhdGljIHB0aHJlYWRfb25jZV90ICAgICAgX190aW1lcl90YWJsZV9vbmNlID0gUFRIUkVBRF9PTkNFX0lOSVQ7CitzdGF0aWMgdGhyX3RpbWVyX3RhYmxlX3QqICBfX3RpbWVyX3RhYmxlOworCitzdGF0aWMgdm9pZAorX190aW1lcl90YWJsZV9pbml0KCB2b2lkICkKK3sKKyAgICBfX3RpbWVyX3RhYmxlID0gY2FsbG9jKDEsc2l6ZW9mKCpfX3RpbWVyX3RhYmxlKSk7CisKKyAgICBpZiAoX190aW1lcl90YWJsZSAhPSBOVUxMKQorICAgICAgICB0aHJfdGltZXJfdGFibGVfaW5pdCggX190aW1lcl90YWJsZSApOworfQorCitzdGF0aWMgdGhyX3RpbWVyX3RhYmxlX3QqCitfX3RpbWVyX3RhYmxlX2dldCh2b2lkKQoreworICAgIHB0aHJlYWRfb25jZSggJl9fdGltZXJfdGFibGVfb25jZSwgX190aW1lcl90YWJsZV9pbml0ICk7CisgICAgcmV0dXJuIF9fdGltZXJfdGFibGU7Cit9CisKKy8qKiBQT1NJWCBUSFJFQUQgVElNRVJTIENMRUFOVVAgT04gRk9SSworICoqCisgKiogdGhpcyBzaG91bGQgYmUgY2FsbGVkIGZyb20gdGhlICdmb3JrKCknIHdyYXBwZXIgdG8gc3RvcC9zdGFydAorICoqIGFsbCBhY3RpdmUgdGhyZWFkIHRpbWVycy4gdGhpcyBpcyB1c2VkIHRvIGltcGxlbWVudCBhIFBvc2l4CisgKiogcmVxdWlyZW1lbnRzOiB0aGUgdGltZXJzIG9mIGZvcmsgY2hpbGQgcHJvY2Vzc2VzIG11c3QgYmUKKyAqKiBkaXNhcm1lZCBidXQgbm90IGRlbGV0ZWQuCisgKiovCit2b2lkCitfX3RpbWVyX3RhYmxlX3N0YXJ0X3N0b3AoIGludCAgc3RvcCApCit7CisgICAgaWYgKF9fdGltZXJfdGFibGUgIT0gTlVMTCkgeworICAgICAgICB0aHJfdGltZXJfdGFibGVfdCogIHRhYmxlID0gX190aW1lcl90YWJsZV9nZXQoKTsKKyAgICAgICAgdGhyX3RpbWVyX3RhYmxlX3N0YXJ0X3N0b3AodGFibGUsIHN0b3ApOworICAgIH0KK30KKworc3RhdGljIHRocl90aW1lcl90KgordGhyX3RpbWVyX2Zyb21faWQoIHRpbWVyX3QgICBpZCApCit7CisgICAgdGhyX3RpbWVyX3RhYmxlX3QqICB0YWJsZSA9IF9fdGltZXJfdGFibGVfZ2V0KCk7CisgICAgdGhyX3RpbWVyX3QqICAgICAgICB0aW1lciA9IHRocl90aW1lcl90YWJsZV9mcm9tX2lkKCB0YWJsZSwgaWQsIDAgKTsKKworICAgIHJldHVybiB0aW1lcjsKK30KKworCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkCit0aHJfdGltZXJfbG9jayggdGhyX3RpbWVyX3QqICB0ICkKK3sKKyAgICBwdGhyZWFkX211dGV4X2xvY2soJnQtPm11dGV4KTsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZAordGhyX3RpbWVyX3VubG9jayggdGhyX3RpbWVyX3QqICB0ICkKK3sKKyAgICBwdGhyZWFkX211dGV4X3VubG9jaygmdC0+bXV0ZXgpOworfQorCisvKiogUE9TSVggVElNRVJTIEFQSXMgKi8KKworLyogZmlyc3QsIGRlY2xhcmUgdGhlIHN5c2NhbGwgc3R1YnMgKi8KK2V4dGVybiBpbnQgX190aW1lcl9jcmVhdGUoIGNsb2NraWRfdCwgc3RydWN0IHNpZ2V2ZW50KiwgdGltZXJfdCogKTsKK2V4dGVybiBpbnQgX190aW1lcl9kZWxldGUoIHRpbWVyX3QgKTsKK2V4dGVybiBpbnQgX190aW1lcl9nZXR0aW1lKCB0aW1lcl90LCBzdHJ1Y3QgaXRpbWVyc3BlYyogKTsKK2V4dGVybiBpbnQgX190aW1lcl9zZXR0aW1lKCB0aW1lcl90LCBpbnQsIGNvbnN0IHN0cnVjdCBpdGltZXJzcGVjKiwgc3RydWN0IGl0aW1lcnNwZWMqICk7CitleHRlcm4gaW50IF9fdGltZXJfZ2V0b3ZlcnJ1bih0aW1lcl90KTsKKworc3RhdGljIHZvaWQqICB0aW1lcl90aHJlYWRfc3RhcnQoIHZvaWQqICk7CisKKy8qIHRoZW4gdGhlIHdyYXBwZXJzIHRoZW1zZWx2ZXMgKi8KK2ludAordGltZXJfY3JlYXRlKCBjbG9ja2lkX3QgIGNsb2NraWQsIHN0cnVjdCBzaWdldmVudCogIGV2cCwgdGltZXJfdCAgKnB0aW1lcmlkKQoreworICAgIC8qIGlmIG5vdCBhIFNJR0VWX1RIUkVBRCB0aW1lciwgZGlyZWN0IGNyZWF0aW9uIGJ5IHRoZSBrZXJuZWwgKi8KKyAgICBpZiAoX19saWtlbHkoZXZwID09IE5VTEwgfHwgZXZwLT5zaWdldl9ub3RpZnkgIT0gU0lHRVZfVEhSRUFEKSkKKyAgICAgICAgcmV0dXJuIF9fdGltZXJfY3JlYXRlKCBjbG9ja2lkLCBldnAsIHB0aW1lcmlkICk7CisKKyAgICAvLyBjaGVjayBhcmd1bWVudHMKKyAgICBpZiAoZXZwLT5zaWdldl9ub3RpZnlfZnVuY3Rpb24gPT0gTlVMTCkgeworICAgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHsKKyAgICAgICAgc3RydWN0IHRpbWVzcGVjICBkdW1teTsKKworICAgICAgICAvKiBjaGVjayB0aGF0IHRoZSBjbG9jayBpZCBpcyBzdXBwb3J0ZWQgYnkgdGhlIGtlcm5lbCAqLworICAgICAgICBpZiAoY2xvY2tfZ2V0dGltZSggY2xvY2tpZCwgJmR1bW15ICkgPCAwICYmIGVycm5vID09IEVJTlZBTCApCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLyogY3JlYXRlIGEgbmV3IHRpbWVyIGFuZCBpdHMgdGhyZWFkICovCisgICAgeworICAgICAgICB0aHJfdGltZXJfdGFibGVfdCogIHRhYmxlID0gX190aW1lcl90YWJsZV9nZXQoKTsKKyAgICAgICAgdGhyX3RpbWVyX3QqICAgICAgICB0aW1lciA9IHRocl90aW1lcl90YWJsZV9hbGxvYyggdGFibGUgKTsKKyAgICAgICAgc3RydWN0IHNpZ2V2ZW50ICAgICBldnAwOworCisgICAgICAgIGlmICh0aW1lciA9PSBOVUxMKSB7CisgICAgICAgICAgICBlcnJubyA9IEVOT01FTTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIGNvcHkgdGhlIHRocmVhZCBhdHRyaWJ1dGVzICovCisgICAgICAgIGlmIChldnAtPnNpZ2V2X25vdGlmeV9hdHRyaWJ1dGVzID09IE5VTEwpIHsKKyAgICAgICAgICAgIHB0aHJlYWRfYXR0cl9pbml0KCZ0aW1lci0+YXR0cmlidXRlcyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aW1lci0+YXR0cmlidXRlcyA9ICgocHRocmVhZF9hdHRyX3QqKWV2cC0+c2lnZXZfbm90aWZ5X2F0dHJpYnV0ZXMpWzBdOworICAgICAgICB9CisKKyAgICAgICAgLyogUG9zaXggc2F5cyB0aGF0IHRoZSBkZWZhdWx0IGlzIFBUSFJFQURfQ1JFQVRFX0RFVEFDSEVEIGFuZAorICAgICAgICAgKiB0aGF0IFBUSFJFQURfQ1JFQVRFX0pPSU5BQkxFIGhhcyB1bmRlZmluZWQgYmVoYXZpb3VyLgorICAgICAgICAgKiBTbyBzaW1wbHkgYWx3YXlzIHVzZSBERVRBQ0hFRCA6LSkKKyAgICAgICAgICovCisgICAgICAgIHB0aHJlYWRfYXR0cl9zZXRkZXRhY2hzdGF0ZSgmdGltZXItPmF0dHJpYnV0ZXMsIFBUSFJFQURfQ1JFQVRFX0RFVEFDSEVEKTsKKworICAgICAgICB0aW1lci0+Y2FsbGJhY2sgPSBldnAtPnNpZ2V2X25vdGlmeV9mdW5jdGlvbjsKKyAgICAgICAgdGltZXItPnZhbHVlICAgID0gZXZwLT5zaWdldl92YWx1ZTsKKyAgICAgICAgdGltZXItPmNsb2NrICAgID0gY2xvY2tpZDsKKworICAgICAgICBwdGhyZWFkX211dGV4X2luaXQoICZ0aW1lci0+bXV0ZXgsIE5VTEwgKTsKKyAgICAgICAgcHRocmVhZF9jb25kX2luaXQoICZ0aW1lci0+Y29uZCwgTlVMTCApOworCisgICAgICAgIHRpbWVyLT5kb25lICAgICAgICAgICA9IDA7CisgICAgICAgIHRpbWVyLT5zdG9wcGVkICAgICAgICA9IDA7CisgICAgICAgIHRpbWVyLT5leHBpcmVzLnR2X3NlYyA9IHRpbWVyLT5leHBpcmVzLnR2X25zZWMgPSAwOworICAgICAgICB0aW1lci0+cGVyaW9kLnR2X3NlYyAgPSB0aW1lci0+cGVyaW9kLnR2X25zZWMgID0gMDsKKyAgICAgICAgdGltZXItPm92ZXJydW5zICAgICAgID0gMDsKKworICAgICAgICAvKiBjcmVhdGUgdGhlIHRocmVhZCAqLworICAgICAgICBpZiAocHRocmVhZF9jcmVhdGUoICZ0aW1lci0+dGhyZWFkLCAmdGltZXItPmF0dHJpYnV0ZXMsIHRpbWVyX3RocmVhZF9zdGFydCwgdGltZXIgKSA8IDApIHsKKyAgICAgICAgICAgIHRocl90aW1lcl90YWJsZV9mcmVlKCBfX3RpbWVyX3RhYmxlLCB0aW1lciApOworICAgICAgICAgICAgZXJybm8gPSBFTk9NRU07CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICAqcHRpbWVyaWQgPSB0aW1lci0+aWQ7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworCitpbnQKK3RpbWVyX2RlbGV0ZSggdGltZXJfdCAgaWQgKQoreworICAgIGlmICggX19saWtlbHkoIVRJTUVSX0lEX0lTX1dSQVBQRUQoaWQpKSApCisgICAgICAgIHJldHVybiBfX3RpbWVyX2RlbGV0ZSggaWQgKTsKKyAgICBlbHNlCisgICAgeworICAgICAgICB0aHJfdGltZXJfdGFibGVfdCogIHRhYmxlID0gX190aW1lcl90YWJsZV9nZXQoKTsKKyAgICAgICAgdGhyX3RpbWVyX3QqICAgICAgICB0aW1lciA9IHRocl90aW1lcl90YWJsZV9mcm9tX2lkKHRhYmxlLCBpZCwgMSk7CisKKyAgICAgICAgaWYgKHRpbWVyID09IE5VTEwpIHsKKyAgICAgICAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgLyogdGVsbCB0aGUgdGltZXIncyB0aHJlYWQgdG8gc3RvcCAqLworICAgICAgICB0aHJfdGltZXJfbG9jayh0aW1lcik7CisgICAgICAgIHRpbWVyLT5kb25lID0gMTsKKyAgICAgICAgcHRocmVhZF9jb25kX3NpZ25hbCggJnRpbWVyLT5jb25kICk7CisgICAgICAgIHRocl90aW1lcl91bmxvY2sodGltZXIpOworCisgICAgICAgIC8qIE5PVEU6IHRoZSB0aHJlYWQgd2lsbCBjYWxsIF9fdGltZXJfdGFibGVfZnJlZSgpIHRvIGZyZWUgdGhlCisgICAgICAgICAqIHRpbWVyIG9iamVjdC4gdGhlICcxJyBwYXJhbWV0ZXIgdG8gdGhyX3RpbWVyX3RhYmxlX2Zyb21faWQKKyAgICAgICAgICogYWJvdmUgZW5zdXJlZCB0aGF0IHRoZSBvYmplY3QgYW5kIGl0cyB0aW1lcl9pZCBjYW5ub3QgYmUKKyAgICAgICAgICogcmV1c2VkIGJlZm9yZSB0aGF0LgorICAgICAgICAgKi8KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCisvKiByZXR1cm4gdGhlIHJlbGF0aXZlIHRpbWUgdW50aWwgdGhlIG5leHQgZXhwaXJhdGlvbiwgb3IgMCBpZgorICogdGhlIHRpbWVyIGlzIGRpc2FybWVkICovCitzdGF0aWMgdm9pZAordGltZXJfZ2V0dGltZV9pbnRlcm5hbCggdGhyX3RpbWVyX3QqICAgICAgICB0aW1lciwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpdGltZXJzcGVjKiAgc3BlYykKK3sKKyAgICBzdHJ1Y3QgdGltZXNwZWMgIGRpZmY7CisKKyAgICBkaWZmID0gdGltZXItPmV4cGlyZXM7CisgICAgaWYgKCF0aW1lc3BlY19pc196ZXJvKCZkaWZmKSkgCisgICAgeworICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgIG5vdzsKKworICAgICAgICBjbG9ja19nZXR0aW1lKCB0aW1lci0+Y2xvY2ssICZub3cgKTsKKyAgICAgICAgdGltZXNwZWNfc3ViKCZkaWZmLCAmbm93KTsKKworICAgICAgICAvKiBpbiBjYXNlIG9mIG92ZXJydW4sIHJldHVybiAwICovCisgICAgICAgIGlmICh0aW1lc3BlY19jbXAwKCZkaWZmKSA8IDApIHsKKyAgICAgICAgICAgIHRpbWVzcGVjX3plcm8oJmRpZmYpOworICAgICAgICB9CisgICAgfQorCisgICAgc3BlYy0+aXRfdmFsdWUgICAgPSBkaWZmOworICAgIHNwZWMtPml0X2ludGVydmFsID0gdGltZXItPnBlcmlvZDsKK30KKworCitpbnQKK3RpbWVyX2dldHRpbWUoIHRpbWVyX3QgIGlkLCBzdHJ1Y3QgaXRpbWVyc3BlYyogIG9zcGVjICkKK3sKKyAgICBpZiAob3NwZWMgPT0gTlVMTCkgeworICAgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmICggX19saWtlbHkoIVRJTUVSX0lEX0lTX1dSQVBQRUQoaWQpKSApIHsKKyAgICAgICAgcmV0dXJuIF9fdGltZXJfZ2V0dGltZSggaWQsIG9zcGVjICk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGhyX3RpbWVyX3QqICB0aW1lciA9IHRocl90aW1lcl9mcm9tX2lkKGlkKTsKKworICAgICAgICBpZiAodGltZXIgPT0gTlVMTCkgeworICAgICAgICAgICAgZXJybm8gPSBFSU5WQUw7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgdGhyX3RpbWVyX2xvY2sodGltZXIpOworICAgICAgICB0aW1lcl9nZXR0aW1lX2ludGVybmFsKCB0aW1lciwgb3NwZWMgKTsKKyAgICAgICAgdGhyX3RpbWVyX3VubG9jayh0aW1lcik7CisgICAgfQorICAgIHJldHVybiAwOworfQorCisKK2ludAordGltZXJfc2V0dGltZSggdGltZXJfdCAgICAgICAgICAgICAgICAgICBpZCwKKyAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MsCisgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgaXRpbWVyc3BlYyogIHNwZWMsCisgICAgICAgICAgICAgICBzdHJ1Y3QgaXRpbWVyc3BlYyogICAgICAgIG9zcGVjICkKK3sKKyAgICBpZiAoc3BlYyA9PSBOVUxMKSB7CisgICAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKCBfX2xpa2VseSghVElNRVJfSURfSVNfV1JBUFBFRChpZCkpICkgeworICAgICAgICByZXR1cm4gX190aW1lcl9zZXR0aW1lKCBpZCwgZmxhZ3MsIHNwZWMsIG9zcGVjICk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGhyX3RpbWVyX3QqICAgICAgICB0aW1lciA9IHRocl90aW1lcl9mcm9tX2lkKGlkKTsKKyAgICAgICAgc3RydWN0IHRpbWVzcGVjICAgICBleHBpcmVzLCBub3c7CisKKyAgICAgICAgaWYgKHRpbWVyID09IE5VTEwpIHsKKyAgICAgICAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIHRocl90aW1lcl9sb2NrKHRpbWVyKTsKKworICAgICAgICAvKiByZXR1cm4gY3VycmVudCB0aW1lciB2YWx1ZSBpZiBvc3BlYyBpc24ndCBOVUxMICovCisgICAgICAgIGlmIChvc3BlYyAhPSBOVUxMKSB7CisgICAgICAgICAgICB0aW1lcl9nZXR0aW1lX2ludGVybmFsKHRpbWVyLCBvc3BlYyApOworICAgICAgICB9CisKKyAgICAgICAgLyogY29tcHV0ZSBuZXh0IGV4cGlyYXRpb24gdGltZS4gbm90ZSB0aGF0IGlmIHRoZQorICAgICAgICAgKiBuZXcgaXRfaW50ZXJ2YWwgaXMgMCwgd2Ugc2hvdWxkIGRpc2FybSB0aGUgdGltZXIKKyAgICAgICAgICovCisgICAgICAgIGV4cGlyZXMgPSBzcGVjLT5pdF92YWx1ZTsKKyAgICAgICAgaWYgKCF0aW1lc3BlY19pc196ZXJvKCZleHBpcmVzKSkgeworICAgICAgICAgICAgY2xvY2tfZ2V0dGltZSggdGltZXItPmNsb2NrLCAmbm93ICk7CisgICAgICAgICAgICBpZiAoIShmbGFncyAmIFRJTUVSX0FCU1RJTUUpKSB7CisgICAgICAgICAgICAgICAgdGltZXNwZWNfYWRkKCZleHBpcmVzLCAmbm93KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKHRpbWVzcGVjX2NtcCgmZXhwaXJlcywgJm5vdykgPCAwKQorICAgICAgICAgICAgICAgICAgICBleHBpcmVzID0gbm93OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRpbWVyLT5leHBpcmVzID0gZXhwaXJlczsKKyAgICAgICAgdGltZXItPnBlcmlvZCAgPSBzcGVjLT5pdF9pbnRlcnZhbDsKKyAgICAgICAgdGhyX3RpbWVyX3VubG9jayggdGltZXIgKTsKKworICAgICAgICAvKiBzaWduYWwgdGhlIGNoYW5nZSB0byB0aGUgdGhyZWFkICovCisgICAgICAgIHB0aHJlYWRfY29uZF9zaWduYWwoICZ0aW1lci0+Y29uZCApOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworCitpbnQKK3RpbWVyX2dldG92ZXJydW4odGltZXJfdCAgaWQpCit7CisgICAgaWYgKCBfX2xpa2VseSghVElNRVJfSURfSVNfV1JBUFBFRChpZCkpICkgeworICAgICAgICByZXR1cm4gX190aW1lcl9nZXRvdmVycnVuKCBpZCApOworICAgIH0gZWxzZSB7CisgICAgICAgIHRocl90aW1lcl90KiAgdGltZXIgPSB0aHJfdGltZXJfZnJvbV9pZChpZCk7CisgICAgICAgIGludCAgICAgICAgICAgcmVzdWx0OworCisgICAgICAgIGlmICh0aW1lciA9PSBOVUxMKSB7CisgICAgICAgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIHRocl90aW1lcl9sb2NrKHRpbWVyKTsKKyAgICAgICAgcmVzdWx0ID0gdGltZXItPm92ZXJydW5zOworICAgICAgICB0aHJfdGltZXJfdW5sb2NrKHRpbWVyKTsKKworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KK30KKworCitzdGF0aWMgdm9pZCoKK3RpbWVyX3RocmVhZF9zdGFydCggdm9pZCogIF9hcmcgKQoreworICAgIHRocl90aW1lcl90KiAgdGltZXIgPSBfYXJnOworCisgICAgdGhyX3RpbWVyX2xvY2soIHRpbWVyICk7CisKKyAgICAvKiB3ZSBsb29wIHVudGlsIHRpbWVyLT5kb25lIGlzIHNldCBpbiB0aW1lcl9kZWxldGUoKSAqLworICAgIHdoaWxlICghdGltZXItPmRvbmUpIAorICAgIHsKKyAgICAgICAgc3RydWN0IHRpbWVzcGVjICAgZXhwaXJlcyA9IHRpbWVyLT5leHBpcmVzOworICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgICBwZXJpb2QgID0gdGltZXItPnBlcmlvZDsKKyAgICAgICAgc3RydWN0IHRpbWVzcGVjICAgbm93OworCisgICAgICAgIC8qIGlmIHRoZSB0aW1lciBpcyBzdG9wcGVkIG9yIGRpc2FybWVkLCB3YWl0IGluZGVmaW5pdGVseQorICAgICAgICAgKiBmb3IgYSBzdGF0ZSBjaGFuZ2UgZnJvbSB0aW1lcl9zZXR0aW1lL19kZWxldGUvX3N0YXJ0X3N0b3AKKyAgICAgICAgICovCisgICAgICAgIGlmICggdGltZXItPnN0b3BwZWQgfHwgdGltZXNwZWNfaXNfemVybygmZXhwaXJlcykgKQorICAgICAgICB7CisgICAgICAgICAgICBwdGhyZWFkX2NvbmRfd2FpdCggJnRpbWVyLT5jb25kLCAmdGltZXItPm11dGV4ICk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIG90aGVyd2lzZSwgd2UgbmVlZCB0byBkbyBhIHRpbWVkIHdhaXQgdW50aWwgZWl0aGVyIGEKKyAgICAgICAgKiBzdGF0ZSBjaGFuZ2Ugb2YgdGhlIHRpbWVyIGV4cGlyYXRpb24gdGltZS4KKyAgICAgICAgKi8KKyAgICAgICAgY2xvY2tfZ2V0dGltZSh0aW1lci0+Y2xvY2ssICZub3cpOworCisgICAgICAgIGlmICh0aW1lc3BlY19jbXAoICZleHBpcmVzLCAmbm93ICkgPiAwKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBjb29sLCB0aGVyZSB3YXMgbm8gb3ZlcnJ1biwgc28gY29tcHV0ZSB0aGUKKyAgICAgICAgICAgICAqIHJlbGF0aXZlIHRpbWVvdXQgYXMgJ2V4cGlyZXMgLSBub3cnLCB0aGVuIHdhaXQKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaW50ICAgICAgICAgICAgICByZXQ7CisgICAgICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgIGRpZmYgPSBleHBpcmVzOworICAgICAgICAgICAgdGltZXNwZWNfc3ViKCAmZGlmZiwgJm5vdyApOworCisgICAgICAgICAgICByZXQgPSBfX3B0aHJlYWRfY29uZF90aW1lZHdhaXRfcmVsYXRpdmUoCisgICAgICAgICAgICAgICAgICAgICAgICAmdGltZXItPmNvbmQsICZ0aW1lci0+bXV0ZXgsICZkaWZmKTsKKworICAgICAgICAgICAgLyogaWYgd2UgZGlkbid0IHRpbWVvdXQsIGl0IG1lYW5zIHRoYXQgYSBzdGF0ZSBjaGFuZ2UKKyAgICAgICAgICAgICAgICAqIG9jY3VyZWQsIHNvIHJlbG9vcCB0byB0YWtlIGNhcmUgb2YgaXQuCisgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmIChyZXQgIT0gRVRJTUVET1VUKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLyogb3ZlcnJ1biB3YXMgZGV0ZWN0ZWQgYmVmb3JlIHdlIGNvdWxkIHdhaXQgISAqLworICAgICAgICAgICAgaWYgKCF0aW1lc3BlY19pc196ZXJvKCAmcGVyaW9kICkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIGZvciBwZXJpb2RpYyB0aW1lcnMsIGNvbXB1dGUgdG90YWwgb3ZlcnJ1biBjb3VudCAqLworICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgdGltZXNwZWNfYWRkKCAmZXhwaXJlcywgJnBlcmlvZCApOworICAgICAgICAgICAgICAgICAgICBpZiAodGltZXItPm92ZXJydW5zIDwgREVMQVlUSU1FUl9NQVgpCisgICAgICAgICAgICAgICAgICAgICAgICB0aW1lci0+b3ZlcnJ1bnMgKz0gMTsKKyAgICAgICAgICAgICAgICB9IHdoaWxlICggdGltZXNwZWNfY21wKCAmZXhwaXJlcywgJm5vdyApIDwgMCApOworCisgICAgICAgICAgICAgICAgLyogYmFja3RyYWNrIHRoZSBsYXN0IG9uZSwgYmVjYXVzZSB3ZSdyZSBnb2luZyB0bworICAgICAgICAgICAgICAgICAqIGFkZCB0aGUgc2FtZSB2YWx1ZSBqdXN0IGEgYml0IGxhdGVyICovCisgICAgICAgICAgICAgICAgdGltZXNwZWNfc3ViKCAmZXhwaXJlcywgJnBlcmlvZCApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIGZvciBub24tcGVyaW9kaWMgdGltZXIsIHRoaW5ncyBhcmUgc2ltcGxlICovCisgICAgICAgICAgICAgICAgdGltZXItPm92ZXJydW5zID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qIGlmIHdlIGdldCB0aGVyZSwgYSB0aW1lb3V0IHdhcyBkZXRlY3RlZC4KKyAgICAgICAgICogZmlyc3QgcmVsb2FkL2Rpc2FybSB0aGUgdGltZXIgaGFzIG5lZWRlZAorICAgICAgICAgKi8KKyAgICAgICAgaWYgKCAhdGltZXNwZWNfaXNfemVybygmcGVyaW9kKSApIHsKKyAgICAgICAgICAgIHRpbWVzcGVjX2FkZCggJmV4cGlyZXMsICZwZXJpb2QgKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRpbWVzcGVjX3plcm8oICZleHBpcmVzICk7CisgICAgICAgIH0KKyAgICAgICAgdGltZXItPmV4cGlyZXMgPSBleHBpcmVzOworCisgICAgICAgIC8qIG5vdyBjYWxsIHRoZSB0aW1lciBjYWxsYmFjayBmdW5jdGlvbi4gcmVsZWFzZSB0aGUKKyAgICAgICAgICogbG9jayB0byBhbGxvdyB0aGUgZnVuY3Rpb24gdG8gbW9kaWZ5IHRoZSB0aW1lciBzZXR0aW5nCisgICAgICAgICAqIG9yIGNhbGwgdGltZXJfZ2V0b3ZlcnJ1bigpLgorICAgICAgICAgKgorICAgICAgICAgKiBOT1RFOiBhdCB0aGlzIHBvaW50IHdlIHRydXN0IHRoZSBjYWxsYmFjayBub3QgdG8gYmUgYQorICAgICAgICAgKiAgICAgICB0b3RhbCBtb3JvbiBhbmQgcHRocmVhZF9raWxsKCkgdGhlIHRpbWVyIHRocmVhZAorICAgICAgICAgKi8KKyAgICAgICAgdGhyX3RpbWVyX3VubG9jayh0aW1lcik7CisgICAgICAgIHRpbWVyLT5jYWxsYmFjayggdGltZXItPnZhbHVlICk7CisgICAgICAgIHRocl90aW1lcl9sb2NrKHRpbWVyKTsKKworICAgICAgICAvKiBub3cgY2xlYXIgdGhlIG92ZXJydW5zIGNvdW50ZXIuIGl0IG9ubHkgbWFrZXMgc2Vuc2UKKyAgICAgICAgICogd2l0aGluIHRoZSBjYWxsYmFjayAqLworICAgICAgICB0aW1lci0+b3ZlcnJ1bnMgPSAwOworICAgIH0KKworICAgIHRocl90aW1lcl91bmxvY2soIHRpbWVyICk7CisKKyAgICAvKiBmcmVlIHRoZSB0aW1lciBvYmplY3Qgbm93LiB0aGVyZSBpcyBubyBuZWVkIHRvIGNhbGwKKyAgICAgKiBfX3RpbWVyX3RhYmxlX2dldCgpIHNpbmNlIHdlJ3JlIGd1YXJhbnRlZWQgdGhhdCBfX3RpbWVyX3RhYmxlCisgICAgICogaXMgaW5pdGlhbGl6ZWQgaW4gdGhpcyB0aHJlYWQKKyAgICAgKi8KKyAgICB0aHJfdGltZXJfdGFibGVfZnJlZShfX3RpbWVyX3RhYmxlLCB0aW1lcik7CisKKyAgICByZXR1cm4gTlVMTDsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3B0aHJlYWQuYyBiL2xpYmMvYmlvbmljL3B0aHJlYWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzNjNDU5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvcHRocmVhZC5jCkBAIC0wLDAgKzEsMTU4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzeXMvYXRvbWljcy5oPgorI2luY2x1ZGUgPGJpb25pY190bHMuaD4KKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSAicHRocmVhZF9pbnRlcm5hbC5oIgorI2luY2x1ZGUgInRocmVhZF9wcml2YXRlLmgiCisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8bWVtb3J5Lmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8bWFsbG9jLmg+CisKK2V4dGVybiBpbnQgIF9fcHRocmVhZF9jbG9uZShpbnQgKCpmbikodm9pZCopLCB2b2lkICpjaGlsZF9zdGFjaywgaW50IGZsYWdzLCB2b2lkICphcmcpOworZXh0ZXJuIHZvaWQgX2V4aXRfd2l0aF9zdGFja190ZWFyZG93bih2b2lkICogc3RhY2tCYXNlLCBpbnQgc3RhY2tTaXplLCBpbnQgcmV0Q29kZSk7CitleHRlcm4gdm9pZCBfZXhpdF90aHJlYWQoaW50ICByZXRDb2RlKTsKK2V4dGVybiBpbnQgIF9fc2V0X2Vycm5vKGludCk7CisKK3ZvaWQgX3RocmVhZF9jcmVhdGVkX2hvb2socGlkX3QgdGhyZWFkX2lkKSBfX2F0dHJpYnV0ZV9fKChub2lubGluZSkpOworCisjZGVmaW5lIFBUSFJFQURfQVRUUl9GTEFHX0RFVEFDSEVEICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBQVEhSRUFEX0FUVFJfRkxBR19VU0VSX1NUQUNLICAgIDB4MDAwMDAwMDIKKworI2RlZmluZSBERUZBVUxUX1NUQUNLU0laRSAoMTAyNCAqIDEwMjQpCisjZGVmaW5lIFNUQUNLQkFTRSAweDEwMDAwMDAwCisKK3N0YXRpYyB1aW50OF90ICogZ1N0YWNrQmFzZSA9ICh1aW50OF90ICopU1RBQ0tCQVNFOworCitzdGF0aWMgcHRocmVhZF9tdXRleF90IG1tYXBfbG9jayA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7CisKKworc3RhdGljIGNvbnN0IHB0aHJlYWRfYXR0cl90IGdEZWZhdWx0UHRocmVhZEF0dHIgPSB7CisgICAgLmZsYWdzID0gMCwKKyAgICAuc3RhY2tfYmFzZSA9IE5VTEwsCisgICAgLnN0YWNrX3NpemUgPSBERUZBVUxUX1NUQUNLU0laRSwKKyAgICAuZ3VhcmRfc2l6ZSA9IFBBR0VfU0laRSwKKyAgICAuc2NoZWRfcG9saWN5ID0gU0NIRURfTk9STUFMLAorICAgIC5zY2hlZF9wcmlvcml0eSA9IDAKK307CisKKyNkZWZpbmUgIElOSVRfVEhSRUFEUyAgMQorCitzdGF0aWMgcHRocmVhZF9pbnRlcm5hbF90KiAgZ1RocmVhZExpc3QgPSBOVUxMOworc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBnVGhyZWFkTGlzdExvY2sgPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOworc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBnRGVidWdnZXJOb3RpZmljYXRpb25Mb2NrID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKKworCisvKiB3ZSBzaW1wbHkgbWFsbG9jL2ZyZWUgdGhlIGludGVybmFsIHB0aHJlYWRfaW50ZXJuYWxfdCBzdHJ1Y3R1cmVzLiB3ZSBtYXkKKyAqIHdhbnQgdG8gdXNlIGEgZGlmZmVyZW50IGFsbG9jYXRpb24gc2NoZW1lIGluIHRoZSBmdXR1cmUsIGJ1dCB0aGlzIG9uZSBzaG91bGQKKyAqIGJlIGxhcmdlbHkgZW5vdWdoCisgKi8KK3N0YXRpYyBwdGhyZWFkX2ludGVybmFsX3QqCitfcHRocmVhZF9pbnRlcm5hbF9hbGxvYyh2b2lkKQoreworICAgIHB0aHJlYWRfaW50ZXJuYWxfdCogICB0aHJlYWQ7CisKKyAgICB0aHJlYWQgPSBjYWxsb2MoIHNpemVvZigqdGhyZWFkKSwgMSApOworICAgIGlmICh0aHJlYWQpCisgICAgICAgIHRocmVhZC0+aW50ZXJuID0gMTsKKworICAgIHJldHVybiB0aHJlYWQ7Cit9CisKK3N0YXRpYyB2b2lkCitfcHRocmVhZF9pbnRlcm5hbF9mcmVlKCBwdGhyZWFkX2ludGVybmFsX3QqICB0aHJlYWQgKQoreworICAgIGlmICh0aHJlYWQgJiYgdGhyZWFkLT5pbnRlcm4pIHsKKyAgICAgICAgdGhyZWFkLT5pbnRlcm4gPSAwOyAgLyoganVzdCBpbiBjYXNlICovCisgICAgICAgIGZyZWUgKHRocmVhZCk7CisgICAgfQorfQorCisKK3N0YXRpYyB2b2lkCitfcHRocmVhZF9pbnRlcm5hbF9yZW1vdmVfbG9ja2VkKCBwdGhyZWFkX2ludGVybmFsX3QqICB0aHJlYWQgKQoreworICAgIHRocmVhZC0+bmV4dC0+cHJlZiA9IHRocmVhZC0+cHJlZjsKKyAgICB0aHJlYWQtPnByZWZbMF0gICAgPSB0aHJlYWQtPm5leHQ7Cit9CisKK3N0YXRpYyB2b2lkCitfcHRocmVhZF9pbnRlcm5hbF9yZW1vdmUoIHB0aHJlYWRfaW50ZXJuYWxfdCogIHRocmVhZCApCit7CisgICAgcHRocmVhZF9tdXRleF9sb2NrKCZnVGhyZWFkTGlzdExvY2spOworICAgIF9wdGhyZWFkX2ludGVybmFsX3JlbW92ZV9sb2NrZWQodGhyZWFkKTsKKyAgICBwdGhyZWFkX211dGV4X3VubG9jaygmZ1RocmVhZExpc3RMb2NrKTsKK30KKworc3RhdGljIHZvaWQKK19wdGhyZWFkX2ludGVybmFsX2FkZCggcHRocmVhZF9pbnRlcm5hbF90KiAgdGhyZWFkICkKK3sKKyAgICBwdGhyZWFkX211dGV4X2xvY2soJmdUaHJlYWRMaXN0TG9jayk7CisgICAgdGhyZWFkLT5wcmVmID0gJmdUaHJlYWRMaXN0OworICAgIHRocmVhZC0+bmV4dCA9IHRocmVhZC0+cHJlZlswXTsKKyAgICBpZiAodGhyZWFkLT5uZXh0KQorICAgICAgICB0aHJlYWQtPm5leHQtPnByZWYgPSAmdGhyZWFkLT5uZXh0OworICAgIHRocmVhZC0+cHJlZlswXSA9IHRocmVhZDsKKyAgICBwdGhyZWFkX211dGV4X3VubG9jaygmZ1RocmVhZExpc3RMb2NrKTsKK30KKworcHRocmVhZF9pbnRlcm5hbF90KgorX19nZXRfdGhyZWFkKHZvaWQpCit7CisgICAgdm9pZCoqICB0bHMgPSAodm9pZCoqKV9fZ2V0X3RscygpOworCisgICAgcmV0dXJuICAocHRocmVhZF9pbnRlcm5hbF90KikgdGxzW1RMU19TTE9UX1RIUkVBRF9JRF07Cit9CisKKwordm9pZCoKK19fZ2V0X3N0YWNrX2Jhc2UoaW50ICAqcF9zdGFja19zaXplKQoreworICAgIHB0aHJlYWRfaW50ZXJuYWxfdCogIHRocmVhZCA9IF9fZ2V0X3RocmVhZCgpOworCisgICAgKnBfc3RhY2tfc2l6ZSA9IHRocmVhZC0+YXR0ci5zdGFja19zaXplOworICAgIHJldHVybiB0aHJlYWQtPmF0dHIuc3RhY2tfYmFzZTsKK30KKworCit2b2lkICBfX2luaXRfdGxzKHZvaWQqKiAgdGxzLCB2b2lkKiAgdGhyZWFkKQoreworICAgIGludCAgbm47CisKKyAgICAoKHB0aHJlYWRfaW50ZXJuYWxfdCopdGhyZWFkKS0+dGxzID0gdGxzOworCisgICAgLy8gc2xvdCAwIG11c3QgcG9pbnQgdG8gdGhlIHRscyBhcmVhLCB0aGlzIGlzIHJlcXVpcmVkIGJ5IHRoZSBpbXBsZW1lbnRhdGlvbgorICAgIC8vIG9mIHRoZSB4ODYgTGludXgga2VybmVsIHRocmVhZC1sb2NhbC1zdG9yYWdlCisgICAgdGxzW1RMU19TTE9UX1NFTEZdICAgICAgPSAodm9pZCopdGxzOworICAgIHRsc1tUTFNfU0xPVF9USFJFQURfSURdID0gdGhyZWFkOworICAgIGZvciAobm4gPSBUTFNfU0xPVF9FUlJOTzsgbm4gPCBCSU9OSUNfVExTX1NMT1RTOyBubisrKQorICAgICAgIHRsc1tubl0gPSAwOworCisgICAgX19zZXRfdGxzKCAodm9pZCopdGxzICk7Cit9CisKKworLyoKKyAqIFRoaXMgdHJhbXBvbGluZSBpcyBjYWxsZWQgZnJvbSB0aGUgYXNzZW1ibHkgY2xvbmUoKSBmdW5jdGlvbgorICovCit2b2lkIF9fdGhyZWFkX2VudHJ5KGludCAoKmZ1bmMpKHZvaWQqKSwgdm9pZCAqYXJnLCB2b2lkICoqdGxzKQoreworICAgIGludCByZXRWYWx1ZTsKKyAgICBwdGhyZWFkX2ludGVybmFsX3QgKiB0aHJJbmZvOworCisgICAgLy8gV2FpdCBmb3Igb3VyIGNyZWF0aW5nIHRocmVhZCB0byByZWxlYXNlIHVzLiBUaGlzIGxldHMgaXQgaGF2ZSB0aW1lIHRvCisgICAgLy8gbm90aWZ5IGdkYiBhYm91dCB0aGlzIHRocmVhZCBiZWZvcmUgaXQgc3RhcnRzIGRvaW5nIGFueXRoaW5nLgorICAgIHB0aHJlYWRfbXV0ZXhfdCAqIHN0YXJ0X211dGV4ID0gKHB0aHJlYWRfbXV0ZXhfdCAqKSZ0bHNbVExTX1NMT1RfU0VMRl07CisgICAgcHRocmVhZF9tdXRleF9sb2NrKHN0YXJ0X211dGV4KTsKKyAgICBwdGhyZWFkX211dGV4X2Rlc3Ryb3koc3RhcnRfbXV0ZXgpOworCisgICAgdGhySW5mbyA9IChwdGhyZWFkX2ludGVybmFsX3QgKikgdGxzW1RMU19TTE9UX1RIUkVBRF9JRF07CisKKyAgICBfX2luaXRfdGxzKCB0bHMsIHRockluZm8gKTsKKworICAgIHB0aHJlYWRfZXhpdCggKHZvaWQqKWZ1bmMoYXJnKSApOworfQorCit2b2lkIF9pbml0X3RocmVhZChwdGhyZWFkX2ludGVybmFsX3QgKiB0aHJlYWQsIHBpZF90IGtlcm5lbF9pZCwgcHRocmVhZF9hdHRyX3QgKiBhdHRyLCB2b2lkICogc3RhY2tfYmFzZSkKK3sKKyAgICBpZiAoYXR0ciA9PSBOVUxMKSB7CisgICAgICAgIHRocmVhZC0+YXR0ciA9IGdEZWZhdWx0UHRocmVhZEF0dHI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGhyZWFkLT5hdHRyID0gKmF0dHI7CisgICAgfQorICAgIHRocmVhZC0+YXR0ci5zdGFja19iYXNlID0gc3RhY2tfYmFzZTsKKyAgICB0aHJlYWQtPmtlcm5lbF9pZCAgICAgICA9IGtlcm5lbF9pZDsKKworICAgIC8vIHNldCB0aGUgc2NoZWR1bGluZyBwb2xpY3kvcHJpb3JpdHkgb2YgdGhlIHRocmVhZAorICAgIGlmICh0aHJlYWQtPmF0dHIuc2NoZWRfcG9saWN5ICE9IFNDSEVEX05PUk1BTCkgeworICAgICAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gcGFyYW07CisgICAgICAgIHBhcmFtLnNjaGVkX3ByaW9yaXR5ID0gdGhyZWFkLT5hdHRyLnNjaGVkX3ByaW9yaXR5OworICAgICAgICBzY2hlZF9zZXRzY2hlZHVsZXIoa2VybmVsX2lkLCB0aHJlYWQtPmF0dHIuc2NoZWRfcG9saWN5LCAmcGFyYW0pOworICAgIH0KKworICAgIHB0aHJlYWRfY29uZF9pbml0KCZ0aHJlYWQtPmpvaW5fY29uZCwgTlVMTCk7CisgICAgdGhyZWFkLT5qb2luX2NvdW50ID0gMDsKKworICAgIHRocmVhZC0+Y2xlYW51cF9zdGFjayA9IE5VTEw7CisKKyAgICBfcHRocmVhZF9pbnRlcm5hbF9hZGQodGhyZWFkKTsKK30KKworCisvKiBYWFggc3RhY2tzIG5vdCByZWNsYWltZWQgaWYgdGhyZWFkIHNwYXduIGZhaWxzICovCisvKiBYWFggc3RhY2tzIGFkZHJlc3Mgc3BhY2VzIHNob3VsZCBiZSByZXVzZWQgaWYgYXZhaWxhYmxlIGFnYWluICovCisKK3N0YXRpYyB2b2lkICpta3N0YWNrKHNpemVfdCBzaXplLCBzaXplX3QgZ3VhcmRfc2l6ZSkKK3sKKyAgICB2b2lkICogc3RhY2s7CisKKyAgICBwdGhyZWFkX211dGV4X2xvY2soJm1tYXBfbG9jayk7CisKKyAgICBzdGFjayA9IG1tYXAoKHZvaWQgKilnU3RhY2tCYXNlLCBzaXplLAorICAgICAgICAgICAgICAgICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAorICAgICAgICAgICAgICAgICBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMgfCBNQVBfTk9SRVNFUlZFLAorICAgICAgICAgICAgICAgICAtMSwgMCk7CisKKyAgICBpZihzdGFjayA9PSBNQVBfRkFJTEVEKSB7CisgICAgICAgIHN0YWNrID0gTlVMTDsKKyAgICAgICAgZ290byBkb25lOworICAgIH0KKworICAgIGlmKG1wcm90ZWN0KHN0YWNrLCBndWFyZF9zaXplLCBQUk9UX05PTkUpKXsKKyAgICAgICAgbXVubWFwKHN0YWNrLCBzaXplKTsKKyAgICAgICAgc3RhY2sgPSBOVUxMOworICAgICAgICBnb3RvIGRvbmU7CisgICAgfQorCitkb25lOgorICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZtbWFwX2xvY2spOworICAgIHJldHVybiBzdGFjazsKK30KKworLyoKKyAqIENyZWF0ZSBhIG5ldyB0aHJlYWQuIFRoZSB0aHJlYWQncyBzdGFjayBpcyBsYXllZCBvdXQgbGlrZSBzbzoKKyAqCisgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICogfCAgICAgcHRocmVhZF9pbnRlcm5hbF90ICAgIHwKKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogfCAgICAgICAgICBUTFMgYXJlYSAgICAgICAgIHwKKyAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqIC4gICAgICAgICAgICAgICAgICAgICAgICAgICAuCisgKiAuICAgICAgICAgc3RhY2sgYXJlYSAgICAgICAgLgorICogLiAgICAgICAgICAgICAgICAgICAgICAgICAgIC4KKyAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICogfCAgICAgICAgIGd1YXJkIHBhZ2UgICAgICAgIHwKKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKgorICogIG5vdGUgdGhhdCBUTFNbMF0gbXVzdCBiZSBhIHBvaW50ZXIgdG8gaXRzZWxmLCB0aGlzIGlzIHJlcXVpcmVkCisgKiAgYnkgdGhlIHRocmVhZC1sb2NhbCBzdG9yYWdlIGltcGxlbWVudGF0aW9uIG9mIHRoZSB4ODYgTGludXgKKyAqICBrZXJuZWwsIHdoZXJlIHRoZSBUTFMgcG9pbnRlciBpcyByZWFkIGJ5IHJlYWRpbmcgZnM6WzBdCisgKi8KK2ludCBwdGhyZWFkX2NyZWF0ZShwdGhyZWFkX3QgKnRocmVhZF9vdXQsIHB0aHJlYWRfYXR0cl90IGNvbnN0ICogYXR0ciwKKyAgICAgICAgICAgICAgICAgICB2b2lkICooKnN0YXJ0X3JvdXRpbmUpKHZvaWQgKiksIHZvaWQgKiBhcmcpCit7CisgICAgY2hhciogICBzdGFjazsKKyAgICB2b2lkKiogIHRsczsKKyAgICBpbnQgdGlkOworICAgIHB0aHJlYWRfbXV0ZXhfdCAqIHN0YXJ0X211dGV4OworICAgIHB0aHJlYWRfaW50ZXJuYWxfdCAqIHRocmVhZDsKKyAgICBpbnQgICAgICAgICAgICAgICAgICBtYWRlc3RhY2sgPSAwOworICAgIGludCAgICAgb2xkX2Vycm5vID0gZXJybm87CisKKyAgICAvKiB0aGlzIHdpbGwgaW5mb3JtIHRoZSByZXN0IG9mIHRoZSBDIGxpYnJhcnkgdGhhdCBhdCBsZWFzdCBvbmUgdGhyZWFkCisgICAgICogd2FzIGNyZWF0ZWQuIHRoaXMgd2lsbCBlbmZvcmNlIGNlcnRhaW4gZnVuY3Rpb25zIHRvIGFjcXVpcmUvcmVsZWFzZQorICAgICAqIGxvY2tzIChlLmcuIGF0ZXhpdCgpKSB0byBwcm90ZWN0IHNoYXJlZCBnbG9iYWwgc3RydWN0dXJlcy4KKyAgICAgKgorICAgICAqIHRoaXMgd29ya3MgYmVjYXVzZSBwdGhyZWFkX2NyZWF0ZSgpIGlzIG5vdCBjYWxsZWQgYnkgdGhlIEMgbGlicmFyeQorICAgICAqIGluaXRpYWxpemF0aW9uIHJvdXRpbmUgdGhhdCBzZXRzIHVwIHRoZSBtYWluIHRocmVhZCdzIGRhdGEgc3RydWN0dXJlcy4KKyAgICAgKi8KKyAgICBfX2lzdGhyZWFkZWQgPSAxOworCisgICAgdGhyZWFkID0gX3B0aHJlYWRfaW50ZXJuYWxfYWxsb2MoKTsKKyAgICBpZiAodGhyZWFkID09IE5VTEwpCisgICAgICAgIHJldHVybiBFTk9NRU07CisKKyAgICBpZiAoYXR0ciA9PSBOVUxMKSB7CisgICAgICAgIGF0dHIgPSAmZ0RlZmF1bHRQdGhyZWFkQXR0cjsKKyAgICB9CisKKyAgICAvLyBtYWtlIHN1cmUgdGhlIHN0YWNrIGlzIFBBR0VfU0laRSBhbGlnbmVkCisgICAgc2l6ZV90IHN0YWNrU2l6ZSA9IChhdHRyLT5zdGFja19zaXplICsKKyAgICAgICAgICAgICAgICAgICAgICAgIChQQUdFX1NJWkUtMSkpICYgfihQQUdFX1NJWkUtMSk7CisKKyAgICBpZiAoIWF0dHItPnN0YWNrX2Jhc2UpIHsKKyAgICAgICAgc3RhY2sgPSBta3N0YWNrKHN0YWNrU2l6ZSwgYXR0ci0+Z3VhcmRfc2l6ZSk7CisgICAgICAgIGlmKHN0YWNrID09IE5VTEwpIHsKKyAgICAgICAgICAgIF9wdGhyZWFkX2ludGVybmFsX2ZyZWUodGhyZWFkKTsKKyAgICAgICAgICAgIHJldHVybiBFTk9NRU07CisgICAgICAgIH0KKyAgICAgICAgbWFkZXN0YWNrID0gMTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGFjayA9IGF0dHItPnN0YWNrX2Jhc2U7CisgICAgfQorCisgICAgLy8gTWFrZSByb29tIGZvciBUTFMKKyAgICB0bHMgPSAodm9pZCoqKShzdGFjayArIHN0YWNrU2l6ZSAtIEJJT05JQ19UTFNfU0xPVFMqc2l6ZW9mKHZvaWQqKSk7CisKKyAgICAvLyBDcmVhdGUgYSBtdXRleCBmb3IgdGhlIHRocmVhZCBpbiBUTFNfU0xPVF9TRUxGIHRvIHdhaXQgb24gb25jZSBpdCBzdGFydHMgc28gd2UgY2FuIGtlZXAKKyAgICAvLyBpdCBmcm9tIGRvaW5nIGFueXRoaW5nIHVudGlsIGFmdGVyIHdlIG5vdGlmeSB0aGUgZGVidWdnZXIgYWJvdXQgaXQKKyAgICBzdGFydF9tdXRleCA9IChwdGhyZWFkX211dGV4X3QgKikgJnRsc1tUTFNfU0xPVF9TRUxGXTsKKyAgICBwdGhyZWFkX211dGV4X2luaXQoc3RhcnRfbXV0ZXgsIE5VTEwpOworICAgIHB0aHJlYWRfbXV0ZXhfbG9jayhzdGFydF9tdXRleCk7CisKKyAgICB0bHNbVExTX1NMT1RfVEhSRUFEX0lEXSA9IHRocmVhZDsKKworICAgIHRpZCA9IF9fcHRocmVhZF9jbG9uZSgoaW50KCopKHZvaWQqKSlzdGFydF9yb3V0aW5lLCB0bHMsCisgICAgICAgICAgICAgICAgQ0xPTkVfRklMRVMgfCBDTE9ORV9GUyB8IENMT05FX1ZNIHwgQ0xPTkVfU0lHSEFORAorICAgICAgICAgICAgICAgIHwgQ0xPTkVfVEhSRUFEIHwgQ0xPTkVfU1lTVlNFTSB8IENMT05FX0RFVEFDSEVELAorICAgICAgICAgICAgICAgIGFyZyk7CisKKyAgICBpZih0aWQgPCAwKSB7CisgICAgICAgIGludCAgcmVzdWx0OworICAgICAgICBpZiAobWFkZXN0YWNrKQorICAgICAgICAgICAgbXVubWFwKHN0YWNrLCBzdGFja1NpemUpOworICAgICAgICBfcHRocmVhZF9pbnRlcm5hbF9mcmVlKHRocmVhZCk7CisgICAgICAgIHJlc3VsdCA9IGVycm5vOworICAgICAgICBlcnJubyA9IG9sZF9lcnJubzsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBfaW5pdF90aHJlYWQodGhyZWFkLCB0aWQsIChwdGhyZWFkX2F0dHJfdCopYXR0ciwgc3RhY2spOworCisgICAgaWYgKCFtYWRlc3RhY2spCisgICAgICAgIHRocmVhZC0+YXR0ci5mbGFncyB8PSBQVEhSRUFEX0FUVFJfRkxBR19VU0VSX1NUQUNLOworCisgICAgLy8gTm90aWZ5IGFueSBkZWJ1Z2dlcnMgYWJvdXQgdGhlIG5ldyB0aHJlYWQKKyAgICBwdGhyZWFkX211dGV4X2xvY2soJmdEZWJ1Z2dlck5vdGlmaWNhdGlvbkxvY2spOworICAgIF90aHJlYWRfY3JlYXRlZF9ob29rKHRpZCk7CisgICAgcHRocmVhZF9tdXRleF91bmxvY2soJmdEZWJ1Z2dlck5vdGlmaWNhdGlvbkxvY2spOworCisgICAgLy8gTGV0IHRoZSB0aHJlYWQgZG8gaXQncyB0aGluZworICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKHN0YXJ0X211dGV4KTsKKworICAgICp0aHJlYWRfb3V0ID0gKHB0aHJlYWRfdCl0aHJlYWQ7CisgICAgcmV0dXJuIDA7Cit9CisKKworaW50IHB0aHJlYWRfYXR0cl9pbml0KHB0aHJlYWRfYXR0cl90ICogYXR0cikKK3sKKyAgICAqYXR0ciA9IGdEZWZhdWx0UHRocmVhZEF0dHI7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBwdGhyZWFkX2F0dHJfZGVzdHJveShwdGhyZWFkX2F0dHJfdCAqIGF0dHIpCit7CisgICAgbWVtc2V0KGF0dHIsIDB4NDIsIHNpemVvZihwdGhyZWFkX2F0dHJfdCkpOworICAgIHJldHVybiAwOworfQorCitpbnQgcHRocmVhZF9hdHRyX3NldGRldGFjaHN0YXRlKHB0aHJlYWRfYXR0cl90ICogYXR0ciwgaW50IHN0YXRlKQoreworICAgIGlmIChzdGF0ZSA9PSBQVEhSRUFEX0NSRUFURV9ERVRBQ0hFRCkgeworICAgICAgICBhdHRyLT5mbGFncyB8PSBQVEhSRUFEX0FUVFJfRkxBR19ERVRBQ0hFRDsKKyAgICB9IGVsc2UgaWYgKHN0YXRlID09IFBUSFJFQURfQ1JFQVRFX0pPSU5BQkxFKSB7CisgICAgICAgIGF0dHItPmZsYWdzICY9IH5QVEhSRUFEX0FUVFJfRkxBR19ERVRBQ0hFRDsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gRUlOVkFMOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworaW50IHB0aHJlYWRfYXR0cl9nZXRkZXRhY2hzdGF0ZShwdGhyZWFkX2F0dHJfdCBjb25zdCAqIGF0dHIsIGludCAqIHN0YXRlKQoreworICAgICpzdGF0ZSA9IChhdHRyLT5mbGFncyAmIFBUSFJFQURfQVRUUl9GTEFHX0RFVEFDSEVEKQorICAgICAgICAgICA/IFBUSFJFQURfQ1JFQVRFX0RFVEFDSEVECisgICAgICAgICAgIDogUFRIUkVBRF9DUkVBVEVfSk9JTkFCTEU7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBwdGhyZWFkX2F0dHJfc2V0c2NoZWRwb2xpY3kocHRocmVhZF9hdHRyX3QgKiBhdHRyLCBpbnQgcG9saWN5KQoreworICAgIGF0dHItPnNjaGVkX3BvbGljeSA9IHBvbGljeTsKKyAgICByZXR1cm4gMDsKK30KKworaW50IHB0aHJlYWRfYXR0cl9nZXRzY2hlZHBvbGljeShwdGhyZWFkX2F0dHJfdCBjb25zdCAqIGF0dHIsIGludCAqIHBvbGljeSkKK3sKKyAgICAqcG9saWN5ID0gYXR0ci0+c2NoZWRfcG9saWN5OworICAgIHJldHVybiAwOworfQorCitpbnQgcHRocmVhZF9hdHRyX3NldHNjaGVkcGFyYW0ocHRocmVhZF9hdHRyX3QgKiBhdHRyLCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gY29uc3QgKiBwYXJhbSkKK3sKKyAgICBhdHRyLT5zY2hlZF9wcmlvcml0eSA9IHBhcmFtLT5zY2hlZF9wcmlvcml0eTsKKyAgICByZXR1cm4gMDsKK30KKworaW50IHB0aHJlYWRfYXR0cl9nZXRzY2hlZHBhcmFtKHB0aHJlYWRfYXR0cl90IGNvbnN0ICogYXR0ciwgc3RydWN0IHNjaGVkX3BhcmFtICogcGFyYW0pCit7CisgICAgcGFyYW0tPnNjaGVkX3ByaW9yaXR5ID0gYXR0ci0+c2NoZWRfcHJpb3JpdHk7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBwdGhyZWFkX2F0dHJfc2V0c3RhY2tzaXplKHB0aHJlYWRfYXR0cl90ICogYXR0ciwgc2l6ZV90IHN0YWNrX3NpemUpCit7CisgICAgaWYgKChzdGFja19zaXplICYgKFBBR0VfU0laRSAtIDEpIHx8IHN0YWNrX3NpemUgPCBQVEhSRUFEX1NUQUNLX01JTikpIHsKKyAgICAgICAgcmV0dXJuIEVJTlZBTDsKKyAgICB9CisgICAgYXR0ci0+c3RhY2tfc2l6ZSA9IHN0YWNrX3NpemU7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBwdGhyZWFkX2F0dHJfZ2V0c3RhY2tzaXplKHB0aHJlYWRfYXR0cl90IGNvbnN0ICogYXR0ciwgc2l6ZV90ICogc3RhY2tfc2l6ZSkKK3sKKyAgICAqc3RhY2tfc2l6ZSA9IGF0dHItPnN0YWNrX3NpemU7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBwdGhyZWFkX2F0dHJfc2V0c3RhY2thZGRyKHB0aHJlYWRfYXR0cl90ICogYXR0ciwgdm9pZCAqIHN0YWNrX2FkZHIpCit7CisjaWYgMQorICAgIC8vIEl0J3Mgbm90IGNsZWFyIGlmIHRoaXMgaXMgc2V0dGluZyB0aGUgdG9wIG9yIGJvdHRvbSBvZiB0aGUgc3RhY2ssIHNvIGRvbid0IGhhbmRsZSBpdCBmb3Igbm93LgorICAgIHJldHVybiBFTk9TWVM7CisjZWxzZQorICAgIGlmICgodWludDMyX3Qpc3RhY2tfYWRkciAmIChQQUdFX1NJWkUgLSAxKSkgeworICAgICAgICByZXR1cm4gRUlOVkFMOworICAgIH0KKyAgICBhdHRyLT5zdGFja19iYXNlID0gc3RhY2tfYWRkcjsKKyAgICByZXR1cm4gMDsKKyNlbmRpZgorfQorCitpbnQgcHRocmVhZF9hdHRyX2dldHN0YWNrYWRkcihwdGhyZWFkX2F0dHJfdCBjb25zdCAqIGF0dHIsIHZvaWQgKiogc3RhY2tfYWRkcikKK3sKKyAgICAqc3RhY2tfYWRkciA9IGF0dHItPnN0YWNrX2Jhc2UgKyBhdHRyLT5zdGFja19zaXplOworICAgIHJldHVybiAwOworfQorCitpbnQgcHRocmVhZF9hdHRyX3NldHN0YWNrKHB0aHJlYWRfYXR0cl90ICogYXR0ciwgdm9pZCAqIHN0YWNrX2Jhc2UsIHNpemVfdCBzdGFja19zaXplKQoreworICAgIGlmICgoc3RhY2tfc2l6ZSAmIChQQUdFX1NJWkUgLSAxKSB8fCBzdGFja19zaXplIDwgUFRIUkVBRF9TVEFDS19NSU4pKSB7CisgICAgICAgIHJldHVybiBFSU5WQUw7CisgICAgfQorICAgIGlmICgodWludDMyX3Qpc3RhY2tfYmFzZSAmIChQQUdFX1NJWkUgLSAxKSkgeworICAgICAgICByZXR1cm4gRUlOVkFMOworICAgIH0KKyAgICBhdHRyLT5zdGFja19iYXNlID0gc3RhY2tfYmFzZTsKKyAgICBhdHRyLT5zdGFja19zaXplID0gc3RhY2tfc2l6ZTsKKyAgICByZXR1cm4gMDsKK30KKworaW50IHB0aHJlYWRfYXR0cl9nZXRzdGFjayhwdGhyZWFkX2F0dHJfdCBjb25zdCAqIGF0dHIsIHZvaWQgKiogc3RhY2tfYmFzZSwgc2l6ZV90ICogc3RhY2tfc2l6ZSkKK3sKKyAgICAqc3RhY2tfYmFzZSA9IGF0dHItPnN0YWNrX2Jhc2U7CisgICAgKnN0YWNrX3NpemUgPSBhdHRyLT5zdGFja19zaXplOworICAgIHJldHVybiAwOworfQorCitpbnQgcHRocmVhZF9hdHRyX3NldGd1YXJkc2l6ZShwdGhyZWFkX2F0dHJfdCAqIGF0dHIsIHNpemVfdCBndWFyZF9zaXplKQoreworICAgIGlmIChndWFyZF9zaXplICYgKFBBR0VfU0laRSAtIDEpIHx8IGd1YXJkX3NpemUgPCBQQUdFX1NJWkUpIHsKKyAgICAgICAgcmV0dXJuIEVJTlZBTDsKKyAgICB9CisKKyAgICBhdHRyLT5ndWFyZF9zaXplID0gZ3VhcmRfc2l6ZTsKKyAgICByZXR1cm4gMDsKK30KKworaW50IHB0aHJlYWRfYXR0cl9nZXRndWFyZHNpemUocHRocmVhZF9hdHRyX3QgY29uc3QgKiBhdHRyLCBzaXplX3QgKiBndWFyZF9zaXplKQoreworICAgICpndWFyZF9zaXplID0gYXR0ci0+Z3VhcmRfc2l6ZTsKKyAgICByZXR1cm4gMDsKK30KKworaW50IHB0aHJlYWRfZ2V0YXR0cl9ucChwdGhyZWFkX3QgdGhpZCwgcHRocmVhZF9hdHRyX3QgKiBhdHRyKQoreworICAgIHB0aHJlYWRfaW50ZXJuYWxfdCAqIHRocmVhZCA9IChwdGhyZWFkX2ludGVybmFsX3QgKil0aGlkOworICAgICphdHRyID0gdGhyZWFkLT5hdHRyOworICAgIHJldHVybiAwOworfQorCitpbnQgcHRocmVhZF9hdHRyX3NldHNjb3BlKHB0aHJlYWRfYXR0cl90ICphdHRyLCBpbnQgIHNjb3BlKQoreworICAgIGlmIChzY29wZSA9PSBQVEhSRUFEX1NDT1BFX1NZU1RFTSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKHNjb3BlID09IFBUSFJFQURfU0NPUEVfUFJPQ0VTUykKKyAgICAgICAgcmV0dXJuIEVOT1RTVVA7CisKKyAgICByZXR1cm4gRUlOVkFMOworfQorCitpbnQgcHRocmVhZF9hdHRyX2dldHNjb3BlKHB0aHJlYWRfYXR0cl90IGNvbnN0ICphdHRyKQoreworICAgIHJldHVybiBQVEhSRUFEX1NDT1BFX1NZU1RFTTsKK30KKworCisvKiBDQVZFQVQ6IG91ciBpbXBsZW1lbnRhdGlvbiBvZiBwdGhyZWFkX2NsZWFudXBfcHVzaC9wb3AgZG9lc24ndCBzdXBwb3J0IEMrKyBleGNlcHRpb25zCisgKiAgICAgICAgIGFuZCB0aHJlYWQgY2FuY2VsYXRpb24KKyAqLworCit2b2lkIF9fcHRocmVhZF9jbGVhbnVwX3B1c2goIF9fcHRocmVhZF9jbGVhbnVwX3QqICAgICAgYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wdGhyZWFkX2NsZWFudXBfZnVuY190ICByb3V0aW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiAgICAgICAgICAgICAgICAgICAgIGFyZyApCit7CisgICAgcHRocmVhZF9pbnRlcm5hbF90KiAgdGhyZWFkID0gX19nZXRfdGhyZWFkKCk7CisKKyAgICBjLT5fX2NsZWFudXBfcm91dGluZSAgPSByb3V0aW5lOworICAgIGMtPl9fY2xlYW51cF9hcmcgICAgICA9IGFyZzsKKyAgICBjLT5fX2NsZWFudXBfcHJldiAgICAgPSB0aHJlYWQtPmNsZWFudXBfc3RhY2s7CisgICAgdGhyZWFkLT5jbGVhbnVwX3N0YWNrID0gYzsKK30KKwordm9pZCBfX3B0aHJlYWRfY2xlYW51cF9wb3AoIF9fcHRocmVhZF9jbGVhbnVwX3QqICBjLCBpbnQgIGV4ZWN1dGUgKQoreworICAgIHB0aHJlYWRfaW50ZXJuYWxfdCogIHRocmVhZCA9IF9fZ2V0X3RocmVhZCgpOworCisgICAgdGhyZWFkLT5jbGVhbnVwX3N0YWNrID0gYy0+X19jbGVhbnVwX3ByZXY7CisgICAgaWYgKGV4ZWN1dGUpCisgICAgICAgIGMtPl9fY2xlYW51cF9yb3V0aW5lKGMtPl9fY2xlYW51cF9hcmcpOworfQorCisvKiB1c2VkIGJ5IHB0aHJlYWRfZXhpdCgpIHRvIGNsZWFuIGFsbCBUTFMga2V5cyBvZiB0aGUgY3VycmVudCB0aHJlYWQgKi8KK3N0YXRpYyB2b2lkIHB0aHJlYWRfa2V5X2NsZWFuX2FsbCh2b2lkKTsKKwordm9pZCBwdGhyZWFkX2V4aXQodm9pZCAqIHJldHZhbCkKK3sKKyAgICBwdGhyZWFkX2ludGVybmFsX3QqICB0aHJlYWQgICAgID0gX19nZXRfdGhyZWFkKCk7CisgICAgdm9pZCogICAgICAgICAgICAgICAgc3RhY2tfYmFzZSA9IHRocmVhZC0+YXR0ci5zdGFja19iYXNlOworICAgIGludCAgICAgICAgICAgICAgICAgIHN0YWNrX3NpemUgPSB0aHJlYWQtPmF0dHIuc3RhY2tfc2l6ZTsKKyAgICBpbnQgICAgICAgICAgICAgICAgICB1c2VyX3N0YWNrID0gKHRocmVhZC0+YXR0ci5mbGFncyAmIFBUSFJFQURfQVRUUl9GTEFHX1VTRVJfU1RBQ0spICE9IDA7CisKKyAgICAvLyBjYWxsIHRoZSBjbGVhbnVwIGhhbmRsZXJzIGZpcnN0CisgICAgd2hpbGUgKHRocmVhZC0+Y2xlYW51cF9zdGFjaykgeworICAgICAgICBfX3B0aHJlYWRfY2xlYW51cF90KiAgYyA9IHRocmVhZC0+Y2xlYW51cF9zdGFjazsKKyAgICAgICAgdGhyZWFkLT5jbGVhbnVwX3N0YWNrICAgPSBjLT5fX2NsZWFudXBfcHJldjsKKyAgICAgICAgYy0+X19jbGVhbnVwX3JvdXRpbmUoYy0+X19jbGVhbnVwX2FyZyk7CisgICAgfQorCisgICAgLy8gY2FsbCB0aGUgVExTIGRlc3RydWN0b3JzLCBpdCBpcyBpbXBvcnRhbnQgdG8gZG8gdGhhdCBiZWZvcmUgcmVtb3ZpbmcgdGhpcworICAgIC8vIHRocmVhZCBmcm9tIHRoZSBnbG9iYWwgbGlzdC4gdGhpcyB3aWxsIGVuc3VyZSB0aGF0IGlmIHNvbWVvbmUgZWxzZSBkZWxldGVzCisgICAgLy8gYSBUTFMga2V5LCB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZSB3aWxsIGJlIHNldCB0byBOVUxMIGluIHRoaXMgdGhyZWFkJ3MgVExTCisgICAgLy8gc3BhY2UgKHNlZSBwdGhyZWFkX2tleV9kZWxldGUpCisgICAgcHRocmVhZF9rZXlfY2xlYW5fYWxsKCk7CisKKyAgICAvLyBpZiB0aGUgdGhyZWFkIGlzIGRldGFjaGVkLCBkZXN0cm95IHRoZSBwdGhyZWFkX2ludGVybmFsX3QKKyAgICAvLyBvdGhlcndpc2UsIGtlZXAgaXQgaW4gbWVtb3J5IGFuZCBzaWduYWwgYW55IGpvaW5lcnMKKyAgICBpZiAodGhyZWFkLT5hdHRyLmZsYWdzICYgUFRIUkVBRF9BVFRSX0ZMQUdfREVUQUNIRUQpIHsKKyAgICAgICAgX3B0aHJlYWRfaW50ZXJuYWxfcmVtb3ZlKHRocmVhZCk7CisgICAgICAgIF9wdGhyZWFkX2ludGVybmFsX2ZyZWUodGhyZWFkKTsKKyAgICB9IGVsc2UgeworICAgICAgIC8qIHRoZSBqb2luX2NvdW50IGZpZWxkIGlzIHVzZWQgdG8gc3RvcmUgdGhlIG51bWJlciBvZiB0aHJlYWRzIHdhaXRpbmcgZm9yCisgICAgICAgICogdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgdGhyZWFkIHdpdGggcHRocmVhZF9qb2luKCksCisgICAgICAgICoKKyAgICAgICAgKiBpZiBpdCBpcyBwb3NpdGl2ZSB3ZSBuZWVkIHRvIHNpZ25hbCB0aGUgd2FpdGVycywgYW5kIHdlIGRvIG5vdCB0b3VjaAorICAgICAgICAqIHRoZSBjb3VudCAoaXQgd2lsbCBiZSBkZWNyZW1lbnRlZCBieSB0aGUgd2FpdGVycywgdGhlIGxhc3Qgb25lIHdpbGwKKyAgICAgICAgKiBhbHNvIHJlbW92ZS9mcmVlIHRoZSB0aHJlYWQgc3RydWN0dXJlCisgICAgICAgICoKKyAgICAgICAgKiBpZiBpdCBpcyB6ZXJvLCB3ZSBzZXQgdGhlIGNvdW50IHZhbHVlIHRvIC0xIHRvIGluZGljYXRlIHRoYXQgdGhlCisgICAgICAgICogdGhyZWFkIGlzIGluICd6b21iaWUnIHN0YXRlOiBpdCBoYXMgc3RvcHBlZCBleGVjdXRpbmcsIGFuZCBpdHMgc3RhY2sKKyAgICAgICAgKiBpcyBnb25lIChhcyB3ZWxsIGFzIGl0cyBUTFMgYXJlYSkuIHdoZW4gYW5vdGhlciB0aHJlYWQgY2FsbHMgcHRocmVhZF9qb2luKCkKKyAgICAgICAgKiBvbiBpdCwgaXQgd2lsbCBpbW1lZGlhdGVseSBmcmVlIHRoZSB0aHJlYWQgYW5kIHJldHVybi4KKyAgICAgICAgKi8KKyAgICAgICAgcHRocmVhZF9tdXRleF9sb2NrKCZnVGhyZWFkTGlzdExvY2spOworICAgICAgICB0aHJlYWQtPnJldHVybl92YWx1ZSA9IHJldHZhbDsKKyAgICAgICAgaWYgKHRocmVhZC0+am9pbl9jb3VudCA+IDApIHsKKyAgICAgICAgICAgIHB0aHJlYWRfY29uZF9icm9hZGNhc3QoJnRocmVhZC0+am9pbl9jb25kKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRocmVhZC0+am9pbl9jb3VudCA9IC0xOyAgLyogem9tYmllIHRocmVhZCAqLworICAgICAgICB9CisgICAgICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZnVGhyZWFkTGlzdExvY2spOworICAgIH0KKworICAgIC8vIGRlc3Ryb3kgdGhlIHRocmVhZCBzdGFjaworICAgIGlmICh1c2VyX3N0YWNrKQorICAgICAgICBfZXhpdF90aHJlYWQoKGludClyZXR2YWwpOworICAgIGVsc2UKKyAgICAgICAgX2V4aXRfd2l0aF9zdGFja190ZWFyZG93bihzdGFja19iYXNlLCBzdGFja19zaXplLCAoaW50KXJldHZhbCk7Cit9CisKK2ludCBwdGhyZWFkX2pvaW4ocHRocmVhZF90IHRoaWQsIHZvaWQgKiogcmV0X3ZhbCkKK3sKKyAgICBwdGhyZWFkX2ludGVybmFsX3QqICB0aHJlYWQgPSAocHRocmVhZF9pbnRlcm5hbF90Kil0aGlkOworICAgIGludCAgICAgICAgICAgICAgICAgIGNvdW50OworCisgICAgLy8gY2hlY2sgdGhhdCB0aGUgdGhyZWFkIHN0aWxsIGV4aXN0cyBhbmQgaXMgbm90IGRldGFjaGVkCisgICAgcHRocmVhZF9tdXRleF9sb2NrKCZnVGhyZWFkTGlzdExvY2spOworCisgICAgZm9yICh0aHJlYWQgPSBnVGhyZWFkTGlzdDsgdGhyZWFkICE9IE5VTEw7IHRocmVhZCA9IHRocmVhZC0+bmV4dCkKKyAgICAgICAgaWYgKHRocmVhZCA9PSAocHRocmVhZF9pbnRlcm5hbF90Kil0aGlkKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICBpZiAoIXRocmVhZCkgeworICAgICAgICBwdGhyZWFkX211dGV4X3VubG9jaygmZ1RocmVhZExpc3RMb2NrKTsKKyAgICAgICAgcmV0dXJuIEVTUkNIOworICAgIH0KKworICAgIGlmICh0aHJlYWQtPmF0dHIuZmxhZ3MgJiBQVEhSRUFEX0FUVFJfRkxBR19ERVRBQ0hFRCkgeworICAgICAgICBwdGhyZWFkX211dGV4X3VubG9jaygmZ1RocmVhZExpc3RMb2NrKTsKKyAgICAgICAgcmV0dXJuIEVJTlZBTDsKKyAgICB9CisKKyAgIC8qIHdhaXQgZm9yIHRocmVhZCBkZWF0aCB3aGVuIG5lZWRlZAorICAgICoKKyAgICAqIGlmIHRoZSAnam9pbl9jb3VudCcgaXMgbmVnYXRpdmUsIHRoaXMgaXMgYSAnem9tYmllJyB0aHJlYWQgdGhhdAorICAgICogaXMgYWxyZWFkeSBkZWFkIGFuZCB3aXRob3V0IHN0YWNrL1RMUworICAgICoKKyAgICAqIG90aGVyd2lzZSwgd2UgbmVlZCB0byBpbmNyZW1lbnQgJ2pvaW4tY291bnQnIGFuZCB3YWl0IHRvIGJlIHNpZ25hbGVkCisgICAgKi8KKyAgIGNvdW50ID0gdGhyZWFkLT5qb2luX2NvdW50OworICAgIGlmIChjb3VudCA+PSAwKSB7CisgICAgICAgIHRocmVhZC0+am9pbl9jb3VudCArPSAxOworICAgICAgICBwdGhyZWFkX2NvbmRfd2FpdCggJnRocmVhZC0+am9pbl9jb25kLCAmZ1RocmVhZExpc3RMb2NrICk7CisgICAgICAgIGNvdW50ID0gLS10aHJlYWQtPmpvaW5fY291bnQ7CisgICAgfQorICAgIGlmIChyZXRfdmFsKQorICAgICAgICAqcmV0X3ZhbCA9IHRocmVhZC0+cmV0dXJuX3ZhbHVlOworCisgICAgLyogcmVtb3ZlIHRocmVhZCBkZXNjcmlwdG9yIHdoZW4gd2UncmUgdGhlIGxhc3Qgam9pbmVyIG9yIHdoZW4gdGhlCisgICAgICogdGhyZWFkIHdhcyBhbHJlYWR5IGEgem9tYmllLgorICAgICAqLworICAgIGlmIChjb3VudCA8PSAwKSB7CisgICAgICAgIF9wdGhyZWFkX2ludGVybmFsX3JlbW92ZV9sb2NrZWQodGhyZWFkKTsKKyAgICAgICAgX3B0aHJlYWRfaW50ZXJuYWxfZnJlZSh0aHJlYWQpOworICAgIH0KKyAgICBwdGhyZWFkX211dGV4X3VubG9jaygmZ1RocmVhZExpc3RMb2NrKTsKKyAgICByZXR1cm4gMDsKK30KKworaW50ICBwdGhyZWFkX2RldGFjaCggcHRocmVhZF90ICB0aGlkICkKK3sKKyAgICBwdGhyZWFkX2ludGVybmFsX3QqICB0aHJlYWQ7CisgICAgaW50ICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gMDsKKyAgICBpbnQgICAgICAgICAgICAgICAgICBmbGFnczsKKworICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmZ1RocmVhZExpc3RMb2NrKTsKKyAgICBmb3IgKHRocmVhZCA9IGdUaHJlYWRMaXN0OyB0aHJlYWQgIT0gTlVMTDsgdGhyZWFkID0gdGhyZWFkLT5uZXh0KQorICAgICAgICBpZiAodGhyZWFkID09IChwdGhyZWFkX2ludGVybmFsX3QqKXRoaWQpCisgICAgICAgICAgICBnb3RvIEZvdW5kSXQ7CisKKyAgICByZXN1bHQgPSBFU1JDSDsKKyAgICBnb3RvIEV4aXQ7CisKK0ZvdW5kSXQ6CisgICAgZG8geworICAgICAgICBmbGFncyA9IHRocmVhZC0+YXR0ci5mbGFnczsKKworICAgICAgICBpZiAoIGZsYWdzICYgUFRIUkVBRF9BVFRSX0ZMQUdfREVUQUNIRUQgKSB7CisgICAgICAgICAgICAvKiB0aHJlYWQgaXMgbm90IGpvaW5hYmxlICEgKi8KKyAgICAgICAgICAgIHJlc3VsdCA9IEVJTlZBTDsKKyAgICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgICAgfQorICAgIH0KKyAgICB3aGlsZSAoIF9fYXRvbWljX2NtcHhjaGcoIGZsYWdzLCBmbGFncyB8IFBUSFJFQURfQVRUUl9GTEFHX0RFVEFDSEVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvbGF0aWxlIGludCopJnRocmVhZC0+YXR0ci5mbGFncyApICE9IDAgKTsKK0V4aXQ6CisgICAgcHRocmVhZF9tdXRleF91bmxvY2soJmdUaHJlYWRMaXN0TG9jayk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworcHRocmVhZF90IHB0aHJlYWRfc2VsZih2b2lkKQoreworICAgIHJldHVybiAocHRocmVhZF90KV9fZ2V0X3RocmVhZCgpOworfQorCitpbnQgcHRocmVhZF9lcXVhbChwdGhyZWFkX3Qgb25lLCBwdGhyZWFkX3QgdHdvKQoreworICAgIHJldHVybiAob25lID09IHR3byA/IDEgOiAwKTsKK30KKworaW50IHB0aHJlYWRfZ2V0c2NoZWRwYXJhbShwdGhyZWFkX3QgdGhpZCwgaW50ICogcG9saWN5LAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKiBwYXJhbSkKK3sKKyAgICBpbnQgIG9sZF9lcnJubyA9IGVycm5vOworCisgICAgcHRocmVhZF9pbnRlcm5hbF90ICogdGhyZWFkID0gKHB0aHJlYWRfaW50ZXJuYWxfdCAqKXRoaWQ7CisgICAgaW50IGVyciA9IHNjaGVkX2dldHBhcmFtKHRocmVhZC0+a2VybmVsX2lkLCBwYXJhbSk7CisgICAgaWYgKCFlcnIpIHsKKyAgICAgICAgKnBvbGljeSA9IHNjaGVkX2dldHNjaGVkdWxlcih0aHJlYWQtPmtlcm5lbF9pZCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZXJyID0gZXJybm87CisgICAgICAgIGVycm5vID0gb2xkX2Vycm5vOworICAgIH0KKyAgICByZXR1cm4gZXJyOworfQorCitpbnQgcHRocmVhZF9zZXRzY2hlZHBhcmFtKHB0aHJlYWRfdCB0aGlkLCBpbnQgcG9saWN5LAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gY29uc3QgKiBwYXJhbSkKK3sKKyAgICBwdGhyZWFkX2ludGVybmFsX3QgKiB0aHJlYWQgPSAocHRocmVhZF9pbnRlcm5hbF90ICopdGhpZDsKKyAgICBpbnQgICAgICAgICAgICAgICAgICBvbGRfZXJybm8gPSBlcnJubzsKKyAgICBpbnQgICAgICAgICAgICAgICAgICByZXQ7CisKKyAgICByZXQgPSBzY2hlZF9zZXRzY2hlZHVsZXIodGhyZWFkLT5rZXJuZWxfaWQsIHBvbGljeSwgcGFyYW0pOworICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgIHJldCA9IGVycm5vOworICAgICAgICBlcnJubyA9IG9sZF9lcnJubzsKKyAgICB9CisgICAgcmV0dXJuIHJldDsKK30KKworCitpbnQgX19mdXRleF93YWl0KHZvbGF0aWxlIHZvaWQgKmZ0eCwgaW50IHZhbCwgY29uc3Qgc3RydWN0IHRpbWVzcGVjICp0aW1lb3V0KTsKK2ludCBfX2Z1dGV4X3dha2Uodm9sYXRpbGUgdm9pZCAqZnR4LCBpbnQgY291bnQpOworCisvLyBtdXRleCBsb2NrIHN0YXRlcworLy8KKy8vIDA6IHVubG9ja2VkCisvLyAxOiBsb2NrZWQsIG5vIHdhaXRlcnMKKy8vIDI6IGxvY2tlZCwgbWF5YmUgd2FpdGVycworCisvKiBhIG11dGV4IGlzIGltcGxlbWVudGVkIGFzIGEgMzItYml0IGludGVnZXIgaG9sZGluZyB0aGUgZm9sbG93aW5nIGZpZWxkcworICoKKyAqIGJpdHM6ICAgICBuYW1lICAgICBkZXNjcmlwdGlvbgorICogMzEtMTYgICAgIHRpZCAgICAgIG93bmVyIHRocmVhZCdzIGtlcm5lbCBpZCAocmVjdXJzaXZlIGFuZCBlcnJvcmNoZWNrIG9ubHkpCisgKiAxNS0xNCAgICAgdHlwZSAgICAgbXV0ZXggdHlwZQorICogMTMtMiAgICAgIGNvdW50ZXIgIGNvdW50ZXIgb2YgcmVjdXJzaXZlIG11dGV4ZXMKKyAqIDEtMCAgICAgICBzdGF0ZSAgICBsb2NrIHN0YXRlICgwLCAxIG9yIDIpCisgKi8KKworCisjZGVmaW5lICBNVVRFWF9PV05FUihtKSAgKCgobSktPnZhbHVlID4+IDE2KSAmIDB4ZmZmZikKKyNkZWZpbmUgIE1VVEVYX0NPVU5URVIobSkgKCgobSktPnZhbHVlID4+IDIpICYgMHhmZmYpCisKKyNkZWZpbmUgIE1VVEVYX1RZUEVfTUFTSyAgICAgICAweGMwMDAKKyNkZWZpbmUgIE1VVEVYX1RZUEVfTk9STUFMICAgICAweDAwMDAKKyNkZWZpbmUgIE1VVEVYX1RZUEVfUkVDVVJTSVZFICAweDQwMDAKKyNkZWZpbmUgIE1VVEVYX1RZUEVfRVJST1JDSEVDSyAweDgwMDAKKworI2RlZmluZSAgTVVURVhfQ09VTlRFUl9TSElGVCAgMgorI2RlZmluZSAgTVVURVhfQ09VTlRFUl9NQVNLICAgMHgzZmZjCisKKworCisKK2ludCBwdGhyZWFkX211dGV4YXR0cl9pbml0KHB0aHJlYWRfbXV0ZXhhdHRyX3QgKmF0dHIpCit7CisgICAgaWYgKGF0dHIpIHsKKyAgICAgICAgKmF0dHIgPSBQVEhSRUFEX01VVEVYX0RFRkFVTFQ7CisgICAgICAgIHJldHVybiAwOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBFSU5WQUw7CisgICAgfQorfQorCitpbnQgcHRocmVhZF9tdXRleGF0dHJfZGVzdHJveShwdGhyZWFkX211dGV4YXR0cl90ICphdHRyKQoreworICAgIGlmIChhdHRyKSB7CisgICAgICAgICphdHRyID0gLTE7CisgICAgICAgIHJldHVybiAwOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBFSU5WQUw7CisgICAgfQorfQorCitpbnQgcHRocmVhZF9tdXRleGF0dHJfZ2V0dHlwZShjb25zdCBwdGhyZWFkX211dGV4YXR0cl90ICphdHRyLCBpbnQgKnR5cGUpCit7CisgICAgaWYgKGF0dHIgJiYgKmF0dHIgPj0gUFRIUkVBRF9NVVRFWF9OT1JNQUwgJiYKKyAgICAgICAgICAgICAgICAqYXR0ciA8PSBQVEhSRUFEX01VVEVYX0VSUk9SQ0hFQ0sgKSB7CisgICAgICAgICp0eXBlID0gKmF0dHI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gRUlOVkFMOworfQorCitpbnQgcHRocmVhZF9tdXRleGF0dHJfc2V0dHlwZShwdGhyZWFkX211dGV4YXR0cl90ICphdHRyLCBpbnQgdHlwZSkKK3sKKyAgICBpZiAoYXR0ciAmJiB0eXBlID49IFBUSFJFQURfTVVURVhfTk9STUFMICYmCisgICAgICAgICAgICAgICAgdHlwZSA8PSBQVEhSRUFEX01VVEVYX0VSUk9SQ0hFQ0sgKSB7CisgICAgICAgICphdHRyID0gdHlwZTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiBFSU5WQUw7Cit9CisKKy8qIHByb2Nlc3Mtc2hhcmVkIG11dGV4ZXMgYXJlIG5vdCBzdXBwb3J0ZWQgYXQgdGhlIG1vbWVudCAqLworCitpbnQgcHRocmVhZF9tdXRleGF0dHJfc2V0cHNoYXJlZChwdGhyZWFkX211dGV4YXR0cl90ICphdHRyLCBpbnQgIHBzaGFyZWQpCit7CisgICAgaWYgKCFhdHRyKQorICAgICAgICByZXR1cm4gRUlOVkFMOworCisgICAgcmV0dXJuIChwc2hhcmVkID09IFBUSFJFQURfUFJPQ0VTU19QUklWQVRFKSA/IDAgOiBFTk9UU1VQOworfQorCitpbnQgcHRocmVhZF9tdXRleGF0dHJfZ2V0cHNoYXJlZChwdGhyZWFkX211dGV4YXR0cl90ICphdHRyLCBpbnQgKnBzaGFyZWQpCit7CisgICAgaWYgKCFhdHRyKQorICAgICAgICByZXR1cm4gRUlOVkFMOworCisgICAgKnBzaGFyZWQgPSBQVEhSRUFEX1BST0NFU1NfUFJJVkFURTsKKyAgICByZXR1cm4gMDsKK30KKworaW50IHB0aHJlYWRfbXV0ZXhfaW5pdChwdGhyZWFkX211dGV4X3QgKm11dGV4LAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwdGhyZWFkX211dGV4YXR0cl90ICphdHRyKQoreworICAgIGlmICggbXV0ZXggKSB7CisgICAgICAgIGlmIChhdHRyID09IE5VTEwpIHsKKyAgICAgICAgICAgIG11dGV4LT52YWx1ZSA9IE1VVEVYX1RZUEVfTk9STUFMOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgc3dpdGNoICggKmF0dHIgKSB7CisgICAgICAgIGNhc2UgUFRIUkVBRF9NVVRFWF9OT1JNQUw6CisgICAgICAgICAgICBtdXRleC0+dmFsdWUgPSBNVVRFWF9UWVBFX05PUk1BTDsKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIGNhc2UgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkU6CisgICAgICAgICAgICBtdXRleC0+dmFsdWUgPSBNVVRFWF9UWVBFX1JFQ1VSU0lWRTsKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIGNhc2UgUFRIUkVBRF9NVVRFWF9FUlJPUkNIRUNLOgorICAgICAgICAgICAgbXV0ZXgtPnZhbHVlID0gTVVURVhfVFlQRV9FUlJPUkNIRUNLOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIEVJTlZBTDsKK30KKworaW50IHB0aHJlYWRfbXV0ZXhfZGVzdHJveShwdGhyZWFkX211dGV4X3QgKm11dGV4KQoreworICAgIG11dGV4LT52YWx1ZSA9IDB4ZGVhZDEwY2M7CisgICAgcmV0dXJuIDA7Cit9CisKKworLyoKKyAqIExvY2sgYSBub24tcmVjdXJzaXZlIG11dGV4LgorICoKKyAqIEFzIG5vdGVkIGFib3ZlLCB0aGVyZSBhcmUgdGhyZWUgc3RhdGVzOgorICogICAwICh1bmxvY2tlZCwgbm8gY29udGVudGlvbikKKyAqICAgMSAobG9ja2VkLCBubyBjb250ZW50aW9uKQorICogICAyIChsb2NrZWQsIGNvbnRlbnRpb24pCisgKgorICogTm9uLXJlY3Vyc2l2ZSBtdXRleGVzIGRvbid0IHVzZSB0aGUgdGhyZWFkLWlkIG9yIGNvdW50ZXIgZmllbGRzLCBhbmQgdGhlCisgKiAidHlwZSIgdmFsdWUgaXMgemVybywgc28gdGhlIG9ubHkgYml0cyB0aGF0IHdpbGwgYmUgc2V0IGFyZSB0aGUgb25lcyBpbgorICogdGhlIGxvY2sgc3RhdGUgZmllbGQuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQKK19ub3JtYWxfbG9jayhwdGhyZWFkX211dGV4X3QqICBtdXRleCkKK3sKKyAgICAvKgorICAgICAqIFRoZSBjb21tb24gY2FzZSBpcyBhbiB1bmxvY2tlZCBtdXRleCwgc28gd2UgYmVnaW4gYnkgdHJ5aW5nIHRvCisgICAgICogY2hhbmdlIHRoZSBsb2NrJ3Mgc3RhdGUgZnJvbSAwIHRvIDEuICBfX2F0b21pY19jbXB4Y2hnKCkgcmV0dXJucyAwCisgICAgICogaWYgaXQgbWFkZSB0aGUgc3dhcCBzdWNjZXNzZnVsbHkuICBJZiB0aGUgcmVzdWx0IGlzIG5vbnplcm8sIHRoaXMKKyAgICAgKiBsb2NrIGlzIGFscmVhZHkgaGVsZCBieSBhbm90aGVyIHRocmVhZC4KKyAgICAgKi8KKyAgICBpZiAoX19hdG9taWNfY21weGNoZygwLCAxLCAmbXV0ZXgtPnZhbHVlICkgIT0gMCkgeworICAgICAgICAvKgorICAgICAgICAgKiBXZSB3YW50IHRvIGdvIHRvIHNsZWVwIHVudGlsIHRoZSBtdXRleCBpcyBhdmFpbGFibGUsIHdoaWNoCisgICAgICAgICAqIHJlcXVpcmVzIHByb21vdGluZyBpdCB0byBzdGF0ZSAyLiAgV2UgbmVlZCB0byBzd2FwIGluIHRoZSBuZXcKKyAgICAgICAgICogc3RhdGUgdmFsdWUgYW5kIHRoZW4gd2FpdCB1bnRpbCBzb21lYm9keSB3YWtlcyB1cyB1cC4KKyAgICAgICAgICoKKyAgICAgICAgICogX19hdG9taWNfc3dhcCgpIHJldHVybnMgdGhlIHByZXZpb3VzIHZhbHVlLiAgV2Ugc3dhcCAyIGluIGFuZAorICAgICAgICAgKiBzZWUgaWYgd2UgZ290IHplcm8gYmFjazsgaWYgc28sIHdlIGhhdmUgYWNxdWlyZWQgdGhlIGxvY2suICBJZgorICAgICAgICAgKiBub3QsIGFub3RoZXIgdGhyZWFkIHN0aWxsIGhvbGRzIHRoZSBsb2NrIGFuZCB3ZSB3YWl0IGFnYWluLgorICAgICAgICAgKgorICAgICAgICAgKiBUaGUgc2Vjb25kIGFyZ3VtZW50IHRvIHRoZSBfX2Z1dGV4X3dhaXQoKSBjYWxsIGlzIGNvbXBhcmVkCisgICAgICAgICAqIGFnYWluc3QgdGhlIGN1cnJlbnQgdmFsdWUuICBJZiBpdCBkb2Vzbid0IG1hdGNoLCBfX2Z1dGV4X3dhaXQoKQorICAgICAgICAgKiByZXR1cm5zIGltbWVkaWF0ZWx5IChvdGhlcndpc2UsIGl0IHNsZWVwcyBmb3IgYSB0aW1lIHNwZWNpZmllZAorICAgICAgICAgKiBieSB0aGUgdGhpcmQgYXJndW1lbnQ7IDAgbWVhbnMgc2xlZXAgZm9yZXZlcikuICBUaGlzIGVuc3VyZXMKKyAgICAgICAgICogdGhhdCB0aGUgbXV0ZXggaXMgaW4gc3RhdGUgMiB3aGVuIHdlIGdvIHRvIHNsZWVwIG9uIGl0LCB3aGljaAorICAgICAgICAgKiBndWFyYW50ZWVzIGEgd2FrZS11cCBjYWxsLgorICAgICAgICAgKi8KKyAgICAgICAgd2hpbGUgKF9fYXRvbWljX3N3YXAoMiwgJm11dGV4LT52YWx1ZSApICE9IDApCisgICAgICAgICAgICBfX2Z1dGV4X3dhaXQoJm11dGV4LT52YWx1ZSwgMiwgMCk7CisgICAgfQorfQorCisvKgorICogUmVsZWFzZSBhIG5vbi1yZWN1cnNpdmUgbXV0ZXguICBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZworICogdGhhdCB3ZSBhcmUgaW4gZmFjdCB0aGUgb3duZXIgb2YgdGhpcyBsb2NrLgorICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkCitfbm9ybWFsX3VubG9jayhwdGhyZWFkX211dGV4X3QqICBtdXRleCkKK3sKKyAgICAvKgorICAgICAqIFRoZSBtdXRleCB2YWx1ZSB3aWxsIGJlIDEgb3IgKHJhcmVseSkgMi4gIFdlIHVzZSBhbiBhdG9taWMgZGVjcmVtZW50CisgICAgICogdG8gcmVsZWFzZSB0aGUgbG9jay4gIF9fYXRvbWljX2RlYygpIHJldHVybnMgdGhlIHByZXZpb3VzIHZhbHVlOworICAgICAqIGlmIGl0IHdhc24ndCAxIHdlIGhhdmUgdG8gZG8gc29tZSBhZGRpdGlvbmFsIHdvcmsuCisgICAgICovCisgICAgaWYgKF9fYXRvbWljX2RlYygmbXV0ZXgtPnZhbHVlKSAhPSAxKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIFN0YXJ0IGJ5IHJlbGVhc2luZyB0aGUgbG9jay4gIFRoZSBkZWNyZW1lbnQgY2hhbmdlZCBpdCBmcm9tCisgICAgICAgICAqICJjb250ZW5kZWQgbG9jayIgdG8gInVuY29udGVuZGVkIGxvY2siLCB3aGljaCBtZWFucyB3ZSBzdGlsbAorICAgICAgICAgKiBob2xkIGl0LCBhbmQgYW55Ym9keSB3aG8gdHJpZXMgdG8gc25lYWsgaW4gd2lsbCBwdXNoIGl0IGJhY2sKKyAgICAgICAgICogdG8gc3RhdGUgMi4KKyAgICAgICAgICoKKyAgICAgICAgICogT25jZSB3ZSBzZXQgaXQgdG8gemVybyB0aGUgbG9jayBpcyB1cCBmb3IgZ3JhYnMuICBXZSBmb2xsb3cKKyAgICAgICAgICogdGhpcyB3aXRoIGEgX19mdXRleF93YWtlKCkgdG8gZW5zdXJlIHRoYXQgb25lIG9mIHRoZSB3YWl0aW5nCisgICAgICAgICAqIHRocmVhZHMgaGFzIGEgY2hhbmNlIHRvIGdyYWIgaXQuCisgICAgICAgICAqCisgICAgICAgICAqIFRoaXMgZG9lc24ndCBjYXVzZSBhIHJhY2Ugd2l0aCB0aGUgc3dhcC93YWl0IHBhaXIgaW4KKyAgICAgICAgICogX25vcm1hbF9sb2NrKCksIGJlY2F1c2UgdGhlIF9fZnV0ZXhfd2FpdCgpIGNhbGwgdGhlcmUgd2lsbAorICAgICAgICAgKiByZXR1cm4gaW1tZWRpYXRlbHkgaWYgdGhlIG11dGV4IHZhbHVlIGlzbid0IDIuCisgICAgICAgICAqLworICAgICAgICBtdXRleC0+dmFsdWUgPSAwOworCisgICAgICAgIC8qCisgICAgICAgICAqIFdha2UgdXAgb25lIHdhaXRpbmcgdGhyZWFkLiAgV2UgZG9uJ3Qga25vdyB3aGljaCB0aHJlYWQgd2lsbCBiZQorICAgICAgICAgKiB3b2tlbiBvciB3aGVuIGl0J2xsIHN0YXJ0IGV4ZWN1dGluZyAtLSBmdXRleGVzIG1ha2Ugbm8gZ3VhcmFudGVlcworICAgICAgICAgKiBoZXJlLiAgVGhlcmUgbWF5IG5vdCBldmVuIGJlIGEgdGhyZWFkIHdhaXRpbmcuCisgICAgICAgICAqCisgICAgICAgICAqIFRoZSBuZXdseS13b2tlbiB0aHJlYWQgd2lsbCByZXBsYWNlIHRoZSAwIHdlIGp1c3Qgc2V0IGFib3ZlCisgICAgICAgICAqIHdpdGggMiwgd2hpY2ggbWVhbnMgdGhhdCB3aGVuIGl0IGV2ZW50dWFsbHkgcmVsZWFzZXMgdGhlIG11dGV4CisgICAgICAgICAqIGl0IHdpbGwgYWxzbyBjYWxsIEZVVEVYX1dBS0UuICBUaGlzIHJlc3VsdHMgaW4gb25lIGV4dHJhIHdha2UKKyAgICAgICAgICogY2FsbCB3aGVuZXZlciBhIGxvY2sgaXMgY29udGVuZGVkLCBidXQgbGV0cyB1cyBhdm9pZCBmb3JnZXR0aW5nCisgICAgICAgICAqIGFueW9uZSB3aXRob3V0IHJlcXVpcmluZyB1cyB0byB0cmFjayB0aGUgbnVtYmVyIG9mIHNsZWVwZXJzLgorICAgICAgICAgKgorICAgICAgICAgKiBJdCdzIHBvc3NpYmxlIGZvciBhbm90aGVyIHRocmVhZCB0byBzbmVhayBpbiBhbmQgZ3JhYiB0aGUgbG9jaworICAgICAgICAgKiBiZXR3ZWVuIHRoZSB6ZXJvIGFzc2lnbm1lbnQgYWJvdmUgYW5kIHRoZSB3YWtlIGNhbGwgYmVsb3cuICBJZgorICAgICAgICAgKiB0aGUgbmV3IHRocmVhZCBpcyAic2xvdyIgYW5kIGhvbGRzIHRoZSBsb2NrIGZvciBhIHdoaWxlLCB3ZSdsbAorICAgICAgICAgKiB3YWtlIHVwIGEgc2xlZXBlciwgd2hpY2ggd2lsbCBzd2FwIGluIGEgMiBhbmQgdGhlbiBnbyBiYWNrIHRvCisgICAgICAgICAqIHNsZWVwIHNpbmNlIHRoZSBsb2NrIGlzIHN0aWxsIGhlbGQuICBJZiB0aGUgbmV3IHRocmVhZCBpcyAiZmFzdCIsCisgICAgICAgICAqIHJ1bm5pbmcgdG8gY29tcGxldGlvbiBiZWZvcmUgd2UgY2FsbCB3YWtlLCB0aGUgdGhyZWFkIHdlCisgICAgICAgICAqIGV2ZW50dWFsbHkgd2FrZSB3aWxsIGZpbmQgYW4gdW5sb2NrZWQgbXV0ZXggYW5kIHdpbGwgZXhlY3V0ZS4KKyAgICAgICAgICogRWl0aGVyIHdheSB3ZSBoYXZlIGNvcnJlY3QgYmVoYXZpb3IgYW5kIG5vYm9keSBpcyBvcnBoYW5lZCBvbgorICAgICAgICAgKiB0aGUgd2FpdCBxdWV1ZS4KKyAgICAgICAgICovCisgICAgICAgIF9fZnV0ZXhfd2FrZSgmbXV0ZXgtPnZhbHVlLCAxKTsKKyAgICB9Cit9CisKK3N0YXRpYyBwdGhyZWFkX211dGV4X3QgIF9fcmVjdXJzaXZlX2xvY2sgPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOworCitzdGF0aWMgdm9pZAorX3JlY3Vyc2l2ZV9sb2NrKHZvaWQpCit7CisgICAgX25vcm1hbF9sb2NrKCAmX19yZWN1cnNpdmVfbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkCitfcmVjdXJzaXZlX3VubG9jayh2b2lkKQoreworICAgIF9ub3JtYWxfdW5sb2NrKCAmX19yZWN1cnNpdmVfbG9jayApOworfQorCisjZGVmaW5lICBfX2xpa2VseShjb25kKSAgICBfX2J1aWx0aW5fZXhwZWN0KCEhKGNvbmQpLCAxKQorI2RlZmluZSAgX191bmxpa2VseShjb25kKSAgX19idWlsdGluX2V4cGVjdCghIShjb25kKSwgMCkKKworaW50IHB0aHJlYWRfbXV0ZXhfbG9jayhwdGhyZWFkX211dGV4X3QgKm11dGV4KQoreworICAgIGlmIChfX2xpa2VseShtdXRleCAhPSBOVUxMKSkKKyAgICB7CisgICAgICAgIGludCAgbXR5cGUgPSAobXV0ZXgtPnZhbHVlICYgTVVURVhfVFlQRV9NQVNLKTsKKworICAgICAgICBpZiAoIF9fbGlrZWx5KG10eXBlID09IE1VVEVYX1RZUEVfTk9STUFMKSApIHsKKyAgICAgICAgICAgIF9ub3JtYWxfbG9jayhtdXRleCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgIHRpZCA9IF9fZ2V0X3RocmVhZCgpLT5rZXJuZWxfaWQ7CisKKyAgICAgICAgICAgIGlmICggdGlkID09IE1VVEVYX09XTkVSKG11dGV4KSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50ICBvbGR2LCBjb3VudGVyOworCisgICAgICAgICAgICAgICAgaWYgKG10eXBlID09IE1VVEVYX1RZUEVfRVJST1JDSEVDSykgeworICAgICAgICAgICAgICAgICAgICAvKiB0cnlpbmcgdG8gcmUtbG9jayBhIG11dGV4IHdlIGFscmVhZHkgYWNxdWlyZWQgKi8KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVERUFETEs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogV2Ugb3duIHRoZSBtdXRleCwgYnV0IG90aGVyIHRocmVhZHMgYXJlIGFibGUgdG8gY2hhbmdlCisgICAgICAgICAgICAgICAgICogdGhlIGNvbnRlbnRzIChlLmcuIHByb21vdGluZyBpdCB0byAiY29udGVuZGVkIiksIHNvIHdlCisgICAgICAgICAgICAgICAgICogbmVlZCB0byBob2xkIHRoZSBnbG9iYWwgbG9jay4KKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBfcmVjdXJzaXZlX2xvY2soKTsKKyAgICAgICAgICAgICAgICBvbGR2ICAgICAgICAgPSBtdXRleC0+dmFsdWU7CisgICAgICAgICAgICAgICAgY291bnRlciAgICAgID0gKG9sZHYgKyAoMSA8PCBNVVRFWF9DT1VOVEVSX1NISUZUKSkgJiBNVVRFWF9DT1VOVEVSX01BU0s7CisgICAgICAgICAgICAgICAgbXV0ZXgtPnZhbHVlID0gKG9sZHYgJiB+TVVURVhfQ09VTlRFUl9NQVNLKSB8IGNvdW50ZXI7CisgICAgICAgICAgICAgICAgX3JlY3Vyc2l2ZV91bmxvY2soKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIElmIHRoZSBuZXcgbG9jayBpcyBhdmFpbGFibGUgaW1tZWRpYXRlbHksIHdlIGdyYWIgaXQgaW4KKyAgICAgICAgICAgICAgICAgKiB0aGUgInVuY29udGVuZGVkIiBzdGF0ZS4KKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBpbnQgbmV3X2xvY2tfdHlwZSA9IDE7CisKKyAgICAgICAgICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICAgICAgICAgIGludCAgb2xkdjsKKworICAgICAgICAgICAgICAgICAgICBfcmVjdXJzaXZlX2xvY2soKTsKKyAgICAgICAgICAgICAgICAgICAgb2xkdiA9IG11dGV4LT52YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG9sZHYgPT0gbXR5cGUpIHsgLyogdW5jb250ZW5kZWQgcmVsZWFzZWQgbG9jayA9PiAxIG9yIDIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIG11dGV4LT52YWx1ZSA9ICgodGlkIDw8IDE2KSB8IG10eXBlIHwgbmV3X2xvY2tfdHlwZSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKG9sZHYgJiAzKSA9PSAxKSB7IC8qIGxvY2tlZCBzdGF0ZSAxID0+IHN0YXRlIDIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIG9sZHYgXj0gMzsKKyAgICAgICAgICAgICAgICAgICAgICAgIG11dGV4LT52YWx1ZSA9IG9sZHY7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgX3JlY3Vyc2l2ZV91bmxvY2soKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAob2xkdiA9PSBtdHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgICAqIFRoZSBsb2NrIHdhcyBoZWxkLCBwb3NzaWJseSBjb250ZW5kZWQgYnkgb3RoZXJzLiAgRnJvbQorICAgICAgICAgICAgICAgICAgICAgKiBub3cgb24sIGlmIHdlIG1hbmFnZSB0byBhY3F1aXJlIHRoZSBsb2NrLCB3ZSBoYXZlIHRvCisgICAgICAgICAgICAgICAgICAgICAqIGFzc3VtZSB0aGF0IG90aGVycyBhcmUgc3RpbGwgY29udGVuZGluZyBmb3IgaXQgc28gdGhhdAorICAgICAgICAgICAgICAgICAgICAgKiB3ZSdsbCB3YWtlIHRoZW0gd2hlbiB3ZSB1bmxvY2sgaXQuCisgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICBuZXdfbG9ja190eXBlID0gMjsKKworICAgICAgICAgICAgICAgICAgICBfX2Z1dGV4X3dhaXQoICZtdXRleC0+dmFsdWUsIG9sZHYsIDAgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiBFSU5WQUw7Cit9CisKKworaW50IHB0aHJlYWRfbXV0ZXhfdW5sb2NrKHB0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgpCit7CisgICAgaWYgKF9fbGlrZWx5KG11dGV4ICE9IE5VTEwpKQorICAgIHsKKyAgICAgICAgaW50ICBtdHlwZSA9IChtdXRleC0+dmFsdWUgJiBNVVRFWF9UWVBFX01BU0spOworCisgICAgICAgIGlmIChfX2xpa2VseShtdHlwZSA9PSBNVVRFWF9UWVBFX05PUk1BTCkpIHsKKyAgICAgICAgICAgIF9ub3JtYWxfdW5sb2NrKG11dGV4KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCAgdGlkID0gX19nZXRfdGhyZWFkKCktPmtlcm5lbF9pZDsKKworICAgICAgICAgICAgaWYgKCB0aWQgPT0gTVVURVhfT1dORVIobXV0ZXgpICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbnQgIG9sZHY7CisKKyAgICAgICAgICAgICAgICBfcmVjdXJzaXZlX2xvY2soKTsKKyAgICAgICAgICAgICAgICBvbGR2ID0gbXV0ZXgtPnZhbHVlOworICAgICAgICAgICAgICAgIGlmIChvbGR2ICYgTVVURVhfQ09VTlRFUl9NQVNLKSB7CisgICAgICAgICAgICAgICAgICAgIG11dGV4LT52YWx1ZSA9IG9sZHYgLSAoMSA8PCBNVVRFWF9DT1VOVEVSX1NISUZUKTsKKyAgICAgICAgICAgICAgICAgICAgb2xkdiA9IDA7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbXV0ZXgtPnZhbHVlID0gbXR5cGU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIF9yZWN1cnNpdmVfdW5sb2NrKCk7CisKKyAgICAgICAgICAgICAgICBpZiAoKG9sZHYgJiAzKSA9PSAyKQorICAgICAgICAgICAgICAgICAgICBfX2Z1dGV4X3dha2UoICZtdXRleC0+dmFsdWUsIDEgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIC8qIHRyeWluZyB0byB1bmxvY2sgYSBsb2NrIHdlIGRvIG5vdCBvd24gKi8KKyAgICAgICAgICAgICAgICByZXR1cm4gRVBFUk07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiBFSU5WQUw7Cit9CisKKworaW50IHB0aHJlYWRfbXV0ZXhfdHJ5bG9jayhwdGhyZWFkX211dGV4X3QgKm11dGV4KQoreworICAgIGlmIChfX2xpa2VseShtdXRleCAhPSBOVUxMKSkKKyAgICB7CisgICAgICAgIGludCAgbXR5cGUgPSAobXV0ZXgtPnZhbHVlICYgTVVURVhfVFlQRV9NQVNLKTsKKworICAgICAgICBpZiAoIF9fbGlrZWx5KG10eXBlID09IE1VVEVYX1RZUEVfTk9STUFMKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChfX2F0b21pY19jbXB4Y2hnKDAsIDEsICZtdXRleC0+dmFsdWUpID09IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgICAgIHJldHVybiBFQlVTWTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCAgdGlkID0gX19nZXRfdGhyZWFkKCktPmtlcm5lbF9pZDsKKyAgICAgICAgICAgIGludCAgb2xkdjsKKworICAgICAgICAgICAgaWYgKCB0aWQgPT0gTVVURVhfT1dORVIobXV0ZXgpICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbnQgIG9sZHYsIGNvdW50ZXI7CisKKyAgICAgICAgICAgICAgICBpZiAobXR5cGUgPT0gTVVURVhfVFlQRV9FUlJPUkNIRUNLKSB7CisgICAgICAgICAgICAgICAgICAgIC8qIGFscmVhZHkgbG9ja2VkIGJ5IG91cnNlbHZlcyAqLworICAgICAgICAgICAgICAgICAgICByZXR1cm4gRURFQURMSzsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBfcmVjdXJzaXZlX2xvY2soKTsKKyAgICAgICAgICAgICAgICBvbGR2ID0gbXV0ZXgtPnZhbHVlOworICAgICAgICAgICAgICAgIGNvdW50ZXIgPSAob2xkdiArICgxIDw8IE1VVEVYX0NPVU5URVJfU0hJRlQpKSAmIE1VVEVYX0NPVU5URVJfTUFTSzsKKyAgICAgICAgICAgICAgICBtdXRleC0+dmFsdWUgPSAob2xkdiAmIH5NVVRFWF9DT1VOVEVSX01BU0spIHwgY291bnRlcjsKKyAgICAgICAgICAgICAgICBfcmVjdXJzaXZlX3VubG9jaygpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiB0cnkgdG8gbG9jayBpdCAqLworICAgICAgICAgICAgX3JlY3Vyc2l2ZV9sb2NrKCk7CisgICAgICAgICAgICBvbGR2ID0gbXV0ZXgtPnZhbHVlOworICAgICAgICAgICAgaWYgKG9sZHYgPT0gbXR5cGUpICAvKiB1bmNvbnRlbmRlZCByZWxlYXNlZCBsb2NrID0+IHN0YXRlIDEgKi8KKyAgICAgICAgICAgICAgICBtdXRleC0+dmFsdWUgPSAoKHRpZCA8PCAxNikgfCBtdHlwZSB8IDEpOworICAgICAgICAgICAgX3JlY3Vyc2l2ZV91bmxvY2soKTsKKworICAgICAgICAgICAgaWYgKG9sZHYgIT0gbXR5cGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIEVCVVNZOworCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gRUlOVkFMOworfQorCisKKy8qIFhYWCAqdGVjaG5pY2FsbHkqIHRoZXJlIGlzIGEgcmFjZSBjb25kaXRpb24gdGhhdCBjb3VsZCBhbGxvdworICogWFhYIGEgc2lnbmFsIHRvIGJlIG1pc3NlZC4gIElmIHRocmVhZCBBIGlzIHByZWVtcHRlZCBpbiBfd2FpdCgpCisgKiBYWFggYWZ0ZXIgdW5sb2NraW5nIHRoZSBtdXRleCBhbmQgYmVmb3JlIHdhaXRpbmcsIGFuZCBpZiBvdGhlcgorICogWFhYIHRocmVhZHMgY2FsbCBzaWduYWwgb3IgYnJvYWRjYXN0IFVJTlRfTUFYIHRpbWVzIChleGFjdGx5KSwKKyAqIFhYWCBiZWZvcmUgdGhyZWFkIEEgaXMgc2NoZWR1bGVkIGFnYWluIGFuZCBjYWxscyBmdXRleF93YWl0KCksCisgKiBYWFggdGhlbiB0aGUgc2lnbmFsIHdpbGwgYmUgbG9zdC4KKyAqLworCitpbnQgcHRocmVhZF9jb25kX2luaXQocHRocmVhZF9jb25kX3QgKmNvbmQsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHRocmVhZF9jb25kYXR0cl90ICphdHRyKQoreworICAgIGNvbmQtPnZhbHVlID0gMDsKKyAgICByZXR1cm4gMDsKK30KKworaW50IHB0aHJlYWRfY29uZF9kZXN0cm95KHB0aHJlYWRfY29uZF90ICpjb25kKQoreworICAgIGNvbmQtPnZhbHVlID0gMHhkZWFkYzA0ZDsKKyAgICByZXR1cm4gMDsKK30KKworaW50IHB0aHJlYWRfY29uZF9icm9hZGNhc3QocHRocmVhZF9jb25kX3QgKmNvbmQpCit7CisgICAgX19hdG9taWNfZGVjKCZjb25kLT52YWx1ZSk7CisgICAgX19mdXRleF93YWtlKCZjb25kLT52YWx1ZSwgSU5UX01BWCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBwdGhyZWFkX2NvbmRfc2lnbmFsKHB0aHJlYWRfY29uZF90ICpjb25kKQoreworICAgIF9fYXRvbWljX2RlYygmY29uZC0+dmFsdWUpOworICAgIF9fZnV0ZXhfd2FrZSgmY29uZC0+dmFsdWUsIDEpOworICAgIHJldHVybiAwOworfQorCitpbnQgcHRocmVhZF9jb25kX3dhaXQocHRocmVhZF9jb25kX3QgKmNvbmQsIHB0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgpCit7CisgICAgcmV0dXJuIHB0aHJlYWRfY29uZF90aW1lZHdhaXQoY29uZCwgbXV0ZXgsIE5VTEwpOworfQorCitpbnQgX19wdGhyZWFkX2NvbmRfdGltZWR3YWl0X3JlbGF0aXZlKHB0aHJlYWRfY29uZF90ICpjb25kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdGhyZWFkX211dGV4X3QgKiBtdXRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjICpyZWx0aW1lKQoreworICAgIGludCAgc3RhdHVzOworICAgIGludCAgb2xkdmFsdWUgPSBjb25kLT52YWx1ZTsKKworICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKG11dGV4KTsKKyAgICBzdGF0dXMgPSBfX2Z1dGV4X3dhaXQoJmNvbmQtPnZhbHVlLCBvbGR2YWx1ZSwgcmVsdGltZSk7CisgICAgcHRocmVhZF9tdXRleF9sb2NrKG11dGV4KTsKKworICAgIGlmIChzdGF0dXMgPT0gKC1FVElNRURPVVQpKSByZXR1cm4gRVRJTUVET1VUOworICAgIHJldHVybiAwOworfQorCitpbnQgX19wdGhyZWFkX2NvbmRfdGltZWR3YWl0KHB0aHJlYWRfY29uZF90ICpjb25kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdGhyZWFkX211dGV4X3QgKiBtdXRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjICphYnN0aW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9ja2lkX3QgY2xvY2spCit7CisgICAgc3RydWN0IHRpbWVzcGVjIHRzOworICAgIHN0cnVjdCB0aW1lc3BlYyAqIHRzcDsKKworICAgIGlmIChhYnN0aW1lICE9IE5VTEwpIHsKKyAgICAgICAgY2xvY2tfZ2V0dGltZShjbG9jaywgJnRzKTsKKyAgICAgICAgdHMudHZfc2VjID0gYWJzdGltZS0+dHZfc2VjIC0gdHMudHZfc2VjOworICAgICAgICB0cy50dl9uc2VjID0gYWJzdGltZS0+dHZfbnNlYyAtIHRzLnR2X25zZWM7CisgICAgICAgIGlmICh0cy50dl9uc2VjIDwgMCkgeworICAgICAgICAgICAgdHMudHZfc2VjLS07CisgICAgICAgICAgICB0cy50dl9uc2VjICs9IDEwMDAwMDAwMDA7CisgICAgICAgIH0KKyAgICAgICAgaWYoKHRzLnR2X25zZWMgPCAwKSB8fCAodHMudHZfc2VjIDwgMCkpIHsKKyAgICAgICAgICAgIHJldHVybiBFVElNRURPVVQ7CisgICAgICAgIH0KKyAgICAgICAgdHNwID0gJnRzOworICAgIH0gZWxzZSB7CisgICAgICAgIHRzcCA9IE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIF9fcHRocmVhZF9jb25kX3RpbWVkd2FpdF9yZWxhdGl2ZShjb25kLCBtdXRleCwgdHNwKTsKK30KKworaW50IHB0aHJlYWRfY29uZF90aW1lZHdhaXQocHRocmVhZF9jb25kX3QgKmNvbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwdGhyZWFkX211dGV4X3QgKiBtdXRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqYWJzdGltZSkKK3sKKyAgICByZXR1cm4gX19wdGhyZWFkX2NvbmRfdGltZWR3YWl0KGNvbmQsIG11dGV4LCBhYnN0aW1lLCBDTE9DS19SRUFMVElNRSk7Cit9CisKKworaW50IHB0aHJlYWRfY29uZF90aW1lZHdhaXRfbW9ub3RvbmljKHB0aHJlYWRfY29uZF90ICpjb25kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0aHJlYWRfbXV0ZXhfdCAqIG11dGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqYWJzdGltZSkKK3sKKyAgICByZXR1cm4gX19wdGhyZWFkX2NvbmRfdGltZWR3YWl0KGNvbmQsIG11dGV4LCBhYnN0aW1lLCBDTE9DS19NT05PVE9OSUMpOworfQorCitpbnQgcHRocmVhZF9jb25kX3RpbWVvdXRfbnAocHRocmVhZF9jb25kX3QgKmNvbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9tdXRleF90ICogbXV0ZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbXNlY3MpCit7CisgICAgaW50IG9sZHZhbHVlOworICAgIHN0cnVjdCB0aW1lc3BlYyB0czsKKyAgICBpbnQgc3RhdHVzOworCisgICAgdHMudHZfc2VjID0gbXNlY3MgLyAxMDAwOworICAgIHRzLnR2X25zZWMgPSAobXNlY3MgJSAxMDAwKSAqIDEwMDAwMDA7CisKKyAgICBvbGR2YWx1ZSA9IGNvbmQtPnZhbHVlOworCisgICAgcHRocmVhZF9tdXRleF91bmxvY2sobXV0ZXgpOworICAgIHN0YXR1cyA9IF9fZnV0ZXhfd2FpdCgmY29uZC0+dmFsdWUsIG9sZHZhbHVlLCAmdHMpOworICAgIHB0aHJlYWRfbXV0ZXhfbG9jayhtdXRleCk7CisKKyAgICBpZihzdGF0dXMgPT0gKC1FVElNRURPVVQpKSByZXR1cm4gRVRJTUVET1VUOworCisgICAgcmV0dXJuIDA7Cit9CisKKworCisvKiBBIHRlY2huaWNhbCBub3RlIHJlZ2FyZGluZyBvdXIgdGhyZWFkLWxvY2FsLXN0b3JhZ2UgKFRMUykgaW1wbGVtZW50YXRpb246CisgKgorICogVGhlcmUgY2FuIGJlIHVwIHRvIFRMU01BUF9TSVpFIGluZGVwZW5kZW50IFRMUyBrZXlzIGluIGEgZ2l2ZW4gcHJvY2VzcywKKyAqIHRob3VnaCB0aGUgZmlyc3QgVExTTUFQX1NUQVJUIGtleXMgYXJlIHJlc2VydmVkIGZvciBCaW9uaWMgdG8gaG9sZAorICogc3BlY2lhbCB0aHJlYWQtc3BlY2lmaWMgdmFyaWFibGVzIGxpa2UgZXJybm8gb3IgYSBwb2ludGVyIHRvCisgKiB0aGUgY3VycmVudCB0aHJlYWQncyBkZXNjcmlwdG9yLgorICoKKyAqIHdoaWxlIHN0b3JlZCBpbiB0aGUgVExTIGFyZWEsIHRoZXNlIGVudHJpZXMgY2Fubm90IGJlIGFjY2Vzc2VkIHRocm91Z2gKKyAqIHB0aHJlYWRfZ2V0c3BlY2lmaWMoKSAvIHB0aHJlYWRfc2V0c3BlY2lmaWMoKSBhbmQgcHRocmVhZF9rZXlfZGVsZXRlKCkKKyAqCisgKiBhbHNvLCBzb21lIGVudHJpZXMgaW4gdGhlIGtleSB0YWJsZSBhcmUgcHJlLWFsbG9jYXRlZCAoc2VlIHRsc21hcF9sb2NrKQorICogdG8gZ3JlYXRseSBzaW1wbGlmeSBhbmQgc3BlZWR1cCBzb21lIE9wZW5HTC1yZWxhdGVkIG9wZXJhdGlvbnMuIHRob3VnaCB0aGUKKyAqIGluaXRpYWx5IHZhbHVlIHdpbGwgYmUgTlVMTCBvbiBhbGwgdGhyZWFkcy4KKyAqCisgKiB5b3UgY2FuIHVzZSBwdGhyZWFkX2dldHNwZWNpZmljKCkvc2V0c3BlY2lmaWMoKSBvbiB0aGVzZSwgYW5kIGluIHRoZW9yeQorICogeW91IGNvdWxkIGFsc28gY2FsbCBwdGhyZWFkX2tleV9kZWxldGUoKSBhcyB3ZWxsLCB0aG91Z2ggdGhpcyB3b3VsZAorICogcHJvYmFibHkgYnJlYWsgc29tZSBhcHBzLgorICoKKyAqIFRoZSAndGxzbWFwX3QnIHR5cGUgZGVmaW5lZCBiZWxvdyBpbXBsZW1lbnRzIGEgc2hhcmVkIGdsb2JhbCBtYXAgb2YKKyAqIGN1cnJlbnRseSBjcmVhdGVkL2FsbG9jYXRlZCBUTFMga2V5cyBhbmQgdGhlIGRlc3RydWN0b3JzIGFzc29jaWF0ZWQKKyAqIHdpdGggdGhlbS4gWW91IHNob3VsZCB1c2UgdGxzbWFwX2xvY2svdW5sb2NrIHRvIGFjY2VzcyBpdCB0byBhdm9pZAorICogYW55IHJhY2UgY29uZGl0aW9uLgorICoKKyAqIHRoZSBnbG9iYWwgVExTIG1hcCBzaW1wbHkgY29udGFpbnMgYSBiaXRtYXAgb2YgYWxsb2NhdGVkIGtleXMsIGFuZAorICogYW4gYXJyYXkgb2YgZGVzdHJ1Y3RvcnMuCisgKgorICogZWFjaCB0aHJlYWQgaGFzIGEgVExTIGFyZWEgdGhhdCBpcyBhIHNpbXBsZSBhcnJheSBvZiBUTFNNQVBfU0laRSB2b2lkKgorICogcG9pbnRlcnMuIHRoZSBUTFMgYXJlYSBvZiB0aGUgbWFpbiB0aHJlYWQgaXMgc3RhY2stYWxsb2NhdGVkIGluCisgKiBfX2xpYmNfaW5pdF9jb21tb24sIHdoaWxlIHRoZSBUTFMgYXJlYSBvZiBvdGhlciB0aHJlYWRzIGlzIHBsYWNlZCBhdAorICogdGhlIHRvcCBvZiB0aGVpciBzdGFjayBpbiBwdGhyZWFkX2NyZWF0ZS4KKyAqCisgKiB3aGVuIHB0aHJlYWRfa2V5X2NyZWF0ZSgpIGlzIGNhbGxlZCwgaXQgZmluZHMgdGhlIGZpcnN0IGZyZWUga2V5IGluIHRoZQorICogYml0bWFwLCB0aGVuIHNldCBpdCB0byAxLCBzYXZpbmcgdGhlIGRlc3RydWN0b3IgYWx0b2dldGhlcgorICoKKyAqIHdoZW4gcHRocmVhZF9rZXlfZGVsZXRlKCkgaXMgY2FsbGVkLiBpdCB3aWxsIGVyYXNlIHRoZSBrZXkncyBiaXRtYXAgYml0CisgKiBhbmQgaXRzIGRlc3RydWN0b3IsIGFuZCB3aWxsIGFsc28gY2xlYXIgdGhlIGtleSBkYXRhIGluIHRoZSBUTFMgYXJlYSBvZgorICogYWxsIGNyZWF0ZWQgdGhyZWFkcy4gQXMgbWFuZGF0ZWQgYnkgUG9zaXgsIGl0IGlzIHRoZSByZXNwb25zYWJpbGl0eSBvZgorICogdGhlIGNhbGxlciBvZiBwdGhyZWFkX2tleV9kZWxldGUoKSB0byBwcm9wZXJseSByZWNsYWltIHRoZSBvYmplY3RzIHRoYXQKKyAqIHdlcmUgcG9pbnRlZCB0byBieSB0aGVzZSBkYXRhIGZpZWxkcyAoZWl0aGVyIGJlZm9yZSBvciBhZnRlciB0aGUgY2FsbCkuCisgKgorICovCisKKy8qIFRMUyBNYXAgaW1wbGVtZW50YXRpb24KKyAqLworCisjZGVmaW5lIFRMU01BUF9TVEFSVCAgICAgIChUTFNfU0xPVF9NQVhfV0VMTF9LTk9XTisxKQorI2RlZmluZSBUTFNNQVBfU0laRSAgICAgICBCSU9OSUNfVExTX1NMT1RTCisjZGVmaW5lIFRMU01BUF9CSVRTICAgICAgIDMyCisjZGVmaW5lIFRMU01BUF9XT1JEUyAgICAgICgoVExTTUFQX1NJWkUrVExTTUFQX0JJVFMtMSkvVExTTUFQX0JJVFMpCisjZGVmaW5lIFRMU01BUF9XT1JEKG0saykgIChtKS0+bWFwWyhrKS9UTFNNQVBfQklUU10KKyNkZWZpbmUgVExTTUFQX01BU0soaykgICAgKDFVIDw8ICgoaykmKFRMU01BUF9CSVRTLTEpKSkKKworLyogdGhpcyBtYWNybyBpcyB1c2VkIHRvIHF1aWNrbHkgY2hlY2sgdGhhdCBhIGtleSBiZWxvbmdzIHRvIGEgcmVhc29uYWJsZSByYW5nZSAqLworI2RlZmluZSBUTFNNQVBfVkFMSURBVEVfS0VZKGtleSkgIFwKKyAgICAoKGtleSkgPj0gVExTTUFQX1NUQVJUICYmIChrZXkpIDwgVExTTUFQX1NJWkUpCisKKy8qIHRoZSB0eXBlIG9mIHRscyBrZXkgZGVzdHJ1Y3RvciBmdW5jdGlvbnMgKi8KK3R5cGVkZWYgdm9pZCAoKnRsc19kdG9yX3QpKHZvaWQqKTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGludCAgICAgICAgIGluaXQ7ICAgICAgICAgICAgICAgICAgLyogc2VlIGNvbW1lbnQgaW4gdGxzbWFwX2xvY2soKSAqLworICAgIHVpbnQzMl90ICAgIG1hcFtUTFNNQVBfV09SRFNdOyAgICAgLyogYml0bWFwIG9mIGFsbG9jYXRlZCBrZXlzICovCisgICAgdGxzX2R0b3JfdCAgZHRvcnNbVExTTUFQX1NJWkVdOyAgICAvKiBrZXkgZGVzdHJ1Y3RvcnMgKi8KK30gdGxzbWFwX3Q7CisKK3N0YXRpYyBwdGhyZWFkX211dGV4X3QgIF90bHNtYXBfbG9jayA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7CitzdGF0aWMgdGxzbWFwX3QgICAgICAgICBfdGxzbWFwOworCisvKiBsb2NrIHRoZSBnbG9iYWwgVExTIG1hcCBsb2NrIGFuZCByZXR1cm4gYSBoYW5kbGUgdG8gaXQgKi8KK3N0YXRpYyBfX2lubGluZV9fIHRsc21hcF90KiB0bHNtYXBfbG9jayh2b2lkKQoreworICAgIHRsc21hcF90KiAgIG0gPSAmX3Rsc21hcDsKKworICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmX3Rsc21hcF9sb2NrKTsKKyAgICAvKiB3ZSBuZWVkIHRvIGluaXRpYWxpemUgdGhlIGZpcnN0IGVudHJ5IG9mIHRoZSAnbWFwJyBhcnJheQorICAgICAqIHdpdGggdGhlIHZhbHVlIFRMU19ERUZBVUxUX0FMTE9DX01BUC4gZG9pbmcgaXQgc3RhdGljYWxseQorICAgICAqIHdoZW4gZGVjbGFyaW5nIF90bHNtYXAgaXMgYSBiaXQgYXdrd2FyZCBhbmQgaXMgZ29pbmcgdG8KKyAgICAgKiBwcm9kdWNlIHdhcm5pbmdzLCBzbyBkbyBpdCB0aGUgZmlyc3QgdGltZSB3ZSB1c2UgdGhlIG1hcAorICAgICAqIGluc3RlYWQKKyAgICAgKi8KKyAgICBpZiAoX191bmxpa2VseSghbS0+aW5pdCkpIHsKKyAgICAgICAgVExTTUFQX1dPUkQobSwwKSA9IFRMU19ERUZBVUxUX0FMTE9DX01BUDsKKyAgICAgICAgbS0+aW5pdCAgICAgICAgICA9IDE7CisgICAgfQorICAgIHJldHVybiBtOworfQorCisvKiB1bmxvY2sgdGhlIGdsb2JhbCBUTFMgbWFwICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHRsc21hcF91bmxvY2sodGxzbWFwX3QqICBtKQoreworICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfdGxzbWFwX2xvY2spOworICAgICh2b2lkKW07ICAvKiBhIGdvb2QgY29tcGlsZXIgaXMgYSBoYXBweSBjb21waWxlciAqLworfQorCisvKiB0ZXN0IHRvIHNlZSB3ZXRoZXIgYSBrZXkgaXMgYWxsb2NhdGVkICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgdGxzbWFwX3Rlc3QodGxzbWFwX3QqICBtLCBpbnQgIGtleSkKK3sKKyAgICByZXR1cm4gKFRMU01BUF9XT1JEKG0sa2V5KSAmIFRMU01BUF9NQVNLKGtleSkpICE9IDA7Cit9CisKKy8qIHNldCB0aGUgZGVzdHJ1Y3RvciBhbmQgYml0IGZsYWcgb24gYSBuZXdseSBhbGxvY2F0ZWQga2V5ICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHRsc21hcF9zZXQodGxzbWFwX3QqICBtLCBpbnQgIGtleSwgdGxzX2R0b3JfdCAgZHRvcikKK3sKKyAgICBUTFNNQVBfV09SRChtLGtleSkgfD0gVExTTUFQX01BU0soa2V5KTsKKyAgICBtLT5kdG9yc1trZXldICAgICAgID0gZHRvcjsKK30KKworLyogY2xlYXIgdGhlIGRlc3RydWN0b3IgYW5kIGJpdCBmbGFnIG9uIGFuIGV4aXN0aW5nIGtleSAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCAgdGxzbWFwX2NsZWFyKHRsc21hcF90KiAgbSwgaW50ICBrZXkpCit7CisgICAgVExTTUFQX1dPUkQobSxrZXkpICY9IH5UTFNNQVBfTUFTSyhrZXkpOworICAgIG0tPmR0b3JzW2tleV0gICAgICAgPSBOVUxMOworfQorCisvKiBhbGxvY2F0ZSBhIG5ldyBUTFMga2V5LCByZXR1cm4gLTEgaWYgbm8gcm9vbSBsZWZ0ICovCitzdGF0aWMgaW50IHRsc21hcF9hbGxvYyh0bHNtYXBfdCogIG0sIHRsc19kdG9yX3QgIGR0b3IpCit7CisgICAgaW50ICBrZXk7CisKKyAgICBmb3IgKCBrZXkgPSBUTFNNQVBfU1RBUlQ7IGtleSA8IFRMU01BUF9TSVpFOyBrZXkrKyApIHsKKyAgICAgICAgaWYgKCAhdGxzbWFwX3Rlc3QobSwga2V5KSApIHsKKyAgICAgICAgICAgIHRsc21hcF9zZXQobSwga2V5LCBkdG9yKTsKKyAgICAgICAgICAgIHJldHVybiBrZXk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIC0xOworfQorCisKK2ludCBwdGhyZWFkX2tleV9jcmVhdGUocHRocmVhZF9rZXlfdCAqa2V5LCB2b2lkICgqZGVzdHJ1Y3Rvcl9mdW5jdGlvbikodm9pZCAqKSkKK3sKKyAgICB1aW50MzJfdCAgIGVyciA9IEVOT01FTTsKKyAgICB0bHNtYXBfdCogIG1hcCA9IHRsc21hcF9sb2NrKCk7CisgICAgaW50ICAgICAgICBrICAgPSB0bHNtYXBfYWxsb2MobWFwLCBkZXN0cnVjdG9yX2Z1bmN0aW9uKTsKKworICAgIGlmIChrID49IDApIHsKKyAgICAgICAgKmtleSA9IGs7CisgICAgICAgIGVyciAgPSAwOworICAgIH0KKyAgICB0bHNtYXBfdW5sb2NrKG1hcCk7CisgICAgcmV0dXJuIGVycjsKK30KKworCisvKiBUaGlzIGRlbGV0ZXMgYSBwdGhyZWFkX2tleV90LiBub3RlIHRoYXQgdGhlIHN0YW5kYXJkIG1hbmRhdGVzIHRoYXQgdGhpcyBkb2VzCisgKiBub3QgY2FsbCB0aGUgZGVzdHJ1Y3RvciBvZiBub24tTlVMTCBrZXkgdmFsdWVzLiBJbnN0ZWFkLCBpdCBpcyB0aGUKKyAqIHJlc3BvbnNhYmlsaXR5IG9mIHRoZSBjYWxsZXIgdG8gcHJvcGVybHkgZGlzcG9zZSBvZiB0aGUgY29ycmVzcG9uZGluZyBkYXRhCisgKiBhbmQgcmVzb3VyY2VzLCB1c2luZyBhbnkgbWVhbiBpdCBmaW5kcyBzdWl0YWJsZS4KKyAqCisgKiBPbiB0aGUgb3RoZXIgaGFuZCwgdGhpcyBmdW5jdGlvbiB3aWxsIGNsZWFyIHRoZSBjb3JyZXNwb25kaW5nIGtleSBkYXRhCisgKiB2YWx1ZXMgaW4gYWxsIGtub3duIHRocmVhZHMuIHRoaXMgcHJldmVudHMgbGF0ZXIgKGludmFsaWQpIGNhbGxzIHRvCisgKiBwdGhyZWFkX2dldHNwZWNpZmljKCkgdG8gcmVjZWl2ZSBpbnZhbGlkL3N0YWxlIHZhbHVlcy4KKyAqLworaW50IHB0aHJlYWRfa2V5X2RlbGV0ZShwdGhyZWFkX2tleV90IGtleSkKK3sKKyAgICB1aW50MzJfdCAgICAgICAgICAgICBlcnI7CisgICAgcHRocmVhZF9pbnRlcm5hbF90KiAgdGhyOworICAgIHRsc21hcF90KiAgICAgICAgICAgIG1hcDsKKworICAgIGlmICghVExTTUFQX1ZBTElEQVRFX0tFWShrZXkpKSB7CisgICAgICAgIHJldHVybiBFSU5WQUw7CisgICAgfQorCisgICAgbWFwID0gdGxzbWFwX2xvY2soKTsKKworICAgIGlmICghdGxzbWFwX3Rlc3QobWFwLCBrZXkpKSB7CisgICAgICAgIGVyciA9IEVJTlZBTDsKKyAgICAgICAgZ290byBlcnIxOworICAgIH0KKworICAgIC8qIGNsZWFyIHZhbHVlIGluIGFsbCB0aHJlYWRzICovCisgICAgcHRocmVhZF9tdXRleF9sb2NrKCZnVGhyZWFkTGlzdExvY2spOworICAgIGZvciAoIHRociA9IGdUaHJlYWRMaXN0OyB0aHIgIT0gTlVMTDsgdGhyID0gdGhyLT5uZXh0ICkgeworICAgICAgICAvKiBhdm9pZCB6b21iaWUgdGhyZWFkcyB3aXRoIGEgbmVnYXRpdmUgJ2pvaW5fY291bnQnLiB0aGVzZSBhcmUgcmVhbGx5CisgICAgICAgICAqIGFscmVhZHkgZGVhZCBhbmQgZG9uJ3QgaGF2ZSBhIFRMUyBhcmVhIGFueW1vcmUuCisgICAgICAgICAqCisgICAgICAgICAqIHNpbWlsYXJseSwgaXQgaXMgcG9zc2libGUgdG8gaGF2ZSB0aHItPnRscyA9PSBOVUxMIGZvciB0aHJlYWRzIHRoYXQKKyAgICAgICAgICogd2VyZSBqdXN0IHJlY2VudGx5IGNyZWF0ZWQgdGhyb3VnaCBwdGhyZWFkX2NyZWF0ZSgpIGJ1dCB3aG9zZQorICAgICAgICAgKiBzdGFydHVwIHRyYW1wb2xpbmUgKF9fdGhyZWFkX2VudHJ5KSBoYXNuJ3QgYmVlbiBydW4geWV0IGJ5IHRoZQorICAgICAgICAgKiBzY2hlZHVsZXIuIHNvIGNoZWNrIGZvciB0aGlzIHRvby4KKyAgICAgICAgICovCisgICAgICAgIGlmICh0aHItPmpvaW5fY291bnQgPCAwIHx8ICF0aHItPnRscykKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHRoci0+dGxzW2tleV0gPSBOVUxMOworICAgIH0KKyAgICB0bHNtYXBfY2xlYXIobWFwLCBrZXkpOworCisgICAgcHRocmVhZF9tdXRleF91bmxvY2soJmdUaHJlYWRMaXN0TG9jayk7CisgICAgZXJyID0gMDsKKworZXJyMToKKyAgICB0bHNtYXBfdW5sb2NrKG1hcCk7CisgICAgcmV0dXJuIGVycjsKK30KKworCitpbnQgcHRocmVhZF9zZXRzcGVjaWZpYyhwdGhyZWFkX2tleV90IGtleSwgY29uc3Qgdm9pZCAqcHRyKQoreworICAgIGludCAgICAgICAgZXJyID0gRUlOVkFMOworICAgIHRsc21hcF90KiAgbWFwOworCisgICAgaWYgKFRMU01BUF9WQUxJREFURV9LRVkoa2V5KSkgeworICAgICAgICAvKiBjaGVjayB0aGF0IHdlJ3JlIHRyeWluZyB0byBzZXQgZGF0YSBmb3IgYW4gYWxsb2NhdGVkIGtleSAqLworICAgICAgICBtYXAgPSB0bHNtYXBfbG9jaygpOworICAgICAgICBpZiAodGxzbWFwX3Rlc3QobWFwLCBrZXkpKSB7CisgICAgICAgICAgICAoKHVpbnQzMl90ICopX19nZXRfdGxzKCkpW2tleV0gPSAodWludDMyX3QpcHRyOworICAgICAgICAgICAgZXJyID0gMDsKKyAgICAgICAgfQorICAgICAgICB0bHNtYXBfdW5sb2NrKG1hcCk7CisgICAgfQorICAgIHJldHVybiBlcnI7Cit9CisKK3ZvaWQgKiBwdGhyZWFkX2dldHNwZWNpZmljKHB0aHJlYWRfa2V5X3Qga2V5KQoreworICAgIGlmICghVExTTUFQX1ZBTElEQVRFX0tFWShrZXkpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIC8qIGZvciBwZXJmb3JtYW5jZSByZWFzb24sIHdlIGRvIG5vdCBsb2NrL3VubG9jayB0aGUgZ2xvYmFsIFRMUyBtYXAKKyAgICAgKiB0byBjaGVjayB0aGF0IHRoZSBrZXkgaXMgcHJvcGVybHkgYWxsb2NhdGVkLiBpZiB0aGUga2V5IHdhcyBub3QKKyAgICAgKiBhbGxvY2F0ZWQsIHRoZSB2YWx1ZSByZWFkIGZyb20gdGhlIFRMUyBzaG91bGQgYWx3YXlzIGJlIE5VTEwKKyAgICAgKiBkdWUgdG8gcHRocmVhZF9rZXlfZGVsZXRlKCkgY2xlYXJpbmcgdGhlIHZhbHVlcyBmb3IgYWxsIHRocmVhZHMuCisgICAgICovCisgICAgcmV0dXJuICh2b2lkICopKCgodW5zaWduZWQgKilfX2dldF90bHMoKSlba2V5XSk7Cit9CisKKy8qIFBvc2l4IG1hbmRhdGVzIHRoYXQgdGhpcyBiZSBkZWZpbmVkIGluIDxsaW1pdHMuaD4gYnV0IHdlIGRvbid0IGhhdmUKKyAqIGl0IGp1c3QgeWV0LgorICovCisjaWZuZGVmIFBUSFJFQURfREVTVFJVQ1RPUl9JVEVSQVRJT05TCisjICBkZWZpbmUgUFRIUkVBRF9ERVNUUlVDVE9SX0lURVJBVElPTlMgIDQKKyNlbmRpZgorCisvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHB0aHJlYWRfZXhpdCgpIHRvIHJlbW92ZSBhbGwgVExTIGtleSBkYXRhCisgKiBmcm9tIHRoaXMgdGhyZWFkJ3MgVExTIGFyZWEuIHRoaXMgbXVzdCBjYWxsIHRoZSBkZXN0cnVjdG9yIG9mIGFsbCBrZXlzCisgKiB0aGF0IGhhdmUgYSBub24tTlVMTCBkYXRhIHZhbHVlIChhbmQgYSBub24tTlVMTCBkZXN0cnVjdG9yKS4KKyAqCisgKiBiZWNhdXNlIGRlc3RydWN0b3JzIGNhbiBkbyBmdW5reSB0aGluZ3MgbGlrZSBkZWxldGluZy9jcmVhdGluZyBvdGhlcgorICoga2V5cywgd2UgbmVlZCB0byBpbXBsZW1lbnQgdGhpcyBpbiBhIGxvb3AKKyAqLworc3RhdGljIHZvaWQgcHRocmVhZF9rZXlfY2xlYW5fYWxsKHZvaWQpCit7CisgICAgdGxzbWFwX3QqICAgIG1hcDsKKyAgICB2b2lkKiogICAgICAgdGxzID0gKHZvaWQqKilfX2dldF90bHMoKTsKKyAgICBpbnQgICAgICAgICAgcm91bmRzID0gUFRIUkVBRF9ERVNUUlVDVE9SX0lURVJBVElPTlM7CisKKyAgICBtYXAgPSB0bHNtYXBfbG9jaygpOworCisgICAgZm9yIChyb3VuZHMgPSBQVEhSRUFEX0RFU1RSVUNUT1JfSVRFUkFUSU9OUzsgcm91bmRzID4gMDsgcm91bmRzLS0pCisgICAgeworICAgICAgICBpbnQgIGtrLCBjb3VudCA9IDA7CisKKyAgICAgICAgZm9yIChrayA9IFRMU01BUF9TVEFSVDsga2sgPCBUTFNNQVBfU0laRTsga2srKykgeworICAgICAgICAgICAgaWYgKCB0bHNtYXBfdGVzdChtYXAsIGtrKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdm9pZCogICAgICAgZGF0YSA9IHRsc1tra107CisgICAgICAgICAgICAgICAgdGxzX2R0b3JfdCAgZHRvciA9IG1hcC0+ZHRvcnNba2tdOworCisgICAgICAgICAgICAgICAgaWYgKGRhdGEgIT0gTlVMTCAmJiBkdG9yICE9IE5VTEwpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgIC8qIHdlIG5lZWQgdG8gY2xlYXIgdGhlIGtleSBkYXRhIG5vdywgdGhpcyB3aWxsIHByZXZlbnQgdGhlCisgICAgICAgICAgICAgICAgICAgICogZGVzdHJ1Y3RvciAob3IgYSBsYXRlciBvbmUpIGZyb20gc2VlaW5nIHRoZSBvbGQgdmFsdWUgaWYKKyAgICAgICAgICAgICAgICAgICAgKiBpdCBjYWxscyBwdGhyZWFkX2dldHNwZWNpZmljKCkgZm9yIHNvbWUgb2RkIHJlYXNvbgorICAgICAgICAgICAgICAgICAgICAqCisgICAgICAgICAgICAgICAgICAgICogd2UgZG8gbm90IGRvIHRoaXMgaWYgJ2R0b3IgPT0gTlVMTCcganVzdCBpbiBjYXNlIGFub3RoZXIKKyAgICAgICAgICAgICAgICAgICAgKiBkZXN0cnVjdG9yIGZ1bmN0aW9uIG1pZ2h0IGJlIHJlc3BvbnNpYmxlIGZvciBtYW51YWxseQorICAgICAgICAgICAgICAgICAgICAqIHJlbGVhc2luZyB0aGUgY29ycmVzcG9uZGluZyBkYXRhLgorICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICB0bHNba2tdID0gTlVMTDsKKworICAgICAgICAgICAgICAgICAgIC8qIGJlY2F1c2UgdGhlIGRlc3RydWN0b3IgaXMgZnJlZSB0byBjYWxsIHB0aHJlYWRfa2V5X2NyZWF0ZQorICAgICAgICAgICAgICAgICAgICAqIGFuZC9vciBwdGhyZWFkX2tleV9kZWxldGUsIHdlIG5lZWQgdG8gdGVtcG9yYXJpbHkgdW5sb2NrCisgICAgICAgICAgICAgICAgICAgICogdGhlIFRMUyBtYXAKKyAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgdGxzbWFwX3VubG9jayhtYXApOworICAgICAgICAgICAgICAgICAgICAoKmR0b3IpKGRhdGEpOworICAgICAgICAgICAgICAgICAgICBtYXAgPSB0bHNtYXBfbG9jaygpOworCisgICAgICAgICAgICAgICAgICAgIGNvdW50ICs9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyogaWYgd2UgZGlkbid0IGNhbGwgYW55IGRlc3RydWN0b3IsIHRoZXJlIGlzIG5vIG5lZWQgdG8gY2hlY2sgdGhlCisgICAgICAgICAqIFRMUyBkYXRhIGFnYWluCisgICAgICAgICAqLworICAgICAgICBpZiAoY291bnQgPT0gMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICB0bHNtYXBfdW5sb2NrKG1hcCk7Cit9CisKKy8vIG1hbiBzYXlzIHRoaXMgc2hvdWxkIGJlIGluIDxsaW51eC91bmlzdGQuaD4sIGJ1dCBpdCBpc24ndAorZXh0ZXJuIGludCB0a2lsbChpbnQgdGlkLCBpbnQgc2lnKTsKKworaW50IHB0aHJlYWRfa2lsbChwdGhyZWFkX3QgdGlkLCBpbnQgc2lnKQoreworICAgIGludCAgcmV0OworICAgIGludCAgb2xkX2Vycm5vID0gZXJybm87CisgICAgcHRocmVhZF9pbnRlcm5hbF90ICogdGhyZWFkID0gKHB0aHJlYWRfaW50ZXJuYWxfdCAqKXRpZDsKKworICAgIHJldCA9IHRraWxsKHRocmVhZC0+a2VybmVsX2lkLCBzaWcpOworICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgIHJldCA9IGVycm5vOworICAgICAgICBlcnJubyA9IG9sZF9lcnJubzsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQorCitleHRlcm4gaW50IF9fcnRfc2lncHJvY21hc2soaW50LCBjb25zdCBzaWdzZXRfdCAqLCBzaWdzZXRfdCAqLCBzaXplX3QpOworCitpbnQgcHRocmVhZF9zaWdtYXNrKGludCBob3csIGNvbnN0IHNpZ3NldF90ICpzZXQsIHNpZ3NldF90ICpvc2V0KQoreworICAgIHJldHVybiBfX3J0X3NpZ3Byb2NtYXNrKGhvdywgc2V0LCBvc2V0LCBfTlNJRyAvIDgpOworfQorCisKK2ludCBwdGhyZWFkX2dldGNwdWNsb2NraWQocHRocmVhZF90ICB0aWQsIGNsb2NraWRfdCAgKmNsb2NraWQpCit7CisgICAgY29uc3QgaW50ICAgICAgICAgICAgQ0xPQ0tfSURUWVBFX0JJVFMgPSAzOworICAgIHB0aHJlYWRfaW50ZXJuYWxfdCogIHRocmVhZCA9IChwdGhyZWFkX2ludGVybmFsX3QqKXRpZDsKKworICAgIGlmICghdGhyZWFkKQorICAgICAgICByZXR1cm4gRVNSQ0g7CisKKyAgICAqY2xvY2tpZCA9IENMT0NLX1RIUkVBRF9DUFVUSU1FX0lEIHwgKHRocmVhZC0+a2VybmVsX2lkIDw8IENMT0NLX0lEVFlQRV9CSVRTKTsKKyAgICByZXR1cm4gMDsKK30KKworCisvKiBOT1RFOiB0aGlzIGltcGxlbWVudGF0aW9uIGRvZXNuJ3Qgc3VwcG9ydCBhIGluaXQgZnVuY3Rpb24gdGhhdCB0aHJvd3MgYSBDKysgZXhjZXB0aW9uCisgKiAgICAgICBvciBjYWxscyBmb3JrKCkKKyAqLworaW50ICBwdGhyZWFkX29uY2UoIHB0aHJlYWRfb25jZV90KiAgb25jZV9jb250cm9sLCAgdm9pZCAoKmluaXRfcm91dGluZSkodm9pZCkgKQoreworICAgIHN0YXRpYyBwdGhyZWFkX211dGV4X3QgICBvbmNlX2xvY2sgPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOworCisgICAgaWYgKCpvbmNlX2NvbnRyb2wgPT0gUFRIUkVBRF9PTkNFX0lOSVQpIHsKKyAgICAgICAgX25vcm1hbF9sb2NrKCAmb25jZV9sb2NrICk7CisgICAgICAgIGlmICgqb25jZV9jb250cm9sID09IFBUSFJFQURfT05DRV9JTklUKSB7CisgICAgICAgICAgICAoKmluaXRfcm91dGluZSkoKTsKKyAgICAgICAgICAgICpvbmNlX2NvbnRyb2wgPSB+UFRIUkVBRF9PTkNFX0lOSVQ7CisgICAgICAgIH0KKyAgICAgICAgX25vcm1hbF91bmxvY2soICZvbmNlX2xvY2sgKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9wdGhyZWFkX2ludGVybmFsLmggYi9saWJjL2Jpb25pYy9wdGhyZWFkX2ludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI0ZTgwYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL3B0aHJlYWRfaW50ZXJuYWwuaApAQCAtMCwwICsxLDExNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfUFRIUkVBRF9JTlRFUk5BTF9IXworI2RlZmluZSBfUFRIUkVBRF9JTlRFUk5BTF9IXworCisjaW5jbHVkZSA8cHRocmVhZC5oPgorCitfX0JFR0lOX0RFQ0xTCisKK3R5cGVkZWYgc3RydWN0IHB0aHJlYWRfaW50ZXJuYWxfdAoreworICAgIHN0cnVjdCBwdGhyZWFkX2ludGVybmFsX3QqICBuZXh0OworICAgIHN0cnVjdCBwdGhyZWFkX2ludGVybmFsX3QqKiBwcmVmOworICAgIHB0aHJlYWRfYXR0cl90ICAgICAgICAgICAgICBhdHRyOworICAgIHBpZF90ICAgICAgICAgICAgICAgICAgICAgICBrZXJuZWxfaWQ7CisgICAgcHRocmVhZF9jb25kX3QgICAgICAgICAgICAgIGpvaW5fY29uZDsKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgam9pbl9jb3VudDsKKyAgICB2b2lkKiAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbHVlOworICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm47CisgICAgX19wdGhyZWFkX2NsZWFudXBfdCogICAgICAgIGNsZWFudXBfc3RhY2s7CisgICAgdm9pZCoqICAgICAgICAgICAgICAgICAgICAgIHRsczsgICAgICAgICAvKiB0aHJlYWQtbG9jYWwgc3RvcmFnZSBhcmVhICovCit9IHB0aHJlYWRfaW50ZXJuYWxfdDsKKworZXh0ZXJuIHZvaWQgX2luaXRfdGhyZWFkKHB0aHJlYWRfaW50ZXJuYWxfdCAqIHRocmVhZCwgcGlkX3Qga2VybmVsX2lkLCBwdGhyZWFkX2F0dHJfdCAqIGF0dHIsIHZvaWQgKiBzdGFja19iYXNlKTsKKworLyogbmVlZGVkIGJ5IHBvc2l4LXRpbWVycy5jICovCisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgdGltZXNwZWNfYWRkKCBzdHJ1Y3QgdGltZXNwZWMqICBhLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMqICBiICkKK3sKKyAgICBhLT50dl9zZWMgICs9IGItPnR2X3NlYzsKKyAgICBhLT50dl9uc2VjICs9IGItPnR2X25zZWM7CisgICAgaWYgKGEtPnR2X25zZWMgPj0gMTAwMDAwMDAwMCkgeworICAgICAgICBhLT50dl9uc2VjIC09IDEwMDAwMDAwMDA7CisgICAgICAgIGEtPnR2X3NlYyAgKz0gMTsKKyAgICB9Cit9CisKK3N0YXRpYyAgX19pbmxpbmVfXyB2b2lkIHRpbWVzcGVjX3N1Yiggc3RydWN0IHRpbWVzcGVjKiAgYSwgY29uc3Qgc3RydWN0IHRpbWVzcGVjKiAgYiApCit7CisgICAgYS0+dHZfc2VjICAtPSBiLT50dl9zZWM7CisgICAgYS0+dHZfbnNlYyAtPSBiLT50dl9uc2VjOworICAgIGlmIChhLT50dl9uc2VjIDwgMCkgeworICAgICAgICBhLT50dl9uc2VjICs9IDEwMDAwMDAwMDA7CisgICAgICAgIGEtPnR2X3NlYyAgLT0gMTsKKyAgICB9Cit9CisKK3N0YXRpYyAgX19pbmxpbmVfXyB2b2lkIHRpbWVzcGVjX3plcm8oIHN0cnVjdCB0aW1lc3BlYyogIGEgKQoreworICAgIGEtPnR2X3NlYyA9IGEtPnR2X25zZWMgPSAwOworfQorCitzdGF0aWMgIF9faW5saW5lX18gaW50IHRpbWVzcGVjX2lzX3plcm8oIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyogIGEgKQoreworICAgIHJldHVybiAoYS0+dHZfc2VjID09IDAgJiYgYS0+dHZfbnNlYyA9PSAwKTsKK30KKworc3RhdGljICBfX2lubGluZV9fIGludCB0aW1lc3BlY19jbXAoIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyogIGEsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyogIGIgKQoreworICAgIGlmIChhLT50dl9zZWMgIDwgYi0+dHZfc2VjKSAgcmV0dXJuIC0xOworICAgIGlmIChhLT50dl9zZWMgID4gYi0+dHZfc2VjKSAgcmV0dXJuICsxOworICAgIGlmIChhLT50dl9uc2VjIDwgYi0+dHZfbnNlYykgcmV0dXJuIC0xOworICAgIGlmIChhLT50dl9uc2VjID4gYi0+dHZfbnNlYykgcmV0dXJuICsxOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgIF9faW5saW5lX18gaW50IHRpbWVzcGVjX2NtcDAoIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyogIGEgKQoreworICAgIGlmIChhLT50dl9zZWMgPCAwKSByZXR1cm4gLTE7CisgICAgaWYgKGEtPnR2X3NlYyA+IDApIHJldHVybiArMTsKKyAgICBpZiAoYS0+dHZfbnNlYyA8IDApIHJldHVybiAtMTsKKyAgICBpZiAoYS0+dHZfbnNlYyA+IDApIHJldHVybiArMTsKKyAgICByZXR1cm4gMDsKK30KKworZXh0ZXJuIGludCAgX19wdGhyZWFkX2NvbmRfdGltZWR3YWl0KHB0aHJlYWRfY29uZF90KiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9tdXRleF90KiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWMqLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9ja2lkX3QpOworCitleHRlcm4gaW50ICBfX3B0aHJlYWRfY29uZF90aW1lZHdhaXRfcmVsYXRpdmUocHRocmVhZF9jb25kX3QqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0aHJlYWRfbXV0ZXhfdCosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjKik7CisKKy8qIG5lZWRlZCBieSBmb3JrLmMgKi8KK2V4dGVybiB2b2lkIF9fdGltZXJfdGFibGVfc3RhcnRfc3RvcChpbnQgIHN0b3ApOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX1BUSFJFQURfSU5URVJOQUxfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3B0cmFjZS5jIGIvbGliYy9iaW9uaWMvcHRyYWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFjYTAwYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL3B0cmFjZS5jCkBAIC0wLDAgKzEsNjMgQEAKKy8qDQorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QNCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zDQorICogYXJlIG1ldDoNCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodA0KKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodA0KKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbg0KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUNCisgKiAgICBkaXN0cmlidXRpb24uDQorICoNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTDQorICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QNCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUw0KKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFDQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULA0KKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsDQorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTDQorICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEDQorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLA0KKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVA0KKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRg0KKyAqIFNVQ0ggREFNQUdFLg0KKyAqLw0KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4NCisjaW5jbHVkZSA8c3lzL3B0cmFjZS5oPg0KKw0KK2V4dGVybiBsb25nIF9fcHRyYWNlKGludCByZXF1ZXN0LCBwaWRfdCBwaWQsIHZvaWQgKmFkZHIsIHZvaWQgKmRhdGEpOw0KKw0KK2xvbmcgcHRyYWNlKGludCByZXF1ZXN0LCBwaWRfdCBwaWQsIHZvaWQgKiBhZGRyLCB2b2lkICogZGF0YSkNCit7DQorICAgIHN3aXRjaCAocmVxdWVzdCkgew0KKyAgICAgICAgY2FzZSBQVFJBQ0VfUEVFS1VTUjoNCisgICAgICAgIGNhc2UgUFRSQUNFX1BFRUtURVhUOg0KKyAgICAgICAgY2FzZSBQVFJBQ0VfUEVFS0RBVEE6DQorICAgICAgICB7DQorICAgICAgICAgICAgbG9uZyB3b3JkOw0KKyAgICAgICAgICAgIGxvbmcgcmV0Ow0KKyAgICAgICAgICAgIA0KKyAgICAgICAgICAgIHJldCA9IF9fcHRyYWNlKHJlcXVlc3QsIHBpZCwgYWRkciwgJndvcmQpOw0KKyAgICAgICAgICAgIGlmIChyZXQgPT0gMCkgew0KKyAgICAgICAgICAgICAgICByZXR1cm4gd29yZDsNCisgICAgICAgICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAgICAgICAvLyBfX3B0cmFjZSB3aWxsIHNldCBlcnJubyBmb3IgdXMNCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisNCisgICAgICAgIGRlZmF1bHQ6DQorICAgICAgICAgICAgIHJldHVybiBfX3B0cmFjZShyZXF1ZXN0LCBwaWQsIGFkZHIsIGRhdGEpOw0KKyAgICB9DQorfQ0KKw0KKy8qDQorICogSG9vayBmb3IgZ2RiIHRvIGdldCBub3RpZmllZCB3aGVuIGEgdGhyZWFkIGlzIGNyZWF0ZWQNCisgKi8NCit2b2lkIF90aHJlYWRfY3JlYXRlZF9ob29rKHBpZF90IHRocmVhZF9pZCkgX19hdHRyaWJ1dGVfXygobm9pbmxpbmUpKTsNCit2b2lkIF90aHJlYWRfY3JlYXRlZF9ob29rKHBpZF90IHRocmVhZF9pZCkNCit7DQorfQ0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3B1dHV0bGluZS5jIGIvbGliYy9iaW9uaWMvcHV0dXRsaW5lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ0OTA2OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL3B1dHV0bGluZS5jCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHV0bXAuaD4KKworCit2b2lkIHB1dHV0bGluZShzdHJ1Y3QgdXRtcCogdXRtcCkKK3sKKyAgICBGSUxFKiBmOworICAgIHN0cnVjdCB1dG1wIHU7CisgICAgaW50IGk7CisKKyAgICBpZiAoIShmID0gZm9wZW4oX1BBVEhfVVRNUCwgIncrIikpKQorICAgICAgICByZXR1cm47CisKKyAgICB3aGlsZSAoZnJlYWQoJnUsIHNpemVvZihzdHJ1Y3QgdXRtcCksIDEsIGYpID09IDEpCisgICAgeworICAgICAgICBpZiAoIXN0cm5jbXAodXRtcC0+dXRfbGluZSwgdS51dF9saW5lLCBzaXplb2YodS51dF9saW5lKSAtMSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgoaSA9IGZ0ZWxsKGYpKSA8IDApCisgICAgICAgICAgICAgICAgZ290byByZXQ7CisgICAgICAgICAgICBpZiAoZnNlZWsoZiwgaSAtIHNpemVvZihzdHJ1Y3QgdXRtcCksIFNFRUtfU0VUKSA8IDApCisgICAgICAgICAgICAgICAgZ290byByZXQ7CisgICAgICAgICAgICBmd3JpdGUodXRtcCwgc2l6ZW9mKHN0cnVjdCB1dG1wKSwgMSwgZik7CisgICAgICAgICAgICBnb3RvIHJldDsKKyAgICAgICAgfQorICAgIH0KKworCisgICAgZmNsb3NlKGYpOworCisgICAgaWYgKCEoZiA9IGZvcGVuKF9QQVRIX1VUTVAsICJ3KyIpKSkKKyAgICAgICAgcmV0dXJuOworICAgIGZ3cml0ZSh1dG1wLCBzaXplb2Yoc3RydWN0IHV0bXApLCAxLCBmKTsKKworcmV0OgorICAgIGZjbG9zZShmKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3JhbmQ0OC5oIGIvbGliYy9iaW9uaWMvcmFuZDQ4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGEzZDgzZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL3JhbmQ0OC5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTMgTWFydGluIEJpcmdtZWllcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBZb3UgbWF5IHJlZGlzdHJpYnV0ZSB1bm1vZGlmaWVkIG9yIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoaXMgc291cmNlCisgKiBjb2RlIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgYW5kIHRoZQorICogZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIHJldGFpbmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYGBhcyBpcycnLCBhbmQgY29tZXMgd2l0aCBubyB3YXJyYW50aWVzCisgKiBvZiBhbnkga2luZC4gSSBzaGFsbCBpbiBubyBldmVudCBiZSBsaWFibGUgZm9yIGFueXRoaW5nIHRoYXQgaGFwcGVucworICogdG8gYW55b25lL2FueXRoaW5nIHdoZW4gdXNpbmcgdGhpcyBzb2Z0d2FyZS4KKyAqCisgKiAkRnJlZUJTRDogc3JjL2xpYi9saWJjL2dlbi9yYW5kNDguaCx2IDEuMiAyMDAyLzAyLzAxIDAxOjMyOjE5IG9icmllbiBFeHAgJAorICovCisKKyNpZm5kZWYgX1JBTkQ0OF9IXworI2RlZmluZSBfUkFORDQ4X0hfCisKKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKK3ZvaWQJCV9kb3JhbmQ0OCh1bnNpZ25lZCBzaG9ydFszXSk7CisKKyNkZWZpbmUJUkFORDQ4X1NFRURfMAkoMHgzMzBlKQorI2RlZmluZQlSQU5ENDhfU0VFRF8xCSgweGFiY2QpCisjZGVmaW5lCVJBTkQ0OF9TRUVEXzIJKDB4MTIzNCkKKyNkZWZpbmUJUkFORDQ4X01VTFRfMAkoMHhlNjZkKQorI2RlZmluZQlSQU5ENDhfTVVMVF8xCSgweGRlZWMpCisjZGVmaW5lCVJBTkQ0OF9NVUxUXzIJKDB4MDAwNSkKKyNkZWZpbmUJUkFORDQ4X0FERAkoMHgwMDBiKQorCisjZW5kaWYgLyogX1JBTkQ0OF9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvcmVhbHBhdGguYyBiL2xpYmMvYmlvbmljL3JlYWxwYXRoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc0YTNhMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL3JlYWxwYXRoLmMKQEAgLTAsMCArMSwxNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTQKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIEphbi1TaW1vbiBQZW5kcnkuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKKyAqCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCitzdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpcmVhbHBhdGguYwk4LjEgKEJlcmtlbGV5KSAyLzE2Lzk0IjsKK3N0YXRpYyBjaGFyIHJjc2lkW10gPQorIiRGcmVlQlNEOiAvcmVwb21hbi9yL25jdnMvc3JjL2xpYi9saWJjL3N0ZGxpYi9yZWFscGF0aC5jLHYgMS42LjIuMSAyMDAzLzA4LzAzIDIzOjQ3OjM5IG5lY3RhciBFeHAgJCI7CisjZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLworCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworLyoKKyAqIGNoYXIgKnJlYWxwYXRoKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgcmVzb2x2ZWRfcGF0aFtNQVhQQVRITEVOXSk7CisgKgorICogRmluZCB0aGUgcmVhbCBuYW1lIG9mIHBhdGgsIGJ5IHJlbW92aW5nIGFsbCAiLiIsICIuLiIgYW5kIHN5bWxpbmsKKyAqIGNvbXBvbmVudHMuICBSZXR1cm5zIChyZXNvbHZlZCkgb24gc3VjY2Vzcywgb3IgKE5VTEwpIG9uIGZhaWx1cmUsCisgKiBpbiB3aGljaCBjYXNlIHRoZSBwYXRoIHdoaWNoIGNhdXNlZCB0cm91YmxlIGlzIGxlZnQgaW4gKHJlc29sdmVkKS4KKyAqLworY2hhciAqCityZWFscGF0aChwYXRoLCByZXNvbHZlZCkKKwljb25zdCBjaGFyICpwYXRoOworCWNoYXIgKnJlc29sdmVkOworeworCXN0cnVjdCBzdGF0IHNiOworCWludCBmZCwgbiwgcm9vdGQsIHNlcnJubzsKKwljaGFyICpwLCAqcSwgd2J1ZltNQVhQQVRITEVOXTsKKyAgICAgIGludCBzeW1saW5rcyA9IDA7CisKKwkvKiBTYXZlIHRoZSBzdGFydGluZyBwb2ludC4gKi8KKwlpZiAoKGZkID0gb3BlbigiLiIsIE9fUkRPTkxZKSkgPCAwKSB7CisJCSh2b2lkKXN0cmNweShyZXNvbHZlZCwgIi4iKTsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisKKwkvKgorCSAqIEZpbmQgdGhlIGRpcm5hbWUgYW5kIGJhc2VuYW1lIGZyb20gdGhlIHBhdGggdG8gYmUgcmVzb2x2ZWQuCisJICogQ2hhbmdlIGRpcmVjdG9yeSB0byB0aGUgZGlybmFtZSBjb21wb25lbnQuCisJICogbHN0YXQgdGhlIGJhc2VuYW1lIHBhcnQuCisJICogICAgIGlmIGl0IGlzIGEgc3ltbGluaywgcmVhZCBpbiB0aGUgdmFsdWUgYW5kIGxvb3AuCisJICogICAgIGlmIGl0IGlzIGEgZGlyZWN0b3J5LCB0aGVuIGNoYW5nZSB0byB0aGF0IGRpcmVjdG9yeS4KKwkgKiBnZXQgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IG5hbWUgYW5kIGFwcGVuZCB0aGUgYmFzZW5hbWUuCisJICovCisJKHZvaWQpc3RybmNweShyZXNvbHZlZCwgcGF0aCwgTUFYUEFUSExFTiAtIDEpOworCXJlc29sdmVkW01BWFBBVEhMRU4gLSAxXSA9ICdcMCc7Citsb29wOgorCXEgPSBzdHJyY2hyKHJlc29sdmVkLCAnLycpOworCWlmIChxICE9IE5VTEwpIHsKKwkJcCA9IHEgKyAxOworCQlpZiAocSA9PSByZXNvbHZlZCkKKwkJCXEgPSAiLyI7CisJCWVsc2UgeworCQkJZG8geworCQkJCS0tcTsKKwkJCX0gd2hpbGUgKHEgPiByZXNvbHZlZCAmJiAqcSA9PSAnLycpOworCQkJcVsxXSA9ICdcMCc7CisJCQlxID0gcmVzb2x2ZWQ7CisJCX0KKwkJaWYgKGNoZGlyKHEpIDwgMCkKKwkJCWdvdG8gZXJyMTsKKwl9IGVsc2UKKwkJcCA9IHJlc29sdmVkOworCisJLyogRGVhbCB3aXRoIHRoZSBsYXN0IGNvbXBvbmVudC4gKi8KKwlpZiAoKnAgIT0gJ1wwJyAmJiBsc3RhdChwLCAmc2IpID09IDApIHsKKwkJaWYgKFNfSVNMTksoc2Iuc3RfbW9kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICBpZiAoKytzeW1saW5rcyA+IE1BWFNZTUxJTktTKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJubyA9IEVMT09QOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnIxOworICAgICAgICAgICAgICAgICAgICAgIH0KKwkJCW4gPSByZWFkbGluayhwLCByZXNvbHZlZCwgTUFYUEFUSExFTiAtIDEpOworCQkJaWYgKG4gPCAwKQorCQkJCWdvdG8gZXJyMTsKKwkJCXJlc29sdmVkW25dID0gJ1wwJzsKKwkJCWdvdG8gbG9vcDsKKwkJfQorCQlpZiAoU19JU0RJUihzYi5zdF9tb2RlKSkgeworCQkJaWYgKGNoZGlyKHApIDwgMCkKKwkJCQlnb3RvIGVycjE7CisJCQlwID0gIiI7CisJCX0KKwl9CisKKwkvKgorCSAqIFNhdmUgdGhlIGxhc3QgY29tcG9uZW50IG5hbWUgYW5kIGdldCB0aGUgZnVsbCBwYXRobmFtZSBvZgorCSAqIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKwkgKi8KKwkodm9pZClzdHJjcHkod2J1ZiwgcCk7CisJaWYgKGdldGN3ZChyZXNvbHZlZCwgTUFYUEFUSExFTikgPT0gMCkKKwkJZ290byBlcnIxOworCisJLyoKKwkgKiBKb2luIHRoZSB0d28gc3RyaW5ncyB0b2dldGhlciwgZW5zdXJpbmcgdGhhdCB0aGUgcmlnaHQgdGhpbmcKKwkgKiBoYXBwZW5zIGlmIHRoZSBsYXN0IGNvbXBvbmVudCBpcyBlbXB0eSwgb3IgdGhlIGRpcm5hbWUgaXMgcm9vdC4KKwkgKi8KKwlpZiAocmVzb2x2ZWRbMF0gPT0gJy8nICYmIHJlc29sdmVkWzFdID09ICdcMCcpCisJCXJvb3RkID0gMTsKKwllbHNlCisJCXJvb3RkID0gMDsKKworCWlmICgqd2J1ZikgeworCQlpZiAoc3RybGVuKHJlc29sdmVkKSArIHN0cmxlbih3YnVmKSArICgxLXJvb3RkKSArIDEgPgorCQkgICAgTUFYUEFUSExFTikgeworCQkJZXJybm8gPSBFTkFNRVRPT0xPTkc7CisJCQlnb3RvIGVycjE7CisJCX0KKwkJaWYgKHJvb3RkID09IDApCisJCQkodm9pZClzdHJjYXQocmVzb2x2ZWQsICIvIik7CisJCSh2b2lkKXN0cmNhdChyZXNvbHZlZCwgd2J1Zik7CisJfQorCisJLyogR28gYmFjayB0byB3aGVyZSB3ZSBjYW1lIGZyb20uICovCisJaWYgKGZjaGRpcihmZCkgPCAwKSB7CisJCXNlcnJubyA9IGVycm5vOworCQlnb3RvIGVycjI7CisJfQorCisJLyogSXQncyBva2F5IGlmIHRoZSBjbG9zZSBmYWlscywgd2hhdCdzIGFuIGZkIG1vcmUgb3IgbGVzcz8gKi8KKwkodm9pZCljbG9zZShmZCk7CisJcmV0dXJuIChyZXNvbHZlZCk7CisKK2VycjE6CXNlcnJubyA9IGVycm5vOworCSh2b2lkKWZjaGRpcihmZCk7CitlcnIyOgkodm9pZCljbG9zZShmZCk7CisJZXJybm8gPSBzZXJybm87CisJcmV0dXJuIChOVUxMKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3J1bGVzLmphbSBiL2xpYmMvYmlvbmljL3J1bGVzLmphbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTk1MjZiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvcnVsZXMuamFtCkBAIC0wLDAgKzEgQEAKK05PX0xPQ0FMX1NSQyA9IG1hbGxvY19sZWFrLmMgOwpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvc2VtYXBob3JlLmMgYi9saWJjL2Jpb25pYy9zZW1hcGhvcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzk0NjAwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvc2VtYXBob3JlLmMKQEAgLTAsMCArMSwyMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDxzZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8c3lzL2F0b21pY3MuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisKK2ludCBzZW1faW5pdChzZW1fdCAqc2VtLCBpbnQgcHNoYXJlZCwgdW5zaWduZWQgaW50IHZhbHVlKQoreworICAgIGlmIChzZW0gPT0gTlVMTCkgeworICAgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmIChwc2hhcmVkICE9IDApIHsKKyAgICAgICAgZXJybm8gPSBFTk9TWVM7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBzZW0tPmNvdW50ID0gdmFsdWU7CisgICAgcmV0dXJuIDA7Cit9CisKKworaW50IHNlbV9kZXN0cm95KHNlbV90ICpzZW0pCit7CisgICAgaWYgKHNlbSA9PSBOVUxMKSB7CisgICAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGlmIChzZW0tPmNvdW50ID09IDApIHsKKyAgICAgICAgZXJybm8gPSBFQlVTWTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworCitzZW1fdCAqc2VtX29wZW4oY29uc3QgY2hhciAqbmFtZSwgaW50IG9mbGFnLCAuLi4pCit7CisgICAgbmFtZT1uYW1lOworICAgIG9mbGFnPW9mbGFnOworCisgICAgZXJybm8gPSBFTk9TWVM7CisgICAgcmV0dXJuIFNFTV9GQUlMRUQ7Cit9CisKKworaW50IHNlbV9jbG9zZShzZW1fdCAqc2VtKQoreworICAgIGlmIChzZW0gPT0gTlVMTCkgeworICAgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBlcnJubyA9IEVOT1NZUzsKKyAgICByZXR1cm4gLTE7Cit9CisKKworaW50IHNlbV91bmxpbmsoY29uc3QgY2hhciAqIG5hbWUpCit7CisgICAgZXJybm8gPSBFTk9TWVM7CisgICAgcmV0dXJuIC0xOworfQorCisKK3N0YXRpYyBpbnQKK19fYXRvbWljX2RlY19pZl9wb3NpdGl2ZSggdm9sYXRpbGUgdW5zaWduZWQgaW50KiAgcHZhbHVlICkKK3sKKyAgICB1bnNpZ25lZCBpbnQgIG9sZDsKKworICAgIGRvIHsKKyAgICAgICAgb2xkID0gKnB2YWx1ZTsKKyAgICB9CisgICAgd2hpbGUgKCBvbGQgIT0gMCAmJiBfX2F0b21pY19jbXB4Y2hnKCAoaW50KW9sZCwgKGludClvbGQtMSwgKHZvbGF0aWxlIGludCopcHZhbHVlICkgIT0gMCApOworCisgICAgcmV0dXJuIG9sZDsKK30KKworaW50IHNlbV93YWl0KHNlbV90ICpzZW0pCit7CisgICAgaWYgKHNlbSA9PSBOVUxMKSB7CisgICAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgZm9yICg7OykgeworICAgICAgICBpZiAoX19hdG9taWNfZGVjX2lmX3Bvc2l0aXZlKCZzZW0tPmNvdW50KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIF9fZnV0ZXhfd2FpdCgmc2VtLT5jb3VudCwgMCwgMCk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitpbnQgc2VtX3RpbWVkd2FpdChzZW1fdCAqc2VtLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKmFic190aW1lb3V0KQoreworICAgIGludCAgcmV0OworCisgICAgaWYgKHNlbSA9PSBOVUxMKSB7CisgICAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLyogUE9TSVggc2F5cyB3ZSBuZWVkIHRvIHRyeSB0byBkZWNyZW1lbnQgdGhlIHNlbWFwaG9yZQorICAgICAqIGJlZm9yZSBjaGVja2luZyB0aGUgdGltZW91dCB2YWx1ZSAqLworICAgIGlmIChfX2F0b21pY19kZWNfaWZfcG9zaXRpdmUoJnNlbS0+Y291bnQpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8qIGNoZWNrIGl0IGFzIHBlciBQb3NpeCAqLworICAgIGlmIChhYnNfdGltZW91dCA9PSBOVUxMICAgIHx8CisgICAgICAgIGFic190aW1lb3V0LT50dl9zZWMgPCAwIHx8CisgICAgICAgIGFic190aW1lb3V0LT50dl9uc2VjIDwgMCB8fAorICAgICAgICBhYnNfdGltZW91dC0+dHZfbnNlYyA+PSAxMDAwMDAwMDAwKQorICAgIHsKKyAgICAgICAgZXJybm8gPSBFSU5WQUw7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIHN0cnVjdCB0aW1lc3BlYyB0czsKKyAgICAgICAgaW50ICAgICAgICAgICAgIHJldDsKKworICAgICAgICAvKiBQb3NpeCBtYW5kYXRlcyBDTE9DS19SRUFMVElNRSBoZXJlICovCisgICAgICAgIGNsb2NrX2dldHRpbWUoIENMT0NLX1JFQUxUSU1FLCAmdHMgKTsKKyAgICAgICAgdHMudHZfc2VjICA9IGFic190aW1lb3V0LT50dl9zZWMgLSB0cy50dl9zZWM7CisgICAgICAgIHRzLnR2X25zZWMgPSBhYnNfdGltZW91dC0+dHZfbnNlYyAtIHRzLnR2X25zZWM7CisgICAgICAgIGlmICh0cy50dl9uc2VjIDwgMCkgeworICAgICAgICAgICAgdHMudHZfbnNlYyArPSAxMDAwMDAwMDAwOworICAgICAgICAgICAgdHMudHZfc2VjICAtPSAxOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRzLnR2X3NlYyA8IDAgfHwgdHMudHZfbnNlYyA8IDApIHsKKyAgICAgICAgICAgIGVycm5vID0gRVRJTUVET1VUOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgcmV0ID0gX19mdXRleF93YWl0KCZzZW0tPmNvdW50LCAwLCAmdHMpOworCisgICAgICAgIC8qIHJldHVybiBpbiBjYXNlIG9mIHRpbWVvdXQgb3IgaW50ZXJydXB0ICovCisgICAgICAgIGlmIChyZXQgPT0gLUVUSU1FRE9VVCB8fCByZXQgPT0gLUVJTlRSKSB7CisgICAgICAgICAgICBlcnJubyA9IC1yZXQ7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBpZiAoX19hdG9taWNfZGVjX2lmX3Bvc2l0aXZlKCZzZW0tPmNvdW50KSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworaW50IHNlbV9wb3N0KHNlbV90ICpzZW0pCit7CisgICAgaWYgKHNlbSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gRUlOVkFMOworCisgICAgaWYgKF9fYXRvbWljX2luYygodm9sYXRpbGUgaW50Kikmc2VtLT5jb3VudCkgPT0gMCkKKyAgICAgICAgX19mdXRleF93YWtlKCZzZW0tPmNvdW50LCAxKTsKKworICAgIHJldHVybiAwOworfQorCitpbnQgIHNlbV90cnl3YWl0KHNlbV90ICpzZW0pCit7CisgICAgaWYgKHNlbSA9PSBOVUxMKSB7CisgICAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKF9fYXRvbWljX2RlY19pZl9wb3NpdGl2ZSgmc2VtLT5jb3VudCkgPiAwKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBFQUdBSU47CisgICAgfQorfQorCitpbnQgIHNlbV9nZXR2YWx1ZShzZW1fdCAqc2VtLCBpbnQgKnN2YWwpCit7CisgICAgaWYgKHNlbSA9PSBOVUxMIHx8IHN2YWwgPT0gTlVMTCkgeworICAgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgICpzdmFsID0gc2VtLT5jb3VudDsKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3NoYTEuYyBiL2xpYmMvYmlvbmljL3NoYTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmE5NWE1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvc2hhMS5jCkBAIC0wLDAgKzEsMjcwIEBACisvKgkkTmV0QlNEOiBzaGExLmMsdiAxLjEgMjAwNS8xMi8yMCAyMDoyOTo0MCBjaHJpc3RvcyBFeHAgJAkqLworLyoJJE9wZW5CU0Q6IHNoYTEuYyx2IDEuOSAxOTk3LzA3LzIzIDIxOjEyOjMyIGtzdGFpbGV5IEV4cCAkCSovCisKKy8qCisgKiBTSEEtMSBpbiBDCisgKiBCeSBTdGV2ZSBSZWlkIDxzdGV2ZUBlZG13ZWIuY29tPgorICogMTAwJSBQdWJsaWMgRG9tYWluCisgKgorICogVGVzdCBWZWN0b3JzIChmcm9tIEZJUFMgUFVCIDE4MC0xKQorICogImFiYyIKKyAqICAgQTk5OTNFMzYgNDcwNjgxNkEgQkEzRTI1NzEgNzg1MEMyNkMgOUNEMEQ4OUQKKyAqICJhYmNkYmNkZWNkZWZkZWZnZWZnaGZnaGlnaGlqaGlqa2lqa2xqa2xta2xtbmxtbm9tbm9wbm9wcSIKKyAqICAgODQ5ODNFNDQgMUMzQkQyNkUgQkFBRTRBQTEgRjk1MTI5RTUgRTU0NjcwRjEKKyAqIEEgbWlsbGlvbiByZXBldGl0aW9ucyBvZiAiYSIKKyAqICAgMzRBQTk3M0MgRDRDNERBQTQgRjYxRUVCMkIgREJBRDI3MzEgNjUzNDAxNkYKKyAqLworCisjZGVmaW5lIFNIQTFIQU5EU09GRgkJLyogQ29waWVzIGRhdGEgYmVmb3JlIG1lc3Npbmcgd2l0aCBpdC4gKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHNoYTEuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmIEhBVkVfTkJUT09MX0NPTkZJR19ICisjaW5jbHVkZSAibmJ0b29sX2NvbmZpZy5oIgorI2VuZGlmCisKKyNpZiAhSEFWRV9TSEExX0gKKworI2RlZmluZSByb2wodmFsdWUsIGJpdHMpICgoKHZhbHVlKSA8PCAoYml0cykpIHwgKCh2YWx1ZSkgPj4gKDMyIC0gKGJpdHMpKSkpCisKKy8qCisgKiBibGswKCkgYW5kIGJsaygpIHBlcmZvcm0gdGhlIGluaXRpYWwgZXhwYW5kLgorICogSSBnb3QgdGhlIGlkZWEgb2YgZXhwYW5kaW5nIGR1cmluZyB0aGUgcm91bmQgZnVuY3Rpb24gZnJvbSBTU0xlYXkKKyAqLworI2lmIEJZVEVfT1JERVIgPT0gTElUVExFX0VORElBTgorIyBkZWZpbmUgYmxrMChpKSAoYmxvY2stPmxbaV0gPSAocm9sKGJsb2NrLT5sW2ldLDI0KSYweEZGMDBGRjAwKSBcCisgICAgfChyb2woYmxvY2stPmxbaV0sOCkmMHgwMEZGMDBGRikpCisjZWxzZQorIyBkZWZpbmUgYmxrMChpKSBibG9jay0+bFtpXQorI2VuZGlmCisjZGVmaW5lIGJsayhpKSAoYmxvY2stPmxbaSYxNV0gPSByb2woYmxvY2stPmxbKGkrMTMpJjE1XV5ibG9jay0+bFsoaSs4KSYxNV0gXAorICAgIF5ibG9jay0+bFsoaSsyKSYxNV1eYmxvY2stPmxbaSYxNV0sMSkpCisKKy8qCisgKiAoUjArUjEpLCBSMiwgUjMsIFI0IGFyZSB0aGUgZGlmZmVyZW50IG9wZXJhdGlvbnMgKHJvdW5kcykgdXNlZCBpbiBTSEExCisgKi8KKyNkZWZpbmUgUjAodix3LHgseSx6LGkpIHorPSgodyYoeF55KSleeSkrYmxrMChpKSsweDVBODI3OTk5K3JvbCh2LDUpO3c9cm9sKHcsMzApOworI2RlZmluZSBSMSh2LHcseCx5LHosaSkgeis9KCh3Jih4XnkpKV55KStibGsoaSkrMHg1QTgyNzk5OStyb2wodiw1KTt3PXJvbCh3LDMwKTsKKyNkZWZpbmUgUjIodix3LHgseSx6LGkpIHorPSh3XnheeSkrYmxrKGkpKzB4NkVEOUVCQTErcm9sKHYsNSk7dz1yb2wodywzMCk7CisjZGVmaW5lIFIzKHYsdyx4LHkseixpKSB6Kz0oKCh3fHgpJnkpfCh3JngpKStibGsoaSkrMHg4RjFCQkNEQytyb2wodiw1KTt3PXJvbCh3LDMwKTsKKyNkZWZpbmUgUjQodix3LHgseSx6LGkpIHorPSh3XnheeSkrYmxrKGkpKzB4Q0E2MkMxRDYrcm9sKHYsNSk7dz1yb2wodywzMCk7CisKK3R5cGVkZWYgdW5pb24geworICAgIHVfY2hhciBjWzY0XTsKKyAgICB1X2ludCBsWzE2XTsKK30gQ0hBUjY0TE9ORzE2OworCisvKiBvbGQgc3BhcmM2NCBnY2MgY291bGQgbm90IGNvbXBpbGUgdGhpcyAqLworI3VuZGVmIFNQQVJDNjRfR0NDX1dPUktBUk9VTkQKKyNpZiBkZWZpbmVkKF9fc3BhcmM2NF9fKSAmJiBkZWZpbmVkKF9fR05VQ19fKSAmJiBfX0dOVUNfXyA8IDMKKyNkZWZpbmUgU1BBUkM2NF9HQ0NfV09SS0FST1VORAorI2VuZGlmCisKKyNpZmRlZiBTUEFSQzY0X0dDQ19XT1JLQVJPVU5ECit2b2lkIGRvX1IwMSh1X2ludDMyX3QgKmEsIHVfaW50MzJfdCAqYiwgdV9pbnQzMl90ICpjLCB1X2ludDMyX3QgKmQsIHVfaW50MzJfdCAqZSwgQ0hBUjY0TE9ORzE2ICopOwordm9pZCBkb19SMih1X2ludDMyX3QgKmEsIHVfaW50MzJfdCAqYiwgdV9pbnQzMl90ICpjLCB1X2ludDMyX3QgKmQsIHVfaW50MzJfdCAqZSwgQ0hBUjY0TE9ORzE2ICopOwordm9pZCBkb19SMyh1X2ludDMyX3QgKmEsIHVfaW50MzJfdCAqYiwgdV9pbnQzMl90ICpjLCB1X2ludDMyX3QgKmQsIHVfaW50MzJfdCAqZSwgQ0hBUjY0TE9ORzE2ICopOwordm9pZCBkb19SNCh1X2ludDMyX3QgKmEsIHVfaW50MzJfdCAqYiwgdV9pbnQzMl90ICpjLCB1X2ludDMyX3QgKmQsIHVfaW50MzJfdCAqZSwgQ0hBUjY0TE9ORzE2ICopOworCisjZGVmaW5lIG5SMCh2LHcseCx5LHosaSkgUjAoKnYsKncsKngsKnksKnosaSkKKyNkZWZpbmUgblIxKHYsdyx4LHkseixpKSBSMSgqdiwqdywqeCwqeSwqeixpKQorI2RlZmluZSBuUjIodix3LHgseSx6LGkpIFIyKCp2LCp3LCp4LCp5LCp6LGkpCisjZGVmaW5lIG5SMyh2LHcseCx5LHosaSkgUjMoKnYsKncsKngsKnksKnosaSkKKyNkZWZpbmUgblI0KHYsdyx4LHkseixpKSBSNCgqdiwqdywqeCwqeSwqeixpKQorCit2b2lkCitkb19SMDEodV9pbnQzMl90ICphLCB1X2ludDMyX3QgKmIsIHVfaW50MzJfdCAqYywgdV9pbnQzMl90ICpkLCB1X2ludDMyX3QgKmUsIENIQVI2NExPTkcxNiAqYmxvY2spCit7CisgICAgblIwKGEsYixjLGQsZSwgMCk7IG5SMChlLGEsYixjLGQsIDEpOyBuUjAoZCxlLGEsYixjLCAyKTsgblIwKGMsZCxlLGEsYiwgMyk7CisgICAgblIwKGIsYyxkLGUsYSwgNCk7IG5SMChhLGIsYyxkLGUsIDUpOyBuUjAoZSxhLGIsYyxkLCA2KTsgblIwKGQsZSxhLGIsYywgNyk7CisgICAgblIwKGMsZCxlLGEsYiwgOCk7IG5SMChiLGMsZCxlLGEsIDkpOyBuUjAoYSxiLGMsZCxlLDEwKTsgblIwKGUsYSxiLGMsZCwxMSk7CisgICAgblIwKGQsZSxhLGIsYywxMik7IG5SMChjLGQsZSxhLGIsMTMpOyBuUjAoYixjLGQsZSxhLDE0KTsgblIwKGEsYixjLGQsZSwxNSk7CisgICAgblIxKGUsYSxiLGMsZCwxNik7IG5SMShkLGUsYSxiLGMsMTcpOyBuUjEoYyxkLGUsYSxiLDE4KTsgblIxKGIsYyxkLGUsYSwxOSk7Cit9CisKK3ZvaWQKK2RvX1IyKHVfaW50MzJfdCAqYSwgdV9pbnQzMl90ICpiLCB1X2ludDMyX3QgKmMsIHVfaW50MzJfdCAqZCwgdV9pbnQzMl90ICplLCBDSEFSNjRMT05HMTYgKmJsb2NrKQoreworICAgIG5SMihhLGIsYyxkLGUsMjApOyBuUjIoZSxhLGIsYyxkLDIxKTsgblIyKGQsZSxhLGIsYywyMik7IG5SMihjLGQsZSxhLGIsMjMpOworICAgIG5SMihiLGMsZCxlLGEsMjQpOyBuUjIoYSxiLGMsZCxlLDI1KTsgblIyKGUsYSxiLGMsZCwyNik7IG5SMihkLGUsYSxiLGMsMjcpOworICAgIG5SMihjLGQsZSxhLGIsMjgpOyBuUjIoYixjLGQsZSxhLDI5KTsgblIyKGEsYixjLGQsZSwzMCk7IG5SMihlLGEsYixjLGQsMzEpOworICAgIG5SMihkLGUsYSxiLGMsMzIpOyBuUjIoYyxkLGUsYSxiLDMzKTsgblIyKGIsYyxkLGUsYSwzNCk7IG5SMihhLGIsYyxkLGUsMzUpOworICAgIG5SMihlLGEsYixjLGQsMzYpOyBuUjIoZCxlLGEsYixjLDM3KTsgblIyKGMsZCxlLGEsYiwzOCk7IG5SMihiLGMsZCxlLGEsMzkpOworfQorCit2b2lkCitkb19SMyh1X2ludDMyX3QgKmEsIHVfaW50MzJfdCAqYiwgdV9pbnQzMl90ICpjLCB1X2ludDMyX3QgKmQsIHVfaW50MzJfdCAqZSwgQ0hBUjY0TE9ORzE2ICpibG9jaykKK3sKKyAgICBuUjMoYSxiLGMsZCxlLDQwKTsgblIzKGUsYSxiLGMsZCw0MSk7IG5SMyhkLGUsYSxiLGMsNDIpOyBuUjMoYyxkLGUsYSxiLDQzKTsKKyAgICBuUjMoYixjLGQsZSxhLDQ0KTsgblIzKGEsYixjLGQsZSw0NSk7IG5SMyhlLGEsYixjLGQsNDYpOyBuUjMoZCxlLGEsYixjLDQ3KTsKKyAgICBuUjMoYyxkLGUsYSxiLDQ4KTsgblIzKGIsYyxkLGUsYSw0OSk7IG5SMyhhLGIsYyxkLGUsNTApOyBuUjMoZSxhLGIsYyxkLDUxKTsKKyAgICBuUjMoZCxlLGEsYixjLDUyKTsgblIzKGMsZCxlLGEsYiw1Myk7IG5SMyhiLGMsZCxlLGEsNTQpOyBuUjMoYSxiLGMsZCxlLDU1KTsKKyAgICBuUjMoZSxhLGIsYyxkLDU2KTsgblIzKGQsZSxhLGIsYyw1Nyk7IG5SMyhjLGQsZSxhLGIsNTgpOyBuUjMoYixjLGQsZSxhLDU5KTsKK30KKwordm9pZAorZG9fUjQodV9pbnQzMl90ICphLCB1X2ludDMyX3QgKmIsIHVfaW50MzJfdCAqYywgdV9pbnQzMl90ICpkLCB1X2ludDMyX3QgKmUsIENIQVI2NExPTkcxNiAqYmxvY2spCit7CisgICAgblI0KGEsYixjLGQsZSw2MCk7IG5SNChlLGEsYixjLGQsNjEpOyBuUjQoZCxlLGEsYixjLDYyKTsgblI0KGMsZCxlLGEsYiw2Myk7CisgICAgblI0KGIsYyxkLGUsYSw2NCk7IG5SNChhLGIsYyxkLGUsNjUpOyBuUjQoZSxhLGIsYyxkLDY2KTsgblI0KGQsZSxhLGIsYyw2Nyk7CisgICAgblI0KGMsZCxlLGEsYiw2OCk7IG5SNChiLGMsZCxlLGEsNjkpOyBuUjQoYSxiLGMsZCxlLDcwKTsgblI0KGUsYSxiLGMsZCw3MSk7CisgICAgblI0KGQsZSxhLGIsYyw3Mik7IG5SNChjLGQsZSxhLGIsNzMpOyBuUjQoYixjLGQsZSxhLDc0KTsgblI0KGEsYixjLGQsZSw3NSk7CisgICAgblI0KGUsYSxiLGMsZCw3Nik7IG5SNChkLGUsYSxiLGMsNzcpOyBuUjQoYyxkLGUsYSxiLDc4KTsgblI0KGIsYyxkLGUsYSw3OSk7Cit9CisjZW5kaWYKKworLyoKKyAqIEhhc2ggYSBzaW5nbGUgNTEyLWJpdCBibG9jay4gVGhpcyBpcyB0aGUgY29yZSBvZiB0aGUgYWxnb3JpdGhtLgorICovCit2b2lkIFNIQTFUcmFuc2Zvcm0oc3RhdGUsIGJ1ZmZlcikKKyAgICB1X2ludDMyX3Qgc3RhdGVbNV07CisgICAgY29uc3QgdV9jaGFyIGJ1ZmZlcls2NF07Cit7CisgICAgdV9pbnQzMl90IGEsIGIsIGMsIGQsIGU7CisgICAgQ0hBUjY0TE9ORzE2ICpibG9jazsKKworI2lmZGVmIFNIQTFIQU5EU09GRgorICAgIENIQVI2NExPTkcxNiB3b3Jrc3BhY2U7CisjZW5kaWYKKworICAgIGFzc2VydChidWZmZXIgIT0gMCk7CisgICAgYXNzZXJ0KHN0YXRlICE9IDApOworCisjaWZkZWYgU0hBMUhBTkRTT0ZGCisgICAgYmxvY2sgPSAmd29ya3NwYWNlOworICAgICh2b2lkKW1lbWNweShibG9jaywgYnVmZmVyLCA2NCk7CisjZWxzZQorICAgIGJsb2NrID0gKENIQVI2NExPTkcxNiAqKSh2b2lkICopYnVmZmVyOworI2VuZGlmCisKKyAgICAvKiBDb3B5IGNvbnRleHQtPnN0YXRlW10gdG8gd29ya2luZyB2YXJzICovCisgICAgYSA9IHN0YXRlWzBdOworICAgIGIgPSBzdGF0ZVsxXTsKKyAgICBjID0gc3RhdGVbMl07CisgICAgZCA9IHN0YXRlWzNdOworICAgIGUgPSBzdGF0ZVs0XTsKKworI2lmZGVmIFNQQVJDNjRfR0NDX1dPUktBUk9VTkQKKyAgICBkb19SMDEoJmEsICZiLCAmYywgJmQsICZlLCBibG9jayk7CisgICAgZG9fUjIoJmEsICZiLCAmYywgJmQsICZlLCBibG9jayk7CisgICAgZG9fUjMoJmEsICZiLCAmYywgJmQsICZlLCBibG9jayk7CisgICAgZG9fUjQoJmEsICZiLCAmYywgJmQsICZlLCBibG9jayk7CisjZWxzZQorICAgIC8qIDQgcm91bmRzIG9mIDIwIG9wZXJhdGlvbnMgZWFjaC4gTG9vcCB1bnJvbGxlZC4gKi8KKyAgICBSMChhLGIsYyxkLGUsIDApOyBSMChlLGEsYixjLGQsIDEpOyBSMChkLGUsYSxiLGMsIDIpOyBSMChjLGQsZSxhLGIsIDMpOworICAgIFIwKGIsYyxkLGUsYSwgNCk7IFIwKGEsYixjLGQsZSwgNSk7IFIwKGUsYSxiLGMsZCwgNik7IFIwKGQsZSxhLGIsYywgNyk7CisgICAgUjAoYyxkLGUsYSxiLCA4KTsgUjAoYixjLGQsZSxhLCA5KTsgUjAoYSxiLGMsZCxlLDEwKTsgUjAoZSxhLGIsYyxkLDExKTsKKyAgICBSMChkLGUsYSxiLGMsMTIpOyBSMChjLGQsZSxhLGIsMTMpOyBSMChiLGMsZCxlLGEsMTQpOyBSMChhLGIsYyxkLGUsMTUpOworICAgIFIxKGUsYSxiLGMsZCwxNik7IFIxKGQsZSxhLGIsYywxNyk7IFIxKGMsZCxlLGEsYiwxOCk7IFIxKGIsYyxkLGUsYSwxOSk7CisgICAgUjIoYSxiLGMsZCxlLDIwKTsgUjIoZSxhLGIsYyxkLDIxKTsgUjIoZCxlLGEsYixjLDIyKTsgUjIoYyxkLGUsYSxiLDIzKTsKKyAgICBSMihiLGMsZCxlLGEsMjQpOyBSMihhLGIsYyxkLGUsMjUpOyBSMihlLGEsYixjLGQsMjYpOyBSMihkLGUsYSxiLGMsMjcpOworICAgIFIyKGMsZCxlLGEsYiwyOCk7IFIyKGIsYyxkLGUsYSwyOSk7IFIyKGEsYixjLGQsZSwzMCk7IFIyKGUsYSxiLGMsZCwzMSk7CisgICAgUjIoZCxlLGEsYixjLDMyKTsgUjIoYyxkLGUsYSxiLDMzKTsgUjIoYixjLGQsZSxhLDM0KTsgUjIoYSxiLGMsZCxlLDM1KTsKKyAgICBSMihlLGEsYixjLGQsMzYpOyBSMihkLGUsYSxiLGMsMzcpOyBSMihjLGQsZSxhLGIsMzgpOyBSMihiLGMsZCxlLGEsMzkpOworICAgIFIzKGEsYixjLGQsZSw0MCk7IFIzKGUsYSxiLGMsZCw0MSk7IFIzKGQsZSxhLGIsYyw0Mik7IFIzKGMsZCxlLGEsYiw0Myk7CisgICAgUjMoYixjLGQsZSxhLDQ0KTsgUjMoYSxiLGMsZCxlLDQ1KTsgUjMoZSxhLGIsYyxkLDQ2KTsgUjMoZCxlLGEsYixjLDQ3KTsKKyAgICBSMyhjLGQsZSxhLGIsNDgpOyBSMyhiLGMsZCxlLGEsNDkpOyBSMyhhLGIsYyxkLGUsNTApOyBSMyhlLGEsYixjLGQsNTEpOworICAgIFIzKGQsZSxhLGIsYyw1Mik7IFIzKGMsZCxlLGEsYiw1Myk7IFIzKGIsYyxkLGUsYSw1NCk7IFIzKGEsYixjLGQsZSw1NSk7CisgICAgUjMoZSxhLGIsYyxkLDU2KTsgUjMoZCxlLGEsYixjLDU3KTsgUjMoYyxkLGUsYSxiLDU4KTsgUjMoYixjLGQsZSxhLDU5KTsKKyAgICBSNChhLGIsYyxkLGUsNjApOyBSNChlLGEsYixjLGQsNjEpOyBSNChkLGUsYSxiLGMsNjIpOyBSNChjLGQsZSxhLGIsNjMpOworICAgIFI0KGIsYyxkLGUsYSw2NCk7IFI0KGEsYixjLGQsZSw2NSk7IFI0KGUsYSxiLGMsZCw2Nik7IFI0KGQsZSxhLGIsYyw2Nyk7CisgICAgUjQoYyxkLGUsYSxiLDY4KTsgUjQoYixjLGQsZSxhLDY5KTsgUjQoYSxiLGMsZCxlLDcwKTsgUjQoZSxhLGIsYyxkLDcxKTsKKyAgICBSNChkLGUsYSxiLGMsNzIpOyBSNChjLGQsZSxhLGIsNzMpOyBSNChiLGMsZCxlLGEsNzQpOyBSNChhLGIsYyxkLGUsNzUpOworICAgIFI0KGUsYSxiLGMsZCw3Nik7IFI0KGQsZSxhLGIsYyw3Nyk7IFI0KGMsZCxlLGEsYiw3OCk7IFI0KGIsYyxkLGUsYSw3OSk7CisjZW5kaWYKKworICAgIC8qIEFkZCB0aGUgd29ya2luZyB2YXJzIGJhY2sgaW50byBjb250ZXh0LnN0YXRlW10gKi8KKyAgICBzdGF0ZVswXSArPSBhOworICAgIHN0YXRlWzFdICs9IGI7CisgICAgc3RhdGVbMl0gKz0gYzsKKyAgICBzdGF0ZVszXSArPSBkOworICAgIHN0YXRlWzRdICs9IGU7CisKKyAgICAvKiBXaXBlIHZhcmlhYmxlcyAqLworICAgIGEgPSBiID0gYyA9IGQgPSBlID0gMDsKK30KKworCisvKgorICogU0hBMUluaXQgLSBJbml0aWFsaXplIG5ldyBjb250ZXh0CisgKi8KK3ZvaWQgU0hBMUluaXQoY29udGV4dCkKKyAgICBTSEExX0NUWCAqY29udGV4dDsKK3sKKworICAgIGFzc2VydChjb250ZXh0ICE9IDApOworCisgICAgLyogU0hBMSBpbml0aWFsaXphdGlvbiBjb25zdGFudHMgKi8KKyAgICBjb250ZXh0LT5zdGF0ZVswXSA9IDB4Njc0NTIzMDE7CisgICAgY29udGV4dC0+c3RhdGVbMV0gPSAweEVGQ0RBQjg5OworICAgIGNvbnRleHQtPnN0YXRlWzJdID0gMHg5OEJBRENGRTsKKyAgICBjb250ZXh0LT5zdGF0ZVszXSA9IDB4MTAzMjU0NzY7CisgICAgY29udGV4dC0+c3RhdGVbNF0gPSAweEMzRDJFMUYwOworICAgIGNvbnRleHQtPmNvdW50WzBdID0gY29udGV4dC0+Y291bnRbMV0gPSAwOworfQorCisKKy8qCisgKiBSdW4geW91ciBkYXRhIHRocm91Z2ggdGhpcy4KKyAqLwordm9pZCBTSEExVXBkYXRlKGNvbnRleHQsIGRhdGEsIGxlbikKKyAgICBTSEExX0NUWCAqY29udGV4dDsKKyAgICBjb25zdCB1X2NoYXIgKmRhdGE7CisgICAgdV9pbnQgbGVuOworeworICAgIHVfaW50IGksIGo7CisKKyAgICBhc3NlcnQoY29udGV4dCAhPSAwKTsKKyAgICBhc3NlcnQoZGF0YSAhPSAwKTsKKworICAgIGogPSBjb250ZXh0LT5jb3VudFswXTsKKyAgICBpZiAoKGNvbnRleHQtPmNvdW50WzBdICs9IGxlbiA8PCAzKSA8IGopCisJY29udGV4dC0+Y291bnRbMV0gKz0gKGxlbj4+MjkpKzE7CisgICAgaiA9IChqID4+IDMpICYgNjM7CisgICAgaWYgKChqICsgbGVuKSA+IDYzKSB7CisJKHZvaWQpbWVtY3B5KCZjb250ZXh0LT5idWZmZXJbal0sIGRhdGEsIChpID0gNjQtaikpOworCVNIQTFUcmFuc2Zvcm0oY29udGV4dC0+c3RhdGUsIGNvbnRleHQtPmJ1ZmZlcik7CisJZm9yICggOyBpICsgNjMgPCBsZW47IGkgKz0gNjQpCisJICAgIFNIQTFUcmFuc2Zvcm0oY29udGV4dC0+c3RhdGUsICZkYXRhW2ldKTsKKwlqID0gMDsKKyAgICB9IGVsc2UgeworCWkgPSAwOworICAgIH0KKyAgICAodm9pZCltZW1jcHkoJmNvbnRleHQtPmJ1ZmZlcltqXSwgJmRhdGFbaV0sIGxlbiAtIGkpOworfQorCisKKy8qCisgKiBBZGQgcGFkZGluZyBhbmQgcmV0dXJuIHRoZSBtZXNzYWdlIGRpZ2VzdC4KKyAqLwordm9pZCBTSEExRmluYWwoZGlnZXN0LCBjb250ZXh0KQorICAgIHVfY2hhciBkaWdlc3RbMjBdOworICAgIFNIQTFfQ1RYKiBjb250ZXh0OworeworICAgIHVfaW50IGk7CisgICAgdV9jaGFyIGZpbmFsY291bnRbOF07CisKKyAgICBhc3NlcnQoZGlnZXN0ICE9IDApOworICAgIGFzc2VydChjb250ZXh0ICE9IDApOworCisgICAgZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCWZpbmFsY291bnRbaV0gPSAodV9jaGFyKSgoY29udGV4dC0+Y291bnRbKGkgPj0gNCA/IDAgOiAxKV0KKwkgPj4gKCgzLShpICYgMykpICogOCkgKSAmIDI1NSk7CSAvKiBFbmRpYW4gaW5kZXBlbmRlbnQgKi8KKyAgICB9CisgICAgU0hBMVVwZGF0ZShjb250ZXh0LCAoY29uc3QgdV9jaGFyICopIlwyMDAiLCAxKTsKKyAgICB3aGlsZSAoKGNvbnRleHQtPmNvdW50WzBdICYgNTA0KSAhPSA0NDgpCisJU0hBMVVwZGF0ZShjb250ZXh0LCAoY29uc3QgdV9jaGFyICopIlwwIiwgMSk7CisgICAgU0hBMVVwZGF0ZShjb250ZXh0LCBmaW5hbGNvdW50LCA4KTsgIC8qIFNob3VsZCBjYXVzZSBhIFNIQTFUcmFuc2Zvcm0oKSAqLworCisgICAgaWYgKGRpZ2VzdCkgeworCWZvciAoaSA9IDA7IGkgPCAyMDsgaSsrKQorCSAgICBkaWdlc3RbaV0gPSAodV9jaGFyKQorCQkoKGNvbnRleHQtPnN0YXRlW2k+PjJdID4+ICgoMy0oaSAmIDMpKSAqIDgpICkgJiAyNTUpOworICAgIH0KK30KKworI2VuZGlmIC8qIEhBVkVfU0hBMV9IICovCmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9zc3AuYyBiL2xpYmMvYmlvbmljL3NzcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwNzk0ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9zc3AuYwpAQCAtMCwwICsxLDEwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgImxvZ2QuaCIKKwordm9pZCAqX19zdGFja19jaGtfZ3VhcmQgPSAwOworCisvKiBJbml0aWFsaXplIHRoZSBjYW5hcnkgd2l0aCBhIHJhbmRvbSB2YWx1ZSBmcm9tIC9kZXYvdXJhbmRvbS4KKyAqIElmIHRoYXQgZmFpbHMsIHVzZSB0aGUgInRlcm1pbmF0b3IgY2FuYXJ5Ii4gKi8KK3N0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18gKChjb25zdHJ1Y3RvcikpCitfX2d1YXJkX3NldHVwKHZvaWQpCit7CisgICAgaW50IGZkOworCisgICAgZmQgPSBvcGVuKCIvZGV2L3VyYW5kb20iLCBPX1JET05MWSk7CisgICAgaWYgKGZkICE9IC0xKSB7CisgICAgICAgIHNzaXplX3QgbGVuID0gcmVhZChmZCwgJl9fc3RhY2tfY2hrX2d1YXJkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKF9fc3RhY2tfY2hrX2d1YXJkKSk7CisgICAgICAgIGNsb3NlKGZkKTsKKyAgICAgICAgaWYgKGxlbiA9PSBzaXplb2YoX19zdGFja19jaGtfZ3VhcmQpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qIElmIHRoYXQgZmFpbGVkLCBzd2l0Y2ggdG8gJ3Rlcm1pbmF0b3IgY2FuYXJ5JyAqLworICAgICgodW5zaWduZWQgY2hhciAqKSZfX3N0YWNrX2Noa19ndWFyZClbMF0gPSAwOworICAgICgodW5zaWduZWQgY2hhciAqKSZfX3N0YWNrX2Noa19ndWFyZClbMV0gPSAwOworICAgICgodW5zaWduZWQgY2hhciAqKSZfX3N0YWNrX2Noa19ndWFyZClbMl0gPSAnXG4nOworICAgICgodW5zaWduZWQgY2hhciAqKSZfX3N0YWNrX2Noa19ndWFyZClbM10gPSAyNTU7Cit9CisKKy8qIFRoaXMgaXMgdGhlIGNyYXNoIGhhbmRsZXIuCisgKiBEb2VzIGEgYmVzdCBlZmZvcnQgYXQgbG9nZ2luZyBhbmQgY2FsbHMgX2V4aXQgdG8gdGVybWluYXRlCisgKiB0aGUgcHJvY2VzcyBpbW1lZGlhdGVseSAod2l0aG91dCBhdGV4aXQgaGFuZGxlcnMsIGV0Yy4pICovCit2b2lkIF9fc3RhY2tfY2hrX2ZhaWwodm9pZCkKK3sKKyAgICBzdHJ1Y3Qgc2lnYWN0aW9uIHNhOworICAgIHNpZ3NldF90IHNpZ21hc2s7CisgICAgc3RhdGljIGNvbnN0IGNoYXIgbWVzc2FnZVtdID0gInN0YWNrIGNvcnJ1cHRpb24gZGV0ZWN0ZWQ6IGFib3J0ZWQiOworICAgIGNoYXIgcGF0aFtQQVRIX01BWF07CisgICAgaW50IGNvdW50OworCisgICAgLyogSW1tZWRpYXRlbHkgYmxvY2sgYWxsIChidXQgU0lHQUJSVCkgc2lnbmFsIGhhbmRsZXJzIGZyb20gcnVubmluZyBjb2RlICovCisgICAgc2lnZmlsbHNldCgmc2lnbWFzayk7CisgICAgc2lnZGVsc2V0KCZzaWdtYXNrLCBTSUdBQlJUKTsKKyAgICBzaWdwcm9jbWFzayhTSUdfQkxPQ0ssICZzaWdtYXNrLCBOVUxMKTsKKworICAgIC8qIFVzZSAvcHJvYy9zZWxmL2V4ZSBsaW5rIHRvIG9idGFpbiB0aGUgcHJvZ3JhbSBuYW1lIGZvciBsb2dnaW5nCisgICAgICogcHVycG9zZXMuIElmIGl0J3Mgbm90IGF2YWlsYWJsZSwgd2Ugc2V0IGl0IHRvICJ1bmtub3duIiAqLworICAgIGlmICgoY291bnQgPSByZWFkbGluaygiL3Byb2Mvc2VsZi9leGUiLCBwYXRoLCBzaXplb2YocGF0aCkgLSAxKSkgPT0gLTEpIHsKKyAgICAgICAgc3RybGNweShwYXRoLCAidW5rbm93biIsIHNpemVvZihwYXRoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcGF0aFtjb3VudF0gPSAnXDAnOworICAgIH0KKworICAgIC8qIERvIGEgYmVzdCBlZmZvcnQgYXQgbG9nZ2luZy4gVGhpcyBlbmRzIHVwIGNhbGxpbmcgd3JpdGV2KDIpICovCisgICAgX19saWJjX2FuZHJvaWRfbG9nX3ByaW50KEFORFJPSURfTE9HX0ZBVEFMLCBwYXRoLCBtZXNzYWdlKTsKKworICAgIC8qIE1ha2Ugc3VyZSB0aGVyZSBpcyBubyBkZWZhdWx0IGFjdGlvbiBmb3IgU0lHQUJSVCAqLworICAgIGJ6ZXJvKCZzYSwgc2l6ZW9mKHN0cnVjdCBzaWdhY3Rpb24pKTsKKyAgICBzaWdlbXB0eXNldCgmc2Euc2FfbWFzayk7CisgICAgc2Euc2FfZmxhZ3MgPSAwOworICAgIHNhLnNhX2hhbmRsZXIgPSBTSUdfREZMOworICAgIHNpZ2FjdGlvbihTSUdBQlJULCAmc2EsIE5VTEwpOworCisgICAgLyogVGVybWluYXRlIHRoZSBwcm9jZXNzIGFuZCBleGl0IGltbWVkaWF0ZWx5ICovCisgICAga2lsbChnZXRwaWQoKSwgU0lHQUJSVCk7CisKKyAgICBfZXhpdCgxMjcpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvc3R1YnMuYyBiL2xpYmMvYmlvbmljL3N0dWJzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY1ZjIxYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL3N0dWJzLmMKQEAgLTAsMCArMSwzODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDxncnAuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHB3ZC5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CisjaW5jbHVkZSA8bW50ZW50Lmg+CisjaW5jbHVkZSA8cHJpdmF0ZS9hbmRyb2lkX2ZpbGVzeXN0ZW1fY29uZmlnLmg+CisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKworLyoqIFRocmVhZC1zcGVjaWZpYyBzdGF0ZSBmb3IgdGhlIHN0dWJzIGZ1bmN0aW9ucworICoqLworCitwdGhyZWFkX29uY2VfdCAgIHRoZV9vbmNlID0gUFRIUkVBRF9PTkNFX0lOSVQ7CitwdGhyZWFkX2tleV90ICAgIHRoZV9rZXk7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBzdHJ1Y3QgcGFzc3dkICBwYXNzd2Q7CisgICAgc3RydWN0IGdyb3VwICAgZ3JvdXA7CisgICAgY2hhciogICAgICAgICAgZ3JvdXBfbWVtYmVyc1syXTsKKyAgICBjaGFyICAgICAgICAgICBhcHBfbmFtZV9idWZmZXJbMzJdOworICAgIGNoYXIgICAgICAgICAgIGdyb3VwX25hbWVfYnVmZmVyWzMyXTsKK30gc3R1YnNfc3RhdGVfdDsKKworc3RhdGljIHZvaWQKK3N0dWJzX3N0YXRlX2ZyZWUoIHZvaWQqICBfcyApCit7CisgICAgc3R1YnNfc3RhdGVfdCogIHMgPSBfczsKKyAgICBmcmVlKHMpOworfQorCitzdGF0aWMgc3R1YnNfc3RhdGVfdCoKK3N0dWJzX3N0YXRlX2FsbG9jKCB2b2lkICkKK3sKKyAgICBzdHVic19zdGF0ZV90KiAgcyA9IGNhbGxvYygxLCBzaXplb2YgKnMpOworCisgICAgaWYgKHMgIT0gTlVMTCkgeworICAgICAgICBzLT5ncm91cC5ncl9tZW0gPSBzLT5ncm91cF9tZW1iZXJzOworICAgIH0KKyAgICByZXR1cm4gczsKK30KKworc3RhdGljIHZvaWQgX19zdHVic19rZXlfaW5pdCh2b2lkKQoreworICAgIHB0aHJlYWRfa2V5X2NyZWF0ZSggJnRoZV9rZXksIHN0dWJzX3N0YXRlX2ZyZWUgKTsKK30KKworc3RhdGljIHN0dWJzX3N0YXRlX3QqCitfX3N0dWJzX3N0YXRlKHZvaWQpCit7CisgICAgc3R1YnNfc3RhdGVfdCogIHM7CisKKyAgICBwdGhyZWFkX29uY2UoJnRoZV9vbmNlLCBfX3N0dWJzX2tleV9pbml0KTsKKyAgICBzID0gcHRocmVhZF9nZXRzcGVjaWZpYyh0aGVfa2V5KTsKKyAgICBpZiAocyA9PSBOVUxMKSB7CisgICAgICAgIHMgPSBzdHVic19zdGF0ZV9hbGxvYygpOworICAgICAgICBpZiAocyA9PSBOVUxMKSB7CisgICAgICAgICAgICBlcnJubyA9IEVOT01FTTsgIC8qIGp1c3QgaW4gY2FzZSAqLworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKCBwdGhyZWFkX3NldHNwZWNpZmljKHRoZV9rZXksIHMpICE9IDAgKSB7CisgICAgICAgICAgICAgICAgc3R1YnNfc3RhdGVfZnJlZShzKTsKKyAgICAgICAgICAgICAgICBlcnJubyA9IEVOT01FTTsKKyAgICAgICAgICAgICAgICBzICAgICA9IE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGFzc3dkKgorYW5kcm9pZF9paW5mb190b19wYXNzd2QoIHN0cnVjdCBwYXNzd2QgICAgICAgICAgKnB3LAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhbmRyb2lkX2lkX2luZm8gKmlpbmZvICkKK3sKKyAgICBwdy0+cHdfbmFtZSAgPSAoY2hhciopaWluZm8tPm5hbWU7CisgICAgcHctPnB3X3VpZCAgID0gaWluZm8tPmFpZDsKKyAgICBwdy0+cHdfZ2lkICAgPSBpaW5mby0+YWlkOworICAgIHB3LT5wd19kaXIgICA9ICIvIjsKKyAgICBwdy0+cHdfc2hlbGwgPSAiL3N5c3RlbS9iaW4vc2giOworICAgIHJldHVybiBwdzsKK30KKworc3RhdGljIHN0cnVjdCBncm91cCoKK2FuZHJvaWRfaWluZm9fdG9fZ3JvdXAoIHN0cnVjdCBncm91cCAqZ3IsCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYW5kcm9pZF9pZF9pbmZvICppaW5mbyApCit7CisgICAgZ3ItPmdyX25hbWUgICA9IChjaGFyKikgaWluZm8tPm5hbWU7CisgICAgZ3ItPmdyX2dpZCAgICA9IGlpbmZvLT5haWQ7CisgICAgZ3ItPmdyX21lbVswXSA9IGdyLT5ncl9uYW1lOworICAgIGdyLT5ncl9tZW1bMV0gPSBOVUxMOworICAgIHJldHVybiBncjsKK30KKworc3RhdGljIHN0cnVjdCBwYXNzd2QgKgorYW5kcm9pZF9pZF90b19wYXNzd2QoIHN0cnVjdCBwYXNzd2QgKnB3LCB1bnNpZ25lZCBpZCkKK3sKKyAgICBzdHJ1Y3QgYW5kcm9pZF9pZF9pbmZvICppaW5mbyA9IGFuZHJvaWRfaWRzOworICAgIHVuc2lnbmVkIG47CisgICAgZm9yIChuID0gMDsgbiA8IGFuZHJvaWRfaWRfY291bnQ7IG4rKykgeworICAgICAgICBpZiAoaWluZm9bbl0uYWlkID09IGlkKSB7CisgICAgICAgICAgICByZXR1cm4gYW5kcm9pZF9paW5mb190b19wYXNzd2QocHcsIGlpbmZvICsgbik7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGFzc3dkKgorYW5kcm9pZF9uYW1lX3RvX3Bhc3N3ZChzdHJ1Y3QgcGFzc3dkICpwdywgY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICBzdHJ1Y3QgYW5kcm9pZF9pZF9pbmZvICppaW5mbyA9IGFuZHJvaWRfaWRzOworICAgIHVuc2lnbmVkIG47CisgICAgZm9yIChuID0gMDsgbiA8IGFuZHJvaWRfaWRfY291bnQ7IG4rKykgeworICAgICAgICBpZiAoIXN0cmNtcChpaW5mb1tuXS5uYW1lLCBuYW1lKSkgeworICAgICAgICAgICAgcmV0dXJuIGFuZHJvaWRfaWluZm9fdG9fcGFzc3dkKHB3LCBpaW5mbyArIG4pOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IGdyb3VwKgorYW5kcm9pZF9pZF90b19ncm91cCggc3RydWN0IGdyb3VwICpnciwgdW5zaWduZWQgaWQgKQoreworICAgIHN0cnVjdCBhbmRyb2lkX2lkX2luZm8gKmlpbmZvID0gYW5kcm9pZF9pZHM7CisgICAgdW5zaWduZWQgbjsKKyAgICBmb3IgKG4gPSAwOyBuIDwgYW5kcm9pZF9pZF9jb3VudDsgbisrKSB7CisgICAgICAgIGlmIChpaW5mb1tuXS5haWQgPT0gaWQpIHsKKyAgICAgICAgICAgIHJldHVybiBhbmRyb2lkX2lpbmZvX3RvX2dyb3VwKGdyLCBpaW5mbyArIG4pOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IGdyb3VwKgorYW5kcm9pZF9uYW1lX3RvX2dyb3VwKCBzdHJ1Y3QgZ3JvdXAgKmdyLCBjb25zdCBjaGFyICpuYW1lICkKK3sKKyAgICBzdHJ1Y3QgYW5kcm9pZF9pZF9pbmZvICppaW5mbyA9IGFuZHJvaWRfaWRzOworICAgIHVuc2lnbmVkIG47CisgICAgZm9yIChuID0gMDsgbiA8IGFuZHJvaWRfaWRfY291bnQ7IG4rKykgeworICAgICAgICBpZiAoIXN0cmNtcChpaW5mb1tuXS5uYW1lLCBuYW1lKSkgeworICAgICAgICAgICAgcmV0dXJuIGFuZHJvaWRfaWluZm9fdG9fZ3JvdXAoZ3IsIGlpbmZvICsgbik7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIHRyYW5zbGF0ZSBhIHVzZXIvZ3JvdXAgbmFtZSBsaWtlIGFwcF8xMjM0IGludG8gdGhlCisgKiBjb3JyZXNwb25kaW5nIHVzZXIvZ3JvdXAgaWQgKEFJRF9BUFAgKyAxMjM0KQorICogcmV0dXJucyAwIGFuZCBzZXRzIGVycm5vIHRvIEVOT0VOVCBpbiBjYXNlIG9mIGVycm9yCisgKi8KK3N0YXRpYyB1bnNpZ25lZAorYXBwX2lkX2Zyb21fbmFtZSggY29uc3QgY2hhciogIG5hbWUgKQoreworICAgIHVuc2lnbmVkIGxvbmcgIGlkOworICAgIGNoYXIqICAgICAgICAgIGVuZDsKKworICAgIGlmIChtZW1jbXAobmFtZSwgImFwcF8iLCA0KSAhPSAwIHx8ICFpc2RpZ2l0KG5hbWVbNF0pKQorICAgICAgICBnb3RvIEZBSUw7CisKKyAgICBpZCA9IHN0cnRvdWwobmFtZSs0LCAmZW5kLCAxMCk7CisgICAgaWYgKGlkID09IDAgfHwgKmVuZCAhPSAnXDAnKQorICAgICAgICBnb3RvIEZBSUw7CisKKyAgICBpZCArPSBBSURfQVBQOworCisgICAgLyogY2hlY2sgZm9yIG92ZXJmbG93IGFuZCB0aGF0IHRoZSB2YWx1ZSBjYW4gYmUKKyAgICAgKiBzdG9yZWQgaW4gb3VyIDMyLWJpdCB1aWRfdC9naWRfdCAqLworICAgIGlmIChpZCA8IEFJRF9BUFAgfHwgKHVuc2lnbmVkKWlkICE9IGlkKQorICAgICAgICBnb3RvIEZBSUw7CisKKyAgICByZXR1cm4gKHVuc2lnbmVkKWlkOworCitGQUlMOgorICAgIGVycm5vID0gRU5PRU5UOworICAgIHJldHVybiAwOworfQorCisvKiB0cmFuc2xhdGUgYSB1aWQgaW50byB0aGUgY29ycmVzcG9uZGluZyBhcHBfPHVpZD4KKyAqIHBhc3N3ZCBzdHJ1Y3R1cmUgKHNldHMgZXJybm8gdG8gRU5PRU5UIG9uIGZhaWx1cmUpCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcGFzc3dkKgorYXBwX2lkX3RvX3Bhc3N3ZCh1aWRfdCAgdWlkLCBzdHVic19zdGF0ZV90KiAgc3RhdGUpCit7CisgICAgc3RydWN0IHBhc3N3ZCogIHB3ID0gJnN0YXRlLT5wYXNzd2Q7CisKKyAgICBpZiAodWlkIDwgQUlEX0FQUCkgeworICAgICAgICBlcnJubyA9IEVOT0VOVDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgc25wcmludGYoIHN0YXRlLT5hcHBfbmFtZV9idWZmZXIsIHNpemVvZiBzdGF0ZS0+YXBwX25hbWVfYnVmZmVyLAorICAgICAgICAgICAgICAiYXBwXyV1IiwgdWlkIC0gQUlEX0FQUCApOworCisgICAgcHctPnB3X25hbWUgID0gc3RhdGUtPmFwcF9uYW1lX2J1ZmZlcjsKKyAgICBwdy0+cHdfZGlyICAgPSAiL2RhdGEiOworICAgIHB3LT5wd19zaGVsbCA9ICIvc3lzdGVtL2Jpbi9zaCI7CisgICAgcHctPnB3X3VpZCAgID0gdWlkOworICAgIHB3LT5wd19naWQgICA9IHVpZDsKKworICAgIHJldHVybiBwdzsKK30KKworLyogdHJhbnNsYXRlIGEgZ2lkIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgYXBwXzxnaWQ+CisgKiBncm91cCBzdHJ1Y3R1cmUgKHNldHMgZXJybm8gdG8gRU5PRU5UIG9uIGZhaWx1cmUpCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZ3JvdXAqCithcHBfaWRfdG9fZ3JvdXAoZ2lkX3QgIGdpZCwgc3R1YnNfc3RhdGVfdCogIHN0YXRlKQoreworICAgIHN0cnVjdCBncm91cCogIGdyID0gJnN0YXRlLT5ncm91cDsKKworICAgIGlmIChnaWQgPCBBSURfQVBQKSB7CisgICAgICAgIGVycm5vID0gRU5PRU5UOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBzbnByaW50ZihzdGF0ZS0+Z3JvdXBfbmFtZV9idWZmZXIsIHNpemVvZiBzdGF0ZS0+Z3JvdXBfbmFtZV9idWZmZXIsCisgICAgICAgICAgICAgImFwcF8ldSIsIGdpZCAtIEFJRF9BUFApOworCisgICAgZ3ItPmdyX25hbWUgICA9IHN0YXRlLT5ncm91cF9uYW1lX2J1ZmZlcjsKKyAgICBnci0+Z3JfZ2lkICAgID0gZ2lkOworICAgIGdyLT5ncl9tZW1bMF0gPSBnci0+Z3JfbmFtZTsKKyAgICBnci0+Z3JfbWVtWzFdID0gTlVMTDsKKworICAgIHJldHVybiBncjsKK30KKworCitzdHJ1Y3QgcGFzc3dkKgorZ2V0cHd1aWQodWlkX3QgdWlkKQoreworICAgIHN0dWJzX3N0YXRlX3QqICBzdGF0ZSA9IF9fc3R1YnNfc3RhdGUoKTsKKyAgICBzdHJ1Y3QgcGFzc3dkKiAgcHc7CisKKyAgICBpZiAoc3RhdGUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBwdyA9ICZzdGF0ZS0+cGFzc3dkOworCisgICAgaWYgKCBhbmRyb2lkX2lkX3RvX3Bhc3N3ZChwdywgdWlkKSAhPSBOVUxMICkKKyAgICAgICAgcmV0dXJuIHB3OworCisgICAgcmV0dXJuIGFwcF9pZF90b19wYXNzd2QodWlkLCBzdGF0ZSk7Cit9CisKK3N0cnVjdCBwYXNzd2QqCitnZXRwd25hbShjb25zdCBjaGFyICpsb2dpbikKK3sKKyAgICBzdHVic19zdGF0ZV90KiAgc3RhdGUgPSBfX3N0dWJzX3N0YXRlKCk7CisKKyAgICBpZiAoc3RhdGUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoYW5kcm9pZF9uYW1lX3RvX3Bhc3N3ZCgmc3RhdGUtPnBhc3N3ZCwgbG9naW4pICE9IE5VTEwpCisgICAgICAgIHJldHVybiAmc3RhdGUtPnBhc3N3ZDsKKworICAgIHJldHVybiBhcHBfaWRfdG9fcGFzc3dkKCBhcHBfaWRfZnJvbV9uYW1lKGxvZ2luKSwgc3RhdGUgKTsKK30KKworaW50CitnZXRncm91cGxpc3QgKGNvbnN0IGNoYXIgKnVzZXIsIGdpZF90IGdyb3VwLAorICAgICAgICAgICAgICBnaWRfdCAqZ3JvdXBzLCBpbnQgKm5ncm91cHMpCit7CisgICAgaWYgKCpuZ3JvdXBzIDwgMSkgeworICAgICAgICAqbmdyb3VwcyA9IDE7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgZ3JvdXBzWzBdID0gZ3JvdXA7CisgICAgcmV0dXJuICgqbmdyb3VwcyA9IDEpOworfQorCitjaGFyKgorZ2V0bG9naW4odm9pZCkKK3sKKyAgICBzdHJ1Y3QgcGFzc3dkICpwdyA9IGdldHB3dWlkKGdldHVpZCgpKTsKKworICAgIGlmKHB3KSB7CisgICAgICAgIHJldHVybiBwdy0+cHdfbmFtZTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKK3N0cnVjdCBncm91cCoKK2dldGdyZ2lkKGdpZF90IGdpZCkKK3sKKyAgICBzdHVic19zdGF0ZV90KiAgc3RhdGUgPSBfX3N0dWJzX3N0YXRlKCk7CisgICAgc3RydWN0IGdyb3VwKiAgIGdyOworCisgICAgaWYgKHN0YXRlID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgZ3IgPSBhbmRyb2lkX2lkX3RvX2dyb3VwKCZzdGF0ZS0+Z3JvdXAsIGdpZCk7CisgICAgaWYgKGdyICE9IE5VTEwpCisgICAgICAgIHJldHVybiBncjsKKworICAgIHJldHVybiBhcHBfaWRfdG9fZ3JvdXAoZ2lkLCBzdGF0ZSk7Cit9CisKK3N0cnVjdCBncm91cCoKK2dldGdybmFtKGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgc3R1YnNfc3RhdGVfdCogIHN0YXRlID0gX19zdHVic19zdGF0ZSgpOworICAgIHVuc2lnbmVkICAgICAgICBpZDsKKworICAgIGlmIChzdGF0ZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChhbmRyb2lkX25hbWVfdG9fZ3JvdXAoJnN0YXRlLT5ncm91cCwgbmFtZSkgIT0gMCkKKyAgICAgICAgcmV0dXJuICZzdGF0ZS0+Z3JvdXA7CisKKyAgICByZXR1cm4gYXBwX2lkX3RvX2dyb3VwKCBhcHBfaWRfZnJvbV9uYW1lKG5hbWUpLCBzdGF0ZSApOworfQorCisKK3N0cnVjdCBuZXRlbnQqIGdldG5ldGJ5bmFtZShjb25zdCBjaGFyICpuYW1lKQoreworICAgIGZwcmludGYoc3RkZXJyLCAiRklYIE1FISBpbXBsZW1lbnQgZ2V0Z3JuYW0oKSAlczolZFxuIiwgX19GSUxFX18sIF9fTElORV9fKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKwordm9pZCBlbmRwd2VudCh2b2lkKQoreworfQorCitzdHJ1Y3QgbW50ZW50KiBnZXRtbnRlbnQoRklMRSogZikKK3sKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkZJWCBNRSEgaW1wbGVtZW50IGdldG1udGVudCgpICVzOiVkXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pOworICAgIHJldHVybiBOVUxMOworfQorCitjaGFyKiB0dHluYW1lKGludCBmZCkKK3sKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkZJWCBNRSEgaW1wbGVtZW50IHR0eW5hbWUoKSAlczolZFxuIiwgX19GSUxFX18sIF9fTElORV9fKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworc3RydWN0IG5ldGVudCAqZ2V0bmV0YnlhZGRyKHVpbnQzMl90IG5ldCwgaW50IHR5cGUpCit7CisgICAgZnByaW50ZihzdGRlcnIsICJGSVggTUUhIGltcGxlbWVudCAlcygpICVzOiVkXG4iLCBfX0ZVTkNUSU9OX18sIF9fRklMRV9fLCBfX0xJTkVfXyk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0cnVjdCBwcm90b2VudCAqZ2V0cHJvdG9ieW5hbWUoY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkZJWCBNRSEgaW1wbGVtZW50ICVzKCkgJXM6JWRcbiIsIF9fRlVOQ1RJT05fXywgX19GSUxFX18sIF9fTElORV9fKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworc3RydWN0IHByb3RvZW50ICpnZXRwcm90b2J5bnVtYmVyKGludCBwcm90bykKK3sKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkZJWCBNRSEgaW1wbGVtZW50ICVzKCkgJXM6JWRcbiIsIF9fRlVOQ1RJT05fXywgX19GSUxFX18sIF9fTElORV9fKTsKKyAgICByZXR1cm4gTlVMTDsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3N5c3RlbV9wcm9wZXJ0aWVzLmMgYi9saWJjL2Jpb25pYy9zeXN0ZW1fcHJvcGVydGllcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlM2I5ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9zeXN0ZW1fcHJvcGVydGllcy5jCkBAIC0wLDAgKzEsMTcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKworI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvdW4uaD4KKyNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorCisjZGVmaW5lIF9SRUFMTFlfSU5DTFVERV9TWVNfX1NZU1RFTV9QUk9QRVJUSUVTX0hfCisjaW5jbHVkZSA8c3lzL19zeXN0ZW1fcHJvcGVydGllcy5oPgorCisjaW5jbHVkZSA8c3lzL2F0b21pY3MuaD4KKworc3RhdGljIGNvbnN0IGNoYXIgcHJvcGVydHlfc2VydmljZV9uYW1lW10gPSBQUk9QX1NFUlZJQ0VfTkFNRTsKKworc3RhdGljIHVuc2lnbmVkIGR1bW15X3Byb3BzID0gMDsKKworcHJvcF9hcmVhICpfX3N5c3RlbV9wcm9wZXJ0eV9hcmVhX18gPSAodm9pZCopICZkdW1teV9wcm9wczsKKworaW50IF9fc3lzdGVtX3Byb3BlcnRpZXNfaW5pdCh2b2lkKQoreworICAgIHByb3BfYXJlYSAqcGE7CisgICAgaW50IHMsIGZkOworICAgIHVuc2lnbmVkIHN6OworICAgIGNoYXIgKmVudjsKKworICAgIGlmKF9fc3lzdGVtX3Byb3BlcnR5X2FyZWFfXyAhPSAoKHZvaWQqKSAmZHVtbXlfcHJvcHMpKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGVudiA9IGdldGVudigiQU5EUk9JRF9QUk9QRVJUWV9XT1JLU1BBQ0UiKTsKKyAgICBpZiAoIWVudikgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGZkID0gYXRvaShlbnYpOworICAgIGVudiA9IHN0cmNocihlbnYsICcsJyk7CisgICAgaWYgKCFlbnYpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBzeiA9IGF0b2koZW52ICsgMSk7CisgICAgCisgICAgcGEgPSBtbWFwKDAsIHN6LCBQUk9UX1JFQUQsIE1BUF9TSEFSRUQsIGZkLCAwKTsKKyAgICAKKyAgICBpZihwYSA9PSBNQVBfRkFJTEVEKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZigocGEtPm1hZ2ljICE9IFBST1BfQVJFQV9NQUdJQykgfHwgKHBhLT52ZXJzaW9uICE9IFBST1BfQVJFQV9WRVJTSU9OKSkgeworICAgICAgICBtdW5tYXAocGEsIHN6KTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIF9fc3lzdGVtX3Byb3BlcnR5X2FyZWFfXyA9IHBhOworICAgIHJldHVybiAwOworfQorCitjb25zdCBwcm9wX2luZm8gKl9fc3lzdGVtX3Byb3BlcnR5X2ZpbmRfbnRoKHVuc2lnbmVkIG4pCit7CisgICAgcHJvcF9hcmVhICpwYSA9IF9fc3lzdGVtX3Byb3BlcnR5X2FyZWFfXzsKKworICAgIGlmKG4gPj0gcGEtPmNvdW50KSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBUT0NfVE9fSU5GTyhwYSwgcGEtPnRvY1tuXSk7CisgICAgfQorfQorCitjb25zdCBwcm9wX2luZm8gKl9fc3lzdGVtX3Byb3BlcnR5X2ZpbmQoY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICBwcm9wX2FyZWEgKnBhID0gX19zeXN0ZW1fcHJvcGVydHlfYXJlYV9fOworICAgIHVuc2lnbmVkIGNvdW50ID0gcGEtPmNvdW50OworICAgIHVuc2lnbmVkICp0b2MgPSBwYS0+dG9jOworICAgIHVuc2lnbmVkIGxlbiA9IHN0cmxlbihuYW1lKTsKKyAgICBwcm9wX2luZm8gKnBpOworCisgICAgd2hpbGUoY291bnQtLSkgeworICAgICAgICB1bnNpZ25lZCBlbnRyeSA9ICp0b2MrKzsKKyAgICAgICAgaWYoVE9DX05BTUVfTEVOKGVudHJ5KSAhPSBsZW4pIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgcGkgPSBUT0NfVE9fSU5GTyhwYSwgZW50cnkpOworICAgICAgICBpZihtZW1jbXAobmFtZSwgcGktPm5hbWUsIGxlbikpIGNvbnRpbnVlOworCisgICAgICAgIHJldHVybiBwaTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IF9fc3lzdGVtX3Byb3BlcnR5X3JlYWQoY29uc3QgcHJvcF9pbmZvICpwaSwgY2hhciAqbmFtZSwgY2hhciAqdmFsdWUpCit7CisgICAgdW5zaWduZWQgc2VyaWFsLCBsZW47CisgICAgCisgICAgZm9yKDs7KSB7CisgICAgICAgIHNlcmlhbCA9IHBpLT5zZXJpYWw7CisgICAgICAgIHdoaWxlKFNFUklBTF9ESVJUWShzZXJpYWwpKSB7CisgICAgICAgICAgICBfX2Z1dGV4X3dhaXQoJnBpLT5zZXJpYWwsIHNlcmlhbCwgMCk7CisgICAgICAgICAgICBzZXJpYWwgPSBwaS0+c2VyaWFsOworICAgICAgICB9CisgICAgICAgIGxlbiA9IFNFUklBTF9WQUxVRV9MRU4oc2VyaWFsKTsKKyAgICAgICAgbWVtY3B5KHZhbHVlLCBwaS0+dmFsdWUsIGxlbiArIDEpOworICAgICAgICBpZihzZXJpYWwgPT0gcGktPnNlcmlhbCkgeworICAgICAgICAgICAgaWYobmFtZSAhPSAwKSB7CisgICAgICAgICAgICAgICAgc3RyY3B5KG5hbWUsIHBpLT5uYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBsZW47CisgICAgICAgIH0KKyAgICB9Cit9CisKK2ludCBfX3N5c3RlbV9wcm9wZXJ0eV9nZXQoY29uc3QgY2hhciAqbmFtZSwgY2hhciAqdmFsdWUpCit7CisgICAgY29uc3QgcHJvcF9pbmZvICpwaSA9IF9fc3lzdGVtX3Byb3BlcnR5X2ZpbmQobmFtZSk7CisKKyAgICBpZihwaSAhPSAwKSB7CisgICAgICAgIHJldHVybiBfX3N5c3RlbV9wcm9wZXJ0eV9yZWFkKHBpLCAwLCB2YWx1ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdmFsdWVbMF0gPSAwOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK2ludCBfX3N5c3RlbV9wcm9wZXJ0eV93YWl0KGNvbnN0IHByb3BfaW5mbyAqcGkpCit7CisgICAgdW5zaWduZWQgbjsKKyAgICBpZihwaSA9PSAwKSB7CisgICAgICAgIHByb3BfYXJlYSAqcGEgPSBfX3N5c3RlbV9wcm9wZXJ0eV9hcmVhX187CisgICAgICAgIG4gPSBwYS0+c2VyaWFsOworICAgICAgICBkbyB7CisgICAgICAgICAgICBfX2Z1dGV4X3dhaXQoJnBhLT5zZXJpYWwsIG4sIDApOworICAgICAgICB9IHdoaWxlKG4gPT0gcGEtPnNlcmlhbCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbiA9IHBpLT5zZXJpYWw7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIF9fZnV0ZXhfd2FpdCgmcGktPnNlcmlhbCwgbiwgMCk7CisgICAgICAgIH0gd2hpbGUobiA9PSBwaS0+c2VyaWFsKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy90aHJlYWRfYXRleGl0LmMgYi9saWJjL2Jpb25pYy90aHJlYWRfYXRleGl0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM0YTVhMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL3RocmVhZF9hdGV4aXQuYwpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKy8qIHNvbWUgc2ltcGxlIGdsdWUgdXNlZCB0byBtYWtlIHRoZSBCU0QgYXRleGl0IGNvZGUgaGFwcHkgKi8KKworI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNpbmNsdWRlICJwdGhyZWFkX2ludGVybmFsLmgiCisKK3N0YXRpYyBwdGhyZWFkX211dGV4X3QgICBnQXRFeGl0TG9jayA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7CisKK3ZvaWQgIF90aHJlYWRfYXRleGl0X2xvY2soIHZvaWQgKQoreworICBwdGhyZWFkX211dGV4X2xvY2soICZnQXRFeGl0TG9jayApOworfQorCit2b2lkIF90aHJlYWRfYXRleGl0X3VubG9jayggdm9pZCApCit7CisgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCAmZ0F0RXhpdExvY2sgKTsKK30KKwpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvdGltZTY0LmMgYi9saWJjL2Jpb25pYy90aW1lNjQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTFmODgxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvdGltZTY0LmMKQEAgLTAsMCArMSw3OTMgQEAKKy8qCisKK0NvcHlyaWdodCAoYykgMjAwNy0yMDA4ICBNaWNoYWVsIEcgU2Nod2VybgorCitUaGlzIHNvZnR3YXJlIG9yaWdpbmFsbHkgZGVyaXZlZCBmcm9tIFBhdWwgU2hlZXIncyBwaXZvdGFsX2dtdGltZV9yLmMuCisKK1RoZSBNSVQgTGljZW5zZToKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKK2luIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKK3RvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKK2NvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KK2FsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK0FVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCitPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCitUSEUgU09GVFdBUkUuCisKKyovCisKKy8qIFNlZSBodHRwOi8vY29kZS5nb29nbGUuY29tL3AveTIwMzggZm9yIHRoaXMgY29kZSdzIG9yaWdpbiAqLworCisvKgorCitQcm9ncmFtbWVycyB3aG8gaGF2ZSBhdmFpbGFibGUgdG8gdGhlbSA2NC1iaXQgdGltZSB2YWx1ZXMgYXMgYSAnbG9uZworbG9uZycgdHlwZSBjYW4gdXNlIGxvY2FsdGltZTY0X3IoKSBhbmQgZ210aW1lNjRfcigpIHdoaWNoIGNvcnJlY3RseQorY29udmVydHMgdGhlIHRpbWUgZXZlbiBvbiAzMi1iaXQgc3lzdGVtcy4gV2hldGhlciB5b3UgaGF2ZSA2NC1iaXQgdGltZQordmFsdWVzIHdpbGwgZGVwZW5kIG9uIHRoZSBvcGVyYXRpbmcgc3lzdGVtLgorCitsb2NhbHRpbWU2NF9yKCkgaXMgYSA2NC1iaXQgZXF1aXZhbGVudCBvZiBsb2NhbHRpbWVfcigpLgorCitnbXRpbWU2NF9yKCkgaXMgYSA2NC1iaXQgZXF1aXZhbGVudCBvZiBnbXRpbWVfcigpLgorCisqLworCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlICJ0aW1lNjQuaCIKKworLyogQklPTklDX0JFR0lOICovCisvKiB0aGUgZm9sbG93aW5nIGFyZSBoZXJlIHRvIGF2b2lkIGV4cG9zaW5nIHRpbWU2NF9jb25maWcuaCBhbmQKKyAqIG90aGVyIHR5cGVzIGluIG91ciBwdWJsaWMgdGltZTY0LmggaGVhZGVyCisgKi8KKyNpbmNsdWRlICJ0aW1lNjRfY29uZmlnLmgiCisKKy8qIE5vdCBldmVyeW9uZSBoYXMgZ20vbG9jYWx0aW1lX3IoKSwgcHJvdmlkZSBhIHJlcGxhY2VtZW50ICovCisjaWZkZWYgSEFTX0xPQ0FMVElNRV9SCisjIGRlZmluZSBMT0NBTFRJTUVfUihjbG9jaywgcmVzdWx0KSBsb2NhbHRpbWVfcihjbG9jaywgcmVzdWx0KQorI2Vsc2UKKyMgZGVmaW5lIExPQ0FMVElNRV9SKGNsb2NrLCByZXN1bHQpIGZha2VfbG9jYWx0aW1lX3IoY2xvY2ssIHJlc3VsdCkKKyNlbmRpZgorI2lmZGVmIEhBU19HTVRJTUVfUgorIyBkZWZpbmUgR01USU1FX1IoY2xvY2ssIHJlc3VsdCkgZ210aW1lX3IoY2xvY2ssIHJlc3VsdCkKKyNlbHNlCisjIGRlZmluZSBHTVRJTUVfUihjbG9jaywgcmVzdWx0KSBmYWtlX2dtdGltZV9yKGNsb2NrLCByZXN1bHQpCisjZW5kaWYKKwordHlwZWRlZiBpbnQ2NF90ICBJbnQ2NDsKK3R5cGVkZWYgdGltZTY0X3QgVGltZTY0X1Q7Cit0eXBlZGVmIGludDY0X3QgIFllYXI7CisjZGVmaW5lICBUTSAgICAgIHRtCisvKiBCSU9OSUNfRU5EICovCisKKy8qIFNwZWMgc2F5cyBleGNlcHQgZm9yIHN0ZnRpbWUoKSBhbmQgdGhlIF9yKCkgZnVuY3Rpb25zLCB0aGVzZQorICAgYWxsIHJldHVybiBzdGF0aWMgbWVtb3J5LiAgU3RhYmJpbmdzISAqLworc3RhdGljIHN0cnVjdCBUTSAgIFN0YXRpY19SZXR1cm5fRGF0ZTsKK3N0YXRpYyBjaGFyICAgICAgICBTdGF0aWNfUmV0dXJuX1N0cmluZ1szNV07CisKK3N0YXRpYyBjb25zdCBpbnQgZGF5c19pbl9tb250aFsyXVsxMl0gPSB7CisgICAgezMxLCAyOCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzF9LAorICAgIHszMSwgMjksIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxfSwKK307CisKK3N0YXRpYyBjb25zdCBpbnQganVsaWFuX2RheXNfYnlfbW9udGhbMl1bMTJdID0geworICAgIHswLCAzMSwgNTksIDkwLCAxMjAsIDE1MSwgMTgxLCAyMTIsIDI0MywgMjczLCAzMDQsIDMzNH0sCisgICAgezAsIDMxLCA2MCwgOTEsIDEyMSwgMTUyLCAxODIsIDIxMywgMjQ0LCAyNzQsIDMwNSwgMzM1fSwKK307CisKK3N0YXRpYyBjaGFyIGNvbnN0IHdkYXlfbmFtZVs3XVszXSA9IHsKKyAgICAiU3VuIiwgIk1vbiIsICJUdWUiLCAiV2VkIiwgIlRodSIsICJGcmkiLCAiU2F0IgorfTsKKworc3RhdGljIGNoYXIgY29uc3QgbW9uX25hbWVbMTJdWzNdID0geworICAgICJKYW4iLCAiRmViIiwgIk1hciIsICJBcHIiLCAiTWF5IiwgIkp1biIsCisgICAgIkp1bCIsICJBdWciLCAiU2VwIiwgIk9jdCIsICJOb3YiLCAiRGVjIgorfTsKKworc3RhdGljIGNvbnN0IGludCBsZW5ndGhfb2ZfeWVhclsyXSA9IHsgMzY1LCAzNjYgfTsKKworLyogU29tZSBudW1iZXJzIHJlbGF0aW5nIHRvIHRoZSBncmVnb3JpYW4gY3ljbGUgKi8KK3N0YXRpYyBjb25zdCBZZWFyICAgICB5ZWFyc19pbl9ncmVnb3JpYW5fY3ljbGUgICA9IDQwMDsKKyNkZWZpbmUgICAgICAgICAgICAgICBkYXlzX2luX2dyZWdvcmlhbl9jeWNsZSAgICAgICgoMzY1ICogNDAwKSArIDEwMCAtIDQgKyAxKQorc3RhdGljIGNvbnN0IFRpbWU2NF9UIHNlY29uZHNfaW5fZ3JlZ29yaWFuX2N5Y2xlID0gZGF5c19pbl9ncmVnb3JpYW5fY3ljbGUgKiA2MExMICogNjBMTCAqIDI0TEw7CisKKy8qIFllYXIgcmFuZ2Ugd2UgY2FuIHRydXN0IHRoZSB0aW1lIGZ1bmNpdG9ucyB3aXRoICovCisjZGVmaW5lIE1BWF9TQUZFX1lFQVIgMjAzNworI2RlZmluZSBNSU5fU0FGRV9ZRUFSIDE5NzEKKworLyogMjggeWVhciBKdWxpYW4gY2FsZW5kYXIgY3ljbGUgKi8KKyNkZWZpbmUgU09MQVJfQ1lDTEVfTEVOR1RIIDI4CisKKy8qIFllYXIgY3ljbGUgZnJvbSBNQVhfU0FGRV9ZRUFSIGRvd24uICovCitzdGF0aWMgY29uc3QgaW50IHNhZmVfeWVhcnNfaGlnaFtTT0xBUl9DWUNMRV9MRU5HVEhdID0geworICAgIDIwMTYsIDIwMTcsIDIwMTgsIDIwMTksCisgICAgMjAyMCwgMjAyMSwgMjAyMiwgMjAyMywKKyAgICAyMDI0LCAyMDI1LCAyMDI2LCAyMDI3LAorICAgIDIwMjgsIDIwMjksIDIwMzAsIDIwMzEsCisgICAgMjAzMiwgMjAzMywgMjAzNCwgMjAzNSwKKyAgICAyMDM2LCAyMDM3LCAyMDEwLCAyMDExLAorICAgIDIwMTIsIDIwMTMsIDIwMTQsIDIwMTUKK307CisKKy8qIFllYXIgY3ljbGUgZnJvbSBNSU5fU0FGRV9ZRUFSIHVwICovCitzdGF0aWMgY29uc3QgaW50IHNhZmVfeWVhcnNfbG93W1NPTEFSX0NZQ0xFX0xFTkdUSF0gPSB7CisgICAgMTk5NiwgMTk5NywgMTk5OCwgMTk3MSwKKyAgICAxOTcyLCAxOTczLCAxOTc0LCAxOTc1LAorICAgIDE5NzYsIDE5NzcsIDE5NzgsIDE5NzksCisgICAgMTk4MCwgMTk4MSwgMTk4MiwgMTk4MywKKyAgICAxOTg0LCAxOTg1LCAxOTg2LCAxOTg3LAorICAgIDE5ODgsIDE5ODksIDE5OTAsIDE5OTEsCisgICAgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwKK307CisKKy8qIFRoaXMgaXNuJ3QgdXNlZCwgYnV0IGl0J3MgaGFuZHkgdG8gbG9vayBhdCAqLworc3RhdGljIGNvbnN0IGludCBkb3dfeWVhcl9zdGFydFtTT0xBUl9DWUNMRV9MRU5HVEhdID0geworICAgIDUsIDAsIDEsIDIsICAgICAvKiAwICAgICAgIDIwMTYgLSAyMDE5ICovCisgICAgMywgNSwgNiwgMCwgICAgIC8qIDQgICovCisgICAgMSwgMywgNCwgNSwgICAgIC8qIDggICAgICAgMTk5NiAtIDE5OTgsIDE5NzEqLworICAgIDYsIDEsIDIsIDMsICAgICAvKiAxMiAgICAgIDE5NzIgLSAxOTc1ICovCisgICAgNCwgNiwgMCwgMSwgICAgIC8qIDE2ICovCisgICAgMiwgNCwgNSwgNiwgICAgIC8qIDIwICAgICAgMjAzNiwgMjAzNywgMjAxMCwgMjAxMSAqLworICAgIDAsIDIsIDMsIDQgICAgICAvKiAyNCAgICAgIDIwMTIsIDIwMTMsIDIwMTQsIDIwMTUgKi8KK307CisKKy8qIExldCdzIGFzc3VtZSBwZW9wbGUgYXJlIGdvaW5nIHRvIGJlIGxvb2tpbmcgZm9yIGRhdGVzIGluIHRoZSBmdXR1cmUuCisgICBMZXQncyBwcm92aWRlIHNvbWUgY2hlYXRzIHNvIHlvdSBjYW4gc2tpcCBhaGVhZC4KKyAgIFRoaXMgaGFzIGEgNHggc3BlZWQgYm9vc3Qgd2hlbiBuZWFyIDIwMDguCisqLworLyogTnVtYmVyIG9mIGRheXMgc2luY2UgZXBvY2ggb24gSmFuIDFzdCwgMjAwOCBHTVQgKi8KKyNkZWZpbmUgQ0hFQVRfREFZUyAgKDExOTkxNDU2MDAgLyAyNCAvIDYwIC8gNjApCisjZGVmaW5lIENIRUFUX1lFQVJTIDEwOAorCisjZGVmaW5lIElTX0xFQVAobikgICAgICAoKCEoKChuKSArIDE5MDApICUgNDAwKSB8fCAoISgoKG4pICsgMTkwMCkgJSA0KSAmJiAoKChuKSArIDE5MDApICUgMTAwKSkpICE9IDApCisjZGVmaW5lIFdSQVAoYSxiLG0pICAgICAoKGEpID0gKChhKSA8ICAwICApID8gKChiKS0tLCAoYSkgKyAobSkpIDogKGEpKQorCisjaWZkZWYgVVNFX1NZU1RFTV9MT0NBTFRJTUUKKyMgICAgZGVmaW5lIFNIT1VMRF9VU0VfU1lTVEVNX0xPQ0FMVElNRShhKSAgKCAgICAgICBcCisgICAgKGEpIDw9IFNZU1RFTV9MT0NBTFRJTUVfTUFYICYmICAgICAgICAgICAgICBcCisgICAgKGEpID49IFNZU1RFTV9MT0NBTFRJTUVfTUlOICAgICAgICAgICAgICAgICBcCispCisjZWxzZQorIyAgICBkZWZpbmUgU0hPVUxEX1VTRV9TWVNURU1fTE9DQUxUSU1FKGEpICAgICAgKDApCisjZW5kaWYKKworI2lmZGVmIFVTRV9TWVNURU1fR01USU1FCisjICAgIGRlZmluZSBTSE9VTERfVVNFX1NZU1RFTV9HTVRJTUUoYSkgICAgICggICAgICAgXAorICAgIChhKSA8PSBTWVNURU1fR01USU1FX01BWCAgICAmJiAgICAgICAgICAgICAgXAorICAgIChhKSA+PSBTWVNURU1fR01USU1FX01JTiAgICAgICAgICAgICAgICAgICAgXAorKQorI2Vsc2UKKyMgICAgZGVmaW5lIFNIT1VMRF9VU0VfU1lTVEVNX0dNVElNRShhKSAgICAgICAgICgwKQorI2VuZGlmCisKKy8qIE11bHRpIHZhcmFkaWMgbWFjcm9zIGFyZSBhIEM5OSB0aGluZywgYWxhcyAqLworI2lmZGVmIFRJTUVfNjRfREVCVUcKKyMgICAgZGVmaW5lIFRSQUNFKGZvcm1hdCkgKGZwcmludGYoc3RkZXJyLCBmb3JtYXQpKQorIyAgICBkZWZpbmUgVFJBQ0UxKGZvcm1hdCwgdmFyMSkgICAgKGZwcmludGYoc3RkZXJyLCBmb3JtYXQsIHZhcjEpKQorIyAgICBkZWZpbmUgVFJBQ0UyKGZvcm1hdCwgdmFyMSwgdmFyMikgICAgKGZwcmludGYoc3RkZXJyLCBmb3JtYXQsIHZhcjEsIHZhcjIpKQorIyAgICBkZWZpbmUgVFJBQ0UzKGZvcm1hdCwgdmFyMSwgdmFyMiwgdmFyMykgICAgKGZwcmludGYoc3RkZXJyLCBmb3JtYXQsIHZhcjEsIHZhcjIsIHZhcjMpKQorI2Vsc2UKKyMgICAgZGVmaW5lIFRSQUNFKGZvcm1hdCkgKCh2b2lkKTApCisjICAgIGRlZmluZSBUUkFDRTEoZm9ybWF0LCB2YXIxKSAoKHZvaWQpMCkKKyMgICAgZGVmaW5lIFRSQUNFMihmb3JtYXQsIHZhcjEsIHZhcjIpICgodm9pZCkwKQorIyAgICBkZWZpbmUgVFJBQ0UzKGZvcm1hdCwgdmFyMSwgdmFyMiwgdmFyMykgKCh2b2lkKTApCisjZW5kaWYKKworCitzdGF0aWMgaW50IGlzX2V4Y2VwdGlvbl9jZW50dXJ5KFllYXIgeWVhcikKK3sKKyAgICBpbnQgaXNfZXhjZXB0aW9uID0gKCh5ZWFyICUgMTAwID09IDApICYmICEoeWVhciAlIDQwMCA9PSAwKSk7CisgICAgVFJBQ0UxKCIjIGlzX2V4Y2VwdGlvbl9jZW50dXJ5OiAlc1xuIiwgaXNfZXhjZXB0aW9uID8gInllcyIgOiAibm8iKTsKKworICAgIHJldHVybihpc19leGNlcHRpb24pOworfQorCisKKy8qIHRpbWVnbSgpIGlzIG5vdCBpbiB0aGUgQyBvciBQT1NJWCBzcGVjLCBidXQgaXQgaXMgc3VjaCBhIHVzZWZ1bAorICAgZXh0ZW5zaW9uIEkgd291bGQgYmUgcmVtaXNzIGluIGxlYXZpbmcgaXQgb3V0LiAgQWxzbyBJIG5lZWQgaXQKKyAgIGZvciBsb2NhbHRpbWU2NCgpCisqLworVGltZTY0X1QgdGltZWdtNjQoY29uc3Qgc3RydWN0IFRNICpkYXRlKSB7CisgICAgVGltZTY0X1QgZGF5cyAgICA9IDA7CisgICAgVGltZTY0X1Qgc2Vjb25kcyA9IDA7CisgICAgWWVhciAgICAgeWVhcjsKKyAgICBZZWFyICAgICBvcmlnX3llYXIgPSAoWWVhcilkYXRlLT50bV95ZWFyOworICAgIGludCAgICAgIGN5Y2xlcyAgPSAwOworCisgICAgaWYoIG9yaWdfeWVhciA+IDEwMCApIHsKKyAgICAgICAgY3ljbGVzID0gKG9yaWdfeWVhciAtIDEwMCkgLyA0MDA7CisgICAgICAgIG9yaWdfeWVhciAtPSBjeWNsZXMgKiA0MDA7CisgICAgICAgIGRheXMgICAgICArPSAoVGltZTY0X1QpY3ljbGVzICogZGF5c19pbl9ncmVnb3JpYW5fY3ljbGU7CisgICAgfQorICAgIGVsc2UgaWYoIG9yaWdfeWVhciA8IC0zMDAgKSB7CisgICAgICAgIGN5Y2xlcyA9IChvcmlnX3llYXIgLSAxMDApIC8gNDAwOworICAgICAgICBvcmlnX3llYXIgLT0gY3ljbGVzICogNDAwOworICAgICAgICBkYXlzICAgICAgKz0gKFRpbWU2NF9UKWN5Y2xlcyAqIGRheXNfaW5fZ3JlZ29yaWFuX2N5Y2xlOworICAgIH0KKyAgICBUUkFDRTMoIiMgdGltZWdtLyBjeWNsZXM6ICVkLCBkYXlzOiAlbGxkLCBvcmlnX3llYXI6ICVsbGRcbiIsIGN5Y2xlcywgZGF5cywgb3JpZ195ZWFyKTsKKworICAgIGlmKCBvcmlnX3llYXIgPiA3MCApIHsKKyAgICAgICAgeWVhciA9IDcwOworICAgICAgICB3aGlsZSggeWVhciA8IG9yaWdfeWVhciApIHsKKyAgICAgICAgICAgIGRheXMgKz0gbGVuZ3RoX29mX3llYXJbSVNfTEVBUCh5ZWFyKV07CisgICAgICAgICAgICB5ZWFyKys7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoIG9yaWdfeWVhciA8IDcwICkgeworICAgICAgICB5ZWFyID0gNjk7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGRheXMgLT0gbGVuZ3RoX29mX3llYXJbSVNfTEVBUCh5ZWFyKV07CisgICAgICAgICAgICB5ZWFyLS07CisgICAgICAgIH0gd2hpbGUoIHllYXIgPj0gb3JpZ195ZWFyICk7CisgICAgfQorCisKKyAgICBkYXlzICs9IGp1bGlhbl9kYXlzX2J5X21vbnRoW0lTX0xFQVAob3JpZ195ZWFyKV1bZGF0ZS0+dG1fbW9uXTsKKyAgICBkYXlzICs9IGRhdGUtPnRtX21kYXkgLSAxOworCisgICAgc2Vjb25kcyA9IGRheXMgKiA2MCAqIDYwICogMjQ7CisKKyAgICBzZWNvbmRzICs9IGRhdGUtPnRtX2hvdXIgKiA2MCAqIDYwOworICAgIHNlY29uZHMgKz0gZGF0ZS0+dG1fbWluICogNjA7CisgICAgc2Vjb25kcyArPSBkYXRlLT50bV9zZWM7CisKKyAgICByZXR1cm4oc2Vjb25kcyk7Cit9CisKKworc3RhdGljIGludCBjaGVja190bShzdHJ1Y3QgVE0gKnRtKQoreworICAgIC8qIERvbid0IGZvcmdldCBsZWFwIHNlY29uZHMgKi8KKyAgICBhc3NlcnQodG0tPnRtX3NlYyA+PSAwKTsKKyAgICBhc3NlcnQodG0tPnRtX3NlYyA8PSA2MSk7CisKKyAgICBhc3NlcnQodG0tPnRtX21pbiA+PSAwKTsKKyAgICBhc3NlcnQodG0tPnRtX21pbiA8PSA1OSk7CisKKyAgICBhc3NlcnQodG0tPnRtX2hvdXIgPj0gMCk7CisgICAgYXNzZXJ0KHRtLT50bV9ob3VyIDw9IDIzKTsKKworICAgIGFzc2VydCh0bS0+dG1fbWRheSA+PSAxKTsKKyAgICBhc3NlcnQodG0tPnRtX21kYXkgPD0gZGF5c19pbl9tb250aFtJU19MRUFQKHRtLT50bV95ZWFyKV1bdG0tPnRtX21vbl0pOworCisgICAgYXNzZXJ0KHRtLT50bV9tb24gID49IDApOworICAgIGFzc2VydCh0bS0+dG1fbW9uICA8PSAxMSk7CisKKyAgICBhc3NlcnQodG0tPnRtX3dkYXkgPj0gMCk7CisgICAgYXNzZXJ0KHRtLT50bV93ZGF5IDw9IDYpOworICAgCisgICAgYXNzZXJ0KHRtLT50bV95ZGF5ID49IDApOworICAgIGFzc2VydCh0bS0+dG1feWRheSA8PSBsZW5ndGhfb2ZfeWVhcltJU19MRUFQKHRtLT50bV95ZWFyKV0pOworCisjaWZkZWYgSEFTX1RNX1RNX0dNVE9GRgorICAgIGFzc2VydCh0bS0+dG1fZ210b2ZmID49IC0yNCAqIDYwICogNjApOworICAgIGFzc2VydCh0bS0+dG1fZ210b2ZmIDw9ICAyNCAqIDYwICogNjApOworI2VuZGlmCisKKyAgICByZXR1cm4gMTsKK30KKworCisvKiBUaGUgZXhjZXB0aW9uYWwgY2VudHVyaWVzIHdpdGhvdXQgbGVhcCB5ZWFycyBjYXVzZSB0aGUgY3ljbGUgdG8KKyAgIHNoaWZ0IGJ5IDE2CisqLworc3RhdGljIFllYXIgY3ljbGVfb2Zmc2V0KFllYXIgeWVhcikKK3sKKyAgICBjb25zdCBZZWFyIHN0YXJ0X3llYXIgPSAyMDAwOworICAgIFllYXIgeWVhcl9kaWZmICA9IHllYXIgLSBzdGFydF95ZWFyOworICAgIFllYXIgZXhjZXB0aW9uczsKKworICAgIGlmKCB5ZWFyID4gc3RhcnRfeWVhciApCisgICAgICAgIHllYXJfZGlmZi0tOworCisgICAgZXhjZXB0aW9ucyAgPSB5ZWFyX2RpZmYgLyAxMDA7CisgICAgZXhjZXB0aW9ucyAtPSB5ZWFyX2RpZmYgLyA0MDA7CisKKyAgICBUUkFDRTMoIiMgeWVhcjogJWxsZCwgZXhjZXB0aW9uczogJWxsZCwgeWVhcl9kaWZmOiAlbGxkXG4iLAorICAgICAgICAgIHllYXIsIGV4Y2VwdGlvbnMsIHllYXJfZGlmZik7CisKKyAgICByZXR1cm4gZXhjZXB0aW9ucyAqIDE2OworfQorCisvKiBGb3IgYSBnaXZlbiB5ZWFyIGFmdGVyIDIwMzgsIHBpY2sgdGhlIGxhdGVzdCBwb3NzaWJsZSBtYXRjaGluZworICAgeWVhciBpbiB0aGUgMjggeWVhciBjYWxlbmRhciBjeWNsZS4KKworICAgQSBtYXRjaGluZyB5ZWFyLi4uCisgICAxKSBTdGFydHMgb24gdGhlIHNhbWUgZGF5IG9mIHRoZSB3ZWVrLgorICAgMikgSGFzIHRoZSBzYW1lIGxlYXAgeWVhciBzdGF0dXMuCisKKyAgIFRoaXMgaXMgc28gdGhlIGNhbGVuZGFycyBtYXRjaCB1cC4KKworICAgQWxzbyB0aGUgcHJldmlvdXMgeWVhciBtdXN0IG1hdGNoLiAgV2hlbiBkb2luZyBKYW4gMXN0IHlvdSBtaWdodAorICAgd2luZCB1cCBvbiBEZWMgMzFzdCB0aGUgcHJldmlvdXMgeWVhciB3aGVuIGRvaW5nIGEgLVVUQyB0aW1lIHpvbmUuCisKKyAgIEZpbmFsbHksIHRoZSBuZXh0IHllYXIgbXVzdCBoYXZlIHRoZSBzYW1lIHN0YXJ0IGRheSBvZiB3ZWVrLiAgVGhpcworICAgaXMgZm9yIERlYyAzMXN0IHdpdGggYSArVVRDIHRpbWUgem9uZS4KKyAgIEl0IGRvZXNuJ3QgbmVlZCB0aGUgc2FtZSBsZWFwIHllYXIgc3RhdHVzIHNpbmNlIHdlIG9ubHkgY2FyZSBhYm91dAorICAgSmFudWFyeSAxc3QuCisqLworc3RhdGljIGludCBzYWZlX3llYXIoY29uc3QgWWVhciB5ZWFyKQoreworICAgIGludCBzYWZlX3llYXIgPSAwOworICAgIFllYXIgeWVhcl9jeWNsZTsKKworICAgIGlmKCB5ZWFyID49IE1JTl9TQUZFX1lFQVIgJiYgeWVhciA8PSBNQVhfU0FGRV9ZRUFSICkgeworICAgICAgICByZXR1cm4gKGludCl5ZWFyOworICAgIH0KKworICAgIHllYXJfY3ljbGUgPSB5ZWFyICsgY3ljbGVfb2Zmc2V0KHllYXIpOworCisgICAgLyogc2FmZV95ZWFyc19sb3cgaXMgb2ZmIGZyb20gc2FmZV95ZWFyc19oaWdoIGJ5IDggeWVhcnMgKi8KKyAgICBpZiggeWVhciA8IE1JTl9TQUZFX1lFQVIgKQorICAgICAgICB5ZWFyX2N5Y2xlIC09IDg7CisKKyAgICAvKiBDaGFuZ2Ugbm9uLWxlYXAgeHgwMCB5ZWFycyB0byBhbiBlcXVpdmFsZW50ICovCisgICAgaWYoIGlzX2V4Y2VwdGlvbl9jZW50dXJ5KHllYXIpICkKKyAgICAgICAgeWVhcl9jeWNsZSArPSAxMTsKKworICAgIC8qIEFsc28geHgwMSB5ZWFycywgc2luY2UgdGhlIHByZXZpb3VzIHllYXIgd2lsbCBiZSB3cm9uZyAqLworICAgIGlmKCBpc19leGNlcHRpb25fY2VudHVyeSh5ZWFyIC0gMSkgKQorICAgICAgICB5ZWFyX2N5Y2xlICs9IDE3OworCisgICAgeWVhcl9jeWNsZSAlPSBTT0xBUl9DWUNMRV9MRU5HVEg7CisgICAgaWYoIHllYXJfY3ljbGUgPCAwICkKKyAgICAgICAgeWVhcl9jeWNsZSA9IFNPTEFSX0NZQ0xFX0xFTkdUSCArIHllYXJfY3ljbGU7CisKKyAgICBhc3NlcnQoIHllYXJfY3ljbGUgPj0gMCApOworICAgIGFzc2VydCggeWVhcl9jeWNsZSA8IFNPTEFSX0NZQ0xFX0xFTkdUSCApOworICAgIGlmKCB5ZWFyIDwgTUlOX1NBRkVfWUVBUiApCisgICAgICAgIHNhZmVfeWVhciA9IHNhZmVfeWVhcnNfbG93W3llYXJfY3ljbGVdOworICAgIGVsc2UgaWYoIHllYXIgPiBNQVhfU0FGRV9ZRUFSICkKKyAgICAgICAgc2FmZV95ZWFyID0gc2FmZV95ZWFyc19oaWdoW3llYXJfY3ljbGVdOworICAgIGVsc2UKKyAgICAgICAgYXNzZXJ0KDApOworCisgICAgVFJBQ0UzKCIjIHllYXI6ICVsbGQsIHllYXJfY3ljbGU6ICVsbGQsIHNhZmVfeWVhcjogJWRcbiIsCisgICAgICAgICAgeWVhciwgeWVhcl9jeWNsZSwgc2FmZV95ZWFyKTsKKworICAgIGFzc2VydChzYWZlX3llYXIgPD0gTUFYX1NBRkVfWUVBUiAmJiBzYWZlX3llYXIgPj0gTUlOX1NBRkVfWUVBUik7CisKKyAgICByZXR1cm4gc2FmZV95ZWFyOworfQorCisKK3ZvaWQgY29weV90bV90b19UTShjb25zdCBzdHJ1Y3QgdG0gKnNyYywgc3RydWN0IFRNICpkZXN0KSB7CisgICAgaWYoIHNyYyA9PSBOVUxMICkgeworICAgICAgICBtZW1zZXQoZGVzdCwgMCwgc2l6ZW9mKCpkZXN0KSk7CisgICAgfQorICAgIGVsc2UgeworIyAgICAgICBpZmRlZiBVU0VfVE02NAorICAgICAgICAgICAgZGVzdC0+dG1fc2VjICAgICAgICA9IHNyYy0+dG1fc2VjOworICAgICAgICAgICAgZGVzdC0+dG1fbWluICAgICAgICA9IHNyYy0+dG1fbWluOworICAgICAgICAgICAgZGVzdC0+dG1faG91ciAgICAgICA9IHNyYy0+dG1faG91cjsKKyAgICAgICAgICAgIGRlc3QtPnRtX21kYXkgICAgICAgPSBzcmMtPnRtX21kYXk7CisgICAgICAgICAgICBkZXN0LT50bV9tb24gICAgICAgID0gc3JjLT50bV9tb247CisgICAgICAgICAgICBkZXN0LT50bV95ZWFyICAgICAgID0gKFllYXIpc3JjLT50bV95ZWFyOworICAgICAgICAgICAgZGVzdC0+dG1fd2RheSAgICAgICA9IHNyYy0+dG1fd2RheTsKKyAgICAgICAgICAgIGRlc3QtPnRtX3lkYXkgICAgICAgPSBzcmMtPnRtX3lkYXk7CisgICAgICAgICAgICBkZXN0LT50bV9pc2RzdCAgICAgID0gc3JjLT50bV9pc2RzdDsKKworIyAgICAgICAgICAgaWZkZWYgSEFTX1RNX1RNX0dNVE9GRgorICAgICAgICAgICAgICAgIGRlc3QtPnRtX2dtdG9mZiAgPSBzcmMtPnRtX2dtdG9mZjsKKyMgICAgICAgICAgIGVuZGlmCisKKyMgICAgICAgICAgIGlmZGVmIEhBU19UTV9UTV9aT05FCisgICAgICAgICAgICAgICAgZGVzdC0+dG1fem9uZSAgPSBzcmMtPnRtX3pvbmU7CisjICAgICAgICAgICBlbmRpZgorCisjICAgICAgIGVsc2UKKyAgICAgICAgICAgIC8qIFRoZXkncmUgdGhlIHNhbWUgdHlwZSAqLworICAgICAgICAgICAgbWVtY3B5KGRlc3QsIHNyYywgc2l6ZW9mKCpkZXN0KSk7CisjICAgICAgIGVuZGlmCisgICAgfQorfQorCisKK3ZvaWQgY29weV9UTV90b190bShjb25zdCBzdHJ1Y3QgVE0gKnNyYywgc3RydWN0IHRtICpkZXN0KSB7CisgICAgaWYoIHNyYyA9PSBOVUxMICkgeworICAgICAgICBtZW1zZXQoZGVzdCwgMCwgc2l6ZW9mKCpkZXN0KSk7CisgICAgfQorICAgIGVsc2UgeworIyAgICAgICBpZmRlZiBVU0VfVE02NAorICAgICAgICAgICAgZGVzdC0+dG1fc2VjICAgICAgICA9IHNyYy0+dG1fc2VjOworICAgICAgICAgICAgZGVzdC0+dG1fbWluICAgICAgICA9IHNyYy0+dG1fbWluOworICAgICAgICAgICAgZGVzdC0+dG1faG91ciAgICAgICA9IHNyYy0+dG1faG91cjsKKyAgICAgICAgICAgIGRlc3QtPnRtX21kYXkgICAgICAgPSBzcmMtPnRtX21kYXk7CisgICAgICAgICAgICBkZXN0LT50bV9tb24gICAgICAgID0gc3JjLT50bV9tb247CisgICAgICAgICAgICBkZXN0LT50bV95ZWFyICAgICAgID0gKGludClzcmMtPnRtX3llYXI7CisgICAgICAgICAgICBkZXN0LT50bV93ZGF5ICAgICAgID0gc3JjLT50bV93ZGF5OworICAgICAgICAgICAgZGVzdC0+dG1feWRheSAgICAgICA9IHNyYy0+dG1feWRheTsKKyAgICAgICAgICAgIGRlc3QtPnRtX2lzZHN0ICAgICAgPSBzcmMtPnRtX2lzZHN0OworCisjICAgICAgICAgICBpZmRlZiBIQVNfVE1fVE1fR01UT0ZGCisgICAgICAgICAgICAgICAgZGVzdC0+dG1fZ210b2ZmICA9IHNyYy0+dG1fZ210b2ZmOworIyAgICAgICAgICAgZW5kaWYKKworIyAgICAgICAgICAgaWZkZWYgSEFTX1RNX1RNX1pPTkUKKyAgICAgICAgICAgICAgICBkZXN0LT50bV96b25lICA9IHNyYy0+dG1fem9uZTsKKyMgICAgICAgICAgIGVuZGlmCisKKyMgICAgICAgZWxzZQorICAgICAgICAgICAgLyogVGhleSdyZSB0aGUgc2FtZSB0eXBlICovCisgICAgICAgICAgICBtZW1jcHkoZGVzdCwgc3JjLCBzaXplb2YoKmRlc3QpKTsKKyMgICAgICAgZW5kaWYKKyAgICB9Cit9CisKKworLyogU2ltdWxhdGUgbG9jYWx0aW1lX3IoKSB0byB0aGUgYmVzdCBvZiBvdXIgYWJpbGl0eSAqLworc3RydWN0IHRtICogZmFrZV9sb2NhbHRpbWVfcihjb25zdCB0aW1lX3QgKmNsb2NrLCBzdHJ1Y3QgdG0gKnJlc3VsdCkgeworICAgIGNvbnN0IHN0cnVjdCB0bSAqc3RhdGljX3Jlc3VsdCA9IGxvY2FsdGltZShjbG9jayk7CisKKyAgICBhc3NlcnQocmVzdWx0ICE9IE5VTEwpOworCisgICAgaWYoIHN0YXRpY19yZXN1bHQgPT0gTlVMTCApIHsKKyAgICAgICAgbWVtc2V0KHJlc3VsdCwgMCwgc2l6ZW9mKCpyZXN1bHQpKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBtZW1jcHkocmVzdWx0LCBzdGF0aWNfcmVzdWx0LCBzaXplb2YoKnJlc3VsdCkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KK30KKworCisKKy8qIFNpbXVsYXRlIGdtdGltZV9yKCkgdG8gdGhlIGJlc3Qgb2Ygb3VyIGFiaWxpdHkgKi8KK3N0cnVjdCB0bSAqIGZha2VfZ210aW1lX3IoY29uc3QgdGltZV90ICpjbG9jaywgc3RydWN0IHRtICpyZXN1bHQpIHsKKyAgICBjb25zdCBzdHJ1Y3QgdG0gKnN0YXRpY19yZXN1bHQgPSBnbXRpbWUoY2xvY2spOworCisgICAgYXNzZXJ0KHJlc3VsdCAhPSBOVUxMKTsKKworICAgIGlmKCBzdGF0aWNfcmVzdWx0ID09IE5VTEwgKSB7CisgICAgICAgIG1lbXNldChyZXN1bHQsIDAsIHNpemVvZigqcmVzdWx0KSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgbWVtY3B5KHJlc3VsdCwgc3RhdGljX3Jlc3VsdCwgc2l6ZW9mKCpyZXN1bHQpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cit9CisKKworc3RhdGljIFRpbWU2NF9UIHNlY29uZHNfYmV0d2Vlbl95ZWFycyhZZWFyIGxlZnRfeWVhciwgWWVhciByaWdodF95ZWFyKSB7CisgICAgaW50IGluY3JlbWVudCA9IChsZWZ0X3llYXIgPiByaWdodF95ZWFyKSA/IDEgOiAtMTsKKyAgICBUaW1lNjRfVCBzZWNvbmRzID0gMDsKKyAgICBpbnQgY3ljbGVzOworCisgICAgaWYoIGxlZnRfeWVhciA+IDI0MDAgKSB7CisgICAgICAgIGN5Y2xlcyA9IChsZWZ0X3llYXIgLSAyNDAwKSAvIDQwMDsKKyAgICAgICAgbGVmdF95ZWFyIC09IGN5Y2xlcyAqIDQwMDsKKyAgICAgICAgc2Vjb25kcyAgICs9IGN5Y2xlcyAqIHNlY29uZHNfaW5fZ3JlZ29yaWFuX2N5Y2xlOworICAgIH0KKyAgICBlbHNlIGlmKCBsZWZ0X3llYXIgPCAxNjAwICkgeworICAgICAgICBjeWNsZXMgPSAobGVmdF95ZWFyIC0gMTYwMCkgLyA0MDA7CisgICAgICAgIGxlZnRfeWVhciArPSBjeWNsZXMgKiA0MDA7CisgICAgICAgIHNlY29uZHMgICArPSBjeWNsZXMgKiBzZWNvbmRzX2luX2dyZWdvcmlhbl9jeWNsZTsKKyAgICB9CisKKyAgICB3aGlsZSggbGVmdF95ZWFyICE9IHJpZ2h0X3llYXIgKSB7CisgICAgICAgIHNlY29uZHMgKz0gbGVuZ3RoX29mX3llYXJbSVNfTEVBUChyaWdodF95ZWFyIC0gMTkwMCldICogNjAgKiA2MCAqIDI0OworICAgICAgICByaWdodF95ZWFyICs9IGluY3JlbWVudDsKKyAgICB9CisKKyAgICByZXR1cm4gc2Vjb25kcyAqIGluY3JlbWVudDsKK30KKworCitUaW1lNjRfVCBta3RpbWU2NChjb25zdCBzdHJ1Y3QgVE0gKmlucHV0X2RhdGUpIHsKKyAgICBzdHJ1Y3QgdG0gc2FmZV9kYXRlOworICAgIHN0cnVjdCBUTSBkYXRlOworICAgIFRpbWU2NF9UICB0aW1lOworICAgIFllYXIgICAgICB5ZWFyID0gaW5wdXRfZGF0ZS0+dG1feWVhciArIDE5MDA7CisKKyAgICBpZiggTUlOX1NBRkVfWUVBUiA8PSB5ZWFyICYmIHllYXIgPD0gTUFYX1NBRkVfWUVBUiApIHsKKyAgICAgICAgY29weV9UTV90b190bShpbnB1dF9kYXRlLCAmc2FmZV9kYXRlKTsKKyAgICAgICAgcmV0dXJuIChUaW1lNjRfVClta3RpbWUoJnNhZmVfZGF0ZSk7CisgICAgfQorCisgICAgLyogSGF2ZSB0byBtYWtlIHRoZSB5ZWFyIHNhZmUgaW4gZGF0ZSBlbHNlIGl0IHdvbid0IGZpdCBpbiBzYWZlX2RhdGUgKi8KKyAgICBkYXRlID0gKmlucHV0X2RhdGU7CisgICAgZGF0ZS50bV95ZWFyID0gc2FmZV95ZWFyKHllYXIpIC0gMTkwMDsKKyAgICBjb3B5X1RNX3RvX3RtKCZkYXRlLCAmc2FmZV9kYXRlKTsKKworICAgIHRpbWUgPSAoVGltZTY0X1QpbWt0aW1lKCZzYWZlX2RhdGUpOworCisgICAgdGltZSArPSBzZWNvbmRzX2JldHdlZW5feWVhcnMoeWVhciwgKFllYXIpKHNhZmVfZGF0ZS50bV95ZWFyICsgMTkwMCkpOworCisgICAgcmV0dXJuIHRpbWU7Cit9CisKKworLyogQmVjYXVzZSBJIHRoaW5rIG1rdGltZSgpIGlzIGEgY3JhcHB5IG5hbWUgKi8KK1RpbWU2NF9UIHRpbWVsb2NhbDY0KGNvbnN0IHN0cnVjdCBUTSAqZGF0ZSkgeworICAgIHJldHVybiBta3RpbWU2NChkYXRlKTsKK30KKworCitzdHJ1Y3QgVE0gKmdtdGltZTY0X3IgKGNvbnN0IFRpbWU2NF9UICppbl90aW1lLCBzdHJ1Y3QgVE0gKnApCit7CisgICAgaW50IHZfdG1fc2VjLCB2X3RtX21pbiwgdl90bV9ob3VyLCB2X3RtX21vbiwgdl90bV93ZGF5OworICAgIFRpbWU2NF9UIHZfdG1fdGRheTsKKyAgICBpbnQgbGVhcDsKKyAgICBUaW1lNjRfVCBtOworICAgIFRpbWU2NF9UIHRpbWUgPSAqaW5fdGltZTsKKyAgICBZZWFyIHllYXIgPSA3MDsKKyAgICBpbnQgY3ljbGVzID0gMDsKKworICAgIGFzc2VydChwICE9IE5VTEwpOworCisgICAgLyogVXNlIHRoZSBzeXN0ZW0gZ210aW1lKCkgaWYgdGltZV90IGlzIHNtYWxsIGVub3VnaCAqLworICAgIGlmKCBTSE9VTERfVVNFX1NZU1RFTV9HTVRJTUUoKmluX3RpbWUpICkgeworICAgICAgICB0aW1lX3Qgc2FmZV90aW1lID0gKmluX3RpbWU7CisgICAgICAgIHN0cnVjdCB0bSBzYWZlX2RhdGU7CisgICAgICAgIEdNVElNRV9SKCZzYWZlX3RpbWUsICZzYWZlX2RhdGUpOworCisgICAgICAgIGNvcHlfdG1fdG9fVE0oJnNhZmVfZGF0ZSwgcCk7CisgICAgICAgIGFzc2VydChjaGVja190bShwKSk7CisKKyAgICAgICAgcmV0dXJuIHA7CisgICAgfQorCisjaWZkZWYgSEFTX1RNX1RNX0dNVE9GRgorICAgIHAtPnRtX2dtdG9mZiA9IDA7CisjZW5kaWYKKyAgICBwLT50bV9pc2RzdCAgPSAwOworCisjaWZkZWYgSEFTX1RNX1RNX1pPTkUKKyAgICBwLT50bV96b25lICAgPSAiVVRDIjsKKyNlbmRpZgorCisgICAgdl90bV9zZWMgPSAgKGludCkodGltZSAlIDYwKTsKKyAgICB0aW1lIC89IDYwOworICAgIHZfdG1fbWluID0gIChpbnQpKHRpbWUgJSA2MCk7CisgICAgdGltZSAvPSA2MDsKKyAgICB2X3RtX2hvdXIgPSAoaW50KSh0aW1lICUgMjQpOworICAgIHRpbWUgLz0gMjQ7CisgICAgdl90bV90ZGF5ID0gdGltZTsKKworICAgIFdSQVAgKHZfdG1fc2VjLCB2X3RtX21pbiwgNjApOworICAgIFdSQVAgKHZfdG1fbWluLCB2X3RtX2hvdXIsIDYwKTsKKyAgICBXUkFQICh2X3RtX2hvdXIsIHZfdG1fdGRheSwgMjQpOworCisgICAgdl90bV93ZGF5ID0gKGludCkoKHZfdG1fdGRheSArIDQpICUgNyk7CisgICAgaWYgKHZfdG1fd2RheSA8IDApCisgICAgICAgIHZfdG1fd2RheSArPSA3OworICAgIG0gPSB2X3RtX3RkYXk7CisKKyAgICBpZiAobSA+PSBDSEVBVF9EQVlTKSB7CisgICAgICAgIHllYXIgPSBDSEVBVF9ZRUFSUzsKKyAgICAgICAgbSAtPSBDSEVBVF9EQVlTOworICAgIH0KKworICAgIGlmIChtID49IDApIHsKKyAgICAgICAgLyogR3JlZ29yaWFuIGN5Y2xlcywgdGhpcyBpcyBodWdlIG9wdGltaXphdGlvbiBmb3IgZGlzdGFudCB0aW1lcyAqLworICAgICAgICBjeWNsZXMgPSAoaW50KShtIC8gKFRpbWU2NF9UKSBkYXlzX2luX2dyZWdvcmlhbl9jeWNsZSk7CisgICAgICAgIGlmKCBjeWNsZXMgKSB7CisgICAgICAgICAgICBtIC09IChjeWNsZXMgKiAoVGltZTY0X1QpIGRheXNfaW5fZ3JlZ29yaWFuX2N5Y2xlKTsKKyAgICAgICAgICAgIHllYXIgKz0gKGN5Y2xlcyAqIHllYXJzX2luX2dyZWdvcmlhbl9jeWNsZSk7CisgICAgICAgIH0KKworICAgICAgICAvKiBZZWFycyAqLworICAgICAgICBsZWFwID0gSVNfTEVBUCAoeWVhcik7CisgICAgICAgIHdoaWxlIChtID49IChUaW1lNjRfVCkgbGVuZ3RoX29mX3llYXJbbGVhcF0pIHsKKyAgICAgICAgICAgIG0gLT0gKFRpbWU2NF9UKSBsZW5ndGhfb2ZfeWVhcltsZWFwXTsKKyAgICAgICAgICAgIHllYXIrKzsKKyAgICAgICAgICAgIGxlYXAgPSBJU19MRUFQICh5ZWFyKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIE1vbnRocyAqLworICAgICAgICB2X3RtX21vbiA9IDA7CisgICAgICAgIHdoaWxlIChtID49IChUaW1lNjRfVCkgZGF5c19pbl9tb250aFtsZWFwXVt2X3RtX21vbl0pIHsKKyAgICAgICAgICAgIG0gLT0gKFRpbWU2NF9UKSBkYXlzX2luX21vbnRoW2xlYXBdW3ZfdG1fbW9uXTsKKyAgICAgICAgICAgIHZfdG1fbW9uKys7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICB5ZWFyLS07CisKKyAgICAgICAgLyogR3JlZ29yaWFuIGN5Y2xlcyAqLworICAgICAgICBjeWNsZXMgPSAoaW50KSgobSAvIChUaW1lNjRfVCkgZGF5c19pbl9ncmVnb3JpYW5fY3ljbGUpICsgMSk7CisgICAgICAgIGlmKCBjeWNsZXMgKSB7CisgICAgICAgICAgICBtIC09IChjeWNsZXMgKiAoVGltZTY0X1QpIGRheXNfaW5fZ3JlZ29yaWFuX2N5Y2xlKTsKKyAgICAgICAgICAgIHllYXIgKz0gKGN5Y2xlcyAqIHllYXJzX2luX2dyZWdvcmlhbl9jeWNsZSk7CisgICAgICAgIH0KKworICAgICAgICAvKiBZZWFycyAqLworICAgICAgICBsZWFwID0gSVNfTEVBUCAoeWVhcik7CisgICAgICAgIHdoaWxlIChtIDwgKFRpbWU2NF9UKSAtbGVuZ3RoX29mX3llYXJbbGVhcF0pIHsKKyAgICAgICAgICAgIG0gKz0gKFRpbWU2NF9UKSBsZW5ndGhfb2ZfeWVhcltsZWFwXTsKKyAgICAgICAgICAgIHllYXItLTsKKyAgICAgICAgICAgIGxlYXAgPSBJU19MRUFQICh5ZWFyKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIE1vbnRocyAqLworICAgICAgICB2X3RtX21vbiA9IDExOworICAgICAgICB3aGlsZSAobSA8IChUaW1lNjRfVCkgLWRheXNfaW5fbW9udGhbbGVhcF1bdl90bV9tb25dKSB7CisgICAgICAgICAgICBtICs9IChUaW1lNjRfVCkgZGF5c19pbl9tb250aFtsZWFwXVt2X3RtX21vbl07CisgICAgICAgICAgICB2X3RtX21vbi0tOworICAgICAgICB9CisgICAgICAgIG0gKz0gKFRpbWU2NF9UKSBkYXlzX2luX21vbnRoW2xlYXBdW3ZfdG1fbW9uXTsKKyAgICB9CisKKyAgICBwLT50bV95ZWFyID0geWVhcjsKKyAgICBpZiggcC0+dG1feWVhciAhPSB5ZWFyICkgeworI2lmZGVmIEVPVkVSRkxPVworICAgICAgICBlcnJubyA9IEVPVkVSRkxPVzsKKyNlbmRpZgorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICAvKiBBdCB0aGlzIHBvaW50IG0gaXMgbGVzcyB0aGFuIGEgeWVhciBzbyBjYXN0aW5nIHRvIGFuIGludCBpcyBzYWZlICovCisgICAgcC0+dG1fbWRheSA9IChpbnQpIG0gKyAxOworICAgIHAtPnRtX3lkYXkgPSBqdWxpYW5fZGF5c19ieV9tb250aFtsZWFwXVt2X3RtX21vbl0gKyAoaW50KW07CisgICAgcC0+dG1fc2VjICA9IHZfdG1fc2VjOworICAgIHAtPnRtX21pbiAgPSB2X3RtX21pbjsKKyAgICBwLT50bV9ob3VyID0gdl90bV9ob3VyOworICAgIHAtPnRtX21vbiAgPSB2X3RtX21vbjsKKyAgICBwLT50bV93ZGF5ID0gdl90bV93ZGF5OworCisgICAgYXNzZXJ0KGNoZWNrX3RtKHApKTsKKworICAgIHJldHVybiBwOworfQorCisKK3N0cnVjdCBUTSAqbG9jYWx0aW1lNjRfciAoY29uc3QgVGltZTY0X1QgKnRpbWUsIHN0cnVjdCBUTSAqbG9jYWxfdG0pCit7CisgICAgdGltZV90IHNhZmVfdGltZTsKKyAgICBzdHJ1Y3QgdG0gc2FmZV9kYXRlOworICAgIHN0cnVjdCBUTSBnbV90bTsKKyAgICBZZWFyIG9yaWdfeWVhcjsKKyAgICBpbnQgbW9udGhfZGlmZjsKKworICAgIGFzc2VydChsb2NhbF90bSAhPSBOVUxMKTsKKworICAgIC8qIFVzZSB0aGUgc3lzdGVtIGxvY2FsdGltZSgpIGlmIHRpbWVfdCBpcyBzbWFsbCBlbm91Z2ggKi8KKyAgICBpZiggU0hPVUxEX1VTRV9TWVNURU1fTE9DQUxUSU1FKCp0aW1lKSApIHsKKyAgICAgICAgc2FmZV90aW1lID0gKnRpbWU7CisKKyAgICAgICAgVFJBQ0UxKCJVc2luZyBzeXN0ZW0gbG9jYWx0aW1lIGZvciAlbGxkXG4iLCAqdGltZSk7CisKKyAgICAgICAgTE9DQUxUSU1FX1IoJnNhZmVfdGltZSwgJnNhZmVfZGF0ZSk7CisKKyAgICAgICAgY29weV90bV90b19UTSgmc2FmZV9kYXRlLCBsb2NhbF90bSk7CisgICAgICAgIGFzc2VydChjaGVja190bShsb2NhbF90bSkpOworCisgICAgICAgIHJldHVybiBsb2NhbF90bTsKKyAgICB9CisKKyAgICBpZiggZ210aW1lNjRfcih0aW1lLCAmZ21fdG0pID09IE5VTEwgKSB7CisgICAgICAgIFRSQUNFMSgiZ210aW1lNjRfciByZXR1cm5lZCBudWxsIGZvciAlbGxkXG4iLCAqdGltZSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIG9yaWdfeWVhciA9IGdtX3RtLnRtX3llYXI7CisKKyAgICBpZiAoZ21fdG0udG1feWVhciA+ICgyMDM3IC0gMTkwMCkgfHwKKyAgICAgICAgZ21fdG0udG1feWVhciA8ICgxOTcwIC0gMTkwMCkKKyAgICAgICApCisgICAgeworICAgICAgICBUUkFDRTEoIk1hcHBpbmcgdG1feWVhciAlbGxkIHRvIHNhZmVfeWVhclxuIiwgKFllYXIpZ21fdG0udG1feWVhcik7CisgICAgICAgIGdtX3RtLnRtX3llYXIgPSBzYWZlX3llYXIoKFllYXIpKGdtX3RtLnRtX3llYXIgKyAxOTAwKSkgLSAxOTAwOworICAgIH0KKworICAgIHNhZmVfdGltZSA9IHRpbWVnbTY0KCZnbV90bSk7CisgICAgaWYoIExPQ0FMVElNRV9SKCZzYWZlX3RpbWUsICZzYWZlX2RhdGUpID09IE5VTEwgKSB7CisgICAgICAgIFRSQUNFMSgibG9jYWx0aW1lX3IoJWQpIHJldHVybmVkIE5VTExcbiIsIChpbnQpc2FmZV90aW1lKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgY29weV90bV90b19UTSgmc2FmZV9kYXRlLCBsb2NhbF90bSk7CisKKyAgICBsb2NhbF90bS0+dG1feWVhciA9IG9yaWdfeWVhcjsKKyAgICBpZiggbG9jYWxfdG0tPnRtX3llYXIgIT0gb3JpZ195ZWFyICkgeworICAgICAgICBUUkFDRTIoInRtX3llYXIgb3ZlcmZsb3c6IHRtX3llYXIgJWxsZCwgb3JpZ195ZWFyICVsbGRcbiIsCisgICAgICAgICAgICAgIChZZWFyKWxvY2FsX3RtLT50bV95ZWFyLCAoWWVhcilvcmlnX3llYXIpOworCisjaWZkZWYgRU9WRVJGTE9XCisgICAgICAgIGVycm5vID0gRU9WRVJGTE9XOworI2VuZGlmCisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworCisgICAgbW9udGhfZGlmZiA9IGxvY2FsX3RtLT50bV9tb24gLSBnbV90bS50bV9tb247CisKKyAgICAvKiAgV2hlbiBsb2NhbHRpbWUgaXMgRGVjIDMxc3QgcHJldmlvdXMgeWVhciBhbmQKKyAgICAgICAgZ210aW1lIGlzIEphbiAxc3QgbmV4dCB5ZWFyLgorICAgICovCisgICAgaWYoIG1vbnRoX2RpZmYgPT0gMTEgKSB7CisgICAgICAgIGxvY2FsX3RtLT50bV95ZWFyLS07CisgICAgfQorCisgICAgLyogIFdoZW4gbG9jYWx0aW1lIGlzIEphbiAxc3QsIG5leHQgeWVhciBhbmQKKyAgICAgICAgZ210aW1lIGlzIERlYyAzMXN0LCBwcmV2aW91cyB5ZWFyLgorICAgICovCisgICAgaWYoIG1vbnRoX2RpZmYgPT0gLTExICkgeworICAgICAgICBsb2NhbF90bS0+dG1feWVhcisrOworICAgIH0KKworICAgIC8qIEdNVCBpcyBKYW4gMXN0LCB4eDAxIHllYXIsIGJ1dCBsb2NhbHRpbWUgaXMgc3RpbGwgRGVjIDMxc3QKKyAgICAgICBpbiBhIG5vbi1sZWFwIHh4MDAuICBUaGVyZSBpcyBvbmUgcG9pbnQgaW4gdGhlIGN5Y2xlCisgICAgICAgd2UgY2FuJ3QgYWNjb3VudCBmb3Igd2hpY2ggdGhlIHNhZmUgeHgwMCB5ZWFyIGlzIGEgbGVhcAorICAgICAgIHllYXIuICBTbyB3ZSBuZWVkIHRvIGNvcnJlY3QgZm9yIERlYyAzMXN0IGNvbW1pbmcgb3V0IGFzCisgICAgICAgdGhlIDM2NnRoIGRheSBvZiB0aGUgeWVhci4KKyAgICAqLworICAgIGlmKCAhSVNfTEVBUChsb2NhbF90bS0+dG1feWVhcikgJiYgbG9jYWxfdG0tPnRtX3lkYXkgPT0gMzY1ICkKKyAgICAgICAgbG9jYWxfdG0tPnRtX3lkYXktLTsKKworICAgIGFzc2VydChjaGVja190bShsb2NhbF90bSkpOworCisgICAgcmV0dXJuIGxvY2FsX3RtOworfQorCisKK2ludCB2YWxpZF90bV93ZGF5KCBjb25zdCBzdHJ1Y3QgVE0qIGRhdGUgKSB7CisgICAgaWYoIDAgPD0gZGF0ZS0+dG1fd2RheSAmJiBkYXRlLT50bV93ZGF5IDw9IDYgKQorICAgICAgICByZXR1cm4gMTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiAwOworfQorCitpbnQgdmFsaWRfdG1fbW9uKCBjb25zdCBzdHJ1Y3QgVE0qIGRhdGUgKSB7CisgICAgaWYoIDAgPD0gZGF0ZS0+dG1fbW9uICYmIGRhdGUtPnRtX21vbiA8PSAxMSApCisgICAgICAgIHJldHVybiAxOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKKworY2hhciAqYXNjdGltZTY0X3IoIGNvbnN0IHN0cnVjdCBUTSogZGF0ZSwgY2hhciAqcmVzdWx0ICkgeworICAgIC8qIEkgZmlndXJlIGV2ZXJ5dGhpbmcgZWxzZSBjYW4gYmUgZGlzcGxheWVkLCBldmVuIGhvdXIgMjUsIGJ1dCBpZgorICAgICAgIHRoZXNlIGFyZSBvdXQgb2YgcmFuZ2Ugd2Ugd2FsayBvZmYgdGhlIG5hbWUgYXJyYXlzICovCisgICAgaWYoICF2YWxpZF90bV93ZGF5KGRhdGUpIHx8ICF2YWxpZF90bV9tb24oZGF0ZSkgKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHNwcmludGYocmVzdWx0LCAiJS4zcyAlLjNzJTNkICUuMmQ6JS4yZDolLjJkICVkXG4iLAorICAgICAgICB3ZGF5X25hbWVbZGF0ZS0+dG1fd2RheV0sCisgICAgICAgIG1vbl9uYW1lW2RhdGUtPnRtX21vbl0sCisgICAgICAgIGRhdGUtPnRtX21kYXksIGRhdGUtPnRtX2hvdXIsCisgICAgICAgIGRhdGUtPnRtX21pbiwgZGF0ZS0+dG1fc2VjLAorICAgICAgICAxOTAwICsgZGF0ZS0+dG1feWVhcik7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisKK2NoYXIgKmN0aW1lNjRfciggY29uc3QgVGltZTY0X1QqIHRpbWUsIGNoYXIqIHJlc3VsdCApIHsKKyAgICBzdHJ1Y3QgVE0gZGF0ZTsKKworICAgIGxvY2FsdGltZTY0X3IoIHRpbWUsICZkYXRlICk7CisgICAgcmV0dXJuIGFzY3RpbWU2NF9yKCAmZGF0ZSwgcmVzdWx0ICk7Cit9CisKKworLyogTm9uLXRocmVhZCBzYWZlIHZlcnNpb25zIG9mIHRoZSBhYm92ZSAqLworc3RydWN0IFRNICpsb2NhbHRpbWU2NChjb25zdCBUaW1lNjRfVCAqdGltZSkgeworICAgIHJldHVybiBsb2NhbHRpbWU2NF9yKHRpbWUsICZTdGF0aWNfUmV0dXJuX0RhdGUpOworfQorCitzdHJ1Y3QgVE0gKmdtdGltZTY0KGNvbnN0IFRpbWU2NF9UICp0aW1lKSB7CisgICAgcmV0dXJuIGdtdGltZTY0X3IodGltZSwgJlN0YXRpY19SZXR1cm5fRGF0ZSk7Cit9CisKK2NoYXIgKmFzY3RpbWU2NCggY29uc3Qgc3RydWN0IFRNKiBkYXRlICkgeworICAgIHJldHVybiBhc2N0aW1lNjRfciggZGF0ZSwgU3RhdGljX1JldHVybl9TdHJpbmcgKTsKK30KKworY2hhciAqY3RpbWU2NCggY29uc3QgVGltZTY0X1QqIHRpbWUgKSB7CisgICAgcmV0dXJuIGFzY3RpbWU2NChsb2NhbHRpbWU2NCh0aW1lKSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy90aW1lNjRfY29uZmlnLmggYi9saWJjL2Jpb25pYy90aW1lNjRfY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNiY2VjZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL3RpbWU2NF9jb25maWcuaApAQCAtMCwwICsxLDc1IEBACisvKiBEZWJ1Z2dpbmcKKyAgIFRJTUVfNjRfREVCVUcKKyAgIERlZmluZSBpZiB5b3Ugd2FudCBkZWJ1Z2dpbmcgbWVzc2FnZXMKKyovCisvKiAjZGVmaW5lIFRJTUVfNjRfREVCVUcgKi8KKworCisvKiBJTlRfNjRfVAorICAgQSA2NCBiaXQgaW50ZWdlciB0eXBlIHRvIHVzZSB0byBzdG9yZSB0aW1lIGFuZCBvdGhlcnMuCisgICBNdXN0IGJlIGRlZmluZWQuCisqLworI2RlZmluZSBJTlRfNjRfVCAgICAgICAgICAgICAgICBsb25nIGxvbmcKKworCisvKiBVU0VfVE02NAorICAgU2hvdWxkIHdlIHVzZSBhIDY0IGJpdCBzYWZlIHJlcGxhY2VtZW50IGZvciB0bT8gIFRoaXMgd2lsbAorICAgbGV0IHlvdSBnbyBwYXN0IHllYXIgMiBiaWxsaW9uIGJ1dCB0aGUgc3RydWN0IHdpbGwgYmUgaW5jb21wYXRpYmxlCisgICB3aXRoIHRtLiAgQ29udmVyc2lvbiBmdW5jdGlvbnMgd2lsbCBiZSBwcm92aWRlZC4KKyovCisvKiAjZGVmaW5lIFVTRV9UTTY0ICovCisKKworLyogQXZhaWxhYmlsaXR5IG9mIHN5c3RlbSBmdW5jdGlvbnMuCisKKyAgIEhBU19HTVRJTUVfUgorICAgRGVmaW5lIGlmIHlvdXIgc3lzdGVtIGhhcyBnbXRpbWVfcigpCisKKyAgIEhBU19MT0NBTFRJTUVfUgorICAgRGVmaW5lIGlmIHlvdXIgc3lzdGVtIGhhcyBsb2NhbHRpbWVfcigpCisKKyAgIEhBU19USU1FR00KKyAgIERlZmluZSBpZiB5b3VyIHN5c3RlbSBoYXMgdGltZWdtKCksIGEgR05VIGV4dGVuc2lvbi4KKyovCisjZGVmaW5lIEhBU19HTVRJTUVfUgorI2RlZmluZSBIQVNfTE9DQUxUSU1FX1IKKy8qI2RlZmluZSBIQVNfVElNRUdNICovCisKKworLyogRGV0YWlscyBvZiBub24tc3RhbmRhcmQgdG0gc3RydWN0IGVsZW1lbnRzLgorCisgICBIQVNfVE1fVE1fR01UT0ZGCisgICBUcnVlIGlmIHlvdXIgdG0gc3RydWN0IGhhcyBhICJ0bV9nbXRvZmYiIGVsZW1lbnQuCisgICBBIEJTRCBleHRlbnNpb24uCisKKyAgIEhBU19UTV9UTV9aT05FCisgICBUcnVlIGlmIHlvdXIgdG0gc3RydWN0IGhhcyBhICJ0bV96b25lIiBlbGVtZW50LgorICAgQSBCU0QgZXh0ZW5zaW9uLgorKi8KKyNkZWZpbmUgSEFTX1RNX1RNX0dNVE9GRgorI2RlZmluZSBIQVNfVE1fVE1fWk9ORQorCisKKy8qIFVTRV9TWVNURU1fTE9DQUxUSU1FCisgICBVU0VfU1lTVEVNX0dNVElNRQorICAgU2hvdWxkIHdlIHVzZSB0aGUgc3lzdGVtIGZ1bmN0aW9ucyBpZiB0aGUgdGltZSBpcyBpbnNpZGUgdGhlaXIgcmFuZ2U/CisgICBZb3VyIHN5c3RlbSBsb2NhbHRpbWUoKSBpcyBwcm9iYWJseSBtb3JlIGFjY3VyYXRlLCBidXQgb3VyIGdtdGltZSgpIGlzCisgICBmYXN0IGFuZCBzYWZlLgorKi8KKyNkZWZpbmUgVVNFX1NZU1RFTV9MT0NBTFRJTUUKKy8qICNkZWZpbmUgVVNFX1NZU1RFTV9HTVRJTUUgKi8KKworCisvKiBTWVNURU1fTE9DQUxUSU1FX01BWAorICAgU1lTVEVNX0xPQ0FMVElNRV9NSU4KKyAgIFNZU1RFTV9HTVRJTUVfTUFYCisgICBTWVNURU1fR01USU1FX01JTgorICAgTWF4aW11bSBhbmQgbWluaW11bSB2YWx1ZXMgeW91ciBzeXN0ZW0ncyBnbXRpbWUoKSBhbmQgbG9jYWx0aW1lKCkKKyAgIGNhbiBoYW5kbGUuICBXZSB3aWxsIHVzZSB5b3VyIHN5c3RlbSBmdW5jdGlvbnMgaWYgdGhlIHRpbWUgZmFsbHMKKyAgIGluc2lkZSB0aGVzZSByYW5nZXMuCisqLworI2RlZmluZSBTWVNURU1fTE9DQUxUSU1FX01BWCAgICAgMjE0NzQ4MzY0NworI2RlZmluZSBTWVNURU1fTE9DQUxUSU1FX01JTiAgICAtMjE0NzQ4MzY0NworI2RlZmluZSBTWVNURU1fR01USU1FX01BWCAgICAgICAgMjE0NzQ4MzY0NworI2RlZmluZSBTWVNURU1fR01USU1FX01JTiAgICAgICAtMjE0NzQ4MzY0NworCmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy91dGltZS5jIGIvbGliYy9iaW9uaWMvdXRpbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjM5ODQ3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvdXRpbWUuYwpAQCAtMCwwICsxLDU1IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKK3N0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIyl1dGltZS5jCTguMSAoQmVya2VsZXkpIDYvNC85MyI7CisjZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorLy9fX0ZCU0RJRCgiJEZyZWVCU0Q6IC9yZXBvbWFuL3IvbmN2cy9zcmMvbGliL2xpYmMvZ2VuL3V0aW1lLmMsdiAxLjMgMjAwNy8wMS8wOSAwMDoyNzo1NiBpbXAgRXhwICQiKTsKKworI2luY2x1ZGUgPHN5cy90aW1lLmg+CisKKyNpbmNsdWRlIDx1dGltZS5oPgorCitpbnQKK3V0aW1lKHBhdGgsIHRpbWVzKQorCWNvbnN0IGNoYXIgKnBhdGg7CisJY29uc3Qgc3RydWN0IHV0aW1idWYgKnRpbWVzOworeworCXN0cnVjdCB0aW1ldmFsIHR2WzJdLCAqdHZwOworCisJaWYgKHRpbWVzKSB7CisJCXR2WzBdLnR2X3NlYyA9IHRpbWVzLT5hY3RpbWU7CisJCXR2WzFdLnR2X3NlYyA9IHRpbWVzLT5tb2R0aW1lOworCQl0dlswXS50dl91c2VjID0gdHZbMV0udHZfdXNlYyA9IDA7CisJCXR2cCA9IHR2OworCX0gZWxzZQorCQl0dnAgPSBOVUxMOworCXJldHVybiAodXRpbWVzKHBhdGgsIHR2cCkpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvdXRtcC5jIGIvbGliYy9iaW9uaWMvdXRtcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzYjU1ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy91dG1wLmMKQEAgLTAsMCArMSw5MyBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIgVGhlIE5ldEJTRCBGb3VuZGF0aW9uLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gVGhlIE5ldEJTRCBGb3VuZGF0aW9uCisgKiBieSBDaHJpc3RvcyBab3VsYXMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqICAgICAgICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBOZXRCU0QKKyAqICAgICAgICBGb3VuZGF0aW9uLCBJbmMuIGFuZCBpdHMgY29udHJpYnV0b3JzLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiBUaGUgTmV0QlNEIEZvdW5kYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE5FVEJTRCBGT1VOREFUSU9OLCBJTkMuIEFORCBDT05UUklCVVRPUlMKKyAqIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorICogVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUiBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDx1dG1wLmg+CisKK3N0YXRpYyBzdHJ1Y3QgdXRtcCB1dG1wOworc3RhdGljIEZJTEUgKnV0Oworc3RhdGljIGNoYXIgdXRmaWxlW01BWFBBVEhMRU5dID0gX1BBVEhfVVRNUDsKKwordm9pZAorc2V0dXRlbnQodm9pZCkKK3sKKwlpZiAodXQgPT0gTlVMTCkKKwkJcmV0dXJuOworCSh2b2lkKWZzZWVrbyh1dCwgKG9mZl90KTAsIFNFRUtfU0VUKTsKK30KKworc3RydWN0IHV0bXAgKgorZ2V0dXRlbnQodm9pZCkKK3sKKwlpZiAodXQgPT0gTlVMTCkgeworCQlpZiAoKHV0ID0gZm9wZW4odXRmaWxlLCAiciIpKSA9PSBOVUxMKQorCQkJcmV0dXJuIE5VTEw7CisJfQorCWlmIChmcmVhZCgmdXRtcCwgc2l6ZW9mKHV0bXApLCAxLCB1dCkgPT0gMSkKKwkJcmV0dXJuICZ1dG1wOworCXJldHVybiBOVUxMOworfQorCit2b2lkCitlbmR1dGVudCh2b2lkKQoreworCWlmICh1dCAhPSBOVUxMKSB7CisJCSh2b2lkKWZjbG9zZSh1dCk7CisJCXV0ID0gTlVMTDsKKwl9Cit9CisKK2ludAordXRtcG5hbWUoY29uc3QgY2hhciAqZm5hbWUpCit7CisJc2l6ZV90IGxlbiA9IHN0cmxlbihmbmFtZSk7CisKKwlpZiAobGVuID49IHNpemVvZih1dGZpbGUpKQorCQlyZXR1cm4gMDsKKworCS8qIG11c3Qgbm90IGVuZCBpbiB4ISAqLworCWlmIChmbmFtZVtsZW4gLSAxXSA9PSAneCcpCisJCXJldHVybiAwOworCisJKHZvaWQpc3RybGNweSh1dGZpbGUsIGZuYW1lLCBzaXplb2YodXRmaWxlKSk7CisJZW5kdXRlbnQoKTsKKwlyZXR1cm4gMTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvZG9jcy9PVkVSVklFVy5UWFQgYi9saWJjL2RvY3MvT1ZFUlZJRVcuVFhUCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjMTUzYjEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2RvY3MvT1ZFUlZJRVcuVFhUCkBAIC0wLDAgKzEsMzg4IEBACitCaW9uaWMgQyBMaWJyYXJ5IE92ZXJ2aWV3OgorPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworSW50cm9kdWN0aW9uOgorCitDb3JlIFBoaWxvc29waHk6CisKKyAgVGhlIGNvcmUgaWRlYSBiZWhpbmQgQmlvbmljJ3MgZGVzaWduIGlzOiBLRUVQIElUIFJFQUxMWSBTSU1QTEUuCisKKyAgVGhpcyBpbXBsaWVzIHRoYXQgdGhlIEMgbGlicmFyeSBzaG91bGQgb25seSBwcm92aWRlIGxpZ2h0d2VpZ2h0IHdyYXBwZXJzCisgIGFyb3VuZCBrZXJuZWwgZmFjaWxpdGllcyBhbmQgbm90IHRyeSB0byBiZSB0b28gc21hcnQgdG8gZGVhbCB3aXRoIGVkZ2UgY2FzZXMuCisKKyAgVGhlIG5hbWUgIkJpb25pYyIgY29tZXMgZnJvbSB0aGUgZmFjdCB0aGF0IGl0IGlzIHBhcnQtQlNEIGFuZCBwYXJ0LUxpbnV4OgorICBpdHMgc291cmNlIGNvZGUgY29uc2lzdHMgaW4gYSBtaXggb2YgQlNEIEMgbGlicmFyeSBwaWVjZXMgd2l0aCBjdXN0b20KKyAgTGludXgtc3BlY2lmaWMgYml0cyB1c2VkIHRvIGRlYWwgd2l0aCB0aHJlYWRzLCBwcm9jZXNzZXMsIHNpZ25hbHMgYW5kIGEgZmV3CisgIG90aGVycyB0aGluZ3MuCisKKyAgQWxsIG9yaWdpbmFsIEJTRCBwaWVjZXMgY2FycnkgdGhlIEJTRCBjb3B5cmlnaHQgZGlzY2xhaW1lci4gQmlvbmljLXNwZWNpZmljIAorICBiaXRzIGNhcnJ5IHRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QgY29weXJpZ2h0IGRpc2NsYWltZXIuIEFuZAorICBldmVyeXRoaW5nIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBCU0QgbGljZW5zZS4KKworQXJjaGl0ZWN0dXJlczoKKworICBCaW9uaWMgY3VycmVudGx5IHN1cHBvcnRzIHRoZSBBUk0gYW5kIHg4NiBpbnN0cnVjdGlvbiBzZXRzLiBJbiB0aGVvcnksIGl0CisgIHNob3VsZCBiZSBwb3NzaWJsZSB0byBzdXBwb3J0IG1vcmUsIGJ1dCB0aGlzIG1heSByZXF1aXJlIGEgbGl0dGxlIHdvcmsgKGUuZy4KKyAgYWRkaW5nIHN5c3RlbSBjYWxsIElEcyB0byBTWVNDQUxMUy5UWFQsIGRlc2NyaWJlZCBiZWxvdywgb3IgbW9kaWZ5aW5nIHRoZQorICBkeW5hbWljIGxpbmtlcikuCisKKyAgVGhlIEFSTS1zcGVjaWZpYyBjb2RlIGlzIHVuZGVyIGFyY2gtYXJtLyBhbmQgdGhlIHg4Ni1zcGVjaWZpYyBvbmUgaXMgdW5kZXIKKyAgYXJjaC14ODYvCisKKyAgTm90ZSB0aGF0IHRoZSB4ODYgdmVyc2lvbiBpcyBvbmx5IG1lYW50IHRvIHJ1biBvbiBhbiB4ODYgQW5kcm9pZCBkZXZpY2UuIFdlCisgIG1ha2UgYWJzb2x1dGVseSBubyBjbGFpbSB0aGF0IHlvdSBjb3VsZCBidWlsZCBhbmQgdXNlIEJpb25pYyBvbiBhIHN0b2NrIHg4NgorICBMaW51eCBkaXN0cmlidXRpb24gKHRob3VnaCB0aGF0IHdvdWxkIGJlIGNvb2wsIHNvIHBhdGNoZXMgYXJlIHdlbGNvbWVkIDotKSkKKworU3lzY2FsbCBzdHViczoKKworICBFYWNoIHN5c3RlbSBjYWxsIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIGJ5IGEgdGlueSBhc3NlbWJsZXIgc291cmNlIGZyYWdtZW50CisgIChjYWxsZWQgYSAic3lzY2FsbCBzdHViIiksIHdoaWNoIGlzIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5CisgIHRvb2xzL2dlbnN5c2NhbGxzLnB5IHdoaWNoIHJlYWRzIHRoZSBTWVNDQUxMUy5UWFQgZmlsZSBmb3IgaW5wdXQuCisKKyAgU1lTQ0FMTFMuVFhUIGNvbnRhaW5zIHRoZSBsaXN0IG9mIGFsbCBzeXNjYWxsIHN0dWJzIHRvIGdlbmVyYXRlLCBhbG9uZyB3aXRoCisgIHRoZSBjb3JyZXNwb25kaW5nIHN5c2NhbGwgbnVtZXJpYyBpZGVudGlmaWVyICh3aGljaCBtYXkgZGlmZmVyIGJldHdlZW4gQVJNCisgIGFuZCB4ODYpLCBhbmQgaXRzIHNpZ25hdHVyZQorCisgIElmIHlvdSBtb2RpZnkgdGhpcyBmaWxlLCB5b3UgbWF5IHdhbnQgdG8gdXNlIHRvb2xzL2NoZWNrc3lzY2FsbHMucHkgd2hpY2gKKyAgY2hlY2tzIGl0cyBjb250ZW50IGFnYWluc3Qgb2ZmaWNpYWwgTGludXgga2VybmVsIGhlYWRlciBmaWxlcywgYW5kIHdpbGwKKyAgcmVwb3J0IGVycm9ycyB3aGVuIGludmFsaWQgc3lzY2FsbCBpZHMgYXJlIHVzZWQuCisKKyAgU29tZXRpbWVzLCB0aGUgQyBsaWJyYXJ5IGZ1bmN0aW9uIGlzIHJlYWxseSBhIHdyYXBwZXIgdGhhdCBjYWxscyB0aGUKKyAgY29ycmVzcG9uZGluZyBzeXNjYWxsIHdpdGggYW5vdGhlciBuYW1lLiBGb3IgZXhhbXBsZSwgdGhlIGV4aXQoKSBmdW5jdGlvbgorICBpcyBwcm92aWRlZCBieSB0aGUgQyBsaWJyYXJ5IGFuZCBjYWxscyB0aGUgX2V4aXQoKSBzeXNjYWxsIHN0dWIuCisKKyAgU2VlIFNZU0NBTExTLlRYVCBmb3IgZG9jdW1lbnRhdGlvbiBhbmQgZGV0YWlscy4KKworCit0aW1lX3Q6CisKKyAgdGltZV90IGlzIDMyLWJpdCBhcyBkZWZpbmVkIGJ5IHRoZSBrZXJuZWwgb24gMzItYml0IENQVXMuIEEgNjQtYml0IHZlcnNpb24KKyAgd291bGQgYmUgcHJlZmVycmFibGUgdG8gYXZvaWQgdGhlIFkyMDM4IGJ1ZywgYnV0IHRoZSBrZXJuZWwgbWFpbnRhaW5lcnMKKyAgY29uc2lkZXIgdGhhdCB0aGlzIGlzIG5vdCBuZWVkZWQgYXQgdGhlIG1vbWVudC4KKworICBJbnN0ZWFkLCBCaW9uaWMgcHJvdmlkZXMgYSA8dGltZTY0Lmg+IGhlYWRlciB0aGF0IGRlZmluZXMgYSB0aW1lNjRfdCB0eXBlLAorICBhbmQgcmVsYXRlZCBmdW5jdGlvbnMgbGlrZSBta3RpbWU2NCgpLCBsb2NhbHRpbWU2NCgpLCBldGMuLi4KKworCitUaW1lem9uZSBtYW5hZ2VtZW50OgorCisgIFRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IHRpbWV6b25lIGlzIHRha2VuIGZyb20gdGhlIFRaIGVudmlyb25tZW50IHZhcmlhYmxlLAorICBpZiBkZWZpbmVkLiBPdGhlcndpc2UsIHRoZSBzeXN0ZW0gcHJvcGVydHkgbmFtZWQgJ3BlcnNpc3Quc3lzLnRpbWV6b25lJyBpcworICBjaGVja2VkIGluc3RlYWQuCisKKyAgVGhlIHpvbmVpbmZvIHRpbWV6b25lIGRhdGFiYXNlIGFuZCBpbmRleCBmaWxlcyBhcmUgbG9jYXRlZCB1bmRlciBkaXJlY3RvcnkKKyAgL3N5c3RlbS91c3Ivc2hhcmUvem9uZWluZm8sIGluc3RlYWQgb2YgdGhlIG1vcmUgUG9zaXgtY29tcGxpYW50IHBhdGggb2YKKyAgL3Vzci9zaGFyZS96b25laW5mbworCisKK29mZl90OgorCisgIEZvciBzaW1pbGFyIHJlYXNvbnMsIG9mZl90IGlzIDMyLWJpdC4gV2UgZGVmaW5lIGxvZmZfdCBhcyB0aGUgNjQtYml0IHZhcmlhbnQKKyAgZHVlIHRvIEJTRCBpbmhlcml0YW5jZSwgYnV0IG9mZjY0X3Qgc2hvdWxkIGJlIGF2YWlsYWJsZSBhcyBhIHR5cGVkZWYgdG8gZWFzZQorICBwb3J0aW5nIG9mIGN1cnJlbnQgTGludXgtc3BlY2lmaWMgY29kZS4KKworCitMaW51eCBrZXJuZWwgaGVhZGVyczoKKworICBCaW9uaWMgY29tZXMgd2l0aCBpdHMgb3duIHNldCBvZiAiY2xlYW4iIExpbnV4IGtlcm5lbCBoZWFkZXJzIHRvIGFsbG93CisgIHVzZXItc3BhY2UgY29kZSB0byB1c2Uga2VybmVsLXNwZWNpZmljIGRlY2xhcmF0aW9ucyAoZS5nLiBJT0NUTHMsIHN0cnVjdHVyZQorICBkZWNsYXJhdGlvbnMsIGNvbnN0YW50cywgZXRjLi4uKS4gVGhleSBhcmUgbG9jYXRlZCBpbjoKKworICAgICAuL2tlcm5lbC9jb21tb24sCisgICAgIC4va2VybmVsL2FyY2gtYXJtCisgICAgIC4va2VybmVsL2FyY2gteDg2CisKKyAgVGhlc2UgaGVhZGVycyBoYXZlIGJlZW4gZ2VuZXJhdGVkIGJ5IGEgdG9vbCAoa2VybmVsL3Rvb2xzL3VwZGF0ZS1hbGwucHkpIHRvCisgIG9ubHkgaW5jbHVkZSB0aGUgcHVibGljIGRlZmluaXRpb25zIGZyb20gdGhlIG9yaWdpbmFsIExpbnV4IGtlcm5lbCBoZWFkZXJzLgorCisgIElmIHlvdSB3YW50IHRvIGtub3cgd2h5IGFuZCBob3cgdGhpcyBpcyBkb25lLCByZWFkIGtlcm5lbC9SRUFETUUuVFhUIHRvIGdldAorICBhbGwgdGhlIChnb3J5KSBkZXRhaWxzLgorCisKK1BUaHJlYWQgaW1wbGVtZW50YXRpb246CisKKyAgIEJpb25pYydzIEMgbGlicmFyeSBjb21lcyB3aXRoIGl0cyBvd24gcHRocmVhZCBpbXBsZW1lbnRhdGlvbiBidW5kbGVkIGluLgorICAgVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBvdGhlciBoaXN0b3JpY2FsIEMgbGlicmFyaWVzIHdoaWNoOgorCisgICAgLSBwbGFjZSBpdCBpbiBhbiBleHRlcm5hbCBsaWJyYXJ5ICgtbHB0aHJlYWQpCisgICAgLSBwbGF5IGxpbmtlciB0cmlja3Mgd2l0aCB3ZWFrIHN5bWJvbHMgYXQgZHluYW1pYyBsaW5rIHRpbWUKKworICAgVGhlIHN1cHBvcnQgZm9yIHJlYWwtdGltZSBmZWF0dXJlcyAoYS5rLmEuIC1scnQpIGlzIGFsc28gYnVuZGxlZCBpbiB0aGUKKyAgIEMgbGlicmFyeS4KKworICAgVGhlIGltcGxlbWVudGF0aW9uIGlzIGJhc2VkIG9uIGZ1dGV4ZXMgYW5kIHN0cml2ZXMgdG8gcHJvdmlkZSAqdmVyeSogc2hvcnQKKyAgIGNvZGUgcGF0aHMgZm9yIGNvbW1vbiBvcGVyYXRpb25zLiBOb3RhYmxlIGZlYXR1cmVzIGFyZSB0aGUgZm9sbG93aW5nOgorCisgICAgICAtIHB0aHJlYWRfbXV0ZXhfdCwgcHRocmVhZF9jb25kX3QgYXJlIG9ubHkgNCBieXRlcyBlYWNoLgorCisgICAgICAtIE5vcm1hbCwgcmVjdXJzaXZlIGFuZCBlcnJvci1jaGVjayBtdXRleGVzIGFyZSBzdXBwb3J0ZWQsIGFuZCB0aGUgY29kZQorICAgICAgICBwYXRoIGlzIGhlYXZpbHkgb3B0aW1pemVkIGZvciB0aGUgbm9ybWFsIGNhc2UsIHdoaWNoIGlzIHVzZWQgbW9zdCBvZgorICAgICAgICB0aGUgdGltZS4KKworICAgICAgLSBQcm9jZXNzLXNoYXJlZCBtdXRleGVzIGFuZCBjb25kaXRpb24gdmFyaWFibGVzIGFyZSBub3Qgc3VwcG9ydGVkLgorICAgICAgICBUaGVpciBpbXBsZW1lbnRhdGlvbiByZXF1aXJlcyBmYXIgbW9yZSBjb21wbGV4aXR5IGFuZCB3YXMgYWJzb2x1dGVseQorICAgICAgICBub3QgbmVlZGVkIGZvciBBbmRyb2lkICh3aGljaCB1c2VzIG90aGVyIGludGVyLXByb2Nlc3Mgc3luY2hyb25pemF0aW9uCisgICAgICAgIGNhcGFiaWxpdGllcykuCisKKyAgICAgICAgTm90ZSB0aGF0IHRoZXkgY291bGQgYmUgYWRkZWQgaW4gdGhlIGZ1dHVyZSB3aXRob3V0IGJyZWFraW5nIHRoZSBBQkkKKyAgICAgICAgYnkgc3BlY2lmeWluZyBtb3JlIHNvcGhpc3RpY2F0ZWQgY29kZSBwYXRocyAod2hpY2ggbWF5IG1ha2UgdGhlIGNvbW1vbgorICAgICAgICBwYXRocyBzbGlnaHRseSBzbG93ZXIgdGhvdWdoKS4KKworICAgICAgLSBUaGVyZSBpcyBjdXJyZW50bHkgbm8gc3VwcG9ydCBmb3IgcmVhZC93cml0ZSBsb2NrcywgcHJpb3JpdHktY2VpbGluZyBpbgorICAgICAgICBtdXRleGVzIGFuZCBvdGhlciBtb3JlIGFkdmFuY2VkIGZlYXR1cmVzLiBBZ2FpbiwgdGhlIG1haW4gaWRlYSBiZWluZworICAgICAgICB0aGF0IHRoaXMgd2FzIG5vdCBuZWVkZWQgZm9yIEFuZHJvaWQgYXQgYWxsIGJ1dCBjb3VsZCBiZSBhZGRlZCBpbiB0aGUKKyAgICAgICAgZnV0dXJlLgorCitwdGhyZWFkX2NhbmNlbCgpOgorCisgICBwdGhyZWFkX2NhbmNlbCgpIHdpbGwgKm5vdCogYmUgc3VwcG9ydGVkIGluIEJpb25pYywgYmVjYXVzZSBkb2luZyB0aGlzIHdvdWxkCisgICBpbnZvbHZlIG1ha2luZyB0aGUgQyBsaWJyYXJ5IHNpZ25pZmljYW50bHkgYmlnZ2VyIGZvciB2ZXJ5IGxpdHRsZSBiZW5lZml0LgorCisgICBDb25zaWRlciB0aGF0OgorCisgICAgIC0gQSBwcm9wZXIgaW1wbGVtZW50YXRpb24gbXVzdCBpbnNlcnQgcHRocmVhZCBjYW5jZWxsYXRpb24gY2hlY2tzIGluIGEgbG90CisgICAgICAgb2YgZGlmZmVyZW50IHBsYWNlcyBvZiB0aGUgQyBsaWJyYXJ5LiBBbmQgY29uZm9ybWFuY2UgaXMgdmVyeSBkaWZmaWN1bHQKKyAgICAgICB0byB0ZXN0IHByb3Blcmx5LgorCisgICAgIC0gQSBwcm9wZXIgaW1wbGVtZW50YXRpb24gbXVzdCBhbHNvIGNsZWFuIHVwIHJlc291cmNlcywgbGlrZSByZWxlYXNpbmcKKyAgICAgICBtZW1vcnksIG9yIHVubG9ja2luZyBtdXRleGVzLCBwcm9wZXJseSBpZiB0aGUgY2FuY2VsbGF0aW9uIGhhcHBlbnMgaW4gYQorICAgICAgIGNvbXBsZXggZnVuY3Rpb24gKGUuZy4gaW5zaWRlIGdldGhvc3RieW5hbWUoKSBvciBmcHJpbnRmKCkgKyBjb21wbGV4CisgICAgICAgZm9ybWF0dGluZyBydWxlcykuIFRoaXMgdGVuZHMgdG8gc2xvdyBkb3duIHRoZSBwYXRoIG9mIG1hbnkgZnVuY3Rpb25zLgorCisgICAgIC0gcHRocmVhZCBjYW5jZWxsYXRpb24gY2Fubm90IHN0b3AgYWxsIHRocmVhZHM6IGUuZy4gaXQgY2FuJ3QgZG8gYW55dGhpbmcKKyAgICAgICBhZ2FpbnN0IGFuIGluZmluaXRlIGxvb3AKKworICAgICAtIHB0aHJlYWQgY2FuY2VsbGF0aW9uIGl0c2VsZiBoYXMgc2hvcnQtY29taW5ncyBhbmQgaXNuJ3QgdmVyeSBwb3J0YWJsZQorICAgICAgIChzZWUgaHR0cDovL2Fkdm9nYXRvLm9yZy9wZXJzb24vc2xhbWIvZGlhcnkuaHRtbD9zdGFydD00OSBmb3IgZXhhbXBsZSkuCisKKyAgIEFsbCBvZiB0aGlzIGlzIGNvbnRyYXJ5IHRvIHRoZSBCaW9uaWMgZGVzaWduIGdvYWxzLiBJZiB5b3VyIGNvZGUgZGVwZW5kcyBvbgorICAgdGhyZWFkIGNhbmNlbGxhdGlvbiwgcGxlYXNlIGNvbnNpZGVyIGFsdGVybmF0aXZlcy4KKworICAgTm90ZSBob3dldmVyIHRoYXQgQmlvbmljIGRvZXMgaW1wbGVtZW50IHB0aHJlYWRfY2xlYW51cF9wdXNoKCkgYW5kCisgICBwdGhyZWFkX2NsZWFudXBfcG9wKCksIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGhhbmRsZSBjbGVhbnVwcyB0aGF0IGhhcHBlbiB3aGVuCisgICBhIHRocmVhZCB2b2x1bnRhcmlseSBleGl0cyB0aHJvdWdoIHB0aHJlYWRfZXhpdCgpIG9yIHJldHVybmluZyBmcm9tIGl0cworICAgbWFpbiBmdW5jdGlvbi4KKworCitwdGhyZWFkX29uY2UoKToKKworICBEbyBub3QgY2FsbCBmb3JrKCkgd2l0aGluIGEgY2FsbGJhY2sgcHJvdmlkZWQgdG8gcHRocmVhZF9vbmNlKCkuIERvaW5nIHRoaXMKKyAgbWF5IHJlc3VsdCBpbiBhIGRlYWRsb2NrIGluIHRoZSBjaGlsZCBwcm9jZXNzIHRoZSBuZXh0IHRpbWUgaXQgY2FsbHMKKyAgcHRocmVhZF9vbmNlKCkuCisKKyAgQWxzbywgeW91IGNhbid0IHRocm93IGEgQysrIEV4Y2VwdGlvbiBmcm9tIHRoZSBjYWxsYmFjayAoc2VlIEMrKyBFeGNlcHRpb24KKyAgU3VwcG9ydCBiZWxvdykuCisKKyAgVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2YgcHRocmVhZF9vbmNlKCkgbGFja3MgdGhlIG5lY2Vzc2FyeSBzdXBwb3J0IG9mCisgIG11bHRpLWNvcmUtc2FmZSBkb3VibGUtY2hlY2tlZC1sb2NraW5nIChyZWFkIGFuZCB3cml0ZSBiYXJyaWVycykuCisKKworVGhyZWFkLXNwZWNpZmljIGRhdGEKKworICBUaGUgdGhyZWFkLXNwZWNpZmljIHN0b3JhZ2Ugb25seSBwcm92aWRlcyBmb3IgYSBiaXQgbGVzcyB0aGFuIDY0CisgIHB0aHJlYWRfa2V5X3Qgb2JqZWN0cyB0byBlYWNoIHByb2Nlc3MuIFRoZSBpbXBsZW1lbnRhdGlvbiBwcm92aWRlcyA2NCByZWFsCisgIHNsb3RzIGJ1dCBhbHNvIHVzZXMgYWJvdXQgNSBvZiB0aGVtIChleGFjdCBudW1iZXIgbWF5IGRlcGVuZCBvbgorICBpbXBsZW1lbnRhdGlvbikgZm9yIGl0cyBvd24gdXNlIChlLmcuIHR3byBzbG90cyBhcmUgcHJlLWFsbG9jYXRlZCBieSB0aGUgQworICBsaWJyYXJ5IHRvIHNwZWVkLXVwIHRoZSBBbmRyb2lkIE9wZW5HTCBzdWItc3lzdGVtKS4KKworICBOb3RlIHRoYXQgUG9zaXggbWFuZGF0ZXMgYSBtaW5pbXVtIG9mIDEyOCBzbG90cywgYnV0IHdlIGRvIG5vdCBjbGFpbSB0byBiZQorICBQb3NpeC1jb21wbGlhbnQuCisKKyAgRXhjZXB0IGZvciB0aGUgbWFpbiB0aHJlYWQsIHRoZSBUTFMgYXJlYSBpcyBzdG9yZWQgYXQgdGhlIHRvcCBvZiB0aGUgc3RhY2suCisgIFNlZSBjb21tZW50cyBpbiBiaW9uaWMvbGliYy9iaW9uaWMvcHRocmVhZC5jIGZvciBkZXRhaWxzLgorCisgIEF0IHRoZSBtb21lbnQsIHRocmVhZC1sb2NhbCBzdG9yYWdlIGRlZmluZWQgdGhyb3VnaCB0aGUgX190aHJlYWQgY29tcGlsZXIKKyAga2V5d29yZCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBCaW9uaWMgQyBsaWJyYXJ5IGFuZCBkeW5hbWljIGxpbmtlci4KKworCitNdWx0aS1jb3JlIHN1cHBvcnQKKworICBBdCB0aGUgbW9tZW50LCBCaW9uaWMgZG9lcyBub3QgcHJvdmlkZSBvciB1c2UgcmVhZC93cml0ZSBtZW1vcnkgYmFycmllcnMuCisgIFRoaXMgbWVhbnMgdGhhdCB1c2luZyBpdCBvbiBjZXJ0YWluIG11bHRpLWNvcmUgc3lzdGVtcyBtaWdodCBub3QgYmUKKyAgc3VwcG9ydGVkLCBkZXBlbmRpbmcgb24gaXRzIGV4YWN0IENQVSBhcmNoaXRlY3R1cmUuCisKKworQW5kcm9pZC1zcGVjaWZpYyBmZWF0dXJlczoKKworICBCaW9uaWMgcHJvdmlkZXMgYSBzbWFsbCBudW1iZXIgb2YgQW5kcm9pZC1zcGVjaWZpYyBmZWF0dXJlcyB0byBpdHMgY2xpZW50czoKKworICAtIGFjY2VzcyB0byBzeXN0ZW0gcHJvcGVydGllczoKKworICAgICAgIEFuZHJvaWQgcHJvdmlkZXMgYSBzaW1wbGUgc2hhcmVkIHZhbHVlL2tleSBzcGFjZSB0byBhbGwgcHJvY2Vzc2VzIG9uIHRoZQorICAgICAgIHN5c3RlbS4gSXQgc3RvcmVzIGEgbGliZXJhbCBudW1iZXIgb2YgJ3Byb3BlcnRpZXMnLCBlYWNoIG9mIHRoZW0gYmVpbmcgYQorICAgICAgIHNpbXBsZSBzaXplLWxpbWl0ZWQgc3RyaW5nIHRoYXQgY2FuIGJlIGFzc29jaWF0ZWQgdG8gYSBzaXplLWxpbWl0ZWQKKyAgICAgICBzdHJpbmcgdmFsdWUuCisKKyAgICAgICBUaGUgaGVhZGVyIDxzeXMvc3lzdGVtX3Byb3BlcnRpZXMuaD4gY2FuIGJlIHVzZWQgdG8gcmVhZCBzeXN0ZW0KKyAgICAgICBwcm9wZXJ0aWVzIGFuZCBhbHNvIGRlZmluZXMgdGhlIG1heGltdW0gc2l6ZSBvZiBrZXlzIGFuZCB2YWx1ZXMuCisKKyAgIC0gQW5kcm9pZC1zcGVjaWZpYyB1c2VyL2dyb3VwIG1hbmFnZW1lbnQ6CisKKyAgICAgICBUaGVyZSBpcyBubyAvZXRjL3Bhc3N3ZCBvciAvZXRjL2dyb3VwcyBpbiBBbmRyb2lkLiBCeSBkZXNpZ24sIGl0IGlzCisgICAgICAgbWVhbnQgdG8gYmUgdXNlZCBieSBhIHNpbmdsZSBoYW5kc2V0IHVzZXIuIE9uIHRoZSBvdGhlciBoYW5kLCBBbmRyb2lkCisgICAgICAgdXNlcyB0aGUgTGludXggdXNlci9ncm91cCBtYW5hZ2VtZW50IGZlYXR1cmVzIGV4dGVuc2l2ZWx5IHRvIHNlY3VyZQorICAgICAgIHByb2Nlc3MgcGVybWlzc2lvbnMsIGxpa2UgYWNjZXNzIHRvIHZhcmlvdXMgZmlsZXN5c3RlbSBkaXJlY3Rvcmllcy4KKworICAgICAgIEluIHRoZSBBbmRyb2lkIHNjaGVtZSwgZWFjaCBpbnN0YWxsZWQgYXBwbGljYXRpb24gZ2V0cyBpdHMgb3duCisgICAgICAgdWlkX3QvZ2lkX3Qgc3RhcnRpbmcgZnJvbSAxMDAwMDsgbG93ZXIgbnVtZXJpY2FsIGlkcyBhcmUgcmVzZXJ2ZWQgZm9yCisgICAgICAgc3lzdGVtIGRhZW1vbnMuCisKKyAgICAgICBnZXRwd25hbSgpIHJlY29nbml6ZXMgc29tZSBoYXJkLWNvZGVkIHN1YnN5c3RlbXMgbmFtZXMgKGUuZy4gInJhZGlvIikKKyAgICAgICBhbmQgd2lsbCB0cmFuc2xhdGUgdGhlbSB0byB0aGVpciBsb3ctdXNlci1pZCB2YWx1ZXMuIEl0IGFsc28gcmVjb2duaXplcworICAgICAgICJhcHBfMTIzNCIgYXMgdGhlIHN5bnRoZXRpYyBuYW1lIG9mIHRoZSBhcHBsaWNhdGlvbiB0aGF0IHdhcyBpbnN0YWxsZWQKKyAgICAgICB3aXRoIHVpZCAxMDAwMCArIDEyMzQsIHdoaWNoIGlzIDExMjM0LiBnZXRncm5hbSgpIHdvcmtzIHNpbWlsYXJseQorCisgICAgICAgZ2V0Z3JvdXBsaXN0KCkgd2lsbCBhbHdheXMgcmV0dXJuIGEgc2luZ2xlIGdyb3VwIGZvciBhbnkgdXNlciBuYW1lLAorICAgICAgIHdoaWNoIGlzIHRoZSBvbmUgcGFzc2VkIGFzIGFuIGlucHV0IHBhcmFtZXRlci4KKworICAgICAgIGdldGdyZ2lkKCkgd2lsbCBzaW1pbGFybHkgb25seSByZXR1cm4gYSBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucyBhCisgICAgICAgc2luZ2xlLWVsZW1lbnQgbWVtYmVycyBsaXN0LCBjb3JyZXNwb25kaW5nIHRvIHRoZSB1c2VyIHdpdGggdGhlIHNhbWUKKyAgICAgICBudW1lcmljYWwgdmFsdWUgdGhhbiB0aGUgZ3JvdXAuCisKKyAgICAgICBTZWUgYmlvbmljL2xpYmMvYmlvbmljL3N0dWJzLmMgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIC0gZ2V0c2VydmVudCgpCisKKyAgICAgICBUaGVyZSBpcyBubyAvZXRjL3NlcnZpY2VzIG9uIEFuZHJvaWQuIEluc3RlYWQgdGhlIEMgbGlicmFyeSBlbWJlZHMgYQorICAgICAgIGNvbnN0YW50IGxpc3Qgb2Ygc2VydmljZXMgaW4gaXRzIGV4ZWN1dGFibGUsIHdoaWNoIGlzIHBhcnNlZCBvbiBkZW1hbmQKKyAgICAgICBieSB0aGUgdmFyaW91cyBmdW5jdGlvbnMgdGhhdCBkZXBlbmQgb24gaXQuIFNlZQorICAgICAgIGJpb25pYy9saWJjL25ldGJzZC9uZXQvZ2V0c2VydmVudC5jIGFuZAorICAgICAgIGJpb25pYy9saWJjL25ldGJzZC9uZXQvc2VydmljZXMuaAorCisgICAgICAgVGhlIGxpc3Qgb2Ygc2VydmljZXMgZGVmaW5lZCBpbnRlcm5hbGx5IG1pZ2h0IGNoYW5nZSBsaWJlcmFsbHkgaW4gdGhlCisgICAgICAgZnV0dXJlLiBUaGlzIGZlYXR1cmUgaXMgbW9zdGx5IGhpc3RvcmljYWxseSBhbmQgaXMgdmVyeSByYXJlbHkgdXNlZC4KKworICAgICAgIFRoZSBnZXRzZXJ2ZW50KCkgcmV0dXJucyB0aHJlYWQtbG9jYWwgZGF0YS4gZ2V0c2VydmJ5cG9ydCgpIGFuZAorICAgICAgIGdldHNlcnZieW5hbWUoKSBhcmUgYWxzbyBpbXBsZW1lbnRlZCBpbiBhIHNpbWlsYXIgZmFzaGlvbi4KKworICAgICAtIGdldHByb3RvZW50KCkKKworICAgICAgIFRoZXJlIGlzIG5vIC9ldGMvcHJvdG9jb2wgb24gQW5kcm9pZC4gQmlvbmljIGRvZXMgbm90IGN1cnJlbnRseQorICAgICAgIGltcGxlbWVudCBnZXRwcm90b2VudCgpIGFuZCByZWxhdGVkIGZ1bmN0aW9ucy4gSWYgYWRkZWQsIGl0IHdpbGwKKyAgICAgICBsaWtlbHkgYmUgZG9uZSBpbiBhIHdheSBzaW1pbGFyIHRvIGdldHNlcnZlbnQoKQorCitETlMgcmVzb2x2ZXI6CisKKyAgQmlvbmljIHVzZXMgYSBOZXRCU0QtZGVyaXZlZCByZXNvbHZlciBsaWJyYXJ5IHdoaWNoIGhhcyBiZWVuIG1vZGlmaWVkIGluCisgIHRoZSBmb2xsb3dpbmcgd2F5czoKKworICAgICAtIGRvbid0IGltcGxlbWVudCB0aGUgbmFtZS1zZXJ2ZXItc3dpdGNoIGZlYXR1cmUgKGEuay5hLiA8bnNzd2l0Y2guaD4pCisKKyAgICAgLSByZWFkIC9zeXN0ZW0vZXRjL3Jlc29sdi5jb25mIGluc3RlYWQgb2YgL2V0Yy9yZXNvbHYuY29uZgorCisgICAgIC0gcmVhZCB0aGUgbGlzdCBvZiBzZXJ2ZXJzIGZyb20gc3lzdGVtIHByb3BlcnRpZXMuIHRoZSBjb2RlIGxvb2tzIGZvcgorICAgICAgICduZXQuZG5zMScsICduZXQuZG5zMicsIGV0Yy4uIEVhY2ggcHJvcGVydHkgc2hvdWxkIGNvbnRhaW4gdGhlIElQCisgICAgICAgYWRkcmVzcyBvZiBhIEROUyBzZXJ2ZXIuCisKKyAgICAgICB0aGVzZSBwcm9wZXJ0aWVzIGFyZSBzZXQvbW9kaWZpZWQgYnkgb3RoZXIgcGFydHMgb2YgdGhlIEFuZHJvaWQgc3lzdGVtCisgICAgICAgKGUuZy4gdGhlIGRoY3BkIGRhZW1vbikuCisKKyAgICAgICB0aGUgaW1wbGVtZW50YXRpb24gYWxzbyBzdXBwb3J0cyBwZXItcHJvY2VzcyBETlMgc2VydmVyIGxpc3QsIHVzaW5nIHRoZQorICAgICAgIHByb3BlcnRpZXMgJ25ldC5kbnMxLjxwaWQ+JywgJ25ldC5kbnMyLjxwaWQ+JywgZXRjLi4uIFdoZXJlIDxwaWQ+IHN0YW5kcworICAgICAgIGZvciB0aGUgbnVtZXJpY2FsIElEIG9mIHRoZSBjdXJyZW50IHByb2Nlc3MuCisKKyAgICAgLSB3aGVuIHBlcmZvcm1pbmcgYSBxdWVyeSwgdXNlIGEgcHJvcGVybHkgcmFuZG9taXplZCBRdWVyeSBJRCAoaW5zdGVhZCBvZgorICAgICAgIGEgaW5jcmVtZW50ZWQgb25lKSwgZm9yIGluY3JlYXNlZCBzZWN1cml0eS4KKworICAgICAtIHdoZW4gcGVyZm9ybWluZyBhIHF1ZXJ5LCBiaW5kIHRoZSBsb2NhbCBjbGllbnQgc29ja2V0IHRvIGEgcmFuZG9tIHBvcnQKKyAgICAgICBmb3IgaW5jcmVhc2VkIHNlY3VyaXR5LgorCisgICAgIC0gZ2V0IHJpZCBvZiAqbWFueSogdW5mb3J0dW5hdGUgdGhyZWFkLXNhZmV0eSBpc3N1ZXMgaW4gdGhlIG9yaWdpbmFsIGNvZGUKKworICBCaW9uaWMgZG9lcyAqbm90KiBleHBvc2UgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiBpdHMgRE5TIHJlc29sdmVyOyB0aGUKKyAgY29udGVudCBvZiA8YXJwYS9uYW1lc2VyLmg+IGlzIGludGVudGlvbmFsbHkgYmxhbmsuIFRoZSByZXNvbHZlcgorICBpbXBsZW1lbnRhdGlvbiBtaWdodCBjaGFuZ2UgY29tcGxldGVseSBpbiB0aGUgZnV0dXJlLgorCisKK1BUaHJlYWQgUmVhbC1UaW1lIFRpbWVyczoKKworICB0aW1lcl9jcmVhdGUoKSwgdGltZXJfZ2V0dGltZSgpLCB0aW1lcl9zZXR0aW1lKCkgYW5kIHRpbWVyX2dldG92ZXJydW4oKSBhcmUKKyAgc3VwcG9ydGVkLgorCisgIEJpb25pYyBhbHNvIG5vdyBzdXBwb3J0cyBTSUdFVl9USFJFQUQgcmVhbC10aW1lIHRpbWVycyAoc2VlIHRpbWVyX2NyZWF0ZSgpKS4KKyAgVGhlIGltcGxlbWVudGF0aW9uIHNpbXBseSB1c2VzIGEgc2luZ2xlIHRocmVhZCBwZXIgdGltZXIsIHVubGlrZSBHTGliYyB3aGljaAorICB1c2VzIGNvbXBsZXggaGV1cmlzdGljcyB0byB0cnkgdG8gdXNlIHRoZSBsZXNzIHRocmVhZHMgcG9zc2libGUgd2hlbiBzZXZlcmFsCisgIHRpbWVycyB3aXRoIGNvbXBhdGlibGUgcHJvcGVydGllcyBhcmUgdXNlZC4KKworICBUaGlzIG1lYW5zIHRoYXQgaWYgeW91ciBjb2RlIHVzZXMgYSBsb3Qgb2YgU0lHRVZfVEhSRUFEIHRpbWVycywgeW91ciBwcm9ncmFtCisgIG1heSBjb25zdW1lIGEgbG90IG9mIG1lbW9yeS4gSG93ZXZlciwgaWYgeW91ciBwcm9ncmFtIG5lZWRzIG1hbnkgb2YgdGhlc2UKKyAgdGltZXJzLCBpdCdkIGJldHRlciBoYW5kbGUgdGltZW91dCBldmVudHMgZGlyZWN0bHkgaW5zdGVhZC4KKworICBPdGhlciB0aW1lcnMgKGUuZy4gU0lHRVZfU0lHTkFMKSBhcmUgaGFuZGxlZCBieSB0aGUga2VybmVsIGFuZCB1c2UgbXVjaCBsZXNzCisgIHN5c3RlbSByZXNvdXJjZXMuCisKKworQmluYXJ5IENvbXBhdGliaWxpdHk6CisKKyAgQmlvbmljIGlzICpub3QqIGluIGFueSB3YXkgYmluYXJ5LWNvbXBhdGlibGUgd2l0aCB0aGUgR05VIEMgTGlicmFyeSwgdWNMaWJjCisgIG9yIGFueSBrbm93biBMaW51eCBDIGxpYnJhcnkuIFRoaXMgbWVhbnMgc2V2ZXJhbCB0aGluZ3M6CisKKyAgLSBZb3UgY2Fubm90IGV4cGVjdCB0byBidWlsZCBzb21ldGhpbmcgYWdhaW5zdCB0aGUgR05VIEMgTGlicmFyeSBoZWFkZXJzIGFuZAorICAgIGhhdmUgaXQgZHluYW1pY2FsbHkgbGluayBwcm9wZXJseSB0byBCaW9uaWMgbGF0ZXIuCisKKyAgLSBZb3Ugc2hvdWxkICpyZWFsbHkqIHVzZSB0aGUgQW5kcm9pZCB0b29sY2hhaW4gdG8gYnVpbGQgeW91ciBwcm9ncmFtIGFnYWluc3QKKyAgICBCaW9uaWMuIFRoZSB0b29sY2hhaW4gZGVhbHMgd2l0aCBtYW55IGltcG9ydGFudCBkZXRhaWxzIHRoYXQgYXJlIGNydWNpYWwKKyAgICB0byBnZXQgc29tZXRoaW5nIHdvcmtpbmcgcHJvcGVybHkuCisKKyAgRmFpbHVyZSB0byBkbyBzbyB3aWxsIHVzdWFsbHkgcmVzdWx0IGluIHRoZSBpbmFiaWxpdHkgdG8gcnVuIG9yIGxpbmsgeW91cgorICBwcm9ncmFtLCBvciBldmVuIHJ1bnRpbWUgY3Jhc2hlcy4gU2V2ZXJhbCByYW5kb20gd2ViIHBhZ2VzIG9uIHRoZSBJbnRlcm5ldAorICBkZXNjcmliZSBob3cgeW91IGNhbiBzdWNjZXNmdWxseSB3cml0ZSBhICJoZWxsby13b3JsZCIgcHJvZ3JhbSB3aXRoIHRoZQorICBBUk0gR05VIHRvb2xjaGFpbi4gVGhlc2UgZXhhbXBsZXMgdXN1YWxseSB3b3JrIGJ5IGNoYW5jZSwgaWYgYW55dGhpbmcgZWxzZSwKKyAgYW5kIHlvdSBzaG91bGQgbm90IGZvbGxvdyB0aGVzZSBpbnN0cnVjdGlvbnMgdW5sZXNzIHlvdSB3YW50IHRvIHdhc3RlIGEgbG90CisgIG9mIHlvdXIgdGltZSBpbiB0aGUgcHJvY2Vzcy4KKworICBOb3RlIGhvd2V2ZXIgdGhhdCB5b3UgKmNhbiogZ2VuZXJhdGUgYSBiaW5hcnkgdGhhdCBpcyBidWlsdCBhZ2FpbnN0IHRoZQorICBHTlUgQyBMaWJyYXJ5IGhlYWRlcnMgYW5kIHRoZW4gc3RhdGljYWxseSBsaW5rZWQgdG8gaXQuIFRoZSBjb3JyZXNwb25kaW5nCisgIGV4ZWN1dGFibGUgc2hvdWxkIGJlIGFibGUgdG8gcnVuIChpZiBpdCBkb2Vzbid0IHVzZSBkbG9wZW4oKS9kbHN5bSgpKQorCisKK0R5bmFtaWMgTGlua2VyOgorCisgIEJpb25pYyBjb21lcyB3aXRoIGl0cyBvd24gZHluYW1pYyBsaW5rZXIgKGp1c3QgbGlrZSBsZC5zbyBvbiBMaW51eCByZWFsbHkKKyAgY29tZXMgZnJvbSBHTGliYykuIFRoaXMgbGlua2VyIGRvZXMgbm90IHN1cHBvcnQgYWxsIHRoZSByZWxvY2F0aW9ucworICBnZW5lcmF0ZWQgYnkgb3RoZXIgR0NDIEFSTSB0b29sY2hhaW5zLgorCisKK0MrKyBFeGNlcHRpb25zIFN1cHBvcnQ6CisKKyAgQXQgdGhlIG1vbWVudCwgQmlvbmljIGRvZXNuJ3Qgc3VwcG9ydCBDKysgZXhjZXB0aW9ucywgd2hhdCB0aGlzIHJlYWxseSBtZWFucworICBpcyB0aGUgZm9sbG93aW5nOgorCisgICAgLSBJZiBwdGhyZWFkX29uY2UoKSBpcyBjYWxsZWQgd2l0aCBhIEMrKyBjYWxsYmFjayB0aGF0IHRocm93cyBhbiBleGNlcHRpb24sCisgICAgICB0aGVuIHRoZSBDIGxpYnJhcnkgd2lsbCBrZWVwIHRoZSBjb3JyZXNwb25kaW5nIHB0aHJlYWRfb25jZV90IG11dGV4CisgICAgICBsb2NrZWQuIEFueSBmdXJ0aGVyIGNhbGwgdG8gcHRocmVhZF9vbmNlKCkgd2lsbCByZXN1bHQgaW4gYSBkZWFkbG9jay4KKworICAgICAgQSBwcm9wZXIgaW1wbGVtZW50YXRpb24gc2hvdWxkIGJlIGFibGUgdG8gcmVnaXN0ZXIgYSBDKysgZXhjZXB0aW9uCisgICAgICBjbGVhbnVwIGhhbmRsZXIgYmVmb3JlIHRoZSBjYWxsYmFjayB0byBwcm9wZXJseSB1bmxvY2sgdGhlCisgICAgICBwdGhyZWFkX29uY2VfdC4gVW5mb3J0dW5hdGVseSB0aGlzIHJlcXVpcmVzIHRyaWNreSBhc3NlbWJseSBjb2RlIHRoYXQKKyAgICAgIGlzIGhpZ2hseSBkZXBlbmRlbnQgb24gdGhlIGNvbXBpbGVyLgorCisgICAgICBUaGlzIGZlYXR1cmUgaXMgbm90IHBsYW5uZWQgdG8gYmUgc3VwcG9ydGVkIGFueXRpbWUgc29vbi4KKworICAgIC0gVGhlIHNhbWUgcHJvYmxlbSBtYXkgYXJpc2UgaWYgeW91IHRocm93IGFuIGV4Y2VwdGlvbiB3aXRoaW4gYSBjYWxsYmFjaworICAgICAgY2FsbGVkIGZyb20gdGhlIEMgbGlicmFyeS4gRm9ydHVuYXRlbHksIHRoZXNlIGNhc2VzIGFyZSB2ZXJ5IHJhcmUgaW4gdGhlCisgICAgICByZWFsLXdvcmxkLCBidXQgYW55IGNhbGxiYWNrIHlvdSBwcm92aWRlIHRvIHRoZSBDIGxpYnJhcnkgc2hvdWxkICpub3QqCisgICAgICB0aHJvdyBhbiBleGNlcHRpb24uCisKKyAgICAtIEJpb25pYyBsYWNrcyBhIGZldyBzdXBwb3J0IGZ1bmN0aW9ucyB0byBoYXZlIGV4Y2VwdGlvbiBzdXBwb3J0IHdvcmsKKyAgICAgIHByb3Blcmx5LgorCitTeXN0ZW0gViBJUENzOgorCisgIEJpb25pYyBpbnRlbnRpb25hbGx5IGRvZXMgbm90IHByb3ZpZGUgc3VwcG9ydCBmb3IgU3lzdGVtLVYgSVBDcyBtZWNoYW5pc21zLAorICBsaWtlIHRoZSBvbmVzIHByb3ZpZGVkIGJ5IHNlbWdldCgpLCBzaG1nZXQoKSwgbXNnZ2V0KCkuIFRoZSByZWFzb24gZm9yIHRoaXMKKyAgaXMgdG8gYXZvaWQgZGVuaWFsLW9mLXNlcnZpY2UuIEZvciBhIGRldGFpbGVkIHJhdGlvbmFsZSBhYm91dCB0aGlzLCBwbGVhc2UKKyAgcmVhZCB0aGUgZmlsZSBkb2NzL1NZU1YtSVBDUy5UWFQuCisKK0luY2x1ZGUgUGF0aHM6CisKKyAgVGhlIEFuZHJvaWQgYnVpbGQgc3lzdGVtIHNob3VsZCBhdXRvbWF0aWNhbGx5IHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBpbmNsdWRlCisgIHBhdGhzIHJlcXVpcmVkIHRvIGJ1aWxkIGFnYWluc3QgdGhlIEMgbGlicmFyeSBoZWFkZXJzLiBIb3dldmVyLCBpZiB5b3Ugd2FudAorICB0byBkbyB0aGF0IHlvdXJzZWxmLCB5b3Ugd2lsbCBuZWVkIHRvIGFkZDoKKworICAgICAgbGliYy9hcmNoLSRBUkNIL2luY2x1ZGUKKyAgICAgIGxpYmMvaW5jbHVkZQorICAgICAgbGliYy9rZXJuZWwvY29tbW9uCisgICAgICBsaWJjL2tlcm5lbC9hcmNoLSRBUkNICisKKyAgdG8geW91ciBDIGluY2x1ZGUgcGF0aC4KZGlmZiAtLWdpdCBhL2xpYmMvZG9jcy9TWVNWLUlQQy5UWFQgYi9saWJjL2RvY3MvU1lTVi1JUEMuVFhUCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhM2VlZjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2RvY3MvU1lTVi1JUEMuVFhUCkBAIC0wLDAgKzEsMTAzIEBACitBbmRyb2lkIGRvZXMgbm90IHN1cHBvcnQgU3lzdGVtIFYgSVBDcywgaS5lLiB0aGUgZmFjaWxpdGllcyBwcm92aWRlZCBieSB0aGUKK2ZvbGxvd2luZyBzdGFuZGFyZCBQb3NpeCBoZWFkZXJzOgorCisgIDxzeXMvc2VtLmg+ICAgLyogU3lzViBzZW1hcGhvcmVzICovCisgIDxzeXMvc2htLmg+ICAgLyogU3lzViBzaGFyZWQgbWVtb3J5IHNlZ21lbnRzICovCisgIDxzeXMvbXNnLmg+ICAgLyogU3lzViBtZXNzYWdlIHF1ZXVlcyAqLworICA8c3lzL2lwYy5oPiAgIC8qIEdlbmVyYWwgSVBDIGRlZmluaXRpb25zICovCisKK1RoZSByZWFzb24gZm9yIHRoaXMgaXMgZHVlIHRvIHRoZSBmYWN0IHRoYXQsIGJ5IGRlc2lnbiwgdGhleSBsZWFkIHRvIGdsb2JhbAora2VybmVsIHJlc291cmNlIGxlYWthZ2UuCisKK0ZvciBleGFtcGxlLCB0aGVyZSBpcyBubyB3YXkgdG8gYXV0b21hdGljYWxseSByZWxlYXNlIGEgU3lzViBzZW1hcGhvcmUKK2FsbG9jYXRlZCBpbiB0aGUga2VybmVsIHdoZW46CisKKy0gYSBidWdneSBvciBtYWxpY2lvdXMgcHJvY2VzcyBleGl0cworLSBhIG5vbi1idWdneSBhbmQgbm9uLW1hbGljaW91cyBwcm9jZXNzIGNyYXNoZXMgb3IgaXMgZXhwbGljaXRlbHkga2lsbGVkLgorCitLaWxsaW5nIHByb2Nlc3NlcyBhdXRvbWF0aWNhbGx5IHRvIG1ha2Ugcm9vbSBmb3IgbmV3IG9uZXMgaXMgYW4KK2ltcG9ydGFudCBwYXJ0IG9mIEFuZHJvaWQncyBhcHBsaWNhdGlvbiBsaWZlY3ljbGUgaW1wbGVtZW50YXRpb24uIFRoaXMgbWVhbnMKK3RoYXQsIGV2ZW4gYXNzdW1pbmcgb25seSBub24tYnVnZ3kgYW5kIG5vbi1tYWxpY2lvdXMgY29kZSwgaXQgaXMgdmVyeSBsaWtlbHkKK3RoYXQgb3ZlciB0aW1lLCB0aGUga2VybmVsIGdsb2JhbCB0YWJsZXMgdXNlZCB0byBpbXBsZW1lbnQgU3lzViBJUENzIHdpbGwgZmlsbAordXAuCisKK0F0IHRoYXQgcG9pbnQsIHN0cmFuZ2UgZmFpbHVyZXMgYXJlIGxpa2VseSB0byBvY2N1ciBhbmQgcHJldmVudCBwcm9ncmFtcyB0aGF0Cit1c2UgdGhlbSB0byBydW4gcHJvcGVybHkgdW50aWwgdGhlIG5leHQgcmVib290IG9mIHRoZSBzeXN0ZW0uCisKK0FuZCB3ZSBjYW4ndCBpZ25vcmUgcG90ZW50aWFsIG1hbGljaW91cyBhcHBsaWNhdGlvbnMuIEFzIGEgcHJvb2Ygb2YgY29uY2VwdAoraGVyZSBpcyBhIHNpbXBsZSBleHBsb2l0IHRoYXQgeW91IGNhbiBydW4gb24gYSBzdGFuZGFyZCBMaW51eCBib3ggdG9kYXk6CisKKy0tLS0tLS0tLS0tLS0tLSBjdXQgaGVyZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyNpbmNsdWRlIDxzeXMvc2VtLmg+CisjaW5jbHVkZSA8c3lzL3dhaXQuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNkZWZpbmUgIE5VTV9TRU1BUEhPUkVTICAzMgorI2RlZmluZSAgTUFYX0ZBSUxTICAgICAgIDEwCisKK2ludCAgbWFpbih2b2lkKQoreworICAgIGludCAgIGNvdW50ZXIgPSAwOworICAgIGludCAgIGZhaWxzICAgPSAwOworCisgICAgaWYgKGNvdW50ZXIgPT0gSVBDX1BSSVZBVEUpCisgICAgICAgIGNvdW50ZXIrKzsKKworICAgIHByaW50ZiggIiVkIChOVU1fU0VNQVBIT1JFUz0lZClcbiIsIGNvdW50ZXIsIE5VTV9TRU1BUEhPUkVTKTsKKworICAgIGZvciAoOzspIHsKKyAgICAgICAgaW50ICByZXQgPSBmb3JrKCk7CisgICAgICAgIGludCAgc3RhdHVzOworCisgICAgICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgICAgICBwZXJyb3IoImZvcms6Iik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAocmV0ID09IDApIHsKKyAgICAgICAgICAgIC8qIGluIHRoZSBjaGlsZCAqLworICAgICAgICAgICAgcmV0ID0gc2VtZ2V0KCAoa2V5X3QpY291bnRlciwgTlVNX1NFTUFQSE9SRVMsIElQQ19DUkVBVCApOworICAgICAgICAgICAgaWYgKHJldCA8IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJybm87CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8qIGluIHRoZSBwYXJlbnQgKi8KKyAgICAgICAgICAgIHJldCA9IHdhaXQoJnN0YXR1cyk7CisgICAgICAgICAgICBpZiAocmV0IDwgMCkgeworICAgICAgICAgICAgICAgIHBlcnJvcigid2FpdHBpZDoiKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gMCkgeworICAgICAgICAgICAgICAgIHN0YXR1cyA9IFdFWElUU1RBVFVTKHN0YXR1cyk7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJjaGlsZCAlZCBGQUlMIGF0IGNvdW50ZXI9JWQ6ICVkXG4iLCByZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ZXIsIHN0YXR1cyk7CisgICAgICAgICAgICAgICAgaWYgKCsrZmFpbHMgPj0gTUFYX0ZBSUxTKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGNvdW50ZXIrKzsKKyAgICAgICAgaWYgKChjb3VudGVyICUgMTAwMCkgPT0gMCkgeworICAgICAgICAgICAgcHJpbnRmKCIlZFxuIiwgY291bnRlcik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvdW50ZXIgPT0gSVBDX1BSSVZBVEUpCisgICAgICAgICAgICBjb3VudGVyKys7CisgICAgfQorICAgIHJldHVybiAwOworfQorLS0tLS0tLS0tLS0tLS0tIGN1dCBoZXJlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiB5b3UgcnVuIGl0IG9uIGEgdHlwaWNhbCBMaW51eCBkaXN0cmlidXRpb24gdG9kYXksIHlvdSdsbCBkaXNjb3ZlciB0aGF0IGl0Cit3aWxsIHF1aWNrbHkgZmlsbCB1cCB0aGUga2VybmVsJ3MgdGFibGUgb2YgdW5pcXVlIGtleV90IHZhbHVlcywgYW5kIHRoYXQKK3N0cmFuZ2UgdGhpbmdzIHdpbGwgaGFwcGVuIGluIHNvbWUgcGFydHMgb2YgdGhlIHN5c3RlbSwgYnV0IG5vdCBhbGwuCisKKyhZb3UgY2FuIHVzZSB0aGUgImlwY3MgLXUiIGNvbW1hbmQgdG8gZ2V0IGEgc3VtbWFyeSBkZXNjcmliaW5nIHRoZSBrZXJuZWwKKyB0YWJsZXMgYW5kIHRoZWlyIGFsbG9jYXRpb25zKQorCitGb3IgZXhhbXBsZSwgaW4gb3VyIGV4cGVyaWVuY2UsIGFueXRoaW5nIHByb2dyYW0gbGF1bmNoZWQgYWZ0ZXIgdGhhdCB0aGF0CitjYWxscyBzdHJlcnJvcigpIHdpbGwgc2ltcGx5IGNyYXNoLiBUaGUgVVNCIHN1Yi1zeXN0ZW0gc3RhcnRzIHNwb3V0dGluZyB3ZWlyZAorZXJyb3JzIHRvIHRoZSBzeXN0ZW0gY29uc29sZSwgZXRjLi4uCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvYWxsb2NhLmggYi9saWJjL2luY2x1ZGUvYWxsb2NhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM1MGZjMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9hbGxvY2EuaApAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9BTExPQ0FfSAorI2RlZmluZSBfQUxMT0NBX0gKKworI2RlZmluZSBhbGxvY2Eoc2l6ZSkgICBfX2J1aWx0aW5fYWxsb2NhKHNpemUpCisKKyNlbmRpZiAvKiBfQUxMT0NBX0ggKi8KKwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL2FycGEvaW5ldC5oIGIvbGliYy9pbmNsdWRlL2FycGEvaW5ldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlYmI4NzIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvYXJwYS9pbmV0LmgKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfQVJQQV9JTkVUX0hfCisjZGVmaW5lIF9BUlBBX0lORVRfSF8KKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luNi5oPgorCitfX0JFR0lOX0RFQ0xTCisKK3R5cGVkZWYgdWludDMyX3QgaW5fYWRkcl90OworCitleHRlcm4gdWludDMyX3QgICAgICBpbmV0X2FkZHIoY29uc3QgY2hhciAqKTsKKworZXh0ZXJuIGludCAgICAgICAgICAgaW5ldF9hdG9uKGNvbnN0IGNoYXIgKiwgc3RydWN0IGluX2FkZHIgKik7CitleHRlcm4gY2hhciogICAgICAgICBpbmV0X250b2Eoc3RydWN0IGluX2FkZHIpOworCitleHRlcm4gaW50ICAgICAgICAgICBpbmV0X3B0b24oaW50LCBjb25zdCBjaGFyICosIHZvaWQgKik7CitleHRlcm4gY29uc3QgY2hhciogICBpbmV0X250b3AoaW50LCBjb25zdCB2b2lkICosIGNoYXIgKiwgc2l6ZV90KTsKKworZXh0ZXJuIHVuc2lnbmVkIGludCAgaW5ldF9uc2FwX2FkZHIoY29uc3QgY2hhciAqLCB1bnNpZ25lZCBjaGFyICosIGludCk7CitleHRlcm4gY2hhciogICAgICAgICBpbmV0X25zYXBfbnRvYShpbnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgY2hhciAqKTsKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9BUlBBX0lORVRfSF8gKi8KKworCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvYXJwYS9uYW1lc2VyLmggYi9saWJjL2luY2x1ZGUvYXJwYS9uYW1lc2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI4ZWFkYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9hcnBhL25hbWVzZXIuaApAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9hcnBhX25hbWVzZXJfaAorI2RlZmluZSBfYXJwYV9uYW1lc2VyX2gKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorCisvKiB0aGlzIGhlYWRlciBpbnRlbnRpb25hbGx5IGJsYW5rCisgKgorICogdGhlIGRlZmluaXRpb25zIG5vcm1hbGx5IGZvdW5kIGluIDxhcnBhL25hbWVzZXIuaD4gYXJlCisgKiByZWFsbHkgYSBidW5jaCBvZiByZXNvbHZlcidzIGludGVybmFsIGRlY2xhcmF0aW9ucyB0aGF0CisgKiBzaG91bGQgbm90IGJlIGV4cG9zZWQgdG8gY2xpZW50IGNvZGUgaW4gYW55IHdheQorICovCisKKyNlbmRpZiAvKiBfYXJwYV9uYW1lc2VyX2ggKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9hc3NlcnQuaCBiL2xpYmMvaW5jbHVkZS9hc3NlcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjQ3MGY1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL2Fzc2VydC5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCSRPcGVuQlNEOiBhc3NlcnQuaCx2IDEuMTIgMjAwNi8wMS8zMSAxMDo1Mzo1MSBoc2hvZXhlciBFeHAgJAkqLworLyoJJE5ldEJTRDogYXNzZXJ0LmgsdiAxLjYgMTk5NC8xMC8yNiAwMDo1NTo0NCBjZ2QgRXhwICQJKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTIsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogKGMpIFVOSVggU3lzdGVtIExhYm9yYXRvcmllcywgSW5jLgorICogQWxsIG9yIHNvbWUgcG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBkZXJpdmVkIGZyb20gbWF0ZXJpYWwgbGljZW5zZWQKKyAqIHRvIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEgYnkgQW1lcmljYW4gVGVsZXBob25lIGFuZCBUZWxlZ3JhcGgKKyAqIENvLiBvciBVbml4IFN5c3RlbSBMYWJvcmF0b3JpZXMsIEluYy4gYW5kIGFyZSByZXByb2R1Y2VkIGhlcmVpbiB3aXRoCisgKiB0aGUgcGVybWlzc2lvbiBvZiBVTklYIFN5c3RlbSBMYWJvcmF0b3JpZXMsIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICoJQCgjKWFzc2VydC5oCTguMiAoQmVya2VsZXkpIDEvMjEvOTQKKyAqLworCisvKgorICogVW5saWtlIG90aGVyIEFOU0kgaGVhZGVyIGZpbGVzLCA8YXNzZXJ0Lmg+IG1heSB1c2VmdWxseSBiZSBpbmNsdWRlZAorICogbXVsdGlwbGUgdGltZXMsIHdpdGggYW5kIHdpdGhvdXQgTkRFQlVHIGRlZmluZWQuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorCisjdW5kZWYgYXNzZXJ0CisjdW5kZWYgX2Fzc2VydAorCisjaWZkZWYgTkRFQlVHCisjIGRlZmluZQlhc3NlcnQoZSkJKCh2b2lkKTApCisjIGRlZmluZQlfYXNzZXJ0KGUpCSgodm9pZCkwKQorI2Vsc2UKKyMgZGVmaW5lCV9hc3NlcnQoZSkJYXNzZXJ0KGUpCisjIGlmIF9fSVNPX0NfVklTSUJMRSA+PSAxOTk5CisjICBkZWZpbmUJYXNzZXJ0KGUpCSgoZSkgPyAodm9pZCkwIDogX19hc3NlcnQyKF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18sICNlKSkKKyMgZWxzZQorIyAgZGVmaW5lCWFzc2VydChlKQkoKGUpID8gKHZvaWQpMCA6IF9fYXNzZXJ0KF9fRklMRV9fLCBfX0xJTkVfXywgI2UpKQorIyBlbmRpZgorI2VuZGlmCisKK19fQkVHSU5fREVDTFMKK19fZGVhZCB2b2lkIF9fYXNzZXJ0KGNvbnN0IGNoYXIgKiwgaW50LCBjb25zdCBjaGFyICopOworX19kZWFkIHZvaWQgX19hc3NlcnQyKGNvbnN0IGNoYXIgKiwgaW50LCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CitfX0VORF9ERUNMUwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL2J5dGVzd2FwLmggYi9saWJjL2luY2x1ZGUvYnl0ZXN3YXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmQyYWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL2J5dGVzd2FwLmgKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfQllURVNXQVBfSF8KKyNkZWZpbmUgX0JZVEVTV0FQX0hfCisKKyNpbmNsdWRlIDxzeXMvZW5kaWFuLmg+CisKKyNkZWZpbmUgIGJzd2FwXzE2KHgpICAgc3dhcDE2KHgpCisjZGVmaW5lICBic3dhcF8zMih4KSAgIHN3YXAzMih4KQorI2RlZmluZSAgYnN3YXBfNjQoeCkgICBzd2FwNjQoeCkKKworI2VuZGlmIC8qIF9CWVRFU1dBUF9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL2N0eXBlLmggYi9saWJjL2luY2x1ZGUvY3R5cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWY5ZmY0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL2N0eXBlLmgKQEAgLTAsMCArMSwyMDMgQEAKKy8qCSRPcGVuQlNEOiBjdHlwZS5oLHYgMS4xOSAyMDA1LzEyLzEzIDAwOjM1OjIyIG1pbGxlcnQgRXhwICQJKi8KKy8qCSROZXRCU0Q6IGN0eXBlLmgsdiAxLjE0IDE5OTQvMTAvMjYgMDA6NTU6NDcgY2dkIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODkgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAoYykgVU5JWCBTeXN0ZW0gTGFib3JhdG9yaWVzLCBJbmMuCisgKiBBbGwgb3Igc29tZSBwb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSBtYXRlcmlhbCBsaWNlbnNlZAorICogdG8gdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYSBieSBBbWVyaWNhbiBUZWxlcGhvbmUgYW5kIFRlbGVncmFwaAorICogQ28uIG9yIFVuaXggU3lzdGVtIExhYm9yYXRvcmllcywgSW5jLiBhbmQgYXJlIHJlcHJvZHVjZWQgaGVyZWluIHdpdGgKKyAqIHRoZSBwZXJtaXNzaW9uIG9mIFVOSVggU3lzdGVtIExhYm9yYXRvcmllcywgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglAKCMpY3R5cGUuaAk1LjMgKEJlcmtlbGV5KSA0LzMvOTEKKyAqLworCisjaWZuZGVmIF9DVFlQRV9IXworI2RlZmluZSBfQ1RZUEVfSF8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorCisjZGVmaW5lCV9VCTB4MDEKKyNkZWZpbmUJX0wJMHgwMgorI2RlZmluZQlfTgkweDA0CisjZGVmaW5lCV9TCTB4MDgKKyNkZWZpbmUJX1AJMHgxMAorI2RlZmluZQlfQwkweDIwCisjZGVmaW5lCV9YCTB4NDAKKyNkZWZpbmUJX0IJMHg4MAorCitfX0JFR0lOX0RFQ0xTCisKK2V4dGVybiBjb25zdCBjaGFyCSpfY3R5cGVfOworZXh0ZXJuIGNvbnN0IHNob3J0CSpfdG9sb3dlcl90YWJfOworZXh0ZXJuIGNvbnN0IHNob3J0CSpfdG91cHBlcl90YWJfOworCisvKiBleHRlcm4gX19pbmxpbmUgaXMgYSBHTlUgQyBleHRlbnNpb24gKi8KKyNpZmRlZiBfX0dOVUNfXworI2RlZmluZQlfX0NUWVBFX0lOTElORQlleHRlcm4gX19pbmxpbmUKKyNlbHNlCisjZGVmaW5lCV9fQ1RZUEVfSU5MSU5FCXN0YXRpYyBfX2lubGluZQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKSB8fCBkZWZpbmVkKF9BTlNJX0xJQlJBUlkpIHx8IGRlZmluZWQobGludCkKK2ludAlpc2FsbnVtKGludCk7CitpbnQJaXNhbHBoYShpbnQpOworaW50CWlzY250cmwoaW50KTsKK2ludAlpc2RpZ2l0KGludCk7CitpbnQJaXNncmFwaChpbnQpOworaW50CWlzbG93ZXIoaW50KTsKK2ludAlpc3ByaW50KGludCk7CitpbnQJaXNwdW5jdChpbnQpOworaW50CWlzc3BhY2UoaW50KTsKK2ludAlpc3VwcGVyKGludCk7CitpbnQJaXN4ZGlnaXQoaW50KTsKK2ludAl0b2xvd2VyKGludCk7CitpbnQJdG91cHBlcihpbnQpOworCisjaWYgX19CU0RfVklTSUJMRSB8fCBfX0lTT19DX1ZJU0lCTEUgPj0gMTk5OSB8fCBfX1BPU0lYX1ZJU0lCTEUgPiAyMDAxMTIgXAorICAgIHx8IF9fWFBHX1ZJU0lCTEUgPiA2MDAKK2ludAlpc2JsYW5rKGludCk7CisjZW5kaWYKKworI2lmIF9fQlNEX1ZJU0lCTEUgfHwgX19YUEdfVklTSUJMRQoraW50CWlzYXNjaWkoaW50KTsKK2ludAl0b2FzY2lpKGludCk7CitpbnQJX3RvbG93ZXIoaW50KTsKK2ludAlfdG91cHBlcihpbnQpOworI2VuZGlmIC8qIF9fQlNEX1ZJU0lCTEUgfHwgX19YUEdfVklTSUJMRSAqLworCisjZW5kaWYgLyogX19HTlVDX18gfHwgX0FOU0lfTElCUkFSWSB8fCBsaW50ICovCisKKyNpZiBkZWZpbmVkKE5ERUJVRykKKworX19DVFlQRV9JTkxJTkUgaW50IGlzYWxudW0oaW50IGMpCit7CisJcmV0dXJuIChjID09IC0xID8gMCA6ICgoX2N0eXBlXyArIDEpWyh1bnNpZ25lZCBjaGFyKWNdICYgKF9VfF9MfF9OKSkpOworfQorCitfX0NUWVBFX0lOTElORSBpbnQgaXNhbHBoYShpbnQgYykKK3sKKwlyZXR1cm4gKGMgPT0gLTEgPyAwIDogKChfY3R5cGVfICsgMSlbKHVuc2lnbmVkIGNoYXIpY10gJiAoX1V8X0wpKSk7Cit9CisKK19fQ1RZUEVfSU5MSU5FIGludCBpc2NudHJsKGludCBjKQoreworCXJldHVybiAoYyA9PSAtMSA/IDAgOiAoKF9jdHlwZV8gKyAxKVsodW5zaWduZWQgY2hhciljXSAmIF9DKSk7Cit9CisKK19fQ1RZUEVfSU5MSU5FIGludCBpc2RpZ2l0KGludCBjKQoreworCXJldHVybiAoYyA9PSAtMSA/IDAgOiAoKF9jdHlwZV8gKyAxKVsodW5zaWduZWQgY2hhciljXSAmIF9OKSk7Cit9CisKK19fQ1RZUEVfSU5MSU5FIGludCBpc2dyYXBoKGludCBjKQoreworCXJldHVybiAoYyA9PSAtMSA/IDAgOiAoKF9jdHlwZV8gKyAxKVsodW5zaWduZWQgY2hhciljXSAmIChfUHxfVXxfTHxfTikpKTsKK30KKworX19DVFlQRV9JTkxJTkUgaW50IGlzbG93ZXIoaW50IGMpCit7CisJcmV0dXJuIChjID09IC0xID8gMCA6ICgoX2N0eXBlXyArIDEpWyh1bnNpZ25lZCBjaGFyKWNdICYgX0wpKTsKK30KKworX19DVFlQRV9JTkxJTkUgaW50IGlzcHJpbnQoaW50IGMpCit7CisJcmV0dXJuIChjID09IC0xID8gMCA6ICgoX2N0eXBlXyArIDEpWyh1bnNpZ25lZCBjaGFyKWNdICYgKF9QfF9VfF9MfF9OfF9CKSkpOworfQorCitfX0NUWVBFX0lOTElORSBpbnQgaXNwdW5jdChpbnQgYykKK3sKKwlyZXR1cm4gKGMgPT0gLTEgPyAwIDogKChfY3R5cGVfICsgMSlbKHVuc2lnbmVkIGNoYXIpY10gJiBfUCkpOworfQorCitfX0NUWVBFX0lOTElORSBpbnQgaXNzcGFjZShpbnQgYykKK3sKKwlyZXR1cm4gKGMgPT0gLTEgPyAwIDogKChfY3R5cGVfICsgMSlbKHVuc2lnbmVkIGNoYXIpY10gJiBfUykpOworfQorCitfX0NUWVBFX0lOTElORSBpbnQgaXN1cHBlcihpbnQgYykKK3sKKwlyZXR1cm4gKGMgPT0gLTEgPyAwIDogKChfY3R5cGVfICsgMSlbKHVuc2lnbmVkIGNoYXIpY10gJiBfVSkpOworfQorCitfX0NUWVBFX0lOTElORSBpbnQgaXN4ZGlnaXQoaW50IGMpCit7CisJcmV0dXJuIChjID09IC0xID8gMCA6ICgoX2N0eXBlXyArIDEpWyh1bnNpZ25lZCBjaGFyKWNdICYgKF9OfF9YKSkpOworfQorCitfX0NUWVBFX0lOTElORSBpbnQgdG9sb3dlcihpbnQgYykKK3sKKwlpZiAoKHVuc2lnbmVkIGludCljID4gMjU1KQorCQlyZXR1cm4gKGMpOworCXJldHVybiAoKF90b2xvd2VyX3RhYl8gKyAxKVtjXSk7Cit9CisKK19fQ1RZUEVfSU5MSU5FIGludCB0b3VwcGVyKGludCBjKQoreworCWlmICgodW5zaWduZWQgaW50KWMgPiAyNTUpCisJCXJldHVybiAoYyk7CisJcmV0dXJuICgoX3RvdXBwZXJfdGFiXyArIDEpW2NdKTsKK30KKworI2lmIF9fQlNEX1ZJU0lCTEUgfHwgX19JU09fQ19WSVNJQkxFID49IDE5OTkgfHwgX19QT1NJWF9WSVNJQkxFID4gMjAwMTEyIFwKKyAgICB8fCBfX1hQR19WSVNJQkxFID4gNjAwCitfX0NUWVBFX0lOTElORSBpbnQgaXNibGFuayhpbnQgYykKK3sKKwlyZXR1cm4gKGMgPT0gJyAnIHx8IGMgPT0gJ1x0Jyk7Cit9CisjZW5kaWYKKworI2lmIF9fQlNEX1ZJU0lCTEUgfHwgX19YUEdfVklTSUJMRQorX19DVFlQRV9JTkxJTkUgaW50IGlzYXNjaWkoaW50IGMpCit7CisJcmV0dXJuICgodW5zaWduZWQgaW50KWMgPD0gMDE3Nyk7Cit9CisKK19fQ1RZUEVfSU5MSU5FIGludCB0b2FzY2lpKGludCBjKQoreworCXJldHVybiAoYyAmIDAxNzcpOworfQorCitfX0NUWVBFX0lOTElORSBpbnQgX3RvbG93ZXIoaW50IGMpCit7CisJcmV0dXJuIChjIC0gJ0EnICsgJ2EnKTsKK30KKworX19DVFlQRV9JTkxJTkUgaW50IF90b3VwcGVyKGludCBjKQoreworCXJldHVybiAoYyAtICdhJyArICdBJyk7Cit9CisjZW5kaWYgLyogX19CU0RfVklTSUJMRSB8fCBfX1hQR19WSVNJQkxFICovCisKKyNlbmRpZiAvKiBOREVCVUcgKi8KKworX19FTkRfREVDTFMKKworI3VuZGVmIF9fQ1RZUEVfSU5MSU5FCisKKyNlbmRpZiAvKiAhX0NUWVBFX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvZGlyZW50LmggYi9saWJjL2luY2x1ZGUvZGlyZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVlZWY3YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9kaXJlbnQuaApAQCAtMCwwICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9ESVJFTlRfSF8KKyNkZWZpbmUgX0RJUkVOVF9IXworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisKK19fQkVHSU5fREVDTFMKKworI2lmbmRlZiBEVF9VTktOT1dOCisjZGVmaW5lICBEVF9VTktOT1dOICAgICAwCisjZGVmaW5lICBEVF9GSUZPICAgICAgICAxCisjZGVmaW5lICBEVF9DSFIgICAgICAgICAyCisjZGVmaW5lICBEVF9ESVIgICAgICAgICA0CisjZGVmaW5lICBEVF9CTEsgICAgICAgICA2CisjZGVmaW5lICBEVF9SRUcgICAgICAgICA4CisjZGVmaW5lICBEVF9MTksgICAgICAgICAxMAorI2RlZmluZSAgRFRfU09DSyAgICAgICAgMTIKKyNkZWZpbmUgIERUX1dIVCAgICAgICAgIDE0CisjZW5kaWYKKworLyogdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgaXMgcmVhbGx5IGNhbGxlZCBkaXJlbnQ2NCBieSB0aGUga2VybmVsCisgKiBoZWFkZXJzLiBUaGV5IGFsc28gZGVmaW5lIGEgc3RydWN0IGRpcmVudCwgYnV0IHRoZSBsYXR0ZXIgbGFjaworICogdGhlIGRfdHlwZSBmaWVsZCB3aGljaCBpcyByZXF1aXJlZCBieSBzb21lIGxpYnJhcmllcyAoZS5nLiBob3RwbHVnKQorICogd2hvIGFzc3VtZSB0byBiZSBhYmxlIHRvIGFjY2VzcyBpdCBkaXJlY3RseS4gc2FkLi4uCisgKi8KK3N0cnVjdCBkaXJlbnQgeworICAgIHVpbnQ2NF90ICAgICAgICAgZF9pbm87CisgICAgaW50NjRfdCAgICAgICAgICBkX29mZjsKKyAgICB1bnNpZ25lZCBzaG9ydCAgIGRfcmVjbGVuOworICAgIHVuc2lnbmVkIGNoYXIgICAgZF90eXBlOworICAgIGNoYXIgICAgICAgICAgICAgZF9uYW1lWzI1Nl07Cit9OworCit0eXBlZGVmIHN0cnVjdCBESVIgIERJUjsKKworZXh0ZXJuICBpbnQgICAgICAgICAgICAgIGdldGRlbnRzKHVuc2lnbmVkIGludCwgc3RydWN0IGRpcmVudCosIHVuc2lnbmVkIGludCk7CitleHRlcm4gIERJUiogICAgICAgICAgICAgb3BlbmRpcihjb25zdCBjaGFyKiAgZGlycGF0aCk7CitleHRlcm4gIERJUiogICAgICAgICAgICAgZmRvcGVuZGlyKGludCBmZCk7CitleHRlcm4gIHN0cnVjdCBkaXJlbnQqICAgcmVhZGRpcihESVIqICBkaXJwKTsKK2V4dGVybiAgaW50ICAgICAgICAgICAgICByZWFkZGlyX3IoRElSKiAgZGlycCwgc3RydWN0IGRpcmVudCAqZW50cnksIHN0cnVjdCBkaXJlbnQgKipyZXN1bHQpOworZXh0ZXJuICBpbnQgICAgICAgICAgICAgIGNsb3NlZGlyKERJUiogIGRpcnApOworZXh0ZXJuICB2b2lkICAgICAgICAgICAgIHJld2luZGRpcihESVIgKmRpcnApOworZXh0ZXJuICBpbnQgICAgICAgICAgICAgIGRpcmZkKERJUiogZGlycCk7CitleHRlcm4gIGludCAgICAgICAgICAgICAgYWxwaGFzb3J0KGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpOworZXh0ZXJuICBpbnQgICAgICAgICAgICAgIHNjYW5kaXIoY29uc3QgY2hhciAqZGlyLCBzdHJ1Y3QgZGlyZW50ICoqKm5hbWVsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KCpmaWx0ZXIpKGNvbnN0IHN0cnVjdCBkaXJlbnQgKiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQoKmNvbXBhcikoY29uc3Qgc3RydWN0IGRpcmVudCAqKiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGRpcmVudCAqKikpOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX0RJUkVOVF9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL2RsZmNuLmggYi9saWJjL2luY2x1ZGUvZGxmY24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTgyNzk2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL2RsZmNuLmgKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfX0RMRkNOX0hfXworI2RlZmluZSBfX0RMRkNOX0hfXworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisKK19fQkVHSU5fREVDTFMKKworZXh0ZXJuIHZvaWQqICAgICAgICBkbG9wZW4oY29uc3QgY2hhciogIGZpbGVuYW1lLCBpbnQgZmxhZyk7CitleHRlcm4gaW50ICAgICAgICAgIGRsY2xvc2Uodm9pZCogIGhhbmRsZSk7CitleHRlcm4gY29uc3QgY2hhciogIGRsZXJyb3Iodm9pZCk7CitleHRlcm4gdm9pZCogICAgICAgIGRsc3ltKHZvaWQqICBoYW5kbGUsIGNvbnN0IGNoYXIqICBzeW1ib2wpOworCitlbnVtIHsKKyAgUlRMRF9OT1cgID0gMCwKKyAgUlRMRF9MQVpZID0gMSwKKworICBSVExEX0xPQ0FMICA9IDAsCisgIFJUTERfR0xPQkFMID0gMiwKK307CisKKyNkZWZpbmUgUlRMRF9ERUZBVUxUICAoKHZvaWQqKSAweGZmZmZmZmZmKQorI2RlZmluZSBSVExEX05FWFQgICAgICgodm9pZCopIDB4ZmZmZmZmZmUpCisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfX0RMRkNOX0ggKi8KKworCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvZWxmLmggYi9saWJjL2luY2x1ZGUvZWxmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE4NmE2MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9lbGYuaApAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9FTEZfSAorI2RlZmluZSBfRUxGX0gKKworLyogdGhlc2UgZGVmaW5pdGlvbnMgYXJlIG1pc3NpbmcgZnJvbSB0aGUgQlNEIHNvdXJjZXMgKi8KK2VudW0geworICAgIEFUX05VTEwgPSAwLAorICAgIEFUX0lHTk9SRSwKKyAgICBBVF9FWEVDRkQsCisgICAgQVRfUEhEUiwKKyAgICBBVF9QSEVOVCwKKyAgICBBVF9QSE5VTSwKKyAgICBBVF9QQUdFU1osCisgICAgQVRfQkFTRSwKKyAgICBBVF9GTEFHUywKKyAgICBBVF9FTlRSWSwKKyAgICBBVF9OT1RFTEYsCisgICAgQVRfVUlELAorICAgIEFUX0VVSUQsCisgICAgQVRfR0lELAorICAgIEFUX0VHSUQsCisgICAgQVRfUExBVEZPUk0sCisgICAgQVRfSFdDQVAsCisgICAgQVRfQ0xLVENLLAorCisgICAgQVRfU0VDVVJFID0gMjMKK307CisKKyNpbmNsdWRlIDxzeXMvZXhlY19lbGYuaD4KKworI2VuZGlmIC8qIF9FTEZfSCAqLworCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvZW5kaWFuLmggYi9saWJjL2luY2x1ZGUvZW5kaWFuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc1YjQ4YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9lbmRpYW4uaApAQCAtMCwwICsxLDMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9FTkRJQU5fSF8KKyNkZWZpbmUgX0VORElBTl9IXworCisjaW5jbHVkZSA8c3lzL2VuZGlhbi5oPgorCisjZW5kaWYgLyogX0VORElBTl9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL2Vyci5oIGIvbGliYy9pbmNsdWRlL2Vyci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvZXJyLmgKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9lcnJuby5oIGIvbGliYy9pbmNsdWRlL2Vycm5vLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmIyNjg1YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9lcnJuby5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX0VSUk5PX0gKKyNkZWZpbmUgX0VSUk5PX0gKKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisKK19fQkVHSU5fREVDTFMKKworLyogb24gTGludXgsIEVOT1RTVVAgYW5kIEVPUE5PVFNVUFAgYXJlIGRlZmluZWQgYXMgdGhlIHNhbWUgZXJyb3IgY29kZQorICogZXZlbiBpZiAxMDAwLjMgc3RhdGVzIHRoYXQgdGhleSBzaG91bGQgYmUgZGlmZmVyZW50CisgKi8KKyNpZm5kZWYgIEVOT1RVUAorI2RlZmluZSAgRU5PVFNVUCAgRU9QTk9UU1VQUAorI2VuZGlmCisKKy8qIGludGVybmFsIGZ1bmN0aW9uIHRoYXQgc2hvdWxkICpvbmx5KiBiZSBjYWxsZWQgZnJvbSBzeXN0ZW0gY2FsbHMgKi8KKy8qIHVzZSBlcnJubyA9IHh4eHggaW5zdGVhZCBpbiBDIGNvZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KK2V4dGVybiBpbnQgICAgX19zZXRfZXJybm8oaW50ICBlcnJvcik7CisKKy8qIGludGVybmFsIGZ1bmN0aW9uIHJldHVybmluZyB0aGUgYWRkcmVzcyBvZiB0aGUgdGhyZWFkLXNwZWNpZmljIGVycm5vICovCitleHRlcm4gdm9sYXRpbGUgaW50KiAgIF9fZXJybm8odm9pZCk7CisKKy8qIGEgbWFjcm8gZXhwYW5kaW5nIHRvIHRoZSBlcnJubyBsLXZhbHVlICovCisjZGVmaW5lICBlcnJubyAgICgqX19lcnJubygpKQorCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX0VSUk5PX0ggKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9mY250bC5oIGIvbGliYy9pbmNsdWRlL2ZjbnRsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTllNzEzNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9mY250bC5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX0ZDTlRMX0gKKyNkZWZpbmUgX0ZDTlRMX0gKKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+ICAvKiB0aGlzIGlzIG5vdCByZXF1aXJlZCwgYnV0IG1ha2VzIGNsaWVudCBjb2RlIG11Y2ggaGFwcGllciAqLworCitfX0JFR0lOX0RFQ0xTCisKKyNpZm5kZWYgT19BU1lOQworI2RlZmluZSBPX0FTWU5DICBGQVNZTkMKKyNlbmRpZgorCitleHRlcm4gaW50ICBvcGVuKGNvbnN0IGNoYXIqICBwYXRoLCBpbnQgIG1vZGUsIC4uLik7CitleHRlcm4gaW50ICBvcGVuYXQoaW50IGZkLCBjb25zdCBjaGFyKiAgcGF0aCwgaW50ICBtb2RlLCAuLi4pOworZXh0ZXJuIGludCAgdW5saW5rYXQoaW50IGRpcmZkLCBjb25zdCBjaGFyICpwYXRobmFtZSwgaW50IGZsYWdzKTsKK2V4dGVybiBpbnQgIGZjbnRsKGludCAgIGZkLCBpbnQgICBjb21tYW5kLCAuLi4pOworZXh0ZXJuIGludCAgY3JlYXQoY29uc3QgY2hhciogIHBhdGgsIG1vZGVfdCAgbW9kZSk7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfRkNOVExfSCAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL2ZlYXR1cmVzLmggYi9saWJjL2luY2x1ZGUvZmVhdHVyZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDNjODRkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL2ZlYXR1cmVzLmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfRkVBVFVSRVNfSF8KKyNkZWZpbmUgX0ZFQVRVUkVTX0hfCisKKy8qIGNlcnRhaW4gTGludXgtc3BlY2lmaWMgcHJvZ3JhbXMgZXhwZWN0IGEgPGZlYXR1cmVzLmg+IGhlYWRlciBmaWxlCisgKiB0aGF0IGRlZmluZXMgdmFyaW91cyBmZWF0dXJlcyBtYWNyb3MKKyAqLworCisvKiB3ZSBkbyBpbmNsdWRlIGEgbnVtYmVyIG9mIEJTRCBleHRlbnNpb25zICovCisjZGVmaW5lICBfQlNEX1NPVVJDRSAgMQorCisvKiB3ZSBkbyBpbmNsdWRlIGEgbnVtYmVyIG9mIEdOVSBleHRlbnNpb25zICovCisjZGVmaW5lICBfR05VX1NPVVJDRSAgMQorCisvKiBDOTUgc3VwcG9ydCAqLworI3VuZGVmIF9fVVNFX0lTT0M5NQorI2lmIGRlZmluZWQgX19TVERDX1ZFUlNJT05fXyAmJiBfX1NURENfVkVSU0lPTl9fID49IDE5OTQwOUwKKyMgZGVmaW5lIF9fVVNFX0lTT0M5NSAgIDEKKyNlbmRpZgorCisvKiBDOTkgc3VwcG9ydCAqLworI3VuZGVmIF9fVVNFX0lTT0M5OQorI2lmIGRlZmluZWQgX19TVERDX1ZFUlNJT05fXyAmJiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwKKyMgZGVmaW5lIF9fVVNFX0lTT0M5OSAgIDEKKyNlbmRpZgorCisvKiBQb3NpeCBzdXBwb3J0ICovCisjZGVmaW5lICBfX1VTRV9QT1NJWCAgIDEKKyNkZWZpbmUgIF9fVVNFX1BPU0lYMiAgMQorI2RlZmluZSAgX19VU0VfWFBHICAgICAxCisKKyNlbmRpZiAvKiBfRkVBVFVSRVNfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9mbm1hdGNoLmggYi9saWJjL2luY2x1ZGUvZm5tYXRjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3MmI0ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvZm5tYXRjaC5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX0ZOTUFUQ0hfSAorI2RlZmluZSBfRk5NQVRDSF9ICisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKworX19CRUdJTl9ERUNMUworCisjZGVmaW5lIEZOTV9OT01BVENIICAgICAgMSAgICAgLyogTWF0Y2ggZmFpbGVkLiAqLworI2RlZmluZSBGTk1fTk9TWVMgICAgICAgIDIgICAgIC8qIEZ1bmN0aW9uIG5vdCBzdXBwb3J0ZWQgKHVudXNlZCkuICovCisKKyNkZWZpbmUgRk5NX05PRVNDQVBFICAgICAweDAxICAgICAgICAvKiBEaXNhYmxlIGJhY2tzbGFzaCBlc2NhcGluZy4gKi8KKyNkZWZpbmUgRk5NX1BBVEhOQU1FICAgICAweDAyICAgICAgICAvKiBTbGFzaCBtdXN0IGJlIG1hdGNoZWQgYnkgc2xhc2guICovCisjZGVmaW5lIEZOTV9QRVJJT0QgICAgICAgMHgwNCAgICAgICAgLyogUGVyaW9kIG11c3QgYmUgbWF0Y2hlZCBieSBwZXJpb2QuICovCisjZGVmaW5lIEZOTV9MRUFESU5HX0RJUiAgMHgwOCAgICAgICAgLyogSWdub3JlIC88dGFpbD4gYWZ0ZXIgSW1hdGNoLiAqLworI2RlZmluZSBGTk1fQ0FTRUZPTEQgICAgIDB4MTAgICAgICAgIC8qIENhc2UgaW5zZW5zaXRpdmUgc2VhcmNoLiAqLworCisjZGVmaW5lIEZOTV9JR05PUkVDQVNFICAgRk5NX0NBU0VGT0xECisjZGVmaW5lIEZOTV9GSUxFX05BTUUgICAgRk5NX1BBVEhOQU1FCisKK2V4dGVybiBpbnQgIGZubWF0Y2goY29uc3QgY2hhciAqcGF0dGVybiwgY29uc3QgY2hhciAqc3RyaW5nLCBpbnQgZmxhZ3MpOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX0ZOTUFUQ0hfSCAqLworCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvZ2V0b3B0LmggYi9saWJjL2luY2x1ZGUvZ2V0b3B0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI0OTU0YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9nZXRvcHQuaApAQCAtMCwwICsxLDg1IEBACisvKgkkT3BlbkJTRDogZ2V0b3B0LmgsdiAxLjEgMjAwMi8xMi8wMyAyMDoyNDoyOSBtaWxsZXJ0IEV4cCAkCSovCisvKgkkTmV0QlNEOiBnZXRvcHQuaCx2IDEuNCAyMDAwLzA3LzA3IDEwOjQzOjU0IGFkIEV4cCAkCSovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDAwIFRoZSBOZXRCU0QgRm91bmRhdGlvbiwgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIFRoZSBOZXRCU0QgRm91bmRhdGlvbgorICogYnkgRGlldGVyIEJhcm9uIGFuZCBUaG9tYXMgS2xhdXNuZXIuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqICAgICAgICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBOZXRCU0QKKyAqICAgICAgICBGb3VuZGF0aW9uLCBJbmMuIGFuZCBpdHMgY29udHJpYnV0b3JzLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiBUaGUgTmV0QlNEIEZvdW5kYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE5FVEJTRCBGT1VOREFUSU9OLCBJTkMuIEFORCBDT05UUklCVVRPUlMKKyAqIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorICogVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUiBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX0dFVE9QVF9IXworI2RlZmluZSBfR0VUT1BUX0hfCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKworLyoKKyAqIEdOVS1saWtlIGdldG9wdF9sb25nKCkgYW5kIDQuNEJTRCBnZXRzdWJvcHQoKS9vcHRyZXNldCBleHRlbnNpb25zCisgKi8KKyNkZWZpbmUgbm9fYXJndW1lbnQgICAgICAgIDAKKyNkZWZpbmUgcmVxdWlyZWRfYXJndW1lbnQgIDEKKyNkZWZpbmUgb3B0aW9uYWxfYXJndW1lbnQgIDIKKworc3RydWN0IG9wdGlvbiB7CisJLyogbmFtZSBvZiBsb25nIG9wdGlvbiAqLworCWNvbnN0IGNoYXIgKm5hbWU7CisJLyoKKwkgKiBvbmUgb2Ygbm9fYXJndW1lbnQsIHJlcXVpcmVkX2FyZ3VtZW50LCBhbmQgb3B0aW9uYWxfYXJndW1lbnQ6CisJICogd2hldGhlciBvcHRpb24gdGFrZXMgYW4gYXJndW1lbnQKKwkgKi8KKwlpbnQgaGFzX2FyZzsKKwkvKiBpZiBub3QgTlVMTCwgc2V0ICpmbGFnIHRvIHZhbCB3aGVuIG9wdGlvbiBmb3VuZCAqLworCWludCAqZmxhZzsKKwkvKiBpZiBmbGFnIG5vdCBOVUxMLCB2YWx1ZSB0byBzZXQgKmZsYWcgdG87IGVsc2UgcmV0dXJuIHZhbHVlICovCisJaW50IHZhbDsKK307CisKK19fQkVHSU5fREVDTFMKK2ludAkgZ2V0b3B0X2xvbmcoaW50LCBjaGFyICogY29uc3QgKiwgY29uc3QgY2hhciAqLAorCSAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICosIGludCAqKTsKK2ludAkgZ2V0b3B0X2xvbmdfb25seShpbnQsIGNoYXIgKiBjb25zdCAqLCBjb25zdCBjaGFyICosCisJICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKiwgaW50ICopOworI2lmbmRlZiBfR0VUT1BUX0RFRklORURfCisjZGVmaW5lIF9HRVRPUFRfREVGSU5FRF8KK2ludAkgZ2V0b3B0KGludCwgY2hhciAqIGNvbnN0ICosIGNvbnN0IGNoYXIgKik7CitpbnQJIGdldHN1Ym9wdChjaGFyICoqLCBjaGFyICogY29uc3QgKiwgY2hhciAqKik7CisKK2V4dGVybiAgIGNoYXIgKm9wdGFyZzsgICAgICAgICAgICAgICAgICAvKiBnZXRvcHQoMykgZXh0ZXJuYWwgdmFyaWFibGVzICovCitleHRlcm4gICBpbnQgb3B0ZXJyOworZXh0ZXJuICAgaW50IG9wdGluZDsKK2V4dGVybiAgIGludCBvcHRvcHQ7CitleHRlcm4gICBpbnQgb3B0cmVzZXQ7CitleHRlcm4gICBjaGFyICpzdWJvcHRhcmc7ICAgICAgICAgICAgICAgLyogZ2V0c3Vib3B0KDMpIGV4dGVybmFsIHZhcmlhYmxlICovCisjZW5kaWYKK19fRU5EX0RFQ0xTCisgCisjZW5kaWYgLyogIV9HRVRPUFRfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9ncnAuaCBiL2xpYmMvaW5jbHVkZS9ncnAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmQ5OWYzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL2dycC5oCkBAIC0wLDAgKzEsODIgQEAKKy8qCSRPcGVuQlNEOiBncnAuaCx2IDEuOCAyMDA1LzEyLzEzIDAwOjM1OjIyIG1pbGxlcnQgRXhwICQJKi8KKy8qCSROZXRCU0Q6IGdycC5oLHYgMS43IDE5OTUvMDQvMjkgMDU6MzA6NDAgY2dkIEV4cCAkCSovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTg5LCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIChjKSBVTklYIFN5c3RlbSBMYWJvcmF0b3JpZXMsIEluYy4KKyAqIEFsbCBvciBzb21lIHBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIG1hdGVyaWFsIGxpY2Vuc2VkCisgKiB0byB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhIGJ5IEFtZXJpY2FuIFRlbGVwaG9uZSBhbmQgVGVsZWdyYXBoCisgKiBDby4gb3IgVW5peCBTeXN0ZW0gTGFib3JhdG9yaWVzLCBJbmMuIGFuZCBhcmUgcmVwcm9kdWNlZCBoZXJlaW4gd2l0aAorICogdGhlIHBlcm1pc3Npb24gb2YgVU5JWCBTeXN0ZW0gTGFib3JhdG9yaWVzLCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqCUAoIylncnAuaAk4LjIgKEJlcmtlbGV5KSAxLzIxLzk0CisgKi8KKworI2lmbmRlZiBfR1JQX0hfCisjZGVmaW5lCV9HUlBfSF8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjaWYgX19CU0RfVklTSUJMRQorI2RlZmluZQlfUEFUSF9HUk9VUAkJIi9ldGMvZ3JvdXAiCisjZW5kaWYKKworc3RydWN0IGdyb3VwIHsKKwljaGFyCSpncl9uYW1lOwkJLyogZ3JvdXAgbmFtZSAqLworCWNoYXIJKmdyX3Bhc3N3ZDsJCS8qIGdyb3VwIHBhc3N3b3JkICovCisJZ2lkX3QJZ3JfZ2lkOwkJCS8qIGdyb3VwIGlkICovCisJY2hhcgkqKmdyX21lbTsJCS8qIGdyb3VwIG1lbWJlcnMgKi8KK307CisKK19fQkVHSU5fREVDTFMKK3N0cnVjdCBncm91cAkqZ2V0Z3JnaWQoZ2lkX3QpOworc3RydWN0IGdyb3VwCSpnZXRncm5hbShjb25zdCBjaGFyICopOworI2lmIF9fQlNEX1ZJU0lCTEUgfHwgX19QT1NJWF9WSVNJQkxFID49IDIwMDExMiB8fCBfX1hQR19WSVNJQkxFCitzdHJ1Y3QgZ3JvdXAJKmdldGdyZW50KHZvaWQpOwordm9pZAkJIHNldGdyZW50KHZvaWQpOwordm9pZAkJIGVuZGdyZW50KHZvaWQpOworaW50CQkgZ2V0Z3JnaWRfcihnaWRfdCwgc3RydWN0IGdyb3VwICosIGNoYXIgKiwKKwkJICAgIHNpemVfdCwgc3RydWN0IGdyb3VwICoqKTsKK2ludAkJIGdldGdybmFtX3IoY29uc3QgY2hhciAqLCBzdHJ1Y3QgZ3JvdXAgKiwgY2hhciAqLAorCQkgICAgc2l6ZV90LCBzdHJ1Y3QgZ3JvdXAgKiopOworI2VuZGlmCisjaWYgX19CU0RfVklTSUJMRQordm9pZAkJIHNldGdyZmlsZShjb25zdCBjaGFyICopOworaW50CQkgc2V0Z3JvdXBlbnQoaW50KTsKK2NoYXIJCSpncm91cF9mcm9tX2dpZChnaWRfdCwgaW50KTsKKyNlbmRpZgorCitpbnQgICBnZXRncm91cGxpc3QgKGNvbnN0IGNoYXIgKnVzZXIsIGdpZF90IGdyb3VwLAorICAgICAgICAgICAgICAgICAgZ2lkX3QgKmdyb3VwcywgaW50ICpuZ3JvdXBzKTsKKworaW50ICAgaW5pdGdyb3VwcyAoY29uc3QgY2hhciAqdXNlciwgZ2lkX3QgZ3JvdXApOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogIV9HUlBfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9pbnR0eXBlcy5oIGIvbGliYy9pbmNsdWRlL2ludHR5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2EzMDNjYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9pbnR0eXBlcy5oCkBAIC0wLDAgKzEsMjU4IEBACisvKgkkT3BlbkJTRDogaW50dHlwZXMuaCx2IDEuOSAyMDA2LzAxLzE1IDAwOjQ3OjUxIG1pbGxlcnQgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk5NywgMjAwNSBUb2RkIEMuIE1pbGxlciA8VG9kZC5NaWxsZXJAY291cnRlc2FuLmNvbT4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmCV9JTlRUWVBFU19IXworI2RlZmluZQlfSU5UVFlQRVNfSF8KKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorCisjaWYgIWRlZmluZWQoX19jcGx1c3BsdXMpIHx8IGRlZmluZWQoX19TVERDX0ZPUk1BVF9NQUNST1MpCisvKgorICogNy44LjEgTWFjcm9zIGZvciBmb3JtYXQgc3BlY2lmaWVycworICoKKyAqIEVhY2ggb2YgdGhlIGZvbGxvd2luZyBvYmplY3QtbGlrZSBtYWNyb3MgZXhwYW5kcyB0byBhIHN0cmluZworICogbGl0ZXJhbCBjb250YWluaW5nIGEgY29udmVyc2lvbiBzcGVjaWZpZXIsIHBvc3NpYmx5IG1vZGlmaWVkIGJ5CisgKiBhIHByZWZpeCBzdWNoIGFzIGhoLCBoLCBsLCBvciBsbCwgc3VpdGFibGUgZm9yIHVzZSB3aXRoaW4gdGhlCisgKiBmb3JtYXQgYXJndW1lbnQgb2YgYSBmb3JtYXR0ZWQgaW5wdXQvb3V0cHV0IGZ1bmN0aW9uIHdoZW4KKyAqIGNvbnZlcnRpbmcgdGhlIGNvcnJlc3BvbmRpbmcgaW50ZWdlciB0eXBlLiAgVGhlc2UgbWFjcm8gbmFtZXMKKyAqIGhhdmUgdGhlIGdlbmVyYWwgZm9ybSBvZiBQUkkgKGNoYXJhY3RlciBzdHJpbmcgbGl0ZXJhbHMgZm9yIHRoZQorICogZnByaW50ZiBmYW1pbHkpIG9yIFNDTiAoY2hhcmFjdGVyIHN0cmluZyBsaXRlcmFscyBmb3IgdGhlIGZzY2FuZgorICogZmFtaWx5KSwgZm9sbG93ZWQgYnkgdGhlIGNvbnZlcnNpb24gc3BlY2lmaWVyLCBmb2xsb3dlZCBieSBhCisgKiBuYW1lIGNvcnJlc3BvbmRpbmcgdG8gYSBzaW1pbGFyIHR5cGVkZWYgbmFtZS4gIEZvciBleGFtcGxlLAorICogUFJJZEZBU1QzMiBjYW4gYmUgdXNlZCBpbiBhIGZvcm1hdCBzdHJpbmcgdG8gcHJpbnQgdGhlIHZhbHVlIG9mCisgKiBhbiBpbnRlZ2VyIG9mIHR5cGUgaW50X2Zhc3QzMl90LgorICovCisKKy8qIGZwcmludGYgbWFjcm9zIGZvciBzaWduZWQgaW50ZWdlcnMgKi8KKyNkZWZpbmUJUFJJZDgJCQkiZCIJCS8qIGludDhfdCAqLworI2RlZmluZQlQUklkMTYJCQkiZCIJCS8qIGludDE2X3QgKi8KKyNkZWZpbmUJUFJJZDMyCQkJImQiCQkvKiBpbnQzMl90ICovCisjZGVmaW5lCVBSSWQ2NAkJCSJsbGQiCQkvKiBpbnQ2NF90ICovCisKKyNkZWZpbmUJUFJJZExFQVNUOAkJImQiCQkvKiBpbnRfbGVhc3Q4X3QgKi8KKyNkZWZpbmUJUFJJZExFQVNUMTYJCSJkIgkJLyogaW50X2xlYXN0MTZfdCAqLworI2RlZmluZQlQUklkTEVBU1QzMgkJImQiCQkvKiBpbnRfbGVhc3QzMl90ICovCisjZGVmaW5lCVBSSWRMRUFTVDY0CQkibGxkIgkJLyogaW50X2xlYXN0NjRfdCAqLworCisjZGVmaW5lCVBSSWRGQVNUOAkJImQiCQkvKiBpbnRfZmFzdDhfdCAqLworI2RlZmluZQlQUklkRkFTVDE2CQkiZCIJCS8qIGludF9mYXN0MTZfdCAqLworI2RlZmluZQlQUklkRkFTVDMyCQkiZCIJCS8qIGludF9mYXN0MzJfdCAqLworI2RlZmluZQlQUklkRkFTVDY0CQkibGxkIgkJLyogaW50X2Zhc3Q2NF90ICovCisKKyNkZWZpbmUJUFJJZE1BWAkJCSJqZCIJCS8qIGludG1heF90ICovCisjZGVmaW5lCVBSSWRQVFIJCQkibGQiCQkvKiBpbnRwdHJfdCAqLworCisjZGVmaW5lCVBSSWk4CQkJImkiCQkvKiBpbnQ4X3QgKi8KKyNkZWZpbmUJUFJJaTE2CQkJImkiCQkvKiBpbnQxNl90ICovCisjZGVmaW5lCVBSSWkzMgkJCSJpIgkJLyogaW50MzJfdCAqLworI2RlZmluZQlQUklpNjQJCQkibGxpIgkJLyogaW50NjRfdCAqLworCisjZGVmaW5lCVBSSWlMRUFTVDgJCSJpIgkJLyogaW50X2xlYXN0OF90ICovCisjZGVmaW5lCVBSSWlMRUFTVDE2CQkiaSIJCS8qIGludF9sZWFzdDE2X3QgKi8KKyNkZWZpbmUJUFJJaUxFQVNUMzIJCSJpIgkJLyogaW50X2xlYXN0MzJfdCAqLworI2RlZmluZQlQUklpTEVBU1Q2NAkJImxsaSIJCS8qIGludF9sZWFzdDY0X3QgKi8KKworI2RlZmluZQlQUklpRkFTVDgJCSJpIgkJLyogaW50X2Zhc3Q4X3QgKi8KKyNkZWZpbmUJUFJJaUZBU1QxNgkJImkiCQkvKiBpbnRfZmFzdDE2X3QgKi8KKyNkZWZpbmUJUFJJaUZBU1QzMgkJImkiCQkvKiBpbnRfZmFzdDMyX3QgKi8KKyNkZWZpbmUJUFJJaUZBU1Q2NAkJImxsaSIJCS8qIGludF9mYXN0NjRfdCAqLworCisjZGVmaW5lCVBSSWlNQVgJCQkiamkiCQkvKiBpbnRtYXhfdCAqLworI2RlZmluZQlQUklpUFRSCQkJImxpIgkJLyogaW50cHRyX3QgKi8KKworLyogZnByaW50ZiBtYWNyb3MgZm9yIHVuc2lnbmVkIGludGVnZXJzICovCisjZGVmaW5lCVBSSW84CQkJIm8iCQkvKiBpbnQ4X3QgKi8KKyNkZWZpbmUJUFJJbzE2CQkJIm8iCQkvKiBpbnQxNl90ICovCisjZGVmaW5lCVBSSW8zMgkJCSJvIgkJLyogaW50MzJfdCAqLworI2RlZmluZQlQUklvNjQJCQkibGxvIgkJLyogaW50NjRfdCAqLworCisjZGVmaW5lCVBSSW9MRUFTVDgJCSJvIgkJLyogaW50X2xlYXN0OF90ICovCisjZGVmaW5lCVBSSW9MRUFTVDE2CQkibyIJCS8qIGludF9sZWFzdDE2X3QgKi8KKyNkZWZpbmUJUFJJb0xFQVNUMzIJCSJvIgkJLyogaW50X2xlYXN0MzJfdCAqLworI2RlZmluZQlQUklvTEVBU1Q2NAkJImxsbyIJCS8qIGludF9sZWFzdDY0X3QgKi8KKworI2RlZmluZQlQUklvRkFTVDgJCSJvIgkJLyogaW50X2Zhc3Q4X3QgKi8KKyNkZWZpbmUJUFJJb0ZBU1QxNgkJIm8iCQkvKiBpbnRfZmFzdDE2X3QgKi8KKyNkZWZpbmUJUFJJb0ZBU1QzMgkJIm8iCQkvKiBpbnRfZmFzdDMyX3QgKi8KKyNkZWZpbmUJUFJJb0ZBU1Q2NAkJImxsbyIJCS8qIGludF9mYXN0NjRfdCAqLworCisjZGVmaW5lCVBSSW9NQVgJCQkiam8iCQkvKiBpbnRtYXhfdCAqLworI2RlZmluZQlQUklvUFRSCQkJImxvIgkJLyogaW50cHRyX3QgKi8KKworI2RlZmluZQlQUkl1OAkJCSJ1IgkJLyogdWludDhfdCAqLworI2RlZmluZQlQUkl1MTYJCQkidSIJCS8qIHVpbnQxNl90ICovCisjZGVmaW5lCVBSSXUzMgkJCSJ1IgkJLyogdWludDMyX3QgKi8KKyNkZWZpbmUJUFJJdTY0CQkJImxsdSIJCS8qIHVpbnQ2NF90ICovCisKKyNkZWZpbmUJUFJJdUxFQVNUOAkJInUiCQkvKiB1aW50X2xlYXN0OF90ICovCisjZGVmaW5lCVBSSXVMRUFTVDE2CQkidSIJCS8qIHVpbnRfbGVhc3QxNl90ICovCisjZGVmaW5lCVBSSXVMRUFTVDMyCQkidSIJCS8qIHVpbnRfbGVhc3QzMl90ICovCisjZGVmaW5lCVBSSXVMRUFTVDY0CQkibGx1IgkJLyogdWludF9sZWFzdDY0X3QgKi8KKworI2RlZmluZQlQUkl1RkFTVDgJCSJ1IgkJLyogdWludF9mYXN0OF90ICovCisjZGVmaW5lCVBSSXVGQVNUMTYJCSJ1IgkJLyogdWludF9mYXN0MTZfdCAqLworI2RlZmluZQlQUkl1RkFTVDMyCQkidSIJCS8qIHVpbnRfZmFzdDMyX3QgKi8KKyNkZWZpbmUJUFJJdUZBU1Q2NAkJImxsdSIJCS8qIHVpbnRfZmFzdDY0X3QgKi8KKworI2RlZmluZQlQUkl1TUFYCQkJImp1IgkJLyogdWludG1heF90ICovCisjZGVmaW5lCVBSSXVQVFIJCQkibHUiCQkvKiB1aW50cHRyX3QgKi8KKworI2RlZmluZQlQUkl4OAkJCSJ4IgkJLyogdWludDhfdCAqLworI2RlZmluZQlQUkl4MTYJCQkieCIJCS8qIHVpbnQxNl90ICovCisjZGVmaW5lCVBSSXgzMgkJCSJ4IgkJLyogdWludDMyX3QgKi8KKyNkZWZpbmUJUFJJeDY0CQkJImxseCIJCS8qIHVpbnQ2NF90ICovCisKKyNkZWZpbmUJUFJJeExFQVNUOAkJIngiCQkvKiB1aW50X2xlYXN0OF90ICovCisjZGVmaW5lCVBSSXhMRUFTVDE2CQkieCIJCS8qIHVpbnRfbGVhc3QxNl90ICovCisjZGVmaW5lCVBSSXhMRUFTVDMyCQkieCIJCS8qIHVpbnRfbGVhc3QzMl90ICovCisjZGVmaW5lCVBSSXhMRUFTVDY0CQkibGx4IgkJLyogdWludF9sZWFzdDY0X3QgKi8KKworI2RlZmluZQlQUkl4RkFTVDgJCSJ4IgkJLyogdWludF9mYXN0OF90ICovCisjZGVmaW5lCVBSSXhGQVNUMTYJCSJ4IgkJLyogdWludF9mYXN0MTZfdCAqLworI2RlZmluZQlQUkl4RkFTVDMyCQkieCIJCS8qIHVpbnRfZmFzdDMyX3QgKi8KKyNkZWZpbmUJUFJJeEZBU1Q2NAkJImxseCIJCS8qIHVpbnRfZmFzdDY0X3QgKi8KKworI2RlZmluZQlQUkl4TUFYCQkJImp4IgkJLyogdWludG1heF90ICovCisjZGVmaW5lCVBSSXhQVFIJCQkibHgiCQkvKiB1aW50cHRyX3QgKi8KKworI2RlZmluZQlQUklYOAkJCSJYIgkJLyogdWludDhfdCAqLworI2RlZmluZQlQUklYMTYJCQkiWCIJCS8qIHVpbnQxNl90ICovCisjZGVmaW5lCVBSSVgzMgkJCSJYIgkJLyogdWludDMyX3QgKi8KKyNkZWZpbmUJUFJJWDY0CQkJImxsWCIJCS8qIHVpbnQ2NF90ICovCisKKyNkZWZpbmUJUFJJWExFQVNUOAkJIlgiCQkvKiB1aW50X2xlYXN0OF90ICovCisjZGVmaW5lCVBSSVhMRUFTVDE2CQkiWCIJCS8qIHVpbnRfbGVhc3QxNl90ICovCisjZGVmaW5lCVBSSVhMRUFTVDMyCQkiWCIJCS8qIHVpbnRfbGVhc3QzMl90ICovCisjZGVmaW5lCVBSSVhMRUFTVDY0CQkibGxYIgkJLyogdWludF9sZWFzdDY0X3QgKi8KKworI2RlZmluZQlQUklYRkFTVDgJCSJYIgkJLyogdWludF9mYXN0OF90ICovCisjZGVmaW5lCVBSSVhGQVNUMTYJCSJYIgkJLyogdWludF9mYXN0MTZfdCAqLworI2RlZmluZQlQUklYRkFTVDMyCQkiWCIJCS8qIHVpbnRfZmFzdDMyX3QgKi8KKyNkZWZpbmUJUFJJWEZBU1Q2NAkJImxsWCIJCS8qIHVpbnRfZmFzdDY0X3QgKi8KKworI2RlZmluZQlQUklYTUFYCQkJImpYIgkJLyogdWludG1heF90ICovCisjZGVmaW5lCVBSSVhQVFIJCQkibFgiCQkvKiB1aW50cHRyX3QgKi8KKworLyogZnNjYW5mIG1hY3JvcyBmb3Igc2lnbmVkIGludGVnZXJzICovCisjZGVmaW5lCVNDTmQ4CQkJImhoZCIJCS8qIGludDhfdCAqLworI2RlZmluZQlTQ05kMTYJCQkiaGQiCQkvKiBpbnQxNl90ICovCisjZGVmaW5lCVNDTmQzMgkJCSJkIgkJLyogaW50MzJfdCAqLworI2RlZmluZQlTQ05kNjQJCQkibGxkIgkJLyogaW50NjRfdCAqLworCisjZGVmaW5lCVNDTmRMRUFTVDgJCSJoaGQiCQkvKiBpbnRfbGVhc3Q4X3QgKi8KKyNkZWZpbmUJU0NOZExFQVNUMTYJCSJoZCIJCS8qIGludF9sZWFzdDE2X3QgKi8KKyNkZWZpbmUJU0NOZExFQVNUMzIJCSJkIgkJLyogaW50X2xlYXN0MzJfdCAqLworI2RlZmluZQlTQ05kTEVBU1Q2NAkJImxsZCIJCS8qIGludF9sZWFzdDY0X3QgKi8KKworI2RlZmluZQlTQ05kRkFTVDgJCSJoaGQiCQkvKiBpbnRfZmFzdDhfdCAqLworI2RlZmluZQlTQ05kRkFTVDE2CQkiaGQiCQkvKiBpbnRfZmFzdDE2X3QgKi8KKyNkZWZpbmUJU0NOZEZBU1QzMgkJImQiCQkvKiBpbnRfZmFzdDMyX3QgKi8KKyNkZWZpbmUJU0NOZEZBU1Q2NAkJImxsZCIJCS8qIGludF9mYXN0NjRfdCAqLworCisjZGVmaW5lCVNDTmRNQVgJCQkiamQiCQkvKiBpbnRtYXhfdCAqLworI2RlZmluZQlTQ05kUFRSCQkJImxkIgkJLyogaW50cHRyX3QgKi8KKworI2RlZmluZQlTQ05pOAkJCSJoaGkiCQkvKiBpbnQ4X3QgKi8KKyNkZWZpbmUJU0NOaTE2CQkJImhpIgkJLyogaW50MTZfdCAqLworI2RlZmluZQlTQ05pMzIJCQkiaSIJCS8qIGludDMyX3QgKi8KKyNkZWZpbmUJU0NOaTY0CQkJImxsaSIJCS8qIGludDY0X3QgKi8KKworI2RlZmluZQlTQ05pTEVBU1Q4CQkiaGhpIgkJLyogaW50X2xlYXN0OF90ICovCisjZGVmaW5lCVNDTmlMRUFTVDE2CQkiaGkiCQkvKiBpbnRfbGVhc3QxNl90ICovCisjZGVmaW5lCVNDTmlMRUFTVDMyCQkiaSIJCS8qIGludF9sZWFzdDMyX3QgKi8KKyNkZWZpbmUJU0NOaUxFQVNUNjQJCSJsbGkiCQkvKiBpbnRfbGVhc3Q2NF90ICovCisKKyNkZWZpbmUJU0NOaUZBU1Q4CQkiaGhpIgkJLyogaW50X2Zhc3Q4X3QgKi8KKyNkZWZpbmUJU0NOaUZBU1QxNgkJImhpIgkJLyogaW50X2Zhc3QxNl90ICovCisjZGVmaW5lCVNDTmlGQVNUMzIJCSJpIgkJLyogaW50X2Zhc3QzMl90ICovCisjZGVmaW5lCVNDTmlGQVNUNjQJCSJsbGkiCQkvKiBpbnRfZmFzdDY0X3QgKi8KKworI2RlZmluZQlTQ05pTUFYCQkJImppIgkJLyogaW50bWF4X3QgKi8KKyNkZWZpbmUJU0NOaVBUUgkJCSJsaSIJCS8qIGludHB0cl90ICovCisKKy8qIGZzY2FuZiBtYWNyb3MgZm9yIHVuc2lnbmVkIGludGVnZXJzICovCisjZGVmaW5lCVNDTm84CQkJImhobyIJCS8qIHVpbnQ4X3QgKi8KKyNkZWZpbmUJU0NObzE2CQkJImhvIgkJLyogdWludDE2X3QgKi8KKyNkZWZpbmUJU0NObzMyCQkJIm8iCQkvKiB1aW50MzJfdCAqLworI2RlZmluZQlTQ05vNjQJCQkibGxvIgkJLyogdWludDY0X3QgKi8KKworI2RlZmluZQlTQ05vTEVBU1Q4CQkiaGhvIgkJLyogdWludF9sZWFzdDhfdCAqLworI2RlZmluZQlTQ05vTEVBU1QxNgkJImhvIgkJLyogdWludF9sZWFzdDE2X3QgKi8KKyNkZWZpbmUJU0NOb0xFQVNUMzIJCSJvIgkJLyogdWludF9sZWFzdDMyX3QgKi8KKyNkZWZpbmUJU0NOb0xFQVNUNjQJCSJsbG8iCQkvKiB1aW50X2xlYXN0NjRfdCAqLworCisjZGVmaW5lCVNDTm9GQVNUOAkJImhobyIJCS8qIHVpbnRfZmFzdDhfdCAqLworI2RlZmluZQlTQ05vRkFTVDE2CQkiaG8iCQkvKiB1aW50X2Zhc3QxNl90ICovCisjZGVmaW5lCVNDTm9GQVNUMzIJCSJvIgkJLyogdWludF9mYXN0MzJfdCAqLworI2RlZmluZQlTQ05vRkFTVDY0CQkibGxvIgkJLyogdWludF9mYXN0NjRfdCAqLworCisjZGVmaW5lCVNDTm9NQVgJCQkiam8iCQkvKiB1aW50bWF4X3QgKi8KKyNkZWZpbmUJU0NOb1BUUgkJCSJsbyIJCS8qIHVpbnRwdHJfdCAqLworCisjZGVmaW5lCVNDTnU4CQkJImhodSIJCS8qIHVpbnQ4X3QgKi8KKyNkZWZpbmUJU0NOdTE2CQkJImh1IgkJLyogdWludDE2X3QgKi8KKyNkZWZpbmUJU0NOdTMyCQkJInUiCQkvKiB1aW50MzJfdCAqLworI2RlZmluZQlTQ051NjQJCQkibGx1IgkJLyogdWludDY0X3QgKi8KKworI2RlZmluZQlTQ051TEVBU1Q4CQkiaGh1IgkJLyogdWludF9sZWFzdDhfdCAqLworI2RlZmluZQlTQ051TEVBU1QxNgkJImh1IgkJLyogdWludF9sZWFzdDE2X3QgKi8KKyNkZWZpbmUJU0NOdUxFQVNUMzIJCSJ1IgkJLyogdWludF9sZWFzdDMyX3QgKi8KKyNkZWZpbmUJU0NOdUxFQVNUNjQJCSJsbHUiCQkvKiB1aW50X2xlYXN0NjRfdCAqLworCisjZGVmaW5lCVNDTnVGQVNUOAkJImhodSIJCS8qIHVpbnRfZmFzdDhfdCAqLworI2RlZmluZQlTQ051RkFTVDE2CQkiaHUiCQkvKiB1aW50X2Zhc3QxNl90ICovCisjZGVmaW5lCVNDTnVGQVNUMzIJCSJ1IgkJLyogdWludF9mYXN0MzJfdCAqLworI2RlZmluZQlTQ051RkFTVDY0CQkibGx1IgkJLyogdWludF9mYXN0NjRfdCAqLworCisjZGVmaW5lCVNDTnVNQVgJCQkianUiCQkvKiB1aW50bWF4X3QgKi8KKyNkZWZpbmUJU0NOdVBUUgkJCSJsdSIJCS8qIHVpbnRwdHJfdCAqLworCisjZGVmaW5lCVNDTng4CQkJImhoeCIJCS8qIHVpbnQ4X3QgKi8KKyNkZWZpbmUJU0NOeDE2CQkJImh4IgkJLyogdWludDE2X3QgKi8KKyNkZWZpbmUJU0NOeDMyCQkJIngiCQkvKiB1aW50MzJfdCAqLworI2RlZmluZQlTQ054NjQJCQkibGx4IgkJLyogdWludDY0X3QgKi8KKworI2RlZmluZQlTQ054TEVBU1Q4CQkiaGh4IgkJLyogdWludF9sZWFzdDhfdCAqLworI2RlZmluZQlTQ054TEVBU1QxNgkJImh4IgkJLyogdWludF9sZWFzdDE2X3QgKi8KKyNkZWZpbmUJU0NOeExFQVNUMzIJCSJ4IgkJLyogdWludF9sZWFzdDMyX3QgKi8KKyNkZWZpbmUJU0NOeExFQVNUNjQJCSJsbHgiCQkvKiB1aW50X2xlYXN0NjRfdCAqLworCisjZGVmaW5lCVNDTnhGQVNUOAkJImhoeCIJCS8qIHVpbnRfZmFzdDhfdCAqLworI2RlZmluZQlTQ054RkFTVDE2CQkiaHgiCQkvKiB1aW50X2Zhc3QxNl90ICovCisjZGVmaW5lCVNDTnhGQVNUMzIJCSJ4IgkJLyogdWludF9mYXN0MzJfdCAqLworI2RlZmluZQlTQ054RkFTVDY0CQkibGx4IgkJLyogdWludF9mYXN0NjRfdCAqLworCisjZGVmaW5lCVNDTnhNQVgJCQkiangiCQkvKiB1aW50bWF4X3QgKi8KKyNkZWZpbmUJU0NOeFBUUgkJCSJseCIJCS8qIHVpbnRwdHJfdCAqLworCisjZW5kaWYgLyogX19jcGx1c3BsdXMgfHwgX19TVERDX0ZPUk1BVF9NQUNST1MgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCWludG1heF90IHF1b3Q7CQkvKiBxdW90aWVudCAqLworCWludG1heF90IHJlbTsJCS8qIHJlbWFpbmRlciAqLworfSBpbWF4ZGl2X3Q7CisKK19fQkVHSU5fREVDTFMKK2ludG1heF90CWltYXhhYnMoaW50bWF4X3QpOworaW1heGRpdl90CWltYXhkaXYoaW50bWF4X3QsIGludG1heF90KTsKK2ludG1heF90CXN0cnRvaW1heChjb25zdCBjaGFyICosIGNoYXIgKiosIGludCk7Cit1aW50bWF4X3QJc3RydG91bWF4KGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgaW50KTsKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfSU5UVFlQRVNfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9sYXN0bG9nLmggYi9saWJjL2luY2x1ZGUvbGFzdGxvZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvbGFzdGxvZy5oCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvbGliZ2VuLmggYi9saWJjL2luY2x1ZGUvbGliZ2VuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVmYzc2YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9saWJnZW4uaApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9MSUJHRU5fSAorI2RlZmluZSBfTElCR0VOX0gKKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCitfX0JFR0lOX0RFQ0xTCisKKy8qIG91ciB2ZXJzaW9uIG9mIGRpcm5hbWUvYmFzZW5hbWUgZG9uJ3QgbW9kaWZ5IHRoZSBpbnB1dCBwYXRoICovCitleHRlcm4gY2hhciogIGRpcm5hbWUgKGNvbnN0IGNoYXIqICBwYXRoKTsKK2V4dGVybiBjaGFyKiAgYmFzZW5hbWUoY29uc3QgY2hhciogIHBhdGgpOworCisvKiBzcGVjaWFsIHRocmVhZC1zYWZlIEJpb25pYyB2ZXJzaW9ucworICoKKyAqIGlmICdidWZmZXInIGlzIE5VTEwsICdidWZmbGVuJyBpcyBpZ25vcmVkIGFuZCB0aGUgbGVuZ3RoIG9mIHRoZSByZXN1bHQgaXMgcmV0dXJuZWQKKyAqIG90aGVyd2lzZSwgcGxhY2UgcmVzdWx0IGluICdidWZmZXInCisgKgorICogYXQgbW9zdCBidWZmbGVuLTEgY2hhcmFjdGVycyB3cml0dGVuLCBwbHVzIGEgdGVybWluYXRpbmcgemVybworICoKKyAqIHJldHVybiBsZW5ndGggb2YgcmVzdWx0LCBvciAtMSBpbiBjYXNlIG9mIGVycm9yLCB3aXRoIGVycm5vIHNldCB0bzoKKyAqCisgKiAgICBFUkFOR0U6ICAgICAgICBidWZmZXIgaXMgdG9vIHNob3J0CisgKiAgICBFTkFNRVRPT0xPTkc6ICB0aGUgcmVzdWx0IGlzIHRvbyBsb25nIGZvciBhIHZhbGlkIHBhdGgKKyAqLworZXh0ZXJuIGludCAgICBkaXJuYW1lX3IoY29uc3QgY2hhciogIHBhdGgsIGNoYXIqICBidWZmZXIsIHNpemVfdCAgYnVmZmxlbik7CitleHRlcm4gaW50ICAgIGJhc2VuYW1lX3IoY29uc3QgY2hhciogIHBhdGgsIGNoYXIqICBidWZmZXIsIHNpemVfdCAgYnVmZmxlbik7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfTElCR0VOX0ggKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9saW1pdHMuaCBiL2xpYmMvaW5jbHVkZS9saW1pdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjA0ZTRkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL2xpbWl0cy5oCkBAIC0wLDAgKzEsOTYgQEAKKy8qCSRPcGVuQlNEOiBsaW1pdHMuaCx2IDEuMTMgMjAwNS8xMi8zMSAxOToyOTozOCBtaWxsZXJ0IEV4cCAkCSovCisvKgkkTmV0QlNEOiBsaW1pdHMuaCx2IDEuNyAxOTk0LzEwLzI2IDAwOjU2OjAwIGNnZCBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTg4IFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglAKCMpbGltaXRzLmgJNS45IChCZXJrZWxleSkgNC8zLzkxCisgKi8KKworI2lmbmRlZiBfTElNSVRTX0hfCisjZGVmaW5lCV9MSU1JVFNfSF8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorCisjaWYgX19QT1NJWF9WSVNJQkxFCisjZGVmaW5lCV9QT1NJWF9BUkdfTUFYCQk0MDk2CisjZGVmaW5lCV9QT1NJWF9DSElMRF9NQVgJMjUKKyNkZWZpbmUJX1BPU0lYX0xJTktfTUFYCQk4CisjZGVmaW5lCV9QT1NJWF9NQVhfQ0FOT04JMjU1CisjZGVmaW5lCV9QT1NJWF9NQVhfSU5QVVQJMjU1CisjZGVmaW5lCV9QT1NJWF9OQU1FX01BWAkJMTQKKyNkZWZpbmUJX1BPU0lYX05HUk9VUFNfTUFYCTAKKyNkZWZpbmUJX1BPU0lYX09QRU5fTUFYCQkxNgorI2RlZmluZQlfUE9TSVhfUEFUSF9NQVgJCTI1NgorI2RlZmluZSBfUE9TSVhfUElQRV9CVUYJCTUxMgorI2RlZmluZQlfUE9TSVhfUkVfRFVQX01BWAkyNTUKKyNkZWZpbmUgX1BPU0lYX1NTSVpFX01BWAkzMjc2NworI2RlZmluZSBfUE9TSVhfU1RSRUFNX01BWAk4CisjZGVmaW5lIF9QT1NJWF9TWU1MSU5LX01BWAkyNTUKKyNkZWZpbmUgX1BPU0lYX1NZTUxPT1BfTUFYCTgKKyNkZWZpbmUgX1BPU0lYX1RaTkFNRV9NQVgJMworCisjZGVmaW5lCV9QT1NJWDJfQkNfQkFTRV9NQVgJOTkKKyNkZWZpbmUJX1BPU0lYMl9CQ19ESU1fTUFYCTIwNDgKKyNkZWZpbmUJX1BPU0lYMl9CQ19TQ0FMRV9NQVgJOTkKKyNkZWZpbmUJX1BPU0lYMl9CQ19TVFJJTkdfTUFYCTEwMDAKKyNkZWZpbmUJX1BPU0lYMl9DT0xMX1dFSUdIVFNfTUFYCTIKKyNkZWZpbmUJX1BPU0lYMl9FWFBSX05FU1RfTUFYCTMyCisjZGVmaW5lCV9QT1NJWDJfTElORV9NQVgJMjA0OAorI2RlZmluZQlfUE9TSVgyX1JFX0RVUF9NQVgJX1BPU0lYX1JFX0RVUF9NQVgKKworI2lmIF9fUE9TSVhfVklTSUJMRSA+PSAyMDAxMTIKKyNkZWZpbmUgX1BPU0lYX1RUWV9OQU1FX01BWAk5CS8qIGluY2x1ZGVzIHRyYWlsaW5nIE5VTCAqLworI2RlZmluZSBfUE9TSVhfTE9HSU5fTkFNRV9NQVgJOQkvKiBpbmNsdWRlcyB0cmFpbGluZyBOVUwgKi8KKyNlbmRpZiAvKiBfX1BPU0lYX1ZJU0lCTEUgPj0gMjAwMTEyICovCisjZW5kaWYgLyogX19QT1NJWF9WSVNJQkxFICovCisKKyNpZiBfX1hQR19WSVNJQkxFCisjZGVmaW5lIFBBU1NfTUFYCQkxMjgJLyogX1BBU1NXT1JEX0xFTiBmcm9tIDxwd2QuaD4gKi8KKworI2RlZmluZSBOTF9BUkdNQVgJCTkKKyNkZWZpbmUgTkxfTEFOR01BWAkJMTQKKyNkZWZpbmUgTkxfTVNHTUFYCQkzMjc2NworI2RlZmluZSBOTF9OTUFYCQkJMQorI2RlZmluZSBOTF9TRVRNQVgJCTI1NQorI2RlZmluZSBOTF9URVhUTUFYCQkyNTUKKworI2RlZmluZSBUTVBfTUFYICAgICAgICAgICAgICAgICAzMDg5MTU3NzYKKyNlbmRpZiAvKiBfX1hQR19WSVNJQkxFICovCisKKyNpbmNsdWRlIDxzeXMvbGltaXRzLmg+CisKKyNpZiBfX1BPU0lYX1ZJU0lCTEUKKyNpbmNsdWRlIDxhcmNoL3N5c2xpbWl0cy5oPgorI2VuZGlmCisKKyNpZm5kZWYgUEFHRVNJWkUKKyNkZWZpbmUgIFBBR0VTSVpFICBQQUdFX1NJWkUKKyNlbmRpZgorCisjZW5kaWYgLyogIV9MSU1JVFNfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9sb2NhbGUuaCBiL2xpYmMvaW5jbHVkZS9sb2NhbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWI1YzdkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL2xvY2FsZS5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX0xPQ0FMRV9IXworI2RlZmluZSBfTE9DQUxFX0hfCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKworX19CRUdJTl9ERUNMUworCitlbnVtIHsKKyAgICBMQ19DVFlQRSAgICAgPSAwLAorICAgIExDX05VTUVSSUMgICA9IDEsCisgICAgTENfVElNRSAgICAgID0gMiwKKyAgICBMQ19DT0xMQVRFICAgPSAzLAorICAgIExDX01PTkVUQVJZICA9IDQsCisgICAgTENfTUVTU0FHRVMgID0gNSwKKyAgICBMQ19BTEwgICAgICAgPSA2LAorICAgIExDX1BBUEVSICAgICA9IDcsCisgICAgTENfTkFNRSAgICAgID0gOCwKKyAgICBMQ19BRERSRVNTICAgPSA5LAorCisgICAgTENfVEVMRVBIT05FICAgICAgPSAxMCwKKyAgICBMQ19NRUFTVVJFTUVOVCAgICA9IDExLAorICAgIExDX0lERU5USUZJQ0FUSU9OID0gMTIKK307CisKK2V4dGVybiBjaGFyICpzZXRsb2NhbGUoaW50IGNhdGVnb3J5LCBjb25zdCBjaGFyICpsb2NhbGUpOworCisvKiBNYWtlIGxpYnN0ZGMrKy12MyBoYXBweS4gICovCitzdHJ1Y3QgbGNvbnYgeyB9Oworc3RydWN0IGxjb252ICpsb2NhbGVjb252KHZvaWQpOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX0xPQ0FMRV9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL21hbGxvYy5oIGIvbGliYy9pbmNsdWRlL21hbGxvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4NjQyODYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvbWFsbG9jLmgKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX01BTExPQ19IXworI2RlZmluZSBfTUFMTE9DX0hfCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworX19CRUdJTl9ERUNMUworCitleHRlcm4gX19tYWxsb2NmdW5jIHZvaWQqICBtYWxsb2Moc2l6ZV90KTsKK2V4dGVybiBfX21hbGxvY2Z1bmMgdm9pZCogIGNhbGxvYyhzaXplX3QsIHNpemVfdCk7CitleHRlcm4gX19tYWxsb2NmdW5jIHZvaWQqICByZWFsbG9jKHZvaWQgKiwgc2l6ZV90KTsKK2V4dGVybiAgICAgICAgICAgICAgICB2b2lkICAgZnJlZSh2b2lkICopOworCitleHRlcm4gdm9pZCogICBtZW1hbGlnbihzaXplX3QgIGFsaWdubWVudCwgc2l6ZV90ICBieXRlc2l6ZSk7CitleHRlcm4gdm9pZCogICB2YWxsb2Moc2l6ZV90ICBieXRlc2l6ZSk7CitleHRlcm4gdm9pZCogICBwdmFsbG9jKHNpemVfdCAgYnl0ZXNpemUpOworZXh0ZXJuIGludCAgICAgbWFsbG9wdChpbnQgIHBhcmFtX251bWJlciwgaW50ICBwYXJhbV92YWx1ZSk7CitleHRlcm4gc2l6ZV90ICBtYWxsb2NfZm9vdHByaW50KHZvaWQpOworZXh0ZXJuIHNpemVfdCAgbWFsbG9jX21heF9mb290cHJpbnQodm9pZCk7CisKK3N0cnVjdCBtYWxsaW5mbyB7CisgICAgc2l6ZV90IGFyZW5hOyAgICAvKiBub24tbW1hcHBlZCBzcGFjZSBhbGxvY2F0ZWQgZnJvbSBzeXN0ZW0gKi8KKyAgICBzaXplX3Qgb3JkYmxrczsgIC8qIG51bWJlciBvZiBmcmVlIGNodW5rcyAqLworICAgIHNpemVfdCBzbWJsa3M7ICAgLyogYWx3YXlzIDAgKi8KKyAgICBzaXplX3QgaGJsa3M7ICAgIC8qIGFsd2F5cyAwICovCisgICAgc2l6ZV90IGhibGtoZDsgICAvKiBzcGFjZSBpbiBtbWFwcGVkIHJlZ2lvbnMgKi8KKyAgICBzaXplX3QgdXNtYmxrczsgIC8qIG1heGltdW0gdG90YWwgYWxsb2NhdGVkIHNwYWNlICovCisgICAgc2l6ZV90IGZzbWJsa3M7ICAvKiBhbHdheXMgMCAqLworICAgIHNpemVfdCB1b3JkYmxrczsgLyogdG90YWwgYWxsb2NhdGVkIHNwYWNlICovCisgICAgc2l6ZV90IGZvcmRibGtzOyAvKiB0b3RhbCBmcmVlIHNwYWNlICovCisgICAgc2l6ZV90IGtlZXBjb3N0OyAvKiByZWxlYXNhYmxlICh2aWEgbWFsbG9jX3RyaW0pIHNwYWNlICovCit9OworCitleHRlcm4gc3RydWN0IG1hbGxpbmZvICBtYWxsaW5mbyh2b2lkKTsKKworCisvKgorICBtYWxsb2NfdXNhYmxlX3NpemUodm9pZCogcCk7CisKKyAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHlvdSBjYW4gYWN0dWFsbHkgdXNlIGluCisgIGFuIGFsbG9jYXRlZCBjaHVuaywgd2hpY2ggbWF5IGJlIG1vcmUgdGhhbiB5b3UgcmVxdWVzdGVkIChhbHRob3VnaAorICBvZnRlbiBub3QpIGR1ZSB0byBhbGlnbm1lbnQgYW5kIG1pbmltdW0gc2l6ZSBjb25zdHJhaW50cy4KKyAgWW91IGNhbiB1c2UgdGhpcyBtYW55IGJ5dGVzIHdpdGhvdXQgd29ycnlpbmcgYWJvdXQKKyAgb3ZlcndyaXRpbmcgb3RoZXIgYWxsb2NhdGVkIG9iamVjdHMuIFRoaXMgaXMgbm90IGEgcGFydGljdWxhcmx5IGdyZWF0CisgIHByb2dyYW1taW5nIHByYWN0aWNlLiBtYWxsb2NfdXNhYmxlX3NpemUgY2FuIGJlIG1vcmUgdXNlZnVsIGluCisgIGRlYnVnZ2luZyBhbmQgYXNzZXJ0aW9ucywgZm9yIGV4YW1wbGU6CisKKyAgcCA9IG1hbGxvYyhuKTsKKyAgYXNzZXJ0KG1hbGxvY191c2FibGVfc2l6ZShwKSA+PSAyNTYpOworKi8KK2V4dGVybiBzaXplX3QgbWFsbG9jX3VzYWJsZV9zaXplKHZvaWQqICBibG9jayk7CisKKy8qCisgIG1hbGxvY19zdGF0cygpOworICBQcmludHMgb24gc3RkZXJyIHRoZSBhbW91bnQgb2Ygc3BhY2Ugb2J0YWluZWQgZnJvbSB0aGUgc3lzdGVtIChib3RoCisgIHZpYSBzYnJrIGFuZCBtbWFwKSwgdGhlIG1heGltdW0gYW1vdW50ICh3aGljaCBtYXkgYmUgbW9yZSB0aGFuCisgIGN1cnJlbnQgaWYgbWFsbG9jX3RyaW0gYW5kL29yIG11bm1hcCBnb3QgY2FsbGVkKSwgYW5kIHRoZSBjdXJyZW50CisgIG51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQgdmlhIG1hbGxvYyAob3IgcmVhbGxvYywgZXRjKSBidXQgbm90IHlldAorICBmcmVlZC4gTm90ZSB0aGF0IHRoaXMgaXMgdGhlIG51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQsIG5vdCB0aGUKKyAgbnVtYmVyIHJlcXVlc3RlZC4gSXQgd2lsbCBiZSBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyIHJlcXVlc3RlZAorICBiZWNhdXNlIG9mIGFsaWdubWVudCBhbmQgYm9va2tlZXBpbmcgb3ZlcmhlYWQuIEJlY2F1c2UgaXQgaW5jbHVkZXMKKyAgYWxpZ25tZW50IHdhc3RhZ2UgYXMgYmVpbmcgaW4gdXNlLCB0aGlzIGZpZ3VyZSBtYXkgYmUgZ3JlYXRlciB0aGFuCisgIHplcm8gZXZlbiB3aGVuIG5vIHVzZXItbGV2ZWwgY2h1bmtzIGFyZSBhbGxvY2F0ZWQuCisKKyAgVGhlIHJlcG9ydGVkIGN1cnJlbnQgYW5kIG1heGltdW0gc3lzdGVtIG1lbW9yeSBjYW4gYmUgaW5hY2N1cmF0ZSBpZgorICBhIHByb2dyYW0gbWFrZXMgb3RoZXIgY2FsbHMgdG8gc3lzdGVtIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9ucworICAobm9ybWFsbHkgc2Jyaykgb3V0c2lkZSBvZiBtYWxsb2MuCisKKyAgbWFsbG9jX3N0YXRzIHByaW50cyBvbmx5IHRoZSBtb3N0IGNvbW1vbmx5IGludGVyZXN0aW5nIHN0YXRpc3RpY3MuCisgIE1vcmUgaW5mb3JtYXRpb24gY2FuIGJlIG9idGFpbmVkIGJ5IGNhbGxpbmcgbWFsbGluZm8uCisqLworZXh0ZXJuIHZvaWQgIG1hbGxvY19zdGF0cyh2b2lkKTsKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9NQUxMT0NfSF8gKi8KKwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL21lbW9yeS5oIGIvbGliYy9pbmNsdWRlL21lbW9yeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvbWVtb3J5LmgKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9tbnRlbnQuaCBiL2xpYmMvaW5jbHVkZS9tbnRlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjhmZjc0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL21udGVudC5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX01OVEVOVF9IXworI2RlZmluZSBfTU5URU5UX0hfCisKKworI2RlZmluZSBNTlRUWVBFX0lHTk9SRSAiaWdub3JlIgorCitzdHJ1Y3QgbW50ZW50Cit7CisgICAgY2hhciogbW50X2ZzbmFtZTsKKyAgICBjaGFyKiBtbnRfZGlyOworICAgIGNoYXIqIG1udF90eXBlOworICAgIGNoYXIqIG1udF9vcHRzOworICAgIGludCBtbnRfZnJlcTsKKyAgICBpbnQgbW50X3Bhc3NubzsKK307CisKKworX19CRUdJTl9ERUNMUworCisKK3N0cnVjdCBtbnRlbnQqIGdldG1udGVudChGSUxFKik7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL25ldC9ldGhlcnR5cGVzLmggYi9saWJjL2luY2x1ZGUvbmV0L2V0aGVydHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2ZkMmNkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL25ldC9ldGhlcnR5cGVzLmgKQEAgLTAsMCArMSwzMTMgQEAKKy8qCSROZXRCU0Q6IGV0aGVydHlwZXMuaCx2IDEuMTcgMjAwNS8xMi8xMCAyMzoyMTozOCBlbGFkIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODIsIDE5ODYsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglAKCMpaWZfZXRoZXIuaAk4LjEgKEJlcmtlbGV5KSA2LzEwLzkzCisgKi8KKworLyoKKyAqIEV0aGVybmV0IHByb3RvY29sIHR5cGVzLgorICoKKyAqIEFjY29yZGluZyB0byAiYXNzaWduZWQgbnVtYmVycyIsIHRoZSBFdGhlcm5ldCBwcm90b2NvbCBudW1iZXJzIGFyZSBhbHNvCisgKiB1c2VkIGFzIEFSUCBwcm90b2NvbCB0eXBlIG51bWJlcnMuCisgKgorICogSSBmYWN0b3IgdGhlbSBvdXQgaGVyZSB0byBhdm9pZCBwdWxsaW5nIGFsbCB0aGUgRXRoZXJuZXQgaGVhZGVyIGZpbGUKKyAqIGludG8gdGhlIGhhcmR3YXJlIGluZGVwZW5kZW50IEFSUCBjb2RlLiAtaXMKKyAqCisgKiBBZGRpdGlvbmFsIHNvdXJjZXMgb2YgaW5mb3JtYXRpb246CisgKglodHRwOi8vd3d3Lm1pdC5lZHUvfm1hcC9FdGhlcm5ldC9FdGhlcm5ldC50eHQKKyAqCWZ0cDovL3ZlbmVyYS5pc2kuZWR1L2luLW5vdGVzL2lhbmEvYXNzaWdubWVudHMvZXRoZXJuZXQtbnVtYmVycworICoKKyAqLworCisjaWZuZGVmIF9ORVRfRVRIRVJUWVBFU19IXworI2RlZmluZQlfTkVUX0VUSEVSVFlQRVNfSF8KKworLyoKKyAqICBOT1RFOiAweDAwMDAtMHgwNURDICgwLi4xNTAwKSBhcmUgZ2VuZXJhbGx5IElFRUUgODAyLjMgbGVuZ3RoIGZpZWxkcy4KKyAqICBIb3dldmVyLCB0aGVyZSBhcmUgc29tZSBjb25mbGljdHMuCisgKi8KKworI2RlZmluZQlFVEhFUlRZUEVfODAyMwkJMHgwMDA0CS8qIElFRUUgODAyLjMgcGFja2V0ICovCisJCSAgIC8qIDB4MDEwMSAuLiAweDFGRgkgICBFeHBlcmltZW50YWwgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX1BVUAkJMHgwMjAwCS8qIFhlcm94IFBVUCBwcm90b2NvbCAtIHNlZSAwQTAwICovCisjZGVmaW5lCUVUSEVSVFlQRV9QVVBBVAkJMHgwMjAwCS8qIFBVUCBBZGRyZXNzIFRyYW5zbGF0aW9uIC0gc2VlIDBBMDEgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX1NQUklURQkweDA1MDAJLyogPz8/ICovCisJCQkgICAgIC8qIDB4MDQwMAkgICBOaXhkb3JmICovCisjZGVmaW5lCUVUSEVSVFlQRV9OUwkJMHgwNjAwCS8qIFhOUyAqLworI2RlZmluZQlFVEhFUlRZUEVfTlNBVAkJMHgwNjAxCS8qIFhOUyBBZGRyZXNzIFRyYW5zbGF0aW9uICgzTWIgb25seSkgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0RMT0cxIAkweDA2NjAJLyogRExPRyAoPykgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0RMT0cyIAkweDA2NjEJLyogRExPRyAoPykgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0lQCQkweDA4MDAJLyogSVAgcHJvdG9jb2wgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX1g3NQkJMHgwODAxCS8qIFguNzUgSW50ZXJuZXQgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX05CUwkJMHgwODAyCS8qIE5CUyBJbnRlcm5ldCAqLworI2RlZmluZQlFVEhFUlRZUEVfRUNNQQkJMHgwODAzCS8qIEVDTUEgSW50ZXJuZXQgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0NIQU9TIAkweDA4MDQJLyogQ0hBT1NuZXQgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX1gyNQkJMHgwODA1CS8qIFguMjUgTGV2ZWwgMyAqLworI2RlZmluZQlFVEhFUlRZUEVfQVJQCQkweDA4MDYJLyogQWRkcmVzcyByZXNvbHV0aW9uIHByb3RvY29sICovCisjZGVmaW5lCUVUSEVSVFlQRV9OU0NPTVBBVAkweDA4MDcJLyogWE5TIENvbXBhdGliaWxpdHkgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0ZSQVJQIAkweDA4MDgJLyogRnJhbWUgUmVsYXkgQVJQIChSRkMxNzAxKSAqLworCQkJICAgICAvKiAweDA4MUMJICAgU3ltYm9saWNzIFByaXZhdGUgKi8KKwkJICAgIC8qIDB4MDg4OCAtIDB4MDg4QQkgICBYeXBsZXggKi8KKyNkZWZpbmUJRVRIRVJUWVBFX1VCREVCVUcJMHgwOTAwCS8qIFVuZ2VybWFubi1CYXNzIG5ldHdvcmsgZGVidWdnZXIgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0lFRUVQVVAJMHgwQTAwCS8qIFhlcm94IElFRUU4MDIuMyBQVVAgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0lFRUVQVVBBVAkweDBBMDEJLyogWGVyb3ggSUVFRTgwMi4zIFBVUCBBZGRyZXNzIFRyYW5zbGF0aW9uICovCisjZGVmaW5lCUVUSEVSVFlQRV9WSU5FUyAJMHgwQkFECS8qIEJhbnlhbiBWSU5FUyAqLworI2RlZmluZQlFVEhFUlRZUEVfVklORVNMT09QCTB4MEJBRQkvKiBCYW55YW4gVklORVMgTG9vcGJhY2sgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX1ZJTkVTRUNITwkweDBCQUYJLyogQmFueWFuIFZJTkVTIEVjaG8gKi8KKworLyoJCSAgICAgICAweDEwMDAgLSAweDEwMEYJICAgQmVya2VsZXkgVHJhaWxlciAqLworLyoKKyAqIFRoZSBFVEhFUlRZUEVfTlRSQUlMRVIgcGFja2V0IHR5cGVzIHN0YXJ0aW5nIGF0IEVUSEVSVFlQRV9UUkFJTCBoYXZlCisgKiAodHlwZS1FVEhFUlRZUEVfVFJBSUwpKjUxMiBieXRlcyBvZiBkYXRhIGZvbGxvd2VkCisgKiBieSBhbiBFVEhFUiB0eXBlIChhcyBnaXZlbiBhYm92ZSkgYW5kIHRoZW4gdGhlICh2YXJpYWJsZS1sZW5ndGgpIGhlYWRlci4KKyAqLworI2RlZmluZQlFVEhFUlRZUEVfVFJBSUwJCTB4MTAwMAkvKiBUcmFpbGVyIHBhY2tldCAqLworI2RlZmluZQlFVEhFUlRZUEVfTlRSQUlMRVIJMTYKKworI2RlZmluZQlFVEhFUlRZUEVfRENBCQkweDEyMzQJLyogRENBIC0gTXVsdGljYXN0ICovCisjZGVmaW5lCUVUSEVSVFlQRV9WQUxJRCAJMHgxNjAwCS8qIFZBTElEIHN5c3RlbSBwcm90b2NvbCAqLworI2RlZmluZQlFVEhFUlRZUEVfRE9HRklHSFQJMHgxOTg5CS8qIEFydGlmaWNpYWwgSG9yaXpvbnMgKCJBdmlhdG9yIiBkb2dmaWdodCBzaW11bGF0b3IgW29uIFN1bl0pICovCisjZGVmaW5lCUVUSEVSVFlQRV9SQ0wJCTB4MTk5NQkvKiBEYXRhcG9pbnQgQ29ycG9yYXRpb24gKFJDTCBsYW4gcHJvdG9jb2wpICovCisKKwkJCQkJLyogVGhlIGZvbGxvd2luZyAzQzB4IHR5cGVzCisJCQkJCSAgIGFyZSB1bnJlZ2lzdGVyZWQ6ICovCisjZGVmaW5lCUVUSEVSVFlQRV9OQlBWQ0QJMHgzQzAwCS8qIDNDb20gTkJQIHZpcnR1YWwgY2lyY3VpdCBkYXRhZ3JhbSAobGlrZSBYTlMgU1BQKSBub3QgcmVnaXN0ZXJlZCAqLworI2RlZmluZQlFVEhFUlRZUEVfTkJQU0NECTB4M0MwMQkvKiAzQ29tIE5CUCBTeXN0ZW0gY29udHJvbCBkYXRhZ3JhbSBub3QgcmVnaXN0ZXJlZCAqLworI2RlZmluZQlFVEhFUlRZUEVfTkJQQ1JFUQkweDNDMDIJLyogM0NvbSBOQlAgQ29ubmVjdCByZXF1ZXN0ICh2aXJ0dWFsIGNjdCkgbm90IHJlZ2lzdGVyZWQgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX05CUENSU1AJMHgzQzAzCS8qIDNDb20gTkJQIENvbm5lY3QgcmVwc29uc2Ugbm90IHJlZ2lzdGVyZWQgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX05CUENDCQkweDNDMDQJLyogM0NvbSBOQlAgQ29ubmVjdCBjb21wbGV0ZSBub3QgcmVnaXN0ZXJlZCAqLworI2RlZmluZQlFVEhFUlRZUEVfTkJQQ0xSRVEJMHgzQzA1CS8qIDNDb20gTkJQIENsb3NlIHJlcXVlc3QgKHZpcnR1YWwgY2N0KSBub3QgcmVnaXN0ZXJlZCAqLworI2RlZmluZQlFVEhFUlRZUEVfTkJQQ0xSU1AJMHgzQzA2CS8qIDNDb20gTkJQIENsb3NlIHJlc3BvbnNlIG5vdCByZWdpc3RlcmVkICovCisjZGVmaW5lCUVUSEVSVFlQRV9OQlBERwkJMHgzQzA3CS8qIDNDb20gTkJQIERhdGFncmFtIChsaWtlIFhOUyBJRFApIG5vdCByZWdpc3RlcmVkICovCisjZGVmaW5lCUVUSEVSVFlQRV9OQlBER0IJMHgzQzA4CS8qIDNDb20gTkJQIERhdGFncmFtIGJyb2FkY2FzdCBub3QgcmVnaXN0ZXJlZCAqLworI2RlZmluZQlFVEhFUlRZUEVfTkJQQ0xBSU0JMHgzQzA5CS8qIDNDb20gTkJQIENsYWltIE5ldEJJT1MgbmFtZSBub3QgcmVnaXN0ZXJlZCAqLworI2RlZmluZQlFVEhFUlRZUEVfTkJQRExURQkweDNDMEEJLyogM0NvbSBOQlAgRGVsZXRlIE5ldGJpb3MgbmFtZSBub3QgcmVnaXN0ZXJlZCAqLworI2RlZmluZQlFVEhFUlRZUEVfTkJQUkFTCTB4M0MwQgkvKiAzQ29tIE5CUCBSZW1vdGUgYWRhcHRvciBzdGF0dXMgcmVxdWVzdCBub3QgcmVnaXN0ZXJlZCAqLworI2RlZmluZQlFVEhFUlRZUEVfTkJQUkFSCTB4M0MwQwkvKiAzQ29tIE5CUCBSZW1vdGUgYWRhcHRvciByZXNwb25zZSBub3QgcmVnaXN0ZXJlZCAqLworI2RlZmluZQlFVEhFUlRZUEVfTkJQUlNUCTB4M0MwRAkvKiAzQ29tIE5CUCBSZXNldCBub3QgcmVnaXN0ZXJlZCAqLworCisjZGVmaW5lCUVUSEVSVFlQRV9QQ1MJCTB4NDI0MgkvKiBQQ1MgQmFzaWMgQmxvY2sgUHJvdG9jb2wgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0lNTEJMRElBRwkweDQyNEMJLyogSW5mb3JtYXRpb24gTW9kZXMgTGl0dGxlIEJpZyBMQU4gZGlhZ25vc3RpYyAqLworI2RlZmluZQlFVEhFUlRZUEVfRElERExFCTB4NDMyMQkvKiBUSEQgLSBEaWRkbGUgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0lNTEJMCQkweDRDNDIJLyogSW5mb3JtYXRpb24gTW9kZXMgTGl0dGxlIEJpZyBMQU4gKi8KKyNkZWZpbmUJRVRIRVJUWVBFX1NJTU5FVAkweDUyMDgJLyogQkJOIFNpbW5ldCBQcml2YXRlICovCisjZGVmaW5lCUVUSEVSVFlQRV9ERUNFWFBFUgkweDYwMDAJLyogREVDIFVuYXNzaWduZWQsIGV4cGVyaW1lbnRhbCAqLworI2RlZmluZQlFVEhFUlRZUEVfTU9QREwJCTB4NjAwMQkvKiBERUMgTU9QIGR1bXAvbG9hZCAqLworI2RlZmluZQlFVEhFUlRZUEVfTU9QUkMJCTB4NjAwMgkvKiBERUMgTU9QIHJlbW90ZSBjb25zb2xlICovCisjZGVmaW5lCUVUSEVSVFlQRV9ERUNuZXQJMHg2MDAzCS8qIERFQyBERUNORVQgUGhhc2UgSVYgcm91dGUgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0ROCQlFVEhFUlRZUEVfREVDbmV0CS8qIGxpYnBjYXAsIHRjcGR1bXAgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0xBVAkJMHg2MDA0CS8qIERFQyBMQVQgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0RFQ0RJQUcJMHg2MDA1CS8qIERFQyBkaWFnbm9zdGljIHByb3RvY29sIChhdCBpbnRlcmZhY2UgaW5pdGlhbGl6YXRpb24/KSAqLworI2RlZmluZQlFVEhFUlRZUEVfREVDQ1VTVAkweDYwMDYJLyogREVDIGN1c3RvbWVyIHByb3RvY29sICovCisjZGVmaW5lCUVUSEVSVFlQRV9TQ0EJCTB4NjAwNwkvKiBERUMgTEFWQywgU0NBICovCisjZGVmaW5lCUVUSEVSVFlQRV9BTUJFUgkJMHg2MDA4CS8qIERFQyBBTUJFUiAqLworI2RlZmluZQlFVEhFUlRZUEVfREVDTVVNUFMJMHg2MDA5CS8qIERFQyBNVU1QUyAqLworCQkgICAgLyogMHg2MDEwIC0gMHg2MDE0CSAgIDNDb20gQ29ycG9yYXRpb24gKi8KKyNkZWZpbmUJRVRIRVJUWVBFX1RSQU5TRVRIRVIJMHg2NTU4CS8qIFRyYW5zIEV0aGVyIEJyaWRnaW5nIChSRkMxNzAxKSovCisjZGVmaW5lCUVUSEVSVFlQRV9SQVdGUgkJMHg2NTU5CS8qIFJhdyBGcmFtZSBSZWxheSAoUkZDMTcwMSkgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX1VCREwJCTB4NzAwMAkvKiBVbmdlcm1hbm4tQmFzcyBkb3dubG9hZCAqLworI2RlZmluZQlFVEhFUlRZUEVfVUJOSVUJCTB4NzAwMQkvKiBVbmdlcm1hbm4tQmFzcyBOSVVzICovCisjZGVmaW5lCUVUSEVSVFlQRV9VQkRJQUdMT09QCTB4NzAwMgkvKiBVbmdlcm1hbm4tQmFzcyBkaWFnbm9zdGljL2xvb3BiYWNrICovCisjZGVmaW5lCUVUSEVSVFlQRV9VQk5NQwkJMHg3MDAzCS8qIFVuZ2VybWFubi1CYXNzID8/PyAoTk1DIHRvL2Zyb20gVUIgQnJpZGdlKSAqLworI2RlZmluZQlFVEhFUlRZUEVfVUJCU1QJCTB4NzAwNQkvKiBVbmdlcm1hbm4tQmFzcyBCcmlkZ2UgU3Bhbm5pbmcgVHJlZSAqLworI2RlZmluZQlFVEhFUlRZUEVfT1M5CQkweDcwMDcJLyogT1MvOSBNaWNyb3dhcmUgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX09TOU5FVAkweDcwMDkJLyogT1MvOSBOZXQ/ICovCisJCSAgICAvKiAweDcwMjAgLSAweDcwMjkJICAgTFJUIChFbmdsYW5kKSAobm93IFNpbnRyb20pICovCisjZGVmaW5lCUVUSEVSVFlQRV9SQUNBTAkJMHg3MDMwCS8qIFJhY2FsLUludGVybGFuICovCisjZGVmaW5lCUVUSEVSVFlQRV9QUklNRU5UUwkweDcwMzEJLyogUHJpbWUgTlRTIChOZXR3b3JrIFRlcm1pbmFsIFNlcnZpY2UpICovCisjZGVmaW5lCUVUSEVSVFlQRV9DQUJMRVRST04JMHg3MDM0CS8qIENhYmxldHJvbiAqLworI2RlZmluZQlFVEhFUlRZUEVfQ1JPTlVTVkxOCTB4ODAwMwkvKiBDcm9udXMgVkxOICovCisjZGVmaW5lCUVUSEVSVFlQRV9DUk9OVVMJMHg4MDA0CS8qIENyb251cyBEaXJlY3QgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0hQCQkweDgwMDUJLyogSFAgUHJvYmUgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX05FU1RBUgkweDgwMDYJLyogTmVzdGFyICovCisjZGVmaW5lCUVUSEVSVFlQRV9BVFRTVEFORk9SRAkweDgwMDgJLyogQVQmVC9TdGFuZm9yZCAobG9jYWwgdXNlKSAqLworI2RlZmluZQlFVEhFUlRZUEVfRVhDRUxBTgkweDgwMTAJLyogRXhjZWxhbiAqLworI2RlZmluZQlFVEhFUlRZUEVfU0dfRElBRwkweDgwMTMJLyogU0dJIGRpYWdub3N0aWMgdHlwZSAqLworI2RlZmluZQlFVEhFUlRZUEVfU0dfTkVUR0FNRVMJMHg4MDE0CS8qIFNHSSBuZXR3b3JrIGdhbWVzICovCisjZGVmaW5lCUVUSEVSVFlQRV9TR19SRVNWCTB4ODAxNQkvKiBTR0kgcmVzZXJ2ZWQgdHlwZSAqLworI2RlZmluZQlFVEhFUlRZUEVfU0dfQk9VTkNFCTB4ODAxNgkvKiBTR0kgYm91bmNlIHNlcnZlciAqLworI2RlZmluZQlFVEhFUlRZUEVfQVBPTExPRE9NQUlOCTB4ODAxOQkvKiBBcG9sbG8gRE9NQUlOICovCisjZGVmaW5lCUVUSEVSVFlQRV9UWU1TSEFSRQkweDgwMkUJLyogVHltZXNoYXJlICovCisjZGVmaW5lCUVUSEVSVFlQRV9USUdBTgkJMHg4MDJGCS8qIFRpZ2FuLCBJbmMuICovCisjZGVmaW5lCUVUSEVSVFlQRV9SRVZBUlAJMHg4MDM1CS8qIFJldmVyc2UgYWRkciByZXNvbHV0aW9uIHByb3RvY29sICovCisjZGVmaW5lCUVUSEVSVFlQRV9BRU9OSUMJMHg4MDM2CS8qIEFlb25pYyBTeXN0ZW1zICovCisjZGVmaW5lCUVUSEVSVFlQRV9JUFhORVcJMHg4MDM3CS8qIElQWCAoTm92ZWxsIE5ldHdhcmU/KSAqLworI2RlZmluZQlFVEhFUlRZUEVfTEFOQlJJREdFCTB4ODAzOAkvKiBERUMgTEFOQnJpZGdlICovCisjZGVmaW5lCUVUSEVSVFlQRV9EU01ECTB4ODAzOQkvKiBERUMgRFNNL0REUCAqLworI2RlZmluZQlFVEhFUlRZUEVfQVJHT05BVVQJMHg4MDNBCS8qIERFQyBBcmdvbmF1dCBDb25zb2xlICovCisjZGVmaW5lCUVUSEVSVFlQRV9WQVhFTE4JMHg4MDNCCS8qIERFQyBWQVhFTE4gKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0RFQ0ROUwkweDgwM0MJLyogREVDIEROUyBOYW1pbmcgU2VydmljZSAqLworI2RlZmluZQlFVEhFUlRZUEVfRU5DUllQVAkweDgwM0QJLyogREVDIEV0aGVybmV0IEVuY3J5cHRpb24gKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0RFQ0RUUwkweDgwM0UJLyogREVDIERpc3RyaWJ1dGVkIFRpbWUgU2VydmljZSAqLworI2RlZmluZQlFVEhFUlRZUEVfREVDTFRNCTB4ODAzRgkvKiBERUMgTEFOIFRyYWZmaWMgTW9uaXRvciAqLworI2RlZmluZQlFVEhFUlRZUEVfREVDTkVUQklPUwkweDgwNDAJLyogREVDIFBBVEhXT1JLUyBERUNuZXQgTkVUQklPUyBFbXVsYXRpb24gKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0RFQ0xBU1QJMHg4MDQxCS8qIERFQyBMb2NhbCBBcmVhIFN5c3RlbSBUcmFuc3BvcnQgKi8KKwkJCSAgICAgLyogMHg4MDQyCSAgIERFQyBVbmFzc2lnbmVkICovCisjZGVmaW5lCUVUSEVSVFlQRV9QTEFOTklORwkweDgwNDQJLyogUGxhbm5pbmcgUmVzZWFyY2ggQ29ycC4gKi8KKwkJICAgIC8qIDB4ODA0NiAtIDB4ODA0NwkgICBBVCZUICovCisjZGVmaW5lCUVUSEVSVFlQRV9ERUNBTQkJMHg4MDQ4CS8qIERFQyBBdmFpbGFiaWxpdHkgTWFuYWdlciBmb3IgRGlzdHJpYnV0ZWQgU3lzdGVtcyBERUNhbWRzIChidXQgc29tZW9uZSBhdCBERUMgc2F5cyBub3QpICovCisjZGVmaW5lCUVUSEVSVFlQRV9FWFBFUkRBVEEJMHg4MDQ5CS8qIEV4cGVyRGF0YSAqLworI2RlZmluZQlFVEhFUlRZUEVfVkVYUAkJMHg4MDVCCS8qIFN0YW5mb3JkIFYgS2VybmVsIGV4cC4gKi8KKyNkZWZpbmUJRVRIRVJUWVBFX1ZQUk9ECQkweDgwNUMJLyogU3RhbmZvcmQgViBLZXJuZWwgcHJvZC4gKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0VTCQkweDgwNUQJLyogRXZhbnMgJiBTdXRoZXJsYW5kICovCisjZGVmaW5lCUVUSEVSVFlQRV9MSVRUTEUJMHg4MDYwCS8qIExpdHRsZSBNYWNoaW5lcyAqLworI2RlZmluZQlFVEhFUlRZUEVfQ09VTlRFUlBPSU5UCTB4ODA2MgkvKiBDb3VudGVycG9pbnQgQ29tcHV0ZXJzICovCisJCSAgICAvKiAweDgwNjUgLSAweDgwNjYJICAgVW5pdi4gb2YgTWFzcyBAIEFtaGVyc3QgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX1ZFRUNPCQkweDgwNjcJLyogVmVlY28gSW50ZWdyYXRlZCBBdXRvLiAqLworI2RlZmluZQlFVEhFUlRZUEVfR0VORFlOCTB4ODA2OAkvKiBHZW5lcmFsIER5bmFtaWNzICovCisjZGVmaW5lCUVUSEVSVFlQRV9BVFQJCTB4ODA2OQkvKiBBVCZUICovCisjZGVmaW5lCUVUSEVSVFlQRV9BVVRPUEhPTgkweDgwNkEJLyogQXV0b3Bob24gKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0NPTURFU0lHTgkweDgwNkMJLyogQ29tRGVzaWduICovCisjZGVmaW5lCUVUSEVSVFlQRV9DT01QVUdSQVBISUMJMHg4MDZECS8qIENvbXB1Z3JhcGhpYyBDb3Jwb3JhdGlvbiAqLworCQkgICAgLyogMHg4MDZFIC0gMHg4MDc3CSAgIExhbmRtYXJrIEdyYXBoaWNzIENvcnAuICovCisjZGVmaW5lCUVUSEVSVFlQRV9NQVRSQQkJMHg4MDdBCS8qIE1hdHJhICovCisjZGVmaW5lCUVUSEVSVFlQRV9EREUJCTB4ODA3QgkvKiBEYW5zayBEYXRhIEVsZWt0cm9uaWsgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX01FUklUCQkweDgwN0MJLyogTWVyaXQgSW50ZXJub2RhbCAob3IgVW5pdiBvZiBNaWNoaWdhbj8pICovCisJCSAgICAvKiAweDgwN0QgLSAweDgwN0YJICAgVml0YWxpbmsgQ29tbXVuaWNhdGlvbnMgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX1ZMVExNQU4JMHg4MDgwCS8qIFZpdGFsaW5rIFRyYW5zTEFOIElJSSBNYW5hZ2VtZW50ICovCisJCSAgICAvKiAweDgwODEgLSAweDgwODMJICAgQ291bnRlcnBvaW50IENvbXB1dGVycyAqLworCQkgICAgLyogMHg4MDg4IC0gMHg4MDhBCSAgIFh5cGxleCAqLworI2RlZmluZQlFVEhFUlRZUEVfQVRBTEsJCTB4ODA5QgkvKiBBcHBsZVRhbGsgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0FUCQlFVEhFUlRZUEVfQVRBTEsJCS8qIG9sZCBOZXRCU0QgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0FQUExFVEFMSwlFVEhFUlRZUEVfQVRBTEsJCS8qIEhQLVVYICovCisJCSAgICAvKiAweDgwOUMgLSAweDgwOUUJICAgRGF0YWJpbGl0eSAqLworI2RlZmluZQlFVEhFUlRZUEVfU1BJREVSCTB4ODA5RgkvKiBTcGlkZXIgU3lzdGVtcyBMdGQuICovCisJCQkgICAgIC8qIDB4ODBBMwkgICBOaXhkb3JmICovCisJCSAgICAvKiAweDgwQTQgLSAweDgwQjMJICAgU2llbWVucyBHYW1tYXNvbmljcyBJbmMuICovCisJCSAgICAvKiAweDgwQzAgLSAweDgwQzMJICAgRENBIChEaWdpdGFsIENvbW0uIEFzc29jLikgRGF0YSBFeGNoYW5nZSBDbHVzdGVyICovCisJCSAgICAvKiAweDgwQzQgLSAweDgwQzUJICAgQmFueWFuIFN5c3RlbXMgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX1BBQ0VSCQkweDgwQzYJLyogUGFjZXIgU29mdHdhcmUgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0FQUExJVEVLCTB4ODBDNwkvKiBBcHBsaXRlayBDb3Jwb3JhdGlvbiAqLworCQkgICAgLyogMHg4MEM4IC0gMHg4MENDCSAgIEludGVyZ3JhcGggQ29ycG9yYXRpb24gKi8KKwkJICAgIC8qIDB4ODBDRCAtIDB4ODBDRQkgICBIYXJyaXMgQ29ycG9yYXRpb24gKi8KKwkJICAgIC8qIDB4ODBDRiAtIDB4ODBEMgkgICBUYXlsb3IgSW5zdHJ1bWVudCAqLworCQkgICAgLyogMHg4MEQzIC0gMHg4MEQ0CSAgIFJvc2Vtb3VudCBDb3Jwb3JhdGlvbiAqLworI2RlZmluZQlFVEhFUlRZUEVfU05BCQkweDgwRDUJLyogSUJNIFNOQSBTZXJ2aWNlcyBvdmVyIEV0aGVybmV0ICovCisjZGVmaW5lCUVUSEVSVFlQRV9WQVJJQU4JMHg4MERECS8qIFZhcmlhbiBBc3NvY2lhdGVzICovCisJCSAgICAvKiAweDgwREUgLSAweDgwREYJICAgVFJGUyAoSW50ZWdyYXRlZCBTb2x1dGlvbnMgVHJhbnNwYXJlbnQgUmVtb3RlIEZpbGUgU3lzdGVtKSAqLworCQkgICAgLyogMHg4MEUwIC0gMHg4MEUzCSAgIEFsbGVuLUJyYWRsZXkgKi8KKwkJICAgIC8qIDB4ODBFNCAtIDB4ODBGMAkgICBEYXRhYmlsaXR5ICovCisjZGVmaW5lCUVUSEVSVFlQRV9SRVRJWAkJMHg4MEYyCS8qIFJldGl4ICovCisjZGVmaW5lCUVUSEVSVFlQRV9BQVJQCQkweDgwRjMJLyogQXBwbGVUYWxrIEFBUlAgKi8KKwkJICAgIC8qIDB4ODBGNCAtIDB4ODBGNQkgICBLaW5ldGljcyAqLworI2RlZmluZQlFVEhFUlRZUEVfQVBPTExPCTB4ODBGNwkvKiBBcG9sbG8gQ29tcHV0ZXIgKi8KKyNkZWZpbmUgRVRIRVJUWVBFX1ZMQU4JCTB4ODEwMAkvKiBJRUVFIDgwMi4xUSBWTEFOIHRhZ2dpbmcgKFhYWCBjb25mbGljdHMpICovCisJCSAgICAvKiAweDgwRkYgLSAweDgxMDEJICAgV2VsbGZsZWV0IENvbW11bmljYXRpb25zIChYWFggY29uZmxpY3RzKSAqLworI2RlZmluZQlFVEhFUlRZUEVfQk9GTAkJMHg4MTAyCS8qIFdlbGxmbGVldDsgQk9GTCAoQnJlYXRoIE9GIExpZmUpIHBrdHMgW2V2ZXJ5IDUtMTAgc2Vjcy5dICovCisjZGVmaW5lCUVUSEVSVFlQRV9XRUxMRkxFRVQJMHg4MTAzCS8qIFdlbGxmbGVldCBDb21tdW5pY2F0aW9ucyAqLworCQkgICAgLyogMHg4MTA3IC0gMHg4MTA5CSAgIFN5bWJvbGljcyBQcml2YXRlICovCisjZGVmaW5lCUVUSEVSVFlQRV9UQUxBUklTCTB4ODEyQgkvKiBUYWxhcmlzICovCisjZGVmaW5lCUVUSEVSVFlQRV9XQVRFUkxPTwkweDgxMzAJLyogV2F0ZXJsb28gTWljcm9zeXN0ZW1zIEluYy4gKFhYWCB3aGljaD8pICovCisjZGVmaW5lCUVUSEVSVFlQRV9IQVlFUwkJMHg4MTMwCS8qIEhheWVzIE1pY3JvY29tcHV0ZXJzIChYWFggd2hpY2g/KSAqLworI2RlZmluZQlFVEhFUlRZUEVfVkdMQUIJCTB4ODEzMQkvKiBWRyBMYWJvcmF0b3J5IFN5c3RlbXMgKi8KKwkJICAgIC8qIDB4ODEzMiAtIDB4ODEzNwkgICBCcmlkZ2UgQ29tbXVuaWNhdGlvbnMgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0lQWAkJMHg4MTM3CS8qIE5vdmVsbCAob2xkKSBOZXRXYXJlIElQWCAoRUNPTkZJRyBFIG9wdGlvbikgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX05PVkVMTAkweDgxMzgJLyogTm92ZWxsLCBJbmMuICovCisJCSAgICAvKiAweDgxMzkgLSAweDgxM0QJICAgS1RJICovCisjZGVmaW5lCUVUSEVSVFlQRV9NVU1QUwkJMHg4MTNGCS8qIE0vTVVNUFMgZGF0YSBzaGFyaW5nICovCisjZGVmaW5lCUVUSEVSVFlQRV9BTU9FQkEJMHg4MTQ1CS8qIFZyaWplIFVuaXZlcnNpdGVpdCAoTkwpIEFtb2ViYSA0IFJQQyAob2Jzb2xldGUpICovCisjZGVmaW5lCUVUSEVSVFlQRV9GTElQCQkweDgxNDYJLyogVnJpamUgVW5pdmVyc2l0ZWl0IChOTCkgRkxJUCAoRmFzdCBMb2NhbCBJbnRlcm5ldCBQcm90b2NvbCkgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX1ZVUkVTRVJWRUQJMHg4MTQ3CS8qIFZyaWplIFVuaXZlcnNpdGVpdCAoTkwpIFtyZXNlcnZlZF0gKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0xPR0lDUkFGVAkweDgxNDgJLyogTG9naWNyYWZ0ICovCisjZGVmaW5lCUVUSEVSVFlQRV9OQ0QJCTB4ODE0OQkvKiBOZXR3b3JrIENvbXB1dGluZyBEZXZpY2VzICovCisjZGVmaW5lCUVUSEVSVFlQRV9BTFBIQQkJMHg4MTRBCS8qIEFscGhhIE1pY3JvICovCisjZGVmaW5lCUVUSEVSVFlQRV9TTk1QCQkweDgxNEMJLyogU05NUCBvdmVyIEV0aGVybmV0IChzZWUgUkZDMTA4OSkgKi8KKwkJICAgIC8qIDB4ODE0RCAtIDB4ODE0RQkgICBCSUlOICovCisjZGVmaW5lCUVUSEVSVFlQRV9URUMJMHg4MTRGCS8qIFRlY2huaWNhbGx5IEVsaXRlIENvbmNlcHRzICovCisjZGVmaW5lCUVUSEVSVFlQRV9SQVRJT05BTAkweDgxNTAJLyogUmF0aW9uYWwgQ29ycCAqLworCQkgICAgLyogMHg4MTUxIC0gMHg4MTUzCSAgIFF1YWxjb21tICovCisJCSAgICAvKiAweDgxNUMgLSAweDgxNUUJICAgQ29tcHV0ZXIgUHJvdG9jb2wgUHR5IEx0ZCAqLworCQkgICAgLyogMHg4MTY0IC0gMHg4MTY2CSAgIENoYXJsZXMgUml2ZXIgRGF0YSBTeXN0ZW1zICovCisjZGVmaW5lCUVUSEVSVFlQRV9YVFAJCTB4ODE3RAkvKiBQcm90b2NvbCBFbmdpbmVzIFhUUCAqLworI2RlZmluZQlFVEhFUlRZUEVfU0dJVFcJCTB4ODE3RQkvKiBTR0kvVGltZSBXYXJuZXIgcHJvcC4gKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0hJUFBJX0ZQCTB4ODE4MAkvKiBISVBQSS1GUCBlbmNhcHN1bGF0aW9uICovCisjZGVmaW5lCUVUSEVSVFlQRV9TVFAJCTB4ODE4MQkvKiBTY2hlZHVsZWQgVHJhbnNmZXIgU1RQLCBISVBQSS1TVCAqLworCQkgICAgLyogMHg4MTgyIC0gMHg4MTgzCSAgIFJlc2VydmVkIGZvciBISVBQSS02NDAwICovCisJCSAgICAvKiAweDgxODQgLSAweDgxOEMJICAgU0dJIHByb3AuICovCisjZGVmaW5lCUVUSEVSVFlQRV9NT1RPUk9MQQkweDgxOEQJLyogTW90b3JvbGEgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX05FVEJFVUkJMHg4MTkxCS8qIFBvd2VyTEFOIE5ldEJJT1MvTmV0QkVVSSAoUEMpICovCisJCSAgICAvKiAweDgxOUEgLSAweDgxQTMJICAgUkFEIE5ldHdvcmsgRGV2aWNlcyAqLworCQkgICAgLyogMHg4MUI3IC0gMHg4MUI5CSAgIFh5cGxleCAqLworCQkgICAgLyogMHg4MUNDIC0gMHg4MUQ1CSAgIEFwcmljb3QgQ29tcHV0ZXJzICovCisJCSAgICAvKiAweDgxRDYgLSAweDgxREQJICAgQXJ0aXNvZnQgTGFudGFzdGljICovCisJCSAgICAvKiAweDgxRTYgLSAweDgxRUYJICAgUG9seWdvbiAqLworCQkgICAgLyogMHg4MUYwIC0gMHg4MUYyCSAgIENvbXNhdCBMYWJzICovCisJCSAgICAvKiAweDgxRjMgLSAweDgxRjUJICAgU0FJQyAqLworCQkgICAgLyogMHg4MUY2IC0gMHg4MUY4CSAgIFZHIEFuYWx5dGljYWwgKi8KKwkJICAgIC8qIDB4ODIwMyAtIDB4ODIwNQkgICBRTlggU29mdHdhcmUgU3lzdGVtcyBMdGQuICovCisJCSAgICAvKiAweDgyMjEgLSAweDgyMjIJICAgQXNjb20gQmFua2luZyBTeXN0ZW1zICovCisJCSAgICAvKiAweDgyM0UgLSAweDgyNDAJICAgQWR2YW5jZWQgRW5jcnlwdGlvbiBTeXN0ZW1zICovCisJCSAgICAvKiAweDgyNjMgLSAweDgyNkEJICAgQ2hhcmxlcyBSaXZlciBEYXRhIFN5c3RlbXMgKi8KKwkJICAgIC8qIDB4ODI3RiAtIDB4ODI4MgkgICBBdGhlbmEgUHJvZ3JhbW1pbmcgKi8KKwkJICAgIC8qIDB4ODI5QSAtIDB4ODI5QgkgICBJbnN0IEluZCBJbmZvIFRlY2ggKi8KKwkJICAgIC8qIDB4ODI5QyAtIDB4ODJBQgkgICBUYXVydXMgQ29udHJvbHMgKi8KKwkJICAgIC8qIDB4ODJBQyAtIDB4ODY5MwkgICBXYWxrZXIgUmljaGVyICYgUXVpbm4gKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0FDQ1RPTgkweDgzOTAJLyogQWNjdG9uIFRlY2hub2xvZ2llcyAodW5yZWdpc3RlcmVkKSAqLworI2RlZmluZQlFVEhFUlRZUEVfVEFMQVJJU01DCTB4ODUyQgkvKiBUYWxhcmlzIG11bHRpY2FzdCAqLworI2RlZmluZQlFVEhFUlRZUEVfS0FMUEFOQQkweDg1ODIJLyogS2FscGFuYSAqLworCQkgICAgLyogMHg4Njk0IC0gMHg4NjlECSAgIElkZWEgQ291cmllciAqLworCQkgICAgLyogMHg4NjlFIC0gMHg4NkExCSAgIENvbXB1dGVyIE5ldHdvcmsgVGVjaCAqLworCQkgICAgLyogMHg4NkEzIC0gMHg4NkFDCSAgIEdhdGV3YXkgQ29tbXVuaWNhdGlvbnMgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX1NFQ1RSQQkweDg2REIJLyogU0VDVFJBICovCisjZGVmaW5lCUVUSEVSVFlQRV9JUFY2CQkweDg2REQJLyogSVAgcHJvdG9jb2wgdmVyc2lvbiA2ICovCisjZGVmaW5lCUVUSEVSVFlQRV9ERUxUQUNPTgkweDg2REUJLyogRGVsdGEgQ29udHJvbHMgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0FUT01JQwkweDg2REYJLyogQVRPTUlDICovCisJCSAgICAvKiAweDg2RTAgLSAweDg2RUYJICAgTGFuZGlzICYgR3lyIFBvd2VycyAqLworCQkgICAgLyogMHg4NzAwIC0gMHg4NzEwCSAgIE1vdG9yb2xhICovCisjZGVmaW5lCUVUSEVSVFlQRV9SRFAJCTB4ODczOQkvKiBDb250cm9sIFRlY2hub2xvZ3kgSW5jLiBSRFAgV2l0aG91dCBJUCAqLworI2RlZmluZQlFVEhFUlRZUEVfTUlDUAkJMHg4NzNBCS8qIENvbnRyb2wgVGVjaG5vbG9neSBJbmMuIE1jYXN0IEluZHVzdHJpYWwgQ3RybCBQcm90by4gKi8KKwkJICAgIC8qIDB4ODczQiAtIDB4ODczQwkgICBDb250cm9sIFRlY2hub2xvZ3kgSW5jLiBQcm9wcmlldGFyeSAqLworI2RlZmluZQlFVEhFUlRZUEVfVENQQ09NUAkweDg3NkIJLyogVENQL0lQIENvbXByZXNzaW9uIChSRkMxNzAxKSAqLworI2RlZmluZQlFVEhFUlRZUEVfSVBBUwkJMHg4NzZDCS8qIElQIEF1dG9ub21vdXMgU3lzdGVtcyAoUkZDMTcwMSkgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX1NFQ1VSRURBVEEJMHg4NzZECS8qIFNlY3VyZSBEYXRhIChSRkMxNzAxKSAqLworI2RlZmluZQlFVEhFUlRZUEVfRkxPV0NPTlRST0wJMHg4ODA4CS8qIDgwMi4zeCBmbG93IGNvbnRyb2wgcGFja2V0ICovCisjZGVmaW5lCUVUSEVSVFlQRV9TTE9XUFJPVE9DT0xTCTB4ODgwOQkvKiBTbG93IHByb3RvY29scyAqLworI2RlZmluZQlFVEhFUlRZUEVfUFBQCQkweDg4MEIJLyogUFBQIChvYnNvbGV0ZSBieSBQUFBPRSkgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0hJVEFDSEkJMHg4ODIwCS8qIEhpdGFjaGkgQ2FibGUgKE9wdG9lbGVjdHJvbmljIFN5c3RlbXMgTGFib3JhdG9yeSkgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX01QTFMJCTB4ODg0NwkvKiBNUExTIFVuaWNhc3QgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX01QTFNfTUNBU1QJMHg4ODQ4CS8qIE1QTFMgTXVsdGljYXN0ICovCisjZGVmaW5lCUVUSEVSVFlQRV9BWElTCQkweDg4NTYJLyogQXhpcyBDb21tdW5pY2F0aW9ucyBBQiBwcm9wcmlldGFyeSBib290c3RyYXAvY29uZmlnICovCisjZGVmaW5lCUVUSEVSVFlQRV9QUFBPRURJU0MJMHg4ODYzCS8qIFBQUCBPdmVyIEV0aGVybmV0IERpc2NvdmVyeSBTdGFnZSAqLworI2RlZmluZQlFVEhFUlRZUEVfUFBQT0UJCTB4ODg2NAkvKiBQUFAgT3ZlciBFdGhlcm5ldCBTZXNzaW9uIFN0YWdlICovCisjZGVmaW5lCUVUSEVSVFlQRV9MQU5QUk9CRQkweDg4ODgJLyogSFAgTGFuUHJvYmUgdGVzdD8gKi8KKyNkZWZpbmUJRVRIRVJUWVBFX1BBRQkJMHg4ODhlCS8qIEVBUE9MIFBBRS84MDIuMXggKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0xPT1BCQUNLCTB4OTAwMAkvKiBMb29wYmFjayAqLworI2RlZmluZQlFVEhFUlRZUEVfTEJBQ0sJCUVUSEVSVFlQRV9MT09QQkFDSwkvKiBERUMgTU9QIGxvb3BiYWNrICovCisjZGVmaW5lCUVUSEVSVFlQRV9YTlNTTQkJMHg5MDAxCS8qIDNDb20gKEZvcm1lcmx5IEJyaWRnZSBDb21tdW5pY2F0aW9ucyksIFhOUyBTeXN0ZW1zIE1hbmFnZW1lbnQgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX1RDUFNNCQkweDkwMDIJLyogM0NvbSAoRm9ybWVybHkgQnJpZGdlIENvbW11bmljYXRpb25zKSwgVENQL0lQIFN5c3RlbXMgTWFuYWdlbWVudCAqLworI2RlZmluZQlFVEhFUlRZUEVfQkNMT09QCTB4OTAwMwkvKiAzQ29tIChGb3JtZXJseSBCcmlkZ2UgQ29tbXVuaWNhdGlvbnMpLCBsb29wYmFjayBkZXRlY3Rpb24gKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0RFQk5JCQkweEFBQUEJLyogREVDTkVUPyBVc2VkIGJ5IFZBWCA2MjIwIERFQk5JICovCisjZGVmaW5lCUVUSEVSVFlQRV9TT05JWAkJMHhGQUY1CS8qIFNvbml4IEFycGVnZ2lvICovCisjZGVmaW5lCUVUSEVSVFlQRV9WSVRBTAkJMHhGRjAwCS8qIEJCTiBWSVRBTC1MYW5CcmlkZ2UgY2FjaGUgd2FrZXVwcyAqLworCQkgICAgLyogMHhGRjAwIC0gMHhGRk9GCSAgIElTQyBCdW5rZXIgUmFtbyAqLworCisjZGVmaW5lCUVUSEVSVFlQRV9NQVgJCTB4RkZGRgkvKiBNYXhpbXVtIHZhbGlkIGV0aGVybmV0IHR5cGUsIHJlc2VydmVkICovCisKKyNlbmRpZiAvKiAhX05FVF9FVEhFUlRZUEVTX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvbmV0L2lmLmggYi9saWJjL2luY2x1ZGUvbmV0L2lmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA0NGZjNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9uZXQvaWYuaApAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8bGludXgvaWYuaD4KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpZm5kZWYgSUZfTkFNRVNJWkUKKyNkZWZpbmUgSUZfTkFNRVNJWkUgSUZOQU1TSVoKKyNlbmRpZgorCitfX0JFR0lOX0RFQ0xTCisKKy8qCisgKiBNYXAgYW4gaW50ZXJmYWNlIG5hbWUgaW50byBpdHMgY29ycmVzcG9uZGluZyBpbmRleC4KKyAqLworZXh0ZXJuIHVuc2lnbmVkIGludCBpZl9uYW1ldG9pbmRleChjb25zdCBjaGFyICopOworZXh0ZXJuIGNoYXIqICAgICAgICBpZl9pbmRleHRvbmFtZSh1bnNpZ25lZCBpZmluZGV4LCBjaGFyICppZm5hbWUpOworCitfX0VORF9ERUNMUwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL25ldC9pZl9hcnAuaCBiL2xpYmMvaW5jbHVkZS9uZXQvaWZfYXJwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI1ZjFiNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9uZXQvaWZfYXJwLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL25ldC9pZl9kbC5oIGIvbGliYy9pbmNsdWRlL25ldC9pZl9kbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMGMwODAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvbmV0L2lmX2RsLmgKQEAgLTAsMCArMSw4NyBAQAorLyoJJE5ldEJTRDogaWZfZGwuaCx2IDEuMTggMjAwNS8xMi8xMSAyMzowNToyNCB0aG9ycGVqIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglAKCMpaWZfZGwuaAk4LjEgKEJlcmtlbGV5KSA2LzEwLzkzCisgKi8KKworLyoKKyAqIEEgTGluay1MZXZlbCBTb2NrYWRkciBtYXkgc3BlY2lmeSB0aGUgaW50ZXJmYWNlIGluIG9uZSBvZiB0d28KKyAqIHdheXM6IGVpdGhlciBieSBtZWFucyBvZiBhIHN5c3RlbS1wcm92aWRlZCBpbmRleCBudW1iZXIgKGNvbXB1dGVkCisgKiBhbmV3IGFuZCBwb3NzaWJseSBkaWZmZXJlbnRseSBvbiBldmVyeSByZWJvb3QpLCBvciBieSBhIGh1bWFuLXJlYWRhYmxlCisgKiBzdHJpbmcgc3VjaCBhcyAiaWwwIiAoZm9yIG1hbmFnZXJpYWwgY29udmVuaWVuY2UpLgorICoKKyAqIENlbnN1cyB0YWtpbmcgYWN0aW9ucywgc3VjaCBhcyBzb21ldGhpbmcgYWtpbiB0byBTSU9DR0NPTkYgd291bGQgcmV0dXJuCisgKiBib3RoIHRoZSBpbmRleCBhbmQgdGhlIGh1bWFuIG5hbWUuCisgKgorICogSGlnaCB2b2x1bWUgdHJhbnNhY3Rpb25zIChzdWNoIGFzIGdpdmluZyBhIGxpbmstbGV2ZWwgYGBmcm9tJycgYWRkcmVzcworICogaW4gYSByZWN2ZnJvbSBvciByZWN2bXNnIGNhbGwpIG1heSBiZSBsaWtlbHkgb25seSB0byBwcm92aWRlIHRoZSBpbmRleGVkCisgKiBmb3JtLCAod2hpY2ggcmVxdWlyZXMgZmV3ZXIgY29weSBvcGVyYXRpb25zIGFuZCBsZXNzIHNwYWNlKS4KKyAqCisgKiBUaGUgZm9ybSBhbmQgaW50ZXJwcmV0YXRpb24gIG9mIHRoZSBsaW5rLWxldmVsIGFkZHJlc3MgaXMgcHVyZWx5IGEgbWF0dGVyCisgKiBvZiBjb252ZW50aW9uIGJldHdlZW4gdGhlIGRldmljZSBkcml2ZXIgYW5kIGl0cyBjb25zdW1lcnM7IGhvd2V2ZXIsIGl0IGlzCisgKiBleHBlY3RlZCB0aGF0IGFsbCBkcml2ZXJzIGZvciBhbiBpbnRlcmZhY2Ugb2YgYSBnaXZlbiBpZl90eXBlIHdpbGwgYWdyZWUuCisgKi8KKworI2lmbmRlZiBfTkVUX0lGX0RMX0hfCisjZGVmaW5lIF9ORVRfSUZfRExfSF8KKworI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKworLyoKKyAqIFN0cnVjdHVyZSBvZiBhIExpbmstTGV2ZWwgc29ja2FkZHI6CisgKi8KK3N0cnVjdCBzb2NrYWRkcl9kbCB7CisJdV9jaGFyCSAgICBzZGxfbGVuOwkvKiBUb3RhbCBsZW5ndGggb2Ygc29ja2FkZHIgKi8KKwlzYV9mYW1pbHlfdCBzZGxfZmFtaWx5OwkvKiBBRl9MSU5LICovCisJdV9pbnQxNl90ICAgc2RsX2luZGV4OwkvKiBpZiAhPSAwLCBzeXN0ZW0gZ2l2ZW4gaW5kZXggZm9yIGludGVyZmFjZSAqLworCXVfY2hhcgkgICAgc2RsX3R5cGU7CS8qIGludGVyZmFjZSB0eXBlICovCisJdV9jaGFyCSAgICBzZGxfbmxlbjsJLyogaW50ZXJmYWNlIG5hbWUgbGVuZ3RoLCBubyB0cmFpbGluZyAwIHJlcWQuICovCisJdV9jaGFyCSAgICBzZGxfYWxlbjsJLyogbGluayBsZXZlbCBhZGRyZXNzIGxlbmd0aCAqLworCXVfY2hhcgkgICAgc2RsX3NsZW47CS8qIGxpbmsgbGF5ZXIgc2VsZWN0b3IgbGVuZ3RoICovCisJY2hhcgkgICAgc2RsX2RhdGFbMTJdOyAvKiBtaW5pbXVtIHdvcmsgYXJlYSwgY2FuIGJlIGxhcmdlcjsKKwkJCQkgICAgIGNvbnRhaW5zIGJvdGggaWYgbmFtZSBhbmQgbGwgYWRkcmVzcyAqLworfTsKKworLyogV2UgZG8gYXJpdGhtZXRpYyBkaXJlY3RseSB3aXRoIHRoZXNlLCBzbyBrZWVwIHRoZW0gY2hhciBpbnN0ZWFkIG9mIHZvaWQgKi8KKyNkZWZpbmUgTExBRERSKHMpICgoY2hhciAqKSgocyktPnNkbF9kYXRhICsgKHMpLT5zZGxfbmxlbikpCisjZGVmaW5lIENMTEFERFIocykgKChjb25zdCBjaGFyICopKChzKS0+c2RsX2RhdGEgKyAocyktPnNkbF9ubGVuKSkKKworI2lmbmRlZiBfS0VSTkVMCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKworX19CRUdJTl9ERUNMUwordm9pZAlsaW5rX2FkZHIoY29uc3QgY2hhciAqLCBzdHJ1Y3Qgc29ja2FkZHJfZGwgKik7CitjaGFyCSpsaW5rX250b2EoY29uc3Qgc3RydWN0IHNvY2thZGRyX2RsICopOworX19FTkRfREVDTFMKKworI2VuZGlmIC8qICFfS0VSTkVMICovCisKKyNlbmRpZiAvKiAhX05FVF9JRl9ETF9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL25ldC9pZl9ldGhlci5oIGIvbGliYy9pbmNsdWRlL25ldC9pZl9ldGhlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyMWY5YWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvbmV0L2lmX2V0aGVyLmgKQEAgLTAsMCArMSwyMTcgQEAKKy8qCSROZXRCU0Q6IGlmX2V0aGVyLmgsdiAxLjQzIDIwMDYvMTEvMjQgMDE6MDQ6MzAgcnBhdWxvIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODIsIDE5ODYsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglAKCMpaWZfZXRoZXIuaAk4LjEgKEJlcmtlbGV5KSA2LzEwLzkzCisgKi8KKworI2lmbmRlZiBfTkVUX0lGX0VUSEVSX0hfCisjZGVmaW5lIF9ORVRfSUZfRVRIRVJfSF8KKworI2lmZGVmIF9LRVJORUwKKyNpZmRlZiBfS0VSTkVMX09QVAorI2luY2x1ZGUgIm9wdF9tYnVmdHJhY2UuaCIKKyNlbmRpZgorI2luY2x1ZGUgPHN5cy9tYnVmLmg+CisjZW5kaWYKKworLyoKKyAqIFNvbWUgYmFzaWMgRXRoZXJuZXQgY29uc3RhbnRzLgorICovCisjZGVmaW5lCUVUSEVSX0FERFJfTEVOCTYJLyogbGVuZ3RoIG9mIGFuIEV0aGVybmV0IGFkZHJlc3MgKi8KKyNkZWZpbmUJRVRIRVJfVFlQRV9MRU4JMgkvKiBsZW5ndGggb2YgdGhlIEV0aGVybmV0IHR5cGUgZmllbGQgKi8KKyNkZWZpbmUJRVRIRVJfQ1JDX0xFTgk0CS8qIGxlbmd0aCBvZiB0aGUgRXRoZXJuZXQgQ1JDICovCisjZGVmaW5lCUVUSEVSX0hEUl9MRU4JKChFVEhFUl9BRERSX0xFTiAqIDIpICsgRVRIRVJfVFlQRV9MRU4pCisjZGVmaW5lCUVUSEVSX01JTl9MRU4JNjQJLyogbWluaW11bSBmcmFtZSBsZW5ndGgsIGluY2x1ZGluZyBDUkMgKi8KKyNkZWZpbmUJRVRIRVJfTUFYX0xFTgkxNTE4CS8qIG1heGltdW0gZnJhbWUgbGVuZ3RoLCBpbmNsdWRpbmcgQ1JDICovCisjZGVmaW5lCUVUSEVSX01BWF9MRU5fSlVNQk8gOTAxOCAvKiBtYXhpbXVtIGp1bWJvIGZyYW1lIGxlbiwgaW5jbHVkaW5nIENSQyAqLworCisvKgorICogU29tZSBFdGhlcm5ldCBleHRlbnNpb25zLgorICovCisjZGVmaW5lCUVUSEVSX1ZMQU5fRU5DQVBfTEVOIDQJLyogbGVuZ3RoIG9mIDgwMi4xUSBWTEFOIGVuY2Fwc3VsYXRpb24gKi8KKworLyoKKyAqIEV0aGVybmV0IGFkZHJlc3MgLSA2IG9jdGV0cworICogdGhpcyBpcyBvbmx5IHVzZWQgYnkgdGhlIGV0aGVycygzKSBmdW5jdGlvbnMuCisgKi8KK3N0cnVjdCBldGhlcl9hZGRyIHsKKwl1X2ludDhfdCBldGhlcl9hZGRyX29jdGV0W0VUSEVSX0FERFJfTEVOXTsKK30gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOworCisvKgorICogU3RydWN0dXJlIG9mIGEgMTBNYi9zIEV0aGVybmV0IGhlYWRlci4KKyAqLworc3RydWN0CWV0aGVyX2hlYWRlciB7CisJdV9pbnQ4X3QgIGV0aGVyX2Rob3N0W0VUSEVSX0FERFJfTEVOXTsKKwl1X2ludDhfdCAgZXRoZXJfc2hvc3RbRVRIRVJfQUREUl9MRU5dOworCXVfaW50MTZfdCBldGhlcl90eXBlOworfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7CisKKyNpbmNsdWRlIDxuZXQvZXRoZXJ0eXBlcy5oPgorCisjZGVmaW5lCUVUSEVSX0lTX01VTFRJQ0FTVChhZGRyKSAoKihhZGRyKSAmIDB4MDEpIC8qIGlzIGFkZHJlc3MgbWNhc3QvYmNhc3Q/ICovCisKKyNkZWZpbmUJRVRIRVJNVFVfSlVNQk8JKEVUSEVSX01BWF9MRU5fSlVNQk8gLSBFVEhFUl9IRFJfTEVOIC0gRVRIRVJfQ1JDX0xFTikKKyNkZWZpbmUJRVRIRVJNVFUJKEVUSEVSX01BWF9MRU4gLSBFVEhFUl9IRFJfTEVOIC0gRVRIRVJfQ1JDX0xFTikKKyNkZWZpbmUJRVRIRVJNSU4JKEVUSEVSX01JTl9MRU4gLSBFVEhFUl9IRFJfTEVOIC0gRVRIRVJfQ1JDX0xFTikKKworLyoKKyAqIENvbXB1dGUgdGhlIG1heGltdW0gZnJhbWUgc2l6ZSBiYXNlZCBvbiBldGhlcnR5cGUgKGkuZS4gcG9zc2libGUKKyAqIGVuY2Fwc3VsYXRpb24pIGFuZCB3aGV0aGVyIG9yIG5vdCBhbiBGQ1MgaXMgcHJlc2VudC4KKyAqLworI2RlZmluZQlFVEhFUl9NQVhfRlJBTUUoaWZwLCBldHlwZSwgaGFzZmNzKQkJCQlcCisJKChpZnApLT5pZl9tdHUgKyBFVEhFUl9IRFJfTEVOICsJCQkJXAorCSAoKGhhc2ZjcykgPyBFVEhFUl9DUkNfTEVOIDogMCkgKwkJCQlcCisJICgoKGV0eXBlKSA9PSBFVEhFUlRZUEVfVkxBTikgPyBFVEhFUl9WTEFOX0VOQ0FQX0xFTiA6IDApKQorCisvKgorICogRXRoZXJuZXQgQ1JDMzIgcG9seW5vbWlhbHMgKGJpZy0gYW5kIGxpdHRsZS1lbmRpYW4gdmVyaW9ucykuCisgKi8KKyNkZWZpbmUJRVRIRVJfQ1JDX1BPTFlfTEUJMHhlZGI4ODMyMAorI2RlZmluZQlFVEhFUl9DUkNfUE9MWV9CRQkweDA0YzExZGI2CisKKyNpZm5kZWYgX1NUQU5EQUxPTkUKKworLyoKKyAqIEV0aGVybmV0LXNwZWNpZmljIG1idWYgZmxhZ3MuCisgKi8KKyNkZWZpbmUJTV9IQVNGQ1MJTV9MSU5LMAkvKiBGQ1MgaW5jbHVkZWQgYXQgZW5kIG9mIGZyYW1lICovCisjZGVmaW5lCU1fUFJPTUlTQwlNX0xJTksxCS8qIHRoaXMgcGFja2V0IGlzIG5vdCBmb3IgdXMgKi8KKworI2lmZGVmIF9LRVJORUwKKy8qCisgKiBNYWNybyB0byBtYXAgYW4gSVAgbXVsdGljYXN0IGFkZHJlc3MgdG8gYW4gRXRoZXJuZXQgbXVsdGljYXN0IGFkZHJlc3MuCisgKiBUaGUgaGlnaC1vcmRlciAyNSBiaXRzIG9mIHRoZSBFdGhlcm5ldCBhZGRyZXNzIGFyZSBzdGF0aWNhbGx5IGFzc2lnbmVkLAorICogYW5kIHRoZSBsb3ctb3JkZXIgMjMgYml0cyBhcmUgdGFrZW4gZnJvbSB0aGUgbG93IGVuZCBvZiB0aGUgSVAgYWRkcmVzcy4KKyAqLworI2RlZmluZSBFVEhFUl9NQVBfSVBfTVVMVElDQVNUKGlwYWRkciwgZW5hZGRyKQkJCQlcCisJLyogc3RydWN0IGluX2FkZHIgKmlwYWRkcjsgKi8JCQkJCVwKKwkvKiB1X2ludDhfdCBlbmFkZHJbRVRIRVJfQUREUl9MRU5dOyAqLwkJCQlcCit7CQkJCQkJCQkJXAorCShlbmFkZHIpWzBdID0gMHgwMTsJCQkJCQlcCisJKGVuYWRkcilbMV0gPSAweDAwOwkJCQkJCVwKKwkoZW5hZGRyKVsyXSA9IDB4NWU7CQkJCQkJXAorCShlbmFkZHIpWzNdID0gKCh1X2ludDhfdCAqKWlwYWRkcilbMV0gJiAweDdmOwkJCVwKKwkoZW5hZGRyKVs0XSA9ICgodV9pbnQ4X3QgKilpcGFkZHIpWzJdOwkJCQlcCisJKGVuYWRkcilbNV0gPSAoKHVfaW50OF90ICopaXBhZGRyKVszXTsJCQkJXAorfQorLyoKKyAqIE1hY3JvIHRvIG1hcCBhbiBJUDYgbXVsdGljYXN0IGFkZHJlc3MgdG8gYW4gRXRoZXJuZXQgbXVsdGljYXN0IGFkZHJlc3MuCisgKiBUaGUgaGlnaC1vcmRlciAxNiBiaXRzIG9mIHRoZSBFdGhlcm5ldCBhZGRyZXNzIGFyZSBzdGF0aWNhbGx5IGFzc2lnbmVkLAorICogYW5kIHRoZSBsb3ctb3JkZXIgMzIgYml0cyBhcmUgdGFrZW4gZnJvbSB0aGUgbG93IGVuZCBvZiB0aGUgSVA2IGFkZHJlc3MuCisgKi8KKyNkZWZpbmUgRVRIRVJfTUFQX0lQVjZfTVVMVElDQVNUKGlwNmFkZHIsIGVuYWRkcikJCQlcCisJLyogc3RydWN0IGluNl9hZGRyICppcDZhZGRyOyAqLwkJCQkJXAorCS8qIHVfaW50OF90IGVuYWRkcltFVEhFUl9BRERSX0xFTl07ICovCQkJCVwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkoZW5hZGRyKVswXSA9IDB4MzM7CQkJCQkJXAorCShlbmFkZHIpWzFdID0gMHgzMzsJCQkJCQlcCisJKGVuYWRkcilbMl0gPSAoKHVfaW50OF90ICopaXA2YWRkcilbMTJdOwkJCVwKKwkoZW5hZGRyKVszXSA9ICgodV9pbnQ4X3QgKilpcDZhZGRyKVsxM107CQkJXAorCShlbmFkZHIpWzRdID0gKCh1X2ludDhfdCAqKWlwNmFkZHIpWzE0XTsJCQlcCisJKGVuYWRkcilbNV0gPSAoKHVfaW50OF90ICopaXA2YWRkcilbMTVdOwkJCVwKK30KKyNlbmRpZgorCisjZGVmaW5lCUVUSEVSQ0FQX1ZMQU5fTVRVCTB4MDAwMDAwMDEJLyogVkxBTi1jb21wYXRpYmxlIE1UVSAqLworI2RlZmluZQlFVEhFUkNBUF9WTEFOX0hXVEFHR0lORwkweDAwMDAwMDAyCS8qIGhhcmR3YXJlIFZMQU4gdGFnIHN1cHBvcnQgKi8KKyNkZWZpbmUJRVRIRVJDQVBfSlVNQk9fTVRVCTB4MDAwMDAwMDQJLyogOTAwMCBieXRlIE1UVSBzdXBwb3J0ZWQgKi8KKworI2lmZGVmCV9LRVJORUwKK2V4dGVybiBjb25zdCB1aW50OF90IGV0aGVyYnJvYWRjYXN0YWRkcltFVEhFUl9BRERSX0xFTl07CitleHRlcm4gY29uc3QgdWludDhfdCBldGhlcm11bHRpY2FzdGFkZHJfc2xvd3Byb3RvY29sc1tFVEhFUl9BRERSX0xFTl07CitleHRlcm4gY29uc3QgdWludDhfdCBldGhlcl9pcG11bHRpY2FzdF9taW5bRVRIRVJfQUREUl9MRU5dOworZXh0ZXJuIGNvbnN0IHVpbnQ4X3QgZXRoZXJfaXBtdWx0aWNhc3RfbWF4W0VUSEVSX0FERFJfTEVOXTsKKworaW50CWV0aGVyX2lvY3RsKHN0cnVjdCBpZm5ldCAqLCB1X2xvbmcsIGNhZGRyX3QpOworaW50CWV0aGVyX2FkZG11bHRpIChzdHJ1Y3QgaWZyZXEgKiwgc3RydWN0IGV0aGVyY29tICopOworaW50CWV0aGVyX2RlbG11bHRpIChzdHJ1Y3QgaWZyZXEgKiwgc3RydWN0IGV0aGVyY29tICopOworaW50CWV0aGVyX2NoYW5nZWFkZHIgKHN0cnVjdCBpZnJlcSAqLCBzdHJ1Y3QgZXRoZXJjb20gKik7CitpbnQJZXRoZXJfbXVsdGlhZGRyKHN0cnVjdCBzb2NrYWRkciAqLCB1X2ludDhfdFtdLCB1X2ludDhfdFtdKTsKKworLyoKKyAqIEV0aGVybmV0IDgwMi4xUSBWTEFOIHN0cnVjdHVyZXMuCisgKi8KKworLyogYWRkIFZMQU4gdGFnIHRvIGlucHV0L3JlY2VpdmVkIHBhY2tldCAqLworI2RlZmluZQlWTEFOX0lOUFVUX1RBRyhpZnAsIG0sIHZsYW5pZCwgX2VycmNhc2UpCVwKKwlkbyB7CQkJCQkJCQlcCisgICAgICAgICAgICAgICAgc3RydWN0IG1fdGFnICptdGFnID0JCQkJCVwKKyAgICAgICAgICAgICAgICAgICAgbV90YWdfZ2V0KFBBQ0tFVF9UQUdfVkxBTiwgc2l6ZW9mKHVfaW50KSwgTV9OT1dBSVQpO1wKKyAgICAgICAgICAgICAgICBpZiAobXRhZyA9PSBOVUxMKSB7CQkJCQlcCisJCQlpZnAtPmlmX2llcnJvcnMrKzsJCQkJXAorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIlczogdW5hYmxlIHRvIGFsbG9jYXRlIFZMQU4gdGFnXG4iLAlcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZwLT5pZl94bmFtZSk7CQkJCVwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZnJlZW0obSk7CQkJCQlcCisgICAgICAgICAgICAgICAgICAgICAgICBfZXJyY2FzZTsJCQkJCVwKKyAgICAgICAgICAgICAgICB9CQkJCQkJCVwKKyAgICAgICAgICAgICAgICAqKHVfaW50ICopKG10YWcgKyAxKSA9IHZsYW5pZDsJCQkJXAorICAgICAgICAgICAgICAgIG1fdGFnX3ByZXBlbmQobSwgbXRhZyk7CQkJCQlcCisJfSB3aGlsZSgwKQorCisvKiBleHRyYWN0IFZMQU4gdGFnIGZyb20gb3V0cHV0L3RyYXNtaXQgcGFja2V0ICovCisjZGVmaW5lIFZMQU5fT1VUUFVUX1RBRyhlYywgbTApCQkJXAorCVZMQU5fQVRUQUNIRUQoZWMpID8gbV90YWdfZmluZCgobTApLCBQQUNLRVRfVEFHX1ZMQU4sIE5VTEwpIDogTlVMTAorCisvKiBleHRyYWN0IFZMQU4gSUQgdmFsdWUgZnJvbSBhIFZMQU4gdGFnICovCisjZGVmaW5lIFZMQU5fVEFHX1ZBTFVFKG10YWcpCVwKKwkoKCoodV9pbnQgKikobXRhZyArIDEpKSAmIDQwOTUpCisKKy8qIHRlc3QgaWYgYW55IFZMQU4gaXMgY29uZmlndXJlZCBmb3IgdGhpcyBpbnRlcmZhY2UgKi8KKyNkZWZpbmUgVkxBTl9BVFRBQ0hFRChlYykJKChlYyktPmVjX252bGFucyA+IDApCisKK3ZvaWQJZXRoZXJfaWZhdHRhY2goc3RydWN0IGlmbmV0ICosIGNvbnN0IHVfaW50OF90ICopOwordm9pZAlldGhlcl9pZmRldGFjaChzdHJ1Y3QgaWZuZXQgKik7CisKK2NoYXIJKmV0aGVyX3NwcmludGYoY29uc3QgdV9pbnQ4X3QgKik7CitjaGFyCSpldGhlcl9zbnByaW50ZihjaGFyICosIHNpemVfdCwgY29uc3QgdV9pbnQ4X3QgKik7CisKK3VfaW50MzJfdCBldGhlcl9jcmMzMl9sZShjb25zdCB1X2ludDhfdCAqLCBzaXplX3QpOwordV9pbnQzMl90IGV0aGVyX2NyYzMyX2JlKGNvbnN0IHVfaW50OF90ICosIHNpemVfdCk7CisKK2ludAlldGhlcl9ub25zdGF0aWNfYXRvbih1X2NoYXIgKiwgY2hhciAqKTsKKyNlbHNlCisvKgorICogUHJvdG90eXBlIGV0aGVycygzKSBmdW5jdGlvbnMuCisgKi8KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fQkVHSU5fREVDTFMKK2NoYXIgKglldGhlcl9udG9hIF9fUCgoY29uc3Qgc3RydWN0IGV0aGVyX2FkZHIgKikpOworc3RydWN0IGV0aGVyX2FkZHIgKgorCWV0aGVyX2F0b24gX19QKChjb25zdCBjaGFyICopKTsKK2ludAlldGhlcl9udG9ob3N0IF9fUCgoY2hhciAqLCBjb25zdCBzdHJ1Y3QgZXRoZXJfYWRkciAqKSk7CitpbnQJZXRoZXJfaG9zdHRvbiBfX1AoKGNvbnN0IGNoYXIgKiwgc3RydWN0IGV0aGVyX2FkZHIgKikpOworaW50CWV0aGVyX2xpbmUgX19QKChjb25zdCBjaGFyICosIHN0cnVjdCBldGhlcl9hZGRyICosIGNoYXIgKikpOworX19FTkRfREVDTFMKKyNlbmRpZgorCisjZW5kaWYgLyogX1NUQU5EQUxPTkUgKi8KKworI2VuZGlmIC8qICFfTkVUX0lGX0VUSEVSX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvbmV0L2lmX2llZWUxMzk0LmggYi9saWJjL2luY2x1ZGUvbmV0L2lmX2llZWUxMzk0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE2MTU4MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9uZXQvaWZfaWVlZTEzOTQuaApAQCAtMCwwICsxLDEyNyBAQAorLyoJJE5ldEJTRDogaWZfaWVlZTEzOTQuaCx2IDEuNiAyMDA1LzEyLzEwIDIzOjIxOjM4IGVsYWQgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMCBUaGUgTmV0QlNEIEZvdW5kYXRpb24sIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBUaGUgTmV0QlNEIEZvdW5kYXRpb24KKyAqIGJ5IEF0c3VzaGkgT25vZS4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICoJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgTmV0QlNECisgKglGb3VuZGF0aW9uLCBJbmMuIGFuZCBpdHMgY29udHJpYnV0b3JzLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiBUaGUgTmV0QlNEIEZvdW5kYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE5FVEJTRCBGT1VOREFUSU9OLCBJTkMuIEFORCBDT05UUklCVVRPUlMKKyAqIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorICogVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUiBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX05FVF9JRl9JRUVFMTM5NF9IXworI2RlZmluZSBfTkVUX0lGX0lFRUUxMzk0X0hfCisKKy8qIGhhcmR3YXJlIGFkZHJlc3MgaW5mb3JtYXRpb24gZm9yIGFycCAvIG5kICovCitzdHJ1Y3QgaWVlZTEzOTRfaHdhZGRyIHsKKwl1X2ludDhfdAlpaGFfdWlkWzhdOwkJLyogbm9kZSB1bmlxdWUgSUQgKi8KKwl1X2ludDhfdAlpaGFfbWF4cmVjOwkJLyogbWF4X3JlYyBpbiB0aGUgY29uZmlnIFJPTSAqLworCXVfaW50OF90CWloYV9zcGVlZDsJCS8qIG1pbiBvZiBsaW5rL1BIWSBzcGVlZCAqLworCXVfaW50OF90CWloYV9vZmZzZXRbNl07CQkvKiB1bmljYXN0IEZJRk8gYWRkcmVzcyAqLworfTsKKworLyoKKyAqIEJQRiB3YW50cyB0byBzZWUgb25lIG9mIHRoZXNlLgorICovCitzdHJ1Y3QgaWVlZTEzOTRfYnBmaGRyIHsKKwl1aW50OF90CQlpYmhfZGhvc3RbOF07CisJdWludDhfdAkJaWJoX3Nob3N0WzhdOworCXVpbnQxNl90CWliaF90eXBlOworfTsKKworI2lmZGVmIF9LRVJORUwKKworLyogcHNldWRvIGhlYWRlciAqLworc3RydWN0IGllZWUxMzk0X2hlYWRlciB7CisJdV9pbnQ4X3QJaWhfdWlkWzhdOwkJLyogZHN0L3NyYyB1aWQgKi8KKwl1X2ludDhfdAlpaF9tYXhyZWM7CQkvKiBkc3QgbWF4cmVjIGZvciB0eCAqLworCXVfaW50OF90CWloX3NwZWVkOwkJLyogc3BlZWQgKi8KKwl1X2ludDhfdAlpaF9vZmZzZXRbNl07CQkvKiBkc3Qgb2Zmc2V0ICovCit9OworCisvKiB1bmZyYWdtZW50IGVuY2Fwc3VsYXRpb24gaGVhZGVyICovCitzdHJ1Y3QgaWVlZTEzOTRfdW5mcmFnaGRyIHsKKwl1X2ludDE2X3QJaXVoX2Z0OwkJCS8qIGZyYWdtZW50IHR5cGUgPT0gMCAqLworCXVfaW50MTZfdAlpdWhfZXR5cGU7CQkvKiBldGhlcl90eXBlICovCit9OworCisvKiBmcmFnbWVudGVkIGVuY2Fwc3VsYXRpb24gaGVhZGVyICovCitzdHJ1Y3QgaWVlZTEzOTRfZnJhZ2hkciB7CisJdV9pbnQxNl90CWlmaF9mdF9zaXplOwkJLyogZnJhZ21lbnQgdHlwZSwgZGF0YSBzaXplLTEgKi8KKwl1X2ludDE2X3QJaWZoX2V0eXBlX29mZjsJCS8qIGV0eXBlIGZvciBmaXJzdCBmcmFnbWVudCAqLworCQkJCQkJLyogb2Zmc2V0IGZvciBzdWJzZXEgZnJhZyAqLworCXVfaW50MTZfdAlpZmhfZGdsOwkJLyogZGF0YWdyYW0gbGFiZWwgKi8KKwl1X2ludDE2X3QJaWZoX3Jlc2VydmVkOworfTsKKworI2RlZmluZQlJRUVFMTM5NF9GVF9TVUJTRVEJMHg4MDAwCisjZGVmaW5lCUlFRUUxMzk0X0ZUX01PUkUJMHg0MDAwCisKKyNkZWZpbmUJSUVFRTEzOTRNVFUJCTE1MDAKKworI2RlZmluZQlJRUVFMTM5NF9HQVNQX0xFTgk4CQkvKiBHQVNQIGhlYWRlciBmb3IgU3RyZWFtICovCisjZGVmaW5lCUlFRUUxMzk0X0FERFJfTEVOCTgKKyNkZWZpbmUJSUVFRTEzOTRfQ1JDX0xFTgk0CisKK3N0cnVjdCBpZWVlMTM5NF9yZWFzc19wa3QgeworCUxJU1RfRU5UUlkoaWVlZTEzOTRfcmVhc3NfcGt0KSBycF9uZXh0OworCXN0cnVjdCBtYnVmCSpycF9tOworCXVfaW50MTZfdAlycF9zaXplOworCXVfaW50MTZfdAlycF9ldHlwZTsKKwl1X2ludDE2X3QJcnBfb2ZmOworCXVfaW50MTZfdAlycF9kZ2w7CisJdV9pbnQxNl90CXJwX2xlbjsKKwl1X2ludDE2X3QJcnBfdHRsOworfTsKKworc3RydWN0IGllZWUxMzk0X3JlYXNzcSB7CisJTElTVF9FTlRSWShpZWVlMTM5NF9yZWFzc3EpIHJxX25vZGU7CisJTElTVF9IRUFEKCwgaWVlZTEzOTRfcmVhc3NfcGt0KSBycV9wa3Q7CisJdV9pbnQzMl90CWZyX2lkOworfTsKKworc3RydWN0IGllZWUxMzk0Y29tIHsKKwlzdHJ1Y3QgaWZuZXQJZmNfaWY7CisJc3RydWN0IGllZWUxMzk0X2h3YWRkciBpY19od2FkZHI7CisJdV9pbnQxNl90CWljX2RnbDsKKwlMSVNUX0hFQUQoLCBpZWVlMTM5NF9yZWFzc3EpIGljX3JlYXNzcTsKK307CisKK2NvbnN0IGNoYXIgKmllZWUxMzk0X3NwcmludGYoY29uc3QgdV9pbnQ4X3QgKik7Cit2b2lkIGllZWUxMzk0X2lucHV0KHN0cnVjdCBpZm5ldCAqLCBzdHJ1Y3QgbWJ1ZiAqLCB1X2ludDE2X3QpOwordm9pZCBpZWVlMTM5NF9pZmF0dGFjaChzdHJ1Y3QgaWZuZXQgKiwgY29uc3Qgc3RydWN0IGllZWUxMzk0X2h3YWRkciAqKTsKK3ZvaWQgaWVlZTEzOTRfaWZkZXRhY2goc3RydWN0IGlmbmV0ICopOworaW50ICBpZWVlMTM5NF9pb2N0bChzdHJ1Y3QgaWZuZXQgKiwgdV9sb25nLCBjYWRkcl90KTsKK3N0cnVjdCBtYnVmICogaWVlZTEzOTRfZnJhZ21lbnQoc3RydWN0IGlmbmV0ICosIHN0cnVjdCBtYnVmICosIGludCwgdV9pbnQxNl90KTsKK3ZvaWQgaWVlZTEzOTRfZHJhaW4oc3RydWN0IGlmbmV0ICopOwordm9pZCBpZWVlMTM5NF93YXRjaGRvZyhzdHJ1Y3QgaWZuZXQgKik7CisjZW5kaWYgLyogX0tFUk5FTCAqLworCisjZW5kaWYgLyogIV9ORVRfSUZfSUVFRTEzOTRfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9uZXQvaWZfcGFja2V0LmggYi9saWJjL2luY2x1ZGUvbmV0L2lmX3BhY2tldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ZThlMGUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvbmV0L2lmX3BhY2tldC5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxsaW51eC9pZl9wYWNrZXQuaD4KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9uZXQvaWZfdHlwZXMuaCBiL2xpYmMvaW5jbHVkZS9uZXQvaWZfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGEwNGY3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL25ldC9pZl90eXBlcy5oCkBAIC0wLDAgKzEsMjY3IEBACisvKgkkTmV0QlNEOiBpZl90eXBlcy5oLHYgMS4yNCAyMDA1LzEyLzEwIDIzOjIxOjM4IGVsYWQgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk4OSwgMTk5MywgMTk5NAorICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqCUAoIylpZl90eXBlcy5oCTguMyAoQmVya2VsZXkpIDQvMjgvOTUKKyAqLworCisjaWZuZGVmIF9ORVRfSUZfVFlQRVNfSF8KKyNkZWZpbmUgX05FVF9JRl9UWVBFU19IXworCisvKgorICogSW50ZXJmYWNlIHR5cGVzIGZvciBiZW5lZml0IG9mIHBhcnNpbmcgbWVkaWEgYWRkcmVzcyBoZWFkZXJzLgorICogVGhpcyBsaXN0IGlzIGRlcml2ZWQgZnJvbSB0aGUgU05NUCBsaXN0IG9mIGlmVHlwZXMsIG9yaWdpbmFsbHkKKyAqIGRvY3VtZW50ZWQgaW4gUkZDMTU3Mywgbm93IG1haW50YWluZWQgYXM6CisgKgorICogPFVSTDpodHRwOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL3NtaS1udW1iZXJzPgorICovCisKKyNkZWZpbmUJSUZUX09USEVSCTB4MQkJLyogbm9uZSBvZiB0aGUgZm9sbG93aW5nICovCisjZGVmaW5lCUlGVF8xODIyCTB4MgkJLyogb2xkLXN0eWxlIGFycGFuZXQgaW1wICovCisjZGVmaW5lCUlGVF9IREgxODIyCTB4MwkJLyogSERIIGFycGFuZXQgaW1wICovCisjZGVmaW5lCUlGVF9YMjVERE4JMHg0CQkvKiB4MjUgdG8gaW1wICovCisjZGVmaW5lCUlGVF9YMjUJCTB4NQkJLyogUEROIFgyNSBpbnRlcmZhY2UgKFJGQzg3NykgKi8KKyNkZWZpbmUJSUZUX0VUSEVSCTB4NgkJLyogRXRoZXJuZXQgQ1NNQS9DRCAqLworI2RlZmluZQlJRlRfSVNPODgwMjMJMHg3CQkvKiBDU01BL0NEICovCisjZGVmaW5lCUlGVF9JU084ODAyNAkweDgJCS8qIFRva2VuIEJ1cyAqLworI2RlZmluZQlJRlRfSVNPODgwMjUJMHg5CQkvKiBUb2tlbiBSaW5nICovCisjZGVmaW5lCUlGVF9JU084ODAyNgkweGEJCS8qIE1BTiAqLworI2RlZmluZQlJRlRfU1RBUkxBTgkweGIKKyNkZWZpbmUJSUZUX1AxMAkJMHhjCQkvKiBQcm90ZW9uIDEwTUJpdCByaW5nICovCisjZGVmaW5lCUlGVF9QODAJCTB4ZAkJLyogUHJvdGVvbiA4ME1CaXQgcmluZyAqLworI2RlZmluZQlJRlRfSFkJCTB4ZQkJLyogSHlwZXJjaGFubmVsICovCisjZGVmaW5lCUlGVF9GRERJCTB4ZgorI2RlZmluZQlJRlRfTEFQQgkweDEwCisjZGVmaW5lCUlGVF9TRExDCTB4MTEKKyNkZWZpbmUJSUZUX1QxCQkweDEyCisjZGVmaW5lCUlGVF9DRVBUCTB4MTMJCS8qIEUxIC0gZXVyb3BlYW4gVDEgKi8KKyNkZWZpbmUJSUZUX0lTRE5CQVNJQwkweDE0CisjZGVmaW5lCUlGVF9JU0ROUFJJTUFSWQkweDE1CisjZGVmaW5lCUlGVF9QVFBTRVJJQUwJMHgxNgkJLyogUHJvcHJpZXRhcnkgUFRQIHNlcmlhbCAqLworI2RlZmluZQlJRlRfUFBQCQkweDE3CQkvKiBSRkMgMTMzMSAqLworI2RlZmluZQlJRlRfTE9PUAkweDE4CQkvKiBsb29wYmFjayAqLworI2RlZmluZQlJRlRfRU9OCQkweDE5CQkvKiBJU08gb3ZlciBJUCAqLworI2RlZmluZQlJRlRfWEVUSEVSCTB4MWEJCS8qIG9ic29sZXRlIDNNQiBleHBlcmltZW50YWwgZXRoZXJuZXQgKi8KKyNkZWZpbmUJSUZUX05TSVAJMHgxYgkJLyogWE5TIG92ZXIgSVAgKi8KKyNkZWZpbmUJSUZUX1NMSVAJMHgxYwkJLyogSVAgb3ZlciBnZW5lcmljIFRUWSAqLworI2RlZmluZQlJRlRfVUxUUkEJMHgxZAkJLyogVWx0cmEgVGVjaG5vbG9naWVzICovCisjZGVmaW5lCUlGVF9EUzMJCTB4MWUJCS8qIEdlbmVyaWMgVDMgKi8KKyNkZWZpbmUJSUZUX1NJUAkJMHgxZgkJLyogU01EUyAqLworI2RlZmluZQlJRlRfRlJFTEFZCTB4MjAJCS8qIEZyYW1lIFJlbGF5IERURSBvbmx5ICovCisjZGVmaW5lCUlGVF9SUzIzMgkweDIxCisjZGVmaW5lCUlGVF9QQVJBCTB4MjIJCS8qIHBhcmFsbGVsLXBvcnQgKi8KKyNkZWZpbmUJSUZUX0FSQ05FVAkweDIzCisjZGVmaW5lCUlGVF9BUkNORVRQTFVTCTB4MjQKKyNkZWZpbmUJSUZUX0FUTQkJMHgyNQkJLyogQVRNIGNlbGxzICovCisjZGVmaW5lCUlGVF9NSU9YMjUJMHgyNgorI2RlZmluZQlJRlRfU09ORVQJMHgyNwkJLyogU09ORVQgb3IgU0RIICovCisjZGVmaW5lCUlGVF9YMjVQTEUJMHgyOAorI2RlZmluZQlJRlRfSVNPODgwMjJMTEMJMHgyOQorI2RlZmluZQlJRlRfTE9DQUxUQUxLCTB4MmEKKyNkZWZpbmUJSUZUX1NNRFNEWEkJMHgyYgorI2RlZmluZQlJRlRfRlJFTEFZRENFCTB4MmMJCS8qIEZyYW1lIFJlbGF5IERDRSAqLworI2RlZmluZQlJRlRfVjM1CQkweDJkCisjZGVmaW5lCUlGVF9IU1NJCTB4MmUKKyNkZWZpbmUJSUZUX0hJUFBJCTB4MmYKKyNkZWZpbmUJSUZUX01PREVNCTB4MzAJCS8qIEdlbmVyaWMgTW9kZW0gKi8KKyNkZWZpbmUJSUZUX0FBTDUJMHgzMQkJLyogQUFMNSBvdmVyIEFUTSAqLworI2RlZmluZQlJRlRfU09ORVRQQVRICTB4MzIKKyNkZWZpbmUJSUZUX1NPTkVUVlQJMHgzMworI2RlZmluZQlJRlRfU01EU0lDSVAJMHgzNAkJLyogU01EUyBJbnRlckNhcnJpZXIgSW50ZXJmYWNlICovCisjZGVmaW5lCUlGVF9QUk9QVklSVFVBTAkweDM1CQkvKiBQcm9wcmlldGFyeSBWaXJ0dWFsL2ludGVybmFsICovCisjZGVmaW5lCUlGVF9QUk9QTVVYCTB4MzYJCS8qIFByb3ByaWV0YXJ5IE11bHRpcGxleGluZyAqLworI2RlZmluZSBJRlRfSUVFRTgwMjEyCQkgICAweDM3IC8qIDEwMEJhc2VWRyAqLworI2RlZmluZSBJRlRfRklCUkVDSEFOTkVMCSAgIDB4MzggLyogRmlicmUgQ2hhbm5lbCAqLworI2RlZmluZSBJRlRfSElQUElJTlRFUkZBQ0UJICAgMHgzOSAvKiBISVBQSSBpbnRlcmZhY2VzCSAqLworI2RlZmluZSBJRlRfRlJBTUVSRUxBWUlOVEVSQ09OTkVDVCAweDNhIC8qIE9ic29sZXRlLCB1c2UgZWl0aGVyIDB4MjAgb3IgMHgyYyAqLworI2RlZmluZSBJRlRfQUZMQU5FODAyMwkJICAgMHgzYiAvKiBBVE0gRW11bGF0ZWQgTEFOIGZvciA4MDIuMyAqLworI2RlZmluZSBJRlRfQUZMQU5FODAyNQkJICAgMHgzYyAvKiBBVE0gRW11bGF0ZWQgTEFOIGZvciA4MDIuNSAqLworI2RlZmluZSBJRlRfQ0NURU1VTAkJICAgMHgzZCAvKiBBVE0gRW11bGF0ZWQgY2lyY3VpdAkJICAqLworI2RlZmluZSBJRlRfRkFTVEVUSEVSCQkgICAweDNlIC8qIEZhc3QgRXRoZXJuZXQgKDEwMEJhc2VUKSAqLworI2RlZmluZSBJRlRfSVNETgkJICAgMHgzZiAvKiBJU0ROIGFuZCBYLjI1CSAgICAqLworI2RlZmluZSBJRlRfVjExCQkJICAgMHg0MCAvKiBDQ0lUVCBWLjExL1guMjEJCSovCisjZGVmaW5lIElGVF9WMzYJCQkgICAweDQxIC8qIENDSVRUIFYuMzYJCQkqLworI2RlZmluZSBJRlRfRzcwM0FUNjRLCQkgICAweDQyIC8qIENDSVRUIEc3MDMgYXQgNjRLYnBzICovCisjZGVmaW5lIElGVF9HNzAzQVQyTUIJCSAgIDB4NDMgLyogT2Jzb2xldGUgc2VlIERTMS1NSUIgKi8KKyNkZWZpbmUgSUZUX1FMTEMJCSAgIDB4NDQgLyogU05BIFFMTEMJCQkqLworI2RlZmluZSBJRlRfRkFTVEVUSEVSRlgJCSAgIDB4NDUgLyogRmFzdCBFdGhlcm5ldCAoMTAwQmFzZUZYKQkqLworI2RlZmluZSBJRlRfQ0hBTk5FTAkJICAgMHg0NiAvKiBjaGFubmVsCQkJKi8KKyNkZWZpbmUgSUZUX0lFRUU4MDIxMQkJICAgMHg0NyAvKiByYWRpbyBzcHJlYWQgc3BlY3RydW0JKi8KKyNkZWZpbmUgSUZUX0lCTTM3MFBBUkNIQU4JICAgMHg0OCAvKiBJQk0gU3lzdGVtIDM2MC8zNzAgT0VNSSBDaGFubmVsICovCisjZGVmaW5lIElGVF9FU0NPTgkJICAgMHg0OSAvKiBJQk0gRW50ZXJwcmlzZSBTeXN0ZW1zIENvbm5lY3Rpb24gKi8KKyNkZWZpbmUgSUZUX0RMU1cJCSAgIDB4NGEgLyogRGF0YSBMaW5rIFN3aXRjaGluZyAqLworI2RlZmluZSBJRlRfSVNETlMJCSAgIDB4NGIgLyogSVNETiBTL1QgaW50ZXJmYWNlICovCisjZGVmaW5lIElGVF9JU0ROVQkJICAgMHg0YyAvKiBJU0ROIFUgaW50ZXJmYWNlICovCisjZGVmaW5lIElGVF9MQVBECQkgICAweDRkIC8qIExpbmsgQWNjZXNzIFByb3RvY29sIEQgKi8KKyNkZWZpbmUgSUZUX0lQU1dJVENICQkgICAweDRlIC8qIElQIFN3aXRjaGluZyBPYmplY3RzICovCisjZGVmaW5lIElGVF9SU1JCCQkgICAweDRmIC8qIFJlbW90ZSBTb3VyY2UgUm91dGUgQnJpZGdpbmcgKi8KKyNkZWZpbmUgSUZUX0FUTUxPR0lDQUwJCSAgIDB4NTAgLyogQVRNIExvZ2ljYWwgUG9ydCAqLworI2RlZmluZSBJRlRfRFMwCQkJICAgMHg1MSAvKiBEaWdpdGFsIFNpZ25hbCBMZXZlbCAwICovCisjZGVmaW5lIElGVF9EUzBCVU5ETEUJCSAgIDB4NTIgLyogZ3JvdXAgb2YgZHMwcyBvbiB0aGUgc2FtZSBkczEgKi8KKyNkZWZpbmUgSUZUX0JTQwkJCSAgIDB4NTMgLyogQmlzeW5jaHJvbm91cyBQcm90b2NvbCAqLworI2RlZmluZSBJRlRfQVNZTkMJCSAgIDB4NTQgLyogQXN5bmNocm9ub3VzIFByb3RvY29sICovCisjZGVmaW5lIElGVF9DTlIJCQkgICAweDU1IC8qIENvbWJhdCBOZXQgUmFkaW8gKi8KKyNkZWZpbmUgSUZUX0lTTzg4MDI1RFRSCQkgICAweDU2IC8qIElTTyA4MDIuNXIgRFRSICovCisjZGVmaW5lIElGVF9FUExSUwkJICAgMHg1NyAvKiBFeHQgUG9zIExvYyBSZXBvcnQgU3lzICovCisjZGVmaW5lIElGVF9BUkFQCQkgICAweDU4IC8qIEFwcGxldGFsayBSZW1vdGUgQWNjZXNzIFByb3RvY29sICovCisjZGVmaW5lIElGVF9QUk9QQ05MUwkJICAgMHg1OSAvKiBQcm9wcmlldGFyeSBDb25uZWN0aW9ubGVzcyBQcm90b2NvbCovCisjZGVmaW5lIElGVF9IT1NUUEFECQkgICAweDVhIC8qIENDSVRULUlUVSBYLjI5IFBBRCBQcm90b2NvbCAqLworI2RlZmluZSBJRlRfVEVSTVBBRAkJICAgMHg1YiAvKiBDQ0lUVC1JVFUgWC4zIFBBRCBGYWNpbGl0eSAqLworI2RlZmluZSBJRlRfRlJBTUVSRUxBWU1QSQkgICAweDVjIC8qIE11bHRpcHJvdG8gSW50ZXJjb25uZWN0IG92ZXIgRlIgKi8KKyNkZWZpbmUgSUZUX1gyMTMJCSAgIDB4NWQgLyogQ0NJVFQtSVRVIFgyMTMgKi8KKyNkZWZpbmUgSUZUX0FEU0wJCSAgIDB4NWUgLyogQXN5bW1ldHJpYyBEaWdpdGFsIFN1YnNjcmliZXIgTG9vcCAqLworI2RlZmluZSBJRlRfUkFEU0wJCSAgIDB4NWYgLyogUmF0ZS1BZGFwdC4gRGlnaXRhbCBTdWJzY3JpYmVyIExvb3AqLworI2RlZmluZSBJRlRfU0RTTAkJICAgMHg2MCAvKiBTeW1tZXRyaWMgRGlnaXRhbCBTdWJzY3JpYmVyIExvb3AgKi8KKyNkZWZpbmUgSUZUX1ZEU0wJCSAgIDB4NjEgLyogVmVyeSBILVNwZWVkIERpZ2l0YWwgU3Vic2NyaWIuIExvb3AqLworI2RlZmluZSBJRlRfSVNPODgwMjVDUkZQSU5UCSAgIDB4NjIgLyogSVNPIDgwMi41IENSRlAgKi8KKyNkZWZpbmUgSUZUX01ZUklORVQJCSAgIDB4NjMgLyogTXlyaWNvbSBNeXJpbmV0ICovCisjZGVmaW5lIElGVF9WT0lDRUVNCQkgICAweDY0IC8qIHZvaWNlIHJlY0VpdmUgYW5kIHRyYW5zTWl0ICovCisjZGVmaW5lIElGVF9WT0lDRUZYTwkJICAgMHg2NSAvKiB2b2ljZSBGb3JlaWduIEV4Y2hhbmdlIE9mZmljZSAqLworI2RlZmluZSBJRlRfVk9JQ0VGWFMJCSAgIDB4NjYgLyogdm9pY2UgRm9yZWlnbiBFeGNoYW5nZSBTdGF0aW9uICovCisjZGVmaW5lIElGVF9WT0lDRUVOQ0FQCQkgICAweDY3IC8qIHZvaWNlIGVuY2Fwc3VsYXRpb24gKi8KKyNkZWZpbmUgSUZUX1ZPSUNFT1ZFUklQCQkgICAweDY4IC8qIHZvaWNlIG92ZXIgSVAgZW5jYXBzdWxhdGlvbiAqLworI2RlZmluZSBJRlRfQVRNRFhJCQkgICAweDY5IC8qIEFUTSBEWEkgKi8KKyNkZWZpbmUgSUZUX0FUTUZVTkkJCSAgIDB4NmEgLyogQVRNIEZVTkkgKi8KKyNkZWZpbmUgSUZUX0FUTUlNQQkJICAgMHg2YiAvKiBBVE0gSU1BCQkgICAgICAqLworI2RlZmluZSBJRlRfUFBQTVVMVElMSU5LQlVORExFCSAgIDB4NmMgLyogUFBQIE11bHRpbGluayBCdW5kbGUgKi8KKyNkZWZpbmUgSUZUX0lQT1ZFUkNETEMJCSAgIDB4NmQgLyogSUJNIGlwT3ZlckNkbGMgKi8KKyNkZWZpbmUgSUZUX0lQT1ZFUkNMQVcJCSAgIDB4NmUgLyogSUJNIENvbW1vbiBMaW5rIEFjY2VzcyB0byBXb3Jrc3RuICovCisjZGVmaW5lIElGVF9TVEFDS1RPU1RBQ0sJICAgMHg2ZiAvKiBJQk0gc3RhY2tUb1N0YWNrICovCisjZGVmaW5lIElGVF9WSVJUVUFMSVBBRERSRVNTCSAgIDB4NzAgLyogSUJNIFZJUEEgKi8KKyNkZWZpbmUgSUZUX01QQwkJCSAgIDB4NzEgLyogSUJNIG11bHRpLXByb3RvY29sIGNoYW5uZWwgc3VwcG9ydCAqLworI2RlZmluZSBJRlRfSVBPVkVSQVRNCQkgICAweDcyIC8qIElCTSBpcE92ZXJBdG0gKi8KKyNkZWZpbmUgSUZUX0lTTzg4MDI1RklCRVIJICAgMHg3MyAvKiBJU08gODAyLjVqIEZpYmVyIFRva2VuIFJpbmcgKi8KKyNkZWZpbmUgSUZUX1RETEMJCSAgIDB4NzQgLyogSUJNIHR3aW5heGlhbCBkYXRhIGxpbmsgY29udHJvbCAqLworI2RlZmluZSBJRlRfR0lHQUJJVEVUSEVSTkVUCSAgIDB4NzUgLyogR2lnYWJpdCBFdGhlcm5ldCAqLworI2RlZmluZSBJRlRfSERMQwkJICAgMHg3NiAvKiBIRExDICovCisjZGVmaW5lIElGVF9MQVBGCQkgICAweDc3IC8qIExBUCBGICovCisjZGVmaW5lIElGVF9WMzcJCQkgICAweDc4IC8qIFYuMzcgKi8KKyNkZWZpbmUgSUZUX1gyNU1MUAkJICAgMHg3OSAvKiBNdWx0aS1MaW5rIFByb3RvY29sICovCisjZGVmaW5lIElGVF9YMjVIVU5UR1JPVVAJICAgMHg3YSAvKiBYMjUgSHVudCBHcm91cCAqLworI2RlZmluZSBJRlRfVFJBTlNQSERMQwkJICAgMHg3YiAvKiBUcmFuc3AgSERMQyAqLworI2RlZmluZSBJRlRfSU5URVJMRUFWRQkJICAgMHg3YyAvKiBJbnRlcmxlYXZlIGNoYW5uZWwgKi8KKyNkZWZpbmUgSUZUX0ZBU1QJCSAgIDB4N2QgLyogRmFzdCBjaGFubmVsICovCisjZGVmaW5lIElGVF9JUAkJCSAgIDB4N2UgLyogSVAgKGZvciBBUFBOIEhQUiBpbiBJUCBuZXR3b3JrcykgKi8KKyNkZWZpbmUgSUZUX0RPQ1NDQUJMRU1BQ0xBWUVSCSAgIDB4N2YgLyogQ0FUViBNYWMgTGF5ZXIgKi8KKyNkZWZpbmUgSUZUX0RPQ1NDQUJMRURPV05TVFJFQU0JICAgMHg4MCAvKiBDQVRWIERvd25zdHJlYW0gaW50ZXJmYWNlICovCisjZGVmaW5lIElGVF9ET0NTQ0FCTEVVUFNUUkVBTQkgICAweDgxIC8qIENBVFYgVXBzdHJlYW0gaW50ZXJmYWNlICovCisjZGVmaW5lIElGVF9BMTJNUFBTV0lUQ0gJICAgMHg4MgkvKiBBdmFsb24gUGFyYWxsZWwgUHJvY2Vzc29yICovCisjZGVmaW5lIElGVF9UVU5ORUwJCSAgIDB4ODMJLyogRW5jYXBzdWxhdGlvbiBpbnRlcmZhY2UgKi8KKyNkZWZpbmUgSUZUX0NPRkZFRQkJICAgMHg4NAkvKiBjb2ZmZWUgcG90ICovCisjZGVmaW5lIElGVF9DRVMJCQkgICAweDg1CS8qIENpcmNpdXQgRW11bGF0aW9uIFNlcnZpY2UgKi8KKyNkZWZpbmUgSUZUX0FUTVNVQklOVEVSRkFDRQkgICAweDg2CS8qICh4KSAgQVRNIFN1YiBJbnRlcmZhY2UgKi8KKyNkZWZpbmUgSUZUX0wyVkxBTgkJICAgMHg4NwkvKiBMYXllciAyIFZpcnR1YWwgTEFOIHVzaW5nIDgwMi4xUSAqLworI2RlZmluZSBJRlRfTDNJUFZMQU4JCSAgIDB4ODgJLyogTGF5ZXIgMyBWaXJ0dWFsIExBTiAtIElQIFByb3RvY29sICovCisjZGVmaW5lIElGVF9MM0lQWFZMQU4JCSAgIDB4ODkJLyogTGF5ZXIgMyBWaXJ0dWFsIExBTiAtIElQWCBQcm90LiAqLworI2RlZmluZSBJRlRfRElHSVRBTFBPV0VSTElORQkgICAweDhhCS8qIElQIG92ZXIgUG93ZXIgTGluZXMgKi8KKyNkZWZpbmUgSUZUX01FRElBTUFJTE9WRVJJUAkgICAweDhiCS8qICh4eHgpICBNdWx0aW1lZGlhIE1haWwgb3ZlciBJUCAqLworI2RlZmluZSBJRlRfRFRNCQkJICAgMHg4YwkvKiBEeW5hbWljIHN5bmNocm9ub3VzIFRyYW5zZmVyIE1vZGUgKi8KKyNkZWZpbmUgSUZUX0RDTgkJCSAgIDB4OGQJLyogRGF0YSBDb21tdW5pY2F0aW9ucyBOZXR3b3JrICovCisjZGVmaW5lIElGVF9JUEZPUldBUkQJCSAgIDB4OGUJLyogSVAgRm9yd2FyZGluZyBJbnRlcmZhY2UgKi8KKyNkZWZpbmUgSUZUX01TRFNMCQkgICAweDhmCS8qIE11bHRpLXJhdGUgU3ltbWV0cmljIERTTCAqLworI2RlZmluZSBJRlRfSUVFRTEzOTQJCSAgIDB4OTAJLyogSUVFRTEzOTQgSGlnaCBQZXJmb3JtYW5jZSBTZXJpYWxCdXMqLworI2RlZmluZSBJRlRfSUZHU04JCSAgIDB4OTEJLyogSElQUEktNjQwMCAqLworI2RlZmluZSBJRlRfRFZCUkNDTUFDTEFZRVIJICAgMHg5MgkvKiBEVkItUkNDIE1BQyBMYXllciAqLworI2RlZmluZSBJRlRfRFZCUkNDRE9XTlNUUkVBTQkgICAweDkzCS8qIERWQi1SQ0MgRG93bnN0cmVhbSBDaGFubmVsICovCisjZGVmaW5lIElGVF9EVkJSQ0NVUFNUUkVBTQkgICAweDk0CS8qIERWQi1SQ0MgVXBzdHJlYW0gQ2hhbm5lbCAqLworI2RlZmluZSBJRlRfQVRNVklSVFVBTAkJICAgMHg5NQkvKiBBVE0gVmlydHVhbCBJbnRlcmZhY2UgKi8KKyNkZWZpbmUgSUZUX01QTFNUVU5ORUwJCSAgIDB4OTYJLyogTVBMUyBUdW5uZWwgVmlydHVhbCBJbnRlcmZhY2UgKi8KKyNkZWZpbmUgSUZUX1NSUAkJCSAgIDB4OTcJLyogU3BhdGlhbCBSZXVzZSBQcm90b2NvbCAqLworI2RlZmluZSBJRlRfVk9JQ0VPVkVSQVRNCSAgIDB4OTgJLyogVm9pY2Ugb3ZlciBBVE0gKi8KKyNkZWZpbmUgSUZUX1ZPSUNFT1ZFUkZSQU1FUkVMQVkJICAgMHg5OQkvKiBWb2ljZSBPdmVyIEZyYW1lIFJlbGF5ICovCisjZGVmaW5lIElGVF9JRFNMCQkgICAweDlhCS8qIERpZ2l0YWwgU3Vic2NyaWJlciBMb29wIG92ZXIgSVNETiAqLworI2RlZmluZSBJRlRfQ09NUE9TSVRFTElOSwkgICAweDliCS8qIEF2aWNpIENvbXBvc2l0ZSBMaW5rIEludGVyZmFjZSAqLworI2RlZmluZSBJRlRfU1M3U0lHTElOSwkJICAgMHg5YwkvKiBTUzcgU2lnbmFsaW5nIExpbmsgKi8KKyNkZWZpbmUgSUZUX1BST1BXSVJFTEVTU1AyUAkgICAweDlkCS8qIFByb3AuIFAyUCB3aXJlbGVzcyBpbnRlcmZhY2UgKi8KKyNkZWZpbmUgSUZUX0ZSRk9SV0FSRAkJICAgMHg5ZQkvKiBGcmFtZSBmb3J3YXJkIEludGVyZmFjZSAqLworI2RlZmluZSBJRlRfUkZDMTQ4MwkJICAgMHg5ZgkvKiBNdWx0aXByb3RvY29sIG92ZXIgQVRNIEFBTDUgKi8KKyNkZWZpbmUgSUZUX1VTQgkJCSAgIDB4YTAJLyogVVNCIEludGVyZmFjZSAqLworI2RlZmluZSBJRlRfSUVFRTgwMjNBRExBRwkgICAweGExCS8qIElFRUUgODAyLjNhZCBMaW5rIEFnZ3JlZ2F0ZSovCisjZGVmaW5lIElGVF9CR1BQT0xJQ1lBQ0NPVU5USU5HCSAgIDB4YTIJLyogQkdQIFBvbGljeSBBY2NvdW50aW5nICovCisjZGVmaW5lIElGVF9GUkYxNk1GUkJVTkRMRQkgICAweGEzCS8qIEZSRi4xNiBNdWx0aWxpayBGcmFtZSBSZWxheSovCisjZGVmaW5lIElGVF9IMzIzR0FURUtFRVBFUgkgICAweGE0CS8qIEgzMjMgR2F0ZWtlZXBlciAqLworI2RlZmluZSBJRlRfSDMyM1BST1hZCQkgICAweGE1CS8qIEgzMjMgVm9pY2UgYW5kIFZpZGVvIFByb3h5ICovCisjZGVmaW5lIElGVF9NUExTCQkgICAweGE2CS8qIE1QTFMgKi8KKyNkZWZpbmUgSUZUX01GU0lHTElOSwkJICAgMHhhNwkvKiBNdWx0aS1mcmVxdWVuY3kgc2lnbmFsaW5nIGxpbmsgKi8KKyNkZWZpbmUgSUZUX0hEU0wyCQkgICAweGE4CS8qIEhpZ2ggQml0LVJhdGUgRFNMLCAybmQgZ2VuLiAqLworI2RlZmluZSBJRlRfU0hEU0wJCSAgIDB4YTkJLyogTXVsdGlyYXRlIEhEU0wyICovCisjZGVmaW5lIElGVF9EUzFGREwJCSAgIDB4YWEJLyogRmFjaWxpdHkgRGF0YSBMaW5rICg0S2Jwcykgb24gYSBEUzEqLworI2RlZmluZSBJRlRfUE9TCQkJICAgMHhhYgkvKiBQYWNrZXQgb3ZlciBTT05FVC9TREggSW50ZXJmYWNlICovCisjZGVmaW5lIElGVF9EVkJBU0lMTgkJICAgMHhhYwkvKiBEVkItQVNJIElucHV0ICovCisjZGVmaW5lIElGVF9EVkJBU0lPVVQJCSAgIDB4YWQJLyogRFZCLUFTSSBPdXRwdXQgKi8KKyNkZWZpbmUgSUZUX1BMQwkJCSAgIDB4YWUJLyogUG93ZXIgTGluZSBDb21tdW5pY2F0aW9ucyAqLworI2RlZmluZSBJRlRfTkZBUwkJICAgMHhhZgkvKiBOb24tRmFjaWxpdHkgQXNzb2NpYXRlZCBTaWduYWxpbmcgKi8KKyNkZWZpbmUgSUZUX1RSMDA4CQkgICAweGIwCS8qIFRST084ICovCisjZGVmaW5lIElGVF9HUjMwM1JEVAkJICAgMHhiMQkvKiBSZW1vdGUgRGlnaXRhbCBUZXJtaW5hbCAqLworI2RlZmluZSBJRlRfR1IzMDNJRFQJCSAgIDB4YjIJLyogSW50ZWdyYXRlZCBEaWdpdGFsIFRlcm1pbmFsICovCisjZGVmaW5lIElGVF9JU1VQCQkgICAweGIzCS8qIElTVVAgKi8KKyNkZWZpbmUgSUZUX1BST1BET0NTV0lSRUxFU1NNQUNMQVlFUgkgICAweGI0CS8qIHByb3AvV2lyZWxlc3MgTUFDIExheWVyICovCisjZGVmaW5lIElGVF9QUk9QRE9DU1dJUkVMRVNTRE9XTlNUUkVBTQkgICAweGI1CS8qIHByb3AvV2lyZWxlc3MgRG93bnN0cmVhbSAqLworI2RlZmluZSBJRlRfUFJPUERPQ1NXSVJFTEVTU1VQU1RSRUFNCSAgIDB4YjYJLyogcHJvcC9XaXJlbGVzcyBVcHN0cmVhbSAqLworI2RlZmluZSBJRlRfSElQRVJMQU4yCQkgICAweGI3CS8qIEhJUEVSTEFOIFR5cGUgMiBSYWRpbyBJbnRlcmZhY2UgKi8KKyNkZWZpbmUgSUZUX1BST1BCV0FQMk1QCQkgICAweGI4CS8qIFByb3BCcm9hZGJhbmRXaXJlbGVzc0FjY2VzcyBQMk1QKi8KKyNkZWZpbmUgSUZUX1NPTkVUT1ZFUkhFQURDSEFOTkVMICAgMHhiOQkvKiBTT05FVCBPdmVyaGVhZCBDaGFubmVsICovCisjZGVmaW5lIElGVF9ESUdJVEFMV1JBUFBFUk9WRVJIRUFEQ0hBTk5FTCAgMHhiYQkvKiBEaWdpdGFsIFdyYXBwZXIgT3ZlcmhlYWQgKi8KKyNkZWZpbmUgSUZUX0FBTDIJCSAgIDB4YmIJLyogQVRNIGFkYXB0YXRpb24gbGF5ZXIgMiAqLworI2RlZmluZSBJRlRfUkFESU9NQUMJCSAgIDB4YmMJLyogTUFDIGxheWVyIG92ZXIgcmFkaW8gbGlua3MgKi8KKyNkZWZpbmUgSUZUX0FUTVJBRElPCQkgICAweGJkCS8qIEFUTSBvdmVyIHJhZGlvIGxpbmtzICovCisjZGVmaW5lIElGVF9JTVQJCQkgICAweGJlIC8qIEludGVyLU1hY2hpbmUgVHJ1bmtzICovCisjZGVmaW5lIElGVF9NVkwJCQkgICAweGJmIC8qIE11bHRpcGxlIFZpcnR1YWwgTGluZXMgRFNMICovCisjZGVmaW5lIElGVF9SRUFDSERTTAkJICAgMHhjMCAvKiBMb25nIFJlYWNoIERTTCAqLworI2RlZmluZSBJRlRfRlJETENJRU5EUFQJCSAgIDB4YzEgLyogRnJhbWUgUmVsYXkgRExDSSBFbmQgUG9pbnQgKi8KKyNkZWZpbmUgSUZUX0FUTVZDSUVORFBUCQkgICAweGMyIC8qIEFUTSBWQ0kgRW5kIFBvaW50ICovCisjZGVmaW5lIElGVF9PUFRJQ0FMQ0hBTk5FTAkgICAweGMzIC8qIE9wdGljYWwgQ2hhbm5lbCAqLworI2RlZmluZSBJRlRfT1BUSUNBTFRSQU5TUE9SVAkgICAweGM0IC8qIE9wdGljYWwgVHJhbnNwb3J0ICovCisjZGVmaW5lIElGVF9QUk9QQVRNCQkgICAweGM1IC8qIFByb3ByaWV0YXJ5IEFUTSAqLworI2RlZmluZSBJRlRfVk9JQ0VPVkVSQ0FCTEUJICAgMHhjNiAvKiBWb2ljZSBPdmVyIENhYmxlIEludGVyZmFjZSAqLworI2RlZmluZSBJRlRfSU5GSU5JQkFORAkJICAgMHhjNyAvKiBJbmZpbmliYW5kICovCisjZGVmaW5lIElGVF9URUxJTksJCSAgIDB4YzggLyogVEUgTGluayAqLworI2RlZmluZSBJRlRfUTI5MzEJCSAgIDB4YzkgLyogUS4yOTMxICovCisjZGVmaW5lIElGVF9WSVJUVUFMVEcJCSAgIDB4Y2EgLyogVmlydHVhbCBUcnVuayBHcm91cCAqLworI2RlZmluZSBJRlRfU0lQVEcJCSAgIDB4Y2IgLyogU0lQIFRydW5rIEdyb3VwICovCisjZGVmaW5lIElGVF9TSVBTSUcJCSAgIDB4Y2MgLyogU0lQIFNpZ25hbGluZyAqLworI2RlZmluZSBJRlRfRE9DU0NBQkxFVVBTVFJFQU1DSEFOTkVMIDB4Y2QgLyogQ0FUViBVcHN0cmVhbSBDaGFubmVsICovCisjZGVmaW5lIElGVF9FQ09ORVQJCSAgIDB4Y2UgLyogQWNvcm4gRWNvbmV0ICovCisjZGVmaW5lIElGVF9QT04xNTUJCSAgIDB4Y2YgLyogRlNBTiAxNTVNYiBTeW1ldHJpY2FsIFBPTiBpbnRlcmZhY2UgKi8KKyNkZWZpbmUgSUZUX1BPTjYyMgkJICAgMHhkMCAvKiBGU0FOIDYyMk1iIFN5bWV0cmljYWwgUE9OIGludGVyZmFjZSAqLyovCisjZGVmaW5lIElGVF9CUklER0UJCSAgIDB4ZDEgLyogVHJhbnNwYXJlbnQgYnJpZGdlIGludGVyZmFjZSAqLworI2RlZmluZSBJRlRfTElORUdST1VQCQkgICAweGQyIC8qIEludGVyZmFjZSBjb21tb24gdG8gbXVsdGlwbGUgbGluZXMgKi8KKyNkZWZpbmUgSUZUX1ZPSUNFRU1GR0QJCSAgIDB4ZDMgLyogdm9pY2UgRSZNIEZlYXR1cmUgR3JvdXAgRCAqLworI2RlZmluZSBJRlRfVk9JQ0VGR0RFQU5BCSAgIDB4ZDQgLyogdm9pY2UgRkdEIEV4Y2hhbmdlIEFjY2VzcyBOb3J0aCBBbWVyaWNhbiAqLworI2RlZmluZSBJRlRfVk9JQ0VESUQJCSAgIDB4ZDUgLyogdm9pY2UgRGlyZWN0IElud2FyZCBEaWFsaW5nICovCisjZGVmaW5lIElGVF9TVEYJCQkgICAweGQ3CS8qIDZ0bzQgaW50ZXJmYWNlICovCisKKy8qIG5vdCBiYXNlZCBvbiBJQU5BIGFzc2lnbm1lbnRzIC0gaG93IHNob3VsZCB3ZSB0cmVhdCB0aGVzZT8gKi8KKyNkZWZpbmUgSUZUX0dJRgkJMHhmMAorI2RlZmluZSBJRlRfUFZDCQkweGYxCisjZGVmaW5lIElGVF9GQUlUSAkweGYyCisjZGVmaW5lIElGVF9QRkxPRwkweGY1CQkvKiBQYWNrZXQgZmlsdGVyIGxvZ2dpbmcgKi8KKyNkZWZpbmUgSUZUX1BGU1lOQwkweGY2CQkvKiBQYWNrZXQgZmlsdGVyIHN0YXRlIHN5bmNpbmcgKi8KKworI2VuZGlmIC8qICFfTkVUX0lGX1RZUEVTX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvbmV0L3JvdXRlLmggYi9saWJjL2luY2x1ZGUvbmV0L3JvdXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTYwZGYyNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9uZXQvcm91dGUuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8bGludXgvcm91dGUuaD4KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9uZXRkYi5oIGIvbGliYy9pbmNsdWRlL25ldGRiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBjM2I3MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9uZXRkYi5oCkBAIC0wLDAgKzEsMjUzIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk4MCwgMTk4MywgMTk4OCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKKyAqCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAtCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTMgYnkgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24uCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLCBhbmQgdGhhdAorICogdGhlIG5hbWUgb2YgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24gbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IKKyAqIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgZG9jdW1lbnQgb3Igc29mdHdhcmUgd2l0aG91dAorICogc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgRElHSVRBTCBFUVVJUE1FTlQgQ09SUC4gRElTQ0xBSU1TIEFMTAorICogV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLCBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgIElOIE5PIEVWRU5UIFNIQUxMIERJR0lUQUwgRVFVSVBNRU5UCisgKiBDT1JQT1JBVElPTiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IKKyAqIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTCisgKiBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLgorICogLQorICogLS1Db3B5cmlnaHQtLQorICovCisKKy8qCisgKiAgICAgIEAoIyluZXRkYi5oCTguMSAoQmVya2VsZXkpIDYvMi85MworICogICAgICBGcm9tOiBJZDogbmV0ZGIuaCx2IDguOSAxOTk2LzExLzE5IDA4OjM5OjI5IHZpeGllIEV4cCAkCisgKiAkRnJlZUJTRDogL3JlcG9tYW4vci9uY3ZzL3NyYy9pbmNsdWRlL25ldGRiLmgsdiAxLjQxIDIwMDYvMDQvMTUgMTY6MjA6MjYgdW1lIEV4cCAkCisgKi8KKworI2lmbmRlZiBfTkVUREJfSF8KKyNkZWZpbmUgX05FVERCX0hfCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisKKyNpZm5kZWYgX1BBVEhfSEVRVUlWCisjIGRlZmluZQlfUEFUSF9IRVFVSVYJIi9zeXN0ZW0vZXRjL2hvc3RzLmVxdWl2IgorI2VuZGlmCisjZGVmaW5lCV9QQVRIX0hPU1RTCSIvc3lzdGVtL2V0Yy9ob3N0cyIKKyNkZWZpbmUJX1BBVEhfTkVUV09SS1MJIi9zeXN0ZW0vZXRjL25ldHdvcmtzIgorI2RlZmluZQlfUEFUSF9QUk9UT0NPTFMJIi9zeXN0ZW0vZXRjL3Byb3RvY29scyIKKyNkZWZpbmUJX1BBVEhfU0VSVklDRVMJIi9zeXN0ZW0vZXRjL3NlcnZpY2VzIgorCisjZGVmaW5lICBNQVhIT1NUTkFNRUxFTiAgMjU2CisKKy8qIEJJT05JQy1CRUdJTiAqLworI2RlZmluZSAgaF9lcnJubyAgICgqX19nZXRfaF9lcnJubygpKQorZXh0ZXJuIGludCogIF9fZ2V0X2hfZXJybm8odm9pZCk7CisvKiBCSU9OSUMtRU5EICovCisKKy8qCisgKiBTdHJ1Y3R1cmVzIHJldHVybmVkIGJ5IG5ldHdvcmsgZGF0YSBiYXNlIGxpYnJhcnkuICBBbGwgYWRkcmVzc2VzIGFyZQorICogc3VwcGxpZWQgaW4gaG9zdCBvcmRlciwgYW5kIHJldHVybmVkIGluIG5ldHdvcmsgb3JkZXIgKHN1aXRhYmxlIGZvcgorICogdXNlIGluIHN5c3RlbSBjYWxscykuCisgKi8KK3N0cnVjdCBob3N0ZW50IHsKKwljaGFyCSpoX25hbWU7CS8qIG9mZmljaWFsIG5hbWUgb2YgaG9zdCAqLworCWNoYXIJKipoX2FsaWFzZXM7CS8qIGFsaWFzIGxpc3QgKi8KKwlpbnQJaF9hZGRydHlwZTsJLyogaG9zdCBhZGRyZXNzIHR5cGUgKi8KKwlpbnQJaF9sZW5ndGg7CS8qIGxlbmd0aCBvZiBhZGRyZXNzICovCisJY2hhcgkqKmhfYWRkcl9saXN0OwkvKiBsaXN0IG9mIGFkZHJlc3NlcyBmcm9tIG5hbWUgc2VydmVyICovCisjZGVmaW5lCWhfYWRkcgloX2FkZHJfbGlzdFswXQkvKiBhZGRyZXNzLCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAqLworfTsKKworc3RydWN0IG5ldGVudCB7CisJY2hhcgkJKm5fbmFtZTsJLyogb2ZmaWNpYWwgbmFtZSBvZiBuZXQgKi8KKwljaGFyCQkqKm5fYWxpYXNlczsJLyogYWxpYXMgbGlzdCAqLworCWludAkJbl9hZGRydHlwZTsJLyogbmV0IGFkZHJlc3MgdHlwZSAqLworCXVpbnQzMl90CW5fbmV0OwkJLyogbmV0d29yayAjICovCit9OworCitzdHJ1Y3Qgc2VydmVudCB7CisJY2hhcgkqc19uYW1lOwkvKiBvZmZpY2lhbCBzZXJ2aWNlIG5hbWUgKi8KKwljaGFyCSoqc19hbGlhc2VzOwkvKiBhbGlhcyBsaXN0ICovCisJaW50CXNfcG9ydDsJCS8qIHBvcnQgIyAqLworCWNoYXIJKnNfcHJvdG87CS8qIHByb3RvY29sIHRvIHVzZSAqLworfTsKKworc3RydWN0IHByb3RvZW50IHsKKwljaGFyCSpwX25hbWU7CS8qIG9mZmljaWFsIHByb3RvY29sIG5hbWUgKi8KKwljaGFyCSoqcF9hbGlhc2VzOwkvKiBhbGlhcyBsaXN0ICovCisJaW50CXBfcHJvdG87CS8qIHByb3RvY29sICMgKi8KK307CisKK3N0cnVjdCBhZGRyaW5mbyB7CisJaW50CWFpX2ZsYWdzOwkvKiBBSV9QQVNTSVZFLCBBSV9DQU5PTk5BTUUsIEFJX05VTUVSSUNIT1NUICovCisJaW50CWFpX2ZhbWlseTsJLyogUEZfeHh4ICovCisJaW50CWFpX3NvY2t0eXBlOwkvKiBTT0NLX3h4eCAqLworCWludAlhaV9wcm90b2NvbDsJLyogMCBvciBJUFBST1RPX3h4eCBmb3IgSVB2NCBhbmQgSVB2NiAqLworCXNvY2tsZW5fdCBhaV9hZGRybGVuOwkvKiBsZW5ndGggb2YgYWlfYWRkciAqLworCWNoYXIJKmFpX2Nhbm9ubmFtZTsJLyogY2Fub25pY2FsIG5hbWUgZm9yIGhvc3RuYW1lICovCisJc3RydWN0CXNvY2thZGRyICphaV9hZGRyOwkvKiBiaW5hcnkgYWRkcmVzcyAqLworCXN0cnVjdAlhZGRyaW5mbyAqYWlfbmV4dDsJLyogbmV4dCBzdHJ1Y3R1cmUgaW4gbGlua2VkIGxpc3QgKi8KK307CisKKy8qCisgKiBFcnJvciByZXR1cm4gY29kZXMgZnJvbSBnZXRob3N0YnluYW1lKCkgYW5kIGdldGhvc3RieWFkZHIoKQorICogKGxlZnQgaW4gaF9lcnJubykuCisgKi8KKworI2RlZmluZQlORVREQl9JTlRFUk5BTAktMQkvKiBzZWUgZXJybm8gKi8KKyNkZWZpbmUJTkVUREJfU1VDQ0VTUwkwCS8qIG5vIHByb2JsZW0gKi8KKyNkZWZpbmUJSE9TVF9OT1RfRk9VTkQJMSAvKiBBdXRob3JpdGF0aXZlIEFuc3dlciBIb3N0IG5vdCBmb3VuZCAqLworI2RlZmluZQlUUllfQUdBSU4JMiAvKiBOb24tQXV0aG9yaXRhdGl2ZSBIb3N0IG5vdCBmb3VuZCwgb3IgU0VSVkVSRkFJTCAqLworI2RlZmluZQlOT19SRUNPVkVSWQkzIC8qIE5vbiByZWNvdmVyYWJsZSBlcnJvcnMsIEZPUk1FUlIsIFJFRlVTRUQsIE5PVElNUCAqLworI2RlZmluZQlOT19EQVRBCQk0IC8qIFZhbGlkIG5hbWUsIG5vIGRhdGEgcmVjb3JkIG9mIHJlcXVlc3RlZCB0eXBlICovCisjZGVmaW5lCU5PX0FERFJFU1MJTk9fREFUQQkJLyogbm8gYWRkcmVzcywgbG9vayBmb3IgTVggcmVjb3JkICovCisKKy8qCisgKiBFcnJvciByZXR1cm4gY29kZXMgZnJvbSBnZXRhZGRyaW5mbygpCisgKi8KKyNpZiAwCisvKiBvYnNvbGV0ZWQgKi8KKyNkZWZpbmUJRUFJX0FERFJGQU1JTFkJIDEJLyogYWRkcmVzcyBmYW1pbHkgZm9yIGhvc3RuYW1lIG5vdCBzdXBwb3J0ZWQgKi8KKyNlbmRpZgorI2RlZmluZQlFQUlfQUdBSU4JIDIJLyogdGVtcG9yYXJ5IGZhaWx1cmUgaW4gbmFtZSByZXNvbHV0aW9uICovCisjZGVmaW5lCUVBSV9CQURGTEFHUwkgMwkvKiBpbnZhbGlkIHZhbHVlIGZvciBhaV9mbGFncyAqLworI2RlZmluZQlFQUlfRkFJTAkgNAkvKiBub24tcmVjb3ZlcmFibGUgZmFpbHVyZSBpbiBuYW1lIHJlc29sdXRpb24gKi8KKyNkZWZpbmUJRUFJX0ZBTUlMWQkgNQkvKiBhaV9mYW1pbHkgbm90IHN1cHBvcnRlZCAqLworI2RlZmluZQlFQUlfTUVNT1JZCSA2CS8qIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUgKi8KKyNkZWZpbmUJRUFJX05PREFUQQkgNwkvKiBubyBhZGRyZXNzIGFzc29jaWF0ZWQgd2l0aCBob3N0bmFtZSAqLworI2RlZmluZQlFQUlfTk9OQU1FCSA4CS8qIGhvc3RuYW1lIG5vciBzZXJ2bmFtZSBwcm92aWRlZCwgb3Igbm90IGtub3duICovCisjZGVmaW5lCUVBSV9TRVJWSUNFCSA5CS8qIHNlcnZuYW1lIG5vdCBzdXBwb3J0ZWQgZm9yIGFpX3NvY2t0eXBlICovCisjZGVmaW5lCUVBSV9TT0NLVFlQRQkxMAkvKiBhaV9zb2NrdHlwZSBub3Qgc3VwcG9ydGVkICovCisjZGVmaW5lCUVBSV9TWVNURU0JMTEJLyogc3lzdGVtIGVycm9yIHJldHVybmVkIGluIGVycm5vICovCisjZGVmaW5lCUVBSV9CQURISU5UUwkxMgkvKiBpbnZhbGlkIHZhbHVlIGZvciBoaW50cyAqLworI2RlZmluZQlFQUlfUFJPVE9DT0wJMTMJLyogcmVzb2x2ZWQgcHJvdG9jb2wgaXMgdW5rbm93biAqLworI2RlZmluZQlFQUlfT1ZFUkZMT1cJMTQJLyogYXJndW1lbnQgYnVmZmVyIG92ZXJmbG93ICovCisjZGVmaW5lCUVBSV9NQVgJCTE1CisKKy8qCisgKiBGbGFnIHZhbHVlcyBmb3IgZ2V0YWRkcmluZm8oKQorICovCisjZGVmaW5lCUFJX1BBU1NJVkUJMHgwMDAwMDAwMSAvKiBnZXQgYWRkcmVzcyB0byB1c2UgYmluZCgpICovCisjZGVmaW5lCUFJX0NBTk9OTkFNRQkweDAwMDAwMDAyIC8qIGZpbGwgYWlfY2Fub25uYW1lICovCisjZGVmaW5lCUFJX05VTUVSSUNIT1NUCTB4MDAwMDAwMDQgLyogcHJldmVudCBob3N0IG5hbWUgcmVzb2x1dGlvbiAqLworI2RlZmluZQlBSV9OVU1FUklDU0VSVgkweDAwMDAwMDA4IC8qIHByZXZlbnQgc2VydmljZSBuYW1lIHJlc29sdXRpb24gKi8KKy8qIHZhbGlkIGZsYWdzIGZvciBhZGRyaW5mbyAobm90IGEgc3RhbmRhcmQgZGVmLCBhcHBzIHNob3VsZCBub3QgdXNlIGl0KSAqLworI2RlZmluZSBBSV9NQVNLIFwKKyAgICAoQUlfUEFTU0lWRSB8IEFJX0NBTk9OTkFNRSB8IEFJX05VTUVSSUNIT1NUIHwgQUlfTlVNRVJJQ1NFUlYgfCBcCisgICAgQUlfQUREUkNPTkZJRykKKworI2RlZmluZQlBSV9BTEwJCTB4MDAwMDAxMDAgLyogSVB2NiBhbmQgSVB2NC1tYXBwZWQgKHdpdGggQUlfVjRNQVBQRUQpICovCisjZGVmaW5lCUFJX1Y0TUFQUEVEX0NGRwkweDAwMDAwMjAwIC8qIGFjY2VwdCBJUHY0LW1hcHBlZCBpZiBrZXJuZWwgc3VwcG9ydHMgKi8KKyNkZWZpbmUJQUlfQUREUkNPTkZJRwkweDAwMDAwNDAwIC8qIG9ubHkgaWYgYW55IGFkZHJlc3MgaXMgYXNzaWduZWQgKi8KKyNkZWZpbmUJQUlfVjRNQVBQRUQJMHgwMDAwMDgwMCAvKiBhY2NlcHQgSVB2NC1tYXBwZWQgSVB2NiBhZGRyZXNzICovCisvKiBzcGVjaWFsIHJlY29tbWVuZGVkIGZsYWdzIGZvciBnZXRpcG5vZGVieW5hbWUgKi8KKyNkZWZpbmUJQUlfREVGQVVMVAkoQUlfVjRNQVBQRURfQ0ZHIHwgQUlfQUREUkNPTkZJRykKKworLyoKKyAqIENvbnN0YW50cyBmb3IgZ2V0bmFtZWluZm8oKQorICovCisjZGVmaW5lCU5JX01BWEhPU1QJMTAyNQorI2RlZmluZQlOSV9NQVhTRVJWCTMyCisKKy8qCisgKiBGbGFnIHZhbHVlcyBmb3IgZ2V0bmFtZWluZm8oKQorICovCisjZGVmaW5lCU5JX05PRlFETgkweDAwMDAwMDAxCisjZGVmaW5lCU5JX05VTUVSSUNIT1NUCTB4MDAwMDAwMDIKKyNkZWZpbmUJTklfTkFNRVJFUUQJMHgwMDAwMDAwNAorI2RlZmluZQlOSV9OVU1FUklDU0VSVgkweDAwMDAwMDA4CisjZGVmaW5lCU5JX0RHUkFNCTB4MDAwMDAwMTAKKyNpZiAwIC8qIG9ic29sZXRlICovCisjZGVmaW5lIE5JX1dJVEhTQ09QRUlECTB4MDAwMDAwMjAKKyNlbmRpZgorCisvKgorICogU2NvcGUgZGVsaW1pdCBjaGFyYWN0ZXIKKyAqLworI2RlZmluZQlTQ09QRV9ERUxJTUlURVIJJyUnCisKK19fQkVHSU5fREVDTFMKK3ZvaWQgZW5kaG9zdGVudCh2b2lkKTsKK3ZvaWQgZW5kbmV0ZW50KHZvaWQpOwordm9pZCBlbmRuZXRncmVudCh2b2lkKTsKK3ZvaWQgZW5kcHJvdG9lbnQodm9pZCk7Cit2b2lkIGVuZHNlcnZlbnQodm9pZCk7Cit2b2lkIGZyZWVob3N0ZW50KHN0cnVjdCBob3N0ZW50ICopOworc3RydWN0IGhvc3RlbnQJKmdldGhvc3RieWFkZHIoY29uc3QgY2hhciAqLCBpbnQsIGludCk7CitpbnQgZ2V0aG9zdGJ5YWRkcl9yKGNvbnN0IGNoYXIgKiwgaW50LCBpbnQsIHN0cnVjdCBob3N0ZW50ICosIGNoYXIgKiwgc2l6ZV90LCBzdHJ1Y3QgaG9zdGVudCAqKiwgaW50ICopOworc3RydWN0IGhvc3RlbnQJKmdldGhvc3RieW5hbWUoY29uc3QgY2hhciAqKTsKK2ludCBnZXRob3N0YnluYW1lX3IoY29uc3QgY2hhciAqLCBzdHJ1Y3QgaG9zdGVudCAqLCBjaGFyICosIHNpemVfdCwgc3RydWN0IGhvc3RlbnQgKiosIGludCAqKTsKK3N0cnVjdCBob3N0ZW50CSpnZXRob3N0YnluYW1lMihjb25zdCBjaGFyICosIGludCk7CitpbnQgZ2V0aG9zdGJ5bmFtZTJfcihjb25zdCBjaGFyICosIGludCwgc3RydWN0IGhvc3RlbnQgKiwgY2hhciAqLCBzaXplX3QsIHN0cnVjdCBob3N0ZW50ICoqLCBpbnQgKik7CitzdHJ1Y3QgaG9zdGVudAkqZ2V0aG9zdGVudCh2b2lkKTsKK2ludCBnZXRob3N0ZW50X3Ioc3RydWN0IGhvc3RlbnQgKiwgY2hhciAqLCBzaXplX3QsIHN0cnVjdCBob3N0ZW50ICoqLCBpbnQgKik7CitzdHJ1Y3QgaG9zdGVudAkqZ2V0aXBub2RlYnlhZGRyKGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBpbnQsIGludCAqKTsKK3N0cnVjdCBob3N0ZW50CSpnZXRpcG5vZGVieW5hbWUoY29uc3QgY2hhciAqLCBpbnQsIGludCwgaW50ICopOworc3RydWN0IG5ldGVudAkqZ2V0bmV0YnlhZGRyKHVpbnQzMl90LCBpbnQpOworaW50IGdldG5ldGJ5YWRkcl9yKHVpbnQzMl90LCBpbnQsIHN0cnVjdCBuZXRlbnQgKiwgY2hhciAqLCBzaXplX3QsIHN0cnVjdCBuZXRlbnQqKiwgaW50ICopOworc3RydWN0IG5ldGVudAkqZ2V0bmV0YnluYW1lKGNvbnN0IGNoYXIgKik7CitpbnQgZ2V0bmV0YnluYW1lX3IoY29uc3QgY2hhciAqLCBzdHJ1Y3QgbmV0ZW50ICosIGNoYXIgKiwgc2l6ZV90LCBzdHJ1Y3QgbmV0ZW50ICoqLCBpbnQgKik7CitzdHJ1Y3QgbmV0ZW50CSpnZXRuZXRlbnQodm9pZCk7CitpbnQgZ2V0bmV0ZW50X3Ioc3RydWN0IG5ldGVudCAqLCBjaGFyICosIHNpemVfdCwgc3RydWN0IG5ldGVudCAqKiwgaW50ICopOworaW50IGdldG5ldGdyZW50KGNoYXIgKiosIGNoYXIgKiosIGNoYXIgKiopOworc3RydWN0IHByb3RvZW50CSpnZXRwcm90b2J5bmFtZShjb25zdCBjaGFyICopOworaW50IGdldHByb3RvYnluYW1lX3IoY29uc3QgY2hhciAqLCBzdHJ1Y3QgcHJvdG9lbnQgKiwgY2hhciAqLCBzaXplX3QsIHN0cnVjdCBwcm90b2VudCAqKik7CitzdHJ1Y3QgcHJvdG9lbnQJKmdldHByb3RvYnludW1iZXIoaW50KTsKK2ludCBnZXRwcm90b2J5bnVtYmVyX3IoaW50LCBzdHJ1Y3QgcHJvdG9lbnQgKiwgY2hhciAqLCBzaXplX3QsIHN0cnVjdCBwcm90b2VudCAqKik7CitzdHJ1Y3QgcHJvdG9lbnQJKmdldHByb3RvZW50KHZvaWQpOworaW50IGdldHByb3RvZW50X3Ioc3RydWN0IHByb3RvZW50ICosIGNoYXIgKiwgc2l6ZV90LCBzdHJ1Y3QgcHJvdG9lbnQgKiopOworc3RydWN0IHNlcnZlbnQJKmdldHNlcnZieW5hbWUoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworc3RydWN0IHNlcnZlbnQJKmdldHNlcnZieXBvcnQoaW50LCBjb25zdCBjaGFyICopOworc3RydWN0IHNlcnZlbnQJKmdldHNlcnZlbnQodm9pZCk7Cit2b2lkIGhlcnJvcihjb25zdCBjaGFyICopOworY29uc3QgY2hhcgkqaHN0cmVycm9yKGludCk7CitpbnQgaW5uZXRncihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwordm9pZCBzZXRob3N0ZW50KGludCk7Cit2b2lkIHNldG5ldGVudChpbnQpOwordm9pZCBzZXRwcm90b2VudChpbnQpOworaW50IGdldGFkZHJpbmZvKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKiwgc3RydWN0IGFkZHJpbmZvICoqKTsKK2ludCBnZXRuYW1laW5mbyhjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKiwgc29ja2xlbl90LCBjaGFyICosIHNpemVfdCwgY2hhciAqLCBzaXplX3QsIGludCk7Cit2b2lkIGZyZWVhZGRyaW5mbyhzdHJ1Y3QgYWRkcmluZm8gKik7Citjb25zdCBjaGFyCSpnYWlfc3RyZXJyb3IoaW50KTsKK3ZvaWQgc2V0bmV0Z3JlbnQoY29uc3QgY2hhciAqKTsKK3ZvaWQgc2V0c2VydmVudChpbnQpOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogIV9ORVREQl9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL25ldGluZXQvZXRoZXIuaCBiL2xpYmMvaW5jbHVkZS9uZXRpbmV0L2V0aGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFjOWNiYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9uZXRpbmV0L2V0aGVyLmgKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPG5ldC9pZl9ldGhlci5oPgpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL25ldGluZXQvaWZfZXRoZXIuaCBiL2xpYmMvaW5jbHVkZS9uZXRpbmV0L2lmX2V0aGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzAwYjlkYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9uZXRpbmV0L2lmX2V0aGVyLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisjaWZuZGVmIEVUSEVSX0FERFJfTEVOCisjZGVmaW5lIEVUSEVSX0FERFJfTEVOIEVUSF9BTEVOCisjaW5jbHVkZSA8bmV0L2V0aGVydHlwZXMuaD4KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL25ldGluZXQvaW4uaCBiL2xpYmMvaW5jbHVkZS9uZXRpbmV0L2luLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdhZTUwNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9uZXRpbmV0L2luLmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfTkVUSU5FVF9JTl9IXworI2RlZmluZSBfTkVUSU5FVF9JTl9IXworCisjaW5jbHVkZSA8ZW5kaWFuLmg+CisjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9pbjYuaD4KKworX19CRUdJTl9ERUNMUworCisjZGVmaW5lIElQUE9SVF9SRVNFUlZFRCAgMTAyNAorCitleHRlcm4gaW50IGJpbmRyZXN2cG9ydCAoaW50IHNkLCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbik7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfTkVUSU5FVF9JTl9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL25ldGluZXQvaW42LmggYi9saWJjL2luY2x1ZGUvbmV0aW5ldC9pbjYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjQ1YzQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL25ldGluZXQvaW42LmgKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfTkVUSU5FVF9JTjZfSAorI2RlZmluZSBfTkVUSU5FVF9JTjZfSAorCisjaW5jbHVkZSA8bGludXgvaW42Lmg+CisKKyNkZWZpbmUgSU42X0lTX0FERFJfVU5TUEVDSUZJRUQoYSkJXAorCSgoKihjb25zdCB1aW50MzJfdCAqKShjb25zdCB2b2lkICopKCYoYSktPnM2X2FkZHJbMF0pID09IDApICYmCVwKKwkgKCooY29uc3QgdWludDMyX3QgKikoY29uc3Qgdm9pZCAqKSgmKGEpLT5zNl9hZGRyWzRdKSA9PSAwKSAmJglcCisJICgqKGNvbnN0IHVpbnQzMl90ICopKGNvbnN0IHZvaWQgKikoJihhKS0+czZfYWRkcls4XSkgPT0gMCkgJiYJXAorCSAoKihjb25zdCB1aW50MzJfdCAqKShjb25zdCB2b2lkICopKCYoYSktPnM2X2FkZHJbMTJdKSA9PSAwKSkKKworI2RlZmluZSBJTjZfSVNfQUREUl9MT09QQkFDSyhhKQkJXAorCSgoKihjb25zdCB1aW50MzJfdCAqKShjb25zdCB2b2lkICopKCYoYSktPnM2X2FkZHJbMF0pID09IDApICYmCVwKKwkgKCooY29uc3QgdWludDMyX3QgKikoY29uc3Qgdm9pZCAqKSgmKGEpLT5zNl9hZGRyWzRdKSA9PSAwKSAmJglcCisJICgqKGNvbnN0IHVpbnQzMl90ICopKGNvbnN0IHZvaWQgKikoJihhKS0+czZfYWRkcls4XSkgPT0gMCkgJiYJXAorCSAoKihjb25zdCB1aW50MzJfdCAqKShjb25zdCB2b2lkICopKCYoYSktPnM2X2FkZHJbMTJdKSA9PSBudG9obCgxKSkpCisKKyNkZWZpbmUgSU42X0lTX0FERFJfVjRDT01QQVQoYSkJCVwKKwkoKCooY29uc3QgdWludDMyX3QgKikoY29uc3Qgdm9pZCAqKSgmKGEpLT5zNl9hZGRyWzBdKSA9PSAwKSAmJglcCisJICgqKGNvbnN0IHVpbnQzMl90ICopKGNvbnN0IHZvaWQgKikoJihhKS0+czZfYWRkcls0XSkgPT0gMCkgJiYJXAorCSAoKihjb25zdCB1aW50MzJfdCAqKShjb25zdCB2b2lkICopKCYoYSktPnM2X2FkZHJbOF0pID09IDApICYmCVwKKwkgKCooY29uc3QgdWludDMyX3QgKikoY29uc3Qgdm9pZCAqKSgmKGEpLT5zNl9hZGRyWzEyXSkgIT0gMCkgJiYJXAorCSAoKihjb25zdCB1aW50MzJfdCAqKShjb25zdCB2b2lkICopKCYoYSktPnM2X2FkZHJbMTJdKSAhPSBudG9obCgxKSkpCisKKyNkZWZpbmUgSU42X0lTX0FERFJfVjRNQVBQRUQoYSkJCSAgICAgIFwKKwkoKCooY29uc3QgdWludDMyX3QgKikoY29uc3Qgdm9pZCAqKSgmKGEpLT5zNl9hZGRyWzBdKSA9PSAwKSAmJglcCisJICgqKGNvbnN0IHVpbnQzMl90ICopKGNvbnN0IHZvaWQgKikoJihhKS0+czZfYWRkcls0XSkgPT0gMCkgJiYJXAorCSAoKihjb25zdCB1aW50MzJfdCAqKShjb25zdCB2b2lkICopKCYoYSktPnM2X2FkZHJbOF0pID09IG50b2hsKDB4MDAwMGZmZmYpKSkKKworI2RlZmluZSBJTjZfSVNfQUREUl9MSU5LTE9DQUwoYSkJXAorCSgoKGEpLT5zNl9hZGRyWzBdID09IDB4ZmUpICYmICgoKGEpLT5zNl9hZGRyWzFdICYgMHhjMCkgPT0gMHg4MCkpCisKKyNkZWZpbmUgSU42X0lTX0FERFJfU0lURUxPQ0FMKGEpCVwKKwkoKChhKS0+czZfYWRkclswXSA9PSAweGZlKSAmJiAoKChhKS0+czZfYWRkclsxXSAmIDB4YzApID09IDB4YzApKQorCisjZGVmaW5lIElONl9JU19BRERSX01VTFRJQ0FTVChhKQlcCisJKCgoX19jb25zdCB1aW50OF90ICopIChhKSlbMF0gPT0gMHhmZikKKworCisjZGVmaW5lIElQVjZfQUREUl9TQ09QRV9OT0RFTE9DQUwgICAgICAgMHgwMQorI2RlZmluZSBJUFY2X0FERFJfU0NPUEVfSU5URkFDRUxPQ0FMICAgIDB4MDEKKyNkZWZpbmUgSVBWNl9BRERSX1NDT1BFX0xJTktMT0NBTCAgICAgICAweDAyCisjZGVmaW5lIElQVjZfQUREUl9TQ09QRV9TSVRFTE9DQUwgICAgICAgMHgwNQorI2RlZmluZSBJUFY2X0FERFJfU0NPUEVfT1JHTE9DQUwgICAgICAgIDB4MDgKKyNkZWZpbmUgSVBWNl9BRERSX1NDT1BFX0dMT0JBTCAgICAgICAgICAweDBlCisKKyNkZWZpbmUgSVBWNl9BRERSX01DX1NDT1BFKGEpCVwKKwkoKGEpLT5zNl9hZGRyWzFdICYgMHgwZikKKworI2RlZmluZSBJTjZfSVNfQUREUl9NQ19MSU5LTE9DQUwoYSkJXAorCShJTjZfSVNfQUREUl9NVUxUSUNBU1QoYSkgJiYgIFwKKwkgKElQVjZfQUREUl9NQ19TQ09QRShhKSA9PSBJUFY2X0FERFJfU0NPUEVfTElOS0xPQ0FMKSkKKyNkZWZpbmUgSU42X0lTX0FERFJfTUNfU0lURUxPQ0FMKGEpICAgICBcCisJKElONl9JU19BRERSX01VTFRJQ0FTVChhKSAmJiAgXAorCSAoSVBWNl9BRERSX01DX1NDT1BFKGEpID09IElQVjZfQUREUl9TQ09QRV9TSVRFTE9DQUwpKQorI2RlZmluZSBJTjZfSVNfQUREUl9NQ19PUkdMT0NBTChhKSAgICAgXAorCShJTjZfSVNfQUREUl9NVUxUSUNBU1QoYSkgJiYgIFwKKwkgKElQVjZfQUREUl9NQ19TQ09QRShhKSA9PSBJUFY2X0FERFJfU0NPUEVfT1JHTE9DQUwpKQorCisKKyNkZWZpbmUgSU42X0FSRV9BRERSX0VRVUFMKGEsIGIpCQkJXAorICAgIChtZW1jbXAoJihhKS0+czZfYWRkclswXSwgJihiKS0+czZfYWRkclswXSwgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpID09IDApCisKKyNkZWZpbmUgSU5FVDZfQUREUlNUUkxFTiA0NgorCisjZW5kaWYgLyogX05FVElORVRfSU42X0ggKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9uZXRpbmV0L2luX3N5c3RtLmggYi9saWJjL2luY2x1ZGUvbmV0aW5ldC9pbl9zeXN0bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmNTNmYjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvbmV0aW5ldC9pbl9zeXN0bS5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCSROZXRCU0Q6IGluX3N5c3RtLmgsdiAxLjEzIDIwMDUvMTIvMTAgMjM6MzY6MjMgZWxhZCBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTgyLCAxOTg2LCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICoJQCgjKWluX3N5c3RtLmgJOC4xIChCZXJrZWxleSkgNi8xMC85MworICovCisKKyNpZm5kZWYgX05FVElORVRfSU5fU1lTVE1fSF8KKyNkZWZpbmUgX05FVElORVRfSU5fU1lTVE1fSF8KKworLyoKKyAqIE1pc2NlbGxhbmVvdXMgaW50ZXJuZXR3b3JrCisgKiBkZWZpbml0aW9ucyBmb3Iga2VybmVsLgorICovCisKKy8qCisgKiBOZXR3b3JrIHR5cGVzLgorICoKKyAqIEludGVybmFsbHkgdGhlIHN5c3RlbSBrZWVwcyBjb3VudGVycyBpbiB0aGUgaGVhZGVycyB3aXRoIHRoZSBieXRlcworICogc3dhcHBlZCBzbyB0aGF0IFZBWCBpbnN0cnVjdGlvbnMgd2lsbCB3b3JrIG9uIHRoZW0uICBJdCByZXZlcnNlcworICogdGhlIGJ5dGVzIGJlZm9yZSB0cmFuc21pc3Npb24gYXQgZWFjaCBwcm90b2NvbCBsZXZlbC4gIFRoZSBuXyB0eXBlcworICogcmVwcmVzZW50IHRoZSB0eXBlcyB3aXRoIHRoZSBieXRlcyBpbiBgYGhpZ2gtZW5kZXInJyBvcmRlci4KKyAqLwordHlwZWRlZiB1X2ludDE2X3Qgbl9zaG9ydDsJCS8qIHNob3J0IGFzIHJlY2VpdmVkIGZyb20gdGhlIG5ldCAqLwordHlwZWRlZiB1X2ludDMyX3Qgbl9sb25nOwkJLyogbG9uZyBhcyByZWNlaXZlZCBmcm9tIHRoZSBuZXQgKi8KKwordHlwZWRlZiB1X2ludDMyX3Qgbl90aW1lOwkJLyogbXMgc2luY2UgMDA6MDAgR01ULCBieXRlIHJldiAqLworCisjaWZkZWYgX0tFUk5FTAorbl90aW1lCSBpcHRpbWUgKHZvaWQpOworI2VuZGlmCisKKyNlbmRpZiAvKiAhX05FVElORVRfSU5fU1lTVE1fSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9uZXRpbmV0L2lwLmggYi9saWJjL2luY2x1ZGUvbmV0aW5ldC9pcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0MTkwNWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvbmV0aW5ldC9pcC5oCkBAIC0wLDAgKzEsMjc1IEBACisvKgkkT3BlbkJTRDogaXAuaCx2IDEuMTIgMjAwNi8wNC8yNyAwMjoxOTozMiB0ZWR1IEV4cCAkCSovCisvKgkkTmV0QlNEOiBpcC5oLHYgMS45IDE5OTUvMDUvMTUgMDE6MjI6NDQgY2dkIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODIsIDE5ODYsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglAKCMpaXAuaAk4LjEgKEJlcmtlbGV5KSA2LzEwLzkzCisgKi8KKworI2lmbmRlZiBfTkVUSU5FVF9JUF9IXworI2RlZmluZSBfTkVUSU5FVF9JUF9IXworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8ZW5kaWFuLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW5fc3lzdG0uaD4KKworX19CRUdJTl9ERUNMUworCisvKgorICogRGVmaW5pdGlvbnMgZm9yIGludGVybmV0IHByb3RvY29sIHZlcnNpb24gNC4KKyAqIFBlciBSRkMgNzkxLCBTZXB0ZW1iZXIgMTk4MS4KKyAqLworI2RlZmluZQlJUFZFUlNJT04JNAorCisvKgorICogU3RydWN0dXJlIG9mIGFuIGludGVybmV0IGhlYWRlciwgbmFrZWQgb2Ygb3B0aW9ucy4KKyAqLworc3RydWN0IGlwIHsKKyNpZiBCWVRFX09SREVSID09IExJVFRMRV9FTkRJQU4KKwl1X2ludDMyX3QgaXBfaGw6NCwJCS8qIGhlYWRlciBsZW5ndGggKi8KKwkJICBpcF92OjQ7CQkvKiB2ZXJzaW9uICovCisjZW5kaWYKKyNpZiBCWVRFX09SREVSID09IEJJR19FTkRJQU4KKwl1X2ludDMyX3QgaXBfdjo0LAkJLyogdmVyc2lvbiAqLworCQkgIGlwX2hsOjQ7CQkvKiBoZWFkZXIgbGVuZ3RoICovCisjZW5kaWYKKwl1X2ludDhfdCAgaXBfdG9zOwkJLyogdHlwZSBvZiBzZXJ2aWNlICovCisJdV9pbnQxNl90IGlwX2xlbjsJCS8qIHRvdGFsIGxlbmd0aCAqLworCXVfaW50MTZfdCBpcF9pZDsJCS8qIGlkZW50aWZpY2F0aW9uICovCisJdV9pbnQxNl90IGlwX29mZjsJCS8qIGZyYWdtZW50IG9mZnNldCBmaWVsZCAqLworI2RlZmluZQlJUF9SRiAweDgwMDAJCQkvKiByZXNlcnZlZCBmcmFnbWVudCBmbGFnICovCisjZGVmaW5lCUlQX0RGIDB4NDAwMAkJCS8qIGRvbnQgZnJhZ21lbnQgZmxhZyAqLworI2RlZmluZQlJUF9NRiAweDIwMDAJCQkvKiBtb3JlIGZyYWdtZW50cyBmbGFnICovCisjZGVmaW5lCUlQX09GRk1BU0sgMHgxZmZmCQkvKiBtYXNrIGZvciBmcmFnbWVudGluZyBiaXRzICovCisJdV9pbnQ4X3QgIGlwX3R0bDsJCS8qIHRpbWUgdG8gbGl2ZSAqLworCXVfaW50OF90ICBpcF9wOwkJCS8qIHByb3RvY29sICovCisJdV9pbnQxNl90IGlwX3N1bTsJCS8qIGNoZWNrc3VtICovCisJc3RydWN0CSAgaW5fYWRkciBpcF9zcmMsIGlwX2RzdDsgLyogc291cmNlIGFuZCBkZXN0IGFkZHJlc3MgKi8KK307CisKKyNkZWZpbmUJSVBfTUFYUEFDS0VUCTY1NTM1CQkvKiBtYXhpbXVtIHBhY2tldCBzaXplICovCisKKy8qCisgKiBEZWZpbml0aW9ucyBmb3IgSVAgdHlwZSBvZiBzZXJ2aWNlIChpcF90b3MpCisgKi8KKyNkZWZpbmUJSVBUT1NfTE9XREVMQVkJCTB4MTAKKyNkZWZpbmUJSVBUT1NfVEhST1VHSFBVVAkweDA4CisjZGVmaW5lCUlQVE9TX1JFTElBQklMSVRZCTB4MDQKKy8qCUlQVE9TX0xPV0NPU1QJCTB4MDIgWFhYICovCisjaWYgMQorLyogRUNOIFJGQzMxNjggb2Jzb2xldGVzIFJGQzI0ODEsIGFuZCB0aGVzZSB3aWxsIGJlIGRlcHJlY2F0ZWQgc29vbi4gKi8KKyNkZWZpbmUgSVBUT1NfQ0UJCTB4MDEJLyogY29uZ2VzdGlvbiBleHBlcmllbmNlZCAqLworI2RlZmluZSBJUFRPU19FQ1QJCTB4MDIJLyogRUNOLWNhcGFibGUgdHJhbnNwb3J0ICovCisjZW5kaWYKKworLyoKKyAqIERlZmluaXRpb25zIGZvciBJUCBwcmVjZWRlbmNlIChhbHNvIGluIGlwX3RvcykgKGhvcGVmdWxseSB1bnVzZWQpCisgKi8KKyNkZWZpbmUJSVBUT1NfUFJFQ19ORVRDT05UUk9MCQkweGUwCisjZGVmaW5lCUlQVE9TX1BSRUNfSU5URVJORVRDT05UUk9MCTB4YzAKKyNkZWZpbmUJSVBUT1NfUFJFQ19DUklUSUNfRUNQCQkweGEwCisjZGVmaW5lCUlQVE9TX1BSRUNfRkxBU0hPVkVSUklERQkweDgwCisjZGVmaW5lCUlQVE9TX1BSRUNfRkxBU0gJCTB4NjAKKyNkZWZpbmUJSVBUT1NfUFJFQ19JTU1FRElBVEUJCTB4NDAKKyNkZWZpbmUJSVBUT1NfUFJFQ19QUklPUklUWQkJMHgyMAorI2RlZmluZQlJUFRPU19QUkVDX1JPVVRJTkUJCTB4MDAKKworLyoKKyAqIEVDTiAoRXhwbGljaXQgQ29uZ2VzdGlvbiBOb3RpZmljYXRpb24pIGNvZGVwb2ludHMgaW4gUkZDMzE2OAorICogbWFwcGVkIHRvIHRoZSBsb3dlciAyIGJpdHMgb2YgdGhlIFRPUyBmaWVsZC4KKyAqLworI2RlZmluZQlJUFRPU19FQ05fTk9URUNUCTB4MDAJLyogbm90LUVDVCAqLworI2RlZmluZQlJUFRPU19FQ05fRUNUMQkJMHgwMQkvKiBFQ04tY2FwYWJsZSB0cmFuc3BvcnQgKDEpICovCisjZGVmaW5lCUlQVE9TX0VDTl9FQ1QwCQkweDAyCS8qIEVDTi1jYXBhYmxlIHRyYW5zcG9ydCAoMCkgKi8KKyNkZWZpbmUJSVBUT1NfRUNOX0NFCQkweDAzCS8qIGNvbmdlc3Rpb24gZXhwZXJpZW5jZWQgKi8KKyNkZWZpbmUJSVBUT1NfRUNOX01BU0sJCTB4MDMJLyogRUNOIGZpZWxkIG1hc2sgKi8KKworLyoKKyAqIERlZmluaXRpb25zIGZvciBvcHRpb25zLgorICovCisjZGVmaW5lCUlQT1BUX0NPUElFRChvKQkJKChvKSYweDgwKQorI2RlZmluZQlJUE9QVF9DTEFTUyhvKQkJKChvKSYweDYwKQorI2RlZmluZQlJUE9QVF9OVU1CRVIobykJCSgobykmMHgxZikKKworI2RlZmluZQlJUE9QVF9DT05UUk9MCQkweDAwCisjZGVmaW5lCUlQT1BUX1JFU0VSVkVEMQkJMHgyMAorI2RlZmluZQlJUE9QVF9ERUJNRUFTCQkweDQwCisjZGVmaW5lCUlQT1BUX1JFU0VSVkVEMgkJMHg2MAorCisjZGVmaW5lCUlQT1BUX0VPTAkJMAkJLyogZW5kIG9mIG9wdGlvbiBsaXN0ICovCisjZGVmaW5lCUlQT1BUX05PUAkJMQkJLyogbm8gb3BlcmF0aW9uICovCisKKyNkZWZpbmUJSVBPUFRfUlIJCTcJCS8qIHJlY29yZCBwYWNrZXQgcm91dGUgKi8KKyNkZWZpbmUJSVBPUFRfVFMJCTY4CQkvKiB0aW1lc3RhbXAgKi8KKyNkZWZpbmUJSVBPUFRfU0VDVVJJVFkJCTEzMAkJLyogcHJvdmlkZSBzLGMsaCx0Y2MgKi8KKyNkZWZpbmUJSVBPUFRfTFNSUgkJMTMxCQkvKiBsb29zZSBzb3VyY2Ugcm91dGUgKi8KKyNkZWZpbmUJSVBPUFRfU0FUSUQJCTEzNgkJLyogc2F0bmV0IGlkICovCisjZGVmaW5lCUlQT1BUX1NTUlIJCTEzNwkJLyogc3RyaWN0IHNvdXJjZSByb3V0ZSAqLworCisvKgorICogT2Zmc2V0cyB0byBmaWVsZHMgaW4gb3B0aW9ucyBvdGhlciB0aGFuIEVPTCBhbmQgTk9QLgorICovCisjZGVmaW5lCUlQT1BUX09QVFZBTAkJMAkJLyogb3B0aW9uIElEICovCisjZGVmaW5lCUlQT1BUX09MRU4JCTEJCS8qIG9wdGlvbiBsZW5ndGggKi8KKyNkZWZpbmUJSVBPUFRfT0ZGU0VUCQkyCQkvKiBvZmZzZXQgd2l0aGluIG9wdGlvbiAqLworI2RlZmluZQlJUE9QVF9NSU5PRkYJCTQJCS8qIG1pbiB2YWx1ZSBvZiBhYm92ZSAqLworCisvKgorICogVGltZSBzdGFtcCBvcHRpb24gc3RydWN0dXJlLgorICovCitzdHJ1Y3QJaXBfdGltZXN0YW1wIHsKKwl1X2ludDhfdCBpcHRfY29kZTsJCS8qIElQT1BUX1RTICovCisJdV9pbnQ4X3QgaXB0X2xlbjsJCS8qIHNpemUgb2Ygc3RydWN0dXJlICh2YXJpYWJsZSkgKi8KKwl1X2ludDhfdCBpcHRfcHRyOwkJLyogaW5kZXggb2YgY3VycmVudCBlbnRyeSAqLworI2lmIF9CWVRFX09SREVSID09IF9MSVRUTEVfRU5ESUFOCisJdV9pbnQzMl90IGlwdF9mbGc6NCwJCS8qIGZsYWdzLCBzZWUgYmVsb3cgKi8KKwkJICBpcHRfb2Zsdzo0OwkJLyogb3ZlcmZsb3cgY291bnRlciAqLworI2VuZGlmCisjaWYgX0JZVEVfT1JERVIgPT0gX0JJR19FTkRJQU4KKwl1X2ludDMyX3QgaXB0X29mbHc6NCwJCS8qIG92ZXJmbG93IGNvdW50ZXIgKi8KKwkJICBpcHRfZmxnOjQ7CQkvKiBmbGFncywgc2VlIGJlbG93ICovCisjZW5kaWYKKwl1bmlvbiBpcHRfdGltZXN0YW1wIHsKKwluX3RpbWUJaXB0X3RpbWVbMV07CisJc3RydWN0CWlwdF90YSB7CisJCXN0cnVjdCBpbl9hZGRyIGlwdF9hZGRyOworCQluX3RpbWUgaXB0X3RpbWU7CisJfSBpcHRfdGFbMV07CisJfSBpcHRfdGltZXN0YW1wOworfTsKKworLyogZmxhZyBiaXRzIGZvciBpcHRfZmxnICovCisjZGVmaW5lCUlQT1BUX1RTX1RTT05MWQkJMAkJLyogdGltZXN0YW1wcyBvbmx5ICovCisjZGVmaW5lCUlQT1BUX1RTX1RTQU5EQUREUgkxCQkvKiB0aW1lc3RhbXBzIGFuZCBhZGRyZXNzZXMgKi8KKyNkZWZpbmUJSVBPUFRfVFNfUFJFU1BFQwkzCQkvKiBzcGVjaWZpZWQgbW9kdWxlcyBvbmx5ICovCisKKy8qIGJpdHMgZm9yIHNlY3VyaXR5IChub3QgYnl0ZSBzd2FwcGVkKSAqLworI2RlZmluZQlJUE9QVF9TRUNVUl9VTkNMQVNTCTB4MDAwMAorI2RlZmluZQlJUE9QVF9TRUNVUl9DT05GSUQJMHhmMTM1CisjZGVmaW5lCUlQT1BUX1NFQ1VSX0VGVE8JMHg3ODlhCisjZGVmaW5lCUlQT1BUX1NFQ1VSX01NTU0JMHhiYzRkCisjZGVmaW5lCUlQT1BUX1NFQ1VSX1JFU1RSCTB4YWYxMworI2RlZmluZQlJUE9QVF9TRUNVUl9TRUNSRVQJMHhkNzg4CisjZGVmaW5lCUlQT1BUX1NFQ1VSX1RPUFNFQ1JFVAkweDZiYzUKKworLyoKKyAqIEludGVybmV0IGltcGxlbWVudGF0aW9uIHBhcmFtZXRlcnMuCisgKi8KKyNkZWZpbmUJTUFYVFRMCQkyNTUJCS8qIG1heGltdW0gdGltZSB0byBsaXZlIChzZWNvbmRzKSAqLworI2RlZmluZQlJUERFRlRUTAk2NAkJLyogZGVmYXVsdCB0dGwsIGZyb20gUkZDIDEzNDAgKi8KKyNkZWZpbmUJSVBGUkFHVFRMCTYwCQkvKiB0aW1lIHRvIGxpdmUgZm9yIGZyYWdzLCBzbG93aHogKi8KKyNkZWZpbmUJSVBUVExERUMJMQkJLyogc3VidHJhY3RlZCB3aGVuIGZvcndhcmRpbmcgKi8KKworI2RlZmluZQlJUF9NU1MJCTU3NgkJLyogZGVmYXVsdCBtYXhpbXVtIHNlZ21lbnQgc2l6ZSAqLworCisvKgorICogVGhpcyBpcyB0aGUgcmVhbCBJUHY0IHBzZXVkbyBoZWFkZXIsIHVzZWQgZm9yIGNvbXB1dGluZyB0aGUgVENQIGFuZCBVRFAKKyAqIGNoZWNrc3Vtcy4gRm9yIHRoZSBJbnRlcm5ldCBjaGVja3N1bSwgc3RydWN0IGlwb3ZseSBjYW4gYmUgdXNlZCBpbnN0ZWFkLgorICogRm9yIHN0cm9uZ2VyIGNoZWNrc3VtcywgdGhlIHJlYWwgdGhpbmcgbXVzdCBiZSB1c2VkLgorICovCitzdHJ1Y3QgaXBwc2V1ZG8geworCXN0cnVjdCAgICBpbl9hZGRyIGlwcHNldWRvX3NyYzsJLyogc291cmNlIGludGVybmV0IGFkZHJlc3MgKi8KKwlzdHJ1Y3QgICAgaW5fYWRkciBpcHBzZXVkb19kc3Q7CS8qIGRlc3RpbmF0aW9uIGludGVybmV0IGFkZHJlc3MgKi8KKwl1X2ludDhfdCAgaXBwc2V1ZG9fcGFkOwkJLyogcGFkLCBtdXN0IGJlIHplcm8gKi8KKwl1X2ludDhfdCAgaXBwc2V1ZG9fcDsJCS8qIHByb3RvY29sICovCisJdV9pbnQxNl90IGlwcHNldWRvX2xlbjsJCS8qIHByb3RvY29sIGxlbmd0aCAqLworfTsKKworLyogQklPTklDIGFkZGl0aW9uOiBkZWNsYXJhdGlvbnMgbWF0Y2hpbmcgdGhlIExpbnV4IGtlcm5lbCAqLworLyogICAgICAgICAgICAgICAgICBzb21lIHByb2dyYW1zIGV4cGVjdCB0aGVzZS4uLiAgICAgICAgICAqLworCisjZGVmaW5lIElQT1BUX09QVFZBTCAwCisjZGVmaW5lIElQT1BUX09MRU4gICAxCisjZGVmaW5lIElQT1BUX09GRlNFVCAyCisjZGVmaW5lIElQT1BUX01JTk9GRiA0CisjZGVmaW5lIE1BWF9JUE9QVExFTiA0MAorCisjZGVmaW5lIElQT1BUX0NPUFkJCTB4ODAKKyNkZWZpbmUgSVBPUFRfQ0xBU1NfTUFTSwkweDYwCisjZGVmaW5lIElQT1BUX05VTUJFUl9NQVNLCTB4MWYKKworI2RlZmluZQlJUE9QVF9DT05UUk9MCQkweDAwCisjZGVmaW5lCUlQT1BUX1JFU0VSVkVEMQkJMHgyMAorI2RlZmluZQlJUE9QVF9NRUFTVVJFTUVOVAkweDQwCisjZGVmaW5lCUlQT1BUX1JFU0VSVkVEMgkJMHg2MAorCisjZGVmaW5lIElQT1BUX0VORAkoMCB8SVBPUFRfQ09OVFJPTCkKKyNkZWZpbmUgSVBPUFRfTk9PUAkoMSB8SVBPUFRfQ09OVFJPTCkKKyNkZWZpbmUgSVBPUFRfU0VDCSgyIHxJUE9QVF9DT05UUk9MfElQT1BUX0NPUFkpCisjZGVmaW5lIElQT1BUX1RJTUVTVEFNUAkoNCB8SVBPUFRfTUVBU1VSRU1FTlQpCisjZGVmaW5lIElQT1BUX1NJRAkoOCB8SVBPUFRfQ09OVFJPTHxJUE9QVF9DT1BZKQorI2RlZmluZSBJUE9QVF9SQQkoMjB8SVBPUFRfQ09OVFJPTHxJUE9QVF9DT1BZKQorCitzdHJ1Y3QgaXBoZHIgeworI2lmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKQorCXVpbnQ4X3QgIGlobCAgICA6NCwKKwkJIHZlcnNpb246NDsKKyNlbGlmIGRlZmluZWQgKF9fQklHX0VORElBTl9CSVRGSUVMRCkKKwl1aW50OF90ICB2ZXJzaW9uOjQsCisgIAkJIGlobCAgICA6NDsKKyNlbHNlCisjZXJyb3IJIlBsZWFzZSBmaXggPGFzbS9ieXRlb3JkZXIuaD4iCisjZW5kaWYKKwl1aW50OF90CSAgdG9zOworCXVpbnQxNl90ICB0b3RfbGVuOworCXVpbnQxNl90ICBpZDsKKwl1aW50MTZfdCAgZnJhZ19vZmY7CisJdWludDhfdCAgIHR0bDsKKwl1aW50OF90ICAgcHJvdG9jb2w7CisJdWludDE2X3QgIGNoZWNrOworCWludDMyX3QgICBzYWRkcjsKKwlpbnQzMl90ICAgZGFkZHI7Cit9OworCitzdHJ1Y3QgaXBfYXV0aF9oZHIgeworCXVpbnQ4X3QgIG5leHRoZHI7CisJdWludDhfdCAgaGRybGVuOworCXVpbnQxNl90IHJlc2VydmVkOworCXVpbnQzMl90IHNwaTsKKwl1aW50MzJfdCBzZXFfbm87CisJdWludDhfdCAgYXV0aF9kYXRhWzBdOworfTsKKworc3RydWN0IGlwX2VzcF9oZHIgeworCXVpbnQzMl90IHNwaTsKKwl1aW50MzJfdCBzZXFfbm87CisJdWludDhfdCAgZW5jX2RhdGFbMF07Cit9OworCitzdHJ1Y3QgaXBfY29tcF9oZHIgeworCXVpbnQ4X3QgIG5leHRoZHI7CisJdWludDhfdCAgZmxhZ3M7CisJdWludDE2X3QgY3BpOworfTsKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9ORVRJTkVUX0lQX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvbmV0aW5ldC9pcF9pY21wLmggYi9saWJjL2luY2x1ZGUvbmV0aW5ldC9pcF9pY21wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUxMDU5MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9uZXRpbmV0L2lwX2ljbXAuaApAQCAtMCwwICsxLDIxNCBAQAorLyoJJE9wZW5CU0Q6IGlwX2ljbXAuaCx2IDEuMjEgMjAwNS8wNy8zMSAwMzozMDo1NSBwYXNjb2UgRXhwICQJKi8KKy8qCSROZXRCU0Q6IGlwX2ljbXAuaCx2IDEuMTAgMTk5Ni8wMi8xMyAyMzo0MjoyOCBjaHJpc3RvcyBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTgyLCAxOTg2LCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICoJQCgjKWlwX2ljbXAuaAk4LjEgKEJlcmtlbGV5KSA2LzEwLzkzCisgKi8KKworI2lmbmRlZiBfTkVUSU5FVF9JUF9JQ01QX0hfCisjZGVmaW5lIF9ORVRJTkVUX0lQX0lDTVBfSF8KKworI2luY2x1ZGUgPG5ldGluZXQvaXAuaD4KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKworX19CRUdJTl9ERUNMUworCisvKgorICogSW50ZXJmYWNlIENvbnRyb2wgTWVzc2FnZSBQcm90b2NvbCBEZWZpbml0aW9ucy4KKyAqIFBlciBSRkMgNzkyLCBTZXB0ZW1iZXIgMTk4MS4KKyAqIFJGQyA5NTAsIEF1Z3VzdCAxOTg1LiAoQWRkcmVzcyBNYXNrIFJlcXVlc3QgLyBSZXBseSkKKyAqIFJGQyAxMjU2LCBTZXB0ZW1iZXIgMTk5MS4gKFJvdXRlciBBZHZlcnRpc2VtZW50IGFuZCBTb2xpY2l0YXRpb24pCisgKiBSRkMgMTEwOCwgTm92ZW1iZXIgMTk5MS4gKFBhcmFtIFByb2JsZW0sIE1pc3NpbmcgUmVxLiBPcHRpb24pCisgKiBSRkMgMTM5MywgSmFudWFyeSAxOTkzLiAoVHJhY2Vyb3V0ZSkKKyAqIFJGQyAxNDc1LCBKdW5lIDE5OTMuIChEYXRhZ3JhbSBDb252ZXJzaW9uIEVycm9yKQorICogUkZDIDE4MTIsIEp1bmUgMTk5NS4gKGFkbSBwcm9oaWIsIGhvc3QgcHJlY2VkZW5jZSwgcHJlY2VkZW5jZSBjdXRvZmYpCisgKiBSRkMgMjAwMiwgT2N0b2JlciAxOTk2LiAoTW9iaWxpdHkgY2hhbmdlcyB0byBSb3V0ZXIgQWR2ZXJ0aXNlbWVudCkKKyAqLworCisvKgorICogSUNNUCBSb3V0ZXIgQWR2ZXJ0aXNlbWVudCBkYXRhCisgKi8KK3N0cnVjdCBpY21wX3JhX2FkZHIgeworCXVpbnQzMl90ICBpcmFfYWRkcjsKKwl1aW50MzJfdCAgaXJhX3ByZWZlcmVuY2U7Cit9OworCisvKgorICogU3RydWN0dXJlIG9mIGFuIGljbXAgaGVhZGVyLgorICovCitzdHJ1Y3QgaWNtcCB7CisJdWludDhfdCAgaWNtcF90eXBlOwkJLyogdHlwZSBvZiBtZXNzYWdlLCBzZWUgYmVsb3cgKi8KKwl1aW50OF90ICBpY21wX2NvZGU7CQkvKiB0eXBlIHN1YiBjb2RlICovCisJdWludDE2X3QgaWNtcF9ja3N1bTsJCS8qIG9uZXMgY29tcGxlbWVudCBja3N1bSBvZiBzdHJ1Y3QgKi8KKwl1bmlvbiB7CisJCXVpbnQ4X3QgICBpaF9wcHRyOwkJLyogSUNNUF9QQVJBTVBST0IgKi8KKwkJc3RydWN0IGluX2FkZHIgaWhfZ3dhZGRyOwkvKiBJQ01QX1JFRElSRUNUICovCisJCXN0cnVjdCBpaF9pZHNlcSB7CisJCQkgIHVpbnQxNl90ICBpY2RfaWQ7CisJCQkgIHVpbnQxNl90ICBpY2Rfc2VxOworCQl9IGloX2lkc2VxOworCQlpbnQzMl90ICAgaWhfdm9pZDsKKworCQkvKiBJQ01QX1VOUkVBQ0hfTkVFREZSQUcgLS0gUGF0aCBNVFUgRGlzY292ZXJ5IChSRkMxMTkxKSAqLworCQlzdHJ1Y3QgaWhfcG10dSB7CisJCQkgIHVpbnQxNl90ICBpcG1fdm9pZDsKKwkJCSAgdWludDE2X3QgIGlwbV9uZXh0bXR1OworCQl9IGloX3BtdHU7CisKKwkJc3RydWN0IGloX3J0cmFkdiB7CisJCQl1aW50OF90ICAgaXJ0X251bV9hZGRyczsKKwkJCXVpbnQ4X3QgICBpcnRfd3BhOworCQkJdWludDE2X3QgIGlydF9saWZldGltZTsKKwkJfSBpaF9ydHJhZHY7CisJfSBpY21wX2h1bjsKKyNkZWZpbmUJaWNtcF9wcHRyCSAgaWNtcF9odW4uaWhfcHB0cgorI2RlZmluZQlpY21wX2d3YWRkcgkgIGljbXBfaHVuLmloX2d3YWRkcgorI2RlZmluZQlpY21wX2lkCQkgIGljbXBfaHVuLmloX2lkc2VxLmljZF9pZAorI2RlZmluZQlpY21wX3NlcQkgIGljbXBfaHVuLmloX2lkc2VxLmljZF9zZXEKKyNkZWZpbmUJaWNtcF92b2lkCSAgaWNtcF9odW4uaWhfdm9pZAorI2RlZmluZQlpY21wX3Btdm9pZAkgIGljbXBfaHVuLmloX3BtdHUuaXBtX3ZvaWQKKyNkZWZpbmUJaWNtcF9uZXh0bXR1CSAgaWNtcF9odW4uaWhfcG10dS5pcG1fbmV4dG10dQorI2RlZmluZQlpY21wX251bV9hZGRycwkgIGljbXBfaHVuLmloX3J0cmFkdi5pcnRfbnVtX2FkZHJzCisjZGVmaW5lCWljbXBfd3BhCSAgaWNtcF9odW4uaWhfcnRyYWR2LmlydF93cGEKKyNkZWZpbmUJaWNtcF9saWZldGltZQkgIGljbXBfaHVuLmloX3J0cmFkdi5pcnRfbGlmZXRpbWUKKwl1bmlvbiB7CisJCXN0cnVjdCBpZF90cyB7CisJCQkgIHVpbnQzMl90ICBpdHNfb3RpbWU7CisJCQkgIHVpbnQzMl90ICBpdHNfcnRpbWU7CisJCQkgIHVpbnQzMl90ICBpdHNfdHRpbWU7CisJCX0gaWRfdHM7CisJCXN0cnVjdCBpZF9pcCAgeworCQkJICBzdHJ1Y3QgaXAgaWRpX2lwOworCQkJICAvKiBvcHRpb25zIGFuZCB0aGVuIDY0IGJpdHMgb2YgZGF0YSAqLworCQl9IGlkX2lwOworCQl1aW50MzJfdCAgaWRfbWFzazsKKwkJaW50OF90CSAgaWRfZGF0YVsxXTsKKwl9IGljbXBfZHVuOworI2RlZmluZQlpY21wX290aW1lCSAgaWNtcF9kdW4uaWRfdHMuaXRzX290aW1lCisjZGVmaW5lCWljbXBfcnRpbWUJICBpY21wX2R1bi5pZF90cy5pdHNfcnRpbWUKKyNkZWZpbmUJaWNtcF90dGltZQkgIGljbXBfZHVuLmlkX3RzLml0c190dGltZQorI2RlZmluZQlpY21wX2lwCQkgIGljbXBfZHVuLmlkX2lwLmlkaV9pcAorI2RlZmluZQlpY21wX21hc2sJICBpY21wX2R1bi5pZF9tYXNrCisjZGVmaW5lCWljbXBfZGF0YQkgIGljbXBfZHVuLmlkX2RhdGEKK307CisKKy8qCisgKiBGb3IgSVB2NiB0cmFuc2l0aW9uIHJlbGF0ZWQgSUNNUCBlcnJvcnMuCisgKi8KKyNkZWZpbmUJSUNNUF9WNkFEVkxFTk1JTgkoOCArIHNpemVvZihzdHJ1Y3QgaXApICsgNDApCisjZGVmaW5lCUlDTVBfVjZBRFZMRU4ocCkJKDggKyAoKHApLT5pY21wX2lwLmlwX2hsIDw8IDIpICsgNDApCisKKy8qCisgKiBMb3dlciBib3VuZHMgb24gcGFja2V0IGxlbmd0aHMgZm9yIHZhcmlvdXMgdHlwZXMuCisgKiBGb3IgdGhlIGVycm9yIGFkdmljZSBwYWNrZXRzIG11c3QgZmlyc3QgaW5zdXJlIHRoYXQgdGhlCisgKiBwYWNrZXQgaXMgbGFyZ2UgZW5vdWdoIHRvIGNvbnRhaW4gdGhlIHJldHVybmVkIGlwIGhlYWRlci4KKyAqIE9ubHkgdGhlbiBjYW4gd2UgZG8gdGhlIGNoZWNrIHRvIHNlZSBpZiA2NCBiaXRzIG9mIHBhY2tldAorICogZGF0YSBoYXZlIGJlZW4gcmV0dXJuZWQsIHNpbmNlIHdlIG5lZWQgdG8gY2hlY2sgdGhlIHJldHVybmVkCisgKiBpcCBoZWFkZXIgbGVuZ3RoLgorICovCisjZGVmaW5lCUlDTVBfTUlOTEVOCTgJCQkJLyogYWJzIG1pbmltdW0gKi8KKyNkZWZpbmUJSUNNUF9UU0xFTgkoOCArIDMgKiBzaXplb2YgKG5fdGltZSkpCS8qIHRpbWVzdGFtcCAqLworI2RlZmluZQlJQ01QX01BU0tMRU4JMTIJCQkJLyogYWRkcmVzcyBtYXNrICovCisjZGVmaW5lCUlDTVBfQURWTEVOTUlOCSg4ICsgc2l6ZW9mIChzdHJ1Y3QgaXApICsgOCkJLyogbWluICovCisjZGVmaW5lCUlDTVBfQURWTEVOKHApCSg4ICsgKChwKS0+aWNtcF9pcC5pcF9obCA8PCAyKSArIDgpCisJLyogTi5CLjogbXVzdCBzZXBhcmF0ZWx5IGNoZWNrIHRoYXQgaXBfaGwgPj0gNSAqLworCisvKgorICogRGVmaW5pdGlvbiBvZiB0eXBlIGFuZCBjb2RlIGZpZWxkIHZhbHVlcy4KKyAqCWh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvaWNtcC1wYXJhbWV0ZXJzCisgKi8KKyNkZWZpbmUJSUNNUF9FQ0hPUkVQTFkJCTAJCS8qIGVjaG8gcmVwbHkgKi8KKyNkZWZpbmUJSUNNUF9VTlJFQUNICQkzCQkvKiBkZXN0IHVucmVhY2hhYmxlLCBjb2RlczogKi8KKyNkZWZpbmUJSUNNUF9VTlJFQUNIX05FVAkJMAkvKiBiYWQgbmV0ICovCisjZGVmaW5lCUlDTVBfVU5SRUFDSF9IT1NUCQkxCS8qIGJhZCBob3N0ICovCisjZGVmaW5lCUlDTVBfVU5SRUFDSF9QUk9UT0NPTAkJMgkvKiBiYWQgcHJvdG9jb2wgKi8KKyNkZWZpbmUJSUNNUF9VTlJFQUNIX1BPUlQJCTMJLyogYmFkIHBvcnQgKi8KKyNkZWZpbmUJSUNNUF9VTlJFQUNIX05FRURGUkFHCQk0CS8qIElQX0RGIGNhdXNlZCBkcm9wICovCisjZGVmaW5lCUlDTVBfVU5SRUFDSF9TUkNGQUlMCQk1CS8qIHNyYyByb3V0ZSBmYWlsZWQgKi8KKyNkZWZpbmUJSUNNUF9VTlJFQUNIX05FVF9VTktOT1dOCTYJLyogdW5rbm93biBuZXQgKi8KKyNkZWZpbmUJSUNNUF9VTlJFQUNIX0hPU1RfVU5LTk9XTgk3CS8qIHVua25vd24gaG9zdCAqLworI2RlZmluZQlJQ01QX1VOUkVBQ0hfSVNPTEFURUQJCTgJLyogc3JjIGhvc3QgaXNvbGF0ZWQgKi8KKyNkZWZpbmUJSUNNUF9VTlJFQUNIX05FVF9QUk9ISUIJCTkJLyogZm9yIGNyeXB0byBkZXZzICovCisjZGVmaW5lCUlDTVBfVU5SRUFDSF9IT1NUX1BST0hJQgkxMAkvKiBkaXR0byAqLworI2RlZmluZQlJQ01QX1VOUkVBQ0hfVE9TTkVUCQkxMQkvKiBiYWQgdG9zIGZvciBuZXQgKi8KKyNkZWZpbmUJSUNNUF9VTlJFQUNIX1RPU0hPU1QJCTEyCS8qIGJhZCB0b3MgZm9yIGhvc3QgKi8KKyNkZWZpbmUJSUNNUF9VTlJFQUNIX0ZJTFRFUl9QUk9ISUIJMTMJLyogcHJvaGliaXRlZCBhY2Nlc3MgKi8KKyNkZWZpbmUJSUNNUF9VTlJFQUNIX0hPU1RfUFJFQ0VERU5DRQkxNAkvKiBwcmVjZWRlbmNlIHZpb2xhdCduKi8KKyNkZWZpbmUJSUNNUF9VTlJFQUNIX1BSRUNFREVOQ0VfQ1VUT0ZGCTE1CS8qIHByZWNlZGVuY2UgY3V0b2ZmICovCisjZGVmaW5lCUlDTVBfU09VUkNFUVVFTkNICTQJCS8qIHBhY2tldCBsb3N0LCBzbG93IGRvd24gKi8KKyNkZWZpbmUJSUNNUF9SRURJUkVDVAkJNQkJLyogc2hvcnRlciByb3V0ZSwgY29kZXM6ICovCisjZGVmaW5lCUlDTVBfUkVESVJFQ1RfTkVUCTAJCS8qIGZvciBuZXR3b3JrICovCisjZGVmaW5lCUlDTVBfUkVESVJFQ1RfSE9TVAkxCQkvKiBmb3IgaG9zdCAqLworI2RlZmluZQlJQ01QX1JFRElSRUNUX1RPU05FVAkyCQkvKiBmb3IgdG9zIGFuZCBuZXQgKi8KKyNkZWZpbmUJSUNNUF9SRURJUkVDVF9UT1NIT1NUCTMJCS8qIGZvciB0b3MgYW5kIGhvc3QgKi8KKyNkZWZpbmUJSUNNUF9BTFRIT1NUQUREUgk2CQkvKiBhbHRlcm5hdGUgaG9zdCBhZGRyZXNzICovCisjZGVmaW5lCUlDTVBfRUNITwkJOAkJLyogZWNobyBzZXJ2aWNlICovCisjZGVmaW5lCUlDTVBfUk9VVEVSQURWRVJUCTkJCS8qIHJvdXRlciBhZHZlcnRpc2VtZW50ICovCisjZGVmaW5lCUlDTVBfUk9VVEVSQURWRVJUX05PUk1BTAkJMAkvKiBub3JtYWwgYWR2ZXJ0aXNlbWVudCAqLworI2RlZmluZQlJQ01QX1JPVVRFUkFEVkVSVF9OT1JPVVRFX0NPTU1PTgkxNgkvKiBzZWxlY3RpdmUgcm91dGluZyAqLworI2RlZmluZQlJQ01QX1JPVVRFUlNPTElDSVQJMTAJCS8qIHJvdXRlciBzb2xpY2l0YXRpb24gKi8KKyNkZWZpbmUJSUNNUF9USU1YQ0VFRAkJMTEJCS8qIHRpbWUgZXhjZWVkZWQsIGNvZGU6ICovCisjZGVmaW5lCUlDTVBfVElNWENFRURfSU5UUkFOUwkwCQkvKiB0dGw9PTAgaW4gdHJhbnNpdCAqLworI2RlZmluZQlJQ01QX1RJTVhDRUVEX1JFQVNTCTEJCS8qIHR0bD09MCBpbiByZWFzcyAqLworI2RlZmluZQlJQ01QX1BBUkFNUFJPQgkJMTIJCS8qIGlwIGhlYWRlciBiYWQgKi8KKyNkZWZpbmUJSUNNUF9QQVJBTVBST0JfRVJSQVRQVFIgMAkJLyogcmVxLiBvcHQuIGFic2VudCAqLworI2RlZmluZQlJQ01QX1BBUkFNUFJPQl9PUFRBQlNFTlQgMQkJLyogcmVxLiBvcHQuIGFic2VudCAqLworI2RlZmluZQlJQ01QX1BBUkFNUFJPQl9MRU5HVEgJMgkJLyogYmFkIGxlbmd0aCAqLworI2RlZmluZQlJQ01QX1RTVEFNUAkJMTMJCS8qIHRpbWVzdGFtcCByZXF1ZXN0ICovCisjZGVmaW5lCUlDTVBfVFNUQU1QUkVQTFkJMTQJCS8qIHRpbWVzdGFtcCByZXBseSAqLworI2RlZmluZQlJQ01QX0lSRVEJCTE1CQkvKiBpbmZvcm1hdGlvbiByZXF1ZXN0ICovCisjZGVmaW5lCUlDTVBfSVJFUVJFUExZCQkxNgkJLyogaW5mb3JtYXRpb24gcmVwbHkgKi8KKyNkZWZpbmUJSUNNUF9NQVNLUkVRCQkxNwkJLyogYWRkcmVzcyBtYXNrIHJlcXVlc3QgKi8KKyNkZWZpbmUJSUNNUF9NQVNLUkVQTFkJCTE4CQkvKiBhZGRyZXNzIG1hc2sgcmVwbHkgKi8KKyNkZWZpbmUJSUNNUF9UUkFDRVJPVVRFCQkzMAkJLyogdHJhY2Vyb3V0ZSAqLworI2RlZmluZQlJQ01QX0RBVEFDT05WRVJSCTMxCQkvKiBkYXRhIGNvbnZlcnNpb24gZXJyb3IgKi8KKyNkZWZpbmUJSUNNUF9NT0JJTEVfUkVESVJFQ1QJMzIJCS8qIG1vYmlsZSBob3N0IHJlZGlyZWN0ICovCisjZGVmaW5lCUlDTVBfSVBWNl9XSEVSRUFSRVlPVQkzMwkJLyogSVB2NiB3aGVyZS1hcmUteW91ICovCisjZGVmaW5lCUlDTVBfSVBWNl9JQU1IRVJFCTM0CQkvKiBJUHY2IGktYW0taGVyZSAqLworI2RlZmluZQlJQ01QX01PQklMRV9SRUdSRVFVRVNUCTM1CQkvKiBtb2JpbGUgcmVnaXN0cmF0aW9uIHJlcSAqLworI2RlZmluZQlJQ01QX01PQklMRV9SRUdSRVBMWQkzNgkJLyogbW9iaWxlIHJlZ2lzdHJhdGlvbiByZXBseSAqLworI2RlZmluZQlJQ01QX1NLSVAJCTM5CQkvKiBTS0lQICovCisjZGVmaW5lCUlDTVBfUEhPVFVSSVMJCTQwCQkvKiBQaG90dXJpcyAqLworI2RlZmluZQlJQ01QX1BIT1RVUklTX1VOS05PV05fSU5ERVgJMQkvKiB1bmtub3duIHNlYyBpbmRleCAqLworI2RlZmluZQlJQ01QX1BIT1RVUklTX0FVVEhfRkFJTEVECTIJLyogYXV0aCBmYWlsZWQgKi8KKyNkZWZpbmUJSUNNUF9QSE9UVVJJU19ERUNSWVBUX0ZBSUxFRAkzCS8qIGRlY3J5cHQgZmFpbGVkICovCisKKyNkZWZpbmUJSUNNUF9NQVhUWVBFCQk0MAorCisjZGVmaW5lCUlDTVBfSU5GT1RZUEUodHlwZSkgXAorCSgodHlwZSkgPT0gSUNNUF9FQ0hPUkVQTFkgfHwgKHR5cGUpID09IElDTVBfRUNITyB8fCBcCisJKHR5cGUpID09IElDTVBfUk9VVEVSQURWRVJUIHx8ICh0eXBlKSA9PSBJQ01QX1JPVVRFUlNPTElDSVQgfHwgXAorCSh0eXBlKSA9PSBJQ01QX1RTVEFNUCB8fCAodHlwZSkgPT0gSUNNUF9UU1RBTVBSRVBMWSB8fCBcCisJKHR5cGUpID09IElDTVBfSVJFUSB8fCAodHlwZSkgPT0gSUNNUF9JUkVRUkVQTFkgfHwgXAorCSh0eXBlKSA9PSBJQ01QX01BU0tSRVEgfHwgKHR5cGUpID09IElDTVBfTUFTS1JFUExZKQorCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX05FVElORVRfSVBfSUNNUF9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL25ldGluZXQvdGNwLmggYi9saWJjL2luY2x1ZGUvbmV0aW5ldC90Y3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWRmOTA0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL25ldGluZXQvdGNwLmgKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfTkVUSU5FVF9UQ1BfSAorI2RlZmluZSBfTkVUSU5FVF9UQ1BfSAorCisjaW5jbHVkZSA8ZW5kaWFuLmg+CQkvKiBJbmNsdWRlICpiZWZvcmUqIGxpbnV4L3RjcC5oICovCisjaW5jbHVkZSA8bGludXgvdGNwLmg+CisKKyNlbmRpZiAvKiBfTkVUSU5FVF9UQ1BfSCAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL25ldGluZXQvdWRwLmggYi9saWJjL2luY2x1ZGUvbmV0aW5ldC91ZHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWUwZGZjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL25ldGluZXQvdWRwLmgKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfTkVUSU5FVF9VRFBfSAorI2RlZmluZSBfTkVUSU5FVF9VRFBfSAorCisvKgorICogV2Ugd291bGQgaW5jbHVkZSBsaW51eC91ZHAuaCwgYnV0IGl0IGJyaW5ncyBpbiB0b28gbXVjaCBvdGhlciBzdHVmZgorICovCisKKyNpZmRlZiBfX0ZBVk9SX0JTRAorCitzdHJ1Y3QgdWRwaGRyIHsKKyAgICB1X2ludDE2X3QgdWhfc3BvcnQ7CS8qIHNvdXJjZSBwb3J0ICovCisgICAgdV9pbnQxNl90IHVoX2Rwb3J0OwkvKiBkZXN0aW5hdGlvbiBwb3J0ICovCisgICAgdV9pbnQxNl90IHVoX3VsZW47CS8qIHVkcCBsZW5ndGggKi8KKyAgICB1X2ludDE2X3QgdWhfc3VtOwkvKiB1ZHAgY2hlY2tzdW0gKi8KK307CisKKyNlbHNlCisKK3N0cnVjdCB1ZHBoZHIgeworICAgIF9fdTE2ICBzb3VyY2U7CisgICAgX191MTYgIGRlc3Q7CisgICAgX191MTYgIGxlbjsKKyAgICBfX3UxNiAgY2hlY2s7Cit9OworCisjZW5kaWYgLyogX19GQVZPUl9CU0QgKi8KKworI2VuZGlmIC8qIF9ORVRJTkVUX1VEUF9IICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvbmV0cGFja2V0L3BhY2tldC5oIGIvbGliYy9pbmNsdWRlL25ldHBhY2tldC9wYWNrZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWU4ZTBlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL25ldHBhY2tldC9wYWNrZXQuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8bGludXgvaWZfcGFja2V0Lmg+CmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvbnNzd2l0Y2guaCBiL2xpYmMvaW5jbHVkZS9uc3N3aXRjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxOWQwNTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvbnNzd2l0Y2guaApAQCAtMCwwICsxLDIzNiBAQAorLyoJJE5ldEJTRDogbnNzd2l0Y2guaCx2IDEuMTggMjAwNS8xMS8yOSAwMzoxMjo1OCBjaHJpc3RvcyBFeHAgJAkqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5NywgMTk5OCwgMTk5OSwgMjAwNCBUaGUgTmV0QlNEIEZvdW5kYXRpb24sIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBUaGUgTmV0QlNEIEZvdW5kYXRpb24KKyAqIGJ5IEx1a2UgTWV3YnVybi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICogICAgICAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE5ldEJTRAorICogICAgICAgIEZvdW5kYXRpb24sIEluYy4gYW5kIGl0cyBjb250cmlidXRvcnMuCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIFRoZSBOZXRCU0QgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgTkVUQlNEIEZPVU5EQVRJT04sIElOQy4gQU5EIENPTlRSSUJVVE9SUworICogYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECisgKiBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfTlNTV0lUQ0hfSAorI2RlZmluZSBfTlNTV0lUQ0hfSAkxCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworI2RlZmluZQlOU1NfTU9EVUxFX0lOVEVSRkFDRV9WRVJTSU9OCTAKKworI2lmbmRlZiBfUEFUSF9OU19DT05GCisjZGVmaW5lIF9QQVRIX05TX0NPTkYJIi9ldGMvbnNzd2l0Y2guY29uZiIKKyNlbmRpZgorCisjZGVmaW5lCU5TX0NPTlRJTlVFCTAKKyNkZWZpbmUJTlNfUkVUVVJOCTEKKworLyoKKyAqIExheW91dCBvZjoKKyAqCXVpbnQzMl90IG5zX3NyYy5mbGFncworICovIAorCS8qIG5zc3dpdGNoLmNvbmYgc3RhdHVzIGNvZGVzIGFuZCBuc2Rpc3BhdGNoKDMpIHJldHVybiB2YWx1ZXMgKi8KKyNkZWZpbmUJTlNfU1VDQ0VTUwkoMTw8MCkJCS8qIGVudHJ5IHdhcyBmb3VuZCAqLworI2RlZmluZQlOU19VTkFWQUlMCSgxPDwxKQkJLyogc291cmNlIG5vdCByZXNwb25kaW5nLCBvciBjb3JydXB0ICovCisjZGVmaW5lCU5TX05PVEZPVU5ECSgxPDwyKQkJLyogc291cmNlIHJlc3BvbmRlZCAnbm8gc3VjaCBlbnRyeScgKi8KKyNkZWZpbmUJTlNfVFJZQUdBSU4JKDE8PDMpCQkvKiBzb3VyY2UgYnVzeSwgbWF5IHJlc3BvbmQgdG8gcmV0cnlzICovCisjZGVmaW5lCU5TX1NUQVRVU01BU0sJMHgwMDAwMDBmZgkvKiBiaXRtYXNrIHRvIGdldCB0aGUgc3RhdHVzIGZsYWdzICovCisKKwkvKiBpbnRlcm5hbCBuc2Rpc3BhdGNoKDMpIGZsYWdzOyBub3Qgc2V0dGFibGUgaW4gbnNzd2l0Y2guY29uZig1KSAgKi8KKyNkZWZpbmUJTlNfRk9SQ0VBTEwJKDE8PDgpCQkvKiBmb3JjZSBhbGwgbWV0aG9kcyB0byBiZSBpbnZva2VkOyAqLworCisvKgorICogQ3VycmVudGx5IGltcGxlbWVudGVkIHNvdXJjZXMuCisgKi8KKyNkZWZpbmUgTlNTUkNfRklMRVMJImZpbGVzIgkJLyogbG9jYWwgZmlsZXMgKi8KKyNkZWZpbmUJTlNTUkNfRE5TCSJkbnMiCQkvKiBETlM7IElOIGZvciBob3N0cywgSFMgZm9yIG90aGVycyAqLworI2RlZmluZQlOU1NSQ19OSVMJIm5pcyIJCS8qIFlQL05JUyAqLworI2RlZmluZQlOU1NSQ19DT01QQVQJImNvbXBhdCIJLyogcGFzc3dkLGdyb3VwIGluIFlQIGNvbXBhdCBtb2RlICovCisKKy8qCisgKiBDdXJyZW50bHkgaW1wbGVtZW50ZWQgZGF0YWJhc2VzLgorICovCisjZGVmaW5lIE5TREJfSE9TVFMJCSJob3N0cyIKKyNkZWZpbmUgTlNEQl9HUk9VUAkJImdyb3VwIgorI2RlZmluZSBOU0RCX0dST1VQX0NPTVBBVAkiZ3JvdXBfY29tcGF0IgorI2RlZmluZSBOU0RCX05FVEdST1VQCQkibmV0Z3JvdXAiCisjZGVmaW5lIE5TREJfTkVUV09SS1MJCSJuZXR3b3JrcyIKKyNkZWZpbmUgTlNEQl9QQVNTV0QJCSJwYXNzd2QiCisjZGVmaW5lIE5TREJfUEFTU1dEX0NPTVBBVAkicGFzc3dkX2NvbXBhdCIKKyNkZWZpbmUgTlNEQl9TSEVMTFMJCSJzaGVsbHMiCisKKy8qCisgKiBTdWdnZXN0ZWQgZGF0YWJhc2VzIHRvIGltcGxlbWVudC4KKyAqLworI2RlZmluZSBOU0RCX0FMSUFTRVMJCSJhbGlhc2VzIgorI2RlZmluZSBOU0RCX0FVVEgJCSJhdXRoIgorI2RlZmluZSBOU0RCX0FVVE9NT1VOVAkJImF1dG9tb3VudCIKKyNkZWZpbmUgTlNEQl9CT09UUEFSQU1TCQkiYm9vdHBhcmFtcyIKKyNkZWZpbmUgTlNEQl9FVEhFUlMJCSJldGhlcnMiCisjZGVmaW5lIE5TREJfRVhQT1JUUwkJImV4cG9ydHMiCisjZGVmaW5lIE5TREJfTkVUTUFTS1MJCSJuZXRtYXNrcyIKKyNkZWZpbmUgTlNEQl9QSE9ORVMJCSJwaG9uZXMiCisjZGVmaW5lIE5TREJfUFJJTlRDQVAJCSJwcmludGNhcCIKKyNkZWZpbmUgTlNEQl9QUk9UT0NPTFMJCSJwcm90b2NvbHMiCisjZGVmaW5lIE5TREJfUkVNT1RFCQkicmVtb3RlIgorI2RlZmluZSBOU0RCX1JQQwkJInJwYyIKKyNkZWZpbmUgTlNEQl9TRU5ETUFJTFZBUlMJInNlbmRtYWlsdmFycyIKKyNkZWZpbmUgTlNEQl9TRVJWSUNFUwkJInNlcnZpY2VzIgorI2RlZmluZSBOU0RCX1RFUk1DQVAJCSJ0ZXJtY2FwIgorI2RlZmluZSBOU0RCX1RUWVMJCSJ0dHlzIgorCisvKgorICogbnNfZHRhYiBgY2FsbGJhY2snIGZ1bmN0aW9uIHNpZ25hdHVyZS4KKyAqLwordHlwZWRlZglpbnQgKCpuc3NfbWV0aG9kKSh2b2lkICosIHZvaWQgKiwgdmFfbGlzdCk7CisKKy8qCisgKiBuc19kdGFiIC0gYG5zc3dpdGNoIGRpc3BhdGNoIHRhYmxlJworICogQ29udGFpbnMgYW4gZW50cnkgZm9yIGVhY2ggc291cmNlIGFuZCB0aGUgYXBwcm9wcmlhdGUgZnVuY3Rpb24gdG8gY2FsbC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCWNvbnN0IGNoYXIJICpzcmM7CisJbnNzX21ldGhvZAkgY2FsbGJhY2s7CisJdm9pZAkJICpjYl9kYXRhOworfSBuc19kdGFiOworCisvKgorICogTWFjcm9zIHRvIGhlbHAgYnVpbGQgYW4gbnNfZHRhYltdCisgKi8KKyNkZWZpbmUgTlNfRklMRVNfQ0IoRixDKQl7IE5TU1JDX0ZJTEVTLAlGLAlfX1VOQ09OU1QoQykgfSwKKyNkZWZpbmUgTlNfQ09NUEFUX0NCKEYsQykJeyBOU1NSQ19DT01QQVQsCUYsCV9fVU5DT05TVChDKSB9LAorIAorI2lmZGVmIEhFU0lPRAorIyAgIGRlZmluZSBOU19ETlNfQ0IoRixDKQl7IE5TU1JDX0ROUywJRiwJX19VTkNPTlNUKEMpIH0sCisjZWxzZQorIyAgIGRlZmluZSBOU19ETlNfQ0IoRixDKQorI2VuZGlmCisKKyNpZmRlZiBZUAorIyAgIGRlZmluZSBOU19OSVNfQ0IoRixDKQl7IE5TU1JDX05JUywJRiwJX19VTkNPTlNUKEMpIH0sCisjZWxzZQorIyAgIGRlZmluZSBOU19OSVNfQ0IoRixDKQorI2VuZGlmCisKKy8qCisgKiBuc19zcmMgLSBgbnNzd2l0Y2ggc291cmNlJworICogVXNlZCBieSB0aGUgbnNwYXJzZXIgcm91dGluZXMgdG8gc3RvcmUgYSBtYXBwaW5nIGJldHdlZW4gYSBzb3VyY2UKKyAqIGFuZCBpdHMgZGlzcGF0Y2ggY29udHJvbCBmbGFncyBmb3IgYSBnaXZlbiBkYXRhYmFzZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCWNvbnN0IGNoYXIJKm5hbWU7CisJdWludDMyX3QJIGZsYWdzOworfSBuc19zcmM7CisKKworLyoKKyAqIERlZmF1bHQgc291cmNlbGlzdHMgKGlmIG5zc3dpdGNoLmNvbmYgaXMgbWlzc2luZywgY29ycnVwdCwKKyAqIG9yIHRoZSByZXF1ZXN0ZWQgZGF0YWJhc2UgZG9lc24ndCBoYXZlIGFuIGVudHJ5KQorICovCitleHRlcm4gY29uc3QgbnNfc3JjIF9fbnNkZWZhdWx0c3JjW107CitleHRlcm4gY29uc3QgbnNfc3JjIF9fbnNkZWZhdWx0Y29tcGF0W107CitleHRlcm4gY29uc3QgbnNfc3JjIF9fbnNkZWZhdWx0Y29tcGF0X2ZvcmNlYWxsW107CitleHRlcm4gY29uc3QgbnNfc3JjIF9fbnNkZWZhdWx0ZmlsZXNbXTsKK2V4dGVybiBjb25zdCBuc19zcmMgX19uc2RlZmF1bHRmaWxlc19mb3JjZWFsbFtdOworZXh0ZXJuIGNvbnN0IG5zX3NyYyBfX25zZGVmYXVsdG5pc1tdOworZXh0ZXJuIGNvbnN0IG5zX3NyYyBfX25zZGVmYXVsdG5pc19mb3JjZWFsbFtdOworCisKKy8qCisgKiBuc19tdGFiIC0gYG5zc3dpdGNoIG1ldGhvZCB0YWJsZScKKyAqIEFuIG5zc3dpdGNoIG1vZHVsZSBwcm92aWRlcyBhIG1hcHBpbmcgZnJvbSAoZGF0YWJhc2UgbmFtZSwgbWV0aG9kIG5hbWUpCisgKiB0dXBsZXMgdG8gdGhlIG5zc19tZXRob2QgYW5kIGFzc29jaWF0ZWQgY2FsbGJhY2sgZGF0YS4gIEVmZmVjdGl2ZWx5LAorICogbnNfZHRhYiwgYnV0IHVzZWQgZm9yIGR5bmFtaWNhbGx5IGxvYWRlZCBtb2R1bGVzLgorICovCit0eXBlZGVmIHN0cnVjdCB7CisJY29uc3QgY2hhcgkqZGF0YWJhc2U7CisJY29uc3QgY2hhcgkqbmFtZTsKKwluc3NfbWV0aG9kCSBtZXRob2Q7CisJdm9pZAkJKm1kYXRhOworfSBuc19tdGFiOworCisvKgorICogbnNzX21vZHVsZV9yZWdpc3Rlcl9mbiAtIG1vZHVsZSByZWdpc3RyYXRpb24gZnVuY3Rpb24KKyAqCWNhbGxlZCBhdCBtb2R1bGUgbG9hZAorICogbnNzX21vZHVsZV91bnJlZ2lzdGVyX2ZuIC0gbW9kdWxlIHVuLXJlZ2lzdHJhdGlvbiBmdW5jdGlvbgorICoJY2FsbGVkIGF0IG1vZHVsZSB1bmxvYWQKKyAqLwordHlwZWRlZgl2b2lkICgqbnNzX21vZHVsZV91bnJlZ2lzdGVyX2ZuKShuc19tdGFiICosIHVfaW50KTsKK3R5cGVkZWYJbnNfbXRhYiAqKCpuc3NfbW9kdWxlX3JlZ2lzdGVyX2ZuKShjb25zdCBjaGFyICosIHVfaW50ICosCisJCQkJCSAgIG5zc19tb2R1bGVfdW5yZWdpc3Rlcl9mbiAqKTsKKworI2lmZGVmIF9OU19QUklWQVRFCisKKy8qCisgKiBQcml2YXRlIGRhdGEgc3RydWN0dXJlcyBmb3IgYmFjay1lbmQgbnNzd2l0Y2ggaW1wbGVtZW50YXRpb24uCisgKi8KKworLyoKKyAqIG5zX2RidCAtIGBuc3N3aXRjaCBkYXRhYmFzZSB0aGFuZycKKyAqIEZvciBlYWNoIGRhdGFiYXNlIGluIC9ldGMvbnNzd2l0Y2guY29uZiB0aGVyZSBpcyBhIG5zX2RidCwgd2l0aCBpdHMKKyAqIG5hbWUgYW5kIGEgbGlzdCBvZiBuc19zcmMncyBjb250YWluaW5nIHRoZSBzb3VyY2UgaW5mb3JtYXRpb24uCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwljb25zdCBjaGFyCSpuYW1lOwkJLyogbmFtZSBvZiBkYXRhYmFzZSAqLworCW5zX3NyYwkJKnNyY2xpc3Q7CS8qIGxpc3Qgb2Ygc291cmNlcyAqLworCXVfaW50CQkgc3JjbGlzdHNpemU7CS8qIHNpemUgb2Ygc3JjbGlzdCAqLworfSBuc19kYnQ7CisKKy8qCisgKiBuc19tb2QgLSBgbnNzd2l0Y2ggbW9kdWxlJworICovCit0eXBlZGVmIHN0cnVjdCB7CisJY29uc3QgY2hhcgkqbmFtZTsJCS8qIG1vZHVsZSBuYW1lICovCisJdm9pZAkJKmhhbmRsZTsJLyogaGFuZGxlIGZyb20gZGxvcGVuKCkgKi8KKwluc19tdGFiCQkqbXRhYjsJCS8qIG1ldGhvZCB0YWJsZSAqLworCXVfaW50CQkgbXRhYnNpemU7CS8qIHNpemUgb2YgbXRhYiAqLworCQkJCQkvKiBjYWxsZWQgdG8gdW5sb2FkIG1vZHVsZSAqLworCW5zc19tb2R1bGVfdW5yZWdpc3Rlcl9mbiB1bnJlZ2lzdGVyOworfSBuc19tb2Q7CisKKyNlbmRpZiAvKiBfTlNfUFJJVkFURSAqLworCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKworX19CRUdJTl9ERUNMUworaW50CW5zZGlzcGF0Y2godm9pZCAqLCBjb25zdCBuc19kdGFiIFtdLCBjb25zdCBjaGFyICosCisJCQljb25zdCBjaGFyICosIGNvbnN0IG5zX3NyYyBbXSwgLi4uKTsKKworI2lmZGVmIF9OU19QUklWQVRFCitpbnQJCSBfbnNkYnRhZGRzcmMobnNfZGJ0ICosIGNvbnN0IG5zX3NyYyAqKTsKK3ZvaWQJCSBfbnNkYnRkdW1wKGNvbnN0IG5zX2RidCAqKTsKK2ludAkJIF9uc2RidHB1dChjb25zdCBuc19kYnQgKik7Cit2b2lkCQkgX25zeXllcnJvcihjb25zdCBjaGFyICopOworaW50CQkgX25zeXlsZXgodm9pZCk7CisjZW5kaWYgLyogX05TX1BSSVZBVEUgKi8KKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qICFfTlNTV0lUQ0hfSCAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3BhdGhjb25mLmggYi9saWJjL2luY2x1ZGUvcGF0aGNvbmYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Njc3ZjdiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3BhdGhjb25mLmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfUEFUSENPTkZfSF8KKyNkZWZpbmUgX1BBVEhDT05GX0hfCisKKy8qIGNvbnN0YW50cyB0byBiZSB1c2VkIGZvciB0aGUgJ25hbWUnIHBhcmVtZXRlciBvZiBwYXRoY29uZi9mcGF0aGNvbmYgKi8KKworI2RlZmluZSAgX1BDX0ZJTEVTSVpFQklUUyAgICAgICAweDAwMDAKKyNkZWZpbmUgIF9QQ19MSU5LX01BWCAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lICBfUENfTUFYX0NBTk9OICAgICAgICAgIDB4MDAwMgorI2RlZmluZSAgX1BDX01BWF9JTlBVVCAgICAgICAgICAweDAwMDMKKyNkZWZpbmUgIF9QQ19OQU1FX01BWCAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lICBfUENfUEFUSF9NQVggICAgICAgICAgIDB4MDAwNQorI2RlZmluZSAgX1BDX1BJUEVfQlVGICAgICAgICAgICAweDAwMDYKKyNkZWZpbmUgIF9QQ18yX1NZTUxJTktTICAgICAgICAgMHgwMDA3CisjZGVmaW5lICBfUENfQUxMT0NfU0laRV9NSU4gICAgIDB4MDAwOAorI2RlZmluZSAgX1BDX1JFQ19JTkNSX1hGRVJfU0laRSAweDAwMDkKKyNkZWZpbmUgIF9QQ19SRUNfTUFYX1hGRVJfU0laRSAgMHgwMDBhCisjZGVmaW5lICBfUENfUkVDX01JTl9YRkVSX1NJWkUgIDB4MDAwYgorI2RlZmluZSAgX1BDX1JFQ19YRkVSX0FMSUdOICAgICAweDAwMGMKKyNkZWZpbmUgIF9QQ19TWU1MSU5LX01BWCAgICAgICAgMHgwMDBkCisjZGVmaW5lICBfUENfQ0hPV05fUkVTVFJJQ1RFRCAgIDB4MDAwZQorI2RlZmluZSAgX1BDX05PX1RSVU5DICAgICAgICAgICAweDAwMGYKKyNkZWZpbmUgIF9QQ19WRElTQUJMRSAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lICBfUENfQVNZTkNfSU8gICAgICAgICAgIDB4MDAxMQorI2RlZmluZSAgX1BDX1BSSU9fSU8gICAgICAgICAgICAweDAwMTIKKyNkZWZpbmUgIF9QQ19TWU5DX0lPICAgICAgICAgICAgMHgwMDEzCisKK2V4dGVybiBsb25nIGZwYXRoY29uZihpbnQgZmlsZGVzLCBpbnQgbmFtZSk7CitleHRlcm4gbG9uZyBwYXRoY29uZihjb25zdCBjaGFyICpwYXRoLCBpbnQgbmFtZSk7CisKKyNlbmRpZiAvKiBfUEFUSENPTkZfSF8gKi8KKwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3BhdGhzLmggYi9saWJjL2luY2x1ZGUvcGF0aHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzIxNjJmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3BhdGhzLmgKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMTk4OSwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqCUAoIylwYXRocy5oCTguMSAoQmVya2VsZXkpIDYvMi85MworICovCisKKyNpZm5kZWYgX1BBVEhTX0hfCisjZGVmaW5lCV9QQVRIU19IXworCisvKiBEZWZhdWx0IHNlYXJjaCBwYXRoLiAqLworI2RlZmluZQlfUEFUSF9ERUZQQVRICSIvdXNyL2JpbjovYmluIgorLyogQWxsIHN0YW5kYXJkIHV0aWxpdGllcyBwYXRoLiAqLworI2RlZmluZQlfUEFUSF9TVERQQVRIIFwKKwkiL3Vzci9iaW46L2JpbjovdXNyL3NiaW46L3NiaW4iCisKKyNkZWZpbmUJX1BBVEhfQlNIRUxMCSIvc3lzdGVtL2Jpbi9zaCIKKyNkZWZpbmUJX1BBVEhfQ09OU09MRQkiL2Rldi9jb25zb2xlIgorI2RlZmluZQlfUEFUSF9DU0hFTEwJIi9iaW4vY3NoIgorI2RlZmluZQlfUEFUSF9ERVZEQgkiL3Zhci9ydW4vZGV2LmRiIgorI2RlZmluZQlfUEFUSF9ERVZOVUxMCSIvZGV2L251bGwiCisjZGVmaW5lCV9QQVRIX0RSVU0JIi9kZXYvZHJ1bSIKKyNkZWZpbmUJX1BBVEhfS0xPRwkiL3Byb2Mva21zZyIKKyNkZWZpbmUJX1BBVEhfS01FTQkiL2Rldi9rbWVtIgorI2RlZmluZQlfUEFUSF9MQVNUTE9HCSIvdmFyL2xvZy9sYXN0bG9nIgorI2RlZmluZQlfUEFUSF9NQUlMRElSCSIvdmFyL21haWwiCisjZGVmaW5lCV9QQVRIX01BTgkiL3Vzci9zaGFyZS9tYW4iCisjZGVmaW5lCV9QQVRIX01FTQkiL2Rldi9tZW0iCisjZGVmaW5lCV9QQVRIX01OVFRBQgkiL2V0Yy9mc3RhYiIKKyNkZWZpbmUJX1BBVEhfTU9VTlRFRAkiL2V0Yy9tdGFiIgorI2RlZmluZQlfUEFUSF9OT0xPR0lOCSIvZXRjL25vbG9naW4iCisjZGVmaW5lCV9QQVRIX1BSRVNFUlZFCSIvdmFyL2xpYiIKKyNkZWZpbmUJX1BBVEhfUldIT0RJUgkiL3Zhci9zcG9vbC9yd2hvIgorI2RlZmluZQlfUEFUSF9TRU5ETUFJTAkiL3Vzci9zYmluL3NlbmRtYWlsIgorI2RlZmluZQlfUEFUSF9TSEFET1cJIi9ldGMvc2hhZG93IgorI2RlZmluZQlfUEFUSF9TSEVMTFMJIi9ldGMvc2hlbGxzIgorI2RlZmluZQlfUEFUSF9UVFkJIi9kZXYvdHR5IgorI2RlZmluZQlfUEFUSF9VTklYCSIvYm9vdC92bWxpbnV4IgorI2RlZmluZSBfUEFUSF9VVE1QCSIvdmFyL3J1bi91dG1wIgorI2RlZmluZQlfUEFUSF9WSQkiL2Jpbi92aSIKKyNkZWZpbmUgX1BBVEhfV1RNUAkiL3Zhci9sb2cvd3RtcCIKKworLyogUHJvdmlkZSB0cmFpbGluZyBzbGFzaCwgc2luY2UgbW9zdGx5IHVzZWQgZm9yIGJ1aWxkaW5nIHBhdGhuYW1lcy4gKi8KKyNkZWZpbmUJX1BBVEhfREVWCSIvZGV2LyIKKyNkZWZpbmUJX1BBVEhfVE1QCSIvdG1wLyIKKyNkZWZpbmUJX1BBVEhfVkFSREIJIi92YXIvZGIvIgorI2RlZmluZQlfUEFUSF9WQVJSVU4JIi92YXIvcnVuLyIKKyNkZWZpbmUJX1BBVEhfVkFSVE1QCSIvdmFyL3RtcC8iCisKKyNlbmRpZiAvKiAhX1BBVEhTX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvcG9sbC5oIGIvbGliYy9pbmNsdWRlL3BvbGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjBiZTg5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3BvbGwuaApAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9QT0xMX0hfCisjZGVmaW5lIF9QT0xMX0hfCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisKK19fQkVHSU5fREVDTFMKKwordHlwZWRlZiB1bnNpZ25lZCBpbnQgIG5mZHNfdDsKKworLyogUE9TSVggc3BlY2lmaWVzICJpbnQiIGZvciB0aGUgdGltZW91dCwgTGludXggc2VlbXMgdG8gdXNlIGxvbmcuLi4gKi8KK2V4dGVybiBpbnQgcG9sbChzdHJ1Y3QgcG9sbGZkICosIG5mZHNfdCwgbG9uZyk7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfUE9MTF9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3B0aHJlYWQuaCBiL2xpYmMvaW5jbHVkZS9wdGhyZWFkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNhZmRhZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9wdGhyZWFkLmgKQEAgLTAsMCArMSwyNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX1BUSFJFQURfSF8KKyNkZWZpbmUgX1BUSFJFQURfSF8KKworI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxzY2hlZC5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisvKgorICogVHlwZXMKKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBpbnQgdm9sYXRpbGUgdmFsdWU7Cit9IHB0aHJlYWRfbXV0ZXhfdDsKKworI2RlZmluZSAgUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUiAgICAgICAgICAgICB7MH0KKyNkZWZpbmUgIFBUSFJFQURfUkVDVVJTSVZFX01VVEVYX0lOSVRJQUxJWkVSICAgezB4NDAwMH0KKyNkZWZpbmUgIFBUSFJFQURfRVJST1JDSEVDS19NVVRFWF9JTklUSUFMSVpFUiAgezB4ODAwMH0KKworZW51bSB7CisgICAgUFRIUkVBRF9NVVRFWF9OT1JNQUwgPSAwLAorICAgIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFID0gMSwKKyAgICBQVEhSRUFEX01VVEVYX0VSUk9SQ0hFQ0sgPSAyLAorCisgICAgUFRIUkVBRF9NVVRFWF9FUlJPUkNIRUNLX05QID0gUFRIUkVBRF9NVVRFWF9FUlJPUkNIRUNLLAorICAgIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFX05QICA9IFBUSFJFQURfTVVURVhfUkVDVVJTSVZFLAorCisgICAgUFRIUkVBRF9NVVRFWF9ERUZBVUxUID0gUFRIUkVBRF9NVVRFWF9OT1JNQUwKK307CisKKworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGludCB2b2xhdGlsZSB2YWx1ZTsKK30gcHRocmVhZF9jb25kX3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgdWludDMyX3QgZmxhZ3M7CisgICAgdm9pZCAqIHN0YWNrX2Jhc2U7CisgICAgc2l6ZV90IHN0YWNrX3NpemU7CisgICAgc2l6ZV90IGd1YXJkX3NpemU7CisgICAgaW50MzJfdCBzY2hlZF9wb2xpY3k7CisgICAgaW50MzJfdCBzY2hlZF9wcmlvcml0eTsKK30gcHRocmVhZF9hdHRyX3Q7CisKK3R5cGVkZWYgbG9uZyBwdGhyZWFkX211dGV4YXR0cl90OwordHlwZWRlZiBsb25nIHB0aHJlYWRfY29uZGF0dHJfdDsKKwordHlwZWRlZiBpbnQgcHRocmVhZF9rZXlfdDsKK3R5cGVkZWYgbG9uZyBwdGhyZWFkX3Q7CisKK3R5cGVkZWYgdm9sYXRpbGUgaW50ICBwdGhyZWFkX29uY2VfdDsKKworLyoKKyAqIERlZmluZXMKKyAqLworI2RlZmluZSBQVEhSRUFEX0NPTkRfSU5JVElBTElaRVIgIHswfQorCisjZGVmaW5lIFBUSFJFQURfU1RBQ0tfTUlOICgyICogUEFHRV9TSVpFKQorCisjZGVmaW5lIFBUSFJFQURfQ1JFQVRFX0RFVEFDSEVEICAweDAwMDAwMDAxCisjZGVmaW5lIFBUSFJFQURfQ1JFQVRFX0pPSU5BQkxFICAweDAwMDAwMDAwCisKKyNkZWZpbmUgUFRIUkVBRF9PTkNFX0lOSVQgICAgMAorCisjZGVmaW5lIFBUSFJFQURfUFJPQ0VTU19QUklWQVRFICAwCisjZGVmaW5lIFBUSFJFQURfUFJPQ0VTU19TSEFSRUQgICAxCisKKyNkZWZpbmUgUFRIUkVBRF9TQ09QRV9TWVNURU0gICAgIDAKKyNkZWZpbmUgUFRIUkVBRF9TQ09QRV9QUk9DRVNTICAgIDEKKworLyoKKyAqIFByb3RvdHlwZXMKKyAqLworI2lmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCitpbnQgcHRocmVhZF9hdHRyX2luaXQocHRocmVhZF9hdHRyX3QgKiBhdHRyKTsKK2ludCBwdGhyZWFkX2F0dHJfZGVzdHJveShwdGhyZWFkX2F0dHJfdCAqIGF0dHIpOworCitpbnQgcHRocmVhZF9hdHRyX3NldGRldGFjaHN0YXRlKHB0aHJlYWRfYXR0cl90ICogYXR0ciwgaW50IHN0YXRlKTsKK2ludCBwdGhyZWFkX2F0dHJfZ2V0ZGV0YWNoc3RhdGUocHRocmVhZF9hdHRyX3QgY29uc3QgKiBhdHRyLCBpbnQgKiBzdGF0ZSk7CisKK2ludCBwdGhyZWFkX2F0dHJfc2V0c2NoZWRwb2xpY3kocHRocmVhZF9hdHRyX3QgKiBhdHRyLCBpbnQgcG9saWN5KTsKK2ludCBwdGhyZWFkX2F0dHJfZ2V0c2NoZWRwb2xpY3kocHRocmVhZF9hdHRyX3QgY29uc3QgKiBhdHRyLCBpbnQgKiBwb2xpY3kpOworCitpbnQgcHRocmVhZF9hdHRyX3NldHNjaGVkcGFyYW0ocHRocmVhZF9hdHRyX3QgKiBhdHRyLCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gY29uc3QgKiBwYXJhbSk7CitpbnQgcHRocmVhZF9hdHRyX2dldHNjaGVkcGFyYW0ocHRocmVhZF9hdHRyX3QgY29uc3QgKiBhdHRyLCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKiBwYXJhbSk7CisKK2ludCBwdGhyZWFkX2F0dHJfc2V0c3RhY2tzaXplKHB0aHJlYWRfYXR0cl90ICogYXR0ciwgc2l6ZV90IHN0YWNrX3NpemUpOworaW50IHB0aHJlYWRfYXR0cl9nZXRzdGFja3NpemUocHRocmVhZF9hdHRyX3QgY29uc3QgKiBhdHRyLCBzaXplX3QgKiBzdGFja19zaXplKTsKKworaW50IHB0aHJlYWRfYXR0cl9zZXRzdGFja2FkZHIocHRocmVhZF9hdHRyX3QgKiBhdHRyLCB2b2lkICogc3RhY2thZGRyKTsKK2ludCBwdGhyZWFkX2F0dHJfZ2V0c3RhY2thZGRyKHB0aHJlYWRfYXR0cl90IGNvbnN0ICogYXR0ciwgdm9pZCAqKiBzdGFja2FkZHIpOworCitpbnQgcHRocmVhZF9hdHRyX3NldHN0YWNrKHB0aHJlYWRfYXR0cl90ICogYXR0ciwgdm9pZCAqIHN0YWNrYWRkciwgc2l6ZV90IHN0YWNrX3NpemUpOworaW50IHB0aHJlYWRfYXR0cl9nZXRzdGFjayhwdGhyZWFkX2F0dHJfdCBjb25zdCAqIGF0dHIsIHZvaWQgKiogc3RhY2thZGRyLCBzaXplX3QgKiBzdGFja19zaXplKTsKKworaW50IHB0aHJlYWRfYXR0cl9zZXRndWFyZHNpemUocHRocmVhZF9hdHRyX3QgKiBhdHRyLCBzaXplX3QgZ3VhcmRfc2l6ZSk7CitpbnQgcHRocmVhZF9hdHRyX2dldGd1YXJkc2l6ZShwdGhyZWFkX2F0dHJfdCBjb25zdCAqIGF0dHIsIHNpemVfdCAqIGd1YXJkX3NpemUpOworCitpbnQgcHRocmVhZF9hdHRyX3NldHNjb3BlKHB0aHJlYWRfYXR0cl90ICphdHRyLCBpbnQgIHNjb3BlKTsKK2ludCBwdGhyZWFkX2F0dHJfZ2V0c2NvcGUocHRocmVhZF9hdHRyX3QgY29uc3QgKmF0dHIpOworCitpbnQgcHRocmVhZF9nZXRhdHRyX25wKHB0aHJlYWRfdCB0aGlkLCBwdGhyZWFkX2F0dHJfdCAqIGF0dHIpOworCitpbnQgcHRocmVhZF9jcmVhdGUocHRocmVhZF90ICp0aHJlYWQsIHB0aHJlYWRfYXR0cl90IGNvbnN0ICogYXR0ciwKKyAgICAgICAgICAgICAgICAgICB2b2lkICooKnN0YXJ0X3JvdXRpbmUpKHZvaWQgKiksIHZvaWQgKiBhcmcpOwordm9pZCBwdGhyZWFkX2V4aXQodm9pZCAqIHJldHZhbCk7CitpbnQgcHRocmVhZF9qb2luKHB0aHJlYWRfdCB0aGlkLCB2b2lkICoqIHJldF92YWwpOworaW50IHB0aHJlYWRfZGV0YWNoKHB0aHJlYWRfdCAgdGhpZCk7CisKK3B0aHJlYWRfdCBwdGhyZWFkX3NlbGYodm9pZCk7CitpbnQgcHRocmVhZF9lcXVhbChwdGhyZWFkX3Qgb25lLCBwdGhyZWFkX3QgdHdvKTsKKworaW50IHB0aHJlYWRfZ2V0c2NoZWRwYXJhbShwdGhyZWFkX3QgdGhpZCwgaW50ICogcG9saWN5LAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKiBwYXJhbSk7CitpbnQgcHRocmVhZF9zZXRzY2hlZHBhcmFtKHB0aHJlYWRfdCB0aGlkLCBpbnQgcG9pbGN5LAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gY29uc3QgKiBwYXJhbSk7CisKK2ludCBwdGhyZWFkX211dGV4YXR0cl9pbml0KHB0aHJlYWRfbXV0ZXhhdHRyX3QgKmF0dHIpOworaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3kocHRocmVhZF9tdXRleGF0dHJfdCAqYXR0cik7CitpbnQgcHRocmVhZF9tdXRleGF0dHJfZ2V0dHlwZShjb25zdCBwdGhyZWFkX211dGV4YXR0cl90ICphdHRyLCBpbnQgKnR5cGUpOworaW50IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUocHRocmVhZF9tdXRleGF0dHJfdCAqYXR0ciwgaW50IHR5cGUpOworaW50IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHBzaGFyZWQocHRocmVhZF9tdXRleGF0dHJfdCAqYXR0ciwgaW50ICBwc2hhcmVkKTsKK2ludCBwdGhyZWFkX211dGV4YXR0cl9nZXRwc2hhcmVkKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKmF0dHIsIGludCAqcHNoYXJlZCk7CisKK2ludCBwdGhyZWFkX211dGV4X2luaXQocHRocmVhZF9tdXRleF90ICptdXRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAqYXR0cik7CitpbnQgcHRocmVhZF9tdXRleF9kZXN0cm95KHB0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgpOworaW50IHB0aHJlYWRfbXV0ZXhfbG9jayhwdGhyZWFkX211dGV4X3QgKm11dGV4KTsKK2ludCBwdGhyZWFkX211dGV4X3VubG9jayhwdGhyZWFkX211dGV4X3QgKm11dGV4KTsKK2ludCBwdGhyZWFkX211dGV4X3RyeWxvY2socHRocmVhZF9tdXRleF90ICptdXRleCk7CitpbnQgcHRocmVhZF9tdXRleF90aW1lZGxvY2socHRocmVhZF9tdXRleF90ICptdXRleCwgc3RydWN0IHRpbWVzcGVjKiAgdHMpOworCitpbnQgcHRocmVhZF9jb25kX2luaXQocHRocmVhZF9jb25kX3QgKmNvbmQsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHRocmVhZF9jb25kYXR0cl90ICphdHRyKTsKK2ludCBwdGhyZWFkX2NvbmRfZGVzdHJveShwdGhyZWFkX2NvbmRfdCAqY29uZCk7CitpbnQgcHRocmVhZF9jb25kX2Jyb2FkY2FzdChwdGhyZWFkX2NvbmRfdCAqY29uZCk7CitpbnQgcHRocmVhZF9jb25kX3NpZ25hbChwdGhyZWFkX2NvbmRfdCAqY29uZCk7CitpbnQgcHRocmVhZF9jb25kX3dhaXQocHRocmVhZF9jb25kX3QgKmNvbmQsIHB0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgpOworaW50IHB0aHJlYWRfY29uZF90aW1lZHdhaXQocHRocmVhZF9jb25kX3QgKmNvbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwdGhyZWFkX211dGV4X3QgKiBtdXRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqYWJzdGltZSk7CisKKy8qIEJJT05JQzogc2FtZSBhcyBwdGhyZWFkX2NvbmRfdGltZWR3YWl0LCBleGNlcHQgdGhlICdhYnN0aW1lJyBnaXZlbiByZWZlcnMKKyAqICAgICAgICAgdG8gdGhlIENMT0NLX01PTk9UT05JQyBjbG9jayBpbnN0ZWFkLCB0byBhdm9pZCBhbnkgcHJvYmxlbXMgd2hlbgorICogICAgICAgICB0aGUgd2FsbC1jbG9jayB0aW1lIGlzIGNoYW5nZWQgYnJ1dGFsbHkKKyAqLworaW50IHB0aHJlYWRfY29uZF90aW1lZHdhaXRfbW9ub3RvbmljKHB0aHJlYWRfY29uZF90ICAgICAgICAgKmNvbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9tdXRleF90ICAgICAgICAqbXV0ZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjICAqYWJzdGltZSk7CisKK2ludCBwdGhyZWFkX2NvbmRfdGltZW91dF9ucChwdGhyZWFkX2NvbmRfdCAqY29uZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdGhyZWFkX211dGV4X3QgKiBtdXRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBtc2Vjcyk7CisKK2ludCBwdGhyZWFkX2tleV9jcmVhdGUocHRocmVhZF9rZXlfdCAqa2V5LCB2b2lkICgqZGVzdHJ1Y3Rvcl9mdW5jdGlvbikodm9pZCAqKSk7CitpbnQgcHRocmVhZF9rZXlfZGVsZXRlIChwdGhyZWFkX2tleV90KTsKK2ludCBwdGhyZWFkX3NldHNwZWNpZmljKHB0aHJlYWRfa2V5X3Qga2V5LCBjb25zdCB2b2lkICp2YWx1ZSk7Cit2b2lkICpwdGhyZWFkX2dldHNwZWNpZmljKHB0aHJlYWRfa2V5X3Qga2V5KTsKKworaW50IHB0aHJlYWRfa2lsbChwdGhyZWFkX3QgdGlkLCBpbnQgc2lnKTsKK2ludCBwdGhyZWFkX3NpZ21hc2soaW50IGhvdywgY29uc3Qgc2lnc2V0X3QgKnNldCwgc2lnc2V0X3QgKm9zZXQpOworCitpbnQgcHRocmVhZF9nZXRjcHVjbG9ja2lkKHB0aHJlYWRfdCAgdGlkLCBjbG9ja2lkX3QgICpjbG9ja2lkKTsKKworaW50IHB0aHJlYWRfb25jZShwdGhyZWFkX29uY2VfdCAgKm9uY2VfY29udHJvbCwgdm9pZCAoKmluaXRfcm91dGluZSkodm9pZCkpOworCit0eXBlZGVmIHZvaWQgICgqX19wdGhyZWFkX2NsZWFudXBfZnVuY190KSh2b2lkKik7CisKK3R5cGVkZWYgc3RydWN0IF9fcHRocmVhZF9jbGVhbnVwX3QgeworICAgIHN0cnVjdCBfX3B0aHJlYWRfY2xlYW51cF90KiAgIF9fY2xlYW51cF9wcmV2OworICAgIF9fcHRocmVhZF9jbGVhbnVwX2Z1bmNfdCAgICAgIF9fY2xlYW51cF9yb3V0aW5lOworICAgIHZvaWQqICAgICAgICAgICAgICAgICAgICAgICAgIF9fY2xlYW51cF9hcmc7Cit9IF9fcHRocmVhZF9jbGVhbnVwX3Q7CisKK2V4dGVybiB2b2lkICBfX3B0aHJlYWRfY2xlYW51cF9wdXNoKF9fcHRocmVhZF9jbGVhbnVwX3QqICAgICAgYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcHRocmVhZF9jbGVhbnVwX2Z1bmNfdCAgcm91dGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqICAgICAgICAgICAgICAgICAgICAgYXJnKTsKKworZXh0ZXJuIHZvaWQgIF9fcHRocmVhZF9jbGVhbnVwX3BvcChfX3B0aHJlYWRfY2xlYW51cF90KiAgYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgIGV4ZWN1dGUpOworCisvKiBCZWxpZXZlIG9yIG5vdCwgdGhlIGRlZmluaXRpb25zIG9mIHB0aHJlYWRfY2xlYW51cF9wdXNoIGFuZAorICogcHRocmVhZF9jbGVhbnVwX3BvcCBiZWxvdyBhcmUgY29ycmVjdC4gUG9zaXggc3RhdGVzIHRoYXQgdGhlc2UKKyAqIGNhbiBiZSBpbXBsZW1lbnRlZCBhcyBtYWNyb3MgdGhhdCBtaWdodCBpbnRyb2R1Y2Ugb3BlbmluZyBhbmQKKyAqIGNsb3NpbmcgYnJhY2VzLCBhbmQgdGhhdCB1c2luZyBzZXRqbXAvbG9uZ2ptcC9yZXR1cm4vYnJlYWsvY29udGludWUKKyAqIGJldHdlZW4gdGhlbSByZXN1bHRzIGluIHVuZGVmaW5lZCBiZWhhdmlvdXIuCisgKgorICogQW5kIGluZGVlZCwgR0xpYmMgYW5kIG90aGVyIEMgbGlicmFyaWVzIHVzZSBhIHNpbWlsYXIgZGVmaW5pdGlvbgorICovCisjZGVmaW5lICBwdGhyZWFkX2NsZWFudXBfcHVzaChyb3V0aW5lLCBhcmcpICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBfX3B0aHJlYWRfY2xlYW51cF90ICBfX2NsZWFudXA7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIF9fcHRocmVhZF9jbGVhbnVwX3B1c2goICZfX2NsZWFudXAsIChyb3V0aW5lKSwgKGFyZykgKTsgIFwKKworI2RlZmluZSAgcHRocmVhZF9jbGVhbnVwX3BvcChleGVjdXRlKSAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgX19wdGhyZWFkX2NsZWFudXBfcG9wKCAmX19jbGVhbnVwLCAoZXhlY3V0ZSkpOyBcCisgICAgfSB3aGlsZSAoMCk7CisKKyNpZiBfX2NwbHVzcGx1cworfSAvKiBleHRlcm4gIkMiICovCisjZW5kaWYKKworLyoqKioqKioqKioqKiBUTyBGSVggKioqKioqKioqKioqLworCisjZGVmaW5lIExPTkdfTE9OR19NQVggX19MT05HX0xPTkdfTUFYX18KKyNkZWZpbmUgTE9OR19MT05HX01JTiAoLV9fTE9OR19MT05HX01BWF9fIC0gMSkKKworI2VuZGlmIC8vIF9QVEhSRUFEX0hfCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvcHdkLmggYi9saWJjL2luY2x1ZGUvcHdkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmYzZmFkNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9wd2QuaApAQCAtMCwwICsxLDEyNSBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5ODksIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogKGMpIFVOSVggU3lzdGVtIExhYm9yYXRvcmllcywgSW5jLgorICogQWxsIG9yIHNvbWUgcG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBkZXJpdmVkIGZyb20gbWF0ZXJpYWwgbGljZW5zZWQKKyAqIHRvIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEgYnkgQW1lcmljYW4gVGVsZXBob25lIGFuZCBUZWxlZ3JhcGgKKyAqIENvLiBvciBVbml4IFN5c3RlbSBMYWJvcmF0b3JpZXMsIEluYy4gYW5kIGFyZSByZXByb2R1Y2VkIGhlcmVpbiB3aXRoCisgKiB0aGUgcGVybWlzc2lvbiBvZiBVTklYIFN5c3RlbSBMYWJvcmF0b3JpZXMsIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICoJQCgjKXB3ZC5oCTguMiAoQmVya2VsZXkpIDEvMjEvOTQKKyAqLworCisvKi0KKyAqIFBvcnRpb25zIENvcHlyaWdodChDKSAxOTk1LCBKYXNvbiBEb3ducy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SKFMpIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MKKyAqIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfUFdEX0hfCisjZGVmaW5lIF9QV0RfSF8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjZGVmaW5lIF9QQVRIX1BBU1NXRCAgICAgICAgIi9ldGMvcGFzc3dkIgorI2RlZmluZSBfUEFUSF9NQVNURVJQQVNTV0QgICIvZXRjL21hc3Rlci5wYXNzd2QiCisjZGVmaW5lIF9QQVRIX01BU1RFUlBBU1NXRF9MT0NLICIvZXRjL3B0bXAiCisKKyNkZWZpbmUgX1BBVEhfUEFTU1dEX0NPTkYgICAiL2V0Yy9wYXNzd2QuY29uZiIKKyNkZWZpbmUgX1BBVEhfUEFTU1dEQ09ORiAgICBfUEFUSF9QQVNTV0RfQ09ORiAgIC8qIFhYWDogY29tcGF0ICovCisjZGVmaW5lIF9QQVRIX1VTRVJNR01UX0NPTkYgIi9ldGMvdXNlcm1nbXQuY29uZiIKKworI2RlZmluZSBfUEFUSF9NUF9EQiAgICAgIi9ldGMvcHdkLmRiIgorI2RlZmluZSBfUEFUSF9TTVBfREIgICAgICAgICIvZXRjL3Nwd2QuZGIiCisKKyNkZWZpbmUgX1BBVEhfUFdEX01LREIgICAgICAiL3Vzci9zYmluL3B3ZF9ta2RiIgorCisjZGVmaW5lIF9QV19LRVlCWU5BTUUgICAgICAgJzEnIC8qIHN0b3JlZCBieSBuYW1lICovCisjZGVmaW5lIF9QV19LRVlCWU5VTSAgICAgICAgJzInIC8qIHN0b3JlZCBieSBlbnRyeSBpbiB0aGUgImZpbGUiICovCisjZGVmaW5lIF9QV19LRVlCWVVJRCAgICAgICAgJzMnIC8qIHN0b3JlZCBieSB1aWQgKi8KKworI2RlZmluZSBfUEFTU1dPUkRfRUZNVDEgICAgICdfJyAvKiBleHRlbmRlZCBERVMgZW5jcnlwdGlvbiBmb3JtYXQgKi8KKyNkZWZpbmUgX1BBU1NXT1JEX05PTkRFUyAgICAnJCcgLyogbm9uLURFUyBlbmNyeXB0aW9uIGZvcm1hdHMgKi8KKworI2RlZmluZSBfUEFTU1dPUkRfTEVOICAgICAgIDEyOCAvKiBtYXggbGVuZ3RoLCBub3QgY291bnRpbmcgTlVMICovCisKKyNkZWZpbmUgX1BBU1NXT1JEX05PVUlEICAgICAweDAxICAgIC8qIGZsYWcgZm9yIG5vIHNwZWNpZmllZCB1aWQuICovCisjZGVmaW5lIF9QQVNTV09SRF9OT0dJRCAgICAgMHgwMiAgICAvKiBmbGFnIGZvciBubyBzcGVjaWZpZWQgZ2lkLiAqLworI2RlZmluZSBfUEFTU1dPUkRfTk9DSEcgICAgIDB4MDQgICAgLyogZmxhZyBmb3Igbm8gc3BlY2lmaWVkIGNoYW5nZS4gKi8KKyNkZWZpbmUgX1BBU1NXT1JEX05PRVhQICAgICAweDA4ICAgIC8qIGZsYWcgZm9yIG5vIHNwZWNpZmllZCBleHBpcmUuICovCisKKyNkZWZpbmUgX1BBU1NXT1JEX09MREZNVCAgICAweDEwICAgIC8qIGZsYWcgdG8gZXhwZWN0IGFuIG9sZCBzdHlsZSBlbnRyeSAqLworI2RlZmluZSBfUEFTU1dPUkRfTk9XQVJOICAgIDB4MjAgICAgLyogbm8gd2FybmluZ3MgZm9yIGJhZCBlbnRyaWVzICovCisKKyNkZWZpbmUgX1BBU1NXT1JEX1dBUk5EQVlTICAxNCAgLyogZGF5cyB0byB3YXJuIGFib3V0IGV4cGlyeSAqLworI2RlZmluZSBfUEFTU1dPUkRfQ0hHTk9XICAgIC0xICAvKiBzcGVjaWFsIGRheSB0byBmb3JjZSBwYXNzd29yZCBjaGFuZ2UgYXQgbmV4dCBsb2dpbiAqLworCitzdHJ1Y3QgcGFzc3dkCit7CisgICAgY2hhciogcHdfbmFtZTsKKyAgICBjaGFyKiBwd19wYXNzd2Q7CisgICAgdWlkX3QgcHdfdWlkOworICAgIGdpZF90IHB3X2dpZDsKKyAgICBjaGFyKiBwd19kaXI7CisgICAgY2hhciogcHdfc2hlbGw7Cit9OworCitfX0JFR0lOX0RFQ0xTCisKK3N0cnVjdCBwYXNzd2QqIGdldHB3bmFtKGNvbnN0IGNoYXIqKTsKK3N0cnVjdCBwYXNzd2QqIGdldHB3dWlkKHVpZF90KTsKKworaW50IGdldHB3bmFtX3IoY29uc3QgY2hhciosIHN0cnVjdCBwYXNzd2QqLCBjaGFyKiwgc2l6ZV90LCBzdHJ1Y3QgcGFzc3dkKiopOworaW50IGdldHB3dWlkX3IodWlkX3QsIHN0cnVjdCBwYXNzd2QqLCBjaGFyKiwgc2l6ZV90LCBzdHJ1Y3QgcGFzc3dkKiopOworCit2b2lkIGVuZHB3ZW50KHZvaWQpOworc3RydWN0IHBhc3N3ZCogZ2V0cHdlbnQodm9pZCk7CitpbnQgc2V0cHdlbnQodm9pZCk7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3Jlc29sdi5oIGIvbGliYy9pbmNsdWRlL3Jlc29sdi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyNDdkNjgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvcmVzb2x2LmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfUkVTT0xWX0hfCisjZGVmaW5lIF9SRVNPTFZfSF8KKworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGFycGEvbmFtZXNlci5oPgorCitfX0JFR0lOX0RFQ0xTCisKK3N0cnVjdCByZXNfc3RhdGU7CisKK2V4dGVybiBzdHJ1Y3QgX19yZXNfc3RhdGUgKl9fcmVzX3N0YXRlKHZvaWQpOworI2RlZmluZSBfcmVzICgqX19yZXNfc3RhdGUoKSkKKworLyogQmFzZS02NCBmdW5jdGlvbnMgLSBiZWNhdXNlIHNvbWUgY29kZSBleHBlY3RzIGl0IHRoZXJlICovCisKKyNkZWZpbmUgYjY0X250b3AgICAgICAgIF9fYjY0X250b3AKKyNkZWZpbmUgYjY0X3B0b24gICAgICAgIF9fYjY0X3B0b24KK2V4dGVybiBpbnQgICBiNjRfbnRvcCh1X2NoYXIgY29uc3QgKiwgc2l6ZV90LCBjaGFyICosIHNpemVfdCk7CitleHRlcm4gaW50ICAgYjY0X3B0b24oY2hhciBjb25zdCAqLCB1X2NoYXIgKiwgc2l6ZV90KTsKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9SRVNPTFZfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zY2hlZC5oIGIvbGliYy9pbmNsdWRlL3NjaGVkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjYwMGJhZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9zY2hlZC5oCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX1NDSEVEX0hfCisjZGVmaW5lIF9TQ0hFRF9IXworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKworX19CRUdJTl9ERUNMUworCisjZGVmaW5lIFNDSEVEX05PUk1BTCAgICAgICAgICAgIDAKKyNkZWZpbmUgU0NIRURfT1RIRVIgICAgICAgICAgICAgMAorI2RlZmluZSBTQ0hFRF9GSUZPICAgICAgICAgICAgICAxCisjZGVmaW5lIFNDSEVEX1JSICAgICAgICAgICAgICAgIDIKKworc3RydWN0IHNjaGVkX3BhcmFtIHsKKyAgICBpbnQgc2NoZWRfcHJpb3JpdHk7Cit9OworCitleHRlcm4gaW50IHNjaGVkX3NldHNjaGVkdWxlcihwaWRfdCwgaW50LCBjb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKik7CitleHRlcm4gaW50IHNjaGVkX2dldHNjaGVkdWxlcihwaWRfdCk7CitleHRlcm4gaW50IHNjaGVkX3lpZWxkKHZvaWQpOworZXh0ZXJuIGludCBzY2hlZF9nZXRfcHJpb3JpdHlfbWF4KGludCBwb2xpY3kpOworZXh0ZXJuIGludCBzY2hlZF9nZXRfcHJpb3JpdHlfbWluKGludCBwb2xpY3kpOworZXh0ZXJuIGludCBzY2hlZF9zZXRwYXJhbShwaWRfdCwgY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICopOworZXh0ZXJuIGludCBzY2hlZF9nZXRwYXJhbShwaWRfdCwgc3RydWN0IHNjaGVkX3BhcmFtICopOworZXh0ZXJuIGludCBzY2hlZF9ycl9nZXRfaW50ZXJ2YWwocGlkX3QgcGlkLCBzdHJ1Y3QgdGltZXNwZWMgKnRwKTsKKworI2RlZmluZSBDTE9ORV9WTSAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIENMT05FX0ZTICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgQ0xPTkVfRklMRVMgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBDTE9ORV9TSUdIQU5EICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIENMT05FX1BUUkFDRSAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgQ0xPTkVfVkZPUksgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBDTE9ORV9QQVJFTlQgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIENMT05FX1RIUkVBRCAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgQ0xPTkVfTkVXTlMgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBDTE9ORV9TWVNWU0VNICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIENMT05FX1NFVFRMUyAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgQ0xPTkVfUEFSRU5UX1NFVFRJRCAgMHgwMDEwMDAwMAorI2RlZmluZSBDTE9ORV9DSElMRF9DTEVBUlRJRCAweDAwMjAwMDAwCisjZGVmaW5lIENMT05FX0RFVEFDSEVEICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgQ0xPTkVfVU5UUkFDRUQgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBDTE9ORV9DSElMRF9TRVRUSUQgICAweDAxMDAwMDAwCisjZGVmaW5lIENMT05FX1NUT1BQRUQgICAgICAgIDB4MDIwMDAwMDAKKworZXh0ZXJuIGludCAgICBjbG9uZShpbnQgKCpmbikodm9pZCopLCB2b2lkICpjaGlsZF9zdGFjaywgaW50IGZsYWdzLCB2b2lkICphcmcpOworZXh0ZXJuIHBpZF90ICBfX2Nsb25lKGludCwgdm9pZCAqKTsKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9TQ0hFRF9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3NlbWFwaG9yZS5oIGIvbGliYy9pbmNsdWRlL3NlbWFwaG9yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwZTMxMjMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvc2VtYXBob3JlLmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfU0VNQVBIT1JFX0gKKyNkZWZpbmUgX1NFTUFQSE9SRV9ICisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKworX19CRUdJTl9ERUNMUworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgdm9sYXRpbGUgdW5zaWduZWQgaW50ICBjb3VudDsKK30gc2VtX3Q7CisKKyNkZWZpbmUgIFNFTV9GQUlMRUQgIE5VTEwKKworZXh0ZXJuIGludCBzZW1faW5pdChzZW1fdCAqc2VtLCBpbnQgcHNoYXJlZCwgdW5zaWduZWQgaW50IHZhbHVlKTsKKworZXh0ZXJuIGludCAgICBzZW1fY2xvc2Uoc2VtX3QgKik7CitleHRlcm4gaW50ICAgIHNlbV9kZXN0cm95KHNlbV90ICopOworZXh0ZXJuIGludCAgICBzZW1fZ2V0dmFsdWUoc2VtX3QgKiwgaW50ICopOworZXh0ZXJuIGludCAgICBzZW1faW5pdChzZW1fdCAqLCBpbnQsIHVuc2lnbmVkIGludCk7CitleHRlcm4gc2VtX3QgKnNlbV9vcGVuKGNvbnN0IGNoYXIgKiwgaW50LCAuLi4pOworZXh0ZXJuIGludCAgICBzZW1fcG9zdChzZW1fdCAqKTsKK2V4dGVybiBpbnQgICAgc2VtX3RyeXdhaXQoc2VtX3QgKik7CitleHRlcm4gaW50ICAgIHNlbV91bmxpbmsoY29uc3QgY2hhciAqKTsKK2V4dGVybiBpbnQgICAgc2VtX3dhaXQoc2VtX3QgKik7CisKK3N0cnVjdCB0aW1lc3BlYzsKK2V4dGVybiBpbnQgICAgc2VtX3RpbWVkd2FpdChzZW1fdCAqc2VtLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKmFic190aW1lb3V0KTsKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9TRU1BUEhPUkVfSCAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3NldGptcC5oIGIvbGliYy9pbmNsdWRlL3NldGptcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4ZmRjZWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvc2V0am1wLmgKQEAgLTAsMCArMSw2MyBAQAorLyoJJE9wZW5CU0Q6IHNldGptcC5oLHYgMS41IDIwMDUvMTIvMTMgMDA6MzU6MjIgbWlsbGVydCBFeHAgJAkqLworLyoJJE5ldEJTRDogc2V0am1wLmgsdiAxLjExIDE5OTQvMTIvMjAgMTA6MzU6NDQgY2dkIEV4cCAkCSovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIChjKSBVTklYIFN5c3RlbSBMYWJvcmF0b3JpZXMsIEluYy4KKyAqIEFsbCBvciBzb21lIHBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIG1hdGVyaWFsIGxpY2Vuc2VkCisgKiB0byB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhIGJ5IEFtZXJpY2FuIFRlbGVwaG9uZSBhbmQgVGVsZWdyYXBoCisgKiBDby4gb3IgVW5peCBTeXN0ZW0gTGFib3JhdG9yaWVzLCBJbmMuIGFuZCBhcmUgcmVwcm9kdWNlZCBoZXJlaW4gd2l0aAorICogdGhlIHBlcm1pc3Npb24gb2YgVU5JWCBTeXN0ZW0gTGFib3JhdG9yaWVzLCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqCUAoIylzZXRqbXAuaAk4LjIgKEJlcmtlbGV5KSAxLzIxLzk0CisgKi8KKworI2lmbmRlZiBfU0VUSk1QX0hfCisjZGVmaW5lIF9TRVRKTVBfSF8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPG1hY2hpbmUvc2V0am1wLmg+CisKK3R5cGVkZWYgbG9uZyBzaWdqbXBfYnVmW19KQkxFTiArIDFdOwordHlwZWRlZiBsb25nIGptcF9idWZbX0pCTEVOXTsKKworX19CRUdJTl9ERUNMUworCitpbnQgICAgIF9zZXRqbXAoam1wX2J1Zik7Cit2b2lkICAgIF9sb25nam1wKGptcF9idWYsIGludCk7Cit2b2lkICAgIGxvbmdqbXBlcnJvcih2b2lkKTsKKworaW50ICAgICBzZXRqbXAoam1wX2J1Zik7Cit2b2lkICAgIGxvbmdqbXAoam1wX2J1ZiwgaW50KTsKKworaW50ICAgICBzaWdzZXRqbXAoc2lnam1wX2J1ZiwgaW50KTsKK3ZvaWQgICAgc2lnbG9uZ2ptcChzaWdqbXBfYnVmLCBpbnQpOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogIV9TRVRKTVBfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zZ3R0eS5oIGIvbGliYy9pbmNsdWRlL3NndHR5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFjMzEwMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9zZ3R0eS5oCkBAIC0wLDAgKzEsNDggQEAKKy8qCSROZXRCU0Q6IHNndHR5LmgsdiAxLjggMjAwNS8wMi8wMyAwNDozOTozMiBwZXJyeSBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTg1LCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICoJQCgjKXNndHR5LmgJOC4xIChCZXJrZWxleSkgNi8yLzkzCisgKi8KKworI2lmbmRlZiBfU0dUVFlfSF8KKyNkZWZpbmUgX1NHVFRZX0hfCisKKyNpZm5kZWYgVVNFX09MRF9UVFkKKyNkZWZpbmUJVVNFX09MRF9UVFkKKyNlbmRpZgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorCitfX0JFR0lOX0RFQ0xTCitpbnQgZ3R0eShpbnQsIHN0cnVjdCBzZ3R0eWIgKik7CitpbnQgc3R0eShpbnQsIHN0cnVjdCBzZ3R0eWIgKik7CitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX1NHVFRZX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc2hhMS5oIGIvbGliYy9pbmNsdWRlL3NoYTEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2FkYTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3NoYTEuaApAQCAtMCwwICsxLDMxIEBACisvKgkkTmV0QlNEOiBzaGExLmgsdiAxLjEzIDIwMDUvMTIvMjYgMTg6NDE6MzYgcGVycnkgRXhwICQJKi8KKworLyoKKyAqIFNIQS0xIGluIEMKKyAqIEJ5IFN0ZXZlIFJlaWQgPHN0ZXZlQGVkbXdlYi5jb20+CisgKiAxMDAlIFB1YmxpYyBEb21haW4KKyAqLworCisjaWZuZGVmIF9TWVNfU0hBMV9IXworI2RlZmluZQlfU1lTX1NIQTFfSF8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjZGVmaW5lIFNIQTFfRElHRVNUX0xFTkdUSAkJMjAKKyNkZWZpbmUgU0hBMV9ESUdFU1RfU1RSSU5HX0xFTkdUSAk0MQorCit0eXBlZGVmIHN0cnVjdCB7CisJdWludDMyX3Qgc3RhdGVbNV07CisJdWludDMyX3QgY291bnRbMl07CisJdV9jaGFyIGJ1ZmZlcls2NF07Cit9IFNIQTFfQ1RYOworCitfX0JFR0lOX0RFQ0xTCit2b2lkCVNIQTFUcmFuc2Zvcm0odWludDMyX3RbNV0sIGNvbnN0IHVfY2hhcls2NF0pOwordm9pZAlTSEExSW5pdChTSEExX0NUWCAqKTsKK3ZvaWQJU0hBMVVwZGF0ZShTSEExX0NUWCAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQpOwordm9pZAlTSEExRmluYWwodV9jaGFyW1NIQTFfRElHRVNUX0xFTkdUSF0sIFNIQTFfQ1RYICopOworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9TWVNfU0hBMV9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3NpZ25hbC5oIGIvbGliYy9pbmNsdWRlL3NpZ25hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1NDA4NDcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvc2lnbmFsLmgKQEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX1NJR05BTF9IXworI2RlZmluZSBfU0lHTkFMX0hfCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4JCS8qIEZvciBMT05HX0JJVCAqLworI2luY2x1ZGUgPHN0cmluZy5oPgkJLyogRm9yIG1lbXNldCgpICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3NpZ25hbC5oPgorCisjZGVmaW5lIF9fQVJDSF9TSV9VSURfVCBfX2tlcm5lbF91aWQzMl90CisjaW5jbHVkZSA8YXNtL3NpZ2luZm8uaD4KKyN1bmRlZiBfX0FSQ0hfU0lfVUlEX1QKKworX19CRUdJTl9ERUNMUworCit0eXBlZGVmIGludCBzaWdfYXRvbWljX3Q7CisKKy8qIGNyZXB5IE5JRyAvIF9OU0lHIGhhbmRsaW5nLCBqdXN0IHRvIGJlIHNhZmUgKi8KKyNpZm5kZWYgTlNJRworIyAgZGVmaW5lIE5TSUcgIF9OU0lHCisjZW5kaWYKKyNpZm5kZWYgX05TSUcKKyMgIGRlZmluZSBfTlNJRyAgTlNJRworI2VuZGlmCisKK2V4dGVybiBjb25zdCBjaGFyICogY29uc3Qgc3lzX3NpZ2xpc3RbXTsKKworc3RhdGljIF9faW5saW5lX18gaW50IHNpZ2lzbWVtYmVyKHNpZ3NldF90ICpzZXQsIGludCBzaWdudW0pCit7CisgICAgdW5zaWduZWQgbG9uZyAqbG9jYWxfc2V0ID0gKHVuc2lnbmVkIGxvbmcgKilzZXQ7CisgICAgc2lnbnVtLS07CisgICAgcmV0dXJuIChpbnQpKChsb2NhbF9zZXRbc2lnbnVtL0xPTkdfQklUXSA+PiAoc2lnbnVtJUxPTkdfQklUKSkgJiAxKTsKK30KKworCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgc2lnYWRkc2V0KHNpZ3NldF90ICpzZXQsIGludCBzaWdudW0pCit7CisgICAgdW5zaWduZWQgbG9uZyAqbG9jYWxfc2V0ID0gKHVuc2lnbmVkIGxvbmcgKilzZXQ7CisgICAgc2lnbnVtLS07CisgICAgbG9jYWxfc2V0W3NpZ251bS9MT05HX0JJVF0gfD0gMVVMIDw8IChzaWdudW0lTE9OR19CSVQpOworICAgIHJldHVybiAwOworfQorCisKK3N0YXRpYyBfX2lubGluZV9fIGludCBzaWdkZWxzZXQoc2lnc2V0X3QgKnNldCwgaW50IHNpZ251bSkKK3sKKyAgICB1bnNpZ25lZCBsb25nICpsb2NhbF9zZXQgPSAodW5zaWduZWQgbG9uZyAqKXNldDsKKyAgICBzaWdudW0tLTsKKyAgICBsb2NhbF9zZXRbc2lnbnVtL0xPTkdfQklUXSAmPSB+KDFVTCA8PCAoc2lnbnVtJUxPTkdfQklUKSk7CisgICAgcmV0dXJuIDA7Cit9CisKKworc3RhdGljIF9faW5saW5lX18gaW50IHNpZ2VtcHR5c2V0KHNpZ3NldF90ICpzZXQpCit7CisgICAgbWVtc2V0KHNldCwgMCwgc2l6ZW9mICpzZXQpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgc2lnZmlsbHNldChzaWdzZXRfdCAqc2V0KQoreworICAgIG1lbXNldChzZXQsIH4wLCBzaXplb2YgKnNldCk7CisgICAgcmV0dXJuIDA7Cit9CisKKworLyogY29tcGF0aWJpbGl0eSB0eXBlcyAqLwordHlwZWRlZiB2b2lkICAoKnNpZ190KShpbnQpOwordHlwZWRlZiBzaWdfdCBzaWdoYW5kbGVyX3Q7CisKKy8qIGRpZmZlcmVudGlhdGVyIGJldHdlZW4gc3lzdiBhbmQgYnNkIGJlaGF2aW91ciA4Ki8KK2V4dGVybiBfX3NpZ2hhbmRsZXJfdCBzeXN2X3NpZ25hbChpbnQsIF9fc2lnaGFuZGxlcl90KTsKK2V4dGVybiBfX3NpZ2hhbmRsZXJfdCBic2Rfc2lnbmFsKGludCwgX19zaWdoYW5kbGVyX3QpOworCisvKiB0aGUgZGVmYXVsdCBpcyBic2QgKi8KK3N0YXRpYyBfX2lubGluZV9fIF9fc2lnaGFuZGxlcl90IHNpZ25hbChpbnQgcywgX19zaWdoYW5kbGVyX3QgZikKK3sKKyAgICByZXR1cm4gYnNkX3NpZ25hbChzLGYpOworfQorCisvKiB0aGUgc3lzY2FsbCBpdHNlbGYgKi8KK2V4dGVybiBfX3NpZ2hhbmRsZXJfdCBfX3NpZ25hbChpbnQsIF9fc2lnaGFuZGxlcl90LCBpbnQpOworCitleHRlcm4gaW50IHNpZ3Byb2NtYXNrKGludCwgY29uc3Qgc2lnc2V0X3QgKiwgc2lnc2V0X3QgKik7CitleHRlcm4gaW50IHNpZ2FjdGlvbihpbnQsIGNvbnN0IHN0cnVjdCBzaWdhY3Rpb24gKiwgc3RydWN0IHNpZ2FjdGlvbiAqKTsKKworZXh0ZXJuIGludCBzaWdwZW5kaW5nKHNpZ3NldF90ICopOworZXh0ZXJuIGludCBzaWdzdXNwZW5kKGNvbnN0IHNpZ3NldF90ICopOworZXh0ZXJuIGludCBzaWd3YWl0KGNvbnN0IHNpZ3NldF90ICpzZXQsIGludCAqc2lnKTsKK2V4dGVybiBpbnQgc2lnaW50ZXJydXB0KGludCAgc2lnLCBpbnQgIGZsYWcpOworCitleHRlcm4gaW50IHJhaXNlKGludCk7CitleHRlcm4gaW50IGtpbGwocGlkX3QsIGludCk7CisKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9TSUdOQUxfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zdGRpbnQuaCBiL2xpYmMvaW5jbHVkZS9zdGRpbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWE4YWI4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3N0ZGludC5oCkBAIC0wLDAgKzEsMjYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9TVERJTlRfSAorI2RlZmluZSBfU1RESU5UX0gKKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN5cy9fdHlwZXMuaD4KKworCisKKyNpZiAhZGVmaW5lZChfX2NwbHVzcGx1cykgfHwgZGVmaW5lZChfX1NURENfTElNSVRfTUFDUk9TKQorIyAgZGVmaW5lIF9fU1RESU5UX0xJTUlUUworI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfX2NwbHVzcGx1cykgfHwgZGVmaW5lZChfX1NURENfQ09OU1RBTlRfTUFDUk9TKQorIyAgZGVmaW5lICBfX1NURElOVF9NQUNST1MKKyNlbmRpZgorCisvKiB0aGUgZGVmaW5pdGlvbnMgb2YgU1RESU5UX0xJTUlUUyBkZXBlbmQgb24gdGhvc2Ugb2YgU1RESU5UX01BQ1JPUyAqLworI2lmIGRlZmluZWQgX19TVERJTlRfTElNSVRTICYmICFkZWZpbmVkIF9fU1RESU5UX01BQ1JPUworIyAgZGVmaW5lICBfX1NURElOVF9NQUNST1MKKyNlbmRpZgorCit0eXBlZGVmIF9faW50OF90ICAgICAgaW50OF90OwordHlwZWRlZiBfX3VpbnQ4X3QgICAgIHVpbnQ4X3Q7Cit0eXBlZGVmIF9faW50MTZfdCAgICAgaW50MTZfdDsKK3R5cGVkZWYgX191aW50MTZfdCAgICB1aW50MTZfdDsKK3R5cGVkZWYgX19pbnQzMl90ICAgICBpbnQzMl90OwordHlwZWRlZiBfX3VpbnQzMl90ICAgIHVpbnQzMl90OworI2lmICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykKK3R5cGVkZWYgX19pbnQ2NF90ICAgICBpbnQ2NF90OwordHlwZWRlZiBfX3VpbnQ2NF90ICAgIHVpbnQ2NF90OworI2VuZGlmCisKKy8qCisgKiBpbnQ4X3QgJiB1aW50OF90CisgKi8KKwordHlwZWRlZiBpbnQ4X3QgICAgICAgIGludF9sZWFzdDhfdDsKK3R5cGVkZWYgaW50OF90ICAgICAgICBpbnRfZmFzdDhfdDsKKwordHlwZWRlZiB1aW50OF90ICAgICAgIHVpbnRfbGVhc3Q4X3Q7Cit0eXBlZGVmIHVpbnQ4X3QgICAgICAgdWludF9mYXN0OF90OworCisjaWZkZWYgX19TVERJTlRfTElNSVRTCisjICBkZWZpbmUgSU5UOF9NSU4gICAgICAgICAoLTEyOCkKKyMgIGRlZmluZSBJTlQ4X01BWCAgICAgICAgICgxMjcpCisjICBkZWZpbmUgSU5UX0xFQVNUOF9NSU4gICBJTlQ4X01JTgorIyAgZGVmaW5lIElOVF9MRUFTVDhfTUFYICAgSU5UOF9NQVgKKyMgIGRlZmluZSBJTlRfRkFTVDhfTUlOICAgIElOVDhfTUlOCisjICBkZWZpbmUgSU5UX0ZBU1Q4X01BWCAgICBJTlQ4X01BWAorCisjICBkZWZpbmUgVUlOVDhfTUFYICAgICAgICAgICAoMjU1VSkKKyMgIGRlZmluZSBVSU5UX0xFQVNUOF9NQVggICAgIFVJTlQ4X01BWAorIyAgZGVmaW5lIFVJTlRfRkFTVDhfTUFYICAgICAgVUlOVDhfTUFYCisjZW5kaWYKKworI2lmZGVmIF9fU1RESU5UX01BQ1JPUworIyAgZGVmaW5lIElOVDhfQyhjKQljCisjICBkZWZpbmUgSU5UX0xFQVNUOF9DKGMpCSBJTlQ4X0MoYykKKyMgIGRlZmluZSBJTlRfRkFTVDhfQyhjKQlJTlQ4X0MoYykKKworIyAgZGVmaW5lIFVJTlQ4X0MoYykJYyAjIyBVCisjICBkZWZpbmUgVUlOVF9MRUFTVDhfQyhjKSAgVUlOVDhfQyhjKQorIyAgZGVmaW5lIFVJTlRfRkFTVDhfQyhjKSAgVUlOVDhfQyhjKQorI2VuZGlmCisKKy8qCisgKiBpbnQxNl90ICYgdWludDE2X3QKKyAqLworCisKK3R5cGVkZWYgaW50MTZfdCAgICAgICBpbnRfbGVhc3QxNl90OwordHlwZWRlZiBpbnQzMl90ICAgICAgIGludF9mYXN0MTZfdDsKKwordHlwZWRlZiB1aW50MTZfdCAgICAgIHVpbnRfbGVhc3QxNl90OwordHlwZWRlZiB1aW50MzJfdCAgICAgIHVpbnRfZmFzdDE2X3Q7CisKKyNpZmRlZiBfX1NURElOVF9MSU1JVFMKKyMgIGRlZmluZSBJTlQxNl9NSU4JKC0zMjc2OCkKKyMgIGRlZmluZSBJTlQxNl9NQVgJKDMyNzY3KQorIyAgZGVmaW5lIElOVF9MRUFTVDE2X01JTglJTlQxNl9NSU4KKyMgIGRlZmluZSBJTlRfTEVBU1QxNl9NQVgJSU5UMTZfTUFYCisjICBkZWZpbmUgSU5UX0ZBU1QxNl9NSU4JSU5UMzJfTUlOCisjICBkZWZpbmUgSU5UX0ZBU1QxNl9NQVgJSU5UMzJfTUFYCisKKyMgIGRlZmluZSBVSU5UMTZfTUFYCSg2NTUzNVUpCisjICBkZWZpbmUgVUlOVF9MRUFTVDE2X01BWCBVSU5UMTZfTUFYCisjICBkZWZpbmUgVUlOVF9GQVNUMTZfTUFYIFVJTlQzMl9NQVgKKyNlbmRpZgorCisjaWZkZWYgX19TVERJTlRfTUFDUk9TCisjICBkZWZpbmUgSU5UMTZfQyhjKQljCisjICBkZWZpbmUgSU5UX0xFQVNUMTZfQyhjKSBJTlQxNl9DKGMpCisjICBkZWZpbmUgSU5UX0ZBU1QxNl9DKGMpCSBJTlQzMl9DKGMpCisKKyMgIGRlZmluZSBVSU5UMTZfQyhjKQljICMjIFUKKyMgIGRlZmluZSBVSU5UX0xFQVNUMTZfQyhjKSBVSU5UMTZfQyhjKQorIyAgZGVmaW5lIFVJTlRfRkFTVDE2X0MoYykgVUlOVDMyX0MoYykKKyNlbmRpZgorCisvKgorICogaW50MzJfdCAmIHVpbnQzMl90CisgKi8KKwordHlwZWRlZiBpbnQzMl90ICAgICAgIGludF9sZWFzdDMyX3Q7Cit0eXBlZGVmIGludDMyX3QgICAgICAgaW50X2Zhc3QzMl90OworCit0eXBlZGVmIHVpbnQzMl90ICAgICAgdWludF9sZWFzdDMyX3Q7Cit0eXBlZGVmIHVpbnQzMl90ICAgICAgdWludF9mYXN0MzJfdDsKKworI2lmZGVmIF9fU1RESU5UX0xJTUlUUworIyAgZGVmaW5lIElOVDMyX01JTgkoLTIxNDc0ODM2NDctMSkKKyMgIGRlZmluZSBJTlQzMl9NQVgJKDIxNDc0ODM2NDcpCisjICBkZWZpbmUgSU5UX0xFQVNUMzJfTUlOCUlOVDMyX01JTgorIyAgZGVmaW5lIElOVF9MRUFTVDMyX01BWAlJTlQzMl9NQVgKKyMgIGRlZmluZSBJTlRfRkFTVDMyX01JTglJTlQzMl9NSU4KKyMgIGRlZmluZSBJTlRfRkFTVDMyX01BWAlJTlQzMl9NQVgKKworIyAgZGVmaW5lIFVJTlQzMl9NQVgJKDQyOTQ5NjcyOTVVKQorIyAgZGVmaW5lIFVJTlRfTEVBU1QzMl9NQVggVUlOVDMyX01BWAorIyAgZGVmaW5lIFVJTlRfRkFTVDMyX01BWCBVSU5UMzJfTUFYCisjZW5kaWYKKworI2lmZGVmIF9fU1RESU5UX01BQ1JPUworIyAgZGVmaW5lIElOVDMyX0MoYykJYworIyAgZGVmaW5lIElOVF9MRUFTVDMyX0MoYykgSU5UMzJfQyhjKQorIyAgZGVmaW5lIElOVF9GQVNUMzJfQyhjKSAgSU5UMzJfQyhjKQorCisjICBkZWZpbmUgVUlOVDMyX0MoYykJYyAjIyBVCisjICBkZWZpbmUgVUlOVF9MRUFTVDMyX0MoYykgVUlOVDMyX0MoYykKKyMgIGRlZmluZSBVSU5UX0ZBU1QzMl9DKGMpIFVJTlQzMl9DKGMpCisjZW5kaWYKKworI2lmICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykKKy8qCisgKiAgaW50NjRfdAorICovCit0eXBlZGVmIGludDY0X3QgICAgICAgaW50X2xlYXN0NjRfdDsKK3R5cGVkZWYgaW50NjRfdCAgICAgICBpbnRfZmFzdDY0X3Q7CisKK3R5cGVkZWYgdWludDY0X3QgICAgICB1aW50X2xlYXN0NjRfdDsKK3R5cGVkZWYgdWludDY0X3QgICAgICB1aW50X2Zhc3Q2NF90OworCisKKyNpZmRlZiBfX1NURElOVF9MSU1JVFMKKyMgIGRlZmluZSBJTlQ2NF9NSU4gICAgICAgIChfX0lOVDY0X0MoLTkyMjMzNzIwMzY4NTQ3NzU4MDcpLTEpCisjICBkZWZpbmUgSU5UNjRfTUFYICAgICAgICAoX19JTlQ2NF9DKDkyMjMzNzIwMzY4NTQ3NzU4MDcpKQorIyAgZGVmaW5lIElOVF9MRUFTVDY0X01JTiAgSU5UNjRfTUlOCisjICBkZWZpbmUgSU5UX0xFQVNUNjRfTUFYICBJTlQ2NF9NQVgKKyMgIGRlZmluZSBJTlRfRkFTVDY0X01JTiAgIElOVDY0X01JTgorIyAgZGVmaW5lIElOVF9GQVNUNjRfTUFYICAgSU5UNjRfTUFYCisjICBkZWZpbmUgVUlOVDY0X01BWCAgICAgICAoX19VSU5UNjRfQygxODQ0Njc0NDA3MzcwOTU1MTYxNSkpCisKKyMgIGRlZmluZSBVSU5UX0xFQVNUNjRfTUFYIFVJTlQ2NF9NQVgKKyMgIGRlZmluZSBVSU5UX0ZBU1Q2NF9NQVggVUlOVDY0X01BWAorI2VuZGlmCisKKyNpZmRlZiBfX1NURElOVF9NQUNST1MKKyMgIGRlZmluZSBfX0lOVDY0X0MoYykgICAgIGMgIyMgTEwKKyMgIGRlZmluZSBJTlQ2NF9DKGMpICAgICAgIF9fSU5UNjRfQyhjKQorIyAgZGVmaW5lIElOVF9MRUFTVDY0X0MoYykgSU5UNjRfQyhjKQorIyAgZGVmaW5lIElOVF9GQVNUNjRfQyhjKSAgSU5UNjRfQyhjKQorCisjICBkZWZpbmUgX19VSU5UNjRfQyhjKSAgICAgYyAjIyBVTEwKKyMgIGRlZmluZSBVSU5UNjRfQyhjKSAgICAgICBfX1VJTlQ2NF9DKGMpCisjICBkZWZpbmUgVUlOVF9MRUFTVDY0X0MoYykgVUlOVDY0X0MoYykKKyMgIGRlZmluZSBVSU5UX0ZBU1Q2NF9DKGMpICBVSU5UNjRfQyhjKQorI2VuZGlmCisKKworIyAgZGVmaW5lIF9fUFJJNjRfUkFOSyAgICJsbCIKKyMgIGRlZmluZSBfX1BSSUZBU1RfUkFOSyAiIgorIyAgZGVmaW5lIF9fUFJJUFRSX1JBTksgICIiCisKKyNlbmRpZiAvKiAhX19TVFJJQ1RfQU5TSV9fICovCisKKy8qCisgKiBpbnRwdHJfdCAmIHVpbnRwdHJfdAorICovCisKK3R5cGVkZWYgaW50ICAgICAgICAgICBpbnRwdHJfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50ICB1aW50cHRyX3Q7CisKKyMgIGRlZmluZSBJTlRQVFJfTUlOICAgIElOVDMyX01JTgorIyAgZGVmaW5lIElOVFBUUl9NQVggICAgSU5UMzJfTUFYCisjICBkZWZpbmUgVUlOVFBUUl9NQVggICBVSU5UMzJfTUFYCisjICBkZWZpbmUgSU5UUFRSX0MoYykgICBJTlQzMl9DKGMpCisjICBkZWZpbmUgVUlOVFBUUl9DKGMpICBVSU5UMzJfQyhjKQorIyAgZGVmaW5lIFBUUkRJRkZfQyhjKSAgSU5UMzJfQyhjKQorIyAgZGVmaW5lIFBUUkRJRkZfTUlOICAgSU5UMzJfTUlOCisjICBkZWZpbmUgUFRSRElGRl9NQVggICBJTlQzMl9NQVgKKworCisvKgorICogIGludG1heF90ICYgdWludG1heF90CisgKi8KKworI2lmICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykKKwordHlwZWRlZiB1aW50NjRfdCB1aW50bWF4X3Q7Cit0eXBlZGVmIGludDY0X3QgIGludG1heF90OworCisjZGVmaW5lIElOVE1BWF9NSU4JSU5UNjRfTUlOCisjZGVmaW5lIElOVE1BWF9NQVgJSU5UNjRfTUFYCisjZGVmaW5lIFVJTlRNQVhfTUFYCVVJTlQ2NF9NQVgKKworI2RlZmluZSBJTlRNQVhfQyhjKQlJTlQ2NF9DKGMpCisjZGVmaW5lIFVJTlRNQVhfQyhjKQlVSU5UNjRfQyhjKQorCisjZWxzZSAvKiBfX1NUUklDVF9BTlNJX18gKi8KKwordHlwZWRlZiB1aW50MzJfdCAgdWludG1heF90OwordHlwZWRlZiBpbnQzMl90ICAgaW50bWF4X3Q7CisKKyNkZWZpbmUgIElOVE1BWF9NSU4gICAgSU5UMzJfTUlOCisjZGVmaW5lICBJTlRNQVhfTUFYICAgIElOVDMyX01BWAorI2RlZmluZSAgVUlOVE1BWF9NQVggICBVSU5UMzJfTUFYCisKKyNkZWZpbmUgSU5UTUFYX0MoYykJSU5UMzJfQyhjKQorI2RlZmluZSBVSU5UTUFYX0MoYykJVUlOVDMyX0MoYykKKworI2VuZGlmIC8qIF9fU1RSSUNUX0FOU0lfXyAqLworCisKKy8qIHNpemVfdCBpcyBkZWZpbmVkIGJ5IHRoZSBHQ0Mtc3BlY2lmaWMgPHN0ZGRlZi5oPiAqLworI2lmbmRlZiBfU1NJWkVfVF9ERUZJTkVEXworI2RlZmluZSBfU1NJWkVfVF9ERUZJTkVEXwordHlwZWRlZiBsb25nIGludCAgc3NpemVfdDsKKyNlbmRpZgorCisjZGVmaW5lIF9CSVRTSVpFIDMyCisKKy8qIEtlZXAgdGhlIGtlcm5lbCBmcm9tIHRyeWluZyB0byBkZWZpbmUgdGhlc2UgdHlwZXMuLi4gKi8KKyNkZWZpbmUgX19CSVRfVFlQRVNfREVGSU5FRF9fCisKKyNlbmRpZiAvKiBfU1RESU5UX0ggKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zdGRpby5oIGIvbGliYy9pbmNsdWRlL3N0ZGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzllNTI2YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9zdGRpby5oCkBAIC0wLDAgKzEsNDM3IEBACisvKgkkT3BlbkJTRDogc3RkaW8uaCx2IDEuMzUgMjAwNi8wMS8xMyAxODoxMDowOSBtaW9kIEV4cCAkCSovCisvKgkkTmV0QlNEOiBzdGRpby5oLHYgMS4xOCAxOTk2LzA0LzI1IDE4OjI5OjIxIGp0YyBFeHAgJAkqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICoJQCgjKXN0ZGlvLmgJNS4xNyAoQmVya2VsZXkpIDYvMy85MQorICovCisKKyNpZm5kZWYJX1NURElPX0hfCisjZGVmaW5lCV9TVERJT19IXworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3lzL190eXBlcy5oPgorCisvKiB2YV9saXN0IGFuZCBzaXplX3QgbXVzdCBiZSBkZWZpbmVkIGJ5IHN0ZGlvLmggYWNjb3JkaW5nIHRvIFBvc2l4ICovCisjZGVmaW5lIF9fbmVlZF9fX3ZhX2xpc3QKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworLyogbm90ZSB0aGF0IHRoaXMgZm9yY2VzIHN0ZGRlZi5oIHRvICpvbmx5KiBkZWZpbmUgc2l6ZV90ICovCisjZGVmaW5lIF9fbmVlZF9zaXplX3QKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisjaWYgX19CU0RfVklTSUJMRSB8fCBfX1BPU0lYX1ZJU0lCTEUgfHwgX19YUEdfVklTSUJMRQorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgkvKiBYWFggc2hvdWxkIGJlIHJlbW92ZWQgKi8KKyNlbmRpZgorCisjaWZuZGVmCV9TSVpFX1RfREVGSU5FRF8KKyNkZWZpbmUJX1NJWkVfVF9ERUZJTkVEXwordHlwZWRlZgl1bnNpZ25lZCBsb25nICAgIHNpemVfdDsKKyNlbmRpZgorCisjaWZuZGVmCV9PRkZfVF9ERUZJTkVEXworI2RlZmluZQlfT0ZGX1RfREVGSU5FRF8KK3R5cGVkZWYJbG9uZyAgICBvZmZfdDsKKyNlbmRpZgorCisjaWZuZGVmIE5VTEwKKyNpZmRlZiAJX19HTlVHX18KKyNkZWZpbmUJTlVMTAlfX251bGwKKyNlbHNlCisjZGVmaW5lCU5VTEwJMEwKKyNlbmRpZgorI2VuZGlmCisKKyNkZWZpbmUJX0ZTVERJTwkJCS8qIERlZmluZSBmb3IgbmV3IHN0ZGlvIHdpdGggZnVuY3Rpb25zLiAqLworCit0eXBlZGVmIG9mZl90IGZwb3NfdDsJCS8qIHN0ZGlvIGZpbGUgcG9zaXRpb24gdHlwZSAqLworCisvKgorICogTkI6IHRvIGZpdCB0aGluZ3MgaW4gc2l4IGNoYXJhY3RlciBtb25vY2FzZSBleHRlcm5hbHMsIHRoZSBzdGRpbworICogY29kZSB1c2VzIHRoZSBwcmVmaXggYF9fcycgZm9yIHN0ZGlvIG9iamVjdHMsIHR5cGljYWxseSBmb2xsb3dlZAorICogYnkgYSB0aHJlZS1jaGFyYWN0ZXIgYXR0ZW1wdCBhdCBhIG1uZW1vbmljLgorICovCisKKy8qIHN0ZGlvIGJ1ZmZlcnMgKi8KK3N0cnVjdCBfX3NidWYgeworCXVuc2lnbmVkIGNoYXIgKl9iYXNlOworCWludAlfc2l6ZTsKK307CisKKy8qCisgKiBzdGRpbyBzdGF0ZSB2YXJpYWJsZXMuCisgKgorICogVGhlIGZvbGxvd2luZyBhbHdheXMgaG9sZDoKKyAqCisgKglpZiAoX2ZsYWdzJihfX1NMQkZ8X19TV1IpKSA9PSAoX19TTEJGfF9fU1dSKSwKKyAqCQlfbGJmc2l6ZSBpcyAtX2JmLl9zaXplLCBlbHNlIF9sYmZzaXplIGlzIDAKKyAqCWlmIF9mbGFncyZfX1NSRCwgX3cgaXMgMAorICoJaWYgX2ZsYWdzJl9fU1dSLCBfciBpcyAwCisgKgorICogVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGdldGMgYW5kIHB1dGMgbWFjcm9zIChvciBpbmxpbmUgZnVuY3Rpb25zKSBuZXZlcgorICogdHJ5IHRvIHdyaXRlIG9yIHJlYWQgZnJvbSBhIGZpbGUgdGhhdCBpcyBpbiBgcmVhZCcgb3IgYHdyaXRlJyBtb2RlLgorICogKE1vcmVvdmVyLCB0aGV5IGNhbiwgYW5kIGRvLCBhdXRvbWF0aWNhbGx5IHN3aXRjaCBmcm9tIHJlYWQgbW9kZSB0bworICogd3JpdGUgbW9kZSwgYW5kIGJhY2ssIG9uICJyKyIgYW5kICJ3KyIgZmlsZXMuKQorICoKKyAqIF9sYmZzaXplIGlzIHVzZWQgb25seSB0byBtYWtlIHRoZSBpbmxpbmUgbGluZS1idWZmZXJlZCBvdXRwdXQgc3RyZWFtCisgKiBjb2RlIGFzIGNvbXBhY3QgYXMgcG9zc2libGUuCisgKgorICogX3ViLCBfdXAsIGFuZCBfdXIgYXJlIHVzZWQgd2hlbiB1bmdldGMoKSBwdXNoZXMgYmFjayBtb3JlIGNoYXJhY3RlcnMKKyAqIHRoYW4gZml0IGluIHRoZSBjdXJyZW50IF9iZiwgb3Igd2hlbiB1bmdldGMoKSBwdXNoZXMgYmFjayBhIGNoYXJhY3RlcgorICogdGhhdCBkb2VzIG5vdCBtYXRjaCB0aGUgcHJldmlvdXMgb25lIGluIF9iZi4gIFdoZW4gdGhpcyBoYXBwZW5zLAorICogX3ViLl9iYXNlIGJlY29tZXMgbm9uLW5pbCAoaS5lLiwgYSBzdHJlYW0gaGFzIHVuZ2V0YygpIGRhdGEgaWZmCisgKiBfdWIuX2Jhc2UhPU5VTEwpIGFuZCBfdXAgYW5kIF91ciBzYXZlIHRoZSBjdXJyZW50IHZhbHVlcyBvZiBfcCBhbmQgX3IuCisgKi8KK3R5cGVkZWYJc3RydWN0IF9fc0ZJTEUgeworCXVuc2lnbmVkIGNoYXIgKl9wOwkvKiBjdXJyZW50IHBvc2l0aW9uIGluIChzb21lKSBidWZmZXIgKi8KKwlpbnQJX3I7CQkvKiByZWFkIHNwYWNlIGxlZnQgZm9yIGdldGMoKSAqLworCWludAlfdzsJCS8qIHdyaXRlIHNwYWNlIGxlZnQgZm9yIHB1dGMoKSAqLworCXNob3J0CV9mbGFnczsJCS8qIGZsYWdzLCBiZWxvdzsgdGhpcyBGSUxFIGlzIGZyZWUgaWYgMCAqLworCXNob3J0CV9maWxlOwkJLyogZmlsZW5vLCBpZiBVbml4IGRlc2NyaXB0b3IsIGVsc2UgLTEgKi8KKwlzdHJ1Y3QJX19zYnVmIF9iZjsJLyogdGhlIGJ1ZmZlciAoYXQgbGVhc3QgMSBieXRlLCBpZiAhTlVMTCkgKi8KKwlpbnQJX2xiZnNpemU7CS8qIDAgb3IgLV9iZi5fc2l6ZSwgZm9yIGlubGluZSBwdXRjICovCisKKwkvKiBvcGVyYXRpb25zICovCisJdm9pZAkqX2Nvb2tpZTsJLyogY29va2llIHBhc3NlZCB0byBpbyBmdW5jdGlvbnMgKi8KKwlpbnQJKCpfY2xvc2UpKHZvaWQgKik7CisJaW50CSgqX3JlYWQpKHZvaWQgKiwgY2hhciAqLCBpbnQpOworCWZwb3NfdAkoKl9zZWVrKSh2b2lkICosIGZwb3NfdCwgaW50KTsKKwlpbnQJKCpfd3JpdGUpKHZvaWQgKiwgY29uc3QgY2hhciAqLCBpbnQpOworCisJLyogZXh0ZW5zaW9uIGRhdGEsIHRvIGF2b2lkIGZ1cnRoZXIgQUJJIGJyZWFrYWdlICovCisJc3RydWN0CV9fc2J1ZiBfZXh0OworCS8qIGRhdGEgZm9yIGxvbmcgc2VxdWVuY2VzIG9mIHVuZ2V0YygpICovCisJdW5zaWduZWQgY2hhciAqX3VwOwkvKiBzYXZlZCBfcCB3aGVuIF9wIGlzIGRvaW5nIHVuZ2V0YyBkYXRhICovCisJaW50CV91cjsJCS8qIHNhdmVkIF9yIHdoZW4gX3IgaXMgY291bnRpbmcgdW5nZXRjIGRhdGEgKi8KKworCS8qIHRyaWNrcyB0byBtZWV0IG1pbmltdW0gcmVxdWlyZW1lbnRzIGV2ZW4gd2hlbiBtYWxsb2MoKSBmYWlscyAqLworCXVuc2lnbmVkIGNoYXIgX3VidWZbM107CS8qIGd1YXJhbnRlZSBhbiB1bmdldGMoKSBidWZmZXIgKi8KKwl1bnNpZ25lZCBjaGFyIF9uYnVmWzFdOwkvKiBndWFyYW50ZWUgYSBnZXRjKCkgYnVmZmVyICovCisKKwkvKiBzZXBhcmF0ZSBidWZmZXIgZm9yIGZnZXRsbigpIHdoZW4gbGluZSBjcm9zc2VzIGJ1ZmZlciBib3VuZGFyeSAqLworCXN0cnVjdAlfX3NidWYgX2xiOwkvKiBidWZmZXIgZm9yIGZnZXRsbigpICovCisKKwkvKiBVbml4IHN0ZGlvIGZpbGVzIGdldCBhbGlnbmVkIHRvIGJsb2NrIGJvdW5kYXJpZXMgb24gZnNlZWsoKSAqLworCWludAlfYmxrc2l6ZTsJLyogc3RhdC5zdF9ibGtzaXplIChtYXkgYmUgIT0gX2JmLl9zaXplKSAqLworCWZwb3NfdAlfb2Zmc2V0OwkvKiBjdXJyZW50IGxzZWVrIG9mZnNldCAqLworfSBGSUxFOworCitfX0JFR0lOX0RFQ0xTCitleHRlcm4gRklMRSBfX3NGW107CitfX0VORF9ERUNMUworCisjZGVmaW5lCV9fU0xCRgkweDAwMDEJCS8qIGxpbmUgYnVmZmVyZWQgKi8KKyNkZWZpbmUJX19TTkJGCTB4MDAwMgkJLyogdW5idWZmZXJlZCAqLworI2RlZmluZQlfX1NSRAkweDAwMDQJCS8qIE9LIHRvIHJlYWQgKi8KKyNkZWZpbmUJX19TV1IJMHgwMDA4CQkvKiBPSyB0byB3cml0ZSAqLworCS8qIFJEIGFuZCBXUiBhcmUgbmV2ZXIgc2ltdWx0YW5lb3VzbHkgYXNzZXJ0ZWQgKi8KKyNkZWZpbmUJX19TUlcJMHgwMDEwCQkvKiBvcGVuIGZvciByZWFkaW5nICYgd3JpdGluZyAqLworI2RlZmluZQlfX1NFT0YJMHgwMDIwCQkvKiBmb3VuZCBFT0YgKi8KKyNkZWZpbmUJX19TRVJSCTB4MDA0MAkJLyogZm91bmQgZXJyb3IgKi8KKyNkZWZpbmUJX19TTUJGCTB4MDA4MAkJLyogX2J1ZiBpcyBmcm9tIG1hbGxvYyAqLworI2RlZmluZQlfX1NBUFAJMHgwMTAwCQkvKiBmZG9wZW4oKWVkIGluIGFwcGVuZCBtb2RlICovCisjZGVmaW5lCV9fU1NUUgkweDAyMDAJCS8qIHRoaXMgaXMgYW4gc3ByaW50Zi9zbnByaW50ZiBzdHJpbmcgKi8KKyNkZWZpbmUJX19TT1BUCTB4MDQwMAkJLyogZG8gZnNlZWsoKSBvcHRpbWlzYXRpb24gKi8KKyNkZWZpbmUJX19TTlBUCTB4MDgwMAkJLyogZG8gbm90IGRvIGZzZWVrKCkgb3B0aW1pc2F0aW9uICovCisjZGVmaW5lCV9fU09GRgkweDEwMDAJCS8qIHNldCBpZmYgX29mZnNldCBpcyBpbiBmYWN0IGNvcnJlY3QgKi8KKyNkZWZpbmUJX19TTU9ECTB4MjAwMAkJLyogdHJ1ZSA9PiBmZ2V0bG4gbW9kaWZpZWQgX3AgdGV4dCAqLworI2RlZmluZQlfX1NBTEMJMHg0MDAwCQkvKiBhbGxvY2F0ZSBzdHJpbmcgc3BhY2UgZHluYW1pY2FsbHkgKi8KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgdGhyZWUgZGVmaW5pdGlvbnMgYXJlIGZvciBBTlNJIEMsIHdoaWNoIHRvb2sgdGhlbQorICogZnJvbSBTeXN0ZW0gViwgd2hpY2ggYnJpbGxpYW50bHkgdG9vayBpbnRlcm5hbCBpbnRlcmZhY2UgbWFjcm9zIGFuZAorICogbWFkZSB0aGVtIG9mZmljaWFsIGFyZ3VtZW50cyB0byBzZXR2YnVmKCksIHdpdGhvdXQgcmVuYW1pbmcgdGhlbS4KKyAqIEhlbmNlLCB0aGVzZSB1Z2x5IF9JT3h4eCBuYW1lcyBhcmUgKnN1cHBvc2VkKiB0byBhcHBlYXIgaW4gdXNlciBjb2RlLgorICoKKyAqIEFsdGhvdWdoIG51bWJlcmVkIGFzIHRoZWlyIGNvdW50ZXJwYXJ0cyBhYm92ZSwgdGhlIGltcGxlbWVudGF0aW9uCisgKiBkb2VzIG5vdCByZWx5IG9uIHRoaXMuCisgKi8KKyNkZWZpbmUJX0lPRkJGCTAJCS8qIHNldHZidWYgc2hvdWxkIHNldCBmdWxseSBidWZmZXJlZCAqLworI2RlZmluZQlfSU9MQkYJMQkJLyogc2V0dmJ1ZiBzaG91bGQgc2V0IGxpbmUgYnVmZmVyZWQgKi8KKyNkZWZpbmUJX0lPTkJGCTIJCS8qIHNldHZidWYgc2hvdWxkIHNldCB1bmJ1ZmZlcmVkICovCisKKyNkZWZpbmUJQlVGU0laCTEwMjQJCS8qIHNpemUgb2YgYnVmZmVyIHVzZWQgYnkgc2V0YnVmICovCisKKyNkZWZpbmUJRU9GCSgtMSkKKworLyoKKyAqIEZPUEVOX01BWCBpcyBhIG1pbmltdW0gbWF4aW11bSwgYW5kIHNob3VsZCBiZSB0aGUgbnVtYmVyIG9mIGRlc2NyaXB0b3JzCisgKiB0aGF0IHRoZSBrZXJuZWwgY2FuIHByb3ZpZGUgd2l0aG91dCBhbGxvY2F0aW9uIG9mIGEgcmVzb3VyY2UgdGhhdCBjYW4KKyAqIGZhaWwgd2l0aG91dCB0aGUgcHJvY2VzcyBzbGVlcGluZy4gIERvIG5vdCB1c2UgdGhpcyBmb3IgYW55dGhpbmcuCisgKi8KKyNkZWZpbmUJRk9QRU5fTUFYCTIwCS8qIG11c3QgYmUgPD0gT1BFTl9NQVggPHN5cy9zeXNsaW1pdHMuaD4gKi8KKyNkZWZpbmUJRklMRU5BTUVfTUFYCTEwMjQJLyogbXVzdCBiZSA8PSBQQVRIX01BWCA8c3lzL3N5c2xpbWl0cy5oPiAqLworCisvKiBTeXN0ZW0gVi9BTlNJIEM7IHRoaXMgaXMgdGhlIHdyb25nIHdheSB0byBkbyB0aGlzLCBkbyAqbm90KiB1c2UgdGhlc2UuICovCisjaWYgX19CU0RfVklTSUJMRSB8fCBfX1hQR19WSVNJQkxFCisjZGVmaW5lCVBfdG1wZGlyCSIvdG1wLyIKKyNlbmRpZgorI2RlZmluZQlMX3RtcG5hbQkxMDI0CS8qIFhYWCBtdXN0IGJlID09IFBBVEhfTUFYICovCisjZGVmaW5lCVRNUF9NQVgJCTMwODkxNTc3NgorCisjaWZuZGVmIFNFRUtfU0VUCisjZGVmaW5lCVNFRUtfU0VUCTAJLyogc2V0IGZpbGUgb2Zmc2V0IHRvIG9mZnNldCAqLworI2VuZGlmCisjaWZuZGVmIFNFRUtfQ1VSCisjZGVmaW5lCVNFRUtfQ1VSCTEJLyogc2V0IGZpbGUgb2Zmc2V0IHRvIGN1cnJlbnQgcGx1cyBvZmZzZXQgKi8KKyNlbmRpZgorI2lmbmRlZiBTRUVLX0VORAorI2RlZmluZQlTRUVLX0VORAkyCS8qIHNldCBmaWxlIG9mZnNldCB0byBFT0YgcGx1cyBvZmZzZXQgKi8KKyNlbmRpZgorCisjZGVmaW5lCXN0ZGluCSgmX19zRlswXSkKKyNkZWZpbmUJc3Rkb3V0CSgmX19zRlsxXSkKKyNkZWZpbmUJc3RkZXJyCSgmX19zRlsyXSkKKworLyoKKyAqIEZ1bmN0aW9ucyBkZWZpbmVkIGluIEFOU0kgQyBzdGFuZGFyZC4KKyAqLworX19CRUdJTl9ERUNMUwordm9pZAkgY2xlYXJlcnIoRklMRSAqKTsKK2ludAkgZmNsb3NlKEZJTEUgKik7CitpbnQJIGZlb2YoRklMRSAqKTsKK2ludAkgZmVycm9yKEZJTEUgKik7CitpbnQJIGZmbHVzaChGSUxFICopOworaW50CSBmZ2V0YyhGSUxFICopOworaW50CSBmZ2V0cG9zKEZJTEUgKiwgZnBvc190ICopOworY2hhcgkqZmdldHMoY2hhciAqLCBpbnQsIEZJTEUgKik7CitGSUxFCSpmb3Blbihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CitpbnQJIGZwcmludGYoRklMRSAqLCBjb25zdCBjaGFyICosIC4uLik7CitpbnQJIGZwdXRjKGludCwgRklMRSAqKTsKK2ludAkgZnB1dHMoY29uc3QgY2hhciAqLCBGSUxFICopOworc2l6ZV90CSBmcmVhZCh2b2lkICosIHNpemVfdCwgc2l6ZV90LCBGSUxFICopOworRklMRQkqZnJlb3Blbihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgRklMRSAqKTsKK2ludAkgZnNjYW5mKEZJTEUgKiwgY29uc3QgY2hhciAqLCAuLi4pOworaW50CSBmc2VlayhGSUxFICosIGxvbmcsIGludCk7CitpbnQJIGZzZWVrbyhGSUxFICosIG9mZl90LCBpbnQpOworaW50CSBmc2V0cG9zKEZJTEUgKiwgY29uc3QgZnBvc190ICopOworbG9uZwkgZnRlbGwoRklMRSAqKTsKK29mZl90CSBmdGVsbG8oRklMRSAqKTsKK3NpemVfdAkgZndyaXRlKGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsIEZJTEUgKik7CitpbnQJIGdldGMoRklMRSAqKTsKK2ludAkgZ2V0Y2hhcih2b2lkKTsKK2NoYXIJKmdldHMoY2hhciAqKTsKKyNpZiBfX0JTRF9WSVNJQkxFICYmICFkZWZpbmVkKF9fU1lTX0VSUkxJU1QpCisjZGVmaW5lIF9fU1lTX0VSUkxJU1QKKworZXh0ZXJuIGludCBzeXNfbmVycjsJCQkvKiBwZXJyb3IoMykgZXh0ZXJuYWwgdmFyaWFibGVzICovCitleHRlcm4gY2hhciAqc3lzX2Vycmxpc3RbXTsKKyNlbmRpZgordm9pZAkgcGVycm9yKGNvbnN0IGNoYXIgKik7CitpbnQJIHByaW50Zihjb25zdCBjaGFyICosIC4uLik7CitpbnQJIHB1dGMoaW50LCBGSUxFICopOworaW50CSBwdXRjaGFyKGludCk7CitpbnQJIHB1dHMoY29uc3QgY2hhciAqKTsKK2ludAkgcmVtb3ZlKGNvbnN0IGNoYXIgKik7CitpbnQJIHJlbmFtZShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7Cit2b2lkCSByZXdpbmQoRklMRSAqKTsKK2ludAkgc2NhbmYoY29uc3QgY2hhciAqLCAuLi4pOwordm9pZAkgc2V0YnVmKEZJTEUgKiwgY2hhciAqKTsKK2ludAkgc2V0dmJ1ZihGSUxFICosIGNoYXIgKiwgaW50LCBzaXplX3QpOworaW50CSBzcHJpbnRmKGNoYXIgKiwgY29uc3QgY2hhciAqLCAuLi4pOworaW50CSBzc2NhbmYoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIC4uLik7CitGSUxFCSp0bXBmaWxlKHZvaWQpOworY2hhcgkqdG1wbmFtKGNoYXIgKik7CitpbnQJIHVuZ2V0YyhpbnQsIEZJTEUgKik7CitpbnQJIHZmcHJpbnRmKEZJTEUgKiwgY29uc3QgY2hhciAqLCBfX3ZhX2xpc3QpOworaW50CSB2cHJpbnRmKGNvbnN0IGNoYXIgKiwgX192YV9saXN0KTsKK2ludAkgdnNwcmludGYoY2hhciAqLCBjb25zdCBjaGFyICosIF9fdmFfbGlzdCk7CisKKyNpZiBfX0lTT19DX1ZJU0lCTEUgPj0gMTk5OSB8fCBfX0JTRF9WSVNJQkxFCitpbnQJIHNucHJpbnRmKGNoYXIgKiwgc2l6ZV90LCBjb25zdCBjaGFyICosIC4uLikKKwkJX19hdHRyaWJ1dGVfXygoX19mb3JtYXRfXyAocHJpbnRmLCAzLCA0KSkpCisJCV9fYXR0cmlidXRlX18oKF9fbm9ubnVsbF9fICgzKSkpOworaW50CSB2ZnNjYW5mKEZJTEUgKiwgY29uc3QgY2hhciAqLCBfX3ZhX2xpc3QpCisJCV9fYXR0cmlidXRlX18oKF9fZm9ybWF0X18gKHNjYW5mLCAyLCAwKSkpCisJCV9fYXR0cmlidXRlX18oKF9fbm9ubnVsbF9fICgyKSkpOworaW50CSB2c2NhbmYoY29uc3QgY2hhciAqLCBfX3ZhX2xpc3QpCisJCV9fYXR0cmlidXRlX18oKF9fZm9ybWF0X18gKHNjYW5mLCAxLCAwKSkpCisJCV9fYXR0cmlidXRlX18oKF9fbm9ubnVsbF9fICgxKSkpOworaW50CSB2c25wcmludGYoY2hhciAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwgX192YV9saXN0KQorCQlfX2F0dHJpYnV0ZV9fKChfX2Zvcm1hdF9fIChwcmludGYsIDMsIDApKSkKKwkJX19hdHRyaWJ1dGVfXygoX19ub25udWxsX18gKDMpKSk7CitpbnQJIHZzc2NhbmYoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIF9fdmFfbGlzdCkKKwkJX19hdHRyaWJ1dGVfXygoX19mb3JtYXRfXyAoc2NhbmYsIDIsIDApKSkKKwkJX19hdHRyaWJ1dGVfXygoX19ub25udWxsX18gKDIpKSk7CisjZW5kaWYgLyogX19JU09fQ19WSVNJQkxFID49IDE5OTkgfHwgX19CU0RfVklTSUJMRSAqLworCitfX0VORF9ERUNMUworCisKKy8qCisgKiBGdW5jdGlvbnMgZGVmaW5lZCBpbiBQT1NJWCAxMDAzLjEuCisgKi8KKyNpZiBfX0JTRF9WSVNJQkxFIHx8IF9fUE9TSVhfVklTSUJMRSB8fCBfX1hQR19WSVNJQkxFCisjZGVmaW5lCUxfY3Rlcm1pZAkxMDI0CS8qIHNpemUgZm9yIGN0ZXJtaWQoKTsgUEFUSF9NQVggKi8KKyNkZWZpbmUgTF9jdXNlcmlkCTkJLyogc2l6ZSBmb3IgY3VzZXJpZCgpOyBVVF9OQU1FU0laRSArIDEgKi8KKworX19CRUdJTl9ERUNMUworY2hhcgkqY3Rlcm1pZChjaGFyICopOworY2hhcgkqY3VzZXJpZChjaGFyICopOworRklMRQkqZmRvcGVuKGludCwgY29uc3QgY2hhciAqKTsKK2ludAkgZmlsZW5vKEZJTEUgKik7CisKKyNpZiAoX19QT1NJWF9WSVNJQkxFID49IDE5OTIwOSkgfHwgMSAvKiBBTkRST0lEOiBCaW9uaWMgZG9lcyBpbmNsdWRlIHRoaXMgKi8KK2ludAkgcGNsb3NlKEZJTEUgKik7CitGSUxFCSpwb3Blbihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CisjZW5kaWYKKworI2lmIF9fUE9TSVhfVklTSUJMRSA+PSAxOTk1MDYKK3ZvaWQJIGZsb2NrZmlsZShGSUxFICopOworaW50CSBmdHJ5bG9ja2ZpbGUoRklMRSAqKTsKK3ZvaWQJIGZ1bmxvY2tmaWxlKEZJTEUgKik7CisKKy8qCisgKiBUaGVzZSBhcmUgbm9ybWFsbHkgdXNlZCB0aHJvdWdoIG1hY3JvcyBhcyBkZWZpbmVkIGJlbG93LCBidXQgUE9TSVgKKyAqIHJlcXVpcmVzIGZ1bmN0aW9ucyBhcyB3ZWxsLgorICovCitpbnQJIGdldGNfdW5sb2NrZWQoRklMRSAqKTsKK2ludAkgZ2V0Y2hhcl91bmxvY2tlZCh2b2lkKTsKK2ludAkgcHV0Y191bmxvY2tlZChpbnQsIEZJTEUgKik7CitpbnQJIHB1dGNoYXJfdW5sb2NrZWQoaW50KTsKKyNlbmRpZiAvKiBfX1BPU0lYX1ZJU0lCTEUgPj0gMTk5NTA2ICovCisKKyNpZiBfX1hQR19WSVNJQkxFCitjaGFyCSp0ZW1wbmFtKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKKyNlbmRpZgorX19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9fQlNEX1ZJU0lCTEUgfHwgX19QT1NJWF9WSVNJQkxFIHx8IF9fWFBHX1ZJU0lCTEUgKi8KKworLyoKKyAqIFJvdXRpbmVzIHRoYXQgYXJlIHB1cmVseSBsb2NhbC4KKyAqLworI2lmIF9fQlNEX1ZJU0lCTEUKK19fQkVHSU5fREVDTFMKK2ludAkgYXNwcmludGYoY2hhciAqKiwgY29uc3QgY2hhciAqLCAuLi4pCisJCV9fYXR0cmlidXRlX18oKF9fZm9ybWF0X18gKHByaW50ZiwgMiwgMykpKQorCQlfX2F0dHJpYnV0ZV9fKChfX25vbm51bGxfXyAoMikpKTsKK2NoYXIJKmZnZXRsbihGSUxFICosIHNpemVfdCAqKTsKK2ludAkgZnB1cmdlKEZJTEUgKik7CitpbnQJIGdldHcoRklMRSAqKTsKK2ludAkgcHV0dyhpbnQsIEZJTEUgKik7Cit2b2lkCSBzZXRidWZmZXIoRklMRSAqLCBjaGFyICosIGludCk7CitpbnQJIHNldGxpbmVidWYoRklMRSAqKTsKK2ludAkgdmFzcHJpbnRmKGNoYXIgKiosIGNvbnN0IGNoYXIgKiwgX192YV9saXN0KQorCQlfX2F0dHJpYnV0ZV9fKChfX2Zvcm1hdF9fIChwcmludGYsIDIsIDApKSkKKwkJX19hdHRyaWJ1dGVfXygoX19ub25udWxsX18gKDIpKSk7CitfX0VORF9ERUNMUworCisvKgorICogU3RkaW8gZnVuY3Rpb24tYWNjZXNzIGludGVyZmFjZS4KKyAqLworX19CRUdJTl9ERUNMUworRklMRQkqZnVub3Blbihjb25zdCB2b2lkICosCisJCWludCAoKikodm9pZCAqLCBjaGFyICosIGludCksCisJCWludCAoKikodm9pZCAqLCBjb25zdCBjaGFyICosIGludCksCisJCWZwb3NfdCAoKikodm9pZCAqLCBmcG9zX3QsIGludCksCisJCWludCAoKikodm9pZCAqKSk7CitfX0VORF9ERUNMUworI2RlZmluZQlmcm9wZW4oY29va2llLCBmbikgZnVub3Blbihjb29raWUsIGZuLCAwLCAwLCAwKQorI2RlZmluZQlmd29wZW4oY29va2llLCBmbikgZnVub3Blbihjb29raWUsIDAsIGZuLCAwLCAwKQorI2VuZGlmIC8qIF9fQlNEX1ZJU0lCTEUgKi8KKworLyoKKyAqIEZ1bmN0aW9ucyBpbnRlcm5hbCB0byB0aGUgaW1wbGVtZW50YXRpb24uCisgKi8KK19fQkVHSU5fREVDTFMKK2ludAlfX3NyZ2V0KEZJTEUgKik7CitpbnQJX19zd2J1ZihpbnQsIEZJTEUgKik7CitfX0VORF9ERUNMUworCisvKgorICogVGhlIF9fc2ZvbyBtYWNyb3MgYXJlIGhlcmUgc28gdGhhdCB3ZSBjYW4KKyAqIGRlZmluZSBmdW5jdGlvbiB2ZXJzaW9ucyBpbiB0aGUgQyBsaWJyYXJ5LgorICovCisjZGVmaW5lCV9fc2dldGMocCkgKC0tKHApLT5fciA8IDAgPyBfX3NyZ2V0KHApIDogKGludCkoKihwKS0+X3ArKykpCisjaWYgZGVmaW5lZChfX0dOVUNfXykKK3N0YXRpYyBfX2lubGluZSBpbnQgX19zcHV0YyhpbnQgX2MsIEZJTEUgKl9wKSB7CisJaWYgKC0tX3AtPl93ID49IDAgfHwgKF9wLT5fdyA+PSBfcC0+X2xiZnNpemUgJiYgKGNoYXIpX2MgIT0gJ1xuJykpCisJCXJldHVybiAoKl9wLT5fcCsrID0gX2MpOworCWVsc2UKKwkJcmV0dXJuIChfX3N3YnVmKF9jLCBfcCkpOworfQorI2Vsc2UKKy8qCisgKiBUaGlzIGhhcyBiZWVuIHR1bmVkIHRvIGdlbmVyYXRlIHJlYXNvbmFibGUgY29kZSBvbiB0aGUgdmF4IHVzaW5nIHBjYy4KKyAqLworI2RlZmluZQlfX3NwdXRjKGMsIHApIFwKKwkoLS0ocCktPl93IDwgMCA/IFwKKwkJKHApLT5fdyA+PSAocCktPl9sYmZzaXplID8gXAorCQkJKCoocCktPl9wID0gKGMpKSwgKihwKS0+X3AgIT0gJ1xuJyA/IFwKKwkJCQkoaW50KSoocCktPl9wKysgOiBcCisJCQkJX19zd2J1ZignXG4nLCBwKSA6IFwKKwkJCV9fc3didWYoKGludCkoYyksIHApIDogXAorCQkoKihwKS0+X3AgPSAoYyksIChpbnQpKihwKS0+X3ArKykpCisjZW5kaWYKKworI2RlZmluZQlfX3NmZW9mKHApCSgoKHApLT5fZmxhZ3MgJiBfX1NFT0YpICE9IDApCisjZGVmaW5lCV9fc2ZlcnJvcihwKQkoKChwKS0+X2ZsYWdzICYgX19TRVJSKSAhPSAwKQorI2RlZmluZQlfX3NjbGVhcmVycihwKQkoKHZvaWQpKChwKS0+X2ZsYWdzICY9IH4oX19TRVJSfF9fU0VPRikpKQorI2RlZmluZQlfX3NmaWxlbm8ocCkJKChwKS0+X2ZpbGUpCisKKyNkZWZpbmUJZmVvZihwKQkJX19zZmVvZihwKQorI2RlZmluZQlmZXJyb3IocCkJX19zZmVycm9yKHApCisKKyNpZm5kZWYgX1BPU0lYX1RIUkVBRFMKKyNkZWZpbmUJY2xlYXJlcnIocCkJX19zY2xlYXJlcnIocCkKKyNlbmRpZgorCisjaWYgX19QT1NJWF9WSVNJQkxFCisjZGVmaW5lCWZpbGVubyhwKQlfX3NmaWxlbm8ocCkKKyNlbmRpZgorCisjaWZuZGVmIGxpbnQKKyNpZm5kZWYgX1BPU0lYX1RIUkVBRFMKKyNkZWZpbmUJZ2V0YyhmcCkJX19zZ2V0YyhmcCkKKyNlbmRpZiAvKiBfUE9TSVhfVEhSRUFEUyAqLworI2RlZmluZQlnZXRjX3VubG9ja2VkKGZwKQlfX3NnZXRjKGZwKQorLyoKKyAqIFRoZSBtYWNybyBpbXBsZW1lbnRhdGlvbnMgb2YgcHV0YyBhbmQgcHV0Y191bmxvY2tlZCBhcmUgbm90CisgKiBmdWxseSBQT1NJWCBjb21wbGlhbnQ7IHRoZXkgZG8gbm90IHNldCBlcnJubyBvbiBmYWlsdXJlCisgKi8KKyNpZiBfX0JTRF9WSVNJQkxFCisjaWZuZGVmIF9QT1NJWF9USFJFQURTCisjZGVmaW5lIHB1dGMoeCwgZnApCV9fc3B1dGMoeCwgZnApCisjZW5kaWYgLyogX1BPU0lYX1RIUkVBRFMgKi8KKyNkZWZpbmUgcHV0Y191bmxvY2tlZCh4LCBmcCkJX19zcHV0Yyh4LCBmcCkKKyNlbmRpZiAvKiBfX0JTRF9WSVNJQkxFICovCisjZW5kaWYgLyogbGludCAqLworCisjZGVmaW5lCWdldGNoYXIoKQlnZXRjKHN0ZGluKQorI2RlZmluZQlwdXRjaGFyKHgpCXB1dGMoeCwgc3Rkb3V0KQorI2RlZmluZSBnZXRjaGFyX3VubG9ja2VkKCkJZ2V0Y191bmxvY2tlZChzdGRpbikKKyNkZWZpbmUgcHV0Y2hhcl91bmxvY2tlZChjKQlwdXRjX3VubG9ja2VkKGMsIHN0ZG91dCkKKworI2VuZGlmIC8qIF9TVERJT19IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N0ZGxpYi5oIGIvbGliYy9pbmNsdWRlL3N0ZGxpYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjZmU2OTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvc3RkbGliLmgKQEAgLTAsMCArMSwxNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX1NURExJQl9IXworI2RlZmluZSBfU1RETElCX0hfCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKworLyogd2NoYXJfdCBpcyByZXF1aXJlZCBpbiBzdGRsaWIuaCBhY2NvcmRpbmcgdG8gUE9TSVguCisgKiBub3RlIHRoYXQgZGVmaW5pbmcgX19uZWVkX3djaGFyX3QgcHJldmVudHMgc3RkZGVmLmgKKyAqIHRvIGRlZmluZSBhbGwgb3RoZXIgc3ltYm9scyBpdCBkb2VzIG5vcm1hbGx5ICovCisjZGVmaW5lIF9fbmVlZF93Y2hhcl90CisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxhbGxvY2EuaD4KKyNpbmNsdWRlIDxzdHJpbmdzLmg+CisjaW5jbHVkZSA8bWVtb3J5Lmg+CisKK19fQkVHSU5fREVDTFMKKworI2RlZmluZSBFWElUX0ZBSUxVUkUgMQorI2RlZmluZSBFWElUX1NVQ0NFU1MgMAorCitleHRlcm4gX19ub3JldHVybiB2b2lkIGV4aXQoaW50KTsKK2V4dGVybiBfX25vcmV0dXJuIHZvaWQgYWJvcnQodm9pZCk7CitleHRlcm4gaW50IGF0ZXhpdCh2b2lkICgqKSh2b2lkKSk7CitleHRlcm4gaW50IG9uX2V4aXQodm9pZCAoKikoaW50LCB2b2lkICopLCB2b2lkICopOworCitleHRlcm4gY2hhciAqZ2V0ZW52KGNvbnN0IGNoYXIgKik7CitleHRlcm4gaW50IHB1dGVudihjb25zdCBjaGFyICopOworZXh0ZXJuIGludCBzZXRlbnYoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCk7CitleHRlcm4gaW50IHVuc2V0ZW52KGNvbnN0IGNoYXIgKik7CitleHRlcm4gaW50IGNsZWFyZW52KHZvaWQpOworCitleHRlcm4gY2hhciAqbWt0ZW1wIChjaGFyICopOworZXh0ZXJuIGludCBta3N0ZW1wIChjaGFyICopOworCitleHRlcm4gbG9uZyBzdHJ0b2woY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQpOworZXh0ZXJuIGxvbmcgbG9uZyBzdHJ0b2xsKGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgaW50KTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHN0cnRvdWwoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBzdHJ0b3VsbChjb25zdCBjaGFyICosIGNoYXIgKiosIGludCk7CitleHRlcm4gZG91YmxlIHN0cnRvZChjb25zdCBjaGFyICpucHRyLCBjaGFyICoqZW5kcHRyKTsKKworc3RhdGljIF9faW5saW5lX18gZmxvYXQgc3RydG9mKGNvbnN0IGNoYXIgKm5wdHIsIGNoYXIgKiplbmRwdHIpCit7CisgICAgcmV0dXJuIChmbG9hdClzdHJ0b2QobnB0ciwgZW5kcHRyKTsKK30KKworZXh0ZXJuIGludCBhdG9pKGNvbnN0IGNoYXIgKik7CitleHRlcm4gbG9uZyBhdG9sKGNvbnN0IGNoYXIgKik7CitleHRlcm4gbG9uZyBsb25nIGF0b2xsKGNvbnN0IGNoYXIgKik7CisKK3N0YXRpYyBfX2lubGluZV9fIGRvdWJsZSBhdG9mKGNvbnN0IGNoYXIgKm5wdHIpCit7CisgICAgcmV0dXJuIChzdHJ0b2QobnB0ciwgTlVMTCkpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgYWJzKGludCBfX24pIHsKKyAgICByZXR1cm4gKF9fbiA8IDApID8gLV9fbiA6IF9fbjsKK30KKworc3RhdGljIF9faW5saW5lX18gbG9uZyBsYWJzKGxvbmcgX19uKSB7CisgICAgcmV0dXJuIChfX24gPCAwTCkgPyAtX19uIDogX19uOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBsb25nIGxvbmcgbGxhYnMobG9uZyBsb25nIF9fbikgeworICAgIHJldHVybiAoX19uIDwgMExMKSA/IC1fX24gOiBfX247Cit9CisKK2V4dGVybiBjaGFyICogcmVhbHBhdGgoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqcmVzb2x2ZWQpOworZXh0ZXJuIGludCBzeXN0ZW0oY29uc3QgY2hhciAqIHN0cmluZyk7CisKK2V4dGVybiB2b2lkICogYnNlYXJjaChjb25zdCB2b2lkICprZXksIGNvbnN0IHZvaWQgKmJhc2UwLAorCXNpemVfdCBubWVtYiwgc2l6ZV90IHNpemUsCisJaW50ICgqY29tcGFyKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKikpOworCitleHRlcm4gdm9pZCBxc29ydCh2b2lkICosIHNpemVfdCwgc2l6ZV90LCBpbnQgKCopKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSk7CisKK2V4dGVybiBsb25nIGpyYW5kNDgodW5zaWduZWQgc2hvcnQgKik7CitleHRlcm4gbG9uZyBtcmFuZDQ4KHZvaWQpOworZXh0ZXJuIGxvbmcgbnJhbmQ0OCh1bnNpZ25lZCBzaG9ydCAqKTsKK2V4dGVybiBsb25nIGxyYW5kNDgodm9pZCk7CitleHRlcm4gdW5zaWduZWQgc2hvcnQgKnNlZWQ0OCh1bnNpZ25lZCBzaG9ydCopOworZXh0ZXJuIHZvaWQgc3JhbmQ0OChsb25nKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgYXJjNHJhbmRvbSh2b2lkKTsKK2V4dGVybiB2b2lkIGFyYzRyYW5kb21fc3Rpcih2b2lkKTsKK2V4dGVybiB2b2lkIGFyYzRyYW5kb21fYWRkcmFuZG9tKHVuc2lnbmVkIGNoYXIgKiwgaW50KTsKKworI2RlZmluZSBSQU5EX01BWCAweDdmZmZmZmZmCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgcmFuZCh2b2lkKSB7CisgICAgcmV0dXJuIChpbnQpbHJhbmQ0OCgpOworfQorc3RhdGljIF9faW5saW5lX18gdm9pZCBzcmFuZCh1bnNpZ25lZCBpbnQgX19zKSB7CisgICAgc3JhbmQ0OChfX3MpOworfQorc3RhdGljIF9faW5saW5lX18gbG9uZyByYW5kb20odm9pZCkKK3sKKyAgICByZXR1cm4gbHJhbmQ0OCgpOworfQorc3RhdGljIF9faW5saW5lX18gdm9pZCBzcmFuZG9tKHVuc2lnbmVkIGludCBfX3MpCit7CisgICAgc3JhbmQ0OChfX3MpOworfQorCisvKiBCYXNpYyBQVFkgZnVuY3Rpb25zLiAgVGhlc2Ugb25seSB3b3JrIGlmIGRldnB0cyBpcyBtb3VudGVkISAqLworCitleHRlcm4gaW50ICAgIHVubG9ja3B0KGludCk7CitleHRlcm4gY2hhciogIHB0c25hbWUoaW50KTsKK2V4dGVybiBjaGFyKiAgcHRzbmFtZV9yKGludCwgY2hhciosIHNpemVfdCk7CitleHRlcm4gaW50ICAgIGdldHB0KHZvaWQpOworCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgZ3JhbnRwdChpbnQgX19mZCkKK3sKKyAgKHZvaWQpX19mZDsKKyAgcmV0dXJuIDA7ICAgICAvKiBkZXZwdHMgZG9lcyB0aGlzIGFsbCBmb3IgdXMhICovCit9CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBpbnQgIHF1b3Q7CisgICAgaW50ICByZW07Cit9IGRpdl90OworCitleHRlcm4gZGl2X3QgICBkaXYoaW50LCBpbnQpOworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgbG9uZyBpbnQgIHF1b3Q7CisgICAgbG9uZyBpbnQgIHJlbTsKK30gbGRpdl90OworCitleHRlcm4gbGRpdl90ICAgbGRpdihsb25nLCBsb25nKTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGxvbmcgbG9uZyBpbnQgIHF1b3Q7CisgICAgbG9uZyBsb25nIGludCAgcmVtOworfSBsbGRpdl90OworCitleHRlcm4gbGxkaXZfdCAgIGxsZGl2KGxvbmcgbG9uZywgbG9uZyBsb25nKTsKKworLyogbWFrZSBTVExQb3J0IGhhcHB5ICovCitleHRlcm4gaW50ICAgICAgbWJsZW4oY29uc3QgY2hhciAqLCBzaXplX3QpOworZXh0ZXJuIHNpemVfdCAgIG1ic3Rvd2NzKHdjaGFyX3QgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOworZXh0ZXJuIGludCAgICAgIG1idG93Yyh3Y2hhcl90ICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKKworLyogTGlrZXdpc2UsIG1ha2UgbGlic3RkYysrLXYzIGhhcHB5LiAgKi8KK2V4dGVybiBpbnQJd2N0b21iKGNoYXIgKiwgd2NoYXJfdCk7CitleHRlcm4gc2l6ZV90CXdjc3RvbWJzKGNoYXIgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpOworI2RlZmluZSBNQl9DVVJfTUFYIDEKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9TVERMSUJfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zdHJpbmcuaCBiL2xpYmMvaW5jbHVkZS9zdHJpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTNkY2Q3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3N0cmluZy5oCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX1NUUklOR19IXworI2RlZmluZSBfU1RSSU5HX0hfCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxtYWxsb2MuaD4KKworX19CRUdJTl9ERUNMUworCitleHRlcm4gdm9pZCogIG1lbWNjcHkodm9pZCAqLCBjb25zdCB2b2lkICosIGludCwgc2l6ZV90KTsKK2V4dGVybiB2b2lkKiAgbWVtY2hyKGNvbnN0IHZvaWQgKiwgaW50LCBzaXplX3QpOworZXh0ZXJuIHZvaWQqICBtZW1yY2hyKGNvbnN0IHZvaWQgKiwgaW50LCBzaXplX3QpOworZXh0ZXJuIGludCAgICBtZW1jbXAoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCk7CitleHRlcm4gdm9pZCogIG1lbWNweSh2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsKK2V4dGVybiB2b2lkKiAgbWVtbW92ZSh2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsKK2V4dGVybiB2b2lkKiAgbWVtc2V0KHZvaWQgKiwgaW50LCBzaXplX3QpOworZXh0ZXJuIHZvaWQqICBtZW1tZW0oY29uc3Qgdm9pZCAqLCBzaXplX3QsIGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsKK2V4dGVybiB2b2lkICAgbWVtc3dhcCh2b2lkICosIHZvaWQgKiwgc2l6ZV90KTsKKworZXh0ZXJuIGNoYXIqICBpbmRleChjb25zdCBjaGFyICosIGludCk7CitleHRlcm4gY2hhciogIHJpbmRleChjb25zdCBjaGFyICosIGludCk7CitleHRlcm4gY2hhciogIHN0cmNocihjb25zdCBjaGFyICosIGludCk7CitleHRlcm4gY2hhciogIHN0cnJjaHIoY29uc3QgY2hhciAqLCBpbnQpOworCitleHRlcm4gc2l6ZV90IHN0cmxlbihjb25zdCBjaGFyICopOworZXh0ZXJuIGludCAgICBzdHJjbXAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworZXh0ZXJuIGNoYXIqICBzdHJjcHkoY2hhciAqLCBjb25zdCBjaGFyICopOworZXh0ZXJuIGNoYXIqICBzdHJjYXQoY2hhciAqLCBjb25zdCBjaGFyICopOworCitleHRlcm4gaW50ICAgIHN0cmNhc2VjbXAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworZXh0ZXJuIGludCAgICBzdHJuY2FzZWNtcChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKK2V4dGVybiBjaGFyKiAgc3RyZHVwKGNvbnN0IGNoYXIgKik7CisKK2V4dGVybiBjaGFyKiAgc3Ryc3RyKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKK2V4dGVybiBjaGFyKiAgc3RyY2FzZXN0cihjb25zdCBjaGFyICpoYXlzdGFjaywgY29uc3QgY2hhciAqbmVlZGxlKTsKK2V4dGVybiBjaGFyKiAgc3RydG9rKGNoYXIgKiwgY29uc3QgY2hhciAqKTsKK2V4dGVybiBjaGFyKiAgc3RydG9rX3IoY2hhciAqLCBjb25zdCBjaGFyICosIGNoYXIqKik7CisKK2V4dGVybiBjaGFyKiAgc3RyZXJyb3IoaW50KTsKK2V4dGVybiBpbnQgICAgc3RyZXJyb3JfcihpbnQgZXJybnVtLCBjaGFyICpidWYsIHNpemVfdCBuKTsKKworZXh0ZXJuIHNpemVfdCBzdHJubGVuKGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKK2V4dGVybiBjaGFyKiAgc3RybmNhdChjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKK2V4dGVybiBjaGFyKiAgc3RybmR1cChjb25zdCBjaGFyICosIHNpemVfdCk7CitleHRlcm4gaW50ICAgIHN0cm5jbXAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CitleHRlcm4gY2hhciogIHN0cm5jcHkoY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CisKK2V4dGVybiBzaXplX3Qgc3RybGNhdChjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKK2V4dGVybiBzaXplX3Qgc3RybGNweShjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKKworZXh0ZXJuIHNpemVfdCBzdHJjc3BuKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKK2V4dGVybiBjaGFyKiAgc3RycGJyayhjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CitleHRlcm4gY2hhciogIHN0cnNlcChjaGFyICoqLCBjb25zdCBjaGFyICopOworZXh0ZXJuIHNpemVfdCBzdHJzcG4oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworCitleHRlcm4gY2hhciogIHN0cnNpZ25hbChpbnQgIHNpZyk7CisKK2V4dGVybiBpbnQgICAgc3RyY29sbChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CitleHRlcm4gc2l6ZV90IHN0cnhmcm0oY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfU1RSSU5HX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3RyaW5ncy5oIGIvbGliYy9pbmNsdWRlL3N0cmluZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjczZTIxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3N0cmluZ3MuaApAQCAtMCwwICsxLDU1IEBACisvKgkkTmV0QlNEOiBzdHJpbmdzLmgsdiAxLjEwIDIwMDUvMDIvMDMgMDQ6Mzk6MzIgcGVycnkgRXhwICQJKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTggVGhlIE5ldEJTRCBGb3VuZGF0aW9uLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gVGhlIE5ldEJTRCBGb3VuZGF0aW9uCisgKiBieSBLbGF1cyBLbGVpbi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICogICAgICAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE5ldEJTRAorICogICAgICAgIEZvdW5kYXRpb24sIEluYy4gYW5kIGl0cyBjb250cmlidXRvcnMuCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIFRoZSBOZXRCU0QgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgTkVUQlNEIEZPVU5EQVRJT04sIElOQy4gQU5EIENPTlRSSUJVVE9SUworICogYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECisgKiBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfU1RSSU5HU19IXworI2RlZmluZSBfU1RSSU5HU19IXworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisKK19fQkVHSU5fREVDTFMKK2ludAkgYmNtcChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsKK3ZvaWQJIGJjb3B5KGNvbnN0IHZvaWQgKiwgdm9pZCAqLCBzaXplX3QpOwordm9pZAkgYnplcm8odm9pZCAqLCBzaXplX3QpOworaW50CSBmZnMoaW50KTsKK2NoYXIJKmluZGV4KGNvbnN0IGNoYXIgKiwgaW50KTsKK2NoYXIJKnJpbmRleChjb25zdCBjaGFyICosIGludCk7CitpbnQJIHN0cmNhc2VjbXAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworaW50CSBzdHJuY2FzZWNtcChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiAhZGVmaW5lZChfU1RSSU5HU19IXykgKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvX2VycmRlZnMuaCBiL2xpYmMvaW5jbHVkZS9zeXMvX2VycmRlZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjdhYjdhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3N5cy9fZXJyZGVmcy5oCkBAIC0wLDAgKzEsMTcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKy8qIHRoZSBmb2xsb3dpbmcgY29ycmVzcG9uZHMgdG8gdGhlIGVycm9yIGNvZGVzIG9mIHRoZSBMaW51eCBrZXJuZWwgdXNlZCBieSB0aGUgQW5kcm9pZCBwbGF0Zm9ybQorICogdGhlc2UgYXJlIGRpc3RpbmN0IGZyb20gdGhlIE9wZW5CU0Qgb25lcywgd2hpY2ggaXMgd2h5IHdlIG5lZWQgdG8gcmVkZWNsYXJlIHRoZW0gaGVyZQorICoKKyAqIHRoaXMgZmlsZSBtYXkgYmUgaW5jbHVkZWQgc2V2ZXJhbCB0aW1lcyB0byBkZWZpbmUgZWl0aGVyIGVycm9yIGNvbnN0YW50cyBvciB0aGVpcgorICogc3RyaW5nIHJlcHJlc2VudGF0aW9uCisgKi8KKworI2lmbmRlZiBfX0JJT05JQ19FUlJERUYKKyNlcnJvciAiX19CSU9OSUNfRVJSREVGIG11c3QgYmUgZGVmaW5lZCBiZWZvcmUgaW5jbHVkaW5nIHRoaXMgZmlsZSIKKyNlbmRpZgorX19CSU9OSUNfRVJSREVGKCBFUEVSTSAgICAgICAgICAsICAgMSwgIk9wZXJhdGlvbiBub3QgcGVybWl0dGVkIiApCitfX0JJT05JQ19FUlJERUYoIEVOT0VOVCAgICAgICAgICwgICAyLCAiTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSIgKQorX19CSU9OSUNfRVJSREVGKCBFU1JDSCAgICAgICAgICAsICAgMywgIk5vIHN1Y2ggcHJvY2VzcyIgKQorX19CSU9OSUNfRVJSREVGKCBFSU5UUiAgICAgICAgICAsICAgNCwgIkludGVycnVwdGVkIHN5c3RlbSBjYWxsIiApCitfX0JJT05JQ19FUlJERUYoIEVJTyAgICAgICAgICAgICwgICA1LCAiSS9PIGVycm9yIiApCitfX0JJT05JQ19FUlJERUYoIEVOWElPICAgICAgICAgICwgICA2LCAiTm8gc3VjaCBkZXZpY2Ugb3IgYWRkcmVzcyIgKQorX19CSU9OSUNfRVJSREVGKCBFMkJJRyAgICAgICAgICAsICAgNywgIkFyZ3VtZW50IGxpc3QgdG9vIGxvbmciICkKK19fQklPTklDX0VSUkRFRiggRU5PRVhFQyAgICAgICAgLCAgIDgsICJFeGVjIGZvcm1hdCBlcnJvciIgKQorX19CSU9OSUNfRVJSREVGKCBFQkFERiAgICAgICAgICAsICAgOSwgIkJhZCBmaWxlIG51bWJlciIgKQorX19CSU9OSUNfRVJSREVGKCBFQ0hJTEQgICAgICAgICAsICAxMCwgIk5vIGNoaWxkIHByb2Nlc3NlcyIgKQorX19CSU9OSUNfRVJSREVGKCBFQUdBSU4gICAgICAgICAsICAxMSwgIlRyeSBhZ2FpbiIgKQorX19CSU9OSUNfRVJSREVGKCBFTk9NRU0gICAgICAgICAsICAxMiwgIk91dCBvZiBtZW1vcnkiICkKK19fQklPTklDX0VSUkRFRiggRUFDQ0VTICAgICAgICAgLCAgMTMsICJQZXJtaXNzaW9uIGRlbmllZCIgKQorX19CSU9OSUNfRVJSREVGKCBFRkFVTFQgICAgICAgICAsICAxNCwgIkJhZCBhZGRyZXNzIiApCitfX0JJT05JQ19FUlJERUYoIEVOT1RCTEsgICAgICAgICwgIDE1LCAiQmxvY2sgZGV2aWNlIHJlcXVpcmVkIiApCitfX0JJT05JQ19FUlJERUYoIEVCVVNZICAgICAgICAgICwgIDE2LCAiRGV2aWNlIG9yIHJlc291cmNlIGJ1c3kiICkKK19fQklPTklDX0VSUkRFRiggRUVYSVNUICAgICAgICAgLCAgMTcsICJGaWxlIGV4aXN0cyIgKQorX19CSU9OSUNfRVJSREVGKCBFWERFViAgICAgICAgICAsICAxOCwgIkNyb3NzLWRldmljZSBsaW5rIiApCitfX0JJT05JQ19FUlJERUYoIEVOT0RFViAgICAgICAgICwgIDE5LCAiTm8gc3VjaCBkZXZpY2UiICkKK19fQklPTklDX0VSUkRFRiggRU5PVERJUiAgICAgICAgLCAgMjAsICJOb3QgYSBkaXJlY3RvcnkiICkKK19fQklPTklDX0VSUkRFRiggRUlTRElSICAgICAgICAgLCAgMjEsICJJcyBhIGRpcmVjdG9yeSIgKQorX19CSU9OSUNfRVJSREVGKCBFSU5WQUwgICAgICAgICAsICAyMiwgIkludmFsaWQgYXJndW1lbnQiICkKK19fQklPTklDX0VSUkRFRiggRU5GSUxFICAgICAgICAgLCAgMjMsICJGaWxlIHRhYmxlIG92ZXJmbG93IiApCitfX0JJT05JQ19FUlJERUYoIEVNRklMRSAgICAgICAgICwgIDI0LCAiVG9vIG1hbnkgb3BlbiBmaWxlcyIgKQorX19CSU9OSUNfRVJSREVGKCBFTk9UVFkgICAgICAgICAsICAyNSwgIk5vdCBhIHR5cGV3cml0ZXIiICkKK19fQklPTklDX0VSUkRFRiggRVRYVEJTWSAgICAgICAgLCAgMjYsICJUZXh0IGZpbGUgYnVzeSIgKQorX19CSU9OSUNfRVJSREVGKCBFRkJJRyAgICAgICAgICAsICAyNywgIkZpbGUgdG9vIGxhcmdlIiApCitfX0JJT05JQ19FUlJERUYoIEVOT1NQQyAgICAgICAgICwgIDI4LCAiTm8gc3BhY2UgbGVmdCBvbiBkZXZpY2UiICkKK19fQklPTklDX0VSUkRFRiggRVNQSVBFICAgICAgICAgLCAgMjksICJJbGxlZ2FsIHNlZWsiICkKK19fQklPTklDX0VSUkRFRiggRVJPRlMgICAgICAgICAgLCAgMzAsICJSZWFkLW9ubHkgZmlsZSBzeXN0ZW0iICkKK19fQklPTklDX0VSUkRFRiggRU1MSU5LICAgICAgICAgLCAgMzEsICJUb28gbWFueSBsaW5rcyIgKQorX19CSU9OSUNfRVJSREVGKCBFUElQRSAgICAgICAgICAsICAzMiwgIkJyb2tlbiBwaXBlIiApCitfX0JJT05JQ19FUlJERUYoIEVET00gICAgICAgICAgICwgIDMzLCAiTWF0aCBhcmd1bWVudCBvdXQgb2YgZG9tYWluIG9mIGZ1bmMiICkKK19fQklPTklDX0VSUkRFRiggRVJBTkdFICAgICAgICAgLCAgMzQsICJNYXRoIHJlc3VsdCBub3QgcmVwcmVzZW50YWJsZSIgKQorX19CSU9OSUNfRVJSREVGKCBFREVBRExLICAgICAgICAsICAzNSwgIlJlc291cmNlIGRlYWRsb2NrIHdvdWxkIG9jY3VyIiApCitfX0JJT05JQ19FUlJERUYoIEVOQU1FVE9PTE9ORyAgICwgIDM2LCAiRmlsZSBuYW1lIHRvbyBsb25nIiApCitfX0JJT05JQ19FUlJERUYoIEVOT0xDSyAgICAgICAgICwgIDM3LCAiTm8gcmVjb3JkIGxvY2tzIGF2YWlsYWJsZSIgKQorX19CSU9OSUNfRVJSREVGKCBFTk9TWVMgICAgICAgICAsICAzOCwgIkZ1bmN0aW9uIG5vdCBpbXBsZW1lbnRlZCIgKQorX19CSU9OSUNfRVJSREVGKCBFTk9URU1QVFkgICAgICAsICAzOSwgIkRpcmVjdG9yeSBub3QgZW1wdHkiICkKK19fQklPTklDX0VSUkRFRiggRUxPT1AgICAgICAgICAgLCAgNDAsICJUb28gbWFueSBzeW1ib2xpYyBsaW5rcyBlbmNvdW50ZXJlZCIgKQorX19CSU9OSUNfRVJSREVGKCBFTk9NU0cgICAgICAgICAsICA0MiwgIk5vIG1lc3NhZ2Ugb2YgZGVzaXJlZCB0eXBlIiApCitfX0JJT05JQ19FUlJERUYoIEVJRFJNICAgICAgICAgICwgIDQzLCAiSWRlbnRpZmllciByZW1vdmVkIiApCitfX0JJT05JQ19FUlJERUYoIEVDSFJORyAgICAgICAgICwgIDQ0LCAiQ2hhbm5lbCBudW1iZXIgb3V0IG9mIHJhbmdlIiApCitfX0JJT05JQ19FUlJERUYoIEVMMk5TWU5DICAgICAgICwgIDQ1LCAiTGV2ZWwgMiBub3Qgc3luY2hyb25pemVkIiApCitfX0JJT05JQ19FUlJERUYoIEVMM0hMVCAgICAgICAgICwgIDQ2LCAiTGV2ZWwgMyBoYWx0ZWQiICkKK19fQklPTklDX0VSUkRFRiggRUwzUlNUICAgICAgICAgLCAgNDcsICJMZXZlbCAzIHJlc2V0IiApCitfX0JJT05JQ19FUlJERUYoIEVMTlJORyAgICAgICAgICwgIDQ4LCAiTGluayBudW1iZXIgb3V0IG9mIHJhbmdlIiApCitfX0JJT05JQ19FUlJERUYoIEVVTkFUQ0ggICAgICAgICwgIDQ5LCAiUHJvdG9jb2wgZHJpdmVyIG5vdCBhdHRhY2hlZCIgKQorX19CSU9OSUNfRVJSREVGKCBFTk9DU0kgICAgICAgICAsICA1MCwgIk5vIENTSSBzdHJ1Y3R1cmUgYXZhaWxhYmxlIiApCitfX0JJT05JQ19FUlJERUYoIEVMMkhMVCAgICAgICAgICwgIDUxLCAiTGV2ZWwgMiBoYWx0ZWQiICkKK19fQklPTklDX0VSUkRFRiggRUJBREUgICAgICAgICAgLCAgNTIsICJJbnZhbGlkIGV4Y2hhbmdlIiApCitfX0JJT05JQ19FUlJERUYoIEVCQURSICAgICAgICAgICwgIDUzLCAiSW52YWxpZCByZXF1ZXN0IGRlc2NyaXB0b3IiICkKK19fQklPTklDX0VSUkRFRiggRVhGVUxMICAgICAgICAgLCAgNTQsICJFeGNoYW5nZSBmdWxsIiApCitfX0JJT05JQ19FUlJERUYoIEVOT0FOTyAgICAgICAgICwgIDU1LCAiTm8gYW5vZGUiICkKK19fQklPTklDX0VSUkRFRiggRUJBRFJRQyAgICAgICAgLCAgNTYsICJJbnZhbGlkIHJlcXVlc3QgY29kZSIgKQorX19CSU9OSUNfRVJSREVGKCBFQkFEU0xUICAgICAgICAsICA1NywgIkludmFsaWQgc2xvdCIgKQorX19CSU9OSUNfRVJSREVGKCBFQkZPTlQgICAgICAgICAsICA1OSwgIkJhZCBmb250IGZpbGUgZm9ybWF0IiApCitfX0JJT05JQ19FUlJERUYoIEVOT1NUUiAgICAgICAgICwgIDYwLCAiRGV2aWNlIG5vdCBhIHN0cmVhbSIgKQorX19CSU9OSUNfRVJSREVGKCBFTk9EQVRBICAgICAgICAsICA2MSwgIk5vIGRhdGEgYXZhaWxhYmxlIiApCitfX0JJT05JQ19FUlJERUYoIEVUSU1FICAgICAgICAgICwgIDYyLCAiVGltZXIgZXhwaXJlZCIgKQorX19CSU9OSUNfRVJSREVGKCBFTk9TUiAgICAgICAgICAsICA2MywgIk91dCBvZiBzdHJlYW1zIHJlc291cmNlcyIgKQorX19CSU9OSUNfRVJSREVGKCBFTk9ORVQgICAgICAgICAsICA2NCwgIk1hY2hpbmUgaXMgbm90IG9uIHRoZSBuZXR3b3JrIiApCitfX0JJT05JQ19FUlJERUYoIEVOT1BLRyAgICAgICAgICwgIDY1LCAiUGFja2FnZSBub3QgaW5zdGFsbGVkIiApCitfX0JJT05JQ19FUlJERUYoIEVSRU1PVEUgICAgICAgICwgIDY2LCAiT2JqZWN0IGlzIHJlbW90ZSIgKQorX19CSU9OSUNfRVJSREVGKCBFTk9MSU5LICAgICAgICAsICA2NywgIkxpbmsgaGFzIGJlZW4gc2V2ZXJlZCIgKQorX19CSU9OSUNfRVJSREVGKCBFQURWICAgICAgICAgICAsICA2OCwgIkFkdmVydGlzZSBlcnJvciIgKQorX19CSU9OSUNfRVJSREVGKCBFU1JNTlQgICAgICAgICAsICA2OSwgIlNybW91bnQgZXJyb3IiICkKK19fQklPTklDX0VSUkRFRiggRUNPTU0gICAgICAgICAgLCAgNzAsICJDb21tdW5pY2F0aW9uIGVycm9yIG9uIHNlbmQiICkKK19fQklPTklDX0VSUkRFRiggRVBST1RPICAgICAgICAgLCAgNzEsICJQcm90b2NvbCBlcnJvciIgKQorX19CSU9OSUNfRVJSREVGKCBFTVVMVElIT1AgICAgICAsICA3MiwgIk11bHRpaG9wIGF0dGVtcHRlZCIgKQorX19CSU9OSUNfRVJSREVGKCBFRE9URE9UICAgICAgICAsICA3MywgIlJGUyBzcGVjaWZpYyBlcnJvciIgKQorX19CSU9OSUNfRVJSREVGKCBFQkFETVNHICAgICAgICAsICA3NCwgIk5vdCBhIGRhdGEgbWVzc2FnZSIgKQorX19CSU9OSUNfRVJSREVGKCBFT1ZFUkZMT1cgICAgICAsICA3NSwgIlZhbHVlIHRvbyBsYXJnZSBmb3IgZGVmaW5lZCBkYXRhIHR5cGUiICkKK19fQklPTklDX0VSUkRFRiggRU5PVFVOSVEgICAgICAgLCAgNzYsICJOYW1lIG5vdCB1bmlxdWUgb24gbmV0d29yayIgKQorX19CSU9OSUNfRVJSREVGKCBFQkFERkQgICAgICAgICAsICA3NywgIkZpbGUgZGVzY3JpcHRvciBpbiBiYWQgc3RhdGUiICkKK19fQklPTklDX0VSUkRFRiggRVJFTUNIRyAgICAgICAgLCAgNzgsICJSZW1vdGUgYWRkcmVzcyBjaGFuZ2VkIiApCitfX0JJT05JQ19FUlJERUYoIEVMSUJBQ0MgICAgICAgICwgIDc5LCAiQ2FuIG5vdCBhY2Nlc3MgYSBuZWVkZWQgc2hhcmVkIGxpYnJhcnkiICkKK19fQklPTklDX0VSUkRFRiggRUxJQkJBRCAgICAgICAgLCAgODAsICJBY2Nlc3NpbmcgYSBjb3JydXB0ZWQgc2hhcmVkIGxpYnJhcnkiICkKK19fQklPTklDX0VSUkRFRiggRUxJQlNDTiAgICAgICAgLCAgODEsICIubGliIHNlY3Rpb24gaW4gYS5vdXQgY29ycnVwdGVkIiApCitfX0JJT05JQ19FUlJERUYoIEVMSUJNQVggICAgICAgICwgIDgyLCAiQXR0ZW1wdGluZyB0byBsaW5rIGluIHRvbyBtYW55IHNoYXJlZCBsaWJyYXJpZXMiICkKK19fQklPTklDX0VSUkRFRiggRUxJQkVYRUMgICAgICAgLCAgODMsICJDYW5ub3QgZXhlYyBhIHNoYXJlZCBsaWJyYXJ5IGRpcmVjdGx5IiApCitfX0JJT05JQ19FUlJERUYoIEVJTFNFUSAgICAgICAgICwgIDg0LCAiSWxsZWdhbCBieXRlIHNlcXVlbmNlIiApCitfX0JJT05JQ19FUlJERUYoIEVSRVNUQVJUICAgICAgICwgIDg1LCAiSW50ZXJydXB0ZWQgc3lzdGVtIGNhbGwgc2hvdWxkIGJlIHJlc3RhcnRlZCIgKQorX19CSU9OSUNfRVJSREVGKCBFU1RSUElQRSAgICAgICAsICA4NiwgIlN0cmVhbXMgcGlwZSBlcnJvciIgKQorX19CSU9OSUNfRVJSREVGKCBFVVNFUlMgICAgICAgICAsICA4NywgIlRvbyBtYW55IHVzZXJzIiApCitfX0JJT05JQ19FUlJERUYoIEVOT1RTT0NLICAgICAgICwgIDg4LCAiU29ja2V0IG9wZXJhdGlvbiBvbiBub24tc29ja2V0IiApCitfX0JJT05JQ19FUlJERUYoIEVERVNUQUREUlJFUSAgICwgIDg5LCAiRGVzdGluYXRpb24gYWRkcmVzcyByZXF1aXJlZCIgKQorX19CSU9OSUNfRVJSREVGKCBFTVNHU0laRSAgICAgICAsICA5MCwgIk1lc3NhZ2UgdG9vIGxvbmciICkKK19fQklPTklDX0VSUkRFRiggRVBST1RPVFlQRSAgICAgLCAgOTEsICJQcm90b2NvbCB3cm9uZyB0eXBlIGZvciBzb2NrZXQiICkKK19fQklPTklDX0VSUkRFRiggRU5PUFJPVE9PUFQgICAgLCAgOTIsICJQcm90b2NvbCBub3QgYXZhaWxhYmxlIiApCitfX0JJT05JQ19FUlJERUYoIEVQUk9UT05PU1VQUE9SVCwgIDkzLCAiUHJvdG9jb2wgbm90IHN1cHBvcnRlZCIgKQorX19CSU9OSUNfRVJSREVGKCBFU09DS1ROT1NVUFBPUlQsICA5NCwgIlNvY2tldCB0eXBlIG5vdCBzdXBwb3J0ZWQiICkKK19fQklPTklDX0VSUkRFRiggRU9QTk9UU1VQUCAgICAgLCAgOTUsICJPcGVyYXRpb24gbm90IHN1cHBvcnRlZCBvbiB0cmFuc3BvcnQgZW5kcG9pbnQiICkKK19fQklPTklDX0VSUkRFRiggRVBGTk9TVVBQT1JUICAgLCAgOTYsICJQcm90b2NvbCBmYW1pbHkgbm90IHN1cHBvcnRlZCIgKQorX19CSU9OSUNfRVJSREVGKCBFQUZOT1NVUFBPUlQgICAsICA5NywgIkFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wiICkKK19fQklPTklDX0VSUkRFRiggRUFERFJJTlVTRSAgICAgLCAgOTgsICJBZGRyZXNzIGFscmVhZHkgaW4gdXNlIiApCitfX0JJT05JQ19FUlJERUYoIEVBRERSTk9UQVZBSUwgICwgIDk5LCAiQ2Fubm90IGFzc2lnbiByZXF1ZXN0ZWQgYWRkcmVzcyIgKQorX19CSU9OSUNfRVJSREVGKCBFTkVURE9XTiAgICAgICAsIDEwMCwgIk5ldHdvcmsgaXMgZG93biIgKQorX19CSU9OSUNfRVJSREVGKCBFTkVUVU5SRUFDSCAgICAsIDEwMSwgIk5ldHdvcmsgaXMgdW5yZWFjaGFibGUiICkKK19fQklPTklDX0VSUkRFRiggRU5FVFJFU0VUICAgICAgLCAxMDIsICJOZXR3b3JrIGRyb3BwZWQgY29ubmVjdGlvbiBiZWNhdXNlIG9mIHJlc2V0IiApCitfX0JJT05JQ19FUlJERUYoIEVDT05OQUJPUlRFRCAgICwgMTAzLCAiU29mdHdhcmUgY2F1c2VkIGNvbm5lY3Rpb24gYWJvcnQiICkKK19fQklPTklDX0VSUkRFRiggRUNPTk5SRVNFVCAgICAgLCAxMDQsICJDb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXIiICkKK19fQklPTklDX0VSUkRFRiggRU5PQlVGUyAgICAgICAgLCAxMDUsICJObyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlIiApCitfX0JJT05JQ19FUlJERUYoIEVJU0NPTk4gICAgICAgICwgMTA2LCAiVHJhbnNwb3J0IGVuZHBvaW50IGlzIGFscmVhZHkgY29ubmVjdGVkIiApCitfX0JJT05JQ19FUlJERUYoIEVOT1RDT05OICAgICAgICwgMTA3LCAiVHJhbnNwb3J0IGVuZHBvaW50IGlzIG5vdCBjb25uZWN0ZWQiICkKK19fQklPTklDX0VSUkRFRiggRVNIVVRET1dOICAgICAgLCAxMDgsICJDYW5ub3Qgc2VuZCBhZnRlciB0cmFuc3BvcnQgZW5kcG9pbnQgc2h1dGRvd24iICkKK19fQklPTklDX0VSUkRFRiggRVRPT01BTllSRUZTICAgLCAxMDksICJUb28gbWFueSByZWZlcmVuY2VzOiBjYW5ub3Qgc3BsaWNlIiApCitfX0JJT05JQ19FUlJERUYoIEVUSU1FRE9VVCAgICAgICwgMTEwLCAiQ29ubmVjdGlvbiB0aW1lZCBvdXQiICkKK19fQklPTklDX0VSUkRFRiggRUNPTk5SRUZVU0VEICAgLCAxMTEsICJDb25uZWN0aW9uIHJlZnVzZWQiICkKK19fQklPTklDX0VSUkRFRiggRUhPU1RET1dOICAgICAgLCAxMTIsICJIb3N0IGlzIGRvd24iICkKK19fQklPTklDX0VSUkRFRiggRUhPU1RVTlJFQUNIICAgLCAxMTMsICJObyByb3V0ZSB0byBob3N0IiApCitfX0JJT05JQ19FUlJERUYoIEVBTFJFQURZICAgICAgICwgMTE0LCAiT3BlcmF0aW9uIGFscmVhZHkgaW4gcHJvZ3Jlc3MiICkKK19fQklPTklDX0VSUkRFRiggRUlOUFJPR1JFU1MgICAgLCAxMTUsICJPcGVyYXRpb24gbm93IGluIHByb2dyZXNzIiApCitfX0JJT05JQ19FUlJERUYoIEVTVEFMRSAgICAgICAgICwgMTE2LCAiU3RhbGUgTkZTIGZpbGUgaGFuZGxlIiApCitfX0JJT05JQ19FUlJERUYoIEVVQ0xFQU4gICAgICAgICwgMTE3LCAiU3RydWN0dXJlIG5lZWRzIGNsZWFuaW5nIiApCitfX0JJT05JQ19FUlJERUYoIEVOT1ROQU0gICAgICAgICwgMTE4LCAiTm90IGEgWEVOSVggbmFtZWQgdHlwZSBmaWxlIiApCitfX0JJT05JQ19FUlJERUYoIEVOQVZBSUwgICAgICAgICwgMTE5LCAiTm8gWEVOSVggc2VtYXBob3JlcyBhdmFpbGFibGUiICkKK19fQklPTklDX0VSUkRFRiggRUlTTkFNICAgICAgICAgLCAxMjAsICJJcyBhIG5hbWVkIHR5cGUgZmlsZSIgKQorX19CSU9OSUNfRVJSREVGKCBFUkVNT1RFSU8gICAgICAsIDEyMSwgIlJlbW90ZSBJL08gZXJyb3IiICkKK19fQklPTklDX0VSUkRFRiggRURRVU9UICAgICAgICAgLCAxMjIsICJRdW90YSBleGNlZWRlZCIgKQorX19CSU9OSUNfRVJSREVGKCBFTk9NRURJVU0gICAgICAsIDEyMywgIk5vIG1lZGl1bSBmb3VuZCIgKQorX19CSU9OSUNfRVJSREVGKCBFTUVESVVNVFlQRSAgICAsIDEyNCwgIldyb25nIG1lZGl1bSB0eXBlIiApCitfX0JJT05JQ19FUlJERUYoIEVDQU5DRUxFRCAgICAgICwgMTI1LCAiT3BlcmF0aW9uIENhbmNlbGVkIiApCitfX0JJT05JQ19FUlJERUYoIEVOT0tFWSAgICAgICAgICwgMTI2LCAiUmVxdWlyZWQga2V5IG5vdCBhdmFpbGFibGUiICkKK19fQklPTklDX0VSUkRFRiggRUtFWUVYUElSRUQgICAgLCAxMjcsICJLZXkgaGFzIGV4cGlyZWQiICkKK19fQklPTklDX0VSUkRFRiggRUtFWVJFVk9LRUQgICAgLCAxMjgsICJLZXkgaGFzIGJlZW4gcmV2b2tlZCIgKQorX19CSU9OSUNfRVJSREVGKCBFS0VZUkVKRUNURUQgICAsIDEyOSwgIktleSB3YXMgcmVqZWN0ZWQgYnkgc2VydmljZSIgKQorX19CSU9OSUNfRVJSREVGKCBFT1dORVJERUFEICAgICAsIDEzMCwgIk93bmVyIGRpZWQiICkKK19fQklPTklDX0VSUkRFRiggRU5PVFJFQ09WRVJBQkxFLCAxMzEsICJTdGF0ZSBub3QgcmVjb3ZlcmFibGUiICkKKworLyogdGhlIGZvbGxvd2luZyBpcyBub3QgZGVmaW5lZCBieSBMaW51eCBidXQgbmVlZGVkIGZvciB0aGUgQlNEIHBvcnRpb25zIG9mIHRoZSBDIGxpYnJhcnkgKi8KK19fQklPTklDX0VSUkRFRiggRUZUWVBFLCAxMDAwLCAiU3R1cGlkIEMgbGlicmFyeSBoYWNrICEhIiApCisKKyN1bmRlZiBfX0JJT05JQ19FUlJERUYKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvX3NpZ2RlZnMuaCBiL2xpYmMvaW5jbHVkZS9zeXMvX3NpZ2RlZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2NiN2EzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3N5cy9fc2lnZGVmcy5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKy8qIHRoaXMgaGVhZGVyIGlzIHVzZWQgdG8gZGVmaW5lIHNpZ25hbCBjb25zdGFudHMgYW5kIG5hbWVzOyBpdCBtaWdodCBiZSBpbmNsdWRlZCBzZXZlcmFsIHRpbWVzICovCisjaWZuZGVmIF9fQklPTklDX1NJR0RFRgorI2Vycm9yIF9fQklPTklDX1NJR0RFRiBub3QgZGVmaW5lZAorI2VuZGlmCisKK19fQklPTklDX1NJR0RFRihTSUdIVVAsMSwiSGFuZ3VwIikKK19fQklPTklDX1NJR0RFRihTSUdJTlQsMiwiSW50ZXJydXB0IikKK19fQklPTklDX1NJR0RFRihTSUdRVUlULDMsIlF1aXQiKQorX19CSU9OSUNfU0lHREVGKFNJR0lMTCw0LCJJbGxlZ2FsIGluc3RydWN0aW9uIikKK19fQklPTklDX1NJR0RFRihTSUdUUkFQLDUsIlRyYXAiKQorX19CSU9OSUNfU0lHREVGKFNJR0FCUlQsNiwiQWJvcnRlZCIpCitfX0JJT05JQ19TSUdERUYoU0lHQlVTLDcsIkJ1cyBlcnJvciIpCitfX0JJT05JQ19TSUdERUYoU0lHRlBFLDgsIkZsb2F0aW5nIHBvaW50IGV4Y2VwdGlvbiIpCitfX0JJT05JQ19TSUdERUYoU0lHS0lMTCw5LCJLaWxsZWQiKQorX19CSU9OSUNfU0lHREVGKFNJR1VTUjEsMTAsIlVzZXIgc2lnbmFsIDEiKQorX19CSU9OSUNfU0lHREVGKFNJR1NFR1YsMTEsIlNlZ21lbnRhdGlvbiBmYXVsdCIpCitfX0JJT05JQ19TSUdERUYoU0lHVVNSMiwxMiwiVXNlciBzaWduYWwgMiIpCitfX0JJT05JQ19TSUdERUYoU0lHUElQRSwxMywiQnJva2VuIHBpcGUiKQorX19CSU9OSUNfU0lHREVGKFNJR0FMUk0sMTQsIkFsYXJtIGNsb2NrIikKK19fQklPTklDX1NJR0RFRihTSUdURVJNLDE1LCJUZXJtaW5hdGVkIikKK19fQklPTklDX1NJR0RFRihTSUdTVEtGTFQsMTYsIlN0YWNrIGZhdWx0IikKK19fQklPTklDX1NJR0RFRihTSUdDSExELDE3LCJDaGlsZCBleGl0ZWQiKQorX19CSU9OSUNfU0lHREVGKFNJR0NPTlQsMTgsIkNvbnRpbnVlIikKK19fQklPTklDX1NJR0RFRihTSUdTVE9QLDE5LCJTdG9wcGVkIChzaWduYWwpIikKK19fQklPTklDX1NJR0RFRihTSUdUU1RQLDIwLCJTdG9wcGVkIikKK19fQklPTklDX1NJR0RFRihTSUdUVElOLDIxLCJTdG9wcGVkICh0dHkgaW5wdXQpIikKK19fQklPTklDX1NJR0RFRihTSUdUVE9VLDIyLCJTdG9wcGVyICh0dHkgb3V0cHV0KSIpCitfX0JJT05JQ19TSUdERUYoU0lHVVJHLDIzLCJVcmdlbnQgSS9PIGNvbmRpdGlvbiIpCitfX0JJT05JQ19TSUdERUYoU0lHWENQVSwyNCwiQ1BVIHRpbWUgbGltaXQgZXhjZWVkZWQiKQorX19CSU9OSUNfU0lHREVGKFNJR1hGU1osMjUsIkZpbGUgc2l6ZSBsaW1pdCBleGNlZWRlZCIpCitfX0JJT05JQ19TSUdERUYoU0lHVlRBTFJNLDI2LCJWaXJ0dWFsIHRpbWVyIGV4cGlyZWQiKQorX19CSU9OSUNfU0lHREVGKFNJR1BST0YsMjcsIlByb2ZpbGluZyB0aW1lciBleHBpcmVkIikKK19fQklPTklDX1NJR0RFRihTSUdXSU5DSCwyOCwiV2luZG93IHNpemUgY2hhbmdlZCIpCitfX0JJT05JQ19TSUdERUYoU0lHSU8sMjksIkkvTyBwb3NzaWJsZSIpCitfX0JJT05JQ19TSUdERUYoU0lHUFdSLDMwLCJQb3dlciBmYWlsdXJlIikKK19fQklPTklDX1NJR0RFRihTSUdTWVMsMzEsIkJhZCBzeXN0ZW0gY2FsbCIpCisKKyN1bmRlZiBfX0JJT05JQ19TSUdERUYKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvX3N5c3RlbV9wcm9wZXJ0aWVzLmggYi9saWJjL2luY2x1ZGUvc3lzL19zeXN0ZW1fcHJvcGVydGllcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyYTdmNmMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvc3lzL19zeXN0ZW1fcHJvcGVydGllcy5oCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX0lOQ0xVREVfU1lTX19TWVNURU1fUFJPUEVSVElFU19ICisjZGVmaW5lIF9JTkNMVURFX1NZU19fU1lTVEVNX1BST1BFUlRJRVNfSAorCisjaWZuZGVmIF9SRUFMTFlfSU5DTFVERV9TWVNfX1NZU1RFTV9QUk9QRVJUSUVTX0hfCisjZXJyb3IgeW91IHNob3VsZCAjaW5jbHVkZSA8c3lzL3N5c3RlbV9wcm9wZXJ0aWVzLmg+IGluc3RlYWQKKyNlbHNlCisjaW5jbHVkZSA8c3lzL3N5c3RlbV9wcm9wZXJ0aWVzLmg+CisKK3R5cGVkZWYgc3RydWN0IHByb3BfYXJlYSBwcm9wX2FyZWE7Cit0eXBlZGVmIHN0cnVjdCBwcm9wX21zZyBwcm9wX21zZzsKKworI2RlZmluZSBQUk9QX0FSRUFfTUFHSUMgICAweDUwNGY1MjUwCisjZGVmaW5lIFBST1BfQVJFQV9WRVJTSU9OIDB4NDU0MzRmNzYKKworI2RlZmluZSBQUk9QX1NFUlZJQ0VfTkFNRSAicHJvcGVydHlfc2VydmljZSIKKworLyogI2RlZmluZSBQUk9QX01BWF9FTlRSSUVTIDI0NyAqLworLyogMjQ3IC0+IDMyNjIwIGJ5dGVzICg8MzI3NjgpICovCisKKyNkZWZpbmUgVE9DX05BTUVfTEVOKHRvYykgICAgICAgKCh0b2MpID4+IDI0KQorI2RlZmluZSBUT0NfVE9fSU5GTyhhcmVhLCB0b2MpICAoKHByb3BfaW5mbyopICgoKGNoYXIqKSBhcmVhKSArICgodG9jKSAmIDB4RkZGRkZGKSkpCisKK3N0cnVjdCBwcm9wX2FyZWEgeworICAgIHVuc2lnbmVkIHZvbGF0aWxlIGNvdW50OworICAgIHVuc2lnbmVkIHZvbGF0aWxlIHNlcmlhbDsKKyAgICB1bnNpZ25lZCBtYWdpYzsKKyAgICB1bnNpZ25lZCB2ZXJzaW9uOworICAgIHVuc2lnbmVkIHJlc2VydmVkWzRdOworICAgIHVuc2lnbmVkIHRvY1sxXTsKK307CisKKyNkZWZpbmUgU0VSSUFMX1ZBTFVFX0xFTihzZXJpYWwpICgoc2VyaWFsKSA+PiAyNCkKKyNkZWZpbmUgU0VSSUFMX0RJUlRZKHNlcmlhbCkgKChzZXJpYWwpICYgMSkKKworc3RydWN0IHByb3BfaW5mbyB7CisgICAgY2hhciBuYW1lW1BST1BfTkFNRV9NQVhdOworICAgIHVuc2lnbmVkIHZvbGF0aWxlIHNlcmlhbDsKKyAgICBjaGFyIHZhbHVlW1BST1BfVkFMVUVfTUFYXTsKK307CisKK3N0cnVjdCBwcm9wX21zZyAKK3sKKyAgICB1bnNpZ25lZCBjbWQ7CisgICAgY2hhciBuYW1lW1BST1BfTkFNRV9NQVhdOworICAgIGNoYXIgdmFsdWVbUFJPUF9WQUxVRV9NQVhdOworfTsKKworI2RlZmluZSBQUk9QX01TR19TRVRQUk9QIDEKKyAgICAKKy8qCisqKiBSdWxlczoKKyoqCisqKiAtIHRoZXJlIGlzIG9ubHkgb25lIHdyaXRlciwgYnV0IG1hbnkgcmVhZGVycworKiogLSBwcm9wX2FyZWEuY291bnQgd2lsbCBuZXZlciBkZWNyZWFzZSBpbiB2YWx1ZQorKiogLSBvbmNlIGFsbG9jYXRlZCwgYSBwcm9wX2luZm8ncyBuYW1lIHdpbGwgbm90IGNoYW5nZQorKiogLSBvbmNlIGFsbG9jYXRlZCwgYSBwcm9wX2luZm8ncyBvZmZzZXQgd2lsbCBub3QgY2hhbmdlCisqKiAtIHJlYWRpbmcgYSB2YWx1ZSByZXF1aXJlcyB0aGUgZm9sbG93aW5nIHN0ZXBzCisqKiAgIDEuIHNlcmlhbCA9IHBpLT5zZXJpYWwKKyoqICAgMi4gaWYgU0VSSUFMX0RJUlRZKHNlcmlhbCksIHdhaXQqLCB0aGVuIGdvdG8gMQorKiogICAzLiBtZW1jcHkobG9jYWwsIHBpLT52YWx1ZSwgU0VSSUFMX1ZBTFVFX0xFTihzZXJpYWwpICsgMSkKKyoqICAgNC4gaWYgcGktPnNlcmlhbCAhPSBzZXJpYWwsIGdvdG8gMgorKioKKyoqIC0gd3JpdGluZyBhIHZhbHVlIHJlcXVpcmVzIHRoZSBmb2xsb3dpbmcgc3RlcHMKKyoqICAgMS4gcGktPnNlcmlhbCA9IHBpLT5zZXJpYWwgfCAxCisqKiAgIDIuIG1lbWNweShwaS0+dmFsdWUsIGxvY2FsX3ZhbHVlLCB2YWx1ZV9sZW4pCisqKiAgIDMuIHBpLT5zZXJpYWwgPSAodmFsdWVfbGVuIDw8IDI0KSB8ICgocGktPnNlcmlhbCArIDEpICYgMHhmZmZmZmYpCisqKgorKiogSW1wcm92ZW1lbnRzOgorKiogLSBtYWludGFpbiB0aGUgdG9jIHNvcnRlZCBieSBwaS0+bmFtZSB0byBhbGxvdyBsb29rdXAKKyoqICAgYnkgYmluYXJ5IHNlYXJjaAorKioKKyovCisKKyNkZWZpbmUgUFJPUF9QQVRIX1JBTURJU0tfREVGQVVMVCAgIi9kZWZhdWx0LnByb3AiCisjZGVmaW5lIFBST1BfUEFUSF9TWVNURU1fQlVJTEQgICAgICIvc3lzdGVtL2J1aWxkLnByb3AiCisjZGVmaW5lIFBST1BfUEFUSF9TWVNURU1fREVGQVVMVCAgICIvc3lzdGVtL2RlZmF1bHQucHJvcCIKKyNkZWZpbmUgUFJPUF9QQVRIX0xPQ0FMX09WRVJSSURFICAgIi9kYXRhL2xvY2FsLnByb3AiCisKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL190eXBlcy5oIGIvbGliYy9pbmNsdWRlL3N5cy9fdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Yjk5ZTA2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3N5cy9fdHlwZXMuaApAQCAtMCwwICsxLDc3IEBACisvKgkkT3BlbkJTRDogX3R5cGVzLmgsdiAxLjEgMjAwNi8wMS8wNiAxODo1MzowNSBtaWxsZXJ0IEV4cCAkCSovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICoJQCgjKXR5cGVzLmgJOC4zIChCZXJrZWxleSkgMS81Lzk0CisgKi8KKworI2lmbmRlZiBfU1lTX19UWVBFU19IXworI2RlZmluZQlfU1lTX19UWVBFU19IXworCisjdW5kZWYgIF9fS0VSTkVMX1NUUklDVF9OQU1FUworI2RlZmluZSBfX0tFUk5FTF9TVFJJQ1RfTkFNRVMgIDEKKworI2luY2x1ZGUgPG1hY2hpbmUvX3R5cGVzLmg+CisKK3R5cGVkZWYJdW5zaWduZWQgbG9uZwlfX2NwdWlkX3Q7CS8qIENQVSBpZCAqLwordHlwZWRlZglfX2ludDMyX3QJX19kZXZfdDsJLyogZGV2aWNlIG51bWJlciAqLwordHlwZWRlZglfX3VpbnQzMl90CV9fZml4cHRfdDsJLyogZml4ZWQgcG9pbnQgbnVtYmVyICovCit0eXBlZGVmCV9fdWludDMyX3QJX19naWRfdDsJLyogZ3JvdXAgaWQgKi8KK3R5cGVkZWYJX191aW50MzJfdAlfX2lkX3Q7CQkvKiBtYXkgY29udGFpbiBwaWQsIHVpZCBvciBnaWQgKi8KK3R5cGVkZWYgX191aW50MzJfdAlfX2luX2FkZHJfdDsJLyogYmFzZSB0eXBlIGZvciBpbnRlcm5ldCBhZGRyZXNzICovCit0eXBlZGVmIF9fdWludDE2X3QJX19pbl9wb3J0X3Q7CS8qIElQIHBvcnQgdHlwZSAqLwordHlwZWRlZglfX3VpbnQzMl90CV9faW5vX3Q7CS8qIGlub2RlIG51bWJlciAqLwordHlwZWRlZglsb25nCQlfX2tleV90OwkvKiBJUEMga2V5IChmb3IgU3lzIFYgSVBDKSAqLwordHlwZWRlZglfX3VpbnQzMl90CV9fbW9kZV90OwkvKiBwZXJtaXNzaW9ucyAqLwordHlwZWRlZglfX3VpbnQzMl90CV9fbmxpbmtfdDsJLyogbGluayBjb3VudCAqLwordHlwZWRlZglfX2ludDMyX3QJX19waWRfdDsJLyogcHJvY2VzcyBpZCAqLwordHlwZWRlZiBfX3VpbnQ2NF90CV9fcmxpbV90OwkvKiByZXNvdXJjZSBsaW1pdCAqLwordHlwZWRlZiBfX3VpbnQxNl90CV9fc2FfZmFtaWx5X3Q7CS8qIHNvY2thZGRyIGFkZHJlc3MgZmFtaWx5IHR5cGUgKi8KK3R5cGVkZWYJX19pbnQzMl90CV9fc2Vnc3pfdDsJLyogc2VnbWVudCBzaXplICovCit0eXBlZGVmIF9fdWludDMyX3QJX19zb2NrbGVuX3Q7CS8qIGxlbmd0aCB0eXBlIGZvciBuZXR3b3JrIHN5c2NhbGxzICovCit0eXBlZGVmCV9faW50MzJfdAlfX3N3YmxrX3Q7CS8qIHN3YXAgb2Zmc2V0ICovCit0eXBlZGVmCV9fdWludDMyX3QJX191aWRfdDsJLyogdXNlciBpZCAqLwordHlwZWRlZglfX3VpbnQzMl90CV9fdXNlY29uZHNfdDsJLyogbWljcm9zZWNvbmRzICovCit0eXBlZGVmCV9faW50MzJfdAlfX3N1c2Vjb25kc190OwkvKiBtaWNyb3NlY29uZHMgKHNpZ25lZCkgKi8KKworLyoKKyAqIG1ic3RhdGVfdCBpcyBhbiBvcGFxdWUgb2JqZWN0IHRvIGtlZXAgY29udmVyc2lvbiBzdGF0ZSwgZHVyaW5nIG11bHRpYnl0ZQorICogc3RyZWFtIGNvbnZlcnNpb25zLiBUaGUgY29udGVudCBtdXN0IG5vdCBiZSByZWZlcmVuY2VkIGJ5IHVzZXIgcHJvZ3JhbXMuCisgKi8KK3R5cGVkZWYgdW5pb24geworCWNoYXIgX19tYnN0YXRlOFsxMjhdOworCV9faW50NjRfdCBfX21ic3RhdGVMOwkJCS8qIGZvciBhbGlnbm1lbnQgKi8KK30gX19tYnN0YXRlX3Q7CisKKy8qIEJJT05JQzogaWYgd2UncmUgdXNpbmcgbm9uLWNsZWFuZWQgdXAgdXNlci1sZXZlbCBrZXJuZWwgaGVhZGVycywgCisgKiAgICAgICAgIHRoaXMgd2lsbCBwcmV2ZW50IG1hbnkgdHlwZSBkZWNsYXJhdGlvbiBjb25mbGljdHMKKyAqLworI2RlZmluZSAgX19LRVJORUxfU1RSSUNUX05BTUVTICAxCisKKyNlbmRpZiAvKiAhX1NZU19fVFlQRVNfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvYXRvbWljcy5oIGIvbGliYy9pbmNsdWRlL3N5cy9hdG9taWNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNmYTE0NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvYXRvbWljcy5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX1NZU19BVE9NSUNTX0gKKyNkZWZpbmUgX1NZU19BVE9NSUNTX0gKKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisKK19fQkVHSU5fREVDTFMKKworZXh0ZXJuIGludCBfX2F0b21pY19jbXB4Y2hnKGludCBvbGQsIGludCBfbmV3LCB2b2xhdGlsZSBpbnQgKnB0cik7CitleHRlcm4gaW50IF9fYXRvbWljX3N3YXAoaW50IF9uZXcsIHZvbGF0aWxlIGludCAqcHRyKTsKK2V4dGVybiBpbnQgX19hdG9taWNfZGVjKHZvbGF0aWxlIGludCAqcHRyKTsKK2V4dGVybiBpbnQgX19hdG9taWNfaW5jKHZvbGF0aWxlIGludCAqcHRyKTsKKworaW50IF9fZnV0ZXhfd2FpdCh2b2xhdGlsZSB2b2lkICpmdHgsIGludCB2YWwsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqdGltZW91dCk7CitpbnQgX19mdXRleF93YWtlKHZvbGF0aWxlIHZvaWQgKmZ0eCwgaW50IGNvdW50KTsKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9TWVNfQVRPTUlDU19IICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL2NkZWZzLmggYi9saWJjL2luY2x1ZGUvc3lzL2NkZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU3MDMzZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvY2RlZnMuaApAQCAtMCwwICsxLDM3NiBAQAorLyoJJE5ldEJTRDogY2RlZnMuaCx2IDEuNTggMjAwNC8xMi8xMSAwNTo1OTowMCBjaHJpc3RvcyBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTkxLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBCZXJrZWxleSBTb2Z0d2FyZSBEZXNpZ24sIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICoJQCgjKWNkZWZzLmgJOC44IChCZXJrZWxleSkgMS85Lzk1CisgKi8KKworI2lmbmRlZglfU1lTX0NERUZTX0hfCisjZGVmaW5lCV9TWVNfQ0RFRlNfSF8KKworCisvKiBvdXIgaW1wbGVtZW50YXRpb24gb2Ygd2NoYXJfdCBpcyBvbmx5IDgtYml0IC0gZGllIGRpZSBub24tcG9ydGFibGUgY29kZSAqLworI3VuZGVmICBfX1dDSEFSX1RZUEVfXworI2RlZmluZSBfX1dDSEFSX1RZUEVfXyAgdW5zaWduZWQgY2hhcgorCisKKy8qCisgKiBNYWNybyB0byB0ZXN0IGlmIHdlJ3JlIHVzaW5nIGEgR05VIEMgY29tcGlsZXIgb2YgYSBzcGVjaWZpYyB2aW50YWdlCisgKiBvciBsYXRlciwgZm9yIGUuZy4gZmVhdHVyZXMgdGhhdCBhcHBlYXJlZCBpbiBhIHBhcnRpY3VsYXIgdmVyc2lvbgorICogb2YgR05VIEMuICBVc2FnZToKKyAqCisgKgkjaWYgX19HTlVDX1BSRVJFUV9fKG1ham9yLCBtaW5vcikKKyAqCS4uLmNvb2wgZmVhdHVyZS4uLgorICoJI2Vsc2UKKyAqCS4uLmRlbGV0ZSBmZWF0dXJlLi4uCisgKgkjZW5kaWYKKyAqLworI2lmZGVmIF9fR05VQ19fCisjZGVmaW5lCV9fR05VQ19QUkVSRVFfXyh4LCB5KQkJCQkJCVwKKwkoKF9fR05VQ19fID09ICh4KSAmJiBfX0dOVUNfTUlOT1JfXyA+PSAoeSkpIHx8CQkJXAorCSAoX19HTlVDX18gPiAoeCkpKQorI2Vsc2UKKyNkZWZpbmUJX19HTlVDX1BSRVJFUV9fKHgsIHkpCTAKKyNlbmRpZgorCisvL1hYWCAjaW5jbHVkZSA8bWFjaGluZS9jZGVmcy5oPgorCisvKiBCSU9OSUM6IHNpbXBsZXIgZGVmaW5pdGlvbiAqLworI2RlZmluZSBfX0JTRF9WSVNJQkxFICAgMQorCisjaW5jbHVkZSA8c3lzL2NkZWZzX2VsZi5oPgorCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKKyNkZWZpbmUJX19CRUdJTl9ERUNMUwkJZXh0ZXJuICJDIiB7CisjZGVmaW5lCV9fRU5EX0RFQ0xTCQl9CisjZGVmaW5lCV9fc3RhdGljX2Nhc3QoeCx5KQlzdGF0aWNfY2FzdDx4Pih5KQorI2Vsc2UKKyNkZWZpbmUJX19CRUdJTl9ERUNMUworI2RlZmluZQlfX0VORF9ERUNMUworI2RlZmluZQlfX3N0YXRpY19jYXN0KHgseSkJKHgpeQorI2VuZGlmCisKKy8qCisgKiBUaGUgX19DT05DQVQgbWFjcm8gaXMgdXNlZCB0byBjb25jYXRlbmF0ZSBwYXJ0cyBvZiBzeW1ib2wgbmFtZXMsIGUuZy4KKyAqIHdpdGggIiNkZWZpbmUgT0xEKGZvbykgX19DT05DQVQob2xkLGZvbykiLCBPTEQoZm9vKSBwcm9kdWNlcyBvbGRmb28uCisgKiBUaGUgX19DT05DQVQgbWFjcm8gaXMgYSBiaXQgdHJpY2t5IC0tIG1ha2Ugc3VyZSB5b3UgZG9uJ3QgcHV0IHNwYWNlcworICogaW4gYmV0d2VlbiBpdHMgYXJndW1lbnRzLiAgX19DT05DQVQgY2FuIGFsc28gY29uY2F0ZW5hdGUgZG91YmxlLXF1b3RlZAorICogc3RyaW5ncyBwcm9kdWNlZCBieSB0aGUgX19TVFJJTkcgbWFjcm8sIGJ1dCB0aGlzIG9ubHkgd29ya3Mgd2l0aCBBTlNJIEMuCisgKi8KKworI2RlZmluZQlfX19TVFJJTkcoeCkJX19TVFJJTkcoeCkKKyNkZWZpbmUJX19fQ09OQ0FUKHgseSkJX19DT05DQVQoeCx5KQorCisjaWYgX19TVERDX18gfHwgZGVmaW5lZChfX2NwbHVzcGx1cykKKyNkZWZpbmUJX19QKHByb3RvcykJcHJvdG9zCQkvKiBmdWxsLWJsb3duIEFOU0kgQyAqLworI2RlZmluZQlfX0NPTkNBVCh4LHkpCXggIyMgeQorI2RlZmluZQlfX1NUUklORyh4KQkjeAorCisjZGVmaW5lCV9fY29uc3QJCWNvbnN0CQkvKiBkZWZpbmUgcmVzZXJ2ZWQgbmFtZXMgdG8gc3RhbmRhcmQgKi8KKyNkZWZpbmUJX19zaWduZWQJc2lnbmVkCisjZGVmaW5lCV9fdm9sYXRpbGUJdm9sYXRpbGUKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorI2RlZmluZQlfX2lubGluZQlpbmxpbmUJCS8qIGNvbnZlcnQgdG8gQysrIGtleXdvcmQgKi8KKyNlbHNlCisjaWYgIWRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKF9fbGludF9fKQorI2RlZmluZQlfX2lubGluZQkJCS8qIGRlbGV0ZSBHQ0Mga2V5d29yZCAqLworI2VuZGlmIC8qICFfX0dOVUNfXyAgJiYgIV9fbGludF9fICovCisjZW5kaWYgLyogIV9fY3BsdXNwbHVzICovCisKKyNlbHNlCS8qICEoX19TVERDX18gfHwgX19jcGx1c3BsdXMpICovCisjZGVmaW5lCV9fUChwcm90b3MpCSgpCQkvKiB0cmFkaXRpb25hbCBDIHByZXByb2Nlc3NvciAqLworI2RlZmluZQlfX0NPTkNBVCh4LHkpCXgvKioveQorI2RlZmluZQlfX1NUUklORyh4KQkieCIKKworI2lmbmRlZiBfX0dOVUNfXworI2RlZmluZQlfX2NvbnN0CQkJCS8qIGRlbGV0ZSBwc2V1ZG8tQU5TSSBDIGtleXdvcmRzICovCisjZGVmaW5lCV9faW5saW5lCisjZGVmaW5lCV9fc2lnbmVkCisjZGVmaW5lCV9fdm9sYXRpbGUKKyNlbmRpZgkvKiAhX19HTlVDX18gKi8KKworLyoKKyAqIEluIG5vbi1BTlNJIEMgZW52aXJvbm1lbnRzLCBuZXcgcHJvZ3JhbXMgd2lsbCB3YW50IEFOU0ktb25seSBDIGtleXdvcmRzCisgKiBkZWxldGVkIGZyb20gdGhlIHByb2dyYW0gYW5kIG9sZCBwcm9ncmFtcyB3aWxsIHdhbnQgdGhlbSBsZWZ0IGFsb25lLgorICogUHJvZ3JhbXMgdXNpbmcgdGhlIEFOU0kgQyBrZXl3b3JkcyBjb25zdCwgaW5saW5lIGV0Yy4gYXMgbm9ybWFsCisgKiBpZGVudGlmaWVycyBzaG91bGQgZGVmaW5lIC1ETk9fQU5TSV9LRVlXT1JEUy4KKyAqLworI2lmbmRlZglOT19BTlNJX0tFWVdPUkRTCisjZGVmaW5lCWNvbnN0CQlfX2NvbnN0CQkvKiBjb252ZXJ0IEFOU0kgQyBrZXl3b3JkcyAqLworI2RlZmluZQlpbmxpbmUJCV9faW5saW5lCisjZGVmaW5lCXNpZ25lZAkJX19zaWduZWQKKyNkZWZpbmUJdm9sYXRpbGUJX192b2xhdGlsZQorI2VuZGlmIC8qICFOT19BTlNJX0tFWVdPUkRTICovCisjZW5kaWYJLyogIShfX1NURENfXyB8fCBfX2NwbHVzcGx1cykgKi8KKworLyoKKyAqIFVzZWQgZm9yIGludGVybmFsIGF1ZGl0aW5nIG9mIHRoZSBOZXRCU0Qgc291cmNlIHRyZWUuCisgKi8KKyNpZmRlZiBfX0FVRElUX18KKyNkZWZpbmUJX19hY29uc3QJX19jb25zdAorI2Vsc2UKKyNkZWZpbmUJX19hY29uc3QKKyNlbmRpZgorCisvKgorICogVGhlIGZvbGxvd2luZyBtYWNybyBpcyB1c2VkIHRvIHJlbW92ZSBjb25zdCBjYXN0LWF3YXkgd2FybmluZ3MKKyAqIGZyb20gZ2NjIC1XY2FzdC1xdWFsOyBpdCBzaG91bGQgYmUgdXNlZCB3aXRoIGNhdXRpb24gYmVjYXVzZSBpdAorICogY2FuIGhpZGUgdmFsaWQgZXJyb3JzOyBpbiBwYXJ0aWN1bGFyIG1vc3QgdmFsaWQgdXNlcyBhcmUgaW4KKyAqIHNpdHVhdGlvbnMgd2hlcmUgdGhlIEFQSSByZXF1aXJlcyBpdCwgbm90IHRvIGNhc3QgYXdheSBzdHJpbmcKKyAqIGNvbnN0YW50cy4gV2UgZG9uJ3QgdXNlICppbnRwdHJfdCBvbiBwdXJwb3NlIGhlcmUgYW5kIHdlIGFyZQorICogZXhwbGljaXQgYWJvdXQgdW5zaWduZWQgbG9uZyBzbyB0aGF0IHdlIGRvbid0IGhhdmUgYWRkaXRpb25hbAorICogZGVwZW5kZW5jaWVzLgorICovCisjZGVmaW5lIF9fVU5DT05TVChhKQkoKHZvaWQgKikodW5zaWduZWQgbG9uZykoY29uc3Qgdm9pZCAqKShhKSkKKworLyoKKyAqIEdDQzIgcHJvdmlkZXMgX19leHRlbnNpb25fXyB0byBzdXBwcmVzcyB3YXJuaW5ncyBmb3IgdmFyaW91cyBHTlUgQworICogbGFuZ3VhZ2UgZXh0ZW5zaW9ucyB1bmRlciAiLWFuc2kgLXBlZGFudGljIi4KKyAqLworI2lmICFfX0dOVUNfUFJFUkVRX18oMiwgMCkKKyNkZWZpbmUJX19leHRlbnNpb25fXwkJLyogZGVsZXRlIF9fZXh0ZW5zaW9uX18gaWYgbm9uLWdjYyBvciBnY2MxICovCisjZW5kaWYKKworLyoKKyAqIEdDQzEgYW5kIHNvbWUgdmVyc2lvbnMgb2YgR0NDMiBkZWNsYXJlIGRlYWQgKG5vbi1yZXR1cm5pbmcpIGFuZAorICogcHVyZSAobm8gc2lkZSBlZmZlY3RzKSBmdW5jdGlvbnMgdXNpbmcgInZvbGF0aWxlIiBhbmQgImNvbnN0IjsKKyAqIHVuZm9ydHVuYXRlbHksIHRoZXNlIHRoZW4gY2F1c2Ugd2FybmluZ3MgdW5kZXIgIi1hbnNpIC1wZWRhbnRpYyIuCisgKiBHQ0MyIHVzZXMgYSBuZXcsIHBlY3VsaWFyIF9fYXR0cmlidXRlX18oKGF0dHJzKSkgc3R5bGUuICBBbGwgb2YKKyAqIHRoZXNlIHdvcmsgZm9yIEdOVSBDKysgKG1vZHVsbyBhIHNsaWdodCBnbGl0Y2ggaW4gdGhlIEMrKyBncmFtbWFyCisgKiBpbiB0aGUgZGlzdHJpYnV0aW9uIHZlcnNpb24gb2YgMi41LjUpLgorICovCisjaWYgIV9fR05VQ19QUkVSRVFfXygyLCA1KQorI2RlZmluZQlfX2F0dHJpYnV0ZV9fKHgpCS8qIGRlbGV0ZSBfX2F0dHJpYnV0ZV9fIGlmIG5vbi1nY2Mgb3IgZ2NjMSAqLworI2lmIGRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykKKyNkZWZpbmUJX19kZWFkCQlfX3ZvbGF0aWxlCisjZGVmaW5lCV9fcHVyZQkJX19jb25zdAorI2VuZGlmCisjZW5kaWYKKworLyogRGVsZXRlIHBzZXVkby1rZXl3b3JkcyB3aGVyZXZlciB0aGV5IGFyZSBub3QgYXZhaWxhYmxlIG9yIG5lZWRlZC4gKi8KKyNpZm5kZWYgX19kZWFkCisjZGVmaW5lCV9fZGVhZAorI2RlZmluZQlfX3B1cmUKKyNlbmRpZgorCisjaWYgX19HTlVDX1BSRVJFUV9fKDIsIDcpCisjZGVmaW5lCV9fdW51c2VkCV9fYXR0cmlidXRlX18oKF9fdW51c2VkX18pKQorI2Vsc2UKKyNkZWZpbmUJX191bnVzZWQJLyogZGVsZXRlICovCisjZW5kaWYKKworI2lmIF9fR05VQ19QUkVSRVFfXygzLCAxKQorI2RlZmluZQlfX3VzZWQJCV9fYXR0cmlidXRlX18oKF9fdXNlZF9fKSkKKyNlbHNlCisjZGVmaW5lCV9fdXNlZAkJLyogZGVsZXRlICovCisjZW5kaWYKKworI2lmIF9fR05VQ19QUkVSRVFfXygyLCA3KQorI2RlZmluZQlfX3BhY2tlZAlfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSkKKyNkZWZpbmUJX19hbGlnbmVkKHgpCV9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKHgpKSkKKyNkZWZpbmUJX19zZWN0aW9uKHgpCV9fYXR0cmlidXRlX18oKF9fc2VjdGlvbl9fKHgpKSkKKyNlbGlmIGRlZmluZWQoX19saW50X18pCisjZGVmaW5lCV9fcGFja2VkCS8qIGRlbGV0ZSAqLworI2RlZmluZQlfX2FsaWduZWQoeCkJLyogZGVsZXRlICovCisjZGVmaW5lCV9fc2VjdGlvbih4KQkvKiBkZWxldGUgKi8KKyNlbHNlCisjZGVmaW5lCV9fcGFja2VkCWVycm9yOiBubyBfX3BhY2tlZCBmb3IgdGhpcyBjb21waWxlcgorI2RlZmluZQlfX2FsaWduZWQoeCkJZXJyb3I6IG5vIF9fYWxpZ25lZCBmb3IgdGhpcyBjb21waWxlcgorI2RlZmluZQlfX3NlY3Rpb24oeCkJZXJyb3I6IG5vIF9fc2VjdGlvbiBmb3IgdGhpcyBjb21waWxlcgorI2VuZGlmCisKKyNpZiAhX19HTlVDX1BSRVJFUV9fKDIsIDgpCisjZGVmaW5lCV9fZXh0ZW5zaW9uX18KKyNlbmRpZgorCisjaWYgX19HTlVDX1BSRVJFUV9fKDIsIDgpCisjZGVmaW5lIF9fc3RhdGVtZW50KHgpCV9fZXh0ZW5zaW9uX18oeCkKKyNlbGlmIGRlZmluZWQobGludCkKKyNkZWZpbmUgX19zdGF0ZW1lbnQoeCkJKDApCisjZWxzZQorI2RlZmluZSBfX3N0YXRlbWVudCh4KQkoeCkKKyNlbmRpZgorCisvKgorICogQzk5IGRlZmluZXMgdGhlIHJlc3RyaWN0IHR5cGUgcXVhbGlmaWVyIGtleXdvcmQsIHdoaWNoIHdhcyBtYWRlIGF2YWlsYWJsZQorICogaW4gR0NDIDIuOTIuCisgKi8KKyNpZiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwKKyNkZWZpbmUJX19yZXN0cmljdAlyZXN0cmljdAorI2Vsc2UKKyNpZiAhX19HTlVDX1BSRVJFUV9fKDIsIDkyKQorI2RlZmluZQlfX3Jlc3RyaWN0CS8qIGRlbGV0ZSBfX3Jlc3RyaWN0IHdoZW4gbm90IHN1cHBvcnRlZCAqLworI2VuZGlmCisjZW5kaWYKKworLyoKKyAqIEM5OSBkZWZpbmVzIF9fZnVuY19fIHByZWRlZmluZWQgaWRlbnRpZmllciwgd2hpY2ggd2FzIG1hZGUgYXZhaWxhYmxlCisgKiBpbiBHQ0MgMi45NS4KKyAqLworI2lmICEoX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMKQorI2lmIF9fR05VQ19QUkVSRVFfXygyLCA2KQorI2RlZmluZQlfX2Z1bmNfXwlfX1BSRVRUWV9GVU5DVElPTl9fCisjZWxpZiBfX0dOVUNfUFJFUkVRX18oMiwgNCkKKyNkZWZpbmUJX19mdW5jX18JX19GVU5DVElPTl9fCisjZWxzZQorI2RlZmluZQlfX2Z1bmNfXwkiIgorI2VuZGlmCisjZW5kaWYgLyogIShfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwpICovCisKKyNpZiBkZWZpbmVkKF9LRVJORUwpCisjaWYgZGVmaW5lZChOT19LRVJORUxfUkNTSURTKQorI3VuZGVmIF9fS0VSTkVMX1JDU0lECisjZGVmaW5lCV9fS0VSTkVMX1JDU0lEKF9uLCBfcykJCS8qIG5vdGhpbmcgKi8KKyNlbmRpZiAvKiBOT19LRVJORUxfUkNTSURTICovCisjZW5kaWYgLyogX0tFUk5FTCAqLworCisjaWYgIWRlZmluZWQoX1NUQU5EQUxPTkUpICYmICFkZWZpbmVkKF9LRVJORUwpCisjaWZkZWYgX19HTlVDX18KKyNkZWZpbmUJX19SRU5BTUUoeCkJX19fUkVOQU1FKHgpCisjZWxzZQorI2lmZGVmIF9fbGludF9fCisjZGVmaW5lCV9fUkVOQU1FKHgpCV9fc3ltYm9scmVuYW1lKHgpCisjZWxzZQorI2Vycm9yICJObyBmdW5jdGlvbiByZW5hbWluZyBwb3NzaWJsZSIKKyNlbmRpZiAvKiBfX2xpbnRfXyAqLworI2VuZGlmIC8qIF9fR05VQ19fICovCisjZWxzZSAvKiBfU1RBTkRBTE9ORSB8fCBfS0VSTkVMICovCisjZGVmaW5lCV9fUkVOQU1FKHgpCW5vIHJlbmFtaW5nIGluIGtlcm5lbCBvciBzdGFuZGFsb25lIGVudmlyb25tZW50CisjZW5kaWYKKworLyoKKyAqIEEgYmFycmllciB0byBzdG9wIHRoZSBvcHRpbWl6ZXIgZnJvbSBtb3ZpbmcgY29kZSBvciBhc3N1bWUgbGl2ZQorICogcmVnaXN0ZXIgdmFsdWVzLiBUaGlzIGlzIGdjYyBzcGVjaWZpYywgdGhlIHZlcnNpb24gaXMgbW9yZSBvciBsZXNzCisgKiBhcmJpdHJhcnksIG1pZ2h0IHdvcmsgd2l0aCBvbGRlciBjb21waWxlcnMuCisgKi8KKyNpZiBfX0dOVUNfUFJFUkVRX18oMiwgOTUpCisjZGVmaW5lCV9faW5zbl9iYXJyaWVyKCkJX19hc20gX192b2xhdGlsZSgiIjo6OiJtZW1vcnkiKQorI2Vsc2UKKyNkZWZpbmUJX19pbnNuX2JhcnJpZXIoKQkvKiAqLworI2VuZGlmCisKKy8qCisgKiBHTlUgQyB2ZXJzaW9uIDIuOTYgYWRkcyBleHBsaWNpdCBicmFuY2ggcHJlZGljdGlvbiBzbyB0aGF0CisgKiB0aGUgQ1BVIGJhY2stZW5kIGNhbiBoaW50IHRoZSBwcm9jZXNzb3IgYW5kIGFsc28gc28gdGhhdAorICogY29kZSBibG9ja3MgY2FuIGJlIHJlb3JkZXJlZCBzdWNoIHRoYXQgdGhlIHByZWRpY3RlZCBwYXRoCisgKiBzZWVzIGEgbW9yZSBsaW5lYXIgZmxvdywgdGh1cyBpbXByb3ZpbmcgY2FjaGUgYmVoYXZpb3IsIGV0Yy4KKyAqCisgKiBUaGUgZm9sbG93aW5nIHR3byBtYWNyb3MgcHJvdmlkZSB1cyB3aXRoIGEgd2F5IHRvIHVzZSB0aGlzCisgKiBjb21waWxlciBmZWF0dXJlLiAgVXNlIF9fcHJlZGljdF90cnVlKCkgaWYgeW91IGV4cGVjdCB0aGUgZXhwcmVzc2lvbgorICogdG8gZXZhbHVhdGUgdG8gdHJ1ZSwgYW5kIF9fcHJlZGljdF9mYWxzZSgpIGlmIHlvdSBleHBlY3QgdGhlCisgKiBleHByZXNzaW9uIHRvIGV2YWx1YXRlIHRvIGZhbHNlLgorICoKKyAqIEEgZmV3IG5vdGVzIGFib3V0IHVzYWdlOgorICoKKyAqCSogR2VuZXJhbGx5LCBfX3ByZWRpY3RfZmFsc2UoKSBlcnJvciBjb25kaXRpb24gY2hlY2tzICh1bmxlc3MKKyAqCSAgeW91IGhhdmUgc29tZSBfc3Ryb25nXyByZWFzb24gdG8gZG8gb3RoZXJ3aXNlLCBpbiB3aGljaCBjYXNlCisgKgkgIGRvY3VtZW50IGl0KSwgYW5kL29yIF9fcHJlZGljdF90cnVlKCkgYG5vLWVycm9yJyBjb25kaXRpb24KKyAqCSAgY2hlY2tzLCBhc3N1bWluZyB5b3Ugd2FudCB0byBvcHRpbWl6ZSBmb3IgdGhlIG5vLWVycm9yIGNhc2UuCisgKgorICoJKiBPdGhlciB0aGFuIHRoYXQsIGlmIHlvdSBkb24ndCBrbm93IHRoZSBsaWtlbGlob29kIG9mIGEgdGVzdAorICoJICBzdWNjZWVkaW5nIGZyb20gZW1waXJpY2FsIG9yIG90aGVyIGBoYXJkJyBldmlkZW5jZSwgZG9uJ3QKKyAqCSAgbWFrZSBwcmVkaWN0aW9ucy4KKyAqCisgKgkqIFRoZXNlIGFyZSBtZWFudCB0byBiZSB1c2VkIGluIHBsYWNlcyB0aGF0IGFyZSBydW4gYGEgbG90Jy4KKyAqCSAgSXQgaXMgd2FzdGVmdWwgdG8gbWFrZSBwcmVkaWN0aW9ucyBpbiBjb2RlIHRoYXQgaXMgcnVuCisgKgkgIHNlbGRvbWx5IChlLmcuIGF0IHN1YnN5c3RlbSBpbml0aWFsaXphdGlvbiB0aW1lKSBhcyB0aGUKKyAqCSAgYmFzaWMgYmxvY2sgcmVvcmRlcmluZyB0aGF0IHRoaXMgYWZmZWN0cyBjYW4gb2Z0ZW4gZ2VuZXJhdGUKKyAqCSAgbGFyZ2VyIGNvZGUuCisgKi8KKyNpZiBfX0dOVUNfUFJFUkVRX18oMiwgOTYpCisjZGVmaW5lCV9fcHJlZGljdF90cnVlKGV4cCkJX19idWlsdGluX2V4cGVjdCgoZXhwKSAhPSAwLCAxKQorI2RlZmluZQlfX3ByZWRpY3RfZmFsc2UoZXhwKQlfX2J1aWx0aW5fZXhwZWN0KChleHApICE9IDAsIDApCisjZWxzZQorI2RlZmluZQlfX3ByZWRpY3RfdHJ1ZShleHApCShleHApCisjZGVmaW5lCV9fcHJlZGljdF9mYWxzZShleHApCShleHApCisjZW5kaWYKKworI2lmIF9fR05VQ19QUkVSRVFfXygyLCA5NikKKyNkZWZpbmUgX19ub3JldHVybiAgICBfX2F0dHJpYnV0ZV9fKChfX25vcmV0dXJuX18pKQorI2RlZmluZSBfX21hbGxvY2Z1bmMgIF9fYXR0cmlidXRlX18oKG1hbGxvYykpCisjZWxzZQorI2RlZmluZSBfX25vcmV0dXJuCisjZGVmaW5lIF9fbWFsbG9jZnVuYworI2VuZGlmCisKKy8qCisgKiBNYWNyb3MgZm9yIG1hbmlwdWxhdGluZyAibGluayBzZXRzIi4gIExpbmsgc2V0cyBhcmUgYXJyYXlzIG9mIHBvaW50ZXJzCisgKiB0byBvYmplY3RzLCB3aGljaCBhcmUgZ2F0aGVyZWQgdXAgYnkgdGhlIGxpbmtlci4KKyAqCisgKiBPYmplY3QgZm9ybWF0LXNwZWNpZmljIGNvZGUgaGFzIHByb3ZpZGVkIHVzIHdpdGggdGhlIGZvbGxvd2luZyBtYWNyb3M6CisgKgorICoJX19saW5rX3NldF9hZGRfdGV4dChzZXQsIHN5bSkKKyAqCQlBZGQgYSByZWZlcmVuY2UgdG8gdGhlIC50ZXh0IHN5bWJvbCBgc3ltJyB0byBgc2V0Jy4KKyAqCisgKglfX2xpbmtfc2V0X2FkZF9yb2RhdGEoc2V0LCBzeW0pCisgKgkJQWRkIGEgcmVmZXJlbmNlIHRvIHRoZSAucm9kYXRhIHN5bWJvbCBgc3ltJyB0byBgc2V0Jy4KKyAqCisgKglfX2xpbmtfc2V0X2FkZF9kYXRhKHNldCwgc3ltKQorICoJCUFkZCBhIHJlZmVyZW5jZSB0byB0aGUgLmRhdGEgc3ltYm9sIGBzeW0nIHRvIGBzZXQnLgorICoKKyAqCV9fbGlua19zZXRfYWRkX2JzcyhzZXQsIHN5bSkKKyAqCQlBZGQgYSByZWZlcmVuY2UgdG8gdGhlIC5ic3Mgc3ltYm9sIGBzeW0nIHRvIGBzZXQnLgorICoKKyAqCV9fbGlua19zZXRfZGVjbChzZXQsIHB0eXBlKQorICoJCVByb3ZpZGUgYW4gZXh0ZXJuIGRlY2xhcmF0aW9uIG9mIHRoZSBzZXQgYHNldCcsIHdoaWNoCisgKgkJY29udGFpbnMgYW4gYXJyYXkgb2YgdGhlIHBvaW50ZXIgdHlwZSBgcHR5cGUnLiAgVGhpcworICoJCW1hY3JvIG11c3QgYmUgdXNlZCBieSBhbnkgY29kZSB3aGljaCB3aXNoZXMgdG8gcmVmZXJlbmNlCisgKgkJdGhlIGVsZW1lbnRzIG9mIGEgbGluayBzZXQuCisgKgorICoJX19saW5rX3NldF9zdGFydChzZXQpCisgKgkJVGhpcyBwb2ludHMgdG8gdGhlIGZpcnN0IHNsb3QgaW4gdGhlIGxpbmsgc2V0LgorICoKKyAqCV9fbGlua19zZXRfZW5kKHNldCkKKyAqCQlUaGlzIHBvaW50cyB0byB0aGUgKG5vbi1leGlzdGVudCkgc2xvdCBhZnRlciB0aGUgbGFzdAorICoJCWVudHJ5IGluIHRoZSBsaW5rIHNldC4KKyAqCisgKglfX2xpbmtfc2V0X2NvdW50KHNldCkKKyAqCQlDb3VudCB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gbGluayBzZXQgYHNldCcuCisgKgorICogSW4gYWRkaXRpb24sIHdlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBtYWNyb3MgZm9yIGFjY2Vzc2luZyBsaW5rIHNldHM6CisgKgorICoJX19saW5rX3NldF9mb3JlYWNoKHB2YXIsIHNldCkKKyAqCQlJdGVyYXRlIG92ZXIgdGhlIGxpbmsgc2V0IGBzZXQnLiAgQmVjYXVzZSBhIGxpbmsgc2V0IGlzCisgKgkJYW4gYXJyYXkgb2YgcG9pbnRlcnMsIHB2YXIgbXVzdCBiZSBkZWNsYXJlZCBhcyAidHlwZSAqKnB2YXIiLAorICoJCWFuZCB0aGUgYWN0dWFsIGVudHJ5IGFjY2Vzc2VkIGFzICIqcHZhciIuCisgKgorICoJX19saW5rX3NldF9lbnRyeShzZXQsIGlkeCkKKyAqCQlBY2Nlc3MgdGhlIGxpbmsgc2V0IGVudHJ5IGF0IGluZGV4IGBpZHgnIGZyb20gc2V0IGBzZXQnLgorICovCisjZGVmaW5lCV9fbGlua19zZXRfZm9yZWFjaChwdmFyLCBzZXQpCQkJCQlcCisJZm9yIChwdmFyID0gX19saW5rX3NldF9zdGFydChzZXQpOyBwdmFyIDwgX19saW5rX3NldF9lbmQoc2V0KTsgcHZhcisrKQorCisjZGVmaW5lCV9fbGlua19zZXRfZW50cnkoc2V0LCBpZHgpCShfX2xpbmtfc2V0X2JlZ2luKHNldClbaWR4XSkKKworI2RlZmluZSAgX19CSU9OSUNfXyAgIDEKKworI2VuZGlmIC8qICFfU1lTX0NERUZTX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL2NkZWZzX2VsZi5oIGIvbGliYy9pbmNsdWRlL3N5cy9jZGVmc19lbGYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDUxYjFkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3N5cy9jZGVmc19lbGYuaApAQCAtMCwwICsxLDE1MiBAQAorLyoJJE5ldEJTRDogY2RlZnNfZWxmLmgsdiAxLjIyIDIwMDUvMDIvMjYgMjI6MjU6MzQgcGVycnkgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk5NSwgMTk5NiBDYXJuZWdpZS1NZWxsb24gVW5pdmVyc2l0eS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogQXV0aG9yOiBDaHJpcyBHLiBEZW1ldHJpb3UKKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5IGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kCisgKiBpdHMgZG9jdW1lbnRhdGlvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCBib3RoIHRoZSBjb3B5cmlnaHQKKyAqIG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBvZiB0aGUKKyAqIHNvZnR3YXJlLCBkZXJpdmF0aXZlIHdvcmtzIG9yIG1vZGlmaWVkIHZlcnNpb25zLCBhbmQgYW55IHBvcnRpb25zCisgKiB0aGVyZW9mLCBhbmQgdGhhdCBib3RoIG5vdGljZXMgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4KKyAqCisgKiBDQVJORUdJRSBNRUxMT04gQUxMT1dTIEZSRUUgVVNFIE9GIFRISVMgU09GVFdBUkUgSU4gSVRTICJBUyBJUyIKKyAqIENPTkRJVElPTi4gIENBUk5FR0lFIE1FTExPTiBESVNDTEFJTVMgQU5ZIExJQUJJTElUWSBPRiBBTlkgS0lORAorICogRk9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLgorICoKKyAqIENhcm5lZ2llIE1lbGxvbiByZXF1ZXN0cyB1c2VycyBvZiB0aGlzIHNvZnR3YXJlIHRvIHJldHVybiB0bworICoKKyAqICBTb2Z0d2FyZSBEaXN0cmlidXRpb24gQ29vcmRpbmF0b3IgIG9yICBTb2Z0d2FyZS5EaXN0cmlidXRpb25AQ1MuQ01VLkVEVQorICogIFNjaG9vbCBvZiBDb21wdXRlciBTY2llbmNlCisgKiAgQ2FybmVnaWUgTWVsbG9uIFVuaXZlcnNpdHkKKyAqICBQaXR0c2J1cmdoIFBBIDE1MjEzLTM4OTAKKyAqCisgKiBhbnkgaW1wcm92ZW1lbnRzIG9yIGV4dGVuc2lvbnMgdGhhdCB0aGV5IG1ha2UgYW5kIGdyYW50IENhcm5lZ2llIHRoZQorICogcmlnaHRzIHRvIHJlZGlzdHJpYnV0ZSB0aGVzZSBjaGFuZ2VzLgorICovCisKKyNpZm5kZWYgX1NZU19DREVGU19FTEZfSF8KKyNkZWZpbmUJX1NZU19DREVGU19FTEZfSF8KKworI2lmZGVmIF9fTEVBRElOR19VTkRFUlNDT1JFCisjZGVmaW5lCV9DX0xBQkVMKHgpCV9fQ09OQ0FUKF8seCkKKyNkZWZpbmUgX0NfTEFCRUxfU1RSSU5HKHgpCSJfIngKKyNlbHNlCisjZGVmaW5lCV9DX0xBQkVMKHgpCXgKKyNkZWZpbmUgX0NfTEFCRUxfU1RSSU5HKHgpCXgKKyNlbmRpZgorCisjaWYgX19TVERDX18KKyNkZWZpbmUJX19fUkVOQU1FKHgpCV9fYXNtX18oX19fU1RSSU5HKF9DX0xBQkVMKHgpKSkKKyNlbHNlCisjaWZkZWYgX19MRUFESU5HX1VOREVSU0NPUkUKKyNkZWZpbmUJX19fUkVOQU1FKHgpCV9fX19SRU5BTUUoXy8qKi94KQorI2RlZmluZQlfX19fUkVOQU1FKHgpCV9fYXNtX18oX19fU1RSSU5HKHgpKQorI2Vsc2UKKyNkZWZpbmUJX19fUkVOQU1FKHgpCV9fYXNtX18oX19fU1RSSU5HKHgpKQorI2VuZGlmCisjZW5kaWYKKworI2RlZmluZQlfX2luZHJfcmVmZXJlbmNlKHN5bSxhbGlhcykJLyogbmFkYSwgc2luY2Ugd2UgZG8gd2VhayByZWZzICovCisKKyNpZiBfX1NURENfXworI2RlZmluZQlfX3N0cm9uZ19hbGlhcyhhbGlhcyxzeW0pCSAgICAgICAJCQkJXAorICAgIF9fYXNtX18oIi5nbG9iYWwgIiBfQ19MQUJFTF9TVFJJTkcoI2FsaWFzKSAiXG4iCQkJXAorCSAgICBfQ19MQUJFTF9TVFJJTkcoI2FsaWFzKSAiID0gIiBfQ19MQUJFTF9TVFJJTkcoI3N5bSkpOworCisjZGVmaW5lCV9fd2Vha19hbGlhcyhhbGlhcyxzeW0pCQkJCQkJXAorICAgIF9fYXNtX18oIi53ZWFrICIgX0NfTEFCRUxfU1RSSU5HKCNhbGlhcykgIlxuIgkJCVwKKwkgICAgX0NfTEFCRUxfU1RSSU5HKCNhbGlhcykgIiA9ICIgX0NfTEFCRUxfU1RSSU5HKCNzeW0pKTsKKyNkZWZpbmUJX193ZWFrX2V4dGVybihzeW0pCQkJCQkJXAorICAgIF9fYXNtX18oIi53ZWFrICIgX0NfTEFCRUxfU1RSSU5HKCNzeW0pKTsKKyNkZWZpbmUJX193YXJuX3JlZmVyZW5jZXMoc3ltLG1zZykJCQkJCVwKKyAgICBfX2FzbV9fKCIuc2VjdGlvbiAuZ251Lndhcm5pbmcuIiAjc3ltICJcblx0LmFzY2lpIFwiIiBtc2cgIlwiXG5cdC50ZXh0Iik7CisKKyNlbHNlIC8qICFfX1NURENfXyAqLworCisjaWZkZWYgX19MRUFESU5HX1VOREVSU0NPUkUKKyNkZWZpbmUgX193ZWFrX2FsaWFzKGFsaWFzLHN5bSkgX19fd2Vha19hbGlhcyhfLyoqL2FsaWFzLF8vKiovc3ltKQorI2RlZmluZQlfX193ZWFrX2FsaWFzKGFsaWFzLHN5bSkJCQkJCVwKKyAgICBfX2FzbV9fKCIud2VhayBhbGlhc1xuYWxpYXMgPSBzeW0iKTsKKyNlbHNlCisjZGVmaW5lCV9fd2Vha19hbGlhcyhhbGlhcyxzeW0pCQkJCQkJXAorICAgIF9fYXNtX18oIi53ZWFrIGFsaWFzXG5hbGlhcyA9IHN5bSIpOworI2VuZGlmCisjaWZkZWYgX19MRUFESU5HX1VOREVSU0NPUkUKKyNkZWZpbmUgX193ZWFrX2V4dGVybihzeW0pIF9fX3dlYWtfZXh0ZXJuKF8vKiovc3ltKQorI2RlZmluZQlfX193ZWFrX2V4dGVybihzeW0pCQkJCQkJXAorICAgIF9fYXNtX18oIi53ZWFrIHN5bSIpOworI2Vsc2UKKyNkZWZpbmUJX193ZWFrX2V4dGVybihzeW0pCQkJCQkJXAorICAgIF9fYXNtX18oIi53ZWFrIHN5bSIpOworI2VuZGlmCisjZGVmaW5lCV9fd2Fybl9yZWZlcmVuY2VzKHN5bSxtc2cpCQkJCQlcCisgICAgX19hc21fXygiLnNlY3Rpb24gLmdudS53YXJuaW5nLnN5bVxuXHQuYXNjaWkgbXNnIDsgLnRleHQiKTsKKworI2VuZGlmIC8qICFfX1NURENfXyAqLworCisjaWYgX19TVERDX18KKyNkZWZpbmUJX19TRUNUSU9OU1RSSU5HKF9zZWMsIF9zdHIpCQkJCQlcCisJX19hc21fXygiLnNlY3Rpb24gIiAjX3NlYyAiXG5cdC5hc2NpeiBcIiIgX3N0ciAiXCJcblx0LnByZXZpb3VzIikKKyNlbHNlCisjZGVmaW5lCV9fU0VDVElPTlNUUklORyhfc2VjLCBfc3RyKQkJCQkJXAorCV9fYXNtX18oIi5zZWN0aW9uIF9zZWNcblx0LmFzY2l6IF9zdHJcblx0LnByZXZpb3VzIikKKyNlbmRpZgorCisjZGVmaW5lCV9fSURTVFJJTkcoX24sX3MpCQlfX1NFQ1RJT05TVFJJTkcoLmlkZW50LF9zKQorCisjZGVmaW5lCV9fUkNTSUQoX3MpCQkJX19JRFNUUklORyhyY3NpZCxfcykKKyNkZWZpbmUJX19TQ0NTSUQoX3MpCisjZGVmaW5lIF9fU0NDU0lEMihfcykKKyNpZiAwCS8qIFhYWCB1c2VybGFuZCBfX0NPUFlSSUdIVHMgaGF2ZSBcbnMgaW4gdGhlbSAqLworI2RlZmluZQlfX0NPUFlSSUdIVChfcykJCQlfX1NFQ1RJT05TVFJJTkcoLmNvcHlyaWdodCxfcykKKyNlbHNlCisjZGVmaW5lCV9fQ09QWVJJR0hUKF9zKQkJCQkJCQlcCisJc3RhdGljIGNvbnN0IGNoYXIgY29weXJpZ2h0W10JCQkJCVwKKwkgICAgX19hdHRyaWJ1dGVfXygoX191bnVzZWRfXyxfX3NlY3Rpb25fXygiLmNvcHlyaWdodCIpKSkgPSBfcworI2VuZGlmCisKKyNkZWZpbmUJX19LRVJORUxfUkNTSUQoX24sIF9zKQkJX19SQ1NJRChfcykKKyNkZWZpbmUJX19LRVJORUxfU0NDU0lEKF9uLCBfcykKKyNpZiAwCS8qIFhYWCBzZWUgYWJvdmUgKi8KKyNkZWZpbmUJX19LRVJORUxfQ09QWVJJR0hUKF9uLCBfcykJX19DT1BZUklHSFQoX3MpCisjZWxzZQorI2RlZmluZQlfX0tFUk5FTF9DT1BZUklHSFQoX24sIF9zKQlfX1NFQ1RJT05TVFJJTkcoLmNvcHlyaWdodCwgX3MpCisjZW5kaWYKKworI2lmbmRlZiBfX2xpbnRfXworI2RlZmluZQlfX2xpbmtfc2V0X21ha2VfZW50cnkoc2V0LCBzeW0pCQkJCQlcCisJc3RhdGljIHZvaWQgY29uc3QgKiBjb25zdCBfX2xpbmtfc2V0XyMjc2V0IyNfc3ltXyMjc3ltCQlcCisJICAgIF9fc2VjdGlvbigibGlua19zZXRfIiAjc2V0KSBfX3VzZWQgPSAmc3ltCisjZGVmaW5lCV9fbGlua19zZXRfbWFrZV9lbnRyeTIoc2V0LCBzeW0sIG4pCQkJCVwKKwlzdGF0aWMgdm9pZCBjb25zdCAqIGNvbnN0IF9fbGlua19zZXRfIyNzZXQjI19zeW1fIyNzeW0jI18jI24JXAorCSAgICBfX3NlY3Rpb24oImxpbmtfc2V0XyIgI3NldCkgX191c2VkID0gJnN5bVtuXQorI2Vsc2UKKyNkZWZpbmUJX19saW5rX3NldF9tYWtlX2VudHJ5KHNldCwgc3ltKQkJCQkJXAorCWV4dGVybiB2b2lkIGNvbnN0ICogY29uc3QgX19saW5rX3NldF8jI3NldCMjX3N5bV8jI3N5bQorI2RlZmluZQlfX2xpbmtfc2V0X21ha2VfZW50cnkyKHNldCwgc3ltLCBuKQkJCQlcCisJZXh0ZXJuIHZvaWQgY29uc3QgKiBjb25zdCBfX2xpbmtfc2V0XyMjc2V0IyNfc3ltXyMjc3ltIyNfIyNuCisjZW5kaWYgLyogX19saW50X18gKi8KKworI2RlZmluZQlfX2xpbmtfc2V0X2FkZF90ZXh0KHNldCwgc3ltKQlfX2xpbmtfc2V0X21ha2VfZW50cnkoc2V0LCBzeW0pCisjZGVmaW5lCV9fbGlua19zZXRfYWRkX3JvZGF0YShzZXQsIHN5bSkJX19saW5rX3NldF9tYWtlX2VudHJ5KHNldCwgc3ltKQorI2RlZmluZQlfX2xpbmtfc2V0X2FkZF9kYXRhKHNldCwgc3ltKQlfX2xpbmtfc2V0X21ha2VfZW50cnkoc2V0LCBzeW0pCisjZGVmaW5lCV9fbGlua19zZXRfYWRkX2JzcyhzZXQsIHN5bSkJX19saW5rX3NldF9tYWtlX2VudHJ5KHNldCwgc3ltKQorI2RlZmluZQlfX2xpbmtfc2V0X2FkZF90ZXh0MihzZXQsIHN5bSwgbikgICBfX2xpbmtfc2V0X21ha2VfZW50cnkyKHNldCwgc3ltLCBuKQorI2RlZmluZQlfX2xpbmtfc2V0X2FkZF9yb2RhdGEyKHNldCwgc3ltLCBuKSBfX2xpbmtfc2V0X21ha2VfZW50cnkyKHNldCwgc3ltLCBuKQorI2RlZmluZQlfX2xpbmtfc2V0X2FkZF9kYXRhMihzZXQsIHN5bSwgbikgICBfX2xpbmtfc2V0X21ha2VfZW50cnkyKHNldCwgc3ltLCBuKQorI2RlZmluZQlfX2xpbmtfc2V0X2FkZF9ic3MyKHNldCwgc3ltLCBuKSAgICBfX2xpbmtfc2V0X21ha2VfZW50cnkyKHNldCwgc3ltLCBuKQorCisjZGVmaW5lCV9fbGlua19zZXRfZGVjbChzZXQsIHB0eXBlKQkJCQkJXAorCWV4dGVybiBwdHlwZSAqIGNvbnN0IF9fc3RhcnRfbGlua19zZXRfIyNzZXRbXTsJCQlcCisJZXh0ZXJuIHB0eXBlICogY29uc3QgX19zdG9wX2xpbmtfc2V0XyMjc2V0W10JCQlcCisKKyNkZWZpbmUJX19saW5rX3NldF9zdGFydChzZXQpCShfX3N0YXJ0X2xpbmtfc2V0XyMjc2V0KQorI2RlZmluZQlfX2xpbmtfc2V0X2VuZChzZXQpCShfX3N0b3BfbGlua19zZXRfIyNzZXQpCisKKyNkZWZpbmUJX19saW5rX3NldF9jb3VudChzZXQpCQkJCQkJXAorCShfX2xpbmtfc2V0X2VuZChzZXQpIC0gX19saW5rX3NldF9zdGFydChzZXQpKQorCisjZW5kaWYgLyogIV9TWVNfQ0RFRlNfRUxGX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL2RpcmVudC5oIGIvbGliYy9pbmNsdWRlL3N5cy9kaXJlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTk2ZjVlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3N5cy9kaXJlbnQuaApAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9TWVNfRElSRU5UX0hfCisjZGVmaW5lIF9TWVNfRElSRU5UX0hfCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKworX19CRUdJTl9ERUNMUworCisvKiB0aGlzIGNvcnJlc3BvbmRzIHRvIHRoZSBrZXJuZWwgZGlyZW50NjQgKi8KK3N0cnVjdCBkaXJlbnQgeworICB1aW50NjRfdCAgICAgICAgICBkX2lubzsKKyAgaW50NjRfdCAgICAgICAgICAgZF9vZmY7CisgIHVuc2lnbmVkIHNob3J0ICAgIGRfcmVjbGVuOworICB1bnNpZ25lZCBjaGFyICAgICBkX3R5cGU7CisgIGNoYXIgICAgICAgICAgICAgIGRfbmFtZVsyNTZdOworfTsKKworZXh0ZXJuIGludCBnZXRkZW50cyh1bnNpZ25lZCBpbnQsIHN0cnVjdCBkaXJlbnQgKiwgdW5zaWduZWQgaW50KTsKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9TWVNfRElSRU5UX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL2VuZGlhbi5oIGIvbGliYy9pbmNsdWRlL3N5cy9lbmRpYW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGY0ODM5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3N5cy9lbmRpYW4uaApAQCAtMCwwICsxLDI3MyBAQAorLyoJJE9wZW5CU0Q6IGVuZGlhbi5oLHYgMS4xNyAyMDA2LzAxLzA2IDE4OjUzOjA1IG1pbGxlcnQgRXhwICQJKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTcgTmlrbGFzIEhhbGxxdmlzdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgKiBHZW5lcmljIGRlZmluaXRpb25zIGZvciBsaXR0bGUtIGFuZCBiaWctZW5kaWFuIHN5c3RlbXMuICBPdGhlciBlbmRpYW5lc3NlcworICogaGFzIHRvIGJlIGRlYWx0IHdpdGggaW4gdGhlIHNwZWNpZmljIG1hY2hpbmUvZW5kaWFuLmggZmlsZSBmb3IgdGhhdCBwb3J0LgorICoKKyAqIFRoaXMgZmlsZSBpcyBtZWFudCB0byBiZSBpbmNsdWRlZCBmcm9tIGEgbGl0dGxlLSBvciBiaWctZW5kaWFuIHBvcnQncworICogbWFjaGluZS9lbmRpYW4uaCBhZnRlciBzZXR0aW5nIF9CWVRFX09SREVSIHRvIGVpdGhlciAxMjM0IGZvciBsaXR0bGUgZW5kaWFuCisgKiBvciA0MzIxIGZvciBiaWcuLgorICovCisKKyNpZm5kZWYgX1NZU19FTkRJQU5fSF8KKyNkZWZpbmUgX1NZU19FTkRJQU5fSF8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPG1hY2hpbmUvX3R5cGVzLmg+CisKKyNkZWZpbmUgX0xJVFRMRV9FTkRJQU4JMTIzNAorI2RlZmluZSBfQklHX0VORElBTgk0MzIxCisjZGVmaW5lIF9QRFBfRU5ESUFOCTM0MTIKKworI2lmIF9fQlNEX1ZJU0lCTEUKKyNkZWZpbmUgTElUVExFX0VORElBTglfTElUVExFX0VORElBTgorI2RlZmluZSBCSUdfRU5ESUFOCV9CSUdfRU5ESUFOCisjZGVmaW5lIFBEUF9FTkRJQU4JX1BEUF9FTkRJQU4KKyNkZWZpbmUgQllURV9PUkRFUglfQllURV9PUkRFUgorI2VuZGlmCisKKyNpZmRlZiBfX0dOVUNfXworCisjZGVmaW5lIF9fc3dhcDE2Z2VuKHgpIF9fc3RhdGVtZW50KHsJCQkJCVwKKwlfX3VpbnQxNl90IF9fc3dhcDE2Z2VuX3ggPSAoeCk7CQkJCQlcCisJCQkJCQkJCQlcCisJKF9fdWludDE2X3QpKChfX3N3YXAxNmdlbl94ICYgMHhmZikgPDwgOCB8CQkJXAorCSAgICAoX19zd2FwMTZnZW5feCAmIDB4ZmYwMCkgPj4gOCk7CQkJCVwKK30pCisKKyNkZWZpbmUgX19zd2FwMzJnZW4oeCkgX19zdGF0ZW1lbnQoewkJCQkJXAorCV9fdWludDMyX3QgX19zd2FwMzJnZW5feCA9ICh4KTsJCQkJCVwKKwkJCQkJCQkJCVwKKwkoX191aW50MzJfdCkoKF9fc3dhcDMyZ2VuX3ggJiAweGZmKSA8PCAyNCB8CQkJXAorCSAgICAoX19zd2FwMzJnZW5feCAmIDB4ZmYwMCkgPDwgOCB8CQkJCVwKKwkgICAgKF9fc3dhcDMyZ2VuX3ggJiAweGZmMDAwMCkgPj4gOCB8CQkJCVwKKwkgICAgKF9fc3dhcDMyZ2VuX3ggJiAweGZmMDAwMDAwKSA+PiAyNCk7CQkJXAorfSkKKworI2RlZmluZSBfX3N3YXA2NGdlbih4KSBfX3N0YXRlbWVudCh7CQkJCQlcCisJX191aW50NjRfdCBfX3N3YXA2NGdlbl94ID0gKHgpOwkJCQkJXAorCQkJCQkJCQkJXAorCShfX3VpbnQ2NF90KSgoX19zd2FwNjRnZW5feCAmIDB4ZmYpIDw8IDU2IHwJCQlcCisJICAgIChfX3N3YXA2NGdlbl94ICYgMHhmZjAwVUxMKSA8PCA0MCB8CQkJCVwKKwkgICAgKF9fc3dhcDY0Z2VuX3ggJiAweGZmMDAwMFVMTCkgPDwgMjQgfAkJCVwKKwkgICAgKF9fc3dhcDY0Z2VuX3ggJiAweGZmMDAwMDAwVUxMKSA8PCA4IHwJCQlcCisJICAgIChfX3N3YXA2NGdlbl94ICYgMHhmZjAwMDAwMDAwVUxMKSA+PiA4IHwJCQlcCisJICAgIChfX3N3YXA2NGdlbl94ICYgMHhmZjAwMDAwMDAwMDBVTEwpID4+IDI0IHwJCQlcCisJICAgIChfX3N3YXA2NGdlbl94ICYgMHhmZjAwMDAwMDAwMDAwMFVMTCkgPj4gNDAgfAkJXAorCSAgICAoX19zd2FwNjRnZW5feCAmIDB4ZmYwMDAwMDAwMDAwMDAwMFVMTCkgPj4gNTYpOwkJXAorfSkKKworI2Vsc2UgLyogX19HTlVDX18gKi8KKworLyogTm90ZSB0aGF0IHRoZXNlIG1hY3JvcyBldmFsdWF0ZSB0aGVpciBhcmd1bWVudHMgc2V2ZXJhbCB0aW1lcy4gICovCisjZGVmaW5lIF9fc3dhcDE2Z2VuKHgpCQkJCQkJCVwKKyAgICAoX191aW50MTZfdCkoKChfX3VpbnQxNl90KSh4KSAmIDB4ZmYpIDw8IDggfCAoKF9fdWludDE2X3QpKHgpICYgMHhmZjAwKSA+PiA4KQorCisjZGVmaW5lIF9fc3dhcDMyZ2VuKHgpCQkJCQkJCVwKKyAgICAoX191aW50MzJfdCkoKChfX3VpbnQzMl90KSh4KSAmIDB4ZmYpIDw8IDI0IHwJCQlcCisgICAgKChfX3VpbnQzMl90KSh4KSAmIDB4ZmYwMCkgPDwgOCB8ICgoX191aW50MzJfdCkoeCkgJiAweGZmMDAwMCkgPj4gOCB8XAorICAgICgoX191aW50MzJfdCkoeCkgJiAweGZmMDAwMDAwKSA+PiAyNCkKKworI2RlZmluZSBfX3N3YXA2NGdlbih4KQkJCQkJCQlcCisJKF9fdWludDY0X3QpKCgoKF9fdWludDY0X3QpKHgpICYgMHhmZikgPDwgNTYpIHwJCQlcCisJICAgICgoX191aW50NjRfdCkoeCkgJiAweGZmMDBVTEwpIDw8IDQwIHwJCQlcCisJICAgICgoX191aW50NjRfdCkoeCkgJiAweGZmMDAwMFVMTCkgPDwgMjQgfAkJCVwKKwkgICAgKChfX3VpbnQ2NF90KSh4KSAmIDB4ZmYwMDAwMDBVTEwpIDw8IDggfAkJCVwKKwkgICAgKChfX3VpbnQ2NF90KSh4KSAmIDB4ZmYwMDAwMDAwMFVMTCkgPj4gOCB8CQkJXAorCSAgICAoKF9fdWludDY0X3QpKHgpICYgMHhmZjAwMDAwMDAwMDBVTEwpID4+IDI0IHwJCVwKKwkgICAgKChfX3VpbnQ2NF90KSh4KSAmIDB4ZmYwMDAwMDAwMDAwMDBVTEwpID4+IDQwIHwJCVwKKwkgICAgKChfX3VpbnQ2NF90KSh4KSAmIDB4ZmYwMDAwMDAwMDAwMDAwMFVMTCkgPj4gNTYpCisKKyNlbmRpZiAvKiBfX0dOVUNfXyAqLworCisvKgorICogRGVmaW5lIE1EX1NXQVAgaWYgeW91IHByb3ZpZGUgc3dhcHsxNiwzMn1tZCBmdW5jdGlvbnMvbWFjcm9zIHRoYXQgYXJlCisgKiBvcHRpbWl6ZWQgZm9yIHlvdXIgYXJjaGl0ZWN0dXJlLCAgVGhlc2Ugd2lsbCBiZSB1c2VkIGZvciBzd2FwezE2LDMyfQorICogdW5sZXNzIHRoZSBhcmd1bWVudCBpcyBhIGNvbnN0YW50IGFuZCB3ZSBhcmUgdXNpbmcgR0NDLCB3aGVyZSB3ZSBjYW4KKyAqIHRha2UgYWR2YW50YWdlIG9mIHRoZSBDU0UgcGhhc2UgbXVjaCBiZXR0ZXIgYnkgdXNpbmcgdGhlIGdlbmVyaWMgdmVyc2lvbi4KKyAqLworI2lmZGVmIE1EX1NXQVAKKyNpZiBfX0dOVUNfXworCisjZGVmaW5lIF9fc3dhcDE2KHgpIF9fc3RhdGVtZW50KHsJCQkJCVwKKwlfX3VpbnQxNl90IF9fc3dhcDE2X3ggPSAoeCk7CQkJCQlcCisJCQkJCQkJCQlcCisJX19idWlsdGluX2NvbnN0YW50X3AoeCkgPyBfX3N3YXAxNmdlbihfX3N3YXAxNl94KSA6CQlcCisJICAgIF9fc3dhcDE2bWQoX19zd2FwMTZfeCk7CQkJCQlcCit9KQorCisjZGVmaW5lIF9fc3dhcDMyKHgpIF9fc3RhdGVtZW50KHsJCQkJCVwKKwlfX3VpbnQzMl90IF9fc3dhcDMyX3ggPSAoeCk7CQkJCQlcCisJCQkJCQkJCQlcCisJX19idWlsdGluX2NvbnN0YW50X3AoeCkgPyBfX3N3YXAzMmdlbihfX3N3YXAzMl94KSA6CQlcCisJICAgIF9fc3dhcDMybWQoX19zd2FwMzJfeCk7CQkJCQlcCit9KQorCisjZGVmaW5lIF9fc3dhcDY0KHgpIF9fc3RhdGVtZW50KHsJCQkJCVwKKwlfX3VpbnQ2NF90IF9fc3dhcDY0X3ggPSAoeCk7CQkJCQlcCisJCQkJCQkJCQlcCisJX19idWlsdGluX2NvbnN0YW50X3AoeCkgPyBfX3N3YXA2NGdlbihfX3N3YXA2NF94KSA6CQlcCisJICAgIF9fc3dhcDY0bWQoX19zd2FwNjRfeCk7CQkJCQlcCit9KQorCisjZW5kaWYgLyogX19HTlVDX18gICovCisKKyNlbHNlIC8qIE1EX1NXQVAgKi8KKyNkZWZpbmUgX19zd2FwMTYgX19zd2FwMTZnZW4KKyNkZWZpbmUgX19zd2FwMzIgX19zd2FwMzJnZW4KKyNkZWZpbmUgX19zd2FwNjQgX19zd2FwNjRnZW4KKyNlbmRpZiAvKiBNRF9TV0FQICovCisKKyNkZWZpbmUgX19zd2FwMTZfbXVsdGkodiwgbikgZG8gewkJCQkJCVwKKwlfX3NpemVfdCBfX3N3YXAxNl9tdWx0aV9uID0gKG4pOwkJCQlcCisJX191aW50MTZfdCAqX19zd2FwMTZfbXVsdGlfdiA9ICh2KTsJCQkJXAorCQkJCQkJCQkJXAorCXdoaWxlIChfX3N3YXAxNl9tdWx0aV9uKSB7CQkJCQlcCisJCSpfX3N3YXAxNl9tdWx0aV92ID0gc3dhcDE2KCpfX3N3YXAxNl9tdWx0aV92KTsJCVwKKwkJX19zd2FwMTZfbXVsdGlfdisrOwkJCQkJXAorCQlfX3N3YXAxNl9tdWx0aV9uLS07CQkJCQlcCisJfQkJCQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2lmIF9fQlNEX1ZJU0lCTEUKKyNkZWZpbmUgc3dhcDE2IF9fc3dhcDE2CisjZGVmaW5lIHN3YXAzMiBfX3N3YXAzMgorI2RlZmluZSBzd2FwNjQgX19zd2FwNjQKKyNkZWZpbmUgc3dhcDE2X211bHRpIF9fc3dhcDE2X211bHRpCisKK19fQkVHSU5fREVDTFMKK19fdWludDY0X3QJaHRvYmU2NChfX3VpbnQ2NF90KTsKK19fdWludDMyX3QJaHRvYmUzMihfX3VpbnQzMl90KTsKK19fdWludDE2X3QJaHRvYmUxNihfX3VpbnQxNl90KTsKK19fdWludDY0X3QJYmV0b2g2NChfX3VpbnQ2NF90KTsKK19fdWludDMyX3QJYmV0b2gzMihfX3VpbnQzMl90KTsKK19fdWludDE2X3QJYmV0b2gxNihfX3VpbnQxNl90KTsKKworX191aW50NjRfdAlodG9sZTY0KF9fdWludDY0X3QpOworX191aW50MzJfdAlodG9sZTMyKF9fdWludDMyX3QpOworX191aW50MTZfdAlodG9sZTE2KF9fdWludDE2X3QpOworX191aW50NjRfdAlsZXRvaDY0KF9fdWludDY0X3QpOworX191aW50MzJfdAlsZXRvaDMyKF9fdWludDMyX3QpOworX191aW50MTZfdAlsZXRvaDE2KF9fdWludDE2X3QpOworX19FTkRfREVDTFMKKyNlbmRpZiAvKiBfX0JTRF9WSVNJQkxFICovCisKKyNpZiBfQllURV9PUkRFUiA9PSBfTElUVExFX0VORElBTgorCisvKiBDYW4gYmUgb3ZlcnJpZGRlbiBieSBtYWNoaW5lL2VuZGlhbi5oIGJlZm9yZSBpbmNsdXNpb24gb2YgdGhpcyBmaWxlLiAgKi8KKyNpZm5kZWYgX1FVQURfSElHSFdPUkQKKyNkZWZpbmUgX1FVQURfSElHSFdPUkQgMQorI2VuZGlmCisjaWZuZGVmIF9RVUFEX0xPV1dPUkQKKyNkZWZpbmUgX1FVQURfTE9XV09SRCAwCisjZW5kaWYKKworI2lmIF9fQlNEX1ZJU0lCTEUKKyNkZWZpbmUgaHRvYmUxNiBfX3N3YXAxNgorI2RlZmluZSBodG9iZTMyIF9fc3dhcDMyCisjZGVmaW5lIGh0b2JlNjQgX19zd2FwNjQKKyNkZWZpbmUgYmV0b2gxNiBfX3N3YXAxNgorI2RlZmluZSBiZXRvaDMyIF9fc3dhcDMyCisjZGVmaW5lIGJldG9oNjQgX19zd2FwNjQKKworI2RlZmluZSBodG9sZTE2KHgpICh4KQorI2RlZmluZSBodG9sZTMyKHgpICh4KQorI2RlZmluZSBodG9sZTY0KHgpICh4KQorI2RlZmluZSBsZXRvaDE2KHgpICh4KQorI2RlZmluZSBsZXRvaDMyKHgpICh4KQorI2RlZmluZSBsZXRvaDY0KHgpICh4KQorI2VuZGlmIC8qIF9fQlNEX1ZJU0lCTEUgKi8KKworI2RlZmluZSBodG9ucyh4KSBfX3N3YXAxNih4KQorI2RlZmluZSBodG9ubCh4KSBfX3N3YXAzMih4KQorI2RlZmluZSBudG9ocyh4KSBfX3N3YXAxNih4KQorI2RlZmluZSBudG9obCh4KSBfX3N3YXAzMih4KQorCisvKiBCaW9uaWMgYWRkaXRpb25zICovCisjZGVmaW5lIG50b2hxKHgpIF9fc3dhcDY0KHgpCisjZGVmaW5lIGh0b25xKHgpIF9fc3dhcDY0KHgpCisKKyNkZWZpbmUgX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxECisKKyNlbmRpZiAvKiBfQllURV9PUkRFUiAqLworCisjaWYgX0JZVEVfT1JERVIgPT0gX0JJR19FTkRJQU4KKworLyogQ2FuIGJlIG92ZXJyaWRkZW4gYnkgbWFjaGluZS9lbmRpYW4uaCBiZWZvcmUgaW5jbHVzaW9uIG9mIHRoaXMgZmlsZS4gICovCisjaWZuZGVmIF9RVUFEX0hJR0hXT1JECisjZGVmaW5lIF9RVUFEX0hJR0hXT1JEIDAKKyNlbmRpZgorI2lmbmRlZiBfUVVBRF9MT1dXT1JECisjZGVmaW5lIF9RVUFEX0xPV1dPUkQgMQorI2VuZGlmCisKKyNpZiBfX0JTRF9WSVNJQkxFCisjZGVmaW5lIGh0b2xlMTYgX19zd2FwMTYKKyNkZWZpbmUgaHRvbGUzMiBfX3N3YXAzMgorI2RlZmluZSBodG9sZTY0IF9fc3dhcDY0CisjZGVmaW5lIGxldG9oMTYgX19zd2FwMTYKKyNkZWZpbmUgbGV0b2gzMiBfX3N3YXAzMgorI2RlZmluZSBsZXRvaDY0IF9fc3dhcDY0CisKKyNkZWZpbmUgaHRvYmUxNih4KSAoeCkKKyNkZWZpbmUgaHRvYmUzMih4KSAoeCkKKyNkZWZpbmUgaHRvYmU2NCh4KSAoeCkKKyNkZWZpbmUgYmV0b2gxNih4KSAoeCkKKyNkZWZpbmUgYmV0b2gzMih4KSAoeCkKKyNkZWZpbmUgYmV0b2g2NCh4KSAoeCkKKyNlbmRpZiAvKiBfX0JTRF9WSVNJQkxFICovCisKKyNkZWZpbmUgaHRvbnMoeCkgKHgpCisjZGVmaW5lIGh0b25sKHgpICh4KQorI2RlZmluZSBudG9ocyh4KSAoeCkKKyNkZWZpbmUgbnRvaGwoeCkgKHgpCisKKy8qIEJpb25pYyBhZGRpdGlvbnMgKi8KKyNkZWZpbmUgbnRvaHEoeCkgKHgpCisjZGVmaW5lIGh0b25xKHgpICh4KQorCisjZGVmaW5lIF9fQklHX0VORElBTl9CSVRGSUVMRAorCisjZW5kaWYgLyogX0JZVEVfT1JERVIgKi8KKworI2lmIF9fQlNEX1ZJU0lCTEUKKyNkZWZpbmUJTlRPSEwoeCkgKHgpID0gbnRvaGwoKHVfaW50MzJfdCkoeCkpCisjZGVmaW5lCU5UT0hTKHgpICh4KSA9IG50b2hzKCh1X2ludDE2X3QpKHgpKQorI2RlZmluZQlIVE9OTCh4KSAoeCkgPSBodG9ubCgodV9pbnQzMl90KSh4KSkKKyNkZWZpbmUJSFRPTlMoeCkgKHgpID0gaHRvbnMoKHVfaW50MTZfdCkoeCkpCisjZW5kaWYKKworCisjZGVmaW5lICBfX0JZVEVfT1JERVIgICAgICAgX0JZVEVfT1JERVIKKyNpZm5kZWYgIF9fTElUVExFX0VORElBTgorI2RlZmluZSAgX19MSVRUTEVfRU5ESUFOICAgIF9MSVRUTEVfRU5ESUFOCisjZW5kaWYKKyNpZm5kZWYgIF9fQklHX0VORElBTgorI2RlZmluZSAgX19CSUdfRU5ESUFOICAgICAgIF9CSUdfRU5ESUFOCisjZW5kaWYKKworI2VuZGlmIC8qIF9TWVNfRU5ESUFOX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL2Vwb2xsLmggYi9saWJjL2luY2x1ZGUvc3lzL2Vwb2xsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ3OGNhYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvZXBvbGwuaApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9TWVNfRVBPTExfSF8KKyNkZWZpbmUgX1NZU19FUE9MTF9IXworCisjZGVmaW5lIEVQT0xMSU4gICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBFUE9MTFBSSSAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgRVBPTExPVVQgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIEVQT0xMRVJSICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBFUE9MTEhVUCAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgRVBPTExSRE5PUk0gICAgICAweDAwMDAwMDQwCisjZGVmaW5lIEVQT0xMUkRCQU5EICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBFUE9MTFdSTk9STSAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgRVBPTExXUkJBTkQgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIEVQT0xMTVNHICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBFUE9MTEVUICAgICAgICAgIDB4ODAwMDAwMDAKKworI2RlZmluZSBFUE9MTF9DVExfQUREICAgIDEKKyNkZWZpbmUgRVBPTExfQ1RMX0RFTCAgICAyCisjZGVmaW5lIEVQT0xMX0NUTF9NT0QgICAgMworCit0eXBlZGVmIHVuaW9uIGVwb2xsX2RhdGEgCit7CisgICAgdm9pZCAqcHRyOworICAgIGludCBmZDsKKyAgICB1bnNpZ25lZCBpbnQgdTMyOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB1NjQ7Cit9IGVwb2xsX2RhdGFfdDsKKworc3RydWN0IGVwb2xsX2V2ZW50IAoreworICAgIHVuc2lnbmVkIGludCBldmVudHM7CisgICAgZXBvbGxfZGF0YV90IGRhdGE7Cit9OworCitpbnQgZXBvbGxfY3JlYXRlKGludCBzaXplKTsKK2ludCBlcG9sbF9jdGwoaW50IGVwZmQsIGludCBvcCwgaW50IGZkLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgKmV2ZW50KTsKK2ludCBlcG9sbF93YWl0KGludCBlcGZkLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgKmV2ZW50cywgaW50IG1heCwgaW50IHRpbWVvdXQpOworCisjZW5kaWYgIC8qIF9TWVNfRVBPTExfSF8gKi8KKwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy9lcnJuby5oIGIvbGliYy9pbmNsdWRlL3N5cy9lcnJuby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzOWY0ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvc3lzL2Vycm5vLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGVycm5vLmg+CmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL2V4ZWNfZWxmLmggYi9saWJjL2luY2x1ZGUvc3lzL2V4ZWNfZWxmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjcyZjgxZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvZXhlY19lbGYuaApAQCAtMCwwICsxLDYyNSBAQAorLyoJJE9wZW5CU0Q6IGV4ZWNfZWxmLmgsdiAxLjQxIDIwMDYvMDEvMDYgMTg6NTM6MDUgbWlsbGVydCBFeHAgJAkqLworLyoKKyAqIENvcHlyaWdodCAoYykgMTk5NSwgMTk5NiBFcmlrIFRoZWlzZW4uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorICogVGhpcyBpcyB0aGUgRUxGIEFCSSBoZWFkZXIgZmlsZQorICogZm9ybWVybHkga25vd24gYXMgImVsZl9hYmkuaCIuCisgKi8KKworI2lmbmRlZiBfU1lTX0VYRUNfRUxGX0hfCisjZGVmaW5lIF9TWVNfRVhFQ19FTEZfSF8KKworI2luY2x1ZGUgPG1hY2hpbmUvX3R5cGVzLmg+CisjaW5jbHVkZSA8bWFjaGluZS9leGVjLmg+CisKK3R5cGVkZWYgX191aW50OF90CUVsZl9CeXRlOworCit0eXBlZGVmIF9fdWludDMyX3QJRWxmMzJfQWRkcjsJLyogVW5zaWduZWQgcHJvZ3JhbSBhZGRyZXNzICovCit0eXBlZGVmIF9fdWludDMyX3QJRWxmMzJfT2ZmOwkvKiBVbnNpZ25lZCBmaWxlIG9mZnNldCAqLwordHlwZWRlZiBfX2ludDMyX3QJRWxmMzJfU3dvcmQ7CS8qIFNpZ25lZCBsYXJnZSBpbnRlZ2VyICovCit0eXBlZGVmIF9fdWludDMyX3QJRWxmMzJfV29yZDsJLyogVW5zaWduZWQgbGFyZ2UgaW50ZWdlciAqLwordHlwZWRlZiBfX3VpbnQxNl90CUVsZjMyX0hhbGY7CS8qIFVuc2lnbmVkIG1lZGl1bSBpbnRlZ2VyICovCisKK3R5cGVkZWYgX191aW50NjRfdAlFbGY2NF9BZGRyOwordHlwZWRlZiBfX3VpbnQ2NF90CUVsZjY0X09mZjsKK3R5cGVkZWYgX19pbnQzMl90CUVsZjY0X1NoYWxmOworCisjaWZkZWYgX19hbHBoYV9fCit0eXBlZGVmIF9faW50NjRfdAlFbGY2NF9Td29yZDsKK3R5cGVkZWYgX191aW50NjRfdAlFbGY2NF9Xb3JkOworI2Vsc2UKK3R5cGVkZWYgX19pbnQzMl90CUVsZjY0X1N3b3JkOwordHlwZWRlZiBfX3VpbnQzMl90CUVsZjY0X1dvcmQ7CisjZW5kaWYKKwordHlwZWRlZiBfX2ludDY0X3QJRWxmNjRfU3h3b3JkOwordHlwZWRlZiBfX3VpbnQ2NF90CUVsZjY0X1h3b3JkOworCit0eXBlZGVmIF9fdWludDMyX3QJRWxmNjRfSGFsZjsKK3R5cGVkZWYgX191aW50MTZfdAlFbGY2NF9RdWFydGVyOworCisvKgorICogZV9pZGVudFtdIGlkZW50aWZpY2F0aW9uIGluZGV4ZXMgCisgKiBTZWUgaHR0cDovL3d3dy5jYWxkZXJhLmNvbS9kZXZlbG9wZXJzL2dhYmkvMjAwMC0wNy0xNy9jaDQuZWhlYWRlci5odG1sCisgKi8KKyNkZWZpbmUgRUlfTUFHMAkJMAkJLyogZmlsZSBJRCAqLworI2RlZmluZSBFSV9NQUcxCQkxCQkvKiBmaWxlIElEICovCisjZGVmaW5lIEVJX01BRzIJCTIJCS8qIGZpbGUgSUQgKi8KKyNkZWZpbmUgRUlfTUFHMwkJMwkJLyogZmlsZSBJRCAqLworI2RlZmluZSBFSV9DTEFTUwk0CQkvKiBmaWxlIGNsYXNzICovCisjZGVmaW5lIEVJX0RBVEEJCTUJCS8qIGRhdGEgZW5jb2RpbmcgKi8KKyNkZWZpbmUgRUlfVkVSU0lPTgk2CQkvKiBFTEYgaGVhZGVyIHZlcnNpb24gKi8KKyNkZWZpbmUgRUlfT1NBQkkJNwkJLyogT1MvQUJJIElEICovCisjZGVmaW5lIEVJX0FCSVZFUlNJT04JOAkJLyogQUJJIHZlcnNpb24gKi8gCisjZGVmaW5lIEVJX1BBRAkJOQkJLyogc3RhcnQgb2YgcGFkIGJ5dGVzICovCisjZGVmaW5lIEVJX05JREVOVAkxNgkJLyogU2l6ZSBvZiBlX2lkZW50W10gKi8KKworLyogZV9pZGVudFtdIG1hZ2ljIG51bWJlciAqLworI2RlZmluZQlFTEZNQUcwCQkweDdmCQkvKiBlX2lkZW50W0VJX01BRzBdICovCisjZGVmaW5lCUVMRk1BRzEJCSdFJwkJLyogZV9pZGVudFtFSV9NQUcxXSAqLworI2RlZmluZQlFTEZNQUcyCQknTCcJCS8qIGVfaWRlbnRbRUlfTUFHMl0gKi8KKyNkZWZpbmUJRUxGTUFHMwkJJ0YnCQkvKiBlX2lkZW50W0VJX01BRzNdICovCisjZGVmaW5lCUVMRk1BRwkJIlwxNzdFTEYiCS8qIG1hZ2ljICovCisjZGVmaW5lCVNFTEZNQUcJCTQJCS8qIHNpemUgb2YgbWFnaWMgKi8KKworLyogZV9pZGVudFtdIGZpbGUgY2xhc3MgKi8KKyNkZWZpbmUJRUxGQ0xBU1NOT05FCTAJCS8qIGludmFsaWQgKi8KKyNkZWZpbmUJRUxGQ0xBU1MzMgkxCQkvKiAzMi1iaXQgb2JqcyAqLworI2RlZmluZQlFTEZDTEFTUzY0CTIJCS8qIDY0LWJpdCBvYmpzICovCisjZGVmaW5lCUVMRkNMQVNTTlVNCTMJCS8qIG51bWJlciBvZiBjbGFzc2VzICovCisKKy8qIGVfaWRlbnRbXSBkYXRhIGVuY29kaW5nICovCisjZGVmaW5lIEVMRkRBVEFOT05FCTAJCS8qIGludmFsaWQgKi8KKyNkZWZpbmUgRUxGREFUQTJMU0IJMQkJLyogTGl0dGxlLUVuZGlhbiAqLworI2RlZmluZSBFTEZEQVRBMk1TQgkyCQkvKiBCaWctRW5kaWFuICovCisjZGVmaW5lIEVMRkRBVEFOVU0JMwkJLyogbnVtYmVyIG9mIGRhdGEgZW5jb2RlIGRlZmluZXMgKi8KKworLyogZV9pZGVudFtdIE9wZXJhdGluZyBTeXN0ZW0vQUJJICovCisjZGVmaW5lIEVMRk9TQUJJX1NZU1YJCTAJLyogVU5JWCBTeXN0ZW0gViBBQkkgKi8KKyNkZWZpbmUgRUxGT1NBQklfSFBVWAkJMQkvKiBIUC1VWCBvcGVyYXRpbmcgc3lzdGVtICovCisjZGVmaW5lIEVMRk9TQUJJX05FVEJTRAkJMgkvKiBOZXRCU0QgKi8KKyNkZWZpbmUgRUxGT1NBQklfTElOVVgJCTMJLyogR05VL0xpbnV4ICovCisjZGVmaW5lIEVMRk9TQUJJX0hVUkQJCTQJLyogR05VL0h1cmQgKi8KKyNkZWZpbmUgRUxGT1NBQklfODZPUEVOCQk1CS8qIDg2T3BlbiBjb21tb24gSUEzMiBBQkkgKi8KKyNkZWZpbmUgRUxGT1NBQklfU09MQVJJUwk2CS8qIFNvbGFyaXMgKi8KKyNkZWZpbmUgRUxGT1NBQklfTU9OVEVSRVkJNwkvKiBNb250ZXJleSAqLworI2RlZmluZSBFTEZPU0FCSV9JUklYCQk4CS8qIElSSVggKi8KKyNkZWZpbmUgRUxGT1NBQklfRlJFRUJTRAk5CS8qIEZyZWVCU0QgKi8KKyNkZWZpbmUgRUxGT1NBQklfVFJVNjQJCTEwCS8qIFRSVTY0IFVOSVggKi8KKyNkZWZpbmUgRUxGT1NBQklfTU9ERVNUTwkxMQkvKiBOb3ZlbGwgTW9kZXN0byAqLworI2RlZmluZSBFTEZPU0FCSV9PUEVOQlNECTEyCS8qIE9wZW5CU0QgKi8KKyNkZWZpbmUgRUxGT1NBQklfQVJNCQk5NwkvKiBBUk0gKi8KKyNkZWZpbmUgRUxGT1NBQklfU1RBTkRBTE9ORQkyNTUJLyogU3RhbmRhbG9uZSAoZW1iZWRkZWQpIGFwcGxpY2F0aW9uICovCisKKy8qIGVfaWRlbnQgKi8KKyNkZWZpbmUgSVNfRUxGKGVoZHIpICgoZWhkcikuZV9pZGVudFtFSV9NQUcwXSA9PSBFTEZNQUcwICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAoZWhkcikuZV9pZGVudFtFSV9NQUcxXSA9PSBFTEZNQUcxICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAoZWhkcikuZV9pZGVudFtFSV9NQUcyXSA9PSBFTEZNQUcyICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAoZWhkcikuZV9pZGVudFtFSV9NQUczXSA9PSBFTEZNQUczKQorCisvKiBFTEYgSGVhZGVyICovCit0eXBlZGVmIHN0cnVjdCBlbGZoZHIgeworCXVuc2lnbmVkIGNoYXIJZV9pZGVudFtFSV9OSURFTlRdOyAvKiBFTEYgSWRlbnRpZmljYXRpb24gKi8KKwlFbGYzMl9IYWxmCWVfdHlwZTsJCS8qIG9iamVjdCBmaWxlIHR5cGUgKi8KKwlFbGYzMl9IYWxmCWVfbWFjaGluZTsJLyogbWFjaGluZSAqLworCUVsZjMyX1dvcmQJZV92ZXJzaW9uOwkvKiBvYmplY3QgZmlsZSB2ZXJzaW9uICovCisJRWxmMzJfQWRkcgllX2VudHJ5OwkvKiB2aXJ0dWFsIGVudHJ5IHBvaW50ICovCisJRWxmMzJfT2ZmCWVfcGhvZmY7CS8qIHByb2dyYW0gaGVhZGVyIHRhYmxlIG9mZnNldCAqLworCUVsZjMyX09mZgllX3Nob2ZmOwkvKiBzZWN0aW9uIGhlYWRlciB0YWJsZSBvZmZzZXQgKi8KKwlFbGYzMl9Xb3JkCWVfZmxhZ3M7CS8qIHByb2Nlc3Nvci1zcGVjaWZpYyBmbGFncyAqLworCUVsZjMyX0hhbGYJZV9laHNpemU7CS8qIEVMRiBoZWFkZXIgc2l6ZSAqLworCUVsZjMyX0hhbGYJZV9waGVudHNpemU7CS8qIHByb2dyYW0gaGVhZGVyIGVudHJ5IHNpemUgKi8KKwlFbGYzMl9IYWxmCWVfcGhudW07CS8qIG51bWJlciBvZiBwcm9ncmFtIGhlYWRlciBlbnRyaWVzICovCisJRWxmMzJfSGFsZgllX3NoZW50c2l6ZTsJLyogc2VjdGlvbiBoZWFkZXIgZW50cnkgc2l6ZSAqLworCUVsZjMyX0hhbGYJZV9zaG51bTsJLyogbnVtYmVyIG9mIHNlY3Rpb24gaGVhZGVyIGVudHJpZXMgKi8KKwlFbGYzMl9IYWxmCWVfc2hzdHJuZHg7CS8qIHNlY3Rpb24gaGVhZGVyIHRhYmxlJ3MgInNlY3Rpb24gCisJCQkJCSAgIGhlYWRlciBzdHJpbmcgdGFibGUiIGVudHJ5IG9mZnNldCAqLworfSBFbGYzMl9FaGRyOworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgY2hhcgllX2lkZW50W0VJX05JREVOVF07CS8qIElkIGJ5dGVzICovCisJRWxmNjRfUXVhcnRlcgllX3R5cGU7CQkJLyogZmlsZSB0eXBlICovCisJRWxmNjRfUXVhcnRlcgllX21hY2hpbmU7CQkvKiBtYWNoaW5lIHR5cGUgKi8KKwlFbGY2NF9IYWxmCWVfdmVyc2lvbjsJCS8qIHZlcnNpb24gbnVtYmVyICovCisJRWxmNjRfQWRkcgllX2VudHJ5OwkJLyogZW50cnkgcG9pbnQgKi8KKwlFbGY2NF9PZmYJZV9waG9mZjsJCS8qIFByb2dyYW0gaGRyIG9mZnNldCAqLworCUVsZjY0X09mZgllX3Nob2ZmOwkJLyogU2VjdGlvbiBoZHIgb2Zmc2V0ICovCisJRWxmNjRfSGFsZgllX2ZsYWdzOwkJLyogUHJvY2Vzc29yIGZsYWdzICovCisJRWxmNjRfUXVhcnRlcgllX2Voc2l6ZTsJCS8qIHNpemVvZiBlaGRyICovCisJRWxmNjRfUXVhcnRlcgllX3BoZW50c2l6ZTsJCS8qIFByb2dyYW0gaGVhZGVyIGVudHJ5IHNpemUgKi8KKwlFbGY2NF9RdWFydGVyCWVfcGhudW07CQkvKiBOdW1iZXIgb2YgcHJvZ3JhbSBoZWFkZXJzICovCisJRWxmNjRfUXVhcnRlcgllX3NoZW50c2l6ZTsJCS8qIFNlY3Rpb24gaGVhZGVyIGVudHJ5IHNpemUgKi8KKwlFbGY2NF9RdWFydGVyCWVfc2hudW07CQkvKiBOdW1iZXIgb2Ygc2VjdGlvbiBoZWFkZXJzICovCisJRWxmNjRfUXVhcnRlcgllX3Noc3RybmR4OwkJLyogU3RyaW5nIHRhYmxlIGluZGV4ICovCit9IEVsZjY0X0VoZHI7CisKKy8qIGVfdHlwZSAqLworI2RlZmluZSBFVF9OT05FCQkwCQkvKiBObyBmaWxlIHR5cGUgKi8KKyNkZWZpbmUgRVRfUkVMCQkxCQkvKiByZWxvY2F0YWJsZSBmaWxlICovCisjZGVmaW5lIEVUX0VYRUMJCTIJCS8qIGV4ZWN1dGFibGUgZmlsZSAqLworI2RlZmluZSBFVF9EWU4JCTMJCS8qIHNoYXJlZCBvYmplY3QgZmlsZSAqLworI2RlZmluZSBFVF9DT1JFCQk0CQkvKiBjb3JlIGZpbGUgKi8KKyNkZWZpbmUgRVRfTlVNCQk1CQkvKiBudW1iZXIgb2YgdHlwZXMgKi8KKyNkZWZpbmUgRVRfTE9QUk9DCTB4ZmYwMAkJLyogcmVzZXJ2ZWQgcmFuZ2UgZm9yIHByb2Nlc3NvciAqLworI2RlZmluZSBFVF9ISVBST0MJMHhmZmZmCQkvKiAgc3BlY2lmaWMgZV90eXBlICovCisKKy8qIGVfbWFjaGluZSAqLworI2RlZmluZSBFTV9OT05FCQkwCQkvKiBObyBNYWNoaW5lICovCisjZGVmaW5lIEVNX00zMgkJMQkJLyogQVQmVCBXRSAzMjEwMCAqLworI2RlZmluZSBFTV9TUEFSQwkyCQkvKiBTUEFSQyAqLworI2RlZmluZSBFTV8zODYJCTMJCS8qIEludGVsIDgwMzg2ICovCisjZGVmaW5lIEVNXzY4SwkJNAkJLyogTW90b3JvbGEgNjgwMDAgKi8KKyNkZWZpbmUgRU1fODhLCQk1CQkvKiBNb3Rvcm9sYSA4ODAwMCAqLworI2RlZmluZSBFTV80ODYJCTYJCS8qIEludGVsIDgwNDg2IC0gdW51c2VkPyAqLworI2RlZmluZSBFTV84NjAJCTcJCS8qIEludGVsIDgwODYwICovCisjZGVmaW5lIEVNX01JUFMJCTgJCS8qIE1JUFMgUjMwMDAgQmlnLUVuZGlhbiBvbmx5ICovCisvKiAKKyAqIERvbid0IGtub3cgaWYgRU1fTUlQU19SUzRfQkUsCisgKiBFTV9TUEFSQzY0LCBFTV9QQVJJU0MsCisgKiBvciBFTV9QUEMgYXJlIEFCSSBjb21wbGlhbnQKKyAqLworI2RlZmluZSBFTV9NSVBTX1JTNF9CRQkxMAkJLyogTUlQUyBSNDAwMCBCaWctRW5kaWFuICovCisjZGVmaW5lIEVNX1NQQVJDNjQJMTEJCS8qIFNQQVJDIHY5IDY0LWJpdCB1bm9mZmljYWwgKi8KKyNkZWZpbmUgRU1fUEFSSVNDCTE1CQkvKiBIUFBBICovCisjZGVmaW5lIEVNX1NQQVJDMzJQTFVTCTE4CQkvKiBFbmhhbmNlZCBpbnN0cnVjdGlvbiBzZXQgU1BBUkMgKi8KKyNkZWZpbmUgRU1fUFBDCQkyMAkJLyogUG93ZXJQQyAqLworI2RlZmluZSBFTV9BUk0JCTQwCQkvKiBBZHZhbmNlZCBSSVNDIE1hY2hpbmVzIEFSTSAqLworI2RlZmluZSBFTV9BTFBIQQk0MQkJLyogREVDIEFMUEhBICovCisjZGVmaW5lIEVNX1NQQVJDVjkJNDMJCS8qIFNQQVJDIHZlcnNpb24gOSAqLworI2RlZmluZSBFTV9BTFBIQV9FWFAJMHg5MDI2CQkvKiBERUMgQUxQSEEgKi8KKyNkZWZpbmUgRU1fQU1ENjQJNjIJCS8qIEFNRDY0IGFyY2hpdGVjdHVyZSAqLworI2RlZmluZSBFTV9WQVgJCTc1CQkvKiBERUMgVkFYICovCisjZGVmaW5lIEVNX05VTQkJMTUJCS8qIG51bWJlciBvZiBtYWNoaW5lIHR5cGVzICovCisKKy8qIFZlcnNpb24gKi8KKyNkZWZpbmUgRVZfTk9ORQkJMAkJLyogSW52YWxpZCAqLworI2RlZmluZSBFVl9DVVJSRU5UCTEJCS8qIEN1cnJlbnQgKi8KKyNkZWZpbmUgRVZfTlVNCQkyCQkvKiBudW1iZXIgb2YgdmVyc2lvbnMgKi8KKworLyogU2VjdGlvbiBIZWFkZXIgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwlFbGYzMl9Xb3JkCXNoX25hbWU7CS8qIG5hbWUgLSBpbmRleCBpbnRvIHNlY3Rpb24gaGVhZGVyCisJCQkJCSAgIHN0cmluZyB0YWJsZSBzZWN0aW9uICovCisJRWxmMzJfV29yZAlzaF90eXBlOwkvKiB0eXBlICovCisJRWxmMzJfV29yZAlzaF9mbGFnczsJLyogZmxhZ3MgKi8KKwlFbGYzMl9BZGRyCXNoX2FkZHI7CS8qIGFkZHJlc3MgKi8KKwlFbGYzMl9PZmYJc2hfb2Zmc2V0OwkvKiBmaWxlIG9mZnNldCAqLworCUVsZjMyX1dvcmQJc2hfc2l6ZTsJLyogc2VjdGlvbiBzaXplICovCisJRWxmMzJfV29yZAlzaF9saW5rOwkvKiBzZWN0aW9uIGhlYWRlciB0YWJsZSBpbmRleCBsaW5rICovCisJRWxmMzJfV29yZAlzaF9pbmZvOwkvKiBleHRyYSBpbmZvcm1hdGlvbiAqLworCUVsZjMyX1dvcmQJc2hfYWRkcmFsaWduOwkvKiBhZGRyZXNzIGFsaWdubWVudCAqLworCUVsZjMyX1dvcmQJc2hfZW50c2l6ZTsJLyogc2VjdGlvbiBlbnRyeSBzaXplICovCit9IEVsZjMyX1NoZHI7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlFbGY2NF9IYWxmCXNoX25hbWU7CS8qIHNlY3Rpb24gbmFtZSAqLworCUVsZjY0X0hhbGYJc2hfdHlwZTsJLyogc2VjdGlvbiB0eXBlICovCisJRWxmNjRfWHdvcmQJc2hfZmxhZ3M7CS8qIHNlY3Rpb24gZmxhZ3MgKi8KKwlFbGY2NF9BZGRyCXNoX2FkZHI7CS8qIHZpcnR1YWwgYWRkcmVzcyAqLworCUVsZjY0X09mZglzaF9vZmZzZXQ7CS8qIGZpbGUgb2Zmc2V0ICovCisJRWxmNjRfWHdvcmQJc2hfc2l6ZTsJLyogc2VjdGlvbiBzaXplICovCisJRWxmNjRfSGFsZglzaF9saW5rOwkvKiBsaW5rIHRvIGFub3RoZXIgKi8KKwlFbGY2NF9IYWxmCXNoX2luZm87CS8qIG1pc2MgaW5mbyAqLworCUVsZjY0X1h3b3JkCXNoX2FkZHJhbGlnbjsJLyogbWVtb3J5IGFsaWdubWVudCAqLworCUVsZjY0X1h3b3JkCXNoX2VudHNpemU7CS8qIHRhYmxlIGVudHJ5IHNpemUgKi8KK30gRWxmNjRfU2hkcjsKKworLyogU3BlY2lhbCBTZWN0aW9uIEluZGV4ZXMgKi8KKyNkZWZpbmUgU0hOX1VOREVGCTAJCS8qIHVuZGVmaW5lZCAqLworI2RlZmluZSBTSE5fTE9SRVNFUlZFCTB4ZmYwMAkJLyogbG93ZXIgYm91bmRzIG9mIHJlc2VydmVkIGluZGV4ZXMgKi8KKyNkZWZpbmUgU0hOX0xPUFJPQwkweGZmMDAJCS8qIHJlc2VydmVkIHJhbmdlIGZvciBwcm9jZXNzb3IgKi8KKyNkZWZpbmUgU0hOX0hJUFJPQwkweGZmMWYJCS8qICAgc3BlY2lmaWMgc2VjdGlvbiBpbmRleGVzICovCisjZGVmaW5lIFNITl9BQlMJCTB4ZmZmMQkJLyogYWJzb2x1dGUgdmFsdWUgKi8KKyNkZWZpbmUgU0hOX0NPTU1PTgkweGZmZjIJCS8qIGNvbW1vbiBzeW1ib2wgKi8KKyNkZWZpbmUgU0hOX0hJUkVTRVJWRQkweGZmZmYJCS8qIHVwcGVyIGJvdW5kcyBvZiByZXNlcnZlZCBpbmRleGVzICovCisKKy8qIHNoX3R5cGUgKi8KKyNkZWZpbmUgU0hUX05VTEwJMAkJLyogaW5hY3RpdmUgKi8KKyNkZWZpbmUgU0hUX1BST0dCSVRTCTEJCS8qIHByb2dyYW0gZGVmaW5lZCBpbmZvcm1hdGlvbiAqLworI2RlZmluZSBTSFRfU1lNVEFCCTIJCS8qIHN5bWJvbCB0YWJsZSBzZWN0aW9uICovCisjZGVmaW5lIFNIVF9TVFJUQUIJMwkJLyogc3RyaW5nIHRhYmxlIHNlY3Rpb24gKi8KKyNkZWZpbmUgU0hUX1JFTEEJNAkJLyogcmVsb2NhdGlvbiBzZWN0aW9uIHdpdGggYWRkZW5kcyovCisjZGVmaW5lIFNIVF9IQVNICTUJCS8qIHN5bWJvbCBoYXNoIHRhYmxlIHNlY3Rpb24gKi8KKyNkZWZpbmUgU0hUX0RZTkFNSUMJNgkJLyogZHluYW1pYyBzZWN0aW9uICovCisjZGVmaW5lIFNIVF9OT1RFCTcJCS8qIG5vdGUgc2VjdGlvbiAqLworI2RlZmluZSBTSFRfTk9CSVRTCTgJCS8qIG5vIHNwYWNlIHNlY3Rpb24gKi8KKyNkZWZpbmUgU0hUX1JFTAkJOQkJLyogcmVsYXRpb24gc2VjdGlvbiB3aXRob3V0IGFkZGVuZHMgKi8KKyNkZWZpbmUgU0hUX1NITElCCTEwCQkvKiByZXNlcnZlZCAtIHB1cnBvc2UgdW5rbm93biAqLworI2RlZmluZSBTSFRfRFlOU1lNCTExCQkvKiBkeW5hbWljIHN5bWJvbCB0YWJsZSBzZWN0aW9uICovCisjZGVmaW5lIFNIVF9OVU0JCTEyCQkvKiBudW1iZXIgb2Ygc2VjdGlvbiB0eXBlcyAqLworI2RlZmluZSBTSFRfTE9QUk9DCTB4NzAwMDAwMDAJLyogcmVzZXJ2ZWQgcmFuZ2UgZm9yIHByb2Nlc3NvciAqLworI2RlZmluZSBTSFRfSElQUk9DCTB4N2ZmZmZmZmYJLyogIHNwZWNpZmljIHNlY3Rpb24gaGVhZGVyIHR5cGVzICovCisjZGVmaW5lIFNIVF9MT1VTRVIJMHg4MDAwMDAwMAkvKiByZXNlcnZlZCByYW5nZSBmb3IgYXBwbGljYXRpb24gKi8KKyNkZWZpbmUgU0hUX0hJVVNFUgkweGZmZmZmZmZmCS8qICBzcGVjaWZpYyBpbmRleGVzICovCisKKy8qIFNlY3Rpb24gbmFtZXMgKi8KKyNkZWZpbmUgRUxGX0JTUyAgICAgICAgICIuYnNzIgkJLyogdW5pbml0aWFsaXplZCBkYXRhICovCisjZGVmaW5lIEVMRl9EQVRBICAgICAgICAiLmRhdGEiCQkvKiBpbml0aWFsaXplZCBkYXRhICovCisjZGVmaW5lIEVMRl9ERUJVRyAgICAgICAiLmRlYnVnIgkvKiBkZWJ1ZyAqLworI2RlZmluZSBFTEZfRFlOQU1JQyAgICAgIi5keW5hbWljIgkvKiBkeW5hbWljIGxpbmtpbmcgaW5mb3JtYXRpb24gKi8KKyNkZWZpbmUgRUxGX0RZTlNUUiAgICAgICIuZHluc3RyIgkvKiBkeW5hbWljIHN0cmluZyB0YWJsZSAqLworI2RlZmluZSBFTEZfRFlOU1lNICAgICAgIi5keW5zeW0iCS8qIGR5bmFtaWMgc3ltYm9sIHRhYmxlICovCisjZGVmaW5lIEVMRl9GSU5JICAgICAgICAiLmZpbmkiCQkvKiB0ZXJtaW5hdGlvbiBjb2RlICovCisjZGVmaW5lIEVMRl9HT1QgICAgICAgICAiLmdvdCIJCS8qIGdsb2JhbCBvZmZzZXQgdGFibGUgKi8KKyNkZWZpbmUgRUxGX0hBU0ggICAgICAgICIuaGFzaCIJCS8qIHN5bWJvbCBoYXNoIHRhYmxlICovCisjZGVmaW5lIEVMRl9JTklUICAgICAgICAiLmluaXQiCQkvKiBpbml0aWFsaXphdGlvbiBjb2RlICovCisjZGVmaW5lIEVMRl9SRUxfREFUQSAgICAiLnJlbC5kYXRhIgkvKiByZWxvY2F0aW9uIGRhdGEgKi8KKyNkZWZpbmUgRUxGX1JFTF9GSU5JICAgICIucmVsLmZpbmkiCS8qIHJlbG9jYXRpb24gdGVybWluYXRpb24gY29kZSAqLworI2RlZmluZSBFTEZfUkVMX0lOSVQgICAgIi5yZWwuaW5pdCIJLyogcmVsb2NhdGlvbiBpbml0aWFsaXphdGlvbiBjb2RlICovCisjZGVmaW5lIEVMRl9SRUxfRFlOICAgICAiLnJlbC5keW4iCS8qIHJlbG9jYWx0aW9uIGR5bmFtaWMgbGluayBpbmZvICovCisjZGVmaW5lIEVMRl9SRUxfUk9EQVRBICAiLnJlbC5yb2RhdGEiCS8qIHJlbG9jYXRpb24gcmVhZC1vbmx5IGRhdGEgKi8KKyNkZWZpbmUgRUxGX1JFTF9URVhUICAgICIucmVsLnRleHQiCS8qIHJlbG9jYXRpb24gY29kZSAqLworI2RlZmluZSBFTEZfUk9EQVRBICAgICAgIi5yb2RhdGEiCS8qIHJlYWQtb25seSBkYXRhICovCisjZGVmaW5lIEVMRl9TSFNUUlRBQiAgICAiLnNoc3RydGFiIgkvKiBzZWN0aW9uIGhlYWRlciBzdHJpbmcgdGFibGUgKi8KKyNkZWZpbmUgRUxGX1NUUlRBQiAgICAgICIuc3RydGFiIgkvKiBzdHJpbmcgdGFibGUgKi8KKyNkZWZpbmUgRUxGX1NZTVRBQiAgICAgICIuc3ltdGFiIgkvKiBzeW1ib2wgdGFibGUgKi8KKyNkZWZpbmUgRUxGX1RFWFQgICAgICAgICIudGV4dCIJCS8qIGNvZGUgKi8KKworCisvKiBTZWN0aW9uIEF0dHJpYnV0ZSBGbGFncyAtIHNoX2ZsYWdzICovCisjZGVmaW5lIFNIRl9XUklURQkweDEJCS8qIFdyaXRhYmxlICovCisjZGVmaW5lIFNIRl9BTExPQwkweDIJCS8qIG9jY3VwaWVzIG1lbW9yeSAqLworI2RlZmluZSBTSEZfRVhFQ0lOU1RSCTB4NAkJLyogZXhlY3V0YWJsZSAqLworI2RlZmluZSBTSEZfTUFTS1BST0MJMHhmMDAwMDAwMAkvKiByZXNlcnZlZCBiaXRzIGZvciBwcm9jZXNzb3IgKi8KKwkJCQkJLyogIHNwZWNpZmljIHNlY3Rpb24gYXR0cmlidXRlcyAqLworCisvKiBTeW1ib2wgVGFibGUgRW50cnkgKi8KK3R5cGVkZWYgc3RydWN0IGVsZjMyX3N5bSB7CisJRWxmMzJfV29yZAlzdF9uYW1lOwkvKiBuYW1lIC0gaW5kZXggaW50byBzdHJpbmcgdGFibGUgKi8KKwlFbGYzMl9BZGRyCXN0X3ZhbHVlOwkvKiBzeW1ib2wgdmFsdWUgKi8KKwlFbGYzMl9Xb3JkCXN0X3NpemU7CS8qIHN5bWJvbCBzaXplICovCisJdW5zaWduZWQgY2hhcglzdF9pbmZvOwkvKiB0eXBlIGFuZCBiaW5kaW5nICovCisJdW5zaWduZWQgY2hhcglzdF9vdGhlcjsJLyogMCAtIG5vIGRlZmluZWQgbWVhbmluZyAqLworCUVsZjMyX0hhbGYJc3Rfc2huZHg7CS8qIHNlY3Rpb24gaGVhZGVyIGluZGV4ICovCit9IEVsZjMyX1N5bTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCUVsZjY0X0hhbGYJc3RfbmFtZTsJLyogU3ltYm9sIG5hbWUgaW5kZXggaW4gc3RyIHRhYmxlICovCisJRWxmX0J5dGUJc3RfaW5mbzsJLyogdHlwZSAvIGJpbmRpbmcgYXR0cnMgKi8KKwlFbGZfQnl0ZQlzdF9vdGhlcjsJLyogdW51c2VkICovCisJRWxmNjRfUXVhcnRlcglzdF9zaG5keDsJLyogc2VjdGlvbiBpbmRleCBvZiBzeW1ib2wgKi8KKwlFbGY2NF9Yd29yZAlzdF92YWx1ZTsJLyogdmFsdWUgb2Ygc3ltYm9sICovCisJRWxmNjRfWHdvcmQJc3Rfc2l6ZTsJLyogc2l6ZSBvZiBzeW1ib2wgKi8KK30gRWxmNjRfU3ltOworCisvKiBTeW1ib2wgdGFibGUgaW5kZXggKi8KKyNkZWZpbmUgU1ROX1VOREVGCTAJCS8qIHVuZGVmaW5lZCAqLworCisvKiBFeHRyYWN0IHN5bWJvbCBpbmZvIC0gc3RfaW5mbyAqLworI2RlZmluZSBFTEYzMl9TVF9CSU5EKHgpCSgoeCkgPj4gNCkKKyNkZWZpbmUgRUxGMzJfU1RfVFlQRSh4KQkoKCh1bnNpZ25lZCBpbnQpIHgpICYgMHhmKQorI2RlZmluZSBFTEYzMl9TVF9JTkZPKGIsdCkJKCgoYikgPDwgNCkgKyAoKHQpICYgMHhmKSkKKworI2RlZmluZSBFTEY2NF9TVF9CSU5EKHgpCSgoeCkgPj4gNCkKKyNkZWZpbmUgRUxGNjRfU1RfVFlQRSh4KQkoKCh1bnNpZ25lZCBpbnQpIHgpICYgMHhmKQorI2RlZmluZSBFTEY2NF9TVF9JTkZPKGIsdCkJKCgoYikgPDwgNCkgKyAoKHQpICYgMHhmKSkKKworLyogU3ltYm9sIEJpbmRpbmcgLSBFTEYzMl9TVF9CSU5EIC0gc3RfaW5mbyAqLworI2RlZmluZSBTVEJfTE9DQUwJMAkJLyogTG9jYWwgc3ltYm9sICovCisjZGVmaW5lIFNUQl9HTE9CQUwJMQkJLyogR2xvYmFsIHN5bWJvbCAqLworI2RlZmluZSBTVEJfV0VBSwkyCQkvKiBsaWtlIGdsb2JhbCAtIGxvd2VyIHByZWNlZGVuY2UgKi8KKyNkZWZpbmUgU1RCX05VTQkJMwkJLyogbnVtYmVyIG9mIHN5bWJvbCBiaW5kaW5ncyAqLworI2RlZmluZSBTVEJfTE9QUk9DCTEzCQkvKiByZXNlcnZlZCByYW5nZSBmb3IgcHJvY2Vzc29yICovCisjZGVmaW5lIFNUQl9ISVBST0MJMTUJCS8qICBzcGVjaWZpYyBzeW1ib2wgYmluZGluZ3MgKi8KKworLyogU3ltYm9sIHR5cGUgLSBFTEYzMl9TVF9UWVBFIC0gc3RfaW5mbyAqLworI2RlZmluZSBTVFRfTk9UWVBFCTAJCS8qIG5vdCBzcGVjaWZpZWQgKi8KKyNkZWZpbmUgU1RUX09CSkVDVAkxCQkvKiBkYXRhIG9iamVjdCAqLworI2RlZmluZSBTVFRfRlVOQwkyCQkvKiBmdW5jdGlvbiAqLworI2RlZmluZSBTVFRfU0VDVElPTgkzCQkvKiBzZWN0aW9uICovCisjZGVmaW5lIFNUVF9GSUxFCTQJCS8qIGZpbGUgKi8KKyNkZWZpbmUgU1RUX05VTQkJNQkJLyogbnVtYmVyIG9mIHN5bWJvbCB0eXBlcyAqLworI2RlZmluZSBTVFRfTE9QUk9DCTEzCQkvKiByZXNlcnZlZCByYW5nZSBmb3IgcHJvY2Vzc29yICovCisjZGVmaW5lIFNUVF9ISVBST0MJMTUJCS8qICBzcGVjaWZpYyBzeW1ib2wgdHlwZXMgKi8KKworLyogUmVsb2NhdGlvbiBlbnRyeSB3aXRoIGltcGxpY2l0IGFkZGVuZCAqLwordHlwZWRlZiBzdHJ1Y3QgeworCUVsZjMyX0FkZHIJcl9vZmZzZXQ7CS8qIG9mZnNldCBvZiByZWxvY2F0aW9uICovCisJRWxmMzJfV29yZAlyX2luZm87CQkvKiBzeW1ib2wgdGFibGUgaW5kZXggYW5kIHR5cGUgKi8KK30gRWxmMzJfUmVsOworCisvKiBSZWxvY2F0aW9uIGVudHJ5IHdpdGggZXhwbGljaXQgYWRkZW5kICovCit0eXBlZGVmIHN0cnVjdCB7CisJRWxmMzJfQWRkcglyX29mZnNldDsJLyogb2Zmc2V0IG9mIHJlbG9jYXRpb24gKi8KKwlFbGYzMl9Xb3JkCXJfaW5mbzsJCS8qIHN5bWJvbCB0YWJsZSBpbmRleCBhbmQgdHlwZSAqLworCUVsZjMyX1N3b3JkCXJfYWRkZW5kOworfSBFbGYzMl9SZWxhOworCisvKiBFeHRyYWN0IHJlbG9jYXRpb24gaW5mbyAtIHJfaW5mbyAqLworI2RlZmluZSBFTEYzMl9SX1NZTShpKQkJKChpKSA+PiA4KQorI2RlZmluZSBFTEYzMl9SX1RZUEUoaSkJCSgodW5zaWduZWQgY2hhcikgKGkpKQorI2RlZmluZSBFTEYzMl9SX0lORk8ocyx0KSAJKCgocykgPDwgOCkgKyAodW5zaWduZWQgY2hhcikodCkpCisKK3R5cGVkZWYgc3RydWN0IHsKKwlFbGY2NF9Yd29yZAlyX29mZnNldDsJLyogd2hlcmUgdG8gZG8gaXQgKi8KKwlFbGY2NF9Yd29yZAlyX2luZm87CQkvKiBpbmRleCAmIHR5cGUgb2YgcmVsb2NhdGlvbiAqLworfSBFbGY2NF9SZWw7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlFbGY2NF9Yd29yZAlyX29mZnNldDsJLyogd2hlcmUgdG8gZG8gaXQgKi8KKwlFbGY2NF9Yd29yZAlyX2luZm87CQkvKiBpbmRleCAmIHR5cGUgb2YgcmVsb2NhdGlvbiAqLworCUVsZjY0X1N4d29yZAlyX2FkZGVuZDsJLyogYWRqdXN0bWVudCB2YWx1ZSAqLworfSBFbGY2NF9SZWxhOworCisjZGVmaW5lCUVMRjY0X1JfU1lNKGluZm8pCSgoaW5mbykgPj4gMzIpCisjZGVmaW5lCUVMRjY0X1JfVFlQRShpbmZvKQkoKGluZm8pICYgMHhGRkZGRkZGRikKKyNkZWZpbmUgRUxGNjRfUl9JTkZPKHMsdCkgCSgoKHMpIDw8IDMyKSArIChfX3VpbnQzMl90KSh0KSkKKworLyogUHJvZ3JhbSBIZWFkZXIgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwlFbGYzMl9Xb3JkCXBfdHlwZTsJCS8qIHNlZ21lbnQgdHlwZSAqLworCUVsZjMyX09mZglwX29mZnNldDsJLyogc2VnbWVudCBvZmZzZXQgKi8KKwlFbGYzMl9BZGRyCXBfdmFkZHI7CS8qIHZpcnR1YWwgYWRkcmVzcyBvZiBzZWdtZW50ICovCisJRWxmMzJfQWRkcglwX3BhZGRyOwkvKiBwaHlzaWNhbCBhZGRyZXNzIC0gaWdub3JlZD8gKi8KKwlFbGYzMl9Xb3JkCXBfZmlsZXN6OwkvKiBudW1iZXIgb2YgYnl0ZXMgaW4gZmlsZSBmb3Igc2VnLiAqLworCUVsZjMyX1dvcmQJcF9tZW1zejsJLyogbnVtYmVyIG9mIGJ5dGVzIGluIG1lbS4gZm9yIHNlZy4gKi8KKwlFbGYzMl9Xb3JkCXBfZmxhZ3M7CS8qIGZsYWdzICovCisJRWxmMzJfV29yZAlwX2FsaWduOwkvKiBtZW1vcnkgYWxpZ25tZW50ICovCit9IEVsZjMyX1BoZHI7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlFbGY2NF9IYWxmCXBfdHlwZTsJCS8qIGVudHJ5IHR5cGUgKi8KKwlFbGY2NF9IYWxmCXBfZmxhZ3M7CS8qIGZsYWdzICovCisJRWxmNjRfT2ZmCXBfb2Zmc2V0OwkvKiBvZmZzZXQgKi8KKwlFbGY2NF9BZGRyCXBfdmFkZHI7CS8qIHZpcnR1YWwgYWRkcmVzcyAqLworCUVsZjY0X0FkZHIJcF9wYWRkcjsJLyogcGh5c2ljYWwgYWRkcmVzcyAqLworCUVsZjY0X1h3b3JkCXBfZmlsZXN6OwkvKiBmaWxlIHNpemUgKi8KKwlFbGY2NF9Yd29yZAlwX21lbXN6OwkvKiBtZW1vcnkgc2l6ZSAqLworCUVsZjY0X1h3b3JkCXBfYWxpZ247CS8qIG1lbW9yeSAmIGZpbGUgYWxpZ25tZW50ICovCit9IEVsZjY0X1BoZHI7CisKKy8qIFNlZ21lbnQgdHlwZXMgLSBwX3R5cGUgKi8KKyNkZWZpbmUgUFRfTlVMTAkJMAkJLyogdW51c2VkICovCisjZGVmaW5lIFBUX0xPQUQJCTEJCS8qIGxvYWRhYmxlIHNlZ21lbnQgKi8KKyNkZWZpbmUgUFRfRFlOQU1JQwkyCQkvKiBkeW5hbWljIGxpbmtpbmcgc2VjdGlvbiAqLworI2RlZmluZSBQVF9JTlRFUlAJMwkJLyogdGhlIFJUTEQgKi8KKyNkZWZpbmUgUFRfTk9URQkJNAkJLyogYXV4aWxpYXJ5IGluZm9ybWF0aW9uICovCisjZGVmaW5lIFBUX1NITElCCTUJCS8qIHJlc2VydmVkIC0gcHVycG9zZSB1bmRlZmluZWQgKi8KKyNkZWZpbmUgUFRfUEhEUgkJNgkJLyogcHJvZ3JhbSBoZWFkZXIgKi8KKyNkZWZpbmUgUFRfTlVNCQk3CQkvKiBOdW1iZXIgb2Ygc2VnbWVudCB0eXBlcyAqLworI2RlZmluZSBQVF9MT09TCQkweDYwMDAwMDAwCS8qIHJlc2VydmVkIHJhbmdlIGZvciBPUyAqLworI2RlZmluZSBQVF9ISU9TCQkweDZmZmZmZmZmCS8qICBzcGVjaWZpYyBzZWdtZW50IHR5cGVzICovCisjZGVmaW5lIFBUX0xPUFJPQwkweDcwMDAwMDAwCS8qIHJlc2VydmVkIHJhbmdlIGZvciBwcm9jZXNzb3IgKi8KKyNkZWZpbmUgUFRfSElQUk9DCTB4N2ZmZmZmZmYJLyogIHNwZWNpZmljIHNlZ21lbnQgdHlwZXMgKi8KKworLyogU2VnbWVudCBmbGFncyAtIHBfZmxhZ3MgKi8KKyNkZWZpbmUgUEZfWAkJMHgxCQkvKiBFeGVjdXRhYmxlICovCisjZGVmaW5lIFBGX1cJCTB4MgkJLyogV3JpdGFibGUgKi8KKyNkZWZpbmUgUEZfUgkJMHg0CQkvKiBSZWFkYWJsZSAqLworI2RlZmluZSBQRl9NQVNLUFJPQwkweGYwMDAwMDAwCS8qIHJlc2VydmVkIGJpdHMgZm9yIHByb2Nlc3NvciAqLworCQkJCQkvKiAgc3BlY2lmaWMgc2VnbWVudCBmbGFncyAqLworCisvKiBEeW5hbWljIHN0cnVjdHVyZSAqLwordHlwZWRlZiBzdHJ1Y3QgeworCUVsZjMyX1N3b3JkCWRfdGFnOwkJLyogY29udHJvbHMgbWVhbmluZyBvZiBkX3ZhbCAqLworCXVuaW9uIHsKKwkJRWxmMzJfV29yZAlkX3ZhbDsJLyogTXVsdGlwbGUgbWVhbmluZ3MgLSBzZWUgZF90YWcgKi8KKwkJRWxmMzJfQWRkcglkX3B0cjsJLyogcHJvZ3JhbSB2aXJ0dWFsIGFkZHJlc3MgKi8KKwl9IGRfdW47Cit9IEVsZjMyX0R5bjsKKwordHlwZWRlZiBzdHJ1Y3QgeworCUVsZjY0X1h3b3JkCWRfdGFnOwkJLyogY29udHJvbHMgbWVhbmluZyBvZiBkX3ZhbCAqLworCXVuaW9uIHsKKwkJRWxmNjRfQWRkcglkX3B0cjsKKwkJRWxmNjRfWHdvcmQJZF92YWw7CisJfSBkX3VuOworfSBFbGY2NF9EeW47CisKKy8qIER5bmFtaWMgQXJyYXkgVGFncyAtIGRfdGFnICovCisjZGVmaW5lIERUX05VTEwJCTAJCS8qIG1hcmtzIGVuZCBvZiBfRFlOQU1JQyBhcnJheSAqLworI2RlZmluZSBEVF9ORUVERUQJMQkJLyogc3RyaW5nIHRhYmxlIG9mZnNldCBvZiBuZWVkZWQgbGliICovCisjZGVmaW5lIERUX1BMVFJFTFNaCTIJCS8qIHNpemUgb2YgcmVsb2NhdGlvbiBlbnRyaWVzIGluIFBMVCAqLworI2RlZmluZSBEVF9QTFRHT1QJMwkJLyogYWRkcmVzcyBQTFQvR09UICovCisjZGVmaW5lIERUX0hBU0gJCTQJCS8qIGFkZHJlc3Mgb2Ygc3ltYm9sIGhhc2ggdGFibGUgKi8KKyNkZWZpbmUgRFRfU1RSVEFCCTUJCS8qIGFkZHJlc3Mgb2Ygc3RyaW5nIHRhYmxlICovCisjZGVmaW5lIERUX1NZTVRBQgk2CQkvKiBhZGRyZXNzIG9mIHN5bWJvbCB0YWJsZSAqLworI2RlZmluZSBEVF9SRUxBCQk3CQkvKiBhZGRyZXNzIG9mIHJlbG9jYXRpb24gdGFibGUgKi8KKyNkZWZpbmUgRFRfUkVMQVNaCTgJCS8qIHNpemUgb2YgcmVsb2NhdGlvbiB0YWJsZSAqLworI2RlZmluZSBEVF9SRUxBRU5UCTkJCS8qIHNpemUgb2YgcmVsb2NhdGlvbiBlbnRyeSAqLworI2RlZmluZSBEVF9TVFJTWgkxMAkJLyogc2l6ZSBvZiBzdHJpbmcgdGFibGUgKi8KKyNkZWZpbmUgRFRfU1lNRU5UCTExCQkvKiBzaXplIG9mIHN5bWJvbCB0YWJsZSBlbnRyeSAqLworI2RlZmluZSBEVF9JTklUCQkxMgkJLyogYWRkcmVzcyBvZiBpbml0aWFsaXphdGlvbiBmdW5jLiAqLworI2RlZmluZSBEVF9GSU5JCQkxMwkJLyogYWRkcmVzcyBvZiB0ZXJtaW5hdGlvbiBmdW5jdGlvbiAqLworI2RlZmluZSBEVF9TT05BTUUJMTQJCS8qIHN0cmluZyB0YWJsZSBvZmZzZXQgb2Ygc2hhcmVkIG9iaiAqLworI2RlZmluZSBEVF9SUEFUSAkxNQkJLyogc3RyaW5nIHRhYmxlIG9mZnNldCBvZiBsaWJyYXJ5CisJCQkJCSAgIHNlYXJjaCBwYXRoICovCisjZGVmaW5lIERUX1NZTUJPTElDCTE2CQkvKiBzdGFydCBzeW0gc2VhcmNoIGluIHNoYXJlZCBvYmouICovCisjZGVmaW5lIERUX1JFTAkJMTcJCS8qIGFkZHJlc3Mgb2YgcmVsLiB0YmwuIHcgYWRkZW5kcyAqLworI2RlZmluZSBEVF9SRUxTWgkxOAkJLyogc2l6ZSBvZiBEVF9SRUwgcmVsb2NhdGlvbiB0YWJsZSAqLworI2RlZmluZSBEVF9SRUxFTlQJMTkJCS8qIHNpemUgb2YgRFRfUkVMIHJlbG9jYXRpb24gZW50cnkgKi8KKyNkZWZpbmUgRFRfUExUUkVMCTIwCQkvKiBQTFQgcmVmZXJlbmNlZCByZWxvY2F0aW9uIGVudHJ5ICovCisjZGVmaW5lIERUX0RFQlVHCTIxCQkvKiBidWdnZXIgKi8KKyNkZWZpbmUgRFRfVEVYVFJFTAkyMgkJLyogQWxsb3cgcmVsLiBtb2QuIHRvIHVud3JpdGFibGUgc2VnICovCisjZGVmaW5lIERUX0pNUFJFTAkyMwkJLyogYWRkLiBvZiBQTFQncyByZWxvY2F0aW9uIGVudHJpZXMgKi8KKyNkZWZpbmUgRFRfQklORF9OT1cJMjQJCS8qIEJpbmQgbm93IHJlZ2FyZGxlc3Mgb2YgZW52IHNldHRpbmcgKi8KKyNkZWZpbmUgRFRfTlVNCQkyNQkJLyogTnVtYmVyIHVzZWQuICovCisjZGVmaW5lIERUX0xPUFJPQwkweDcwMDAwMDAwCS8qIHJlc2VydmVkIHJhbmdlIGZvciBwcm9jZXNzb3IgKi8KKyNkZWZpbmUgRFRfSElQUk9DCTB4N2ZmZmZmZmYJLyogIHNwZWNpZmljIGR5bmFtaWMgYXJyYXkgdGFncyAqLworCQorLyogU3RhbmRhcmQgRUxGIGhhc2hpbmcgZnVuY3Rpb24gKi8KK3Vuc2lnbmVkIGludCBlbGZfaGFzaChjb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lKTsKKworLyoKKyAqIE5vdGUgRGVmaW5pdGlvbnMKKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCUVsZjMyX1dvcmQgbmFtZXN6OworCUVsZjMyX1dvcmQgZGVzY3N6OworCUVsZjMyX1dvcmQgdHlwZTsKK30gRWxmMzJfTm90ZTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCUVsZjY0X0hhbGYgbmFtZXN6OworCUVsZjY0X0hhbGYgZGVzY3N6OworCUVsZjY0X0hhbGYgdHlwZTsKK30gRWxmNjRfTm90ZTsKKworLyoKKyAqIFhYWCAtIHRoZXNlIF9LRVJORUwgaXRlbXMgYXJlbid0IHBhcnQgb2YgdGhlIEFCSSEKKyAqLworI2lmIGRlZmluZWQoX0tFUk5FTCkgfHwgZGVmaW5lZChfRFlOX0xPQURFUikKKworI2RlZmluZSBFTEYzMl9OT19BRERSCSgodV9sb25nKSB+MCkJLyogSW5kaWNhdGVzIGFkZHIuIG5vdCB5ZXQgZmlsbGVkIGluICovCisjZGVmaW5lIEVMRl9BVVhfRU5UUklFUwk4CQkvKiBTaXplIG9mIGF1eCBhcnJheSBwYXNzZWQgdG8gbG9hZGVyICovCisKK3R5cGVkZWYgc3RydWN0IHsKKwlFbGYzMl9Td29yZAlhdV9pZDsJCQkJLyogMzItYml0IGlkICovCisJRWxmMzJfV29yZAlhdV92OwkJCQkvKiAzMi1iaXQgdmFsdWUgKi8KK30gQXV4MzJJbmZvOworCisjZGVmaW5lIEVMRjY0X05PX0FERFIJKChfX3VpbnQ2NF90KSB+MCkvKiBJbmRpY2F0ZXMgYWRkci4gbm90IHlldCBmaWxsZWQgaW4gKi8KKyNkZWZpbmUgRUxGNjRfQVVYX0VOVFJJRVMJOAkvKiBTaXplIG9mIGF1eCBhcnJheSBwYXNzZWQgdG8gbG9hZGVyICovCisKK3R5cGVkZWYgc3RydWN0IHsKKwlFbGY2NF9TaGFsZglhdV9pZDsJCQkJLyogMzItYml0IGlkICovCisJRWxmNjRfWHdvcmQJYXVfdjsJCQkJLyogNjQtYml0IGlkICovCit9IEF1eDY0SW5mbzsKKworZW51bSBBdXhJRCB7CisJQVVYX251bGwgPSAwLAorCUFVWF9pZ25vcmUgPSAxLAorCUFVWF9leGVjZmQgPSAyLAorCUFVWF9waGRyID0gMywJCQkvKiAmcGhkclswXSAqLworCUFVWF9waGVudCA9IDQsCQkJLyogc2l6ZW9mKHBoZHJbMF0pICovCisJQVVYX3BobnVtID0gNSwJCQkvKiAjIHBoZHIgZW50cmllcyAqLworCUFVWF9wYWdlc3ogPSA2LAkJCS8qIFBBR0VTSVpFICovCisJQVVYX2Jhc2UgPSA3LAkJCS8qIGxkLnNvIGJhc2UgYWRkciAqLworCUFVWF9mbGFncyA9IDgsCQkJLyogcHJvY2Vzc29yIGZsYWdzICovCisJQVVYX2VudHJ5ID0gOSwJCQkvKiBhLm91dCBlbnRyeSAqLworCUFVWF9zdW5fdWlkID0gMjAwMCwJCS8qIGV1aWQgKi8KKwlBVVhfc3VuX3J1aWQgPSAyMDAxLAkJLyogcnVpZCAqLworCUFVWF9zdW5fZ2lkID0gMjAwMiwJCS8qIGVnaWQgKi8KKwlBVVhfc3VuX3JnaWQgPSAyMDAzCQkvKiByZ2lkICovCit9OworCitzdHJ1Y3QgZWxmX2FyZ3MgeworICAgICAgICB1X2xvbmcgIGFyZ19lbnRyeTsJCS8qIHByb2dyYW0gZW50cnkgcG9pbnQgKi8KKyAgICAgICAgdV9sb25nICBhcmdfaW50ZXJwOwkJLyogSW50ZXJwcmV0ZXIgbG9hZCBhZGRyZXNzICovCisgICAgICAgIHVfbG9uZyAgYXJnX3BoYWRkcjsJCS8qIHByb2dyYW0gaGVhZGVyIGFkZHJlc3MgKi8KKyAgICAgICAgdV9sb25nICBhcmdfcGhlbnRzaXplOwkJLyogU2l6ZSBvZiBwcm9ncmFtIGhlYWRlciAqLworICAgICAgICB1X2xvbmcgIGFyZ19waG51bTsJCS8qIE51bWJlciBvZiBwcm9ncmFtIGhlYWRlcnMgKi8KKyAgICAgICAgdV9sb25nICBhcmdfb3M7CQkJLyogT1MgdGFnICovCit9OworCisjZW5kaWYKKworI2lmICFkZWZpbmVkKEVMRlNJWkUpICYmIGRlZmluZWQoQVJDSF9FTEZTSVpFKQorI2RlZmluZSBFTEZTSVpFIEFSQ0hfRUxGU0laRQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEVMRlNJWkUpCisjZGVmaW5lIENPTkNBVCh4LHkpCV9fQ09OQ0FUKHgseSkKKyNkZWZpbmUgRUxGTkFNRSh4KQlDT05DQVQoZWxmLENPTkNBVChFTEZTSVpFLENPTkNBVChfLHgpKSkKKyNkZWZpbmUgRUxGTkFNRTIoeCx5KQlDT05DQVQoeCxDT05DQVQoX2VsZixDT05DQVQoRUxGU0laRSxDT05DQVQoXyx5KSkpKQorI2RlZmluZSBFTEZOQU1FRU5EKHgpCUNPTkNBVCh4LENPTkNBVChfZWxmLEVMRlNJWkUpKQorI2RlZmluZSBFTEZERUZOTkFNRSh4KQlDT05DQVQoRUxGLENPTkNBVChFTEZTSVpFLENPTkNBVChfLHgpKSkKKyNlbmRpZgorCisjaWYgZGVmaW5lZChFTEZTSVpFKSAmJiAoRUxGU0laRSA9PSAzMikKKyNkZWZpbmUgRWxmX0VoZHIJRWxmMzJfRWhkcgorI2RlZmluZSBFbGZfUGhkcglFbGYzMl9QaGRyCisjZGVmaW5lIEVsZl9TaGRyCUVsZjMyX1NoZHIKKyNkZWZpbmUgRWxmX1N5bQkJRWxmMzJfU3ltCisjZGVmaW5lIEVsZl9SZWwJCUVsZjMyX1JlbAorI2RlZmluZSBFbGZfUmVsQQlFbGYzMl9SZWxhCisjZGVmaW5lIEVsZl9EeW4JCUVsZjMyX0R5bgorI2RlZmluZSBFbGZfSGFsZglFbGYzMl9IYWxmCisjZGVmaW5lIEVsZl9Xb3JkCUVsZjMyX1dvcmQKKyNkZWZpbmUgRWxmX1N3b3JkCUVsZjMyX1N3b3JkCisjZGVmaW5lIEVsZl9BZGRyCUVsZjMyX0FkZHIKKyNkZWZpbmUgRWxmX09mZgkJRWxmMzJfT2ZmCisjZGVmaW5lIEVsZl9OaGRyCUVsZjMyX05oZHIKKyNkZWZpbmUgRWxmX05vdGUJRWxmMzJfTm90ZQorCisjZGVmaW5lIEVMRl9SX1NZTQlFTEYzMl9SX1NZTQorI2RlZmluZSBFTEZfUl9UWVBFCUVMRjMyX1JfVFlQRQorI2RlZmluZSBFTEZfUl9JTkZPCUVMRjMyX1JfSU5GTworI2RlZmluZSBFTEZDTEFTUwlFTEZDTEFTUzMyCisKKyNkZWZpbmUgRUxGX1NUX0JJTkQJRUxGMzJfU1RfQklORAorI2RlZmluZSBFTEZfU1RfVFlQRQlFTEYzMl9TVF9UWVBFCisjZGVmaW5lIEVMRl9TVF9JTkZPCUVMRjMyX1NUX0lORk8KKworI2RlZmluZSBBdXhJbmZvCQlBdXgzMkluZm8KKyNlbGlmIGRlZmluZWQoRUxGU0laRSkgJiYgKEVMRlNJWkUgPT0gNjQpCisjZGVmaW5lIEVsZl9FaGRyCUVsZjY0X0VoZHIKKyNkZWZpbmUgRWxmX1BoZHIJRWxmNjRfUGhkcgorI2RlZmluZSBFbGZfU2hkcglFbGY2NF9TaGRyCisjZGVmaW5lIEVsZl9TeW0JCUVsZjY0X1N5bQorI2RlZmluZSBFbGZfUmVsCQlFbGY2NF9SZWwKKyNkZWZpbmUgRWxmX1JlbEEJRWxmNjRfUmVsYQorI2RlZmluZSBFbGZfRHluCQlFbGY2NF9EeW4KKyNkZWZpbmUgRWxmX0hhbGYJRWxmNjRfSGFsZgorI2RlZmluZSBFbGZfV29yZAlFbGY2NF9Xb3JkCisjZGVmaW5lIEVsZl9Td29yZAlFbGY2NF9Td29yZAorI2RlZmluZSBFbGZfQWRkcglFbGY2NF9BZGRyCisjZGVmaW5lIEVsZl9PZmYJCUVsZjY0X09mZgorI2RlZmluZSBFbGZfTmhkcglFbGY2NF9OaGRyCisjZGVmaW5lIEVsZl9Ob3RlCUVsZjY0X05vdGUKKworI2RlZmluZSBFTEZfUl9TWU0JRUxGNjRfUl9TWU0KKyNkZWZpbmUgRUxGX1JfVFlQRQlFTEY2NF9SX1RZUEUKKyNkZWZpbmUgRUxGX1JfSU5GTwlFTEY2NF9SX0lORk8KKyNkZWZpbmUgRUxGQ0xBU1MJRUxGQ0xBU1M2NAorCisjZGVmaW5lIEVMRl9TVF9CSU5ECUVMRjY0X1NUX0JJTkQKKyNkZWZpbmUgRUxGX1NUX1RZUEUJRUxGNjRfU1RfVFlQRQorI2RlZmluZSBFTEZfU1RfSU5GTwlFTEY2NF9TVF9JTkZPCisKKyNkZWZpbmUgQXV4SW5mbwkJQXV4NjRJbmZvCisjZW5kaWYKKworI2lmbmRlZiBfS0VSTkVMCitleHRlcm4gRWxmX0R5bgkJX0RZTkFNSUNbXTsKKyNlbmRpZgorCisjaWZkZWYJX0tFUk5FTAorI2lmZGVmIF9LRVJOX0RPX0VMRjY0CitpbnQgZXhlY19lbGY2NF9tYWtlY21kcyhzdHJ1Y3QgcHJvYyAqLCBzdHJ1Y3QgZXhlY19wYWNrYWdlICopOwordm9pZCAqZWxmNjRfY29weWFyZ3Moc3RydWN0IGV4ZWNfcGFja2FnZSAqLCBzdHJ1Y3QgcHNfc3RyaW5ncyAqLAorICAgICAgICB2b2lkICosIHZvaWQgKik7CitpbnQgZXhlY19lbGY2NF9maXh1cChzdHJ1Y3QgcHJvYyAqLCBzdHJ1Y3QgZXhlY19wYWNrYWdlICopOworY2hhciAqZWxmNjRfY2hlY2tfYnJhbmQoRWxmNjRfRWhkciAqKTsKK2ludCBlbGY2NF9vc19wdF9ub3RlKHN0cnVjdCBwcm9jICosIHN0cnVjdCBleGVjX3BhY2thZ2UgKiwgRWxmNjRfRWhkciAqLAorCWNoYXIgKiwgc2l6ZV90LCBzaXplX3QpOworI2VuZGlmCisjaWZkZWYgX0tFUk5fRE9fRUxGCitpbnQgZXhlY19lbGYzMl9tYWtlY21kcyhzdHJ1Y3QgcHJvYyAqLCBzdHJ1Y3QgZXhlY19wYWNrYWdlICopOwordm9pZCAqZWxmMzJfY29weWFyZ3Moc3RydWN0IGV4ZWNfcGFja2FnZSAqLCBzdHJ1Y3QgcHNfc3RyaW5ncyAqLAorICAgICAgICB2b2lkICosIHZvaWQgKik7CitpbnQgZXhlY19lbGYzMl9maXh1cChzdHJ1Y3QgcHJvYyAqLCBzdHJ1Y3QgZXhlY19wYWNrYWdlICopOworY2hhciAqZWxmMzJfY2hlY2tfYnJhbmQoRWxmMzJfRWhkciAqKTsKK2ludCBlbGYzMl9vc19wdF9ub3RlKHN0cnVjdCBwcm9jICosIHN0cnVjdCBleGVjX3BhY2thZ2UgKiwgRWxmMzJfRWhkciAqLAorCWNoYXIgKiwgc2l6ZV90LCBzaXplX3QpOworI2VuZGlmCisKKyNlbmRpZiAvKiBfS0VSTkVMICovCisKKyNkZWZpbmUgRUxGX1RBUkdfVkVSCTEJLyogVGhlIHZlciBmb3Igd2hpY2ggdGhpcyBjb2RlIGlzIGludGVuZGVkICovCisKKyNlbmRpZiAvKiBfU1lTX0VYRUNfRUxGX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL2ZpbGUuaCBiL2xpYmMvaW5jbHVkZS9zeXMvZmlsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2OTM3ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvc3lzL2ZpbGUuaApAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9TWVNfRklMRV9IXworI2RlZmluZSBfU1lTX0ZJTEVfSF8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisvLyBBTkRST0lEOiBuZWVkZWQgZm9yIGZsb2NrKCkKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorCisjZW5kaWYgLyogX1NZU19GSUxFX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL2ZzdWlkLmggYi9saWJjL2luY2x1ZGUvc3lzL2ZzdWlkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI1N2JjMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvZnN1aWQuaApAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9TWVNfRlNVSURfSF8KKyNkZWZpbmUgX1NZU19GU1VJRF9IXworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKK19fQkVHSU5fREVDTFMKKworZXh0ZXJuIGludCBzZXRmc3VpZCh1aWRfdCk7CitleHRlcm4gaW50IHNldGZzZ2lkKGdpZF90KTsKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9TWVNfRlNVSURfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvaW5vdGlmeS5oIGIvbGliYy9pbmNsdWRlL3N5cy9pbm90aWZ5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNmOWU3NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvaW5vdGlmeS5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX1NZU19JTk9USUZZX0hfCisjZGVmaW5lIF9TWVNfSU5PVElGWV9IXworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW5vdGlmeS5oPgorCitfX0JFR0lOX0RFQ0xTCisKK2V4dGVybiBpbnQgaW5vdGlmeV9pbml0KHZvaWQpOworZXh0ZXJuIGludCBpbm90aWZ5X2FkZF93YXRjaChpbnQsIGNvbnN0IGNoYXIgKiwgX191MzIpOworZXh0ZXJuIGludCBpbm90aWZ5X3JtX3dhdGNoKGludCwgX191MzIpOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX1NZU19JTk9USUZZX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL2lvY3RsLmggYi9saWJjL2luY2x1ZGUvc3lzL2lvY3RsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY2ODUxMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvaW9jdGwuaApAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9TWVNfSU9DVExfSF8KKyNkZWZpbmUgX1NZU19JT0NUTF9IXworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKyNpbmNsdWRlIDxhc20vaW9jdGxzLmg+CisjaW5jbHVkZSA8YXNtL3Rlcm1iaXRzLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsX2NvbXBhdC5oPgorCitfX0JFR0lOX0RFQ0xTCisKK2V4dGVybiBpbnQgaW9jdGwoaW50LCBpbnQsIC4uLik7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfU1lTX0lPQ1RMX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL2lvY3RsX2NvbXBhdC5oIGIvbGliYy9pbmNsdWRlL3N5cy9pb2N0bF9jb21wYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzliNjdhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3N5cy9pb2N0bF9jb21wYXQuaApAQCAtMCwwICsxLDE2OCBAQAorLyoJJE5ldEJTRDogaW9jdGxfY29tcGF0LmgsdiAxLjE1IDIwMDUvMTIvMDMgMTc6MTA6NDYgY2hyaXN0b3MgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAoYykgVU5JWCBTeXN0ZW0gTGFib3JhdG9yaWVzLCBJbmMuCisgKiBBbGwgb3Igc29tZSBwb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSBtYXRlcmlhbCBsaWNlbnNlZAorICogdG8gdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYSBieSBBbWVyaWNhbiBUZWxlcGhvbmUgYW5kIFRlbGVncmFwaAorICogQ28uIG9yIFVuaXggU3lzdGVtIExhYm9yYXRvcmllcywgSW5jLiBhbmQgYXJlIHJlcHJvZHVjZWQgaGVyZWluIHdpdGgKKyAqIHRoZSBwZXJtaXNzaW9uIG9mIFVOSVggU3lzdGVtIExhYm9yYXRvcmllcywgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglAKCMpaW9jdGxfY29tcGF0LmgJOC40IChCZXJrZWxleSkgMS8yMS85NAorICovCisKKyNpZm5kZWYgX1NZU19JT0NUTF9DT01QQVRfSF8KKyNkZWZpbmUJX1NZU19JT0NUTF9DT01QQVRfSF8KKworLy8jaW5jbHVkZSA8c3lzL3R0eWNoYXJzLmg+CisvLyNpbmNsdWRlIDxzeXMvdHR5ZGV2Lmg+CisKK3N0cnVjdCB0Y2hhcnMgeworCWNoYXIJdF9pbnRyYzsJLyogaW50ZXJydXB0ICovCisJY2hhcgl0X3F1aXRjOwkvKiBxdWl0ICovCisJY2hhcgl0X3N0YXJ0YzsJLyogc3RhcnQgb3V0cHV0ICovCisJY2hhcgl0X3N0b3BjOwkvKiBzdG9wIG91dHB1dCAqLworCWNoYXIJdF9lb2ZjOwkJLyogZW5kLW9mLWZpbGUgKi8KKwljaGFyCXRfYnJrYzsJCS8qIGlucHV0IGRlbGltaXRlciAobGlrZSBubCkgKi8KK307CisKK3N0cnVjdCBsdGNoYXJzIHsKKwljaGFyCXRfc3VzcGM7CS8qIHN0b3AgcHJvY2VzcyBzaWduYWwgKi8KKwljaGFyCXRfZHN1c3BjOwkvKiBkZWxheWVkIHN0b3AgcHJvY2VzcyBzaWduYWwgKi8KKwljaGFyCXRfcnBybnRjOwkvKiByZXByaW50IGxpbmUgKi8KKwljaGFyCXRfZmx1c2hjOwkvKiBmbHVzaCBvdXRwdXQgKHRvZ2dsZXMpICovCisJY2hhcgl0X3dlcmFzYzsJLyogd29yZCBlcmFzZSAqLworCWNoYXIJdF9sbmV4dGM7CS8qIGxpdGVyYWwgbmV4dCBjaGFyYWN0ZXIgKi8KK307CisKKy8qCisgKiBTdHJ1Y3R1cmUgZm9yIFRJT0NHRVRQIGFuZCBUSU9DU0VUUCBpb2N0bHMuCisgKi8KKyNpZm5kZWYgX1NHVFRZQl8KKyNkZWZpbmUJX1NHVFRZQl8KK3N0cnVjdCBzZ3R0eWIgeworCWNoYXIJc2dfaXNwZWVkOwkJLyogaW5wdXQgc3BlZWQgKi8KKwljaGFyCXNnX29zcGVlZDsJCS8qIG91dHB1dCBzcGVlZCAqLworCWNoYXIJc2dfZXJhc2U7CQkvKiBlcmFzZSBjaGFyYWN0ZXIgKi8KKwljaGFyCXNnX2tpbGw7CQkvKiBraWxsIGNoYXJhY3RlciAqLworCXNob3J0CXNnX2ZsYWdzOwkJLyogbW9kZSBmbGFncyAqLworfTsKKyNlbmRpZgorCisjaWZkZWYgVVNFX09MRF9UVFkKKyMgdW5kZWYgIFRJT0NHRVRECisjIGRlZmluZSBUSU9DR0VURAlfSU9SKCd0JywgMCwgaW50KQkvKiBnZXQgbGluZSBkaXNjaXBsaW5lICovCisjIHVuZGVmICBUSU9DU0VURAorIyBkZWZpbmUgVElPQ1NFVEQJX0lPVygndCcsIDEsIGludCkJLyogc2V0IGxpbmUgZGlzY2lwbGluZSAqLworI2Vsc2UKKyMgZGVmaW5lIE9USU9DR0VURAlfSU9SKCd0JywgMCwgaW50KQkvKiBnZXQgbGluZSBkaXNjaXBsaW5lICovCisjIGRlZmluZSBPVElPQ1NFVEQJX0lPVygndCcsIDEsIGludCkJLyogc2V0IGxpbmUgZGlzY2lwbGluZSAqLworI2VuZGlmCisjZGVmaW5lCVRJT0NIUENMCV9JTygndCcsIDIpCQkvKiBoYW5nIHVwIG9uIGxhc3QgY2xvc2UgKi8KKyNkZWZpbmUJVElPQ0dFVFAJX0lPUigndCcsIDgsc3RydWN0IHNndHR5YikvKiBnZXQgcGFyYW1ldGVycyAtLSBndHR5ICovCisjZGVmaW5lCVRJT0NTRVRQCV9JT1coJ3QnLCA5LHN0cnVjdCBzZ3R0eWIpLyogc2V0IHBhcmFtZXRlcnMgLS0gc3R0eSAqLworI2RlZmluZQlUSU9DU0VUTglfSU9XKCd0JywxMCxzdHJ1Y3Qgc2d0dHliKS8qIGFzIGFib3ZlLCBidXQgbm8gZmx1c2h0dHkqLworI2RlZmluZQlUSU9DU0VUQwlfSU9XKCd0JywxNyxzdHJ1Y3QgdGNoYXJzKS8qIHNldCBzcGVjaWFsIGNoYXJhY3RlcnMgKi8KKyNkZWZpbmUJVElPQ0dFVEMJX0lPUigndCcsMTgsc3RydWN0IHRjaGFycykvKiBnZXQgc3BlY2lhbCBjaGFyYWN0ZXJzICovCisjaWYgMAorLyogQlVHOiBhIGJ1bmNoIG9mIHRoZXNlIGNvbmZsaWN0IHdpdGggI2RlZmluZXMgaW4gYXNtL3Rlcm1iaXRzLmggKi8KKyNkZWZpbmUJCVRBTkRFTQkJMHgwMDAwMDAwMQkvKiBzZW5kIHN0b3BjIG9uIG91dCBxIGZ1bGwgKi8KKyNkZWZpbmUJCUNCUkVBSwkJMHgwMDAwMDAwMgkvKiBoYWxmLWNvb2tlZCBtb2RlICovCisjZGVmaW5lCQlMQ0FTRQkJMHgwMDAwMDAwNAkvKiBzaW11bGF0ZSBsb3dlciBjYXNlICovCisjZGVmaW5lCQlFQ0hPCQkweDAwMDAwMDA4CS8qIGVuYWJsZSBlY2hvaW5nICovCisjZGVmaW5lCQlDUk1PRAkJMHgwMDAwMDAxMAkvKiBtYXAgXHIgdG8gXHJcbiBvbiBvdXRwdXQgKi8KKyNkZWZpbmUJCVJBVwkJMHgwMDAwMDAyMAkvKiBubyBpL28gcHJvY2Vzc2luZyAqLworI2RlZmluZQkJT0REUAkJMHgwMDAwMDA0MAkvKiBnZXQvc2VuZCBvZGQgcGFyaXR5ICovCisjZGVmaW5lCQlFVkVOUAkJMHgwMDAwMDA4MAkvKiBnZXQvc2VuZCBldmVuIHBhcml0eSAqLworI2RlZmluZQkJQU5ZUAkJMHgwMDAwMDBjMAkvKiBnZXQgYW55IHBhcml0eS9zZW5kIG5vbmUgKi8KKyNkZWZpbmUJCU5MREVMQVkJCTB4MDAwMDAzMDAJLyogXG4gZGVsYXkgKi8KKyNkZWZpbmUJCQlOTDAJMHgwMDAwMDAwMAorI2RlZmluZQkJCU5MMQkweDAwMDAwMTAwCS8qIHR0eSAzNyAqLworI2RlZmluZQkJCU5MMgkweDAwMDAwMjAwCS8qIHZ0MDUgKi8KKyNkZWZpbmUJCQlOTDMJMHgwMDAwMDMwMAorI2RlZmluZQkJVEJERUxBWQkJMHgwMDAwMGMwMAkvKiBob3Jpem9udGFsIHRhYiBkZWxheSAqLworI2RlZmluZQkJCVRBQjAJMHgwMDAwMDAwMAorI2RlZmluZQkJCVRBQjEJMHgwMDAwMDQwMAkvKiB0dHkgMzcgKi8KKyNkZWZpbmUJCQlUQUIyCTB4MDAwMDA4MDAKKyNkZWZpbmUJCVhUQUJTCQkweDAwMDAwYzAwCS8qIGV4cGFuZCB0YWJzIG9uIG91dHB1dCAqLworI2RlZmluZQkJQ1JERUxBWQkJMHgwMDAwMzAwMAkvKiBcciBkZWxheSAqLworI2RlZmluZQkJCUNSMAkweDAwMDAwMDAwCisjZGVmaW5lCQkJQ1IxCTB4MDAwMDEwMDAJLyogdG4gMzAwICovCisjZGVmaW5lCQkJQ1IyCTB4MDAwMDIwMDAJLyogdHR5IDM3ICovCisjZGVmaW5lCQkJQ1IzCTB4MDAwMDMwMDAJLyogY29uY2VwdCAxMDAgKi8KKyNkZWZpbmUJCVZUREVMQVkJCTB4MDAwMDQwMDAJLyogdmVydGljYWwgdGFiIGRlbGF5ICovCisjZGVmaW5lCQkJRkYwCTB4MDAwMDAwMDAKKyNkZWZpbmUJCQlGRjEJMHgwMDAwNDAwMAkvKiB0dHkgMzcgKi8KKyNkZWZpbmUJCUJTREVMQVkJCTB4MDAwMDgwMDAJLyogXGIgZGVsYXkgKi8KKyNkZWZpbmUJCQlCUzAJMHgwMDAwMDAwMAorI2RlZmluZQkJCUJTMQkweDAwMDA4MDAwCisjZGVmaW5lCQlBTExERUxBWQkoTkxERUxBWXxUQkRFTEFZfENSREVMQVl8VlRERUxBWXxCU0RFTEFZKQorI2RlZmluZQkJQ1JUQlMJCTB4MDAwMTAwMDAJLyogZG8gYmFja3NwYWNpbmcgZm9yIGNydCAqLworI2RlZmluZQkJUFJURVJBCQkweDAwMDIwMDAwCS8qIFwgLi4uIC8gZXJhc2UgKi8KKyNkZWZpbmUJCUNSVEVSQQkJMHgwMDA0MDAwMAkvKiAiIFxiICIgdG8gd2lwZSBvdXQgY2hhciAqLworI2RlZmluZQkJVElMREUJCTB4MDAwODAwMDAJLyogaGF6ZWx0aW5lIHRpbGRlIGtsdWRnZSAqLworI2RlZmluZQkJTURNQlVGCQkweDAwMTAwMDAwCS8qIERUUi9EQ0QgaGFyZHdhcmUgZmxvdyBjb250cm9sICovCisjZGVmaW5lCQlMSVRPVVQJCTB4MDAyMDAwMDAJLyogbGl0ZXJhbCBvdXRwdXQgKi8KKyNkZWZpbmUJCVRPU1RPUAkJMHgwMDQwMDAwMAkvKiBzdG9wIGJhY2tncm91bmQgam9icyBvbiBvdXRwdXQgKi8KKyNkZWZpbmUJCUZMVVNITwkJMHgwMDgwMDAwMAkvKiBvdXRwdXQgYmVpbmcgZmx1c2hlZCAoc3RhdGUpICovCisjZGVmaW5lCQlOT0hBTkcJCTB4MDEwMDAwMDAJLyogKG5vLW9wKSB3YXMgbm8gU0lHSFVQIG9uIGNhcnJpZXIgZHJvcCAqLworI2RlZmluZQkJTDAwMTAwMAkJMHgwMjAwMDAwMAorI2RlZmluZQkJQ1JUS0lMCQkweDA0MDAwMDAwCS8qIGtpbGwgbGluZSB3aXRoICIgXGIgIiAqLworI2RlZmluZQkJUEFTUzgJCTB4MDgwMDAwMDAKKyNkZWZpbmUJCUNUTEVDSAkJMHgxMDAwMDAwMAkvKiBlY2hvIGNvbnRyb2wgY2hhcnMgYXMgXlggKi8KKyNkZWZpbmUJCVBFTkRJTgkJMHgyMDAwMDAwMAkvKiByZS1lY2hvIGlucHV0IGJ1ZmZlciBhdCBuZXh0IHJlYWQgKi8KKyNkZWZpbmUJCURFQ0NUUQkJMHg0MDAwMDAwMAkvKiBvbmx5IF5RIHN0YXJ0cyBhZnRlciBeUyAqLworI2RlZmluZQkJTk9GTFNICQkweDgwMDAwMDAwCS8qIGRvbid0IGZsdXNoIG91dHB1dCBvbiBzaWduYWwgKi8KKyNlbmRpZgorI2RlZmluZQlUSU9DTEJJUwlfSU9XKCd0JywgMTI3LCBpbnQpCS8qIGJpcyBsb2NhbCBtb2RlIGJpdHMgKi8KKyNkZWZpbmUJVElPQ0xCSUMJX0lPVygndCcsIDEyNiwgaW50KQkvKiBiaWMgbG9jYWwgbW9kZSBiaXRzICovCisjZGVmaW5lCVRJT0NMU0VUCV9JT1coJ3QnLCAxMjUsIGludCkJLyogc2V0IGVudGlyZSBsb2NhbCBtb2RlIHdvcmQgKi8KKyNkZWZpbmUJVElPQ0xHRVQJX0lPUigndCcsIDEyNCwgaW50KQkvKiBnZXQgbG9jYWwgbW9kZXMgKi8KKyNkZWZpbmUJCUxDUlRCUwkJKENSVEJTPj4xNikKKyNkZWZpbmUJCUxQUlRFUkEJCShQUlRFUkE+PjE2KQorI2RlZmluZQkJTENSVEVSQQkJKENSVEVSQT4+MTYpCisjZGVmaW5lCQlMVElMREUJCShUSUxERT4+MTYpCisjZGVmaW5lCQlMTURNQlVGCQkoTURNQlVGPj4xNikKKyNkZWZpbmUJCUxMSVRPVVQJCShMSVRPVVQ+PjE2KQorI2RlZmluZQkJTFRPU1RPUAkJKFRPU1RPUD4+MTYpCisjZGVmaW5lCQlMRkxVU0hPCQkoRkxVU0hPPj4xNikKKyNkZWZpbmUJCUxOT0hBTkcJCShOT0hBTkc+PjE2KQorI2RlZmluZQkJTENSVEtJTAkJKENSVEtJTD4+MTYpCisjZGVmaW5lCQlMUEFTUzgJCShQQVNTOD4+MTYpCisjZGVmaW5lCQlMQ1RMRUNICQkoQ1RMRUNIPj4xNikKKyNkZWZpbmUJCUxQRU5ESU4JCShQRU5ESU4+PjE2KQorI2RlZmluZQkJTERFQ0NUUQkJKERFQ0NUUT4+MTYpCisjZGVmaW5lCQlMTk9GTFNICQkoTk9GTFNIPj4xNikKKyNkZWZpbmUJVElPQ1NMVEMJX0lPVygndCcsMTE3LHN0cnVjdCBsdGNoYXJzKS8qIHNldCBsb2NhbCBzcGVjaWFsIGNoYXJzKi8KKyNkZWZpbmUJVElPQ0dMVEMJX0lPUigndCcsMTE2LHN0cnVjdCBsdGNoYXJzKS8qIGdldCBsb2NhbCBzcGVjaWFsIGNoYXJzKi8KKyNkZWZpbmUgT1RJT0NDT05TCV9JTygndCcsIDk4KQkvKiBmb3IgaHAzMDAgLS0gc2FucyBpbnQgYXJnICovCisjZGVmaW5lCU9UVFlESVNDCTAKKyNkZWZpbmUJTkVUTERJU0MJMQorI2RlZmluZQlOVFRZRElTQwkyCisKKyNlbmRpZiAvKiAhX1NZU19JT0NUTF9DT01QQVRfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvaXBjLmggYi9saWJjL2luY2x1ZGUvc3lzL2lwYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwYWUwYmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvc3lzL2lwYy5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX1NZU19JUENfSAorI2RlZmluZSBfU1lTX0lQQ19ICisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pcGMuaD4KKworX19CRUdJTl9ERUNMUworCitleHRlcm4ga2V5X3QgIGZ0b2soY29uc3QgY2hhciogIHBhdGgsIGludCAgaWQpOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX1NZU19JUENfSCAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy9rbG9nLmggYi9saWJjL2luY2x1ZGUvc3lzL2tsb2cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWJiN2Q5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3N5cy9rbG9nLmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfU1lTX0tMT0dfSF8KKyNkZWZpbmUgX1NZU19LTE9HX0hfCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKworX19CRUdJTl9ERUNMUworCisjZGVmaW5lIEtMT0dfQ0xPU0UgICAgICAwCisjZGVmaW5lIEtMT0dfT1BFTiAgICAgICAxCisjZGVmaW5lIEtMT0dfUkVBRCAgICAgICAyCisjZGVmaW5lIEtMT0dfUkVBRF9BTEwgICAzCisjZGVmaW5lIEtMT0dfUkVBRF9DTEVBUiA0CisjZGVmaW5lIEtMT0dfQ0xFQVIgICAgICA1CisjZGVmaW5lIEtMT0dfRElTQUJMRSAgICA2CisjZGVmaW5lIEtMT0dfRU5BQkxFICAgICA3CisjZGVmaW5lIEtMT0dfU0VUTEVWRUwgICA4CisjZGVmaW5lIEtMT0dfVU5SRUFEU0laRSA5CisjZGVmaW5lIEtMT0dfV1JJVEUgICAgICAxMAorCitleHRlcm4gaW50IGtsb2djdGwoaW50LCBjaGFyICosIGludCk7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfU1lTX0tMT0dfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvbGltaXRzLmggYi9saWJjL2luY2x1ZGUvc3lzL2xpbWl0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxZDAyZmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvc3lzL2xpbWl0cy5oCkBAIC0wLDAgKzEsMTc5IEBACisvKiAkT3BlbkJTRDogbGltaXRzLmgsdiAxLjYgMjAwNS8xMi8xMyAwMDozNToyMyBtaWxsZXJ0IEV4cCAkICovCisvKgorICogQ29weXJpZ2h0IChjKSAyMDAyIE1hcmMgRXNwaWUuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT1BFTkJTRCBQUk9KRUNUIEFORCBDT05UUklCVVRPUlMKKyAqIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT1BFTkJTRAorICogUFJPSkVDVCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX1NZU19MSU1JVFNfSF8KKyNkZWZpbmUgX1NZU19MSU1JVFNfSF8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbWl0cy5oPgorCisvKiBDb21tb24gZGVmaW5pdGlvbnMgZm9yIGxpbWl0cy5oLiAqLworCisvKgorICogPG1hY2hpbmUvaW50ZXJuYWxfdHlwZXMuaD4gaXMgbWVhbnQgdG8gZGVzY3JpYmUgYSBzcGVjaWZpYyBhcmNoaXRlY3R1cmUsCisgKiBidXQgdG8gYmUgYSBzYWZlIGluY2x1ZGUsIHRoYXQgZG9lc24ndCBldmVyIGRlZmluZSBhbnl0aGluZyB0aGF0IGlzCisgKiB1c2VyLXZpc2libGUgKG9ubHkgdHlwZWRlZnMgYW5kICNkZWZpbmUgbmFtZXMgdGhhdCBzdGF5cyBpbiB0aGUgX194eHgKKyAqIG5hbWVzcGFjZSkuCisgKgorICogICBfX21hY2hpbmVfaGFzX3Vuc2lnbmVkX2NoYXJzCShkZWZhdWx0IGlzIHNpZ25lZCBjaGFycykKKyAqICAgX19GTFRfeHh4L19fREJMX3h4eAkJbm9uIHN0YW5kYXJkIHZhbHVlcyBmb3IgZmxvYXRpbmcKKyAqICAgCQkJCQlwb2ludHMgbGltaXRzLgorICovCisjaW5jbHVkZSA8bWFjaGluZS9pbnRlcm5hbF90eXBlcy5oPgorCisvKiBMZWdhY3kgKi8KKyNpbmNsdWRlIDxtYWNoaW5lL2xpbWl0cy5oPgorCisjZGVmaW5lCUNIQVJfQklUCTgJCS8qIG51bWJlciBvZiBiaXRzIGluIGEgY2hhciAqLworCisjZGVmaW5lCVNDSEFSX01BWAkweDdmCQkvKiBtYXggdmFsdWUgZm9yIGEgc2lnbmVkIGNoYXIgKi8KKyNkZWZpbmUgU0NIQVJfTUlOCSgtMHg3Zi0xKQkvKiBtaW4gdmFsdWUgZm9yIGEgc2lnbmVkIGNoYXIgKi8KKworI2RlZmluZQlVQ0hBUl9NQVgJMHhmZlUJCS8qIG1heCB2YWx1ZSBmb3IgYW4gdW5zaWduZWQgY2hhciAqLworI2lmZGVmIF9fbWFjaGluZV9oYXNfdW5zaWduZWRfY2hhcnMKKyMgZGVmaW5lIENIQVJfTUlOCTAJCS8qIG1pbiB2YWx1ZSBmb3IgYSBjaGFyICovCisjIGRlZmluZSBDSEFSX01BWAkweGZmCQkvKiBtYXggdmFsdWUgZm9yIGEgY2hhciAqLworI2Vsc2UKKyMgZGVmaW5lIENIQVJfTUFYCTB4N2YKKyMgZGVmaW5lIENIQVJfTUlOCSgtMHg3Zi0xKQorI2VuZGlmCisKKyNkZWZpbmUJVVNIUlRfTUFYCTB4ZmZmZlUJCS8qIG1heCB2YWx1ZSBmb3IgYW4gdW5zaWduZWQgc2hvcnQgKi8KKyNkZWZpbmUJU0hSVF9NQVgJMHg3ZmZmCQkvKiBtYXggdmFsdWUgZm9yIGEgc2hvcnQgKi8KKyNkZWZpbmUgU0hSVF9NSU4gICAgICAgICgtMHg3ZmZmLTEpICAgICAvKiBtaW4gdmFsdWUgZm9yIGEgc2hvcnQgKi8KKworI2RlZmluZQlVSU5UX01BWAkweGZmZmZmZmZmVQkvKiBtYXggdmFsdWUgZm9yIGFuIHVuc2lnbmVkIGludCAqLworI2RlZmluZQlJTlRfTUFYCQkweDdmZmZmZmZmCS8qIG1heCB2YWx1ZSBmb3IgYW4gaW50ICovCisjZGVmaW5lCUlOVF9NSU4JCSgtMHg3ZmZmZmZmZi0xKQkvKiBtaW4gdmFsdWUgZm9yIGFuIGludCAqLworCisjaWZkZWYgX19MUDY0X18KKyMgZGVmaW5lIFVMT05HX01BWAkweGZmZmZmZmZmZmZmZmZmZmZVTAorCQkJCQkvKiBtYXggdmFsdWUgZm9yIHVuc2lnbmVkIGxvbmcgKi8KKyMgZGVmaW5lIExPTkdfTUFYCTB4N2ZmZmZmZmZmZmZmZmZmZkwKKwkJCQkJLyogbWF4IHZhbHVlIGZvciBhIHNpZ25lZCBsb25nICovCisjIGRlZmluZSBMT05HX01JTgkoLTB4N2ZmZmZmZmZmZmZmZmZmZkwtMSkKKwkJCQkJLyogbWluIHZhbHVlIGZvciBhIHNpZ25lZCBsb25nICovCisjZWxzZQorIyBkZWZpbmUgVUxPTkdfTUFYCTB4ZmZmZmZmZmZVTAkvKiBtYXggdmFsdWUgZm9yIGFuIHVuc2lnbmVkIGxvbmcgKi8KKyMgZGVmaW5lIExPTkdfTUFYCTB4N2ZmZmZmZmZMCS8qIG1heCB2YWx1ZSBmb3IgYSBsb25nICovCisjIGRlZmluZSBMT05HX01JTgkoLTB4N2ZmZmZmZmZMLTEpLyogbWluIHZhbHVlIGZvciBhIGxvbmcgKi8KKyNlbmRpZgorCisjaWYgX19CU0RfVklTSUJMRSB8fCBfX0lTT19DX1ZJU0lCTEUgPj0gMTk5OQorIyBkZWZpbmUgVUxMT05HX01BWAkweGZmZmZmZmZmZmZmZmZmZmZVTEwKKwkJCQkJLyogbWF4IHZhbHVlIGZvciB1bnNpZ25lZCBsb25nIGxvbmcgKi8KKyMgZGVmaW5lIExMT05HX01BWAkweDdmZmZmZmZmZmZmZmZmZmZMTAorCQkJCQkvKiBtYXggdmFsdWUgZm9yIGEgc2lnbmVkIGxvbmcgbG9uZyAqLworIyBkZWZpbmUgTExPTkdfTUlOCSgtMHg3ZmZmZmZmZmZmZmZmZmZmTEwtMSkKKwkJCQkJLyogbWluIHZhbHVlIGZvciBhIHNpZ25lZCBsb25nIGxvbmcgKi8KKyNlbmRpZgorCisjaWYgX19CU0RfVklTSUJMRQorIyBkZWZpbmUgVUlEX01BWAlVSU5UX01BWAkvKiBtYXggdmFsdWUgZm9yIGEgdWlkX3QgKi8KKyMgZGVmaW5lIEdJRF9NQVgJVUlOVF9NQVgJLyogbWF4IHZhbHVlIGZvciBhIGdpZF90ICovCisjZW5kaWYKKworCisjaWZkZWYgX19MUDY0X18KKyMgZGVmaW5lIExPTkdfQklUCTY0CisjZWxzZQorIyBkZWZpbmUgTE9OR19CSVQJMzIKKyNlbmRpZgorCisvKiBmbG9hdC5oIGRlZmluZXMgdGhlc2UgYXMgd2VsbCAqLworIyBpZiAhZGVmaW5lZChEQkxfRElHKQorIyAgaWYgZGVmaW5lZChfX0RCTF9ESUcpCisjICAgZGVmaW5lIERCTF9ESUcJX19EQkxfRElHCisjICAgZGVmaW5lIERCTF9NQVgJX19EQkxfTUFYCisjICAgZGVmaW5lIERCTF9NSU4JX19EQkxfTUlOCisKKyMgICBkZWZpbmUgRkxUX0RJRwlfX0ZMVF9ESUcKKyMgICBkZWZpbmUgRkxUX01BWAlfX0ZMVF9NQVgKKyMgICBkZWZpbmUgRkxUX01JTglfX0ZMVF9NSU4KKyMgIGVsc2UKKyMgICBkZWZpbmUgREJMX0RJRwkxNQorIyAgIGRlZmluZSBEQkxfTUFYCTEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4CisjICAgZGVmaW5lIERCTF9NSU4JMi4yMjUwNzM4NTg1MDcyMDE0RS0zMDgKKworIyAgIGRlZmluZSBGTFRfRElHCTYKKyMgICBkZWZpbmUgRkxUX01BWAkzLjQwMjgyMzQ3RSszOEYKKyMgICBkZWZpbmUgRkxUX01JTgkxLjE3NTQ5NDM1RS0zOEYKKyMgIGVuZGlmCisjIGVuZGlmCisKKy8qIEJpb25pYzogdGhlIGZvbGxvd2luZyBoYXMgYmVlbiBvcHRpbWl6ZWQgb3V0IGZyb20gb3VyIHByb2Nlc3NlZCBrZXJuZWwgaGVhZGVycyAqLworCisjZGVmaW5lICBDSElMRF9NQVggICA5OTkKKyNkZWZpbmUgIE9QRU5fTUFYICAgIDI1NgorCisvKiBCaW9uaWMtc3BlY2lmaWMgZGVmaW5pdGlvbnMgKi8KKworI2RlZmluZSAgX1BPU0lYX1ZFUlNJT04gICAgICAgICAgICAgMjAwMTEyTCAgIC8qIFBvc2l4IEMgbGFuZ3VhZ2UgYmluZGluZ3MgdmVyc2lvbiAqLworI2RlZmluZSAgX1BPU0lYMl9WRVJTSU9OICAgICAgICAgICAgLTEgICAgICAgIC8qIHdlIGRvbid0IHN1cHBvcnQgUG9zaXggY29tbWFuZC1saW5lIHRvb2xzICovCisjZGVmaW5lICBfUE9TSVgyX0NfVkVSU0lPTiAgICAgICAgICBfUE9TSVhfVkVSU0lPTgorI2RlZmluZSAgX1hPUEVOX1ZFUlNJT04gICAgICAgICAgICAgNTAwICAgICAgIC8qIGJ5IFBvc2l4IGRlZmluaXRpb24gKi8KKyNkZWZpbmUgIF9YT1BFTl9YQ1VfVkVSU0lPTiAgICAgICAgIC0xICAgICAgICAvKiB3ZSBkb24ndCBzdXBwb3J0IGNvbW1hbmQtbGluZSB1dGlsaXRpZXMgKi8KKworLyogdGVsbCB3aGF0IHdlIGltcGxlbWVudCBsZWdhY3kgc3R1ZmYgd2hlbiBhcHByb3ByaWF0ZSAqLworI2lmIF9QT1NJWF9WRVJTSU9OID4gMAorI2RlZmluZSAgX1hPUEVOX1hQRzIgICAgICAgICAgICAgICAgMQorI2RlZmluZSAgX1hPUEVOX1hQRzMgICAgICAgICAgICAgICAgMQorI2RlZmluZSAgX1hPUEVOX1hQRzQgICAgICAgICAgICAgICAgMQorI2RlZmluZSAgX1hPUEVOX1VOSVggICAgICAgICAgICAgICAgMQorI2VuZGlmCisKKyNkZWZpbmUgIF9YT1BFTl9FTkhfSTE4TiAgICAgICAgICAtMSAgLyogd2UgZG9uJ3Qgc3VwcG9ydCBpbnRlcm5hdGlvbmFsaXphdGlvbiBpbiB0aGUgQyBsaWJyYXJ5ICovCisjZGVmaW5lICBfWE9QRU5fQ1JZUFQgICAgICAgICAgICAgLTEgIC8qIGRvbid0IHN1cHBvcnQgWC9PcGVuIEVuY3J5cHRpb24gKi8KKyNkZWZpbmUgIF9YT1BFTl9MRUdBQ1kgICAgICAgICAgICAtMSAgLyogZG9uJ3QgY2xhaW0gd2Ugc3VwcG9ydCB0aGVzZSwgd2UgaGF2ZSBzb21lIG9mIHRoZW0gYnV0IG5vdCBhbGwgKi8KKyNkZWZpbmUgIF9YT1BFTl9SRUFMVElNRSAgICAgICAgICAtMSAvKiB3ZSBkb24ndCBzdXBwb3J0IGFsbCB0aGVzZSBmdW5jdGlvbnMgKi8KKyNkZWZpbmUgIF9YT1BFTl9SRUFMVElNRV9USFJFQURTICAtMSAgLyogc2FtZSBoZXJlICovCisKKyNkZWZpbmUgIF9QT1NJWF9SRUFMVElNRV9TSUdOQUxTICAgIC0xICAvKiBmb3Igbm93LCB0aGlzIGlzIG5vdCBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUgIF9QT1NJWF9QUklPUklUWV9TQ0hFRFVMSU5HICAxICAvKiBwcmlvcml0eSBzY2hlZHVsaW5nIGlzIGEgTGludXggZmVhdHVyZSAqLworI2RlZmluZSAgX1BPU0lYX1RJTUVSUyAgICAgICAgICAgICAgIDEgIC8qIFBvc2l4IHRpbWVycyBhcmUgc3VwcG9ydGVkICovCisjdW5kZWYgICBfUE9TSVhfQVNZTkNIUk9OT1VTX0lPICAgICAgICAgLyogYWlvXyBmdW5jdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUgIF9QT1NJWF9TWU5DSFJPTklaRURfSU8gICAgICAxICAvKiBzeW5jaHJvbml6ZWQgaS9vIHN1cHBvcnRlZCAqLworI2RlZmluZSAgX1BPU0lYX0ZTWU5DICAgICAgICAgICAgICAgIDEgIC8qIGZkYXRhc3luYygpIHN1cHBvcnRlZCAqLworI2RlZmluZSAgX1BPU0lYX01BUFBFRF9GSUxFUyAgICAgICAgIDEgIC8qIG1tYXAtZWQgZmlsZXMgc3VwcG9ydGVkICovCisKKy8qIFhYWDogVE9ETzogY29tcGxldGUgYW5kIGNoZWNrIGxpc3QgaGVyZSAqLworCisKKyNkZWZpbmUgIF9QT1NJWF9USFJFQURTICAgICAgICAgICAgIDEgICAgLyogd2Ugc3VwcG9ydCB0aHJlYWRzICovCisjZGVmaW5lICBfUE9TSVhfVEhSRUFEX1NUQUNLQUREUiAgICAxICAgIC8qIHdlIHN1cHBvcnQgdGhyZWFkIHN0YWNrIGFkZHJlc3MgKi8KKyNkZWZpbmUgIF9QT1NJWF9USFJFQURfU1RBQ0tTSVpFICAgIDEgICAgLyogd2Ugc3VwcG9ydCB0aHJlYWQgc3RhY2sgc2l6ZSAqLworI2RlZmluZSAgX1BPU0lYX1RIUkVBRF9QUklPX0lOSEVSSVQgMjAwMTEyTCAgIC8qIGxpbnV4IGZlYXR1cmUgKi8KKyNkZWZpbmUgIF9QT1NJWF9USFJFQURfUFJJT19QUk9URUNUIDIwMDExMkwgICAvKiBsaW51eCBmZWF0dXJlICovCisKKyN1bmRlZiAgIF9QT1NJWF9QUk9DRVNTX1NIQVJFRCAgICAgICAgICAgLyogd2UgZG9uJ3Qgc3VwcG9ydCBwcm9jZXNzLXNoYXJlZCBzeW5jaHJvbml6YXRpb24gKi8KKyN1bmRlZiAgIF9QT1NJWF9USFJFQURfU0FGRV9GVU5DVElPTlMgICAgLyogbW9zdCBmdW5jdGlvbnMgYXJlLCBidXQgbm90IGV2ZXJ5dGhpbmcgeWV0ICovCisjZGVmaW5lICBfUE9TSVhfQ0hPV05fUkVTVFJJQ1RFRCAgICAxICAgIC8qIHllcywgY2hvd24gcmVxdWlyZXMgYXBwcm9wcmlhdGUgcHJpdmlsZWRnZXMgKi8KKyNkZWZpbmUgIF9QT1NJWF9OT19UUlVOQyAgICAgICAgICAgIDEgICAgLyogdmVyeSBsb25nIHBhdGhuYW1lcyBnZW5lcmF0ZSBhbiBlcnJvciAqLworI2RlZmluZSAgX1BPU0lYX1NBVkVEX0lEUyAgICAgICAgICAgMSAgICAvKiBzYXZlZCB1c2VyIGlkcyBpcyBhIExpbnV4IGZlYXR1cmUgKi8KKyNkZWZpbmUgIF9QT1NJWF9KT0JfQ09OVFJPTCAgICAgICAgIDEgICAgLyogam9iIGNvbnRyb2wgaXMgYSBMaW51eCBmZWF0dXJlICovCisKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvbGludXgtc3lzY2FsbHMuaCBiL2xpYmMvaW5jbHVkZS9zeXMvbGludXgtc3lzY2FsbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzcyZjFlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3N5cy9saW51eC1zeXNjYWxscy5oCkBAIC0wLDAgKzEsMjIzIEBACisvKiBhdXRvLWdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSwgZG8gbm90IHRvdWNoICovCisjaWZuZGVmIF9CSU9OSUNfTElOVVhfU1lTQ0FMTFNfSF8KKworI2lmICFkZWZpbmVkIF9fQVNNX0FSTV9VTklTVERfSCAmJiAhZGVmaW5lZCBfX0FTTV9JMzg2X1VOSVNURF9ICisjaWYgZGVmaW5lZCBfX2FybV9fICYmICFkZWZpbmVkIF9fQVJNX0VBQklfXyAmJiAhZGVmaW5lZCBfX3RodW1iX18KKyAgIyAgZGVmaW5lIF9fTlJfU1lTQ0FMTF9CQVNFICAweDkwMDAwMAorICAjZWxzZQorICAjICBkZWZpbmUgIF9fTlJfU1lTQ0FMTF9CQVNFICAwCisgICNlbmRpZgorCisjZGVmaW5lIF9fTlJfZXhpdCAgICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxKQorI2RlZmluZSBfX05SX2ZvcmsgICAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMikKKyNkZWZpbmUgX19OUl9jbG9uZSAgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDEyMCkKKyNkZWZpbmUgX19OUl9leGVjdmUgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDExKQorI2RlZmluZSBfX05SX3NldHVpZDMyICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjEzKQorI2RlZmluZSBfX05SX2dldHVpZDMyICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMTk5KQorI2RlZmluZSBfX05SX2dldGdpZDMyICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjAwKQorI2RlZmluZSBfX05SX2dldGV1aWQzMiAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjAxKQorI2RlZmluZSBfX05SX2dldGVnaWQzMiAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjAyKQorI2RlZmluZSBfX05SX2dldHJlc3VpZDMyICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjA5KQorI2RlZmluZSBfX05SX2dldHJlc2dpZDMyICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjExKQorI2RlZmluZSBfX05SX2dldHRpZCAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjI0KQorI2RlZmluZSBfX05SX2dldGdyb3VwczMyICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjA1KQorI2RlZmluZSBfX05SX2dldHBnaWQgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMTMyKQorI2RlZmluZSBfX05SX2dldHBwaWQgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgNjQpCisjZGVmaW5lIF9fTlJfc2V0c2lkICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyA2NikKKyNkZWZpbmUgX19OUl9zZXRnaWQzMiAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDIxNCkKKyNkZWZpbmUgX19OUl9zZXRyZXVpZDMyICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDIwMykKKyNkZWZpbmUgX19OUl9zZXRyZXN1aWQzMiAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDIwOCkKKyNkZWZpbmUgX19OUl9zZXRyZXNnaWQzMiAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDIxMCkKKyNkZWZpbmUgX19OUl9icmsgICAgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDQ1KQorI2RlZmluZSBfX05SX3B0cmFjZSAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjYpCisjZGVmaW5lIF9fTlJfZ2V0cHJpb3JpdHkgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyA5NikKKyNkZWZpbmUgX19OUl9zZXRwcmlvcml0eSAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDk3KQorI2RlZmluZSBfX05SX3NldHJsaW1pdCAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgNzUpCisjZGVmaW5lIF9fTlJfdWdldHJsaW1pdCAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxOTEpCisjZGVmaW5lIF9fTlJfZ2V0cnVzYWdlICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyA3NykKKyNkZWZpbmUgX19OUl9zZXRncm91cHMzMiAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDIwNikKKyNkZWZpbmUgX19OUl9zZXRwZ2lkICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDU3KQorI2RlZmluZSBfX05SX3NldHJlZ2lkMzIgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjA0KQorI2RlZmluZSBfX05SX2Nocm9vdCAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgNjEpCisjZGVmaW5lIF9fTlJfcHJjdGwgICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNzIpCisjZGVmaW5lIF9fTlJfY2FwZ2V0ICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxODQpCisjZGVmaW5lIF9fTlJfY2Fwc2V0ICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxODUpCisjZGVmaW5lIF9fTlJfYWNjdCAgICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyA1MSkKKyNkZWZpbmUgX19OUl9yZWFkICAgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDMpCisjZGVmaW5lIF9fTlJfd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyA0KQorI2RlZmluZSBfX05SX3ByZWFkNjQgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMTgwKQorI2RlZmluZSBfX05SX3B3cml0ZTY0ICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMTgxKQorI2RlZmluZSBfX05SX29wZW4gICAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgNSkKKyNkZWZpbmUgX19OUl9jbG9zZSAgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDYpCisjZGVmaW5lIF9fTlJfbHNlZWsgICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxOSkKKyNkZWZpbmUgX19OUl9fbGxzZWVrICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDE0MCkKKyNkZWZpbmUgX19OUl9nZXRwaWQgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDIwKQorI2RlZmluZSBfX05SX21tYXAyICAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMTkyKQorI2RlZmluZSBfX05SX211bm1hcCAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgOTEpCisjZGVmaW5lIF9fTlJfbXJlbWFwICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNjMpCisjZGVmaW5lIF9fTlJfbXN5bmMgICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNDQpCisjZGVmaW5lIF9fTlJfbXByb3RlY3QgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxMjUpCisjZGVmaW5lIF9fTlJfbWxvY2sgICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNTApCisjZGVmaW5lIF9fTlJfbXVubG9jayAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNTEpCisjZGVmaW5lIF9fTlJfaW9jdGwgICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyA1NCkKKyNkZWZpbmUgX19OUl9yZWFkdiAgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDE0NSkKKyNkZWZpbmUgX19OUl93cml0ZXYgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDE0NikKKyNkZWZpbmUgX19OUl9mY250bCAgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDU1KQorI2RlZmluZSBfX05SX2Zsb2NrICAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMTQzKQorI2RlZmluZSBfX05SX2ZjaG1vZCAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgOTQpCisjZGVmaW5lIF9fTlJfZHVwICAgICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyA0MSkKKyNkZWZpbmUgX19OUl9waXBlICAgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDQyKQorI2RlZmluZSBfX05SX2R1cDIgICAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgNjMpCisjZGVmaW5lIF9fTlJfX25ld3NlbGVjdCAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNDIpCisjZGVmaW5lIF9fTlJfZnRydW5jYXRlICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyA5MykKKyNkZWZpbmUgX19OUl9mc3luYyAgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDExOCkKKyNkZWZpbmUgX19OUl9mY2hvd24zMiAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDIwNykKKyNkZWZpbmUgX19OUl9zeW5jICAgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDM2KQorI2RlZmluZSBfX05SX2ZjbnRsNjQgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjIxKQorI2RlZmluZSBfX05SX3NlbmRmaWxlICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMTg3KQorI2RlZmluZSBfX05SX2xpbmsgICAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgOSkKKyNkZWZpbmUgX19OUl91bmxpbmsgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDEwKQorI2RlZmluZSBfX05SX2NoZGlyICAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMTIpCisjZGVmaW5lIF9fTlJfbWtub2QgICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNCkKKyNkZWZpbmUgX19OUl9jaG1vZCAgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDE1KQorI2RlZmluZSBfX05SX2Nob3duMzIgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjEyKQorI2RlZmluZSBfX05SX2xjaG93bjMyICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMTk4KQorI2RlZmluZSBfX05SX21vdW50ICAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjEpCisjZGVmaW5lIF9fTlJfdW1vdW50MiAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyA1MikKKyNkZWZpbmUgX19OUl9mc3RhdDY0ICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDE5NykKKyNkZWZpbmUgX19OUl9zdGF0NjQgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDE5NSkKKyNkZWZpbmUgX19OUl9sc3RhdDY0ICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDE5NikKKyNkZWZpbmUgX19OUl9ta2RpciAgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDM5KQorI2RlZmluZSBfX05SX3JlYWRsaW5rICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgODUpCisjZGVmaW5lIF9fTlJfcm1kaXIgICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyA0MCkKKyNkZWZpbmUgX19OUl9yZW5hbWUgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDM4KQorI2RlZmluZSBfX05SX2dldGN3ZCAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMTgzKQorI2RlZmluZSBfX05SX2FjY2VzcyAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMzMpCisjZGVmaW5lIF9fTlJfc3ltbGluayAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyA4MykKKyNkZWZpbmUgX19OUl9mY2hkaXIgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDEzMykKKyNkZWZpbmUgX19OUl90cnVuY2F0ZSAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDkyKQorI2RlZmluZSBfX05SX3BhdXNlICAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjkpCisjZGVmaW5lIF9fTlJfZ2V0dGltZW9mZGF5ICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyA3OCkKKyNkZWZpbmUgX19OUl9zZXR0aW1lb2ZkYXkgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDc5KQorI2RlZmluZSBfX05SX3RpbWVzICAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgNDMpCisjZGVmaW5lIF9fTlJfbmFub3NsZWVwICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNjIpCisjZGVmaW5lIF9fTlJfZ2V0aXRpbWVyICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxMDUpCisjZGVmaW5lIF9fTlJfc2V0aXRpbWVyICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxMDQpCisjZGVmaW5lIF9fTlJfc2lnYWN0aW9uICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyA2NykKKyNkZWZpbmUgX19OUl9zaWdwcm9jbWFzayAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDEyNikKKyNkZWZpbmUgX19OUl9zaWdzdXNwZW5kICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDcyKQorI2RlZmluZSBfX05SX3J0X3NpZ2FjdGlvbiAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMTc0KQorI2RlZmluZSBfX05SX3J0X3NpZ3Byb2NtYXNrICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMTc1KQorI2RlZmluZSBfX05SX3J0X3NpZ3RpbWVkd2FpdCAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMTc3KQorI2RlZmluZSBfX05SX3NpZ3BlbmRpbmcgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgNzMpCisjZGVmaW5lIF9fTlJfc2NoZWRfc2V0c2NoZWR1bGVyICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNTYpCisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0c2NoZWR1bGVyICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNTcpCisjZGVmaW5lIF9fTlJfc2NoZWRfeWllbGQgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNTgpCisjZGVmaW5lIF9fTlJfc2NoZWRfc2V0cGFyYW0gICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNTQpCisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0cGFyYW0gICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNTUpCisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21heCAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNTkpCisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNjApCisjZGVmaW5lIF9fTlJfc2NoZWRfcnJfZ2V0X2ludGVydmFsICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNjEpCisjZGVmaW5lIF9fTlJfdW5hbWUgICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxMjIpCisjZGVmaW5lIF9fTlJfd2FpdDQgICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxMTQpCisjZGVmaW5lIF9fTlJfdW1hc2sgICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyA2MCkKKyNkZWZpbmUgX19OUl9yZWJvb3QgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDg4KQorI2RlZmluZSBfX05SX3N5c2xvZyAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMTAzKQorI2RlZmluZSBfX05SX2luaXRfbW9kdWxlICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMTI4KQorI2RlZmluZSBfX05SX2RlbGV0ZV9tb2R1bGUgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMTI5KQorI2RlZmluZSBfX05SX3N5c2xvZyAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMTAzKQorI2RlZmluZSBfX05SX2Z1dGV4ICAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjQwKQorI2RlZmluZSBfX05SX3BvbGwgICAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMTY4KQorCisjaWZkZWYgX19hcm1fXworI2RlZmluZSBfX05SX2V4aXRfZ3JvdXAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjQ4KQorI2RlZmluZSBfX05SX3dhaXRpZCAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjgwKQorI2RlZmluZSBfX05SX3Zmb3JrICAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMTkwKQorI2RlZmluZSBfX05SX29wZW5hdCAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMzIyKQorI2RlZmluZSBfX05SX21hZHZpc2UgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjIwKQorI2RlZmluZSBfX05SX21pbmNvcmUgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjE5KQorI2RlZmluZSBfX05SX2dldGRlbnRzNjQgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjE3KQorI2RlZmluZSBfX05SX2ZzdGF0ZnM2NCAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjY3KQorI2RlZmluZSBfX05SX2ZzdGF0YXQ2NCAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMzI3KQorI2RlZmluZSBfX05SX21rZGlyYXQgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMzIzKQorI2RlZmluZSBfX05SX2ZjaG93bmF0ICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMzI1KQorI2RlZmluZSBfX05SX2ZjaG1vZGF0ICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMzMzKQorI2RlZmluZSBfX05SX3JlbmFtZWF0ICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMzI5KQorI2RlZmluZSBfX05SX3VubGlua2F0ICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMzI4KQorI2RlZmluZSBfX05SX3N0YXRmczY0ICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjY2KQorI2RlZmluZSBfX05SX2Nsb2NrX2dldHRpbWUgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjYzKQorI2RlZmluZSBfX05SX2Nsb2NrX3NldHRpbWUgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjYyKQorI2RlZmluZSBfX05SX2Nsb2NrX2dldHJlcyAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjY0KQorI2RlZmluZSBfX05SX2Nsb2NrX25hbm9zbGVlcCAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjY1KQorI2RlZmluZSBfX05SX3RpbWVyX2NyZWF0ZSAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjU3KQorI2RlZmluZSBfX05SX3RpbWVyX3NldHRpbWUgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjU4KQorI2RlZmluZSBfX05SX3RpbWVyX2dldHRpbWUgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjU5KQorI2RlZmluZSBfX05SX3RpbWVyX2dldG92ZXJydW4gICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjYwKQorI2RlZmluZSBfX05SX3RpbWVyX2RlbGV0ZSAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjYxKQorI2RlZmluZSBfX05SX3V0aW1lcyAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjY5KQorI2RlZmluZSBfX05SX3NvY2tldCAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjgxKQorI2RlZmluZSBfX05SX3NvY2tldHBhaXIgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjg4KQorI2RlZmluZSBfX05SX2JpbmQgICAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjgyKQorI2RlZmluZSBfX05SX2Nvbm5lY3QgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjgzKQorI2RlZmluZSBfX05SX2xpc3RlbiAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjg0KQorI2RlZmluZSBfX05SX2FjY2VwdCAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjg1KQorI2RlZmluZSBfX05SX2dldHNvY2tuYW1lICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjg2KQorI2RlZmluZSBfX05SX2dldHBlZXJuYW1lICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjg3KQorI2RlZmluZSBfX05SX3NlbmR0byAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjkwKQorI2RlZmluZSBfX05SX3JlY3Zmcm9tICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjkyKQorI2RlZmluZSBfX05SX3NodXRkb3duICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjkzKQorI2RlZmluZSBfX05SX3NldHNvY2tvcHQgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjk0KQorI2RlZmluZSBfX05SX2dldHNvY2tvcHQgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjk1KQorI2RlZmluZSBfX05SX3NlbmRtc2cgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjk2KQorI2RlZmluZSBfX05SX3JlY3Ztc2cgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjk3KQorI2RlZmluZSBfX05SX2Vwb2xsX2NyZWF0ZSAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjUwKQorI2RlZmluZSBfX05SX2Vwb2xsX2N0bCAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjUxKQorI2RlZmluZSBfX05SX2Vwb2xsX3dhaXQgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjUyKQorI2RlZmluZSBfX05SX2lub3RpZnlfaW5pdCAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMzE2KQorI2RlZmluZSBfX05SX2lub3RpZnlfYWRkX3dhdGNoICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMzE3KQorI2RlZmluZSBfX05SX2lub3RpZnlfcm1fd2F0Y2ggICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMzE4KQorI2RlZmluZSBfX05SX0FSTV9zZXRfdGxzICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgOTgzMDQ1KQorI2RlZmluZSBfX05SX0FSTV9jYWNoZWZsdXNoICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgOTgzMDQyKQorI2VuZGlmCisKKyNpZmRlZiBfX2kzODZfXworI2RlZmluZSBfX05SX2V4aXRfZ3JvdXAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjUyKQorI2RlZmluZSBfX05SX3dhaXRwaWQgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgNykKKyNkZWZpbmUgX19OUl93YWl0aWQgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDI4NCkKKyNkZWZpbmUgX19OUl9raWxsICAgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDM3KQorI2RlZmluZSBfX05SX3RraWxsICAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjM4KQorI2RlZmluZSBfX05SX3NldF90aHJlYWRfYXJlYSAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjQzKQorI2RlZmluZSBfX05SX29wZW5hdCAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjk1KQorI2RlZmluZSBfX05SX21hZHZpc2UgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjE5KQorI2RlZmluZSBfX05SX21pbmNvcmUgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjE4KQorI2RlZmluZSBfX05SX2dldGRlbnRzNjQgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjIwKQorI2RlZmluZSBfX05SX2ZzdGF0ZnM2NCAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjY5KQorI2RlZmluZSBfX05SX2ZzdGF0YXQ2NCAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMzAwKQorI2RlZmluZSBfX05SX21rZGlyYXQgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjk2KQorI2RlZmluZSBfX05SX2ZjaG93bmF0ICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjk4KQorI2RlZmluZSBfX05SX2ZjaG1vZGF0ICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMzA2KQorI2RlZmluZSBfX05SX3JlbmFtZWF0ICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMzAyKQorI2RlZmluZSBfX05SX3VubGlua2F0ICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMzAxKQorI2RlZmluZSBfX05SX3N0YXRmczY0ICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjY4KQorI2RlZmluZSBfX05SX2Nsb2NrX2dldHRpbWUgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjY1KQorI2RlZmluZSBfX05SX2Nsb2NrX3NldHRpbWUgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjY0KQorI2RlZmluZSBfX05SX2Nsb2NrX2dldHJlcyAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjY2KQorI2RlZmluZSBfX05SX2Nsb2NrX25hbm9zbGVlcCAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjY3KQorI2RlZmluZSBfX05SX3RpbWVyX2NyZWF0ZSAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjU5KQorI2RlZmluZSBfX05SX3RpbWVyX3NldHRpbWUgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjYwKQorI2RlZmluZSBfX05SX3RpbWVyX2dldHRpbWUgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjYxKQorI2RlZmluZSBfX05SX3RpbWVyX2dldG92ZXJydW4gICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjYyKQorI2RlZmluZSBfX05SX3RpbWVyX2RlbGV0ZSAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjYzKQorI2RlZmluZSBfX05SX3V0aW1lcyAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjcxKQorI2RlZmluZSBfX05SX3NvY2tldGNhbGwgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMTAyKQorI2RlZmluZSBfX05SX2Vwb2xsX2NyZWF0ZSAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjU0KQorI2RlZmluZSBfX05SX2Vwb2xsX2N0bCAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjU1KQorI2RlZmluZSBfX05SX2Vwb2xsX3dhaXQgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjU2KQorI2RlZmluZSBfX05SX2lub3RpZnlfaW5pdCAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjkxKQorI2RlZmluZSBfX05SX2lub3RpZnlfYWRkX3dhdGNoICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjkyKQorI2RlZmluZSBfX05SX2lub3RpZnlfcm1fd2F0Y2ggICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjkzKQorI2VuZGlmCisKKyNlbmRpZgorCisjZW5kaWYgLyogX0JJT05JQ19MSU5VWF9TWVNDQUxMU19IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy9saW51eC11bmlzdGQuaCBiL2xpYmMvaW5jbHVkZS9zeXMvbGludXgtdW5pc3RkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg5MjcxZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvbGludXgtdW5pc3RkLmgKQEAgLTAsMCArMSwyMDQgQEAKKy8qIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LCBkbyBub3QgdG91Y2ggKi8KKyNpZm5kZWYgX0JJT05JQ19MSU5VWF9VTklTVERfSF8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCit2b2lkICAgICAgICAgICAgIF9leGl0IChpbnQpOwordm9pZCAgICAgICAgICAgICBfZXhpdF90aHJlYWQgKGludCk7CitwaWRfdCAgICAgICAgICAgIF9fZm9yayAodm9pZCk7CitwaWRfdCAgICAgICAgICAgIF93YWl0cGlkIChwaWRfdCwgaW50KiwgaW50LCBzdHJ1Y3QgcnVzYWdlKik7CitpbnQgICAgICAgICAgICAgIHdhaXRpZCAoaW50LCBwaWRfdCwgc3RydWN0IHNpZ2luZm9fdCosIGludCx2b2lkKik7CitwaWRfdCAgICAgICAgICAgIF9fY2xvbmUgKGludCAoKmZuKSh2b2lkKiksIHZvaWQgKmNoaWxkX3N0YWNrLCBpbnQgZmxhZ3MsIHZvaWQgKmFyZyk7CitpbnQgICAgICAgICAgICAgIGV4ZWN2ZSAoY29uc3QgY2hhciosIGNoYXIqIGNvbnN0KiwgY2hhciogY29uc3QqKTsKK2ludCAgICAgICAgICAgICAgc2V0dWlkICh1aWRfdCk7Cit1aWRfdCAgICAgICAgICAgIGdldHVpZCAodm9pZCk7CitnaWRfdCAgICAgICAgICAgIGdldGdpZCAodm9pZCk7Cit1aWRfdCAgICAgICAgICAgIGdldGV1aWQgKHZvaWQpOworZ2lkX3QgICAgICAgICAgICBnZXRlZ2lkICh2b2lkKTsKK3VpZF90ICAgICAgICAgICAgZ2V0cmVzdWlkICh2b2lkKTsKK2dpZF90ICAgICAgICAgICAgZ2V0cmVzZ2lkICh2b2lkKTsKK3BpZF90ICAgICAgICAgICAgZ2V0dGlkICh2b2lkKTsKK2ludCAgICAgICAgICAgICAgZ2V0Z3JvdXBzIChpbnQsIGdpZF90ICopOworcGlkX3QgICAgICAgICAgICBnZXRwZ2lkIChwaWRfdCk7CitwaWRfdCAgICAgICAgICAgIGdldHBwaWQgKHZvaWQpOworcGlkX3QgICAgICAgICAgICBzZXRzaWQgKHZvaWQpOworaW50ICAgICAgICAgICAgICBzZXRnaWQgKGdpZF90KTsKK2ludCAgICAgICAgICAgICAgc2V0ZXVpZCAodWlkX3QpOworaW50ICAgICAgICAgICAgICBzZXRyZXVpZCAodWlkX3QsIHVpZF90KTsKK2ludCAgICAgICAgICAgICAgc2V0cmVzdWlkICh1aWRfdCwgdWlkX3QsIHVpZF90KTsKK2ludCAgICAgICAgICAgICAgc2V0cmVzZ2lkIChnaWRfdCwgZ2lkX3QsIGdpZF90KTsKK3ZvaWQqICAgICAgICAgICAgX19icmsgKHZvaWQqKTsKK2ludCAgICAgICAgICAgICAga2lsbCAocGlkX3QsIGludCk7CitpbnQgICAgICAgICAgICAgIHRraWxsIChwaWRfdCB0aWQsIGludCBzaWcpOworaW50ICAgICAgICAgICAgICBfX3B0cmFjZSAoaW50IHJlcXVlc3QsIGludCBwaWQsIHZvaWQqIGFkZHIsIHZvaWQqIGRhdGEpOworaW50ICAgICAgICAgICAgICBfX3NldF90aHJlYWRfYXJlYSAodm9pZCogIHVzZXJfZGVzYyk7CitpbnQgICAgICAgICAgICAgIF9fZ2V0cHJpb3JpdHkgKGludCwgaW50KTsKK2ludCAgICAgICAgICAgICAgc2V0cHJpb3JpdHkgKGludCwgaW50LCBpbnQpOworaW50ICAgICAgICAgICAgICBzZXRybGltaXQgKGludCByZXNvdXJjZSwgY29uc3Qgc3RydWN0IHJsaW1pdCAqcmxwKTsKK2ludCAgICAgICAgICAgICAgZ2V0cmxpbWl0IChpbnQgcmVzb3VyY2UsIHN0cnVjdCBybGltaXQgKnJscCk7CitpbnQgICAgICAgICAgICAgIGdldHJ1c2FnZSAoaW50IHdobywgc3RydWN0IHJ1c2FnZSogIHJfdXNhZ2UpOworaW50ICAgICAgICAgICAgICBzZXRncm91cHMgKGludCwgY29uc3QgZ2lkX3QgKik7CitwaWRfdCAgICAgICAgICAgIGdldHBncnAgKHZvaWQpOworaW50ICAgICAgICAgICAgICBzZXRwZ2lkIChwaWRfdCwgcGlkX3QpOworcGlkX3QgICAgICAgICAgICB2Zm9yayAodm9pZCk7CitpbnQgICAgICAgICAgICAgIHNldHJlZ2lkIChnaWRfdCwgZ2lkX3QpOworaW50ICAgICAgICAgICAgICBjaHJvb3QgKGNvbnN0IGNoYXIgKik7CitpbnQgICAgICAgICAgICAgIHByY3RsIChpbnQgb3B0aW9uLCB1bnNpZ25lZCBpbnQgYXJnMiwgdW5zaWduZWQgaW50IGFyZzMsIHVuc2lnbmVkIGludCBhcmc0LCB1bnNpZ25lZCBpbnQgYXJnNSk7CitpbnQgICAgICAgICAgICAgIGNhcGdldCAoY2FwX3VzZXJfaGVhZGVyX3QgaGVhZGVyLCBjYXBfdXNlcl9kYXRhX3QgZGF0YSk7CitpbnQgICAgICAgICAgICAgIGNhcHNldCAoY2FwX3VzZXJfaGVhZGVyX3QgaGVhZGVyLCBjb25zdCBjYXBfdXNlcl9kYXRhX3QgZGF0YSk7CitpbnQgICAgICAgICAgICAgIGFjY3QgKGNvbnN0IGNoYXIqICBmaWxlcGF0aCk7Citzc2l6ZV90ICAgICAgICAgIHJlYWQgKGludCwgdm9pZCosIHNpemVfdCk7Citzc2l6ZV90ICAgICAgICAgIHdyaXRlIChpbnQsIGNvbnN0IHZvaWQqLCBzaXplX3QpOworc3NpemVfdCAgICAgICAgICBfX3ByZWFkNjQgKGludCwgdm9pZCAqLCBzaXplX3QsIG9mZl90LCBvZmZfdCk7Citzc2l6ZV90ICAgICAgICAgIF9fcHdyaXRlNjQgKGludCwgdm9pZCAqLCBzaXplX3QsIG9mZl90LCBvZmZfdCk7CitpbnQgICAgICAgICAgICAgIF9fb3BlbiAoY29uc3QgY2hhciosIGludCwgbW9kZV90KTsKK2ludCAgICAgICAgICAgICAgX19vcGVuYXQgKGludCwgY29uc3QgY2hhciosIGludCwgbW9kZV90KTsKK2ludCAgICAgICAgICAgICAgY2xvc2UgKGludCk7CitpbnQgICAgICAgICAgICAgIGNyZWF0IChjb25zdCBjaGFyKiwgbW9kZV90KTsKK29mZl90ICAgICAgICAgICAgbHNlZWsgKGludCwgb2ZmX3QsIGludCk7CitpbnQgICAgICAgICAgICAgIF9fbGxzZWVrIChpbnQsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIGxvZmZfdCosIGludCk7CitwaWRfdCAgICAgICAgICAgIGdldHBpZCAodm9pZCk7Cit2b2lkICogICAgICAgICAgIG1tYXAgKHZvaWQgKiwgc2l6ZV90LCBpbnQsIGludCwgaW50LCBsb25nKTsKK3ZvaWQgKiAgICAgICAgICAgX19tbWFwMiAodm9pZCosIHNpemVfdCwgaW50LCBpbnQsIGludCwgbG9uZyk7CitpbnQgICAgICAgICAgICAgIG11bm1hcCAodm9pZCAqLCBzaXplX3QpOwordm9pZCAqICAgICAgICAgICBtcmVtYXAgKHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsIHVuc2lnbmVkIGxvbmcpOworaW50ICAgICAgICAgICAgICBtc3luYyAoY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCk7CitpbnQgICAgICAgICAgICAgIG1wcm90ZWN0IChjb25zdCB2b2lkICosIHNpemVfdCwgaW50KTsKK2ludCAgICAgICAgICAgICAgbWFkdmlzZSAoY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCk7CitpbnQgICAgICAgICAgICAgIG1sb2NrIChjb25zdCB2b2lkICphZGRyLCBzaXplX3QgbGVuKTsKK2ludCAgICAgICAgICAgICAgbXVubG9jayAoY29uc3Qgdm9pZCAqYWRkciwgc2l6ZV90IGxlbik7CitpbnQgICAgICAgICAgICAgIG1pbmNvcmUgKHZvaWQqICBzdGFydCwgc2l6ZV90ICBsZW5ndGgsIHVuc2lnbmVkIGNoYXIqICB2ZWMpOworaW50ICAgICAgICAgICAgICBfX2lvY3RsIChpbnQsIGludCwgdm9pZCAqKTsKK2ludCAgICAgICAgICAgICAgcmVhZHYgKGludCwgY29uc3Qgc3RydWN0IGlvdmVjICosIGludCk7CitpbnQgICAgICAgICAgICAgIHdyaXRldiAoaW50LCBjb25zdCBzdHJ1Y3QgaW92ZWMgKiwgaW50KTsKK2ludCAgICAgICAgICAgICAgX19mY250bCAoaW50LCBpbnQsIHZvaWQqKTsKK2ludCAgICAgICAgICAgICAgZmxvY2sgKGludCwgaW50KTsKK2ludCAgICAgICAgICAgICAgZmNobW9kIChpbnQsIG1vZGVfdCk7CitpbnQgICAgICAgICAgICAgIGR1cCAoaW50KTsKK2ludCAgICAgICAgICAgICAgcGlwZSAoaW50ICopOworaW50ICAgICAgICAgICAgICBkdXAyIChpbnQsIGludCk7CitpbnQgICAgICAgICAgICAgIHNlbGVjdCAoaW50LCBzdHJ1Y3QgZmRfc2V0ICosIHN0cnVjdCBmZF9zZXQgKiwgc3RydWN0IGZkX3NldCAqLCBzdHJ1Y3QgdGltZXZhbCAqKTsKK2ludCAgICAgICAgICAgICAgZnRydW5jYXRlIChpbnQsIG9mZl90KTsKK2ludCAgICAgICAgICAgICAgZ2V0ZGVudHMgKHVuc2lnbmVkIGludCwgc3RydWN0IGRpcmVudCAqLCB1bnNpZ25lZCBpbnQpOworaW50ICAgICAgICAgICAgICBmc3luYyAoaW50KTsKK2ludCAgICAgICAgICAgICAgZmNob3duIChpbnQsIHVpZF90LCBnaWRfdCk7Cit2b2lkICAgICAgICAgICAgIHN5bmMgKHZvaWQpOworaW50ICAgICAgICAgICAgICBfX2ZjbnRsNjQgKGludCwgaW50LCB2b2lkICopOworaW50ICAgICAgICAgICAgICBmc3RhdGZzIChpbnQsIHNpemVfdCwgc3RydWN0IHN0YXRmcyAqKTsKK3NzaXplX3QgICAgICAgICAgc2VuZGZpbGUgKGludCBvdXRfZmQsIGludCBpbl9mZCwgb2ZmX3QgKm9mZnNldCwgc2l6ZV90IGNvdW50KTsKK2ludCAgICAgICAgICAgICAgZnN0YXRhdCAoaW50IGRpcmZkLCBjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3Qgc3RhdCAqYnVmLCBpbnQgZmxhZ3MpOworaW50ICAgICAgICAgICAgICBta2RpcmF0IChpbnQgZGlyZmQsIGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBtb2RlX3QgbW9kZSk7CitpbnQgICAgICAgICAgICAgIGZjaG93bmF0IChpbnQgZGlyZmQsIGNvbnN0IGNoYXIgKnBhdGgsIHVpZF90IG93bmVyLCBnaWRfdCBncm91cCwgaW50IGZsYWdzKTsKK2ludCAgICAgICAgICAgICAgZmNobW9kYXQgKGludCBkaXJmZCwgY29uc3QgY2hhciAqcGF0aCwgbW9kZV90IG1vZGUsIGludCBmbGFncyk7CitpbnQgICAgICAgICAgICAgIHJlbmFtZWF0IChpbnQgb2xkZGlyZmQsIGNvbnN0IGNoYXIgKm9sZHBhdGgsIGludCBuZXdkaXJmZCwgY29uc3QgY2hhciAqbmV3cGF0aCk7CitpbnQgICAgICAgICAgICAgIGxpbmsgKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKik7CitpbnQgICAgICAgICAgICAgIHVubGluayAoY29uc3QgY2hhciopOworaW50ICAgICAgICAgICAgICB1bmxpbmthdCAoaW50LCBjb25zdCBjaGFyICosIGludCk7CitpbnQgICAgICAgICAgICAgIGNoZGlyIChjb25zdCBjaGFyKik7CitpbnQgICAgICAgICAgICAgIG1rbm9kIChjb25zdCBjaGFyKiwgbW9kZV90LCBkZXZfdCk7CitpbnQgICAgICAgICAgICAgIGNobW9kIChjb25zdCBjaGFyKixtb2RlX3QpOworaW50ICAgICAgICAgICAgICBjaG93biAoY29uc3QgY2hhciAqLCB1aWRfdCwgZ2lkX3QpOworaW50ICAgICAgICAgICAgICBsY2hvd24gKGNvbnN0IGNoYXIqLCB1aWRfdCwgZ2lkX3QpOworaW50ICAgICAgICAgICAgICBtb3VudCAoY29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgdW5zaWduZWQgbG9uZywgY29uc3Qgdm9pZCopOworaW50ICAgICAgICAgICAgICB1bW91bnQgKGNvbnN0IGNoYXIqKTsKK2ludCAgICAgICAgICAgICAgdW1vdW50MiAoY29uc3QgY2hhciosIGludCk7CitpbnQgICAgICAgICAgICAgIGZzdGF0IChpbnQsIHN0cnVjdCBzdGF0Kik7CitpbnQgICAgICAgICAgICAgIHN0YXQgKGNvbnN0IGNoYXIgKiwgc3RydWN0IHN0YXQgKik7CitpbnQgICAgICAgICAgICAgIGxzdGF0IChjb25zdCBjaGFyICosIHN0cnVjdCBzdGF0ICopOworaW50ICAgICAgICAgICAgICBta2RpciAoY29uc3QgY2hhciAqLCBtb2RlX3QpOworaW50ICAgICAgICAgICAgICByZWFkbGluayAoY29uc3QgY2hhciAqLCBjaGFyICosIHNpemVfdCk7CitpbnQgICAgICAgICAgICAgIHJtZGlyIChjb25zdCBjaGFyICopOworaW50ICAgICAgICAgICAgICByZW5hbWUgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKK2ludCAgICAgICAgICAgICAgX19nZXRjd2QgKGNoYXIgKiBidWYsIHNpemVfdCBzaXplKTsKK2ludCAgICAgICAgICAgICAgYWNjZXNzIChjb25zdCBjaGFyICosIGludCk7CitpbnQgICAgICAgICAgICAgIHN5bWxpbmsgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKK2ludCAgICAgICAgICAgICAgZmNoZGlyIChpbnQpOworaW50ICAgICAgICAgICAgICB0cnVuY2F0ZSAoY29uc3QgY2hhciosIG9mZl90KTsKK2ludCAgICAgICAgICAgICAgX19zdGF0ZnM2NCAoY29uc3QgY2hhciAqLCBzaXplX3QsIHN0cnVjdCBzdGF0ZnMgKik7CitpbnQgICAgICAgICAgICAgIHBhdXNlICh2b2lkKTsKK2ludCAgICAgICAgICAgICAgZ2V0dGltZW9mZGF5IChzdHJ1Y3QgdGltZXZhbCosIHN0cnVjdCB0aW1lem9uZSopOworaW50ICAgICAgICAgICAgICBzZXR0aW1lb2ZkYXkgKGNvbnN0IHN0cnVjdCB0aW1ldmFsKiwgY29uc3Qgc3RydWN0IHRpbWV6b25lKik7CitjbG9ja190ICAgICAgICAgIHRpbWVzIChzdHJ1Y3QgdG1zICopOworaW50ICAgICAgICAgICAgICBuYW5vc2xlZXAgKGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqLCBzdHJ1Y3QgdGltZXNwZWMgKik7CitpbnQgICAgICAgICAgICAgIGNsb2NrX2dldHRpbWUgKGNsb2NraWRfdCBjbGtfaWQsIHN0cnVjdCB0aW1lc3BlYyAqdHApOworaW50ICAgICAgICAgICAgICBjbG9ja19zZXR0aW1lIChjbG9ja2lkX3QgY2xrX2lkLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKnRwKTsKK2ludCAgICAgICAgICAgICAgY2xvY2tfZ2V0cmVzIChjbG9ja2lkX3QgY2xrX2lkLCBzdHJ1Y3QgdGltZXNwZWMgKnJlcyk7CitpbnQgICAgICAgICAgICAgIGNsb2NrX25hbm9zbGVlcCAoY29uc3Qgc3RydWN0IHRpbWVzcGVjICpyZXEsIHN0cnVjdCB0aW1lc3BlYyAqcmVtKTsKK2ludCAgICAgICAgICAgICAgZ2V0aXRpbWVyIChpbnQsIGNvbnN0IHN0cnVjdCBpdGltZXJ2YWwgKik7CitpbnQgICAgICAgICAgICAgIHNldGl0aW1lciAoaW50LCBjb25zdCBzdHJ1Y3QgaXRpbWVydmFsICosIHN0cnVjdCBpdGltZXJ2YWwgKik7CitpbnQgICAgICAgICAgICAgIF9fdGltZXJfY3JlYXRlIChjbG9ja2lkX3QgY2xvY2tpZCwgc3RydWN0IHNpZ2V2ZW50ICpldnAsIHRpbWVyX3QgKnRpbWVyaWQpOworaW50ICAgICAgICAgICAgICBfX3RpbWVyX3NldHRpbWUgKHRpbWVyX3QsIGludCwgY29uc3Qgc3RydWN0IGl0aW1lcnNwZWMqLCBzdHJ1Y3QgaXRpbWVyc3BlYyopOworaW50ICAgICAgICAgICAgICBfX3RpbWVyX2dldHRpbWUgKHRpbWVyX3QsIHN0cnVjdCBpdGltZXJzcGVjKik7CitpbnQgICAgICAgICAgICAgIF9fdGltZXJfZ2V0b3ZlcnJ1biAodGltZXJfdCk7CitpbnQgICAgICAgICAgICAgIF9fdGltZXJfZGVsZXRlICh0aW1lcl90KTsKK2ludCAgICAgICAgICAgICAgdXRpbWVzIChjb25zdCBjaGFyKiwgY29uc3Qgc3RydWN0IHRpbWV2YWwgdHZwWzJdKTsKK2ludCAgICAgICAgICAgICAgc2lnYWN0aW9uIChpbnQsIGNvbnN0IHN0cnVjdCBzaWdhY3Rpb24gKiwgc3RydWN0IHNpZ2FjdGlvbiAqKTsKK2ludCAgICAgICAgICAgICAgc2lncHJvY21hc2sgKGludCwgY29uc3Qgc2lnc2V0X3QgKiwgc2lnc2V0X3QgKik7CitpbnQgICAgICAgICAgICAgIF9fc2lnc3VzcGVuZCAoaW50IHVudXNlZDEsIGludCB1bnVzZWQyLCB1bnNpZ25lZCBtYXNrKTsKK2ludCAgICAgICAgICAgICAgX19ydF9zaWdhY3Rpb24gKGludCBzaWcsIGNvbnN0IHN0cnVjdCBzaWdhY3Rpb24gKmFjdCwgc3RydWN0IHNpZ2FjdGlvbiAqb2FjdCwgc2l6ZV90IHNpZ3NldHNpemUpOworaW50ICAgICAgICAgICAgICBfX3J0X3NpZ3Byb2NtYXNrIChpbnQgIGhvdywgY29uc3Qgc2lnc2V0X3QgKnNldCwgc2lnc2V0X3QgKm9zZXQsIHNpemVfdCBzaWdzZXRzaXplKTsKK2ludCAgICAgICAgICAgICAgX19ydF9zaWd0aW1lZHdhaXQgKGNvbnN0IHNpZ3NldF90ICpzZXQsIHN0cnVjdCBzaWdpbmZvX3QgICppbmZvLCBzdHJ1Y3QgdGltZXNwZWNfdCAgKnRpbWVvdXQsIHNpemVfdCAgc2lnc2V0X3NpemUpOworaW50ICAgICAgICAgICAgICBzaWdwZW5kaW5nIChzaWdzZXRfdCAqKTsKK2ludCAgICAgICAgICAgICAgc29ja2V0IChpbnQsIGludCwgaW50KTsKK2ludCAgICAgICAgICAgICAgc29ja2V0cGFpciAoaW50LCBpbnQsIGludCwgaW50Kik7CitpbnQgICAgICAgICAgICAgIGJpbmQgKGludCwgc3RydWN0IHNvY2thZGRyICosIGludCk7CitpbnQgICAgICAgICAgICAgIGNvbm5lY3QgKGludCwgc3RydWN0IHNvY2thZGRyICosIHNvY2tsZW5fdCk7CitpbnQgICAgICAgICAgICAgIGxpc3RlbiAoaW50LCBpbnQpOworaW50ICAgICAgICAgICAgICBhY2NlcHQgKGludCwgc3RydWN0IHNvY2thZGRyICosIHNvY2tsZW5fdCAqKTsKK2ludCAgICAgICAgICAgICAgZ2V0c29ja25hbWUgKGludCwgc3RydWN0IHNvY2thZGRyICosIHNvY2tsZW5fdCAqKTsKK2ludCAgICAgICAgICAgICAgZ2V0cGVlcm5hbWUgKGludCwgc3RydWN0IHNvY2thZGRyICosIHNvY2tsZW5fdCAqKTsKK2ludCAgICAgICAgICAgICAgc2VuZHRvIChpbnQsIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBpbnQsIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqLCBzb2NrbGVuX3QpOworaW50ICAgICAgICAgICAgICByZWN2ZnJvbSAoaW50LCB2b2lkICosIHNpemVfdCwgdW5zaWduZWQgaW50LCBzdHJ1Y3Qgc29ja2FkZHIgKiwgc29ja2xlbl90ICopOworaW50ICAgICAgICAgICAgICBzaHV0ZG93biAoaW50LCBpbnQpOworaW50ICAgICAgICAgICAgICBzZXRzb2Nrb3B0IChpbnQsIGludCwgaW50LCBjb25zdCB2b2lkICosIHNvY2tsZW5fdCk7CitpbnQgICAgICAgICAgICAgIGdldHNvY2tvcHQgKGludCwgaW50LCBpbnQsIHZvaWQgKiwgc29ja2xlbl90ICopOworaW50ICAgICAgICAgICAgICBzZW5kbXNnIChpbnQsIGNvbnN0IHN0cnVjdCBtc2doZHIgKiwgdW5zaWduZWQgaW50KTsKK2ludCAgICAgICAgICAgICAgcmVjdm1zZyAoaW50LCBzdHJ1Y3QgbXNnaGRyICosIHVuc2lnbmVkIGludCk7CitpbnQgICAgICAgICAgICAgIHNvY2tldCAoaW50LCBpbnQsIGludCk7CitpbnQgICAgICAgICAgICAgIGJpbmQgKGludCwgc3RydWN0IHNvY2thZGRyICosIGludCk7CitpbnQgICAgICAgICAgICAgIGNvbm5lY3QgKGludCwgc3RydWN0IHNvY2thZGRyICosIHNvY2tsZW5fdCk7CitpbnQgICAgICAgICAgICAgIGxpc3RlbiAoaW50LCBpbnQpOworaW50ICAgICAgICAgICAgICBhY2NlcHQgKGludCwgc3RydWN0IHNvY2thZGRyICosIHNvY2tsZW5fdCAqKTsKK2ludCAgICAgICAgICAgICAgZ2V0c29ja25hbWUgKGludCwgc3RydWN0IHNvY2thZGRyICosIHNvY2tsZW5fdCAqKTsKK2ludCAgICAgICAgICAgICAgZ2V0cGVlcm5hbWUgKGludCwgc3RydWN0IHNvY2thZGRyICosIHNvY2tsZW5fdCAqKTsKK2ludCAgICAgICAgICAgICAgc29ja2V0cGFpciAoaW50LCBpbnQsIGludCwgaW50Kik7CitpbnQgICAgICAgICAgICAgIHNlbmR0byAoaW50LCBjb25zdCB2b2lkICosIHNpemVfdCwgaW50LCBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKiwgc29ja2xlbl90KTsKK2ludCAgICAgICAgICAgICAgcmVjdmZyb20gKGludCwgdm9pZCAqLCBzaXplX3QsIHVuc2lnbmVkIGludCwgc3RydWN0IHNvY2thZGRyICosIHNvY2tsZW5fdCAqKTsKK2ludCAgICAgICAgICAgICAgc2h1dGRvd24gKGludCwgaW50KTsKK2ludCAgICAgICAgICAgICAgc2V0c29ja29wdCAoaW50LCBpbnQsIGludCwgY29uc3Qgdm9pZCAqLCBzb2NrbGVuX3QpOworaW50ICAgICAgICAgICAgICBnZXRzb2Nrb3B0IChpbnQsIGludCwgaW50LCB2b2lkICosIHNvY2tsZW5fdCAqKTsKK2ludCAgICAgICAgICAgICAgc2VuZG1zZyAoaW50LCBjb25zdCBzdHJ1Y3QgbXNnaGRyICosIHVuc2lnbmVkIGludCk7CitpbnQgICAgICAgICAgICAgIHJlY3Ztc2cgKGludCwgc3RydWN0IG1zZ2hkciAqLCB1bnNpZ25lZCBpbnQpOworaW50ICAgICAgICAgICAgICBzY2hlZF9zZXRzY2hlZHVsZXIgKHBpZF90IHBpZCwgaW50IHBvbGljeSwgY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpwYXJhbSk7CitpbnQgICAgICAgICAgICAgIHNjaGVkX2dldHNjaGVkdWxlciAocGlkX3QgcGlkKTsKK2ludCAgICAgICAgICAgICAgc2NoZWRfeWllbGQgKHZvaWQpOworaW50ICAgICAgICAgICAgICBzY2hlZF9zZXRwYXJhbSAocGlkX3QgcGlkLCBjb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKnBhcmFtKTsKK2ludCAgICAgICAgICAgICAgc2NoZWRfZ2V0cGFyYW0gKHBpZF90IHBpZCwgc3RydWN0IHNjaGVkX3BhcmFtICpwYXJhbSk7CitpbnQgICAgICAgICAgICAgIHNjaGVkX2dldF9wcmlvcml0eV9tYXggKGludCBwb2xpY3kpOworaW50ICAgICAgICAgICAgICBzY2hlZF9nZXRfcHJpb3JpdHlfbWluIChpbnQgcG9saWN5KTsKK2ludCAgICAgICAgICAgICAgc2NoZWRfcnJfZ2V0X2ludGVydmFsIChwaWRfdCBwaWQsIHN0cnVjdCB0aW1lc3BlYyAqaW50ZXJ2YWwpOworaW50ICAgICAgICAgICAgICB1bmFtZSAoc3RydWN0IHV0c25hbWUgKik7CitwaWRfdCAgICAgICAgICAgIF9fd2FpdDQgKHBpZF90IHBpZCwgaW50ICpzdGF0dXMsIGludCBvcHRpb25zLCBzdHJ1Y3QgcnVzYWdlICpydXNhZ2UpOworbW9kZV90ICAgICAgICAgICB1bWFzayAobW9kZV90KTsKK2ludCAgICAgICAgICAgICAgX19yZWJvb3QgKGludCwgaW50LCBpbnQsIHZvaWQgKik7CitpbnQgICAgICAgICAgICAgIF9fc3lzbG9nIChpbnQsIGNoYXIgKiwgaW50KTsKK2ludCAgICAgICAgICAgICAgaW5pdF9tb2R1bGUgKHZvaWQgKiwgdW5zaWduZWQgbG9uZywgY29uc3QgY2hhciAqKTsKK2ludCAgICAgICAgICAgICAgZGVsZXRlX21vZHVsZSAoY29uc3QgY2hhciosIHVuc2lnbmVkIGludCk7CitpbnQgICAgICAgICAgICAgIGtsb2djdGwgKGludCwgY2hhciAqLCBpbnQpOworaW50ICAgICAgICAgICAgICBmdXRleCAodm9pZCAqLCBpbnQsIGludCwgdm9pZCAqLCB2b2lkICosIGludCk7CitpbnQgICAgICAgICAgICAgIGVwb2xsX2NyZWF0ZSAoaW50IHNpemUpOworaW50ICAgICAgICAgICAgICBlcG9sbF9jdGwgKGludCBlcGZkLCBpbnQgb3AsIGludCBmZCwgc3RydWN0IGVwb2xsX2V2ZW50ICpldmVudCk7CitpbnQgICAgICAgICAgICAgIGVwb2xsX3dhaXQgKGludCBlcGZkLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgKmV2ZW50cywgaW50IG1heCwgaW50IHRpbWVvdXQpOworaW50ICAgICAgICAgICAgICBpbm90aWZ5X2luaXQgKHZvaWQpOworaW50ICAgICAgICAgICAgICBpbm90aWZ5X2FkZF93YXRjaCAoaW50LCBjb25zdCBjaGFyICosIHVuc2lnbmVkIGludCk7CitpbnQgICAgICAgICAgICAgIGlub3RpZnlfcm1fd2F0Y2ggKGludCwgdW5zaWduZWQgaW50KTsKK2ludCAgICAgICAgICAgICAgcG9sbCAoc3RydWN0IHBvbGxmZCAqLCB1bnNpZ25lZCBpbnQsIGxvbmcpOworaW50ICAgICAgICAgICAgICBfX3NldF90bHMgKHZvaWQqKTsKK2ludCAgICAgICAgICAgICAgY2FjaGVmbHVzaCAobG9uZyBzdGFydCwgbG9uZyBlbmQsIGxvbmcgZmxhZ3MpOworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9CSU9OSUNfTElOVVhfVU5JU1REX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL21tYW4uaCBiL2xpYmMvaW5jbHVkZS9zeXMvbW1hbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhMzI5NzQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvc3lzL21tYW4uaApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9TWVNfTU1BTl9IXworI2RlZmluZSBfU1lTX01NQU5fSF8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tbWFuLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworX19CRUdJTl9ERUNMUworCisjaWZuZGVmIE1BUF9BTk9OCisjZGVmaW5lIE1BUF9BTk9OICBNQVBfQU5PTllNT1VTCisjZW5kaWYKKworI2RlZmluZSBNQVBfRkFJTEVEICgodm9pZCAqKS0xKQorCisjZGVmaW5lIE1SRU1BUF9NQVlNT1ZFICAxCisjZGVmaW5lIE1SRU1BUF9GSVhFRCAgICAyCisKK2V4dGVybiB2b2lkKiAgbW1hcCh2b2lkICosIHNpemVfdCwgaW50LCBpbnQsIGludCwgb2ZmX3QpOworZXh0ZXJuIGludCAgICBtdW5tYXAodm9pZCAqLCBzaXplX3QpOworZXh0ZXJuIGludCAgICBtc3luYyhjb25zdCB2b2lkICosIHNpemVfdCwgaW50KTsKK2V4dGVybiBpbnQgICAgbXByb3RlY3QoY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCk7CitleHRlcm4gdm9pZCogIG1yZW1hcCh2b2lkICosIHNpemVfdCwgc2l6ZV90LCB1bnNpZ25lZCBsb25nKTsKKworZXh0ZXJuIGludCAgICBtbG9ja2FsbChpbnQpOworZXh0ZXJuIGludCAgICBtdW5sb2NrYWxsKHZvaWQpOworZXh0ZXJuIGludCAgICBtbG9jayhjb25zdCB2b2lkICosIHNpemVfdCk7CitleHRlcm4gaW50ICAgIG11bmxvY2soY29uc3Qgdm9pZCAqLCBzaXplX3QpOworZXh0ZXJuIGludCAgICBtYWR2aXNlKGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBpbnQpOworCitleHRlcm4gaW50ICAgIG1sb2NrKGNvbnN0IHZvaWQgKmFkZHIsIHNpemVfdCBsZW4pOworZXh0ZXJuIGludCAgICBtdW5sb2NrKGNvbnN0IHZvaWQgKmFkZHIsIHNpemVfdCBsZW4pOworCitleHRlcm4gaW50ICAgIG1pbmNvcmUodm9pZCogIHN0YXJ0LCBzaXplX3QgIGxlbmd0aCwgdW5zaWduZWQgY2hhciogIHZlYyk7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfU1lTX01NQU5fSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvbW91bnQuaCBiL2xpYmMvaW5jbHVkZS9zeXMvbW91bnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmM0ZWUyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3N5cy9tb3VudC5oCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX1NZU19NT1VOVF9ICisjZGVmaW5lIF9TWVNfTU9VTlRfSAorCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisKK19fQkVHSU5fREVDTFMKKworLyoKKyAqIFRoZXNlIGFyZSB0aGUgZnMtaW5kZXBlbmRlbnQgbW91bnQtZmxhZ3M6IHVwIHRvIDMyIGZsYWdzIGFyZSBzdXBwb3J0ZWQKKyAqLworI2RlZmluZSBNU19SRE9OTFkgICAgICAgIDEgICAgICAvKiBNb3VudCByZWFkLW9ubHkgKi8KKyNkZWZpbmUgTVNfTk9TVUlEICAgICAgICAyICAgICAgLyogSWdub3JlIHN1aWQgYW5kIHNnaWQgYml0cyAqLworI2RlZmluZSBNU19OT0RFViAgICAgICAgIDQgICAgICAvKiBEaXNhbGxvdyBhY2Nlc3MgdG8gZGV2aWNlIHNwZWNpYWwgZmlsZXMgKi8KKyNkZWZpbmUgTVNfTk9FWEVDICAgICAgICA4ICAgICAgLyogRGlzYWxsb3cgcHJvZ3JhbSBleGVjdXRpb24gKi8KKyNkZWZpbmUgTVNfU1lOQ0hST05PVVMgIDE2ICAgICAgLyogV3JpdGVzIGFyZSBzeW5jZWQgYXQgb25jZSAqLworI2RlZmluZSBNU19SRU1PVU5UICAgICAgMzIgICAgICAvKiBBbHRlciBmbGFncyBvZiBhIG1vdW50ZWQgRlMgKi8KKyNkZWZpbmUgTVNfTUFORExPQ0sgICAgIDY0ICAgICAgLyogQWxsb3cgbWFuZGF0b3J5IGxvY2tzIG9uIGFuIEZTICovCisjZGVmaW5lIE1TX0RJUlNZTkMgICAgICAxMjggICAgIC8qIERpcmVjdG9yeSBtb2RpZmljYXRpb25zIGFyZSBzeW5jaHJvbm91cyAqLworI2RlZmluZSBNU19OT0FUSU1FICAgICAgMTAyNCAgICAvKiBEbyBub3QgdXBkYXRlIGFjY2VzcyB0aW1lcy4gKi8KKyNkZWZpbmUgTVNfTk9ESVJBVElNRSAgIDIwNDggICAgLyogRG8gbm90IHVwZGF0ZSBkaXJlY3RvcnkgYWNjZXNzIHRpbWVzICovCisjZGVmaW5lIE1TX0JJTkQgICAgICAgICA0MDk2CisjZGVmaW5lIE1TX01PVkUgICAgICAgICA4MTkyCisjZGVmaW5lIE1TX1JFQyAgICAgICAgICAxNjM4NAorI2RlZmluZSBNU19WRVJCT1NFICAgICAgMzI3NjgKKyNkZWZpbmUgTVNfUE9TSVhBQ0wgICAgICgxPDwxNikgLyogVkZTIGRvZXMgbm90IGFwcGx5IHRoZSB1bWFzayAqLworI2RlZmluZSBNU19PTkVfU0VDT05EICAgKDE8PDE3KSAvKiBmcyBoYXMgMSBzZWMgYS9tL2N0aW1lIHJlc29sdXRpb24gKi8KKyNkZWZpbmUgTVNfQUNUSVZFICAgICAgICgxPDwzMCkKKyNkZWZpbmUgTVNfTk9VU0VSICAgICAgICgxPDwzMSkKKworLyoKKyAqIFN1cGVyYmxvY2sgZmxhZ3MgdGhhdCBjYW4gYmUgYWx0ZXJlZCBieSBNU19SRU1PVU5UCisgKi8KKyNkZWZpbmUgTVNfUk1UX01BU0sgICAgIChNU19SRE9OTFl8TVNfU1lOQ0hST05PVVN8TVNfTUFORExPQ0t8TVNfTk9BVElNRXxNU19OT0RJUkFUSU1FKQorCisvKgorICogT2xkIG1hZ2ljIG1vdW50IGZsYWcgYW5kIG1hc2sKKyAqLworI2RlZmluZSBNU19NR0NfVkFMIDB4QzBFRDAwMDAKKyNkZWZpbmUgTVNfTUdDX01TSyAweGZmZmYwMDAwCisKKy8qCisgKiB1bW91bnQyKCkgZmxhZ3MKKyAqLworI2RlZmluZSBNTlRfRk9SQ0UJMQkvKiBGb3JjaWJseSB1bm1vdW50ICovCisjZGVmaW5lIE1OVF9ERVRBQ0gJMgkvKiBEZXRhY2ggZnJvbSB0cmVlIG9ubHkgKi8KKyNkZWZpbmUgTU5UX0VYUElSRQk0CS8qIE1hcmsgZm9yIGV4cGlyeSAqLworCisvKgorICogQmxvY2sgZGV2aWNlIGlvY3RscworICovCisjZGVmaW5lIEJMS1JPU0VUICAgX0lPKDB4MTIsIDkzKSAvKiBTZXQgZGV2aWNlIHJlYWQtb25seSAoMCA9IHJlYWQtd3JpdGUpLiAgKi8KKyNkZWZpbmUgQkxLUk9HRVQgICBfSU8oMHgxMiwgOTQpIC8qIEdldCByZWFkLW9ubHkgc3RhdHVzICgwID0gcmVhZF93cml0ZSkuICAqLworI2RlZmluZSBCTEtSUlBBUlQgIF9JTygweDEyLCA5NSkgLyogUmUtcmVhZCBwYXJ0aXRpb24gdGFibGUuICAqLworI2RlZmluZSBCTEtHRVRTSVpFIF9JTygweDEyLCA5NikgLyogUmV0dXJuIGRldmljZSBzaXplLiAgKi8KKyNkZWZpbmUgQkxLRkxTQlVGICBfSU8oMHgxMiwgOTcpIC8qIEZsdXNoIGJ1ZmZlciBjYWNoZS4gICovCisjZGVmaW5lIEJMS1JBU0VUICAgX0lPKDB4MTIsIDk4KSAvKiBTZXQgcmVhZCBhaGVhZCBmb3IgYmxvY2sgZGV2aWNlLiAgKi8KKyNkZWZpbmUgQkxLUkFHRVQgICBfSU8oMHgxMiwgOTkpIC8qIEdldCBjdXJyZW50IHJlYWQgYWhlYWQgc2V0dGluZy4gICovCisKKy8qCisgKiBQcm90b3R5cGVzCisgKi8KK2V4dGVybiBpbnQgbW91bnQoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosCisJCSAgIGNvbnN0IGNoYXIgKiwgdW5zaWduZWQgbG9uZywKKwkJICAgY29uc3Qgdm9pZCAqKTsKK2V4dGVybiBpbnQgdW1vdW50KGNvbnN0IGNoYXIgKik7CitleHRlcm4gaW50IHVtb3VudDIoY29uc3QgY2hhciAqLCBpbnQpOworZXh0ZXJuIGludCBwaXZvdF9yb290KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9TWVNfTU9VTlRfSCAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy9wYXJhbS5oIGIvbGliYy9pbmNsdWRlL3N5cy9wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhODE1Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvc3lzL3BhcmFtLmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfU1lTX1BBUkFNX0hfCisjZGVmaW5lIF9TWVNfUEFSQU1fSF8KKworI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+CisKKyNkZWZpbmUgTUFYUEFUSExFTiAgUEFUSF9NQVgKKyNkZWZpbmUgTUFYU1lNTElOS1MgOAorCisjZGVmaW5lIEFMSUdOQllURVMgIDMKKyNkZWZpbmUgQUxJR04ocCkgICAgKCgodW5zaWduZWQgaW50KShwKSArIEFMSUdOQllURVMpICZ+IEFMSUdOQllURVMpCisKKyNlbmRpZiAvKiBfU1lTX1BBUkFNX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL3BvbGwuaCBiL2xpYmMvaW5jbHVkZS9zeXMvcG9sbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3OWVjNzcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvc3lzL3BvbGwuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8cG9sbC5oPgpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy9wcmN0bC5oIGIvbGliYy9pbmNsdWRlL3N5cy9wcmN0bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlODViZjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvc3lzL3ByY3RsLmgKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfU1lTX1BSQ1RMX0gKKyNkZWZpbmUgX1NZU19QUkNUTF9ICisKKyNpbmNsdWRlIDxsaW51eC9wcmN0bC5oPgorCitfX0JFR0lOX0RFQ0xTCisKK2V4dGVybiBpbnQgcHJjdGwoaW50IG9wdGlvbiwgdW5zaWduZWQgbG9uZyBhcmcyLCB1bnNpZ25lZCBsb25nIGFyZzMgLCB1bnNpZ25lZAorICAgICAgICAgICAgICAgbG9uZyBhcmc0LCB1bnNpZ25lZCBsb25nIGFyZzUpOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX1NZU19QUkNUTF9IICovCisKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvcHRyYWNlLmggYi9saWJjL2luY2x1ZGUvc3lzL3B0cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4YTA1N2EKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvc3lzL3B0cmFjZS5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX1NZU19QVFJBQ0VfSF8KKyNkZWZpbmUgX1NZU19QVFJBQ0VfSF8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorLy8gRm9yIGFsbCBvZiB0aGUgZGVmaW5lcworI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorCitfX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgUFRSQUNFX1BPS0VVU0VSICAgICBQVFJBQ0VfUE9LRVVTUgorI2RlZmluZSBQVFJBQ0VfUEVFS1VTRVIgICAgIFBUUkFDRV9QRUVLVVNSCisKK2V4dGVybiBsb25nIHB0cmFjZShpbnQgcmVxdWVzdCwgcGlkX3QgcGlkLCB2b2lkICphZGRyLCB2b2lkICpkYXRhKTsKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9TWVNfUFRSQUNFX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL3JlYm9vdC5oIGIvbGliYy9pbmNsdWRlL3N5cy9yZWJvb3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjgxMTM5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3N5cy9yZWJvb3QuaApAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9TWVNfUkVCT09UX0hfCisjZGVmaW5lIF9TWVNfUkVCT09UX0hfCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KKworX19CRUdJTl9ERUNMUworCisvKiB1c2UgZ2xpYmMgbmFtZXMgYXMgd2VsbCAqLworCisjZGVmaW5lIFJCX0FVVE9CT09UICAgICBMSU5VWF9SRUJPT1RfQ01EX1JFU1RBUlQKKyNkZWZpbmUgUkJfSEFMVF9TWVNURU0gIExJTlVYX1JFQk9PVF9DTURfSEFMVAorI2RlZmluZSBSQl9FTkFCTEVfQ0FEICAgTElOVVhfUkVCT09UX0NNRF9DQURfT04KKyNkZWZpbmUgUkJfRElTQUJMRV9DQUQgIExJTlVYX1JFQk9PVF9DTURfQ0FEX09GRgorI2RlZmluZSBSQl9QT1dFUl9PRkYgICAgTElOVVhfUkVCT09UX0NNRF9QT1dFUl9PRkYKKworZXh0ZXJuIGludCByZWJvb3QoaW50ICByZWJvb3RfdHlwZSk7CitleHRlcm4gaW50IF9fcmVib290KGludCwgaW50LCBpbnQsIHZvaWQgKik7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfU1lTX1JFQk9PVF9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy9yZXNvdXJjZS5oIGIvbGliYy9pbmNsdWRlL3N5cy9yZXNvdXJjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3ZGU2ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvc3lzL3Jlc291cmNlLmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfU1lTX1JFU09VUkNFX0hfCisjZGVmaW5lIF9TWVNfUkVTT1VSQ0VfSF8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPiAgICAgLyogTVVTVCBiZSBpbmNsdWRlZCBiZWZvcmUgbGludXgvcmVzb3VyY2UuaCAqLworCisvKiBUUklDSyBBSEVBRDogPGxpbnV4L3Jlc291cmNlLmg+IGRlZmluZXMgYSBnZXRydXNhZ2UgZnVuY3Rpb24gd2l0aAorICogICAgICAgICAgICAgIGEgbm9uLXN0YW5kYXJkIHNpZ25hdHVyZS4gdGhpcyBpcyBzdXJwcmlzaW5nIGJlY2F1c2UgdGhlCisgKiAgICAgICAgICAgICAgc3lzY2FsbCBzZWVtcyB0byB1c2UgdGhlIHN0YW5kYXJkIG9uZSBpbnN0ZWFkLgorICogICAgICAgICAgICAgIG9uY2UgYWdhaW4sIGNyZWF0aXZlIG1hY3JvIHVzYWdlIHNhdmVzIHRoZSBkYXlzCisgKi8KKyNkZWZpbmUgIGdldHJ1c2FnZSAgIF9fa2VybmVsX2dldHJ1c2FnZQorI2luY2x1ZGUgPGxpbnV4L3Jlc291cmNlLmg+CisjdW5kZWYgICBnZXRydXNhZ2UKKworX19CRUdJTl9ERUNMUworCitleHRlcm4gaW50IGdldHByaW9yaXR5KGludCwgaW50KTsKK2V4dGVybiBpbnQgc2V0cHJpb3JpdHkoaW50LCBpbnQsIGludCk7CitleHRlcm4gaW50IGdldHJsaW1pdChpbnQgcmVzb3VyY2UsIHN0cnVjdCBybGltaXQgKnJscCk7CitleHRlcm4gaW50IHNldHJsaW1pdChpbnQgcmVzb3VyY2UsIGNvbnN0IHN0cnVjdCBybGltaXQgKnJscCk7CitleHRlcm4gaW50IGdldHJ1c2FnZShpbnQgIHdobywgc3RydWN0IHJ1c2FnZSogIHJfdXNhZ2UpOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX1NZU19SRVNPVVJDRV9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy9zZWxlY3QuaCBiL2xpYmMvaW5jbHVkZS9zeXMvc2VsZWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTIzMTViOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvc2VsZWN0LmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfU1lTX1NFTEVDVF9IXworI2RlZmluZSBfU1lTX1NFTEVDVF9IXworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworX19CRUdJTl9ERUNMUworCit0eXBlZGVmIF9fa2VybmVsX2ZkX3NldCAgIGZkX3NldDsKKworZXh0ZXJuIGludCBzZWxlY3QoaW50LCBmZF9zZXQgKiwgZmRfc2V0ICosIGZkX3NldCAqLCBzdHJ1Y3QgdGltZXZhbCAqKTsKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9TWVNfU0VMRUNUX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL3NlbmRmaWxlLmggYi9saWJjL2luY2x1ZGUvc3lzL3NlbmRmaWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVhYmEyNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvc2VuZGZpbGUuaApAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9TWVNfU0VOREZJTEVfSF8KKyNkZWZpbmUgX1NZU19TRU5ERklMRV9IXworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKK19fQkVHSU5fREVDTFMKKworZXh0ZXJuIHNzaXplX3Qgc2VuZGZpbGUoaW50IG91dF9mZCwgaW50IGluX2ZkLCBvZmZfdCAqb2Zmc2V0LCBzaXplX3QgY291bnQpOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX1NZU19TRU5ERklMRV9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy9zb2NrZXQuaCBiL2xpYmMvaW5jbHVkZS9zeXMvc29ja2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA4NjYzZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvc29ja2V0LmgKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfU1lTX1NPQ0tFVF9IXworI2RlZmluZSBfU1lTX1NPQ0tFVF9IXworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CisKK19fQkVHSU5fREVDTFMKKworI2RlZmluZSBTT0NLX1NUUkVBTSAgICAgIDEKKyNkZWZpbmUgU09DS19ER1JBTSAgICAgICAyCisjZGVmaW5lIFNPQ0tfUkFXICAgICAgICAgMworI2RlZmluZSBTT0NLX1JETSAgICAgICAgIDQKKyNkZWZpbmUgU09DS19TRVFQQUNLRVQgICA1CisjZGVmaW5lIFNPQ0tfUEFDS0VUICAgICAgMTAKKworI2lmZGVmIF9faTM4Nl9fCisjIGRlZmluZSBfX3NvY2tldGNhbGwgZXh0ZXJuIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpCisjZWxzZQorIyBkZWZpbmUgX19zb2NrZXRjYWxsIGV4dGVybgorI2VuZGlmCisKKy8qIEJJT05JQzogc2Vjb25kIGFyZ3VtZW50IHRvIHNodXRkb3duKCkgKi8KK2VudW0geworICAgIFNIVVRfUkQgPSAwLCAgICAgICAgLyogbm8gbW9yZSByZWNlcHRpb25zICovCisjZGVmaW5lIFNIVVRfUkQgICAgICAgICBTSFVUX1JECisgICAgU0hVVF9XUiwgICAgICAgICAgICAvKiBubyBtb3JlIHRyYW5zbWlzc2lvbnMgKi8KKyNkZWZpbmUgU0hVVF9XUiAgICAgICAgIFNIVVRfV1IKKyAgICBTSFVUX1JEV1IgICAgICAgICAgIC8qIG5vIG1vcmUgcmVjZXB0aW9ucyBvciB0cmFuc21pc3Npb25zICovCisjZGVmaW5lIFNIVVRfUkRXUiAgICAgICBTSFVUX1JEV1IKK307CisKKwordHlwZWRlZiBpbnQgc29ja2xlbl90OworCitfX3NvY2tldGNhbGwgaW50IHNvY2tldChpbnQsIGludCwgaW50KTsKK19fc29ja2V0Y2FsbCBpbnQgYmluZChpbnQsIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqLCBpbnQpOworX19zb2NrZXRjYWxsIGludCBjb25uZWN0KGludCwgY29uc3Qgc3RydWN0IHNvY2thZGRyICosIHNvY2tsZW5fdCk7CitfX3NvY2tldGNhbGwgaW50IGxpc3RlbihpbnQsIGludCk7CitfX3NvY2tldGNhbGwgaW50IGFjY2VwdChpbnQsIHN0cnVjdCBzb2NrYWRkciAqLCBzb2NrbGVuX3QgKik7CitfX3NvY2tldGNhbGwgaW50IGdldHNvY2tuYW1lKGludCwgc3RydWN0IHNvY2thZGRyICosIHNvY2tsZW5fdCAqKTsKK19fc29ja2V0Y2FsbCBpbnQgZ2V0cGVlcm5hbWUoaW50LCBzdHJ1Y3Qgc29ja2FkZHIgKiwgc29ja2xlbl90ICopOworX19zb2NrZXRjYWxsIGludCBzb2NrZXRwYWlyKGludCwgaW50LCBpbnQsIGludCAqKTsKK19fc29ja2V0Y2FsbCBpbnQgc2h1dGRvd24oaW50LCBpbnQpOworX19zb2NrZXRjYWxsIGludCBzZXRzb2Nrb3B0KGludCwgaW50LCBpbnQsIGNvbnN0IHZvaWQgKiwgc29ja2xlbl90KTsKK19fc29ja2V0Y2FsbCBpbnQgZ2V0c29ja29wdChpbnQsIGludCwgaW50LCB2b2lkICosIHNvY2tsZW5fdCAqKTsKK19fc29ja2V0Y2FsbCBpbnQgc2VuZG1zZyhpbnQsIGNvbnN0IHN0cnVjdCBtc2doZHIgKiwgdW5zaWduZWQgaW50KTsKK19fc29ja2V0Y2FsbCBpbnQgcmVjdm1zZyhpbnQsIHN0cnVjdCBtc2doZHIgKiwgdW5zaWduZWQgaW50KTsKKworZXh0ZXJuICBzc2l6ZV90ICBzZW5kKGludCwgY29uc3Qgdm9pZCAqLCBzaXplX3QsIHVuc2lnbmVkIGludCk7CitleHRlcm4gIHNzaXplX3QgIHJlY3YoaW50LCB2b2lkICosIHNpemVfdCwgdW5zaWduZWQgaW50KTsKKworX19zb2NrZXRjYWxsIHNzaXplX3Qgc2VuZHRvKGludCwgY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCwgY29uc3Qgc3RydWN0IHNvY2thZGRyICosIHNvY2tsZW5fdCk7CitfX3NvY2tldGNhbGwgc3NpemVfdCByZWN2ZnJvbShpbnQsIHZvaWQgKiwgc2l6ZV90LCB1bnNpZ25lZCBpbnQsIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqLCBzb2NrbGVuX3QgKik7CisKKyN1bmRlZiBfX3NvY2tldGNhbGwKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9TWVNfU09DS0VUX0ggKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvc29ja2V0Y2FsbHMuaCBiL2xpYmMvaW5jbHVkZS9zeXMvc29ja2V0Y2FsbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzRmNDYzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3N5cy9zb2NrZXRjYWxscy5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX1NZU19TT0NLRVRDQUxMU19IXworI2RlZmluZSBfU1lTX1NPQ0tFVENBTExTX0hfCisKKy8qIHNvY2tldGNhbGxzIGJ5IG51bWJlciAqLworCisjZGVmaW5lIFNZU19TT0NLRVQgICAgICAxICAgICAgICAgICAgICAgLyogc3lzX3NvY2tldCgyKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTWVNfQklORCAgICAgICAgMiAgICAgICAgICAgICAgIC8qIHN5c19iaW5kKDIpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0NPTk5FQ1QgICAgIDMgICAgICAgICAgICAgICAvKiBzeXNfY29ubmVjdCgyKSAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNZU19MSVNURU4gICAgICA0ICAgICAgICAgICAgICAgLyogc3lzX2xpc3RlbigyKSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTWVNfQUNDRVBUICAgICAgNSAgICAgICAgICAgICAgIC8qIHN5c19hY2NlcHQoMikgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dFVFNPQ0tOQU1FIDYgICAgICAgICAgICAgICAvKiBzeXNfZ2V0c29ja25hbWUoMikgICAgICAgICAgICovCisjZGVmaW5lIFNZU19HRVRQRUVSTkFNRSA3ICAgICAgICAgICAgICAgLyogc3lzX2dldHBlZXJuYW1lKDIpICAgICAgICAgICAqLworI2RlZmluZSBTWVNfU09DS0VUUEFJUiAgOCAgICAgICAgICAgICAgIC8qIHN5c19zb2NrZXRwYWlyKDIpICAgICAgICAgICAgKi8KKyNkZWZpbmUgU1lTX1NFTkQgICAgICAgIDkgICAgICAgICAgICAgICAvKiBzeXNfc2VuZCgyKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNZU19SRUNWICAgICAgICAxMCAgICAgICAgICAgICAgLyogc3lzX3JlY3YoMikgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTWVNfU0VORFRPICAgICAgMTEgICAgICAgICAgICAgIC8qIHN5c19zZW5kdG8oMikgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU1lTX1JFQ1ZGUk9NICAgIDEyICAgICAgICAgICAgICAvKiBzeXNfcmVjdmZyb20oMikgICAgICAgICAgICAgICovCisjZGVmaW5lIFNZU19TSFVURE9XTiAgICAxMyAgICAgICAgICAgICAgLyogc3lzX3NodXRkb3duKDIpICAgICAgICAgICAgICAqLworI2RlZmluZSBTWVNfU0VUU09DS09QVCAgMTQgICAgICAgICAgICAgIC8qIHN5c19zZXRzb2Nrb3B0KDIpICAgICAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0dFVFNPQ0tPUFQgIDE1ICAgICAgICAgICAgICAvKiBzeXNfZ2V0c29ja29wdCgyKSAgICAgICAgICAgICovCisjZGVmaW5lIFNZU19TRU5ETVNHICAgICAxNiAgICAgICAgICAgICAgLyogc3lzX3NlbmRtc2coMikgICAgICAgICAgICAgICAqLworI2RlZmluZSBTWVNfUkVDVk1TRyAgICAgMTcgICAgICAgICAgICAgIC8qIHN5c19yZWN2bXNnKDIpICAgICAgICAgICAgICAgKi8KKworI2VuZGlmIC8qIF9TWVNfU09DS0VUQ0FMTFNfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvc3RhdC5oIGIvbGliYy9pbmNsdWRlL3N5cy9zdGF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNhYjVhZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvc3RhdC5oCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9TWVNfU1RBVF9IXworI2RlZmluZSBfU1lTX1NUQVRfSF8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvc3RhdC5oPgorCisjaW5jbHVkZSA8ZW5kaWFuLmg+CisKK19fQkVHSU5fREVDTFMKKworLyogcmVhbGx5IG1hdGNoZXMgc3RhdDY0IGluIHRoZSBrZXJuZWwsIGhlbmNlIHRoZSBwYWRkaW5nCisgKiBOb3RlOiBUaGUga2VybmVsIHplcm8ncyB0aGUgcGFkZGVkIHJlZ2lvbiBiZWNhdXNlIGdsaWJjIG1pZ2h0IHJlYWQgdGhlbQorICogaW4gdGhlIGhvcGUgdGhhdCB0aGUga2VybmVsIGhhcyBzdHJldGNoZWQgdG8gdXNpbmcgbGFyZ2VyIHNpemVzLgorICovCitzdHJ1Y3Qgc3RhdCB7CisgICAgdW5zaWduZWQgbG9uZyBsb25nICBzdF9kZXY7CisgICAgdW5zaWduZWQgY2hhciAgICAgICBfX3BhZDBbNF07CisKKyAgICB1bnNpZ25lZCBsb25nICAgICAgIF9fc3RfaW5vOworICAgIHVuc2lnbmVkIGludCAgICAgICAgc3RfbW9kZTsKKyAgICB1bnNpZ25lZCBpbnQgICAgICAgIHN0X25saW5rOworCisgICAgdW5zaWduZWQgbG9uZyAgICAgICBzdF91aWQ7CisgICAgdW5zaWduZWQgbG9uZyAgICAgICBzdF9naWQ7CisKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgIHN0X3JkZXY7CisgICAgdW5zaWduZWQgY2hhciAgICAgICBfX3BhZDNbNF07CisKKyAgICBsb25nIGxvbmcgICAgICAgICAgIHN0X3NpemU7CisgICAgdW5zaWduZWQgbG9uZwlzdF9ibGtzaXplOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAgc3RfYmxvY2tzOworCisgICAgdW5zaWduZWQgbG9uZyAgICAgICBzdF9hdGltZTsKKyAgICB1bnNpZ25lZCBsb25nICAgICAgIHN0X2F0aW1lX25zZWM7CisKKyAgICB1bnNpZ25lZCBsb25nICAgICAgIHN0X210aW1lOworICAgIHVuc2lnbmVkIGxvbmcgICAgICAgc3RfbXRpbWVfbnNlYzsKKworICAgIHVuc2lnbmVkIGxvbmcgICAgICAgc3RfY3RpbWU7CisgICAgdW5zaWduZWQgbG9uZyAgICAgICBzdF9jdGltZV9uc2VjOworCisgICAgdW5zaWduZWQgbG9uZyBsb25nICBzdF9pbm87Cit9OworCitleHRlcm4gaW50ICAgIGNobW9kKGNvbnN0IGNoYXIgKiwgbW9kZV90KTsKK2V4dGVybiBpbnQgICAgZmNobW9kKGludCwgbW9kZV90KTsKK2V4dGVybiBpbnQgICAgbWtkaXIoY29uc3QgY2hhciAqLCBtb2RlX3QpOworCitleHRlcm4gaW50ICAgIHN0YXQoY29uc3QgY2hhciAqLCBzdHJ1Y3Qgc3RhdCAqKTsKK2V4dGVybiBpbnQgICAgZnN0YXQoaW50LCBzdHJ1Y3Qgc3RhdCAqKTsKK2V4dGVybiBpbnQgICAgbHN0YXQoY29uc3QgY2hhciAqLCBzdHJ1Y3Qgc3RhdCAqKTsKK2V4dGVybiBpbnQgICAgbWtub2QoY29uc3QgY2hhciAqLCBtb2RlX3QsIGRldl90KTsKK2V4dGVybiBtb2RlX3QgdW1hc2sobW9kZV90KTsKKworI2RlZmluZSAgc3RhdDY0ICAgIHN0YXQKKyNkZWZpbmUgIGZzdGF0NjQgICBmc3RhdAorI2RlZmluZSAgbHN0YXQ2NCAgIGxzdGF0CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBta2ZpZm8oY29uc3QgY2hhciAqX19wLCBtb2RlX3QgX19tKQoreworICByZXR1cm4gbWtub2QoX19wLCAoX19tICYgflNfSUZNVCkgfCBTX0lGSUZPLCAoZGV2X3QpMCk7Cit9CisKK2V4dGVybiBpbnQgIGZzdGF0YXQoaW50IGRpcmZkLCBjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3Qgc3RhdCAqYnVmLCBpbnQgZmxhZ3MpOworZXh0ZXJuIGludCAgbWtkaXJhdChpbnQgZGlyZmQsIGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBtb2RlX3QgbW9kZSk7CitleHRlcm4gaW50IGZjaG93bmF0KGludCBkaXJmZCwgY29uc3QgY2hhciAqcGF0aCwgdWlkX3Qgb3duZXIsIGdpZF90IGdyb3VwLCBpbnQgZmxhZ3MpOworZXh0ZXJuIGludCBmY2htb2RhdChpbnQgZGlyZmQsIGNvbnN0IGNoYXIgKnBhdGgsIG1vZGVfdCBtb2RlLCBpbnQgZmxhZ3MpOworZXh0ZXJuIGludCByZW5hbWVhdChpbnQgb2xkZGlyZmQsIGNvbnN0IGNoYXIgKm9sZHBhdGgsIGludCBuZXdkaXJmZCwgY29uc3QgY2hhciAqbmV3cGF0aCk7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfU1lTX1NUQVRfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvc3RhdGZzLmggYi9saWJjL2luY2x1ZGUvc3lzL3N0YXRmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzYjNiNWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvc3lzL3N0YXRmcy5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxzeXMvdmZzLmg+CmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL3N5c2NhbGwuaCBiL2xpYmMvaW5jbHVkZS9zeXMvc3lzY2FsbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNTU1MTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvc3lzL3N5c2NhbGwuaApAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9TWVNfU1lTQ0FMTF9IXworI2RlZmluZSBfU1lTX1NZU0NBTExfSF8KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorCitfX0JFR0lOX0RFQ0xTCisKK2ludCBzeXNjYWxsKGludCBudW1iZXIsIC4uLik7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfU1lTX1NZU0NBTExfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvc3lzY29uZi5oIGIvbGliYy9pbmNsdWRlL3N5cy9zeXNjb25mLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZjMWIwOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvc3lzY29uZi5oCkBAIC0wLDAgKzEsMTM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9TWVNfU1lTQ09ORl9IXworI2RlZmluZSBfU1lTX1NZU0NPTkZfSF8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorCitfX0JFR0lOX0RFQ0xTCisKKy8qIGFzIGxpc3RlZCBieSBQb3NpeCBzeXNjb25mKCkgZGVzY3JpcHRpb24gKi8KKy8qIG1vc3Qgb2YgdGhlc2Ugd2lsbCByZXR1cm4gLTEgYW5kIEVOT1NZUyAgKi8KKworI2RlZmluZSBfU0NfQVJHX01BWCAgICAgICAgICAgICAweDAwMDAKKyNkZWZpbmUgX1NDX0JDX0JBU0VfTUFYICAgICAgICAgMHgwMDAxCisjZGVmaW5lIF9TQ19CQ19ESU1fTUFYICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBfU0NfQkNfU0NBTEVfTUFYICAgICAgICAweDAwMDMKKyNkZWZpbmUgX1NDX0JDX1NUUklOR19NQVggICAgICAgMHgwMDA0CisjZGVmaW5lIF9TQ19DSElMRF9NQVggICAgICAgICAgIDB4MDAwNQorI2RlZmluZSBfU0NfQ0xLX1RDSyAgICAgICAgICAgICAweDAwMDYKKyNkZWZpbmUgX1NDX0NPTExfV0VJR0hUU19NQVggICAgMHgwMDA3CisjZGVmaW5lIF9TQ19FWFBSX05FU1RfTUFYICAgICAgIDB4MDAwOAorI2RlZmluZSBfU0NfTElORV9NQVggICAgICAgICAgICAweDAwMDkKKyNkZWZpbmUgX1NDX05HUk9VUFNfTUFYICAgICAgICAgMHgwMDBhCisjZGVmaW5lIF9TQ19PUEVOX01BWCAgICAgICAgICAgIDB4MDAwYgorI2RlZmluZSBfU0NfUEFTU19NQVggICAgICAgICAgICAweDAwMGMKKyNkZWZpbmUgX1NDXzJfQ19CSU5EICAgICAgICAgICAgMHgwMDBkCisjZGVmaW5lIF9TQ18yX0NfREVWICAgICAgICAgICAgIDB4MDAwZQorI2RlZmluZSBfU0NfMl9DX1ZFUlNJT04gICAgICAgICAweDAwMGYKKyNkZWZpbmUgX1NDXzJfQ0hBUl9URVJNICAgICAgICAgMHgwMDEwCisjZGVmaW5lIF9TQ18yX0ZPUlRfREVWICAgICAgICAgIDB4MDAxMQorI2RlZmluZSBfU0NfMl9GT1JUX1JVTiAgICAgICAgICAweDAwMTIKKyNkZWZpbmUgX1NDXzJfTE9DQUxFREVGICAgICAgICAgMHgwMDEzCisjZGVmaW5lIF9TQ18yX1NXX0RFViAgICAgICAgICAgIDB4MDAxNAorI2RlZmluZSBfU0NfMl9VUEUgICAgICAgICAgICAgICAweDAwMTUKKyNkZWZpbmUgX1NDXzJfVkVSU0lPTiAgICAgICAgICAgMHgwMDE2CisjZGVmaW5lIF9TQ19KT0JfQ09OVFJPTCAgICAgICAgIDB4MDAxNworI2RlZmluZSBfU0NfU0FWRURfSURTICAgICAgICAgICAweDAwMTgKKyNkZWZpbmUgX1NDX1ZFUlNJT04gICAgICAgICAgICAgMHgwMDE5CisjZGVmaW5lIF9TQ19SRV9EVVBfTUFYICAgICAgICAgIDB4MDAxYQorI2RlZmluZSBfU0NfU1RSRUFNX01BWCAgICAgICAgICAweDAwMWIKKyNkZWZpbmUgX1NDX1RaTkFNRV9NQVggICAgICAgICAgMHgwMDFjCisjZGVmaW5lIF9TQ19YT1BFTl9DUllQVCAgICAgICAgIDB4MDAxZAorI2RlZmluZSBfU0NfWE9QRU5fRU5IX0kxOE4gICAgICAweDAwMWUKKyNkZWZpbmUgX1NDX1hPUEVOX1NITSAgICAgICAgICAgMHgwMDFmCisjZGVmaW5lIF9TQ19YT1BFTl9WRVJTSU9OICAgICAgIDB4MDAyMAorI2RlZmluZSBfU0NfWE9QRU5fWENVX1ZFUlNJT04gICAweDAwMjEKKyNkZWZpbmUgX1NDX1hPUEVOX1JFQUxUSU1FICAgICAgMHgwMDIyCisjZGVmaW5lIF9TQ19YT1BFTl9SRUFMVElNRV9USFJFQURTICAweDAwMjMKKyNkZWZpbmUgX1NDX1hPUEVOX0xFR0FDWSAgICAgICAgMHgwMDI0CisjZGVmaW5lIF9TQ19BVEVYSVRfTUFYICAgICAgICAgIDB4MDAyNQorI2RlZmluZSBfU0NfSU9WX01BWCAgICAgICAgICAgICAweDAwMjYKKyNkZWZpbmUgX1NDX1BBR0VTSVpFICAgICAgICAgICAgMHgwMDI3CisjZGVmaW5lIF9TQ19QQUdFX1NJWkUgICAgICAgICAgIDB4MDAyOAorI2RlZmluZSBfU0NfWE9QRU5fVU5JWCAgICAgICAgICAweDAwMjkKKyNkZWZpbmUgX1NDX1hCUzVfSUxQMzJfT0ZGMzIgICAgMHgwMDJhCisjZGVmaW5lIF9TQ19YQlM1X0lMUDMyX09GRkJJRyAgIDB4MDAyYgorI2RlZmluZSBfU0NfWEJTNV9MUDY0X09GRjY0ICAgICAweDAwMmMKKyNkZWZpbmUgX1NDX1hCUzVfTFBCSUdfT0ZGQklHICAgMHgwMDJkCisjZGVmaW5lIF9TQ19BSU9fTElTVElPX01BWCAgICAgIDB4MDAyZQorI2RlZmluZSBfU0NfQUlPX01BWCAgICAgICAgICAgICAweDAwMmYKKyNkZWZpbmUgX1NDX0FJT19QUklPX0RFTFRBX01BWCAgMHgwMDMwCisjZGVmaW5lIF9TQ19ERUxBWVRJTUVSX01BWCAgICAgIDB4MDAzMQorI2RlZmluZSBfU0NfTVFfT1BFTl9NQVggICAgICAgICAweDAwMzIKKyNkZWZpbmUgX1NDX01RX1BSSU9fTUFYICAgICAgICAgMHgwMDMzCisjZGVmaW5lIF9TQ19SVFNJR19NQVggICAgICAgICAgIDB4MDAzNAorI2RlZmluZSBfU0NfU0VNX05TRU1TX01BWCAgICAgICAweDAwMzUKKyNkZWZpbmUgX1NDX1NFTV9WQUxVRV9NQVggICAgICAgMHgwMDM2CisjZGVmaW5lIF9TQ19TSUdRVUVVRV9NQVggICAgICAgIDB4MDAzNworI2RlZmluZSBfU0NfVElNRVJfTUFYICAgICAgICAgICAweDAwMzgKKyNkZWZpbmUgX1NDX0FTWU5DSFJPTk9VU19JTyAgICAgMHgwMDM5CisjZGVmaW5lIF9TQ19GU1lOQyAgICAgICAgICAgICAgIDB4MDAzYQorI2RlZmluZSBfU0NfTUFQUEVEX0ZJTEVTICAgICAgICAweDAwM2IKKyNkZWZpbmUgX1NDX01FTUxPQ0sgICAgICAgICAgICAgMHgwMDNjCisjZGVmaW5lIF9TQ19NRU1MT0NLX1JBTkdFICAgICAgIDB4MDAzZAorI2RlZmluZSBfU0NfTUVNT1JZX1BST1RFQ1RJT04gICAweDAwM2UKKyNkZWZpbmUgX1NDX01FU1NBR0VfUEFTU0lORyAgICAgMHgwMDNmCisjZGVmaW5lIF9TQ19QUklPUklUSVpFRF9JTyAgICAgIDB4MDA0MAorI2RlZmluZSBfU0NfUFJJT1JJVFlfU0NIRURVTElORyAweDAwNDEKKyNkZWZpbmUgX1NDX1JFQUxUSU1FX1NJR05BTFMgICAgMHgwMDQyCisjZGVmaW5lIF9TQ19TRU1BUEhPUkVTICAgICAgICAgIDB4MDA0MworI2RlZmluZSBfU0NfU0hBUkVEX01FTU9SWV9PQkpFQ1RTICAweDAwNDQKKyNkZWZpbmUgX1NDX1NZTkNIUk9OSVpFRF9JTyAgICAgMHgwMDQ1CisjZGVmaW5lIF9TQ19USU1FUlMgICAgICAgICAgICAgIDB4MDA0NgorI2RlZmluZSBfU0NfR0VUR1JfUl9TSVpFX01BWCAgICAweDAwNDcKKyNkZWZpbmUgX1NDX0dFVFBXX1JfU0laRV9NQVggICAgMHgwMDQ4CisjZGVmaW5lIF9TQ19MT0dJTl9OQU1FX01BWCAgICAgIDB4MDA0OQorI2RlZmluZSBfU0NfVEhSRUFEX0RFU1RSVUNUT1JfSVRFUkFUSU9OUyAgMHgwMDRhCisjZGVmaW5lIF9TQ19USFJFQURfS0VZU19NQVggICAgIDB4MDA0YgorI2RlZmluZSBfU0NfVEhSRUFEX1NUQUNLX01JTiAgICAweDAwNGMKKyNkZWZpbmUgX1NDX1RIUkVBRF9USFJFQURTX01BWCAgMHgwMDRkCisjZGVmaW5lIF9TQ19UVFlfTkFNRV9NQVggICAgICAgIDB4MDA0ZQorCisjZGVmaW5lIF9TQ19USFJFQURTICAgICAgICAgICAgICAgICAgICAgMHgwMDRmCisjZGVmaW5lIF9TQ19USFJFQURfQVRUUl9TVEFDS0FERFIgICAgICAgMHgwMDUwCisjZGVmaW5lIF9TQ19USFJFQURfQVRUUl9TVEFDS1NJWkUgICAgICAgMHgwMDUxCisjZGVmaW5lIF9TQ19USFJFQURfUFJJT1JJVFlfU0NIRURVTElORyAgMHgwMDUyCisjZGVmaW5lIF9TQ19USFJFQURfUFJJT19JTkhFUklUICAgICAgICAgMHgwMDUzCisjZGVmaW5lIF9TQ19USFJFQURfUFJJT19QUk9URUNUICAgICAgICAgMHgwMDU0CisjZGVmaW5lIF9TQ19USFJFQURfU0FGRV9GVU5DVElPTlMgICAgICAgMHgwMDU1CisKKyNkZWZpbmUgX1NDX05QUk9DRVNTT1JTX0NPTkYgICAgICAgICAgICAweDAwNjAKKyNkZWZpbmUgX1NDX05QUk9DRVNTT1JTX09OTE4gICAgICAgICAgICAweDAwNjEKKyNkZWZpbmUgX1NDX1BIWVNfUEFHRVMgICAgICAgICAgICAgICAgICAweDAwNjIKKyNkZWZpbmUgX1NDX0FWUEhZU19QQUdFUyAgICAgICAgICAgICAgICAweDAwNjMKKworZXh0ZXJuIGludCBzeXNjb25mIChpbnQgIG5hbWUpOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX1NZU19TWVNDT05GX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL3N5c2luZm8uaCBiL2xpYmMvaW5jbHVkZS9zeXMvc3lzaW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3ZTQ2ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvc3lzL3N5c2luZm8uaApAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9TWVNfU1lTSU5GT19IXworI2RlZmluZSBfU1lTX1NZU0lORk9fSF8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCitfX0JFR0lOX0RFQ0xTCisKK2V4dGVybiBpbnQgc3lzaW5mbyAoc3RydWN0IHN5c2luZm8gKmluZm8pOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX1NZU19TWVNJTkZPX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL3N5c2xpbWl0cy5oIGIvbGliYy9pbmNsdWRlL3N5cy9zeXNsaW1pdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3N5cy9zeXNsaW1pdHMuaApkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy9zeXNtYWNyb3MuaCBiL2xpYmMvaW5jbHVkZS9zeXMvc3lzbWFjcm9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmYwNTNhOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvc3lzbWFjcm9zLmgKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfU1lTX1NZU01BQ1JPU19IXworI2RlZmluZSBfU1lTX1NZU01BQ1JPU19IXworCisvKiBzb21lIHJvZ3VlIGNvZGUgaW5jbHVkZXMgdGhpcyBmaWxlIGRpcmVjdGx5IDotKCAqLworI2lmbmRlZiBfU1lTX1RZUEVTX0hfCisjIGluY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisKK3N0YXRpYyBfX2lubGluZV9fIGludCBtYWpvcihkZXZfdCBfZGV2KQoreworICByZXR1cm4gKF9kZXYgPj4gOCkgJiAweGZmZjsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IG1pbm9yKGRldl90IF9kZXYpCit7CisgIHJldHVybiAoX2RldiAmIDB4ZmYpIHwgKChfZGV2ID4+IDEyKSAmIDB4ZmZmMDApOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBkZXZfdCBtYWtlZGV2KGludCBfX21hLCBpbnQgX19taSkKK3sKKyAgcmV0dXJuICgoX19tYSAmIDB4ZmZmKSA8PCA4KSB8IChfX21pICYgMHhmZikgfCAoKF9fbWkgJiAweGZmZjAwKSA8PCAxMik7Cit9CisKKyNlbmRpZiAvKiBfU1lTX1NZU01BQ1JPU19IXyAqLworCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL3N5c3RlbV9wcm9wZXJ0aWVzLmggYi9saWJjL2luY2x1ZGUvc3lzL3N5c3RlbV9wcm9wZXJ0aWVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmViMDBjZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvc3lzdGVtX3Byb3BlcnRpZXMuaApAQCAtMCwwICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX0lOQ0xVREVfU1lTX1NZU1RFTV9QUk9QRVJUSUVTX0gKKyNkZWZpbmUgX0lOQ0xVREVfU1lTX1NZU1RFTV9QUk9QRVJUSUVTX0gKKwordHlwZWRlZiBzdHJ1Y3QgcHJvcF9pbmZvIHByb3BfaW5mbzsKKworI2RlZmluZSBQUk9QX05BTUVfTUFYICAgMzIKKyNkZWZpbmUgUFJPUF9WQUxVRV9NQVggIDkyCisKKy8qIExvb2sgdXAgYSBzeXN0ZW0gcHJvcGVydHkgYnkgbmFtZSwgY29weWluZyBpdHMgdmFsdWUgYW5kIGEKKyoqIFwwIHRlcm1pbmF0b3IgdG8gdGhlIHByb3ZpZGVkIHBvaW50ZXIuICBUaGUgdG90YWwgYnl0ZXMKKyoqIGNvcGllZCB3aWxsIGJlIG5vIGdyZWF0ZXIgdGhhbiBQUk9QX1ZBTFVFX01BWC4gIFJldHVybnMKKyoqIHRoZSBzdHJpbmcgbGVuZ3RoIG9mIHRoZSB2YWx1ZS4gIEEgcHJvcGVydHkgdGhhdCBpcyBub3QKKyoqIGRlZmluZWQgaXMgaWRlbnRpY2FsIHRvIGEgcHJvcGVydHkgd2l0aCBhIGxlbmd0aCAwIHZhbHVlLgorKi8KK2ludCBfX3N5c3RlbV9wcm9wZXJ0eV9nZXQoY29uc3QgY2hhciAqbmFtZSwgY2hhciAqdmFsdWUpOworCisvKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBzeXN0ZW0gcHJvcGVydHkgbmFtZWQgbmFtZSwgaWYgaXQKKyoqIGV4aXN0cywgb3IgTlVMTCBpZiB0aGVyZSBpcyBubyBzdWNoIHByb3BlcnR5LiAgVXNlIAorKiogX19zeXN0ZW1fcHJvcGVydHlfcmVhZCgpIHRvIG9idGFpbiB0aGUgc3RyaW5nIHZhbHVlIGZyb20KKyoqIHRoZSByZXR1cm5lZCBwcm9wX2luZm8gcG9pbnRlci4KKyoqCisqKiBJdCBpcyBzYWZlIHRvIGNhY2hlIHRoZSBwcm9wX2luZm8gcG9pbnRlciB0byBhdm9pZCBmdXR1cmUKKyoqIGxvb2t1cHMuICBUaGVzZSByZXR1cm5lZCBwb2ludGVycyB3aWxsIHJlbWFpbiB2YWxpZCBmb3IKKyoqIHRoZSBsaWZldGltZSBvZiB0aGUgc3lzdGVtLgorKi8KK2NvbnN0IHByb3BfaW5mbyAqX19zeXN0ZW1fcHJvcGVydHlfZmluZChjb25zdCBjaGFyICpuYW1lKTsKKworLyogUmVhZCB0aGUgdmFsdWUgb2YgYSBzeXN0ZW0gcHJvcGVydHkuICBSZXR1cm5zIHRoZSBsZW5ndGgKKyoqIG9mIHRoZSB2YWx1ZS4gIENvcGllcyB0aGUgdmFsdWUgYW5kIFwwIHRlcm1pbmF0b3IgaW50bworKiogdGhlIHByb3ZpZGVkIHZhbHVlIHBvaW50ZXIuICBUb3RhbCBsZW5ndGggKGluY2x1ZGluZworKiogdGVybWluYXRvcikgd2lsbCBiZSBubyBncmVhdGVyIHRoYXQgUFJPUF9WQUxVRV9NQVguCisqKgorKiogSWYgbmFtZSBpcyBub256ZXJvLCB1cCB0byBQUk9QX05BTUVfTUFYIGJ5dGVzIHdpbGwgYmUKKyoqIGNvcGllZCBpbnRvIHRoZSBwcm92aWRlZCBuYW1lIHBvaW50ZXIuICBUaGUgbmFtZSB3aWxsCisqKiBiZSBcMCB0ZXJtaW5hdGVkLgorKi8KK2ludCBfX3N5c3RlbV9wcm9wZXJ0eV9yZWFkKGNvbnN0IHByb3BfaW5mbyAqcGksIGNoYXIgKm5hbWUsIGNoYXIgKnZhbHVlKTsKKworLyogUmV0dXJuIGEgcHJvcF9pbmZvIGZvciB0aGUgbnRoIHN5c3RlbSBwcm9wZXJ0eSwgb3IgTlVMTCBpZiAKKyoqIHRoZXJlIGlzIG5vIG50aCBwcm9wZXJ0eS4gIFVzZSBfX3N5c3RlbV9wcm9wZXJ0eV9yZWFkKCkgdG8KKyoqIHJlYWQgdGhlIHZhbHVlIG9mIHRoaXMgcHJvcGVydHkuCisqKgorKiogVGhpcyBtZXRob2QgaXMgZm9yIGluc3BlY3RpbmcgYW5kIGRlYnVnZ2luZyB0aGUgcHJvcGVydHkgCisqKiBzeXN0ZW0uICBQbGVhc2UgdXNlIF9fc3lzdGVtX3Byb3BlcnR5X2ZpbmQoKSBpbnN0ZWFkLgorKioKKyoqIE9yZGVyIG9mIHJlc3VsdHMgbWF5IGNoYW5nZSBmcm9tIGNhbGwgdG8gY2FsbC4gIFRoaXMgaXMKKyoqIG5vdCBhIGJ1Zy4KKyovIAorY29uc3QgcHJvcF9pbmZvICpfX3N5c3RlbV9wcm9wZXJ0eV9maW5kX250aCh1bnNpZ25lZCBuKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL3RpbWUuaCBiL2xpYmMvaW5jbHVkZS9zeXMvdGltZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMDEwZDQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvc3lzL3RpbWUuaApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9TWVNfVElNRV9IXworI2RlZmluZSBfU1lTX1RJTUVfSF8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKworX19CRUdJTl9ERUNMUworCitleHRlcm4gaW50IGdldHRpbWVvZmRheShzdHJ1Y3QgdGltZXZhbCAqLCBzdHJ1Y3QgdGltZXpvbmUgKik7CitleHRlcm4gaW50IHNldHRpbWVvZmRheShjb25zdCBzdHJ1Y3QgdGltZXZhbCAqLCBjb25zdCBzdHJ1Y3QgdGltZXpvbmUgKik7CisKK2V4dGVybiBpbnQgZ2V0aXRpbWVyKGludCwgc3RydWN0IGl0aW1lcnZhbCAqKTsKK2V4dGVybiBpbnQgc2V0aXRpbWVyKGludCwgY29uc3Qgc3RydWN0IGl0aW1lcnZhbCAqLCBzdHJ1Y3QgaXRpbWVydmFsICopOworCitleHRlcm4gaW50IHV0aW1lcyhjb25zdCBjaGFyICosIGNvbnN0IHN0cnVjdCB0aW1ldmFsICopOworCisjZGVmaW5lIHRpbWVyY2xlYXIoYSkgICBcCisgICAgICAgICgoYSktPnR2X3NlYyA9IChhKS0+dHZfdXNlYyA9IDApCisKKyNkZWZpbmUgdGltZXJpc3NldChhKSAgICBcCisgICAgICAgICgoYSktPnR2X3NlYyAhPSAwIHx8IChhKS0+dHZfdXNlYyAhPSAwKQorCisjZGVmaW5lIHRpbWVyY21wKGEsIGIsIG9wKSAgICAgICAgICAgICAgIFwKKyAgICAgICAgKChhKS0+dHZfc2VjID09IChiKS0+dHZfc2VjICAgICAgXAorICAgICAgICA/IChhKS0+dHZfdXNlYyBvcCAoYiktPnR2X3VzZWMgICBcCisgICAgICAgIDogKGEpLT50dl9zZWMgb3AgKGIpLT50dl9zZWMpCisKKyNkZWZpbmUgdGltZXJhZGQoYSwgYiwgcmVzKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKHJlcyktPnR2X3NlYyAgPSAoYSktPnR2X3NlYyAgKyAoYiktPnR2X3NlYzsgIFwKKyAgICAgICAgKHJlcyktPnR2X3VzZWMgPSAoYSktPnR2X3VzZWMgKyAoYiktPnR2X3VzZWM7IFwKKyAgICAgICAgaWYgKChyZXMpLT50dl91c2VjID49IDEwMDAwMDApIHsgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIChyZXMpLT50dl91c2VjIC09IDEwMDAwMDA7ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIChyZXMpLT50dl9zZWMgICs9IDE7ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIHRpbWVyc3ViKGEsIGIsIHJlcykgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChyZXMpLT50dl9zZWMgID0gKGEpLT50dl9zZWMgIC0gKGIpLT50dl9zZWM7ICBcCisgICAgICAgIChyZXMpLT50dl91c2VjID0gKGEpLT50dl91c2VjIC0gKGIpLT50dl91c2VjOyBcCisgICAgICAgIGlmICgocmVzKS0+dHZfdXNlYyA8IDApIHsgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAocmVzKS0+dHZfdXNlYyArPSAxMDAwMDAwOyAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAocmVzKS0+dHZfc2VjICAtPSAxOyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9TWVNfVElNRV9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy90aW1lYi5oIGIvbGliYy9pbmNsdWRlL3N5cy90aW1lYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyY2MzOWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvc3lzL3RpbWViLmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfU1lTX1RJTUVCX0gKKyNkZWZpbmUgX1NZU19USU1FQl9ICisKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorCitfX0JFR0lOX0RFQ0xTCisKK3N0cnVjdCB0aW1lYiB7CisgICAgdGltZV90ICAgICAgICAgIHRpbWU7CisgICAgdW5zaWduZWQgc2hvcnQgIG1pbGxpdG07CisgICAgc2hvcnQgICAgICAgICAgIHRpbWV6b25lOworICAgIHNob3J0ICAgICAgICAgICBkc3RmbGFnOworfTsKKworZXh0ZXJuIGludCAgZnRpbWUoc3RydWN0IHRpbWViKiAgdGltZWJ1Zik7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfU1lTX1RJTUVCX0ggKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvdGltZXMuaCBiL2xpYmMvaW5jbHVkZS9zeXMvdGltZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjliOGIyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3N5cy90aW1lcy5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX1NZU19USU1FU19IXworI2RlZmluZSBfU1lTX1RJTUVTX0hfCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lcy5oPgorCitfX0JFR0lOX0RFQ0xTCisKK2V4dGVybiBjbG9ja190IHRpbWVzKHN0cnVjdCB0bXMgKik7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfU1lTX1RJTUVTX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL3R0eWNoYXJzLmggYi9saWJjL2luY2x1ZGUvc3lzL3R0eWNoYXJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvdHR5Y2hhcnMuaApkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy90dHlkZXYuaCBiL2xpYmMvaW5jbHVkZS9zeXMvdHR5ZGV2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvdHR5ZGV2LmgKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvdHlwZXMuaCBiL2xpYmMvaW5jbHVkZS9zeXMvdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDcxZWU5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3N5cy90eXBlcy5oCkBAIC0wLDAgKzEsMTI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9TWVNfVFlQRVNfSF8KKyNkZWZpbmUgX1NZU19UWVBFU19IXworCisjZGVmaW5lIF9fbmVlZF9zaXplX3QKKyNkZWZpbmUgX19uZWVkX3B0cmRpZmZfdAorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorCisjaW5jbHVkZSA8bGludXgvcG9zaXhfdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPG1hY2hpbmUva2VybmVsLmg+CisKK3R5cGVkZWYgX191MzIgICAgX19rZXJuZWxfZGV2X3Q7CisKKy8qIGJlIGNhcmVmdWwgd2l0aCBfX2tlcm5lbF9naWRfdCBhbmQgX19rZXJuZWxfdWlkX3QKKyAqIHRoZXNlIGFyZSBkZWZpbmVkIGFzIDE2LWJpdCBmb3IgbGVnYWN5IHJlYXNvbiwgYnV0CisgKiB0aGUga2VybmVsIHVzZXMgMzItYml0cyBpbnN0ZWFkLgorICoKKyAqIDMyLWJpdCB2YWx1ZWEgYXJlIHJlcXVpcmVkIGZvciBBbmRyb2lkLCBzbyB1c2UKKyAqIF9fa2VybmVsX3VpZDMyX3QgYW5kIF9fa2VybmVsX2dpZDMyX3QKKyAqLworCit0eXBlZGVmIF9fa2VybmVsX2Jsa2NudF90ICAgIGJsa2NudF90OwordHlwZWRlZiBfX2tlcm5lbF9ibGtzaXplX3QgICBibGtzaXplX3Q7Cit0eXBlZGVmIF9fa2VybmVsX2Nsb2NrX3QgICAgIGNsb2NrX3Q7Cit0eXBlZGVmIF9fa2VybmVsX2Nsb2NraWRfdCAgIGNsb2NraWRfdDsKK3R5cGVkZWYgX19rZXJuZWxfZGV2X3QgICAgICAgZGV2X3Q7Cit0eXBlZGVmIF9fa2VybmVsX2ZzYmxrY250X3QgIGZzYmxrY250X3Q7Cit0eXBlZGVmIF9fa2VybmVsX2ZzZmlsY250X3QgIGZzZmlsY250X3Q7Cit0eXBlZGVmIF9fa2VybmVsX2dpZDMyX3QgICAgIGdpZF90OwordHlwZWRlZiBfX2tlcm5lbF9pZF90ICAgICAgICBpZF90OwordHlwZWRlZiBfX2tlcm5lbF9pbm9fdCAgICAgICBpbm9fdDsKK3R5cGVkZWYgX19rZXJuZWxfa2V5X3QgICAgICAga2V5X3Q7Cit0eXBlZGVmIF9fa2VybmVsX21vZGVfdCAgICAgIG1vZGVfdDsKK3R5cGVkZWYgX19rZXJuZWxfbmxpbmtfdAkgbmxpbmtfdDsKKyNkZWZpbmUgX09GRl9UX0RFRklORURfCit0eXBlZGVmIF9fa2VybmVsX29mZl90ICAgICAgIG9mZl90OwordHlwZWRlZiBfX2tlcm5lbF9sb2ZmX3QgICAgICBsb2ZmX3Q7Cit0eXBlZGVmIGxvZmZfdCAgICAgICAgICAgICAgIG9mZjY0X3Q7ICAvKiBHTGliYy1zcGVjaWZpYyAqLworCit0eXBlZGVmIF9fa2VybmVsX3BpZF90CQkgcGlkX3Q7CisKKy8qIHdoaWxlIFBPU0lYIHdhbnRzIHRoZXNlIGluIDxzeXMvdHlwZXMuaD4sIHdlCisgKiBkZWNsYXJlIHRoZW4gaW4gPHB0aHJlYWQuaD4gaW5zdGVhZCAqLworI2lmIDAKK3R5cGVkZWYgIC4uLi4gcHRocmVhZF9hdHRyX3Q7Cit0eXBlZGVmICAuLi4uIHB0aHJlYWRfY29uZF90OwordHlwZWRlZiAgLi4uLiBwdGhyZWFkX2NvbmRhdHRyX3Q7Cit0eXBlZGVmICAuLi4uIHB0aHJlYWRfa2V5X3Q7Cit0eXBlZGVmICAuLi4uIHB0aHJlYWRfbXV0ZXhfdDsKK3R5cGVkZWYgIC4uLi4gcHRocmVhZF9vbmNlX3Q7Cit0eXBlZGVmICAuLi4uIHB0aHJlYWRfcndsb2NrX3Q7Cit0eXBlZGVmICAuLi4uIHB0aHJlYWRfcndsb2NrX2F0dHJfdDsKK3R5cGVkZWYgIC4uLi4gcHRocmVhZF90OworI2VuZGlmCisKKyNpZm5kZWYgX1NJWkVfVF9ERUZJTkVEXworI2RlZmluZSBfU0laRV9UX0RFRklORURfCit0eXBlZGVmIHVuc2lnbmVkIGludCAgc2l6ZV90OworI2VuZGlmCisKKy8qIHNpemVfdCBpcyBkZWZpbmVkIGJ5IHRoZSBHQ0Mtc3BlY2lmaWMgPHN0ZGRlZi5oPiAqLworI2lmbmRlZiBfU1NJWkVfVF9ERUZJTkVEXworI2RlZmluZSBfU1NJWkVfVF9ERUZJTkVEXwordHlwZWRlZiBsb25nIGludCAgc3NpemVfdDsKKyNlbmRpZgorCit0eXBlZGVmIF9fa2VybmVsX3N1c2Vjb25kc190ICBzdXNlY29uZHNfdDsKK3R5cGVkZWYgX19rZXJuZWxfdGltZV90ICAgICAgIHRpbWVfdDsKK3R5cGVkZWYgX19rZXJuZWxfdWlkMzJfdCAgICAgICAgdWlkX3Q7Cit0eXBlZGVmIHNpZ25lZCBsb25nICAgICAgICAgICB1c2Vjb25kc190OworCit0eXBlZGVmIF9fa2VybmVsX2RhZGRyX3QJZGFkZHJfdDsKK3R5cGVkZWYgX19rZXJuZWxfdGltZXJfdAl0aW1lcl90OwordHlwZWRlZiBfX2tlcm5lbF9tcWRfdAkJbXFkX3Q7CisKK3R5cGVkZWYgX19rZXJuZWxfY2FkZHJfdCAgICBjYWRkcl90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgICAgIHVpbnRfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50ICAgICAgICB1aW50OworCisvKiBmb3Igc29tZSBhcHBsaWNhdGlvbnMgKi8KKyNpbmNsdWRlIDxzeXMvc3lzbWFjcm9zLmg+CisKKyNpZmRlZiBfX0JTRF9WSVNJQkxFCit0eXBlZGVmCXVuc2lnbmVkIGNoYXIJdV9jaGFyOwordHlwZWRlZgl1bnNpZ25lZCBzaG9ydAl1X3Nob3J0OwordHlwZWRlZgl1bnNpZ25lZCBpbnQJdV9pbnQ7Cit0eXBlZGVmCXVuc2lnbmVkIGxvbmcJdV9sb25nOworCit0eXBlZGVmIHVpbnQzMl90ICAgICAgIHVfaW50MzJfdDsKK3R5cGVkZWYgdWludDE2X3QgICAgICAgdV9pbnQxNl90OwordHlwZWRlZiB1aW50OF90ICAgICAgICB1X2ludDhfdDsKK3R5cGVkZWYgdWludDY0X3QgICAgICAgdV9pbnQ2NF90OworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy91aW8uaCBiL2xpYmMvaW5jbHVkZS9zeXMvdWlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI1MTcxNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvdWlvLmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfU1lTX1VJT19IXworI2RlZmluZSBfU1lTX1VJT19IXworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdWlvLmg+CisKK19fQkVHSU5fREVDTFMKKworaW50IHJlYWR2KGludCwgY29uc3Qgc3RydWN0IGlvdmVjICosIGludCk7CitpbnQgd3JpdGV2KGludCwgY29uc3Qgc3RydWN0IGlvdmVjICosIGludCk7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfU1lTX1VJT19IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy91bi5oIGIvbGliYy9pbmNsdWRlL3N5cy91bi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3Mzg2MWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvc3lzL3VuLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfU1lTX1VOX0hfCisjZGVmaW5lIF9TWVNfVU5fSF8KKworI2luY2x1ZGUgPGxpbnV4L3VuLmg+CisKKyNlbmRpZiAvKiBfU1lTX1VOX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL3V0aW1lLmggYi9saWJjL2luY2x1ZGUvc3lzL3V0aW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY4ODEwZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvdXRpbWUuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9TWVNfVVRJTUVfSF8KKyNkZWZpbmUgX1NZU19VVElNRV9IXworCisjaW5jbHVkZSA8bGludXgvdXRpbWUuaD4KKworI2VuZGlmIC8qIF9TWVNfVVRJTUVfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvdXRzbmFtZS5oIGIvbGliYy9pbmNsdWRlL3N5cy91dHNuYW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU0YTk5NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvdXRzbmFtZS5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX1NZU19VVFNOQU1FX0hfCisjZGVmaW5lIF9TWVNfVVRTTkFNRV9IXworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisKK19fQkVHSU5fREVDTFMKKworI2RlZmluZSBTWVNfTk1MTiA2NQorCitzdHJ1Y3QgdXRzbmFtZSB7CisgICAgY2hhciAgc3lzbmFtZSAgIFtTWVNfTk1MTl07CisgICAgY2hhciAgbm9kZW5hbWUgIFtTWVNfTk1MTl07CisgICAgY2hhciAgcmVsZWFzZSAgIFtTWVNfTk1MTl07CisgICAgY2hhciAgdmVyc2lvbiAgIFtTWVNfTk1MTl07CisgICAgY2hhciAgbWFjaGluZSAgIFtTWVNfTk1MTl07CisgICAgY2hhciAgZG9tYWlubmFtZVtTWVNfTk1MTl07Cit9OworCitleHRlcm4gaW50IHVuYW1lKHN0cnVjdCB1dHNuYW1lICopOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX1NZU19VVFNOQU1FX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL3Zmcy5oIGIvbGliYy9pbmNsdWRlL3N5cy92ZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWRhZjVmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3N5cy92ZnMuaApAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfU1lTX1ZGU19IXworI2RlZmluZSBfU1lTX1ZGU19IXworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKK19fQkVHSU5fREVDTFMKKworLyogbm90ZTogdGhpcyBjb3JyZXNwb25kcyB0byB0aGUga2VybmVsJ3Mgc3RhdGZzNjQgdHlwZSAqLworc3RydWN0IHN0YXRmcyB7CisgICAgdWludDMyX3QgICAgICAgIGZfdHlwZTsKKyAgICB1aW50MzJfdCAgICAgICAgZl9ic2l6ZTsKKyAgICB1aW50NjRfdCAgICAgICAgZl9ibG9ja3M7CisgICAgdWludDY0X3QgICAgICAgIGZfYmZyZWU7CisgICAgdWludDY0X3QgICAgICAgIGZfYmF2YWlsOworICAgIHVpbnQ2NF90ICAgICAgICBmX2ZpbGVzOworICAgIHVpbnQ2NF90ICAgICAgICBmX2ZmcmVlOworICAgIF9fa2VybmVsX2ZzaWRfdCBmX2ZzaWQ7CisgICAgdWludDMyX3QgICAgICAgIGZfbmFtZWxlbjsKKyAgICB1aW50MzJfdCAgICAgICAgZl9mcnNpemU7CisgICAgdWludDMyX3QgICAgICAgIGZfc3BhcmVbNV07Cit9OworCisjZGVmaW5lICBBREZTX1NVUEVSX01BR0lDICAgICAgMHhhZGY1CisjZGVmaW5lICBBRkZTX1NVUEVSX01BR0lDICAgICAgMHhBREZGCisjZGVmaW5lICBCRUZTX1NVUEVSX01BR0lDICAgICAgMHg0MjQ2NTMzMQorI2RlZmluZSAgQkZTX01BR0lDICAgICAgICAgICAgIDB4MUJBREZBQ0UKKyNkZWZpbmUgIENJRlNfTUFHSUNfTlVNQkVSICAgICAweEZGNTM0RDQyCisjZGVmaW5lICBDT0RBX1NVUEVSX01BR0lDICAgICAgMHg3Mzc1NzI0NQorI2RlZmluZSAgQ09IX1NVUEVSX01BR0lDICAgICAgIDB4MDEyRkY3QjcKKyNkZWZpbmUgIENSQU1GU19NQUdJQyAgICAgICAgICAweDI4Y2QzZDQ1CisjZGVmaW5lICBERVZGU19TVVBFUl9NQUdJQyAgICAgMHgxMzczCisjZGVmaW5lICBFRlNfU1VQRVJfTUFHSUMgICAgICAgMHgwMDQxNEE1MworI2RlZmluZSAgRVhUX1NVUEVSX01BR0lDICAgICAgIDB4MTM3RAorI2RlZmluZSAgRVhUMl9PTERfU1VQRVJfTUFHSUMgIDB4RUY1MQorI2RlZmluZSAgRVhUMl9TVVBFUl9NQUdJQyAgICAgIDB4RUY1MworI2RlZmluZSAgRVhUM19TVVBFUl9NQUdJQyAgICAgIDB4RUY1MworI2RlZmluZSAgSEZTX1NVUEVSX01BR0lDICAgICAgIDB4NDI0NAorI2RlZmluZSAgSFBGU19TVVBFUl9NQUdJQyAgICAgIDB4Rjk5NUU4NDkKKyNkZWZpbmUgIEhVR0VUTEJGU19NQUdJQyAgICAgICAweDk1ODQ1OGY2CisjZGVmaW5lICBJU09GU19TVVBFUl9NQUdJQyAgICAgMHg5NjYwCisjZGVmaW5lICBKRkZTMl9TVVBFUl9NQUdJQyAgICAgMHg3MmI2CisjZGVmaW5lICBKRlNfU1VQRVJfTUFHSUMgICAgICAgMHgzMTUzNDY0YQorI2RlZmluZSAgTUlOSVhfU1VQRVJfTUFHSUMgICAgIDB4MTM3RiAvKiBvcmlnLiBtaW5peCAqLworI2RlZmluZSAgTUlOSVhfU1VQRVJfTUFHSUMyICAgIDB4MTM4RiAvKiAzMCBjaGFyIG1pbml4ICovCisjZGVmaW5lICBNSU5JWDJfU1VQRVJfTUFHSUMgICAgMHgyNDY4IC8qIG1pbml4IFYyICovCisjZGVmaW5lICBNSU5JWDJfU1VQRVJfTUFHSUMyICAgMHgyNDc4IC8qIG1pbml4IFYyLCAzMCBjaGFyIG5hbWVzICovCisjZGVmaW5lICBNU0RPU19TVVBFUl9NQUdJQyAgICAgMHg0ZDQ0CisjZGVmaW5lICBOQ1BfU1VQRVJfTUFHSUMgICAgICAgMHg1NjRjCisjZGVmaW5lICBORlNfU1VQRVJfTUFHSUMgICAgICAgMHg2OTY5CisjZGVmaW5lICBOVEZTX1NCX01BR0lDICAgICAgICAgMHg1MzQ2NTQ0ZQorI2RlZmluZSAgT1BFTlBST01fU1VQRVJfTUFHSUMgIDB4OWZhMQorI2RlZmluZSAgUFJPQ19TVVBFUl9NQUdJQyAgICAgIDB4OWZhMAorI2RlZmluZSAgUU5YNF9TVVBFUl9NQUdJQyAgICAgIDB4MDAyZgorI2RlZmluZSAgUkVJU0VSRlNfU1VQRVJfTUFHSUMgIDB4NTI2NTQ5NzMKKyNkZWZpbmUgIFJPTUZTX01BR0lDICAgICAgICAgICAweDcyNzUKKyNkZWZpbmUgIFNNQl9TVVBFUl9NQUdJQyAgICAgICAweDUxN0IKKyNkZWZpbmUgIFNZU1YyX1NVUEVSX01BR0lDICAgICAweDAxMkZGN0I2CisjZGVmaW5lICBTWVNWNF9TVVBFUl9NQUdJQyAgICAgMHgwMTJGRjdCNQorI2RlZmluZSAgVE1QRlNfTUFHSUMgICAgICAgICAgIDB4MDEwMjE5OTQKKyNkZWZpbmUgIFVERl9TVVBFUl9NQUdJQyAgICAgICAweDE1MDEzMzQ2CisjZGVmaW5lICBVRlNfTUFHSUMgICAgICAgICAgICAgMHgwMDAxMTk1NAorI2RlZmluZSAgVVNCREVWSUNFX1NVUEVSX01BR0lDIDB4OWZhMgorI2RlZmluZSAgVlhGU19TVVBFUl9NQUdJQyAgICAgIDB4YTUwMUZDRjUKKyNkZWZpbmUgIFhFTklYX1NVUEVSX01BR0lDICAgICAweDAxMkZGN0I0CisjZGVmaW5lICBYRlNfU1VQRVJfTUFHSUMgICAgICAgMHg1ODQ2NTM0MgorI2RlZmluZSAgX1hJQUZTX1NVUEVSX01BR0lDICAgIDB4MDEyRkQxNkQKKworZXh0ZXJuIGludCBzdGF0ZnMoY29uc3QgY2hhciAqLCBzdHJ1Y3Qgc3RhdGZzICopOworZXh0ZXJuIGludCBmc3RhdGZzKGludCwgc3RydWN0IHN0YXRmcyAqKTsKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9TWVNfVkZTX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL3Z0LmggYi9saWJjL2luY2x1ZGUvc3lzL3Z0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM3YTg2OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvdnQuaApAQCAtMCwwICsxLDI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8bGludXgvdnQuaD4KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvd2FpdC5oIGIvbGliYy9pbmNsdWRlL3N5cy93YWl0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJhMTgzNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvd2FpdC5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX1NZU19XQUlUX0hfCisjZGVmaW5lIF9TWVNfV0FJVF9IXworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorCitfX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VYSVRTVEFUVVMocykgICgoKHMpICYgMHhmZjAwKSA+PiA4KQorI2RlZmluZSBXQ09SRURVTVAocykgICAgKChzKSAmIDB4ODApCisjZGVmaW5lIFdURVJNU0lHKHMpICAgICAoKHMpICYgMHg3ZikKKyNkZWZpbmUgV1NUT1BTSUcocykgICAgIFdFWElUU1RBVFVTKHMpCisKKyNkZWZpbmUgV0lGRVhJVEVEKHMpICAgIChXVEVSTVNJRyhzKSA9PSAwKQorI2RlZmluZSBXSUZTVE9QUEVEKHMpICAgKFdURVJNU0lHKHMpID09IDB4N2YpCisjZGVmaW5lIFdJRlNJR05BTEVEKHMpICAoV1RFUk1TSUcoKHMpKzEpID49IDIpCisKK2V4dGVybiBwaWRfdCAgd2FpdChpbnQgKik7CitleHRlcm4gcGlkX3QgIHdhaXRwaWQocGlkX3QsIGludCAqLCBpbnQpOworZXh0ZXJuIHBpZF90ICB3YWl0MyhpbnQgKiwgaW50LCBzdHJ1Y3QgcnVzYWdlICopOworZXh0ZXJuIHBpZF90ICB3YWl0NChwaWRfdCwgaW50ICosIGludCwgc3RydWN0IHJ1c2FnZSAqKTsKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9TWVNfV0FJVF9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5c2xvZy5oIGIvbGliYy9pbmNsdWRlL3N5c2xvZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzNWJjNzkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvc3lzbG9nLmgKQEAgLTAsMCArMSwxMTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX1NZU0xPR19ICisjZGVmaW5lIF9TWVNMT0dfSAorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworX19CRUdJTl9ERUNMUworCisvKiBBbGVydCBsZXZlbHMgKi8KKyNkZWZpbmUgTE9HX0VNRVJHCTAKKyNkZWZpbmUgTE9HX0FMRVJUCTEKKyNkZWZpbmUgTE9HX0NSSVQJMgorI2RlZmluZSBMT0dfRVJSCQkzCisjZGVmaW5lIExPR19XQVJOSU5HCTQKKyNkZWZpbmUgTE9HX05PVElDRQk1CisjZGVmaW5lIExPR19JTkZPCTYKKyNkZWZpbmUgTE9HX0RFQlVHCTcKKworI2RlZmluZSBMT0dfUFJJTUFTSwk3CisjZGVmaW5lIExPR19QUkkoeCkJKCh4KSAmIExPR19QUklNQVNLKQorCisKKy8qIEZhY2lsaXRpZXM7IG5vdCBhY3R1YWxseSB1c2VkICovCisjZGVmaW5lIExPR19LRVJOCTAwMDAKKyNkZWZpbmUgTE9HX1VTRVIJMDAxMAorI2RlZmluZSBMT0dfTUFJTAkwMDIwCisjZGVmaW5lIExPR19EQUVNT04JMDAzMAorI2RlZmluZSBMT0dfQVVUSAkwMDQwCisjZGVmaW5lIExPR19TWVNMT0cJMDA1MAorI2RlZmluZSBMT0dfTFBSCQkwMDYwCisjZGVmaW5lIExPR19ORVdTCTAwNzAKKyNkZWZpbmUgTE9HX1VVQ1AJMDEwMAorI2RlZmluZSBMT0dfQ1JPTgkwMTEwCisjZGVmaW5lIExPR19BVVRIUFJJVgkwMTIwCisjZGVmaW5lIExPR19GVFAJCTAxMzAKKyNkZWZpbmUgTE9HX0xPQ0FMMAkwMjAwCisjZGVmaW5lIExPR19MT0NBTDEJMDIxMAorI2RlZmluZSBMT0dfTE9DQUwyCTAyMjAKKyNkZWZpbmUgTE9HX0xPQ0FMMwkwMjMwCisjZGVmaW5lIExPR19MT0NBTDQJMDI0MAorI2RlZmluZSBMT0dfTE9DQUw1CTAyNTAKKyNkZWZpbmUgTE9HX0xPQ0FMNgkwMjYwCisjZGVmaW5lIExPR19MT0NBTDcJMDI3MAorCisjZGVmaW5lIExPR19GQUNNQVNLCTAxNzcwCisjZGVmaW5lIExPR19GQUMoeCkJKCgoeCkgPj4gMykgJiAoTE9HX0ZBQ01BU0sgPj4gMykpCisKKyNkZWZpbmUJTE9HX01BU0socHJpKQkoMSA8PCAocHJpKSkJCS8qIG1hc2sgZm9yIG9uZSBwcmlvcml0eSAqLworI2RlZmluZQlMT0dfVVBUTyhwcmkpCSgoMSA8PCAoKHByaSkrMSkpIC0gMSkJLyogYWxsIHByaW9yaXRpZXMgdGhyb3VnaCBwcmkgKi8KKworLyogb3BlbmxvZygpIGZsYWdzOyBvbmx5IExPR19QSUQgYW5kIExPR19QRVJST1Igc3VwcG9ydGVkICovCisjZGVmaW5lICAgICAgICBMT0dfUElEICAgICAgICAgMHgwMSAgICAvKiBpbmNsdWRlIHBpZCB3aXRoIG1lc3NhZ2UgKi8KKyNkZWZpbmUgICAgICAgIExPR19DT05TICAgICAgICAweDAyICAgIC8qIHdyaXRlIHRvIGNvbnNvbGUgb24gbG9nZ2VyIGVycm9yICovCisjZGVmaW5lICAgICAgICBMT0dfT0RFTEFZICAgICAgMHgwNCAgICAvKiBkZWxheSBjb25uZWN0aW9uIHVudGlsIHN5c2xvZygpICovCisjZGVmaW5lICAgICAgICBMT0dfTkRFTEFZICAgICAgMHgwOCAgICAvKiBvcGVuIGNvbm5lY3Rpb24gaW1tZWRpYXRlbHkgKi8KKyNkZWZpbmUgICAgICAgIExPR19OT1dBSVQgICAgICAweDEwICAgIC8qIHdhaXQgZm9yIGNoaWxkIHByb2Nlc3NlcyAodW51c2VkIG9uIGxpbnV4KSAqLworI2RlZmluZSAgICAgICAgTE9HX1BFUlJPUiAgICAgIDB4MjAgICAgLyogYWRkaXRpb25hbCBsb2dnaW5nIHRvIHN0ZGVyciAqLworCisvKiBCSU9OSUM6IHRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMgYXJlIGZyb20gT3BlbkJTRCdzIHN5cy9zeXNsb2cuaAorICovCitzdHJ1Y3Qgc3lzbG9nX2RhdGEgeworCWludAlsb2dfZmlsZTsKKyAgICAgICAgaW50CWNvbm5lY3RlZDsKKyAgICAgICAgaW50CW9wZW5lZDsKKyAgICAgICAgaW50CWxvZ19zdGF0OworICAgICAgICBjb25zdCBjaGFyIAkqbG9nX3RhZzsKKyAgICAgICAgaW50IAlsb2dfZmFjOworICAgICAgICBpbnQgCWxvZ19tYXNrOworfTsKKworI2RlZmluZSBTWVNMT0dfREFUQV9JTklUIHstMSwgMCwgMCwgMCwgKGNvbnN0IGNoYXIgKikwLCBMT0dfVVNFUiwgMHhmZn0KKworI2RlZmluZSBfUEFUSF9MT0cgICIvZGV2L2ttc2ciCisKK2V4dGVybiB2b2lkCWNsb3NlbG9nKHZvaWQpOworZXh0ZXJuIHZvaWQJb3BlbmxvZyhjb25zdCBjaGFyICosIGludCwgaW50KTsKK2V4dGVybiBpbnQJc2V0bG9nbWFzayhpbnQpOworZXh0ZXJuIHZvaWQJc3lzbG9nKGludCwgY29uc3QgY2hhciAqLCAuLi4pOworZXh0ZXJuIHZvaWQJdnN5c2xvZyhpbnQsIGNvbnN0IGNoYXIgKiwgdmFfbGlzdCk7CitleHRlcm4gdm9pZAljbG9zZWxvZ19yKHN0cnVjdCBzeXNsb2dfZGF0YSAqKTsKK2V4dGVybiB2b2lkCW9wZW5sb2dfcihjb25zdCBjaGFyICosIGludCwgaW50LCBzdHJ1Y3Qgc3lzbG9nX2RhdGEgKik7CitleHRlcm4gaW50CXNldGxvZ21hc2tfcihpbnQsIHN0cnVjdCBzeXNsb2dfZGF0YSAqKTsKK2V4dGVybiB2b2lkCXN5c2xvZ19yKGludCwgc3RydWN0IHN5c2xvZ19kYXRhICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKK2V4dGVybiB2b2lkCXZzeXNsb2dfcihpbnQsIHN0cnVjdCBzeXNsb2dfZGF0YSAqLCBjb25zdCBjaGFyICosIHZhX2xpc3QpOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX1NZU0xPR19IICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvdGVybWlvcy5oIGIvbGliYy9pbmNsdWRlL3Rlcm1pb3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDE5MDg5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3Rlcm1pb3MuaApAQCAtMCwwICsxLDExMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfVEVSTUlPU19IXworI2RlZmluZSBfVEVSTUlPU19IXworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8bGludXgvdGVybWlvcy5oPgorCitfX0JFR0lOX0RFQ0xTCisKKy8qIFJlZGVmaW5lIHRoZXNlIHRvIG1hdGNoIHRoZWlyIGlvY3RsIG51bWJlciAqLworI3VuZGVmICBUQ1NBTk9XCisjZGVmaW5lIFRDU0FOT1cgICAgVENTRVRTCisKKyN1bmRlZiAgVENTQURSQUlOCisjZGVmaW5lIFRDU0FEUkFJTiAgVENTRVRTVworCisjdW5kZWYgIFRDU0FGTFVTSAorI2RlZmluZSBUQ1NBRkxVU0ggIFRDU0VUU0YKKworc3RhdGljIF9faW5saW5lX18gaW50IHRjZ2V0YXR0cihpbnQgZmQsIHN0cnVjdCB0ZXJtaW9zICpzKQoreworICAgIHJldHVybiBpb2N0bChmZCwgVENHRVRTLCBzKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IHRjc2V0YXR0cihpbnQgZmQsIGludCBfX29wdCwgY29uc3Qgc3RydWN0IHRlcm1pb3MgKnMpCit7CisgICAgcmV0dXJuIGlvY3RsKGZkLCBfX29wdCwgKHZvaWQgKilzKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IHRjZmxvdyhpbnQgZmQsIGludCBhY3Rpb24pCit7CisgICAgcmV0dXJuIGlvY3RsKGZkLCBUQ1hPTkMsICh2b2lkICopKGludHB0cl90KWFjdGlvbik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCB0Y2ZsdXNoKGludCBmZCwgaW50IF9fcXVldWUpCit7CisgICAgcmV0dXJuIGlvY3RsKGZkLCBUQ0ZMU0gsICh2b2lkICopKGludHB0cl90KV9fcXVldWUpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBwaWRfdCB0Y2dldHNpZChpbnQgZmQpCit7CisgICAgcGlkX3QgX3BpZDsKKyAgICByZXR1cm4gaW9jdGwoZmQsIFRJT0NHU0lELCAmX3BpZCkgPyAocGlkX3QpLTEgOiBfcGlkOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgdGNzZW5kYnJlYWsoaW50IGZkLCBpbnQgX19kdXJhdGlvbikKK3sKKyAgICByZXR1cm4gaW9jdGwoZmQsIFRDU0JSS1AsICh2b2lkICopKHVpbnRwdHJfdClfX2R1cmF0aW9uKTsKK30KKworc3RhdGljIF9faW5saW5lX18gc3BlZWRfdCBjZmdldG9zcGVlZChjb25zdCBzdHJ1Y3QgdGVybWlvcyAqcykKK3sKKyAgICByZXR1cm4gKHNwZWVkX3QpKHMtPmNfY2ZsYWcgJiBDQkFVRCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBjZnNldG9zcGVlZChzdHJ1Y3QgdGVybWlvcyAqcywgc3BlZWRfdCAgc3BlZWQpCit7CisgICAgcy0+Y19jZmxhZyA9IChzLT5jX2NmbGFnICYgfkNCQVVEKSB8IChzcGVlZCAmIENCQVVEKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIF9faW5saW5lX18gc3BlZWRfdCBjZmdldGlzcGVlZChjb25zdCBzdHJ1Y3QgdGVybWlvcyAqcykKK3sKKyAgICByZXR1cm4gKHNwZWVkX3QpKHMtPmNfY2ZsYWcgJiBDQkFVRCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBjZnNldGlzcGVlZChzdHJ1Y3QgdGVybWlvcyAqcywgc3BlZWRfdCAgc3BlZWQpCit7CisgICAgcy0+Y19jZmxhZyA9IChzLT5jX2NmbGFnICYgfkNCQVVEKSB8IChzcGVlZCAmIENCQVVEKTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgY2ZtYWtlcmF3KHN0cnVjdCB0ZXJtaW9zICpzKQoreworICAgIHMtPmNfaWZsYWcgJj0gfihJR05CUkt8QlJLSU5UfFBBUk1SS3xJU1RSSVB8SU5MQ1J8SUdOQ1J8SUNSTkx8SVhPTik7CisgICAgcy0+Y19vZmxhZyAmPSB+T1BPU1Q7CisgICAgcy0+Y19sZmxhZyAmPSB+KEVDSE98RUNIT05MfElDQU5PTnxJU0lHfElFWFRFTik7CisgICAgcy0+Y19jZmxhZyAmPSB+KENTSVpFfFBBUkVOQik7CisgICAgcy0+Y19jZmxhZyB8PSBDUzg7Cit9CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfVEVSTUlPU19IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3RpbWUuaCBiL2xpYmMvaW5jbHVkZS90aW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVjMjM1OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS90aW1lLmgKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX1RJTUVfSF8KKyNkZWZpbmUgX1RJTUVfSF8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisKKyNkZWZpbmUgX19BUkNIX1NJX1VJRF9UIF9fa2VybmVsX3VpZDMyX3QKKyNpbmNsdWRlIDxhc20vc2lnaW5mby5oPgorI3VuZGVmIF9fQVJDSF9TSV9VSURfVAorCitfX0JFR0lOX0RFQ0xTCisKK2V4dGVybiB0aW1lX3QgICB0aW1lKHRpbWVfdCAqKTsKK2V4dGVybiBpbnQgICAgICBuYW5vc2xlZXAoY29uc3Qgc3RydWN0IHRpbWVzcGVjICosIHN0cnVjdCB0aW1lc3BlYyAqKTsKKworZXh0ZXJuIGNoYXIgKnN0cnRvdGltZXZhbChjb25zdCBjaGFyICpzdHIsIHN0cnVjdCB0aW1ldmFsICp0dik7CisKK3N0cnVjdCB0bSB7CisgICBpbnQgICAgIHRtX3NlYzsgICAgICAgICAvKiBzZWNvbmRzICovCisgICBpbnQgICAgIHRtX21pbjsgICAgICAgICAvKiBtaW51dGVzICovCisgICBpbnQgICAgIHRtX2hvdXI7ICAgICAgICAvKiBob3VycyAqLworICAgaW50ICAgICB0bV9tZGF5OyAgICAgICAgLyogZGF5IG9mIHRoZSBtb250aCAqLworICAgaW50ICAgICB0bV9tb247ICAgICAgICAgLyogbW9udGggKi8KKyAgIGludCAgICAgdG1feWVhcjsgICAgICAgIC8qIHllYXIgKi8KKyAgIGludCAgICAgdG1fd2RheTsgICAgICAgIC8qIGRheSBvZiB0aGUgd2VlayAqLworICAgaW50ICAgICB0bV95ZGF5OyAgICAgICAgLyogZGF5IGluIHRoZSB5ZWFyICovCisgICBpbnQgICAgIHRtX2lzZHN0OyAgICAgICAvKiBkYXlsaWdodCBzYXZpbmcgdGltZSAqLworCisgICBsb25nIGludCB0bV9nbXRvZmY7ICAgICAvKiBTZWNvbmRzIGVhc3Qgb2YgVVRDLiAgKi8KKyAgIGNvbnN0IGNoYXIgKnRtX3pvbmU7ICAgIC8qIFRpbWV6b25lIGFiYnJldmlhdGlvbi4gICovCisKK307CisKKy8qIGRlZmluaW5nIFRNX1pPTkUgaW5kaWNhdGVzIHRoYXQgd2UgaGF2ZSBhICJ0aW1lem9uZSBhYmJyZXZpYXRpb24iIGZpZWxkIGluCisgKiBzdHJ1Y3QgdG0sIHRoZSB2YWx1ZSBzaG91bGQgYmUgdGhlIGZpZWxkIG5hbWUKKyAqLworI2RlZmluZSAgIFRNX1pPTkUgICB0bV96b25lCisKK2V4dGVybiBjaGFyKiBhc2N0aW1lKGNvbnN0IHN0cnVjdCB0bSogYSk7CitleHRlcm4gY2hhciogYXNjdGltZV9yKGNvbnN0IHN0cnVjdCB0bSogYSwgY2hhciogYnVmKTsKKworLyogUmV0dXJuIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gVElNRTEgYW5kIFRJTUUwLiAgKi8KK2V4dGVybiBkb3VibGUgZGlmZnRpbWUgKHRpbWVfdCBfX3RpbWUxLCB0aW1lX3QgX190aW1lMCk7CitleHRlcm4gdGltZV90IG1rdGltZSAoc3RydWN0IHRtICphKTsKKworZXh0ZXJuIHN0cnVjdCB0bSogIGxvY2FsdGltZShjb25zdCB0aW1lX3QgKnQpOworZXh0ZXJuIHN0cnVjdCB0bSogIGxvY2FsdGltZV9yKGNvbnN0IHRpbWVfdCAqdGltZXAsIHN0cnVjdCB0bSAqcmVzdWx0KTsKKworZXh0ZXJuIHN0cnVjdCB0bSogIGdtdGltZShjb25zdCB0aW1lX3QgKnRpbWVwKTsKK2V4dGVybiBzdHJ1Y3QgdG0qICBnbXRpbWVfcihjb25zdCB0aW1lX3QgKnRpbWVwLCBzdHJ1Y3QgdG0gKnJlc3VsdCk7CisKK2V4dGVybiBjaGFyKiAgICAgICBzdHJwdGltZShjb25zdCBjaGFyICpidWYsIGNvbnN0IGNoYXIgKmZtdCwgc3RydWN0IHRtICp0bSk7CitleHRlcm4gc2l6ZV90ICAgICAgc3RyZnRpbWUoY2hhciAqcywgc2l6ZV90IG1heCwgY29uc3QgY2hhciAqZm9ybWF0LCBjb25zdCBzdHJ1Y3QgdG0gKnRtKTsKKworZXh0ZXJuIGNoYXIgKmN0aW1lKGNvbnN0IHRpbWVfdCAqdGltZXApOworZXh0ZXJuIGNoYXIgKmN0aW1lX3IoY29uc3QgdGltZV90ICp0aW1lcCwgY2hhciAqYnVmKTsKKworLyogZ2xvYmFsIGluY2x1ZGVzICovCitleHRlcm4gY2hhciogICAgIHR6bmFtZVtdOworZXh0ZXJuIGludCAgICAgICBkYXlsaWdodDsKK2V4dGVybiBsb25nIGludCAgdGltZXpvbmU7CisKKyNkZWZpbmUgQ0xPQ0tTX1BFUl9TRUMgICAgIDEwMDAwMDAKKworZXh0ZXJuIGNsb2NrX3QgICBjbG9jaygpOworCisvKiBCSU9OSUM6IGV4dHJhIGxpbnV4IGNsb2NrIGdvb2RpZXMgKi8KK2V4dGVybiBpbnQgY2xvY2tfZ2V0cmVzKGludCwgc3RydWN0IHRpbWVzcGVjICopOworZXh0ZXJuIGludCBjbG9ja19nZXR0aW1lKGludCwgc3RydWN0IHRpbWVzcGVjICopOworCisjZGVmaW5lIENMT0NLX1JFQUxUSU1FICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ0xPQ0tfTU9OT1RPTklDICAgICAgICAgICAgMQorI2RlZmluZSBDTE9DS19QUk9DRVNTX0NQVVRJTUVfSUQgICAyCisjZGVmaW5lIENMT0NLX1RIUkVBRF9DUFVUSU1FX0lEICAgIDMKKyNkZWZpbmUgQ0xPQ0tfUkVBTFRJTUVfSFIgICAgICAgICAgNAorI2RlZmluZSBDTE9DS19NT05PVE9OSUNfSFIgICAgICAgICA1CisKK2V4dGVybiBpbnQgIHRpbWVyX2NyZWF0ZShpbnQsIHN0cnVjdCBzaWdldmVudCosIHRpbWVyX3QqKTsKK2V4dGVybiBpbnQgIHRpbWVyX2RlbGV0ZSh0aW1lcl90KTsKK2V4dGVybiBpbnQgIHRpbWVyX3NldHRpbWUodGltZXJfdCB0aW1lcmlkLCBpbnQgZmxhZ3MsIGNvbnN0IHN0cnVjdCBpdGltZXJzcGVjICp2YWx1ZSwgc3RydWN0IGl0aW1lcnNwZWMgKm92YWx1ZSk7CitleHRlcm4gaW50ICB0aW1lcl9nZXR0aW1lKHRpbWVyX3QgdGltZXJpZCwgc3RydWN0IGl0aW1lcnNwZWMgKnZhbHVlKTsKK2V4dGVybiBpbnQgIHRpbWVyX2dldG92ZXJydW4odGltZXJfdCAgdGltZXJpZCk7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfVElNRV9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3RpbWU2NC5oIGIvbGliYy9pbmNsdWRlL3RpbWU2NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkYTRiYzcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvdGltZTY0LmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKworQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggIE1pY2hhZWwgRyBTY2h3ZXJuCisKK1RoaXMgc29mdHdhcmUgb3JpZ2luYWxseSBkZXJpdmVkIGZyb20gUGF1bCBTaGVlcidzIHBpdm90YWxfZ210aW1lX3IuYy4KKworVGhlIE1JVCBMaWNlbnNlOgorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CitvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAoraW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwordG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCitmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKK09VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KK1RIRSBTT0ZUV0FSRS4KKworT3JpZ2luOiBodHRwOi8vY29kZS5nb29nbGUuY29tL3AveTIwMzgKK01vZGlmaWVkIGZvciBCaW9uaWMgYnkgdGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisqLworI2lmbmRlZiBUSU1FNjRfSAorI2RlZmluZSBUSU1FNjRfSAorCisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCit0eXBlZGVmIGludDY0X3QgIHRpbWU2NF90OworCitzdHJ1Y3QgdG0gKmdtdGltZTY0X3IgKGNvbnN0IHRpbWU2NF90ICosIHN0cnVjdCB0bSAqKTsKK3N0cnVjdCB0bSAqbG9jYWx0aW1lNjRfciAoY29uc3QgdGltZTY0X3QgKiwgc3RydWN0IHRtICopOworc3RydWN0IHRtICpnbXRpbWU2NCAoY29uc3QgdGltZTY0X3QgKik7CitzdHJ1Y3QgdG0gKmxvY2FsdGltZTY0IChjb25zdCB0aW1lNjRfdCAqKTsKKworY2hhciAqYXNjdGltZTY0IChjb25zdCBzdHJ1Y3QgdG0gKik7CitjaGFyICphc2N0aW1lNjRfciAoY29uc3Qgc3RydWN0IHRtICosIGNoYXIgKik7CisKK2NoYXIgKmN0aW1lNjQgKGNvbnN0IHRpbWU2NF90Kik7CitjaGFyICpjdGltZTY0X3IgKGNvbnN0IHRpbWU2NF90KiwgY2hhciopOworCit0aW1lNjRfdCB0aW1lZ202NCAoY29uc3Qgc3RydWN0IHRtICopOwordGltZTY0X3QgbWt0aW1lNjQgKGNvbnN0IHN0cnVjdCB0bSAqKTsKK3RpbWU2NF90IHRpbWVsb2NhbDY0IChjb25zdCBzdHJ1Y3QgdG0gKik7CisKKyNlbmRpZiAvKiBUSU1FNjRfSCAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3VuaXN0ZC5oIGIvbGliYy9pbmNsdWRlL3VuaXN0ZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhZGEzN2UKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvdW5pc3RkLmgKQEAgLTAsMCArMSwxOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX1VOSVNURF9IXworI2RlZmluZSBfVU5JU1REX0hfCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CisjaW5jbHVkZSA8c3lzL3N5c2NvbmYuaD4KKyNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CisjaW5jbHVkZSA8cGF0aGNvbmYuaD4KKworX19CRUdJTl9ERUNMUworCisvKiBTdGFuZGFyZCBmaWxlIGRlc2NyaXB0b3IgbnVtYmVycy4gKi8KKyNkZWZpbmUgU1RESU5fRklMRU5PCTAKKyNkZWZpbmUgU1RET1VUX0ZJTEVOTwkxCisjZGVmaW5lIFNUREVSUl9GSUxFTk8JMgorCisvKiBWYWx1ZXMgZm9yIHdoZW5jZSBpbiBmc2VlayBhbmQgbHNlZWsgKi8KKyNkZWZpbmUgU0VFS19TRVQgMAorI2RlZmluZSBTRUVLX0NVUiAxCisjZGVmaW5lIFNFRUtfRU5EIDIKKworZXh0ZXJuIGNoYXIgKiplbnZpcm9uOworZXh0ZXJuIF9fbm9yZXR1cm4gdm9pZCBfZXhpdChpbnQpOworCitleHRlcm4gcGlkX3QgIGZvcmsodm9pZCk7CitleHRlcm4gcGlkX3QgIHZmb3JrKHZvaWQpOworZXh0ZXJuIHBpZF90ICBnZXRwaWQodm9pZCk7CitleHRlcm4gcGlkX3QgIGdldHRpZCh2b2lkKTsKK2V4dGVybiBwaWRfdCAgZ2V0cGdpZChwaWRfdCk7CitleHRlcm4gaW50ICAgIHNldHBnaWQocGlkX3QsIHBpZF90KTsKK2V4dGVybiBwaWRfdCAgZ2V0cHBpZCh2b2lkKTsKK2V4dGVybiBwaWRfdCAgZ2V0cGdycCh2b2lkKTsKK2V4dGVybiBpbnQgICAgc2V0cGdycCh2b2lkKTsKK2V4dGVybiBwaWRfdCAgc2V0c2lkKHZvaWQpOworZXh0ZXJuIHBpZF90ICBnZXRzaWQocGlkX3QpOworCitleHRlcm4gaW50IGV4ZWN2KGNvbnN0IGNoYXIgKiwgY2hhciAqIGNvbnN0ICopOworZXh0ZXJuIGludCBleGVjdnAoY29uc3QgY2hhciAqLCBjaGFyICogY29uc3QgKik7CitleHRlcm4gaW50IGV4ZWN2ZShjb25zdCBjaGFyICosIGNoYXIgKiBjb25zdCAqLCBjaGFyICogY29uc3QgKik7CitleHRlcm4gaW50IGV4ZWN2cGUoY29uc3QgY2hhciAqLCBjaGFyICogY29uc3QgKiwgY2hhciAqIGNvbnN0ICopOworZXh0ZXJuIGludCBleGVjbChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKK2V4dGVybiBpbnQgZXhlY2xwKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCAuLi4pOworZXh0ZXJuIGludCBleGVjbGUoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIC4uLik7CitleHRlcm4gaW50IGV4ZWNscGUoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIC4uLik7CitleHRlcm4gaW50IGNhcGdldChjYXBfdXNlcl9oZWFkZXJfdCBoZHJwLCBjYXBfdXNlcl9kYXRhX3QgZGF0YXApOworZXh0ZXJuIGludCBjYXBzZXQoY2FwX3VzZXJfaGVhZGVyX3QgaGRycCwgY29uc3QgY2FwX3VzZXJfZGF0YV90IGRhdGFwKTsKK2V4dGVybiBpbnQgcHJjdGwoaW50ICBvcHRpb24sICB1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywKKyAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBhcmc0LCB1bnNpZ25lZCBsb25nIGFyZzUpOworCitleHRlcm4gaW50IG5pY2UoaW50KTsKKworZXh0ZXJuIGludCBzZXR1aWQodWlkX3QpOworZXh0ZXJuIHVpZF90IGdldHVpZCh2b2lkKTsKK2V4dGVybiBpbnQgc2V0ZXVpZCh1aWRfdCk7CitleHRlcm4gdWlkX3QgZ2V0ZXVpZCh2b2lkKTsKK2V4dGVybiBpbnQgc2V0Z2lkKGdpZF90KTsKK2V4dGVybiBnaWRfdCBnZXRnaWQodm9pZCk7CitleHRlcm4gaW50IHNldGVnaWQoZ2lkX3QpOworZXh0ZXJuIGdpZF90IGdldGVnaWQodm9pZCk7CitleHRlcm4gaW50IGdldGdyb3VwcyhpbnQsIGdpZF90ICopOworZXh0ZXJuIGludCBzZXRncm91cHMoc2l6ZV90LCBjb25zdCBnaWRfdCAqKTsKK2V4dGVybiBpbnQgc2V0cmV1aWQodWlkX3QsIHVpZF90KTsKK2V4dGVybiBpbnQgc2V0cmVnaWQoZ2lkX3QsIGdpZF90KTsKK2V4dGVybiBpbnQgc2V0cmVzdWlkKHVpZF90LCB1aWRfdCwgdWlkX3QpOworZXh0ZXJuIGludCBzZXRyZXNnaWQoZ2lkX3QsIGdpZF90LCBnaWRfdCk7CitleHRlcm4gaW50IGdldHJlc3VpZCh1aWRfdCAqcnVpZCwgdWlkX3QgKmV1aWQsIHVpZF90ICpzdWlkKTsKK2V4dGVybiBpbnQgZ2V0cmVzZ2lkKGdpZF90ICpyZ2lkLCBnaWRfdCAqZWdpZCwgZ2lkX3QgKnNnaWQpOworZXh0ZXJuIGludCBnZXRmc3VpZCh1aWRfdCk7CitleHRlcm4gaW50IHNldGZzdWlkKHVpZF90KTsKK2V4dGVybiBpbnQgaXNzZXR1Z2lkKHZvaWQpOworZXh0ZXJuIGNoYXIqIGdldGxvZ2luKHZvaWQpOworZXh0ZXJuIGludCBnZXRsb2dpbl9yKGNoYXIqIG5hbWUsIHNpemVfdCBuYW1lc2l6ZSk7CisKKworLyogTWFjcm9zIGZvciBhY2Nlc3MoKSAqLworI2RlZmluZSBSX09LICA0ICAvKiBSZWFkICovCisjZGVmaW5lIFdfT0sgIDIgIC8qIFdyaXRlICovCisjZGVmaW5lIFhfT0sgIDEgIC8qIEV4ZWN1dGUgKi8KKyNkZWZpbmUgRl9PSyAgMCAgLyogRXhpc3RlbmNlICovCisKK2V4dGVybiBpbnQgYWNjZXNzKGNvbnN0IGNoYXIgKiwgaW50KTsKK2V4dGVybiBpbnQgbGluayhjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CitleHRlcm4gaW50IHVubGluayhjb25zdCBjaGFyICopOworZXh0ZXJuIGludCBjaGRpcihjb25zdCBjaGFyICopOworZXh0ZXJuIGludCBmY2hkaXIoaW50KTsKK2V4dGVybiBpbnQgcm1kaXIoY29uc3QgY2hhciAqKTsKK2V4dGVybiBpbnQgcGlwZShpbnQgKik7CitleHRlcm4gaW50IGNocm9vdChjb25zdCBjaGFyICopOworZXh0ZXJuIGludCBzeW1saW5rKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKK2V4dGVybiBpbnQgcmVhZGxpbmsoY29uc3QgY2hhciAqLCBjaGFyICosIHNpemVfdCk7CitleHRlcm4gaW50IGNob3duKGNvbnN0IGNoYXIgKiwgdWlkX3QsIGdpZF90KTsKK2V4dGVybiBpbnQgZmNob3duKGludCwgdWlkX3QsIGdpZF90KTsKK2V4dGVybiBpbnQgbGNob3duKGNvbnN0IGNoYXIgKiwgdWlkX3QsIGdpZF90KTsKK2V4dGVybiBjaGFyICpnZXRjd2QoY2hhciAqLCBzaXplX3QpOworCitleHRlcm4gaW50IHN5bmModm9pZCk7CisKK2V4dGVybiBpbnQgY2xvc2UoaW50KTsKK2V4dGVybiBvZmZfdCBsc2VlayhpbnQsIG9mZl90LCBpbnQpOworZXh0ZXJuIGxvZmZfdCBsc2VlazY0KGludCwgbG9mZl90LCBpbnQpOworCitleHRlcm4gc3NpemVfdCByZWFkKGludCwgdm9pZCAqLCBzaXplX3QpOworZXh0ZXJuIHNzaXplX3Qgd3JpdGUoaW50LCBjb25zdCB2b2lkICosIHNpemVfdCk7CitleHRlcm4gc3NpemVfdCBwcmVhZChpbnQsIHZvaWQgKiwgc2l6ZV90LCBvZmZfdCk7CitleHRlcm4gc3NpemVfdCBwd3JpdGUoaW50LCB2b2lkICosIHNpemVfdCwgb2ZmX3QpOworCitleHRlcm4gaW50IGR1cChpbnQpOworZXh0ZXJuIGludCBkdXAyKGludCwgaW50KTsKK2V4dGVybiBpbnQgZmNudGwoaW50LCBpbnQsIC4uLik7CitleHRlcm4gaW50IGlvY3RsKGludCwgaW50LCAuLi4pOworZXh0ZXJuIGludCBmbG9jayhpbnQsIGludCk7CitleHRlcm4gaW50IGZzeW5jKGludCk7CitleHRlcm4gaW50IGZkYXRhc3luYyhpbnQpOworZXh0ZXJuIGludCBmdHJ1bmNhdGUoaW50LCBvZmZfdCk7CisKK2V4dGVybiBpbnQgcGF1c2Uodm9pZCk7CitleHRlcm4gdW5zaWduZWQgaW50IGFsYXJtKHVuc2lnbmVkIGludCk7CitleHRlcm4gdW5zaWduZWQgaW50IHNsZWVwKHVuc2lnbmVkIGludCk7CitleHRlcm4gdm9pZCB1c2xlZXAodW5zaWduZWQgbG9uZyk7CisKK2V4dGVybiBpbnQgZ2V0aG9zdG5hbWUoY2hhciAqLCBzaXplX3QpOworZXh0ZXJuIGludCBzZXRob3N0bmFtZShjb25zdCBjaGFyICosIHNpemVfdCk7CitleHRlcm4gaW50IGdldGRvbWFpbm5hbWUoY2hhciAqLCBzaXplX3QpOworZXh0ZXJuIGludCBzZXRkb21haW5uYW1lKGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKKworZXh0ZXJuIGludCBnZXRkdGFibGVzaXplKHZvaWQpOworCitleHRlcm4gdm9pZCAqX19icmsodm9pZCAqKTsKK2V4dGVybiBpbnQgYnJrKHZvaWQgKik7CitleHRlcm4gdm9pZCAqc2JyayhwdHJkaWZmX3QpOworCitleHRlcm4gaW50IGdldG9wdChpbnQsIGNoYXIgKiBjb25zdCAqLCBjb25zdCBjaGFyICopOworZXh0ZXJuIGNoYXIgKm9wdGFyZzsKK2V4dGVybiBpbnQgb3B0aW5kLCBvcHRlcnIsIG9wdG9wdDsKKworZXh0ZXJuIGludCBpc2F0dHkoaW50KTsKKworZXh0ZXJuIGludCAgYWNjdChjb25zdCBjaGFyKiAgZmlsZXBhdGgpOworCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgZ2V0cGFnZXNpemUodm9pZCkgeworICBleHRlcm4gdW5zaWduZWQgaW50IF9fcGFnZV9zaXplOworICByZXR1cm4gX19wYWdlX3NpemU7Cit9CitzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19nZXRwYWdlc2hpZnQodm9pZCkgeworICBleHRlcm4gdW5zaWduZWQgaW50IF9fcGFnZV9zaGlmdDsKKyAgcmV0dXJuIF9fcGFnZV9zaGlmdDsKK30KKworZXh0ZXJuIGludCBzeXNjb25mKGludCAgbmFtZSk7CisKK2V4dGVybiBpbnQgZGFlbW9uKGludCwgaW50KTsKKworLyogQSBzcGVjaWFsIHN5c2NhbGwgdGhhdCBpcyBvbmx5IGF2YWlsYWJsZSBvbiB0aGUgQVJNLCBub3QgeDg2IGZ1bmN0aW9uLiAqLworZXh0ZXJuIGludCBjYWNoZWZsdXNoKGxvbmcgc3RhcnQsIGxvbmcgZW5kLCBsb25nIGZsYWdzKTsKKworZXh0ZXJuIHBpZF90IHRjZ2V0cGdycChpbnQgZmQpOworZXh0ZXJuIGludCAgIHRjc2V0cGdycChpbnQgZmQsIHBpZF90IF9waWQpOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX1VOSVNURF9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3V0aWwuaCBiL2xpYmMvaW5jbHVkZS91dGlsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS91dGlsLmgKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS91dGltZS5oIGIvbGliYy9pbmNsdWRlL3V0aW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE3Y2QyZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS91dGltZS5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX1VUSU1FX0hfCisjZGVmaW5lIF9VVElNRV9IXworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdXRpbWUuaD4KKworX19CRUdJTl9ERUNMUworCitleHRlcm4gaW50ICB1dGltZShjb25zdCBjaGFyICosIGNvbnN0IHN0cnVjdCB1dGltYnVmICopOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX1VUSU1FX0hfICovCisKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS91dG1wLmggYi9saWJjL2luY2x1ZGUvdXRtcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNjJiNDAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvdXRtcC5oCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX1VUTVBfSF8KKyNkZWZpbmUgX1VUTVBfSF8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKworI2RlZmluZSBfUEFUSF9VVE1QICAgICAgIi92YXIvcnVuL3V0bXAiCisjZGVmaW5lIF9QQVRIX1dUTVAgICAgICAiL3Zhci9sb2cvd3RtcCIKKyNkZWZpbmUgX1BBVEhfTEFTVExPRyAgICIvdmFyL2xvZy9sYXN0bG9nIgorCisjZGVmaW5lCVVUX05BTUVTSVpFCTgKKyNkZWZpbmUJVVRfTElORVNJWkUJOAorI2RlZmluZQlVVF9IT1NUU0laRQkxNgorCisjZGVmaW5lIFVTRVJfUFJPQ0VTUyA3CisKK3N0cnVjdCBsYXN0bG9nCit7CisgICAgdGltZV90IGxsX3RpbWU7CisgICAgY2hhciBsbF9saW5lW1VUX0xJTkVTSVpFXTsKKyAgICBjaGFyIGxsX2hvc3RbVVRfSE9TVFNJWkVdOworfTsKKworc3RydWN0IGV4aXRfc3RhdHVzCit7CisgICAgc2hvcnQgaW50IGVfdGVybWluYXRpb247CisgICAgc2hvcnQgaW50IGVfZXhpdDsKK307CisKKworc3RydWN0IHV0bXAKK3sKKyAgICBzaG9ydCBpbnQgdXRfdHlwZTsKKyAgICBwaWRfdCB1dF9waWQ7CisgICAgY2hhciB1dF9saW5lW1VUX0xJTkVTSVpFXTsKKyAgICBjaGFyIHV0X2lkWzRdOworICAgIGNoYXIgdXRfdXNlcltVVF9OQU1FU0laRV07CisgICAgY2hhciB1dF9ob3N0W1VUX0hPU1RTSVpFXTsKKworICAgIHN0cnVjdCBleGl0X3N0YXR1cyB1dF9leGl0OworCisgICAgbG9uZyBpbnQgdXRfc2Vzc2lvbjsKKyAgICBzdHJ1Y3QgdGltZXZhbCB1dF90djsKKworICAgIGludDMyX3QgdXRfYWRkcl92Nls0XTsKKyAgICBjaGFyIHVuc2VkWzIwXTsKK307CisKKworI2RlZmluZSB1dF9uYW1lIHV0X3VzZXIKKyNkZWZpbmUgdXRfdGltZSB1dF90di50dl9zZWMKKyNkZWZpbmUgdXRfYWRkciB1dF9hZGRyX3Y2WzBdCisKK19fQkVHSU5fREVDTFMKKworaW50IHV0bXBuYW1lKGNvbnN0IGNoYXIqKTsKK3ZvaWQgc2V0dXRlbnQoKTsKK3N0cnVjdCB1dG1wKiBnZXR1dGVudCgpOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLy8gX1VUTVBfSF8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS93Y2hhci5oIGIvbGliYy9pbmNsdWRlL3djaGFyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJmZWI2MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS93Y2hhci5oCkBAIC0wLDAgKzEsMTU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9XQ0hBUl9IXworI2RlZmluZSBfV0NIQVJfSF8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKy8qIHdjaGFyX3QgaXMgcmVxdWlyZWQgaW4gc3RkbGliLmggYWNjb3JkaW5nIHRvIFBPU0lYICovCisjZGVmaW5lIF9fbmVlZF9fX3djaGFyX3QKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxtYWxsb2MuaD4KKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisvKiBJTVBPUlRBTlQ6IEFueSBjb2RlIHRoYXQgcmVsaWVzIG9uIHdpZGUgY2hhcmFjdGVyIHN1cHBvcnQgaXMgZXNzZW50aWFsbHkKKyAqICAgICAgICAgICAgbm9uLXBvcnRhYmxlIGFuZC9vciBicm9rZW4uIHRoZSBvbmx5IHJlYXNvbiB0aGlzIGhlYWRlciBleGlzdAorICogICAgICAgICAgICBpcyBiZWNhdXNlIEknbSByZWFsbHkgYSBuaWNlIGd1eS4gSG93ZXZlciwgSSdtIG5vdCBuaWNlIGVub3VnaAorICogICAgICAgICAgICB0byBwcm92aWRlIHlvdSB3aXRoIGEgcmVhbCBpbXBsZW1lbnRhdGlvbi4gaW5zdGVhZCB3Y2hhcl90ID09IGNoYXIKKyAqICAgICAgICAgICAgYW5kIGFsbCB3YyBmdW5jdGlvbnMgYXJlIHN0dWJzIHRvIHRoZWlyICJub3JtYWwiIGVxdWl2YWxlbnQuLi4KKyAqLworCitfX0JFR0lOX0RFQ0xTCisKK3R5cGVkZWYgaW50ICAgICAgICAgICAgICAgICAgICAgd2ludF90OwordHlwZWRlZiBzdHJ1Y3QgeyBpbnQgIGR1bW15OyB9ICBtYnN0YXRlX3Q7CisKK3R5cGVkZWYgZW51bSB7CisgICAgV0NfVFlQRV9JTlZBTElEID0gMCwKKyAgICBXQ19UWVBFX0FMTlVNLAorICAgIFdDX1RZUEVfQUxQSEEsCisgICAgV0NfVFlQRV9CTEFOSywKKyAgICBXQ19UWVBFX0NOVFJMLAorICAgIFdDX1RZUEVfRElHSVQsCisgICAgV0NfVFlQRV9HUkFQSCwKKyAgICBXQ19UWVBFX0xPV0VSLAorICAgIFdDX1RZUEVfUFJJTlQsCisgICAgV0NfVFlQRV9QVU5DVCwKKyAgICBXQ19UWVBFX1NQQUNFLAorICAgIFdDX1RZUEVfVVBQRVIsCisgICAgV0NfVFlQRV9YRElHSVQsCisgICAgV0NfVFlQRV9NQVgKK30gd2N0eXBlX3Q7CisKKyNkZWZpbmUgIFdDSEFSX01BWCAgIDI1NQorI2RlZmluZSAgV0NIQVJfTUlOICAgMAorI2RlZmluZSAgV0VPRiAgICAgICAgKC0xKQorCitleHRlcm4gd2ludF90ICAgICAgICAgICAgYnRvd2MoaW50KTsKK2V4dGVybiBpbnQgICAgICAgICAgICAgICBmd3ByaW50ZihGSUxFICosIGNvbnN0IHdjaGFyX3QgKiwgLi4uKTsKK2V4dGVybiBpbnQgICAgICAgICAgICAgICBmd3NjYW5mKEZJTEUgKiwgY29uc3Qgd2NoYXJfdCAqLCAuLi4pOworZXh0ZXJuIGludCAgICAgICAgICAgICAgIGlzd2FsbnVtKHdpbnRfdCk7CitleHRlcm4gaW50ICAgICAgICAgICAgICAgaXN3YWxwaGEod2ludF90KTsKK2V4dGVybiBpbnQgICAgICAgICAgICAgICBpc3djbnRybCh3aW50X3QpOworZXh0ZXJuIGludCAgICAgICAgICAgICAgIGlzd2RpZ2l0KHdpbnRfdCk7CitleHRlcm4gaW50ICAgICAgICAgICAgICAgaXN3Z3JhcGgod2ludF90KTsKK2V4dGVybiBpbnQgICAgICAgICAgICAgICBpc3dsb3dlcih3aW50X3QpOworZXh0ZXJuIGludCAgICAgICAgICAgICAgIGlzd3ByaW50KHdpbnRfdCk7CitleHRlcm4gaW50ICAgICAgICAgICAgICAgaXN3cHVuY3Qod2ludF90KTsKK2V4dGVybiBpbnQgICAgICAgICAgICAgICBpc3dzcGFjZSh3aW50X3QpOworZXh0ZXJuIGludCAgICAgICAgICAgICAgIGlzd3VwcGVyKHdpbnRfdCk7CitleHRlcm4gaW50ICAgICAgICAgICAgICAgaXN3eGRpZ2l0KHdpbnRfdCk7CitleHRlcm4gaW50ICAgICAgICAgICAgICAgaXN3Y3R5cGUod2ludF90LCB3Y3R5cGVfdCk7CitleHRlcm4gd2ludF90ICAgICAgICAgICAgZmdldHdjKEZJTEUgKik7CitleHRlcm4gd2NoYXJfdCAgICAgICAgICAqZmdldHdzKHdjaGFyX3QgKiwgaW50LCBGSUxFICopOworZXh0ZXJuIHdpbnRfdCAgICAgICAgICAgIGZwdXR3Yyh3Y2hhcl90LCBGSUxFICopOworZXh0ZXJuIGludCAgICAgICAgICAgICAgIGZwdXR3cyhjb25zdCB3Y2hhcl90ICosIEZJTEUgKik7CitleHRlcm4gaW50ICAgICAgICAgICAgICAgZndpZGUoRklMRSAqLCBpbnQpOworZXh0ZXJuIHdpbnRfdCAgICAgICAgICAgIGdldHdjKEZJTEUgKik7CitleHRlcm4gd2ludF90ICAgICAgICAgICAgZ2V0d2NoYXIodm9pZCk7CitleHRlcm4gaW50ICAgICAgICAgICAgICAgbWJzaW5pdChjb25zdCBtYnN0YXRlX3QgKik7CitleHRlcm4gc2l6ZV90ICAgICAgICAgICAgbWJybGVuKGNvbnN0IGNoYXIgKiwgc2l6ZV90LCBtYnN0YXRlX3QgKik7CitleHRlcm4gc2l6ZV90ICAgICAgICAgICAgbWJydG93Yyh3Y2hhcl90ICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90LCBtYnN0YXRlX3QgKik7CitleHRlcm4gc2l6ZV90ICAgICAgICAgICAgbWJzcnRvd2NzKHdjaGFyX3QgKiwgY29uc3QgY2hhciAqKiwgc2l6ZV90LCBtYnN0YXRlX3QgKik7CitleHRlcm4gd2ludF90ICAgICAgICAgICAgcHV0d2Mod2NoYXJfdCwgRklMRSAqKTsKK2V4dGVybiB3aW50X3QgICAgICAgICAgICBwdXR3Y2hhcih3Y2hhcl90KTsKK2V4dGVybiBpbnQgICAgICAgICAgICAgICBzd3ByaW50Zih3Y2hhcl90ICosIHNpemVfdCwgY29uc3Qgd2NoYXJfdCAqLCAuLi4pOworZXh0ZXJuIGludCAgICAgICAgICAgICAgIHN3c2NhbmYoY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICosIC4uLik7CitleHRlcm4gd2ludF90ICAgICAgICAgICAgdG93bG93ZXIod2ludF90KTsKK2V4dGVybiB3aW50X3QgICAgICAgICAgICB0b3d1cHBlcih3aW50X3QpOworZXh0ZXJuIHdpbnRfdCAgICAgICAgICAgIHVuZ2V0d2Mod2ludF90LCBGSUxFICopOworZXh0ZXJuIGludCAgICAgICAgICAgICAgIHZmd3ByaW50ZihGSUxFICosIGNvbnN0IHdjaGFyX3QgKiwgdmFfbGlzdCk7CitleHRlcm4gaW50ICAgICAgICAgICAgICAgdndwcmludGYoY29uc3Qgd2NoYXJfdCAqLCB2YV9saXN0KTsKK2V4dGVybiBpbnQgICAgICAgICAgICAgICB2c3dwcmludGYod2NoYXJfdCAqLCBzaXplX3QsIGNvbnN0IHdjaGFyX3QgKiwgdmFfbGlzdCk7CitleHRlcm4gc2l6ZV90ICAgICAgICAgICAgd2NydG9tYihjaGFyICosIHdjaGFyX3QsIG1ic3RhdGVfdCAqKTsKK2V4dGVybiB3Y2hhcl90ICAgICAgICAgICp3Y3NjYXQod2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICopOworZXh0ZXJuIHdjaGFyX3QgICAgICAgICAgKndjc2Nocihjb25zdCB3Y2hhcl90ICosIHdjaGFyX3QpOworZXh0ZXJuIGludCAgICAgICAgICAgICAgIHdjc2NtcChjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7CitleHRlcm4gaW50ICAgICAgICAgICAgICAgd2NzY29sbChjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7CitleHRlcm4gd2NoYXJfdCAgICAgICAgICAqd2NzY3B5KHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsKK2V4dGVybiBzaXplX3QgICAgICAgICAgICB3Y3Njc3BuKGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsKK2V4dGVybiBzaXplX3QgICAgICAgICAgICB3Y3NmdGltZSh3Y2hhcl90ICosIHNpemVfdCwgY29uc3Qgd2NoYXJfdCAqLCBjb25zdCBzdHJ1Y3QgdG0gKik7CitleHRlcm4gc2l6ZV90ICAgICAgICAgICAgd2NzbGVuKGNvbnN0IHdjaGFyX3QgKik7CitleHRlcm4gd2NoYXJfdCAgICAgICAgICAqd2NzbmNhdCh3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90KTsKK2V4dGVybiBpbnQgICAgICAgICAgICAgICB3Y3NuY21wKGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpOworZXh0ZXJuIHdjaGFyX3QgICAgICAgICAgKndjc25jcHkod2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICosIHNpemVfdCk7CitleHRlcm4gd2NoYXJfdCAgICAgICAgICAqd2NzcGJyayhjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7CitleHRlcm4gd2NoYXJfdCAgICAgICAgICAqd2NzcmNocihjb25zdCB3Y2hhcl90ICosIHdjaGFyX3QpOworZXh0ZXJuIHNpemVfdCAgICAgICAgICAgIHdjc3J0b21icyhjaGFyICosIGNvbnN0IHdjaGFyX3QgKiosIHNpemVfdCwgbWJzdGF0ZV90ICopOworZXh0ZXJuIHNpemVfdCAgICAgICAgICAgIHdjc3Nwbihjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7CitleHRlcm4gd2NoYXJfdCAgICAgICAgICAqd2Nzc3RyKGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsKK2V4dGVybiBkb3VibGUgICAgICAgICAgICB3Y3N0b2QoY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90ICoqKTsKK2V4dGVybiB3Y2hhcl90ICAgICAgICAgICp3Y3N0b2sod2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICosIHdjaGFyX3QgKiopOworZXh0ZXJuIGxvbmcgaW50ICAgICAgICAgIHdjc3RvbChjb25zdCB3Y2hhcl90ICosIHdjaGFyX3QgKiosIGludCk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgd2NzdG91bChjb25zdCB3Y2hhcl90ICosIHdjaGFyX3QgKiosIGludCk7CitleHRlcm4gd2NoYXJfdCAgICAgICAgICAqd2Nzd2NzKGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsKK2V4dGVybiBpbnQgICAgICAgICAgICAgICB3Y3N3aWR0aChjb25zdCB3Y2hhcl90ICosIHNpemVfdCk7CitleHRlcm4gc2l6ZV90ICAgICAgICAgICAgd2NzeGZybSh3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90KTsKK2V4dGVybiBpbnQgICAgICAgICAgICAgICB3Y3RvYih3aW50X3QpOworZXh0ZXJuIHdjdHlwZV90ICAgICAgICAgIHdjdHlwZShjb25zdCBjaGFyICopOworZXh0ZXJuIGludCAgICAgICAgICAgICAgIHdjd2lkdGgod2NoYXJfdCk7CitleHRlcm4gd2NoYXJfdCAgICAgICAgICAqd21lbWNocihjb25zdCB3Y2hhcl90ICosIHdjaGFyX3QsIHNpemVfdCk7CitleHRlcm4gaW50ICAgICAgICAgICAgICAgd21lbWNtcChjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90KTsKK2V4dGVybiB3Y2hhcl90ICAgICAgICAgICp3bWVtY3B5KHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpOworZXh0ZXJuIHdjaGFyX3QgICAgICAgICAgKndtZW1tb3ZlKHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpOworZXh0ZXJuIHdjaGFyX3QgICAgICAgICAgKndtZW1zZXQod2NoYXJfdCAqLCB3Y2hhcl90LCBzaXplX3QpOworZXh0ZXJuIGludCAgICAgICAgICAgICAgIHdwcmludGYoY29uc3Qgd2NoYXJfdCAqLCAuLi4pOworZXh0ZXJuIGludCAgICAgICAgICAgICAgIHdzY2FuZihjb25zdCB3Y2hhcl90ICosIC4uLik7CisKKy8qIE5vIHJlYWxseSBzdXBwb3J0ZWQuICBUaGVzZSBhcmUganVzdCBmb3IgbWFraW5nIGxpYnN0ZGMrKy12MyBoYXBweS4gICovCit0eXBlZGVmIHZvaWQgKndjdHJhbnNfdDsKK2V4dGVybiB3aW50X3QJCSB0b3djdHJhbnMod2ludF90LCB3Y3RyYW5zX3QpOworZXh0ZXJuIHdjdHJhbnNfdAkgd2N0cmFucyAoY29uc3QgY2hhciAqKTsKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9XQ0hBUl9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3djdHlwZS5oIGIvbGliYy9pbmNsdWRlL3djdHlwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ZjE4YTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvd2N0eXBlLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPHdjaGFyLmg+CmRpZmYgLS1naXQgYS9saWJjL2luZXQvYmluZHJlc3Zwb3J0LmMgYi9saWJjL2luZXQvYmluZHJlc3Zwb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ5YWQyYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5ldC9iaW5kcmVzdnBvcnQuYwpAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjZGVmaW5lIFNUQVJUX1BPUlQJNjAwCisjZGVmaW5lIEVORF9QT1JUCUlQUE9SVF9SRVNFUlZFRAorI2RlZmluZSBOVU1fUE9SVFMJKEVORF9QT1JUIC0gU1RBUlRfUE9SVCkKKworaW50IGJpbmRyZXN2cG9ydChpbnQgc2QsIHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luKQoreworICAgIHN0YXRpYyBzaG9ydCAgICAgICAgcG9ydDsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gIHNpbjA7CisgICAgaW50ICAgICAgICAgICAgICAgICBubiwgcmV0OworCisgICAgaWYgKHNpbiA9PSBOVUxMKSB7CisgICAgICAgIHNpbiA9ICZzaW4wOworICAgICAgICBtZW1zZXQoIHNpbiwgMCwgc2l6ZW9mICpzaW4gKTsKKyAgICAgICAgc2luLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAgICB9IGVsc2UgaWYgKHNpbi0+c2luX2ZhbWlseSAhPSBBRl9JTkVUKSB7CisgICAgICAgIGVycm5vID0gRVBGTk9TVVBQT1JUOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKHBvcnQgPT0gMCkgeworICAgICAgICBwb3J0ID0gU1RBUlRfUE9SVCArIChnZXRwaWQoKSAlIE5VTV9QT1JUUyk7CisgICAgfQorCisgICAgZm9yIChubiA9IE5VTV9QT1JUUzsgbm4gPiAwOyBubi0tLCBwb3J0KyspIAorICAgIHsKKyAgICAgICAgaWYgKHBvcnQgPT0gRU5EX1BPUlQpCisgICAgICAgICAgICBwb3J0ID0gU1RBUlRfUE9SVDsKKworICAgICAgICBzaW4tPnNpbl9wb3J0ID0gaHRvbnMocG9ydCk7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIHJldCA9IGJpbmQoc2QsIChzdHJ1Y3Qgc29ja2FkZHIqKXNpbiwgc2l6ZW9mKCpzaW4pKTsKKyAgICAgICAgfSB3aGlsZSAocmV0IDwgMCAmJiBlcnJubyA9PSBFSU5UUik7CisKKyAgICAgICAgaWYgKCFyZXQpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2xpYmMvaW5ldC9pbmV0X2FkZHIuYyBiL2xpYmMvaW5ldC9pbmV0X2FkZHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTQ4MGE0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmV0L2luZXRfYWRkci5jCkBAIC0wLDAgKzEsNzIgQEAKKy8qCSRPcGVuQlNEOiBpbmV0X2FkZHIuYyx2IDEuOSAyMDA1LzA4LzA2IDIwOjMwOjAzIGVzcGllIEV4cCAkCSovCisKKy8qCisgKiArK0NvcHlyaWdodCsrIDE5ODMsIDE5OTAsIDE5OTMKKyAqIC0KKyAqIENvcHlyaWdodCAoYykgMTk4MywgMTk5MCwgMTk5MworICogICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKiAtCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTMgYnkgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24uCisgKiAKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQKKyAqIHRoZSBuYW1lIG9mIERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yCisgKiBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIGRvY3VtZW50IG9yIHNvZnR3YXJlIHdpdGhvdXQKKyAqIHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBESUdJVEFMIEVRVUlQTUVOVCBDT1JQLiBESVNDTEFJTVMgQUxMCisgKiBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICAgSU4gTk8gRVZFTlQgU0hBTEwgRElHSVRBTCBFUVVJUE1FTlQKKyAqIENPUlBPUkFUSU9OIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUgorICogUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMKKyAqIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUworICogU09GVFdBUkUuCisgKiAtCisgKiAtLUNvcHlyaWdodC0tCisgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorCisvKgorICogQXNjaWkgaW50ZXJuZXQgYWRkcmVzcyBpbnRlcnByZXRhdGlvbiByb3V0aW5lLgorICogVGhlIHZhbHVlIHJldHVybmVkIGlzIGluIG5ldHdvcmsgb3JkZXIuCisgKi8KK2luX2FkZHJfdAoraW5ldF9hZGRyKGNvbnN0IGNoYXIgKmNwKQoreworCXN0cnVjdCBpbl9hZGRyIHZhbDsKKworCWlmIChpbmV0X2F0b24oY3AsICZ2YWwpKQorCQlyZXR1cm4gKHZhbC5zX2FkZHIpOworCXJldHVybiAoSU5BRERSX05PTkUpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9pbmV0L2luZXRfYXRvbi5jIGIvbGliYy9pbmV0L2luZXRfYXRvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0NTZkMDcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luZXQvaW5ldF9hdG9uLmMKQEAgLTAsMCArMSwxNTcgQEAKKy8qCSRPcGVuQlNEOiBpbmV0X2FkZHIuYyx2IDEuOSAyMDA1LzA4LzA2IDIwOjMwOjAzIGVzcGllIEV4cCAkCSovCisKKy8qCisgKiArK0NvcHlyaWdodCsrIDE5ODMsIDE5OTAsIDE5OTMKKyAqIC0KKyAqIENvcHlyaWdodCAoYykgMTk4MywgMTk5MCwgMTk5MworICogICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKiAtCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTMgYnkgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24uCisgKiAKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQKKyAqIHRoZSBuYW1lIG9mIERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yCisgKiBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIGRvY3VtZW50IG9yIHNvZnR3YXJlIHdpdGhvdXQKKyAqIHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBESUdJVEFMIEVRVUlQTUVOVCBDT1JQLiBESVNDTEFJTVMgQUxMCisgKiBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICAgSU4gTk8gRVZFTlQgU0hBTEwgRElHSVRBTCBFUVVJUE1FTlQKKyAqIENPUlBPUkFUSU9OIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUgorICogUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMKKyAqIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUworICogU09GVFdBUkUuCisgKiAtCisgKiAtLUNvcHlyaWdodC0tCisgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorCisvKiAKKyAqIENoZWNrIHdoZXRoZXIgImNwIiBpcyBhIHZhbGlkIGFzY2lpIHJlcHJlc2VudGF0aW9uCisgKiBvZiBhbiBJbnRlcm5ldCBhZGRyZXNzIGFuZCBjb252ZXJ0IHRvIGEgYmluYXJ5IGFkZHJlc3MuCisgKiBSZXR1cm5zIDEgaWYgdGhlIGFkZHJlc3MgaXMgdmFsaWQsIDAgaWYgbm90LgorICogVGhpcyByZXBsYWNlcyBpbmV0X2FkZHIsIHRoZSByZXR1cm4gdmFsdWUgZnJvbSB3aGljaAorICogY2Fubm90IGRpc3Rpbmd1aXNoIGJldHdlZW4gZmFpbHVyZSBhbmQgYSBsb2NhbCBicm9hZGNhc3QgYWRkcmVzcy4KKyAqLworaW50CitpbmV0X2F0b24oY29uc3QgY2hhciAqY3AsIHN0cnVjdCBpbl9hZGRyICphZGRyKQoreworCWluX2FkZHJfdCB2YWw7CisJaW50IGJhc2UsIG47CisJY2hhciBjOworCXVfaW50IHBhcnRzWzRdOworCXVfaW50ICpwcCA9IHBhcnRzOworCisJYyA9ICpjcDsKKwlmb3IgKDs7KSB7CisJCS8qCisJCSAqIENvbGxlY3QgbnVtYmVyIHVwIHRvIGBgLicnLgorCQkgKiBWYWx1ZXMgYXJlIHNwZWNpZmllZCBhcyBmb3IgQzoKKwkJICogMHg9aGV4LCAwPW9jdGFsLCBpc2RpZ2l0PWRlY2ltYWwuCisJCSAqLworCQlpZiAoIWlzZGlnaXQoYykpCisJCQlyZXR1cm4gKDApOworCQl2YWwgPSAwOyBiYXNlID0gMTA7CisJCWlmIChjID09ICcwJykgeworCQkJYyA9ICorK2NwOworCQkJaWYgKGMgPT0gJ3gnIHx8IGMgPT0gJ1gnKQorCQkJCWJhc2UgPSAxNiwgYyA9ICorK2NwOworCQkJZWxzZQorCQkJCWJhc2UgPSA4OworCQl9CisJCWZvciAoOzspIHsKKwkJCWlmIChpc2FzY2lpKGMpICYmIGlzZGlnaXQoYykpIHsKKwkJCQl2YWwgPSAodmFsICogYmFzZSkgKyAoYyAtICcwJyk7CisJCQkJYyA9ICorK2NwOworCQkJfSBlbHNlIGlmIChiYXNlID09IDE2ICYmIGlzYXNjaWkoYykgJiYgaXN4ZGlnaXQoYykpIHsKKwkJCQl2YWwgPSAodmFsIDw8IDQpIHwKKwkJCQkJKGMgKyAxMCAtIChpc2xvd2VyKGMpID8gJ2EnIDogJ0EnKSk7CisJCQkJYyA9ICorK2NwOworCQkJfSBlbHNlCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKGMgPT0gJy4nKSB7CisJCQkvKgorCQkJICogSW50ZXJuZXQgZm9ybWF0OgorCQkJICoJYS5iLmMuZAorCQkJICoJYS5iLmMJKHdpdGggYyB0cmVhdGVkIGFzIDE2IGJpdHMpCisJCQkgKglhLmIJKHdpdGggYiB0cmVhdGVkIGFzIDI0IGJpdHMpCisJCQkgKi8KKwkJCWlmIChwcCA+PSBwYXJ0cyArIDMpCisJCQkJcmV0dXJuICgwKTsKKwkJCSpwcCsrID0gdmFsOworCQkJYyA9ICorK2NwOworCQl9IGVsc2UKKwkJCWJyZWFrOworCX0KKwkvKgorCSAqIENoZWNrIGZvciB0cmFpbGluZyBjaGFyYWN0ZXJzLgorCSAqLworCWlmIChjICE9ICdcMCcgJiYgKCFpc2FzY2lpKGMpIHx8ICFpc3NwYWNlKGMpKSkKKwkJcmV0dXJuICgwKTsKKwkvKgorCSAqIENvbmNvY3QgdGhlIGFkZHJlc3MgYWNjb3JkaW5nIHRvCisJICogdGhlIG51bWJlciBvZiBwYXJ0cyBzcGVjaWZpZWQuCisJICovCisJbiA9IHBwIC0gcGFydHMgKyAxOworCXN3aXRjaCAobikgeworCisJY2FzZSAwOgorCQlyZXR1cm4gKDApOwkJLyogaW5pdGlhbCBub25kaWdpdCAqLworCisJY2FzZSAxOgkJCQkvKiBhIC0tIDMyIGJpdHMgKi8KKwkJYnJlYWs7CisKKwljYXNlIDI6CQkJCS8qIGEuYiAtLSA4LjI0IGJpdHMgKi8KKwkJaWYgKCh2YWwgPiAweGZmZmZmZikgfHwgKHBhcnRzWzBdID4gMHhmZikpCisJCQlyZXR1cm4gKDApOworCQl2YWwgfD0gcGFydHNbMF0gPDwgMjQ7CisJCWJyZWFrOworCisJY2FzZSAzOgkJCQkvKiBhLmIuYyAtLSA4LjguMTYgYml0cyAqLworCQlpZiAoKHZhbCA+IDB4ZmZmZikgfHwgKHBhcnRzWzBdID4gMHhmZikgfHwgKHBhcnRzWzFdID4gMHhmZikpCisJCQlyZXR1cm4gKDApOworCQl2YWwgfD0gKHBhcnRzWzBdIDw8IDI0KSB8IChwYXJ0c1sxXSA8PCAxNik7CisJCWJyZWFrOworCisJY2FzZSA0OgkJCQkvKiBhLmIuYy5kIC0tIDguOC44LjggYml0cyAqLworCQlpZiAoKHZhbCA+IDB4ZmYpIHx8IChwYXJ0c1swXSA+IDB4ZmYpIHx8IChwYXJ0c1sxXSA+IDB4ZmYpIHx8IChwYXJ0c1syXSA+IDB4ZmYpKQorCQkJcmV0dXJuICgwKTsKKwkJdmFsIHw9IChwYXJ0c1swXSA8PCAyNCkgfCAocGFydHNbMV0gPDwgMTYpIHwgKHBhcnRzWzJdIDw8IDgpOworCQlicmVhazsKKwl9CisJaWYgKGFkZHIpCisJCWFkZHItPnNfYWRkciA9IGh0b25sKHZhbCk7CisJcmV0dXJuICgxKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvaW5ldC9pbmV0X250b2EuYyBiL2xpYmMvaW5ldC9pbmV0X250b2EuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjVkOTNkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmV0L2luZXRfbnRvYS5jCkBAIC0wLDAgKzEsNTEgQEAKKy8qCSRPcGVuQlNEOiBpbmV0X250b2EuYyx2IDEuNiAyMDA1LzA4LzA2IDIwOjMwOjAzIGVzcGllIEV4cCAkICovCisvKgorICogQ29weXJpZ2h0IChjKSAxOTgzLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIENvbnZlcnQgbmV0d29yay1mb3JtYXQgaW50ZXJuZXQgYWRkcmVzcworICogdG8gYmFzZSAyNTYgZC5kLmQuZCByZXByZXNlbnRhdGlvbi4KKyAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCitjaGFyICoKK2luZXRfbnRvYShzdHJ1Y3QgaW5fYWRkciBpbikKK3sKKwlzdGF0aWMgY2hhciBiWzE4XTsKKwljaGFyICpwOworCisJcCA9IChjaGFyICopJmluOworI2RlZmluZQlVQyhiKQkoKChpbnQpYikmMHhmZikKKwkodm9pZClzbnByaW50ZihiLCBzaXplb2YoYiksCisJICAgICIldS4ldS4ldS4ldSIsIFVDKHBbMF0pLCBVQyhwWzFdKSwgVUMocFsyXSksIFVDKHBbM10pKTsKKwlyZXR1cm4gKGIpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9pbmV0L2luZXRfbnRvcC5jIGIvbGliYy9pbmV0L2luZXRfbnRvcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3NDhkYTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luZXQvaW5ldF9udG9wLmMKQEAgLTAsMCArMSwxOTcgQEAKKy8qCSRPcGVuQlNEOiBpbmV0X250b3AuYyx2IDEuNyAyMDA1LzA4LzA2IDIwOjMwOjAzIGVzcGllIEV4cCAkCSovCisKKy8qIENvcHlyaWdodCAoYykgMTk5NiBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSU5URVJORVQgU09GVFdBUkUgQ09OU09SVElVTSBESVNDTEFJTVMKKyAqIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgSU5URVJORVQgU09GVFdBUkUKKyAqIENPTlNPUlRJVU0gQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SCisgKiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUworICogQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTCisgKiBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlICJhcnBhX25hbWVzZXIuaCIKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKy8qCisgKiBXQVJOSU5HOiBEb24ndCBldmVuIGNvbnNpZGVyIHRyeWluZyB0byBjb21waWxlIHRoaXMgb24gYSBzeXN0ZW0gd2hlcmUKKyAqIHNpemVvZihpbnQpIDwgNC4gIHNpemVvZihpbnQpID4gNCBpcyBmaW5lOyBhbGwgdGhlIHdvcmxkJ3Mgbm90IGEgVkFYLgorICovCisKK3N0YXRpYyBjb25zdCBjaGFyICppbmV0X250b3A0KGNvbnN0IHVfY2hhciAqc3JjLCBjaGFyICpkc3QsIHNpemVfdCBzaXplKTsKK3N0YXRpYyBjb25zdCBjaGFyICppbmV0X250b3A2KGNvbnN0IHVfY2hhciAqc3JjLCBjaGFyICpkc3QsIHNpemVfdCBzaXplKTsKKworLyogY2hhciAqCisgKiBpbmV0X250b3AoYWYsIHNyYywgZHN0LCBzaXplKQorICoJY29udmVydCBhIG5ldHdvcmsgZm9ybWF0IGFkZHJlc3MgdG8gcHJlc2VudGF0aW9uIGZvcm1hdC4KKyAqIHJldHVybjoKKyAqCXBvaW50ZXIgdG8gcHJlc2VudGF0aW9uIGZvcm1hdCBhZGRyZXNzIChgZHN0JyksIG9yIE5VTEwgKHNlZSBlcnJubykuCisgKiBhdXRob3I6CisgKglQYXVsIFZpeGllLCAxOTk2LgorICovCitjb25zdCBjaGFyICoKK2luZXRfbnRvcChpbnQgYWYsIGNvbnN0IHZvaWQgKnNyYywgY2hhciAqZHN0LCBzaXplX3Qgc2l6ZSkKK3sKKwlzd2l0Y2ggKGFmKSB7CisJY2FzZSBBRl9JTkVUOgorCQlyZXR1cm4gKGluZXRfbnRvcDQoc3JjLCBkc3QsIHNpemUpKTsKKwljYXNlIEFGX0lORVQ2OgorCQlyZXR1cm4gKGluZXRfbnRvcDYoc3JjLCBkc3QsIHNpemUpKTsKKwlkZWZhdWx0OgorCQllcnJubyA9IEVBRk5PU1VQUE9SVDsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJLyogTk9UUkVBQ0hFRCAqLworfQorCisvKiBjb25zdCBjaGFyICoKKyAqIGluZXRfbnRvcDQoc3JjLCBkc3QsIHNpemUpCisgKglmb3JtYXQgYW4gSVB2NCBhZGRyZXNzLCBtb3JlIG9yIGxlc3MgbGlrZSBpbmV0X250b2EoKQorICogcmV0dXJuOgorICoJYGRzdCcgKGFzIGEgY29uc3QpCisgKiBub3RlczoKKyAqCSgxKSB1c2VzIG5vIHN0YXRpY3MKKyAqCSgyKSB0YWtlcyBhIHVfY2hhciogbm90IGFuIGluX2FkZHIgYXMgaW5wdXQKKyAqIGF1dGhvcjoKKyAqCVBhdWwgVml4aWUsIDE5OTYuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICoKK2luZXRfbnRvcDQoY29uc3QgdV9jaGFyICpzcmMsIGNoYXIgKmRzdCwgc2l6ZV90IHNpemUpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgZm10W10gPSAiJXUuJXUuJXUuJXUiOworCWNoYXIgdG1wW3NpemVvZiAiMjU1LjI1NS4yNTUuMjU1Il07CisJaW50IGw7CisKKwlsID0gc25wcmludGYodG1wLCBzaXplLCBmbXQsIHNyY1swXSwgc3JjWzFdLCBzcmNbMl0sIHNyY1szXSk7CisJaWYgKGwgPD0gMCB8fCAoc2l6ZV90KWwgPj0gc2l6ZSkgeworCQllcnJubyA9IEVOT1NQQzsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJc3RybGNweShkc3QsIHRtcCwgc2l6ZSk7CisJcmV0dXJuIChkc3QpOworfQorCisvKiBjb25zdCBjaGFyICoKKyAqIGluZXRfbnRvcDYoc3JjLCBkc3QsIHNpemUpCisgKgljb252ZXJ0IElQdjYgYmluYXJ5IGFkZHJlc3MgaW50byBwcmVzZW50YXRpb24gKHByaW50YWJsZSkgZm9ybWF0CisgKiBhdXRob3I6CisgKglQYXVsIFZpeGllLCAxOTk2LgorICovCitzdGF0aWMgY29uc3QgY2hhciAqCitpbmV0X250b3A2KGNvbnN0IHVfY2hhciAqc3JjLCBjaGFyICpkc3QsIHNpemVfdCBzaXplKQoreworCS8qCisJICogTm90ZSB0aGF0IGludDMyX3QgYW5kIGludDE2X3QgbmVlZCBvbmx5IGJlICJhdCBsZWFzdCIgbGFyZ2UgZW5vdWdoCisJICogdG8gY29udGFpbiBhIHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgc2l6ZS4gIE9uIHNvbWUgc3lzdGVtcywgbGlrZQorCSAqIENyYXlzLCB0aGVyZSBpcyBubyBzdWNoIHRoaW5nIGFzIGFuIGludGVnZXIgdmFyaWFibGUgd2l0aCAxNiBiaXRzLgorCSAqIEtlZXAgdGhpcyBpbiBtaW5kIGlmIHlvdSB0aGluayB0aGlzIGZ1bmN0aW9uIHNob3VsZCBoYXZlIGJlZW4gY29kZWQKKwkgKiB0byB1c2UgcG9pbnRlciBvdmVybGF5cy4gIEFsbCB0aGUgd29ybGQncyBub3QgYSBWQVguCisJICovCisJY2hhciB0bXBbc2l6ZW9mICJmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZjoyNTUuMjU1LjI1NS4yNTUiXTsKKwljaGFyICp0cCwgKmVwOworCXN0cnVjdCB7IGludCBiYXNlLCBsZW47IH0gYmVzdCwgY3VyOworCXVfaW50IHdvcmRzW0lONkFERFJTWiAvIElOVDE2U1pdOworCWludCBpOworCWludCBhZHZhbmNlOworCisJLyoKKwkgKiBQcmVwcm9jZXNzOgorCSAqCUNvcHkgdGhlIGlucHV0IChieXRld2lzZSkgYXJyYXkgaW50byBhIHdvcmR3aXNlIGFycmF5LgorCSAqCUZpbmQgdGhlIGxvbmdlc3QgcnVuIG9mIDB4MDAncyBpbiBzcmNbXSBmb3IgOjogc2hvcnRoYW5kaW5nLgorCSAqLworCW1lbXNldCh3b3JkcywgJ1wwJywgc2l6ZW9mIHdvcmRzKTsKKwlmb3IgKGkgPSAwOyBpIDwgSU42QUREUlNaOyBpKyspCisJCXdvcmRzW2kgLyAyXSB8PSAoc3JjW2ldIDw8ICgoMSAtIChpICUgMikpIDw8IDMpKTsKKwliZXN0LmJhc2UgPSAtMTsKKwliZXN0LmxlbiAgPSAwOworCWN1ci5iYXNlID0gLTE7CisJY3VyLmxlbiAgPSAwOworCWZvciAoaSA9IDA7IGkgPCAoSU42QUREUlNaIC8gSU5UMTZTWik7IGkrKykgeworCQlpZiAod29yZHNbaV0gPT0gMCkgeworCQkJaWYgKGN1ci5iYXNlID09IC0xKQorCQkJCWN1ci5iYXNlID0gaSwgY3VyLmxlbiA9IDE7CisJCQllbHNlCisJCQkJY3VyLmxlbisrOworCQl9IGVsc2UgeworCQkJaWYgKGN1ci5iYXNlICE9IC0xKSB7CisJCQkJaWYgKGJlc3QuYmFzZSA9PSAtMSB8fCBjdXIubGVuID4gYmVzdC5sZW4pCisJCQkJCWJlc3QgPSBjdXI7CisJCQkJY3VyLmJhc2UgPSAtMTsKKwkJCX0KKwkJfQorCX0KKwlpZiAoY3VyLmJhc2UgIT0gLTEpIHsKKwkJaWYgKGJlc3QuYmFzZSA9PSAtMSB8fCBjdXIubGVuID4gYmVzdC5sZW4pCisJCQliZXN0ID0gY3VyOworCX0KKwlpZiAoYmVzdC5iYXNlICE9IC0xICYmIGJlc3QubGVuIDwgMikKKwkJYmVzdC5iYXNlID0gLTE7CisKKwkvKgorCSAqIEZvcm1hdCB0aGUgcmVzdWx0LgorCSAqLworCXRwID0gdG1wOworCWVwID0gdG1wICsgc2l6ZW9mKHRtcCk7CisJZm9yIChpID0gMDsgaSA8IChJTjZBRERSU1ogLyBJTlQxNlNaKSAmJiB0cCA8IGVwOyBpKyspIHsKKwkJLyogQXJlIHdlIGluc2lkZSB0aGUgYmVzdCBydW4gb2YgMHgwMCdzPyAqLworCQlpZiAoYmVzdC5iYXNlICE9IC0xICYmIGkgPj0gYmVzdC5iYXNlICYmCisJCSAgICBpIDwgKGJlc3QuYmFzZSArIGJlc3QubGVuKSkgeworCQkJaWYgKGkgPT0gYmVzdC5iYXNlKSB7CisJCQkJaWYgKHRwICsgMSA+PSBlcCkKKwkJCQkJcmV0dXJuIChOVUxMKTsKKwkJCQkqdHArKyA9ICc6JzsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisJCS8qIEFyZSB3ZSBmb2xsb3dpbmcgYW4gaW5pdGlhbCBydW4gb2YgMHgwMHMgb3IgYW55IHJlYWwgaGV4PyAqLworCQlpZiAoaSAhPSAwKSB7CisJCQlpZiAodHAgKyAxID49IGVwKQorCQkJCXJldHVybiAoTlVMTCk7CisJCQkqdHArKyA9ICc6JzsKKwkJfQorCQkvKiBJcyB0aGlzIGFkZHJlc3MgYW4gZW5jYXBzdWxhdGVkIElQdjQ/ICovCisJCWlmIChpID09IDYgJiYgYmVzdC5iYXNlID09IDAgJiYKKwkJICAgIChiZXN0LmxlbiA9PSA2IHx8IChiZXN0LmxlbiA9PSA1ICYmIHdvcmRzWzVdID09IDB4ZmZmZikpKSB7CisJCQlpZiAoIWluZXRfbnRvcDQoc3JjKzEyLCB0cCwgKHNpemVfdCkoZXAgLSB0cCkpKQorCQkJCXJldHVybiAoTlVMTCk7CisJCQl0cCArPSBzdHJsZW4odHApOworCQkJYnJlYWs7CisJCX0KKwkJYWR2YW5jZSA9IHNucHJpbnRmKHRwLCBlcCAtIHRwLCAiJXgiLCB3b3Jkc1tpXSk7CisJCWlmIChhZHZhbmNlIDw9IDAgfHwgYWR2YW5jZSA+PSBlcCAtIHRwKQorCQkJcmV0dXJuIChOVUxMKTsKKwkJdHAgKz0gYWR2YW5jZTsKKwl9CisJLyogV2FzIGl0IGEgdHJhaWxpbmcgcnVuIG9mIDB4MDAncz8gKi8KKwlpZiAoYmVzdC5iYXNlICE9IC0xICYmIChiZXN0LmJhc2UgKyBiZXN0LmxlbikgPT0gKElONkFERFJTWiAvIElOVDE2U1opKSB7CisJCWlmICh0cCArIDEgPj0gZXApCisJCQlyZXR1cm4gKE5VTEwpOworCQkqdHArKyA9ICc6JzsKKwl9CisJaWYgKHRwICsgMSA+PSBlcCkKKwkJcmV0dXJuIChOVUxMKTsKKwkqdHArKyA9ICdcMCc7CisKKwkvKgorCSAqIENoZWNrIGZvciBvdmVyZmxvdywgY29weSwgYW5kIHdlJ3JlIGRvbmUuCisJICovCisJaWYgKChzaXplX3QpKHRwIC0gdG1wKSA+IHNpemUpIHsKKwkJZXJybm8gPSBFTk9TUEM7CisJCXJldHVybiAoTlVMTCk7CisJfQorCXN0cmxjcHkoZHN0LCB0bXAsIHNpemUpOworCXJldHVybiAoZHN0KTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvaW5ldC9pbmV0X3B0b24uYyBiL2xpYmMvaW5ldC9pbmV0X3B0b24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2FmOTgxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmV0L2luZXRfcHRvbi5jCkBAIC0wLDAgKzEsMjEyIEBACisvKgkkT3BlbkJTRDogaW5ldF9wdG9uLmMsdiAxLjcgMjAwNi8xMi8zMCAyMzozNzozNyBpdG9qdW4gRXhwICQJKi8KKworLyogQ29weXJpZ2h0IChjKSAxOTk2IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJTlRFUk5FVCBTT0ZUV0FSRSBDT05TT1JUSVVNIERJU0NMQUlNUworICogQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBJTlRFUk5FVCBTT0ZUV0FSRQorICogQ09OU09SVElVTSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IKKyAqIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTCisgKiBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2luY2x1ZGUgImFycGFfbmFtZXNlci5oIgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKy8qCisgKiBXQVJOSU5HOiBEb24ndCBldmVuIGNvbnNpZGVyIHRyeWluZyB0byBjb21waWxlIHRoaXMgb24gYSBzeXN0ZW0gd2hlcmUKKyAqIHNpemVvZihpbnQpIDwgNC4gIHNpemVvZihpbnQpID4gNCBpcyBmaW5lOyBhbGwgdGhlIHdvcmxkJ3Mgbm90IGEgVkFYLgorICovCisKK3N0YXRpYyBpbnQJaW5ldF9wdG9uNChjb25zdCBjaGFyICpzcmMsIHVfY2hhciAqZHN0KTsKK3N0YXRpYyBpbnQJaW5ldF9wdG9uNihjb25zdCBjaGFyICpzcmMsIHVfY2hhciAqZHN0KTsKKworLyogaW50CisgKiBpbmV0X3B0b24oYWYsIHNyYywgZHN0KQorICoJY29udmVydCBmcm9tIHByZXNlbnRhdGlvbiBmb3JtYXQgKHdoaWNoIHVzdWFsbHkgbWVhbnMgQVNDSUkgcHJpbnRhYmxlKQorICoJdG8gbmV0d29yayBmb3JtYXQgKHdoaWNoIGlzIHVzdWFsbHkgc29tZSBraW5kIG9mIGJpbmFyeSBmb3JtYXQpLgorICogcmV0dXJuOgorICoJMSBpZiB0aGUgYWRkcmVzcyB3YXMgdmFsaWQgZm9yIHRoZSBzcGVjaWZpZWQgYWRkcmVzcyBmYW1pbHkKKyAqCTAgaWYgdGhlIGFkZHJlc3Mgd2Fzbid0IHZhbGlkIChgZHN0JyBpcyB1bnRvdWNoZWQgaW4gdGhpcyBjYXNlKQorICoJLTEgaWYgc29tZSBvdGhlciBlcnJvciBvY2N1cnJlZCAoYGRzdCcgaXMgdW50b3VjaGVkIGluIHRoaXMgY2FzZSwgdG9vKQorICogYXV0aG9yOgorICoJUGF1bCBWaXhpZSwgMTk5Ni4KKyAqLworaW50CitpbmV0X3B0b24oaW50IGFmLCBjb25zdCBjaGFyICpzcmMsIHZvaWQgKmRzdCkKK3sKKwlzd2l0Y2ggKGFmKSB7CisJY2FzZSBBRl9JTkVUOgorCQlyZXR1cm4gKGluZXRfcHRvbjQoc3JjLCBkc3QpKTsKKwljYXNlIEFGX0lORVQ2OgorCQlyZXR1cm4gKGluZXRfcHRvbjYoc3JjLCBkc3QpKTsKKwlkZWZhdWx0OgorCQllcnJubyA9IEVBRk5PU1VQUE9SVDsKKwkJcmV0dXJuICgtMSk7CisJfQorCS8qIE5PVFJFQUNIRUQgKi8KK30KKworLyogaW50CisgKiBpbmV0X3B0b240KHNyYywgZHN0KQorICoJbGlrZSBpbmV0X2F0b24oKSBidXQgd2l0aG91dCBhbGwgdGhlIGhleGFkZWNpbWFsIGFuZCBzaG9ydGhhbmQuCisgKiByZXR1cm46CisgKgkxIGlmIGBzcmMnIGlzIGEgdmFsaWQgZG90dGVkIHF1YWQsIGVsc2UgMC4KKyAqIG5vdGljZToKKyAqCWRvZXMgbm90IHRvdWNoIGBkc3QnIHVubGVzcyBpdCdzIHJldHVybmluZyAxLgorICogYXV0aG9yOgorICoJUGF1bCBWaXhpZSwgMTk5Ni4KKyAqLworc3RhdGljIGludAoraW5ldF9wdG9uNChjb25zdCBjaGFyICpzcmMsIHVfY2hhciAqZHN0KQoreworCXN0YXRpYyBjb25zdCBjaGFyIGRpZ2l0c1tdID0gIjAxMjM0NTY3ODkiOworCWludCBzYXdfZGlnaXQsIG9jdGV0cywgY2g7CisJdV9jaGFyIHRtcFtJTkFERFJTWl0sICp0cDsKKworCXNhd19kaWdpdCA9IDA7CisJb2N0ZXRzID0gMDsKKwkqKHRwID0gdG1wKSA9IDA7CisJd2hpbGUgKChjaCA9ICpzcmMrKykgIT0gJ1wwJykgeworCQljb25zdCBjaGFyICpwY2g7CisKKwkJaWYgKChwY2ggPSBzdHJjaHIoZGlnaXRzLCBjaCkpICE9IE5VTEwpIHsKKwkJCXVfaW50IG5ldyA9ICp0cCAqIDEwICsgKHBjaCAtIGRpZ2l0cyk7CisKKwkJCWlmIChuZXcgPiAyNTUpCisJCQkJcmV0dXJuICgwKTsKKwkJCWlmICghIHNhd19kaWdpdCkgeworCQkJCWlmICgrK29jdGV0cyA+IDQpCisJCQkJCXJldHVybiAoMCk7CisJCQkJc2F3X2RpZ2l0ID0gMTsKKwkJCX0KKwkJCSp0cCA9IG5ldzsKKwkJfSBlbHNlIGlmIChjaCA9PSAnLicgJiYgc2F3X2RpZ2l0KSB7CisJCQlpZiAob2N0ZXRzID09IDQpCisJCQkJcmV0dXJuICgwKTsKKwkJCSorK3RwID0gMDsKKwkJCXNhd19kaWdpdCA9IDA7CisJCX0gZWxzZQorCQkJcmV0dXJuICgwKTsKKwl9CisJaWYgKG9jdGV0cyA8IDQpCisJCXJldHVybiAoMCk7CisKKwltZW1jcHkoZHN0LCB0bXAsIElOQUREUlNaKTsKKwlyZXR1cm4gKDEpOworfQorCisvKiBpbnQKKyAqIGluZXRfcHRvbjYoc3JjLCBkc3QpCisgKgljb252ZXJ0IHByZXNlbnRhdGlvbiBsZXZlbCBhZGRyZXNzIHRvIG5ldHdvcmsgb3JkZXIgYmluYXJ5IGZvcm0uCisgKiByZXR1cm46CisgKgkxIGlmIGBzcmMnIGlzIGEgdmFsaWQgW1JGQzE4ODQgMi4yXSBhZGRyZXNzLCBlbHNlIDAuCisgKiBub3RpY2U6CisgKgkoMSkgZG9lcyBub3QgdG91Y2ggYGRzdCcgdW5sZXNzIGl0J3MgcmV0dXJuaW5nIDEuCisgKgkoMikgOjogaW4gYSBmdWxsIGFkZHJlc3MgaXMgc2lsZW50bHkgaWdub3JlZC4KKyAqIGNyZWRpdDoKKyAqCWluc3BpcmVkIGJ5IE1hcmsgQW5kcmV3cy4KKyAqIGF1dGhvcjoKKyAqCVBhdWwgVml4aWUsIDE5OTYuCisgKi8KK3N0YXRpYyBpbnQKK2luZXRfcHRvbjYoY29uc3QgY2hhciAqc3JjLCB1X2NoYXIgKmRzdCkKK3sKKwlzdGF0aWMgY29uc3QgY2hhciB4ZGlnaXRzX2xbXSA9ICIwMTIzNDU2Nzg5YWJjZGVmIiwKKwkJCSAgeGRpZ2l0c191W10gPSAiMDEyMzQ1Njc4OUFCQ0RFRiI7CisJdV9jaGFyIHRtcFtJTjZBRERSU1pdLCAqdHAsICplbmRwLCAqY29sb25wOworCWNvbnN0IGNoYXIgKnhkaWdpdHMsICpjdXJ0b2s7CisJaW50IGNoLCBzYXdfeGRpZ2l0LCBjb3VudF94ZGlnaXQ7CisJdV9pbnQgdmFsOworCisJbWVtc2V0KCh0cCA9IHRtcCksICdcMCcsIElONkFERFJTWik7CisJZW5kcCA9IHRwICsgSU42QUREUlNaOworCWNvbG9ucCA9IE5VTEw7CisJLyogTGVhZGluZyA6OiByZXF1aXJlcyBzb21lIHNwZWNpYWwgaGFuZGxpbmcuICovCisJaWYgKCpzcmMgPT0gJzonKQorCQlpZiAoKisrc3JjICE9ICc6JykKKwkJCXJldHVybiAoMCk7CisJY3VydG9rID0gc3JjOworCXNhd194ZGlnaXQgPSBjb3VudF94ZGlnaXQgPSAwOworCXZhbCA9IDA7CisJd2hpbGUgKChjaCA9ICpzcmMrKykgIT0gJ1wwJykgeworCQljb25zdCBjaGFyICpwY2g7CisKKwkJaWYgKChwY2ggPSBzdHJjaHIoKHhkaWdpdHMgPSB4ZGlnaXRzX2wpLCBjaCkpID09IE5VTEwpCisJCQlwY2ggPSBzdHJjaHIoKHhkaWdpdHMgPSB4ZGlnaXRzX3UpLCBjaCk7CisJCWlmIChwY2ggIT0gTlVMTCkgeworCQkJaWYgKGNvdW50X3hkaWdpdCA+PSA0KQorCQkJCXJldHVybiAoMCk7CisJCQl2YWwgPDw9IDQ7CisJCQl2YWwgfD0gKHBjaCAtIHhkaWdpdHMpOworCQkJaWYgKHZhbCA+IDB4ZmZmZikKKwkJCQlyZXR1cm4gKDApOworCQkJc2F3X3hkaWdpdCA9IDE7CisJCQljb3VudF94ZGlnaXQrKzsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChjaCA9PSAnOicpIHsKKwkJCWN1cnRvayA9IHNyYzsKKwkJCWlmICghc2F3X3hkaWdpdCkgeworCQkJCWlmIChjb2xvbnApCisJCQkJCXJldHVybiAoMCk7CisJCQkJY29sb25wID0gdHA7CisJCQkJY29udGludWU7CisJCQl9IGVsc2UgaWYgKCpzcmMgPT0gJ1wwJykgeworCQkJCXJldHVybiAoMCk7CisJCQl9CisJCQlpZiAodHAgKyBJTlQxNlNaID4gZW5kcCkKKwkJCQlyZXR1cm4gKDApOworCQkJKnRwKysgPSAodV9jaGFyKSAodmFsID4+IDgpICYgMHhmZjsKKwkJCSp0cCsrID0gKHVfY2hhcikgdmFsICYgMHhmZjsKKwkJCXNhd194ZGlnaXQgPSAwOworCQkJY291bnRfeGRpZ2l0ID0gMDsKKwkJCXZhbCA9IDA7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoY2ggPT0gJy4nICYmICgodHAgKyBJTkFERFJTWikgPD0gZW5kcCkgJiYKKwkJICAgIGluZXRfcHRvbjQoY3VydG9rLCB0cCkgPiAwKSB7CisJCQl0cCArPSBJTkFERFJTWjsKKwkJCXNhd194ZGlnaXQgPSAwOworCQkJY291bnRfeGRpZ2l0ID0gMDsKKwkJCWJyZWFrOwkvKiAnXDAnIHdhcyBzZWVuIGJ5IGluZXRfcHRvbjQoKS4gKi8KKwkJfQorCQlyZXR1cm4gKDApOworCX0KKwlpZiAoc2F3X3hkaWdpdCkgeworCQlpZiAodHAgKyBJTlQxNlNaID4gZW5kcCkKKwkJCXJldHVybiAoMCk7CisJCSp0cCsrID0gKHVfY2hhcikgKHZhbCA+PiA4KSAmIDB4ZmY7CisJCSp0cCsrID0gKHVfY2hhcikgdmFsICYgMHhmZjsKKwl9CisJaWYgKGNvbG9ucCAhPSBOVUxMKSB7CisJCS8qCisJCSAqIFNpbmNlIHNvbWUgbWVtbW92ZSgpJ3MgZXJyb25lb3VzbHkgZmFpbCB0byBoYW5kbGUKKwkJICogb3ZlcmxhcHBpbmcgcmVnaW9ucywgd2UnbGwgZG8gdGhlIHNoaWZ0IGJ5IGhhbmQuCisJCSAqLworCQljb25zdCBpbnQgbiA9IHRwIC0gY29sb25wOworCQlpbnQgaTsKKworCQlmb3IgKGkgPSAxOyBpIDw9IG47IGkrKykgeworCQkJZW5kcFstIGldID0gY29sb25wW24gLSBpXTsKKwkJCWNvbG9ucFtuIC0gaV0gPSAwOworCQl9CisJCXRwID0gZW5kcDsKKwl9CisJaWYgKHRwICE9IGVuZHApCisJCXJldHVybiAoMCk7CisJbWVtY3B5KGRzdCwgdG1wLCBJTjZBRERSU1opOworCXJldHVybiAoMSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9SRUFETUUuVFhUIGIvbGliYy9rZXJuZWwvUkVBRE1FLlRYVApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmRmYTRkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvUkVBRE1FLlRYVApAQCAtMCwwICsxLDI3NiBAQAorQmlvbmljIGNvbWVzIHdpdGggYSBzZXQgb2YgJ2NsZWFuJyBMaW51eCBrZXJuZWwgaGVhZGVycyB0aGF0IGNhbiBzYWZlbHkgYmUKK2luY2x1ZGVkIGJ5IHVzZXJsYW5kIGFwcGxpY2F0aW9ucyBhbmQgbGlicmFyaWVzIHdpdGhvdXQgZmVhciBvZiBoaWRlb3VzCitjb25mbGljdHMuIGZvciBtb3JlIGluZm9ybWF0aW9uIHdoeSB0aGlzIGlzIG5lZWRlZCwgc2VlIHRoZSAiUkFUSU9OQUxFIgorc2VjdGlvbiBhdCB0aGUgZW5kIG9mIHRoaXMgZG9jdW1lbnQuCisKK3RoZXNlIGNsZWFuIGhlYWRlcnMgYXJlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IHNldmVyYWwgc2NyaXB0cyBsb2NhdGVkCitpbiB0aGUgJ2Jpb25pYy9rZXJuZWwvdG9vbHMnIGRpcmVjdG9yeSwgd2hpY2ggcHJvY2VzcyBhIHNldCBvZiBvcmlnaW5hbAorYW5kIHVubW9kaWZpZWQga2VybmVsIGhlYWRlcnMgaW4gb3JkZXIgdG8gZ2V0IHJpZCBvZiBtYW55IGFubm95aW5nCitkZWNsYXJhdGlvbnMgYW5kIGNvbnN0cnVjdHMgdGhhdCB1c3VhbGx5IHJlc3VsdCBpbiBjb21waWxhdGlvbiBmYWlsdXJlLgorCit0aGUgJ2NsZWFuIGhlYWRlcnMnIG9ubHkgY29udGFpbiB0eXBlIGFuZCBtYWNybyBkZWZpbml0aW9ucywgd2l0aCB0aGUKK2V4Y2VwdGlvbiBvZiBhIGNvdXBsZSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyB1c2VkIGZvciBwZXJmb3JtYW5jZQorcmVhc29uIChlLmcuIG9wdGltaXplZCBDUFUtc3BlY2lmaWMgYnl0ZS1zd2FwcGluZyByb3V0aW5lcykKKwordGhleSBjYW4gYmUgaW5jbHVkZWQgZnJvbSBDKyssIG9yIHdoZW4gY29tcGlsaW5nIGNvZGUgaW4gc3RyaWN0IEFOU0kgbW9kZS4KK3RoZXkgY2FuIGJlIGFsc28gaW5jbHVkZWQgYmVmb3JlIG9yIGFmdGVyIGFueSBCaW9uaWMgQyBsaWJyYXJ5IGhlYWRlci4KKwordGhlIGdlbmVyYXRpb24gcHJvY2VzcyB3b3JrcyBhcyBmb2xsb3dzOgorCisgICogJ2Jpb25pYy9rZXJuZWwvb3JpZ2luYWwvJworICAgIGNvbnRhaW5zIGEgc2V0IG9mIGtlcm5lbCBoZWFkZXJzIGFzIG5vcm1hbGx5IGZvdW5kIGluIHRoZSAnaW5jbHVkZScKKyAgICBkaXJlY3Rvcnkgb2YgYSBub3JtYWwgTGludXgga2VybmVsIHNvdXJjZSB0cmVlLiBub3RlIHRoYXQgdGhpcyBzaG91bGQKKyAgICBvbmx5IGNvbnRhaW4gdGhlIGZpbGVzIHRoYXQgYXJlIHJlYWxseSBuZWVkZWQgYnkgQW5kcm9pZCAodXNlCisgICAgJ2ZpbmRfaGVhZGVycy5weScgdG8gZmluZCB0aGVzZSBhdXRvbWF0aWNhbGx5KS4KKworICAqICdiaW9uaWMva2VybmVsL2NvbW1vbicKKyAgICBjb250YWlucyB0aGUgbm9uLWFyY2gtc3BlY2lmaWMgY2xlYW4gaGVhZGVycyBhbmQgZGlyZWN0b3JpZXMKKyAgICAoZS5nLiBsaW51eCwgYXNtLWdlbmVyaWMgYW5kIG10ZCkKKworICAqJ2Jpb25pYy9rZXJuZWwvYXJjaC1hcm0vJworICAgIGNvbnRhaW5zIHRoZSBBUk0tc3BlY2lmaWMgZGlyZWN0b3J5IHRyZWUgb2YgY2xlYW4gaGVhZGVycy4KKworICAqICdiaW9uaWMva2VybmVsL2FyY2gtYXJtL2FzbScKKyAgICBjb250YWlucyB0aGUgcmVhbCBBUk0tc3BlY2lmaWMgaGVhZGVycworCisgICogJ2Jpb25pYy9rZXJuZWwvYXJjaC14ODYnCisgICAgc2ltaWxhcmx5IGNvbnRhaW5zIGFsbCBoZWFkZXJzIGFuZCBzeW1saW5rcyB0byBiZSB1c2VkIG9uIHg4NgorCisgICogJ2Jpb25pYy9rZXJuZWwvdG9vbHMnIGNvbnRhaW5zIHZhcmlvdXMgUHl0aG9uIGFuZCBzaGVsbCBzY3JpcHRzIHVzZWQKKyAgICB0byBtYW5hZ2UgYW5kIHJlLWdlbmVyYXRlIHRoZSBoZWFkZXJzCisKK3RoZSB0b29scyB5b3UgY2FuIHVzZSBhcmU6CisKKyAgKiB0b29scy9maW5kX3VzZXJzLnB5CisgICAgc2NhbnMgYSBsaXN0IG9mIHNvdXJjZSBmaWxlcyBvciBkaXJlY3RvcmllcyBhbmQgcHJpbnRzIHdoaWNoIG9uZXMgZG8KKyAgICBpbmNsdWRlIExpbnV4IGhlYWRlcnMuCisKKyAgKiB0b29scy9maW5kX2hlYWRlcnMucHkKKyAgICBzY2FucyBhIGxpc3Qgb2Ygc291cmNlIGZpbGVzIG9yIGRpcmVjdG9yaWVzIGFuZCByZWN1cnNpdmVseSBmaW5kcyBhbGwKKyAgICB0aGUgb3JpZ2luYWwga2VybmVsIGhlYWRlcnMgdGhleSBuZWVkLgorCisgICogdG9vbHMvY2xlYW5faGVhZGVyLnB5CisgICAgcHJpbnRzIHRoZSBjbGVhbiB2ZXJzaW9uIG9mIGEgZ2l2ZW4ga2VybmVsIGhlYWRlci4gd2l0aCB0aGUgLXUgb3B0aW9uLAorICAgIHRoaXMgd2lsbCBhbHNvIHVwZGF0ZSB0aGUgY29ycmVzcG9uZGluZyBjbGVhbiBoZWFkZXIgZmlsZSBpZiBpdHMKKyAgICBjb250ZW50IGhhcyBjaGFuZ2VkLiB5b3UgY2FuIGFsc28gcHJvY2VzcyBtb3JlIHRoYW4gb25lIGZpbGUgd2l0aCAtdQorCisgICogdG9vbHMvdXBkYXRlX2FsbC5weQorICAgIGF1dG9tYXRpY2FsbHkgdXBkYXRlIGFsbCBjbGVhbiBoZWFkZXJzIGZyb20gdGhlIGNvbnRlbnQgb2YgCisgICAgJ2Jpb25pYy9rZXJuZWwvb3JpZ2luYWwnLiB0aGlzIGlzIHRoZSBzY3JpcHQgeW91J3JlIGxpa2VseSBnb2luZyB0byAKKyAgICBydW4gd2hlbmV2ZXIgeW91IHVwZGF0ZSB0aGUgb3JpZ2luYWwgaGVhZGVycy4KKworTk9URToKKyAgaWYgQU5EUk9JRF9QUk9EVUNUX09VVCBpcyBkZWZpbmVkIGluIHlvdXIgZW52aXJvbm1lbnQsIGJvdGggJ2NsZWFuX2hlYWRlci5weScKKyAgYW5kICd1cGRhdGVfYWxsLnB5JyB3aWxsIGF1dG9tYXRpY2FsbHkgaXNzdWUgInA0IGFkZC9lZGl0L2RlbGV0ZSIgY29tbWFuZHMKKyAgYXBwcm9wcmlhdGVseSB0byByZWZsZWN0IHRoZSBjaGFuZ2VzIGJlaW5nIG1hZGUuCisKKyAgeW91IHdpbGwgbmVlZCB0byAicDQgc3VibWl0IiBtYW51YWxseSB0aG91Z2guLi4KKworCitIT1cgVE8gQlVJTEQgQklPTklDIEFORCBPVEhFUiBQUk9HUkFNUyBXSVRIIFRIRSBDTEVBTiBIRUFERVJTOgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworYWRkIGJpb25pYy9rZXJuZWwvY29tbW9uIGFuZCBiaW9uaWMva2VybmVsL2FyY2gtPHlvdXJhcmNoPiB0byB5b3VyIEMKK2luY2x1ZGUgcGF0aC4gdGhhdCBzaG91bGQgYmUgZW5vdWdoLiBOb3RlIHRoYXQgQmlvbmljIHdpbGwgbm90IGNvbXBpbGUgcHJvcGVybHkgCitpZiB5b3UgZG9uJ3QuCisKKworSE9XIFRPIFNVUFBPUlQgQU5PVEhFUiBBUkNISVRFQ1RVUkU6Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworc2VlIHRoZSBjb250ZW50IG9mIHRvb2xzL2RlZmF1bHRzLnB5LCB5b3Ugd2lsbCBuZWVkIHRvIG1ha2UgYSBmZXcgdXBkYXRlcworaGVyZToKKworICAtIGFkZCBhIG5ldyBpdGVtIHRvIHRoZSAna2VybmVsX2FyY2hzJyBsaXN0IG9mIHN1cHBvcnRlZCBhcmNoaXRlY3R1cmVzCisKKyAgLSBhZGQgYSBwcm9wZXIgZGVmaW5pdGlvbiBmb3IgJ2tlcm5lbF9rbm93bl88YXJjaD5fc3RhdGljcycgd2l0aAorICAgIHJlbGV2YW50IGRlZmluaXRpb25zLgorCisgIC0gdXBkYXRlICdrZXJuZWxfa25vd25fc3RhdGljcycgdG8gbWFwICI8YXJjaD4iIHRvCisgICAgJ2tlcm5lbF9rbm93bl88YXJjaD5fc3RhdGljcycKKwordGhlbiwgYWRkIHRoZSBuZXcgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGhlYWRlcnMgdG8gb3JpZ2luYWwvYXNtLTxhcmNoPi4KKyhwbGVhc2UgZW5zdXJlIHRoYXQgdGhlc2UgYXJlIHJlYWxseSBuZWVkZWQsIGUuZy4gd2l0aCB0b29scy9maW5kX2hlYWRlcnMucHkpCisKK2ZpbmFsbHksIHJ1biB0b29scy91cGRhdGVfYWxsLnB5CisKKworCitIT1cgVE8gVVBEQVRFIFRIRSBIRUFERVJTIFdIRU4gTkVFREVEOgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworSU1QT1JUQU5UIElNUE9SVEFOVDoKKworICBXSEVOIFVQREFUSU5HIFRIRSBIRUFERVJTLCBBTFdBWVMgQ0hFQ0sgVEhBVCBUSEUgTkVXIENMRUFOIEhFQURFUlMgRE8KKyAgTk9UIEJSRUFLIFRIRSBLRVJORUwgPC0+IFVTRVIgQUJJLCBGT1IgRVhBTVBMRSBCWSBDSEFOR0lORyBUSEUgU0laRQorICBPRiBBIEdJVkVOIFRZUEUuIFRISVMgVEFTSyBDQU5OT1QgQkUgRUFTSUxZIEFVVE9NQVRFRCBBVCBUSEUgTU9NRU5UCisKK2NvcHkgYW55IHVwZGF0ZWQga2VybmVsIGhlYWRlciBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIGxvY2F0aW9uIHVuZGVyCisnYmlvbmljL2tlcm5lbC9vcmlnaW5hbCcuCisKK2ZvciBhbnkgbmV3IGtlcm5lbCBoZWFkZXIgeW91IHdhbnQgdG8gYWRkLCBmaXJzdCBydW4gdG9vbHMvZmluZF9oZWFkZXJzLnB5IHRvIGJlCitzdXJlIHRoYXQgaXQgaXMgcmVhbGx5IG5lZWRlZCBieSB0aGUgQW5kcm9pZCBzb3VyY2VzLiB0aGVuIGFkZCBpdCB0bworJ2Jpb25pYy9rZXJuZWwvb3JpZ2luYWwnCisKK3RoZW4sIHJ1biB0b29scy91cGRhdGVfYWxsLnB5IHRvIHJlLXJ1biB0aGUgYXV0by1jbGVhbmluZworCisKKworSE9XIFRIRSBDTEVBTlVQIFBST0NFU1MgV09SS1M6Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwordGhpcyBzZWN0aW9uIGRlc2NyaWJlcyB0aGUgYWN0aW9uIHBlcmZvcm1lZCBieSB0aGUgY2xlYW51cCBwcm9ncmFtKHMpIHdoZW4gdGhleQorcHJvY2VzcyB0aGUgb3JpZ2luYWwga2VybmVsIGhlYWRlcnMgaW50byBjbGVhbiBvbmVzOgorCisxLiBPcHRpbWl6ZSB3ZWxsLWtub3duIG1hY3JvcyAoZS5nLiBfX0tFUk5FTF9fLCBfX0tFUk5FTF9TVFJJQ1RfTkFNRVMpCisKKyAgICB0aGlzIHBhc3MgZ2V0cyByaWQgb2YgZXZlcnl0aGluZyB0aGF0IGlzIGd1YXJkZWQgYnkgYSB3ZWxsLWtub3duIG1hY3JvCisgICAgZGVmaW5pdGlvbi4gdGhpcyBtZWFucyB0aGF0IGEgYmxvY2sgbGlrZQorCisgICAgICAgI2lmZGVmIF9fS0VSTkVMX18KKyAgICAgICAuLi4uCisgICAgICAgI2VuZGlmCisKKyAgICB3aWxsIGJlIHRvdGFsbHkgb21pdHRlZCBmcm9tIHRoZSBvdXRwdXQuIHRoZSBvcHRpbWl6ZXIgaXMgc21hcnQgZW5vdWdoIHRvCisgICAgaGFuZGxlIGFsbCBjb21wbGV4IEMtcHJlcHJvY2Vzc29yIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24gYXBwcm9wcmlhdGVseS4KKyAgICB0aGlzIG1lYW5zIHRoYXQsIGZvciBleGFtcGxlOgorCisgICAgICAgI2lmIGRlZmluZWQoX19LRVJORUxfXykgfHwgZGVmaW5lZChGT08pCisgICAgICAgLi4uCisgICAgICAgI2VuZGlmCisKKyAgICB3aWxsIGJlIHRyYW5zZm9ybWVkIGludG86CisKKyAgICAgICAjaWZkZWYgRk9PCisgICAgICAgLi4uCisgICAgICAgI2VuZGlmCisKKyAgICBzZWUgdG9vbHMvZGVmYXVsdHMucHkgZm9yIHRoZSBsaXN0IG9mIHdlbGwta25vd24gbWFjcm9zIHVzZWQgaW4gdGhpcyBwYXNzLAorICAgIGluIGNhc2UgeW91IG5lZWQgdG8gdXBkYXRlIGl0IGluIHRoZSBmdXR1cmUuCisKKyAgICBub3RlIHRoYXQgdGhpcyBhbHNvIHJlbW92ZSBhbnkgcmVmZXJlbmNlIHRvIGEga2VybmVsLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24KKyAgICBtYWNybyBsaWtlIENPTkZJR19GT08gZnJvbSB0aGUgY2xlYW4gaGVhZGVycy4KKworCisyLiByZW1vdmUgdmFyaWFibGUgYW5kIGZ1bmN0aW9uIGRlY2xhcmF0aW9uczoKKworICB0aGlzIHBhc3Mgc2NhbnMgbm9uLWRpcmVjdGl2ZSB0ZXh0IGFuZCBvbmx5IGtlZXBzIHRoaW5ncyB0aGF0IGxvb2sgbGlrZSBhCisgIHR5cGVkZWYvc3RydWN0L3VuaW9uL2VudW0gZGVjbGFyYXRpb24uIHRoaXMgYWxsb3dzIHRvIGdldCByaWQgb2YgYW55IHZhcmlhYmxlCisgIG9yIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIHRoYXQgc2hvdWxkIG9ubHkgYmUgdXNlZCB3aXRoaW4gdGhlIGtlcm5lbCBhbnl3YXkKKyAgKGFuZCB3aGljaCBub3JtYWxseSAqc2hvdWxkKiBiZSBndWFyZGVkIGluIGEgI2lmZGVmIF9fS0VSTkVMX18gLi4uICNlbmRpZgorICBibG9jaywgaWYgdGhlIGtlcm5lbCB3cml0ZXJzIHdlcmUgbm90IHNvIG1lc3N5KQorCisgIHRoZXJlIGFyZSBob3dldmVyIGEgZmV3IGV4Y2VwdGlvbnM6IGl0IGlzIHNlbGRvbSB1c2VmdWwgdG8ga2VlcCB0aGUgZGVmaW5pdGlvbgorICBvZiBzb21lIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zIHBlcmZvcm1pbmcgdmVyeSBzaW1wbGUgb3BlcmF0aW9ucy4gYSBnb29kCisgIGV4YW1wbGUgaXMgdGhlIG9wdGltaXplZCAzMi1iaXQgYnl0ZS1zd2FwIGZ1bmN0aW9uIGZvdW5kIGluCisgIGFyY2gtYXJtL2FzbS9ieXRlb3JkZXIuaAorCisgIHRoZSBsaXN0IG9mIGV4Y2VwdGlvbnMgaXMgaW4gdG9vbHMvZGVmYXVsdHMucHkgaW4gY2FzZSB5b3UgbmVlZCB0byB1cGRhdGUgaXQKKyAgaW4gdGhlIGZ1dHVyZS4KKworICBub3RlIHRoYXQgd2UgZG8gKm5vdCogcmVtb3ZlIG1hY3JvIGRlZmluaXRpb25zLCBpbmNsdWRpbmcgdGhlc2UgbWFjcm8gdGhhdAorICBwZXJmb3JtIGEgY2FsbCB0byBvbmUgb2YgdGhlc2Uga2VybmVsLWhlYWRlciBmdW5jdGlvbnMsIG9yIGV2ZW4gZGVmaW5lIG90aGVyCisgIGZ1bmN0aW9ucy4gd2UgY29uc2lkZXIgaXQgc2FmZSBzaW5jZSB1c2VybGFuZCBhcHBsaWNhdGlvbnMgaGF2ZSBubyBidXNpbmVzcworICB1c2luZyB0aGVtIGFueXdheS4KKworCiszLiB3aGl0ZXNwYWNlIGNsZWFudXA6CisKKyAgdGhlIGZpbmFsIHBhc3MgcmVtb3ZlIGFueSBjb21tZW50cyBhbmQgZW1wdHkgbGluZXMgZnJvbSB0aGUgZmluYWwgaGVhZGVycy4KKworCis0LiBhZGQgYSBzdGFuZGFyZCBkaXNjbGFpbWVyOgorCisgIHByZXBlbmRlZCB0byBlYWNoIGdlbmVyYXRlZCBoZWFkZXIsIGNvbnRhaW5zIGEgbWVzc2FnZSBsaWtlCisgICJkbyBub3QgZWRpdCBkaXJlY3RseSAtIGZpbGUgd2FzIGF1dG8tZ2VuZXJhdGVkIGJ5IC4uLi4iCisKKworUkFUSU9OQUxFOgorPT09PT09PT09PQorCitPVkVSVklFVyBPRiBUSEUgQ1VSUkVOVCBLRVJORUwgSEVBREVSIE1FU1M6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBvcmlnaW5hbCBrZXJuZWwgaGVhZGVycyBhcmUgbm90IGVhc2lseSB1c2FibGUgZnJvbSB1c2VybGFuZCBhcHBsaWNhdGlvbnMuCit0aGV5IGNvbnRhaW4gbWFueSBkZWNsYXJhdGlvbnMgYW5kIGNvbnN0cnVjdCB0aGF0IHdpbGwgcmVzdWx0IGluIGEgY29tcGlsYXRpb24KK2ZhaWx1cmUgb3IgZXZlbiB3b3JzZSwgaW5jb3JyZWN0IGJlaGF2aW91ci4gZm9yIGV4YW1wbGU6CisKKy0gc29tZSBoZWFkZXJzIHRyeSB0byBkZWZpbmUgUG9zaXggdHlwZXMgKGUuZy4gc2l6ZV90LCBzc2l6ZV90KSB0aGF0IGNhbgorICBjb25mbGljdCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGRlZmluaXRpb25zIHByb3ZpZGVkIGJ5IHlvdXIgQyBsaWJyYXJ5LgorCistIHNvbWUgaGVhZGVycyB1c2UgY29uc3RydWN0cyB0aGF0IGNhbm5vdCBiZSBjb21waWxlZCBpbiBBTlNJIEMgbW9kZS4KKworLSBzb21lIGhlYWRlcnMgdXNlIGNvbnN0cnVjdHMgZG8gbm90IGNvbXBpbGUgd2l0aCBDKysgYXQgYWxsLgorCistIHNvbWUgaGVhZGVycyBjb250YWluIGludmFsaWQgImxlZ2FjeSIgZGVmaW5pdGlvbnMgZm9yIHRoZSBiZW5lZml0IG9mIG9sZAorICBDIGxpYnJhcmllcyAoZS5nLiBnbGliYzUpIGJ1dCByZXN1bHQgaW4gaW5jb3JyZWN0IGJlaGF2aW91ciBpZiB1c2VkCisgIGRpcmVjdGx5LgorCisgIGUuZy4gZ2lkX3QgYmVpbmcgZGVmaW5lZCBpbiA8bGludXgvdHlwZXMuaD4gYXMgYSAxNi1iaXQgdHlwZSB3aGlsZSB0aGUKKyAga2VybmVsIHVzZXMgMzItYml0IGlkcy4gdGhpcyByZXN1bHRzIGluIHByb2JsZW1zIHdoZW4gZ2V0Z3JvdXBzKCkgb3IKKyAgc2V0Z3JvdXBzKCkgYXJlIGNhbGxlZCwgc2luY2UgdGhleSBvcGVyYXRlIG9uIGdpZF90IGFycmF5cy4KKwordW5mb3J0dW5hdGVseSwgdGhlc2UgaGVhZGVycyBhcmUgYWxzbyB0aGUgb25seSBzb3VyY2Ugb2Ygc29tZSByZWFsbHkgZXh0ZW5zaXZlCitjb25zdGFudCBhbmQgdHlwZSBkZWZpbml0aW9ucyB0aGF0IGFyZSByZXF1aXJlZCBieSB1c2VybGFuZCBhcHBsaWNhdGlvbnMuCit0aGluayBhbnkgbGlicmFyeS9wcm9ncmFtIHRoYXQgbmVlZCB0byBhY2Nlc3MgQUxTQSwgb3IgVmlkZW80TGludXgsIG9yCithbnl0aGluZyByZWxhdGVkIHRvIGEgc3BlY2lmaWMgZGV2aWNlIG9yIExpbnV4LXNwZWNpZmljIHN5c3RlbSBpbnRlcmZhY2UKKyhlLmcuIElPQ1RMUywgZXRjLi4uKQorCitBcyBhIGNvbnNlcXVlbmNlLCBldmVyeSBMaW51eCBkaXN0cmlidXRpb24gcHJvdmlkZXMgYSBzZXQgb2YgcGF0Y2hlZCBrZXJuZWwKK2hlYWRlcnMgdG8gYmUgdXNlZCBieSB1c2VybGFuZCBhcHBsaWNhdGlvbnMgKHdoaWNoIGluc3RhbGxzIGluCisvdXNyL2luY2x1ZGUvbGludXgvLCAvdXNyL2luY2x1ZGUvYXNtLywgZXRjLi4uKS4gdGhlc2UgYXJlIG1hbnVhbGx5IG1haW50YWluZWQKK2J5IGRpc3RyaWJ1dGlvbiBwYWNrYWdlcnMsIGFuZCBnZW5lcmF0ZWQgZWl0aGVyIG1hbnVhbGx5IG9yIHdpdGggdmFyaW91cworc2NyaXB0cy4gdGhlc2UgaGVhZGVycyBhcmUgYWxzbyB0YWlsb3JlZCB0byBHTlUgTGliQyBhbmQgY2Fubm90IGJlIHJldXNlZAorZWFzaWx5IGJ5IEJpb25pYy4KKworZm9yIGEgcmVhbGx5IGxvbmcgcGVyaW9kLCB0aGUga2VybmVsIGF1dGhvcnMgaGF2ZSBzdGF0ZWQgdGhhdCB0aGV5IGRvbid0IHdhbnQKK3RvIGZpeCB0aGUgcHJvYmxlbSwgZXZlbiB3aGVuIHNvbWVvbmUgcHJvcG9zZWQgYSBwYXRjaCB0byBzdGFydCBjbGVhbmluZyB0aGUKK29mZmljaWFsIGhlYWRlcnMuIGZyb20gdGhlaXIgcG9pbnQgb2YgdmlldyB0aGlzIGlzIHB1cmVseSBhIGxpYnJhcnkgYXV0aG9yCitwcm9ibGVtLgorCitmb3J0dW5hdGVseSwgZW5saWdodG5tZW50IGhhcHBlbmVkLCBhbmQgdGhlIGtlcm5lbCBub3cgcHJvdmlkZXMgYSB3YXkgdG8KK2luc3RhbGwgYSBzZXQgb2YgInVzZXItZnJpZW5kbHkiIGhlYWRlcnMgdGhhdCBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIG9mZmljaWFsCitvbmVzIGJ5IHN0cmlwcGluZyB0aGUgX19LRVJORUxfXyBwcm90ZWN0ZWQgZGVjbGFyYXRpb25zLgorCit1bmZvcnR1bmF0ZWx5LCB0aGlzIGlzIG5vdCBlbm91Z2ggZm9yIEJpb25pYyBiZWNhdXNlIHRoZSByZXN1bHQgc3RpbGwgY29udGFpbnMKK2EgZmV3IGJyb2tlbiBkZWNsYXJhdGlvbnMgdGhhdCBhcmUgZGlmZmljdWx0IHRvIHJvdXRlIGFyb3VuZC4gKHNlZSBiZWxvdyBmb3IKK2EgbGl0dGxlIGJpdCBvZiBkZXRhaWxzKS4KKword2UgcGxhbiB0byBiZSBhYmxlIHRvIHN1cHBvcnQgdGhlc2Uga2VybmVsLWdlbmVyYXRlZCB1c2VyLWxhbmQgaGVhZGVycyBpbiB0aGUKK2Z1dHVyZSwgYnV0IHRoZSBwcmlvcml0eSBvbiB0aGlzIGlzc3VlIGlzIHZlcnkgbG93LgorCisKK1dIQVQgV0UgRE86CistLS0tLS0tLS0tLQorCitzbyB3ZSdyZSBkb29tZWQgdG8gcmVwZWF0IHRoZSBzYW1lIGVmZm9ydCB0aGFuIGFueW9uZSBlbHNlLiB0aGUgYmlnIGRpZmZlcmVuY2UKK2hlcmUgaXMgdGhhdCB3ZSB3YW50IHRvIGF1dG9tYXRlIGFzIG11Y2ggYXMgcG9zc2libGUgdGhlIGdlbmVyYXRpb24gb2YgdGhlCitjbGVhbiBoZWFkZXJzIHRvIGVhc2lseSBzdXBwb3J0IGFkZGl0aW9uYWwgYXJjaGl0ZWN0dXJlcyBpbiB0aGUgZnV0dXJlLAorYW5kIGtlZXAgY3VycmVudCB3aXRoIHVwc3RyZWFtIGNoYW5nZXMgaW4gdGhlIGhlYWRlciBkZWZpbml0aW9ucyB3aXRoIHRoZQorbGVhc3QgcG9zc2libGUgaGFzc2xlLgorCitvZiBjb3Vyc2UsIHRoaXMgaXMgb25seSBhIHJhY2UgdG8gdGhlIGJvdHRvbS4gdGhlIGtlcm5lbCBtYWludGFpbmVycyBzdGlsbAorZmVlbCBmcmVlIHRvIHJhbmRvbWx5IGJyZWFrIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlaXIgaGVhZGVycyAoZS5nLiBtb3ZpbmcgdGhlCitsb2NhdGlvbiBvZiBzb21lIGZpbGVzKSBvY2Nhc2lvbmFsbHksIHNvIHdlJ2xsIG5lZWQgdG8ga2VlcCB1cCB3aXRoIHRoYXQgYnkKK3VwZGF0aW5nIG91ciBidWlsZCBzY3JpcHQvb3JpZ2luYWwgaGVhZGVycyBhcyB0aGVzZSBjYXNlcyBoYXBwZW4uCisKK3doYXQgd2UgZG8gaXMga2VlcCBhIHNldCBvZiAib3JpZ2luYWwiIGtlcm5lbCBoZWFkZXJzLCBhbmQgcHJvY2VzcyB0aGVtCithdXRvbWF0aWNhbGx5IHRvIGdlbmVyYXRlIGEgc2V0IG9mICJjbGVhbiIgaGVhZGVycyB0aGF0IGNhbiBiZSB1c2VkIGZyb20KK3VzZXJsYW5kIGFuZCB0aGUgQyBsaWJyYXJ5LgorCitub3RlIHRoYXQgdGhlICJvcmlnaW5hbCIgaGVhZGVycyBjYW4gYmUgdHdlYWtlZCBhIGxpdHRsZSB0byBhdm9pZCBzb21lIHN1YnRsZQoraXNzdWVzLiBmb3IgZXhhbXBsZToKKworLSB3aGVuIHRoZSBsb2NhdGlvbiBvZiB2YXJpb3VzIFVTQi1yZWxhdGVkIGhlYWRlcnMgY2hhbmdlcyBpbiB0aGUga2VybmVsCisgIHNvdXJjZSB0cmVlLCB3ZSB3YW50IHRvIGtlZXAgdGhlbSBhdCB0aGUgc2FtZSBsb2NhdGlvbiBpbiBvdXIgZ2VuZXJhdGVkCisgIGhlYWRlcnMgKHRoZXJlIGlzIG5vIHJlYXNvbiB0byBicmVhayB0aGUgdXNlcmxhbmQgQVBJIGZvciBzb21ldGhpbmcKKyAgbGlrZSB0aGF0KS4KKworLSBzb21ldGltZXMsIHdlIHByZWZlciB0byB0YWtlIGNlcnRhaW4gdGhpbmdzIG91dCBvZiBibG9ja3MgZ3VhcmRlZCBieSBhCisgICNpZmRlZiBfX0tFUk5FTF9fIC4uICNlbmRpZi4gZm9yIGV4YW1wbGUsIG9uIHJlY2VudCBrZXJuZWxzIDxsaW51eC93aXJlbGVzcy5oPgorICBvbmx5IGluY2x1ZGVzIDxsaW51eC9pZi5oPiB3aGVuIGluIGtlcm5lbCBtb2RlLiB3ZSBtYWtlIGl0IGF2YWlsYWJsZSB0bworICB1c2VybGFuZCBhcyB3ZWxsIHNpbmNlIHNvbWUgY29kZSBvdXQgdGhlcmUgYXNzdW1lcyB0aGF0IHRoaXMgaXMgdGhlIGNhc2UuCisKKy0gc29tZXRpbWVzLCB0aGUgaGVhZGVyIGlzIHNpbXBseSBpbmNvcnJlY3QgKGUuZy4gaXQgdXNlcyBhIHR5cGUgd2l0aG91dAorICBpbmNsdWRpbmcgdGhlIGhlYWRlciB0aGF0IGRlZmluZXMgaXQgYmVmb3JlLWhhbmQpCisKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hLm91dC5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2Eub3V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThmMTdkYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hLm91dC5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19BUk1fQV9PVVRfSF9fCisjZGVmaW5lIF9fQVJNX0FfT1VUX0hfXworCisjaW5jbHVkZSA8bGludXgvcGVyc29uYWxpdHkuaD4KKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKworc3RydWN0IGV4ZWMKK3sKKyBfX3UzMiBhX2luZm87CisgX191MzIgYV90ZXh0OworIF9fdTMyIGFfZGF0YTsKKyBfX3UzMiBhX2JzczsKKyBfX3UzMiBhX3N5bXM7CisgX191MzIgYV9lbnRyeTsKKyBfX3UzMiBhX3Ryc2l6ZTsKKyBfX3UzMiBhX2Ryc2l6ZTsKK307CisKKyNkZWZpbmUgTl9UWFRBRERSKGEpICgweDAwMDA4MDAwKQorCisjZGVmaW5lIE5fVFJTSVpFKGEpICgoYSkuYV90cnNpemUpCisjZGVmaW5lIE5fRFJTSVpFKGEpICgoYSkuYV9kcnNpemUpCisjZGVmaW5lIE5fU1lNU0laRShhKSAoKGEpLmFfc3ltcykKKworI2RlZmluZSBNX0FSTSAxMDMKKworI2lmbmRlZiBMSUJSQVJZX1NUQVJUX1RFWFQKKyNkZWZpbmUgTElCUkFSWV9TVEFSVF9URVhUICgweDAwYzAwMDAwKQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvYm9hcmQtcGVyc2V1czIuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL2JvYXJkLXBlcnNldXMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZjNTQxMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL2JvYXJkLXBlcnNldXMyLmgKQEAgLTAsMCArMSwyNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FTTV9BUkNIX09NQVBfUEVSU0VVUzJfSAorI2RlZmluZSBfX0FTTV9BUkNIX09NQVBfUEVSU0VVUzJfSAorCisjaW5jbHVkZSA8YXNtL2FyY2gvZnBnYS5oPgorCisjaWZuZGVmIE9NQVBfU0RSQU1fREVWSUNFCisjZGVmaW5lIE9NQVBfU0RSQU1fREVWSUNFIEQyNTZNXzFYMTZfNEIKKyNlbmRpZgorCisjZGVmaW5lIE1BWElSUU5VTSBJSF9CT0FSRF9CQVNFCisjZGVmaW5lIE1BWEZJUU5VTSBNQVhJUlFOVU0KKyNkZWZpbmUgTUFYU1dJTlVNIE1BWElSUU5VTQorCisjZGVmaW5lIE5SX0lSUVMgKE1BWElSUU5VTSArIDEpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvYm9hcmQuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL2JvYXJkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdhNGM2NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL2JvYXJkLmgKQEAgLTAsMCArMSwxNjMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX09NQVBfQk9BUkRfSAorI2RlZmluZSBfT01BUF9CT0FSRF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby1zd2l0Y2guaD4KKworI2RlZmluZSBPTUFQX1RBR19DTE9DSyAweDRmMDEKKyNkZWZpbmUgT01BUF9UQUdfTU1DIDB4NGYwMgorI2RlZmluZSBPTUFQX1RBR19TRVJJQUxfQ09OU09MRSAweDRmMDMKKyNkZWZpbmUgT01BUF9UQUdfVVNCIDB4NGYwNAorI2RlZmluZSBPTUFQX1RBR19MQ0QgMHg0ZjA1CisjZGVmaW5lIE9NQVBfVEFHX0dQSU9fU1dJVENIIDB4NGYwNgorI2RlZmluZSBPTUFQX1RBR19VQVJUIDB4NGYwNworI2RlZmluZSBPTUFQX1RBR19GQk1FTSAweDRmMDgKKyNkZWZpbmUgT01BUF9UQUdfU1RJX0NPTlNPTEUgMHg0ZjA5CisjZGVmaW5lIE9NQVBfVEFHX0NBTUVSQV9TRU5TT1IgMHg0ZjBhCisjZGVmaW5lIE9NQVBfVEFHX0JUIDB4NGYwYgorCisjZGVmaW5lIE9NQVBfVEFHX0JPT1RfUkVBU09OIDB4NGY4MAorI2RlZmluZSBPTUFQX1RBR19GTEFTSF9QQVJUIDB4NGY4MQorI2RlZmluZSBPTUFQX1RBR19WRVJTSU9OX1NUUiAweDRmODIKKworc3RydWN0IG9tYXBfY2xvY2tfY29uZmlnIHsKKworIHU4IHN5c3RlbV9jbG9ja190eXBlOworfTsKKworc3RydWN0IG9tYXBfbW1jX2NvbmYgeworIHVuc2lnbmVkIGVuYWJsZWQ6MTsKKworIHVuc2lnbmVkIG5vbXV4OjE7CisKKyB1bnNpZ25lZCBjb3ZlcjoxOworCisgdW5zaWduZWQgd2lyZTQ6MTsKKyBzMTYgcG93ZXJfcGluOworIHMxNiBzd2l0Y2hfcGluOworIHMxNiB3cF9waW47Cit9OworCitzdHJ1Y3Qgb21hcF9tbWNfY29uZmlnIHsKKyBzdHJ1Y3Qgb21hcF9tbWNfY29uZiBtbWNbMl07Cit9OworCitzdHJ1Y3Qgb21hcF9zZXJpYWxfY29uc29sZV9jb25maWcgeworIHU4IGNvbnNvbGVfdWFydDsKKyB1MzIgY29uc29sZV9zcGVlZDsKK307CisKK3N0cnVjdCBvbWFwX3N0aV9jb25zb2xlX2NvbmZpZyB7CisgdW5zaWduZWQgZW5hYmxlOjE7CisgdTggY2hhbm5lbDsKK307CisKK3N0cnVjdCBvbWFwX2NhbWVyYV9zZW5zb3JfY29uZmlnIHsKKyB1MTYgcmVzZXRfZ3BpbzsKKyBpbnQgKCpwb3dlcl9vbikodm9pZCAqIGRhdGEpOworIGludCAoKnBvd2VyX29mZikodm9pZCAqIGRhdGEpOworfTsKKworc3RydWN0IG9tYXBfdXNiX2NvbmZpZyB7CisKKyB1bnNpZ25lZCByZWdpc3Rlcl9ob3N0OjE7CisgdW5zaWduZWQgcmVnaXN0ZXJfZGV2OjE7CisgdTggb3RnOworCisgdTggaG1jX21vZGU7CisKKyB1OCByd2M7CisKKyB1OCBwaW5zWzNdOworfTsKKworc3RydWN0IG9tYXBfbGNkX2NvbmZpZyB7CisgY2hhciBwYW5lbF9uYW1lWzE2XTsKKyBjaGFyIGN0cmxfbmFtZVsxNl07CisgczE2IG5yZXNldF9ncGlvOworIHU4IGRhdGFfbGluZXM7Cit9OworCitzdHJ1Y3QgZGV2aWNlOworc3RydWN0IGZiX2luZm87CitzdHJ1Y3Qgb21hcF9iYWNrbGlnaHRfY29uZmlnIHsKKyBpbnQgZGVmYXVsdF9pbnRlbnNpdHk7CisgaW50ICgqc2V0X3Bvd2VyKShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzdGF0ZSk7CisgaW50ICgqY2hlY2tfZmIpKHN0cnVjdCBmYl9pbmZvICpmYik7Cit9OworCitzdHJ1Y3Qgb21hcF9mYm1lbV9jb25maWcgeworIHUzMiBzdGFydDsKKyB1MzIgc2l6ZTsKK307CisKK3N0cnVjdCBvbWFwX3B3bV9sZWRfcGxhdGZvcm1fZGF0YSB7CisgY29uc3QgY2hhciAqbmFtZTsKKyBpbnQgaW50ZW5zaXR5X3RpbWVyOworIGludCBibGlua190aW1lcjsKKyB2b2lkICgqc2V0X3Bvd2VyKShzdHJ1Y3Qgb21hcF9wd21fbGVkX3BsYXRmb3JtX2RhdGEgKnNlbGYsIGludCBvbl9vZmYpOworfTsKKworc3RydWN0IG9tYXBfZ3Bpb19zd2l0Y2hfY29uZmlnIHsKKyBjaGFyIG5hbWVbMTJdOworIHUxNiBncGlvOworIGludCBmbGFnczo0OworIGludCB0eXBlOjQ7CisgaW50IGtleV9jb2RlOjI0OworfTsKKworc3RydWN0IG9tYXBfdWFydF9jb25maWcgeworCisgdW5zaWduZWQgaW50IGVuYWJsZWRfdWFydHM7Cit9OworCitzdHJ1Y3Qgb21hcF9mbGFzaF9wYXJ0X2NvbmZpZyB7CisgY2hhciBwYXJ0X3RhYmxlWzBdOworfTsKKworc3RydWN0IG9tYXBfYm9vdF9yZWFzb25fY29uZmlnIHsKKyBjaGFyIHJlYXNvbl9zdHJbMTJdOworfTsKKworc3RydWN0IG9tYXBfdmVyc2lvbl9jb25maWcgeworIGNoYXIgY29tcG9uZW50WzEyXTsKKyBjaGFyIHZlcnNpb25bMTJdOworfTsKKworc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2VudHJ5IHsKKyB1MTYgdGFnOworIHUxNiBsZW47CisgdTggZGF0YVswXTsKK307CisKK3N0cnVjdCBvbWFwX2JvYXJkX2NvbmZpZ19rZXJuZWwgeworIHUxNiB0YWc7CisgY29uc3Qgdm9pZCAqZGF0YTsKK307CisKK3N0cnVjdCBvbWFwX2JsdWV0b290aF9jb25maWcgeworIHU4IGNoaXBfdHlwZTsKKyB1OCBidF91YXJ0OworIHU4IGJkX2FkZHJbNl07CisgdTggYnRfc3lzY2xrOworIGludCBidF93YWtldXBfZ3BpbzsKKyBpbnQgaG9zdF93YWtldXBfZ3BpbzsKKyBpbnQgcmVzZXRfZ3BpbzsKK307CisKKyNkZWZpbmUgb21hcF9nZXRfY29uZmlnKHRhZywgdHlwZSkgICAoKGNvbnN0IHR5cGUgKikgX19vbWFwX2dldF9jb25maWcoKHRhZyksIHNpemVvZih0eXBlKSwgMCkpCisjZGVmaW5lIG9tYXBfZ2V0X25yX2NvbmZpZyh0YWcsIHR5cGUsIG5yKSAgICgoY29uc3QgdHlwZSAqKSBfX29tYXBfZ2V0X2NvbmZpZygodGFnKSwgc2l6ZW9mKHR5cGUpLCAobnIpKSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXJjaC9jcHUuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL2NwdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhN2E0MDgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXJjaC9jcHUuaApAQCAtMCwwICsxLDU3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQVNNX0FSQ0hfT01BUF9DUFVfSAorI2RlZmluZSBfX0FTTV9BUkNIX09NQVBfQ1BVX0gKKworI2RlZmluZSBvbWFwMl9jcHVfcmV2KCkgKChzeXN0ZW1fcmV2ID4+IDgpICYgMHgwZikKKworI3VuZGVmIE1VTFRJX09NQVAxCisjdW5kZWYgTVVMVElfT01BUDIKKyN1bmRlZiBPTUFQX05BTUUKKworI2RlZmluZSBHRVRfT01BUF9DTEFTUyAoc3lzdGVtX3JldiAmIDB4ZmYpCisKKyNkZWZpbmUgSVNfT01BUF9DTEFTUyhjbGFzcywgaWQpICBzdGF0aWMgaW5saW5lIGludCBpc19vbWFwICMjY2xhc3MgKHZvaWQpICB7ICAgcmV0dXJuIChHRVRfT01BUF9DTEFTUyA9PSAoaWQpKSA/IDEgOiAwOyAgfQorCisjZGVmaW5lIEdFVF9PTUFQX1NVQkNMQVNTICgoc3lzdGVtX3JldiA+PiAyMCkgJiAweDBmZmYpCisKKyNkZWZpbmUgSVNfT01BUF9TVUJDTEFTUyhzdWJjbGFzcywgaWQpICBzdGF0aWMgaW5saW5lIGludCBpc19vbWFwICMjc3ViY2xhc3MgKHZvaWQpICB7ICAgcmV0dXJuIChHRVRfT01BUF9TVUJDTEFTUyA9PSAoaWQpKSA/IDEgOiAwOyAgfQorCisjZGVmaW5lIGNwdV9pc19vbWFwN3h4KCkgMAorI2RlZmluZSBjcHVfaXNfb21hcDE1eHgoKSAwCisjZGVmaW5lIGNwdV9pc19vbWFwMTZ4eCgpIDAKKyNkZWZpbmUgY3B1X2lzX29tYXAyNHh4KCkgMAorI2RlZmluZSBjcHVfaXNfb21hcDI0MngoKSAwCisjZGVmaW5lIGNwdV9pc19vbWFwMjQzeCgpIDAKKyNpZmRlZiBNVUxUSV9PTUFQMQorI2Vsc2UKKyNlbmRpZgorI2RlZmluZSBHRVRfT01BUF9UWVBFICgoc3lzdGVtX3JldiA+PiAxNikgJiAweGZmZmYpCisjZGVmaW5lIElTX09NQVBfVFlQRSh0eXBlLCBpZCkgIHN0YXRpYyBpbmxpbmUgaW50IGlzX29tYXAgIyN0eXBlICh2b2lkKSAgeyAgIHJldHVybiAoR0VUX09NQVBfVFlQRSA9PSAoaWQpKSA/IDEgOiAwOyAgfQorI2RlZmluZSBjcHVfaXNfb21hcDMxMCgpIDAKKyNkZWZpbmUgY3B1X2lzX29tYXA3MzAoKSAwCisjZGVmaW5lIGNwdV9pc19vbWFwMTUxMCgpIDAKKyNkZWZpbmUgY3B1X2lzX29tYXAxNjEwKCkgMAorI2RlZmluZSBjcHVfaXNfb21hcDU5MTIoKSAwCisjZGVmaW5lIGNwdV9pc19vbWFwMTYxMSgpIDAKKyNkZWZpbmUgY3B1X2lzX29tYXAxNjIxKCkgMAorI2RlZmluZSBjcHVfaXNfb21hcDE3MTAoKSAwCisjZGVmaW5lIGNwdV9pc19vbWFwMjQyMCgpIDAKKyNkZWZpbmUgY3B1X2lzX29tYXAyNDIyKCkgMAorI2RlZmluZSBjcHVfaXNfb21hcDI0MjMoKSAwCisjZGVmaW5lIGNwdV9pc19vbWFwMjQzMCgpIDAKKyNpZmRlZiBNVUxUSV9PTUFQMQorI2Vsc2UKKyNlbmRpZgorI2RlZmluZSBjcHVfY2xhc3NfaXNfb21hcDEoKSAoY3B1X2lzX29tYXA3MzAoKSB8fCBjcHVfaXNfb21hcDE1eHgoKSB8fCAgIGNwdV9pc19vbWFwMTZ4eCgpKQorI2RlZmluZSBjcHVfY2xhc3NfaXNfb21hcDIoKSBjcHVfaXNfb21hcDI0eHgoKQorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXJjaC9kbWEuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL2RtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlNWJlNzYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXJjaC9kbWEuaApAQCAtMCwwICsxLDMxOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FTTV9BUkNIX0RNQV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfRE1BX0gKKworI2RlZmluZSBPTUFQX0RNQV9CQVNFICgweGZmZmVkODAwKQorI2RlZmluZSBPTUFQX0RNQV9HQ1IgKE9NQVBfRE1BX0JBU0UgKyAweDQwMCkKKyNkZWZpbmUgT01BUF9ETUFfR1NDUiAoT01BUF9ETUFfQkFTRSArIDB4NDA0KQorI2RlZmluZSBPTUFQX0RNQV9HUlNUIChPTUFQX0RNQV9CQVNFICsgMHg0MDgpCisjZGVmaW5lIE9NQVBfRE1BX0hXX0lEIChPTUFQX0RNQV9CQVNFICsgMHg0NDIpCisjZGVmaW5lIE9NQVBfRE1BX1BDSDJfSUQgKE9NQVBfRE1BX0JBU0UgKyAweDQ0NCkKKyNkZWZpbmUgT01BUF9ETUFfUENIMF9JRCAoT01BUF9ETUFfQkFTRSArIDB4NDQ2KQorI2RlZmluZSBPTUFQX0RNQV9QQ0gxX0lEIChPTUFQX0RNQV9CQVNFICsgMHg0NDgpCisjZGVmaW5lIE9NQVBfRE1BX1BDSEdfSUQgKE9NQVBfRE1BX0JBU0UgKyAweDQ0YSkKKyNkZWZpbmUgT01BUF9ETUFfUENIRF9JRCAoT01BUF9ETUFfQkFTRSArIDB4NDRjKQorI2RlZmluZSBPTUFQX0RNQV9DQVBTXzBfVSAoT01BUF9ETUFfQkFTRSArIDB4NDRlKQorI2RlZmluZSBPTUFQX0RNQV9DQVBTXzBfTCAoT01BUF9ETUFfQkFTRSArIDB4NDUwKQorI2RlZmluZSBPTUFQX0RNQV9DQVBTXzFfVSAoT01BUF9ETUFfQkFTRSArIDB4NDUyKQorI2RlZmluZSBPTUFQX0RNQV9DQVBTXzFfTCAoT01BUF9ETUFfQkFTRSArIDB4NDU0KQorI2RlZmluZSBPTUFQX0RNQV9DQVBTXzIgKE9NQVBfRE1BX0JBU0UgKyAweDQ1NikKKyNkZWZpbmUgT01BUF9ETUFfQ0FQU18zIChPTUFQX0RNQV9CQVNFICsgMHg0NTgpCisjZGVmaW5lIE9NQVBfRE1BX0NBUFNfNCAoT01BUF9ETUFfQkFTRSArIDB4NDVhKQorI2RlZmluZSBPTUFQX0RNQV9QQ0gyX1NSIChPTUFQX0RNQV9CQVNFICsgMHg0NjApCisjZGVmaW5lIE9NQVBfRE1BX1BDSDBfU1IgKE9NQVBfRE1BX0JBU0UgKyAweDQ4MCkKKyNkZWZpbmUgT01BUF9ETUFfUENIMV9TUiAoT01BUF9ETUFfQkFTRSArIDB4NDgyKQorI2RlZmluZSBPTUFQX0RNQV9QQ0hEX1NSIChPTUFQX0RNQV9CQVNFICsgMHg0YzApCisKKyNkZWZpbmUgT01BUDI0WFhfRE1BX0JBU0UgKEw0XzI0WFhfQkFTRSArIDB4NTYwMDApCisjZGVmaW5lIE9NQVBfRE1BNF9SRVZJU0lPTiAoT01BUDI0WFhfRE1BX0JBU0UgKyAweDAwKQorI2RlZmluZSBPTUFQX0RNQTRfR0NSX1JFRyAoT01BUDI0WFhfRE1BX0JBU0UgKyAweDc4KQorI2RlZmluZSBPTUFQX0RNQTRfSVJRU1RBVFVTX0wwIChPTUFQMjRYWF9ETUFfQkFTRSArIDB4MDgpCisjZGVmaW5lIE9NQVBfRE1BNF9JUlFTVEFUVVNfTDEgKE9NQVAyNFhYX0RNQV9CQVNFICsgMHgwYykKKyNkZWZpbmUgT01BUF9ETUE0X0lSUVNUQVRVU19MMiAoT01BUDI0WFhfRE1BX0JBU0UgKyAweDEwKQorI2RlZmluZSBPTUFQX0RNQTRfSVJRU1RBVFVTX0wzIChPTUFQMjRYWF9ETUFfQkFTRSArIDB4MTQpCisjZGVmaW5lIE9NQVBfRE1BNF9JUlFFTkFCTEVfTDAgKE9NQVAyNFhYX0RNQV9CQVNFICsgMHgxOCkKKyNkZWZpbmUgT01BUF9ETUE0X0lSUUVOQUJMRV9MMSAoT01BUDI0WFhfRE1BX0JBU0UgKyAweDFjKQorI2RlZmluZSBPTUFQX0RNQTRfSVJRRU5BQkxFX0wyIChPTUFQMjRYWF9ETUFfQkFTRSArIDB4MjApCisjZGVmaW5lIE9NQVBfRE1BNF9JUlFFTkFCTEVfTDMgKE9NQVAyNFhYX0RNQV9CQVNFICsgMHgyNCkKKyNkZWZpbmUgT01BUF9ETUE0X1NZU1NUQVRVUyAoT01BUDI0WFhfRE1BX0JBU0UgKyAweDI4KQorI2RlZmluZSBPTUFQX0RNQTRfQ0FQU18wIChPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjQpCisjZGVmaW5lIE9NQVBfRE1BNF9DQVBTXzIgKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2YykKKyNkZWZpbmUgT01BUF9ETUE0X0NBUFNfMyAoT01BUDI0WFhfRE1BX0JBU0UgKyAweDcwKQorI2RlZmluZSBPTUFQX0RNQTRfQ0FQU180IChPTUFQMjRYWF9ETUFfQkFTRSArIDB4NzQpCisKKyNkZWZpbmUgT01BUF9MT0dJQ0FMX0RNQV9DSF9DT1VOVCAzMiAgCisKKyNkZWZpbmUgT01BUF9ETUFfQ0NSX1JFRyhuKSBfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4ODApCisjZGVmaW5lIE9NQVBfRE1BX0NMTktfQ1RSTF9SRUcobikgX19SRUczMihPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjAgKiAobikgKyAweDg0KQorI2RlZmluZSBPTUFQX0RNQV9DSUNSX1JFRyhuKSBfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4ODgpCisjZGVmaW5lIE9NQVBfRE1BX0NTUl9SRUcobikgX19SRUczMihPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjAgKiAobikgKyAweDhjKQorI2RlZmluZSBPTUFQX0RNQV9DU0RQX1JFRyhuKSBfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4OTApCisjZGVmaW5lIE9NQVBfRE1BX0NFTl9SRUcobikgX19SRUczMihPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjAgKiAobikgKyAweDk0KQorI2RlZmluZSBPTUFQX0RNQV9DRk5fUkVHKG4pIF9fUkVHMzIoT01BUDI0WFhfRE1BX0JBU0UgKyAweDYwICogKG4pICsgMHg5OCkKKyNkZWZpbmUgT01BUF9ETUFfQ1NFSV9SRUcobikgX19SRUczMihPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjAgKiAobikgKyAweGE0KQorI2RlZmluZSBPTUFQX0RNQV9DU0ZJX1JFRyhuKSBfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4YTgpCisjZGVmaW5lIE9NQVBfRE1BX0NERUlfUkVHKG4pIF9fUkVHMzIoT01BUDI0WFhfRE1BX0JBU0UgKyAweDYwICogKG4pICsgMHhhYykKKyNkZWZpbmUgT01BUF9ETUFfQ0RGSV9SRUcobikgX19SRUczMihPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjAgKiAobikgKyAweGIwKQorI2RlZmluZSBPTUFQX0RNQV9DU0FDX1JFRyhuKSBfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4YjQpCisjZGVmaW5lIE9NQVBfRE1BX0NEQUNfUkVHKG4pIF9fUkVHMzIoT01BUDI0WFhfRE1BX0JBU0UgKyAweDYwICogKG4pICsgMHhiOCkKKworI2RlZmluZSBPTUFQMV9ETUFfQ1NTQV9MX1JFRyhuKSBfX1JFRzE2KE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgwOCkKKyNkZWZpbmUgT01BUDFfRE1BX0NTU0FfVV9SRUcobikgX19SRUcxNihPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MGEpCisjZGVmaW5lIE9NQVAxX0RNQV9DRFNBX0xfUkVHKG4pIF9fUkVHMTYoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDBjKQorI2RlZmluZSBPTUFQMV9ETUFfQ0RTQV9VX1JFRyhuKSBfX1JFRzE2KE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgwZSkKKyNkZWZpbmUgT01BUDFfRE1BX0NPTE9SX0xfUkVHKG4pIF9fUkVHMTYoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDIwKQorI2RlZmluZSBPTUFQMV9ETUFfQ0NSMl9SRUcobikgX19SRUcxNihPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MjQpCisjZGVmaW5lIE9NQVAxX0RNQV9DT0xPUl9VX1JFRyhuKSBfX1JFRzE2KE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgyMikKKyNkZWZpbmUgT01BUDFfRE1BX0xDSF9DVFJMX1JFRyhuKSBfX1JFRzE2KE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgyYSkKKworI2RlZmluZSBPTUFQMl9ETUFfQ1NTQV9SRUcobikgX19SRUczMihPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjAgKiAobikgKyAweDljKQorI2RlZmluZSBPTUFQMl9ETUFfQ0RTQV9SRUcobikgX19SRUczMihPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjAgKiAobikgKyAweGEwKQorI2RlZmluZSBPTUFQMl9ETUFfQ0NFTl9SRUcobikgX19SRUczMihPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjAgKiAobikgKyAweGJjKQorI2RlZmluZSBPTUFQMl9ETUFfQ0NGTl9SRUcobikgX19SRUczMihPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjAgKiAobikgKyAweGMwKQorI2RlZmluZSBPTUFQMl9ETUFfQ09MT1JfUkVHKG4pIF9fUkVHMzIoT01BUDI0WFhfRE1BX0JBU0UgKyAweDYwICogKG4pICsgMHhjNCkKKworI2RlZmluZSBPTUFQX0RNQV9OT19ERVZJQ0UgMAorI2RlZmluZSBPTUFQX0RNQV9NQ1NJMV9UWCAxCisjZGVmaW5lIE9NQVBfRE1BX01DU0kxX1JYIDIKKyNkZWZpbmUgT01BUF9ETUFfSTJDX1JYIDMKKyNkZWZpbmUgT01BUF9ETUFfSTJDX1RYIDQKKyNkZWZpbmUgT01BUF9ETUFfRVhUX05ETUFfUkVRIDUKKyNkZWZpbmUgT01BUF9ETUFfRVhUX05ETUFfUkVRMiA2CisjZGVmaW5lIE9NQVBfRE1BX1VXSVJFX1RYIDcKKyNkZWZpbmUgT01BUF9ETUFfTUNCU1AxX1RYIDgKKyNkZWZpbmUgT01BUF9ETUFfTUNCU1AxX1JYIDkKKyNkZWZpbmUgT01BUF9ETUFfTUNCU1AzX1RYIDEwCisjZGVmaW5lIE9NQVBfRE1BX01DQlNQM19SWCAxMQorI2RlZmluZSBPTUFQX0RNQV9VQVJUMV9UWCAxMgorI2RlZmluZSBPTUFQX0RNQV9VQVJUMV9SWCAxMworI2RlZmluZSBPTUFQX0RNQV9VQVJUMl9UWCAxNAorI2RlZmluZSBPTUFQX0RNQV9VQVJUMl9SWCAxNQorI2RlZmluZSBPTUFQX0RNQV9NQ0JTUDJfVFggMTYKKyNkZWZpbmUgT01BUF9ETUFfTUNCU1AyX1JYIDE3CisjZGVmaW5lIE9NQVBfRE1BX1VBUlQzX1RYIDE4CisjZGVmaW5lIE9NQVBfRE1BX1VBUlQzX1JYIDE5CisjZGVmaW5lIE9NQVBfRE1BX0NBTUVSQV9JRl9SWCAyMAorI2RlZmluZSBPTUFQX0RNQV9NTUNfVFggMjEKKyNkZWZpbmUgT01BUF9ETUFfTU1DX1JYIDIyCisjZGVmaW5lIE9NQVBfRE1BX05BTkQgMjMKKyNkZWZpbmUgT01BUF9ETUFfSVJRX0xDRF9MSU5FIDI0CisjZGVmaW5lIE9NQVBfRE1BX01FTU9SWV9TVElDSyAyNQorI2RlZmluZSBPTUFQX0RNQV9VU0JfVzJGQ19SWDAgMjYKKyNkZWZpbmUgT01BUF9ETUFfVVNCX1cyRkNfUlgxIDI3CisjZGVmaW5lIE9NQVBfRE1BX1VTQl9XMkZDX1JYMiAyOAorI2RlZmluZSBPTUFQX0RNQV9VU0JfVzJGQ19UWDAgMjkKKyNkZWZpbmUgT01BUF9ETUFfVVNCX1cyRkNfVFgxIDMwCisjZGVmaW5lIE9NQVBfRE1BX1VTQl9XMkZDX1RYMiAzMQorCisjZGVmaW5lIE9NQVBfRE1BX0NSWVBUT19ERVNfSU4gMzIKKyNkZWZpbmUgT01BUF9ETUFfU1BJX1RYIDMzCisjZGVmaW5lIE9NQVBfRE1BX1NQSV9SWCAzNAorI2RlZmluZSBPTUFQX0RNQV9DUllQVE9fSEFTSCAzNQorI2RlZmluZSBPTUFQX0RNQV9DQ1BfQVRUTiAzNgorI2RlZmluZSBPTUFQX0RNQV9DQ1BfRklGT19OT1RfRU1QVFkgMzcKKyNkZWZpbmUgT01BUF9ETUFfQ01UX0FQRV9UWF9DSEFOXzAgMzgKKyNkZWZpbmUgT01BUF9ETUFfQ01UX0FQRV9SVl9DSEFOXzAgMzkKKyNkZWZpbmUgT01BUF9ETUFfQ01UX0FQRV9UWF9DSEFOXzEgNDAKKyNkZWZpbmUgT01BUF9ETUFfQ01UX0FQRV9SVl9DSEFOXzEgNDEKKyNkZWZpbmUgT01BUF9ETUFfQ01UX0FQRV9UWF9DSEFOXzIgNDIKKyNkZWZpbmUgT01BUF9ETUFfQ01UX0FQRV9SVl9DSEFOXzIgNDMKKyNkZWZpbmUgT01BUF9ETUFfQ01UX0FQRV9UWF9DSEFOXzMgNDQKKyNkZWZpbmUgT01BUF9ETUFfQ01UX0FQRV9SVl9DSEFOXzMgNDUKKyNkZWZpbmUgT01BUF9ETUFfQ01UX0FQRV9UWF9DSEFOXzQgNDYKKyNkZWZpbmUgT01BUF9ETUFfQ01UX0FQRV9SVl9DSEFOXzQgNDcKKyNkZWZpbmUgT01BUF9ETUFfQ01UX0FQRV9UWF9DSEFOXzUgNDgKKyNkZWZpbmUgT01BUF9ETUFfQ01UX0FQRV9SVl9DSEFOXzUgNDkKKyNkZWZpbmUgT01BUF9ETUFfQ01UX0FQRV9UWF9DSEFOXzYgNTAKKyNkZWZpbmUgT01BUF9ETUFfQ01UX0FQRV9SVl9DSEFOXzYgNTEKKyNkZWZpbmUgT01BUF9ETUFfQ01UX0FQRV9UWF9DSEFOXzcgNTIKKyNkZWZpbmUgT01BUF9ETUFfQ01UX0FQRV9SVl9DSEFOXzcgNTMKKyNkZWZpbmUgT01BUF9ETUFfTU1DMl9UWCA1NAorI2RlZmluZSBPTUFQX0RNQV9NTUMyX1JYIDU1CisjZGVmaW5lIE9NQVBfRE1BX0NSWVBUT19ERVNfT1VUIDU2CisKKyNkZWZpbmUgT01BUDI0WFhfRE1BX05PX0RFVklDRSAwCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9YVElfRE1BIDEgIAorI2RlZmluZSBPTUFQMjRYWF9ETUFfRVhUX0RNQVJFUTAgMiAgCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9FWFRfRE1BUkVRMSAzICAKKyNkZWZpbmUgT01BUDI0WFhfRE1BX0dQTUMgNCAgCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9HRlggNSAgCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9EU1MgNiAgCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9WTFlOUV9UWCA3ICAKKyNkZWZpbmUgT01BUDI0WFhfRE1BX0NXVCA4ICAKKyNkZWZpbmUgT01BUDI0WFhfRE1BX0FFU19UWCA5ICAKKyNkZWZpbmUgT01BUDI0WFhfRE1BX0FFU19SWCAxMCAgCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9ERVNfVFggMTEgIAorI2RlZmluZSBPTUFQMjRYWF9ETUFfREVTX1JYIDEyICAKKyNkZWZpbmUgT01BUDI0WFhfRE1BX1NIQTFNRDVfUlggMTMgIAorI2RlZmluZSBPTUFQMjRYWF9ETUFfRVhUX0RNQVJFUTIgMTQgIAorI2RlZmluZSBPTUFQMjRYWF9ETUFfRVhUX0RNQVJFUTMgMTUgIAorI2RlZmluZSBPTUFQMjRYWF9ETUFfRVhUX0RNQVJFUTQgMTYgIAorI2RlZmluZSBPTUFQMjRYWF9ETUFfRUFDX0FDX1JEIDE3ICAKKyNkZWZpbmUgT01BUDI0WFhfRE1BX0VBQ19BQ19XUiAxOCAgCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9FQUNfTURfVUxfUkQgMTkgIAorI2RlZmluZSBPTUFQMjRYWF9ETUFfRUFDX01EX1VMX1dSIDIwICAKKyNkZWZpbmUgT01BUDI0WFhfRE1BX0VBQ19NRF9ETF9SRCAyMSAgCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9FQUNfTURfRExfV1IgMjIgIAorI2RlZmluZSBPTUFQMjRYWF9ETUFfRUFDX0JUX1VMX1JEIDIzICAKKyNkZWZpbmUgT01BUDI0WFhfRE1BX0VBQ19CVF9VTF9XUiAyNCAgCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9FQUNfQlRfRExfUkQgMjUgIAorI2RlZmluZSBPTUFQMjRYWF9ETUFfRUFDX0JUX0RMX1dSIDI2ICAKKyNkZWZpbmUgT01BUDI0WFhfRE1BX0kyQzFfVFggMjcgIAorI2RlZmluZSBPTUFQMjRYWF9ETUFfSTJDMV9SWCAyOCAgCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9JMkMyX1RYIDI5ICAKKyNkZWZpbmUgT01BUDI0WFhfRE1BX0kyQzJfUlggMzAgIAorI2RlZmluZSBPTUFQMjRYWF9ETUFfTUNCU1AxX1RYIDMxICAKKyNkZWZpbmUgT01BUDI0WFhfRE1BX01DQlNQMV9SWCAzMiAgCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9NQ0JTUDJfVFggMzMgIAorI2RlZmluZSBPTUFQMjRYWF9ETUFfTUNCU1AyX1JYIDM0ICAKKyNkZWZpbmUgT01BUDI0WFhfRE1BX1NQSTFfVFgwIDM1ICAKKyNkZWZpbmUgT01BUDI0WFhfRE1BX1NQSTFfUlgwIDM2ICAKKyNkZWZpbmUgT01BUDI0WFhfRE1BX1NQSTFfVFgxIDM3ICAKKyNkZWZpbmUgT01BUDI0WFhfRE1BX1NQSTFfUlgxIDM4ICAKKyNkZWZpbmUgT01BUDI0WFhfRE1BX1NQSTFfVFgyIDM5ICAKKyNkZWZpbmUgT01BUDI0WFhfRE1BX1NQSTFfUlgyIDQwICAKKyNkZWZpbmUgT01BUDI0WFhfRE1BX1NQSTFfVFgzIDQxICAKKyNkZWZpbmUgT01BUDI0WFhfRE1BX1NQSTFfUlgzIDQyICAKKyNkZWZpbmUgT01BUDI0WFhfRE1BX1NQSTJfVFgwIDQzICAKKyNkZWZpbmUgT01BUDI0WFhfRE1BX1NQSTJfUlgwIDQ0ICAKKyNkZWZpbmUgT01BUDI0WFhfRE1BX1NQSTJfVFgxIDQ1ICAKKyNkZWZpbmUgT01BUDI0WFhfRE1BX1NQSTJfUlgxIDQ2ICAKKworI2RlZmluZSBPTUFQMjRYWF9ETUFfVUFSVDFfVFggNDkgIAorI2RlZmluZSBPTUFQMjRYWF9ETUFfVUFSVDFfUlggNTAgIAorI2RlZmluZSBPTUFQMjRYWF9ETUFfVUFSVDJfVFggNTEgIAorI2RlZmluZSBPTUFQMjRYWF9ETUFfVUFSVDJfUlggNTIgIAorI2RlZmluZSBPTUFQMjRYWF9ETUFfVUFSVDNfVFggNTMgIAorI2RlZmluZSBPTUFQMjRYWF9ETUFfVUFSVDNfUlggNTQgIAorI2RlZmluZSBPTUFQMjRYWF9ETUFfVVNCX1cyRkNfVFgwIDU1ICAKKyNkZWZpbmUgT01BUDI0WFhfRE1BX1VTQl9XMkZDX1JYMCA1NiAgCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9VU0JfVzJGQ19UWDEgNTcgIAorI2RlZmluZSBPTUFQMjRYWF9ETUFfVVNCX1cyRkNfUlgxIDU4ICAKKyNkZWZpbmUgT01BUDI0WFhfRE1BX1VTQl9XMkZDX1RYMiA1OSAgCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9VU0JfVzJGQ19SWDIgNjAgIAorI2RlZmluZSBPTUFQMjRYWF9ETUFfTU1DMV9UWCA2MSAgCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9NTUMxX1JYIDYyICAKKyNkZWZpbmUgT01BUDI0WFhfRE1BX01TIDYzICAKKyNkZWZpbmUgT01BUDI0WFhfRE1BX0VYVF9ETUFSRVE1IDY0ICAKKworI2RlZmluZSBPTUFQMTUxMF9ETUFfTENEX0JBU0UgKDB4ZmZmZWRiMDApCisjZGVmaW5lIE9NQVAxNTEwX0RNQV9MQ0RfQ1RSTCAoT01BUDE1MTBfRE1BX0xDRF9CQVNFICsgMHgwMCkKKyNkZWZpbmUgT01BUDE1MTBfRE1BX0xDRF9UT1BfRjFfTCAoT01BUDE1MTBfRE1BX0xDRF9CQVNFICsgMHgwMikKKyNkZWZpbmUgT01BUDE1MTBfRE1BX0xDRF9UT1BfRjFfVSAoT01BUDE1MTBfRE1BX0xDRF9CQVNFICsgMHgwNCkKKyNkZWZpbmUgT01BUDE1MTBfRE1BX0xDRF9CT1RfRjFfTCAoT01BUDE1MTBfRE1BX0xDRF9CQVNFICsgMHgwNikKKyNkZWZpbmUgT01BUDE1MTBfRE1BX0xDRF9CT1RfRjFfVSAoT01BUDE1MTBfRE1BX0xDRF9CQVNFICsgMHgwOCkKKworI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX0JBU0UgKDB4ZmZmZWUzMDApCisjZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfQ1NEUCAoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhjMCkKKyNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9DQ1IgKE9NQVAxNjEwX0RNQV9MQ0RfQkFTRSArIDB4YzIpCisjZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfQ1RSTCAoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhjNCkKKyNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9UT1BfQjFfTCAoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhjOCkKKyNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9UT1BfQjFfVSAoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhjYSkKKyNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9CT1RfQjFfTCAoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhjYykKKyNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9CT1RfQjFfVSAoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhjZSkKKyNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9UT1BfQjJfTCAoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhkMCkKKyNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9UT1BfQjJfVSAoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhkMikKKyNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9CT1RfQjJfTCAoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhkNCkKKyNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9CT1RfQjJfVSAoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhkNikKKyNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9TUkNfRUlfQjEgKE9NQVAxNjEwX0RNQV9MQ0RfQkFTRSArIDB4ZDgpCisjZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfU1JDX0ZJX0IxX0wgKE9NQVAxNjEwX0RNQV9MQ0RfQkFTRSArIDB4ZGEpCisjZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfU1JDX0VOX0IxIChPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGUwKQorI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX1NSQ19GTl9CMSAoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhlNCkKKyNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9MQ0hfQ1RSTCAoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhlYSkKKyNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9TUkNfRklfQjFfVSAoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhmNCkKKworI2RlZmluZSBPTUFQMV9ETUFfVE9VVF9JUlEgKDEgPDwgMCkKKyNkZWZpbmUgT01BUF9ETUFfRFJPUF9JUlEgKDEgPDwgMSkKKyNkZWZpbmUgT01BUF9ETUFfSEFMRl9JUlEgKDEgPDwgMikKKyNkZWZpbmUgT01BUF9ETUFfRlJBTUVfSVJRICgxIDw8IDMpCisjZGVmaW5lIE9NQVBfRE1BX0xBU1RfSVJRICgxIDw8IDQpCisjZGVmaW5lIE9NQVBfRE1BX0JMT0NLX0lSUSAoMSA8PCA1KQorI2RlZmluZSBPTUFQMV9ETUFfU1lOQ19JUlEgKDEgPDwgNikKKyNkZWZpbmUgT01BUDJfRE1BX1BLVF9JUlEgKDEgPDwgNykKKyNkZWZpbmUgT01BUDJfRE1BX1RSQU5TX0VSUl9JUlEgKDEgPDwgOCkKKyNkZWZpbmUgT01BUDJfRE1BX1NFQ1VSRV9FUlJfSVJRICgxIDw8IDkpCisjZGVmaW5lIE9NQVAyX0RNQV9TVVBFUlZJU09SX0VSUl9JUlEgKDEgPDwgMTApCisjZGVmaW5lIE9NQVAyX0RNQV9NSVNBTElHTkVEX0VSUl9JUlEgKDEgPDwgMTEpCisKKyNkZWZpbmUgT01BUF9ETUFfREFUQV9UWVBFX1M4IDB4MDAKKyNkZWZpbmUgT01BUF9ETUFfREFUQV9UWVBFX1MxNiAweDAxCisjZGVmaW5lIE9NQVBfRE1BX0RBVEFfVFlQRV9TMzIgMHgwMgorCisjZGVmaW5lIE9NQVBfRE1BX1NZTkNfRUxFTUVOVCAweDAwCisjZGVmaW5lIE9NQVBfRE1BX1NZTkNfRlJBTUUgMHgwMQorI2RlZmluZSBPTUFQX0RNQV9TWU5DX0JMT0NLIDB4MDIKKworI2RlZmluZSBPTUFQX0RNQV9QT1JUX0VNSUZGIDB4MDAKKyNkZWZpbmUgT01BUF9ETUFfUE9SVF9FTUlGUyAweDAxCisjZGVmaW5lIE9NQVBfRE1BX1BPUlRfT0NQX1QxIDB4MDIKKyNkZWZpbmUgT01BUF9ETUFfUE9SVF9USVBCIDB4MDMKKyNkZWZpbmUgT01BUF9ETUFfUE9SVF9PQ1BfVDIgMHgwNAorI2RlZmluZSBPTUFQX0RNQV9QT1JUX01QVUkgMHgwNQorCisjZGVmaW5lIE9NQVBfRE1BX0FNT0RFX0NPTlNUQU5UIDB4MDAKKyNkZWZpbmUgT01BUF9ETUFfQU1PREVfUE9TVF9JTkMgMHgwMQorI2RlZmluZSBPTUFQX0RNQV9BTU9ERV9TSU5HTEVfSURYIDB4MDIKKyNkZWZpbmUgT01BUF9ETUFfQU1PREVfRE9VQkxFX0lEWCAweDAzCisKK2VudW0geworIE9NQVBfTENEX0RNQV9CMV9UT1AsCisgT01BUF9MQ0RfRE1BX0IxX0JPVFRPTSwKKyBPTUFQX0xDRF9ETUFfQjJfVE9QLAorIE9NQVBfTENEX0RNQV9CMl9CT1RUT00KK307CisKK2VudW0gb21hcF9kbWFfYnVyc3RfbW9kZSB7CisgT01BUF9ETUFfREFUQV9CVVJTVF9ESVMgPSAwLAorIE9NQVBfRE1BX0RBVEFfQlVSU1RfNCwKKyBPTUFQX0RNQV9EQVRBX0JVUlNUXzgsCisgT01BUF9ETUFfREFUQV9CVVJTVF8xNiwKK307CisKK2VudW0gb21hcF9kbWFfY29sb3JfbW9kZSB7CisgT01BUF9ETUFfQ09MT1JfRElTID0gMCwKKyBPTUFQX0RNQV9DT05TVEFOVF9GSUxMLAorIE9NQVBfRE1BX1RSQU5TUEFSRU5UX0NPUFkKK307CisKK2VudW0gb21hcF9kbWFfd3JpdGVfbW9kZSB7CisgT01BUF9ETUFfV1JJVEVfTk9OX1BPU1RFRCA9IDAsCisgT01BUF9ETUFfV1JJVEVfUE9TVEVELAorIE9NQVBfRE1BX1dSSVRFX0xBU1RfTk9OX1BPU1RFRAorfTsKKworc3RydWN0IG9tYXBfZG1hX2NoYW5uZWxfcGFyYW1zIHsKKyBpbnQgZGF0YV90eXBlOworIGludCBlbGVtX2NvdW50OworIGludCBmcmFtZV9jb3VudDsKKworIGludCBzcmNfcG9ydDsKKyBpbnQgc3JjX2Ftb2RlOworIHVuc2lnbmVkIGxvbmcgc3JjX3N0YXJ0OworIGludCBzcmNfZWk7CisgaW50IHNyY19maTsKKworIGludCBkc3RfcG9ydDsKKyBpbnQgZHN0X2Ftb2RlOworIHVuc2lnbmVkIGxvbmcgZHN0X3N0YXJ0OworIGludCBkc3RfZWk7CisgaW50IGRzdF9maTsKKworIGludCB0cmlnZ2VyOworIGludCBzeW5jX21vZGU7CisgaW50IHNyY19vcl9kc3Rfc3luY2g7CisKKyBpbnQgaWU7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL2ZwZ2EuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL2ZwZ2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWIyMTBkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvZnBnYS5oCkBAIC0wLDAgKzEsMTYwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQVNNX0FSQ0hfT01BUF9GUEdBX0gKKyNkZWZpbmUgX19BU01fQVJDSF9PTUFQX0ZQR0FfSAorCisjZGVmaW5lIG9tYXAxNTEwX2ZwZ2FfaW5pdF9pcnEoKSAoMCkKKworI2RlZmluZSBmcGdhX3JlYWQocmVnKSBfX3Jhd19yZWFkYihyZWcpCisjZGVmaW5lIGZwZ2Ffd3JpdGUodmFsLCByZWcpIF9fcmF3X3dyaXRlYih2YWwsIHJlZykKKworI2RlZmluZSBIMlAyX0RCR19GUEdBX0JBU0UgMHhFODAwMDAwMCAgCisjZGVmaW5lIEgyUDJfREJHX0ZQR0FfU0laRSBTWl80SyAgCisjZGVmaW5lIEgyUDJfREJHX0ZQR0FfU1RBUlQgMHgwNDAwMDAwMCAgCisKKyNkZWZpbmUgSDJQMl9EQkdfRlBHQV9FVEhSX1NUQVJUIChIMlAyX0RCR19GUEdBX1NUQVJUICsgMHgzMDApCisjZGVmaW5lIEgyUDJfREJHX0ZQR0FfRlBHQV9SRVYgKEgyUDJfREJHX0ZQR0FfQkFTRSArIDB4MTApICAKKyNkZWZpbmUgSDJQMl9EQkdfRlBHQV9CT0FSRF9SRVYgKEgyUDJfREJHX0ZQR0FfQkFTRSArIDB4MTIpICAKKyNkZWZpbmUgSDJQMl9EQkdfRlBHQV9HUElPIChIMlAyX0RCR19GUEdBX0JBU0UgKyAweDE0KSAgCisjZGVmaW5lIEgyUDJfREJHX0ZQR0FfTEVEUyAoSDJQMl9EQkdfRlBHQV9CQVNFICsgMHgxNikgIAorI2RlZmluZSBIMlAyX0RCR19GUEdBX01JU0NfSU5QVVRTIChIMlAyX0RCR19GUEdBX0JBU0UgKyAweDE4KSAgCisjZGVmaW5lIEgyUDJfREJHX0ZQR0FfTEFOX1NUQVRVUyAoSDJQMl9EQkdfRlBHQV9CQVNFICsgMHgxQSkgIAorI2RlZmluZSBIMlAyX0RCR19GUEdBX0xBTl9SRVNFVCAoSDJQMl9EQkdfRlBHQV9CQVNFICsgMHgxQykgIAorCitzdHJ1Y3QgaDJwMl9kYmdfZnBnYSB7CisKKyB1MTYgc21jOTF4WzhdOworCisgdTE2IGZwZ2FfcmV2OworIHUxNiBib2FyZF9yZXY7CisgdTE2IGdwaW9fb3V0cHV0czsKKyB1MTYgbGVkczsKKworIHUxNiBtaXNjX2lucHV0czsKKyB1MTYgbGFuX3N0YXR1czsKKyB1MTYgbGFuX3Jlc2V0OworIHUxNiByZXNlcnZlZDA7CisKKyB1MTYgcHMyX2RhdGE7CisgdTE2IHBzMl9jdHJsOworCit9OworCisjZGVmaW5lIEgyUDJfREJHX0ZQR0FfTEVEX0dSRUVOICgxIDw8IDE1KQorI2RlZmluZSBIMlAyX0RCR19GUEdBX0xFRF9BTUJFUiAoMSA8PCAxNCkKKyNkZWZpbmUgSDJQMl9EQkdfRlBHQV9MRURfUkVEICgxIDw8IDEzKQorI2RlZmluZSBIMlAyX0RCR19GUEdBX0xFRF9CTFVFICgxIDw8IDEyKQorCisjZGVmaW5lIEgyUDJfREJHX0ZQR0FfTE9BRF9NRVRFUiAoMSA8PCAwKSAKKyNkZWZpbmUgSDJQMl9EQkdfRlBHQV9MT0FEX01FVEVSX1NJWkUgMTEKKyNkZWZpbmUgSDJQMl9EQkdfRlBHQV9MT0FEX01FVEVSX01BU0sgKCgxIDw8IEgyUDJfREJHX0ZQR0FfTE9BRF9NRVRFUl9TSVpFKSAtIDEpCisKKyNkZWZpbmUgSDJQMl9EQkdfRlBHQV9QMl9MRURfVElNRVIgKDEgPDwgMCkKKyNkZWZpbmUgSDJQMl9EQkdfRlBHQV9QMl9MRURfSURMRSAoMSA8PCAxKQorCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfQkFTRSAweEU4MDAwMDAwICAKKyNkZWZpbmUgT01BUDE1MTBfRlBHQV9TSVpFIFNaXzRLCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfU1RBUlQgMHgwODAwMDAwMCAgCisKKyNkZWZpbmUgT01BUDE1MTBfRlBHQV9SRVZfTE9XIChPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDApCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfUkVWX0hJR0ggKE9NQVAxNTEwX0ZQR0FfQkFTRSArIDB4MSkKKworI2RlZmluZSBPTUFQMTUxMF9GUEdBX0xDRF9QQU5FTF9DT05UUk9MIChPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDIpCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfTEVEX0RJR0lUIChPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDMpCisjZGVmaW5lIElOTk9WQVRPUl9GUEdBX0hJRF9TUEkgKE9NQVAxNTEwX0ZQR0FfQkFTRSArIDB4NCkKKyNkZWZpbmUgT01BUDE1MTBfRlBHQV9QT1dFUiAoT01BUDE1MTBfRlBHQV9CQVNFICsgMHg1KQorCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfSVNSX0xPIChPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDYpCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfSVNSX0hJIChPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDcpCisKKyNkZWZpbmUgT01BUDE1MTBfRlBHQV9JTVJfTE8gKE9NQVAxNTEwX0ZQR0FfQkFTRSArIDB4OCkKKyNkZWZpbmUgT01BUDE1MTBfRlBHQV9JTVJfSEkgKE9NQVAxNTEwX0ZQR0FfQkFTRSArIDB4OSkKKworI2RlZmluZSBPTUFQMTUxMF9GUEdBX0hPU1RfUkVTRVQgKE9NQVAxNTEwX0ZQR0FfQkFTRSArIDB4YSkKKyNkZWZpbmUgT01BUDE1MTBfRlBHQV9SU1QgKE9NQVAxNTEwX0ZQR0FfQkFTRSArIDB4YikKKworI2RlZmluZSBPTUFQMTUxMF9GUEdBX0FVRElPIChPTUFQMTUxMF9GUEdBX0JBU0UgKyAweGMpCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfRElQIChPTUFQMTUxMF9GUEdBX0JBU0UgKyAweGUpCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfRlBHQV9JTyAoT01BUDE1MTBfRlBHQV9CQVNFICsgMHhmKQorI2RlZmluZSBPTUFQMTUxMF9GUEdBX1VBUlQxIChPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDE0KQorI2RlZmluZSBPTUFQMTUxMF9GUEdBX1VBUlQyIChPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDE1KQorI2RlZmluZSBPTUFQMTUxMF9GUEdBX09NQVAxNTEwX1NUQVRVUyAoT01BUDE1MTBfRlBHQV9CQVNFICsgMHgxNikKKyNkZWZpbmUgT01BUDE1MTBfRlBHQV9CT0FSRF9SRVYgKE9NQVAxNTEwX0ZQR0FfQkFTRSArIDB4MTgpCisjZGVmaW5lIE9NQVAxNTEwUDFfUFBUX0RBVEEgKE9NQVAxNTEwX0ZQR0FfQkFTRSArIDB4MTAwKQorI2RlZmluZSBPTUFQMTUxMFAxX1BQVF9TVEFUVVMgKE9NQVAxNTEwX0ZQR0FfQkFTRSArIDB4MTAxKQorI2RlZmluZSBPTUFQMTUxMFAxX1BQVF9DT05UUk9MIChPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDEwMikKKworI2RlZmluZSBPTUFQMTUxMF9GUEdBX1RPVUNIU0NSRUVOIChPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDIwNCkKKworI2RlZmluZSBJTk5PVkFUT1JfRlBHQV9JTkZPIChPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDIwNSkKKyNkZWZpbmUgSU5OT1ZBVE9SX0ZQR0FfTENEX0JSSUdIVF9MTyAoT01BUDE1MTBfRlBHQV9CQVNFICsgMHgyMDYpCisjZGVmaW5lIElOTk9WQVRPUl9GUEdBX0xDRF9CUklHSFRfSEkgKE9NQVAxNTEwX0ZQR0FfQkFTRSArIDB4MjA3KQorI2RlZmluZSBJTk5PVkFUT1JfRlBHQV9MRURfR1JOX0xPIChPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDIwOCkKKyNkZWZpbmUgSU5OT1ZBVE9SX0ZQR0FfTEVEX0dSTl9ISSAoT01BUDE1MTBfRlBHQV9CQVNFICsgMHgyMDkpCisjZGVmaW5lIElOTk9WQVRPUl9GUEdBX0xFRF9SRURfTE8gKE9NQVAxNTEwX0ZQR0FfQkFTRSArIDB4MjBhKQorI2RlZmluZSBJTk5PVkFUT1JfRlBHQV9MRURfUkVEX0hJIChPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDIwYikKKyNkZWZpbmUgSU5OT1ZBVE9SX0ZQR0FfQ0FNX1VTQl9DT05UUk9MIChPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDIwYykKKyNkZWZpbmUgSU5OT1ZBVE9SX0ZQR0FfRVhQX0NPTlRST0wgKE9NQVAxNTEwX0ZQR0FfQkFTRSArIDB4MjBkKQorI2RlZmluZSBJTk5PVkFUT1JfRlBHQV9JU1IyIChPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDIwZSkKKyNkZWZpbmUgSU5OT1ZBVE9SX0ZQR0FfSU1SMiAoT01BUDE1MTBfRlBHQV9CQVNFICsgMHgyMTApCisKKyNkZWZpbmUgT01BUDE1MTBfRlBHQV9FVEhSX1NUQVJUIChPTUFQMTUxMF9GUEdBX1NUQVJUICsgMHgzMDApCisKKyNkZWZpbmUgT01BUDE1MTBfRlBHQV9SRVNFVF9WQUxVRSAweDQyCisKKyNkZWZpbmUgT01BUDE1MTBfRlBHQV9QQ1JfSUZfUEQwICgxIDw8IDcpCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfUENSX0NPTTJfRU4gKDEgPDwgNikKKyNkZWZpbmUgT01BUDE1MTBfRlBHQV9QQ1JfQ09NMV9FTiAoMSA8PCA1KQorI2RlZmluZSBPTUFQMTUxMF9GUEdBX1BDUl9FWFBfUEQwICgxIDw8IDQpCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfUENSX0VYUF9QRDEgKDEgPDwgMykKKyNkZWZpbmUgT01BUDE1MTBfRlBHQV9QQ1JfNDhNSFpfQ0xLICgxIDw8IDIpCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfUENSXzRNSFpfQ0xLICgxIDw8IDEpCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfUENSX1JTUlZEX0JJVDAgKDEgPDwgMCkKKworI2RlZmluZSBPTUFQMTUxMF9GUEdBX0hJRF9TQ0xLICgxPDwwKSAgCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfSElEX01PU0kgKDE8PDEpICAKKyNkZWZpbmUgT01BUDE1MTBfRlBHQV9ISURfblNTICgxPDwyKSAgCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfSElEX25IU1VTICgxPDwzKSAgCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfSElEX01JU08gKDE8PDQpICAKKyNkZWZpbmUgT01BUDE1MTBfRlBHQV9ISURfQVROICgxPDw1KSAgCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfSElEX3JzcnZkICgxPDw2KQorI2RlZmluZSBPTUFQMTUxMF9GUEdBX0hJRF9SRVNFVG4gKDE8PDcpICAKKworI2RlZmluZSBPTUFQMTUxMF9JTlRfRlBHQSAoSUhfR1BJT19CQVNFICsgMTMpCisKKyNkZWZpbmUgT01BUDE1MTBfSUhfRlBHQV9CQVNFIElIX0JPQVJEX0JBU0UKKyNkZWZpbmUgT01BUDE1MTBfSU5UX0ZQR0FfQVROIChPTUFQMTUxMF9JSF9GUEdBX0JBU0UgKyAwKQorI2RlZmluZSBPTUFQMTUxMF9JTlRfRlBHQV9BQ0sgKE9NQVAxNTEwX0lIX0ZQR0FfQkFTRSArIDEpCisjZGVmaW5lIE9NQVAxNTEwX0lOVF9GUEdBMiAoT01BUDE1MTBfSUhfRlBHQV9CQVNFICsgMikKKyNkZWZpbmUgT01BUDE1MTBfSU5UX0ZQR0EzIChPTUFQMTUxMF9JSF9GUEdBX0JBU0UgKyAzKQorI2RlZmluZSBPTUFQMTUxMF9JTlRfRlBHQTQgKE9NQVAxNTEwX0lIX0ZQR0FfQkFTRSArIDQpCisjZGVmaW5lIE9NQVAxNTEwX0lOVF9GUEdBNSAoT01BUDE1MTBfSUhfRlBHQV9CQVNFICsgNSkKKyNkZWZpbmUgT01BUDE1MTBfSU5UX0ZQR0E2IChPTUFQMTUxMF9JSF9GUEdBX0JBU0UgKyA2KQorI2RlZmluZSBPTUFQMTUxMF9JTlRfRlBHQTcgKE9NQVAxNTEwX0lIX0ZQR0FfQkFTRSArIDcpCisjZGVmaW5lIE9NQVAxNTEwX0lOVF9GUEdBOCAoT01BUDE1MTBfSUhfRlBHQV9CQVNFICsgOCkKKyNkZWZpbmUgT01BUDE1MTBfSU5UX0ZQR0E5IChPTUFQMTUxMF9JSF9GUEdBX0JBU0UgKyA5KQorI2RlZmluZSBPTUFQMTUxMF9JTlRfRlBHQTEwIChPTUFQMTUxMF9JSF9GUEdBX0JBU0UgKyAxMCkKKyNkZWZpbmUgT01BUDE1MTBfSU5UX0ZQR0ExMSAoT01BUDE1MTBfSUhfRlBHQV9CQVNFICsgMTEpCisjZGVmaW5lIE9NQVAxNTEwX0lOVF9GUEdBMTIgKE9NQVAxNTEwX0lIX0ZQR0FfQkFTRSArIDEyKQorI2RlZmluZSBPTUFQMTUxMF9JTlRfRVRIRVIgKE9NQVAxNTEwX0lIX0ZQR0FfQkFTRSArIDEzKQorI2RlZmluZSBPTUFQMTUxMF9JTlRfRlBHQVVBUlQxIChPTUFQMTUxMF9JSF9GUEdBX0JBU0UgKyAxNCkKKyNkZWZpbmUgT01BUDE1MTBfSU5UX0ZQR0FVQVJUMiAoT01BUDE1MTBfSUhfRlBHQV9CQVNFICsgMTUpCisjZGVmaW5lIE9NQVAxNTEwX0lOVF9GUEdBX1RTIChPTUFQMTUxMF9JSF9GUEdBX0JBU0UgKyAxNikKKyNkZWZpbmUgT01BUDE1MTBfSU5UX0ZQR0ExNyAoT01BUDE1MTBfSUhfRlBHQV9CQVNFICsgMTcpCisjZGVmaW5lIE9NQVAxNTEwX0lOVF9GUEdBX0NBTSAoT01BUDE1MTBfSUhfRlBHQV9CQVNFICsgMTgpCisjZGVmaW5lIE9NQVAxNTEwX0lOVF9GUEdBX1JUQ19BIChPTUFQMTUxMF9JSF9GUEdBX0JBU0UgKyAxOSkKKyNkZWZpbmUgT01BUDE1MTBfSU5UX0ZQR0FfUlRDX0IgKE9NQVAxNTEwX0lIX0ZQR0FfQkFTRSArIDIwKQorI2RlZmluZSBPTUFQMTUxMF9JTlRfRlBHQV9DRCAoT01BUDE1MTBfSUhfRlBHQV9CQVNFICsgMjEpCisjZGVmaW5lIE9NQVAxNTEwX0lOVF9GUEdBMjIgKE9NQVAxNTEwX0lIX0ZQR0FfQkFTRSArIDIyKQorI2RlZmluZSBPTUFQMTUxMF9JTlRfRlBHQTIzIChPTUFQMTUxMF9JSF9GUEdBX0JBU0UgKyAyMykKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXJjaC9ncGlvLXN3aXRjaC5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvZ3Bpby1zd2l0Y2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGVhM2YyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvZ3Bpby1zd2l0Y2guaApAQCAtMCwwICsxLDM3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQVNNX0FSQ0hfT01BUF9HUElPX1NXSVRDSF9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfT01BUF9HUElPX1NXSVRDSF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjZGVmaW5lIE9NQVBfR1BJT19TV0lUQ0hfVFlQRV9DT1ZFUiAweDAwMDAKKyNkZWZpbmUgT01BUF9HUElPX1NXSVRDSF9UWVBFX0NPTk5FQ1RJT04gMHgwMDAxCisjZGVmaW5lIE9NQVBfR1BJT19TV0lUQ0hfVFlQRV9BQ1RJVklUWSAweDAwMDIKKyNkZWZpbmUgT01BUF9HUElPX1NXSVRDSF9GTEFHX0lOVkVSVEVEIDB4MDAwMQorI2RlZmluZSBPTUFQX0dQSU9fU1dJVENIX0ZMQUdfT1VUUFVUIDB4MDAwMgorCitzdHJ1Y3Qgb21hcF9ncGlvX3N3aXRjaCB7CisgY29uc3QgY2hhciAqbmFtZTsKKyBzMTYgZ3BpbzsKKyB1bnNpZ25lZCBmbGFnczo0OworIHVuc2lnbmVkIHR5cGU6NDsKKworIHUxNiBkZWJvdW5jZV9yaXNpbmc7CisKKyB1MTYgZGVib3VuY2VfZmFsbGluZzsKKworIHZvaWQgKCogbm90aWZ5KSh2b2lkICpkYXRhLCBpbnQgc3RhdGUpOworIHZvaWQgKm5vdGlmeV9kYXRhOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXJjaC9ncGlvLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXJjaC9ncGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMyMjQ2ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL2dwaW8uaApAQCAtMCwwICsxLDQ5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQVNNX0FSQ0hfT01BUF9HUElPX0gKKyNkZWZpbmUgX19BU01fQVJDSF9PTUFQX0dQSU9fSAorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaXJxcy5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCisjZGVmaW5lIE9NQVBfTVBVSU9fQkFTRSAodm9pZCBfX2lvbWVtICopMHhmZmZiNTAwMAorCisjZGVmaW5lIE9NQVBfTVBVSU9fSU5QVVRfTEFUQ0ggMHgwMAorI2RlZmluZSBPTUFQX01QVUlPX09VVFBVVCAweDA0CisjZGVmaW5lIE9NQVBfTVBVSU9fSU9fQ05UTCAweDA4CisjZGVmaW5lIE9NQVBfTVBVSU9fS0JSX0xBVENIIDB4MTAKKyNkZWZpbmUgT01BUF9NUFVJT19LQkMgMHgxNAorI2RlZmluZSBPTUFQX01QVUlPX0dQSU9fRVZFTlRfTU9ERSAweDE4CisjZGVmaW5lIE9NQVBfTVBVSU9fR1BJT19JTlRfRURHRSAweDFjCisjZGVmaW5lIE9NQVBfTVBVSU9fS0JEX0lOVCAweDIwCisjZGVmaW5lIE9NQVBfTVBVSU9fR1BJT19JTlQgMHgyNAorI2RlZmluZSBPTUFQX01QVUlPX0tCRF9NQVNLSVQgMHgyOAorI2RlZmluZSBPTUFQX01QVUlPX0dQSU9fTUFTS0lUIDB4MmMKKyNkZWZpbmUgT01BUF9NUFVJT19HUElPX0RFQk9VTkNJTkcgMHgzMAorI2RlZmluZSBPTUFQX01QVUlPX0xBVENIIDB4MzQKKworI2RlZmluZSBPTUFQX01QVUlPKG5yKSAoT01BUF9NQVhfR1BJT19MSU5FUyArIChucikpCisjZGVmaW5lIE9NQVBfR1BJT19JU19NUFVJTyhucikgKChucikgPj0gT01BUF9NQVhfR1BJT19MSU5FUykKKworI2RlZmluZSBPTUFQX0dQSU9fSVJRKG5yKSAoT01BUF9HUElPX0lTX01QVUlPKG5yKSA/ICAgSUhfTVBVSU9fQkFTRSArICgobnIpICYgMHgwZikgOiAgIElIX0dQSU9fQkFTRSArIChucikpCisKK3N0cnVjdCBvbWFwX21hY2hpbmVfZ3Bpb19iYW5rIHsKKyBpbnQgc3RhcnQ7CisgaW50IGVuZDsKKworIHZvaWQgKCpzZXRfZ3Bpb19kaXJlY3Rpb24pKGludCBncGlvLCBpbnQgaXNfaW5wdXQpOworIHZvaWQgKCpzZXRfZ3Bpb19kYXRhb3V0KShpbnQgZ3BpbywgaW50IGVuYWJsZSk7CisgaW50ICgqZ2V0X2dwaW9fZGF0YWluKShpbnQgZ3Bpbyk7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL2hhcmR3YXJlLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXJjaC9oYXJkd2FyZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MTVlZTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXJjaC9oYXJkd2FyZS5oCkBAIC0wLDAgKzEsMTU3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQVNNX0FSQ0hfT01BUF9IQVJEV0FSRV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfT01BUF9IQVJEV0FSRV9ICisKKyNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KKyNpZm5kZWYgX19BU1NFTUJMRVJfXworI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2NwdS5oPgorI2VuZGlmCisjaW5jbHVkZSA8YXNtL2FyY2gvaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9zZXJpYWwuaD4KKworI2RlZmluZSBPTUFQX01QVV9USU1FUjFfQkFTRSAoMHhmZmZlYzUwMCkKKyNkZWZpbmUgT01BUF9NUFVfVElNRVIyX0JBU0UgKDB4ZmZmZWM2MDApCisjZGVmaW5lIE9NQVBfTVBVX1RJTUVSM19CQVNFICgweGZmZmVjNzAwKQorI2RlZmluZSBNUFVfVElNRVJfRlJFRSAoMSA8PCA2KQorI2RlZmluZSBNUFVfVElNRVJfQ0xPQ0tfRU5BQkxFICgxIDw8IDUpCisjZGVmaW5lIE1QVV9USU1FUl9BUiAoMSA8PCAxKQorI2RlZmluZSBNUFVfVElNRVJfU1QgKDEgPDwgMCkKKworI2RlZmluZSBDTEtHRU5fUkVHX0JBU0UgKDB4ZmZmZWNlMDApCisjZGVmaW5lIEFSTV9DS0NUTCAoQ0xLR0VOX1JFR19CQVNFICsgMHgwKQorI2RlZmluZSBBUk1fSURMRUNUMSAoQ0xLR0VOX1JFR19CQVNFICsgMHg0KQorI2RlZmluZSBBUk1fSURMRUNUMiAoQ0xLR0VOX1JFR19CQVNFICsgMHg4KQorI2RlZmluZSBBUk1fRVdVUENUIChDTEtHRU5fUkVHX0JBU0UgKyAweEMpCisjZGVmaW5lIEFSTV9SU1RDVDEgKENMS0dFTl9SRUdfQkFTRSArIDB4MTApCisjZGVmaW5lIEFSTV9SU1RDVDIgKENMS0dFTl9SRUdfQkFTRSArIDB4MTQpCisjZGVmaW5lIEFSTV9TWVNTVCAoQ0xLR0VOX1JFR19CQVNFICsgMHgxOCkKKyNkZWZpbmUgQVJNX0lETEVDVDMgKENMS0dFTl9SRUdfQkFTRSArIDB4MjQpCisKKyNkZWZpbmUgQ0tfUkFURUYgMQorI2RlZmluZSBDS19JRExFRiAyCisjZGVmaW5lIENLX0VOQUJMRUYgNAorI2RlZmluZSBDS19TRUxFQ1RGIDgKKyNkZWZpbmUgU0VUQVJNX0lETEVfU0hJRlQKKworI2RlZmluZSBEUExMX0NUTCAoMHhmZmZlY2YwMCkKKworI2RlZmluZSBEU1BfQ09ORklHX1JFR19CQVNFICgweGUxMDA4MDAwKQorI2RlZmluZSBEU1BfQ0tDVEwgKERTUF9DT05GSUdfUkVHX0JBU0UgKyAweDApCisjZGVmaW5lIERTUF9JRExFQ1QxIChEU1BfQ09ORklHX1JFR19CQVNFICsgMHg0KQorI2RlZmluZSBEU1BfSURMRUNUMiAoRFNQX0NPTkZJR19SRUdfQkFTRSArIDB4OCkKKyNkZWZpbmUgRFNQX1JTVENUMiAoRFNQX0NPTkZJR19SRUdfQkFTRSArIDB4MTQpCisKKyNkZWZpbmUgVUxQRF9SRUdfQkFTRSAoMHhmZmZlMDgwMCkKKyNkZWZpbmUgVUxQRF9JVF9TVEFUVVMgKFVMUERfUkVHX0JBU0UgKyAweDE0KQorI2RlZmluZSBVTFBEX1NFVFVQX0FOQUxPR19DRUxMXzMgKFVMUERfUkVHX0JBU0UgKyAweDI0KQorI2RlZmluZSBVTFBEX0NMT0NLX0NUUkwgKFVMUERfUkVHX0JBU0UgKyAweDMwKQorI2RlZmluZSBESVNfVVNCX1BWQ0lfQ0xLICgxIDw8IDUpICAKKyNkZWZpbmUgVVNCX01DTEtfRU4gKDEgPDwgNCkgIAorI2RlZmluZSBVTFBEX1NPRlRfUkVRIChVTFBEX1JFR19CQVNFICsgMHgzNCkKKyNkZWZpbmUgU09GVF9VRENfUkVRICgxIDw8IDQpCisjZGVmaW5lIFNPRlRfVVNCX0NMS19SRVEgKDEgPDwgMykKKyNkZWZpbmUgU09GVF9EUExMX1JFUSAoMSA8PCAwKQorI2RlZmluZSBVTFBEX0RQTExfQ1RSTCAoVUxQRF9SRUdfQkFTRSArIDB4M2MpCisjZGVmaW5lIFVMUERfU1RBVFVTX1JFUSAoVUxQRF9SRUdfQkFTRSArIDB4NDApCisjZGVmaW5lIFVMUERfQVBMTF9DVFJMIChVTFBEX1JFR19CQVNFICsgMHg0YykKKyNkZWZpbmUgVUxQRF9QT1dFUl9DVFJMIChVTFBEX1JFR19CQVNFICsgMHg1MCkKKyNkZWZpbmUgVUxQRF9TT0ZUX0RJU0FCTEVfUkVRX1JFRyAoVUxQRF9SRUdfQkFTRSArIDB4NjgpCisjZGVmaW5lIERJU19NTUMyX0RQTExfUkVRICgxIDw8IDExKQorI2RlZmluZSBESVNfTU1DMV9EUExMX1JFUSAoMSA8PCAxMCkKKyNkZWZpbmUgRElTX1VBUlQzX0RQTExfUkVRICgxIDw8IDkpCisjZGVmaW5lIERJU19VQVJUMl9EUExMX1JFUSAoMSA8PCA4KQorI2RlZmluZSBESVNfVUFSVDFfRFBMTF9SRVEgKDEgPDwgNykKKyNkZWZpbmUgRElTX1VTQl9IT1NUX0RQTExfUkVRICgxIDw8IDYpCisjZGVmaW5lIFVMUERfU0RXX0NMS19ESVZfQ1RSTF9TRUwgKFVMUERfUkVHX0JBU0UgKyAweDc0KQorI2RlZmluZSBVTFBEX0NBTV9DTEtfQ1RSTCAoVUxQRF9SRUdfQkFTRSArIDB4N2MpCisKKyNkZWZpbmUgT01BUF9NUFVfV0FUQ0hET0dfQkFTRSAoMHhmZmZlYzgwMCkKKyNkZWZpbmUgT01BUF9XRFRfVElNRVIgKE9NQVBfTVBVX1dBVENIRE9HX0JBU0UgKyAweDApCisjZGVmaW5lIE9NQVBfV0RUX0xPQURfVElNIChPTUFQX01QVV9XQVRDSERPR19CQVNFICsgMHg0KQorI2RlZmluZSBPTUFQX1dEVF9SRUFEX1RJTSAoT01BUF9NUFVfV0FUQ0hET0dfQkFTRSArIDB4NCkKKyNkZWZpbmUgT01BUF9XRFRfVElNRVJfTU9ERSAoT01BUF9NUFVfV0FUQ0hET0dfQkFTRSArIDB4OCkKKworI2RlZmluZSBNT0RfQ09ORl9DVFJMXzAgMHhmZmZlMTA4MAorI2RlZmluZSBNT0RfQ09ORl9DVFJMXzEgMHhmZmZlMTExMAorCisjZGVmaW5lIEZVTkNfTVVYX0NUUkxfMCAweGZmZmUxMDAwCisjZGVmaW5lIEZVTkNfTVVYX0NUUkxfMSAweGZmZmUxMDA0CisjZGVmaW5lIEZVTkNfTVVYX0NUUkxfMiAweGZmZmUxMDA4CisjZGVmaW5lIENPTVBfTU9ERV9DVFJMXzAgMHhmZmZlMTAwYworI2RlZmluZSBGVU5DX01VWF9DVFJMXzMgMHhmZmZlMTAxMAorI2RlZmluZSBGVU5DX01VWF9DVFJMXzQgMHhmZmZlMTAxNAorI2RlZmluZSBGVU5DX01VWF9DVFJMXzUgMHhmZmZlMTAxOAorI2RlZmluZSBGVU5DX01VWF9DVFJMXzYgMHhmZmZlMTAxQworI2RlZmluZSBGVU5DX01VWF9DVFJMXzcgMHhmZmZlMTAyMAorI2RlZmluZSBGVU5DX01VWF9DVFJMXzggMHhmZmZlMTAyNAorI2RlZmluZSBGVU5DX01VWF9DVFJMXzkgMHhmZmZlMTAyOAorI2RlZmluZSBGVU5DX01VWF9DVFJMX0EgMHhmZmZlMTAyQworI2RlZmluZSBGVU5DX01VWF9DVFJMX0IgMHhmZmZlMTAzMAorI2RlZmluZSBGVU5DX01VWF9DVFJMX0MgMHhmZmZlMTAzNAorI2RlZmluZSBGVU5DX01VWF9DVFJMX0QgMHhmZmZlMTAzOAorI2RlZmluZSBQVUxMX0RXTl9DVFJMXzAgMHhmZmZlMTA0MAorI2RlZmluZSBQVUxMX0RXTl9DVFJMXzEgMHhmZmZlMTA0NAorI2RlZmluZSBQVUxMX0RXTl9DVFJMXzIgMHhmZmZlMTA0OAorI2RlZmluZSBQVUxMX0RXTl9DVFJMXzMgMHhmZmZlMTA0YworI2RlZmluZSBQVUxMX0RXTl9DVFJMXzQgMHhmZmZlMTBhYworCisjZGVmaW5lIEZVTkNfTVVYX0NUUkxfRSAweGZmZmUxMDkwCisjZGVmaW5lIEZVTkNfTVVYX0NUUkxfRiAweGZmZmUxMDk0CisjZGVmaW5lIEZVTkNfTVVYX0NUUkxfMTAgMHhmZmZlMTA5OAorI2RlZmluZSBGVU5DX01VWF9DVFJMXzExIDB4ZmZmZTEwOWMKKyNkZWZpbmUgRlVOQ19NVVhfQ1RSTF8xMiAweGZmZmUxMGEwCisjZGVmaW5lIFBVX1BEX1NFTF8wIDB4ZmZmZTEwYjQKKyNkZWZpbmUgUFVfUERfU0VMXzEgMHhmZmZlMTBiOAorI2RlZmluZSBQVV9QRF9TRUxfMiAweGZmZmUxMGJjCisjZGVmaW5lIFBVX1BEX1NFTF8zIDB4ZmZmZTEwYzAKKyNkZWZpbmUgUFVfUERfU0VMXzQgMHhmZmZlMTBjNAorCisjZGVmaW5lIE9NQVBfVElNRVIzMktfQkFTRSAweEZGRkJDNDAwCisKKyNkZWZpbmUgVElQQl9QVUJMSUNfQ05UTF9CQVNFIDB4ZmZmZWQzMDAKKyNkZWZpbmUgTVBVX1BVQkxJQ19USVBCX0NOVEwgKFRJUEJfUFVCTElDX0NOVExfQkFTRSArIDB4OCkKKyNkZWZpbmUgVElQQl9QUklWQVRFX0NOVExfQkFTRSAweGZmZmVjYTAwCisjZGVmaW5lIE1QVV9QUklWQVRFX1RJUEJfQ05UTCAoVElQQl9QUklWQVRFX0NOVExfQkFTRSArIDB4OCkKKworI2RlZmluZSBNUFVJX0JBU0UgKDB4ZmZmZWM5MDApCisjZGVmaW5lIE1QVUlfQ1RSTCAoTVBVSV9CQVNFICsgMHgwKQorI2RlZmluZSBNUFVJX0RFQlVHX0FERFIgKE1QVUlfQkFTRSArIDB4NCkKKyNkZWZpbmUgTVBVSV9ERUJVR19EQVRBIChNUFVJX0JBU0UgKyAweDgpCisjZGVmaW5lIE1QVUlfREVCVUdfRkxBRyAoTVBVSV9CQVNFICsgMHhjKQorI2RlZmluZSBNUFVJX1NUQVRVU19SRUcgKE1QVUlfQkFTRSArIDB4MTApCisjZGVmaW5lIE1QVUlfRFNQX1NUQVRVUyAoTVBVSV9CQVNFICsgMHgxNCkKKyNkZWZpbmUgTVBVSV9EU1BfQk9PVF9DT05GSUcgKE1QVUlfQkFTRSArIDB4MTgpCisjZGVmaW5lIE1QVUlfRFNQX0FQSV9DT05GSUcgKE1QVUlfQkFTRSArIDB4MWMpCisKKyNkZWZpbmUgT01BUF9MUEcxX0JBU0UgMHhmZmZiZDAwMAorI2RlZmluZSBPTUFQX0xQRzJfQkFTRSAweGZmZmJkODAwCisjZGVmaW5lIE9NQVBfTFBHMV9MQ1IgKE9NQVBfTFBHMV9CQVNFICsgMHgwMCkKKyNkZWZpbmUgT01BUF9MUEcxX1BNUiAoT01BUF9MUEcxX0JBU0UgKyAweDA0KQorI2RlZmluZSBPTUFQX0xQRzJfTENSIChPTUFQX0xQRzJfQkFTRSArIDB4MDApCisjZGVmaW5lIE9NQVBfTFBHMl9QTVIgKE9NQVBfTFBHMl9CQVNFICsgMHgwNCkKKworI2RlZmluZSBPTUFQX1BXTF9CQVNFIDB4ZmZmYjU4MDAKKyNkZWZpbmUgT01BUF9QV0xfRU5BQkxFIChPTUFQX1BXTF9CQVNFICsgMHgwMCkKKyNkZWZpbmUgT01BUF9QV0xfQ0xLX0VOQUJMRSAoT01BUF9QV0xfQkFTRSArIDB4MDQpCisKKyNpbmNsdWRlICJvbWFwNzMwLmgiCisjaW5jbHVkZSAib21hcDE1MTAuaCIKKyNpbmNsdWRlICJvbWFwMjR4eC5oIgorI2luY2x1ZGUgIm9tYXAxNnh4LmgiCisKKyNpZm5kZWYgX19BU1NFTUJMRVJfXworCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXJjaC9pby5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmFjM2Q0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvaW8uaApAQCAtMCwwICsxLDU0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQVNNX0FSTV9BUkNIX0lPX0gKKyNkZWZpbmUgX19BU01fQVJNX0FSQ0hfSU9fSAorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisKKyNkZWZpbmUgSU9fU1BBQ0VfTElNSVQgMHhmZmZmZmZmZgorCisjZGVmaW5lIF9faW8oYSkgKCh2b2lkIF9faW9tZW0gKikoUENJT19CQVNFICsgKGEpKSkKKyNkZWZpbmUgX19tZW1fcGNpKGEpIChhKQorCisjZGVmaW5lIFBDSU9fQkFTRSAwCisKKyNpZm5kZWYgX19BU1NFTUJMRVJfXworCisjZGVmaW5lIG9tYXBfcmVhZGIoYSkgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKUlPX0FERFJFU1MoYSkpCisjZGVmaW5lIG9tYXBfcmVhZHcoYSkgKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilJT19BRERSRVNTKGEpKQorI2RlZmluZSBvbWFwX3JlYWRsKGEpICgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKUlPX0FERFJFU1MoYSkpCisKKyNkZWZpbmUgb21hcF93cml0ZWIodixhKSAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopSU9fQUREUkVTUyhhKSA9ICh2KSkKKyNkZWZpbmUgb21hcF93cml0ZXcodixhKSAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKUlPX0FERFJFU1MoYSkgPSAodikpCisjZGVmaW5lIG9tYXBfd3JpdGVsKHYsYSkgKCoodm9sYXRpbGUgdW5zaWduZWQgaW50ICopSU9fQUREUkVTUyhhKSA9ICh2KSkKKwordHlwZWRlZiBzdHJ1Y3QgeyB2b2xhdGlsZSB1MTYgb2Zmc2V0WzI1Nl07IH0gX19yZWdiYXNlMTY7CisjZGVmaW5lIF9fUkVHVjE2KHZhZGRyKSAoKF9fcmVnYmFzZTE2ICopKCh2YWRkcikmfjB4ZmYpKSAgIC0+b2Zmc2V0WygodmFkZHIpJjB4ZmYpPj4xXQorI2RlZmluZSBfX1JFRzE2KHBhZGRyKSBfX1JFR1YxNihpb19wMnYocGFkZHIpKQorCit0eXBlZGVmIHN0cnVjdCB7IHZvbGF0aWxlIHU4IG9mZnNldFs0MDk2XTsgfSBfX3JlZ2Jhc2U4OworI2RlZmluZSBfX1JFR1Y4KHZhZGRyKSAoKF9fcmVnYmFzZTggKikoKHZhZGRyKSZ+NDA5NSkpICAgLT5vZmZzZXRbKCh2YWRkcikmNDA5NSk+PjBdCisjZGVmaW5lIF9fUkVHOChwYWRkcikgX19SRUdWOChpb19wMnYocGFkZHIpKQorCit0eXBlZGVmIHN0cnVjdCB7IHZvbGF0aWxlIHUzMiBvZmZzZXRbNDA5Nl07IH0gX19yZWdiYXNlMzI7CisjZGVmaW5lIF9fUkVHVjMyKHZhZGRyKSAoKF9fcmVnYmFzZTMyICopKCh2YWRkcikmfjQwOTUpKSAgIC0+b2Zmc2V0WygodmFkZHIpJjQwOTUpPj4yXQorI2RlZmluZSBfX1JFRzMyKHBhZGRyKSBfX1JFR1YzMihpb19wMnYocGFkZHIpKQorCisjZWxzZQorCisjZGVmaW5lIF9fUkVHOChwYWRkcikgaW9fcDJ2KHBhZGRyKQorI2RlZmluZSBfX1JFRzE2KHBhZGRyKSBpb19wMnYocGFkZHIpCisjZGVmaW5lIF9fUkVHMzIocGFkZHIpIGlvX3AydihwYWRkcikKKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvaXJxcy5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvaXJxcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlOTQ0ODcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXJjaC9pcnFzLmgKQEAgLTAsMCArMSwyNDIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19BU01fQVJDSF9PTUFQMTVYWF9JUlFTX0gKKyNkZWZpbmUgX19BU01fQVJDSF9PTUFQMTVYWF9JUlFTX0gKKworI2RlZmluZSBJTlRfQ0FNRVJBIDEKKyNkZWZpbmUgSU5UX0ZJUSAzCisjZGVmaW5lIElOVF9SVERYIDYKKyNkZWZpbmUgSU5UX0RTUF9NTVVfQUJPUlQgNworI2RlZmluZSBJTlRfSE9TVCA4CisjZGVmaW5lIElOVF9BQk9SVCA5CisjZGVmaW5lIElOVF9EU1BfTUFJTEJPWDEgMTAKKyNkZWZpbmUgSU5UX0RTUF9NQUlMQk9YMiAxMQorI2RlZmluZSBJTlRfQlJJREdFX1BSSVYgMTMKKyNkZWZpbmUgSU5UX0dQSU9fQkFOSzEgMTQKKyNkZWZpbmUgSU5UX1VBUlQzIDE1CisjZGVmaW5lIElOVF9USU1FUjMgMTYKKyNkZWZpbmUgSU5UX0RNQV9DSDBfNiAxOQorI2RlZmluZSBJTlRfRE1BX0NIMV83IDIwCisjZGVmaW5lIElOVF9ETUFfQ0gyXzggMjEKKyNkZWZpbmUgSU5UX0RNQV9DSDMgMjIKKyNkZWZpbmUgSU5UX0RNQV9DSDQgMjMKKyNkZWZpbmUgSU5UX0RNQV9DSDUgMjQKKyNkZWZpbmUgSU5UX0RNQV9MQ0QgMjUKKyNkZWZpbmUgSU5UX1RJTUVSMSAyNgorI2RlZmluZSBJTlRfV0RfVElNRVIgMjcKKyNkZWZpbmUgSU5UX0JSSURHRV9QVUIgMjgKKyNkZWZpbmUgSU5UX1RJTUVSMiAzMAorI2RlZmluZSBJTlRfTENEX0NUUkwgMzEKKworI2RlZmluZSBJTlRfMTUxMF9JSDJfSVJRIDAKKyNkZWZpbmUgSU5UXzE1MTBfUkVTMiAyCisjZGVmaW5lIElOVF8xNTEwX1NQSV9UWCA0CisjZGVmaW5lIElOVF8xNTEwX1NQSV9SWCA1CisjZGVmaW5lIElOVF8xNTEwX1JFUzEyIDEyCisjZGVmaW5lIElOVF8xNTEwX0xCX01NVSAxNworI2RlZmluZSBJTlRfMTUxMF9SRVMxOCAxOAorI2RlZmluZSBJTlRfMTUxMF9MT0NBTF9CVVMgMjkKKworI2RlZmluZSBJTlRfMTYxMF9JSDJfSVJRIDAKKyNkZWZpbmUgSU5UXzE2MTBfSUgyX0ZJUSAyCisjZGVmaW5lIElOVF8xNjEwX01jQlNQMl9UWCA0CisjZGVmaW5lIElOVF8xNjEwX01jQlNQMl9SWCA1CisjZGVmaW5lIElOVF8xNjEwX0xDRF9MSU5FIDEyCisjZGVmaW5lIElOVF8xNjEwX0dQVElNRVIxIDE3CisjZGVmaW5lIElOVF8xNjEwX0dQVElNRVIyIDE4CisjZGVmaW5lIElOVF8xNjEwX1NTUl9GSUZPXzAgMjkKKworI2RlZmluZSBJTlRfNzMwX0lIMl9GSVEgMAorI2RlZmluZSBJTlRfNzMwX0lIMl9JUlEgMQorI2RlZmluZSBJTlRfNzMwX1VTQl9OT05fSVNPIDIKKyNkZWZpbmUgSU5UXzczMF9VU0JfSVNPIDMKKyNkZWZpbmUgSU5UXzczMF9JQ1IgNAorI2RlZmluZSBJTlRfNzMwX0VBQyA1CisjZGVmaW5lIElOVF83MzBfR1BJT19CQU5LMSA2CisjZGVmaW5lIElOVF83MzBfR1BJT19CQU5LMiA3CisjZGVmaW5lIElOVF83MzBfR1BJT19CQU5LMyA4CisjZGVmaW5lIElOVF83MzBfTWNCU1AyVFggMTAKKyNkZWZpbmUgSU5UXzczMF9NY0JTUDJSWCAxMQorI2RlZmluZSBJTlRfNzMwX01jQlNQMlJYX09WRiAxMgorI2RlZmluZSBJTlRfNzMwX0xDRF9MSU5FIDE0CisjZGVmaW5lIElOVF83MzBfR1NNX1BST1RFQ1QgMTUKKyNkZWZpbmUgSU5UXzczMF9USU1FUjMgMTYKKyNkZWZpbmUgSU5UXzczMF9HUElPX0JBTks1IDE3CisjZGVmaW5lIElOVF83MzBfR1BJT19CQU5LNiAxOAorI2RlZmluZSBJTlRfNzMwX1NQR0lPX1dSIDI5CisKKyNkZWZpbmUgSUgyX0JBU0UgMzIKKworI2RlZmluZSBJTlRfS0VZQk9BUkQgKDEgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UX3VXaXJlVFggKDIgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UX3VXaXJlUlggKDMgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UX0kyQyAoNCArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfTVBVSU8gKDUgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UX1VTQl9ISENfMSAoNiArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfTWNCU1AzVFggKDEwICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF9NY0JTUDNSWCAoMTEgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UX01jQlNQMVRYICgxMiArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfTWNCU1AxUlggKDEzICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF9VQVJUMiAoMTQgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UX1VBUlQxICgxNSArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfQlRfTUNTSTFUWCAoMTYgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UX0JUX01DU0kxUlggKDE3ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF9VU0JfVzJGQyAoMjAgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzFXSVJFICgyMSArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfT1NfVElNRVIgKDIyICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF9NTUMgKDIzICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF9HQVVHRV8zMksgKDI0ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF9SVENfVElNRVIgKDI1ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF9SVENfQUxBUk0gKDI2ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF9NRU1fU1RJQ0sgKDI3ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF9EU1BfTU1VICgyOCArIElIMl9CQVNFKQorCisjZGVmaW5lIElOVF8xNTEwX0NPTV9TUElfUk8gKDMxICsgSUgyX0JBU0UpCisKKyNkZWZpbmUgSU5UXzE2MTBfRkFDICgwICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF8xNjEwX1VTQl9ISENfMiAoNyArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfMTYxMF9VU0JfT1RHICg4ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF8xNjEwX1NvU1NJICg5ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF8xNjEwX1NvU1NJX01BVENIICgxOSArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfMTYxMF9NY0JTUDJSWF9PRiAoMzEgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzE2MTBfU1RJICgzMiArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfMTYxMF9TVElfV0FLRVVQICgzMyArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfMTYxMF9HUFRJTUVSMyAoMzQgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzE2MTBfR1BUSU1FUjQgKDM1ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF8xNjEwX0dQVElNRVI1ICgzNiArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfMTYxMF9HUFRJTUVSNiAoMzcgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzE2MTBfR1BUSU1FUjcgKDM4ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF8xNjEwX0dQVElNRVI4ICgzOSArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfMTYxMF9HUElPX0JBTksyICg0MCArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfMTYxMF9HUElPX0JBTkszICg0MSArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfMTYxMF9NTUMyICg0MiArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfMTYxMF9DRiAoNDMgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzE2MTBfV0FLRV9VUF9SRVEgKDQ2ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF8xNjEwX0dQSU9fQkFOSzQgKDQ4ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF8xNjEwX1NQSSAoNDkgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzE2MTBfRE1BX0NINiAoNTMgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzE2MTBfRE1BX0NINyAoNTQgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzE2MTBfRE1BX0NIOCAoNTUgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzE2MTBfRE1BX0NIOSAoNTYgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzE2MTBfRE1BX0NIMTAgKDU3ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF8xNjEwX0RNQV9DSDExICg1OCArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfMTYxMF9ETUFfQ0gxMiAoNTkgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzE2MTBfRE1BX0NIMTMgKDYwICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF8xNjEwX0RNQV9DSDE0ICg2MSArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfMTYxMF9ETUFfQ0gxNSAoNjIgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzE2MTBfTkFORCAoNjMgKyBJSDJfQkFTRSkKKworI2RlZmluZSBJTlRfNzMwX0hXX0VSUk9SUyAoMCArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX05GSVFfUFdSX0ZBSUwgKDEgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzczMF9DRkNEICgyICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF83MzBfQ0ZJUkVRICgzICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF83MzBfSTJDICg0ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF83MzBfUENDICg1ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF83MzBfTVBVX0VYVF9OSVJRICg2ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF83MzBfU1BJXzEwMEtfMSAoNyArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX1NZUkVOX1NQSSAoOCArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX1ZMWU5RICg5ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF83MzBfR1BJT19CQU5LNCAoMTAgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzczMF9NY0JTUDFUWCAoMTEgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzczMF9NY0JTUDFSWCAoMTIgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzczMF9NY0JTUDFSWF9PRiAoMTMgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzczMF9VQVJUX01PREVNX0lSREFfMiAoMTQgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzczMF9VQVJUX01PREVNXzEgKDE1ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF83MzBfTUNTSSAoMTYgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzczMF91V2lyZVRYICgxNyArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX3VXaXJlUlggKDE4ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF83MzBfU01DX0NEICgxOSArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX1NNQ19JUkVRICgyMCArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX0hEUV8xV0lSRSAoMjEgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzczMF9USU1FUjMySyAoMjIgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzczMF9NTUNfU0RJTyAoMjMgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzczMF9VUExEICgyNCArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX1VTQl9ISENfMSAoMjcgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzczMF9VU0JfSEhDXzIgKDI4ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF83MzBfVVNCX0dFTkkgKDI5ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF83MzBfVVNCX09URyAoMzAgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzczMF9DQU1FUkFfSUYgKDMxICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF83MzBfUk5HICgzMiArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX0RVQUxfTU9ERV9USU1FUiAoMzMgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzczMF9EQkJfUkZfRU4gKDM0ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF83MzBfTVBVSU9fS0VZUEFEICgzNSArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX1NIQTFfTUQ1ICgzNiArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX1NQSV8xMDBLXzIgKDM3ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF83MzBfUk5HX0lETEUgKDM4ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF83MzBfTVBVSU8gKDM5ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF83MzBfTExQQ19MQ0RfQ1RSTF9DQU5fQkVfT0ZGICg0MCArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX0xMUENfT0VfRkFMTElORyAoNDEgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzczMF9MTFBDX09FX1JJU0lORyAoNDIgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzczMF9MTFBDX1ZTWU5DICg0MyArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX1dBS0VfVVBfUkVRICg0NiArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX0RNQV9DSDYgKDUzICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF83MzBfRE1BX0NINyAoNTQgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzczMF9ETUFfQ0g4ICg1NSArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX0RNQV9DSDkgKDU2ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF83MzBfRE1BX0NIMTAgKDU3ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF83MzBfRE1BX0NIMTEgKDU4ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF83MzBfRE1BX0NIMTIgKDU5ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF83MzBfRE1BX0NIMTMgKDYwICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF83MzBfRE1BX0NIMTQgKDYxICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF83MzBfRE1BX0NIMTUgKDYyICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF83MzBfTkFORCAoNjMgKyBJSDJfQkFTRSkKKworI2RlZmluZSBJTlRfMjRYWF9TWVNfTklSUSA3CisjZGVmaW5lIElOVF8yNFhYX1NETUFfSVJRMCAxMgorI2RlZmluZSBJTlRfMjRYWF9TRE1BX0lSUTEgMTMKKyNkZWZpbmUgSU5UXzI0WFhfU0RNQV9JUlEyIDE0CisjZGVmaW5lIElOVF8yNFhYX1NETUFfSVJRMyAxNQorI2RlZmluZSBJTlRfMjRYWF9DQU1fSVJRIDI0CisjZGVmaW5lIElOVF8yNFhYX0RTU19JUlEgMjUKKyNkZWZpbmUgSU5UXzI0WFhfR1BJT19CQU5LMSAyOQorI2RlZmluZSBJTlRfMjRYWF9HUElPX0JBTksyIDMwCisjZGVmaW5lIElOVF8yNFhYX0dQSU9fQkFOSzMgMzEKKyNkZWZpbmUgSU5UXzI0WFhfR1BJT19CQU5LNCAzMgorI2RlZmluZSBJTlRfMjRYWF9HUFRJTUVSMSAzNworI2RlZmluZSBJTlRfMjRYWF9HUFRJTUVSMiAzOAorI2RlZmluZSBJTlRfMjRYWF9HUFRJTUVSMyAzOQorI2RlZmluZSBJTlRfMjRYWF9HUFRJTUVSNCA0MAorI2RlZmluZSBJTlRfMjRYWF9HUFRJTUVSNSA0MQorI2RlZmluZSBJTlRfMjRYWF9HUFRJTUVSNiA0MgorI2RlZmluZSBJTlRfMjRYWF9HUFRJTUVSNyA0MworI2RlZmluZSBJTlRfMjRYWF9HUFRJTUVSOCA0NAorI2RlZmluZSBJTlRfMjRYWF9HUFRJTUVSOSA0NQorI2RlZmluZSBJTlRfMjRYWF9HUFRJTUVSMTAgNDYKKyNkZWZpbmUgSU5UXzI0WFhfR1BUSU1FUjExIDQ3CisjZGVmaW5lIElOVF8yNFhYX0dQVElNRVIxMiA0OAorI2RlZmluZSBJTlRfMjRYWF9NQ0JTUDFfSVJRX1RYIDU5CisjZGVmaW5lIElOVF8yNFhYX01DQlNQMV9JUlFfUlggNjAKKyNkZWZpbmUgSU5UXzI0WFhfTUNCU1AyX0lSUV9UWCA2MgorI2RlZmluZSBJTlRfMjRYWF9NQ0JTUDJfSVJRX1JYIDYzCisjZGVmaW5lIElOVF8yNFhYX1VBUlQxX0lSUSA3MgorI2RlZmluZSBJTlRfMjRYWF9VQVJUMl9JUlEgNzMKKyNkZWZpbmUgSU5UXzI0WFhfVUFSVDNfSVJRIDc0CisjZGVmaW5lIElOVF8yNFhYX01NQ19JUlEgODMKKworI2RlZmluZSBPTUFQX01BWF9HUElPX0xJTkVTIDE5MgorI2RlZmluZSBJSF9HUElPX0JBU0UgKDEyOCArIElIMl9CQVNFKQorI2RlZmluZSBJSF9NUFVJT19CQVNFIChPTUFQX01BWF9HUElPX0xJTkVTICsgSUhfR1BJT19CQVNFKQorI2RlZmluZSBJSF9CT0FSRF9CQVNFICgxNiArIElIX01QVUlPX0JBU0UpCisKKyNkZWZpbmUgT01BUF9JUlFfQklUKGlycSkgKDEgPDwgKChpcnEpICUgMzIpKQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjZW5kaWYKKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorCisjaWZuZGVmIE5SX0lSUVMKKyNkZWZpbmUgTlJfSVJRUyBJSF9CT0FSRF9CQVNFCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXJjaC9tY2JzcC5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvbWNic3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWU1ZTNiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvbWNic3AuaApAQCAtMCwwICsxLDE4NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FTTV9BUkNIX09NQVBfTUNCU1BfSAorI2RlZmluZSBfX0FTTV9BUkNIX09NQVBfTUNCU1BfSAorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisKKyNkZWZpbmUgT01BUDczMF9NQ0JTUDFfQkFTRSAweGZmZmIxMDAwCisjZGVmaW5lIE9NQVA3MzBfTUNCU1AyX0JBU0UgMHhmZmZiMTgwMAorCisjZGVmaW5lIE9NQVAxNTEwX01DQlNQMV9CQVNFIDB4ZTEwMTE4MDAKKyNkZWZpbmUgT01BUDE1MTBfTUNCU1AyX0JBU0UgMHhmZmZiMTAwMAorI2RlZmluZSBPTUFQMTUxMF9NQ0JTUDNfQkFTRSAweGUxMDE3MDAwCisKKyNkZWZpbmUgT01BUDE2MTBfTUNCU1AxX0JBU0UgMHhlMTAxMTgwMAorI2RlZmluZSBPTUFQMTYxMF9NQ0JTUDJfQkFTRSAweGZmZmIxMDAwCisjZGVmaW5lIE9NQVAxNjEwX01DQlNQM19CQVNFIDB4ZTEwMTcwMDAKKworI2RlZmluZSBPTUFQMjRYWF9NQ0JTUDFfQkFTRSAweDQ4MDc0MDAwCisjZGVmaW5lIE9NQVAyNFhYX01DQlNQMl9CQVNFIDB4NDgwNzYwMDAKKworI2RlZmluZSBPTUFQX01DQlNQX1JFQUQoYmFzZSwgcmVnKSBfX3Jhd19yZWFkdygoYmFzZSkgKyBPTUFQX01DQlNQX1JFR18jI3JlZykKKyNkZWZpbmUgT01BUF9NQ0JTUF9XUklURShiYXNlLCByZWcsIHZhbCkgX19yYXdfd3JpdGV3KCh2YWwpLCAoYmFzZSkgKyBPTUFQX01DQlNQX1JFR18jI3JlZykKKworI2RlZmluZSBSUlNUIDB4MDAwMQorI2RlZmluZSBSUkRZIDB4MDAwMgorI2RlZmluZSBSRlVMTCAweDAwMDQKKyNkZWZpbmUgUlNZTkNfRVJSIDB4MDAwOAorI2RlZmluZSBSSU5UTSh2YWx1ZSkgKCh2YWx1ZSk8PDQpICAKKyNkZWZpbmUgQUJJUyAweDAwNDAKKyNkZWZpbmUgRFhFTkEgMHgwMDgwCisjZGVmaW5lIENMS1NUUCh2YWx1ZSkgKCh2YWx1ZSk8PDExKSAgCisjZGVmaW5lIFJKVVNUKHZhbHVlKSAoKHZhbHVlKTw8MTMpICAKKyNkZWZpbmUgRExCIDB4ODAwMAorCisjZGVmaW5lIFhSU1QgMHgwMDAxCisjZGVmaW5lIFhSRFkgMHgwMDAyCisjZGVmaW5lIFhFTVBUWSAweDAwMDQKKyNkZWZpbmUgWFNZTkNfRVJSIDB4MDAwOAorI2RlZmluZSBYSU5UTSh2YWx1ZSkgKCh2YWx1ZSk8PDQpICAKKyNkZWZpbmUgR1JTVCAweDAwNDAKKyNkZWZpbmUgRlJTVCAweDAwODAKKyNkZWZpbmUgU09GVCAweDAxMDAKKyNkZWZpbmUgRlJFRSAweDAyMDAKKworI2RlZmluZSBDTEtSUCAweDAwMDEKKyNkZWZpbmUgQ0xLWFAgMHgwMDAyCisjZGVmaW5lIEZTUlAgMHgwMDA0CisjZGVmaW5lIEZTWFAgMHgwMDA4CisjZGVmaW5lIERSX1NUQVQgMHgwMDEwCisjZGVmaW5lIERYX1NUQVQgMHgwMDIwCisjZGVmaW5lIENMS1NfU1RBVCAweDAwNDAKKyNkZWZpbmUgU0NMS01FIDB4MDA4MAorI2RlZmluZSBDTEtSTSAweDAxMDAKKyNkZWZpbmUgQ0xLWE0gMHgwMjAwCisjZGVmaW5lIEZTUk0gMHgwNDAwCisjZGVmaW5lIEZTWE0gMHgwODAwCisjZGVmaW5lIFJJT0VOIDB4MTAwMAorI2RlZmluZSBYSU9FTiAweDIwMDAKKyNkZWZpbmUgSURMRV9FTiAweDQwMDAKKworI2RlZmluZSBSV0RMRU4xKHZhbHVlKSAoKHZhbHVlKTw8NSkgIAorI2RlZmluZSBSRlJMRU4xKHZhbHVlKSAoKHZhbHVlKTw8OCkgIAorCisjZGVmaW5lIFhXRExFTjEodmFsdWUpICgodmFsdWUpPDw1KSAgCisjZGVmaW5lIFhGUkxFTjEodmFsdWUpICgodmFsdWUpPDw4KSAgCisKKyNkZWZpbmUgUkRBVERMWSh2YWx1ZSkgKHZhbHVlKSAgCisjZGVmaW5lIFJGSUcgMHgwMDA0CisjZGVmaW5lIFJDT01QQU5EKHZhbHVlKSAoKHZhbHVlKTw8MykgIAorI2RlZmluZSBSV0RMRU4yKHZhbHVlKSAoKHZhbHVlKTw8NSkgIAorI2RlZmluZSBSRlJMRU4yKHZhbHVlKSAoKHZhbHVlKTw8OCkgIAorI2RlZmluZSBSUEhBU0UgMHg4MDAwCisKKyNkZWZpbmUgWERBVERMWSh2YWx1ZSkgKHZhbHVlKSAgCisjZGVmaW5lIFhGSUcgMHgwMDA0CisjZGVmaW5lIFhDT01QQU5EKHZhbHVlKSAoKHZhbHVlKTw8MykgIAorI2RlZmluZSBYV0RMRU4yKHZhbHVlKSAoKHZhbHVlKTw8NSkgIAorI2RlZmluZSBYRlJMRU4yKHZhbHVlKSAoKHZhbHVlKTw8OCkgIAorI2RlZmluZSBYUEhBU0UgMHg4MDAwCisKKyNkZWZpbmUgQ0xLR0RWKHZhbHVlKSAodmFsdWUpICAKKyNkZWZpbmUgRldJRCh2YWx1ZSkgKCh2YWx1ZSk8PDgpICAKKworI2RlZmluZSBGUEVSKHZhbHVlKSAodmFsdWUpICAKKyNkZWZpbmUgRlNHTSAweDEwMDAKKyNkZWZpbmUgQ0xLU00gMHgyMDAwCisjZGVmaW5lIENMS1NQIDB4NDAwMAorI2RlZmluZSBHU1lOQyAweDgwMDAKKworI2RlZmluZSBSTUNNIDB4MDAwMQorI2RlZmluZSBSQ0JMSyh2YWx1ZSkgKCh2YWx1ZSk8PDIpICAKKyNkZWZpbmUgUlBBQkxLKHZhbHVlKSAoKHZhbHVlKTw8NSkgIAorI2RlZmluZSBSUEJCTEsodmFsdWUpICgodmFsdWUpPDw3KSAgCisKKyNkZWZpbmUgWE1DTSh2YWx1ZSkgKHZhbHVlKSAgCisjZGVmaW5lIFhDQkxLKHZhbHVlKSAoKHZhbHVlKTw8MikgIAorI2RlZmluZSBYUEFCTEsodmFsdWUpICgodmFsdWUpPDw1KSAgCisjZGVmaW5lIFhQQkJMSyh2YWx1ZSkgKCh2YWx1ZSk8PDcpICAKKworc3RydWN0IG9tYXBfbWNic3BfcmVnX2NmZyB7CisgdTE2IHNwY3IyOworIHUxNiBzcGNyMTsKKyB1MTYgcmNyMjsKKyB1MTYgcmNyMTsKKyB1MTYgeGNyMjsKKyB1MTYgeGNyMTsKKyB1MTYgc3JncjI7CisgdTE2IHNyZ3IxOworIHUxNiBtY3IyOworIHUxNiBtY3IxOworIHUxNiBwY3IwOworIHUxNiByY2VyYzsKKyB1MTYgcmNlcmQ7CisgdTE2IHhjZXJjOworIHUxNiB4Y2VyZDsKKyB1MTYgcmNlcmU7CisgdTE2IHJjZXJmOworIHUxNiB4Y2VyZTsKKyB1MTYgeGNlcmY7CisgdTE2IHJjZXJnOworIHUxNiByY2VyaDsKKyB1MTYgeGNlcmc7CisgdTE2IHhjZXJoOworfTsKKwordHlwZWRlZiBlbnVtIHsKKyBPTUFQX01DQlNQMSA9IDAsCisgT01BUF9NQ0JTUDIsCisgT01BUF9NQ0JTUDMsCit9IG9tYXBfbWNic3BfaWQ7CisKK3R5cGVkZWYgaW50IF9fYml0d2lzZSBvbWFwX21jYnNwX2lvX3R5cGVfdDsKKyNkZWZpbmUgT01BUF9NQ0JTUF9JUlFfSU8gKChfX2ZvcmNlIG9tYXBfbWNic3BfaW9fdHlwZV90KSAxKQorI2RlZmluZSBPTUFQX01DQlNQX1BPTExfSU8gKChfX2ZvcmNlIG9tYXBfbWNic3BfaW9fdHlwZV90KSAyKQorCit0eXBlZGVmIGVudW0geworIE9NQVBfTUNCU1BfV09SRF84ID0gMCwKKyBPTUFQX01DQlNQX1dPUkRfMTIsCisgT01BUF9NQ0JTUF9XT1JEXzE2LAorIE9NQVBfTUNCU1BfV09SRF8yMCwKKyBPTUFQX01DQlNQX1dPUkRfMjQsCisgT01BUF9NQ0JTUF9XT1JEXzMyLAorfSBvbWFwX21jYnNwX3dvcmRfbGVuZ3RoOworCit0eXBlZGVmIGVudW0geworIE9NQVBfTUNCU1BfQ0xLX1JJU0lORyA9IDAsCisgT01BUF9NQ0JTUF9DTEtfRkFMTElORywKK30gb21hcF9tY2JzcF9jbGtfcG9sYXJpdHk7CisKK3R5cGVkZWYgZW51bSB7CisgT01BUF9NQ0JTUF9GU19BQ1RJVkVfSElHSCA9IDAsCisgT01BUF9NQ0JTUF9GU19BQ1RJVkVfTE9XLAorfSBvbWFwX21jYnNwX2ZzX3BvbGFyaXR5OworCit0eXBlZGVmIGVudW0geworIE9NQVBfTUNCU1BfQ0xLX1NUUF9NT0RFX05PX0RFTEFZID0gMCwKKyBPTUFQX01DQlNQX0NMS19TVFBfTU9ERV9ERUxBWSwKK30gb21hcF9tY2JzcF9jbGtfc3RwX21vZGU7CisKK3R5cGVkZWYgZW51bSB7CisgT01BUF9NQ0JTUF9TUElfTUFTVEVSID0gMCwKKyBPTUFQX01DQlNQX1NQSV9TTEFWRSwKK30gb21hcF9tY2JzcF9zcGlfbW9kZTsKKworc3RydWN0IG9tYXBfbWNic3Bfc3BpX2NmZyB7Cisgb21hcF9tY2JzcF9zcGlfbW9kZSBzcGlfbW9kZTsKKyBvbWFwX21jYnNwX2Nsa19wb2xhcml0eSByeF9jbG9ja19wb2xhcml0eTsKKyBvbWFwX21jYnNwX2Nsa19wb2xhcml0eSB0eF9jbG9ja19wb2xhcml0eTsKKyBvbWFwX21jYnNwX2ZzX3BvbGFyaXR5IGZzeF9wb2xhcml0eTsKKyB1OCBjbGtfZGl2OworIG9tYXBfbWNic3BfY2xrX3N0cF9tb2RlIGNsa19zdHBfbW9kZTsKKyBvbWFwX21jYnNwX3dvcmRfbGVuZ3RoIHdvcmRfbGVuZ3RoOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXJjaC9tZW1vcnkuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL21lbW9yeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiMDY0YjgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXJjaC9tZW1vcnkuaApAQCAtMCwwICsxLDE5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQVNNX0FSQ0hfTUVNT1JZX0gKKyNkZWZpbmUgX19BU01fQVJDSF9NRU1PUllfSAorCisjZGVmaW5lIF9fdmlydF90b19idXMoeCkgX192aXJ0X3RvX3BoeXMoeCkKKyNkZWZpbmUgX19idXNfdG9fdmlydCh4KSBfX3BoeXNfdG9fdmlydCh4KQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvbXRkLXhpcC5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvbXRkLXhpcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliNjBhZWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXJjaC9tdGQteGlwLmgKQEAgLTAsMCArMSwzMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FSQ0hfT01BUF9NVERfWElQX0hfXworI2RlZmluZSBfX0FSQ0hfT01BUF9NVERfWElQX0hfXworCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjZGVmaW5lIE9NQVBfTVBVX1RJTUVSX0JBU0UgKDB4ZmZmZWM1MDApCisjZGVmaW5lIE9NQVBfTVBVX1RJTUVSX09GRlNFVCAweDEwMAorCit0eXBlZGVmIHN0cnVjdCB7CisgdTMyIGNudGw7CisgdTMyIGxvYWRfdGltOworIHUzMiByZWFkX3RpbTsKK30geGlwX29tYXBfbXB1X3RpbWVyX3JlZ3NfdDsKKworI2RlZmluZSB4aXBfb21hcF9tcHVfdGltZXJfYmFzZShuKSAgKCh2b2xhdGlsZSB4aXBfb21hcF9tcHVfdGltZXJfcmVnc190KilJT19BRERSRVNTKE9NQVBfTVBVX1RJTUVSX0JBU0UgKyAgIChuKSpPTUFQX01QVV9USU1FUl9PRkZTRVQpKQorCisjZGVmaW5lIHhpcF9pcnFwZW5kaW5nKCkgICAob21hcF9yZWFkbChPTUFQX0lIMV9JVFIpICYgfm9tYXBfcmVhZGwoT01BUF9JSDFfTUlSKSkKKyNkZWZpbmUgeGlwX2N1cnJ0aW1lKCkgKH54aXBfb21hcF9tcHVfdGltZXJfcmVhZCgwKSkKKyNkZWZpbmUgeGlwX2VsYXBzZWRfc2luY2UoeCkgKHNpZ25lZCkoKH54aXBfb21hcF9tcHVfdGltZXJfcmVhZCgwKSAtICh4KSkgLyA2KQorI2RlZmluZSB4aXBfY3B1X2lkbGUoKSBhc20gdm9sYXRpbGUgKCJtY3IgcDE1LCAwLCAlMCwgYzcsIGMwLCA0IiA6OiAiciIgKDEpKQorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXJjaC9tdXguaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL211eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyZGE1NGUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXJjaC9tdXguaApAQCAtMCwwICsxLDM5MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FTTV9BUkNIX01VWF9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfTVVYX0gKKworI2RlZmluZSBQVV9QRF9TRUxfTkEgMCAgCisjZGVmaW5lIFBVTExfRFdOX0NUUkxfTkEgMCAgCisKKyNkZWZpbmUgTVVYX1JFRyhyZWcsIG1vZGVfb2Zmc2V0LCBtb2RlKSAubXV4X3JlZyA9IEZVTkNfTVVYX0NUUkxfIyNyZWcsICAgLm1hc2tfb2Zmc2V0ID0gbW9kZV9vZmZzZXQsICAgLm1hc2sgPSBtb2RlLAorCisjZGVmaW5lIFBVTExfUkVHKHJlZywgYml0LCBzdGF0dXMpIC5wdWxsX3JlZyA9IFBVTExfRFdOX0NUUkxfIyNyZWcsICAgLnB1bGxfYml0ID0gYml0LCAgIC5wdWxsX3ZhbCA9IHN0YXR1cywKKworI2RlZmluZSBQVV9QRF9SRUcocmVnLCBzdGF0dXMpIC5wdV9wZF9yZWcgPSBQVV9QRF9TRUxfIyNyZWcsICAgLnB1X3BkX3ZhbCA9IHN0YXR1cywKKworI2RlZmluZSBNVVhfUkVHXzczMChyZWcsIG1vZGVfb2Zmc2V0LCBtb2RlKSAgIC5tdXhfcmVnID0gT01BUDczMF9JT19DT05GXyMjcmVnLCAgIC5tYXNrX29mZnNldCA9IG1vZGVfb2Zmc2V0LCAgIC5tYXNrID0gbW9kZSwKKworI2RlZmluZSBQVUxMX1JFR183MzAocmVnLCBiaXQsIHN0YXR1cykgLnB1bGxfcmVnID0gT01BUDczMF9JT19DT05GXyMjcmVnLCAgIC5wdWxsX2JpdCA9IGJpdCwgICAucHVsbF92YWwgPSBzdGF0dXMsCisKKyNkZWZpbmUgTVVYX0NGRyhkZXNjLCBtdXhfcmVnLCBtb2RlX29mZnNldCwgbW9kZSwgICBwdWxsX3JlZywgcHVsbF9iaXQsIHB1bGxfc3RhdHVzLCAgIHB1X3BkX3JlZywgcHVfcGRfc3RhdHVzLCBkZWJ1Z19zdGF0dXMpICB7ICAgLm5hbWUgPSBkZXNjLCAgIC5kZWJ1ZyA9IGRlYnVnX3N0YXR1cywgICBNVVhfUkVHKG11eF9yZWcsIG1vZGVfb2Zmc2V0LCBtb2RlKSAgIFBVTExfUkVHKHB1bGxfcmVnLCBwdWxsX2JpdCwgIXB1bGxfc3RhdHVzKSAgIFBVX1BEX1JFRyhwdV9wZF9yZWcsIHB1X3BkX3N0YXR1cykgIH0sCisKKyNkZWZpbmUgTVVYX0NGR183MzAoZGVzYywgbXV4X3JlZywgbW9kZV9vZmZzZXQsIG1vZGUsICAgcHVsbF9iaXQsIHB1bGxfc3RhdHVzLCBkZWJ1Z19zdGF0dXMpIHsgICAubmFtZSA9IGRlc2MsICAgLmRlYnVnID0gZGVidWdfc3RhdHVzLCAgIE1VWF9SRUdfNzMwKG11eF9yZWcsIG1vZGVfb2Zmc2V0LCBtb2RlKSAgIFBVTExfUkVHXzczMChtdXhfcmVnLCBwdWxsX2JpdCwgcHVsbF9zdGF0dXMpICAgUFVfUERfUkVHKE5BLCAwKSAgfSwKKworI2RlZmluZSBNVVhfQ0ZHXzI0WFgoZGVzYywgcmVnX29mZnNldCwgbW9kZSwgICBwdWxsX2VuLCBwdWxsX21vZGUsIGRiZykgIHsgICAubmFtZSA9IGRlc2MsICAgLmRlYnVnID0gZGJnLCAgIC5tdXhfcmVnID0gcmVnX29mZnNldCwgICAubWFzayA9IG1vZGUsICAgLnB1bGxfdmFsID0gcHVsbF9lbiwgICAucHVfcGRfdmFsID0gcHVsbF9tb2RlLCAgfSwKKworI2RlZmluZSBQVUxMX0RJU0FCTEVEIDAKKyNkZWZpbmUgUFVMTF9FTkFCTEVEIDEKKworI2RlZmluZSBQVUxMX0RPV04gMAorI2RlZmluZSBQVUxMX1VQIDEKKworc3RydWN0IHBpbl9jb25maWcgeworIGNoYXIgKm5hbWU7CisgdW5zaWduZWQgY2hhciBidXN5OworIHVuc2lnbmVkIGNoYXIgZGVidWc7CisKKyBjb25zdCBjaGFyICptdXhfcmVnX25hbWU7CisgY29uc3QgdW5zaWduZWQgaW50IG11eF9yZWc7CisgY29uc3QgdW5zaWduZWQgY2hhciBtYXNrX29mZnNldDsKKyBjb25zdCB1bnNpZ25lZCBjaGFyIG1hc2s7CisKKyBjb25zdCBjaGFyICpwdWxsX25hbWU7CisgY29uc3QgdW5zaWduZWQgaW50IHB1bGxfcmVnOworIGNvbnN0IHVuc2lnbmVkIGNoYXIgcHVsbF92YWw7CisgY29uc3QgdW5zaWduZWQgY2hhciBwdWxsX2JpdDsKKworIGNvbnN0IGNoYXIgKnB1X3BkX25hbWU7CisgY29uc3QgdW5zaWduZWQgaW50IHB1X3BkX3JlZzsKKyBjb25zdCB1bnNpZ25lZCBjaGFyIHB1X3BkX3ZhbDsKK307CisKK2VudW0gb21hcDczMF9pbmRleCB7CisKKyBFMl83MzBfS0JSMCwKKyBKN183MzBfS0JSMSwKKyBFMV83MzBfS0JSMiwKKyBGM183MzBfS0JSMywKKyBEMl83MzBfS0JSNCwKKyBBQTIwXzczMF9LQlI1LAorIFYxN183MzBfS0JSNiwKKyBDMl83MzBfS0JDMCwKKyBEM183MzBfS0JDMSwKKyBFNF83MzBfS0JDMiwKKyBGNF83MzBfS0JDMywKKyBFM183MzBfS0JDNCwKKworIEFBMTdfNzMwX1VTQl9ETSwKKyBXMTZfNzMwX1VTQl9QVV9FTiwKKyBXMTdfNzMwX1VTQl9WQlVTSSwKKworIFYxOV83MzBfR1BJT18xNSwKKyBNMTlfNzMwX0dQSU9fNzcsCisgQzIxXzczMF9HUElPXzEyMV8xMjIsCisgSzE5XzczMF9HUElPXzEyNiwKKyBLMTVfNzMwX0dQSU9fMTI3LAorCisgUDE1XzczMF9HUElPXzE2XzE3LAorCisgTTE1XzczMF9HUElPXzgzLAorIE4yMF83MzBfR1BJT184MiwKKyBOMThfNzMwX0dQSU9fODEsCisgTjE5XzczMF9HUElPXzgwLAorIEwxNV83MzBfR1BJT183NiwKKworIFVBUlQxX0NUU19SVFMsCisgT01BUF83MzBfR1BJT1NfNDJfNDMsCisgVUFSVDFfVFhfUlgsCisgT01BUF83MzBfR1BJT1NfNDBfNDEsCisgVUFSVDFfVVNCX1JYX1RYLAorIFVBUlQxX1VTQl9SVFMsCisgVUFSVDFfVVNCX0NUUworfTsKKworZW51bSBvbWFwMXh4eF9pbmRleCB7CisKKyBVQVJUMV9UWCA9IDAsCisgVUFSVDFfUlRTLAorCisgVUFSVDJfVFgsCisgVUFSVDJfUlgsCisgVUFSVDJfQ1RTLAorIFVBUlQyX1JUUywKKworIFVBUlQzX1RYLAorIFVBUlQzX1JYLAorIFVBUlQzX0NUUywKKyBVQVJUM19SVFMsCisgVUFSVDNfQ0xLUkVRLAorIFVBUlQzX0JDTEssCisgWTE1XzE2MTBfVUFSVDNfUlRTLAorCisgUFdULAorIFBXTCwKKworIFIxOF9VU0JfVkJVUywKKyBSMThfMTUxMF9VU0JfR1BJTzAsCisgVzRfVVNCX1BVRU4sCisgVzRfVVNCX0NMS08sCisgVzRfVVNCX0hJR0haLAorIFc0X0dQSU81OCwKKworIFVTQjFfU1VTUCwKKyBVU0IxX1NFTywKKyBXMTNfMTYxMF9VU0IxX1NFMCwKKyBVU0IxX1RYRU4sCisgVVNCMV9UWEQsCisgVVNCMV9WUCwKKyBVU0IxX1ZNLAorIFVTQjFfUkNWLAorIFVTQjFfU1BFRUQsCisgUjEzXzE2MTBfVVNCMV9TUEVFRCwKKyBSMTNfMTcxMF9VU0IxX1NFMCwKKworIFVTQjJfU1VTUCwKKyBVU0IyX1ZQLAorIFVTQjJfVFhFTiwKKyBVU0IyX1ZNLAorIFVTQjJfUkNWLAorIFVTQjJfU0VPLAorIFVTQjJfVFhELAorCisgUjE4XzE1MTBfR1BJTzAsCisgUjE5XzE1MTBfR1BJTzEsCisgTTE0XzE1MTBfR1BJTzIsCisKKyBQMThfMTYxMF9HUElPMywKKyBZMTVfMTYxMF9HUElPMTcsCisKKyBSMThfMTcxMF9HUElPMCwKKyBWMl8xNzEwX0dQSU8xMCwKKyBOMjFfMTcxMF9HUElPMTQsCisgVzE1XzE3MTBfR1BJTzQwLAorCisgTVBVSU8yLAorIE4xNV8xNjEwX01QVUlPMiwKKyBNUFVJTzQsCisgTVBVSU81LAorIFQyMF8xNjEwX01QVUlPNSwKKyBXMTFfMTYxMF9NUFVJTzYsCisgVjEwXzE2MTBfTVBVSU83LAorIFcxMV8xNjEwX01QVUlPOSwKKyBWMTBfMTYxMF9NUFVJTzEwLAorIFcxMF8xNjEwX01QVUlPMTEsCisgRTIwXzE2MTBfTVBVSU8xMywKKyBVMjBfMTYxMF9NUFVJTzE0LAorIEUxOV8xNjEwX01QVUlPMTUsCisKKyBNQ0JTUDJfQ0xLUiwKKyBNQ0JTUDJfQ0xLWCwKKyBNQ0JTUDJfRFIsCisgTUNCU1AyX0RYLAorIE1DQlNQMl9GU1IsCisgTUNCU1AyX0ZTWCwKKworIE1DQlNQM19DTEtYLAorCisgQkFMTE9VVF9WOF9BUk1JTzMsCisgTjIwX0hEUSwKKworIFc4XzE2MTBfTU1DMl9EQVQwLAorIFY4XzE2MTBfTU1DMl9EQVQxLAorIFcxNV8xNjEwX01NQzJfREFUMiwKKyBSMTBfMTYxMF9NTUMyX0RBVDMsCisgWTEwXzE2MTBfTU1DMl9DTEssCisgWThfMTYxMF9NTUMyX0NNRCwKKyBWOV8xNjEwX01NQzJfQ01ERElSLAorIFY1XzE2MTBfTU1DMl9EQVRESVIwLAorIFcxOV8xNjEwX01NQzJfREFURElSMSwKKyBSMThfMTYxMF9NTUMyX0NMS0lOLAorCisgTTE5XzE2MTBfRVRNX1BTVEFUMCwKKyBMMTVfMTYxMF9FVE1fUFNUQVQxLAorIEwxOF8xNjEwX0VUTV9QU1RBVDIsCisgTDE5XzE2MTBfRVRNX0QwLAorIEoxOV8xNjEwX0VUTV9ENiwKKyBKMThfMTYxMF9FVE1fRDcsCisKKyBQMjBfMTYxMF9HUElPNCwKKyBWOV8xNjEwX0dQSU83LAorIFc4XzE2MTBfR1BJTzksCisgTjIwXzE2MTBfR1BJTzExLAorIE4xOV8xNjEwX0dQSU8xMywKKyBQMTBfMTYxMF9HUElPMjIsCisgVjVfMTYxMF9HUElPMjQsCisgQUEyMF8xNjEwX0dQSU9fNDEsCisgVzE5XzE2MTBfR1BJTzQ4LAorIE03XzE2MTBfR1BJTzYyLAorIFYxNF8xNlhYX0dQSU8zNywKKyBSOV8xNlhYX0dQSU8xOCwKKyBMMTRfMTZYWF9HUElPNDksCisKKyBWMTlfMTYxMF9VV0lSRV9TQ0xLLAorIFUxOF8xNjEwX1VXSVJFX1NESSwKKyBXMjFfMTYxMF9VV0lSRV9TRE8sCisgTjE0XzE2MTBfVVdJUkVfQ1MwLAorIFAxNV8xNjEwX1VXSVJFX0NTMywKKyBOMTVfMTYxMF9VV0lSRV9DUzEsCisKKyBVMTlfMTYxMF9TUElGX1NDSywKKyBVMThfMTYxMF9TUElGX0RJTiwKKyBQMjBfMTYxMF9TUElGX0RJTiwKKyBXMjFfMTYxMF9TUElGX0RPVVQsCisgUjE4XzE2MTBfU1BJRl9ET1VULAorIE4xNF8xNjEwX1NQSUZfQ1MwLAorIE4xNV8xNjEwX1NQSUZfQ1MxLAorIFQxOV8xNjEwX1NQSUZfQ1MyLAorIFAxNV8xNjEwX1NQSUZfQ1MzLAorCisgTDNfMTYxMF9GTEFTSF9DUzJCX09FLAorIE04XzE2MTBfRkxBU0hfQ1MyQl9XRSwKKworIE1NQ19DTUQsCisgTU1DX0RBVDEsCisgTU1DX0RBVDIsCisgTU1DX0RBVDAsCisgTU1DX0NMSywKKyBNTUNfREFUMywKKworIE0xNV8xNzEwX01NQ19DTEtJLAorIFAxOV8xNzEwX01NQ19DTURESVIsCisgUDIwXzE3MTBfTU1DX0RBVERJUjAsCisKKyBXOV9VU0IwX1RYRU4sCisgQUE5X1VTQjBfVlAsCisgWTVfVVNCMF9SQ1YsCisgUjlfVVNCMF9WTSwKKyBWNl9VU0IwX1RYRCwKKyBXNV9VU0IwX1NFMCwKKyBWOV9VU0IwX1NQRUVELAorIFY5X1VTQjBfU1VTUCwKKworIFc5X1VTQjJfVFhFTiwKKyBBQTlfVVNCMl9WUCwKKyBZNV9VU0IyX1JDViwKKyBSOV9VU0IyX1ZNLAorIFY2X1VTQjJfVFhELAorIFc1X1VTQjJfU0UwLAorCisgUjEzXzE2MTBfVUFSVDFfVFgsCisgVjE0XzE2WFhfVUFSVDFfUlgsCisgUjE0XzE2MTBfVUFSVDFfQ1RTLAorIEFBMTVfMTYxMF9VQVJUMV9SVFMsCisgUjlfMTZYWF9VQVJUMl9SWCwKKyBMMTRfMTZYWF9VQVJUM19SWCwKKworIEkyQ19TQ0wsCisgSTJDX1NEQSwKKworIEYxOF8xNjEwX0tCQzAsCisgRDIwXzE2MTBfS0JDMSwKKyBEMTlfMTYxMF9LQkMyLAorIEUxOF8xNjEwX0tCQzMsCisgQzIxXzE2MTBfS0JDNCwKKyBHMThfMTYxMF9LQlIwLAorIEYxOV8xNjEwX0tCUjEsCisgSDE0XzE2MTBfS0JSMiwKKyBFMjBfMTYxMF9LQlIzLAorIEUxOV8xNjEwX0tCUjQsCisgTjE5XzE2MTBfS0JSNSwKKworIFQyMF8xNjEwX0xPV19QV1IsCisKKyBWNV8xNzEwX01DTEtfT04sCisgVjVfMTcxMF9NQ0xLX09GRiwKKyBSMTBfMTYxMF9NQ0xLX09OLAorIFIxMF8xNjEwX01DTEtfT0ZGLAorCisgUDExXzE2MTBfQ0ZfQ0QyLAorIFIxMV8xNjEwX0NGX0lPSVMxNiwKKyBWMTBfMTYxMF9DRl9JUkVRLAorIFcxMF8xNjEwX0NGX1JFU0VULAorIFcxMV8xNjEwX0NGX0NEMSwKK307CisKK2VudW0gb21hcDI0eHhfaW5kZXggeworCisgTTE5XzI0WFhfSTJDMV9TQ0wsCisgTDE1XzI0WFhfSTJDMV9TREEsCisgSjE1XzI0WFhfSTJDMl9TQ0wsCisgSDE5XzI0WFhfSTJDMl9TREEsCisKKyBXMTlfMjRYWF9TWVNfTklSUSwKKworIFcxNF8yNFhYX1NZU19DTEtPVVQsCisKKyBMM19HUE1DX1dBSVQwLAorIE43X0dQTUNfV0FJVDEsCisgTTFfR1BNQ19XQUlUMiwKKyBQMV9HUE1DX1dBSVQzLAorCisgWTE1XzI0WFhfTUNCU1AyX0NMS1gsCisgUjE0XzI0WFhfTUNCU1AyX0ZTWCwKKyBXMTVfMjRYWF9NQ0JTUDJfRFIsCisgVjE1XzI0WFhfTUNCU1AyX0RYLAorCisgTTIxXzI0MlhfR1BJTzExLAorIEFBMTBfMjQyWF9HUElPMTMsCisgQUE2XzI0MlhfR1BJTzE0LAorIEFBNF8yNDJYX0dQSU8xNSwKKyBZMTFfMjQyWF9HUElPMTYsCisgQUExMl8yNDJYX0dQSU8xNywKKyBBQThfMjQyWF9HUElPNTgsCisgWTIwXzI0WFhfR1BJTzYwLAorIFc0X18yNFhYX0dQSU83NCwKKyBNMTVfMjRYWF9HUElPOTIsCisgVjE0XzI0WFhfR1BJTzExNywKKworIFY0XzI0MlhfR1BJTzQ5LAorIFcyXzI0MlhfR1BJTzUwLAorIFU0XzI0MlhfR1BJTzUxLAorIFYzXzI0MlhfR1BJTzUyLAorIFYyXzI0MlhfR1BJTzUzLAorIFY2XzI0MlhfR1BJTzUzLAorIFQ0XzI0MlhfR1BJTzU0LAorIFk0XzI0MlhfR1BJTzU0LAorIFQzXzI0MlhfR1BJTzU1LAorIFUyXzI0MlhfR1BJTzU2LAorCisgQUExMF8yNDJYX0RNQVJFUTAsCisgQUE2XzI0MlhfRE1BUkVRMSwKKyBFNF8yNDJYX0RNQVJFUTIsCisgRzRfMjQyWF9ETUFSRVEzLAorIEQzXzI0MlhfRE1BUkVRNCwKKyBFM18yNDJYX0RNQVJFUTUsCisKKyBQMjBfMjRYWF9UU0NfSVJRLAorCisgSzE1XzI0WFhfVUFSVDNfVFgsCisgSzE0XzI0WFhfVUFSVDNfUlgsCisKKyBHMTlfMjRYWF9NTUNfQ0xLTywKKyBIMThfMjRYWF9NTUNfQ01ELAorIEYyMF8yNFhYX01NQ19EQVQwLAorIEgxNF8yNFhYX01NQ19EQVQxLAorIEUxOV8yNFhYX01NQ19EQVQyLAorIEQxOV8yNFhYX01NQ19EQVQzLAorIEYxOV8yNFhYX01NQ19EQVRfRElSMCwKKyBFMjBfMjRYWF9NTUNfREFUX0RJUjEsCisgRjE4XzI0WFhfTU1DX0RBVF9ESVIyLAorIEUxOF8yNFhYX01NQ19EQVRfRElSMywKKyBHMThfMjRYWF9NTUNfQ01EX0RJUiwKKyBIMTVfMjRYWF9NTUNfQ0xLSSwKKworIFQxOV8yNFhYX0tCUjAsCisgUjE5XzI0WFhfS0JSMSwKKyBWMThfMjRYWF9LQlIyLAorIE0yMV8yNFhYX0tCUjMsCisgRTVfXzI0WFhfS0JSNCwKKyBNMThfMjRYWF9LQlI1LAorIFIyMF8yNFhYX0tCQzAsCisgTTE0XzI0WFhfS0JDMSwKKyBIMTlfMjRYWF9LQkMyLAorIFYxN18yNFhYX0tCQzMsCisgUDIxXzI0WFhfS0JDNCwKKyBMMTRfMjRYWF9LQkM1LAorIE4xOV8yNFhYX0tCQzYsCisKKyBCM19fMjRYWF9LQlI1LAorIEFBNF8yNFhYX0tCQzIsCisgQjEzXzI0WFhfS0JDNiwKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvb21hcDI0eHguaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL29tYXAyNHh4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdkZWYyZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL29tYXAyNHh4LmgKQEAgLTAsMCArMSwzMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FTTV9BUkNIX09NQVAyNFhYX0gKKyNkZWZpbmUgX19BU01fQVJDSF9PTUFQMjRYWF9ICisKKyNkZWZpbmUgTDRfMjRYWF9CQVNFIDB4NDgwMDAwMDAKKyNkZWZpbmUgTDNfMjRYWF9CQVNFIDB4NjgwMDAwMDAKKworI2RlZmluZSBPTUFQMjRYWF9JQ19CQVNFIChMNF8yNFhYX0JBU0UgKyAweGZlMDAwKQorI2RlZmluZSBWQV9JQ19CQVNFIElPX0FERFJFU1MoT01BUDI0WFhfSUNfQkFTRSkKKyNkZWZpbmUgT01BUDI0WFhfSVZBX0lOVENfQkFTRSAweDQwMDAwMDAwCisjZGVmaW5lIElSUV9TSVJfSVJRIDB4MDA0MAorCisjZGVmaW5lIE9NQVAyNFhYXzMyS1NZTkNUX0JBU0UgKEw0XzI0WFhfQkFTRSArIDB4NDAwMCkKKyNkZWZpbmUgT01BUDI0WFhfUFJDTV9CQVNFIChMNF8yNFhYX0JBU0UgKyAweDgwMDApCisjZGVmaW5lIE9NQVAyNFhYX1NEUkNfQkFTRSAoTDNfMjRYWF9CQVNFICsgMHg5MDAwKQorCisjZGVmaW5lIE9NQVAyNDJYX0NPTlRST0xfU1RBVFVTIChMNF8yNFhYX0JBU0UgKyAweDJmOCkKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL3NlcmlhbC5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvc2VyaWFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFiODYxMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL3NlcmlhbC5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19BU01fQVJDSF9TRVJJQUxfSAorI2RlZmluZSBfX0FTTV9BUkNIX1NFUklBTF9ICisKKyNkZWZpbmUgT01BUF9NQVhfTlJfUE9SVFMgMworI2RlZmluZSBPTUFQMTUxMF9CQVNFX0JBVUQgKDEyMDAwMDAwLzE2KQorI2RlZmluZSBPTUFQMTZYWF9CQVNFX0JBVUQgKDQ4MDAwMDAwLzE2KQorCisjZGVmaW5lIGlzX29tYXBfcG9ydChwKSAoe2ludCBfX3JldCA9IDA7ICAgaWYgKHAgPT0gSU9fQUREUkVTUyhPTUFQX1VBUlQxX0JBU0UpIHx8ICAgcCA9PSBJT19BRERSRVNTKE9NQVBfVUFSVDJfQkFTRSkgfHwgICBwID09IElPX0FERFJFU1MoT01BUF9VQVJUM19CQVNFKSkgICBfX3JldCA9IDE7ICAgX19yZXQ7ICAgfSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXJjaC90aW1leC5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvdGltZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzkyMzRjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvdGltZXguaApAQCAtMCwwICsxLDE3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQVNNX0FSQ0hfT01BUF9USU1FWF9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfT01BUF9USU1FWF9ICisKKyNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFIChIWiAqIDEwMDAwMFVMKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL3ZtYWxsb2MuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL3ZtYWxsb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmI1YjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvdm1hbGxvYy5oCkBAIC0wLDAgKzEsMTMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgVk1BTExPQ19FTkQgKFBBR0VfT0ZGU0VUICsgMHgxMDAwMDAwMCkKKwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2F0b21pYy5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2F0b21pYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmMTkyMWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXRvbWljLmgKQEAgLTAsMCArMSwyMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FTTV9BUk1fQVRPTUlDX0gKKyNkZWZpbmUgX19BU01fQVJNX0FUT01JQ19ICisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorCit0eXBlZGVmIHN0cnVjdCB7IHZvbGF0aWxlIGludCBjb3VudGVyOyB9IGF0b21pY190OworCisjZGVmaW5lIEFUT01JQ19JTklUKGkpIHsgKGkpIH0KKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXV4dmVjLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXV4dmVjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdlODM5YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hdXh2ZWMuaApAQCAtMCwwICsxLDE1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQVNNQVJNX0FVWFZFQ19ICisjZGVmaW5lIF9fQVNNQVJNX0FVWFZFQ19ICisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2JpdG9wcy5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2JpdG9wcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmNzZhNjgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYml0b3BzLmgKQEAgLTAsMCArMSwxNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FTTV9BUk1fQklUT1BTX0gKKyNkZWZpbmUgX19BU01fQVJNX0JJVE9QU19ICisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2J5dGVvcmRlci5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2J5dGVvcmRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkYTM3YmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYnl0ZW9yZGVyLmgKQEAgLTAsMCArMSw1MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FTTV9BUk1fQllURU9SREVSX0gKKyNkZWZpbmUgX19BU01fQVJNX0JZVEVPUkRFUl9ICisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCitzdGF0aWMgaW5saW5lIF9fYXR0cmlidXRlX2NvbnN0X18gX191MzIgX19fYXJjaF9fc3dhYjMyKF9fdTMyIHgpCit7CisgX191MzIgdDsKKworI2lmbmRlZiBfX3RodW1iX18KKyBpZiAoIV9fYnVpbHRpbl9jb25zdGFudF9wKHgpKSB7CisKKyBhc20gKCJlb3JcdCUwLCAlMSwgJTEsIHJvciAjMTYiIDogIj1yIiAodCkgOiAiciIgKHgpKTsKKyB9IGVsc2UKKyNlbmRpZgorIHQgPSB4IF4gKCh4IDw8IDE2KSB8ICh4ID4+IDE2KSk7CisKKyB4ID0gKHggPDwgMjQpIHwgKHggPj4gOCk7CisgdCAmPSB+MHgwMEZGMDAwMDsKKyB4IF49ICh0ID4+IDgpOworCisgcmV0dXJuIHg7Cit9CisKKyNkZWZpbmUgX19hcmNoX19zd2FiMzIoeCkgX19fYXJjaF9fc3dhYjMyKHgpCisKKyNpZm5kZWYgX19TVFJJQ1RfQU5TSV9fCisjZGVmaW5lIF9fQllURU9SREVSX0hBU19VNjRfXworI2RlZmluZSBfX1NXQUJfNjRfVEhSVV8zMl9fCisjZW5kaWYKKworI2lmZGVmIF9fQVJNRUJfXworI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9iaWdfZW5kaWFuLmg+CisjZWxzZQorI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9saXR0bGVfZW5kaWFuLmg+CisjZW5kaWYKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9jYWNoZS5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2NhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmUyNjQyMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9jYWNoZS5oCkBAIC0wLDAgKzEsMTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19BU01BUk1fQ0FDSEVfSAorI2RlZmluZSBfX0FTTUFSTV9DQUNIRV9ICisKKyNkZWZpbmUgTDFfQ0FDSEVfU0hJRlQgNQorI2RlZmluZSBMMV9DQUNIRV9CWVRFUyAoMSA8PCBMMV9DQUNIRV9TSElGVCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vY2FjaGVmbHVzaC5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2NhY2hlZmx1c2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmZhODdhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2NhY2hlZmx1c2guaApAQCAtMCwwICsxLDEwNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQVNNQVJNX0NBQ0hFRkxVU0hfSAorI2RlZmluZSBfQVNNQVJNX0NBQ0hFRkxVU0hfSAorCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorCisjaW5jbHVkZSA8YXNtL2dsdWUuaD4KKyNpbmNsdWRlIDxhc20vc2htcGFyYW0uaD4KKworI2RlZmluZSBDQUNIRV9DT0xPVVIodmFkZHIpICgodmFkZHIgJiAoU0hNTEJBIC0gMSkpID4+IFBBR0VfU0hJRlQpCisKKyN1bmRlZiBfQ0FDSEUKKyN1bmRlZiBNVUxUSV9DQUNIRQorCisjaWYgIWRlZmluZWQoX0NBQ0hFKSAmJiAhZGVmaW5lZChNVUxUSV9DQUNIRSkKKyNlcnJvciBVbmtub3duIGNhY2hlIG1haW50YWluZW5jZSBtb2RlbAorI2VuZGlmCisKKyNkZWZpbmUgUEdfZGNhY2hlX2RpcnR5IFBHX2FyY2hfMQorCitzdHJ1Y3QgY3B1X2NhY2hlX2ZucyB7Cisgdm9pZCAoKmZsdXNoX2tlcm5fYWxsKSh2b2lkKTsKKyB2b2lkICgqZmx1c2hfdXNlcl9hbGwpKHZvaWQpOworIHZvaWQgKCpmbHVzaF91c2VyX3JhbmdlKSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBpbnQpOworCisgdm9pZCAoKmNvaGVyZW50X2tlcm5fcmFuZ2UpKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOworIHZvaWQgKCpjb2hlcmVudF91c2VyX3JhbmdlKSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKKyB2b2lkICgqZmx1c2hfa2Vybl9kY2FjaGVfcGFnZSkodm9pZCAqKTsKKworIHZvaWQgKCpkbWFfaW52X3JhbmdlKSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKKyB2b2lkICgqZG1hX2NsZWFuX3JhbmdlKSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKKyB2b2lkICgqZG1hX2ZsdXNoX3JhbmdlKSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKK307CisKKyNpZmRlZiBNVUxUSV9DQUNIRQorCisjZGVmaW5lIF9fY3B1Y19mbHVzaF9rZXJuX2FsbCBjcHVfY2FjaGUuZmx1c2hfa2Vybl9hbGwKKyNkZWZpbmUgX19jcHVjX2ZsdXNoX3VzZXJfYWxsIGNwdV9jYWNoZS5mbHVzaF91c2VyX2FsbAorI2RlZmluZSBfX2NwdWNfZmx1c2hfdXNlcl9yYW5nZSBjcHVfY2FjaGUuZmx1c2hfdXNlcl9yYW5nZQorI2RlZmluZSBfX2NwdWNfY29oZXJlbnRfa2Vybl9yYW5nZSBjcHVfY2FjaGUuY29oZXJlbnRfa2Vybl9yYW5nZQorI2RlZmluZSBfX2NwdWNfY29oZXJlbnRfdXNlcl9yYW5nZSBjcHVfY2FjaGUuY29oZXJlbnRfdXNlcl9yYW5nZQorI2RlZmluZSBfX2NwdWNfZmx1c2hfZGNhY2hlX3BhZ2UgY3B1X2NhY2hlLmZsdXNoX2tlcm5fZGNhY2hlX3BhZ2UKKworI2RlZmluZSBkbWFjX2ludl9yYW5nZSBjcHVfY2FjaGUuZG1hX2ludl9yYW5nZQorI2RlZmluZSBkbWFjX2NsZWFuX3JhbmdlIGNwdV9jYWNoZS5kbWFfY2xlYW5fcmFuZ2UKKyNkZWZpbmUgZG1hY19mbHVzaF9yYW5nZSBjcHVfY2FjaGUuZG1hX2ZsdXNoX3JhbmdlCisKKyNlbHNlCisKKyNkZWZpbmUgX19jcHVjX2ZsdXNoX2tlcm5fYWxsIF9fZ2x1ZShfQ0FDSEUsX2ZsdXNoX2tlcm5fY2FjaGVfYWxsKQorI2RlZmluZSBfX2NwdWNfZmx1c2hfdXNlcl9hbGwgX19nbHVlKF9DQUNIRSxfZmx1c2hfdXNlcl9jYWNoZV9hbGwpCisjZGVmaW5lIF9fY3B1Y19mbHVzaF91c2VyX3JhbmdlIF9fZ2x1ZShfQ0FDSEUsX2ZsdXNoX3VzZXJfY2FjaGVfcmFuZ2UpCisjZGVmaW5lIF9fY3B1Y19jb2hlcmVudF9rZXJuX3JhbmdlIF9fZ2x1ZShfQ0FDSEUsX2NvaGVyZW50X2tlcm5fcmFuZ2UpCisjZGVmaW5lIF9fY3B1Y19jb2hlcmVudF91c2VyX3JhbmdlIF9fZ2x1ZShfQ0FDSEUsX2NvaGVyZW50X3VzZXJfcmFuZ2UpCisjZGVmaW5lIF9fY3B1Y19mbHVzaF9kY2FjaGVfcGFnZSBfX2dsdWUoX0NBQ0hFLF9mbHVzaF9rZXJuX2RjYWNoZV9wYWdlKQorCisjZGVmaW5lIGRtYWNfaW52X3JhbmdlIF9fZ2x1ZShfQ0FDSEUsX2RtYV9pbnZfcmFuZ2UpCisjZGVmaW5lIGRtYWNfY2xlYW5fcmFuZ2UgX19nbHVlKF9DQUNIRSxfZG1hX2NsZWFuX3JhbmdlKQorI2RlZmluZSBkbWFjX2ZsdXNoX3JhbmdlIF9fZ2x1ZShfQ0FDSEUsX2RtYV9mbHVzaF9yYW5nZSkKKworI2VuZGlmCisKKyNkZWZpbmUgZmx1c2hfY2FjaGVfdm1hcChzdGFydCwgZW5kKSBmbHVzaF9jYWNoZV9hbGwoKQorI2RlZmluZSBmbHVzaF9jYWNoZV92dW5tYXAoc3RhcnQsIGVuZCkgZmx1c2hfY2FjaGVfYWxsKCkKKworI2RlZmluZSBjb3B5X3RvX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIHZhZGRyLCBkc3QsIHNyYywgbGVuKSAgIGRvIHsgICBtZW1jcHkoZHN0LCBzcmMsIGxlbik7ICAgZmx1c2hfcHRyYWNlX2FjY2Vzcyh2bWEsIHBhZ2UsIHZhZGRyLCBkc3QsIGxlbiwgMSk7ICB9IHdoaWxlICgwKQorCisjZGVmaW5lIGNvcHlfZnJvbV91c2VyX3BhZ2Uodm1hLCBwYWdlLCB2YWRkciwgZHN0LCBzcmMsIGxlbikgICBkbyB7ICAgbWVtY3B5KGRzdCwgc3JjLCBsZW4pOyAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgZmx1c2hfY2FjaGVfYWxsKCkgX19jcHVjX2ZsdXNoX2tlcm5fYWxsKCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfdXNlcl9yYW5nZSh2bWEsc3RhcnQsZW5kKSAgIF9fY3B1Y19jb2hlcmVudF91c2VyX3JhbmdlKChzdGFydCkgJiBQQUdFX01BU0ssIFBBR0VfQUxJR04oZW5kKSkKKyNkZWZpbmUgZmx1c2hfaWNhY2hlX3JhbmdlKHMsZSkgX19jcHVjX2NvaGVyZW50X2tlcm5fcmFuZ2UocyxlKQorI2RlZmluZSBjbGVhbl9kY2FjaGVfYXJlYShzdGFydCxzaXplKSBjcHVfZGNhY2hlX2NsZWFuX2FyZWEoc3RhcnQsIHNpemUpCisKKyNkZWZpbmUgZmx1c2hfZGNhY2hlX21tYXBfbG9jayhtYXBwaW5nKSAgIHdyaXRlX2xvY2tfaXJxKCYobWFwcGluZyktPnRyZWVfbG9jaykKKyNkZWZpbmUgZmx1c2hfZGNhY2hlX21tYXBfdW5sb2NrKG1hcHBpbmcpICAgd3JpdGVfdW5sb2NrX2lycSgmKG1hcHBpbmcpLT50cmVlX2xvY2spCisKKyNkZWZpbmUgZmx1c2hfaWNhY2hlX3VzZXJfcmFuZ2Uodm1hLHBhZ2UsYWRkcixsZW4pICAgZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSkKKworI2RlZmluZSBmbHVzaF9pY2FjaGVfcGFnZSh2bWEscGFnZSkgZG8geyB9IHdoaWxlICgwKQorCisjZGVmaW5lIF9fY2FjaGVpZF9wcmVzZW50KHZhbCkgKHZhbCAhPSByZWFkX2NwdWlkKENQVUlEX0lEKSkKKyNkZWZpbmUgX19jYWNoZWlkX3ZpdnQodmFsKSAoKHZhbCAmICgxNSA8PCAyNSkpICE9ICgxNCA8PCAyNSkpCisjZGVmaW5lIF9fY2FjaGVpZF92aXB0KHZhbCkgKCh2YWwgJiAoMTUgPDwgMjUpKSA9PSAoMTQgPDwgMjUpKQorI2RlZmluZSBfX2NhY2hlaWRfdmlwdF9ub25hbGlhc2luZyh2YWwpICgodmFsICYgKDE1IDw8IDI1IHwgMSA8PCAyMykpID09ICgxNCA8PCAyNSkpCisjZGVmaW5lIF9fY2FjaGVpZF92aXB0X2FsaWFzaW5nKHZhbCkgKCh2YWwgJiAoMTUgPDwgMjUgfCAxIDw8IDIzKSkgPT0gKDE0IDw8IDI1IHwgMSA8PCAyMykpCisKKyNkZWZpbmUgY2FjaGVfaXNfdml2dCgpICAgKHsgICB1bnNpZ25lZCBpbnQgX192YWwgPSByZWFkX2NwdWlkKENQVUlEX0NBQ0hFVFlQRSk7ICAgKCFfX2NhY2hlaWRfcHJlc2VudChfX3ZhbCkpIHx8IF9fY2FjaGVpZF92aXZ0KF9fdmFsKTsgICB9KQorCisjZGVmaW5lIGNhY2hlX2lzX3ZpcHQoKSAgICh7ICAgdW5zaWduZWQgaW50IF9fdmFsID0gcmVhZF9jcHVpZChDUFVJRF9DQUNIRVRZUEUpOyAgIF9fY2FjaGVpZF9wcmVzZW50KF9fdmFsKSAmJiBfX2NhY2hlaWRfdmlwdChfX3ZhbCk7ICAgfSkKKworI2RlZmluZSBjYWNoZV9pc192aXB0X25vbmFsaWFzaW5nKCkgICAoeyAgIHVuc2lnbmVkIGludCBfX3ZhbCA9IHJlYWRfY3B1aWQoQ1BVSURfQ0FDSEVUWVBFKTsgICBfX2NhY2hlaWRfcHJlc2VudChfX3ZhbCkgJiYgICBfX2NhY2hlaWRfdmlwdF9ub25hbGlhc2luZyhfX3ZhbCk7ICAgfSkKKworI2RlZmluZSBjYWNoZV9pc192aXB0X2FsaWFzaW5nKCkgICAoeyAgIHVuc2lnbmVkIGludCBfX3ZhbCA9IHJlYWRfY3B1aWQoQ1BVSURfQ0FDSEVUWVBFKTsgICBfX2NhY2hlaWRfcHJlc2VudChfX3ZhbCkgJiYgICBfX2NhY2hlaWRfdmlwdF9hbGlhc2luZyhfX3ZhbCk7ICAgfSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vY3B1dGltZS5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2NwdXRpbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTQwOTdmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2NwdXRpbWUuaApAQCAtMCwwICsxLDE3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQVJNX0NQVVRJTUVfSAorI2RlZmluZSBfX0FSTV9DUFVUSU1FX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2NwdXRpbWUuaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vZGVsYXkuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9kZWxheS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzMWZkOWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vZGVsYXkuaApAQCAtMCwwICsxLDIyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQVNNX0FSTV9ERUxBWV9ICisjZGVmaW5lIF9fQVNNX0FSTV9ERUxBWV9ICisKKyNpbmNsdWRlIDxhc20vcGFyYW0uaD4gIAorCisjZGVmaW5lIE1BWF9VREVMQVlfTVMgMgorCisjZGVmaW5lIHVkZWxheShuKSAgIChfX2J1aWx0aW5fY29uc3RhbnRfcChuKSA/ICAgKChuKSA+IChNQVhfVURFTEFZX01TICogMTAwMCkgPyBfX2JhZF91ZGVsYXkoKSA6ICAgX19jb25zdF91ZGVsYXkoKG4pICogKCgyMTk5MDIzVSpIWik+PjExKSkpIDogICBfX3VkZWxheShuKSkKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9kaXY2NC5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2RpdjY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzAzYTBlNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9kaXY2NC5oCkBAIC0wLDAgKzEsMjcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19BU01fQVJNX0RJVjY0CisjZGVmaW5lIF9fQVNNX0FSTV9ESVY2NAorCisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorCisjaWZkZWYgX19BUk1FQl9fCisjZGVmaW5lIF9feGggInIwIgorI2RlZmluZSBfX3hsICJyMSIKKyNlbHNlCisjZGVmaW5lIF9feGwgInIwIgorI2RlZmluZSBfX3hoICJyMSIKKyNlbmRpZgorCisjZGVmaW5lIGRvX2RpdihuLGJhc2UpICAoeyAgIHJlZ2lzdGVyIHVuc2lnbmVkIGludCBfX2Jhc2UgYXNtKCJyNCIpID0gYmFzZTsgICByZWdpc3RlciB1bnNpZ25lZCBsb25nIGxvbmcgX19uIGFzbSgicjAiKSA9IG47ICAgcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBsb25nIF9fcmVzIGFzbSgicjIiKTsgICByZWdpc3RlciB1bnNpZ25lZCBpbnQgX19yZW0gYXNtKF9feGgpOyAgIGFzbSggX19hc21lcSgiJTAiLCBfX3hoKSAgIF9fYXNtZXEoIiUxIiwgInIyIikgICBfX2FzbWVxKCIlMiIsICJyMCIpICAgX19hc21lcSgiJTMiLCAicjQiKSAgICJibAlfX2RvX2RpdjY0IiAgIDogIj1yIiAoX19yZW0pLCAiPXIiIChfX3JlcykgICA6ICJyIiAoX19uKSwgInIiIChfX2Jhc2UpICAgOiAiaXAiLCAibHIiLCAiY2MiKTsgICBuID0gX19yZXM7ICAgX19yZW07ICB9KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9kbWEtbWFwcGluZy5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2RtYS1tYXBwaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U2NTAwOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9kbWEtbWFwcGluZy5oCkBAIC0wLDAgKzEsMTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgQVNNQVJNX0RNQV9NQVBQSU5HX0gKKyNkZWZpbmUgQVNNQVJNX0RNQV9NQVBQSU5HX0gKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vZG1hLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VlZWI3OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9kbWEuaApAQCAtMCwwICsxLDQ1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQVNNX0FSTV9ETUFfSAorI2RlZmluZSBfX0FTTV9BUk1fRE1BX0gKKwordHlwZWRlZiB1bnNpZ25lZCBpbnQgZG1hY2hfdDsKKworI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9zY2F0dGVybGlzdC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2RtYS5oPgorCisjaWZuZGVmIE1BWF9ETUFfQUREUkVTUworI2RlZmluZSBNQVhfRE1BX0FERFJFU1MgMHhmZmZmZmZmZgorI2VuZGlmCisKK3R5cGVkZWYgdW5zaWduZWQgaW50IGRtYW1vZGVfdDsKKworI2RlZmluZSBETUFfTU9ERV9NQVNLIDMKKworI2RlZmluZSBETUFfTU9ERV9SRUFEIDAKKyNkZWZpbmUgRE1BX01PREVfV1JJVEUgMQorI2RlZmluZSBETUFfTU9ERV9DQVNDQURFIDIKKyNkZWZpbmUgRE1BX0FVVE9JTklUIDQKKworI2RlZmluZSBjbGVhcl9kbWFfZmYoY2hhbm5lbCkKKworI2RlZmluZSBzZXRfZG1hX2FkZHIoY2hhbm5lbCwgYWRkcikgICBfX3NldF9kbWFfYWRkcihjaGFubmVsLCBidXNfdG9fdmlydChhZGRyKSkKKworI2lmbmRlZiBOT19ETUEKKyNkZWZpbmUgTk9fRE1BIDI1NQorI2VuZGlmCisKKyNkZWZpbmUgaXNhX2RtYV9icmlkZ2VfYnVnZ3kgKDApCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2RvbWFpbi5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2RvbWFpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3MzEwOWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vZG9tYWluLmgKQEAgLTAsMCArMSwzMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FTTV9QUk9DX0RPTUFJTl9ICisjZGVmaW5lIF9fQVNNX1BST0NfRE9NQUlOX0gKKworI2RlZmluZSBET01BSU5fS0VSTkVMIDAKKyNkZWZpbmUgRE9NQUlOX1RBQkxFIDAKKyNkZWZpbmUgRE9NQUlOX1VTRVIgMQorI2RlZmluZSBET01BSU5fSU8gMgorCisjZGVmaW5lIERPTUFJTl9OT0FDQ0VTUyAwCisjZGVmaW5lIERPTUFJTl9DTElFTlQgMQorI2RlZmluZSBET01BSU5fTUFOQUdFUiAzCisKKyNkZWZpbmUgZG9tYWluX3ZhbChkb20sdHlwZSkgKCh0eXBlKSA8PCAoMiooZG9tKSkpCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNkZWZpbmUgc2V0X2RvbWFpbih4KSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIG1vZGlmeV9kb21haW4oZG9tLHR5cGUpIGRvIHsgfSB3aGlsZSAoMCkKKworI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9keW50aWNrLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vZHludGljay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMzIzZjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vZHludGljay5oCkBAIC0wLDAgKzEsMTcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FTTUFSTV9EWU5USUNLX0gKKyNkZWZpbmUgX0FTTUFSTV9EWU5USUNLX0gKKworI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vZWxmLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vZWxmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTlkMDk1ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9lbGYuaApAQCAtMCwwICsxLDYzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQVNNQVJNX0VMRl9ICisjZGVmaW5lIF9fQVNNQVJNX0VMRl9ICisKKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisjaW5jbHVkZSA8YXNtL3VzZXIuaD4KKyNpZmRlZiBfX0tFUk5FTAorI2luY2x1ZGUgPGFzbS9wcm9jaW5mby5oPgorI2VuZGlmCisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBlbGZfZ3JlZ190OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGVsZl9mcmVnX3RbM107CisKKyNkZWZpbmUgRU1fQVJNIDQwCisjZGVmaW5lIEVGX0FSTV9BUENTMjYgMHgwOAorI2RlZmluZSBFRl9BUk1fU09GVF9GTE9BVCAweDIwMAorI2RlZmluZSBFRl9BUk1fRUFCSV9NQVNLIDB4RkYwMDAwMDAKKworI2RlZmluZSBSX0FSTV9OT05FIDAKKyNkZWZpbmUgUl9BUk1fUEMyNCAxCisjZGVmaW5lIFJfQVJNX0FCUzMyIDIKKyNkZWZpbmUgUl9BUk1fQ0FMTCAyOAorI2RlZmluZSBSX0FSTV9KVU1QMjQgMjkKKworI2RlZmluZSBFTEZfTkdSRUcgKHNpemVvZiAoc3RydWN0IHB0X3JlZ3MpIC8gc2l6ZW9mKGVsZl9ncmVnX3QpKQordHlwZWRlZiBlbGZfZ3JlZ190IGVsZl9ncmVnc2V0X3RbRUxGX05HUkVHXTsKKwordHlwZWRlZiBzdHJ1Y3QgdXNlcl9mcCBlbGZfZnByZWdzZXRfdDsKKworI2RlZmluZSBlbGZfY2hlY2tfYXJjaCh4KSAoICgoeCktPmVfbWFjaGluZSA9PSBFTV9BUk0pICYmIChFTEZfUFJPQ19PSygoeCkpKSApCisKKyNkZWZpbmUgRUxGX0NMQVNTIEVMRkNMQVNTMzIKKyNpZmRlZiBfX0FSTUVCX18KKyNkZWZpbmUgRUxGX0RBVEEgRUxGREFUQTJNU0IKKyNlbHNlCisjZGVmaW5lIEVMRl9EQVRBIEVMRkRBVEEyTFNCCisjZW5kaWYKKyNkZWZpbmUgRUxGX0FSQ0ggRU1fQVJNCisKKyNkZWZpbmUgVVNFX0VMRl9DT1JFX0RVTVAKKyNkZWZpbmUgRUxGX0VYRUNfUEFHRVNJWkUgNDA5NgorCisjZGVmaW5lIEVMRl9FVF9EWU5fQkFTRSAoMiAqIFRBU0tfU0laRSAvIDMpCisKKyNkZWZpbmUgRUxGX1BMQVRfSU5JVChfciwgbG9hZF9hZGRyKSAoX3IpLT5BUk1fcjAgPSAwCisKKyNkZWZpbmUgRUxGX0hXQ0FQIChlbGZfaHdjYXApCisKKyNkZWZpbmUgRUxGX1BMQVRGT1JNX1NJWkUgOAorCisjZGVmaW5lIEVMRl9QTEFURk9STSAoZWxmX3BsYXRmb3JtKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9lcnJuby5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2Vycm5vLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJlNzA0OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9lcnJuby5oCkBAIC0wLDAgKzEsMTcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FSTV9FUlJOT19ICisjZGVmaW5lIF9BUk1fRVJSTk9fSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZXJybm8uaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vZmNudGwuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9mY250bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyMzUxZWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vZmNudGwuaApAQCAtMCwwICsxLDIyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BUk1fRkNOVExfSAorI2RlZmluZSBfQVJNX0ZDTlRMX0gKKworI2RlZmluZSBPX0RJUkVDVE9SWSAwNDAwMDAgIAorI2RlZmluZSBPX05PRk9MTE9XIDAxMDAwMDAgIAorI2RlZmluZSBPX0RJUkVDVCAwMjAwMDAwICAKKyNkZWZpbmUgT19MQVJHRUZJTEUgMDQwMDAwMAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZmNudGwuaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vZnBzdGF0ZS5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2Zwc3RhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzYyYjE0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2Zwc3RhdGUuaApAQCAtMCwwICsxLDY4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQVNNX0FSTV9GUFNUQVRFX0gKKyNkZWZpbmUgX19BU01fQVJNX0ZQU1RBVEVfSAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCitzdHJ1Y3QgdmZwX2hhcmRfc3RydWN0IHsKKyBfX3U2NCBmcHJlZ3NbMTZdOworI2lmIF9fTElOVVhfQVJNX0FSQ0hfXyA8IDYKKyBfX3UzMiBmcG14X3N0YXRlOworI2VuZGlmCisgX191MzIgZnBleGM7CisgX191MzIgZnBzY3I7CisKKyBfX3UzMiBmcGluc3Q7CisgX191MzIgZnBpbnN0MjsKK307CisKK3VuaW9uIHZmcF9zdGF0ZSB7Cisgc3RydWN0IHZmcF9oYXJkX3N0cnVjdCBoYXJkOworfTsKKworI2RlZmluZSBGUF9IQVJEX1NJWkUgMzUKKworc3RydWN0IGZwX2hhcmRfc3RydWN0IHsKKyB1bnNpZ25lZCBpbnQgc2F2ZVtGUF9IQVJEX1NJWkVdOworfTsKKworI2RlZmluZSBGUF9TT0ZUX1NJWkUgMzUKKworc3RydWN0IGZwX3NvZnRfc3RydWN0IHsKKyB1bnNpZ25lZCBpbnQgc2F2ZVtGUF9TT0ZUX1NJWkVdOworfTsKKworI2RlZmluZSBJV01NWFRfU0laRSAweDk4CisKK3N0cnVjdCBpd21teHRfc3RydWN0IHsKKyB1bnNpZ25lZCBpbnQgc2F2ZVtJV01NWFRfU0laRSAvIHNpemVvZih1bnNpZ25lZCBpbnQpXTsKK307CisKK3VuaW9uIGZwX3N0YXRlIHsKKyBzdHJ1Y3QgZnBfaGFyZF9zdHJ1Y3QgaGFyZDsKKyBzdHJ1Y3QgZnBfc29mdF9zdHJ1Y3Qgc29mdDsKK307CisKKyNkZWZpbmUgRlBfU0laRSAoc2l6ZW9mKHVuaW9uIGZwX3N0YXRlKSAvIHNpemVvZihpbnQpKQorCitzdHJ1Y3QgY3J1bmNoX3N0YXRlIHsKKyB1bnNpZ25lZCBpbnQgbXZkeFsxNl1bMl07CisgdW5zaWduZWQgaW50IG12YXhbNF1bM107CisgdW5zaWduZWQgaW50IGRzcHNjWzJdOworfTsKKworI2RlZmluZSBDUlVOQ0hfU0laRSBzaXplb2Yoc3RydWN0IGNydW5jaF9zdGF0ZSkKKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2dsdWUuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9nbHVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMyN2I1OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9nbHVlLmgKQEAgLTAsMCArMSwxMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2hhcmRpcnEuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9oYXJkaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQyMDdlMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9oYXJkaXJxLmgKQEAgLTAsMCArMSwzOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FTTV9IQVJESVJRX0gKKyNkZWZpbmUgX19BU01fSEFSRElSUV9ICisKKyNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgorI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisKK3R5cGVkZWYgc3RydWN0IHsKKyB1bnNpZ25lZCBpbnQgX19zb2Z0aXJxX3BlbmRpbmc7CisgdW5zaWduZWQgaW50IGxvY2FsX3RpbWVyX2lycXM7Cit9IF9fX19jYWNoZWxpbmVfYWxpZ25lZCBpcnFfY3B1c3RhdF90OworCisjaW5jbHVkZSA8bGludXgvaXJxX2NwdXN0YXQuaD4gIAorCisjaWYgTlJfSVJRUyA+IDI1NgorI2RlZmluZSBIQVJESVJRX0JJVFMgOQorI2Vsc2UKKyNkZWZpbmUgSEFSRElSUV9CSVRTIDgKKyNlbmRpZgorCisjaWYgMSA8PCBIQVJESVJRX0JJVFMgPCBOUl9JUlFTCisjZXJyb3IgSEFSRElSUV9CSVRTIGlzIHRvbyBsb3chCisjZW5kaWYKKworI2RlZmluZSBfX0FSQ0hfSVJRX0VYSVRfSVJRU19ESVNBQkxFRCAxCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2hhcmR3YXJlLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vaGFyZHdhcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjM4MWQxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2hhcmR3YXJlLmgKQEAgLTAsMCArMSwxNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FTTV9IQVJEV0FSRV9ICisjZGVmaW5lIF9fQVNNX0hBUkRXQVJFX0gKKworI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2h3X2lycS5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2h3X2lycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzNGIzOTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vaHdfaXJxLmgKQEAgLTAsMCArMSwxNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQVJDSF9BUk1fSFdfSVJRX0gKKyNkZWZpbmUgX0FSQ0hfQVJNX0hXX0lSUV9ICisKKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vaWRlLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vaWRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjUyZDVjYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9pZGUuaApAQCAtMCwwICsxLDE1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQVNNQVJNX0lERV9ICisjZGVmaW5lIF9fQVNNQVJNX0lERV9ICisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2lvLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Nzk0MDIyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2lvLmgKQEAgLTAsMCArMSwxNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FTTV9BUk1fSU9fSAorI2RlZmluZSBfX0FTTV9BUk1fSU9fSAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9pb2N0bC5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2lvY3RsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU0NDZiNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9pb2N0bC5oCkBAIC0wLDAgKzEsMTIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pb2N0bC5oPgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2lvY3Rscy5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2lvY3Rscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZjgyYmMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vaW9jdGxzLmgKQEAgLTAsMCArMSw4OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FTTV9BUk1fSU9DVExTX0gKKyNkZWZpbmUgX19BU01fQVJNX0lPQ1RMU19ICisKKyNpbmNsdWRlIDxhc20vaW9jdGwuaD4KKworI2RlZmluZSBUQ0dFVFMgMHg1NDAxCisjZGVmaW5lIFRDU0VUUyAweDU0MDIKKyNkZWZpbmUgVENTRVRTVyAweDU0MDMKKyNkZWZpbmUgVENTRVRTRiAweDU0MDQKKyNkZWZpbmUgVENHRVRBIDB4NTQwNQorI2RlZmluZSBUQ1NFVEEgMHg1NDA2CisjZGVmaW5lIFRDU0VUQVcgMHg1NDA3CisjZGVmaW5lIFRDU0VUQUYgMHg1NDA4CisjZGVmaW5lIFRDU0JSSyAweDU0MDkKKyNkZWZpbmUgVENYT05DIDB4NTQwQQorI2RlZmluZSBUQ0ZMU0ggMHg1NDBCCisjZGVmaW5lIFRJT0NFWENMIDB4NTQwQworI2RlZmluZSBUSU9DTlhDTCAweDU0MEQKKyNkZWZpbmUgVElPQ1NDVFRZIDB4NTQwRQorI2RlZmluZSBUSU9DR1BHUlAgMHg1NDBGCisjZGVmaW5lIFRJT0NTUEdSUCAweDU0MTAKKyNkZWZpbmUgVElPQ09VVFEgMHg1NDExCisjZGVmaW5lIFRJT0NTVEkgMHg1NDEyCisjZGVmaW5lIFRJT0NHV0lOU1ogMHg1NDEzCisjZGVmaW5lIFRJT0NTV0lOU1ogMHg1NDE0CisjZGVmaW5lIFRJT0NNR0VUIDB4NTQxNQorI2RlZmluZSBUSU9DTUJJUyAweDU0MTYKKyNkZWZpbmUgVElPQ01CSUMgMHg1NDE3CisjZGVmaW5lIFRJT0NNU0VUIDB4NTQxOAorI2RlZmluZSBUSU9DR1NPRlRDQVIgMHg1NDE5CisjZGVmaW5lIFRJT0NTU09GVENBUiAweDU0MUEKKyNkZWZpbmUgRklPTlJFQUQgMHg1NDFCCisjZGVmaW5lIFRJT0NJTlEgRklPTlJFQUQKKyNkZWZpbmUgVElPQ0xJTlVYIDB4NTQxQworI2RlZmluZSBUSU9DQ09OUyAweDU0MUQKKyNkZWZpbmUgVElPQ0dTRVJJQUwgMHg1NDFFCisjZGVmaW5lIFRJT0NTU0VSSUFMIDB4NTQxRgorI2RlZmluZSBUSU9DUEtUIDB4NTQyMAorI2RlZmluZSBGSU9OQklPIDB4NTQyMQorI2RlZmluZSBUSU9DTk9UVFkgMHg1NDIyCisjZGVmaW5lIFRJT0NTRVREIDB4NTQyMworI2RlZmluZSBUSU9DR0VURCAweDU0MjQKKyNkZWZpbmUgVENTQlJLUCAweDU0MjUgIAorI2RlZmluZSBUSU9DU0JSSyAweDU0MjcgIAorI2RlZmluZSBUSU9DQ0JSSyAweDU0MjggIAorI2RlZmluZSBUSU9DR1NJRCAweDU0MjkgIAorI2RlZmluZSBUSU9DR1BUTiBfSU9SKCdUJywweDMwLCB1bnNpZ25lZCBpbnQpICAKKyNkZWZpbmUgVElPQ1NQVExDSyBfSU9XKCdUJywweDMxLCBpbnQpICAKKworI2RlZmluZSBGSU9OQ0xFWCAweDU0NTAgIAorI2RlZmluZSBGSU9DTEVYIDB4NTQ1MQorI2RlZmluZSBGSU9BU1lOQyAweDU0NTIKKyNkZWZpbmUgVElPQ1NFUkNPTkZJRyAweDU0NTMKKyNkZWZpbmUgVElPQ1NFUkdXSUxEIDB4NTQ1NAorI2RlZmluZSBUSU9DU0VSU1dJTEQgMHg1NDU1CisjZGVmaW5lIFRJT0NHTENLVFJNSU9TIDB4NTQ1NgorI2RlZmluZSBUSU9DU0xDS1RSTUlPUyAweDU0NTcKKyNkZWZpbmUgVElPQ1NFUkdTVFJVQ1QgMHg1NDU4ICAKKyNkZWZpbmUgVElPQ1NFUkdFVExTUiAweDU0NTkgIAorI2RlZmluZSBUSU9DU0VSR0VUTVVMVEkgMHg1NDVBICAKKyNkZWZpbmUgVElPQ1NFUlNFVE1VTFRJIDB4NTQ1QiAgCisKKyNkZWZpbmUgVElPQ01JV0FJVCAweDU0NUMgIAorI2RlZmluZSBUSU9DR0lDT1VOVCAweDU0NUQgIAorI2RlZmluZSBGSU9RU0laRSAweDU0NUUKKworI2RlZmluZSBUSU9DUEtUX0RBVEEgMAorI2RlZmluZSBUSU9DUEtUX0ZMVVNIUkVBRCAxCisjZGVmaW5lIFRJT0NQS1RfRkxVU0hXUklURSAyCisjZGVmaW5lIFRJT0NQS1RfU1RPUCA0CisjZGVmaW5lIFRJT0NQS1RfU1RBUlQgOAorI2RlZmluZSBUSU9DUEtUX05PU1RPUCAxNgorI2RlZmluZSBUSU9DUEtUX0RPU1RPUCAzMgorCisjZGVmaW5lIFRJT0NTRVJfVEVNVCAweDAxICAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vaXBjYnVmLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vaXBjYnVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU0NzUwNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9pcGNidWYuaApAQCAtMCwwICsxLDMwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQVNNQVJNX0lQQ0JVRl9ICisjZGVmaW5lIF9fQVNNQVJNX0lQQ0JVRl9ICisKK3N0cnVjdCBpcGM2NF9wZXJtCit7CisgX19rZXJuZWxfa2V5X3Qga2V5OworIF9fa2VybmVsX3VpZDMyX3QgdWlkOworIF9fa2VybmVsX2dpZDMyX3QgZ2lkOworIF9fa2VybmVsX3VpZDMyX3QgY3VpZDsKKyBfX2tlcm5lbF9naWQzMl90IGNnaWQ7CisgX19rZXJuZWxfbW9kZV90IG1vZGU7CisgdW5zaWduZWQgc2hvcnQgX19wYWQxOworIHVuc2lnbmVkIHNob3J0IHNlcTsKKyB1bnNpZ25lZCBzaG9ydCBfX3BhZDI7CisgdW5zaWduZWQgbG9uZyBfX3VudXNlZDE7CisgdW5zaWduZWQgbG9uZyBfX3VudXNlZDI7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9pcnEuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9pcnEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDg1YTIxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2lycS5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19BU01fQVJNX0lSUV9ICisjZGVmaW5lIF9fQVNNX0FSTV9JUlFfSAorCisjaW5jbHVkZSA8YXNtL2FyY2gvaXJxcy5oPgorCisjaWZuZGVmIGlycV9jYW5vbmljYWxpemUKKyNkZWZpbmUgaXJxX2Nhbm9uaWNhbGl6ZShpKSAoaSkKKyNlbmRpZgorCisjaWZuZGVmIE5SX0lSUVMKKyNkZWZpbmUgTlJfSVJRUyAxMjgKKyNlbmRpZgorCisjaWZuZGVmIE5PX0lSUQorI2RlZmluZSBOT19JUlEgKCh1bnNpZ25lZCBpbnQpKC0xKSkKKyNlbmRpZgorCitzdHJ1Y3QgaXJxYWN0aW9uOworCisjZGVmaW5lIF9fSVJRVF9GQUxFREdFIElSUV9UWVBFX0VER0VfRkFMTElORworI2RlZmluZSBfX0lSUVRfUklTRURHRSBJUlFfVFlQRV9FREdFX1JJU0lORworI2RlZmluZSBfX0lSUVRfTE9XTFZMIElSUV9UWVBFX0xFVkVMX0xPVworI2RlZmluZSBfX0lSUVRfSElHSExWTCBJUlFfVFlQRV9MRVZFTF9ISUdICisKKyNkZWZpbmUgSVJRVF9OT0VER0UgKDApCisjZGVmaW5lIElSUVRfUklTSU5HIChfX0lSUVRfUklTRURHRSkKKyNkZWZpbmUgSVJRVF9GQUxMSU5HIChfX0lSUVRfRkFMRURHRSkKKyNkZWZpbmUgSVJRVF9CT1RIRURHRSAoX19JUlFUX1JJU0VER0V8X19JUlFUX0ZBTEVER0UpCisjZGVmaW5lIElSUVRfTE9XIChfX0lSUVRfTE9XTFZMKQorI2RlZmluZSBJUlFUX0hJR0ggKF9fSVJRVF9ISUdITFZMKQorI2RlZmluZSBJUlFUX1BST0JFIElSUV9UWVBFX1BST0JFCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vbGlua2FnZS5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2xpbmthZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmI2MjhlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2xpbmthZ2UuaApAQCAtMCwwICsxLDE4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQVNNX0xJTktBR0VfSAorI2RlZmluZSBfX0FTTV9MSU5LQUdFX0gKKworI2RlZmluZSBfX0FMSUdOIC5hbGlnbiAwCisjZGVmaW5lIF9fQUxJR05fU1RSICIuYWxpZ24gMCIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vbG9jYWwuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9sb2NhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwZDZhNjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vbG9jYWwuaApAQCAtMCwwICsxLDEyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbG9jYWwuaD4KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9sb2Nrcy5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2xvY2tzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ4NDg1YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9sb2Nrcy5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19BU01fUFJPQ19MT0NLU19ICisjZGVmaW5lIF9fQVNNX1BST0NfTE9DS1NfSAorCisjaWYgX19MSU5VWF9BUk1fQVJDSF9fID49IDYKKworI2RlZmluZSBfX2Rvd25fb3AocHRyLGZhaWwpICAgKHsgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyggICAiQCBkb3duX29wXG4iICAiMToJbGRyZXgJbHIsIFslMF1cbiIgICIJc3ViCWxyLCBsciwgJTFcbiIgICIJc3RyZXgJaXAsIGxyLCBbJTBdXG4iICAiCXRlcQlpcCwgIzBcbiIgICIJYm5lCTFiXG4iICAiCXRlcQlsciwgIzBcbiIgICIJbW92bWkJaXAsICUwXG4iICAiCWJsbWkJIiAjZmFpbCAgIDogICA6ICJyIiAocHRyKSwgIkkiICgxKSAgIDogImlwIiwgImxyIiwgImNjIik7ICAgc21wX21iKCk7ICAgfSkKKworI2RlZmluZSBfX2Rvd25fb3BfcmV0KHB0cixmYWlsKSAgICh7ICAgdW5zaWduZWQgaW50IHJldDsgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyggICAiQCBkb3duX29wX3JldFxuIiAgIjE6CWxkcmV4CWxyLCBbJTFdXG4iICAiCXN1YglsciwgbHIsICUyXG4iICAiCXN0cmV4CWlwLCBsciwgWyUxXVxuIiAgIgl0ZXEJaXAsICMwXG4iICAiCWJuZQkxYlxuIiAgIgl0ZXEJbHIsICMwXG4iICAiCW1vdm1pCWlwLCAlMVxuIiAgIgltb3ZwbAlpcCwgIzBcbiIgICIJYmxtaQkiICNmYWlsICJcbiIgICIJbW92CSUwLCBpcCIgICA6ICI9JnIiIChyZXQpICAgOiAiciIgKHB0ciksICJJIiAoMSkgICA6ICJpcCIsICJsciIsICJjYyIpOyAgIHNtcF9tYigpOyAgIHJldDsgICB9KQorCisjZGVmaW5lIF9fdXBfb3AocHRyLHdha2UpICAgKHsgICBzbXBfbWIoKTsgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyggICAiQCB1cF9vcFxuIiAgIjE6CWxkcmV4CWxyLCBbJTBdXG4iICAiCWFkZAlsciwgbHIsICUxXG4iICAiCXN0cmV4CWlwLCBsciwgWyUwXVxuIiAgIgl0ZXEJaXAsICMwXG4iICAiCWJuZQkxYlxuIiAgIgljbXAJbHIsICMwXG4iICAiCW1vdmxlCWlwLCAlMFxuIiAgIglibGxlCSIgI3dha2UgICA6ICAgOiAiciIgKHB0ciksICJJIiAoMSkgICA6ICJpcCIsICJsciIsICJjYyIpOyAgIH0pCisKKyNkZWZpbmUgUldfTE9DS19CSUFTIDB4MDEwMDAwMDAKKyNkZWZpbmUgUldfTE9DS19CSUFTX1NUUiAiMHgwMTAwMDAwMCIKKworI2RlZmluZSBfX2Rvd25fb3Bfd3JpdGUocHRyLGZhaWwpICAgKHsgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyggICAiQCBkb3duX29wX3dyaXRlXG4iICAiMToJbGRyZXgJbHIsIFslMF1cbiIgICIJc3ViCWxyLCBsciwgJTFcbiIgICIJc3RyZXgJaXAsIGxyLCBbJTBdXG4iICAiCXRlcQlpcCwgIzBcbiIgICIJYm5lCTFiXG4iICAiCXRlcQlsciwgIzBcbiIgICIJbW92bmUJaXAsICUwXG4iICAiCWJsbmUJIiAjZmFpbCAgIDogICA6ICJyIiAocHRyKSwgIkkiIChSV19MT0NLX0JJQVMpICAgOiAiaXAiLCAibHIiLCAiY2MiKTsgICBzbXBfbWIoKTsgICB9KQorCisjZGVmaW5lIF9fdXBfb3Bfd3JpdGUocHRyLHdha2UpICAgKHsgICBzbXBfbWIoKTsgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyggICAiQCB1cF9vcF93cml0ZVxuIiAgIjE6CWxkcmV4CWxyLCBbJTBdXG4iICAiCWFkZHMJbHIsIGxyLCAlMVxuIiAgIglzdHJleAlpcCwgbHIsIFslMF1cbiIgICIJdGVxCWlwLCAjMFxuIiAgIglibmUJMWJcbiIgICIJbW92Y3MJaXAsICUwXG4iICAiCWJsY3MJIiAjd2FrZSAgIDogICA6ICJyIiAocHRyKSwgIkkiIChSV19MT0NLX0JJQVMpICAgOiAiaXAiLCAibHIiLCAiY2MiKTsgICB9KQorCisjZGVmaW5lIF9fZG93bl9vcF9yZWFkKHB0cixmYWlsKSAgIF9fZG93bl9vcChwdHIsIGZhaWwpCisKKyNkZWZpbmUgX191cF9vcF9yZWFkKHB0cix3YWtlKSAgICh7ICAgc21wX21iKCk7ICAgX19hc21fXyBfX3ZvbGF0aWxlX18oICAgIkAgdXBfb3BfcmVhZFxuIiAgIjE6CWxkcmV4CWxyLCBbJTBdXG4iICAiCWFkZAlsciwgbHIsICUxXG4iICAiCXN0cmV4CWlwLCBsciwgWyUwXVxuIiAgIgl0ZXEJaXAsICMwXG4iICAiCWJuZQkxYlxuIiAgIgl0ZXEJbHIsICMwXG4iICAiCW1vdmVxCWlwLCAlMFxuIiAgIglibGVxCSIgI3dha2UgICA6ICAgOiAiciIgKHB0ciksICJJIiAoMSkgICA6ICJpcCIsICJsciIsICJjYyIpOyAgIH0pCisKKyNlbHNlCisKKyNkZWZpbmUgX19kb3duX29wKHB0cixmYWlsKSAgICh7ICAgX19hc21fXyBfX3ZvbGF0aWxlX18oICAgIkAgZG93bl9vcFxuIiAgIgltcnMJaXAsIGNwc3JcbiIgICIJb3JyCWxyLCBpcCwgIzEyOFxuIiAgIgltc3IJY3Bzcl9jLCBsclxuIiAgIglsZHIJbHIsIFslMF1cbiIgICIJc3VicwlsciwgbHIsICUxXG4iICAiCXN0cglsciwgWyUwXVxuIiAgIgltc3IJY3Bzcl9jLCBpcFxuIiAgIgltb3ZtaQlpcCwgJTBcbiIgICIJYmxtaQkiICNmYWlsICAgOiAgIDogInIiIChwdHIpLCAiSSIgKDEpICAgOiAiaXAiLCAibHIiLCAiY2MiKTsgICBzbXBfbWIoKTsgICB9KQorCisjZGVmaW5lIF9fZG93bl9vcF9yZXQocHRyLGZhaWwpICAgKHsgICB1bnNpZ25lZCBpbnQgcmV0OyAgIF9fYXNtX18gX192b2xhdGlsZV9fKCAgICJAIGRvd25fb3BfcmV0XG4iICAiCW1ycwlpcCwgY3BzclxuIiAgIglvcnIJbHIsIGlwLCAjMTI4XG4iICAiCW1zcgljcHNyX2MsIGxyXG4iICAiCWxkcglsciwgWyUxXVxuIiAgIglzdWJzCWxyLCBsciwgJTJcbiIgICIJc3RyCWxyLCBbJTFdXG4iICAiCW1zcgljcHNyX2MsIGlwXG4iICAiCW1vdm1pCWlwLCAlMVxuIiAgIgltb3ZwbAlpcCwgIzBcbiIgICIJYmxtaQkiICNmYWlsICJcbiIgICIJbW92CSUwLCBpcCIgICA6ICI9JnIiIChyZXQpICAgOiAiciIgKHB0ciksICJJIiAoMSkgICA6ICJpcCIsICJsciIsICJjYyIpOyAgIHNtcF9tYigpOyAgIHJldDsgICB9KQorCisjZGVmaW5lIF9fdXBfb3AocHRyLHdha2UpICAgKHsgICBzbXBfbWIoKTsgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyggICAiQCB1cF9vcFxuIiAgIgltcnMJaXAsIGNwc3JcbiIgICIJb3JyCWxyLCBpcCwgIzEyOFxuIiAgIgltc3IJY3Bzcl9jLCBsclxuIiAgIglsZHIJbHIsIFslMF1cbiIgICIJYWRkcwlsciwgbHIsICUxXG4iICAiCXN0cglsciwgWyUwXVxuIiAgIgltc3IJY3Bzcl9jLCBpcFxuIiAgIgltb3ZsZQlpcCwgJTBcbiIgICIJYmxsZQkiICN3YWtlICAgOiAgIDogInIiIChwdHIpLCAiSSIgKDEpICAgOiAiaXAiLCAibHIiLCAiY2MiKTsgICB9KQorCisjZGVmaW5lIFJXX0xPQ0tfQklBUyAweDAxMDAwMDAwCisjZGVmaW5lIFJXX0xPQ0tfQklBU19TVFIgIjB4MDEwMDAwMDAiCisKKyNkZWZpbmUgX19kb3duX29wX3dyaXRlKHB0cixmYWlsKSAgICh7ICAgX19hc21fXyBfX3ZvbGF0aWxlX18oICAgIkAgZG93bl9vcF93cml0ZVxuIiAgIgltcnMJaXAsIGNwc3JcbiIgICIJb3JyCWxyLCBpcCwgIzEyOFxuIiAgIgltc3IJY3Bzcl9jLCBsclxuIiAgIglsZHIJbHIsIFslMF1cbiIgICIJc3VicwlsciwgbHIsICUxXG4iICAiCXN0cglsciwgWyUwXVxuIiAgIgltc3IJY3Bzcl9jLCBpcFxuIiAgIgltb3ZuZQlpcCwgJTBcbiIgICIJYmxuZQkiICNmYWlsICAgOiAgIDogInIiIChwdHIpLCAiSSIgKFJXX0xPQ0tfQklBUykgICA6ICJpcCIsICJsciIsICJjYyIpOyAgIHNtcF9tYigpOyAgIH0pCisKKyNkZWZpbmUgX191cF9vcF93cml0ZShwdHIsd2FrZSkgICAoeyAgIF9fYXNtX18gX192b2xhdGlsZV9fKCAgICJAIHVwX29wX3dyaXRlXG4iICAiCW1ycwlpcCwgY3BzclxuIiAgIglvcnIJbHIsIGlwLCAjMTI4XG4iICAiCW1zcgljcHNyX2MsIGxyXG4iICAiCWxkcglsciwgWyUwXVxuIiAgIglhZGRzCWxyLCBsciwgJTFcbiIgICIJc3RyCWxyLCBbJTBdXG4iICAiCW1zcgljcHNyX2MsIGlwXG4iICAiCW1vdmNzCWlwLCAlMFxuIiAgIglibGNzCSIgI3dha2UgICA6ICAgOiAiciIgKHB0ciksICJJIiAoUldfTE9DS19CSUFTKSAgIDogImlwIiwgImxyIiwgImNjIik7ICAgc21wX21iKCk7ICAgfSkKKworI2RlZmluZSBfX2Rvd25fb3BfcmVhZChwdHIsZmFpbCkgICBfX2Rvd25fb3AocHRyLCBmYWlsKQorCisjZGVmaW5lIF9fdXBfb3BfcmVhZChwdHIsd2FrZSkgICAoeyAgIHNtcF9tYigpOyAgIF9fYXNtX18gX192b2xhdGlsZV9fKCAgICJAIHVwX29wX3JlYWRcbiIgICIJbXJzCWlwLCBjcHNyXG4iICAiCW9ycglsciwgaXAsICMxMjhcbiIgICIJbXNyCWNwc3JfYywgbHJcbiIgICIJbGRyCWxyLCBbJTBdXG4iICAiCWFkZHMJbHIsIGxyLCAlMVxuIiAgIglzdHIJbHIsIFslMF1cbiIgICIJbXNyCWNwc3JfYywgaXBcbiIgICIJbW92ZXEJaXAsICUwXG4iICAiCWJsZXEJIiAjd2FrZSAgIDogICA6ICJyIiAocHRyKSwgIkkiICgxKSAgIDogImlwIiwgImxyIiwgImNjIik7ICAgfSkKKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL21jMTQ2ODE4cnRjLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vbWMxNDY4MThydGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTg2NzI0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL21jMTQ2ODE4cnRjLmgKQEAgLTAsMCArMSwyNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQVNNX01DMTQ2ODE4UlRDX0gKKyNkZWZpbmUgX0FTTV9NQzE0NjgxOFJUQ19ICisKKyNpbmNsdWRlIDxhc20vYXJjaC9pcnFzLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNpZm5kZWYgUlRDX1BPUlQKKyNkZWZpbmUgUlRDX1BPUlQoeCkgKDB4NzAgKyAoeCkpCisjZGVmaW5lIFJUQ19BTFdBWVNfQkNEIDEgIAorI2VuZGlmCisKKyNkZWZpbmUgQ01PU19SRUFEKGFkZHIpICh7ICBvdXRiX3AoKGFkZHIpLFJUQ19QT1JUKDApKTsgIGluYl9wKFJUQ19QT1JUKDEpKTsgIH0pCisjZGVmaW5lIENNT1NfV1JJVEUodmFsLCBhZGRyKSAoeyAgb3V0Yl9wKChhZGRyKSxSVENfUE9SVCgwKSk7ICBvdXRiX3AoKHZhbCksUlRDX1BPUlQoMSkpOyAgfSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vbWVtb3J5LmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vbWVtb3J5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzExMzdhNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9tZW1vcnkuaApAQCAtMCwwICsxLDk1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQVNNX0FSTV9NRU1PUllfSAorI2RlZmluZSBfX0FTTV9BUk1fTUVNT1JZX0gKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNkZWZpbmUgVUwoeCkgKHgjI1VMKQorI2Vsc2UKKyNkZWZpbmUgVUwoeCkgKHgpCisjZW5kaWYKKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbWVtb3J5Lmg+CisjaW5jbHVkZSA8YXNtL3NpemVzLmg+CisKKyNpZm5kZWYgVEFTS19TSVpFCisjZGVmaW5lIFRBU0tfU0laRSAoQ09ORklHX0RSQU1fU0laRSkKKyNlbmRpZgorCisjaWZuZGVmIFRBU0tfVU5NQVBQRURfQkFTRQorI2RlZmluZSBUQVNLX1VOTUFQUEVEX0JBU0UgVUwoMHgwMDAwMDAwMCkKKyNlbmRpZgorCisjaWZuZGVmIFBIWVNfT0ZGU0VUCisjZGVmaW5lIFBIWVNfT0ZGU0VUIChDT05GSUdfRFJBTV9CQVNFKQorI2VuZGlmCisKKyNpZm5kZWYgRU5EX01FTQorI2RlZmluZSBFTkRfTUVNIChDT05GSUdfRFJBTV9CQVNFICsgQ09ORklHX0RSQU1fU0laRSkKKyNlbmRpZgorCisjaWZuZGVmIFBBR0VfT0ZGU0VUCisjZGVmaW5lIFBBR0VfT0ZGU0VUIChQSFlTX09GRlNFVCkKKyNlbmRpZgorCisjZGVmaW5lIE1PRFVMRV9FTkQgKEVORF9NRU0pCisjZGVmaW5lIE1PRFVMRV9TVEFSVCAoUEhZU19PRkZTRVQpCisKKyNpZm5kZWYgQ09OU0lTVEVOVF9ETUFfU0laRQorI2RlZmluZSBDT05TSVNURU5UX0RNQV9TSVpFIFNaXzJNCisjZW5kaWYKKworI2lmbmRlZiBfX3ZpcnRfdG9fcGh5cworI2RlZmluZSBfX3ZpcnRfdG9fcGh5cyh4KSAoKHgpIC0gUEFHRV9PRkZTRVQgKyBQSFlTX09GRlNFVCkKKyNkZWZpbmUgX19waHlzX3RvX3ZpcnQoeCkgKCh4KSAtIFBIWVNfT0ZGU0VUICsgUEFHRV9PRkZTRVQpCisjZW5kaWYKKworI2RlZmluZSBfX3BoeXNfdG9fcGZuKHBhZGRyKSAoKHBhZGRyKSA+PiBQQUdFX1NISUZUKQorI2RlZmluZSBfX3Bmbl90b19waHlzKHBmbikgKChwZm4pIDw8IFBBR0VfU0hJRlQpCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpZm5kZWYgSVNBX0RNQV9USFJFU0hPTEQKKyNkZWZpbmUgSVNBX0RNQV9USFJFU0hPTEQgKDB4ZmZmZmZmZmZVTEwpCisjZW5kaWYKKworI2lmbmRlZiBhcmNoX2FkanVzdF96b25lcworI2RlZmluZSBhcmNoX2FkanVzdF96b25lcyhub2RlLHNpemUsaG9sZXMpIGRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisjZGVmaW5lIFBIWVNfUEZOX09GRlNFVCAoUEhZU19PRkZTRVQgPj4gUEFHRV9TSElGVCkKKworI2RlZmluZSBfX3BhKHgpIF9fdmlydF90b19waHlzKCh1bnNpZ25lZCBsb25nKSh4KSkKKyNkZWZpbmUgX192YSh4KSAoKHZvaWQgKilfX3BoeXNfdG9fdmlydCgodW5zaWduZWQgbG9uZykoeCkpKQorI2RlZmluZSBwZm5fdG9fa2FkZHIocGZuKSBfX3ZhKChwZm4pIDw8IFBBR0VfU0hJRlQpCisjZGVmaW5lIEFSQ0hfUEZOX09GRlNFVCBQSFlTX1BGTl9PRkZTRVQKKyNkZWZpbmUgcGZuX3ZhbGlkKHBmbikgKChwZm4pID49IFBIWVNfUEZOX09GRlNFVCAmJiAocGZuKSA8IChQSFlTX1BGTl9PRkZTRVQgKyBtYXhfbWFwbnIpKQorI2RlZmluZSB2aXJ0X3RvX3BhZ2Uoa2FkZHIpIHBmbl90b19wYWdlKF9fcGEoa2FkZHIpID4+IFBBR0VfU0hJRlQpCisjZGVmaW5lIHZpcnRfYWRkcl92YWxpZChrYWRkcikgKCh1bnNpZ25lZCBsb25nKShrYWRkcikgPj0gUEFHRV9PRkZTRVQgJiYgKHVuc2lnbmVkIGxvbmcpKGthZGRyKSA8ICh1bnNpZ25lZCBsb25nKWhpZ2hfbWVtb3J5KQorI2RlZmluZSBQSFlTX1RPX05JRChhZGRyKSAoMCkKKyNkZWZpbmUgcGFnZV90b19waHlzKHBhZ2UpIChwYWdlX3RvX3BmbihwYWdlKSA8PCBQQUdFX1NISUZUKQorI2lmbmRlZiBfX2FyY2hfcGFnZV90b19kbWEKKyNkZWZpbmUgcGFnZV90b19kbWEoZGV2LCBwYWdlKSAoKGRtYV9hZGRyX3QpX192aXJ0X3RvX2J1cygodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MocGFnZSkpKQorI2RlZmluZSBkbWFfdG9fdmlydChkZXYsIGFkZHIpICgodm9pZCAqKV9fYnVzX3RvX3ZpcnQoYWRkcikpCisjZGVmaW5lIHZpcnRfdG9fZG1hKGRldiwgYWRkcikgKChkbWFfYWRkcl90KV9fdmlydF90b19idXMoKHVuc2lnbmVkIGxvbmcpKGFkZHIpKSkKKyNlbHNlCisjZGVmaW5lIHBhZ2VfdG9fZG1hKGRldiwgcGFnZSkgKF9fYXJjaF9wYWdlX3RvX2RtYShkZXYsIHBhZ2UpKQorI2RlZmluZSBkbWFfdG9fdmlydChkZXYsIGFkZHIpIChfX2FyY2hfZG1hX3RvX3ZpcnQoZGV2LCBhZGRyKSkKKyNkZWZpbmUgdmlydF90b19kbWEoZGV2LCBhZGRyKSAoX19hcmNoX3ZpcnRfdG9fZG1hKGRldiwgYWRkcikpCisjZW5kaWYKKyNpZm5kZWYgYXJjaF9pc19jb2hlcmVudAorI2RlZmluZSBhcmNoX2lzX2NvaGVyZW50KCkgMAorI2VuZGlmCisjZW5kaWYKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9tZW1vcnlfbW9kZWwuaD4KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL21tYW4uaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9tbWFuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY3MWQxYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9tbWFuLmgKQEAgLTAsMCArMSwyOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FSTV9NTUFOX0hfXworI2RlZmluZSBfX0FSTV9NTUFOX0hfXworCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbW1hbi5oPgorCisjZGVmaW5lIE1BUF9HUk9XU0RPV04gMHgwMTAwICAKKyNkZWZpbmUgTUFQX0RFTllXUklURSAweDA4MDAgIAorI2RlZmluZSBNQVBfRVhFQ1VUQUJMRSAweDEwMDAgIAorI2RlZmluZSBNQVBfTE9DS0VEIDB4MjAwMCAgCisjZGVmaW5lIE1BUF9OT1JFU0VSVkUgMHg0MDAwICAKKyNkZWZpbmUgTUFQX1BPUFVMQVRFIDB4ODAwMCAgCisjZGVmaW5lIE1BUF9OT05CTE9DSyAweDEwMDAwICAKKworI2RlZmluZSBNQ0xfQ1VSUkVOVCAxICAKKyNkZWZpbmUgTUNMX0ZVVFVSRSAyICAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vbW9kdWxlLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vbW9kdWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhiODA2YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9tb2R1bGUuaApAQCAtMCwwICsxLDI2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01fQVJNX01PRFVMRV9ICisjZGVmaW5lIF9BU01fQVJNX01PRFVMRV9ICisKK3N0cnVjdCBtb2RfYXJjaF9zcGVjaWZpYworeworIGludCBmb287Cit9OworCisjZGVmaW5lIEVsZl9TaGRyIEVsZjMyX1NoZHIKKyNkZWZpbmUgRWxmX1N5bSBFbGYzMl9TeW0KKyNkZWZpbmUgRWxmX0VoZHIgRWxmMzJfRWhkcgorCisjZGVmaW5lIE1PRFVMRV9BUkNIX1ZFUk1BR0lDICJBUk12IiBfX3N0cmluZ2lmeShfX0xJTlVYX0FSTV9BUkNIX18pICIgIgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9tc2didWYuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9tc2didWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGQ2MTRjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL21zZ2J1Zi5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FTTUFSTV9NU0dCVUZfSAorI2RlZmluZSBfQVNNQVJNX01TR0JVRl9ICisKK3N0cnVjdCBtc3FpZDY0X2RzIHsKKyBzdHJ1Y3QgaXBjNjRfcGVybSBtc2dfcGVybTsKKyBfX2tlcm5lbF90aW1lX3QgbXNnX3N0aW1lOworIHVuc2lnbmVkIGxvbmcgX191bnVzZWQxOworIF9fa2VybmVsX3RpbWVfdCBtc2dfcnRpbWU7CisgdW5zaWduZWQgbG9uZyBfX3VudXNlZDI7CisgX19rZXJuZWxfdGltZV90IG1zZ19jdGltZTsKKyB1bnNpZ25lZCBsb25nIF9fdW51c2VkMzsKKyB1bnNpZ25lZCBsb25nIG1zZ19jYnl0ZXM7CisgdW5zaWduZWQgbG9uZyBtc2dfcW51bTsKKyB1bnNpZ25lZCBsb25nIG1zZ19xYnl0ZXM7CisgX19rZXJuZWxfcGlkX3QgbXNnX2xzcGlkOworIF9fa2VybmVsX3BpZF90IG1zZ19scnBpZDsKKyB1bnNpZ25lZCBsb25nIF9fdW51c2VkNDsKKyB1bnNpZ25lZCBsb25nIF9fdW51c2VkNTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL210ZC14aXAuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9tdGQteGlwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM1M2Y2ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9tdGQteGlwLmgKQEAgLTAsMCArMSwyMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FSTV9NVERfWElQX0hfXworI2RlZmluZSBfX0FSTV9NVERfWElQX0hfXworCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbXRkLXhpcC5oPgorCisjZGVmaW5lIHhpcF9pcHJlZmV0Y2goKSBkbyB7IGFzbSB2b2xhdGlsZSAoIi5yZXAgODsgbm9wOyAuZW5kciIpOyB9IHdoaWxlICgwKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9wYWdlLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vcGFnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ODAzNDMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vcGFnZS5oCkBAIC0wLDAgKzEsMTkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FTTUFSTV9QQUdFX0gKKyNkZWZpbmUgX0FTTUFSTV9QQUdFX0gKKworI2RlZmluZSBQQUdFX1NISUZUIDEyCisjZGVmaW5lIFBBR0VfU0laRSAoMVVMIDw8IFBBR0VfU0hJRlQpCisjZGVmaW5lIFBBR0VfTUFTSyAofihQQUdFX1NJWkUtMSkpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3BhcmFtLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODE0ZmUzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3BhcmFtLmgKQEAgLTAsMCArMSwyNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FTTV9QQVJBTV9ICisjZGVmaW5lIF9fQVNNX1BBUkFNX0gKKworI2RlZmluZSBIWiAxMDAKKworI2RlZmluZSBFWEVDX1BBR0VTSVpFIDQwOTYKKworI2lmbmRlZiBOT0dST1VQCisjZGVmaW5lIE5PR1JPVVAgKC0xKQorI2VuZGlmCisKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9wZXJjcHUuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9wZXJjcHUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTAwMzQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3BlcmNwdS5oCkBAIC0wLDAgKzEsMTcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19BUk1fUEVSQ1BVCisjZGVmaW5lIF9fQVJNX1BFUkNQVQorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGVyY3B1Lmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3BnYWxsb2MuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9wZ2FsbG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ0NWU2NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9wZ2FsbG9jLmgKQEAgLTAsMCArMSwyMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQVNNQVJNX1BHQUxMT0NfSAorI2RlZmluZSBfQVNNQVJNX1BHQUxMT0NfSAorCisjaW5jbHVkZSA8YXNtL2RvbWFpbi5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLWh3ZGVmLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CisKKyNkZWZpbmUgY2hlY2tfcGd0X2NhY2hlKCkgZG8geyB9IHdoaWxlICgwKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9wZ3RhYmxlLWh3ZGVmLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vcGd0YWJsZS1od2RlZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3ZTg2NzUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vcGd0YWJsZS1od2RlZi5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FTTUFSTV9QR1RBQkxFX0hXREVGX0gKKyNkZWZpbmUgX0FTTUFSTV9QR1RBQkxFX0hXREVGX0gKKworI2RlZmluZSBQTURfVFlQRV9NQVNLICgzIDw8IDApCisjZGVmaW5lIFBNRF9UWVBFX0ZBVUxUICgwIDw8IDApCisjZGVmaW5lIFBNRF9UWVBFX1RBQkxFICgxIDw8IDApCisjZGVmaW5lIFBNRF9UWVBFX1NFQ1QgKDIgPDwgMCkKKyNkZWZpbmUgUE1EX0JJVDQgKDEgPDwgNCkKKyNkZWZpbmUgUE1EX0RPTUFJTih4KSAoKHgpIDw8IDUpCisjZGVmaW5lIFBNRF9QUk9URUNUSU9OICgxIDw8IDkpICAKKworI2RlZmluZSBQTURfU0VDVF9CVUZGRVJBQkxFICgxIDw8IDIpCisjZGVmaW5lIFBNRF9TRUNUX0NBQ0hFQUJMRSAoMSA8PCAzKQorI2RlZmluZSBQTURfU0VDVF9YTiAoMSA8PCA0KSAgCisjZGVmaW5lIFBNRF9TRUNUX0FQX1dSSVRFICgxIDw8IDEwKQorI2RlZmluZSBQTURfU0VDVF9BUF9SRUFEICgxIDw8IDExKQorI2RlZmluZSBQTURfU0VDVF9URVgoeCkgKCh4KSA8PCAxMikgIAorI2RlZmluZSBQTURfU0VDVF9BUFggKDEgPDwgMTUpICAKKyNkZWZpbmUgUE1EX1NFQ1RfUyAoMSA8PCAxNikgIAorI2RlZmluZSBQTURfU0VDVF9uRyAoMSA8PCAxNykgIAorI2RlZmluZSBQTURfU0VDVF9TVVBFUiAoMSA8PCAxOCkgIAorCisjZGVmaW5lIFBNRF9TRUNUX1VOQ0FDSEVEICgwKQorI2RlZmluZSBQTURfU0VDVF9CVUZGRVJFRCAoUE1EX1NFQ1RfQlVGRkVSQUJMRSkKKyNkZWZpbmUgUE1EX1NFQ1RfV1QgKFBNRF9TRUNUX0NBQ0hFQUJMRSkKKyNkZWZpbmUgUE1EX1NFQ1RfV0IgKFBNRF9TRUNUX0NBQ0hFQUJMRSB8IFBNRF9TRUNUX0JVRkZFUkFCTEUpCisjZGVmaW5lIFBNRF9TRUNUX01JTklDQUNIRSAoUE1EX1NFQ1RfVEVYKDEpIHwgUE1EX1NFQ1RfQ0FDSEVBQkxFKQorI2RlZmluZSBQTURfU0VDVF9XQldBIChQTURfU0VDVF9URVgoMSkgfCBQTURfU0VDVF9DQUNIRUFCTEUgfCBQTURfU0VDVF9CVUZGRVJBQkxFKQorI2RlZmluZSBQTURfU0VDVF9OT05TSEFSRURfREVWIChQTURfU0VDVF9URVgoMikpCisKKyNkZWZpbmUgUFRFX1RZUEVfTUFTSyAoMyA8PCAwKQorI2RlZmluZSBQVEVfVFlQRV9GQVVMVCAoMCA8PCAwKQorI2RlZmluZSBQVEVfVFlQRV9MQVJHRSAoMSA8PCAwKQorI2RlZmluZSBQVEVfVFlQRV9TTUFMTCAoMiA8PCAwKQorI2RlZmluZSBQVEVfVFlQRV9FWFQgKDMgPDwgMCkgIAorI2RlZmluZSBQVEVfQlVGRkVSQUJMRSAoMSA8PCAyKQorI2RlZmluZSBQVEVfQ0FDSEVBQkxFICgxIDw8IDMpCisKKyNkZWZpbmUgUFRFX0VYVF9YTiAoMSA8PCAwKSAgCisjZGVmaW5lIFBURV9FWFRfQVBfTUFTSyAoMyA8PCA0KQorI2RlZmluZSBQVEVfRVhUX0FQMCAoMSA8PCA0KQorI2RlZmluZSBQVEVfRVhUX0FQMSAoMiA8PCA0KQorI2RlZmluZSBQVEVfRVhUX0FQX1VOT19TUk8gKDAgPDwgNCkKKyNkZWZpbmUgUFRFX0VYVF9BUF9VTk9fU1JXIChQVEVfRVhUX0FQMCkKKyNkZWZpbmUgUFRFX0VYVF9BUF9VUk9fU1JXIChQVEVfRVhUX0FQMSkKKyNkZWZpbmUgUFRFX0VYVF9BUF9VUldfU1JXIChQVEVfRVhUX0FQMXxQVEVfRVhUX0FQMCkKKyNkZWZpbmUgUFRFX0VYVF9URVgoeCkgKCh4KSA8PCA2KSAgCisjZGVmaW5lIFBURV9FWFRfQVBYICgxIDw8IDkpICAKKyNkZWZpbmUgUFRFX0VYVF9DT0hFUkVOVCAoMSA8PCA5KSAgCisjZGVmaW5lIFBURV9FWFRfU0hBUkVEICgxIDw8IDEwKSAgCisjZGVmaW5lIFBURV9FWFRfTkcgKDEgPDwgMTEpICAKKworI2RlZmluZSBQVEVfU01BTExfQVBfTUFTSyAoMHhmZiA8PCA0KQorI2RlZmluZSBQVEVfU01BTExfQVBfVU5PX1NSTyAoMHgwMCA8PCA0KQorI2RlZmluZSBQVEVfU01BTExfQVBfVU5PX1NSVyAoMHg1NSA8PCA0KQorI2RlZmluZSBQVEVfU01BTExfQVBfVVJPX1NSVyAoMHhhYSA8PCA0KQorI2RlZmluZSBQVEVfU01BTExfQVBfVVJXX1NSVyAoMHhmZiA8PCA0KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9wZ3RhYmxlLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vcGd0YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiYWM2MTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vcGd0YWJsZS5oCkBAIC0wLDAgKzEsMjAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FTTUFSTV9QR1RBQkxFX0gKKyNkZWZpbmUgX0FTTUFSTV9QR1RBQkxFX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljLzRsZXZlbC1maXh1cC5oPgorI2luY2x1ZGUgPGFzbS9wcm9jLWZucy5oPgorCisjaW5jbHVkZSAicGd0YWJsZS1ub21tdS5oIgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9wb2xsLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vcG9sbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1YjgwYTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vcG9sbC5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19BU01BUk1fUE9MTF9ICisjZGVmaW5lIF9fQVNNQVJNX1BPTExfSAorCisjZGVmaW5lIFBPTExJTiAweDAwMDEKKyNkZWZpbmUgUE9MTFBSSSAweDAwMDIKKyNkZWZpbmUgUE9MTE9VVCAweDAwMDQKKyNkZWZpbmUgUE9MTEVSUiAweDAwMDgKKyNkZWZpbmUgUE9MTEhVUCAweDAwMTAKKyNkZWZpbmUgUE9MTE5WQUwgMHgwMDIwCisKKyNkZWZpbmUgUE9MTFJETk9STSAweDAwNDAKKyNkZWZpbmUgUE9MTFJEQkFORCAweDAwODAKKyNkZWZpbmUgUE9MTFdSTk9STSAweDAxMDAKKyNkZWZpbmUgUE9MTFdSQkFORCAweDAyMDAKKyNkZWZpbmUgUE9MTE1TRyAweDA0MDAKKyNkZWZpbmUgUE9MTFJFTU9WRSAweDEwMDAKKyNkZWZpbmUgUE9MTFJESFVQIDB4MjAwMAorCitzdHJ1Y3QgcG9sbGZkIHsKKyBpbnQgZmQ7Cisgc2hvcnQgZXZlbnRzOworIHNob3J0IHJldmVudHM7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9wb3NpeF90eXBlcy5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3Bvc2l4X3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM4NTIxNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9wb3NpeF90eXBlcy5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19BUkNIX0FSTV9QT1NJWF9UWVBFU19ICisjZGVmaW5lIF9fQVJDSF9BUk1fUE9TSVhfVFlQRVNfSAorCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX19rZXJuZWxfaW5vX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fa2VybmVsX21vZGVfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgX19rZXJuZWxfbmxpbmtfdDsKK3R5cGVkZWYgbG9uZyBfX2tlcm5lbF9vZmZfdDsKK3R5cGVkZWYgaW50IF9fa2VybmVsX3BpZF90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX2tlcm5lbF9pcGNfcGlkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fa2VybmVsX3VpZF90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX2tlcm5lbF9naWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50IF9fa2VybmVsX3NpemVfdDsKK3R5cGVkZWYgaW50IF9fa2VybmVsX3NzaXplX3Q7Cit0eXBlZGVmIGludCBfX2tlcm5lbF9wdHJkaWZmX3Q7Cit0eXBlZGVmIGxvbmcgX19rZXJuZWxfdGltZV90OwordHlwZWRlZiBsb25nIF9fa2VybmVsX3N1c2Vjb25kc190OwordHlwZWRlZiBsb25nIF9fa2VybmVsX2Nsb2NrX3Q7Cit0eXBlZGVmIGludCBfX2tlcm5lbF90aW1lcl90OwordHlwZWRlZiBpbnQgX19rZXJuZWxfY2xvY2tpZF90OwordHlwZWRlZiBpbnQgX19rZXJuZWxfZGFkZHJfdDsKK3R5cGVkZWYgY2hhciAqIF9fa2VybmVsX2NhZGRyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fa2VybmVsX3VpZDE2X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fa2VybmVsX2dpZDE2X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludCBfX2tlcm5lbF91aWQzMl90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgX19rZXJuZWxfZ2lkMzJfdDsKKwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX2tlcm5lbF9vbGRfdWlkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fa2VybmVsX29sZF9naWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgX19rZXJuZWxfb2xkX2Rldl90OworCisjaWZkZWYgX19HTlVDX18KK3R5cGVkZWYgbG9uZyBsb25nIF9fa2VybmVsX2xvZmZfdDsKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCB7CisjaWZkZWYgX19VU0VfQUxMCisgaW50IHZhbFsyXTsKKyNlbHNlCisgaW50IF9fdmFsWzJdOworI2VuZGlmCit9IF9fa2VybmVsX2ZzaWRfdDsKKworI2lmICFkZWZpbmVkKF9fR0xJQkNfXykgfHwgX19HTElCQ19fIDwgMgorCisjdW5kZWYgX19GRF9TRVQKKyNkZWZpbmUgX19GRF9TRVQoZmQsIGZkc2V0cCkgICAoKChmZF9zZXQgKikoZmRzZXRwKSktPmZkc19iaXRzWyhmZCkgPj4gNV0gfD0gKDE8PCgoZmQpICYgMzEpKSkKKworI3VuZGVmIF9fRkRfQ0xSCisjZGVmaW5lIF9fRkRfQ0xSKGZkLCBmZHNldHApICAgKCgoZmRfc2V0ICopKGZkc2V0cCkpLT5mZHNfYml0c1soZmQpID4+IDVdICY9IH4oMTw8KChmZCkgJiAzMSkpKQorCisjdW5kZWYgX19GRF9JU1NFVAorI2RlZmluZSBfX0ZEX0lTU0VUKGZkLCBmZHNldHApICAgKCgoKGZkX3NldCAqKShmZHNldHApKS0+ZmRzX2JpdHNbKGZkKSA+PiA1XSAmICgxPDwoKGZkKSAmIDMxKSkpICE9IDApCisKKyN1bmRlZiBfX0ZEX1pFUk8KKyNkZWZpbmUgX19GRF9aRVJPKGZkc2V0cCkgICAobWVtc2V0IChmZHNldHAsIDAsIHNpemVvZiAoKihmZF9zZXQgKikoZmRzZXRwKSkpKQorCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vcHJvYy1mbnMuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9wcm9jLWZucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhNTYwZDAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vcHJvYy1mbnMuaApAQCAtMCwwICsxLDE1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQVNNX1BST0NGTlNfSAorI2RlZmluZSBfX0FTTV9QUk9DRk5TX0gKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vcHJvY2Vzc29yLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vcHJvY2Vzc29yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkzY2JjMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9wcm9jZXNzb3IuaApAQCAtMCwwICsxLDE3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQVNNX0FSTV9QUk9DRVNTT1JfSAorI2RlZmluZSBfX0FTTV9BUk1fUFJPQ0VTU09SX0gKKworI2RlZmluZSBjdXJyZW50X3RleHRfYWRkcigpICh7IF9fbGFiZWxfXyBfbDsgX2w6ICYmX2w7fSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vcHJvY2luZm8uaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9wcm9jaW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NzRlMGIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vcHJvY2luZm8uaApAQCAtMCwwICsxLDUxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQVNNX1BST0NJTkZPX0gKKyNkZWZpbmUgX19BU01fUFJPQ0lORk9fSAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCitzdHJ1Y3QgY3B1X3RsYl9mbnM7CitzdHJ1Y3QgY3B1X3VzZXJfZm5zOworc3RydWN0IGNwdV9jYWNoZV9mbnM7CitzdHJ1Y3QgcHJvY2Vzc29yOworCitzdHJ1Y3QgcHJvY19pbmZvX2xpc3QgeworIHVuc2lnbmVkIGludCBjcHVfdmFsOworIHVuc2lnbmVkIGludCBjcHVfbWFzazsKKyB1bnNpZ25lZCBsb25nIF9fY3B1X21tX21tdV9mbGFnczsKKyB1bnNpZ25lZCBsb25nIF9fY3B1X2lvX21tdV9mbGFnczsKKyB1bnNpZ25lZCBsb25nIF9fY3B1X2ZsdXNoOworIGNvbnN0IGNoYXIgKmFyY2hfbmFtZTsKKyBjb25zdCBjaGFyICplbGZfbmFtZTsKKyB1bnNpZ25lZCBpbnQgZWxmX2h3Y2FwOworIGNvbnN0IGNoYXIgKmNwdV9uYW1lOworIHN0cnVjdCBwcm9jZXNzb3IgKnByb2M7Cisgc3RydWN0IGNwdV90bGJfZm5zICp0bGI7Cisgc3RydWN0IGNwdV91c2VyX2ZucyAqdXNlcjsKKyBzdHJ1Y3QgY3B1X2NhY2hlX2ZucyAqY2FjaGU7Cit9OworCisjZW5kaWYKKworI2RlZmluZSBIV0NBUF9TV1AgMQorI2RlZmluZSBIV0NBUF9IQUxGIDIKKyNkZWZpbmUgSFdDQVBfVEhVTUIgNAorI2RlZmluZSBIV0NBUF8yNkJJVCA4ICAKKyNkZWZpbmUgSFdDQVBfRkFTVF9NVUxUIDE2CisjZGVmaW5lIEhXQ0FQX0ZQQSAzMgorI2RlZmluZSBIV0NBUF9WRlAgNjQKKyNkZWZpbmUgSFdDQVBfRURTUCAxMjgKKyNkZWZpbmUgSFdDQVBfSkFWQSAyNTYKKyNkZWZpbmUgSFdDQVBfSVdNTVhUIDUxMgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9wdHJhY2UuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9wdHJhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmRmZWExCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3B0cmFjZS5oCkBAIC0wLDAgKzEsOTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19BU01fQVJNX1BUUkFDRV9ICisjZGVmaW5lIF9fQVNNX0FSTV9QVFJBQ0VfSAorCisjZGVmaW5lIFBUUkFDRV9HRVRSRUdTIDEyCisjZGVmaW5lIFBUUkFDRV9TRVRSRUdTIDEzCisjZGVmaW5lIFBUUkFDRV9HRVRGUFJFR1MgMTQKKyNkZWZpbmUgUFRSQUNFX1NFVEZQUkVHUyAxNQorCisjZGVmaW5lIFBUUkFDRV9HRVRXTU1YUkVHUyAxOAorI2RlZmluZSBQVFJBQ0VfU0VUV01NWFJFR1MgMTkKKworI2RlZmluZSBQVFJBQ0VfT0xEU0VUT1BUSU9OUyAyMQorCisjZGVmaW5lIFBUUkFDRV9HRVRfVEhSRUFEX0FSRUEgMjIKKworI2RlZmluZSBQVFJBQ0VfU0VUX1NZU0NBTEwgMjMKKworI2RlZmluZSBQVFJBQ0VfR0VUQ1JVTkNIUkVHUyAyNQorI2RlZmluZSBQVFJBQ0VfU0VUQ1JVTkNIUkVHUyAyNgorCisjZGVmaW5lIFVTUjI2X01PREUgMHgwMDAwMDAwMAorI2RlZmluZSBGSVEyNl9NT0RFIDB4MDAwMDAwMDEKKyNkZWZpbmUgSVJRMjZfTU9ERSAweDAwMDAwMDAyCisjZGVmaW5lIFNWQzI2X01PREUgMHgwMDAwMDAwMworI2RlZmluZSBVU1JfTU9ERSAweDAwMDAwMDEwCisjZGVmaW5lIEZJUV9NT0RFIDB4MDAwMDAwMTEKKyNkZWZpbmUgSVJRX01PREUgMHgwMDAwMDAxMgorI2RlZmluZSBTVkNfTU9ERSAweDAwMDAwMDEzCisjZGVmaW5lIEFCVF9NT0RFIDB4MDAwMDAwMTcKKyNkZWZpbmUgVU5EX01PREUgMHgwMDAwMDAxYgorI2RlZmluZSBTWVNURU1fTU9ERSAweDAwMDAwMDFmCisjZGVmaW5lIE1PREUzMl9CSVQgMHgwMDAwMDAxMAorI2RlZmluZSBNT0RFX01BU0sgMHgwMDAwMDAxZgorI2RlZmluZSBQU1JfVF9CSVQgMHgwMDAwMDAyMAorI2RlZmluZSBQU1JfRl9CSVQgMHgwMDAwMDA0MAorI2RlZmluZSBQU1JfSV9CSVQgMHgwMDAwMDA4MAorI2RlZmluZSBQU1JfSl9CSVQgMHgwMTAwMDAwMAorI2RlZmluZSBQU1JfUV9CSVQgMHgwODAwMDAwMAorI2RlZmluZSBQU1JfVl9CSVQgMHgxMDAwMDAwMAorI2RlZmluZSBQU1JfQ19CSVQgMHgyMDAwMDAwMAorI2RlZmluZSBQU1JfWl9CSVQgMHg0MDAwMDAwMAorI2RlZmluZSBQU1JfTl9CSVQgMHg4MDAwMDAwMAorI2RlZmluZSBQQ01BU0sgMAorCisjZGVmaW5lIFBTUl9mIDB4ZmYwMDAwMDAgIAorI2RlZmluZSBQU1JfcyAweDAwZmYwMDAwICAKKyNkZWZpbmUgUFNSX3ggMHgwMDAwZmYwMCAgCisjZGVmaW5lIFBTUl9jIDB4MDAwMDAwZmYgIAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCitzdHJ1Y3QgcHRfcmVncyB7CisgbG9uZyB1cmVnc1sxOF07Cit9OworCisjZGVmaW5lIEFSTV9jcHNyIHVyZWdzWzE2XQorI2RlZmluZSBBUk1fcGMgdXJlZ3NbMTVdCisjZGVmaW5lIEFSTV9sciB1cmVnc1sxNF0KKyNkZWZpbmUgQVJNX3NwIHVyZWdzWzEzXQorI2RlZmluZSBBUk1faXAgdXJlZ3NbMTJdCisjZGVmaW5lIEFSTV9mcCB1cmVnc1sxMV0KKyNkZWZpbmUgQVJNX3IxMCB1cmVnc1sxMF0KKyNkZWZpbmUgQVJNX3I5IHVyZWdzWzldCisjZGVmaW5lIEFSTV9yOCB1cmVnc1s4XQorI2RlZmluZSBBUk1fcjcgdXJlZ3NbN10KKyNkZWZpbmUgQVJNX3I2IHVyZWdzWzZdCisjZGVmaW5lIEFSTV9yNSB1cmVnc1s1XQorI2RlZmluZSBBUk1fcjQgdXJlZ3NbNF0KKyNkZWZpbmUgQVJNX3IzIHVyZWdzWzNdCisjZGVmaW5lIEFSTV9yMiB1cmVnc1syXQorI2RlZmluZSBBUk1fcjEgdXJlZ3NbMV0KKyNkZWZpbmUgQVJNX3IwIHVyZWdzWzBdCisjZGVmaW5lIEFSTV9PUklHX3IwIHVyZWdzWzE3XQorCisjZGVmaW5lIHBjX3BvaW50ZXIodikgICAoKHYpICYgflBDTUFTSykKKworI2RlZmluZSBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpICAgKHBjX3BvaW50ZXIoKHJlZ3MpLT5BUk1fcGMpKQorCisjZGVmaW5lIHByb2ZpbGVfcGMocmVncykgaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKQorCisjZW5kaWYKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9yZXNvdXJjZS5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3Jlc291cmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU0NmRkNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9yZXNvdXJjZS5oCkBAIC0wLDAgKzEsMTcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FSTV9SRVNPVVJDRV9ICisjZGVmaW5lIF9BUk1fUkVTT1VSQ0VfSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcmVzb3VyY2UuaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc2NhdHRlcmxpc3QuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zY2F0dGVybGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyYzA2Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc2NhdHRlcmxpc3QuaApAQCAtMCwwICsxLDI4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01BUk1fU0NBVFRFUkxJU1RfSAorI2RlZmluZSBfQVNNQVJNX1NDQVRURVJMSVNUX0gKKworI2luY2x1ZGUgPGFzbS9tZW1vcnkuaD4KKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKworc3RydWN0IHNjYXR0ZXJsaXN0IHsKKyBzdHJ1Y3QgcGFnZSAqcGFnZTsKKyB1bnNpZ25lZCBpbnQgb2Zmc2V0OworIGRtYV9hZGRyX3QgZG1hX2FkZHJlc3M7CisgdW5zaWduZWQgaW50IGxlbmd0aDsKK307CisKKyNkZWZpbmUgc2dfZG1hX2FkZHJlc3Moc2cpICgoc2cpLT5kbWFfYWRkcmVzcykKKyNkZWZpbmUgc2dfZG1hX2xlbihzZykgKChzZyktPmxlbmd0aCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc2VtYXBob3JlLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc2VtYXBob3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M1NjE4YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zZW1hcGhvcmUuaApAQCAtMCwwICsxLDM2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQVNNX0FSTV9TRU1BUEhPUkVfSAorI2RlZmluZSBfX0FTTV9BUk1fU0VNQVBIT1JFX0gKKworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgorCisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGFzbS9sb2Nrcy5oPgorCitzdHJ1Y3Qgc2VtYXBob3JlIHsKKyBhdG9taWNfdCBjb3VudDsKKyBpbnQgc2xlZXBlcnM7Cisgd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKK307CisKKyNkZWZpbmUgX19TRU1BUEhPUkVfSU5JVChuYW1lLCBjbnQpICB7ICAgLmNvdW50ID0gQVRPTUlDX0lOSVQoY250KSwgICAud2FpdCA9IF9fV0FJVF9RVUVVRV9IRUFEX0lOSVRJQUxJWkVSKChuYW1lKS53YWl0KSwgIH0KKworI2RlZmluZSBfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSxjb3VudCkgICBzdHJ1Y3Qgc2VtYXBob3JlIG5hbWUgPSBfX1NFTUFQSE9SRV9JTklUKG5hbWUsY291bnQpCisKKyNkZWZpbmUgREVDTEFSRV9NVVRFWChuYW1lKSBfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSwxKQorI2RlZmluZSBERUNMQVJFX01VVEVYX0xPQ0tFRChuYW1lKSBfX0RFQ0xBUkVfU0VNQVBIT1JFX0dFTkVSSUMobmFtZSwwKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zZW1idWYuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zZW1idWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmY1ZGQwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3NlbWJ1Zi5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FTTUFSTV9TRU1CVUZfSAorI2RlZmluZSBfQVNNQVJNX1NFTUJVRl9ICisKK3N0cnVjdCBzZW1pZDY0X2RzIHsKKyBzdHJ1Y3QgaXBjNjRfcGVybSBzZW1fcGVybTsKKyBfX2tlcm5lbF90aW1lX3Qgc2VtX290aW1lOworIHVuc2lnbmVkIGxvbmcgX191bnVzZWQxOworIF9fa2VybmVsX3RpbWVfdCBzZW1fY3RpbWU7CisgdW5zaWduZWQgbG9uZyBfX3VudXNlZDI7CisgdW5zaWduZWQgbG9uZyBzZW1fbnNlbXM7CisgdW5zaWduZWQgbG9uZyBfX3VudXNlZDM7CisgdW5zaWduZWQgbG9uZyBfX3VudXNlZDQ7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zaG1idWYuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zaG1idWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDRkNzhjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3NobWJ1Zi5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FTTUFSTV9TSE1CVUZfSAorI2RlZmluZSBfQVNNQVJNX1NITUJVRl9ICisKK3N0cnVjdCBzaG1pZDY0X2RzIHsKKyBzdHJ1Y3QgaXBjNjRfcGVybSBzaG1fcGVybTsKKyBzaXplX3Qgc2htX3NlZ3N6OworIF9fa2VybmVsX3RpbWVfdCBzaG1fYXRpbWU7CisgdW5zaWduZWQgbG9uZyBfX3VudXNlZDE7CisgX19rZXJuZWxfdGltZV90IHNobV9kdGltZTsKKyB1bnNpZ25lZCBsb25nIF9fdW51c2VkMjsKKyBfX2tlcm5lbF90aW1lX3Qgc2htX2N0aW1lOworIHVuc2lnbmVkIGxvbmcgX191bnVzZWQzOworIF9fa2VybmVsX3BpZF90IHNobV9jcGlkOworIF9fa2VybmVsX3BpZF90IHNobV9scGlkOworIHVuc2lnbmVkIGxvbmcgc2htX25hdHRjaDsKKyB1bnNpZ25lZCBsb25nIF9fdW51c2VkNDsKKyB1bnNpZ25lZCBsb25nIF9fdW51c2VkNTsKK307CisKK3N0cnVjdCBzaG1pbmZvNjQgeworIHVuc2lnbmVkIGxvbmcgc2htbWF4OworIHVuc2lnbmVkIGxvbmcgc2htbWluOworIHVuc2lnbmVkIGxvbmcgc2htbW5pOworIHVuc2lnbmVkIGxvbmcgc2htc2VnOworIHVuc2lnbmVkIGxvbmcgc2htYWxsOworIHVuc2lnbmVkIGxvbmcgX191bnVzZWQxOworIHVuc2lnbmVkIGxvbmcgX191bnVzZWQyOworIHVuc2lnbmVkIGxvbmcgX191bnVzZWQzOworIHVuc2lnbmVkIGxvbmcgX191bnVzZWQ0OworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc2htcGFyYW0uaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zaG1wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNTNhOGQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc2htcGFyYW0uaApAQCAtMCwwICsxLDE5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01BUk1fU0hNUEFSQU1fSAorI2RlZmluZSBfQVNNQVJNX1NITVBBUkFNX0gKKworI2RlZmluZSBTSE1MQkEgKDQgKiBQQUdFX1NJWkUpICAKKworI2RlZmluZSBfX0FSQ0hfRk9SQ0VfU0hNTEJBCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3NpZ2NvbnRleHQuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zaWdjb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M0ZmNmMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zaWdjb250ZXh0LmgKQEAgLTAsMCArMSwzOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQVNNQVJNX1NJR0NPTlRFWFRfSAorI2RlZmluZSBfQVNNQVJNX1NJR0NPTlRFWFRfSAorCitzdHJ1Y3Qgc2lnY29udGV4dCB7CisgdW5zaWduZWQgbG9uZyB0cmFwX25vOworIHVuc2lnbmVkIGxvbmcgZXJyb3JfY29kZTsKKyB1bnNpZ25lZCBsb25nIG9sZG1hc2s7CisgdW5zaWduZWQgbG9uZyBhcm1fcjA7CisgdW5zaWduZWQgbG9uZyBhcm1fcjE7CisgdW5zaWduZWQgbG9uZyBhcm1fcjI7CisgdW5zaWduZWQgbG9uZyBhcm1fcjM7CisgdW5zaWduZWQgbG9uZyBhcm1fcjQ7CisgdW5zaWduZWQgbG9uZyBhcm1fcjU7CisgdW5zaWduZWQgbG9uZyBhcm1fcjY7CisgdW5zaWduZWQgbG9uZyBhcm1fcjc7CisgdW5zaWduZWQgbG9uZyBhcm1fcjg7CisgdW5zaWduZWQgbG9uZyBhcm1fcjk7CisgdW5zaWduZWQgbG9uZyBhcm1fcjEwOworIHVuc2lnbmVkIGxvbmcgYXJtX2ZwOworIHVuc2lnbmVkIGxvbmcgYXJtX2lwOworIHVuc2lnbmVkIGxvbmcgYXJtX3NwOworIHVuc2lnbmVkIGxvbmcgYXJtX2xyOworIHVuc2lnbmVkIGxvbmcgYXJtX3BjOworIHVuc2lnbmVkIGxvbmcgYXJtX2Nwc3I7CisgdW5zaWduZWQgbG9uZyBmYXVsdF9hZGRyZXNzOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc2lnaW5mby5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3NpZ2luZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjU2ODVlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3NpZ2luZm8uaApAQCAtMCwwICsxLDE3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01BUk1fU0lHSU5GT19ICisjZGVmaW5lIF9BU01BUk1fU0lHSU5GT19ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zaWdpbmZvLmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3NpZ25hbC5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3NpZ25hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxMmQ5ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc2lnbmFsLmgKQEAgLTAsMCArMSwxMDMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FTTUFSTV9TSUdOQUxfSAorI2RlZmluZSBfQVNNQVJNX1NJR05BTF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3Qgc2lnaW5mbzsKKworI2RlZmluZSBOU0lHIDMyCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgc2lnc2V0X3Q7CisKKyNkZWZpbmUgU0lHSFVQIDEKKyNkZWZpbmUgU0lHSU5UIDIKKyNkZWZpbmUgU0lHUVVJVCAzCisjZGVmaW5lIFNJR0lMTCA0CisjZGVmaW5lIFNJR1RSQVAgNQorI2RlZmluZSBTSUdBQlJUIDYKKyNkZWZpbmUgU0lHSU9UIDYKKyNkZWZpbmUgU0lHQlVTIDcKKyNkZWZpbmUgU0lHRlBFIDgKKyNkZWZpbmUgU0lHS0lMTCA5CisjZGVmaW5lIFNJR1VTUjEgMTAKKyNkZWZpbmUgU0lHU0VHViAxMQorI2RlZmluZSBTSUdVU1IyIDEyCisjZGVmaW5lIFNJR1BJUEUgMTMKKyNkZWZpbmUgU0lHQUxSTSAxNAorI2RlZmluZSBTSUdURVJNIDE1CisjZGVmaW5lIFNJR1NUS0ZMVCAxNgorI2RlZmluZSBTSUdDSExEIDE3CisjZGVmaW5lIFNJR0NPTlQgMTgKKyNkZWZpbmUgU0lHU1RPUCAxOQorI2RlZmluZSBTSUdUU1RQIDIwCisjZGVmaW5lIFNJR1RUSU4gMjEKKyNkZWZpbmUgU0lHVFRPVSAyMgorI2RlZmluZSBTSUdVUkcgMjMKKyNkZWZpbmUgU0lHWENQVSAyNAorI2RlZmluZSBTSUdYRlNaIDI1CisjZGVmaW5lIFNJR1ZUQUxSTSAyNgorI2RlZmluZSBTSUdQUk9GIDI3CisjZGVmaW5lIFNJR1dJTkNIIDI4CisjZGVmaW5lIFNJR0lPIDI5CisjZGVmaW5lIFNJR1BPTEwgU0lHSU8KKworI2RlZmluZSBTSUdQV1IgMzAKKyNkZWZpbmUgU0lHU1lTIDMxCisjZGVmaW5lIFNJR1VOVVNFRCAzMQorCisjZGVmaW5lIFNJR1JUTUlOIDMyCisjZGVmaW5lIFNJR1JUTUFYIF9OU0lHCisKKyNkZWZpbmUgU0lHU1dJIDMyCisKKyNkZWZpbmUgU0FfTk9DTERTVE9QIDB4MDAwMDAwMDEKKyNkZWZpbmUgU0FfTk9DTERXQUlUIDB4MDAwMDAwMDIKKyNkZWZpbmUgU0FfU0lHSU5GTyAweDAwMDAwMDA0CisjZGVmaW5lIFNBX1RISVJUWVRXTyAweDAyMDAwMDAwCisjZGVmaW5lIFNBX1JFU1RPUkVSIDB4MDQwMDAwMDAKKyNkZWZpbmUgU0FfT05TVEFDSyAweDA4MDAwMDAwCisjZGVmaW5lIFNBX1JFU1RBUlQgMHgxMDAwMDAwMAorI2RlZmluZSBTQV9OT0RFRkVSIDB4NDAwMDAwMDAKKyNkZWZpbmUgU0FfUkVTRVRIQU5EIDB4ODAwMDAwMDAKKworI2RlZmluZSBTQV9OT01BU0sgU0FfTk9ERUZFUgorI2RlZmluZSBTQV9PTkVTSE9UIFNBX1JFU0VUSEFORAorCisjZGVmaW5lIFNTX09OU1RBQ0sgMQorI2RlZmluZSBTU19ESVNBQkxFIDIKKworI2RlZmluZSBNSU5TSUdTVEtTWiAyMDQ4CisjZGVmaW5lIFNJR1NUS1NaIDgxOTIKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NpZ25hbC5oPgorCitzdHJ1Y3Qgc2lnYWN0aW9uIHsKKyB1bmlvbiB7CisgX19zaWdoYW5kbGVyX3QgX3NhX2hhbmRsZXI7Cisgdm9pZCAoKl9zYV9zaWdhY3Rpb24pKGludCwgc3RydWN0IHNpZ2luZm8gKiwgdm9pZCAqKTsKKyB9IF91OworIHNpZ3NldF90IHNhX21hc2s7CisgdW5zaWduZWQgbG9uZyBzYV9mbGFnczsKKyB2b2lkICgqc2FfcmVzdG9yZXIpKHZvaWQpOworfTsKKworI2RlZmluZSBzYV9oYW5kbGVyIF91Ll9zYV9oYW5kbGVyCisjZGVmaW5lIHNhX3NpZ2FjdGlvbiBfdS5fc2Ffc2lnYWN0aW9uCisKK3R5cGVkZWYgc3RydWN0IHNpZ2FsdHN0YWNrIHsKKyB2b2lkIF9fdXNlciAqc3Nfc3A7CisgaW50IHNzX2ZsYWdzOworIHNpemVfdCBzc19zaXplOworfSBzdGFja190OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zaXplcy5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3NpemVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBjMWM3MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zaXplcy5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19zaXplc19oCisjZGVmaW5lIF9fc2l6ZXNfaCAxCisKKyNkZWZpbmUgU1pfMUsgMHgwMDAwMDQwMAorI2RlZmluZSBTWl80SyAweDAwMDAxMDAwCisjZGVmaW5lIFNaXzhLIDB4MDAwMDIwMDAKKyNkZWZpbmUgU1pfMTZLIDB4MDAwMDQwMDAKKyNkZWZpbmUgU1pfNjRLIDB4MDAwMTAwMDAKKyNkZWZpbmUgU1pfMTI4SyAweDAwMDIwMDAwCisjZGVmaW5lIFNaXzI1NksgMHgwMDA0MDAwMAorI2RlZmluZSBTWl81MTJLIDB4MDAwODAwMDAKKworI2RlZmluZSBTWl8xTSAweDAwMTAwMDAwCisjZGVmaW5lIFNaXzJNIDB4MDAyMDAwMDAKKyNkZWZpbmUgU1pfNE0gMHgwMDQwMDAwMAorI2RlZmluZSBTWl84TSAweDAwODAwMDAwCisjZGVmaW5lIFNaXzE2TSAweDAxMDAwMDAwCisjZGVmaW5lIFNaXzMyTSAweDAyMDAwMDAwCisjZGVmaW5lIFNaXzY0TSAweDA0MDAwMDAwCisjZGVmaW5lIFNaXzEyOE0gMHgwODAwMDAwMAorI2RlZmluZSBTWl8yNTZNIDB4MTAwMDAwMDAKKyNkZWZpbmUgU1pfNTEyTSAweDIwMDAwMDAwCisKKyNkZWZpbmUgU1pfMUcgMHg0MDAwMDAwMAorI2RlZmluZSBTWl8yRyAweDgwMDAwMDAwCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc21wLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc21wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZjMWU0MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zbXAuaApAQCAtMCwwICsxLDM0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQVNNX0FSTV9TTVBfSAorI2RlZmluZSBfX0FTTV9BUk1fU01QX0gKKworI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkX2luZm8uaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL3NtcC5oPgorCisjZXJyb3IgIjxhc20tYXJtL3NtcC5oPiBpbmNsdWRlZCBpbiBub24tU01QIGJ1aWxkIgorCisjZGVmaW5lIHJhd19zbXBfcHJvY2Vzc29yX2lkKCkgKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+Y3B1KQorCisjZGVmaW5lIFBST0NfQ0hBTkdFX1BFTkFMVFkgMTUKKworc3RydWN0IHNlcV9maWxlOworCitzdHJ1Y3Qgc2Vjb25kYXJ5X2RhdGEgeworIHVuc2lnbmVkIGxvbmcgcGdkaXI7Cisgdm9pZCAqc3RhY2s7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zb2NrZXQuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zb2NrZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjAwNTBhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3NvY2tldC5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FTTUFSTV9TT0NLRVRfSAorI2RlZmluZSBfQVNNQVJNX1NPQ0tFVF9ICisKKyNpbmNsdWRlIDxhc20vc29ja2lvcy5oPgorCisjZGVmaW5lIFNPTF9TT0NLRVQgMQorCisjZGVmaW5lIFNPX0RFQlVHIDEKKyNkZWZpbmUgU09fUkVVU0VBRERSIDIKKyNkZWZpbmUgU09fVFlQRSAzCisjZGVmaW5lIFNPX0VSUk9SIDQKKyNkZWZpbmUgU09fRE9OVFJPVVRFIDUKKyNkZWZpbmUgU09fQlJPQURDQVNUIDYKKyNkZWZpbmUgU09fU05EQlVGIDcKKyNkZWZpbmUgU09fUkNWQlVGIDgKKyNkZWZpbmUgU09fU05EQlVGRk9SQ0UgMzIKKyNkZWZpbmUgU09fUkNWQlVGRk9SQ0UgMzMKKyNkZWZpbmUgU09fS0VFUEFMSVZFIDkKKyNkZWZpbmUgU09fT09CSU5MSU5FIDEwCisjZGVmaW5lIFNPX05PX0NIRUNLIDExCisjZGVmaW5lIFNPX1BSSU9SSVRZIDEyCisjZGVmaW5lIFNPX0xJTkdFUiAxMworI2RlZmluZSBTT19CU0RDT01QQVQgMTQKKworI2RlZmluZSBTT19QQVNTQ1JFRCAxNgorI2RlZmluZSBTT19QRUVSQ1JFRCAxNworI2RlZmluZSBTT19SQ1ZMT1dBVCAxOAorI2RlZmluZSBTT19TTkRMT1dBVCAxOQorI2RlZmluZSBTT19SQ1ZUSU1FTyAyMAorI2RlZmluZSBTT19TTkRUSU1FTyAyMQorCisjZGVmaW5lIFNPX1NFQ1VSSVRZX0FVVEhFTlRJQ0FUSU9OIDIyCisjZGVmaW5lIFNPX1NFQ1VSSVRZX0VOQ1JZUFRJT05fVFJBTlNQT1JUIDIzCisjZGVmaW5lIFNPX1NFQ1VSSVRZX0VOQ1JZUFRJT05fTkVUV09SSyAyNAorCisjZGVmaW5lIFNPX0JJTkRUT0RFVklDRSAyNQorCisjZGVmaW5lIFNPX0FUVEFDSF9GSUxURVIgMjYKKyNkZWZpbmUgU09fREVUQUNIX0ZJTFRFUiAyNworCisjZGVmaW5lIFNPX1BFRVJOQU1FIDI4CisjZGVmaW5lIFNPX1RJTUVTVEFNUCAyOQorI2RlZmluZSBTQ01fVElNRVNUQU1QIFNPX1RJTUVTVEFNUAorCisjZGVmaW5lIFNPX0FDQ0VQVENPTk4gMzAKKworI2RlZmluZSBTT19QRUVSU0VDIDMxCisjZGVmaW5lIFNPX1BBU1NTRUMgMzQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc29ja2lvcy5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3NvY2tpb3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWI4NmI4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3NvY2tpb3MuaApAQCAtMCwwICsxLDIyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQVJDSF9BUk1fU09DS0lPU19ICisjZGVmaW5lIF9fQVJDSF9BUk1fU09DS0lPU19ICisKKyNkZWZpbmUgRklPU0VUT1dOIDB4ODkwMQorI2RlZmluZSBTSU9DU1BHUlAgMHg4OTAyCisjZGVmaW5lIEZJT0dFVE9XTiAweDg5MDMKKyNkZWZpbmUgU0lPQ0dQR1JQIDB4ODkwNAorI2RlZmluZSBTSU9DQVRNQVJLIDB4ODkwNQorI2RlZmluZSBTSU9DR1NUQU1QIDB4ODkwNiAgCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3NwaW5sb2NrLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc3BpbmxvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWUyMTczCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3NwaW5sb2NrLmgKQEAgLTAsMCArMSwyNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FTTV9TUElOTE9DS19ICisjZGVmaW5lIF9fQVNNX1NQSU5MT0NLX0gKKworI2lmIF9fTElOVVhfQVJNX0FSQ0hfXyA8IDYKKyNlcnJvciBTTVAgbm90IHN1cHBvcnRlZCBvbiBwcmUtQVJNdjYgQ1BVcworI2VuZGlmCisKKyNkZWZpbmUgX19yYXdfc3Bpbl9pc19sb2NrZWQoeCkgKCh4KS0+bG9jayAhPSAwKQorI2RlZmluZSBfX3Jhd19zcGluX3VubG9ja193YWl0KGxvY2spICAgZG8geyB3aGlsZSAoX19yYXdfc3Bpbl9pc19sb2NrZWQobG9jaykpIGNwdV9yZWxheCgpOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIF9fcmF3X3NwaW5fbG9ja19mbGFncyhsb2NrLCBmbGFncykgX19yYXdfc3Bpbl9sb2NrKGxvY2spCisKKyNkZWZpbmUgcndsb2NrX2lzX2xvY2tlZCh4KSAoKigodm9sYXRpbGUgdW5zaWduZWQgaW50ICopKHgpKSAhPSAwKQorI2RlZmluZSBfX3Jhd193cml0ZV9jYW5fbG9jayh4KSAoKHgpLT5sb2NrID09IDB4ODAwMDAwMDApCisjZGVmaW5lIF9fcmF3X3JlYWRfY2FuX2xvY2soeCkgKCh4KS0+bG9jayA8IDB4ODAwMDAwMDApCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zcGlubG9ja190eXBlcy5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3NwaW5sb2NrX3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU3N2YyMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zcGlubG9ja190eXBlcy5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19BU01fU1BJTkxPQ0tfVFlQRVNfSAorI2RlZmluZSBfX0FTTV9TUElOTE9DS19UWVBFU19ICisKKyNpZm5kZWYgX19MSU5VWF9TUElOTE9DS19UWVBFU19ICisjZXJyb3IgInBsZWFzZSBkb24ndCBpbmNsdWRlIHRoaXMgZmlsZSBkaXJlY3RseSIKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCB7Cisgdm9sYXRpbGUgdW5zaWduZWQgaW50IGxvY2s7Cit9IHJhd19zcGlubG9ja190OworCisjZGVmaW5lIF9fUkFXX1NQSU5fTE9DS19VTkxPQ0tFRCB7IDAgfQorCit0eXBlZGVmIHN0cnVjdCB7Cisgdm9sYXRpbGUgdW5zaWduZWQgaW50IGxvY2s7Cit9IHJhd19yd2xvY2tfdDsKKworI2RlZmluZSBfX1JBV19SV19MT0NLX1VOTE9DS0VEIHsgMCB9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3N0YXQuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zdGF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDliODVmOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zdGF0LmgKQEAgLTAsMCArMSw5MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQVNNQVJNX1NUQVRfSAorI2RlZmluZSBfQVNNQVJNX1NUQVRfSAorCitzdHJ1Y3QgX19vbGRfa2VybmVsX3N0YXQgeworIHVuc2lnbmVkIHNob3J0IHN0X2RldjsKKyB1bnNpZ25lZCBzaG9ydCBzdF9pbm87CisgdW5zaWduZWQgc2hvcnQgc3RfbW9kZTsKKyB1bnNpZ25lZCBzaG9ydCBzdF9ubGluazsKKyB1bnNpZ25lZCBzaG9ydCBzdF91aWQ7CisgdW5zaWduZWQgc2hvcnQgc3RfZ2lkOworIHVuc2lnbmVkIHNob3J0IHN0X3JkZXY7CisgdW5zaWduZWQgbG9uZyBzdF9zaXplOworIHVuc2lnbmVkIGxvbmcgc3RfYXRpbWU7CisgdW5zaWduZWQgbG9uZyBzdF9tdGltZTsKKyB1bnNpZ25lZCBsb25nIHN0X2N0aW1lOworfTsKKworI2RlZmluZSBTVEFUX0hBVkVfTlNFQyAKKworc3RydWN0IHN0YXQgeworI2lmZGVmIF9fQVJNRUJfXworIHVuc2lnbmVkIHNob3J0IHN0X2RldjsKKyB1bnNpZ25lZCBzaG9ydCBfX3BhZDE7CisjZWxzZQorIHVuc2lnbmVkIGxvbmcgc3RfZGV2OworI2VuZGlmCisgdW5zaWduZWQgbG9uZyBzdF9pbm87CisgdW5zaWduZWQgc2hvcnQgc3RfbW9kZTsKKyB1bnNpZ25lZCBzaG9ydCBzdF9ubGluazsKKyB1bnNpZ25lZCBzaG9ydCBzdF91aWQ7CisgdW5zaWduZWQgc2hvcnQgc3RfZ2lkOworI2lmZGVmIF9fQVJNRUJfXworIHVuc2lnbmVkIHNob3J0IHN0X3JkZXY7CisgdW5zaWduZWQgc2hvcnQgX19wYWQyOworI2Vsc2UKKyB1bnNpZ25lZCBsb25nIHN0X3JkZXY7CisjZW5kaWYKKyB1bnNpZ25lZCBsb25nIHN0X3NpemU7CisgdW5zaWduZWQgbG9uZyBzdF9ibGtzaXplOworIHVuc2lnbmVkIGxvbmcgc3RfYmxvY2tzOworIHVuc2lnbmVkIGxvbmcgc3RfYXRpbWU7CisgdW5zaWduZWQgbG9uZyBzdF9hdGltZV9uc2VjOworIHVuc2lnbmVkIGxvbmcgc3RfbXRpbWU7CisgdW5zaWduZWQgbG9uZyBzdF9tdGltZV9uc2VjOworIHVuc2lnbmVkIGxvbmcgc3RfY3RpbWU7CisgdW5zaWduZWQgbG9uZyBzdF9jdGltZV9uc2VjOworIHVuc2lnbmVkIGxvbmcgX191bnVzZWQ0OworIHVuc2lnbmVkIGxvbmcgX191bnVzZWQ1OworfTsKKworc3RydWN0IHN0YXQ2NCB7CisgdW5zaWduZWQgbG9uZyBsb25nIHN0X2RldjsKKyB1bnNpZ25lZCBjaGFyIF9fcGFkMFs0XTsKKworI2RlZmluZSBTVEFUNjRfSEFTX0JST0tFTl9TVF9JTk8gMQorIHVuc2lnbmVkIGxvbmcgX19zdF9pbm87CisgdW5zaWduZWQgaW50IHN0X21vZGU7CisgdW5zaWduZWQgaW50IHN0X25saW5rOworCisgdW5zaWduZWQgbG9uZyBzdF91aWQ7CisgdW5zaWduZWQgbG9uZyBzdF9naWQ7CisKKyB1bnNpZ25lZCBsb25nIGxvbmcgc3RfcmRldjsKKyB1bnNpZ25lZCBjaGFyIF9fcGFkM1s0XTsKKworIGxvbmcgbG9uZyBzdF9zaXplOworIHVuc2lnbmVkIGxvbmcgc3RfYmxrc2l6ZTsKKyB1bnNpZ25lZCBsb25nIGxvbmcgc3RfYmxvY2tzOworCisgdW5zaWduZWQgbG9uZyBzdF9hdGltZTsKKyB1bnNpZ25lZCBsb25nIHN0X2F0aW1lX25zZWM7CisKKyB1bnNpZ25lZCBsb25nIHN0X210aW1lOworIHVuc2lnbmVkIGxvbmcgc3RfbXRpbWVfbnNlYzsKKworIHVuc2lnbmVkIGxvbmcgc3RfY3RpbWU7CisgdW5zaWduZWQgbG9uZyBzdF9jdGltZV9uc2VjOworCisgdW5zaWduZWQgbG9uZyBsb25nIHN0X2lubzsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3N0YXRmcy5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3N0YXRmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5NjNlYWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc3RhdGZzLmgKQEAgLTAsMCArMSw0MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQVNNQVJNX1NUQVRGU19ICisjZGVmaW5lIF9BU01BUk1fU1RBVEZTX0gKKworc3RydWN0IHN0YXRmcyB7CisgX191MzIgZl90eXBlOworIF9fdTMyIGZfYnNpemU7CisgX191MzIgZl9ibG9ja3M7CisgX191MzIgZl9iZnJlZTsKKyBfX3UzMiBmX2JhdmFpbDsKKyBfX3UzMiBmX2ZpbGVzOworIF9fdTMyIGZfZmZyZWU7CisgX19rZXJuZWxfZnNpZF90IGZfZnNpZDsKKyBfX3UzMiBmX25hbWVsZW47CisgX191MzIgZl9mcnNpemU7CisgX191MzIgZl9zcGFyZVs1XTsKK307CisKK3N0cnVjdCBzdGF0ZnM2NCB7CisgX191MzIgZl90eXBlOworIF9fdTMyIGZfYnNpemU7CisgX191NjQgZl9ibG9ja3M7CisgX191NjQgZl9iZnJlZTsKKyBfX3U2NCBmX2JhdmFpbDsKKyBfX3U2NCBmX2ZpbGVzOworIF9fdTY0IGZfZmZyZWU7CisgX19rZXJuZWxfZnNpZF90IGZfZnNpZDsKKyBfX3UzMiBmX25hbWVsZW47CisgX191MzIgZl9mcnNpemU7CisgX191MzIgZl9zcGFyZVs1XTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCxhbGlnbmVkKDQpKSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3N1c3BlbmQuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zdXNwZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU2YzE3MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zdXNwZW5kLmgKQEAgLTAsMCArMSwxNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQVNNQVJNX1NVU1BFTkRfSAorI2RlZmluZSBfQVNNQVJNX1NVU1BFTkRfSAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zeXN0ZW0uaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zeXN0ZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTg1MDM5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3N5c3RlbS5oCkBAIC0wLDAgKzEsMTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19BU01fQVJNX1NZU1RFTV9ICisjZGVmaW5lIF9fQVNNX0FSTV9TWVNURU1fSAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS90ZXJtYml0cy5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3Rlcm1iaXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQwYmQyNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS90ZXJtYml0cy5oCkBAIC0wLDAgKzEsMTc0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQVNNX0FSTV9URVJNQklUU19ICisjZGVmaW5lIF9fQVNNX0FSTV9URVJNQklUU19ICisKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBjY190OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgc3BlZWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50IHRjZmxhZ190OworCisjZGVmaW5lIE5DQ1MgMTkKK3N0cnVjdCB0ZXJtaW9zIHsKKyB0Y2ZsYWdfdCBjX2lmbGFnOworIHRjZmxhZ190IGNfb2ZsYWc7CisgdGNmbGFnX3QgY19jZmxhZzsKKyB0Y2ZsYWdfdCBjX2xmbGFnOworIGNjX3QgY19saW5lOworIGNjX3QgY19jY1tOQ0NTXTsKK307CisKKyNkZWZpbmUgVklOVFIgMAorI2RlZmluZSBWUVVJVCAxCisjZGVmaW5lIFZFUkFTRSAyCisjZGVmaW5lIFZLSUxMIDMKKyNkZWZpbmUgVkVPRiA0CisjZGVmaW5lIFZUSU1FIDUKKyNkZWZpbmUgVk1JTiA2CisjZGVmaW5lIFZTV1RDIDcKKyNkZWZpbmUgVlNUQVJUIDgKKyNkZWZpbmUgVlNUT1AgOQorI2RlZmluZSBWU1VTUCAxMAorI2RlZmluZSBWRU9MIDExCisjZGVmaW5lIFZSRVBSSU5UIDEyCisjZGVmaW5lIFZESVNDQVJEIDEzCisjZGVmaW5lIFZXRVJBU0UgMTQKKyNkZWZpbmUgVkxORVhUIDE1CisjZGVmaW5lIFZFT0wyIDE2CisKKyNkZWZpbmUgSUdOQlJLIDAwMDAwMDEKKyNkZWZpbmUgQlJLSU5UIDAwMDAwMDIKKyNkZWZpbmUgSUdOUEFSIDAwMDAwMDQKKyNkZWZpbmUgUEFSTVJLIDAwMDAwMTAKKyNkZWZpbmUgSU5QQ0sgMDAwMDAyMAorI2RlZmluZSBJU1RSSVAgMDAwMDA0MAorI2RlZmluZSBJTkxDUiAwMDAwMTAwCisjZGVmaW5lIElHTkNSIDAwMDAyMDAKKyNkZWZpbmUgSUNSTkwgMDAwMDQwMAorI2RlZmluZSBJVUNMQyAwMDAxMDAwCisjZGVmaW5lIElYT04gMDAwMjAwMAorI2RlZmluZSBJWEFOWSAwMDA0MDAwCisjZGVmaW5lIElYT0ZGIDAwMTAwMDAKKyNkZWZpbmUgSU1BWEJFTCAwMDIwMDAwCisjZGVmaW5lIElVVEY4IDAwNDAwMDAKKworI2RlZmluZSBPUE9TVCAwMDAwMDAxCisjZGVmaW5lIE9MQ1VDIDAwMDAwMDIKKyNkZWZpbmUgT05MQ1IgMDAwMDAwNAorI2RlZmluZSBPQ1JOTCAwMDAwMDEwCisjZGVmaW5lIE9OT0NSIDAwMDAwMjAKKyNkZWZpbmUgT05MUkVUIDAwMDAwNDAKKyNkZWZpbmUgT0ZJTEwgMDAwMDEwMAorI2RlZmluZSBPRkRFTCAwMDAwMjAwCisjZGVmaW5lIE5MRExZIDAwMDA0MDAKKyNkZWZpbmUgTkwwIDAwMDAwMDAKKyNkZWZpbmUgTkwxIDAwMDA0MDAKKyNkZWZpbmUgQ1JETFkgMDAwMzAwMAorI2RlZmluZSBDUjAgMDAwMDAwMAorI2RlZmluZSBDUjEgMDAwMTAwMAorI2RlZmluZSBDUjIgMDAwMjAwMAorI2RlZmluZSBDUjMgMDAwMzAwMAorI2RlZmluZSBUQUJETFkgMDAxNDAwMAorI2RlZmluZSBUQUIwIDAwMDAwMDAKKyNkZWZpbmUgVEFCMSAwMDA0MDAwCisjZGVmaW5lIFRBQjIgMDAxMDAwMAorI2RlZmluZSBUQUIzIDAwMTQwMDAKKyNkZWZpbmUgWFRBQlMgMDAxNDAwMAorI2RlZmluZSBCU0RMWSAwMDIwMDAwCisjZGVmaW5lIEJTMCAwMDAwMDAwCisjZGVmaW5lIEJTMSAwMDIwMDAwCisjZGVmaW5lIFZURExZIDAwNDAwMDAKKyNkZWZpbmUgVlQwIDAwMDAwMDAKKyNkZWZpbmUgVlQxIDAwNDAwMDAKKyNkZWZpbmUgRkZETFkgMDEwMDAwMAorI2RlZmluZSBGRjAgMDAwMDAwMAorI2RlZmluZSBGRjEgMDEwMDAwMAorCisjZGVmaW5lIENCQVVEIDAwMTAwMTcKKyNkZWZpbmUgQjAgMDAwMDAwMCAgCisjZGVmaW5lIEI1MCAwMDAwMDAxCisjZGVmaW5lIEI3NSAwMDAwMDAyCisjZGVmaW5lIEIxMTAgMDAwMDAwMworI2RlZmluZSBCMTM0IDAwMDAwMDQKKyNkZWZpbmUgQjE1MCAwMDAwMDA1CisjZGVmaW5lIEIyMDAgMDAwMDAwNgorI2RlZmluZSBCMzAwIDAwMDAwMDcKKyNkZWZpbmUgQjYwMCAwMDAwMDEwCisjZGVmaW5lIEIxMjAwIDAwMDAwMTEKKyNkZWZpbmUgQjE4MDAgMDAwMDAxMgorI2RlZmluZSBCMjQwMCAwMDAwMDEzCisjZGVmaW5lIEI0ODAwIDAwMDAwMTQKKyNkZWZpbmUgQjk2MDAgMDAwMDAxNQorI2RlZmluZSBCMTkyMDAgMDAwMDAxNgorI2RlZmluZSBCMzg0MDAgMDAwMDAxNworI2RlZmluZSBFWFRBIEIxOTIwMAorI2RlZmluZSBFWFRCIEIzODQwMAorI2RlZmluZSBDU0laRSAwMDAwMDYwCisjZGVmaW5lIENTNSAwMDAwMDAwCisjZGVmaW5lIENTNiAwMDAwMDIwCisjZGVmaW5lIENTNyAwMDAwMDQwCisjZGVmaW5lIENTOCAwMDAwMDYwCisjZGVmaW5lIENTVE9QQiAwMDAwMTAwCisjZGVmaW5lIENSRUFEIDAwMDAyMDAKKyNkZWZpbmUgUEFSRU5CIDAwMDA0MDAKKyNkZWZpbmUgUEFST0REIDAwMDEwMDAKKyNkZWZpbmUgSFVQQ0wgMDAwMjAwMAorI2RlZmluZSBDTE9DQUwgMDAwNDAwMAorI2RlZmluZSBDQkFVREVYIDAwMTAwMDAKKyNkZWZpbmUgQjU3NjAwIDAwMTAwMDEKKyNkZWZpbmUgQjExNTIwMCAwMDEwMDAyCisjZGVmaW5lIEIyMzA0MDAgMDAxMDAwMworI2RlZmluZSBCNDYwODAwIDAwMTAwMDQKKyNkZWZpbmUgQjUwMDAwMCAwMDEwMDA1CisjZGVmaW5lIEI1NzYwMDAgMDAxMDAwNgorI2RlZmluZSBCOTIxNjAwIDAwMTAwMDcKKyNkZWZpbmUgQjEwMDAwMDAgMDAxMDAxMAorI2RlZmluZSBCMTE1MjAwMCAwMDEwMDExCisjZGVmaW5lIEIxNTAwMDAwIDAwMTAwMTIKKyNkZWZpbmUgQjIwMDAwMDAgMDAxMDAxMworI2RlZmluZSBCMjUwMDAwMCAwMDEwMDE0CisjZGVmaW5lIEIzMDAwMDAwIDAwMTAwMTUKKyNkZWZpbmUgQjM1MDAwMDAgMDAxMDAxNgorI2RlZmluZSBCNDAwMDAwMCAwMDEwMDE3CisjZGVmaW5lIENJQkFVRCAwMDIwMDM2MDAwMDAgIAorI2RlZmluZSBDTVNQQVIgMDEwMDAwMDAwMDAwICAKKyNkZWZpbmUgQ1JUU0NUUyAwMjAwMDAwMDAwMDAgIAorCisjZGVmaW5lIElTSUcgMDAwMDAwMQorI2RlZmluZSBJQ0FOT04gMDAwMDAwMgorI2RlZmluZSBYQ0FTRSAwMDAwMDA0CisjZGVmaW5lIEVDSE8gMDAwMDAxMAorI2RlZmluZSBFQ0hPRSAwMDAwMDIwCisjZGVmaW5lIEVDSE9LIDAwMDAwNDAKKyNkZWZpbmUgRUNIT05MIDAwMDAxMDAKKyNkZWZpbmUgTk9GTFNIIDAwMDAyMDAKKyNkZWZpbmUgVE9TVE9QIDAwMDA0MDAKKyNkZWZpbmUgRUNIT0NUTCAwMDAxMDAwCisjZGVmaW5lIEVDSE9QUlQgMDAwMjAwMAorI2RlZmluZSBFQ0hPS0UgMDAwNDAwMAorI2RlZmluZSBGTFVTSE8gMDAxMDAwMAorI2RlZmluZSBQRU5ESU4gMDA0MDAwMAorI2RlZmluZSBJRVhURU4gMDEwMDAwMAorCisjZGVmaW5lIFRDT09GRiAwCisjZGVmaW5lIFRDT09OIDEKKyNkZWZpbmUgVENJT0ZGIDIKKyNkZWZpbmUgVENJT04gMworCisjZGVmaW5lIFRDSUZMVVNIIDAKKyNkZWZpbmUgVENPRkxVU0ggMQorI2RlZmluZSBUQ0lPRkxVU0ggMgorCisjZGVmaW5lIFRDU0FOT1cgMAorI2RlZmluZSBUQ1NBRFJBSU4gMQorI2RlZmluZSBUQ1NBRkxVU0ggMgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS90ZXJtaW9zLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vdGVybWlvcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhNDNhYzIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vdGVybWlvcy5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19BU01fQVJNX1RFUk1JT1NfSAorI2RlZmluZSBfX0FTTV9BUk1fVEVSTUlPU19ICisKKyNpbmNsdWRlIDxhc20vdGVybWJpdHMuaD4KKyNpbmNsdWRlIDxhc20vaW9jdGxzLmg+CisKK3N0cnVjdCB3aW5zaXplIHsKKyB1bnNpZ25lZCBzaG9ydCB3c19yb3c7CisgdW5zaWduZWQgc2hvcnQgd3NfY29sOworIHVuc2lnbmVkIHNob3J0IHdzX3hwaXhlbDsKKyB1bnNpZ25lZCBzaG9ydCB3c195cGl4ZWw7Cit9OworCisjZGVmaW5lIE5DQyA4CitzdHJ1Y3QgdGVybWlvIHsKKyB1bnNpZ25lZCBzaG9ydCBjX2lmbGFnOworIHVuc2lnbmVkIHNob3J0IGNfb2ZsYWc7CisgdW5zaWduZWQgc2hvcnQgY19jZmxhZzsKKyB1bnNpZ25lZCBzaG9ydCBjX2xmbGFnOworIHVuc2lnbmVkIGNoYXIgY19saW5lOworIHVuc2lnbmVkIGNoYXIgY19jY1tOQ0NdOworfTsKKworI2RlZmluZSBUSU9DTV9MRSAweDAwMQorI2RlZmluZSBUSU9DTV9EVFIgMHgwMDIKKyNkZWZpbmUgVElPQ01fUlRTIDB4MDA0CisjZGVmaW5lIFRJT0NNX1NUIDB4MDA4CisjZGVmaW5lIFRJT0NNX1NSIDB4MDEwCisjZGVmaW5lIFRJT0NNX0NUUyAweDAyMAorI2RlZmluZSBUSU9DTV9DQVIgMHgwNDAKKyNkZWZpbmUgVElPQ01fUk5HIDB4MDgwCisjZGVmaW5lIFRJT0NNX0RTUiAweDEwMAorI2RlZmluZSBUSU9DTV9DRCBUSU9DTV9DQVIKKyNkZWZpbmUgVElPQ01fUkkgVElPQ01fUk5HCisjZGVmaW5lIFRJT0NNX09VVDEgMHgyMDAwCisjZGVmaW5lIFRJT0NNX09VVDIgMHg0MDAwCisjZGVmaW5lIFRJT0NNX0xPT1AgMHg4MDAwCisKKyNkZWZpbmUgTl9UVFkgMAorI2RlZmluZSBOX1NMSVAgMQorI2RlZmluZSBOX01PVVNFIDIKKyNkZWZpbmUgTl9QUFAgMworI2RlZmluZSBOX1NUUklQIDQKKyNkZWZpbmUgTl9BWDI1IDUKKyNkZWZpbmUgTl9YMjUgNiAgCisjZGVmaW5lIE5fNlBBQ0sgNworI2RlZmluZSBOX01BU0MgOCAgCisjZGVmaW5lIE5fUjM5NjQgOSAgCisjZGVmaW5lIE5fUFJPRklCVVNfRkRMIDEwICAKKyNkZWZpbmUgTl9JUkRBIDExICAKKyNkZWZpbmUgTl9TTVNCTE9DSyAxMiAgCisjZGVmaW5lIE5fSERMQyAxMyAgCisjZGVmaW5lIE5fU1lOQ19QUFAgMTQKKyNkZWZpbmUgTl9IQ0kgMTUgIAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS90aHJlYWRfaW5mby5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3RocmVhZF9pbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMwZDJkYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS90aHJlYWRfaW5mby5oCkBAIC0wLDAgKzEsMTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19BU01fQVJNX1RIUkVBRF9JTkZPX0gKKyNkZWZpbmUgX19BU01fQVJNX1RIUkVBRF9JTkZPX0gKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vdGltZXguaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS90aW1leC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMGM0NzEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vdGltZXguaApAQCAtMCwwICsxLDE5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01BUk1fVElNRVhfSAorI2RlZmluZSBfQVNNQVJNX1RJTUVYX0gKKworI2luY2x1ZGUgPGFzbS9hcmNoL3RpbWV4Lmg+CisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBjeWNsZXNfdDsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vdGxiZmx1c2guaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS90bGJmbHVzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwYTIzZGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vdGxiZmx1c2guaApAQCAtMCwwICsxLDE3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01BUk1fVExCRkxVU0hfSAorI2RlZmluZSBfQVNNQVJNX1RMQkZMVVNIX0gKKworI2RlZmluZSB0bGJfZmx1c2godGxiKSAoKHZvaWQpIHRsYikKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vdG9wb2xvZ3kuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS90b3BvbG9neS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllY2NmZDQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vdG9wb2xvZ3kuaApAQCAtMCwwICsxLDE3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01fQVJNX1RPUE9MT0dZX0gKKyNkZWZpbmUgX0FTTV9BUk1fVE9QT0xPR1lfSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdG9wb2xvZ3kuaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vdHlwZXMuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjNjBmMTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vdHlwZXMuaApAQCAtMCwwICsxLDM2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQVNNX0FSTV9UWVBFU19ICisjZGVmaW5lIF9fQVNNX0FSTV9UWVBFU19ICisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgdW1vZGVfdDsKKwordHlwZWRlZiBfX3NpZ25lZF9fIGNoYXIgX19zODsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBfX3U4OworCit0eXBlZGVmIF9fc2lnbmVkX18gc2hvcnQgX19zMTY7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fdTE2OworCit0eXBlZGVmIF9fc2lnbmVkX18gaW50IF9fczMyOwordHlwZWRlZiB1bnNpZ25lZCBpbnQgX191MzI7CisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChfX1NUUklDVF9BTlNJX18pCit0eXBlZGVmIF9fc2lnbmVkX18gbG9uZyBsb25nIF9fczY0OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgX191NjQ7CisjZW5kaWYKKworI2VuZGlmCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vdWFjY2Vzcy5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3VhY2Nlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWZjM2YyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3VhY2Nlc3MuaApAQCAtMCwwICsxLDc3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01BUk1fVUFDQ0VTU19ICisjZGVmaW5lIF9BU01BUk1fVUFDQ0VTU19ICisKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGFzbS9lcnJuby5oPgorI2luY2x1ZGUgPGFzbS9tZW1vcnkuaD4KKyNpbmNsdWRlIDxhc20vZG9tYWluLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorCisjZGVmaW5lIFZFUklGWV9SRUFEIDAKKyNkZWZpbmUgVkVSSUZZX1dSSVRFIDEKKworc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeQoreworIHVuc2lnbmVkIGxvbmcgaW5zbiwgZml4dXA7Cit9OworCisjZGVmaW5lIEtFUk5FTF9EUyAweDAwMDAwMDAwCisjZGVmaW5lIGdldF9kcygpIChLRVJORUxfRFMpCisKKyNkZWZpbmUgVVNFUl9EUyBLRVJORUxfRFMKKworI2RlZmluZSBzZWdtZW50X2VxKGEsYikgKDEpCisjZGVmaW5lIF9fYWRkcl9vayhhZGRyKSAoMSkKKyNkZWZpbmUgX19yYW5nZV9vayhhZGRyLHNpemUpICgwKQorI2RlZmluZSBnZXRfZnMoKSAoS0VSTkVMX0RTKQorCisjZGVmaW5lIGdldF91c2VyKHgscCkgX19nZXRfdXNlcih4LHApCisjZGVmaW5lIHB1dF91c2VyKHgscCkgX19wdXRfdXNlcih4LHApCisjZGVmaW5lIGFjY2Vzc19vayh0eXBlLGFkZHIsc2l6ZSkgKF9fcmFuZ2Vfb2soYWRkcixzaXplKSA9PSAwKQorI2RlZmluZSBfX2dldF91c2VyKHgscHRyKSAgKHsgICBsb25nIF9fZ3VfZXJyID0gMDsgICBfX2dldF91c2VyX2VycigoeCksKHB0ciksX19ndV9lcnIpOyAgIF9fZ3VfZXJyOyAgfSkKKyNkZWZpbmUgX19nZXRfdXNlcl9lcnJvcih4LHB0cixlcnIpICAoeyAgIF9fZ2V0X3VzZXJfZXJyKCh4KSwocHRyKSxlcnIpOyAgICh2b2lkKSAwOyAgfSkKKyNkZWZpbmUgX19nZXRfdXNlcl9lcnIoeCxwdHIsZXJyKSAgZG8geyAgIHVuc2lnbmVkIGxvbmcgX19ndV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpKHB0cik7ICAgdW5zaWduZWQgbG9uZyBfX2d1X3ZhbDsgICBfX2Noa191c2VyX3B0cihwdHIpOyAgIHN3aXRjaCAoc2l6ZW9mKCoocHRyKSkpIHsgICBjYXNlIDE6IF9fZ2V0X3VzZXJfYXNtX2J5dGUoX19ndV92YWwsX19ndV9hZGRyLGVycik7IGJyZWFrOyAgIGNhc2UgMjogX19nZXRfdXNlcl9hc21faGFsZihfX2d1X3ZhbCxfX2d1X2FkZHIsZXJyKTsgYnJlYWs7ICAgY2FzZSA0OiBfX2dldF91c2VyX2FzbV93b3JkKF9fZ3VfdmFsLF9fZ3VfYWRkcixlcnIpOyBicmVhazsgICBkZWZhdWx0OiAoX19ndV92YWwpID0gX19nZXRfdXNlcl9iYWQoKTsgICB9ICAgKHgpID0gKF9fdHlwZW9mX18oKihwdHIpKSlfX2d1X3ZhbDsgIH0gd2hpbGUgKDApCisjZGVmaW5lIF9fZ2V0X3VzZXJfYXNtX2J5dGUoeCxhZGRyLGVycikgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyggICAiMToJbGRyYnQJJTEsWyUyXSwjMFxuIiAgICIyOlxuIiAgICIJLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIiAgICIJLmFsaWduCTJcbiIgICAiMzoJbW92CSUwLCAlM1xuIiAgICIJbW92CSUxLCAjMFxuIiAgICIJYgkyYlxuIiAgICIJLnByZXZpb3VzXG4iICAgIgkuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iICAgIgkuYWxpZ24JM1xuIiAgICIJLmxvbmcJMWIsIDNiXG4iICAgIgkucHJldmlvdXMiICAgOiAiK3IiIChlcnIpLCAiPSZyIiAoeCkgICA6ICJyIiAoYWRkciksICJpIiAoLUVGQVVMVCkgICA6ICJjYyIpCisjaWZuZGVmIF9fQVJNRUJfXworI2RlZmluZSBfX2dldF91c2VyX2FzbV9oYWxmKHgsX19ndV9hZGRyLGVycikgICh7ICAgdW5zaWduZWQgbG9uZyBfX2IxLCBfX2IyOyAgIF9fZ2V0X3VzZXJfYXNtX2J5dGUoX19iMSwgX19ndV9hZGRyLCBlcnIpOyAgIF9fZ2V0X3VzZXJfYXNtX2J5dGUoX19iMiwgX19ndV9hZGRyICsgMSwgZXJyKTsgICAoeCkgPSBfX2IxIHwgKF9fYjIgPDwgOCk7ICB9KQorI2Vsc2UKKyNkZWZpbmUgX19nZXRfdXNlcl9hc21faGFsZih4LF9fZ3VfYWRkcixlcnIpICAoeyAgIHVuc2lnbmVkIGxvbmcgX19iMSwgX19iMjsgICBfX2dldF91c2VyX2FzbV9ieXRlKF9fYjEsIF9fZ3VfYWRkciwgZXJyKTsgICBfX2dldF91c2VyX2FzbV9ieXRlKF9fYjIsIF9fZ3VfYWRkciArIDEsIGVycik7ICAgKHgpID0gKF9fYjEgPDwgOCkgfCBfX2IyOyAgfSkKKyNlbmRpZgorI2RlZmluZSBfX2dldF91c2VyX2FzbV93b3JkKHgsYWRkcixlcnIpICAgX19hc21fXyBfX3ZvbGF0aWxlX18oICAgIjE6CWxkcnQJJTEsWyUyXSwjMFxuIiAgICIyOlxuIiAgICIJLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIiAgICIJLmFsaWduCTJcbiIgICAiMzoJbW92CSUwLCAlM1xuIiAgICIJbW92CSUxLCAjMFxuIiAgICIJYgkyYlxuIiAgICIJLnByZXZpb3VzXG4iICAgIgkuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iICAgIgkuYWxpZ24JM1xuIiAgICIJLmxvbmcJMWIsIDNiXG4iICAgIgkucHJldmlvdXMiICAgOiAiK3IiIChlcnIpLCAiPSZyIiAoeCkgICA6ICJyIiAoYWRkciksICJpIiAoLUVGQVVMVCkgICA6ICJjYyIpCisjZGVmaW5lIF9fcHV0X3VzZXIoeCxwdHIpICAoeyAgIGxvbmcgX19wdV9lcnIgPSAwOyAgIF9fcHV0X3VzZXJfZXJyKCh4KSwocHRyKSxfX3B1X2Vycik7ICAgX19wdV9lcnI7ICB9KQorI2RlZmluZSBfX3B1dF91c2VyX2Vycm9yKHgscHRyLGVycikgICh7ICAgX19wdXRfdXNlcl9lcnIoKHgpLChwdHIpLGVycik7ICAgKHZvaWQpIDA7ICB9KQorI2RlZmluZSBfX3B1dF91c2VyX2Vycih4LHB0cixlcnIpICBkbyB7ICAgdW5zaWduZWQgbG9uZyBfX3B1X2FkZHIgPSAodW5zaWduZWQgbG9uZykocHRyKTsgICBfX3R5cGVvZl9fKCoocHRyKSkgX19wdV92YWwgPSAoeCk7ICAgX19jaGtfdXNlcl9wdHIocHRyKTsgICBzd2l0Y2ggKHNpemVvZigqKHB0cikpKSB7ICAgY2FzZSAxOiBfX3B1dF91c2VyX2FzbV9ieXRlKF9fcHVfdmFsLF9fcHVfYWRkcixlcnIpOyBicmVhazsgICBjYXNlIDI6IF9fcHV0X3VzZXJfYXNtX2hhbGYoX19wdV92YWwsX19wdV9hZGRyLGVycik7IGJyZWFrOyAgIGNhc2UgNDogX19wdXRfdXNlcl9hc21fd29yZChfX3B1X3ZhbCxfX3B1X2FkZHIsZXJyKTsgYnJlYWs7ICAgY2FzZSA4OiBfX3B1dF91c2VyX2FzbV9kd29yZChfX3B1X3ZhbCxfX3B1X2FkZHIsZXJyKTsgYnJlYWs7ICAgZGVmYXVsdDogX19wdXRfdXNlcl9iYWQoKTsgICB9ICB9IHdoaWxlICgwKQorI2RlZmluZSBfX3B1dF91c2VyX2FzbV9ieXRlKHgsX19wdV9hZGRyLGVycikgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyggICAiMToJc3RyYnQJJTEsWyUyXSwjMFxuIiAgICIyOlxuIiAgICIJLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIiAgICIJLmFsaWduCTJcbiIgICAiMzoJbW92CSUwLCAlM1xuIiAgICIJYgkyYlxuIiAgICIJLnByZXZpb3VzXG4iICAgIgkuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iICAgIgkuYWxpZ24JM1xuIiAgICIJLmxvbmcJMWIsIDNiXG4iICAgIgkucHJldmlvdXMiICAgOiAiK3IiIChlcnIpICAgOiAiciIgKHgpLCAiciIgKF9fcHVfYWRkciksICJpIiAoLUVGQVVMVCkgICA6ICJjYyIpCisjaWZuZGVmIF9fQVJNRUJfXworI2RlZmluZSBfX3B1dF91c2VyX2FzbV9oYWxmKHgsX19wdV9hZGRyLGVycikgICh7ICAgdW5zaWduZWQgbG9uZyBfX3RlbXAgPSAodW5zaWduZWQgbG9uZykoeCk7ICAgX19wdXRfdXNlcl9hc21fYnl0ZShfX3RlbXAsIF9fcHVfYWRkciwgZXJyKTsgICBfX3B1dF91c2VyX2FzbV9ieXRlKF9fdGVtcCA+PiA4LCBfX3B1X2FkZHIgKyAxLCBlcnIpOyAgfSkKKyNlbHNlCisjZGVmaW5lIF9fcHV0X3VzZXJfYXNtX2hhbGYoeCxfX3B1X2FkZHIsZXJyKSAgKHsgICB1bnNpZ25lZCBsb25nIF9fdGVtcCA9ICh1bnNpZ25lZCBsb25nKSh4KTsgICBfX3B1dF91c2VyX2FzbV9ieXRlKF9fdGVtcCA+PiA4LCBfX3B1X2FkZHIsIGVycik7ICAgX19wdXRfdXNlcl9hc21fYnl0ZShfX3RlbXAsIF9fcHVfYWRkciArIDEsIGVycik7ICB9KQorI2VuZGlmCisjZGVmaW5lIF9fcHV0X3VzZXJfYXNtX3dvcmQoeCxfX3B1X2FkZHIsZXJyKSAgIF9fYXNtX18gX192b2xhdGlsZV9fKCAgICIxOglzdHJ0CSUxLFslMl0sIzBcbiIgICAiMjpcbiIgICAiCS5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIgICAiCS5hbGlnbgkyXG4iICAgIjM6CW1vdgklMCwgJTNcbiIgICAiCWIJMmJcbiIgICAiCS5wcmV2aW91c1xuIiAgICIJLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIiAgICIJLmFsaWduCTNcbiIgICAiCS5sb25nCTFiLCAzYlxuIiAgICIJLnByZXZpb3VzIiAgIDogIityIiAoZXJyKSAgIDogInIiICh4KSwgInIiIChfX3B1X2FkZHIpLCAiaSIgKC1FRkFVTFQpICAgOiAiY2MiKQorI2lmbmRlZiBfX0FSTUVCX18KKyNkZWZpbmUgX19yZWdfb3BlcjAgIiVSMiIKKyNkZWZpbmUgX19yZWdfb3BlcjEgIiVRMiIKKyNlbHNlCisjZGVmaW5lIF9fcmVnX29wZXIwICIlUTIiCisjZGVmaW5lIF9fcmVnX29wZXIxICIlUjIiCisjZW5kaWYKKyNkZWZpbmUgX19wdXRfdXNlcl9hc21fZHdvcmQoeCxfX3B1X2FkZHIsZXJyKSAgIF9fYXNtX18gX192b2xhdGlsZV9fKCAgICIxOglzdHJ0CSIgX19yZWdfb3BlcjEgIiwgWyUxXSwgIzRcbiIgICAiMjoJc3RydAkiIF9fcmVnX29wZXIwICIsIFslMV0sICMwXG4iICAgIjM6XG4iICAgIgkuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iICAgIgkuYWxpZ24JMlxuIiAgICI0Ogltb3YJJTAsICUzXG4iICAgIgliCTNiXG4iICAgIgkucHJldmlvdXNcbiIgICAiCS5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIgICAiCS5hbGlnbgkzXG4iICAgIgkubG9uZwkxYiwgNGJcbiIgICAiCS5sb25nCTJiLCA0YlxuIiAgICIJLnByZXZpb3VzIiAgIDogIityIiAoZXJyKSwgIityIiAoX19wdV9hZGRyKSAgIDogInIiICh4KSwgImkiICgtRUZBVUxUKSAgIDogImNjIikKKyNkZWZpbmUgX19jb3B5X2Zyb21fdXNlcih0byxmcm9tLG4pIChtZW1jcHkodG8sICh2b2lkIF9fZm9yY2UgKilmcm9tLCBuKSwgMCkKKyNkZWZpbmUgX19jb3B5X3RvX3VzZXIodG8sZnJvbSxuKSAobWVtY3B5KCh2b2lkIF9fZm9yY2UgKil0bywgZnJvbSwgbiksIDApCisjZGVmaW5lIF9fY2xlYXJfdXNlcihhZGRyLG4pIChtZW1zZXQoKHZvaWQgX19mb3JjZSAqKWFkZHIsIDAsIG4pLCAwKQorCisjZGVmaW5lIF9fY29weV90b191c2VyX2luYXRvbWljIF9fY29weV90b191c2VyCisjZGVmaW5lIF9fY29weV9mcm9tX3VzZXJfaW5hdG9taWMgX19jb3B5X2Zyb21fdXNlcgorI2RlZmluZSBzdHJsZW5fdXNlcihzKSBzdHJubGVuX3VzZXIocywgfjBVTCA+PiAxKQorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vdW5hbGlnbmVkLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vdW5hbGlnbmVkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI5YjA5NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS91bmFsaWduZWQuaApAQCAtMCwwICsxLDM4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQVNNX0FSTV9VTkFMSUdORURfSAorI2RlZmluZSBfX0FTTV9BUk1fVU5BTElHTkVEX0gKKworI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCisjZGVmaW5lIF9fZ2V0X3VuYWxpZ25lZF8yX2xlKF9fcCkgICAoX19wWzBdIHwgX19wWzFdIDw8IDgpCisKKyNkZWZpbmUgX19nZXRfdW5hbGlnbmVkXzJfYmUoX19wKSAgIChfX3BbMF0gPDwgOCB8IF9fcFsxXSkKKworI2RlZmluZSBfX2dldF91bmFsaWduZWRfNF9sZShfX3ApICAgKF9fcFswXSB8IF9fcFsxXSA8PCA4IHwgX19wWzJdIDw8IDE2IHwgX19wWzNdIDw8IDI0KQorCisjZGVmaW5lIF9fZ2V0X3VuYWxpZ25lZF80X2JlKF9fcCkgICAoX19wWzBdIDw8IDI0IHwgX19wWzFdIDw8IDE2IHwgX19wWzJdIDw8IDggfCBfX3BbM10pCisKKyNkZWZpbmUgX19nZXRfdW5hbGlnbmVkX2xlKHB0cikgICAoeyAgIF9fdHlwZW9mX18oKihwdHIpKSBfX3Y7ICAgX191OCAqX19wID0gKF9fdTggKikocHRyKTsgICBzd2l0Y2ggKHNpemVvZigqKHB0cikpKSB7ICAgY2FzZSAxOiBfX3YgPSAqKHB0cik7IGJyZWFrOyAgIGNhc2UgMjogX192ID0gX19nZXRfdW5hbGlnbmVkXzJfbGUoX19wKTsgYnJlYWs7ICAgY2FzZSA0OiBfX3YgPSBfX2dldF91bmFsaWduZWRfNF9sZShfX3ApOyBicmVhazsgICBjYXNlIDg6IHsgICB1bnNpZ25lZCBpbnQgX192MSwgX192MjsgICBfX3YyID0gX19nZXRfdW5hbGlnbmVkXzRfbGUoKF9fcCs0KSk7ICAgX192MSA9IF9fZ2V0X3VuYWxpZ25lZF80X2xlKF9fcCk7ICAgX192ID0gKCh1bnNpZ25lZCBsb25nIGxvbmcpX192MiA8PCAzMiB8IF9fdjEpOyAgIH0gICBicmVhazsgICBkZWZhdWx0OiBfX3YgPSBfX2J1Z191bmFsaWduZWRfeChfX3ApOyBicmVhazsgICB9ICAgX192OyAgIH0pCisKKyNkZWZpbmUgX19nZXRfdW5hbGlnbmVkX2JlKHB0cikgICAoeyAgIF9fdHlwZW9mX18oKihwdHIpKSBfX3Y7ICAgX191OCAqX19wID0gKF9fdTggKikocHRyKTsgICBzd2l0Y2ggKHNpemVvZigqKHB0cikpKSB7ICAgY2FzZSAxOiBfX3YgPSAqKHB0cik7IGJyZWFrOyAgIGNhc2UgMjogX192ID0gX19nZXRfdW5hbGlnbmVkXzJfYmUoX19wKTsgYnJlYWs7ICAgY2FzZSA0OiBfX3YgPSBfX2dldF91bmFsaWduZWRfNF9iZShfX3ApOyBicmVhazsgICBjYXNlIDg6IHsgICB1bnNpZ25lZCBpbnQgX192MSwgX192MjsgICBfX3YyID0gX19nZXRfdW5hbGlnbmVkXzRfYmUoX19wKTsgICBfX3YxID0gX19nZXRfdW5hbGlnbmVkXzRfYmUoKF9fcCs0KSk7ICAgX192ID0gKCh1bnNpZ25lZCBsb25nIGxvbmcpX192MiA8PCAzMiB8IF9fdjEpOyAgIH0gICBicmVhazsgICBkZWZhdWx0OiBfX3YgPSBfX2J1Z191bmFsaWduZWRfeChfX3ApOyBicmVhazsgICB9ICAgX192OyAgIH0pCisKKyNkZWZpbmUgX19wdXRfdW5hbGlnbmVkX2xlKHZhbCxwdHIpICAgKHsgICBzd2l0Y2ggKHNpemVvZigqKHB0cikpKSB7ICAgY2FzZSAxOiAgICoocHRyKSA9ICh2YWwpOyAgIGJyZWFrOyAgIGNhc2UgMjogX19wdXRfdW5hbGlnbmVkXzJfbGUoKHZhbCksKF9fdTggKikocHRyKSk7ICAgYnJlYWs7ICAgY2FzZSA0OiBfX3B1dF91bmFsaWduZWRfNF9sZSgodmFsKSwoX191OCAqKShwdHIpKTsgICBicmVhazsgICBjYXNlIDg6IF9fcHV0X3VuYWxpZ25lZF84X2xlKCh2YWwpLChfX3U4ICopKHB0cikpOyAgIGJyZWFrOyAgIGRlZmF1bHQ6IF9fYnVnX3VuYWxpZ25lZF94KHB0cik7ICAgYnJlYWs7ICAgfSAgICh2b2lkKSAwOyAgIH0pCisjZGVmaW5lIF9fcHV0X3VuYWxpZ25lZF9iZSh2YWwscHRyKSAgICh7ICAgc3dpdGNoIChzaXplb2YoKihwdHIpKSkgeyAgIGNhc2UgMTogICAqKHB0cikgPSAodmFsKTsgICBicmVhazsgICBjYXNlIDI6IF9fcHV0X3VuYWxpZ25lZF8yX2JlKCh2YWwpLChfX3U4ICopKHB0cikpOyAgIGJyZWFrOyAgIGNhc2UgNDogX19wdXRfdW5hbGlnbmVkXzRfYmUoKHZhbCksKF9fdTggKikocHRyKSk7ICAgYnJlYWs7ICAgY2FzZSA4OiBfX3B1dF91bmFsaWduZWRfOF9iZSgodmFsKSwoX191OCAqKShwdHIpKTsgICBicmVhazsgICBkZWZhdWx0OiBfX2J1Z191bmFsaWduZWRfeChwdHIpOyAgIGJyZWFrOyAgIH0gICAodm9pZCkgMDsgICB9KQorI2lmbmRlZiBfX0FSTUVCX18KKyNkZWZpbmUgZ2V0X3VuYWxpZ25lZCBfX2dldF91bmFsaWduZWRfbGUKKyNkZWZpbmUgcHV0X3VuYWxpZ25lZCBfX3B1dF91bmFsaWduZWRfbGUKKyNlbHNlCisjZGVmaW5lIGdldF91bmFsaWduZWQgX19nZXRfdW5hbGlnbmVkX2JlCisjZGVmaW5lIHB1dF91bmFsaWduZWQgX19wdXRfdW5hbGlnbmVkX2JlCisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3VuaXN0ZC5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3VuaXN0ZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhMzBkZGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vdW5pc3RkLmgKQEAgLTAsMCArMSwzNTkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19BU01fQVJNX1VOSVNURF9ICisjZGVmaW5lIF9fQVNNX0FSTV9VTklTVERfSAorCisjZGVmaW5lIF9fTlJfT0FCSV9TWVNDQUxMX0JBU0UgMHg5MDAwMDAKKworI2lmIGRlZmluZWQoX190aHVtYl9fKSB8fCBkZWZpbmVkKF9fQVJNX0VBQklfXykKKyNkZWZpbmUgX19OUl9TWVNDQUxMX0JBU0UgMAorI2Vsc2UKKyNkZWZpbmUgX19OUl9TWVNDQUxMX0JBU0UgX19OUl9PQUJJX1NZU0NBTExfQkFTRQorI2VuZGlmCisKKyNkZWZpbmUgX19OUl9yZXN0YXJ0X3N5c2NhbGwgKF9fTlJfU1lTQ0FMTF9CQVNFKyAwKQorI2RlZmluZSBfX05SX2V4aXQgKF9fTlJfU1lTQ0FMTF9CQVNFKyAxKQorI2RlZmluZSBfX05SX2ZvcmsgKF9fTlJfU1lTQ0FMTF9CQVNFKyAyKQorI2RlZmluZSBfX05SX3JlYWQgKF9fTlJfU1lTQ0FMTF9CQVNFKyAzKQorI2RlZmluZSBfX05SX3dyaXRlIChfX05SX1NZU0NBTExfQkFTRSsgNCkKKyNkZWZpbmUgX19OUl9vcGVuIChfX05SX1NZU0NBTExfQkFTRSsgNSkKKyNkZWZpbmUgX19OUl9jbG9zZSAoX19OUl9TWVNDQUxMX0JBU0UrIDYpCisKKyNkZWZpbmUgX19OUl9jcmVhdCAoX19OUl9TWVNDQUxMX0JBU0UrIDgpCisjZGVmaW5lIF9fTlJfbGluayAoX19OUl9TWVNDQUxMX0JBU0UrIDkpCisjZGVmaW5lIF9fTlJfdW5saW5rIChfX05SX1NZU0NBTExfQkFTRSsgMTApCisjZGVmaW5lIF9fTlJfZXhlY3ZlIChfX05SX1NZU0NBTExfQkFTRSsgMTEpCisjZGVmaW5lIF9fTlJfY2hkaXIgKF9fTlJfU1lTQ0FMTF9CQVNFKyAxMikKKyNkZWZpbmUgX19OUl90aW1lIChfX05SX1NZU0NBTExfQkFTRSsgMTMpCisjZGVmaW5lIF9fTlJfbWtub2QgKF9fTlJfU1lTQ0FMTF9CQVNFKyAxNCkKKyNkZWZpbmUgX19OUl9jaG1vZCAoX19OUl9TWVNDQUxMX0JBU0UrIDE1KQorI2RlZmluZSBfX05SX2xjaG93biAoX19OUl9TWVNDQUxMX0JBU0UrIDE2KQorCisjZGVmaW5lIF9fTlJfbHNlZWsgKF9fTlJfU1lTQ0FMTF9CQVNFKyAxOSkKKyNkZWZpbmUgX19OUl9nZXRwaWQgKF9fTlJfU1lTQ0FMTF9CQVNFKyAyMCkKKyNkZWZpbmUgX19OUl9tb3VudCAoX19OUl9TWVNDQUxMX0JBU0UrIDIxKQorI2RlZmluZSBfX05SX3Vtb3VudCAoX19OUl9TWVNDQUxMX0JBU0UrIDIyKQorI2RlZmluZSBfX05SX3NldHVpZCAoX19OUl9TWVNDQUxMX0JBU0UrIDIzKQorI2RlZmluZSBfX05SX2dldHVpZCAoX19OUl9TWVNDQUxMX0JBU0UrIDI0KQorI2RlZmluZSBfX05SX3N0aW1lIChfX05SX1NZU0NBTExfQkFTRSsgMjUpCisjZGVmaW5lIF9fTlJfcHRyYWNlIChfX05SX1NZU0NBTExfQkFTRSsgMjYpCisjZGVmaW5lIF9fTlJfYWxhcm0gKF9fTlJfU1lTQ0FMTF9CQVNFKyAyNykKKworI2RlZmluZSBfX05SX3BhdXNlIChfX05SX1NZU0NBTExfQkFTRSsgMjkpCisjZGVmaW5lIF9fTlJfdXRpbWUgKF9fTlJfU1lTQ0FMTF9CQVNFKyAzMCkKKworI2RlZmluZSBfX05SX2FjY2VzcyAoX19OUl9TWVNDQUxMX0JBU0UrIDMzKQorI2RlZmluZSBfX05SX25pY2UgKF9fTlJfU1lTQ0FMTF9CQVNFKyAzNCkKKworI2RlZmluZSBfX05SX3N5bmMgKF9fTlJfU1lTQ0FMTF9CQVNFKyAzNikKKyNkZWZpbmUgX19OUl9raWxsIChfX05SX1NZU0NBTExfQkFTRSsgMzcpCisjZGVmaW5lIF9fTlJfcmVuYW1lIChfX05SX1NZU0NBTExfQkFTRSsgMzgpCisjZGVmaW5lIF9fTlJfbWtkaXIgKF9fTlJfU1lTQ0FMTF9CQVNFKyAzOSkKKyNkZWZpbmUgX19OUl9ybWRpciAoX19OUl9TWVNDQUxMX0JBU0UrIDQwKQorI2RlZmluZSBfX05SX2R1cCAoX19OUl9TWVNDQUxMX0JBU0UrIDQxKQorI2RlZmluZSBfX05SX3BpcGUgKF9fTlJfU1lTQ0FMTF9CQVNFKyA0MikKKyNkZWZpbmUgX19OUl90aW1lcyAoX19OUl9TWVNDQUxMX0JBU0UrIDQzKQorCisjZGVmaW5lIF9fTlJfYnJrIChfX05SX1NZU0NBTExfQkFTRSsgNDUpCisjZGVmaW5lIF9fTlJfc2V0Z2lkIChfX05SX1NZU0NBTExfQkFTRSsgNDYpCisjZGVmaW5lIF9fTlJfZ2V0Z2lkIChfX05SX1NZU0NBTExfQkFTRSsgNDcpCisKKyNkZWZpbmUgX19OUl9nZXRldWlkIChfX05SX1NZU0NBTExfQkFTRSsgNDkpCisjZGVmaW5lIF9fTlJfZ2V0ZWdpZCAoX19OUl9TWVNDQUxMX0JBU0UrIDUwKQorI2RlZmluZSBfX05SX2FjY3QgKF9fTlJfU1lTQ0FMTF9CQVNFKyA1MSkKKyNkZWZpbmUgX19OUl91bW91bnQyIChfX05SX1NZU0NBTExfQkFTRSsgNTIpCisKKyNkZWZpbmUgX19OUl9pb2N0bCAoX19OUl9TWVNDQUxMX0JBU0UrIDU0KQorI2RlZmluZSBfX05SX2ZjbnRsIChfX05SX1NZU0NBTExfQkFTRSsgNTUpCisKKyNkZWZpbmUgX19OUl9zZXRwZ2lkIChfX05SX1NZU0NBTExfQkFTRSsgNTcpCisKKyNkZWZpbmUgX19OUl91bWFzayAoX19OUl9TWVNDQUxMX0JBU0UrIDYwKQorI2RlZmluZSBfX05SX2Nocm9vdCAoX19OUl9TWVNDQUxMX0JBU0UrIDYxKQorI2RlZmluZSBfX05SX3VzdGF0IChfX05SX1NZU0NBTExfQkFTRSsgNjIpCisjZGVmaW5lIF9fTlJfZHVwMiAoX19OUl9TWVNDQUxMX0JBU0UrIDYzKQorI2RlZmluZSBfX05SX2dldHBwaWQgKF9fTlJfU1lTQ0FMTF9CQVNFKyA2NCkKKyNkZWZpbmUgX19OUl9nZXRwZ3JwIChfX05SX1NZU0NBTExfQkFTRSsgNjUpCisjZGVmaW5lIF9fTlJfc2V0c2lkIChfX05SX1NZU0NBTExfQkFTRSsgNjYpCisjZGVmaW5lIF9fTlJfc2lnYWN0aW9uIChfX05SX1NZU0NBTExfQkFTRSsgNjcpCisKKyNkZWZpbmUgX19OUl9zZXRyZXVpZCAoX19OUl9TWVNDQUxMX0JBU0UrIDcwKQorI2RlZmluZSBfX05SX3NldHJlZ2lkIChfX05SX1NZU0NBTExfQkFTRSsgNzEpCisjZGVmaW5lIF9fTlJfc2lnc3VzcGVuZCAoX19OUl9TWVNDQUxMX0JBU0UrIDcyKQorI2RlZmluZSBfX05SX3NpZ3BlbmRpbmcgKF9fTlJfU1lTQ0FMTF9CQVNFKyA3MykKKyNkZWZpbmUgX19OUl9zZXRob3N0bmFtZSAoX19OUl9TWVNDQUxMX0JBU0UrIDc0KQorI2RlZmluZSBfX05SX3NldHJsaW1pdCAoX19OUl9TWVNDQUxMX0JBU0UrIDc1KQorI2RlZmluZSBfX05SX2dldHJsaW1pdCAoX19OUl9TWVNDQUxMX0JBU0UrIDc2KSAgCisjZGVmaW5lIF9fTlJfZ2V0cnVzYWdlIChfX05SX1NZU0NBTExfQkFTRSsgNzcpCisjZGVmaW5lIF9fTlJfZ2V0dGltZW9mZGF5IChfX05SX1NZU0NBTExfQkFTRSsgNzgpCisjZGVmaW5lIF9fTlJfc2V0dGltZW9mZGF5IChfX05SX1NZU0NBTExfQkFTRSsgNzkpCisjZGVmaW5lIF9fTlJfZ2V0Z3JvdXBzIChfX05SX1NZU0NBTExfQkFTRSsgODApCisjZGVmaW5lIF9fTlJfc2V0Z3JvdXBzIChfX05SX1NZU0NBTExfQkFTRSsgODEpCisjZGVmaW5lIF9fTlJfc2VsZWN0IChfX05SX1NZU0NBTExfQkFTRSsgODIpCisjZGVmaW5lIF9fTlJfc3ltbGluayAoX19OUl9TWVNDQUxMX0JBU0UrIDgzKQorCisjZGVmaW5lIF9fTlJfcmVhZGxpbmsgKF9fTlJfU1lTQ0FMTF9CQVNFKyA4NSkKKyNkZWZpbmUgX19OUl91c2VsaWIgKF9fTlJfU1lTQ0FMTF9CQVNFKyA4NikKKyNkZWZpbmUgX19OUl9zd2Fwb24gKF9fTlJfU1lTQ0FMTF9CQVNFKyA4NykKKyNkZWZpbmUgX19OUl9yZWJvb3QgKF9fTlJfU1lTQ0FMTF9CQVNFKyA4OCkKKyNkZWZpbmUgX19OUl9yZWFkZGlyIChfX05SX1NZU0NBTExfQkFTRSsgODkpCisjZGVmaW5lIF9fTlJfbW1hcCAoX19OUl9TWVNDQUxMX0JBU0UrIDkwKQorI2RlZmluZSBfX05SX211bm1hcCAoX19OUl9TWVNDQUxMX0JBU0UrIDkxKQorI2RlZmluZSBfX05SX3RydW5jYXRlIChfX05SX1NZU0NBTExfQkFTRSsgOTIpCisjZGVmaW5lIF9fTlJfZnRydW5jYXRlIChfX05SX1NZU0NBTExfQkFTRSsgOTMpCisjZGVmaW5lIF9fTlJfZmNobW9kIChfX05SX1NZU0NBTExfQkFTRSsgOTQpCisjZGVmaW5lIF9fTlJfZmNob3duIChfX05SX1NZU0NBTExfQkFTRSsgOTUpCisjZGVmaW5lIF9fTlJfZ2V0cHJpb3JpdHkgKF9fTlJfU1lTQ0FMTF9CQVNFKyA5NikKKyNkZWZpbmUgX19OUl9zZXRwcmlvcml0eSAoX19OUl9TWVNDQUxMX0JBU0UrIDk3KQorCisjZGVmaW5lIF9fTlJfc3RhdGZzIChfX05SX1NZU0NBTExfQkFTRSsgOTkpCisjZGVmaW5lIF9fTlJfZnN0YXRmcyAoX19OUl9TWVNDQUxMX0JBU0UrMTAwKQorCisjZGVmaW5lIF9fTlJfc29ja2V0Y2FsbCAoX19OUl9TWVNDQUxMX0JBU0UrMTAyKQorI2RlZmluZSBfX05SX3N5c2xvZyAoX19OUl9TWVNDQUxMX0JBU0UrMTAzKQorI2RlZmluZSBfX05SX3NldGl0aW1lciAoX19OUl9TWVNDQUxMX0JBU0UrMTA0KQorI2RlZmluZSBfX05SX2dldGl0aW1lciAoX19OUl9TWVNDQUxMX0JBU0UrMTA1KQorI2RlZmluZSBfX05SX3N0YXQgKF9fTlJfU1lTQ0FMTF9CQVNFKzEwNikKKyNkZWZpbmUgX19OUl9sc3RhdCAoX19OUl9TWVNDQUxMX0JBU0UrMTA3KQorI2RlZmluZSBfX05SX2ZzdGF0IChfX05SX1NZU0NBTExfQkFTRSsxMDgpCisKKyNkZWZpbmUgX19OUl92aGFuZ3VwIChfX05SX1NZU0NBTExfQkFTRSsxMTEpCisKKyNkZWZpbmUgX19OUl9zeXNjYWxsIChfX05SX1NZU0NBTExfQkFTRSsxMTMpICAKKyNkZWZpbmUgX19OUl93YWl0NCAoX19OUl9TWVNDQUxMX0JBU0UrMTE0KQorI2RlZmluZSBfX05SX3N3YXBvZmYgKF9fTlJfU1lTQ0FMTF9CQVNFKzExNSkKKyNkZWZpbmUgX19OUl9zeXNpbmZvIChfX05SX1NZU0NBTExfQkFTRSsxMTYpCisjZGVmaW5lIF9fTlJfaXBjIChfX05SX1NZU0NBTExfQkFTRSsxMTcpCisjZGVmaW5lIF9fTlJfZnN5bmMgKF9fTlJfU1lTQ0FMTF9CQVNFKzExOCkKKyNkZWZpbmUgX19OUl9zaWdyZXR1cm4gKF9fTlJfU1lTQ0FMTF9CQVNFKzExOSkKKyNkZWZpbmUgX19OUl9jbG9uZSAoX19OUl9TWVNDQUxMX0JBU0UrMTIwKQorI2RlZmluZSBfX05SX3NldGRvbWFpbm5hbWUgKF9fTlJfU1lTQ0FMTF9CQVNFKzEyMSkKKyNkZWZpbmUgX19OUl91bmFtZSAoX19OUl9TWVNDQUxMX0JBU0UrMTIyKQorCisjZGVmaW5lIF9fTlJfYWRqdGltZXggKF9fTlJfU1lTQ0FMTF9CQVNFKzEyNCkKKyNkZWZpbmUgX19OUl9tcHJvdGVjdCAoX19OUl9TWVNDQUxMX0JBU0UrMTI1KQorI2RlZmluZSBfX05SX3NpZ3Byb2NtYXNrIChfX05SX1NZU0NBTExfQkFTRSsxMjYpCisKKyNkZWZpbmUgX19OUl9pbml0X21vZHVsZSAoX19OUl9TWVNDQUxMX0JBU0UrMTI4KQorI2RlZmluZSBfX05SX2RlbGV0ZV9tb2R1bGUgKF9fTlJfU1lTQ0FMTF9CQVNFKzEyOSkKKworI2RlZmluZSBfX05SX3F1b3RhY3RsIChfX05SX1NZU0NBTExfQkFTRSsxMzEpCisjZGVmaW5lIF9fTlJfZ2V0cGdpZCAoX19OUl9TWVNDQUxMX0JBU0UrMTMyKQorI2RlZmluZSBfX05SX2ZjaGRpciAoX19OUl9TWVNDQUxMX0JBU0UrMTMzKQorI2RlZmluZSBfX05SX2JkZmx1c2ggKF9fTlJfU1lTQ0FMTF9CQVNFKzEzNCkKKyNkZWZpbmUgX19OUl9zeXNmcyAoX19OUl9TWVNDQUxMX0JBU0UrMTM1KQorI2RlZmluZSBfX05SX3BlcnNvbmFsaXR5IChfX05SX1NZU0NBTExfQkFTRSsxMzYpCisKKyNkZWZpbmUgX19OUl9zZXRmc3VpZCAoX19OUl9TWVNDQUxMX0JBU0UrMTM4KQorI2RlZmluZSBfX05SX3NldGZzZ2lkIChfX05SX1NZU0NBTExfQkFTRSsxMzkpCisjZGVmaW5lIF9fTlJfX2xsc2VlayAoX19OUl9TWVNDQUxMX0JBU0UrMTQwKQorI2RlZmluZSBfX05SX2dldGRlbnRzIChfX05SX1NZU0NBTExfQkFTRSsxNDEpCisjZGVmaW5lIF9fTlJfX25ld3NlbGVjdCAoX19OUl9TWVNDQUxMX0JBU0UrMTQyKQorI2RlZmluZSBfX05SX2Zsb2NrIChfX05SX1NZU0NBTExfQkFTRSsxNDMpCisjZGVmaW5lIF9fTlJfbXN5bmMgKF9fTlJfU1lTQ0FMTF9CQVNFKzE0NCkKKyNkZWZpbmUgX19OUl9yZWFkdiAoX19OUl9TWVNDQUxMX0JBU0UrMTQ1KQorI2RlZmluZSBfX05SX3dyaXRldiAoX19OUl9TWVNDQUxMX0JBU0UrMTQ2KQorI2RlZmluZSBfX05SX2dldHNpZCAoX19OUl9TWVNDQUxMX0JBU0UrMTQ3KQorI2RlZmluZSBfX05SX2ZkYXRhc3luYyAoX19OUl9TWVNDQUxMX0JBU0UrMTQ4KQorI2RlZmluZSBfX05SX19zeXNjdGwgKF9fTlJfU1lTQ0FMTF9CQVNFKzE0OSkKKyNkZWZpbmUgX19OUl9tbG9jayAoX19OUl9TWVNDQUxMX0JBU0UrMTUwKQorI2RlZmluZSBfX05SX211bmxvY2sgKF9fTlJfU1lTQ0FMTF9CQVNFKzE1MSkKKyNkZWZpbmUgX19OUl9tbG9ja2FsbCAoX19OUl9TWVNDQUxMX0JBU0UrMTUyKQorI2RlZmluZSBfX05SX211bmxvY2thbGwgKF9fTlJfU1lTQ0FMTF9CQVNFKzE1MykKKyNkZWZpbmUgX19OUl9zY2hlZF9zZXRwYXJhbSAoX19OUl9TWVNDQUxMX0JBU0UrMTU0KQorI2RlZmluZSBfX05SX3NjaGVkX2dldHBhcmFtIChfX05SX1NZU0NBTExfQkFTRSsxNTUpCisjZGVmaW5lIF9fTlJfc2NoZWRfc2V0c2NoZWR1bGVyIChfX05SX1NZU0NBTExfQkFTRSsxNTYpCisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0c2NoZWR1bGVyIChfX05SX1NZU0NBTExfQkFTRSsxNTcpCisjZGVmaW5lIF9fTlJfc2NoZWRfeWllbGQgKF9fTlJfU1lTQ0FMTF9CQVNFKzE1OCkKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4IChfX05SX1NZU0NBTExfQkFTRSsxNTkpCisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAoX19OUl9TWVNDQUxMX0JBU0UrMTYwKQorI2RlZmluZSBfX05SX3NjaGVkX3JyX2dldF9pbnRlcnZhbCAoX19OUl9TWVNDQUxMX0JBU0UrMTYxKQorI2RlZmluZSBfX05SX25hbm9zbGVlcCAoX19OUl9TWVNDQUxMX0JBU0UrMTYyKQorI2RlZmluZSBfX05SX21yZW1hcCAoX19OUl9TWVNDQUxMX0JBU0UrMTYzKQorI2RlZmluZSBfX05SX3NldHJlc3VpZCAoX19OUl9TWVNDQUxMX0JBU0UrMTY0KQorI2RlZmluZSBfX05SX2dldHJlc3VpZCAoX19OUl9TWVNDQUxMX0JBU0UrMTY1KQorCisjZGVmaW5lIF9fTlJfcG9sbCAoX19OUl9TWVNDQUxMX0JBU0UrMTY4KQorI2RlZmluZSBfX05SX25mc3NlcnZjdGwgKF9fTlJfU1lTQ0FMTF9CQVNFKzE2OSkKKyNkZWZpbmUgX19OUl9zZXRyZXNnaWQgKF9fTlJfU1lTQ0FMTF9CQVNFKzE3MCkKKyNkZWZpbmUgX19OUl9nZXRyZXNnaWQgKF9fTlJfU1lTQ0FMTF9CQVNFKzE3MSkKKyNkZWZpbmUgX19OUl9wcmN0bCAoX19OUl9TWVNDQUxMX0JBU0UrMTcyKQorI2RlZmluZSBfX05SX3J0X3NpZ3JldHVybiAoX19OUl9TWVNDQUxMX0JBU0UrMTczKQorI2RlZmluZSBfX05SX3J0X3NpZ2FjdGlvbiAoX19OUl9TWVNDQUxMX0JBU0UrMTc0KQorI2RlZmluZSBfX05SX3J0X3NpZ3Byb2NtYXNrIChfX05SX1NZU0NBTExfQkFTRSsxNzUpCisjZGVmaW5lIF9fTlJfcnRfc2lncGVuZGluZyAoX19OUl9TWVNDQUxMX0JBU0UrMTc2KQorI2RlZmluZSBfX05SX3J0X3NpZ3RpbWVkd2FpdCAoX19OUl9TWVNDQUxMX0JBU0UrMTc3KQorI2RlZmluZSBfX05SX3J0X3NpZ3F1ZXVlaW5mbyAoX19OUl9TWVNDQUxMX0JBU0UrMTc4KQorI2RlZmluZSBfX05SX3J0X3NpZ3N1c3BlbmQgKF9fTlJfU1lTQ0FMTF9CQVNFKzE3OSkKKyNkZWZpbmUgX19OUl9wcmVhZDY0IChfX05SX1NZU0NBTExfQkFTRSsxODApCisjZGVmaW5lIF9fTlJfcHdyaXRlNjQgKF9fTlJfU1lTQ0FMTF9CQVNFKzE4MSkKKyNkZWZpbmUgX19OUl9jaG93biAoX19OUl9TWVNDQUxMX0JBU0UrMTgyKQorI2RlZmluZSBfX05SX2dldGN3ZCAoX19OUl9TWVNDQUxMX0JBU0UrMTgzKQorI2RlZmluZSBfX05SX2NhcGdldCAoX19OUl9TWVNDQUxMX0JBU0UrMTg0KQorI2RlZmluZSBfX05SX2NhcHNldCAoX19OUl9TWVNDQUxMX0JBU0UrMTg1KQorI2RlZmluZSBfX05SX3NpZ2FsdHN0YWNrIChfX05SX1NZU0NBTExfQkFTRSsxODYpCisjZGVmaW5lIF9fTlJfc2VuZGZpbGUgKF9fTlJfU1lTQ0FMTF9CQVNFKzE4NykKKworI2RlZmluZSBfX05SX3Zmb3JrIChfX05SX1NZU0NBTExfQkFTRSsxOTApCisjZGVmaW5lIF9fTlJfdWdldHJsaW1pdCAoX19OUl9TWVNDQUxMX0JBU0UrMTkxKSAgCisjZGVmaW5lIF9fTlJfbW1hcDIgKF9fTlJfU1lTQ0FMTF9CQVNFKzE5MikKKyNkZWZpbmUgX19OUl90cnVuY2F0ZTY0IChfX05SX1NZU0NBTExfQkFTRSsxOTMpCisjZGVmaW5lIF9fTlJfZnRydW5jYXRlNjQgKF9fTlJfU1lTQ0FMTF9CQVNFKzE5NCkKKyNkZWZpbmUgX19OUl9zdGF0NjQgKF9fTlJfU1lTQ0FMTF9CQVNFKzE5NSkKKyNkZWZpbmUgX19OUl9sc3RhdDY0IChfX05SX1NZU0NBTExfQkFTRSsxOTYpCisjZGVmaW5lIF9fTlJfZnN0YXQ2NCAoX19OUl9TWVNDQUxMX0JBU0UrMTk3KQorI2RlZmluZSBfX05SX2xjaG93bjMyIChfX05SX1NZU0NBTExfQkFTRSsxOTgpCisjZGVmaW5lIF9fTlJfZ2V0dWlkMzIgKF9fTlJfU1lTQ0FMTF9CQVNFKzE5OSkKKyNkZWZpbmUgX19OUl9nZXRnaWQzMiAoX19OUl9TWVNDQUxMX0JBU0UrMjAwKQorI2RlZmluZSBfX05SX2dldGV1aWQzMiAoX19OUl9TWVNDQUxMX0JBU0UrMjAxKQorI2RlZmluZSBfX05SX2dldGVnaWQzMiAoX19OUl9TWVNDQUxMX0JBU0UrMjAyKQorI2RlZmluZSBfX05SX3NldHJldWlkMzIgKF9fTlJfU1lTQ0FMTF9CQVNFKzIwMykKKyNkZWZpbmUgX19OUl9zZXRyZWdpZDMyIChfX05SX1NZU0NBTExfQkFTRSsyMDQpCisjZGVmaW5lIF9fTlJfZ2V0Z3JvdXBzMzIgKF9fTlJfU1lTQ0FMTF9CQVNFKzIwNSkKKyNkZWZpbmUgX19OUl9zZXRncm91cHMzMiAoX19OUl9TWVNDQUxMX0JBU0UrMjA2KQorI2RlZmluZSBfX05SX2ZjaG93bjMyIChfX05SX1NZU0NBTExfQkFTRSsyMDcpCisjZGVmaW5lIF9fTlJfc2V0cmVzdWlkMzIgKF9fTlJfU1lTQ0FMTF9CQVNFKzIwOCkKKyNkZWZpbmUgX19OUl9nZXRyZXN1aWQzMiAoX19OUl9TWVNDQUxMX0JBU0UrMjA5KQorI2RlZmluZSBfX05SX3NldHJlc2dpZDMyIChfX05SX1NZU0NBTExfQkFTRSsyMTApCisjZGVmaW5lIF9fTlJfZ2V0cmVzZ2lkMzIgKF9fTlJfU1lTQ0FMTF9CQVNFKzIxMSkKKyNkZWZpbmUgX19OUl9jaG93bjMyIChfX05SX1NZU0NBTExfQkFTRSsyMTIpCisjZGVmaW5lIF9fTlJfc2V0dWlkMzIgKF9fTlJfU1lTQ0FMTF9CQVNFKzIxMykKKyNkZWZpbmUgX19OUl9zZXRnaWQzMiAoX19OUl9TWVNDQUxMX0JBU0UrMjE0KQorI2RlZmluZSBfX05SX3NldGZzdWlkMzIgKF9fTlJfU1lTQ0FMTF9CQVNFKzIxNSkKKyNkZWZpbmUgX19OUl9zZXRmc2dpZDMyIChfX05SX1NZU0NBTExfQkFTRSsyMTYpCisjZGVmaW5lIF9fTlJfZ2V0ZGVudHM2NCAoX19OUl9TWVNDQUxMX0JBU0UrMjE3KQorI2RlZmluZSBfX05SX3Bpdm90X3Jvb3QgKF9fTlJfU1lTQ0FMTF9CQVNFKzIxOCkKKyNkZWZpbmUgX19OUl9taW5jb3JlIChfX05SX1NZU0NBTExfQkFTRSsyMTkpCisjZGVmaW5lIF9fTlJfbWFkdmlzZSAoX19OUl9TWVNDQUxMX0JBU0UrMjIwKQorI2RlZmluZSBfX05SX2ZjbnRsNjQgKF9fTlJfU1lTQ0FMTF9CQVNFKzIyMSkKKworI2RlZmluZSBfX05SX2dldHRpZCAoX19OUl9TWVNDQUxMX0JBU0UrMjI0KQorI2RlZmluZSBfX05SX3JlYWRhaGVhZCAoX19OUl9TWVNDQUxMX0JBU0UrMjI1KQorI2RlZmluZSBfX05SX3NldHhhdHRyIChfX05SX1NZU0NBTExfQkFTRSsyMjYpCisjZGVmaW5lIF9fTlJfbHNldHhhdHRyIChfX05SX1NZU0NBTExfQkFTRSsyMjcpCisjZGVmaW5lIF9fTlJfZnNldHhhdHRyIChfX05SX1NZU0NBTExfQkFTRSsyMjgpCisjZGVmaW5lIF9fTlJfZ2V0eGF0dHIgKF9fTlJfU1lTQ0FMTF9CQVNFKzIyOSkKKyNkZWZpbmUgX19OUl9sZ2V0eGF0dHIgKF9fTlJfU1lTQ0FMTF9CQVNFKzIzMCkKKyNkZWZpbmUgX19OUl9mZ2V0eGF0dHIgKF9fTlJfU1lTQ0FMTF9CQVNFKzIzMSkKKyNkZWZpbmUgX19OUl9saXN0eGF0dHIgKF9fTlJfU1lTQ0FMTF9CQVNFKzIzMikKKyNkZWZpbmUgX19OUl9sbGlzdHhhdHRyIChfX05SX1NZU0NBTExfQkFTRSsyMzMpCisjZGVmaW5lIF9fTlJfZmxpc3R4YXR0ciAoX19OUl9TWVNDQUxMX0JBU0UrMjM0KQorI2RlZmluZSBfX05SX3JlbW92ZXhhdHRyIChfX05SX1NZU0NBTExfQkFTRSsyMzUpCisjZGVmaW5lIF9fTlJfbHJlbW92ZXhhdHRyIChfX05SX1NZU0NBTExfQkFTRSsyMzYpCisjZGVmaW5lIF9fTlJfZnJlbW92ZXhhdHRyIChfX05SX1NZU0NBTExfQkFTRSsyMzcpCisjZGVmaW5lIF9fTlJfdGtpbGwgKF9fTlJfU1lTQ0FMTF9CQVNFKzIzOCkKKyNkZWZpbmUgX19OUl9zZW5kZmlsZTY0IChfX05SX1NZU0NBTExfQkFTRSsyMzkpCisjZGVmaW5lIF9fTlJfZnV0ZXggKF9fTlJfU1lTQ0FMTF9CQVNFKzI0MCkKKyNkZWZpbmUgX19OUl9zY2hlZF9zZXRhZmZpbml0eSAoX19OUl9TWVNDQUxMX0JBU0UrMjQxKQorI2RlZmluZSBfX05SX3NjaGVkX2dldGFmZmluaXR5IChfX05SX1NZU0NBTExfQkFTRSsyNDIpCisjZGVmaW5lIF9fTlJfaW9fc2V0dXAgKF9fTlJfU1lTQ0FMTF9CQVNFKzI0MykKKyNkZWZpbmUgX19OUl9pb19kZXN0cm95IChfX05SX1NZU0NBTExfQkFTRSsyNDQpCisjZGVmaW5lIF9fTlJfaW9fZ2V0ZXZlbnRzIChfX05SX1NZU0NBTExfQkFTRSsyNDUpCisjZGVmaW5lIF9fTlJfaW9fc3VibWl0IChfX05SX1NZU0NBTExfQkFTRSsyNDYpCisjZGVmaW5lIF9fTlJfaW9fY2FuY2VsIChfX05SX1NZU0NBTExfQkFTRSsyNDcpCisjZGVmaW5lIF9fTlJfZXhpdF9ncm91cCAoX19OUl9TWVNDQUxMX0JBU0UrMjQ4KQorI2RlZmluZSBfX05SX2xvb2t1cF9kY29va2llIChfX05SX1NZU0NBTExfQkFTRSsyNDkpCisjZGVmaW5lIF9fTlJfZXBvbGxfY3JlYXRlIChfX05SX1NZU0NBTExfQkFTRSsyNTApCisjZGVmaW5lIF9fTlJfZXBvbGxfY3RsIChfX05SX1NZU0NBTExfQkFTRSsyNTEpCisjZGVmaW5lIF9fTlJfZXBvbGxfd2FpdCAoX19OUl9TWVNDQUxMX0JBU0UrMjUyKQorI2RlZmluZSBfX05SX3JlbWFwX2ZpbGVfcGFnZXMgKF9fTlJfU1lTQ0FMTF9CQVNFKzI1MykKKworI2RlZmluZSBfX05SX3NldF90aWRfYWRkcmVzcyAoX19OUl9TWVNDQUxMX0JBU0UrMjU2KQorI2RlZmluZSBfX05SX3RpbWVyX2NyZWF0ZSAoX19OUl9TWVNDQUxMX0JBU0UrMjU3KQorI2RlZmluZSBfX05SX3RpbWVyX3NldHRpbWUgKF9fTlJfU1lTQ0FMTF9CQVNFKzI1OCkKKyNkZWZpbmUgX19OUl90aW1lcl9nZXR0aW1lIChfX05SX1NZU0NBTExfQkFTRSsyNTkpCisjZGVmaW5lIF9fTlJfdGltZXJfZ2V0b3ZlcnJ1biAoX19OUl9TWVNDQUxMX0JBU0UrMjYwKQorI2RlZmluZSBfX05SX3RpbWVyX2RlbGV0ZSAoX19OUl9TWVNDQUxMX0JBU0UrMjYxKQorI2RlZmluZSBfX05SX2Nsb2NrX3NldHRpbWUgKF9fTlJfU1lTQ0FMTF9CQVNFKzI2MikKKyNkZWZpbmUgX19OUl9jbG9ja19nZXR0aW1lIChfX05SX1NZU0NBTExfQkFTRSsyNjMpCisjZGVmaW5lIF9fTlJfY2xvY2tfZ2V0cmVzIChfX05SX1NZU0NBTExfQkFTRSsyNjQpCisjZGVmaW5lIF9fTlJfY2xvY2tfbmFub3NsZWVwIChfX05SX1NZU0NBTExfQkFTRSsyNjUpCisjZGVmaW5lIF9fTlJfc3RhdGZzNjQgKF9fTlJfU1lTQ0FMTF9CQVNFKzI2NikKKyNkZWZpbmUgX19OUl9mc3RhdGZzNjQgKF9fTlJfU1lTQ0FMTF9CQVNFKzI2NykKKyNkZWZpbmUgX19OUl90Z2tpbGwgKF9fTlJfU1lTQ0FMTF9CQVNFKzI2OCkKKyNkZWZpbmUgX19OUl91dGltZXMgKF9fTlJfU1lTQ0FMTF9CQVNFKzI2OSkKKyNkZWZpbmUgX19OUl9hcm1fZmFkdmlzZTY0XzY0IChfX05SX1NZU0NBTExfQkFTRSsyNzApCisjZGVmaW5lIF9fTlJfcGNpY29uZmlnX2lvYmFzZSAoX19OUl9TWVNDQUxMX0JBU0UrMjcxKQorI2RlZmluZSBfX05SX3BjaWNvbmZpZ19yZWFkIChfX05SX1NZU0NBTExfQkFTRSsyNzIpCisjZGVmaW5lIF9fTlJfcGNpY29uZmlnX3dyaXRlIChfX05SX1NZU0NBTExfQkFTRSsyNzMpCisjZGVmaW5lIF9fTlJfbXFfb3BlbiAoX19OUl9TWVNDQUxMX0JBU0UrMjc0KQorI2RlZmluZSBfX05SX21xX3VubGluayAoX19OUl9TWVNDQUxMX0JBU0UrMjc1KQorI2RlZmluZSBfX05SX21xX3RpbWVkc2VuZCAoX19OUl9TWVNDQUxMX0JBU0UrMjc2KQorI2RlZmluZSBfX05SX21xX3RpbWVkcmVjZWl2ZSAoX19OUl9TWVNDQUxMX0JBU0UrMjc3KQorI2RlZmluZSBfX05SX21xX25vdGlmeSAoX19OUl9TWVNDQUxMX0JBU0UrMjc4KQorI2RlZmluZSBfX05SX21xX2dldHNldGF0dHIgKF9fTlJfU1lTQ0FMTF9CQVNFKzI3OSkKKyNkZWZpbmUgX19OUl93YWl0aWQgKF9fTlJfU1lTQ0FMTF9CQVNFKzI4MCkKKyNkZWZpbmUgX19OUl9zb2NrZXQgKF9fTlJfU1lTQ0FMTF9CQVNFKzI4MSkKKyNkZWZpbmUgX19OUl9iaW5kIChfX05SX1NZU0NBTExfQkFTRSsyODIpCisjZGVmaW5lIF9fTlJfY29ubmVjdCAoX19OUl9TWVNDQUxMX0JBU0UrMjgzKQorI2RlZmluZSBfX05SX2xpc3RlbiAoX19OUl9TWVNDQUxMX0JBU0UrMjg0KQorI2RlZmluZSBfX05SX2FjY2VwdCAoX19OUl9TWVNDQUxMX0JBU0UrMjg1KQorI2RlZmluZSBfX05SX2dldHNvY2tuYW1lIChfX05SX1NZU0NBTExfQkFTRSsyODYpCisjZGVmaW5lIF9fTlJfZ2V0cGVlcm5hbWUgKF9fTlJfU1lTQ0FMTF9CQVNFKzI4NykKKyNkZWZpbmUgX19OUl9zb2NrZXRwYWlyIChfX05SX1NZU0NBTExfQkFTRSsyODgpCisjZGVmaW5lIF9fTlJfc2VuZCAoX19OUl9TWVNDQUxMX0JBU0UrMjg5KQorI2RlZmluZSBfX05SX3NlbmR0byAoX19OUl9TWVNDQUxMX0JBU0UrMjkwKQorI2RlZmluZSBfX05SX3JlY3YgKF9fTlJfU1lTQ0FMTF9CQVNFKzI5MSkKKyNkZWZpbmUgX19OUl9yZWN2ZnJvbSAoX19OUl9TWVNDQUxMX0JBU0UrMjkyKQorI2RlZmluZSBfX05SX3NodXRkb3duIChfX05SX1NZU0NBTExfQkFTRSsyOTMpCisjZGVmaW5lIF9fTlJfc2V0c29ja29wdCAoX19OUl9TWVNDQUxMX0JBU0UrMjk0KQorI2RlZmluZSBfX05SX2dldHNvY2tvcHQgKF9fTlJfU1lTQ0FMTF9CQVNFKzI5NSkKKyNkZWZpbmUgX19OUl9zZW5kbXNnIChfX05SX1NZU0NBTExfQkFTRSsyOTYpCisjZGVmaW5lIF9fTlJfcmVjdm1zZyAoX19OUl9TWVNDQUxMX0JBU0UrMjk3KQorI2RlZmluZSBfX05SX3NlbW9wIChfX05SX1NZU0NBTExfQkFTRSsyOTgpCisjZGVmaW5lIF9fTlJfc2VtZ2V0IChfX05SX1NZU0NBTExfQkFTRSsyOTkpCisjZGVmaW5lIF9fTlJfc2VtY3RsIChfX05SX1NZU0NBTExfQkFTRSszMDApCisjZGVmaW5lIF9fTlJfbXNnc25kIChfX05SX1NZU0NBTExfQkFTRSszMDEpCisjZGVmaW5lIF9fTlJfbXNncmN2IChfX05SX1NZU0NBTExfQkFTRSszMDIpCisjZGVmaW5lIF9fTlJfbXNnZ2V0IChfX05SX1NZU0NBTExfQkFTRSszMDMpCisjZGVmaW5lIF9fTlJfbXNnY3RsIChfX05SX1NZU0NBTExfQkFTRSszMDQpCisjZGVmaW5lIF9fTlJfc2htYXQgKF9fTlJfU1lTQ0FMTF9CQVNFKzMwNSkKKyNkZWZpbmUgX19OUl9zaG1kdCAoX19OUl9TWVNDQUxMX0JBU0UrMzA2KQorI2RlZmluZSBfX05SX3NobWdldCAoX19OUl9TWVNDQUxMX0JBU0UrMzA3KQorI2RlZmluZSBfX05SX3NobWN0bCAoX19OUl9TWVNDQUxMX0JBU0UrMzA4KQorI2RlZmluZSBfX05SX2FkZF9rZXkgKF9fTlJfU1lTQ0FMTF9CQVNFKzMwOSkKKyNkZWZpbmUgX19OUl9yZXF1ZXN0X2tleSAoX19OUl9TWVNDQUxMX0JBU0UrMzEwKQorI2RlZmluZSBfX05SX2tleWN0bCAoX19OUl9TWVNDQUxMX0JBU0UrMzExKQorI2RlZmluZSBfX05SX3NlbXRpbWVkb3AgKF9fTlJfU1lTQ0FMTF9CQVNFKzMxMikKKyNkZWZpbmUgX19OUl92c2VydmVyIChfX05SX1NZU0NBTExfQkFTRSszMTMpCisjZGVmaW5lIF9fTlJfaW9wcmlvX3NldCAoX19OUl9TWVNDQUxMX0JBU0UrMzE0KQorI2RlZmluZSBfX05SX2lvcHJpb19nZXQgKF9fTlJfU1lTQ0FMTF9CQVNFKzMxNSkKKyNkZWZpbmUgX19OUl9pbm90aWZ5X2luaXQgKF9fTlJfU1lTQ0FMTF9CQVNFKzMxNikKKyNkZWZpbmUgX19OUl9pbm90aWZ5X2FkZF93YXRjaCAoX19OUl9TWVNDQUxMX0JBU0UrMzE3KQorI2RlZmluZSBfX05SX2lub3RpZnlfcm1fd2F0Y2ggKF9fTlJfU1lTQ0FMTF9CQVNFKzMxOCkKKyNkZWZpbmUgX19OUl9tYmluZCAoX19OUl9TWVNDQUxMX0JBU0UrMzE5KQorI2RlZmluZSBfX05SX2dldF9tZW1wb2xpY3kgKF9fTlJfU1lTQ0FMTF9CQVNFKzMyMCkKKyNkZWZpbmUgX19OUl9zZXRfbWVtcG9saWN5IChfX05SX1NZU0NBTExfQkFTRSszMjEpCisKKyNkZWZpbmUgX19BUk1fTlJfQkFTRSAoX19OUl9TWVNDQUxMX0JBU0UrMHgwZjAwMDApCisjZGVmaW5lIF9fQVJNX05SX2JyZWFrcG9pbnQgKF9fQVJNX05SX0JBU0UrMSkKKyNkZWZpbmUgX19BUk1fTlJfY2FjaGVmbHVzaCAoX19BUk1fTlJfQkFTRSsyKQorI2RlZmluZSBfX0FSTV9OUl91c3IyNiAoX19BUk1fTlJfQkFTRSszKQorI2RlZmluZSBfX0FSTV9OUl91c3IzMiAoX19BUk1fTlJfQkFTRSs0KQorI2RlZmluZSBfX0FSTV9OUl9zZXRfdGxzIChfX0FSTV9OUl9CQVNFKzUpCisKKyNpZiBkZWZpbmVkKF9fQVJNX0VBQklfXykgJiYgIWRlZmluZWQoX19LRVJORUxfXykKKyN1bmRlZiBfX05SX3RpbWUKKyN1bmRlZiBfX05SX3Vtb3VudAorI3VuZGVmIF9fTlJfc3RpbWUKKyN1bmRlZiBfX05SX2FsYXJtCisjdW5kZWYgX19OUl91dGltZQorI3VuZGVmIF9fTlJfZ2V0cmxpbWl0CisjdW5kZWYgX19OUl9zZWxlY3QKKyN1bmRlZiBfX05SX3JlYWRkaXIKKyN1bmRlZiBfX05SX21tYXAKKyN1bmRlZiBfX05SX3NvY2tldGNhbGwKKyN1bmRlZiBfX05SX3N5c2NhbGwKKyN1bmRlZiBfX05SX2lwYworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3VzZXIuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS91c2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWYyNTg1MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS91c2VyLmgKQEAgLTAsMCArMSw2MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQVJNX1VTRVJfSAorI2RlZmluZSBfQVJNX1VTRVJfSAorCisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisKK3N0cnVjdCB1c2VyX2ZwIHsKKyBzdHJ1Y3QgZnBfcmVnIHsKKyB1bnNpZ25lZCBpbnQgc2lnbjE6MTsKKyB1bnNpZ25lZCBpbnQgdW51c2VkOjE1OworIHVuc2lnbmVkIGludCBzaWduMjoxOworIHVuc2lnbmVkIGludCBleHBvbmVudDoxNDsKKyB1bnNpZ25lZCBpbnQgajoxOworIHVuc2lnbmVkIGludCBtYW50aXNzYTE6MzE7CisgdW5zaWduZWQgaW50IG1hbnRpc3NhMDozMjsKKyB9IGZwcmVnc1s4XTsKKyB1bnNpZ25lZCBpbnQgZnBzcjozMjsKKyB1bnNpZ25lZCBpbnQgZnBjcjozMjsKKyB1bnNpZ25lZCBjaGFyIGZ0eXBlWzhdOworIHVuc2lnbmVkIGludCBpbml0X2ZsYWc7Cit9OworCitzdHJ1Y3QgdXNlcnsKKworIHN0cnVjdCBwdF9yZWdzIHJlZ3M7CisKKyBpbnQgdV9mcHZhbGlkOworCisgdW5zaWduZWQgbG9uZyBpbnQgdV90c2l6ZTsKKyB1bnNpZ25lZCBsb25nIGludCB1X2RzaXplOworIHVuc2lnbmVkIGxvbmcgaW50IHVfc3NpemU7CisgdW5zaWduZWQgbG9uZyBzdGFydF9jb2RlOworIHVuc2lnbmVkIGxvbmcgc3RhcnRfc3RhY2s7CisgbG9uZyBpbnQgc2lnbmFsOworIGludCByZXNlcnZlZDsKKyBzdHJ1Y3QgcHRfcmVncyAqIHVfYXIwOworCisgdW5zaWduZWQgbG9uZyBtYWdpYzsKKyBjaGFyIHVfY29tbVszMl07CisgaW50IHVfZGVidWdyZWdbOF07Cisgc3RydWN0IHVzZXJfZnAgdV9mcDsKKyBzdHJ1Y3QgdXNlcl9mcF9zdHJ1Y3QgKiB1X2ZwMDsKKworfTsKKyNkZWZpbmUgTkJQRyBQQUdFX1NJWkUKKyNkZWZpbmUgVVBBR0VTIDEKKyNkZWZpbmUgSE9TVF9URVhUX1NUQVJUX0FERFIgKHUuc3RhcnRfY29kZSkKKyNkZWZpbmUgSE9TVF9TVEFDS19FTkRfQUREUiAodS5zdGFydF9zdGFjayArIHUudV9zc2l6ZSAqIE5CUEcpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3ZnYS5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3ZnYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4NzVkYmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vdmdhLmgKQEAgLTAsMCArMSwyMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBBU01BUk1fVkdBX0gKKyNkZWZpbmUgQVNNQVJNX1ZHQV9ICisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2RlZmluZSBWR0FfTUFQX01FTSh4LHMpIChQQ0lNRU1fQkFTRSArICh4KSkKKworI2RlZmluZSB2Z2FfcmVhZGIoeCkgKCooKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKil4KSkKKyNkZWZpbmUgdmdhX3dyaXRlYih4LHkpICgqKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopeSkgPSAoeCkpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2Eub3V0LmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vYS5vdXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWVjZmY3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2Eub3V0LmgKQEAgLTAsMCArMSwzMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQVNNX1g4Nl9BX09VVF9ICisjZGVmaW5lIF9BU01fWDg2X0FfT1VUX0gKKworc3RydWN0IGV4ZWMKK3sKKyB1bnNpZ25lZCBpbnQgYV9pbmZvOworIHVuc2lnbmVkIGFfdGV4dDsKKyB1bnNpZ25lZCBhX2RhdGE7CisgdW5zaWduZWQgYV9ic3M7CisgdW5zaWduZWQgYV9zeW1zOworIHVuc2lnbmVkIGFfZW50cnk7CisgdW5zaWduZWQgYV90cnNpemU7CisgdW5zaWduZWQgYV9kcnNpemU7Cit9OworCisjZGVmaW5lIE5fVFJTSVpFKGEpICgoYSkuYV90cnNpemUpCisjZGVmaW5lIE5fRFJTSVpFKGEpICgoYSkuYV9kcnNpemUpCisjZGVmaW5lIE5fU1lNU0laRShhKSAoKGEpLmFfc3ltcykKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vYWNwaS5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2FjcGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTE1Y2U5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2FjcGkuaApAQCAtMCwwICsxLDE5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01fWDg2X0FDUElfSAorI2RlZmluZSBfQVNNX1g4Nl9BQ1BJX0gKKworI2luY2x1ZGUgImFjcGlfNjQuaCIKKworI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vYWNwaV8zMi5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2FjcGlfMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTAwNDNjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2FjcGlfMzIuaApAQCAtMCwwICsxLDE1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01fQUNQSV9ICisjZGVmaW5lIF9BU01fQUNQSV9ICisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2FsdGVybmF0aXZlLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vYWx0ZXJuYXRpdmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2MxZGM1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2FsdGVybmF0aXZlLmgKQEAgLTAsMCArMSwxMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgImFsdGVybmF0aXZlXzY0LmgiCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vYWx0ZXJuYXRpdmVfMzIuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9hbHRlcm5hdGl2ZV8zMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMTMxMTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vYWx0ZXJuYXRpdmVfMzIuaApAQCAtMCwwICsxLDM4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9JMzg2X0FMVEVSTkFUSVZFX0gKKyNkZWZpbmUgX0kzODZfQUxURVJOQVRJVkVfSAorCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IGFsdF9pbnN0ciB7CisgdTggKmluc3RyOworIHU4ICpyZXBsYWNlbWVudDsKKyB1OCBjcHVpZDsKKyB1OCBpbnN0cmxlbjsKKyB1OCByZXBsYWNlbWVudGxlbjsKKyB1OCBwYWQ7Cit9OworCitzdHJ1Y3QgbW9kdWxlOworI2RlZmluZSBhbHRlcm5hdGl2ZShvbGRpbnN0ciwgbmV3aW5zdHIsIGZlYXR1cmUpICAgYXNtIHZvbGF0aWxlICgiNjYxOlxuXHQiIG9sZGluc3RyICJcbjY2MjpcbiIgICAiLnNlY3Rpb24gLmFsdGluc3RydWN0aW9ucyxcImFcIlxuIiAgICIgIC5hbGlnbiA0XG4iICAgIiAgLmxvbmcgNjYxYlxuIiAgICAgIiAgLmxvbmcgNjYzZlxuIiAgICAgIiAgLmJ5dGUgJWMwXG4iICAgICAiICAuYnl0ZSA2NjJiLTY2MWJcbiIgICAgICIgIC5ieXRlIDY2NGYtNjYzZlxuIiAgICAgIi5wcmV2aW91c1xuIiAgICIuc2VjdGlvbiAuYWx0aW5zdHJfcmVwbGFjZW1lbnQsXCJheFwiXG4iICAgIjY2Mzpcblx0IiBuZXdpbnN0ciAiXG42NjQ6XG4iICAgICIucHJldmlvdXMiIDo6ICJpIiAoZmVhdHVyZSkgOiAibWVtb3J5IikKKyNkZWZpbmUgYWx0ZXJuYXRpdmVfaW5wdXQob2xkaW5zdHIsIG5ld2luc3RyLCBmZWF0dXJlLCBpbnB1dC4uLikgICBhc20gdm9sYXRpbGUgKCI2NjE6XG5cdCIgb2xkaW5zdHIgIlxuNjYyOlxuIiAgICIuc2VjdGlvbiAuYWx0aW5zdHJ1Y3Rpb25zLFwiYVwiXG4iICAgIiAgLmFsaWduIDRcbiIgICAiICAubG9uZyA2NjFiXG4iICAgICAiICAubG9uZyA2NjNmXG4iICAgICAiICAuYnl0ZSAlYzBcbiIgICAgICIgIC5ieXRlIDY2MmItNjYxYlxuIiAgICAgIiAgLmJ5dGUgNjY0Zi02NjNmXG4iICAgICAiLnByZXZpb3VzXG4iICAgIi5zZWN0aW9uIC5hbHRpbnN0cl9yZXBsYWNlbWVudCxcImF4XCJcbiIgICAiNjYzOlxuXHQiIG5ld2luc3RyICJcbjY2NDpcbiIgICAgIi5wcmV2aW91cyIgOjogImkiIChmZWF0dXJlKSwgIyNpbnB1dCkKKyNkZWZpbmUgYWx0ZXJuYXRpdmVfaW8ob2xkaW5zdHIsIG5ld2luc3RyLCBmZWF0dXJlLCBvdXRwdXQsIGlucHV0Li4uKSAgIGFzbSB2b2xhdGlsZSAoIjY2MTpcblx0IiBvbGRpbnN0ciAiXG42NjI6XG4iICAgIi5zZWN0aW9uIC5hbHRpbnN0cnVjdGlvbnMsXCJhXCJcbiIgICAiICAuYWxpZ24gNFxuIiAgICIgIC5sb25nIDY2MWJcbiIgICAgICIgIC5sb25nIDY2M2ZcbiIgICAgICIgIC5ieXRlICVjW2ZlYXRdXG4iICAgICAiICAuYnl0ZSA2NjJiLTY2MWJcbiIgICAgICIgIC5ieXRlIDY2NGYtNjYzZlxuIiAgICAgIi5wcmV2aW91c1xuIiAgICIuc2VjdGlvbiAuYWx0aW5zdHJfcmVwbGFjZW1lbnQsXCJheFwiXG4iICAgIjY2Mzpcblx0IiBuZXdpbnN0ciAiXG42NjQ6XG4iICAgICAiLnByZXZpb3VzIiA6IG91dHB1dCA6IFtmZWF0XSAiaSIgKGZlYXR1cmUpLCAjI2lucHV0KQorI2RlZmluZSBBU01fT1VUUFVUMihhLCBiKSBhLCBiCisjZGVmaW5lIExPQ0tfUFJFRklYICIiCisKKyNkZWZpbmUgX19wYXJhaW5zdHJ1Y3Rpb25zIE5VTEwKKyNkZWZpbmUgX19wYXJhaW5zdHJ1Y3Rpb25zX2VuZCBOVUxMCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2FwaWMuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9hcGljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNiNzE4MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9hcGljLmgKQEAgLTAsMCArMSwxMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgImFwaWNfNjQuaCIKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9hcGljXzMyLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vYXBpY18zMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyYzlkOWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vYXBpY18zMi5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19BU01fQVBJQ19ICisjZGVmaW5lIF9fQVNNX0FQSUNfSAorCisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGFzbS9maXhtYXAuaD4KKyNpbmNsdWRlIDxhc20vYXBpY2RlZi5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisKKyNkZWZpbmUgRHByaW50ayh4Li4uKQorCisjZGVmaW5lIEFQSUNfUVVJRVQgMAorI2RlZmluZSBBUElDX1ZFUkJPU0UgMQorI2RlZmluZSBBUElDX0RFQlVHIDIKKworI2RlZmluZSBhcGljX3ByaW50ayh2LCBzLCBhLi4uKSBkbyB7ICAgaWYgKCh2KSA8PSBhcGljX3ZlcmJvc2l0eSkgICBwcmludGsocywgIyNhKTsgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIGxvY2FsX2FwaWNfdGltZXJfYzJfb2sgMQorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vYXBpY2RlZi5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2FwaWNkZWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDE5ZjVhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2FwaWNkZWYuaApAQCAtMCwwICsxLDEyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAiYXBpY2RlZl82NC5oIgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2FwaWNkZWZfMzIuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9hcGljZGVmXzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRhNWVkYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9hcGljZGVmXzMyLmgKQEAgLTAsMCArMSwzNzIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19BU01fQVBJQ0RFRl9ICisjZGVmaW5lIF9fQVNNX0FQSUNERUZfSAorCisjZGVmaW5lIEFQSUNfREVGQVVMVF9QSFlTX0JBU0UgMHhmZWUwMDAwMAorCisjZGVmaW5lIEFQSUNfSUQgMHgyMAorI2RlZmluZSBBUElDX0xWUiAweDMwCisjZGVmaW5lIEFQSUNfTFZSX01BU0sgMHhGRjAwRkYKKyNkZWZpbmUgR0VUX0FQSUNfVkVSU0lPTih4KSAoKHgpJjB4RkYpCisjZGVmaW5lIEdFVF9BUElDX01BWExWVCh4KSAoKCh4KT4+MTYpJjB4RkYpCisjZGVmaW5lIEFQSUNfSU5URUdSQVRFRCh4KSAoKHgpJjB4RjApCisjZGVmaW5lIEFQSUNfWEFQSUMoeCkgKCh4KSA+PSAweDE0KQorI2RlZmluZSBBUElDX1RBU0tQUkkgMHg4MAorI2RlZmluZSBBUElDX1RQUklfTUFTSyAweEZGCisjZGVmaW5lIEFQSUNfQVJCUFJJIDB4OTAKKyNkZWZpbmUgQVBJQ19BUkJQUklfTUFTSyAweEZGCisjZGVmaW5lIEFQSUNfUFJPQ1BSSSAweEEwCisjZGVmaW5lIEFQSUNfRU9JIDB4QjAKKyNkZWZpbmUgQVBJQ19FSU9fQUNLIDB4MCAgCisjZGVmaW5lIEFQSUNfUlJSIDB4QzAKKyNkZWZpbmUgQVBJQ19MRFIgMHhEMAorI2RlZmluZSBBUElDX0xEUl9NQVNLICgweEZGPDwyNCkKKyNkZWZpbmUgR0VUX0FQSUNfTE9HSUNBTF9JRCh4KSAoKCh4KT4+MjQpJjB4RkYpCisjZGVmaW5lIFNFVF9BUElDX0xPR0lDQUxfSUQoeCkgKCgoeCk8PDI0KSkKKyNkZWZpbmUgQVBJQ19BTExfQ1BVUyAweEZGCisjZGVmaW5lIEFQSUNfREZSIDB4RTAKKyNkZWZpbmUgQVBJQ19ERlJfQ0xVU1RFUiAweDBGRkZGRkZGdWwKKyNkZWZpbmUgQVBJQ19ERlJfRkxBVCAweEZGRkZGRkZGdWwKKyNkZWZpbmUgQVBJQ19TUElWIDB4RjAKKyNkZWZpbmUgQVBJQ19TUElWX0ZPQ1VTX0RJU0FCTEVEICgxPDw5KQorI2RlZmluZSBBUElDX1NQSVZfQVBJQ19FTkFCTEVEICgxPDw4KQorI2RlZmluZSBBUElDX0lTUiAweDEwMAorI2RlZmluZSBBUElDX0lTUl9OUiAweDggIAorI2RlZmluZSBBUElDX1RNUiAweDE4MAorI2RlZmluZSBBUElDX0lSUiAweDIwMAorI2RlZmluZSBBUElDX0VTUiAweDI4MAorI2RlZmluZSBBUElDX0VTUl9TRU5EX0NTIDB4MDAwMDEKKyNkZWZpbmUgQVBJQ19FU1JfUkVDVl9DUyAweDAwMDAyCisjZGVmaW5lIEFQSUNfRVNSX1NFTkRfQUNDIDB4MDAwMDQKKyNkZWZpbmUgQVBJQ19FU1JfUkVDVl9BQ0MgMHgwMDAwOAorI2RlZmluZSBBUElDX0VTUl9TRU5ESUxMIDB4MDAwMjAKKyNkZWZpbmUgQVBJQ19FU1JfUkVDVklMTCAweDAwMDQwCisjZGVmaW5lIEFQSUNfRVNSX0lMTFJFR0EgMHgwMDA4MAorI2RlZmluZSBBUElDX0lDUiAweDMwMAorI2RlZmluZSBBUElDX0RFU1RfU0VMRiAweDQwMDAwCisjZGVmaW5lIEFQSUNfREVTVF9BTExJTkMgMHg4MDAwMAorI2RlZmluZSBBUElDX0RFU1RfQUxMQlVUIDB4QzAwMDAKKyNkZWZpbmUgQVBJQ19JQ1JfUlJfTUFTSyAweDMwMDAwCisjZGVmaW5lIEFQSUNfSUNSX1JSX0lOVkFMSUQgMHgwMDAwMAorI2RlZmluZSBBUElDX0lDUl9SUl9JTlBST0cgMHgxMDAwMAorI2RlZmluZSBBUElDX0lDUl9SUl9WQUxJRCAweDIwMDAwCisjZGVmaW5lIEFQSUNfSU5UX0xFVkVMVFJJRyAweDA4MDAwCisjZGVmaW5lIEFQSUNfSU5UX0FTU0VSVCAweDA0MDAwCisjZGVmaW5lIEFQSUNfSUNSX0JVU1kgMHgwMTAwMAorI2RlZmluZSBBUElDX0RFU1RfTE9HSUNBTCAweDAwODAwCisjZGVmaW5lIEFQSUNfRE1fRklYRUQgMHgwMDAwMAorI2RlZmluZSBBUElDX0RNX0xPV0VTVCAweDAwMTAwCisjZGVmaW5lIEFQSUNfRE1fU01JIDB4MDAyMDAKKyNkZWZpbmUgQVBJQ19ETV9SRU1SRCAweDAwMzAwCisjZGVmaW5lIEFQSUNfRE1fTk1JIDB4MDA0MDAKKyNkZWZpbmUgQVBJQ19ETV9JTklUIDB4MDA1MDAKKyNkZWZpbmUgQVBJQ19ETV9TVEFSVFVQIDB4MDA2MDAKKyNkZWZpbmUgQVBJQ19ETV9FWFRJTlQgMHgwMDcwMAorI2RlZmluZSBBUElDX1ZFQ1RPUl9NQVNLIDB4MDAwRkYKKyNkZWZpbmUgQVBJQ19JQ1IyIDB4MzEwCisjZGVmaW5lIEdFVF9BUElDX0RFU1RfRklFTEQoeCkgKCgoeCk+PjI0KSYweEZGKQorI2RlZmluZSBTRVRfQVBJQ19ERVNUX0ZJRUxEKHgpICgoeCk8PDI0KQorI2RlZmluZSBBUElDX0xWVFQgMHgzMjAKKyNkZWZpbmUgQVBJQ19MVlRUSE1SIDB4MzMwCisjZGVmaW5lIEFQSUNfTFZUUEMgMHgzNDAKKyNkZWZpbmUgQVBJQ19MVlQwIDB4MzUwCisjZGVmaW5lIEFQSUNfTFZUX1RJTUVSX0JBU0VfTUFTSyAoMHgzPDwxOCkKKyNkZWZpbmUgR0VUX0FQSUNfVElNRVJfQkFTRSh4KSAoKCh4KT4+MTgpJjB4MykKKyNkZWZpbmUgU0VUX0FQSUNfVElNRVJfQkFTRSh4KSAoKCh4KTw8MTgpKQorI2RlZmluZSBBUElDX1RJTUVSX0JBU0VfQ0xLSU4gMHgwCisjZGVmaW5lIEFQSUNfVElNRVJfQkFTRV9UTUJBU0UgMHgxCisjZGVmaW5lIEFQSUNfVElNRVJfQkFTRV9ESVYgMHgyCisjZGVmaW5lIEFQSUNfTFZUX1RJTUVSX1BFUklPRElDICgxPDwxNykKKyNkZWZpbmUgQVBJQ19MVlRfTUFTS0VEICgxPDwxNikKKyNkZWZpbmUgQVBJQ19MVlRfTEVWRUxfVFJJR0dFUiAoMTw8MTUpCisjZGVmaW5lIEFQSUNfTFZUX1JFTU9URV9JUlIgKDE8PDE0KQorI2RlZmluZSBBUElDX0lOUFVUX1BPTEFSSVRZICgxPDwxMykKKyNkZWZpbmUgQVBJQ19TRU5EX1BFTkRJTkcgKDE8PDEyKQorI2RlZmluZSBBUElDX01PREVfTUFTSyAweDcwMAorI2RlZmluZSBHRVRfQVBJQ19ERUxJVkVSWV9NT0RFKHgpICgoKHgpPj44KSYweDcpCisjZGVmaW5lIFNFVF9BUElDX0RFTElWRVJZX01PREUoeCx5KSAoKCh4KSZ+MHg3MDApfCgoeSk8PDgpKQorI2RlZmluZSBBUElDX01PREVfRklYRUQgMHgwCisjZGVmaW5lIEFQSUNfTU9ERV9OTUkgMHg0CisjZGVmaW5lIEFQSUNfTU9ERV9FWFRJTlQgMHg3CisjZGVmaW5lIEFQSUNfTFZUMSAweDM2MAorI2RlZmluZSBBUElDX0xWVEVSUiAweDM3MAorI2RlZmluZSBBUElDX1RNSUNUIDB4MzgwCisjZGVmaW5lIEFQSUNfVE1DQ1QgMHgzOTAKKyNkZWZpbmUgQVBJQ19URENSIDB4M0UwCisjZGVmaW5lIEFQSUNfVERSX0RJVl9UTUJBU0UgKDE8PDIpCisjZGVmaW5lIEFQSUNfVERSX0RJVl8xIDB4QgorI2RlZmluZSBBUElDX1REUl9ESVZfMiAweDAKKyNkZWZpbmUgQVBJQ19URFJfRElWXzQgMHgxCisjZGVmaW5lIEFQSUNfVERSX0RJVl84IDB4MgorI2RlZmluZSBBUElDX1REUl9ESVZfMTYgMHgzCisjZGVmaW5lIEFQSUNfVERSX0RJVl8zMiAweDgKKyNkZWZpbmUgQVBJQ19URFJfRElWXzY0IDB4OQorI2RlZmluZSBBUElDX1REUl9ESVZfMTI4IDB4QQorCisjZGVmaW5lIEFQSUNfQkFTRSAoZml4X3RvX3ZpcnQoRklYX0FQSUNfQkFTRSkpCisKKyNkZWZpbmUgTUFYX0lPX0FQSUNTIDY0CisKKyNkZWZpbmUgdTMyIHVuc2lnbmVkIGludAorCitzdHJ1Y3QgbG9jYWxfYXBpYyB7CisKKyAgc3RydWN0IHsgdTMyIF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8wMTsKKworICBzdHJ1Y3QgeyB1MzIgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzAyOworCisgIHN0cnVjdCB7CisgdTMyIF9fcmVzZXJ2ZWRfMSA6IDI0LAorIHBoeXNfYXBpY19pZCA6IDQsCisgX19yZXNlcnZlZF8yIDogNDsKKyB1MzIgX19yZXNlcnZlZFszXTsKKyB9IGlkOworCisgIGNvbnN0Cisgc3RydWN0IHsKKyB1MzIgdmVyc2lvbiA6IDgsCisgX19yZXNlcnZlZF8xIDogOCwKKyBtYXhfbHZ0IDogOCwKKyBfX3Jlc2VydmVkXzIgOiA4OworIHUzMiBfX3Jlc2VydmVkWzNdOworIH0gdmVyc2lvbjsKKworICBzdHJ1Y3QgeyB1MzIgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzAzOworCisgIHN0cnVjdCB7IHUzMiBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMDQ7CisKKyAgc3RydWN0IHsgdTMyIF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8wNTsKKworICBzdHJ1Y3QgeyB1MzIgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzA2OworCisgIHN0cnVjdCB7CisgdTMyIHByaW9yaXR5IDogOCwKKyBfX3Jlc2VydmVkXzEgOiAyNDsKKyB1MzIgX19yZXNlcnZlZF8yWzNdOworIH0gdHByOworCisgIGNvbnN0Cisgc3RydWN0IHsKKyB1MzIgcHJpb3JpdHkgOiA4LAorIF9fcmVzZXJ2ZWRfMSA6IDI0OworIHUzMiBfX3Jlc2VydmVkXzJbM107CisgfSBhcHI7CisKKyAgY29uc3QKKyBzdHJ1Y3QgeworIHUzMiBwcmlvcml0eSA6IDgsCisgX19yZXNlcnZlZF8xIDogMjQ7CisgdTMyIF9fcmVzZXJ2ZWRfMlszXTsKKyB9IHBwcjsKKworICBzdHJ1Y3QgeworIHUzMiBlb2k7CisgdTMyIF9fcmVzZXJ2ZWRbM107CisgfSBlb2k7CisKKyAgc3RydWN0IHsgdTMyIF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8wNzsKKworICBzdHJ1Y3QgeworIHUzMiBfX3Jlc2VydmVkXzEgOiAyNCwKKyBsb2dpY2FsX2Rlc3QgOiA4OworIHUzMiBfX3Jlc2VydmVkXzJbM107CisgfSBsZHI7CisKKyAgc3RydWN0IHsKKyB1MzIgX19yZXNlcnZlZF8xIDogMjgsCisgbW9kZWwgOiA0OworIHUzMiBfX3Jlc2VydmVkXzJbM107CisgfSBkZnI7CisKKyAgc3RydWN0IHsKKyB1MzIgc3B1cmlvdXNfdmVjdG9yIDogOCwKKyBhcGljX2VuYWJsZWQgOiAxLAorIGZvY3VzX2NwdSA6IDEsCisgX19yZXNlcnZlZF8yIDogMjI7CisgdTMyIF9fcmVzZXJ2ZWRfM1szXTsKKyB9IHN2cjsKKworICBzdHJ1Y3QgeworICB1MzIgYml0ZmllbGQ7CisgdTMyIF9fcmVzZXJ2ZWRbM107CisgfSBpc3IgWzhdOworCisgIHN0cnVjdCB7CisgIHUzMiBiaXRmaWVsZDsKKyB1MzIgX19yZXNlcnZlZFszXTsKKyB9IHRtciBbOF07CisKKyAgc3RydWN0IHsKKyAgdTMyIGJpdGZpZWxkOworIHUzMiBfX3Jlc2VydmVkWzNdOworIH0gaXJyIFs4XTsKKworICB1bmlvbiB7Cisgc3RydWN0IHsKKyB1MzIgc2VuZF9jc19lcnJvciA6IDEsCisgcmVjZWl2ZV9jc19lcnJvciA6IDEsCisgc2VuZF9hY2NlcHRfZXJyb3IgOiAxLAorIHJlY2VpdmVfYWNjZXB0X2Vycm9yIDogMSwKKyBfX3Jlc2VydmVkXzEgOiAxLAorIHNlbmRfaWxsZWdhbF92ZWN0b3IgOiAxLAorIHJlY2VpdmVfaWxsZWdhbF92ZWN0b3IgOiAxLAorIGlsbGVnYWxfcmVnaXN0ZXJfYWRkcmVzcyA6IDEsCisgX19yZXNlcnZlZF8yIDogMjQ7CisgdTMyIF9fcmVzZXJ2ZWRfM1szXTsKKyB9IGVycm9yX2JpdHM7Cisgc3RydWN0IHsKKyB1MzIgZXJyb3JzOworIHUzMiBfX3Jlc2VydmVkXzNbM107CisgfSBhbGxfZXJyb3JzOworIH0gZXNyOworCisgIHN0cnVjdCB7IHUzMiBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMDg7CisKKyAgc3RydWN0IHsgdTMyIF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8wOTsKKworICBzdHJ1Y3QgeyB1MzIgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzEwOworCisgIHN0cnVjdCB7IHUzMiBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMTE7CisKKyAgc3RydWN0IHsgdTMyIF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8xMjsKKworICBzdHJ1Y3QgeyB1MzIgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzEzOworCisgIHN0cnVjdCB7IHUzMiBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMTQ7CisKKyAgc3RydWN0IHsKKyB1MzIgdmVjdG9yIDogOCwKKyBkZWxpdmVyeV9tb2RlIDogMywKKyBkZXN0aW5hdGlvbl9tb2RlIDogMSwKKyBkZWxpdmVyeV9zdGF0dXMgOiAxLAorIF9fcmVzZXJ2ZWRfMSA6IDEsCisgbGV2ZWwgOiAxLAorIHRyaWdnZXIgOiAxLAorIF9fcmVzZXJ2ZWRfMiA6IDIsCisgc2hvcnRoYW5kIDogMiwKKyBfX3Jlc2VydmVkXzMgOiAxMjsKKyB1MzIgX19yZXNlcnZlZF80WzNdOworIH0gaWNyMTsKKworICBzdHJ1Y3QgeworIHVuaW9uIHsKKyB1MzIgX19yZXNlcnZlZF8xIDogMjQsCisgcGh5c19kZXN0IDogNCwKKyBfX3Jlc2VydmVkXzIgOiA0OworIHUzMiBfX3Jlc2VydmVkXzMgOiAyNCwKKyBsb2dpY2FsX2Rlc3QgOiA4OworIH0gZGVzdDsKKyB1MzIgX19yZXNlcnZlZF80WzNdOworIH0gaWNyMjsKKworICBzdHJ1Y3QgeworIHUzMiB2ZWN0b3IgOiA4LAorIF9fcmVzZXJ2ZWRfMSA6IDQsCisgZGVsaXZlcnlfc3RhdHVzIDogMSwKKyBfX3Jlc2VydmVkXzIgOiAzLAorIG1hc2sgOiAxLAorIHRpbWVyX21vZGUgOiAxLAorIF9fcmVzZXJ2ZWRfMyA6IDE0OworIHUzMiBfX3Jlc2VydmVkXzRbM107CisgfSBsdnRfdGltZXI7CisKKyAgc3RydWN0IHsKKyB1MzIgdmVjdG9yIDogOCwKKyBkZWxpdmVyeV9tb2RlIDogMywKKyBfX3Jlc2VydmVkXzEgOiAxLAorIGRlbGl2ZXJ5X3N0YXR1cyA6IDEsCisgX19yZXNlcnZlZF8yIDogMywKKyBtYXNrIDogMSwKKyBfX3Jlc2VydmVkXzMgOiAxNTsKKyB1MzIgX19yZXNlcnZlZF80WzNdOworIH0gbHZ0X3RoZXJtYWw7CisKKyAgc3RydWN0IHsKKyB1MzIgdmVjdG9yIDogOCwKKyBkZWxpdmVyeV9tb2RlIDogMywKKyBfX3Jlc2VydmVkXzEgOiAxLAorIGRlbGl2ZXJ5X3N0YXR1cyA6IDEsCisgX19yZXNlcnZlZF8yIDogMywKKyBtYXNrIDogMSwKKyBfX3Jlc2VydmVkXzMgOiAxNTsKKyB1MzIgX19yZXNlcnZlZF80WzNdOworIH0gbHZ0X3BjOworCisgIHN0cnVjdCB7CisgdTMyIHZlY3RvciA6IDgsCisgZGVsaXZlcnlfbW9kZSA6IDMsCisgX19yZXNlcnZlZF8xIDogMSwKKyBkZWxpdmVyeV9zdGF0dXMgOiAxLAorIHBvbGFyaXR5IDogMSwKKyByZW1vdGVfaXJyIDogMSwKKyB0cmlnZ2VyIDogMSwKKyBtYXNrIDogMSwKKyBfX3Jlc2VydmVkXzIgOiAxNTsKKyB1MzIgX19yZXNlcnZlZF8zWzNdOworIH0gbHZ0X2xpbnQwOworCisgIHN0cnVjdCB7CisgdTMyIHZlY3RvciA6IDgsCisgZGVsaXZlcnlfbW9kZSA6IDMsCisgX19yZXNlcnZlZF8xIDogMSwKKyBkZWxpdmVyeV9zdGF0dXMgOiAxLAorIHBvbGFyaXR5IDogMSwKKyByZW1vdGVfaXJyIDogMSwKKyB0cmlnZ2VyIDogMSwKKyBtYXNrIDogMSwKKyBfX3Jlc2VydmVkXzIgOiAxNTsKKyB1MzIgX19yZXNlcnZlZF8zWzNdOworIH0gbHZ0X2xpbnQxOworCisgIHN0cnVjdCB7CisgdTMyIHZlY3RvciA6IDgsCisgX19yZXNlcnZlZF8xIDogNCwKKyBkZWxpdmVyeV9zdGF0dXMgOiAxLAorIF9fcmVzZXJ2ZWRfMiA6IDMsCisgbWFzayA6IDEsCisgX19yZXNlcnZlZF8zIDogMTU7CisgdTMyIF9fcmVzZXJ2ZWRfNFszXTsKKyB9IGx2dF9lcnJvcjsKKworICBzdHJ1Y3QgeworIHUzMiBpbml0aWFsX2NvdW50OworIHUzMiBfX3Jlc2VydmVkXzJbM107CisgfSB0aW1lcl9pY3I7CisKKyAgY29uc3QKKyBzdHJ1Y3QgeworIHUzMiBjdXJyX2NvdW50OworIHUzMiBfX3Jlc2VydmVkXzJbM107CisgfSB0aW1lcl9jY3I7CisKKyAgc3RydWN0IHsgdTMyIF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8xNjsKKworICBzdHJ1Y3QgeyB1MzIgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzE3OworCisgIHN0cnVjdCB7IHUzMiBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMTg7CisKKyAgc3RydWN0IHsgdTMyIF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8xOTsKKworICBzdHJ1Y3QgeworIHUzMiBkaXZpc29yIDogNCwKKyBfX3Jlc2VydmVkXzEgOiAyODsKKyB1MzIgX19yZXNlcnZlZF8yWzNdOworIH0gdGltZXJfZGNyOworCisgIHN0cnVjdCB7IHUzMiBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMjA7CisKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjdW5kZWYgdTMyCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2F0b21pYy5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2F0b21pYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwMjg5Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vYXRvbWljLmgKQEAgLTAsMCArMSwxMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgImF0b21pY182NC5oIgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2F0b21pY18zMi5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2F0b21pY18zMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3N2FhYzgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vYXRvbWljXzMyLmgKQEAgLTAsMCArMSwzOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FSQ0hfSTM4Nl9BVE9NSUNfXworI2RlZmluZSBfX0FSQ0hfSTM4Nl9BVE9NSUNfXworCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL2NtcHhjaGcuaD4KKwordHlwZWRlZiBzdHJ1Y3QgeyBpbnQgY291bnRlcjsgfSBhdG9taWNfdDsKKworI2RlZmluZSBBVE9NSUNfSU5JVChpKSB7IChpKSB9CisKKyNkZWZpbmUgYXRvbWljX3JlYWQodikgKCh2KS0+Y291bnRlcikKKworI2RlZmluZSBhdG9taWNfc2V0KHYsaSkgKCgodiktPmNvdW50ZXIpID0gKGkpKQorCisjZGVmaW5lIGF0b21pY19jbXB4Y2hnKHYsIG9sZCwgbmV3KSAoY21weGNoZygmKCh2KS0+Y291bnRlciksIChvbGQpLCAobmV3KSkpCisjZGVmaW5lIGF0b21pY194Y2hnKHYsIG5ldykgKHhjaGcoJigodiktPmNvdW50ZXIpLCAobmV3KSkpCisjZGVmaW5lIGF0b21pY19pbmNfbm90X3plcm8odikgYXRvbWljX2FkZF91bmxlc3MoKHYpLCAxLCAwKQorI2RlZmluZSBhdG9taWNfaW5jX3JldHVybih2KSAoYXRvbWljX2FkZF9yZXR1cm4oMSx2KSkKKyNkZWZpbmUgYXRvbWljX2RlY19yZXR1cm4odikgKGF0b21pY19zdWJfcmV0dXJuKDEsdikpCisjZGVmaW5lIGF0b21pY19jbGVhcl9tYXNrKG1hc2ssIGFkZHIpICBfX2FzbV9fIF9fdm9sYXRpbGVfXyhMT0NLX1BSRUZJWCAiYW5kbCAlMCwlMSIgIDogOiAiciIgKH4obWFzaykpLCJtIiAoKmFkZHIpIDogIm1lbW9yeSIpCisjZGVmaW5lIGF0b21pY19zZXRfbWFzayhtYXNrLCBhZGRyKSAgX19hc21fXyBfX3ZvbGF0aWxlX18oTE9DS19QUkVGSVggIm9ybCAlMCwlMSIgIDogOiAiciIgKG1hc2spLCJtIiAoKihhZGRyKSkgOiAibWVtb3J5IikKKyNkZWZpbmUgc21wX21iX19iZWZvcmVfYXRvbWljX2RlYygpIGJhcnJpZXIoKQorI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pY19kZWMoKSBiYXJyaWVyKCkKKyNkZWZpbmUgc21wX21iX19iZWZvcmVfYXRvbWljX2luYygpIGJhcnJpZXIoKQorI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKSBiYXJyaWVyKCkKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9hdG9taWMuaD4KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2F1eHZlYy5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2F1eHZlYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwNjVlYjEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vYXV4dmVjLmgKQEAgLTAsMCArMSwyMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQVNNX1g4Nl9BVVhWRUNfSAorI2RlZmluZSBfQVNNX1g4Nl9BVVhWRUNfSAorCisjaWZkZWYgX19pMzg2X18KKyNkZWZpbmUgQVRfU1lTSU5GTyAzMgorI2VuZGlmCisjZGVmaW5lIEFUX1NZU0lORk9fRUhEUiAzMworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9iaXRvcHMuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9iaXRvcHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjU4NTY1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2JpdG9wcy5oCkBAIC0wLDAgKzEsMTIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJiaXRvcHNfNjQuaCIKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9iaXRvcHNfMzIuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9iaXRvcHNfMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTc3ZmUyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2JpdG9wc18zMi5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0kzODZfQklUT1BTX0gKKyNkZWZpbmUgX0kzODZfQklUT1BTX0gKKworI2lmbmRlZiBfTElOVVhfQklUT1BTX0gKKyNlcnJvciBvbmx5IDxsaW51eC9iaXRvcHMuaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5CisjZW5kaWYKKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8YXNtL2FsdGVybmF0aXZlLmg+CisKKyNkZWZpbmUgQUREUiAoKih2b2xhdGlsZSBsb25nICopIGFkZHIpCisKKyNkZWZpbmUgc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCkgYmFycmllcigpCisjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCkgYmFycmllcigpCisjZGVmaW5lIHRlc3RfYml0KG5yLGFkZHIpICAoX19idWlsdGluX2NvbnN0YW50X3AobnIpID8gICBjb25zdGFudF90ZXN0X2JpdCgobnIpLChhZGRyKSkgOiAgIHZhcmlhYmxlX3Rlc3RfYml0KChuciksKGFkZHIpKSkKKyN1bmRlZiBBRERSCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvZmxzNjQuaD4KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2J1Zy5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2J1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyNDcwMjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vYnVnLmgKQEAgLTAsMCArMSwxNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQVNNX1g4Nl9CVUdfSAorI2RlZmluZSBfQVNNX1g4Nl9CVUdfSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYnVnLmg+CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9ieXRlb3JkZXIuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9ieXRlb3JkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODM5Nzk4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2J5dGVvcmRlci5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FTTV9YODZfQllURU9SREVSX0gKKyNkZWZpbmUgX0FTTV9YODZfQllURU9SREVSX0gKKworI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisKKyNpZmRlZiBfX0dOVUNfXworCisjaWZkZWYgX19pMzg2X18KKworc3RhdGljIF9faW5saW5lX18gX19hdHRyaWJ1dGVfY29uc3RfXyBfX3UzMiBfX19hcmNoX19zd2FiMzIoX191MzIgeCkKK3sKKyBfX2FzbV9fKCJ4Y2hnYiAlYjAsJWgwXG5cdCIKKyAicm9ybCAkMTYsJTBcblx0IgorICJ4Y2hnYiAlYjAsJWgwIgorIDoiPXEiICh4KQorIDogIjAiICh4KSk7CisgcmV0dXJuIHg7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fYXR0cmlidXRlX2NvbnN0X18gX191NjQgX19fYXJjaF9fc3dhYjY0KF9fdTY0IHZhbCkKK3sKKyB1bmlvbiB7Cisgc3RydWN0IHsgX191MzIgYSxiOyB9IHM7CisgX191NjQgdTsKKyB9IHY7Cisgdi51ID0gdmFsOworIHYucy5hID0gX19fYXJjaF9fc3dhYjMyKHYucy5hKTsKKyB2LnMuYiA9IF9fX2FyY2hfX3N3YWIzMih2LnMuYik7CisgX19hc21fXygieGNoZ2wgJTAsJTEiIDogIj1yIiAodi5zLmEpLCAiPXIiICh2LnMuYikgOiAiMCIgKHYucy5hKSwgIjEiICh2LnMuYikpOworIHJldHVybiB2LnU7Cit9CisKKyNlbHNlCisKK3N0YXRpYyBfX2lubGluZV9fIF9fYXR0cmlidXRlX2NvbnN0X18gX191NjQgX19fYXJjaF9fc3dhYjY0KF9fdTY0IHgpCit7CisgX19hc21fXygiYnN3YXBxICUwIiA6ICI9ciIgKHgpIDogIjAiICh4KSk7CisgcmV0dXJuIHg7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIF9fYXR0cmlidXRlX2NvbnN0X18gX191MzIgX19fYXJjaF9fc3dhYjMyKF9fdTMyIHgpCit7CisgX19hc21fXygiYnN3YXBsICUwIiA6ICI9ciIgKHgpIDogIjAiICh4KSk7CisgcmV0dXJuIHg7Cit9CisKKyNlbmRpZgorCisjZGVmaW5lIF9fYXJjaF9fc3dhYjY0KHgpIF9fX2FyY2hfX3N3YWI2NCh4KQorI2RlZmluZSBfX2FyY2hfX3N3YWIzMih4KSBfX19hcmNoX19zd2FiMzIoeCkKKworI2RlZmluZSBfX0JZVEVPUkRFUl9IQVNfVTY0X18KKworI2VuZGlmCisKKyNpbmNsdWRlIDxsaW51eC9ieXRlb3JkZXIvbGl0dGxlX2VuZGlhbi5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9jYWNoZS5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2NhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc2NmE3MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9jYWNoZS5oCkBAIC0wLDAgKzEsMjAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FSQ0hfWDg2X0NBQ0hFX0gKKyNkZWZpbmUgX0FSQ0hfWDg2X0NBQ0hFX0gKKworI2RlZmluZSBMMV9DQUNIRV9TSElGVCAoQ09ORklHX1g4Nl9MMV9DQUNIRV9TSElGVCkKKyNkZWZpbmUgTDFfQ0FDSEVfQllURVMgKDEgPDwgTDFfQ0FDSEVfU0hJRlQpCisKKyNkZWZpbmUgX19yZWFkX21vc3RseSBfX2F0dHJpYnV0ZV9fKChfX3NlY3Rpb25fXygiLmRhdGEucmVhZF9tb3N0bHkiKSkpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2NhY2hlZmx1c2guaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9jYWNoZWZsdXNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI4Mjc3YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9jYWNoZWZsdXNoLmgKQEAgLTAsMCArMSwzNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQVNNX1g4Nl9DQUNIRUZMVVNIX0gKKyNkZWZpbmUgX0FTTV9YODZfQ0FDSEVGTFVTSF9ICisKKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorCisjZGVmaW5lIGZsdXNoX2NhY2hlX2FsbCgpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfbW0obW0pIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfZHVwX21tKG1tKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2NhY2hlX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCkgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9jYWNoZV9wYWdlKHZtYSwgdm1hZGRyLCBwZm4pIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSkgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9kY2FjaGVfbW1hcF9sb2NrKG1hcHBpbmcpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfZGNhY2hlX21tYXBfdW5sb2NrKG1hcHBpbmcpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfaWNhY2hlX3JhbmdlKHN0YXJ0LCBlbmQpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfaWNhY2hlX3BhZ2Uodm1hLHBnKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2ljYWNoZV91c2VyX3JhbmdlKHZtYSxwZyxhZHIsbGVuKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2NhY2hlX3ZtYXAoc3RhcnQsIGVuZCkgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9jYWNoZV92dW5tYXAoc3RhcnQsIGVuZCkgZG8geyB9IHdoaWxlICgwKQorCisjZGVmaW5lIGNvcHlfdG9fdXNlcl9wYWdlKHZtYSwgcGFnZSwgdmFkZHIsIGRzdCwgc3JjLCBsZW4pICAgbWVtY3B5KGRzdCwgc3JjLCBsZW4pCisjZGVmaW5lIGNvcHlfZnJvbV91c2VyX3BhZ2Uodm1hLCBwYWdlLCB2YWRkciwgZHN0LCBzcmMsIGxlbikgICBtZW1jcHkoZHN0LCBzcmMsIGxlbikKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vY21weGNoZy5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2NtcHhjaGcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTA1OWEyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2NtcHhjaGcuaApAQCAtMCwwICsxLDEyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAiY21weGNoZ182NC5oIgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2NtcHhjaGdfMzIuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9jbXB4Y2hnXzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzYzMmY0YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9jbXB4Y2hnXzMyLmgKQEAgLTAsMCArMSwzMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FTTV9DTVBYQ0hHX0gKKyNkZWZpbmUgX19BU01fQ01QWENIR19ICisKKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4gIAorCisjZGVmaW5lIHhjaGcocHRyLHYpICgoX190eXBlb2ZfXygqKHB0cikpKV9feGNoZygodW5zaWduZWQgbG9uZykodiksKHB0ciksc2l6ZW9mKCoocHRyKSkpKQorCitzdHJ1Y3QgX194Y2hnX2R1bW15IHsgdW5zaWduZWQgbG9uZyBhWzEwMF07IH07CisjZGVmaW5lIF9feGcoeCkgKChzdHJ1Y3QgX194Y2hnX2R1bW15ICopKHgpKQorCisjZGVmaW5lIGxsX2xvdyh4KSAqKCgodW5zaWduZWQgaW50KikmKHgpKSswKQorI2RlZmluZSBsbF9oaWdoKHgpICooKCh1bnNpZ25lZCBpbnQqKSYoeCkpKzEpCisjZGVmaW5lIHNldF82NGJpdChwdHIsdmFsdWUpICAoX19idWlsdGluX2NvbnN0YW50X3AodmFsdWUpID8gICBfX3NldF82NGJpdF9jb25zdGFudChwdHIsIHZhbHVlKSA6ICAgX19zZXRfNjRiaXRfdmFyKHB0ciwgdmFsdWUpICkKKyNkZWZpbmUgX3NldF82NGJpdChwdHIsdmFsdWUpICAoX19idWlsdGluX2NvbnN0YW50X3AodmFsdWUpID8gICBfX3NldF82NGJpdChwdHIsICh1bnNpZ25lZCBpbnQpKHZhbHVlKSwgKHVuc2lnbmVkIGludCkoKHZhbHVlKT4+MzJVTEwpICkgOiAgIF9fc2V0XzY0Yml0KHB0ciwgbGxfbG93KHZhbHVlKSwgbGxfaGlnaCh2YWx1ZSkpICkKKworI2RlZmluZSBjbXB4Y2hnKHB0cixvLG4pICAoeyAgIF9fdHlwZW9mX18oKihwdHIpKSBfX3JldDsgICBpZiAobGlrZWx5KGJvb3RfY3B1X2RhdGEueDg2ID4gMykpICAgX19yZXQgPSBfX2NtcHhjaGcoKHB0ciksICh1bnNpZ25lZCBsb25nKShvKSwgICAodW5zaWduZWQgbG9uZykobiksIHNpemVvZigqKHB0cikpKTsgICBlbHNlICAgX19yZXQgPSBjbXB4Y2hnXzM4NigocHRyKSwgKHVuc2lnbmVkIGxvbmcpKG8pLCAgICh1bnNpZ25lZCBsb25nKShuKSwgc2l6ZW9mKCoocHRyKSkpOyAgIF9fcmV0OyAgfSkKKyNkZWZpbmUgY21weGNoZ19sb2NhbChwdHIsbyxuKSAgKHsgICBfX3R5cGVvZl9fKCoocHRyKSkgX19yZXQ7ICAgaWYgKGxpa2VseShib290X2NwdV9kYXRhLng4NiA+IDMpKSAgIF9fcmV0ID0gX19jbXB4Y2hnX2xvY2FsKChwdHIpLCAodW5zaWduZWQgbG9uZykobyksICAgKHVuc2lnbmVkIGxvbmcpKG4pLCBzaXplb2YoKihwdHIpKSk7ICAgZWxzZSAgIF9fcmV0ID0gY21weGNoZ18zODYoKHB0ciksICh1bnNpZ25lZCBsb25nKShvKSwgICAodW5zaWduZWQgbG9uZykobiksIHNpemVvZigqKHB0cikpKTsgICBfX3JldDsgIH0pCisjZGVmaW5lIGNtcHhjaGc2NChwdHIsbyxuKSAgKChfX3R5cGVvZl9fKCoocHRyKSkpX19jbXB4Y2hnNjQoKHB0ciksKHVuc2lnbmVkIGxvbmcgbG9uZykobyksICAodW5zaWduZWQgbG9uZyBsb25nKShuKSkpCisjZGVmaW5lIGNtcHhjaGc2NF9sb2NhbChwdHIsbyxuKSAgKChfX3R5cGVvZl9fKCoocHRyKSkpX19jbXB4Y2hnNjRfbG9jYWwoKHB0ciksKHVuc2lnbmVkIGxvbmcgbG9uZykobyksICAodW5zaWduZWQgbG9uZyBsb25nKShuKSkpCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9jcHVmZWF0dXJlLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vY3B1ZmVhdHVyZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3YWY0NTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vY3B1ZmVhdHVyZS5oCkBAIC0wLDAgKzEsMTIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJjcHVmZWF0dXJlXzY0LmgiCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vY3B1ZmVhdHVyZV8zMi5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2NwdWZlYXR1cmVfMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGViYzQwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2NwdWZlYXR1cmVfMzIuaApAQCAtMCwwICsxLDE1MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FTTV9JMzg2X0NQVUZFQVRVUkVfSAorI2RlZmluZSBfX0FTTV9JMzg2X0NQVUZFQVRVUkVfSAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2VuZGlmCisjaW5jbHVkZSA8YXNtL3JlcXVpcmVkLWZlYXR1cmVzLmg+CisKKyNkZWZpbmUgTkNBUElOVFMgOCAgCisKKyNkZWZpbmUgWDg2X0ZFQVRVUkVfRlBVICgwKjMyKyAwKSAgCisjZGVmaW5lIFg4Nl9GRUFUVVJFX1ZNRSAoMCozMisgMSkgIAorI2RlZmluZSBYODZfRkVBVFVSRV9ERSAoMCozMisgMikgIAorI2RlZmluZSBYODZfRkVBVFVSRV9QU0UgKDAqMzIrIDMpICAKKyNkZWZpbmUgWDg2X0ZFQVRVUkVfVFNDICgwKjMyKyA0KSAgCisjZGVmaW5lIFg4Nl9GRUFUVVJFX01TUiAoMCozMisgNSkgIAorI2RlZmluZSBYODZfRkVBVFVSRV9QQUUgKDAqMzIrIDYpICAKKyNkZWZpbmUgWDg2X0ZFQVRVUkVfTUNFICgwKjMyKyA3KSAgCisjZGVmaW5lIFg4Nl9GRUFUVVJFX0NYOCAoMCozMisgOCkgIAorI2RlZmluZSBYODZfRkVBVFVSRV9BUElDICgwKjMyKyA5KSAgCisjZGVmaW5lIFg4Nl9GRUFUVVJFX1NFUCAoMCozMisxMSkgIAorI2RlZmluZSBYODZfRkVBVFVSRV9NVFJSICgwKjMyKzEyKSAgCisjZGVmaW5lIFg4Nl9GRUFUVVJFX1BHRSAoMCozMisxMykgIAorI2RlZmluZSBYODZfRkVBVFVSRV9NQ0EgKDAqMzIrMTQpICAKKyNkZWZpbmUgWDg2X0ZFQVRVUkVfQ01PViAoMCozMisxNSkgIAorI2RlZmluZSBYODZfRkVBVFVSRV9QQVQgKDAqMzIrMTYpICAKKyNkZWZpbmUgWDg2X0ZFQVRVUkVfUFNFMzYgKDAqMzIrMTcpICAKKyNkZWZpbmUgWDg2X0ZFQVRVUkVfUE4gKDAqMzIrMTgpICAKKyNkZWZpbmUgWDg2X0ZFQVRVUkVfQ0xGTFNIICgwKjMyKzE5KSAgCisjZGVmaW5lIFg4Nl9GRUFUVVJFX0RTICgwKjMyKzIxKSAgCisjZGVmaW5lIFg4Nl9GRUFUVVJFX0FDUEkgKDAqMzIrMjIpICAKKyNkZWZpbmUgWDg2X0ZFQVRVUkVfTU1YICgwKjMyKzIzKSAgCisjZGVmaW5lIFg4Nl9GRUFUVVJFX0ZYU1IgKDAqMzIrMjQpICAKKworI2RlZmluZSBYODZfRkVBVFVSRV9YTU0gKDAqMzIrMjUpICAKKyNkZWZpbmUgWDg2X0ZFQVRVUkVfWE1NMiAoMCozMisyNikgIAorI2RlZmluZSBYODZfRkVBVFVSRV9TRUxGU05PT1AgKDAqMzIrMjcpICAKKyNkZWZpbmUgWDg2X0ZFQVRVUkVfSFQgKDAqMzIrMjgpICAKKyNkZWZpbmUgWDg2X0ZFQVRVUkVfQUNDICgwKjMyKzI5KSAgCisjZGVmaW5lIFg4Nl9GRUFUVVJFX0lBNjQgKDAqMzIrMzApICAKKworI2RlZmluZSBYODZfRkVBVFVSRV9TWVNDQUxMICgxKjMyKzExKSAgCisjZGVmaW5lIFg4Nl9GRUFUVVJFX01QICgxKjMyKzE5KSAgCisjZGVmaW5lIFg4Nl9GRUFUVVJFX05YICgxKjMyKzIwKSAgCisjZGVmaW5lIFg4Nl9GRUFUVVJFX01NWEVYVCAoMSozMisyMikgIAorI2RlZmluZSBYODZfRkVBVFVSRV9SRFRTQ1AgKDEqMzIrMjcpICAKKyNkZWZpbmUgWDg2X0ZFQVRVUkVfTE0gKDEqMzIrMjkpICAKKyNkZWZpbmUgWDg2X0ZFQVRVUkVfM0ROT1dFWFQgKDEqMzIrMzApICAKKyNkZWZpbmUgWDg2X0ZFQVRVUkVfM0ROT1cgKDEqMzIrMzEpICAKKworI2RlZmluZSBYODZfRkVBVFVSRV9SRUNPVkVSWSAoMiozMisgMCkgIAorI2RlZmluZSBYODZfRkVBVFVSRV9MT05HUlVOICgyKjMyKyAxKSAgCisjZGVmaW5lIFg4Nl9GRUFUVVJFX0xSVEkgKDIqMzIrIDMpICAKKworI2RlZmluZSBYODZfRkVBVFVSRV9DWE1NWCAoMyozMisgMCkgIAorI2RlZmluZSBYODZfRkVBVFVSRV9LNl9NVFJSICgzKjMyKyAxKSAgCisjZGVmaW5lIFg4Nl9GRUFUVVJFX0NZUklYX0FSUiAoMyozMisgMikgIAorI2RlZmluZSBYODZfRkVBVFVSRV9DRU5UQVVSX01DUiAoMyozMisgMykgIAorCisjZGVmaW5lIFg4Nl9GRUFUVVJFX0s4ICgzKjMyKyA0KSAgCisjZGVmaW5lIFg4Nl9GRUFUVVJFX0s3ICgzKjMyKyA1KSAgCisjZGVmaW5lIFg4Nl9GRUFUVVJFX1AzICgzKjMyKyA2KSAgCisjZGVmaW5lIFg4Nl9GRUFUVVJFX1A0ICgzKjMyKyA3KSAgCisjZGVmaW5lIFg4Nl9GRUFUVVJFX0NPTlNUQU5UX1RTQyAoMyozMisgOCkgIAorI2RlZmluZSBYODZfRkVBVFVSRV9VUCAoMyozMisgOSkgIAorI2RlZmluZSBYODZfRkVBVFVSRV9GWFNBVkVfTEVBSyAoMyozMisxMCkgIAorI2RlZmluZSBYODZfRkVBVFVSRV9BUkNIX1BFUkZNT04gKDMqMzIrMTEpICAKKyNkZWZpbmUgWDg2X0ZFQVRVUkVfUEVCUyAoMyozMisxMikgIAorI2RlZmluZSBYODZfRkVBVFVSRV9CVFMgKDMqMzIrMTMpICAKKworI2RlZmluZSBYODZfRkVBVFVSRV9TWU5DX1JEVFNDICgzKjMyKzE1KSAgCisjZGVmaW5lIFg4Nl9GRUFUVVJFX1JFUF9HT09EICgzKjMyKzE2KSAgCisKKyNkZWZpbmUgWDg2X0ZFQVRVUkVfWE1NMyAoNCozMisgMCkgIAorI2RlZmluZSBYODZfRkVBVFVSRV9NV0FJVCAoNCozMisgMykgIAorI2RlZmluZSBYODZfRkVBVFVSRV9EU0NQTCAoNCozMisgNCkgIAorI2RlZmluZSBYODZfRkVBVFVSRV9FU1QgKDQqMzIrIDcpICAKKyNkZWZpbmUgWDg2X0ZFQVRVUkVfVE0yICg0KjMyKyA4KSAgCisjZGVmaW5lIFg4Nl9GRUFUVVJFX0NJRCAoNCozMisxMCkgIAorI2RlZmluZSBYODZfRkVBVFVSRV9DWDE2ICg0KjMyKzEzKSAgCisjZGVmaW5lIFg4Nl9GRUFUVVJFX1hUUFIgKDQqMzIrMTQpICAKKyNkZWZpbmUgWDg2X0ZFQVRVUkVfRENBICg0KjMyKzE4KSAgCisKKyNkZWZpbmUgWDg2X0ZFQVRVUkVfWFNUT1JFICg1KjMyKyAyKSAgCisjZGVmaW5lIFg4Nl9GRUFUVVJFX1hTVE9SRV9FTiAoNSozMisgMykgIAorI2RlZmluZSBYODZfRkVBVFVSRV9YQ1JZUFQgKDUqMzIrIDYpICAKKyNkZWZpbmUgWDg2X0ZFQVRVUkVfWENSWVBUX0VOICg1KjMyKyA3KSAgCisjZGVmaW5lIFg4Nl9GRUFUVVJFX0FDRTIgKDUqMzIrIDgpICAKKyNkZWZpbmUgWDg2X0ZFQVRVUkVfQUNFMl9FTiAoNSozMisgOSkgIAorI2RlZmluZSBYODZfRkVBVFVSRV9QSEUgKDUqMzIrIDEwKSAgCisjZGVmaW5lIFg4Nl9GRUFUVVJFX1BIRV9FTiAoNSozMisgMTEpICAKKyNkZWZpbmUgWDg2X0ZFQVRVUkVfUE1NICg1KjMyKyAxMikgIAorI2RlZmluZSBYODZfRkVBVFVSRV9QTU1fRU4gKDUqMzIrIDEzKSAgCisKKyNkZWZpbmUgWDg2X0ZFQVRVUkVfTEFIRl9MTSAoNiozMisgMCkgIAorI2RlZmluZSBYODZfRkVBVFVSRV9DTVBfTEVHQUNZICg2KjMyKyAxKSAgCisKKyNkZWZpbmUgWDg2X0ZFQVRVUkVfSURBICg3KjMyKyAwKSAgCisKKyNkZWZpbmUgY3B1X2hhcyhjLCBiaXQpICAgKF9fYnVpbHRpbl9jb25zdGFudF9wKGJpdCkgJiYgICAoICgoKGJpdCk+PjUpPT0wICYmICgxVUw8PCgoYml0KSYzMSkgJiBSRVFVSVJFRF9NQVNLMCkpIHx8ICAgKCgoYml0KT4+NSk9PTEgJiYgKDFVTDw8KChiaXQpJjMxKSAmIFJFUVVJUkVEX01BU0sxKSkgfHwgICAoKChiaXQpPj41KT09MiAmJiAoMVVMPDwoKGJpdCkmMzEpICYgUkVRVUlSRURfTUFTSzIpKSB8fCAgICgoKGJpdCk+PjUpPT0zICYmICgxVUw8PCgoYml0KSYzMSkgJiBSRVFVSVJFRF9NQVNLMykpIHx8ICAgKCgoYml0KT4+NSk9PTQgJiYgKDFVTDw8KChiaXQpJjMxKSAmIFJFUVVJUkVEX01BU0s0KSkgfHwgICAoKChiaXQpPj41KT09NSAmJiAoMVVMPDwoKGJpdCkmMzEpICYgUkVRVUlSRURfTUFTSzUpKSB8fCAgICgoKGJpdCk+PjUpPT02ICYmICgxVUw8PCgoYml0KSYzMSkgJiBSRVFVSVJFRF9NQVNLNikpIHx8ICAgKCgoYml0KT4+NSk9PTcgJiYgKDFVTDw8KChiaXQpJjMxKSAmIFJFUVVJUkVEX01BU0s3KSkgKSAgID8gMSA6ICAgdGVzdF9iaXQoYml0LCAoYyktPng4Nl9jYXBhYmlsaXR5KSkKKyNkZWZpbmUgYm9vdF9jcHVfaGFzKGJpdCkgY3B1X2hhcygmYm9vdF9jcHVfZGF0YSwgYml0KQorCisjZGVmaW5lIGNwdV9oYXNfZnB1IGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9GUFUpCisjZGVmaW5lIGNwdV9oYXNfdm1lIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9WTUUpCisjZGVmaW5lIGNwdV9oYXNfZGUgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0RFKQorI2RlZmluZSBjcHVfaGFzX3BzZSBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfUFNFKQorI2RlZmluZSBjcHVfaGFzX3RzYyBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfVFNDKQorI2RlZmluZSBjcHVfaGFzX3BhZSBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfUEFFKQorI2RlZmluZSBjcHVfaGFzX3BnZSBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfUEdFKQorI2RlZmluZSBjcHVfaGFzX2FwaWMgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0FQSUMpCisjZGVmaW5lIGNwdV9oYXNfc2VwIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9TRVApCisjZGVmaW5lIGNwdV9oYXNfbXRyciBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfTVRSUikKKyNkZWZpbmUgY3B1X2hhc19tbXggYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX01NWCkKKyNkZWZpbmUgY3B1X2hhc19meHNyIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9GWFNSKQorI2RlZmluZSBjcHVfaGFzX3htbSBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfWE1NKQorI2RlZmluZSBjcHVfaGFzX3htbTIgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1hNTTIpCisjZGVmaW5lIGNwdV9oYXNfeG1tMyBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfWE1NMykKKyNkZWZpbmUgY3B1X2hhc19odCBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfSFQpCisjZGVmaW5lIGNwdV9oYXNfbXAgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX01QKQorI2RlZmluZSBjcHVfaGFzX254IGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9OWCkKKyNkZWZpbmUgY3B1X2hhc19rNl9tdHJyIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9LNl9NVFJSKQorI2RlZmluZSBjcHVfaGFzX2N5cml4X2FyciBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQ1lSSVhfQVJSKQorI2RlZmluZSBjcHVfaGFzX2NlbnRhdXJfbWNyIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9DRU5UQVVSX01DUikKKyNkZWZpbmUgY3B1X2hhc194c3RvcmUgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1hTVE9SRSkKKyNkZWZpbmUgY3B1X2hhc194c3RvcmVfZW5hYmxlZCBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfWFNUT1JFX0VOKQorI2RlZmluZSBjcHVfaGFzX3hjcnlwdCBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfWENSWVBUKQorI2RlZmluZSBjcHVfaGFzX3hjcnlwdF9lbmFibGVkIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9YQ1JZUFRfRU4pCisjZGVmaW5lIGNwdV9oYXNfYWNlMiBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQUNFMikKKyNkZWZpbmUgY3B1X2hhc19hY2UyX2VuYWJsZWQgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0FDRTJfRU4pCisjZGVmaW5lIGNwdV9oYXNfcGhlIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9QSEUpCisjZGVmaW5lIGNwdV9oYXNfcGhlX2VuYWJsZWQgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1BIRV9FTikKKyNkZWZpbmUgY3B1X2hhc19wbW0gYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1BNTSkKKyNkZWZpbmUgY3B1X2hhc19wbW1fZW5hYmxlZCBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfUE1NX0VOKQorI2RlZmluZSBjcHVfaGFzX2RzIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9EUykKKyNkZWZpbmUgY3B1X2hhc19wZWJzIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9QRUJTKQorI2RlZmluZSBjcHVfaGFzX2NsZmx1c2ggYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0NMRkxTSCkKKyNkZWZpbmUgY3B1X2hhc19idHMgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0JUUykKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9jcHV0aW1lLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vY3B1dGltZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNzllMGIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vY3B1dGltZS5oCkBAIC0wLDAgKzEsMTIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9jcHV0aW1lLmg+CmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vY3VycmVudC5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2N1cnJlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTNjNmZlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2N1cnJlbnQuaApAQCAtMCwwICsxLDEyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAiY3VycmVudF82NC5oIgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2N1cnJlbnRfMzIuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9jdXJyZW50XzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc0YjM3MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9jdXJyZW50XzMyLmgKQEAgLTAsMCArMSwyMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfSTM4Nl9DVVJSRU5UX0gKKyNkZWZpbmUgX0kzODZfQ1VSUkVOVF9ICisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGFzbS9wZXJjcHUuaD4KKworc3RydWN0IHRhc2tfc3RydWN0OworCisjZGVmaW5lIGN1cnJlbnQgZ2V0X2N1cnJlbnQoKQorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vZGVsYXkuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9kZWxheS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjYjVmNzQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vZGVsYXkuaApAQCAtMCwwICsxLDE5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01fWDg2X0RFTEFZX0gKKyNkZWZpbmUgX0FTTV9YODZfREVMQVlfSAorCisjZGVmaW5lIHVkZWxheShuKSAoX19idWlsdGluX2NvbnN0YW50X3AobikgPyAgICgobikgPiAyMDAwMCA/IF9fYmFkX3VkZWxheSgpIDogX19jb25zdF91ZGVsYXkoKG4pICogMHgxMGM3dWwpKSA6ICAgX191ZGVsYXkobikpCisKKyNkZWZpbmUgbmRlbGF5KG4pIChfX2J1aWx0aW5fY29uc3RhbnRfcChuKSA/ICAgKChuKSA+IDIwMDAwID8gX19iYWRfbmRlbGF5KCkgOiBfX2NvbnN0X3VkZWxheSgobikgKiA1dWwpKSA6ICAgX19uZGVsYXkobikpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2Rlc2MuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9kZXNjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTlkNDQ4YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9kZXNjLmgKQEAgLTAsMCArMSwxMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgImRlc2NfNjQuaCIKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9kZXNjXzMyLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vZGVzY18zMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1MzE5MWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vZGVzY18zMi5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19BUkNIX0RFU0NfSAorI2RlZmluZSBfX0FSQ0hfREVTQ19ICisKKyNpbmNsdWRlIDxhc20vbGR0Lmg+CisjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2luY2x1ZGUgPGxpbnV4L3ByZWVtcHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKworI2luY2x1ZGUgPGFzbS9tbXUuaD4KKworc3RydWN0IFhndF9kZXNjX3N0cnVjdCB7CisgdW5zaWduZWQgc2hvcnQgc2l6ZTsKKyB1bnNpZ25lZCBsb25nIGFkZHJlc3MgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisgdW5zaWduZWQgc2hvcnQgcGFkOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBnZHRfcGFnZQoreworIHN0cnVjdCBkZXNjX3N0cnVjdCBnZHRbR0RUX0VOVFJJRVNdOworfSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKFBBR0VfU0laRSkpKTsKKworI2RlZmluZSBERVNDVFlQRV9MRFQgMHg4MiAgCisjZGVmaW5lIERFU0NUWVBFX1RTUyAweDg5ICAKKyNkZWZpbmUgREVTQ1RZUEVfVEFTSyAweDg1ICAKKyNkZWZpbmUgREVTQ1RZUEVfSU5UIDB4OGUgIAorI2RlZmluZSBERVNDVFlQRV9UUkFQIDB4OGYgIAorI2RlZmluZSBERVNDVFlQRV9EUEwzIDB4NjAgIAorI2RlZmluZSBERVNDVFlQRV9TIDB4MTAgIAorI2RlZmluZSBsb2FkX1RSX2Rlc2MoKSBuYXRpdmVfbG9hZF90cl9kZXNjKCkKKyNkZWZpbmUgbG9hZF9nZHQoZHRyKSBuYXRpdmVfbG9hZF9nZHQoZHRyKQorI2RlZmluZSBsb2FkX2lkdChkdHIpIG5hdGl2ZV9sb2FkX2lkdChkdHIpCisjZGVmaW5lIGxvYWRfdHIodHIpIF9fYXNtX18gX192b2xhdGlsZSgibHRyICUwIjo6Im0iICh0cikpCisjZGVmaW5lIGxvYWRfbGR0KGxkdCkgX19hc21fXyBfX3ZvbGF0aWxlKCJsbGR0ICUwIjo6Im0iIChsZHQpKQorI2RlZmluZSBzdG9yZV9nZHQoZHRyKSBuYXRpdmVfc3RvcmVfZ2R0KGR0cikKKyNkZWZpbmUgc3RvcmVfaWR0KGR0cikgbmF0aXZlX3N0b3JlX2lkdChkdHIpCisjZGVmaW5lIHN0b3JlX3RyKHRyKSAodHIgPSBuYXRpdmVfc3RvcmVfdHIoKSkKKyNkZWZpbmUgc3RvcmVfbGR0KGxkdCkgX19hc21fXyAoInNsZHQgJTAiOiI9bSIgKGxkdCkpCisjZGVmaW5lIGxvYWRfVExTKHQsIGNwdSkgbmF0aXZlX2xvYWRfdGxzKHQsIGNwdSkKKyNkZWZpbmUgc2V0X2xkdCBuYXRpdmVfc2V0X2xkdAorI2RlZmluZSB3cml0ZV9sZHRfZW50cnkoZHQsIGVudHJ5LCBhLCBiKSB3cml0ZV9kdF9lbnRyeShkdCwgZW50cnksIGEsIGIpCisjZGVmaW5lIHdyaXRlX2dkdF9lbnRyeShkdCwgZW50cnksIGEsIGIpIHdyaXRlX2R0X2VudHJ5KGR0LCBlbnRyeSwgYSwgYikKKyNkZWZpbmUgd3JpdGVfaWR0X2VudHJ5KGR0LCBlbnRyeSwgYSwgYikgd3JpdGVfZHRfZW50cnkoZHQsIGVudHJ5LCBhLCBiKQorI2RlZmluZSBzZXRfdHNzX2Rlc2MoY3B1LGFkZHIpIF9fc2V0X3Rzc19kZXNjKGNwdSwgR0RUX0VOVFJZX1RTUywgYWRkcikKKyNkZWZpbmUgTERUX2VudHJ5X2EoaW5mbykgICAoKCgoaW5mbyktPmJhc2VfYWRkciAmIDB4MDAwMGZmZmYpIDw8IDE2KSB8ICgoaW5mbyktPmxpbWl0ICYgMHgwZmZmZikpCisjZGVmaW5lIExEVF9lbnRyeV9iKGluZm8pICAgKCgoaW5mbyktPmJhc2VfYWRkciAmIDB4ZmYwMDAwMDApIHwgICAoKChpbmZvKS0+YmFzZV9hZGRyICYgMHgwMGZmMDAwMCkgPj4gMTYpIHwgICAoKGluZm8pLT5saW1pdCAmIDB4ZjAwMDApIHwgICAoKChpbmZvKS0+cmVhZF9leGVjX29ubHkgXiAxKSA8PCA5KSB8ICAgKChpbmZvKS0+Y29udGVudHMgPDwgMTApIHwgICAoKChpbmZvKS0+c2VnX25vdF9wcmVzZW50IF4gMSkgPDwgMTUpIHwgICAoKGluZm8pLT5zZWdfMzJiaXQgPDwgMjIpIHwgICAoKGluZm8pLT5saW1pdF9pbl9wYWdlcyA8PCAyMykgfCAgICgoaW5mbyktPnVzZWFibGUgPDwgMjApIHwgICAweDcwMDApCisjZGVmaW5lIExEVF9lbXB0eShpbmZvKSAoICAoaW5mbyktPmJhc2VfYWRkciA9PSAwICYmICAgKGluZm8pLT5saW1pdCA9PSAwICYmICAgKGluZm8pLT5jb250ZW50cyA9PSAwICYmICAgKGluZm8pLT5yZWFkX2V4ZWNfb25seSA9PSAxICYmICAgKGluZm8pLT5zZWdfMzJiaXQgPT0gMCAmJiAgIChpbmZvKS0+bGltaXRfaW5fcGFnZXMgPT0gMCAmJiAgIChpbmZvKS0+c2VnX25vdF9wcmVzZW50ID09IDEgJiYgICAoaW5mbyktPnVzZWFibGUgPT0gMCApCisjZWxzZQorI2RlZmluZSBHRVRfREVTQ19CQVNFKGlkeCwgZ2R0LCBiYXNlLCBsb193LCBsb19iLCBoaV9iKSAgIG1vdmIgaWR4KjgrNChnZHQpLCBsb19iOyAgIG1vdmIgaWR4KjgrNyhnZHQpLCBoaV9iOyAgIHNobGwgJDE2LCBiYXNlOyAgIG1vdncgaWR4KjgrMihnZHQpLCBsb193OworI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9kZXNjX2RlZnMuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9kZXNjX2RlZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjZkZTRhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2Rlc2NfZGVmcy5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19BUkNIX0RFU0NfREVGU19ICisjZGVmaW5lIF9fQVJDSF9ERVNDX0RFRlNfSAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IGRlc2Nfc3RydWN0IHsKKyB1MTYgbGltaXQwOworIHUxNiBiYXNlMDsKKyB1bnNpZ25lZCBiYXNlMSA6IDgsIHR5cGUgOiA0LCBzIDogMSwgZHBsIDogMiwgcCA6IDE7CisgdW5zaWduZWQgbGltaXQgOiA0LCBhdmwgOiAxLCBsIDogMSwgZCA6IDEsIGcgOiAxLCBiYXNlMiA6IDg7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3Qgbl9kZXNjX3N0cnVjdCB7CisgdW5zaWduZWQgaW50IGEsYjsKK307CisKK2VudW0geworIEdBVEVfSU5URVJSVVBUID0gMHhFLAorIEdBVEVfVFJBUCA9IDB4RiwKKyBHQVRFX0NBTEwgPSAweEMsCit9OworCitzdHJ1Y3QgZ2F0ZV9zdHJ1Y3QgeworIHUxNiBvZmZzZXRfbG93OworIHUxNiBzZWdtZW50OworIHVuc2lnbmVkIGlzdCA6IDMsIHplcm8wIDogNSwgdHlwZSA6IDUsIGRwbCA6IDIsIHAgOiAxOworIHUxNiBvZmZzZXRfbWlkZGxlOworIHUzMiBvZmZzZXRfaGlnaDsKKyB1MzIgemVybzE7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIFBUUl9MT1coeCkgKCh1bnNpZ25lZCBsb25nKSh4KSAmIDB4RkZGRikKKyNkZWZpbmUgUFRSX01JRERMRSh4KSAoKCh1bnNpZ25lZCBsb25nKSh4KSA+PiAxNikgJiAweEZGRkYpCisjZGVmaW5lIFBUUl9ISUdIKHgpICgodW5zaWduZWQgbG9uZykoeCkgPj4gMzIpCisKK2VudW0geworIERFU0NfVFNTID0gMHg5LAorIERFU0NfTERUID0gMHgyLAorfTsKKworc3RydWN0IGxkdHRzc19kZXNjIHsKKyB1MTYgbGltaXQwOworIHUxNiBiYXNlMDsKKyB1bnNpZ25lZCBiYXNlMSA6IDgsIHR5cGUgOiA1LCBkcGwgOiAyLCBwIDogMTsKKyB1bnNpZ25lZCBsaW1pdDEgOiA0LCB6ZXJvMCA6IDMsIGcgOiAxLCBiYXNlMiA6IDg7CisgdTMyIGJhc2UzOworIHUzMiB6ZXJvMTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBkZXNjX3B0ciB7CisgdW5zaWduZWQgc2hvcnQgc2l6ZTsKKyB1bnNpZ25lZCBsb25nIGFkZHJlc3M7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIDsKKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2RpdjY0LmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vZGl2NjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmVmNDNlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2RpdjY0LmgKQEAgLTAsMCArMSwxNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQVNNX1g4Nl9ESVY2NF9ICisjZGVmaW5lIF9BU01fWDg2X0RJVjY0X0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2RpdjY0Lmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2RtYS1tYXBwaW5nLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vZG1hLW1hcHBpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGExZGE2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2RtYS1tYXBwaW5nLmgKQEAgLTAsMCArMSwxMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgImRtYS1tYXBwaW5nXzY0LmgiCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vZG1hLW1hcHBpbmdfMzIuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9kbWEtbWFwcGluZ18zMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3NGE2MGIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vZG1hLW1hcHBpbmdfMzIuaApAQCAtMCwwICsxLDI4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01fSTM4Nl9ETUFfTUFQUElOR19ICisjZGVmaW5lIF9BU01fSTM4Nl9ETUFfTUFQUElOR19ICisKKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisKKyNpbmNsdWRlIDxhc20vY2FjaGUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vYnVnLmg+CisKKyNkZWZpbmUgZG1hX2FsbG9jX25vbmNvaGVyZW50KGQsIHMsIGgsIGYpIGRtYV9hbGxvY19jb2hlcmVudChkLCBzLCBoLCBmKQorI2RlZmluZSBkbWFfZnJlZV9ub25jb2hlcmVudChkLCBzLCB2LCBoKSBkbWFfZnJlZV9jb2hlcmVudChkLCBzLCB2LCBoKQorCisjZGVmaW5lIGRtYV9pc19jb25zaXN0ZW50KGQsIGgpICgxKQorI2RlZmluZSBBUkNIX0hBU19ETUFfREVDTEFSRV9DT0hFUkVOVF9NRU1PUlkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vZG1hLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU1MWUwMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9kbWEuaApAQCAtMCwwICsxLDEyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAiZG1hXzY0LmgiCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vZG1hXzMyLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vZG1hXzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWMyNGY1ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9kbWFfMzIuaApAQCAtMCwwICsxLDkwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01fRE1BX0gKKyNkZWZpbmUgX0FTTV9ETUFfSAorCisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4gIAorI2luY2x1ZGUgPGFzbS9pby5oPiAgCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2lmZGVmIEhBVkVfUkVBTExZX1NMT1dfRE1BX0NPTlRST0xMRVIKKyNkZWZpbmUgZG1hX291dGIgb3V0Yl9wCisjZWxzZQorI2RlZmluZSBkbWFfb3V0YiBvdXRiCisjZW5kaWYKKworI2RlZmluZSBkbWFfaW5iIGluYgorCisjZGVmaW5lIE1BWF9ETUFfQ0hBTk5FTFMgOAorCisjZGVmaW5lIE1BWF9ETUFfQUREUkVTUyAoUEFHRV9PRkZTRVQrMHgxMDAwMDAwKQorCisjZGVmaW5lIElPX0RNQTFfQkFTRSAweDAwICAKKyNkZWZpbmUgSU9fRE1BMl9CQVNFIDB4QzAgIAorCisjZGVmaW5lIERNQTFfQ01EX1JFRyAweDA4ICAKKyNkZWZpbmUgRE1BMV9TVEFUX1JFRyAweDA4ICAKKyNkZWZpbmUgRE1BMV9SRVFfUkVHIDB4MDkgIAorI2RlZmluZSBETUExX01BU0tfUkVHIDB4MEEgIAorI2RlZmluZSBETUExX01PREVfUkVHIDB4MEIgIAorI2RlZmluZSBETUExX0NMRUFSX0ZGX1JFRyAweDBDICAKKyNkZWZpbmUgRE1BMV9URU1QX1JFRyAweDBEICAKKyNkZWZpbmUgRE1BMV9SRVNFVF9SRUcgMHgwRCAgCisjZGVmaW5lIERNQTFfQ0xSX01BU0tfUkVHIDB4MEUgIAorI2RlZmluZSBETUExX01BU0tfQUxMX1JFRyAweDBGICAKKworI2RlZmluZSBETUEyX0NNRF9SRUcgMHhEMCAgCisjZGVmaW5lIERNQTJfU1RBVF9SRUcgMHhEMCAgCisjZGVmaW5lIERNQTJfUkVRX1JFRyAweEQyICAKKyNkZWZpbmUgRE1BMl9NQVNLX1JFRyAweEQ0ICAKKyNkZWZpbmUgRE1BMl9NT0RFX1JFRyAweEQ2ICAKKyNkZWZpbmUgRE1BMl9DTEVBUl9GRl9SRUcgMHhEOCAgCisjZGVmaW5lIERNQTJfVEVNUF9SRUcgMHhEQSAgCisjZGVmaW5lIERNQTJfUkVTRVRfUkVHIDB4REEgIAorI2RlZmluZSBETUEyX0NMUl9NQVNLX1JFRyAweERDICAKKyNkZWZpbmUgRE1BMl9NQVNLX0FMTF9SRUcgMHhERSAgCisKKyNkZWZpbmUgRE1BX0FERFJfMCAweDAwICAKKyNkZWZpbmUgRE1BX0FERFJfMSAweDAyCisjZGVmaW5lIERNQV9BRERSXzIgMHgwNAorI2RlZmluZSBETUFfQUREUl8zIDB4MDYKKyNkZWZpbmUgRE1BX0FERFJfNCAweEMwCisjZGVmaW5lIERNQV9BRERSXzUgMHhDNAorI2RlZmluZSBETUFfQUREUl82IDB4QzgKKyNkZWZpbmUgRE1BX0FERFJfNyAweENDCisKKyNkZWZpbmUgRE1BX0NOVF8wIDB4MDEgIAorI2RlZmluZSBETUFfQ05UXzEgMHgwMworI2RlZmluZSBETUFfQ05UXzIgMHgwNQorI2RlZmluZSBETUFfQ05UXzMgMHgwNworI2RlZmluZSBETUFfQ05UXzQgMHhDMgorI2RlZmluZSBETUFfQ05UXzUgMHhDNgorI2RlZmluZSBETUFfQ05UXzYgMHhDQQorI2RlZmluZSBETUFfQ05UXzcgMHhDRQorCisjZGVmaW5lIERNQV9QQUdFXzAgMHg4NyAgCisjZGVmaW5lIERNQV9QQUdFXzEgMHg4MworI2RlZmluZSBETUFfUEFHRV8yIDB4ODEKKyNkZWZpbmUgRE1BX1BBR0VfMyAweDgyCisjZGVmaW5lIERNQV9QQUdFXzUgMHg4QgorI2RlZmluZSBETUFfUEFHRV82IDB4ODkKKyNkZWZpbmUgRE1BX1BBR0VfNyAweDhBCisKKyNkZWZpbmUgRE1BX01PREVfUkVBRCAweDQ0ICAKKyNkZWZpbmUgRE1BX01PREVfV1JJVEUgMHg0OCAgCisjZGVmaW5lIERNQV9NT0RFX0NBU0NBREUgMHhDMCAgCisKKyNkZWZpbmUgRE1BX0FVVE9JTklUIDB4MTAKKworI2RlZmluZSBpc2FfZG1hX2JyaWRnZV9idWdneSAoMCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vZHdhcmYyLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vZHdhcmYyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkzNzU5MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9kd2FyZjIuaApAQCAtMCwwICsxLDEyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAiZHdhcmYyXzY0LmgiCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vZHdhcmYyXzMyLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vZHdhcmYyXzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJkYzNmMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9kd2FyZjJfMzIuaApAQCAtMCwwICsxLDMzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9EV0FSRjJfSAorI2RlZmluZSBfRFdBUkYyX0gKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyN3YXJuaW5nICJhc20vZHdhcmYyLmggc2hvdWxkIGJlIG9ubHkgaW5jbHVkZWQgaW4gcHVyZSBhc3NlbWJseSBmaWxlcyIKKyNlbmRpZgorCisjZGVmaW5lIENGSV9TVEFSVFBST0MgaWdub3JlCisjZGVmaW5lIENGSV9FTkRQUk9DIGlnbm9yZQorI2RlZmluZSBDRklfREVGX0NGQSBpZ25vcmUKKyNkZWZpbmUgQ0ZJX0RFRl9DRkFfUkVHSVNURVIgaWdub3JlCisjZGVmaW5lIENGSV9ERUZfQ0ZBX09GRlNFVCBpZ25vcmUKKyNkZWZpbmUgQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIGlnbm9yZQorI2RlZmluZSBDRklfT0ZGU0VUIGlnbm9yZQorI2RlZmluZSBDRklfUkVMX09GRlNFVCBpZ25vcmUKKyNkZWZpbmUgQ0ZJX1JFR0lTVEVSIGlnbm9yZQorI2RlZmluZSBDRklfUkVTVE9SRSBpZ25vcmUKKyNkZWZpbmUgQ0ZJX1JFTUVNQkVSX1NUQVRFIGlnbm9yZQorI2RlZmluZSBDRklfUkVTVE9SRV9TVEFURSBpZ25vcmUKKyNkZWZpbmUgQ0ZJX1VOREVGSU5FRCBpZ25vcmUKKyNkZWZpbmUgQ0ZJX1NJR05BTF9GUkFNRSBpZ25vcmUKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2U4MjAuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9lODIwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE4OGZmMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9lODIwLmgKQEAgLTAsMCArMSwzNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FTTV9FODIwX0gKKyNkZWZpbmUgX19BU01fRTgyMF9ICisjZGVmaW5lIEU4MjBNQVAgMHgyZDAgIAorI2RlZmluZSBFODIwTUFYIDEyOCAgCisjZGVmaW5lIEU4MjBOUiAweDFlOCAgCisKKyNkZWZpbmUgRTgyMF9SQU0gMQorI2RlZmluZSBFODIwX1JFU0VSVkVEIDIKKyNkZWZpbmUgRTgyMF9BQ1BJIDMKKyNkZWZpbmUgRTgyMF9OVlMgNAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworc3RydWN0IGU4MjBlbnRyeSB7CisgX191NjQgYWRkcjsKKyBfX3U2NCBzaXplOworIF9fdTMyIHR5cGU7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgZTgyMG1hcCB7CisgX191MzIgbnJfbWFwOworIHN0cnVjdCBlODIwZW50cnkgbWFwW0U4MjBNQVhdOworfTsKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9lbGYuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9lbGYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzZmYmJmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2VsZi5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FTTV9YODZfRUxGX0gKKyNkZWZpbmUgX0FTTV9YODZfRUxGX0gKKworI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vdXNlci5oPgorI2luY2x1ZGUgPGFzbS9hdXh2ZWMuaD4KKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGVsZl9ncmVnX3Q7CisKKyNkZWZpbmUgRUxGX05HUkVHIChzaXplb2YgKHN0cnVjdCB1c2VyX3JlZ3Nfc3RydWN0KSAvIHNpemVvZihlbGZfZ3JlZ190KSkKK3R5cGVkZWYgZWxmX2dyZWdfdCBlbGZfZ3JlZ3NldF90W0VMRl9OR1JFR107CisKK3R5cGVkZWYgc3RydWN0IHVzZXJfaTM4N19zdHJ1Y3QgZWxmX2ZwcmVnc2V0X3Q7CisKKyNpZmRlZiBfX2kzODZfXworCit0eXBlZGVmIHN0cnVjdCB1c2VyX2Z4c3Jfc3RydWN0IGVsZl9mcHhyZWdzZXRfdDsKKworI2RlZmluZSBSXzM4Nl9OT05FIDAKKyNkZWZpbmUgUl8zODZfMzIgMQorI2RlZmluZSBSXzM4Nl9QQzMyIDIKKyNkZWZpbmUgUl8zODZfR09UMzIgMworI2RlZmluZSBSXzM4Nl9QTFQzMiA0CisjZGVmaW5lIFJfMzg2X0NPUFkgNQorI2RlZmluZSBSXzM4Nl9HTE9CX0RBVCA2CisjZGVmaW5lIFJfMzg2X0pNUF9TTE9UIDcKKyNkZWZpbmUgUl8zODZfUkVMQVRJVkUgOAorI2RlZmluZSBSXzM4Nl9HT1RPRkYgOQorI2RlZmluZSBSXzM4Nl9HT1RQQyAxMAorI2RlZmluZSBSXzM4Nl9OVU0gMTEKKworI2RlZmluZSBFTEZfQ0xBU1MgRUxGQ0xBU1MzMgorI2RlZmluZSBFTEZfREFUQSBFTEZEQVRBMkxTQgorI2RlZmluZSBFTEZfQVJDSCBFTV8zODYKKworI2Vsc2UKKworI2RlZmluZSBSX1g4Nl82NF9OT05FIDAgIAorI2RlZmluZSBSX1g4Nl82NF82NCAxICAKKyNkZWZpbmUgUl9YODZfNjRfUEMzMiAyICAKKyNkZWZpbmUgUl9YODZfNjRfR09UMzIgMyAgCisjZGVmaW5lIFJfWDg2XzY0X1BMVDMyIDQgIAorI2RlZmluZSBSX1g4Nl82NF9DT1BZIDUgIAorI2RlZmluZSBSX1g4Nl82NF9HTE9CX0RBVCA2ICAKKyNkZWZpbmUgUl9YODZfNjRfSlVNUF9TTE9UIDcgIAorI2RlZmluZSBSX1g4Nl82NF9SRUxBVElWRSA4ICAKKyNkZWZpbmUgUl9YODZfNjRfR09UUENSRUwgOSAgCisjZGVmaW5lIFJfWDg2XzY0XzMyIDEwICAKKyNkZWZpbmUgUl9YODZfNjRfMzJTIDExICAKKyNkZWZpbmUgUl9YODZfNjRfMTYgMTIgIAorI2RlZmluZSBSX1g4Nl82NF9QQzE2IDEzICAKKyNkZWZpbmUgUl9YODZfNjRfOCAxNCAgCisjZGVmaW5lIFJfWDg2XzY0X1BDOCAxNSAgCisKKyNkZWZpbmUgUl9YODZfNjRfTlVNIDE2CisKKyNkZWZpbmUgRUxGX0NMQVNTIEVMRkNMQVNTNjQKKyNkZWZpbmUgRUxGX0RBVEEgRUxGREFUQTJMU0IKKyNkZWZpbmUgRUxGX0FSQ0ggRU1fWDg2XzY0CisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9lcnJuby5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2Vycm5vLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThmNzQyNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9lcnJuby5oCkBAIC0wLDAgKzEsMTIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2ZjbnRsLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vZmNudGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDYzMGFkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2ZjbnRsLmgKQEAgLTAsMCArMSwxMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2ZjbnRsLmg+CmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vZml4bWFwLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vZml4bWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTliOWNjOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9maXhtYXAuaApAQCAtMCwwICsxLDEyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAiZml4bWFwXzY0LmgiCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vZml4bWFwXzMyLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vZml4bWFwXzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVkZThhMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9maXhtYXBfMzIuaApAQCAtMCwwICsxLDU1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01fRklYTUFQX0gKKyNkZWZpbmUgX0FTTV9GSVhNQVBfSAorCisjZGVmaW5lIEZJWEFERFJfVVNFUl9TVEFSVCBfX2ZpeF90b192aXJ0KEZJWF9WRFNPKQorI2RlZmluZSBGSVhBRERSX1VTRVJfRU5EIF9fZml4X3RvX3ZpcnQoRklYX1ZEU08gLSAxKQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGFzbS9hY3BpLmg+CisjaW5jbHVkZSA8YXNtL2FwaWNkZWYuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorCitlbnVtIGZpeGVkX2FkZHJlc3NlcyB7CisgRklYX0hPTEUsCisgRklYX1ZEU08sCisgRklYX0RCR1BfQkFTRSwKKyBGSVhfRUFSTFlDT05fTUVNX0JBU0UsCisgX19lbmRfb2ZfcGVybWFuZW50X2ZpeGVkX2FkZHJlc3NlcywKKworI2RlZmluZSBOUl9GSVhfQlRNQVBTIDE2CisgRklYX0JUTUFQX0VORCA9IF9fZW5kX29mX3Blcm1hbmVudF9maXhlZF9hZGRyZXNzZXMsCisgRklYX0JUTUFQX0JFR0lOID0gRklYX0JUTUFQX0VORCArIE5SX0ZJWF9CVE1BUFMgLSAxLAorIEZJWF9XUF9URVNULAorIF9fZW5kX29mX2ZpeGVkX2FkZHJlc3NlcworfTsKKworI2RlZmluZSBzZXRfZml4bWFwKGlkeCwgcGh5cykgICBfX3NldF9maXhtYXAoaWR4LCBwaHlzLCBQQUdFX0tFUk5FTCkKKworI2RlZmluZSBzZXRfZml4bWFwX25vY2FjaGUoaWR4LCBwaHlzKSAgIF9fc2V0X2ZpeG1hcChpZHgsIHBoeXMsIFBBR0VfS0VSTkVMX05PQ0FDSEUpCisKKyNkZWZpbmUgY2xlYXJfZml4bWFwKGlkeCkgICBfX3NldF9maXhtYXAoaWR4LCAwLCBfX3BncHJvdCgwKSkKKworI2RlZmluZSBGSVhBRERSX1RPUCAoKHVuc2lnbmVkIGxvbmcpX19GSVhBRERSX1RPUCkKKworI2RlZmluZSBfX0ZJWEFERFJfU0laRSAoX19lbmRfb2ZfcGVybWFuZW50X2ZpeGVkX2FkZHJlc3NlcyA8PCBQQUdFX1NISUZUKQorI2RlZmluZSBfX0ZJWEFERFJfQk9PVF9TSVpFIChfX2VuZF9vZl9maXhlZF9hZGRyZXNzZXMgPDwgUEFHRV9TSElGVCkKKyNkZWZpbmUgRklYQUREUl9TVEFSVCAoRklYQUREUl9UT1AgLSBfX0ZJWEFERFJfU0laRSkKKyNkZWZpbmUgRklYQUREUl9CT09UX1NUQVJUIChGSVhBRERSX1RPUCAtIF9fRklYQUREUl9CT09UX1NJWkUpCisKKyNkZWZpbmUgX19maXhfdG9fdmlydCh4KSAoRklYQUREUl9UT1AgLSAoKHgpIDw8IFBBR0VfU0hJRlQpKQorI2RlZmluZSBfX3ZpcnRfdG9fZml4KHgpICgoRklYQUREUl9UT1AgLSAoKHgpJlBBR0VfTUFTSykpID4+IFBBR0VfU0hJRlQpCisKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vZ2VuYXBpYy5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2dlbmFwaWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGU2ODdlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2dlbmFwaWMuaApAQCAtMCwwICsxLDEyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAiZ2VuYXBpY182NC5oIgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2dlbmFwaWNfMzIuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9nZW5hcGljXzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc4MDFlYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9nZW5hcGljXzMyLmgKQEAgLTAsMCArMSw3MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQVNNX0dFTkFQSUNfSAorI2RlZmluZSBfQVNNX0dFTkFQSUNfSCAxCisKKyNpbmNsdWRlIDxhc20vbXBzcGVjLmg+CisKK3N0cnVjdCBtcGNfY29uZmlnX3RyYW5zbGF0aW9uOworc3RydWN0IG1wY19jb25maWdfYnVzOworc3RydWN0IG1wX2NvbmZpZ190YWJsZTsKK3N0cnVjdCBtcGNfY29uZmlnX3Byb2Nlc3NvcjsKKworc3RydWN0IGdlbmFwaWMgeworIGNoYXIgKm5hbWU7CisgaW50ICgqcHJvYmUpKHZvaWQpOworCisgaW50ICgqYXBpY19pZF9yZWdpc3RlcmVkKSh2b2lkKTsKKyBjcHVtYXNrX3QgKCp0YXJnZXRfY3B1cykodm9pZCk7CisgaW50IGludF9kZWxpdmVyeV9tb2RlOworIGludCBpbnRfZGVzdF9tb2RlOworIGludCBFU1JfRElTQUJMRTsKKyBpbnQgYXBpY19kZXN0aW5hdGlvbl9sb2dpY2FsOworIHVuc2lnbmVkIGxvbmcgKCpjaGVja19hcGljaWRfdXNlZCkocGh5c2lkX21hc2tfdCBiaXRtYXAsIGludCBhcGljaWQpOworIHVuc2lnbmVkIGxvbmcgKCpjaGVja19hcGljaWRfcHJlc2VudCkoaW50IGFwaWNpZCk7CisgaW50IG5vX2JhbGFuY2VfaXJxOworIGludCBub19pb2FwaWNfY2hlY2s7Cisgdm9pZCAoKmluaXRfYXBpY19sZHIpKHZvaWQpOworIHBoeXNpZF9tYXNrX3QgKCppb2FwaWNfcGh5c19pZF9tYXApKHBoeXNpZF9tYXNrX3QgbWFwKTsKKworIHZvaWQgKCpzZXR1cF9hcGljX3JvdXRpbmcpKHZvaWQpOworIGludCAoKm11bHRpX3RpbWVyX2NoZWNrKShpbnQgYXBpYywgaW50IGlycSk7CisgaW50ICgqYXBpY2lkX3RvX25vZGUpKGludCBsb2dpY2FsX2FwaWNpZCk7CisgaW50ICgqY3B1X3RvX2xvZ2ljYWxfYXBpY2lkKShpbnQgY3B1KTsKKyBpbnQgKCpjcHVfcHJlc2VudF90b19hcGljaWQpKGludCBtcHNfY3B1KTsKKyBwaHlzaWRfbWFza190ICgqYXBpY2lkX3RvX2NwdV9wcmVzZW50KShpbnQgcGh5c19hcGljaWQpOworIGludCAoKm1wY19hcGljX2lkKShzdHJ1Y3QgbXBjX2NvbmZpZ19wcm9jZXNzb3IgKm0sCisgc3RydWN0IG1wY19jb25maWdfdHJhbnNsYXRpb24gKnQpOworIHZvaWQgKCpzZXR1cF9wb3J0aW9fcmVtYXApKHZvaWQpOworIGludCAoKmNoZWNrX3BoeXNfYXBpY2lkX3ByZXNlbnQpKGludCBib290X2NwdV9waHlzaWNhbF9hcGljaWQpOworIHZvaWQgKCplbmFibGVfYXBpY19tb2RlKSh2b2lkKTsKKyB1MzIgKCpwaHlzX3BrZ19pZCkodTMyIGNwdWlkX2FwaWMsIGludCBpbmRleF9tc2IpOworCisgdm9pZCAoKm1wY19vZW1fYnVzX2luZm8pKHN0cnVjdCBtcGNfY29uZmlnX2J1cyAqLCBjaGFyICosCisgc3RydWN0IG1wY19jb25maWdfdHJhbnNsYXRpb24gKik7Cisgdm9pZCAoKm1wY19vZW1fcGNpX2J1cykoc3RydWN0IG1wY19jb25maWdfYnVzICosCisgc3RydWN0IG1wY19jb25maWdfdHJhbnNsYXRpb24gKik7CisKKyBpbnQgKCptcHNfb2VtX2NoZWNrKShzdHJ1Y3QgbXBfY29uZmlnX3RhYmxlICptcGMsIGNoYXIgKm9lbSwKKyBjaGFyICpwcm9kdWN0aWQpOworIGludCAoKmFjcGlfbWFkdF9vZW1fY2hlY2spKGNoYXIgKm9lbV9pZCwgY2hhciAqb2VtX3RhYmxlX2lkKTsKKworIHVuc2lnbmVkICgqZ2V0X2FwaWNfaWQpKHVuc2lnbmVkIGxvbmcgeCk7CisgdW5zaWduZWQgbG9uZyBhcGljX2lkX21hc2s7CisgdW5zaWduZWQgaW50ICgqY3B1X21hc2tfdG9fYXBpY2lkKShjcHVtYXNrX3QgY3B1bWFzayk7CisKK307CisKKyNkZWZpbmUgQVBJQ0ZVTkMoeCkgLnggPSB4LAorCisjZGVmaW5lIElQSUZVTkMoeCkKKworI2RlZmluZSBBUElDX0lOSVQoYW5hbWUsIGFwcm9iZSkgeyAgIC5uYW1lID0gYW5hbWUsICAgLnByb2JlID0gYXByb2JlLCAgIC5pbnRfZGVsaXZlcnlfbW9kZSA9IElOVF9ERUxJVkVSWV9NT0RFLCAgIC5pbnRfZGVzdF9tb2RlID0gSU5UX0RFU1RfTU9ERSwgICAubm9fYmFsYW5jZV9pcnEgPSBOT19CQUxBTkNFX0lSUSwgICAuRVNSX0RJU0FCTEUgPSBlc3JfZGlzYWJsZSwgICAuYXBpY19kZXN0aW5hdGlvbl9sb2dpY2FsID0gQVBJQ19ERVNUX0xPR0lDQUwsICAgQVBJQ0ZVTkMoYXBpY19pZF9yZWdpc3RlcmVkKSAgIEFQSUNGVU5DKHRhcmdldF9jcHVzKSAgIEFQSUNGVU5DKGNoZWNrX2FwaWNpZF91c2VkKSAgIEFQSUNGVU5DKGNoZWNrX2FwaWNpZF9wcmVzZW50KSAgIEFQSUNGVU5DKGluaXRfYXBpY19sZHIpICAgQVBJQ0ZVTkMoaW9hcGljX3BoeXNfaWRfbWFwKSAgIEFQSUNGVU5DKHNldHVwX2FwaWNfcm91dGluZykgICBBUElDRlVOQyhtdWx0aV90aW1lcl9jaGVjaykgICBBUElDRlVOQyhhcGljaWRfdG9fbm9kZSkgICBBUElDRlVOQyhjcHVfdG9fbG9naWNhbF9hcGljaWQpICAgQVBJQ0ZVTkMoY3B1X3ByZXNlbnRfdG9fYXBpY2lkKSAgIEFQSUNGVU5DKGFwaWNpZF90b19jcHVfcHJlc2VudCkgICBBUElDRlVOQyhtcGNfYXBpY19pZCkgICBBUElDRlVOQyhzZXR1cF9wb3J0aW9fcmVtYXApICAgQVBJQ0ZVTkMoY2hlY2tfcGh5c19hcGljaWRfcHJlc2VudCkgICBBUElDRlVOQyhtcGNfb2VtX2J1c19pbmZvKSAgIEFQSUNGVU5DKG1wY19vZW1fcGNpX2J1cykgICBBUElDRlVOQyhtcHNfb2VtX2NoZWNrKSAgIEFQSUNGVU5DKGdldF9hcGljX2lkKSAgIC5hcGljX2lkX21hc2sgPSBBUElDX0lEX01BU0ssICAgQVBJQ0ZVTkMoY3B1X21hc2tfdG9fYXBpY2lkKSAgIEFQSUNGVU5DKGFjcGlfbWFkdF9vZW1fY2hlY2spICAgSVBJRlVOQyhzZW5kX0lQSV9tYXNrKSAgIElQSUZVTkMoc2VuZF9JUElfYWxsYnV0c2VsZikgICBJUElGVU5DKHNlbmRfSVBJX2FsbCkgICBBUElDRlVOQyhlbmFibGVfYXBpY19tb2RlKSAgIEFQSUNGVU5DKHBoeXNfcGtnX2lkKSAgIH0KKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaGFyZGlycS5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2hhcmRpcnEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTIyNGYxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2hhcmRpcnEuaApAQCAtMCwwICsxLDEyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAiaGFyZGlycV82NC5oIgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2hhcmRpcnFfMzIuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9oYXJkaXJxXzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY4MmY2NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9oYXJkaXJxXzMyLmgKQEAgLTAsMCArMSwzNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FTTV9IQVJESVJRX0gKKyNkZWZpbmUgX19BU01fSEFSRElSUV9ICisKKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisKK3R5cGVkZWYgc3RydWN0IHsKKyB1bnNpZ25lZCBpbnQgX19zb2Z0aXJxX3BlbmRpbmc7CisgdW5zaWduZWQgbG9uZyBpZGxlX3RpbWVzdGFtcDsKKyB1bnNpZ25lZCBpbnQgX19ubWlfY291bnQ7CisgdW5zaWduZWQgaW50IGFwaWNfdGltZXJfaXJxczsKKyB1bnNpZ25lZCBpbnQgaXJxMF9pcnFzOworIHVuc2lnbmVkIGludCBpcnFfcmVzY2hlZF9jb3VudDsKKyB1bnNpZ25lZCBpbnQgaXJxX2NhbGxfY291bnQ7CisgdW5zaWduZWQgaW50IGlycV90bGJfY291bnQ7CisgdW5zaWduZWQgaW50IGlycV90aGVybWFsX2NvdW50OworIHVuc2lnbmVkIGludCBpcnFfc3B1cmlvdXNfY291bnQ7Cit9IF9fX19jYWNoZWxpbmVfYWxpZ25lZCBpcnFfY3B1c3RhdF90OworCisjZGVmaW5lIF9fQVJDSF9JUlFfU1RBVAorI2RlZmluZSBfX0lSUV9TVEFUKGNwdSwgbWVtYmVyKSAocGVyX2NwdShpcnFfc3RhdCwgY3B1KS5tZW1iZXIpCisKKyNpbmNsdWRlIDxsaW51eC9pcnFfY3B1c3RhdC5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9oaWdobWVtLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaGlnaG1lbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3Mzg4NTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaGlnaG1lbS5oCkBAIC0wLDAgKzEsMTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FTTV9ISUdITUVNX0gKKyNkZWZpbmUgX0FTTV9ISUdITUVNX0gKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaHdfaXJxLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaHdfaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ5MzdjNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9od19pcnEuaApAQCAtMCwwICsxLDEyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAiaHdfaXJxXzY0LmgiCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaHdfaXJxXzMyLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaHdfaXJxXzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY1ODRmYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9od19pcnFfMzIuaApAQCAtMCwwICsxLDI0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01fSFdfSVJRX0gKKyNkZWZpbmUgX0FTTV9IV19JUlFfSAorCisjaW5jbHVkZSA8bGludXgvcHJvZmlsZS5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CisKKyNkZWZpbmUgTk1JX1ZFQ1RPUiAweDAyCisKKyNkZWZpbmUgSU9fQVBJQ19JUlEoeCkgKCgoeCkgPj0gMTYpIHx8ICgoMTw8KHgpKSAmIGlvX2FwaWNfaXJxcykpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2kzODcuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9pMzg3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY5MjU1NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9pMzg3LmgKQEAgLTAsMCArMSwxMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgImkzODdfNjQuaCIKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9pMzg3XzMyLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaTM4N18zMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1NjNmYjkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaTM4N18zMi5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19BU01fSTM4Nl9JMzg3X0gKKyNkZWZpbmUgX19BU01fSTM4Nl9JMzg3X0gKKworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9zaWdjb250ZXh0Lmg+CisjaW5jbHVkZSA8YXNtL3VzZXIuaD4KKworI2RlZmluZSByZXN0b3JlX2ZwdSh0c2spICAgYWx0ZXJuYXRpdmVfaW5wdXQoICAgIm5vcCA7IGZyc3RvciAlMSIsICAgImZ4cnN0b3IgJTEiLCAgIFg4Nl9GRUFUVVJFX0ZYU1IsICAgIm0iICgodHNrKS0+dGhyZWFkLmkzODcuZnhzYXZlKSkKKworI2RlZmluZSBrZXJuZWxfZnB1X2VuZCgpIGRvIHsgc3R0cygpOyBwcmVlbXB0X2VuYWJsZSgpOyB9IHdoaWxlKDApCisKKyNkZWZpbmUgc2FmZV9hZGRyZXNzIChrc3RhdF9jcHUoMCkuY3B1c3RhdC51c2VyKQorCisjZGVmaW5lIF9fdW5sYXp5X2ZwdSggdHNrICkgZG8geyAgIGlmICh0YXNrX3RocmVhZF9pbmZvKHRzayktPnN0YXR1cyAmIFRTX1VTRURGUFUpIHsgICBfX3NhdmVfaW5pdF9mcHUodHNrKTsgICBzdHRzKCk7ICAgfSBlbHNlICAgdHNrLT5mcHVfY291bnRlciA9IDA7ICB9IHdoaWxlICgwKQorI2RlZmluZSBfX2NsZWFyX2ZwdSggdHNrICkgIGRvIHsgICBpZiAodGFza190aHJlYWRfaW5mbyh0c2spLT5zdGF0dXMgJiBUU19VU0VERlBVKSB7ICAgYXNtIHZvbGF0aWxlKCJmbmNsZXggOyBmd2FpdCIpOyAgIHRhc2tfdGhyZWFkX2luZm8odHNrKS0+c3RhdHVzICY9IH5UU19VU0VERlBVOyAgIHN0dHMoKTsgICB9ICB9IHdoaWxlICgwKQorI2RlZmluZSB1bmxhenlfZnB1KCB0c2sgKSBkbyB7ICAgcHJlZW1wdF9kaXNhYmxlKCk7ICAgX191bmxhenlfZnB1KHRzayk7ICAgcHJlZW1wdF9lbmFibGUoKTsgIH0gd2hpbGUgKDApCisjZGVmaW5lIGNsZWFyX2ZwdSggdHNrICkgZG8geyAgIHByZWVtcHRfZGlzYWJsZSgpOyAgIF9fY2xlYXJfZnB1KCB0c2sgKTsgICBwcmVlbXB0X2VuYWJsZSgpOyAgfSB3aGlsZSAoMCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaTgyNTMuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9pODI1My5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzYjFkMWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaTgyNTMuaApAQCAtMCwwICsxLDE5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQVNNX0k4MjUzX0hfXworI2RlZmluZSBfX0FTTV9JODI1M19IX18KKworI2RlZmluZSBQSVRfTU9ERSAweDQzCisjZGVmaW5lIFBJVF9DSDAgMHg0MAorI2RlZmluZSBQSVRfQ0gyIDB4NDIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaTgyNTkuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9pODI1OS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMzY2ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaTgyNTkuaApAQCAtMCwwICsxLDE5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQVNNX0k4MjU5X0hfXworI2RlZmluZSBfX0FTTV9JODI1OV9IX18KKworI2RlZmluZSBfX2J5dGUoeCx5KSAoKCh1bnNpZ25lZCBjaGFyICopICYoeSkpW3hdKQorI2RlZmluZSBjYWNoZWRfbWFzdGVyX21hc2sgKF9fYnl0ZSgwLCBjYWNoZWRfaXJxX21hc2spKQorI2RlZmluZSBjYWNoZWRfc2xhdmVfbWFzayAoX19ieXRlKDEsIGNhY2hlZF9pcnFfbWFzaykpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2lhMzJfdW5pc3RkLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaWEzMl91bmlzdGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDhkMjI4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2lhMzJfdW5pc3RkLmgKQEAgLTAsMCArMSwyMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQVNNX1g4Nl82NF9JQTMyX1VOSVNURF9IXworI2RlZmluZSBfQVNNX1g4Nl82NF9JQTMyX1VOSVNURF9IXworCisjZGVmaW5lIF9fTlJfaWEzMl9yZXN0YXJ0X3N5c2NhbGwgMAorI2RlZmluZSBfX05SX2lhMzJfZXhpdCAxCisjZGVmaW5lIF9fTlJfaWEzMl9yZWFkIDMKKyNkZWZpbmUgX19OUl9pYTMyX3dyaXRlIDQKKyNkZWZpbmUgX19OUl9pYTMyX3NpZ3JldHVybiAxMTkKKyNkZWZpbmUgX19OUl9pYTMyX3J0X3NpZ3JldHVybiAxNzMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaW8uaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNTJlNjYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaW8uaApAQCAtMCwwICsxLDEyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAiaW9fNjQuaCIKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9pb18zMi5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2lvXzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdlMDAyNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9pb18zMi5oCkBAIC0wLDAgKzEsMjcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FTTV9JT19ICisjZGVmaW5lIF9BU01fSU9fSAorCisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKworI2RlZmluZSBJT19TUEFDRV9MSU1JVCAweGZmZmYKKworI2RlZmluZSBYUVVBRF9QT1JUSU9fQkFTRSAweGZlNDAwMDAwCisjZGVmaW5lIFhRVUFEX1BPUlRJT19RVUFEIDB4NDAwMDAgIAorCisjaWZkZWYgUkVBTExZX1NMT1dfSU8KKyNlbmRpZgorI2RlZmluZSBfX0JVSUxESU8oYndsLGJ3LHR5cGUpICBzdGF0aWMgaW5saW5lIHZvaWQgb3V0IyNid2wodW5zaWduZWQgdHlwZSB2YWx1ZSwgaW50IHBvcnQpIHsgICBvdXQjI2J3bCMjX2xvY2FsKHZhbHVlLCBwb3J0KTsgIH0gIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgdHlwZSBpbiMjYndsKGludCBwb3J0KSB7ICAgcmV0dXJuIGluIyNid2wjI19sb2NhbChwb3J0KTsgIH0KKyNkZWZpbmUgQlVJTERJTyhid2wsYncsdHlwZSkgIHN0YXRpYyBpbmxpbmUgdm9pZCBvdXQjI2J3bCMjX2xvY2FsKHVuc2lnbmVkIHR5cGUgdmFsdWUsIGludCBwb3J0KSB7ICAgX19hc21fXyBfX3ZvbGF0aWxlX18oIm91dCIgI2J3bCAiICUiICNidyAiMCwgJXcxIiA6IDogImEiKHZhbHVlKSwgIk5kIihwb3J0KSk7ICB9ICBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHR5cGUgaW4jI2J3bCMjX2xvY2FsKGludCBwb3J0KSB7ICAgdW5zaWduZWQgdHlwZSB2YWx1ZTsgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiaW4iICNid2wgIiAldzEsICUiICNidyAiMCIgOiAiPWEiKHZhbHVlKSA6ICJOZCIocG9ydCkpOyAgIHJldHVybiB2YWx1ZTsgIH0gIHN0YXRpYyBpbmxpbmUgdm9pZCBvdXQjI2J3bCMjX2xvY2FsX3AodW5zaWduZWQgdHlwZSB2YWx1ZSwgaW50IHBvcnQpIHsgICBvdXQjI2J3bCMjX2xvY2FsKHZhbHVlLCBwb3J0KTsgICBzbG93X2Rvd25faW8oKTsgIH0gIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgdHlwZSBpbiMjYndsIyNfbG9jYWxfcChpbnQgcG9ydCkgeyAgIHVuc2lnbmVkIHR5cGUgdmFsdWUgPSBpbiMjYndsIyNfbG9jYWwocG9ydCk7ICAgc2xvd19kb3duX2lvKCk7ICAgcmV0dXJuIHZhbHVlOyAgfSAgX19CVUlMRElPKGJ3bCxidyx0eXBlKSAgc3RhdGljIGlubGluZSB2b2lkIG91dCMjYndsIyNfcCh1bnNpZ25lZCB0eXBlIHZhbHVlLCBpbnQgcG9ydCkgeyAgIG91dCMjYndsKHZhbHVlLCBwb3J0KTsgICBzbG93X2Rvd25faW8oKTsgIH0gIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgdHlwZSBpbiMjYndsIyNfcChpbnQgcG9ydCkgeyAgIHVuc2lnbmVkIHR5cGUgdmFsdWUgPSBpbiMjYndsKHBvcnQpOyAgIHNsb3dfZG93bl9pbygpOyAgIHJldHVybiB2YWx1ZTsgIH0gIHN0YXRpYyBpbmxpbmUgdm9pZCBvdXRzIyNid2woaW50IHBvcnQsIGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpIHsgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygicmVwOyBvdXRzIiAjYndsIDogIitTIihhZGRyKSwgIitjIihjb3VudCkgOiAiZCIocG9ydCkpOyAgfSAgc3RhdGljIGlubGluZSB2b2lkIGlucyMjYndsKGludCBwb3J0LCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KSB7ICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInJlcDsgaW5zIiAjYndsIDogIitEIihhZGRyKSwgIitjIihjb3VudCkgOiAiZCIocG9ydCkpOyAgfQorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaW9fYXBpYy5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2lvX2FwaWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDYwOGQzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2lvX2FwaWMuaApAQCAtMCwwICsxLDEyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAiaW9fYXBpY182NC5oIgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2lvX2FwaWNfMzIuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9pb19hcGljXzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M4NThhMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9pb19hcGljXzMyLmgKQEAgLTAsMCArMSw5NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FTTV9JT19BUElDX0gKKyNkZWZpbmUgX19BU01fSU9fQVBJQ19ICisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbXBzcGVjLmg+CisjaW5jbHVkZSA8YXNtL2FwaWNkZWYuaD4KKwordW5pb24gSU9fQVBJQ19yZWdfMDAgeworIHUzMiByYXc7Cisgc3RydWN0IHsKKyB1MzIgX19yZXNlcnZlZF8yIDogMTQsCisgTFRTIDogMSwKKyBkZWxpdmVyeV90eXBlIDogMSwKKyBfX3Jlc2VydmVkXzEgOiA4LAorIElEIDogODsKKyB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBiaXRzOworfTsKKwordW5pb24gSU9fQVBJQ19yZWdfMDEgeworIHUzMiByYXc7Cisgc3RydWN0IHsKKyB1MzIgdmVyc2lvbiA6IDgsCisgX19yZXNlcnZlZF8yIDogNywKKyBQUlEgOiAxLAorIGVudHJpZXMgOiA4LAorIF9fcmVzZXJ2ZWRfMSA6IDg7CisgfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgYml0czsKK307CisKK3VuaW9uIElPX0FQSUNfcmVnXzAyIHsKKyB1MzIgcmF3OworIHN0cnVjdCB7CisgdTMyIF9fcmVzZXJ2ZWRfMiA6IDI0LAorIGFyYml0cmF0aW9uIDogNCwKKyBfX3Jlc2VydmVkXzEgOiA0OworIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGJpdHM7Cit9OworCit1bmlvbiBJT19BUElDX3JlZ18wMyB7CisgdTMyIHJhdzsKKyBzdHJ1Y3QgeworIHUzMiBib290X0RUIDogMSwKKyBfX3Jlc2VydmVkXzEgOiAzMTsKKyB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBiaXRzOworfTsKKworZW51bSBpb2FwaWNfaXJxX2Rlc3RpbmF0aW9uX3R5cGVzIHsKKyBkZXN0X0ZpeGVkID0gMCwKKyBkZXN0X0xvd2VzdFByaW8gPSAxLAorIGRlc3RfU01JID0gMiwKKyBkZXN0X19yZXNlcnZlZF8xID0gMywKKyBkZXN0X05NSSA9IDQsCisgZGVzdF9JTklUID0gNSwKKyBkZXN0X19yZXNlcnZlZF8yID0gNiwKKyBkZXN0X0V4dElOVCA9IDcKK307CisKK3N0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IHsKKyBfX3UzMiB2ZWN0b3IgOiA4LAorIGRlbGl2ZXJ5X21vZGUgOiAzLAorIGRlc3RfbW9kZSA6IDEsCisgZGVsaXZlcnlfc3RhdHVzIDogMSwKKyBwb2xhcml0eSA6IDEsCisgaXJyIDogMSwKKyB0cmlnZ2VyIDogMSwKKyBtYXNrIDogMSwKKyBfX3Jlc2VydmVkXzIgOiAxNTsKKworIHVuaW9uIHsgc3RydWN0IHsgX191MzIKKyBfX3Jlc2VydmVkXzEgOiAyNCwKKyBwaHlzaWNhbF9kZXN0IDogNCwKKyBfX3Jlc2VydmVkXzIgOiA0OworIH0gcGh5c2ljYWw7CisKKyBzdHJ1Y3QgeyBfX3UzMgorIF9fcmVzZXJ2ZWRfMSA6IDI0LAorIGxvZ2ljYWxfZGVzdCA6IDg7CisgfSBsb2dpY2FsOworIH0gZGVzdDsKKworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgaW9fYXBpY19hc3NpZ25fcGNpX2lycXMgMAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9pb2N0bC5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2lvY3RsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU0NDZiNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9pb2N0bC5oCkBAIC0wLDAgKzEsMTIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pb2N0bC5oPgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2lvY3Rscy5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2lvY3Rscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhZWRjMDQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaW9jdGxzLmgKQEAgLTAsMCArMSw5NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQVNNX1g4Nl9JT0NUTFNfSAorI2RlZmluZSBfQVNNX1g4Nl9JT0NUTFNfSAorCisjaW5jbHVkZSA8YXNtL2lvY3RsLmg+CisKKyNkZWZpbmUgVENHRVRTIDB4NTQwMQorI2RlZmluZSBUQ1NFVFMgMHg1NDAyICAKKyNkZWZpbmUgVENTRVRTVyAweDU0MDMKKyNkZWZpbmUgVENTRVRTRiAweDU0MDQKKyNkZWZpbmUgVENHRVRBIDB4NTQwNQorI2RlZmluZSBUQ1NFVEEgMHg1NDA2CisjZGVmaW5lIFRDU0VUQVcgMHg1NDA3CisjZGVmaW5lIFRDU0VUQUYgMHg1NDA4CisjZGVmaW5lIFRDU0JSSyAweDU0MDkKKyNkZWZpbmUgVENYT05DIDB4NTQwQQorI2RlZmluZSBUQ0ZMU0ggMHg1NDBCCisjZGVmaW5lIFRJT0NFWENMIDB4NTQwQworI2RlZmluZSBUSU9DTlhDTCAweDU0MEQKKyNkZWZpbmUgVElPQ1NDVFRZIDB4NTQwRQorI2RlZmluZSBUSU9DR1BHUlAgMHg1NDBGCisjZGVmaW5lIFRJT0NTUEdSUCAweDU0MTAKKyNkZWZpbmUgVElPQ09VVFEgMHg1NDExCisjZGVmaW5lIFRJT0NTVEkgMHg1NDEyCisjZGVmaW5lIFRJT0NHV0lOU1ogMHg1NDEzCisjZGVmaW5lIFRJT0NTV0lOU1ogMHg1NDE0CisjZGVmaW5lIFRJT0NNR0VUIDB4NTQxNQorI2RlZmluZSBUSU9DTUJJUyAweDU0MTYKKyNkZWZpbmUgVElPQ01CSUMgMHg1NDE3CisjZGVmaW5lIFRJT0NNU0VUIDB4NTQxOAorI2RlZmluZSBUSU9DR1NPRlRDQVIgMHg1NDE5CisjZGVmaW5lIFRJT0NTU09GVENBUiAweDU0MUEKKyNkZWZpbmUgRklPTlJFQUQgMHg1NDFCCisjZGVmaW5lIFRJT0NJTlEgRklPTlJFQUQKKyNkZWZpbmUgVElPQ0xJTlVYIDB4NTQxQworI2RlZmluZSBUSU9DQ09OUyAweDU0MUQKKyNkZWZpbmUgVElPQ0dTRVJJQUwgMHg1NDFFCisjZGVmaW5lIFRJT0NTU0VSSUFMIDB4NTQxRgorI2RlZmluZSBUSU9DUEtUIDB4NTQyMAorI2RlZmluZSBGSU9OQklPIDB4NTQyMQorI2RlZmluZSBUSU9DTk9UVFkgMHg1NDIyCisjZGVmaW5lIFRJT0NTRVREIDB4NTQyMworI2RlZmluZSBUSU9DR0VURCAweDU0MjQKKyNkZWZpbmUgVENTQlJLUCAweDU0MjUgIAorCisjZGVmaW5lIFRJT0NTQlJLIDB4NTQyNyAgCisjZGVmaW5lIFRJT0NDQlJLIDB4NTQyOCAgCisjZGVmaW5lIFRJT0NHU0lEIDB4NTQyOSAgCisjZGVmaW5lIFRDR0VUUzIgX0lPUignVCcsMHgyQSwgc3RydWN0IHRlcm1pb3MyKQorI2RlZmluZSBUQ1NFVFMyIF9JT1coJ1QnLDB4MkIsIHN0cnVjdCB0ZXJtaW9zMikKKyNkZWZpbmUgVENTRVRTVzIgX0lPVygnVCcsMHgyQywgc3RydWN0IHRlcm1pb3MyKQorI2RlZmluZSBUQ1NFVFNGMiBfSU9XKCdUJywweDJELCBzdHJ1Y3QgdGVybWlvczIpCisjZGVmaW5lIFRJT0NHUFROIF9JT1IoJ1QnLDB4MzAsIHVuc2lnbmVkIGludCkgIAorI2RlZmluZSBUSU9DU1BUTENLIF9JT1coJ1QnLDB4MzEsIGludCkgIAorCisjZGVmaW5lIEZJT05DTEVYIDB4NTQ1MAorI2RlZmluZSBGSU9DTEVYIDB4NTQ1MQorI2RlZmluZSBGSU9BU1lOQyAweDU0NTIKKyNkZWZpbmUgVElPQ1NFUkNPTkZJRyAweDU0NTMKKyNkZWZpbmUgVElPQ1NFUkdXSUxEIDB4NTQ1NAorI2RlZmluZSBUSU9DU0VSU1dJTEQgMHg1NDU1CisjZGVmaW5lIFRJT0NHTENLVFJNSU9TIDB4NTQ1NgorI2RlZmluZSBUSU9DU0xDS1RSTUlPUyAweDU0NTcKKyNkZWZpbmUgVElPQ1NFUkdTVFJVQ1QgMHg1NDU4ICAKKyNkZWZpbmUgVElPQ1NFUkdFVExTUiAweDU0NTkgIAorI2RlZmluZSBUSU9DU0VSR0VUTVVMVEkgMHg1NDVBICAKKyNkZWZpbmUgVElPQ1NFUlNFVE1VTFRJIDB4NTQ1QiAgCisKKyNkZWZpbmUgVElPQ01JV0FJVCAweDU0NUMgIAorI2RlZmluZSBUSU9DR0lDT1VOVCAweDU0NUQgIAorI2RlZmluZSBUSU9DR0hBWUVTRVNQIDB4NTQ1RSAgCisjZGVmaW5lIFRJT0NTSEFZRVNFU1AgMHg1NDVGICAKKyNkZWZpbmUgRklPUVNJWkUgMHg1NDYwCisKKyNkZWZpbmUgVElPQ1BLVF9EQVRBIDAKKyNkZWZpbmUgVElPQ1BLVF9GTFVTSFJFQUQgMQorI2RlZmluZSBUSU9DUEtUX0ZMVVNIV1JJVEUgMgorI2RlZmluZSBUSU9DUEtUX1NUT1AgNAorI2RlZmluZSBUSU9DUEtUX1NUQVJUIDgKKyNkZWZpbmUgVElPQ1BLVF9OT1NUT1AgMTYKKyNkZWZpbmUgVElPQ1BLVF9ET1NUT1AgMzIKKworI2RlZmluZSBUSU9DU0VSX1RFTVQgMHgwMSAgCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2lwY2J1Zi5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2lwY2J1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyMzQyYzEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaXBjYnVmLmgKQEAgLTAsMCArMSwzMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQVNNX1g4Nl9JUENCVUZfSAorI2RlZmluZSBfQVNNX1g4Nl9JUENCVUZfSAorCitzdHJ1Y3QgaXBjNjRfcGVybQoreworIF9fa2VybmVsX2tleV90IGtleTsKKyBfX2tlcm5lbF91aWQzMl90IHVpZDsKKyBfX2tlcm5lbF9naWQzMl90IGdpZDsKKyBfX2tlcm5lbF91aWQzMl90IGN1aWQ7CisgX19rZXJuZWxfZ2lkMzJfdCBjZ2lkOworIF9fa2VybmVsX21vZGVfdCBtb2RlOworIHVuc2lnbmVkIHNob3J0IF9fcGFkMTsKKyB1bnNpZ25lZCBzaG9ydCBzZXE7CisgdW5zaWduZWQgc2hvcnQgX19wYWQyOworIHVuc2lnbmVkIGxvbmcgX191bnVzZWQxOworIHVuc2lnbmVkIGxvbmcgX191bnVzZWQyOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaXJxLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdhMzMxZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9pcnEuaApAQCAtMCwwICsxLDEyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAiaXJxXzY0LmgiCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaXJxXzMyLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaXJxXzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE0MTA3MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9pcnFfMzIuaApAQCAtMCwwICsxLDIzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01fSVJRX0gKKyNkZWZpbmUgX0FTTV9JUlFfSAorCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKworI2luY2x1ZGUgImlycV92ZWN0b3JzLmgiCisjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CisKKyNkZWZpbmUgaXJxX2N0eF9pbml0KGNwdSkgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBpcnFfY3R4X2V4aXQoY3B1KSBkbyB7IH0gd2hpbGUgKDApCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2lycWZsYWdzLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaXJxZmxhZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Zjg0NjYyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2lycWZsYWdzLmgKQEAgLTAsMCArMSwxMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgImlycWZsYWdzXzY0LmgiCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaXJxZmxhZ3NfMzIuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9pcnFmbGFnc18zMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwMDJlNDQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaXJxZmxhZ3NfMzIuaApAQCAtMCwwICsxLDMzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01fSVJRRkxBR1NfSAorI2RlZmluZSBfQVNNX0lSUUZMQUdTX0gKKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLWZsYWdzLmg+CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjZW5kaWYKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjZWxzZQorI2RlZmluZSBESVNBQkxFX0lOVEVSUlVQVFMoY2xvYmJlcnMpIGNsaQorI2RlZmluZSBFTkFCTEVfSU5URVJSVVBUUyhjbG9iYmVycykgc3RpCisjZGVmaW5lIEVOQUJMRV9JTlRFUlJVUFRTX1NZU0VYSVQgc3RpOyBzeXNleGl0CisjZGVmaW5lIElOVEVSUlVQVF9SRVRVUk4gaXJldAorI2RlZmluZSBHRVRfQ1IwX0lOVE9fRUFYIG1vdmwgJWNyMCwgJWVheAorI2VuZGlmCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2RlZmluZSByYXdfbG9jYWxfc2F2ZV9mbGFncyhmbGFncykgICBkbyB7IChmbGFncykgPSBfX3Jhd19sb2NhbF9zYXZlX2ZsYWdzKCk7IH0gd2hpbGUgKDApCisjZGVmaW5lIHJhd19sb2NhbF9pcnFfc2F2ZShmbGFncykgICBkbyB7IChmbGFncykgPSBfX3Jhd19sb2NhbF9pcnFfc2F2ZSgpOyB9IHdoaWxlICgwKQorI2VuZGlmCisjZGVmaW5lIFRSQUNFX0lSUVNfT04KKyNkZWZpbmUgVFJBQ0VfSVJRU19PRkYKKyNkZWZpbmUgTE9DS0RFUF9TWVNfRVhJVAorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaXN0LmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFiYWIxOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9pc3QuaApAQCAtMCwwICsxLDI0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01fSVNUX0gKKyNkZWZpbmUgX0FTTV9JU1RfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IGlzdF9pbmZvIHsKKyBfX3UzMiBzaWduYXR1cmU7CisgX191MzIgY29tbWFuZDsKKyBfX3UzMiBldmVudDsKKyBfX3UzMiBwZXJmX2xldmVsOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20va21hcF90eXBlcy5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2ttYXBfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjMxM2VlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2ttYXBfdHlwZXMuaApAQCAtMCwwICsxLDM2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01fWDg2X0tNQVBfVFlQRVNfSAorI2RlZmluZSBfQVNNX1g4Nl9LTUFQX1RZUEVTX0gKKworI2RlZmluZSBEKG4pCisKK2VudW0ga21fdHlwZSB7CitEKDApIEtNX0JPVU5DRV9SRUFELAorRCgxKSBLTV9TS0JfU1VOUlBDX0RBVEEsCitEKDIpIEtNX1NLQl9EQVRBX1NPRlRJUlEsCitEKDMpIEtNX1VTRVIwLAorRCg0KSBLTV9VU0VSMSwKK0QoNSkgS01fQklPX1NSQ19JUlEsCitEKDYpIEtNX0JJT19EU1RfSVJRLAorRCg3KSBLTV9QVEUwLAorRCg4KSBLTV9QVEUxLAorRCg5KSBLTV9JUlEwLAorRCgxMCkgS01fSVJRMSwKK0QoMTEpIEtNX1NPRlRJUlEwLAorRCgxMikgS01fU09GVElSUTEsCitEKDEzKSBLTV9UWVBFX05SCit9OworCisjdW5kZWYgRAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9sZHQuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9sZHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWI5MWFiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2xkdC5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FTTV9YODZfTERUX0gKKyNkZWZpbmUgX0FTTV9YODZfTERUX0gKKworI2RlZmluZSBMRFRfRU5UUklFUyA4MTkyCisKKyNkZWZpbmUgTERUX0VOVFJZX1NJWkUgOAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCitzdHJ1Y3QgdXNlcl9kZXNjIHsKKyB1bnNpZ25lZCBpbnQgZW50cnlfbnVtYmVyOworIHVuc2lnbmVkIGludCBiYXNlX2FkZHI7CisgdW5zaWduZWQgaW50IGxpbWl0OworIHVuc2lnbmVkIGludCBzZWdfMzJiaXQ6MTsKKyB1bnNpZ25lZCBpbnQgY29udGVudHM6MjsKKyB1bnNpZ25lZCBpbnQgcmVhZF9leGVjX29ubHk6MTsKKyB1bnNpZ25lZCBpbnQgbGltaXRfaW5fcGFnZXM6MTsKKyB1bnNpZ25lZCBpbnQgc2VnX25vdF9wcmVzZW50OjE7CisgdW5zaWduZWQgaW50IHVzZWFibGU6MTsKKyNpZmRlZiBfX3g4Nl82NF9fCisgdW5zaWduZWQgaW50IGxtOjE7CisjZW5kaWYKK307CisKKyNkZWZpbmUgTU9ESUZZX0xEVF9DT05URU5UU19EQVRBIDAKKyNkZWZpbmUgTU9ESUZZX0xEVF9DT05URU5UU19TVEFDSyAxCisjZGVmaW5lIE1PRElGWV9MRFRfQ09OVEVOVFNfQ09ERSAyCisKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vbGlua2FnZS5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2xpbmthZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTQ5ZTRkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2xpbmthZ2UuaApAQCAtMCwwICsxLDEyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAibGlua2FnZV82NC5oIgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2xpbmthZ2VfMzIuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9saW5rYWdlXzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRiMTBlZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9saW5rYWdlXzMyLmgKQEAgLTAsMCArMSwyMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FTTV9MSU5LQUdFX0gKKyNkZWZpbmUgX19BU01fTElOS0FHRV9ICisKKyNkZWZpbmUgYXNtbGlua2FnZSBDUFBfQVNNTElOS0FHRSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDApKSkKKyNkZWZpbmUgRkFTVENBTEwoeCkgeCBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSkKKyNkZWZpbmUgZmFzdGNhbGwgX19hdHRyaWJ1dGVfXygocmVncGFybSgzKSkpCisKKyNkZWZpbmUgcHJldmVudF90YWlsX2NhbGwocmV0KSBfX2FzbV9fICgiIiA6ICI9ciIgKHJldCkgOiAiMCIgKHJldCkpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2xvY2FsLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vbG9jYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTA4MGI4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2xvY2FsLmgKQEAgLTAsMCArMSwxMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgImxvY2FsXzY0LmgiCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vbG9jYWxfMzIuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9sb2NhbF8zMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjYWQ3NTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vbG9jYWxfMzIuaApAQCAtMCwwICsxLDUxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BUkNIX0kzODZfTE9DQUxfSAorI2RlZmluZSBfQVJDSF9JMzg2X0xPQ0FMX0gKKworI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisKK3R5cGVkZWYgc3RydWN0Cit7CisgYXRvbWljX2xvbmdfdCBhOworfSBsb2NhbF90OworCisjZGVmaW5lIExPQ0FMX0lOSVQoaSkgeyBBVE9NSUNfTE9OR19JTklUKGkpIH0KKworI2RlZmluZSBsb2NhbF9yZWFkKGwpIGF0b21pY19sb25nX3JlYWQoJihsKS0+YSkKKyNkZWZpbmUgbG9jYWxfc2V0KGwsaSkgYXRvbWljX2xvbmdfc2V0KCYobCktPmEsIChpKSkKKworI2RlZmluZSBsb2NhbF9pbmNfcmV0dXJuKGwpIChsb2NhbF9hZGRfcmV0dXJuKDEsbCkpCisjZGVmaW5lIGxvY2FsX2RlY19yZXR1cm4obCkgKGxvY2FsX3N1Yl9yZXR1cm4oMSxsKSkKKyNkZWZpbmUgbG9jYWxfY21weGNoZyhsLCBvLCBuKSAgIChjbXB4Y2hnX2xvY2FsKCYoKGwpLT5hLmNvdW50ZXIpLCAobyksIChuKSkpCisjZGVmaW5lIGxvY2FsX3hjaGcobCwgbikgKHhjaGcoJigobCktPmEuY291bnRlciksIChuKSkpCisjZGVmaW5lIGxvY2FsX2FkZF91bmxlc3MobCwgYSwgdSkgICh7ICAgbG9uZyBjLCBvbGQ7ICAgYyA9IGxvY2FsX3JlYWQobCk7ICAgZm9yICg7OykgeyAgIGlmICh1bmxpa2VseShjID09ICh1KSkpICAgYnJlYWs7ICAgb2xkID0gbG9jYWxfY21weGNoZygobCksIGMsIGMgKyAoYSkpOyAgIGlmIChsaWtlbHkob2xkID09IGMpKSAgIGJyZWFrOyAgIGMgPSBvbGQ7ICAgfSAgIGMgIT0gKHUpOyAgfSkKKyNkZWZpbmUgbG9jYWxfaW5jX25vdF96ZXJvKGwpIGxvY2FsX2FkZF91bmxlc3MoKGwpLCAxLCAwKQorI2RlZmluZSBfX2xvY2FsX2luYyhsKSBsb2NhbF9pbmMobCkKKyNkZWZpbmUgX19sb2NhbF9kZWMobCkgbG9jYWxfZGVjKGwpCisjZGVmaW5lIF9fbG9jYWxfYWRkKGksbCkgbG9jYWxfYWRkKChpKSwobCkpCisjZGVmaW5lIF9fbG9jYWxfc3ViKGksbCkgbG9jYWxfc3ViKChpKSwobCkpCisjZGVmaW5lIGNwdV9sb2NhbF93cmFwX3YobCkgICAoeyBsb2NhbF90IHJlc19fOyAgIHByZWVtcHRfZGlzYWJsZSgpOyAgIHJlc19fID0gKGwpOyAgIHByZWVtcHRfZW5hYmxlKCk7ICAgcmVzX187IH0pCisjZGVmaW5lIGNwdV9sb2NhbF93cmFwKGwpICAgKHsgcHJlZW1wdF9kaXNhYmxlKCk7ICAgbDsgICBwcmVlbXB0X2VuYWJsZSgpOyB9KSAgCisjZGVmaW5lIGNwdV9sb2NhbF9yZWFkKGwpIGNwdV9sb2NhbF93cmFwX3YobG9jYWxfcmVhZCgmX19nZXRfY3B1X3ZhcihsKSkpCisjZGVmaW5lIGNwdV9sb2NhbF9zZXQobCwgaSkgY3B1X2xvY2FsX3dyYXAobG9jYWxfc2V0KCZfX2dldF9jcHVfdmFyKGwpLCAoaSkpKQorI2RlZmluZSBjcHVfbG9jYWxfaW5jKGwpIGNwdV9sb2NhbF93cmFwKGxvY2FsX2luYygmX19nZXRfY3B1X3ZhcihsKSkpCisjZGVmaW5lIGNwdV9sb2NhbF9kZWMobCkgY3B1X2xvY2FsX3dyYXAobG9jYWxfZGVjKCZfX2dldF9jcHVfdmFyKGwpKSkKKyNkZWZpbmUgY3B1X2xvY2FsX2FkZChpLCBsKSBjcHVfbG9jYWxfd3JhcChsb2NhbF9hZGQoKGkpLCAmX19nZXRfY3B1X3ZhcihsKSkpCisjZGVmaW5lIGNwdV9sb2NhbF9zdWIoaSwgbCkgY3B1X2xvY2FsX3dyYXAobG9jYWxfc3ViKChpKSwgJl9fZ2V0X2NwdV92YXIobCkpKQorI2RlZmluZSBfX2NwdV9sb2NhbF9pbmMobCkgY3B1X2xvY2FsX2luYyhsKQorI2RlZmluZSBfX2NwdV9sb2NhbF9kZWMobCkgY3B1X2xvY2FsX2RlYyhsKQorI2RlZmluZSBfX2NwdV9sb2NhbF9hZGQoaSwgbCkgY3B1X2xvY2FsX2FkZCgoaSksIChsKSkKKyNkZWZpbmUgX19jcHVfbG9jYWxfc3ViKGksIGwpIGNwdV9sb2NhbF9zdWIoKGkpLCAobCkpCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9tYXRoX2VtdS5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL21hdGhfZW11LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM4MGQxOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9tYXRoX2VtdS5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0kzODZfTUFUSF9FTVVfSAorI2RlZmluZSBfSTM4Nl9NQVRIX0VNVV9ICisKKyNpbmNsdWRlIDxhc20vc2lnY29udGV4dC5oPgorCitzdHJ1Y3QgaW5mbyB7CisgbG9uZyBfX19vcmlnX2VpcDsKKyBsb25nIF9fX2VieDsKKyBsb25nIF9fX2VjeDsKKyBsb25nIF9fX2VkeDsKKyBsb25nIF9fX2VzaTsKKyBsb25nIF9fX2VkaTsKKyBsb25nIF9fX2VicDsKKyBsb25nIF9fX2VheDsKKyBsb25nIF9fX2RzOworIGxvbmcgX19fZXM7CisgbG9uZyBfX19mczsKKyBsb25nIF9fX29yaWdfZWF4OworIGxvbmcgX19fZWlwOworIGxvbmcgX19fY3M7CisgbG9uZyBfX19lZmxhZ3M7CisgbG9uZyBfX19lc3A7CisgbG9uZyBfX19zczsKKyBsb25nIF9fX3ZtODZfZXM7CisgbG9uZyBfX192bTg2X2RzOworIGxvbmcgX19fdm04Nl9mczsKKyBsb25nIF9fX3ZtODZfZ3M7Cit9OworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vbWMxNDY4MThydGMuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9tYzE0NjgxOHJ0Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0OTc4NzcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vbWMxNDY4MThydGMuaApAQCAtMCwwICsxLDEyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAibWMxNDY4MThydGNfNjQuaCIKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9tYzE0NjgxOHJ0Y18zMi5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL21jMTQ2ODE4cnRjXzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk5ZDYwOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9tYzE0NjgxOHJ0Y18zMi5oCkBAIC0wLDAgKzEsNDQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FTTV9NQzE0NjgxOFJUQ19ICisjZGVmaW5lIF9BU01fTUMxNDY4MThSVENfSAorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxsaW51eC9tYzE0NjgxOHJ0Yy5oPgorCisjaWZuZGVmIFJUQ19QT1JUCisjZGVmaW5lIFJUQ19QT1JUKHgpICgweDcwICsgKHgpKQorI2RlZmluZSBSVENfQUxXQVlTX0JDRCAxICAKKyNlbmRpZgorCisjaWZkZWYgX19IQVZFX0FSQ0hfQ01QWENIRworCisjaW5jbHVkZSA8bGludXgvc21wLmg+CisKKyNkZWZpbmUgbG9ja19jbW9zX3ByZWZpeChyZWcpICAgZG8geyAgIHVuc2lnbmVkIGxvbmcgY21vc19mbGFnczsgICBsb2NhbF9pcnFfc2F2ZShjbW9zX2ZsYWdzKTsgICBsb2NrX2Ntb3MocmVnKQorI2RlZmluZSBsb2NrX2Ntb3Nfc3VmZml4KHJlZykgICB1bmxvY2tfY21vcygpOyAgIGxvY2FsX2lycV9yZXN0b3JlKGNtb3NfZmxhZ3MpOyAgIH0gd2hpbGUgKDApCisjZWxzZQorI2RlZmluZSBsb2NrX2Ntb3NfcHJlZml4KHJlZykgZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIGxvY2tfY21vc19zdWZmaXgocmVnKSBkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgbG9ja19jbW9zKHJlZykKKyNkZWZpbmUgdW5sb2NrX2Ntb3MoKQorI2RlZmluZSBkb19pX2hhdmVfbG9ja19jbW9zKCkgMAorI2RlZmluZSBjdXJyZW50X2xvY2tfY21vc19yZWcoKSAwCisjZW5kaWYKKyNkZWZpbmUgQ01PU19SRUFEKGFkZHIpIHJ0Y19jbW9zX3JlYWQoYWRkcikKKyNkZWZpbmUgQ01PU19XUklURSh2YWwsIGFkZHIpIHJ0Y19jbW9zX3dyaXRlKHZhbCwgYWRkcikKKworI2RlZmluZSBSVENfSVJRIDgKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vbW1hbi5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL21tYW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWRhMzE5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL21tYW4uaApAQCAtMCwwICsxLDMwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01fWDg2X01NQU5fSAorI2RlZmluZSBfQVNNX1g4Nl9NTUFOX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL21tYW4uaD4KKworI2RlZmluZSBNQVBfMzJCSVQgMHg0MCAgCisKKyNkZWZpbmUgTUFQX0dST1dTRE9XTiAweDAxMDAgIAorI2RlZmluZSBNQVBfREVOWVdSSVRFIDB4MDgwMCAgCisjZGVmaW5lIE1BUF9FWEVDVVRBQkxFIDB4MTAwMCAgCisjZGVmaW5lIE1BUF9MT0NLRUQgMHgyMDAwICAKKyNkZWZpbmUgTUFQX05PUkVTRVJWRSAweDQwMDAgIAorI2RlZmluZSBNQVBfUE9QVUxBVEUgMHg4MDAwICAKKyNkZWZpbmUgTUFQX05PTkJMT0NLIDB4MTAwMDAgIAorCisjZGVmaW5lIE1DTF9DVVJSRU5UIDEgIAorI2RlZmluZSBNQ0xfRlVUVVJFIDIgIAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9tbXNlZ21lbnQuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9tbXNlZ21lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjA0NWM3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL21tc2VnbWVudC5oCkBAIC0wLDAgKzEsMTkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FTTV9NTVNFR01FTlRfSAorI2RlZmluZSBfQVNNX01NU0VHTUVOVF9IIDEKKwordHlwZWRlZiBzdHJ1Y3QgeworIHVuc2lnbmVkIGxvbmcgc2VnOworfSBtbV9zZWdtZW50X3Q7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL21tdS5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL21tdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwZGIxMGEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vbW11LmgKQEAgLTAsMCArMSwyNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQVNNX1g4Nl9NTVVfSAorI2RlZmluZSBfQVNNX1g4Nl9NTVVfSAorCisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorCit0eXBlZGVmIHN0cnVjdCB7Cisgdm9pZCAqbGR0OworIGludCBzaXplOworIHN0cnVjdCBtdXRleCBsb2NrOworIHZvaWQgKnZkc287Cit9IG1tX2NvbnRleHRfdDsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vbW9kdWxlLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vbW9kdWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmYyOTJkNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9tb2R1bGUuaApAQCAtMCwwICsxLDEyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAibW9kdWxlXzY0LmgiCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vbW9kdWxlXzMyLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vbW9kdWxlXzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmUyNjcyOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9tb2R1bGVfMzIuaApAQCAtMCwwICsxLDI5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01fSTM4Nl9NT0RVTEVfSAorI2RlZmluZSBfQVNNX0kzODZfTU9EVUxFX0gKKworc3RydWN0IG1vZF9hcmNoX3NwZWNpZmljCit7Cit9OworCisjZGVmaW5lIEVsZl9TaGRyIEVsZjMyX1NoZHIKKyNkZWZpbmUgRWxmX1N5bSBFbGYzMl9TeW0KKyNkZWZpbmUgRWxmX0VoZHIgRWxmMzJfRWhkcgorCisjZXJyb3IgdW5rbm93biBwcm9jZXNzb3IgZmFtaWx5CisKKyNkZWZpbmUgTU9EVUxFX1NUQUNLU0laRSAiIgorCisjZGVmaW5lIE1PRFVMRV9BUkNIX1ZFUk1BR0lDIE1PRFVMRV9QUk9DX0ZBTUlMWSBNT0RVTEVfU1RBQ0tTSVpFCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL21wc3BlYy5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL21wc3BlYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzMzY1MDQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vbXBzcGVjLmgKQEAgLTAsMCArMSwxMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgIm1wc3BlY182NC5oIgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL21wc3BlY18zMi5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL21wc3BlY18zMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhY2JlOGEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vbXBzcGVjXzMyLmgKQEAgLTAsMCArMSw1MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FTTV9NUFNQRUNfSAorI2RlZmluZSBfX0FTTV9NUFNQRUNfSAorCisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorI2luY2x1ZGUgPGFzbS9tcHNwZWNfZGVmLmg+CisjaW5jbHVkZSA8bWFjaF9tcHNwZWMuaD4KKworI2RlZmluZSBQSFlTSURfQVJSQVlfU0laRSBCSVRTX1RPX0xPTkdTKE1BWF9BUElDUykKKworc3RydWN0IHBoeXNpZF9tYXNrCit7CisgdW5zaWduZWQgbG9uZyBtYXNrW1BIWVNJRF9BUlJBWV9TSVpFXTsKK307CisKK3R5cGVkZWYgc3RydWN0IHBoeXNpZF9tYXNrIHBoeXNpZF9tYXNrX3Q7CisKKyNkZWZpbmUgcGh5c2lkX3NldChwaHlzaWQsIG1hcCkgc2V0X2JpdChwaHlzaWQsIChtYXApLm1hc2spCisjZGVmaW5lIHBoeXNpZF9jbGVhcihwaHlzaWQsIG1hcCkgY2xlYXJfYml0KHBoeXNpZCwgKG1hcCkubWFzaykKKyNkZWZpbmUgcGh5c2lkX2lzc2V0KHBoeXNpZCwgbWFwKSB0ZXN0X2JpdChwaHlzaWQsIChtYXApLm1hc2spCisjZGVmaW5lIHBoeXNpZF90ZXN0X2FuZF9zZXQocGh5c2lkLCBtYXApIHRlc3RfYW5kX3NldF9iaXQocGh5c2lkLCAobWFwKS5tYXNrKQorCisjZGVmaW5lIHBoeXNpZHNfYW5kKGRzdCwgc3JjMSwgc3JjMikgYml0bWFwX2FuZCgoZHN0KS5tYXNrLCAoc3JjMSkubWFzaywgKHNyYzIpLm1hc2ssIE1BWF9BUElDUykKKyNkZWZpbmUgcGh5c2lkc19vcihkc3QsIHNyYzEsIHNyYzIpIGJpdG1hcF9vcigoZHN0KS5tYXNrLCAoc3JjMSkubWFzaywgKHNyYzIpLm1hc2ssIE1BWF9BUElDUykKKyNkZWZpbmUgcGh5c2lkc19jbGVhcihtYXApIGJpdG1hcF96ZXJvKChtYXApLm1hc2ssIE1BWF9BUElDUykKKyNkZWZpbmUgcGh5c2lkc19jb21wbGVtZW50KGRzdCwgc3JjKSBiaXRtYXBfY29tcGxlbWVudCgoZHN0KS5tYXNrLChzcmMpLm1hc2ssIE1BWF9BUElDUykKKyNkZWZpbmUgcGh5c2lkc19lbXB0eShtYXApIGJpdG1hcF9lbXB0eSgobWFwKS5tYXNrLCBNQVhfQVBJQ1MpCisjZGVmaW5lIHBoeXNpZHNfZXF1YWwobWFwMSwgbWFwMikgYml0bWFwX2VxdWFsKChtYXAxKS5tYXNrLCAobWFwMikubWFzaywgTUFYX0FQSUNTKQorI2RlZmluZSBwaHlzaWRzX3dlaWdodChtYXApIGJpdG1hcF93ZWlnaHQoKG1hcCkubWFzaywgTUFYX0FQSUNTKQorI2RlZmluZSBwaHlzaWRzX3NoaWZ0X3JpZ2h0KGQsIHMsIG4pIGJpdG1hcF9zaGlmdF9yaWdodCgoZCkubWFzaywgKHMpLm1hc2ssIG4sIE1BWF9BUElDUykKKyNkZWZpbmUgcGh5c2lkc19zaGlmdF9sZWZ0KGQsIHMsIG4pIGJpdG1hcF9zaGlmdF9sZWZ0KChkKS5tYXNrLCAocykubWFzaywgbiwgTUFYX0FQSUNTKQorI2RlZmluZSBwaHlzaWRzX2NvZXJjZShtYXApICgobWFwKS5tYXNrWzBdKQorCisjZGVmaW5lIHBoeXNpZHNfcHJvbW90ZShwaHlzaWRzKSAgICh7ICAgcGh5c2lkX21hc2tfdCBfX3BoeXNpZF9tYXNrID0gUEhZU0lEX01BU0tfTk9ORTsgICBfX3BoeXNpZF9tYXNrLm1hc2tbMF0gPSBwaHlzaWRzOyAgIF9fcGh5c2lkX21hc2s7ICAgfSkKKworI2RlZmluZSBwaHlzaWRfbWFza19vZl9waHlzaWQocGh5c2lkKSAgICh7ICAgcGh5c2lkX21hc2tfdCBfX3BoeXNpZF9tYXNrID0gUEhZU0lEX01BU0tfTk9ORTsgICBwaHlzaWRfc2V0KHBoeXNpZCwgX19waHlzaWRfbWFzayk7ICAgX19waHlzaWRfbWFzazsgICB9KQorCisjZGVmaW5lIFBIWVNJRF9NQVNLX0FMTCB7IHtbMCAuLi4gUEhZU0lEX0FSUkFZX1NJWkUtMV0gPSB+MFVMfSB9CisjZGVmaW5lIFBIWVNJRF9NQVNLX05PTkUgeyB7WzAgLi4uIFBIWVNJRF9BUlJBWV9TSVpFLTFdID0gMFVMfSB9CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vbXBzcGVjX2RlZi5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL21wc3BlY19kZWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjE1MzYzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL21wc3BlY19kZWYuaApAQCAtMCwwICsxLDE3MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FTTV9NUFNQRUNfREVGX0gKKyNkZWZpbmUgX19BU01fTVBTUEVDX0RFRl9ICisKKyNkZWZpbmUgU01QX01BR0lDX0lERU5UICgoJ18nPDwyNCl8KCdQJzw8MTYpfCgnTSc8PDgpfCdfJykKKworI2RlZmluZSBNQVhfTVBDX0VOVFJZIDEwMjQKKyNkZWZpbmUgTUFYX0FQSUNTIDI1NgorCitzdHJ1Y3QgaW50ZWxfbXBfZmxvYXRpbmcKK3sKKyBjaGFyIG1wZl9zaWduYXR1cmVbNF07CisgdW5zaWduZWQgbG9uZyBtcGZfcGh5c3B0cjsKKyB1bnNpZ25lZCBjaGFyIG1wZl9sZW5ndGg7CisgdW5zaWduZWQgY2hhciBtcGZfc3BlY2lmaWNhdGlvbjsKKyB1bnNpZ25lZCBjaGFyIG1wZl9jaGVja3N1bTsKKyB1bnNpZ25lZCBjaGFyIG1wZl9mZWF0dXJlMTsKKyB1bnNpZ25lZCBjaGFyIG1wZl9mZWF0dXJlMjsKKyB1bnNpZ25lZCBjaGFyIG1wZl9mZWF0dXJlMzsKKyB1bnNpZ25lZCBjaGFyIG1wZl9mZWF0dXJlNDsKKyB1bnNpZ25lZCBjaGFyIG1wZl9mZWF0dXJlNTsKK307CisKK3N0cnVjdCBtcF9jb25maWdfdGFibGUKK3sKKyBjaGFyIG1wY19zaWduYXR1cmVbNF07CisjZGVmaW5lIE1QQ19TSUdOQVRVUkUgIlBDTVAiCisgdW5zaWduZWQgc2hvcnQgbXBjX2xlbmd0aDsKKyBjaGFyIG1wY19zcGVjOworIGNoYXIgbXBjX2NoZWNrc3VtOworIGNoYXIgbXBjX29lbVs4XTsKKyBjaGFyIG1wY19wcm9kdWN0aWRbMTJdOworIHVuc2lnbmVkIGxvbmcgbXBjX29lbXB0cjsKKyB1bnNpZ25lZCBzaG9ydCBtcGNfb2Vtc2l6ZTsKKyB1bnNpZ25lZCBzaG9ydCBtcGNfb2VtY291bnQ7CisgdW5zaWduZWQgbG9uZyBtcGNfbGFwaWM7CisgdW5zaWduZWQgbG9uZyByZXNlcnZlZDsKK307CisKKyNkZWZpbmUgTVBfUFJPQ0VTU09SIDAKKyNkZWZpbmUgTVBfQlVTIDEKKyNkZWZpbmUgTVBfSU9BUElDIDIKKyNkZWZpbmUgTVBfSU5UU1JDIDMKKyNkZWZpbmUgTVBfTElOVFNSQyA0CisjZGVmaW5lIE1QX1RSQU5TTEFUSU9OIDE5MiAgCisKK3N0cnVjdCBtcGNfY29uZmlnX3Byb2Nlc3NvcgoreworIHVuc2lnbmVkIGNoYXIgbXBjX3R5cGU7CisgdW5zaWduZWQgY2hhciBtcGNfYXBpY2lkOworIHVuc2lnbmVkIGNoYXIgbXBjX2FwaWN2ZXI7CisgdW5zaWduZWQgY2hhciBtcGNfY3B1ZmxhZzsKKyNkZWZpbmUgQ1BVX0VOQUJMRUQgMSAgCisjZGVmaW5lIENQVV9CT09UUFJPQ0VTU09SIDIgIAorIHVuc2lnbmVkIGxvbmcgbXBjX2NwdWZlYXR1cmU7CisjZGVmaW5lIENQVV9TVEVQUElOR19NQVNLIDB4MEYKKyNkZWZpbmUgQ1BVX01PREVMX01BU0sgMHhGMAorI2RlZmluZSBDUFVfRkFNSUxZX01BU0sgMHhGMDAKKyB1bnNpZ25lZCBsb25nIG1wY19mZWF0dXJlZmxhZzsKKyB1bnNpZ25lZCBsb25nIG1wY19yZXNlcnZlZFsyXTsKK307CisKK3N0cnVjdCBtcGNfY29uZmlnX2J1cworeworIHVuc2lnbmVkIGNoYXIgbXBjX3R5cGU7CisgdW5zaWduZWQgY2hhciBtcGNfYnVzaWQ7CisgdW5zaWduZWQgY2hhciBtcGNfYnVzdHlwZVs2XTsKK307CisKKyNkZWZpbmUgQlVTVFlQRV9FSVNBICJFSVNBIgorI2RlZmluZSBCVVNUWVBFX0lTQSAiSVNBIgorI2RlZmluZSBCVVNUWVBFX0lOVEVSTiAiSU5URVJOIiAgCisjZGVmaW5lIEJVU1RZUEVfTUNBICJNQ0EiCisjZGVmaW5lIEJVU1RZUEVfVkwgIlZMIiAgCisjZGVmaW5lIEJVU1RZUEVfUENJICJQQ0kiCisjZGVmaW5lIEJVU1RZUEVfUENNQ0lBICJQQ01DSUEiCisjZGVmaW5lIEJVU1RZUEVfQ0JVUyAiQ0JVUyIKKyNkZWZpbmUgQlVTVFlQRV9DQlVTSUkgIkNCVVNJSSIKKyNkZWZpbmUgQlVTVFlQRV9GVVRVUkUgIkZVVFVSRSIKKyNkZWZpbmUgQlVTVFlQRV9NQkkgIk1CSSIKKyNkZWZpbmUgQlVTVFlQRV9NQklJICJNQklJIgorI2RlZmluZSBCVVNUWVBFX01QSSAiTVBJIgorI2RlZmluZSBCVVNUWVBFX01QU0EgIk1QU0EiCisjZGVmaW5lIEJVU1RZUEVfTlVCVVMgIk5VQlVTIgorI2RlZmluZSBCVVNUWVBFX1RDICJUQyIKKyNkZWZpbmUgQlVTVFlQRV9WTUUgIlZNRSIKKyNkZWZpbmUgQlVTVFlQRV9YUFJFU1MgIlhQUkVTUyIKKworc3RydWN0IG1wY19jb25maWdfaW9hcGljCit7CisgdW5zaWduZWQgY2hhciBtcGNfdHlwZTsKKyB1bnNpZ25lZCBjaGFyIG1wY19hcGljaWQ7CisgdW5zaWduZWQgY2hhciBtcGNfYXBpY3ZlcjsKKyB1bnNpZ25lZCBjaGFyIG1wY19mbGFnczsKKyNkZWZpbmUgTVBDX0FQSUNfVVNBQkxFIDB4MDEKKyB1bnNpZ25lZCBsb25nIG1wY19hcGljYWRkcjsKK307CisKK3N0cnVjdCBtcGNfY29uZmlnX2ludHNyYworeworIHVuc2lnbmVkIGNoYXIgbXBjX3R5cGU7CisgdW5zaWduZWQgY2hhciBtcGNfaXJxdHlwZTsKKyB1bnNpZ25lZCBzaG9ydCBtcGNfaXJxZmxhZzsKKyB1bnNpZ25lZCBjaGFyIG1wY19zcmNidXM7CisgdW5zaWduZWQgY2hhciBtcGNfc3JjYnVzaXJxOworIHVuc2lnbmVkIGNoYXIgbXBjX2RzdGFwaWM7CisgdW5zaWduZWQgY2hhciBtcGNfZHN0aXJxOworfTsKKworZW51bSBtcF9pcnFfc291cmNlX3R5cGVzIHsKKyBtcF9JTlQgPSAwLAorIG1wX05NSSA9IDEsCisgbXBfU01JID0gMiwKKyBtcF9FeHRJTlQgPSAzCit9OworCisjZGVmaW5lIE1QX0lSUURJUl9ERUZBVUxUIDAKKyNkZWZpbmUgTVBfSVJRRElSX0hJR0ggMQorI2RlZmluZSBNUF9JUlFESVJfTE9XIDMKKworc3RydWN0IG1wY19jb25maWdfbGludHNyYworeworIHVuc2lnbmVkIGNoYXIgbXBjX3R5cGU7CisgdW5zaWduZWQgY2hhciBtcGNfaXJxdHlwZTsKKyB1bnNpZ25lZCBzaG9ydCBtcGNfaXJxZmxhZzsKKyB1bnNpZ25lZCBjaGFyIG1wY19zcmNidXNpZDsKKyB1bnNpZ25lZCBjaGFyIG1wY19zcmNidXNpcnE7CisgdW5zaWduZWQgY2hhciBtcGNfZGVzdGFwaWM7CisjZGVmaW5lIE1QX0FQSUNfQUxMIDB4RkYKKyB1bnNpZ25lZCBjaGFyIG1wY19kZXN0YXBpY2xpbnQ7Cit9OworCitzdHJ1Y3QgbXBfY29uZmlnX29lbXRhYmxlCit7CisgY2hhciBvZW1fc2lnbmF0dXJlWzRdOworI2RlZmluZSBNUENfT0VNX1NJR05BVFVSRSAiX09FTSIKKyB1bnNpZ25lZCBzaG9ydCBvZW1fbGVuZ3RoOworIGNoYXIgb2VtX3JldjsKKyBjaGFyIG9lbV9jaGVja3N1bTsKKyBjaGFyIG1wY19vZW1bOF07Cit9OworCitzdHJ1Y3QgbXBjX2NvbmZpZ190cmFuc2xhdGlvbgoreworIHVuc2lnbmVkIGNoYXIgbXBjX3R5cGU7CisgdW5zaWduZWQgY2hhciB0cmFuc19sZW47CisgdW5zaWduZWQgY2hhciB0cmFuc190eXBlOworIHVuc2lnbmVkIGNoYXIgdHJhbnNfcXVhZDsKKyB1bnNpZ25lZCBjaGFyIHRyYW5zX2dsb2JhbDsKKyB1bnNpZ25lZCBjaGFyIHRyYW5zX2xvY2FsOworIHVuc2lnbmVkIHNob3J0IHRyYW5zX3Jlc2VydmVkOworfTsKKworZW51bSBtcF9idXN0eXBlIHsKKyBNUF9CVVNfSVNBID0gMSwKKyBNUF9CVVNfRUlTQSwKKyBNUF9CVVNfUENJLAorIE1QX0JVU19NQ0EsCit9OworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9tc2didWYuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9tc2didWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODQzZTc4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL21zZ2J1Zi5oCkBAIC0wLDAgKzEsMzggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FTTV9YODZfTVNHQlVGX0gKKyNkZWZpbmUgX0FTTV9YODZfTVNHQlVGX0gKKworc3RydWN0IG1zcWlkNjRfZHMgeworIHN0cnVjdCBpcGM2NF9wZXJtIG1zZ19wZXJtOworIF9fa2VybmVsX3RpbWVfdCBtc2dfc3RpbWU7CisjaWZkZWYgX19pMzg2X18KKyB1bnNpZ25lZCBsb25nIF9fdW51c2VkMTsKKyNlbmRpZgorIF9fa2VybmVsX3RpbWVfdCBtc2dfcnRpbWU7CisjaWZkZWYgX19pMzg2X18KKyB1bnNpZ25lZCBsb25nIF9fdW51c2VkMjsKKyNlbmRpZgorIF9fa2VybmVsX3RpbWVfdCBtc2dfY3RpbWU7CisjaWZkZWYgX19pMzg2X18KKyB1bnNpZ25lZCBsb25nIF9fdW51c2VkMzsKKyNlbmRpZgorIHVuc2lnbmVkIGxvbmcgbXNnX2NieXRlczsKKyB1bnNpZ25lZCBsb25nIG1zZ19xbnVtOworIHVuc2lnbmVkIGxvbmcgbXNnX3FieXRlczsKKyBfX2tlcm5lbF9waWRfdCBtc2dfbHNwaWQ7CisgX19rZXJuZWxfcGlkX3QgbXNnX2xycGlkOworIHVuc2lnbmVkIGxvbmcgX191bnVzZWQ0OworIHVuc2lnbmVkIGxvbmcgX191bnVzZWQ1OworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vbXNyLWluZGV4LmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vbXNyLWluZGV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVhMjA0ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9tc3ItaW5kZXguaApAQCAtMCwwICsxLDI4MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FTTV9NU1JfSU5ERVhfSAorI2RlZmluZSBfX0FTTV9NU1JfSU5ERVhfSAorCisjZGVmaW5lIE1TUl9FRkVSIDB4YzAwMDAwODAgIAorI2RlZmluZSBNU1JfU1RBUiAweGMwMDAwMDgxICAKKyNkZWZpbmUgTVNSX0xTVEFSIDB4YzAwMDAwODIgIAorI2RlZmluZSBNU1JfQ1NUQVIgMHhjMDAwMDA4MyAgCisjZGVmaW5lIE1TUl9TWVNDQUxMX01BU0sgMHhjMDAwMDA4NCAgCisjZGVmaW5lIE1TUl9GU19CQVNFIDB4YzAwMDAxMDAgIAorI2RlZmluZSBNU1JfR1NfQkFTRSAweGMwMDAwMTAxICAKKyNkZWZpbmUgTVNSX0tFUk5FTF9HU19CQVNFIDB4YzAwMDAxMDIgIAorCisjZGVmaW5lIF9FRkVSX1NDRSAwICAKKyNkZWZpbmUgX0VGRVJfTE1FIDggIAorI2RlZmluZSBfRUZFUl9MTUEgMTAgIAorI2RlZmluZSBfRUZFUl9OWCAxMSAgCisKKyNkZWZpbmUgRUZFUl9TQ0UgKDE8PF9FRkVSX1NDRSkKKyNkZWZpbmUgRUZFUl9MTUUgKDE8PF9FRkVSX0xNRSkKKyNkZWZpbmUgRUZFUl9MTUEgKDE8PF9FRkVSX0xNQSkKKyNkZWZpbmUgRUZFUl9OWCAoMTw8X0VGRVJfTlgpCisKKyNkZWZpbmUgTVNSX0lBMzJfUEVSRkNUUjAgMHgwMDAwMDBjMQorI2RlZmluZSBNU1JfSUEzMl9QRVJGQ1RSMSAweDAwMDAwMGMyCisjZGVmaW5lIE1TUl9GU0JfRlJFUSAweDAwMDAwMGNkCisKKyNkZWZpbmUgTVNSX01UUlJjYXAgMHgwMDAwMDBmZQorI2RlZmluZSBNU1JfSUEzMl9CQkxfQ1JfQ1RMIDB4MDAwMDAxMTkKKworI2RlZmluZSBNU1JfSUEzMl9TWVNFTlRFUl9DUyAweDAwMDAwMTc0CisjZGVmaW5lIE1TUl9JQTMyX1NZU0VOVEVSX0VTUCAweDAwMDAwMTc1CisjZGVmaW5lIE1TUl9JQTMyX1NZU0VOVEVSX0VJUCAweDAwMDAwMTc2CisKKyNkZWZpbmUgTVNSX0lBMzJfTUNHX0NBUCAweDAwMDAwMTc5CisjZGVmaW5lIE1TUl9JQTMyX01DR19TVEFUVVMgMHgwMDAwMDE3YQorI2RlZmluZSBNU1JfSUEzMl9NQ0dfQ1RMIDB4MDAwMDAxN2IKKworI2RlZmluZSBNU1JfSUEzMl9QRUJTX0VOQUJMRSAweDAwMDAwM2YxCisjZGVmaW5lIE1TUl9JQTMyX0RTX0FSRUEgMHgwMDAwMDYwMAorI2RlZmluZSBNU1JfSUEzMl9QRVJGX0NBUEFCSUxJVElFUyAweDAwMDAwMzQ1CisKKyNkZWZpbmUgTVNSX01UUlJmaXg2NEtfMDAwMDAgMHgwMDAwMDI1MAorI2RlZmluZSBNU1JfTVRSUmZpeDE2S184MDAwMCAweDAwMDAwMjU4CisjZGVmaW5lIE1TUl9NVFJSZml4MTZLX0EwMDAwIDB4MDAwMDAyNTkKKyNkZWZpbmUgTVNSX01UUlJmaXg0S19DMDAwMCAweDAwMDAwMjY4CisjZGVmaW5lIE1TUl9NVFJSZml4NEtfQzgwMDAgMHgwMDAwMDI2OQorI2RlZmluZSBNU1JfTVRSUmZpeDRLX0QwMDAwIDB4MDAwMDAyNmEKKyNkZWZpbmUgTVNSX01UUlJmaXg0S19EODAwMCAweDAwMDAwMjZiCisjZGVmaW5lIE1TUl9NVFJSZml4NEtfRTAwMDAgMHgwMDAwMDI2YworI2RlZmluZSBNU1JfTVRSUmZpeDRLX0U4MDAwIDB4MDAwMDAyNmQKKyNkZWZpbmUgTVNSX01UUlJmaXg0S19GMDAwMCAweDAwMDAwMjZlCisjZGVmaW5lIE1TUl9NVFJSZml4NEtfRjgwMDAgMHgwMDAwMDI2ZgorI2RlZmluZSBNU1JfTVRSUmRlZlR5cGUgMHgwMDAwMDJmZgorCisjZGVmaW5lIE1TUl9JQTMyX0RFQlVHQ1RMTVNSIDB4MDAwMDAxZDkKKyNkZWZpbmUgTVNSX0lBMzJfTEFTVEJSQU5DSEZST01JUCAweDAwMDAwMWRiCisjZGVmaW5lIE1TUl9JQTMyX0xBU1RCUkFOQ0hUT0lQIDB4MDAwMDAxZGMKKyNkZWZpbmUgTVNSX0lBMzJfTEFTVElOVEZST01JUCAweDAwMDAwMWRkCisjZGVmaW5lIE1TUl9JQTMyX0xBU1RJTlRUT0lQIDB4MDAwMDAxZGUKKworI2RlZmluZSBNU1JfSUEzMl9NQzBfQ1RMIDB4MDAwMDA0MDAKKyNkZWZpbmUgTVNSX0lBMzJfTUMwX1NUQVRVUyAweDAwMDAwNDAxCisjZGVmaW5lIE1TUl9JQTMyX01DMF9BRERSIDB4MDAwMDA0MDIKKyNkZWZpbmUgTVNSX0lBMzJfTUMwX01JU0MgMHgwMDAwMDQwMworCisjZGVmaW5lIE1TUl9QNl9QRVJGQ1RSMCAweDAwMDAwMGMxCisjZGVmaW5lIE1TUl9QNl9QRVJGQ1RSMSAweDAwMDAwMGMyCisjZGVmaW5lIE1TUl9QNl9FVk5UU0VMMCAweDAwMDAwMTg2CisjZGVmaW5lIE1TUl9QNl9FVk5UU0VMMSAweDAwMDAwMTg3CisKKyNkZWZpbmUgTVNSX0FNRDY0X0lCU0ZFVENIQ1RMIDB4YzAwMTEwMzAKKyNkZWZpbmUgTVNSX0FNRDY0X0lCU0ZFVENITElOQUQgMHhjMDAxMTAzMQorI2RlZmluZSBNU1JfQU1ENjRfSUJTRkVUQ0hQSFlTQUQgMHhjMDAxMTAzMgorI2RlZmluZSBNU1JfQU1ENjRfSUJTT1BDVEwgMHhjMDAxMTAzMworI2RlZmluZSBNU1JfQU1ENjRfSUJTT1BSSVAgMHhjMDAxMTAzNAorI2RlZmluZSBNU1JfQU1ENjRfSUJTT1BEQVRBIDB4YzAwMTEwMzUKKyNkZWZpbmUgTVNSX0FNRDY0X0lCU09QREFUQTIgMHhjMDAxMTAzNgorI2RlZmluZSBNU1JfQU1ENjRfSUJTT1BEQVRBMyAweGMwMDExMDM3CisjZGVmaW5lIE1TUl9BTUQ2NF9JQlNEQ0xJTkFEIDB4YzAwMTEwMzgKKyNkZWZpbmUgTVNSX0FNRDY0X0lCU0RDUEhZU0FEIDB4YzAwMTEwMzkKKyNkZWZpbmUgTVNSX0FNRDY0X0lCU0NUTCAweGMwMDExMDNhCisKKyNkZWZpbmUgTVNSX0s4X1RPUF9NRU0xIDB4YzAwMTAwMWEKKyNkZWZpbmUgTVNSX0s4X1RPUF9NRU0yIDB4YzAwMTAwMWQKKyNkZWZpbmUgTVNSX0s4X1NZU0NGRyAweGMwMDEwMDEwCisjZGVmaW5lIE1TUl9LOF9IV0NSIDB4YzAwMTAwMTUKKyNkZWZpbmUgTVNSX0s4X0VOQUJMRV9DMUUgMHhjMDAxMDA1NQorI2RlZmluZSBLOF9NVFJSRklYUkFOR0VfRFJBTV9FTkFCTEUgMHgwMDA0MDAwMCAgCisjZGVmaW5lIEs4X01UUlJGSVhSQU5HRV9EUkFNX01PRElGWSAweDAwMDgwMDAwICAKKyNkZWZpbmUgSzhfTVRSUl9SRE1FTV9XUk1FTV9NQVNLIDB4MTgxODE4MTggIAorCisjZGVmaW5lIE1TUl9LN19FVk5UU0VMMCAweGMwMDEwMDAwCisjZGVmaW5lIE1TUl9LN19QRVJGQ1RSMCAweGMwMDEwMDA0CisjZGVmaW5lIE1TUl9LN19FVk5UU0VMMSAweGMwMDEwMDAxCisjZGVmaW5lIE1TUl9LN19QRVJGQ1RSMSAweGMwMDEwMDA1CisjZGVmaW5lIE1TUl9LN19FVk5UU0VMMiAweGMwMDEwMDAyCisjZGVmaW5lIE1TUl9LN19QRVJGQ1RSMiAweGMwMDEwMDA2CisjZGVmaW5lIE1TUl9LN19FVk5UU0VMMyAweGMwMDEwMDAzCisjZGVmaW5lIE1TUl9LN19QRVJGQ1RSMyAweGMwMDEwMDA3CisjZGVmaW5lIE1TUl9LN19DTEtfQ1RMIDB4YzAwMTAwMWIKKyNkZWZpbmUgTVNSX0s3X0hXQ1IgMHhjMDAxMDAxNQorI2RlZmluZSBNU1JfSzdfRklEX1ZJRF9DVEwgMHhjMDAxMDA0MQorI2RlZmluZSBNU1JfSzdfRklEX1ZJRF9TVEFUVVMgMHhjMDAxMDA0MgorCisjZGVmaW5lIE1TUl9LNl9FRkVSIDB4YzAwMDAwODAKKyNkZWZpbmUgTVNSX0s2X1NUQVIgMHhjMDAwMDA4MQorI2RlZmluZSBNU1JfSzZfV0hDUiAweGMwMDAwMDgyCisjZGVmaW5lIE1TUl9LNl9VV0NDUiAweGMwMDAwMDg1CisjZGVmaW5lIE1TUl9LNl9FUE1SIDB4YzAwMDAwODYKKyNkZWZpbmUgTVNSX0s2X1BTT1IgMHhjMDAwMDA4NworI2RlZmluZSBNU1JfSzZfUEZJUiAweGMwMDAwMDg4CisKKyNkZWZpbmUgTVNSX0lEVF9GQ1IxIDB4MDAwMDAxMDcKKyNkZWZpbmUgTVNSX0lEVF9GQ1IyIDB4MDAwMDAxMDgKKyNkZWZpbmUgTVNSX0lEVF9GQ1IzIDB4MDAwMDAxMDkKKyNkZWZpbmUgTVNSX0lEVF9GQ1I0IDB4MDAwMDAxMGEKKworI2RlZmluZSBNU1JfSURUX01DUjAgMHgwMDAwMDExMAorI2RlZmluZSBNU1JfSURUX01DUjEgMHgwMDAwMDExMQorI2RlZmluZSBNU1JfSURUX01DUjIgMHgwMDAwMDExMgorI2RlZmluZSBNU1JfSURUX01DUjMgMHgwMDAwMDExMworI2RlZmluZSBNU1JfSURUX01DUjQgMHgwMDAwMDExNAorI2RlZmluZSBNU1JfSURUX01DUjUgMHgwMDAwMDExNQorI2RlZmluZSBNU1JfSURUX01DUjYgMHgwMDAwMDExNgorI2RlZmluZSBNU1JfSURUX01DUjcgMHgwMDAwMDExNworI2RlZmluZSBNU1JfSURUX01DUl9DVFJMIDB4MDAwMDAxMjAKKworI2RlZmluZSBNU1JfVklBX0ZDUiAweDAwMDAxMTA3CisjZGVmaW5lIE1TUl9WSUFfTE9OR0hBVUwgMHgwMDAwMTEwYQorI2RlZmluZSBNU1JfVklBX1JORyAweDAwMDAxMTBiCisjZGVmaW5lIE1TUl9WSUFfQkNSMiAweDAwMDAxMTQ3CisKKyNkZWZpbmUgTVNSX1RNVEFfTE9OR1JVTl9DVFJMIDB4ODA4NjgwMTAKKyNkZWZpbmUgTVNSX1RNVEFfTE9OR1JVTl9GTEFHUyAweDgwODY4MDExCisjZGVmaW5lIE1TUl9UTVRBX0xSVElfUkVBRE9VVCAweDgwODY4MDE4CisjZGVmaW5lIE1TUl9UTVRBX0xSVElfVk9MVF9NSFogMHg4MDg2ODAxYQorCisjZGVmaW5lIE1TUl9JQTMyX1A1X01DX0FERFIgMHgwMDAwMDAwMAorI2RlZmluZSBNU1JfSUEzMl9QNV9NQ19UWVBFIDB4MDAwMDAwMDEKKyNkZWZpbmUgTVNSX0lBMzJfVFNDIDB4MDAwMDAwMTAKKyNkZWZpbmUgTVNSX0lBMzJfUExBVEZPUk1fSUQgMHgwMDAwMDAxNworI2RlZmluZSBNU1JfSUEzMl9FQkxfQ1JfUE9XRVJPTiAweDAwMDAwMDJhCisKKyNkZWZpbmUgTVNSX0lBMzJfQVBJQ0JBU0UgMHgwMDAwMDAxYgorI2RlZmluZSBNU1JfSUEzMl9BUElDQkFTRV9CU1AgKDE8PDgpCisjZGVmaW5lIE1TUl9JQTMyX0FQSUNCQVNFX0VOQUJMRSAoMTw8MTEpCisjZGVmaW5lIE1TUl9JQTMyX0FQSUNCQVNFX0JBU0UgKDB4ZmZmZmY8PDEyKQorCisjZGVmaW5lIE1TUl9JQTMyX1VDT0RFX1dSSVRFIDB4MDAwMDAwNzkKKyNkZWZpbmUgTVNSX0lBMzJfVUNPREVfUkVWIDB4MDAwMDAwOGIKKworI2RlZmluZSBNU1JfSUEzMl9QRVJGX1NUQVRVUyAweDAwMDAwMTk4CisjZGVmaW5lIE1TUl9JQTMyX1BFUkZfQ1RMIDB4MDAwMDAxOTkKKworI2RlZmluZSBNU1JfSUEzMl9NUEVSRiAweDAwMDAwMGU3CisjZGVmaW5lIE1TUl9JQTMyX0FQRVJGIDB4MDAwMDAwZTgKKworI2RlZmluZSBNU1JfSUEzMl9USEVSTV9DT05UUk9MIDB4MDAwMDAxOWEKKyNkZWZpbmUgTVNSX0lBMzJfVEhFUk1fSU5URVJSVVBUIDB4MDAwMDAxOWIKKyNkZWZpbmUgTVNSX0lBMzJfVEhFUk1fU1RBVFVTIDB4MDAwMDAxOWMKKyNkZWZpbmUgTVNSX0lBMzJfTUlTQ19FTkFCTEUgMHgwMDAwMDFhMAorCisjZGVmaW5lIE1TUl9QNl9FVk5UU0VMMCAweDAwMDAwMTg2CisjZGVmaW5lIE1TUl9QNl9FVk5UU0VMMSAweDAwMDAwMTg3CisKKyNkZWZpbmUgTVNSX0lBMzJfTUNHX0VBWCAweDAwMDAwMTgwCisjZGVmaW5lIE1TUl9JQTMyX01DR19FQlggMHgwMDAwMDE4MQorI2RlZmluZSBNU1JfSUEzMl9NQ0dfRUNYIDB4MDAwMDAxODIKKyNkZWZpbmUgTVNSX0lBMzJfTUNHX0VEWCAweDAwMDAwMTgzCisjZGVmaW5lIE1TUl9JQTMyX01DR19FU0kgMHgwMDAwMDE4NAorI2RlZmluZSBNU1JfSUEzMl9NQ0dfRURJIDB4MDAwMDAxODUKKyNkZWZpbmUgTVNSX0lBMzJfTUNHX0VCUCAweDAwMDAwMTg2CisjZGVmaW5lIE1TUl9JQTMyX01DR19FU1AgMHgwMDAwMDE4NworI2RlZmluZSBNU1JfSUEzMl9NQ0dfRUZMQUdTIDB4MDAwMDAxODgKKyNkZWZpbmUgTVNSX0lBMzJfTUNHX0VJUCAweDAwMDAwMTg5CisjZGVmaW5lIE1TUl9JQTMyX01DR19SRVNFUlZFRCAweDAwMDAwMThhCisKKyNkZWZpbmUgTVNSX1A0X0JQVV9QRVJGQ1RSMCAweDAwMDAwMzAwCisjZGVmaW5lIE1TUl9QNF9CUFVfUEVSRkNUUjEgMHgwMDAwMDMwMQorI2RlZmluZSBNU1JfUDRfQlBVX1BFUkZDVFIyIDB4MDAwMDAzMDIKKyNkZWZpbmUgTVNSX1A0X0JQVV9QRVJGQ1RSMyAweDAwMDAwMzAzCisjZGVmaW5lIE1TUl9QNF9NU19QRVJGQ1RSMCAweDAwMDAwMzA0CisjZGVmaW5lIE1TUl9QNF9NU19QRVJGQ1RSMSAweDAwMDAwMzA1CisjZGVmaW5lIE1TUl9QNF9NU19QRVJGQ1RSMiAweDAwMDAwMzA2CisjZGVmaW5lIE1TUl9QNF9NU19QRVJGQ1RSMyAweDAwMDAwMzA3CisjZGVmaW5lIE1TUl9QNF9GTEFNRV9QRVJGQ1RSMCAweDAwMDAwMzA4CisjZGVmaW5lIE1TUl9QNF9GTEFNRV9QRVJGQ1RSMSAweDAwMDAwMzA5CisjZGVmaW5lIE1TUl9QNF9GTEFNRV9QRVJGQ1RSMiAweDAwMDAwMzBhCisjZGVmaW5lIE1TUl9QNF9GTEFNRV9QRVJGQ1RSMyAweDAwMDAwMzBiCisjZGVmaW5lIE1TUl9QNF9JUV9QRVJGQ1RSMCAweDAwMDAwMzBjCisjZGVmaW5lIE1TUl9QNF9JUV9QRVJGQ1RSMSAweDAwMDAwMzBkCisjZGVmaW5lIE1TUl9QNF9JUV9QRVJGQ1RSMiAweDAwMDAwMzBlCisjZGVmaW5lIE1TUl9QNF9JUV9QRVJGQ1RSMyAweDAwMDAwMzBmCisjZGVmaW5lIE1TUl9QNF9JUV9QRVJGQ1RSNCAweDAwMDAwMzEwCisjZGVmaW5lIE1TUl9QNF9JUV9QRVJGQ1RSNSAweDAwMDAwMzExCisjZGVmaW5lIE1TUl9QNF9CUFVfQ0NDUjAgMHgwMDAwMDM2MAorI2RlZmluZSBNU1JfUDRfQlBVX0NDQ1IxIDB4MDAwMDAzNjEKKyNkZWZpbmUgTVNSX1A0X0JQVV9DQ0NSMiAweDAwMDAwMzYyCisjZGVmaW5lIE1TUl9QNF9CUFVfQ0NDUjMgMHgwMDAwMDM2MworI2RlZmluZSBNU1JfUDRfTVNfQ0NDUjAgMHgwMDAwMDM2NAorI2RlZmluZSBNU1JfUDRfTVNfQ0NDUjEgMHgwMDAwMDM2NQorI2RlZmluZSBNU1JfUDRfTVNfQ0NDUjIgMHgwMDAwMDM2NgorI2RlZmluZSBNU1JfUDRfTVNfQ0NDUjMgMHgwMDAwMDM2NworI2RlZmluZSBNU1JfUDRfRkxBTUVfQ0NDUjAgMHgwMDAwMDM2OAorI2RlZmluZSBNU1JfUDRfRkxBTUVfQ0NDUjEgMHgwMDAwMDM2OQorI2RlZmluZSBNU1JfUDRfRkxBTUVfQ0NDUjIgMHgwMDAwMDM2YQorI2RlZmluZSBNU1JfUDRfRkxBTUVfQ0NDUjMgMHgwMDAwMDM2YgorI2RlZmluZSBNU1JfUDRfSVFfQ0NDUjAgMHgwMDAwMDM2YworI2RlZmluZSBNU1JfUDRfSVFfQ0NDUjEgMHgwMDAwMDM2ZAorI2RlZmluZSBNU1JfUDRfSVFfQ0NDUjIgMHgwMDAwMDM2ZQorI2RlZmluZSBNU1JfUDRfSVFfQ0NDUjMgMHgwMDAwMDM2ZgorI2RlZmluZSBNU1JfUDRfSVFfQ0NDUjQgMHgwMDAwMDM3MAorI2RlZmluZSBNU1JfUDRfSVFfQ0NDUjUgMHgwMDAwMDM3MQorI2RlZmluZSBNU1JfUDRfQUxGX0VTQ1IwIDB4MDAwMDAzY2EKKyNkZWZpbmUgTVNSX1A0X0FMRl9FU0NSMSAweDAwMDAwM2NiCisjZGVmaW5lIE1TUl9QNF9CUFVfRVNDUjAgMHgwMDAwMDNiMgorI2RlZmluZSBNU1JfUDRfQlBVX0VTQ1IxIDB4MDAwMDAzYjMKKyNkZWZpbmUgTVNSX1A0X0JTVV9FU0NSMCAweDAwMDAwM2EwCisjZGVmaW5lIE1TUl9QNF9CU1VfRVNDUjEgMHgwMDAwMDNhMQorI2RlZmluZSBNU1JfUDRfQ1JVX0VTQ1IwIDB4MDAwMDAzYjgKKyNkZWZpbmUgTVNSX1A0X0NSVV9FU0NSMSAweDAwMDAwM2I5CisjZGVmaW5lIE1TUl9QNF9DUlVfRVNDUjIgMHgwMDAwMDNjYworI2RlZmluZSBNU1JfUDRfQ1JVX0VTQ1IzIDB4MDAwMDAzY2QKKyNkZWZpbmUgTVNSX1A0X0NSVV9FU0NSNCAweDAwMDAwM2UwCisjZGVmaW5lIE1TUl9QNF9DUlVfRVNDUjUgMHgwMDAwMDNlMQorI2RlZmluZSBNU1JfUDRfREFDX0VTQ1IwIDB4MDAwMDAzYTgKKyNkZWZpbmUgTVNSX1A0X0RBQ19FU0NSMSAweDAwMDAwM2E5CisjZGVmaW5lIE1TUl9QNF9GSVJNX0VTQ1IwIDB4MDAwMDAzYTQKKyNkZWZpbmUgTVNSX1A0X0ZJUk1fRVNDUjEgMHgwMDAwMDNhNQorI2RlZmluZSBNU1JfUDRfRkxBTUVfRVNDUjAgMHgwMDAwMDNhNgorI2RlZmluZSBNU1JfUDRfRkxBTUVfRVNDUjEgMHgwMDAwMDNhNworI2RlZmluZSBNU1JfUDRfRlNCX0VTQ1IwIDB4MDAwMDAzYTIKKyNkZWZpbmUgTVNSX1A0X0ZTQl9FU0NSMSAweDAwMDAwM2EzCisjZGVmaW5lIE1TUl9QNF9JUV9FU0NSMCAweDAwMDAwM2JhCisjZGVmaW5lIE1TUl9QNF9JUV9FU0NSMSAweDAwMDAwM2JiCisjZGVmaW5lIE1TUl9QNF9JU19FU0NSMCAweDAwMDAwM2I0CisjZGVmaW5lIE1TUl9QNF9JU19FU0NSMSAweDAwMDAwM2I1CisjZGVmaW5lIE1TUl9QNF9JVExCX0VTQ1IwIDB4MDAwMDAzYjYKKyNkZWZpbmUgTVNSX1A0X0lUTEJfRVNDUjEgMHgwMDAwMDNiNworI2RlZmluZSBNU1JfUDRfSVhfRVNDUjAgMHgwMDAwMDNjOAorI2RlZmluZSBNU1JfUDRfSVhfRVNDUjEgMHgwMDAwMDNjOQorI2RlZmluZSBNU1JfUDRfTU9CX0VTQ1IwIDB4MDAwMDAzYWEKKyNkZWZpbmUgTVNSX1A0X01PQl9FU0NSMSAweDAwMDAwM2FiCisjZGVmaW5lIE1TUl9QNF9NU19FU0NSMCAweDAwMDAwM2MwCisjZGVmaW5lIE1TUl9QNF9NU19FU0NSMSAweDAwMDAwM2MxCisjZGVmaW5lIE1TUl9QNF9QTUhfRVNDUjAgMHgwMDAwMDNhYworI2RlZmluZSBNU1JfUDRfUE1IX0VTQ1IxIDB4MDAwMDAzYWQKKyNkZWZpbmUgTVNSX1A0X1JBVF9FU0NSMCAweDAwMDAwM2JjCisjZGVmaW5lIE1TUl9QNF9SQVRfRVNDUjEgMHgwMDAwMDNiZAorI2RlZmluZSBNU1JfUDRfU0FBVF9FU0NSMCAweDAwMDAwM2FlCisjZGVmaW5lIE1TUl9QNF9TQUFUX0VTQ1IxIDB4MDAwMDAzYWYKKyNkZWZpbmUgTVNSX1A0X1NTVV9FU0NSMCAweDAwMDAwM2JlCisjZGVmaW5lIE1TUl9QNF9TU1VfRVNDUjEgMHgwMDAwMDNiZiAgCisKKyNkZWZpbmUgTVNSX1A0X1RCUFVfRVNDUjAgMHgwMDAwMDNjMgorI2RlZmluZSBNU1JfUDRfVEJQVV9FU0NSMSAweDAwMDAwM2MzCisjZGVmaW5lIE1TUl9QNF9UQ19FU0NSMCAweDAwMDAwM2M0CisjZGVmaW5lIE1TUl9QNF9UQ19FU0NSMSAweDAwMDAwM2M1CisjZGVmaW5lIE1TUl9QNF9VMkxfRVNDUjAgMHgwMDAwMDNiMAorI2RlZmluZSBNU1JfUDRfVTJMX0VTQ1IxIDB4MDAwMDAzYjEKKworI2RlZmluZSBNU1JfQ09SRV9QRVJGX0ZJWEVEX0NUUjAgMHgwMDAwMDMwOQorI2RlZmluZSBNU1JfQ09SRV9QRVJGX0ZJWEVEX0NUUjEgMHgwMDAwMDMwYQorI2RlZmluZSBNU1JfQ09SRV9QRVJGX0ZJWEVEX0NUUjIgMHgwMDAwMDMwYgorI2RlZmluZSBNU1JfQ09SRV9QRVJGX0ZJWEVEX0NUUl9DVFJMIDB4MDAwMDAzOGQKKyNkZWZpbmUgTVNSX0NPUkVfUEVSRl9HTE9CQUxfU1RBVFVTIDB4MDAwMDAzOGUKKyNkZWZpbmUgTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTCAweDAwMDAwMzhmCisjZGVmaW5lIE1TUl9DT1JFX1BFUkZfR0xPQkFMX09WRl9DVFJMIDB4MDAwMDAzOTAKKworI2RlZmluZSBNU1JfR0VPREVfQlVTQ09OVF9DT05GMCAweDAwMDAxOTAwCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL21zci5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL21zci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxZGE5MTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vbXNyLmgKQEAgLTAsMCArMSw1NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FTTV9YODZfTVNSX0hfCisjZGVmaW5lIF9fQVNNX1g4Nl9NU1JfSF8KKworI2luY2x1ZGUgPGFzbS9tc3ItaW5kZXguaD4KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2VuZGlmCisKKyNpZmRlZiBfX2kzODZfXworCisjZWxzZQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisKKyNkZWZpbmUgcmRtc3IobXNyLHZhbDEsdmFsMikgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygicmRtc3IiICAgOiAiPWEiICh2YWwxKSwgIj1kIiAodmFsMikgICA6ICJjIiAobXNyKSkKKworI2RlZmluZSByZG1zcmwobXNyLHZhbCkgZG8geyB1bnNpZ25lZCBsb25nIGFfXyxiX187ICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInJkbXNyIiAgIDogIj1hIiAoYV9fKSwgIj1kIiAoYl9fKSAgIDogImMiIChtc3IpKTsgICB2YWwgPSBhX18gfCAoYl9fPDwzMik7ICB9IHdoaWxlKDApCisKKyNkZWZpbmUgd3Jtc3IobXNyLHZhbDEsdmFsMikgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygid3Jtc3IiICAgOiAgICAgOiAiYyIgKG1zciksICJhIiAodmFsMSksICJkIiAodmFsMikpCisKKyNkZWZpbmUgd3Jtc3JsKG1zcix2YWwpIHdybXNyKG1zciwoX191MzIpKChfX3U2NCkodmFsKSksKChfX3U2NCkodmFsKSk+PjMyKQorCisjZGVmaW5lIHJkdHNjKGxvdyxoaWdoKSAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJyZHRzYyIgOiAiPWEiIChsb3cpLCAiPWQiIChoaWdoKSkKKworI2RlZmluZSByZHRzY2wobG93KSAgIF9fYXNtX18gX192b2xhdGlsZV9fICgicmR0c2MiIDogIj1hIiAobG93KSA6IDogImVkeCIpCisKKyNkZWZpbmUgcmR0c2NwKGxvdyxoaWdoLGF1eCkgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIi5ieXRlIDB4MGYsMHgwMSwweGY5IiA6ICI9YSIgKGxvdyksICI9ZCIgKGhpZ2gpLCAiPWMiIChhdXgpKQorCisjZGVmaW5lIHJkdHNjbGwodmFsKSBkbyB7ICAgdW5zaWduZWQgaW50IF9fYSxfX2Q7ICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInJkdHNjIiA6ICI9YSIgKF9fYSksICI9ZCIgKF9fZCkpOyAgICh2YWwpID0gKCh1bnNpZ25lZCBsb25nKV9fYSkgfCAoKCh1bnNpZ25lZCBsb25nKV9fZCk8PDMyKTsgIH0gd2hpbGUoMCkKKworI2RlZmluZSByZHRzY3BsbCh2YWwsIGF1eCkgZG8geyAgIHVuc2lnbmVkIGxvbmcgX19hLCBfX2Q7ICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCIuYnl0ZSAweDBmLDB4MDEsMHhmOSIgOiAiPWEiIChfX2EpLCAiPWQiIChfX2QpLCAiPWMiIChhdXgpKTsgICAodmFsKSA9IChfX2QgPDwgMzIpIHwgX19hOyAgfSB3aGlsZSAoMCkKKworI2RlZmluZSB3cml0ZV90c2ModmFsMSx2YWwyKSB3cm1zcigweDEwLCB2YWwxLCB2YWwyKQorCisjZGVmaW5lIHdyaXRlX3JkdHNjcF9hdXgodmFsKSB3cm1zcigweGMwMDAwMTAzLCB2YWwsIDApCisKKyNkZWZpbmUgcmRwbWMoY291bnRlcixsb3csaGlnaCkgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygicmRwbWMiICAgOiAiPWEiIChsb3cpLCAiPWQiIChoaWdoKSAgIDogImMiIChjb3VudGVyKSkKKworI2VuZGlmCisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3BhZ2UuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9wYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZkY2YyNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9wYWdlLmgKQEAgLTAsMCArMSwxNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmZGVmIF9faTM4Nl9fCisjaW5jbHVkZSAicGFnZV8zMi5oIgorI2Vsc2UKKyNpbmNsdWRlICJwYWdlXzY0LmgiCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9wYWdlXzMyLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vcGFnZV8zMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxOGNmOTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vcGFnZV8zMi5oCkBAIC0wLDAgKzEsMjIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0kzODZfUEFHRV9ICisjZGVmaW5lIF9JMzg2X1BBR0VfSAorCisjZGVmaW5lIFBBR0VfU0hJRlQgMTIKKyNkZWZpbmUgUEFHRV9TSVpFICgxVUwgPDwgUEFHRV9TSElGVCkKKyNkZWZpbmUgUEFHRV9NQVNLICh+KFBBR0VfU0laRS0xKSkKKworI2RlZmluZSBMQVJHRV9QQUdFX01BU0sgKH4oTEFSR0VfUEFHRV9TSVpFLTEpKQorI2RlZmluZSBMQVJHRV9QQUdFX1NJWkUgKDFVTCA8PCBQTURfU0hJRlQpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3BhcmFtLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmFmZDU1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3BhcmFtLmgKQEAgLTAsMCArMSwyNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQVNNX1g4Nl9QQVJBTV9ICisjZGVmaW5lIF9BU01fWDg2X1BBUkFNX0gKKworI2lmbmRlZiBIWgorI2RlZmluZSBIWiAxMDAKKyNlbmRpZgorCisjZGVmaW5lIEVYRUNfUEFHRVNJWkUgNDA5NgorCisjaWZuZGVmIE5PR1JPVVAKKyNkZWZpbmUgTk9HUk9VUCAoLTEpCisjZW5kaWYKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9wYXJhdmlydC5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3BhcmF2aXJ0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWIwZDA4ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9wYXJhdmlydC5oCkBAIC0wLDAgKzEsMTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19BU01fUEFSQVZJUlRfSAorI2RlZmluZSBfX0FTTV9QQVJBVklSVF9ICisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3BkYS5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3BkYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3MTEyMjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vcGRhLmgKQEAgLTAsMCArMSw2NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBYODZfNjRfUERBX0gKKyNkZWZpbmUgWDg2XzY0X1BEQV9ICisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisKK3N0cnVjdCB4ODY2NF9wZGEgeworIHN0cnVjdCB0YXNrX3N0cnVjdCAqcGN1cnJlbnQ7CisgdW5zaWduZWQgbG9uZyBkYXRhX29mZnNldDsKKyB1bnNpZ25lZCBsb25nIGtlcm5lbHN0YWNrOworIHVuc2lnbmVkIGxvbmcgb2xkcnNwOworIGludCBpcnFjb3VudDsKKyBpbnQgY3B1bnVtYmVyOworIGNoYXIgKmlycXN0YWNrcHRyOworIGludCBub2RlbnVtYmVyOworIHVuc2lnbmVkIGludCBfX3NvZnRpcnFfcGVuZGluZzsKKyB1bnNpZ25lZCBpbnQgX19ubWlfY291bnQ7Cisgc2hvcnQgbW11X3N0YXRlOworIHNob3J0IGlzaWRsZTsKKyBzdHJ1Y3QgbW1fc3RydWN0ICphY3RpdmVfbW07CisgdW5zaWduZWQgYXBpY190aW1lcl9pcnFzOworIHVuc2lnbmVkIGlycTBfaXJxczsKKyB1bnNpZ25lZCBpcnFfcmVzY2hlZF9jb3VudDsKKyB1bnNpZ25lZCBpcnFfY2FsbF9jb3VudDsKKyB1bnNpZ25lZCBpcnFfdGxiX2NvdW50OworIHVuc2lnbmVkIGlycV90aGVybWFsX2NvdW50OworIHVuc2lnbmVkIGlycV90aHJlc2hvbGRfY291bnQ7CisgdW5zaWduZWQgaXJxX3NwdXJpb3VzX2NvdW50OworfSBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOworCisjZGVmaW5lIGNwdV9wZGEoaSkgKF9jcHVfcGRhW2ldKQorCisjZGVmaW5lIHBkYV9vZmZzZXQoZmllbGQpIG9mZnNldG9mKHN0cnVjdCB4ODY2NF9wZGEsIGZpZWxkKQorCisjZGVmaW5lIHBkYV90b19vcChvcCxmaWVsZCx2YWwpIGRvIHsgICB0eXBlZGVmIHR5cGVvZihfcHJveHlfcGRhLmZpZWxkKSBUX187ICAgaWYgKDApIHsgVF9fIHRtcF9fOyB0bXBfXyA9ICh2YWwpOyB9ICAgICBzd2l0Y2ggKHNpemVvZihfcHJveHlfcGRhLmZpZWxkKSkgeyAgIGNhc2UgMjogICBhc20ob3AgIncgJTEsJSVnczolYzIiIDogICAiK20iIChfcHJveHlfcGRhLmZpZWxkKSA6ICAgInJpIiAoKFRfXyl2YWwpLCAgICJpIihwZGFfb2Zmc2V0KGZpZWxkKSkpOyAgIGJyZWFrOyAgIGNhc2UgNDogICBhc20ob3AgImwgJTEsJSVnczolYzIiIDogICAiK20iIChfcHJveHlfcGRhLmZpZWxkKSA6ICAgInJpIiAoKFRfXyl2YWwpLCAgICJpIiAocGRhX29mZnNldChmaWVsZCkpKTsgICBicmVhazsgICBjYXNlIDg6ICAgYXNtKG9wICJxICUxLCUlZ3M6JWMyIjogICAiK20iIChfcHJveHlfcGRhLmZpZWxkKSA6ICAgInJpIiAoKFRfXyl2YWwpLCAgICJpIihwZGFfb2Zmc2V0KGZpZWxkKSkpOyAgIGJyZWFrOyAgIGRlZmF1bHQ6ICAgX19iYWRfcGRhX2ZpZWxkKCk7ICAgfSAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgcGRhX2Zyb21fb3Aob3AsZmllbGQpICh7ICAgdHlwZW9mKF9wcm94eV9wZGEuZmllbGQpIHJldF9fOyAgIHN3aXRjaCAoc2l6ZW9mKF9wcm94eV9wZGEuZmllbGQpKSB7ICAgY2FzZSAyOiAgIGFzbShvcCAidyAlJWdzOiVjMSwlMCIgOiAgICI9ciIgKHJldF9fKSA6ICAgImkiIChwZGFfb2Zmc2V0KGZpZWxkKSksICAgIm0iIChfcHJveHlfcGRhLmZpZWxkKSk7ICAgYnJlYWs7ICAgY2FzZSA0OiAgIGFzbShvcCAibCAlJWdzOiVjMSwlMCI6ICAgIj1yIiAocmV0X18pOiAgICJpIiAocGRhX29mZnNldChmaWVsZCkpLCAgICJtIiAoX3Byb3h5X3BkYS5maWVsZCkpOyAgIGJyZWFrOyAgIGNhc2UgODogICBhc20ob3AgInEgJSVnczolYzEsJTAiOiAgICI9ciIgKHJldF9fKSA6ICAgImkiIChwZGFfb2Zmc2V0KGZpZWxkKSksICAgIm0iIChfcHJveHlfcGRhLmZpZWxkKSk7ICAgYnJlYWs7ICAgZGVmYXVsdDogICBfX2JhZF9wZGFfZmllbGQoKTsgICB9ICAgcmV0X187IH0pCisKKyNkZWZpbmUgcmVhZF9wZGEoZmllbGQpIHBkYV9mcm9tX29wKCJtb3YiLGZpZWxkKQorI2RlZmluZSB3cml0ZV9wZGEoZmllbGQsdmFsKSBwZGFfdG9fb3AoIm1vdiIsZmllbGQsdmFsKQorI2RlZmluZSBhZGRfcGRhKGZpZWxkLHZhbCkgcGRhX3RvX29wKCJhZGQiLGZpZWxkLHZhbCkKKyNkZWZpbmUgc3ViX3BkYShmaWVsZCx2YWwpIHBkYV90b19vcCgic3ViIixmaWVsZCx2YWwpCisjZGVmaW5lIG9yX3BkYShmaWVsZCx2YWwpIHBkYV90b19vcCgib3IiLGZpZWxkLHZhbCkKKworI2RlZmluZSB0ZXN0X2FuZF9jbGVhcl9iaXRfcGRhKGJpdCxmaWVsZCkgKHsgICBpbnQgb2xkX187ICAgYXNtIHZvbGF0aWxlKCJidHIgJTIsJSVnczolYzNcblx0c2JibCAlMCwlMCIgICA6ICI9ciIgKG9sZF9fKSwgIittIiAoX3Byb3h5X3BkYS5maWVsZCkgICA6ICJkSXIiIChiaXQpLCAiaSIgKHBkYV9vZmZzZXQoZmllbGQpKSA6ICJtZW1vcnkiKTsgICBvbGRfXzsgIH0pCisKKyNlbmRpZgorCisjZGVmaW5lIFBEQV9TVEFDS09GRlNFVCAoNSo4KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9wZXJjcHUuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9wZXJjcHUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzQwZTY3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3BlcmNwdS5oCkBAIC0wLDAgKzEsMTIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJwZXJjcHVfNjQuaCIKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9wZXJjcHVfMzIuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9wZXJjcHVfMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTEzNWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3BlcmNwdV8zMi5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19BUkNIX0kzODZfUEVSQ1BVX18KKyNkZWZpbmUgX19BUkNIX0kzODZfUEVSQ1BVX18KKworI2lmZGVmIF9fQVNTRU1CTFlfXworCisjZGVmaW5lIFBFUl9DUFUodmFyLCByZWcpICAgbW92bCAkcGVyX2NwdV9fIyN2YXIsIHJlZworI2RlZmluZSBQRVJfQ1BVX1ZBUih2YXIpIHBlcl9jcHVfXyMjdmFyCisKKyNlbHNlCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wZXJjcHUuaD4KKyNkZWZpbmUgX19wZXJjcHVfc2VnICIiCisKKyNkZWZpbmUgcGVyY3B1X3RvX29wKG9wLHZhcix2YWwpICAgZG8geyAgIHR5cGVkZWYgdHlwZW9mKHZhcikgVF9fOyAgIGlmICgwKSB7IFRfXyB0bXBfXzsgdG1wX18gPSAodmFsKTsgfSAgIHN3aXRjaCAoc2l6ZW9mKHZhcikpIHsgICBjYXNlIDE6ICAgYXNtKG9wICJiICUxLCJfX3BlcmNwdV9zZWciJTAiICAgOiAiK20iICh2YXIpICAgOiJyaSIgKChUX18pdmFsKSk7ICAgYnJlYWs7ICAgY2FzZSAyOiAgIGFzbShvcCAidyAlMSwiX19wZXJjcHVfc2VnIiUwIiAgIDogIittIiAodmFyKSAgIDoicmkiICgoVF9fKXZhbCkpOyAgIGJyZWFrOyAgIGNhc2UgNDogICBhc20ob3AgImwgJTEsIl9fcGVyY3B1X3NlZyIlMCIgICA6ICIrbSIgKHZhcikgICA6InJpIiAoKFRfXyl2YWwpKTsgICBicmVhazsgICBkZWZhdWx0OiBfX2JhZF9wZXJjcHVfc2l6ZSgpOyAgIH0gICB9IHdoaWxlICgwKQorCisjZGVmaW5lIHBlcmNwdV9mcm9tX29wKG9wLHZhcikgICAoeyAgIHR5cGVvZih2YXIpIHJldF9fOyAgIHN3aXRjaCAoc2l6ZW9mKHZhcikpIHsgICBjYXNlIDE6ICAgYXNtKG9wICJiICJfX3BlcmNwdV9zZWciJTEsJTAiICAgOiAiPXIiIChyZXRfXykgICA6ICJtIiAodmFyKSk7ICAgYnJlYWs7ICAgY2FzZSAyOiAgIGFzbShvcCAidyAiX19wZXJjcHVfc2VnIiUxLCUwIiAgIDogIj1yIiAocmV0X18pICAgOiAibSIgKHZhcikpOyAgIGJyZWFrOyAgIGNhc2UgNDogICBhc20ob3AgImwgIl9fcGVyY3B1X3NlZyIlMSwlMCIgICA6ICI9ciIgKHJldF9fKSAgIDogIm0iICh2YXIpKTsgICBicmVhazsgICBkZWZhdWx0OiBfX2JhZF9wZXJjcHVfc2l6ZSgpOyAgIH0gICByZXRfXzsgfSkKKworI2RlZmluZSB4ODZfcmVhZF9wZXJjcHUodmFyKSBwZXJjcHVfZnJvbV9vcCgibW92IiwgcGVyX2NwdV9fIyN2YXIpCisjZGVmaW5lIHg4Nl93cml0ZV9wZXJjcHUodmFyLHZhbCkgcGVyY3B1X3RvX29wKCJtb3YiLCBwZXJfY3B1X18jI3ZhciwgdmFsKQorI2RlZmluZSB4ODZfYWRkX3BlcmNwdSh2YXIsdmFsKSBwZXJjcHVfdG9fb3AoImFkZCIsIHBlcl9jcHVfXyMjdmFyLCB2YWwpCisjZGVmaW5lIHg4Nl9zdWJfcGVyY3B1KHZhcix2YWwpIHBlcmNwdV90b19vcCgic3ViIiwgcGVyX2NwdV9fIyN2YXIsIHZhbCkKKyNkZWZpbmUgeDg2X29yX3BlcmNwdSh2YXIsdmFsKSBwZXJjcHVfdG9fb3AoIm9yIiwgcGVyX2NwdV9fIyN2YXIsIHZhbCkKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9wZ2FsbG9jLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vcGdhbGxvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1YTAzMmIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vcGdhbGxvYy5oCkBAIC0wLDAgKzEsMTIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJwZ2FsbG9jXzY0LmgiCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vcGdhbGxvY18zMi5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3BnYWxsb2NfMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzBmODg0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3BnYWxsb2NfMzIuaApAQCAtMCwwICsxLDMwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9JMzg2X1BHQUxMT0NfSAorI2RlZmluZSBfSTM4Nl9QR0FMTE9DX0gKKworI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPiAgCisKKyNkZWZpbmUgcGFyYXZpcnRfYWxsb2NfcHQobW0sIHBmbikgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBwYXJhdmlydF9hbGxvY19wZChwZm4pIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcGFyYXZpcnRfYWxsb2NfcGQocGZuKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHBhcmF2aXJ0X2FsbG9jX3BkX2Nsb25lKHBmbiwgY2xvbmVwZm4sIHN0YXJ0LCBjb3VudCkgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBwYXJhdmlydF9yZWxlYXNlX3B0KHBmbikgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBwYXJhdmlydF9yZWxlYXNlX3BkKHBmbikgZG8geyB9IHdoaWxlICgwKQorCisjZGVmaW5lIHBtZF9wb3B1bGF0ZV9rZXJuZWwobW0sIHBtZCwgcHRlKSAgZG8geyAgIHBhcmF2aXJ0X2FsbG9jX3B0KG1tLCBfX3BhKHB0ZSkgPj4gUEFHRV9TSElGVCk7ICAgc2V0X3BtZChwbWQsIF9fcG1kKF9QQUdFX1RBQkxFICsgX19wYShwdGUpKSk7ICB9IHdoaWxlICgwKQorCisjZGVmaW5lIHBtZF9wb3B1bGF0ZShtbSwgcG1kLCBwdGUpICBkbyB7ICAgcGFyYXZpcnRfYWxsb2NfcHQobW0sIHBhZ2VfdG9fcGZuKHB0ZSkpOyAgIHNldF9wbWQocG1kLCBfX3BtZChfUEFHRV9UQUJMRSArICAgKCh1bnNpZ25lZCBsb25nIGxvbmcpcGFnZV90b19wZm4ocHRlKSA8PCAgICh1bnNpZ25lZCBsb25nIGxvbmcpIFBBR0VfU0hJRlQpKSk7ICB9IHdoaWxlICgwKQorCisjZGVmaW5lIF9fcHRlX2ZyZWVfdGxiKHRsYixwdGUpICBkbyB7ICAgcGFyYXZpcnRfcmVsZWFzZV9wdChwYWdlX3RvX3BmbihwdGUpKTsgICB0bGJfcmVtb3ZlX3BhZ2UoKHRsYiksKHB0ZSkpOyAgfSB3aGlsZSAoMCkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3BndGFibGUtMmxldmVsLWRlZnMuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9wZ3RhYmxlLTJsZXZlbC1kZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVkYzZjNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9wZ3RhYmxlLTJsZXZlbC1kZWZzLmgKQEAgLTAsMCArMSwyMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfSTM4Nl9QR1RBQkxFXzJMRVZFTF9ERUZTX0gKKyNkZWZpbmUgX0kzODZfUEdUQUJMRV8yTEVWRUxfREVGU19ICisKKyNkZWZpbmUgU0hBUkVEX0tFUk5FTF9QTUQgMAorCisjZGVmaW5lIFBHRElSX1NISUZUIDIyCisjZGVmaW5lIFBUUlNfUEVSX1BHRCAxMDI0CisKKyNkZWZpbmUgUFRSU19QRVJfUFRFIDEwMjQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vcGd0YWJsZS0ybGV2ZWwuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9wZ3RhYmxlLTJsZXZlbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhZGU0ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vcGd0YWJsZS0ybGV2ZWwuaApAQCAtMCwwICsxLDM5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9JMzg2X1BHVEFCTEVfMkxFVkVMX0gKKyNkZWZpbmUgX0kzODZfUEdUQUJMRV8yTEVWRUxfSAorCisjZGVmaW5lIHB0ZV9FUlJPUihlKSAgIHByaW50aygiJXM6JWQ6IGJhZCBwdGUgJTA4bHguXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sIChlKS5wdGVfbG93KQorI2RlZmluZSBwZ2RfRVJST1IoZSkgICBwcmludGsoIiVzOiVkOiBiYWQgcGdkICUwOGx4LlxuIiwgX19GSUxFX18sIF9fTElORV9fLCBwZ2RfdmFsKGUpKQorCisjZGVmaW5lIHNldF9wdGUocHRlcHRyLCBwdGV2YWwpIG5hdGl2ZV9zZXRfcHRlKHB0ZXB0ciwgcHRldmFsKQorI2RlZmluZSBzZXRfcHRlX2F0KG1tLGFkZHIscHRlcCxwdGV2YWwpIG5hdGl2ZV9zZXRfcHRlX2F0KG1tLCBhZGRyLCBwdGVwLCBwdGV2YWwpCisjZGVmaW5lIHNldF9wbWQocG1kcHRyLCBwbWR2YWwpIG5hdGl2ZV9zZXRfcG1kKHBtZHB0ciwgcG1kdmFsKQorI2RlZmluZSBzZXRfcHRlX2F0b21pYyhwdGVwdHIsIHB0ZXZhbCkgc2V0X3B0ZShwdGVwdHIscHRldmFsKQorI2RlZmluZSBzZXRfcHRlX3ByZXNlbnQobW0sYWRkcixwdGVwLHB0ZXZhbCkgc2V0X3B0ZV9hdChtbSxhZGRyLHB0ZXAscHRldmFsKQorI2RlZmluZSBwdGVfY2xlYXIobW0sYWRkcix4cCkgZG8geyBzZXRfcHRlX2F0KG1tLCBhZGRyLCB4cCwgX19wdGUoMCkpOyB9IHdoaWxlICgwKQorI2RlZmluZSBwbWRfY2xlYXIoeHApIGRvIHsgc2V0X3BtZCh4cCwgX19wbWQoMCkpOyB9IHdoaWxlICgwKQorI2RlZmluZSBuYXRpdmVfcHRlcF9nZXRfYW5kX2NsZWFyKHhwKSBuYXRpdmVfbG9jYWxfcHRlcF9nZXRfYW5kX2NsZWFyKHhwKQorI2RlZmluZSBwdGVfcGFnZSh4KSBwZm5fdG9fcGFnZShwdGVfcGZuKHgpKQorI2RlZmluZSBwdGVfbm9uZSh4KSAoISh4KS5wdGVfbG93KQorI2RlZmluZSBwdGVfcGZuKHgpIChwdGVfdmFsKHgpID4+IFBBR0VfU0hJRlQpCisjZGVmaW5lIHBmbl9wdGUocGZuLCBwcm90KSBfX3B0ZSgoKHBmbikgPDwgUEFHRV9TSElGVCkgfCBwZ3Byb3RfdmFsKHByb3QpKQorI2RlZmluZSBwZm5fcG1kKHBmbiwgcHJvdCkgX19wbWQoKChwZm4pIDw8IFBBR0VfU0hJRlQpIHwgcGdwcm90X3ZhbChwcm90KSkKKyNkZWZpbmUgUFRFX0ZJTEVfTUFYX0JJVFMgMjkKKyNkZWZpbmUgcHRlX3RvX3Bnb2ZmKHB0ZSkgICAoKCgocHRlKS5wdGVfbG93ID4+IDEpICYgMHgxZiApICsgKCgocHRlKS5wdGVfbG93ID4+IDgpIDw8IDUgKSkKKyNkZWZpbmUgcGdvZmZfdG9fcHRlKG9mZikgICAoKHB0ZV90KSB7ICgoKG9mZikgJiAweDFmKSA8PCAxKSArICgoKG9mZikgPj4gNSkgPDwgOCkgKyBfUEFHRV9GSUxFIH0pCisjZGVmaW5lIF9fc3dwX3R5cGUoeCkgKCgoeCkudmFsID4+IDEpICYgMHgxZikKKyNkZWZpbmUgX19zd3Bfb2Zmc2V0KHgpICgoeCkudmFsID4+IDgpCisjZGVmaW5lIF9fc3dwX2VudHJ5KHR5cGUsIG9mZnNldCkgKChzd3BfZW50cnlfdCkgeyAoKHR5cGUpIDw8IDEpIHwgKChvZmZzZXQpIDw8IDgpIH0pCisjZGVmaW5lIF9fcHRlX3RvX3N3cF9lbnRyeShwdGUpICgoc3dwX2VudHJ5X3QpIHsgKHB0ZSkucHRlX2xvdyB9KQorI2RlZmluZSBfX3N3cF9lbnRyeV90b19wdGUoeCkgKChwdGVfdCkgeyAoeCkudmFsIH0pCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9wZ3RhYmxlLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vcGd0YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5N2U0NzMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vcGd0YWJsZS5oCkBAIC0wLDAgKzEsMTIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJwZ3RhYmxlXzY0LmgiCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vcGd0YWJsZV8zMi5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3BndGFibGVfMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjNiYTkzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3BndGFibGVfMzIuaApAQCAtMCwwICsxLDE3NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfSTM4Nl9QR1RBQkxFX0gKKyNkZWZpbmUgX0kzODZfUEdUQUJMRV9ICisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9maXhtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisjaW5jbHVkZSA8YXNtL3BhcmF2aXJ0Lmg+CisKKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisKK3N0cnVjdCBtbV9zdHJ1Y3Q7CitzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Q7CisKKyNkZWZpbmUgWkVST19QQUdFKHZhZGRyKSAodmlydF90b19wYWdlKGVtcHR5X3plcm9fcGFnZSkpCisKKyNpbmNsdWRlIDxhc20vcGd0YWJsZS0ybGV2ZWwtZGVmcy5oPgorCisjZGVmaW5lIFBHRElSX1NJWkUgKDFVTCA8PCBQR0RJUl9TSElGVCkKKyNkZWZpbmUgUEdESVJfTUFTSyAofihQR0RJUl9TSVpFLTEpKQorCisjZGVmaW5lIFVTRVJfUFRSU19QRVJfUEdEIChUQVNLX1NJWkUvUEdESVJfU0laRSkKKyNkZWZpbmUgRklSU1RfVVNFUl9BRERSRVNTIDAKKworI2RlZmluZSBVU0VSX1BHRF9QVFJTIChQQUdFX09GRlNFVCA+PiBQR0RJUl9TSElGVCkKKyNkZWZpbmUgS0VSTkVMX1BHRF9QVFJTIChQVFJTX1BFUl9QR0QtVVNFUl9QR0RfUFRSUykKKworI2RlZmluZSBUV09MRVZFTF9QR0RJUl9TSElGVCAyMgorI2RlZmluZSBCT09UX1VTRVJfUEdEX1BUUlMgKF9fUEFHRV9PRkZTRVQgPj4gVFdPTEVWRUxfUEdESVJfU0hJRlQpCisjZGVmaW5lIEJPT1RfS0VSTkVMX1BHRF9QVFJTICgxMDI0LUJPT1RfVVNFUl9QR0RfUFRSUykKKworI2RlZmluZSBWTUFMTE9DX09GRlNFVCAoOCoxMDI0KjEwMjQpCisjZGVmaW5lIFZNQUxMT0NfU1RBUlQgKCgodW5zaWduZWQgbG9uZykgaGlnaF9tZW1vcnkgKyAgIDIqVk1BTExPQ19PRkZTRVQtMSkgJiB+KFZNQUxMT0NfT0ZGU0VULTEpKQorI2RlZmluZSBWTUFMTE9DX0VORCAoRklYQUREUl9TVEFSVC0yKlBBR0VfU0laRSkKKworI2RlZmluZSBfUEFHRV9CSVRfUFJFU0VOVCAwCisjZGVmaW5lIF9QQUdFX0JJVF9SVyAxCisjZGVmaW5lIF9QQUdFX0JJVF9VU0VSIDIKKyNkZWZpbmUgX1BBR0VfQklUX1BXVCAzCisjZGVmaW5lIF9QQUdFX0JJVF9QQ0QgNAorI2RlZmluZSBfUEFHRV9CSVRfQUNDRVNTRUQgNQorI2RlZmluZSBfUEFHRV9CSVRfRElSVFkgNgorI2RlZmluZSBfUEFHRV9CSVRfUFNFIDcgIAorI2RlZmluZSBfUEFHRV9CSVRfR0xPQkFMIDggIAorI2RlZmluZSBfUEFHRV9CSVRfVU5VU0VEMSA5ICAKKyNkZWZpbmUgX1BBR0VfQklUX1VOVVNFRDIgMTAKKyNkZWZpbmUgX1BBR0VfQklUX1VOVVNFRDMgMTEKKyNkZWZpbmUgX1BBR0VfQklUX05YIDYzCisKKyNkZWZpbmUgX1BBR0VfUFJFU0VOVCAweDAwMQorI2RlZmluZSBfUEFHRV9SVyAweDAwMgorI2RlZmluZSBfUEFHRV9VU0VSIDB4MDA0CisjZGVmaW5lIF9QQUdFX1BXVCAweDAwOAorI2RlZmluZSBfUEFHRV9QQ0QgMHgwMTAKKyNkZWZpbmUgX1BBR0VfQUNDRVNTRUQgMHgwMjAKKyNkZWZpbmUgX1BBR0VfRElSVFkgMHgwNDAKKyNkZWZpbmUgX1BBR0VfUFNFIDB4MDgwICAKKyNkZWZpbmUgX1BBR0VfR0xPQkFMIDB4MTAwICAKKyNkZWZpbmUgX1BBR0VfVU5VU0VEMSAweDIwMCAgCisjZGVmaW5lIF9QQUdFX1VOVVNFRDIgMHg0MDAKKyNkZWZpbmUgX1BBR0VfVU5VU0VEMyAweDgwMAorCisjZGVmaW5lIF9QQUdFX0ZJTEUgMHgwNDAgIAorI2RlZmluZSBfUEFHRV9QUk9UTk9ORSAweDA4MCAgCisjZGVmaW5lIF9QQUdFX05YIDAKKworI2RlZmluZSBfUEFHRV9UQUJMRSAoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JXIHwgX1BBR0VfVVNFUiB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfRElSVFkpCisjZGVmaW5lIF9LRVJOUEdfVEFCTEUgKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SVyB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfRElSVFkpCisjZGVmaW5lIF9QQUdFX0NIR19NQVNLIChQVEVfTUFTSyB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfRElSVFkpCisKKyNkZWZpbmUgUEFHRV9OT05FICAgX19wZ3Byb3QoX1BBR0VfUFJPVE5PTkUgfCBfUEFHRV9BQ0NFU1NFRCkKKyNkZWZpbmUgUEFHRV9TSEFSRUQgICBfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUlcgfCBfUEFHRV9VU0VSIHwgX1BBR0VfQUNDRVNTRUQpCisKKyNkZWZpbmUgUEFHRV9TSEFSRURfRVhFQyAgIF9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SVyB8IF9QQUdFX1VTRVIgfCBfUEFHRV9BQ0NFU1NFRCkKKyNkZWZpbmUgUEFHRV9DT1BZX05PRVhFQyAgIF9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9VU0VSIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9OWCkKKyNkZWZpbmUgUEFHRV9DT1BZX0VYRUMgICBfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfVVNFUiB8IF9QQUdFX0FDQ0VTU0VEKQorI2RlZmluZSBQQUdFX0NPUFkgICBQQUdFX0NPUFlfTk9FWEVDCisjZGVmaW5lIFBBR0VfUkVBRE9OTFkgICBfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfVVNFUiB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfTlgpCisjZGVmaW5lIFBBR0VfUkVBRE9OTFlfRVhFQyAgIF9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9VU0VSIHwgX1BBR0VfQUNDRVNTRUQpCisKKyNkZWZpbmUgX1BBR0VfS0VSTkVMICAgKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SVyB8IF9QQUdFX0RJUlRZIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9OWCkKKyNkZWZpbmUgX1BBR0VfS0VSTkVMX0VYRUMgICAoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JXIHwgX1BBR0VfRElSVFkgfCBfUEFHRV9BQ0NFU1NFRCkKKworI2RlZmluZSBfX1BBR0VfS0VSTkVMX1JPIChfX1BBR0VfS0VSTkVMICYgfl9QQUdFX1JXKQorI2RlZmluZSBfX1BBR0VfS0VSTkVMX1JYIChfX1BBR0VfS0VSTkVMX0VYRUMgJiB+X1BBR0VfUlcpCisjZGVmaW5lIF9fUEFHRV9LRVJORUxfTk9DQUNIRSAoX19QQUdFX0tFUk5FTCB8IF9QQUdFX1BDRCkKKyNkZWZpbmUgX19QQUdFX0tFUk5FTF9MQVJHRSAoX19QQUdFX0tFUk5FTCB8IF9QQUdFX1BTRSkKKyNkZWZpbmUgX19QQUdFX0tFUk5FTF9MQVJHRV9FWEVDIChfX1BBR0VfS0VSTkVMX0VYRUMgfCBfUEFHRV9QU0UpCisKKyNkZWZpbmUgUEFHRV9LRVJORUwgX19wZ3Byb3QoX19QQUdFX0tFUk5FTCkKKyNkZWZpbmUgUEFHRV9LRVJORUxfUk8gX19wZ3Byb3QoX19QQUdFX0tFUk5FTF9STykKKyNkZWZpbmUgUEFHRV9LRVJORUxfRVhFQyBfX3BncHJvdChfX1BBR0VfS0VSTkVMX0VYRUMpCisjZGVmaW5lIFBBR0VfS0VSTkVMX1JYIF9fcGdwcm90KF9fUEFHRV9LRVJORUxfUlgpCisjZGVmaW5lIFBBR0VfS0VSTkVMX05PQ0FDSEUgX19wZ3Byb3QoX19QQUdFX0tFUk5FTF9OT0NBQ0hFKQorI2RlZmluZSBQQUdFX0tFUk5FTF9MQVJHRSBfX3BncHJvdChfX1BBR0VfS0VSTkVMX0xBUkdFKQorI2RlZmluZSBQQUdFX0tFUk5FTF9MQVJHRV9FWEVDIF9fcGdwcm90KF9fUEFHRV9LRVJORUxfTEFSR0VfRVhFQykKKworI2RlZmluZSBfX1AwMDAgUEFHRV9OT05FCisjZGVmaW5lIF9fUDAwMSBQQUdFX1JFQURPTkxZCisjZGVmaW5lIF9fUDAxMCBQQUdFX0NPUFkKKyNkZWZpbmUgX19QMDExIFBBR0VfQ09QWQorI2RlZmluZSBfX1AxMDAgUEFHRV9SRUFET05MWV9FWEVDCisjZGVmaW5lIF9fUDEwMSBQQUdFX1JFQURPTkxZX0VYRUMKKyNkZWZpbmUgX19QMTEwIFBBR0VfQ09QWV9FWEVDCisjZGVmaW5lIF9fUDExMSBQQUdFX0NPUFlfRVhFQworCisjZGVmaW5lIF9fUzAwMCBQQUdFX05PTkUKKyNkZWZpbmUgX19TMDAxIFBBR0VfUkVBRE9OTFkKKyNkZWZpbmUgX19TMDEwIFBBR0VfU0hBUkVECisjZGVmaW5lIF9fUzAxMSBQQUdFX1NIQVJFRAorI2RlZmluZSBfX1MxMDAgUEFHRV9SRUFET05MWV9FWEVDCisjZGVmaW5lIF9fUzEwMSBQQUdFX1JFQURPTkxZX0VYRUMKKyNkZWZpbmUgX19TMTEwIFBBR0VfU0hBUkVEX0VYRUMKKyNkZWZpbmUgX19TMTExIFBBR0VfU0hBUkVEX0VYRUMKKworI3VuZGVmIFRFU1RfQUNDRVNTX09LCisKKyNkZWZpbmUgcHRlX3ByZXNlbnQoeCkgKCh4KS5wdGVfbG93ICYgKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9QUk9UTk9ORSkpCisKKyNkZWZpbmUgcG1kX25vbmUoeCkgKCEodW5zaWduZWQgbG9uZylwbWRfdmFsKHgpKQorI2RlZmluZSBwbWRfcHJlc2VudCh4KSAocG1kX3ZhbCh4KSAmIF9QQUdFX1BSRVNFTlQpCisjZGVmaW5lIHBtZF9iYWQoeCkgKChwbWRfdmFsKHgpICYgKH5QQUdFX01BU0sgJiB+X1BBR0VfVVNFUikpICE9IF9LRVJOUEdfVEFCTEUpCisKKyNkZWZpbmUgcGFnZXNfdG9fbWIoeCkgKCh4KSA+PiAoMjAtUEFHRV9TSElGVCkpCisKKyNpbmNsdWRlIDxhc20vcGd0YWJsZS0ybGV2ZWwuaD4KKyNkZWZpbmUgcHRlX3VwZGF0ZShtbSwgYWRkciwgcHRlcCkgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBwdGVfdXBkYXRlX2RlZmVyKG1tLCBhZGRyLCBwdGVwKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIF9fSEFWRV9BUkNIX1BURVBfU0VUX0FDQ0VTU19GTEFHUworI2RlZmluZSBwdGVwX3NldF9hY2Nlc3NfZmxhZ3Modm1hLCBhZGRyZXNzLCBwdGVwLCBlbnRyeSwgZGlydHkpICAoeyAgIGludCBfX2NoYW5nZWQgPSAhcHRlX3NhbWUoKihwdGVwKSwgZW50cnkpOyAgIGlmIChfX2NoYW5nZWQgJiYgZGlydHkpIHsgICAocHRlcCktPnB0ZV9sb3cgPSAoZW50cnkpLnB0ZV9sb3c7ICAgcHRlX3VwZGF0ZV9kZWZlcigodm1hKS0+dm1fbW0sIChhZGRyZXNzKSwgKHB0ZXApKTsgICBmbHVzaF90bGJfcGFnZSh2bWEsIGFkZHJlc3MpOyAgIH0gICBfX2NoYW5nZWQ7ICB9KQorI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX1RFU1RfQU5EX0NMRUFSX1lPVU5HCisjZGVmaW5lIHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcodm1hLCBhZGRyLCBwdGVwKSAoeyAgIGludCBfX3JldCA9IDA7ICAgaWYgKHB0ZV95b3VuZygqKHB0ZXApKSkgICBfX3JldCA9IHRlc3RfYW5kX2NsZWFyX2JpdChfUEFHRV9CSVRfQUNDRVNTRUQsICAgJihwdGVwKS0+cHRlX2xvdyk7ICAgaWYgKF9fcmV0KSAgIHB0ZV91cGRhdGUoKHZtYSktPnZtX21tLCBhZGRyLCBwdGVwKTsgICBfX3JldDsgIH0pCisjZGVmaW5lIF9fSEFWRV9BUkNIX1BURVBfQ0xFQVJfWU9VTkdfRkxVU0gKKyNkZWZpbmUgcHRlcF9jbGVhcl9mbHVzaF95b3VuZyh2bWEsIGFkZHJlc3MsIHB0ZXApICAoeyAgIGludCBfX3lvdW5nOyAgIF9feW91bmcgPSBwdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKCh2bWEpLCAoYWRkcmVzcyksIChwdGVwKSk7ICAgaWYgKF9feW91bmcpICAgZmx1c2hfdGxiX3BhZ2Uodm1hLCBhZGRyZXNzKTsgICBfX3lvdW5nOyAgfSkKKyNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9HRVRfQU5EX0NMRUFSCisjZGVmaW5lIF9fSEFWRV9BUkNIX1BURVBfR0VUX0FORF9DTEVBUl9GVUxMCisjZGVmaW5lIF9fSEFWRV9BUkNIX1BURVBfU0VUX1dSUFJPVEVDVAorI2RlZmluZSBwZ3Byb3Rfbm9uY2FjaGVkKHByb3QpICgoYm9vdF9jcHVfZGF0YS54ODYgPiAzKSAgID8gKF9fcGdwcm90KHBncHJvdF92YWwocHJvdCkgfCBfUEFHRV9QQ0QgfCBfUEFHRV9QV1QpKSA6IChwcm90KSkKKyNkZWZpbmUgbWtfcHRlKHBhZ2UsIHBncHJvdCkgcGZuX3B0ZShwYWdlX3RvX3BmbihwYWdlKSwgKHBncHJvdCkpCisjZGVmaW5lIHBtZF9sYXJnZShwbWQpICAoKHBtZF92YWwocG1kKSAmIChfUEFHRV9QU0V8X1BBR0VfUFJFU0VOVCkpID09IChfUEFHRV9QU0V8X1BBR0VfUFJFU0VOVCkpCisjZGVmaW5lIHBnZF9pbmRleChhZGRyZXNzKSAoKChhZGRyZXNzKSA+PiBQR0RJUl9TSElGVCkgJiAoUFRSU19QRVJfUEdELTEpKQorI2RlZmluZSBwZ2RfaW5kZXhfayhhZGRyKSBwZ2RfaW5kZXgoYWRkcikKKyNkZWZpbmUgcGdkX29mZnNldChtbSwgYWRkcmVzcykgKChtbSktPnBnZCtwZ2RfaW5kZXgoYWRkcmVzcykpCisjZGVmaW5lIHBnZF9vZmZzZXRfayhhZGRyZXNzKSBwZ2Rfb2Zmc2V0KCZpbml0X21tLCBhZGRyZXNzKQorI2RlZmluZSBwbWRfaW5kZXgoYWRkcmVzcykgICAoKChhZGRyZXNzKSA+PiBQTURfU0hJRlQpICYgKFBUUlNfUEVSX1BNRC0xKSkKKyNkZWZpbmUgcHRlX2luZGV4KGFkZHJlc3MpICAgKCgoYWRkcmVzcykgPj4gUEFHRV9TSElGVCkgJiAoUFRSU19QRVJfUFRFIC0gMSkpCisjZGVmaW5lIHB0ZV9vZmZzZXRfa2VybmVsKGRpciwgYWRkcmVzcykgICAoKHB0ZV90ICopIHBtZF9wYWdlX3ZhZGRyKCooZGlyKSkgKyBwdGVfaW5kZXgoYWRkcmVzcykpCisjZGVmaW5lIHBtZF9wYWdlKHBtZCkgKHBmbl90b19wYWdlKHBtZF92YWwocG1kKSA+PiBQQUdFX1NISUZUKSkKKyNkZWZpbmUgcG1kX3BhZ2VfdmFkZHIocG1kKSAgICgodW5zaWduZWQgbG9uZykgX192YShwbWRfdmFsKHBtZCkgJiBQQUdFX01BU0spKQorCisgI2RlZmluZSBwdGVfb2Zmc2V0X21hcChkaXIsIGFkZHJlc3MpICAgKChwdGVfdCAqKXBhZ2VfYWRkcmVzcyhwbWRfcGFnZSgqKGRpcikpKSArIHB0ZV9pbmRleChhZGRyZXNzKSkKKyNkZWZpbmUgcHRlX29mZnNldF9tYXBfbmVzdGVkKGRpciwgYWRkcmVzcykgcHRlX29mZnNldF9tYXAoZGlyLCBhZGRyZXNzKQorI2RlZmluZSBwdGVfdW5tYXAocHRlKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHB0ZV91bm1hcF9uZXN0ZWQocHRlKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGtwdGVfY2xlYXJfZmx1c2gocHRlcCwgdmFkZHIpICBkbyB7ICAgcHRlX2NsZWFyKCZpbml0X21tLCB2YWRkciwgcHRlcCk7ICAgX19mbHVzaF90bGJfb25lKHZhZGRyKTsgIH0gd2hpbGUgKDApCisjZGVmaW5lIHVwZGF0ZV9tbXVfY2FjaGUodm1hLGFkZHJlc3MscHRlKSBkbyB7IH0gd2hpbGUgKDApCisKKyNlbmRpZgorI2RlZmluZSBpb19yZW1hcF9wZm5fcmFuZ2Uodm1hLCB2YWRkciwgcGZuLCBzaXplLCBwcm90KSAgIHJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCBwZm4sIHNpemUsIHByb3QpCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGd0YWJsZS5oPgorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vcG9sbC5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3BvbGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjE2NjczCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3BvbGwuaApAQCAtMCwwICsxLDEyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcG9sbC5oPgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3Bvc2l4X3R5cGVzLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vcG9zaXhfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWJiNDkwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3Bvc2l4X3R5cGVzLmgKQEAgLTAsMCArMSwxNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmZGVmIF9faTM4Nl9fCisjaW5jbHVkZSAicG9zaXhfdHlwZXNfMzIuaCIKKyNlbHNlCisjaW5jbHVkZSAicG9zaXhfdHlwZXNfNjQuaCIKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3Bvc2l4X3R5cGVzXzMyLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vcG9zaXhfdHlwZXNfMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2E4YjY5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3Bvc2l4X3R5cGVzXzMyLmgKQEAgLTAsMCArMSw3MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FSQ0hfSTM4Nl9QT1NJWF9UWVBFU19ICisjZGVmaW5lIF9fQVJDSF9JMzg2X1BPU0lYX1RZUEVTX0gKKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIF9fa2VybmVsX2lub190OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX2tlcm5lbF9tb2RlX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fa2VybmVsX25saW5rX3Q7Cit0eXBlZGVmIGxvbmcgX19rZXJuZWxfb2ZmX3Q7Cit0eXBlZGVmIGludCBfX2tlcm5lbF9waWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgX19rZXJuZWxfaXBjX3BpZF90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX2tlcm5lbF91aWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgX19rZXJuZWxfZ2lkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludCBfX2tlcm5lbF9zaXplX3Q7Cit0eXBlZGVmIGludCBfX2tlcm5lbF9zc2l6ZV90OwordHlwZWRlZiBpbnQgX19rZXJuZWxfcHRyZGlmZl90OwordHlwZWRlZiBsb25nIF9fa2VybmVsX3RpbWVfdDsKK3R5cGVkZWYgbG9uZyBfX2tlcm5lbF9zdXNlY29uZHNfdDsKK3R5cGVkZWYgbG9uZyBfX2tlcm5lbF9jbG9ja190OwordHlwZWRlZiBpbnQgX19rZXJuZWxfdGltZXJfdDsKK3R5cGVkZWYgaW50IF9fa2VybmVsX2Nsb2NraWRfdDsKK3R5cGVkZWYgaW50IF9fa2VybmVsX2RhZGRyX3Q7Cit0eXBlZGVmIGNoYXIgKiBfX2tlcm5lbF9jYWRkcl90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX2tlcm5lbF91aWQxNl90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX2tlcm5lbF9naWQxNl90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgX19rZXJuZWxfdWlkMzJfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50IF9fa2VybmVsX2dpZDMyX3Q7CisKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgX19rZXJuZWxfb2xkX3VpZF90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX2tlcm5lbF9vbGRfZ2lkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fa2VybmVsX29sZF9kZXZfdDsKKworI2lmZGVmIF9fR05VQ19fCit0eXBlZGVmIGxvbmcgbG9uZyBfX2tlcm5lbF9sb2ZmX3Q7CisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgeworI2lmZGVmIF9fVVNFX0FMTAorIGludCB2YWxbMl07CisjZWxzZQorIGludCBfX3ZhbFsyXTsKKyNlbmRpZgorfSBfX2tlcm5lbF9mc2lkX3Q7CisKKyNpZiAhZGVmaW5lZChfX0dMSUJDX18pIHx8IF9fR0xJQkNfXyA8IDIKKworI3VuZGVmIF9fRkRfU0VUCisjZGVmaW5lIF9fRkRfU0VUKGZkLGZkc2V0cCkgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiYnRzbCAlMSwlMCI6ICAgIittIiAoKihfX2tlcm5lbF9mZF9zZXQgKikgKGZkc2V0cCkpOiJyIiAoKGludCkgKGZkKSkpCisKKyN1bmRlZiBfX0ZEX0NMUgorI2RlZmluZSBfX0ZEX0NMUihmZCxmZHNldHApICAgX19hc21fXyBfX3ZvbGF0aWxlX18oImJ0cmwgJTEsJTAiOiAgICIrbSIgKCooX19rZXJuZWxfZmRfc2V0ICopIChmZHNldHApKToiciIgKChpbnQpIChmZCkpKQorCisjdW5kZWYgX19GRF9JU1NFVAorI2RlZmluZSBfX0ZEX0lTU0VUKGZkLGZkc2V0cCkgKF9fZXh0ZW5zaW9uX18gKHsgICB1bnNpZ25lZCBjaGFyIF9fcmVzdWx0OyAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJidGwgJTEsJTIgOyBzZXRiICUwIiAgIDoiPXEiIChfX3Jlc3VsdCkgOiJyIiAoKGludCkgKGZkKSksICAgIm0iICgqKF9fa2VybmVsX2ZkX3NldCAqKSAoZmRzZXRwKSkpOyAgIF9fcmVzdWx0OyB9KSkKKworI3VuZGVmIF9fRkRfWkVSTworI2RlZmluZSBfX0ZEX1pFUk8oZmRzZXRwKSAgZG8geyAgIGludCBfX2QwLCBfX2QxOyAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJjbGQgOyByZXAgOyBzdG9zbCIgICA6Ij1tIiAoKihfX2tlcm5lbF9mZF9zZXQgKikgKGZkc2V0cCkpLCAgICI9JmMiIChfX2QwKSwgIj0mRCIgKF9fZDEpICAgOiJhIiAoMCksICIxIiAoX19GRFNFVF9MT05HUyksICAgIjIiICgoX19rZXJuZWxfZmRfc2V0ICopIChmZHNldHApKSA6ICJtZW1vcnkiKTsgIH0gd2hpbGUgKDApCisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9wcmN0bC5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3ByY3RsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg1MmNhNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9wcmN0bC5oCkBAIC0wLDAgKzEsMjAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgWDg2XzY0X1BSQ1RMX0gKKyNkZWZpbmUgWDg2XzY0X1BSQ1RMX0ggMQorCisjZGVmaW5lIEFSQ0hfU0VUX0dTIDB4MTAwMQorI2RlZmluZSBBUkNIX1NFVF9GUyAweDEwMDIKKyNkZWZpbmUgQVJDSF9HRVRfRlMgMHgxMDAzCisjZGVmaW5lIEFSQ0hfR0VUX0dTIDB4MTAwNAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9wcm9jZXNzb3ItZmxhZ3MuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9wcm9jZXNzb3ItZmxhZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWU4ZjdkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3Byb2Nlc3Nvci1mbGFncy5oCkBAIC0wLDAgKzEsNzkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19BU01fSTM4Nl9QUk9DRVNTT1JfRkxBR1NfSAorI2RlZmluZSBfX0FTTV9JMzg2X1BST0NFU1NPUl9GTEFHU19ICisKKyNkZWZpbmUgWDg2X0VGTEFHU19DRiAweDAwMDAwMDAxICAKKyNkZWZpbmUgWDg2X0VGTEFHU19QRiAweDAwMDAwMDA0ICAKKyNkZWZpbmUgWDg2X0VGTEFHU19BRiAweDAwMDAwMDEwICAKKyNkZWZpbmUgWDg2X0VGTEFHU19aRiAweDAwMDAwMDQwICAKKyNkZWZpbmUgWDg2X0VGTEFHU19TRiAweDAwMDAwMDgwICAKKyNkZWZpbmUgWDg2X0VGTEFHU19URiAweDAwMDAwMTAwICAKKyNkZWZpbmUgWDg2X0VGTEFHU19JRiAweDAwMDAwMjAwICAKKyNkZWZpbmUgWDg2X0VGTEFHU19ERiAweDAwMDAwNDAwICAKKyNkZWZpbmUgWDg2X0VGTEFHU19PRiAweDAwMDAwODAwICAKKyNkZWZpbmUgWDg2X0VGTEFHU19JT1BMIDB4MDAwMDMwMDAgIAorI2RlZmluZSBYODZfRUZMQUdTX05UIDB4MDAwMDQwMDAgIAorI2RlZmluZSBYODZfRUZMQUdTX1JGIDB4MDAwMTAwMDAgIAorI2RlZmluZSBYODZfRUZMQUdTX1ZNIDB4MDAwMjAwMDAgIAorI2RlZmluZSBYODZfRUZMQUdTX0FDIDB4MDAwNDAwMDAgIAorI2RlZmluZSBYODZfRUZMQUdTX1ZJRiAweDAwMDgwMDAwICAKKyNkZWZpbmUgWDg2X0VGTEFHU19WSVAgMHgwMDEwMDAwMCAgCisjZGVmaW5lIFg4Nl9FRkxBR1NfSUQgMHgwMDIwMDAwMCAgCisKKyNkZWZpbmUgWDg2X0NSMF9QRSAweDAwMDAwMDAxICAKKyNkZWZpbmUgWDg2X0NSMF9NUCAweDAwMDAwMDAyICAKKyNkZWZpbmUgWDg2X0NSMF9FTSAweDAwMDAwMDA0ICAKKyNkZWZpbmUgWDg2X0NSMF9UUyAweDAwMDAwMDA4ICAKKyNkZWZpbmUgWDg2X0NSMF9FVCAweDAwMDAwMDEwICAKKyNkZWZpbmUgWDg2X0NSMF9ORSAweDAwMDAwMDIwICAKKyNkZWZpbmUgWDg2X0NSMF9XUCAweDAwMDEwMDAwICAKKyNkZWZpbmUgWDg2X0NSMF9BTSAweDAwMDQwMDAwICAKKyNkZWZpbmUgWDg2X0NSMF9OVyAweDIwMDAwMDAwICAKKyNkZWZpbmUgWDg2X0NSMF9DRCAweDQwMDAwMDAwICAKKyNkZWZpbmUgWDg2X0NSMF9QRyAweDgwMDAwMDAwICAKKworI2RlZmluZSBYODZfQ1IzX1BXVCAweDAwMDAwMDA4ICAKKyNkZWZpbmUgWDg2X0NSM19QQ0QgMHgwMDAwMDAxMCAgCisKKyNkZWZpbmUgWDg2X0NSNF9WTUUgMHgwMDAwMDAwMSAgCisjZGVmaW5lIFg4Nl9DUjRfUFZJIDB4MDAwMDAwMDIgIAorI2RlZmluZSBYODZfQ1I0X1RTRCAweDAwMDAwMDA0ICAKKyNkZWZpbmUgWDg2X0NSNF9ERSAweDAwMDAwMDA4ICAKKyNkZWZpbmUgWDg2X0NSNF9QU0UgMHgwMDAwMDAxMCAgCisjZGVmaW5lIFg4Nl9DUjRfUEFFIDB4MDAwMDAwMjAgIAorI2RlZmluZSBYODZfQ1I0X01DRSAweDAwMDAwMDQwICAKKyNkZWZpbmUgWDg2X0NSNF9QR0UgMHgwMDAwMDA4MCAgCisjZGVmaW5lIFg4Nl9DUjRfUENFIDB4MDAwMDAxMDAgIAorI2RlZmluZSBYODZfQ1I0X09TRlhTUiAweDAwMDAwMjAwICAKKyNkZWZpbmUgWDg2X0NSNF9PU1hNTUVYQ1BUIDB4MDAwMDA0MDAgIAorI2RlZmluZSBYODZfQ1I0X1ZNWEUgMHgwMDAwMjAwMCAgCisKKyNkZWZpbmUgWDg2X0NSOF9UUFIgMHgwMDAwMDAwRiAgCisKKyNkZWZpbmUgQ1g4Nl9QQ1IwIDB4MjAKKyNkZWZpbmUgQ1g4Nl9HQ1IgMHhiOAorI2RlZmluZSBDWDg2X0NDUjAgMHhjMAorI2RlZmluZSBDWDg2X0NDUjEgMHhjMQorI2RlZmluZSBDWDg2X0NDUjIgMHhjMgorI2RlZmluZSBDWDg2X0NDUjMgMHhjMworI2RlZmluZSBDWDg2X0NDUjQgMHhlOAorI2RlZmluZSBDWDg2X0NDUjUgMHhlOQorI2RlZmluZSBDWDg2X0NDUjYgMHhlYQorI2RlZmluZSBDWDg2X0NDUjcgMHhlYgorI2RlZmluZSBDWDg2X1BDUjEgMHhmMAorI2RlZmluZSBDWDg2X0RJUjAgMHhmZQorI2RlZmluZSBDWDg2X0RJUjEgMHhmZgorI2RlZmluZSBDWDg2X0FSUl9CQVNFIDB4YzQKKyNkZWZpbmUgQ1g4Nl9SQ1JfQkFTRSAweGRjCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3Byb2Nlc3Nvci5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3Byb2Nlc3Nvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkNDc3NDkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vcHJvY2Vzc29yLmgKQEAgLTAsMCArMSwxMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgInByb2Nlc3Nvcl82NC5oIgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3Byb2Nlc3Nvcl8zMi5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3Byb2Nlc3Nvcl8zMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzOWVkZDEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vcHJvY2Vzc29yXzMyLmgKQEAgLTAsMCArMSwzMjQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19BU01fSTM4Nl9QUk9DRVNTT1JfSAorI2RlZmluZSBfX0FTTV9JMzg2X1BST0NFU1NPUl9ICisKKyNpbmNsdWRlIDxhc20vdm04Ni5oPgorI2luY2x1ZGUgPGFzbS9tYXRoX2VtdS5oPgorI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vc2lnY29udGV4dC5oPgorI2luY2x1ZGUgPGFzbS9jcHVmZWF0dXJlLmg+CisjaW5jbHVkZSA8YXNtL21zci5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgorI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKyNpbmNsdWRlIDxhc20vcGVyY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLWZsYWdzLmg+CisKK3N0cnVjdCBkZXNjX3N0cnVjdCB7CisgdW5zaWduZWQgbG9uZyBhLGI7Cit9OworCisjZGVmaW5lIGRlc2NfZW1wdHkoZGVzYykgICAoISgoZGVzYyktPmEgfCAoZGVzYyktPmIpKQorCisjZGVmaW5lIGRlc2NfZXF1YWwoZGVzYzEsIGRlc2MyKSAgICgoKGRlc2MxKS0+YSA9PSAoZGVzYzIpLT5hKSAmJiAoKGRlc2MxKS0+YiA9PSAoZGVzYzIpLT5iKSkKKworI2RlZmluZSBjdXJyZW50X3RleHRfYWRkcigpICh7IHZvaWQgKnBjOyBfX2FzbV9fKCJtb3ZsICQxZiwlMFxuMToiOiI9ZyIgKHBjKSk7IHBjOyB9KQorCitzdHJ1Y3QgY3B1aW5mb194ODYgeworIF9fdTggeDg2OworIF9fdTggeDg2X3ZlbmRvcjsKKyBfX3U4IHg4Nl9tb2RlbDsKKyBfX3U4IHg4Nl9tYXNrOworIGNoYXIgd3Bfd29ya3Nfb2s7CisgY2hhciBobHRfd29ya3Nfb2s7CisgY2hhciBoYXJkX21hdGg7CisgY2hhciByZnU7CisgaW50IGNwdWlkX2xldmVsOworIHVuc2lnbmVkIGxvbmcgeDg2X2NhcGFiaWxpdHlbTkNBUElOVFNdOworIGNoYXIgeDg2X3ZlbmRvcl9pZFsxNl07CisgY2hhciB4ODZfbW9kZWxfaWRbNjRdOworIGludCB4ODZfY2FjaGVfc2l6ZTsKKyBpbnQgeDg2X2NhY2hlX2FsaWdubWVudDsKKyBjaGFyIGZkaXZfYnVnOworIGNoYXIgZjAwZl9idWc7CisgY2hhciBjb21hX2J1ZzsKKyBjaGFyIHBhZDA7CisgaW50IHg4Nl9wb3dlcjsKKyB1bnNpZ25lZCBsb25nIGxvb3BzX3Blcl9qaWZmeTsKKyB1bnNpZ25lZCBjaGFyIHg4Nl9tYXhfY29yZXM7CisgdW5zaWduZWQgY2hhciBhcGljaWQ7CisgdW5zaWduZWQgc2hvcnQgeDg2X2NsZmx1c2hfc2l6ZTsKK30gX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oU01QX0NBQ0hFX0JZVEVTKSkpOworCisjZGVmaW5lIFg4Nl9WRU5ET1JfSU5URUwgMAorI2RlZmluZSBYODZfVkVORE9SX0NZUklYIDEKKyNkZWZpbmUgWDg2X1ZFTkRPUl9BTUQgMgorI2RlZmluZSBYODZfVkVORE9SX1VNQyAzCisjZGVmaW5lIFg4Nl9WRU5ET1JfTkVYR0VOIDQKKyNkZWZpbmUgWDg2X1ZFTkRPUl9DRU5UQVVSIDUKKyNkZWZpbmUgWDg2X1ZFTkRPUl9UUkFOU01FVEEgNworI2RlZmluZSBYODZfVkVORE9SX05TQyA4CisjZGVmaW5lIFg4Nl9WRU5ET1JfTlVNIDkKKyNkZWZpbmUgWDg2X1ZFTkRPUl9VTktOT1dOIDB4ZmYKKworI2RlZmluZSBjcHVfZGF0YShjcHUpIGJvb3RfY3B1X2RhdGEKKyNkZWZpbmUgY3VycmVudF9jcHVfZGF0YSBib290X2NwdV9kYXRhCisKKyNkZWZpbmUgbG9hZF9jcjMocGdkaXIpIHdyaXRlX2NyMyhfX3BhKHBnZGlyKSkKKworI2RlZmluZSBUQVNLX1NJWkUgKFBBR0VfT0ZGU0VUKQorCisjZGVmaW5lIFRBU0tfVU5NQVBQRURfQkFTRSAoUEFHRV9BTElHTihUQVNLX1NJWkUgLyAzKSkKKworI2RlZmluZSBIQVZFX0FSQ0hfUElDS19NTUFQX0xBWU9VVAorCisjZGVmaW5lIElPX0JJVE1BUF9CSVRTIDY1NTM2CisjZGVmaW5lIElPX0JJVE1BUF9CWVRFUyAoSU9fQklUTUFQX0JJVFMvOCkKKyNkZWZpbmUgSU9fQklUTUFQX0xPTkdTIChJT19CSVRNQVBfQllURVMvc2l6ZW9mKGxvbmcpKQorI2RlZmluZSBJT19CSVRNQVBfT0ZGU0VUIG9mZnNldG9mKHN0cnVjdCB0c3Nfc3RydWN0LGlvX2JpdG1hcCkKKyNkZWZpbmUgSU5WQUxJRF9JT19CSVRNQVBfT0ZGU0VUIDB4ODAwMAorI2RlZmluZSBJTlZBTElEX0lPX0JJVE1BUF9PRkZTRVRfTEFaWSAweDkwMDAKKworc3RydWN0IGkzODdfZnNhdmVfc3RydWN0IHsKKyBsb25nIGN3ZDsKKyBsb25nIHN3ZDsKKyBsb25nIHR3ZDsKKyBsb25nIGZpcDsKKyBsb25nIGZjczsKKyBsb25nIGZvbzsKKyBsb25nIGZvczsKKyBsb25nIHN0X3NwYWNlWzIwXTsKKyBsb25nIHN0YXR1czsKK307CisKK3N0cnVjdCBpMzg3X2Z4c2F2ZV9zdHJ1Y3QgeworIHVuc2lnbmVkIHNob3J0IGN3ZDsKKyB1bnNpZ25lZCBzaG9ydCBzd2Q7CisgdW5zaWduZWQgc2hvcnQgdHdkOworIHVuc2lnbmVkIHNob3J0IGZvcDsKKyBsb25nIGZpcDsKKyBsb25nIGZjczsKKyBsb25nIGZvbzsKKyBsb25nIGZvczsKKyBsb25nIG14Y3NyOworIGxvbmcgbXhjc3JfbWFzazsKKyBsb25nIHN0X3NwYWNlWzMyXTsKKyBsb25nIHhtbV9zcGFjZVszMl07CisgbG9uZyBwYWRkaW5nWzU2XTsKK30gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDE2KSkpOworCitzdHJ1Y3QgaTM4N19zb2Z0X3N0cnVjdCB7CisgbG9uZyBjd2Q7CisgbG9uZyBzd2Q7CisgbG9uZyB0d2Q7CisgbG9uZyBmaXA7CisgbG9uZyBmY3M7CisgbG9uZyBmb287CisgbG9uZyBmb3M7CisgbG9uZyBzdF9zcGFjZVsyMF07CisgdW5zaWduZWQgY2hhciBmdG9wLCBjaGFuZ2VkLCBsb29rYWhlYWQsIG5vX3VwZGF0ZSwgcm0sIGFsaW1pdDsKKyBzdHJ1Y3QgaW5mbyAqaW5mbzsKKyB1bnNpZ25lZCBsb25nIGVudHJ5X2VpcDsKK307CisKK3VuaW9uIGkzODdfdW5pb24geworIHN0cnVjdCBpMzg3X2ZzYXZlX3N0cnVjdCBmc2F2ZTsKKyBzdHJ1Y3QgaTM4N19meHNhdmVfc3RydWN0IGZ4c2F2ZTsKKyBzdHJ1Y3QgaTM4N19zb2Z0X3N0cnVjdCBzb2Z0OworfTsKKwordHlwZWRlZiBzdHJ1Y3QgeworIHVuc2lnbmVkIGxvbmcgc2VnOworfSBtbV9zZWdtZW50X3Q7CisKK3N0cnVjdCB0aHJlYWRfc3RydWN0OworCitzdHJ1Y3QgaTM4Nl9od190c3MgeworIHVuc2lnbmVkIHNob3J0IGJhY2tfbGluayxfX2JsaDsKKyB1bnNpZ25lZCBsb25nIGVzcDA7CisgdW5zaWduZWQgc2hvcnQgc3MwLF9fc3MwaDsKKyB1bnNpZ25lZCBsb25nIGVzcDE7CisgdW5zaWduZWQgc2hvcnQgc3MxLF9fc3MxaDsKKyB1bnNpZ25lZCBsb25nIGVzcDI7CisgdW5zaWduZWQgc2hvcnQgc3MyLF9fc3MyaDsKKyB1bnNpZ25lZCBsb25nIF9fY3IzOworIHVuc2lnbmVkIGxvbmcgZWlwOworIHVuc2lnbmVkIGxvbmcgZWZsYWdzOworIHVuc2lnbmVkIGxvbmcgZWF4LGVjeCxlZHgsZWJ4OworIHVuc2lnbmVkIGxvbmcgZXNwOworIHVuc2lnbmVkIGxvbmcgZWJwOworIHVuc2lnbmVkIGxvbmcgZXNpOworIHVuc2lnbmVkIGxvbmcgZWRpOworIHVuc2lnbmVkIHNob3J0IGVzLCBfX2VzaDsKKyB1bnNpZ25lZCBzaG9ydCBjcywgX19jc2g7CisgdW5zaWduZWQgc2hvcnQgc3MsIF9fc3NoOworIHVuc2lnbmVkIHNob3J0IGRzLCBfX2RzaDsKKyB1bnNpZ25lZCBzaG9ydCBmcywgX19mc2g7CisgdW5zaWduZWQgc2hvcnQgZ3MsIF9fZ3NoOworIHVuc2lnbmVkIHNob3J0IGxkdCwgX19sZHRoOworIHVuc2lnbmVkIHNob3J0IHRyYWNlLCBpb19iaXRtYXBfYmFzZTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCB0c3Nfc3RydWN0IHsKKyBzdHJ1Y3QgaTM4Nl9od190c3MgeDg2X3RzczsKKworIHVuc2lnbmVkIGxvbmcgaW9fYml0bWFwW0lPX0JJVE1BUF9MT05HUyArIDFdOworCisgdW5zaWduZWQgbG9uZyBpb19iaXRtYXBfbWF4OworIHN0cnVjdCB0aHJlYWRfc3RydWN0ICppb19iaXRtYXBfb3duZXI7CisKKyB1bnNpZ25lZCBsb25nIF9fY2FjaGVsaW5lX2ZpbGxlclszNV07CisKKyB1bnNpZ25lZCBsb25nIHN0YWNrWzY0XTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgQVJDSF9NSU5fVEFTS0FMSUdOIDE2CisKK3N0cnVjdCB0aHJlYWRfc3RydWN0IHsKKworIHN0cnVjdCBkZXNjX3N0cnVjdCB0bHNfYXJyYXlbR0RUX0VOVFJZX1RMU19FTlRSSUVTXTsKKyB1bnNpZ25lZCBsb25nIGVzcDA7CisgdW5zaWduZWQgbG9uZyBzeXNlbnRlcl9jczsKKyB1bnNpZ25lZCBsb25nIGVpcDsKKyB1bnNpZ25lZCBsb25nIGVzcDsKKyB1bnNpZ25lZCBsb25nIGZzOworIHVuc2lnbmVkIGxvbmcgZ3M7CisKKyB1bnNpZ25lZCBsb25nIGRlYnVncmVnWzhdOworCisgdW5zaWduZWQgbG9uZyBjcjIsIHRyYXBfbm8sIGVycm9yX2NvZGU7CisKKyB1bmlvbiBpMzg3X3VuaW9uIGkzODc7CisKKyBzdHJ1Y3Qgdm04Nl9zdHJ1Y3QgX191c2VyICogdm04Nl9pbmZvOworIHVuc2lnbmVkIGxvbmcgc2NyZWVuX2JpdG1hcDsKKyB1bnNpZ25lZCBsb25nIHY4NmZsYWdzLCB2ODZtYXNrLCBzYXZlZF9lc3AwOworIHVuc2lnbmVkIGludCBzYXZlZF9mcywgc2F2ZWRfZ3M7CisKKyB1bnNpZ25lZCBsb25nICppb19iaXRtYXBfcHRyOworIHVuc2lnbmVkIGxvbmcgaW9wbDsKKworIHVuc2lnbmVkIGxvbmcgaW9fYml0bWFwX21heDsKK307CisKKyNkZWZpbmUgSU5JVF9USFJFQUQgeyAgIC5lc3AwID0gc2l6ZW9mKGluaXRfc3RhY2spICsgKGxvbmcpJmluaXRfc3RhY2ssICAgLnZtODZfaW5mbyA9IE5VTEwsICAgLnN5c2VudGVyX2NzID0gX19LRVJORUxfQ1MsICAgLmlvX2JpdG1hcF9wdHIgPSBOVUxMLCAgIC5mcyA9IF9fS0VSTkVMX1BFUkNQVSwgIH0KKworI2RlZmluZSBJTklUX1RTUyB7ICAgLng4Nl90c3MgPSB7ICAgLmVzcDAgPSBzaXplb2YoaW5pdF9zdGFjaykgKyAobG9uZykmaW5pdF9zdGFjaywgICAuc3MwID0gX19LRVJORUxfRFMsICAgLnNzMSA9IF9fS0VSTkVMX0NTLCAgIC5pb19iaXRtYXBfYmFzZSA9IElOVkFMSURfSU9fQklUTUFQX09GRlNFVCwgICB9LCAgIC5pb19iaXRtYXAgPSB7IFsgMCAuLi4gSU9fQklUTUFQX0xPTkdTXSA9IH4wIH0sICB9CisKKyNkZWZpbmUgc3RhcnRfdGhyZWFkKHJlZ3MsIG5ld19laXAsIG5ld19lc3ApIGRvIHsgICBfX2FzbV9fKCJtb3ZsICUwLCUlZ3MiOiA6InIiICgwKSk7ICAgcmVncy0+eGZzID0gMDsgICBzZXRfZnMoVVNFUl9EUyk7ICAgcmVncy0+eGRzID0gX19VU0VSX0RTOyAgIHJlZ3MtPnhlcyA9IF9fVVNFUl9EUzsgICByZWdzLT54c3MgPSBfX1VTRVJfRFM7ICAgcmVncy0+eGNzID0gX19VU0VSX0NTOyAgIHJlZ3MtPmVpcCA9IG5ld19laXA7ICAgcmVncy0+ZXNwID0gbmV3X2VzcDsgIH0gd2hpbGUgKDApCisKK3N0cnVjdCB0YXNrX3N0cnVjdDsKK3N0cnVjdCBtbV9zdHJ1Y3Q7CisKKyNkZWZpbmUgVEhSRUFEX1NJWkVfTE9OR1MgKFRIUkVBRF9TSVpFL3NpemVvZih1bnNpZ25lZCBsb25nKSkKKyNkZWZpbmUgS1NUS19UT1AoaW5mbykgICh7ICAgdW5zaWduZWQgbG9uZyAqX19wdHIgPSAodW5zaWduZWQgbG9uZyAqKShpbmZvKTsgICAodW5zaWduZWQgbG9uZykoJl9fcHRyW1RIUkVBRF9TSVpFX0xPTkdTXSk7ICB9KQorCisjZGVmaW5lIHRhc2tfcHRfcmVncyh0YXNrKSAgKHsgICBzdHJ1Y3QgcHRfcmVncyAqX19yZWdzX187ICAgX19yZWdzX18gPSAoc3RydWN0IHB0X3JlZ3MgKikoS1NUS19UT1AodGFza19zdGFja19wYWdlKHRhc2spKS04KTsgICBfX3JlZ3NfXyAtIDE7ICB9KQorCisjZGVmaW5lIEtTVEtfRUlQKHRhc2spICh0YXNrX3B0X3JlZ3ModGFzayktPmVpcCkKKyNkZWZpbmUgS1NUS19FU1AodGFzaykgKHRhc2tfcHRfcmVncyh0YXNrKS0+ZXNwKQorCitzdHJ1Y3QgbWljcm9jb2RlX2hlYWRlciB7CisgdW5zaWduZWQgaW50IGhkcnZlcjsKKyB1bnNpZ25lZCBpbnQgcmV2OworIHVuc2lnbmVkIGludCBkYXRlOworIHVuc2lnbmVkIGludCBzaWc7CisgdW5zaWduZWQgaW50IGNrc3VtOworIHVuc2lnbmVkIGludCBsZHJ2ZXI7CisgdW5zaWduZWQgaW50IHBmOworIHVuc2lnbmVkIGludCBkYXRhc2l6ZTsKKyB1bnNpZ25lZCBpbnQgdG90YWxzaXplOworIHVuc2lnbmVkIGludCByZXNlcnZlZFszXTsKK307CisKK3N0cnVjdCBtaWNyb2NvZGUgeworIHN0cnVjdCBtaWNyb2NvZGVfaGVhZGVyIGhkcjsKKyB1bnNpZ25lZCBpbnQgYml0c1swXTsKK307CisKK3R5cGVkZWYgc3RydWN0IG1pY3JvY29kZSBtaWNyb2NvZGVfdDsKK3R5cGVkZWYgc3RydWN0IG1pY3JvY29kZV9oZWFkZXIgbWljcm9jb2RlX2hlYWRlcl90OworCitzdHJ1Y3QgZXh0ZW5kZWRfc2lnbmF0dXJlIHsKKyB1bnNpZ25lZCBpbnQgc2lnOworIHVuc2lnbmVkIGludCBwZjsKKyB1bnNpZ25lZCBpbnQgY2tzdW07Cit9OworCitzdHJ1Y3QgZXh0ZW5kZWRfc2lndGFibGUgeworIHVuc2lnbmVkIGludCBjb3VudDsKKyB1bnNpZ25lZCBpbnQgY2tzdW07CisgdW5zaWduZWQgaW50IHJlc2VydmVkWzNdOworIHN0cnVjdCBleHRlbmRlZF9zaWduYXR1cmUgc2lnc1swXTsKK307CisKKyNkZWZpbmUgY3B1X3JlbGF4KCkgcmVwX25vcCgpCisjZGVmaW5lIHBhcmF2aXJ0X2VuYWJsZWQoKSAwCisjZGVmaW5lIF9fY3B1aWQgbmF0aXZlX2NwdWlkCisjZGVmaW5lIGdldF9kZWJ1Z3JlZyh2YXIsIHJlZ2lzdGVyKSAgICh2YXIpID0gbmF0aXZlX2dldF9kZWJ1Z3JlZyhyZWdpc3RlcikKKyNkZWZpbmUgc2V0X2RlYnVncmVnKHZhbHVlLCByZWdpc3RlcikgICBuYXRpdmVfc2V0X2RlYnVncmVnKHJlZ2lzdGVyLCB2YWx1ZSkKKyNkZWZpbmUgc2V0X2lvcGxfbWFzayBuYXRpdmVfc2V0X2lvcGxfbWFzaworI2RlZmluZSBHRU5FUklDX05PUDEgIi5ieXRlIDB4OTBcbiIKKyNkZWZpbmUgR0VORVJJQ19OT1AyICIuYnl0ZSAweDg5LDB4ZjZcbiIKKyNkZWZpbmUgR0VORVJJQ19OT1AzICIuYnl0ZSAweDhkLDB4NzYsMHgwMFxuIgorI2RlZmluZSBHRU5FUklDX05PUDQgIi5ieXRlIDB4OGQsMHg3NCwweDI2LDB4MDBcbiIKKyNkZWZpbmUgR0VORVJJQ19OT1A1IEdFTkVSSUNfTk9QMSBHRU5FUklDX05PUDQKKyNkZWZpbmUgR0VORVJJQ19OT1A2ICIuYnl0ZSAweDhkLDB4YjYsMHgwMCwweDAwLDB4MDAsMHgwMFxuIgorI2RlZmluZSBHRU5FUklDX05PUDcgIi5ieXRlIDB4OGQsMHhiNCwweDI2LDB4MDAsMHgwMCwweDAwLDB4MDBcbiIKKyNkZWZpbmUgR0VORVJJQ19OT1A4IEdFTkVSSUNfTk9QMSBHRU5FUklDX05PUDcKKyNkZWZpbmUgSzhfTk9QMSBHRU5FUklDX05PUDEKKyNkZWZpbmUgSzhfTk9QMiAiLmJ5dGUgMHg2NiwweDkwXG4iIAorI2RlZmluZSBLOF9OT1AzICIuYnl0ZSAweDY2LDB4NjYsMHg5MFxuIiAKKyNkZWZpbmUgSzhfTk9QNCAiLmJ5dGUgMHg2NiwweDY2LDB4NjYsMHg5MFxuIiAKKyNkZWZpbmUgSzhfTk9QNSBLOF9OT1AzIEs4X05PUDIgCisjZGVmaW5lIEs4X05PUDYgSzhfTk9QMyBLOF9OT1AzCisjZGVmaW5lIEs4X05PUDcgSzhfTk9QNCBLOF9OT1AzCisjZGVmaW5lIEs4X05PUDggSzhfTk9QNCBLOF9OT1A0CisjZGVmaW5lIEs3X05PUDEgR0VORVJJQ19OT1AxCisjZGVmaW5lIEs3X05PUDIgIi5ieXRlIDB4OGIsMHhjMFxuIiAKKyNkZWZpbmUgSzdfTk9QMyAiLmJ5dGUgMHg4ZCwweDA0LDB4MjBcbiIKKyNkZWZpbmUgSzdfTk9QNCAiLmJ5dGUgMHg4ZCwweDQ0LDB4MjAsMHgwMFxuIgorI2RlZmluZSBLN19OT1A1IEs3X05PUDQgQVNNX05PUDEKKyNkZWZpbmUgSzdfTk9QNiAiLmJ5dGUgMHg4ZCwweDgwLDAsMCwwLDBcbiIKKyNkZWZpbmUgSzdfTk9QNyAiLmJ5dGUgMHg4RCwweDA0LDB4MDUsMCwwLDAsMFxuIgorI2RlZmluZSBLN19OT1A4IEs3X05PUDcgQVNNX05PUDEKKyNkZWZpbmUgUDZfTk9QMSBHRU5FUklDX05PUDEKKyNkZWZpbmUgUDZfTk9QMiAiLmJ5dGUgMHg2NiwweDkwXG4iCisjZGVmaW5lIFA2X05PUDMgIi5ieXRlIDB4MGYsMHgxZiwweDAwXG4iCisjZGVmaW5lIFA2X05PUDQgIi5ieXRlIDB4MGYsMHgxZiwweDQwLDBcbiIKKyNkZWZpbmUgUDZfTk9QNSAiLmJ5dGUgMHgwZiwweDFmLDB4NDQsMHgwMCwwXG4iCisjZGVmaW5lIFA2X05PUDYgIi5ieXRlIDB4NjYsMHgwZiwweDFmLDB4NDQsMHgwMCwwXG4iCisjZGVmaW5lIFA2X05PUDcgIi5ieXRlIDB4MGYsMHgxZiwweDgwLDAsMCwwLDBcbiIKKyNkZWZpbmUgUDZfTk9QOCAiLmJ5dGUgMHgwZiwweDFmLDB4ODQsMHgwMCwwLDAsMCwwXG4iCisjZGVmaW5lIEFTTV9OT1AxIEdFTkVSSUNfTk9QMQorI2RlZmluZSBBU01fTk9QMiBHRU5FUklDX05PUDIKKyNkZWZpbmUgQVNNX05PUDMgR0VORVJJQ19OT1AzCisjZGVmaW5lIEFTTV9OT1A0IEdFTkVSSUNfTk9QNAorI2RlZmluZSBBU01fTk9QNSBHRU5FUklDX05PUDUKKyNkZWZpbmUgQVNNX05PUDYgR0VORVJJQ19OT1A2CisjZGVmaW5lIEFTTV9OT1A3IEdFTkVSSUNfTk9QNworI2RlZmluZSBBU01fTk9QOCBHRU5FUklDX05PUDgKKyNkZWZpbmUgQVNNX05PUF9NQVggOAorI2RlZmluZSBBUkNIX0hBU19QUkVGRVRDSAorI2RlZmluZSBBUkNIX0hBU19QUkVGRVRDSAorI2RlZmluZSBBUkNIX0hBU19QUkVGRVRDSFcKKyNkZWZpbmUgQVJDSF9IQVNfU1BJTkxPQ0tfUFJFRkVUQ0gKKyNkZWZpbmUgc3Bpbl9sb2NrX3ByZWZldGNoKHgpIHByZWZldGNodyh4KQorCisjZGVmaW5lIGNhY2hlX2xpbmVfc2l6ZSgpIChib290X2NwdV9kYXRhLng4Nl9jYWNoZV9hbGlnbm1lbnQpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3B0cmFjZS1hYmkuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9wdHJhY2UtYWJpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U2ZWEwOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9wdHJhY2UtYWJpLmgKQEAgLTAsMCArMSw4OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQVNNX1g4Nl9QVFJBQ0VfQUJJX0gKKyNkZWZpbmUgX0FTTV9YODZfUFRSQUNFX0FCSV9ICisKKyNpZmRlZiBfX2kzODZfXworCisjZGVmaW5lIEVCWCAwCisjZGVmaW5lIEVDWCAxCisjZGVmaW5lIEVEWCAyCisjZGVmaW5lIEVTSSAzCisjZGVmaW5lIEVESSA0CisjZGVmaW5lIEVCUCA1CisjZGVmaW5lIEVBWCA2CisjZGVmaW5lIERTIDcKKyNkZWZpbmUgRVMgOAorI2RlZmluZSBGUyA5CisjZGVmaW5lIEdTIDEwCisjZGVmaW5lIE9SSUdfRUFYIDExCisjZGVmaW5lIEVJUCAxMgorI2RlZmluZSBDUyAxMworI2RlZmluZSBFRkwgMTQKKyNkZWZpbmUgVUVTUCAxNQorI2RlZmluZSBTUyAxNgorI2RlZmluZSBGUkFNRV9TSVpFIDE3CisKKyNlbHNlCisKKyNpZiBkZWZpbmVkKF9fQVNTRU1CTFlfXykgfHwgZGVmaW5lZChfX0ZSQU1FX09GRlNFVFMpCisjZGVmaW5lIFIxNSAwCisjZGVmaW5lIFIxNCA4CisjZGVmaW5lIFIxMyAxNgorI2RlZmluZSBSMTIgMjQKKyNkZWZpbmUgUkJQIDMyCisjZGVmaW5lIFJCWCA0MAorCisjZGVmaW5lIFIxMSA0OAorI2RlZmluZSBSMTAgNTYKKyNkZWZpbmUgUjkgNjQKKyNkZWZpbmUgUjggNzIKKyNkZWZpbmUgUkFYIDgwCisjZGVmaW5lIFJDWCA4OAorI2RlZmluZSBSRFggOTYKKyNkZWZpbmUgUlNJIDEwNAorI2RlZmluZSBSREkgMTEyCisjZGVmaW5lIE9SSUdfUkFYIDEyMCAgCisKKyNkZWZpbmUgUklQIDEyOAorI2RlZmluZSBDUyAxMzYKKyNkZWZpbmUgRUZMQUdTIDE0NAorI2RlZmluZSBSU1AgMTUyCisjZGVmaW5lIFNTIDE2MAorI2RlZmluZSBBUkdPRkZTRVQgUjExCisjZW5kaWYKKworI2RlZmluZSBGUkFNRV9TSVpFIDE2OAorCisjZW5kaWYKKworI2RlZmluZSBQVFJBQ0VfR0VUUkVHUyAxMgorI2RlZmluZSBQVFJBQ0VfU0VUUkVHUyAxMworI2RlZmluZSBQVFJBQ0VfR0VURlBSRUdTIDE0CisjZGVmaW5lIFBUUkFDRV9TRVRGUFJFR1MgMTUKKyNkZWZpbmUgUFRSQUNFX0dFVEZQWFJFR1MgMTgKKyNkZWZpbmUgUFRSQUNFX1NFVEZQWFJFR1MgMTkKKworI2RlZmluZSBQVFJBQ0VfT0xEU0VUT1BUSU9OUyAyMQorCisjZGVmaW5lIFBUUkFDRV9HRVRfVEhSRUFEX0FSRUEgMjUKKyNkZWZpbmUgUFRSQUNFX1NFVF9USFJFQURfQVJFQSAyNgorCisjaWZkZWYgX194ODZfNjRfXworI2RlZmluZSBQVFJBQ0VfQVJDSF9QUkNUTCAzMAorI2Vsc2UKKyNkZWZpbmUgUFRSQUNFX1NZU0VNVSAzMQorI2RlZmluZSBQVFJBQ0VfU1lTRU1VX1NJTkdMRVNURVAgMzIKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9wdHJhY2UuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9wdHJhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzQzZTBmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3B0cmFjZS5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FTTV9YODZfUFRSQUNFX0gKKyNkZWZpbmUgX0FTTV9YODZfUFRSQUNFX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+ICAKKyNpbmNsdWRlIDxhc20vcHRyYWNlLWFiaS5oPgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjaWZkZWYgX19pMzg2X18KKworc3RydWN0IHB0X3JlZ3MgeworIGxvbmcgZWJ4OworIGxvbmcgZWN4OworIGxvbmcgZWR4OworIGxvbmcgZXNpOworIGxvbmcgZWRpOworIGxvbmcgZWJwOworIGxvbmcgZWF4OworIGludCB4ZHM7CisgaW50IHhlczsKKyBpbnQgeGZzOworCisgbG9uZyBvcmlnX2VheDsKKyBsb25nIGVpcDsKKyBpbnQgeGNzOworIGxvbmcgZWZsYWdzOworIGxvbmcgZXNwOworIGludCB4c3M7Cit9OworCisjZWxzZQorCitzdHJ1Y3QgcHRfcmVncyB7CisgdW5zaWduZWQgbG9uZyByMTU7CisgdW5zaWduZWQgbG9uZyByMTQ7CisgdW5zaWduZWQgbG9uZyByMTM7CisgdW5zaWduZWQgbG9uZyByMTI7CisgdW5zaWduZWQgbG9uZyByYnA7CisgdW5zaWduZWQgbG9uZyByYng7CisKKyB1bnNpZ25lZCBsb25nIHIxMTsKKyB1bnNpZ25lZCBsb25nIHIxMDsKKyB1bnNpZ25lZCBsb25nIHI5OworIHVuc2lnbmVkIGxvbmcgcjg7CisgdW5zaWduZWQgbG9uZyByYXg7CisgdW5zaWduZWQgbG9uZyByY3g7CisgdW5zaWduZWQgbG9uZyByZHg7CisgdW5zaWduZWQgbG9uZyByc2k7CisgdW5zaWduZWQgbG9uZyByZGk7CisgdW5zaWduZWQgbG9uZyBvcmlnX3JheDsKKworIHVuc2lnbmVkIGxvbmcgcmlwOworIHVuc2lnbmVkIGxvbmcgY3M7CisgdW5zaWduZWQgbG9uZyBlZmxhZ3M7CisgdW5zaWduZWQgbG9uZyByc3A7CisgdW5zaWduZWQgbG9uZyBzczsKKworfTsKKworI2VuZGlmCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vcmVxdWlyZWQtZmVhdHVyZXMuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9yZXF1aXJlZC1mZWF0dXJlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NjUxN2EKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vcmVxdWlyZWQtZmVhdHVyZXMuaApAQCAtMCwwICsxLDQ0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01fUkVRVUlSRURfRkVBVFVSRVNfSAorI2RlZmluZSBfQVNNX1JFUVVJUkVEX0ZFQVRVUkVTX0ggMQorCisjZGVmaW5lIE5FRURfRlBVICgxPDwoWDg2X0ZFQVRVUkVfRlBVICYgMzEpKQorCisjZGVmaW5lIE5FRURfUEFFIDAKKyNkZWZpbmUgTkVFRF9DWDggMAorCisjZGVmaW5lIE5FRURfQ01PViAwCisKKyNkZWZpbmUgTkVFRF8zRE5PVyAwCisKKyNkZWZpbmUgTkVFRF9QU0UgMAorI2RlZmluZSBORUVEX01TUiAwCisjZGVmaW5lIE5FRURfUEdFIDAKKyNkZWZpbmUgTkVFRF9GWFNSIDAKKyNkZWZpbmUgTkVFRF9YTU0gMAorI2RlZmluZSBORUVEX1hNTTIgMAorI2RlZmluZSBORUVEX0xNIDAKKworI2RlZmluZSBSRVFVSVJFRF9NQVNLMCAoTkVFRF9GUFV8TkVFRF9QU0V8TkVFRF9NU1J8TkVFRF9QQUV8ICBORUVEX0NYOHxORUVEX1BHRXxORUVEX0ZYU1J8TkVFRF9DTU9WfCAgTkVFRF9YTU18TkVFRF9YTU0yKQorI2RlZmluZSBTU0VfTUFTSyAoTkVFRF9YTU18TkVFRF9YTU0yKQorCisjZGVmaW5lIFJFUVVJUkVEX01BU0sxIChORUVEX0xNfE5FRURfM0ROT1cpCisKKyNkZWZpbmUgUkVRVUlSRURfTUFTSzIgMAorI2RlZmluZSBSRVFVSVJFRF9NQVNLMyAwCisjZGVmaW5lIFJFUVVJUkVEX01BU0s0IDAKKyNkZWZpbmUgUkVRVUlSRURfTUFTSzUgMAorI2RlZmluZSBSRVFVSVJFRF9NQVNLNiAwCisjZGVmaW5lIFJFUVVJUkVEX01BU0s3IDAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vcmVzb3VyY2UuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9yZXNvdXJjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5ZDllMTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vcmVzb3VyY2UuaApAQCAtMCwwICsxLDEyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcmVzb3VyY2UuaD4KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9yd2xvY2suaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9yd2xvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjkzNTQyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3J3bG9jay5oCkBAIC0wLDAgKzEsMTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FTTV9YODZfUldMT0NLX0gKKyNkZWZpbmUgX0FTTV9YODZfUldMT0NLX0gKKworI2RlZmluZSBSV19MT0NLX0JJQVMgMHgwMTAwMDAwMAorI2RlZmluZSBSV19MT0NLX0JJQVNfU1RSICIweDAxMDAwMDAwIgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zY2F0dGVybGlzdC5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3NjYXR0ZXJsaXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE0ZDBjYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zY2F0dGVybGlzdC5oCkBAIC0wLDAgKzEsMTIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJzY2F0dGVybGlzdF82NC5oIgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3NjYXR0ZXJsaXN0XzMyLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc2NhdHRlcmxpc3RfMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTA0NGMzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3NjYXR0ZXJsaXN0XzMyLmgKQEAgLTAsMCArMSwzMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfSTM4Nl9TQ0FUVEVSTElTVF9ICisjZGVmaW5lIF9JMzg2X1NDQVRURVJMSVNUX0gKKworI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCitzdHJ1Y3Qgc2NhdHRlcmxpc3QgeworIHVuc2lnbmVkIGxvbmcgcGFnZV9saW5rOworIHVuc2lnbmVkIGludCBvZmZzZXQ7CisgZG1hX2FkZHJfdCBkbWFfYWRkcmVzczsKKyB1bnNpZ25lZCBpbnQgbGVuZ3RoOworfTsKKworI2RlZmluZSBBUkNIX0hBU19TR19DSEFJTgorCisjZGVmaW5lIHNnX2RtYV9hZGRyZXNzKHNnKSAoKHNnKS0+ZG1hX2FkZHJlc3MpCisjZGVmaW5lIHNnX2RtYV9sZW4oc2cpICgoc2cpLT5sZW5ndGgpCisKKyNkZWZpbmUgSVNBX0RNQV9USFJFU0hPTEQgKDB4MDBmZmZmZmYpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3NlY3Rpb25zLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc2VjdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjFkYTNlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3NlY3Rpb25zLmgKQEAgLTAsMCArMSwxMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NlY3Rpb25zLmg+CmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc2VnbWVudC5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3NlZ21lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODc3YTgwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3NlZ21lbnQuaApAQCAtMCwwICsxLDEyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAic2VnbWVudF82NC5oIgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3NlZ21lbnRfMzIuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zZWdtZW50XzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRiMzEyYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zZWdtZW50XzMyLmgKQEAgLTAsMCArMSw4OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQVNNX1NFR01FTlRfSAorI2RlZmluZSBfQVNNX1NFR01FTlRfSAorCisjZGVmaW5lIEdEVF9FTlRSWV9UTFNfRU5UUklFUyAzCisjZGVmaW5lIEdEVF9FTlRSWV9UTFNfTUlOIDYKKyNkZWZpbmUgR0RUX0VOVFJZX1RMU19NQVggKEdEVF9FTlRSWV9UTFNfTUlOICsgR0RUX0VOVFJZX1RMU19FTlRSSUVTIC0gMSkKKworI2RlZmluZSBUTFNfU0laRSAoR0RUX0VOVFJZX1RMU19FTlRSSUVTICogOCkKKworI2RlZmluZSBHRFRfRU5UUllfREVGQVVMVF9VU0VSX0NTIDE0CisjZGVmaW5lIF9fVVNFUl9DUyAoR0RUX0VOVFJZX0RFRkFVTFRfVVNFUl9DUyAqIDggKyAzKQorCisjZGVmaW5lIEdEVF9FTlRSWV9ERUZBVUxUX1VTRVJfRFMgMTUKKyNkZWZpbmUgX19VU0VSX0RTIChHRFRfRU5UUllfREVGQVVMVF9VU0VSX0RTICogOCArIDMpCisKKyNkZWZpbmUgR0RUX0VOVFJZX0tFUk5FTF9CQVNFIDEyCisKKyNkZWZpbmUgR0RUX0VOVFJZX0tFUk5FTF9DUyAoR0RUX0VOVFJZX0tFUk5FTF9CQVNFICsgMCkKKyNkZWZpbmUgX19LRVJORUxfQ1MgKEdEVF9FTlRSWV9LRVJORUxfQ1MgKiA4KQorCisjZGVmaW5lIEdEVF9FTlRSWV9LRVJORUxfRFMgKEdEVF9FTlRSWV9LRVJORUxfQkFTRSArIDEpCisjZGVmaW5lIF9fS0VSTkVMX0RTIChHRFRfRU5UUllfS0VSTkVMX0RTICogOCkKKworI2RlZmluZSBHRFRfRU5UUllfVFNTIChHRFRfRU5UUllfS0VSTkVMX0JBU0UgKyA0KQorI2RlZmluZSBHRFRfRU5UUllfTERUIChHRFRfRU5UUllfS0VSTkVMX0JBU0UgKyA1KQorCisjZGVmaW5lIEdEVF9FTlRSWV9QTlBCSU9TX0JBU0UgKEdEVF9FTlRSWV9LRVJORUxfQkFTRSArIDYpCisjZGVmaW5lIEdEVF9FTlRSWV9BUE1CSU9TX0JBU0UgKEdEVF9FTlRSWV9LRVJORUxfQkFTRSArIDExKQorCisjZGVmaW5lIEdEVF9FTlRSWV9FU1BGSVhfU1MgKEdEVF9FTlRSWV9LRVJORUxfQkFTRSArIDE0KQorI2RlZmluZSBfX0VTUEZJWF9TUyAoR0RUX0VOVFJZX0VTUEZJWF9TUyAqIDgpCisKKyNkZWZpbmUgR0RUX0VOVFJZX1BFUkNQVSAoR0RUX0VOVFJZX0tFUk5FTF9CQVNFICsgMTUpCisjZGVmaW5lIF9fS0VSTkVMX1BFUkNQVSAwCisKKyNkZWZpbmUgR0RUX0VOVFJZX0RPVUJMRUZBVUxUX1RTUyAzMQorCisjZGVmaW5lIEdEVF9FTlRSSUVTIDMyCisjZGVmaW5lIEdEVF9TSVpFIChHRFRfRU5UUklFUyAqIDgpCisKKyNkZWZpbmUgR0RUX0VOVFJZX0JPT1RfQ1MgMgorI2RlZmluZSBfX0JPT1RfQ1MgKEdEVF9FTlRSWV9CT09UX0NTICogOCkKKworI2RlZmluZSBHRFRfRU5UUllfQk9PVF9EUyAoR0RUX0VOVFJZX0JPT1RfQ1MgKyAxKQorI2RlZmluZSBfX0JPT1RfRFMgKEdEVF9FTlRSWV9CT09UX0RTICogOCkKKworI2RlZmluZSBHRFRfRU5UUllfUE5QQklPU19DUzMyIChHRFRfRU5UUllfUE5QQklPU19CQVNFICsgMCkKKyNkZWZpbmUgR0RUX0VOVFJZX1BOUEJJT1NfQ1MxNiAoR0RUX0VOVFJZX1BOUEJJT1NfQkFTRSArIDEpCisjZGVmaW5lIEdEVF9FTlRSWV9QTlBCSU9TX0RTIChHRFRfRU5UUllfUE5QQklPU19CQVNFICsgMikKKyNkZWZpbmUgR0RUX0VOVFJZX1BOUEJJT1NfVFMxIChHRFRfRU5UUllfUE5QQklPU19CQVNFICsgMykKKyNkZWZpbmUgR0RUX0VOVFJZX1BOUEJJT1NfVFMyIChHRFRfRU5UUllfUE5QQklPU19CQVNFICsgNCkKKworI2RlZmluZSBQTlBfQ1MzMiAoR0RUX0VOVFJZX1BOUEJJT1NfQ1MzMiAqIDgpICAKKyNkZWZpbmUgUE5QX0NTMTYgKEdEVF9FTlRSWV9QTlBCSU9TX0NTMTYgKiA4KSAgCisjZGVmaW5lIFBOUF9EUyAoR0RUX0VOVFJZX1BOUEJJT1NfRFMgKiA4KSAgCisjZGVmaW5lIFBOUF9UUzEgKEdEVF9FTlRSWV9QTlBCSU9TX1RTMSAqIDgpICAKKyNkZWZpbmUgUE5QX1RTMiAoR0RUX0VOVFJZX1BOUEJJT1NfVFMyICogOCkgIAorCisjZGVmaW5lIElEVF9FTlRSSUVTIDI1NgorCisjZGVmaW5lIFNFR01FTlRfUlBMX01BU0sgMHgzCisKKyNkZWZpbmUgU0VHTUVOVF9USV9NQVNLIDB4NAorCisjZGVmaW5lIFVTRVJfUlBMIDB4MworCisjZGVmaW5lIFNFR01FTlRfTERUIDB4NAorI2RlZmluZSBTRUdNRU5UX0dEVCAweDAKKworI2RlZmluZSBnZXRfa2VybmVsX3JwbCgpIDAKKworI2RlZmluZSBTRUdNRU5UX0lTX0tFUk5FTF9DT0RFKHgpICgoKHgpICYgMHhmYykgPT0gR0RUX0VOVFJZX0tFUk5FTF9DUyAqIDgpCisKKyNkZWZpbmUgU0VHTUVOVF9JU19GTEFUX0NPREUoeCkgKCgoeCkgJiAweGVjKSA9PSBHRFRfRU5UUllfS0VSTkVMX0NTICogOCkKKworI2RlZmluZSBTRUdNRU5UX0lTX1BOUF9DT0RFKHgpICgoKHgpICYgMHhmNCkgPT0gR0RUX0VOVFJZX1BOUEJJT1NfQkFTRSAqIDgpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3NlbWFwaG9yZS5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3NlbWFwaG9yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNGM1OTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc2VtYXBob3JlLmgKQEAgLTAsMCArMSwxMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgInNlbWFwaG9yZV82NC5oIgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3NlbWFwaG9yZV8zMi5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3NlbWFwaG9yZV8zMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhYmU3NzkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc2VtYXBob3JlXzMyLmgKQEAgLTAsMCArMSwxNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfSTM4Nl9TRU1BUEhPUkVfSAorI2RlZmluZSBfSTM4Nl9TRU1BUEhPUkVfSAorCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zZW1idWYuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zZW1idWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjk1MjA4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3NlbWJ1Zi5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FTTV9YODZfU0VNQlVGX0gKKyNkZWZpbmUgX0FTTV9YODZfU0VNQlVGX0gKKworc3RydWN0IHNlbWlkNjRfZHMgeworIHN0cnVjdCBpcGM2NF9wZXJtIHNlbV9wZXJtOworIF9fa2VybmVsX3RpbWVfdCBzZW1fb3RpbWU7CisgdW5zaWduZWQgbG9uZyBfX3VudXNlZDE7CisgX19rZXJuZWxfdGltZV90IHNlbV9jdGltZTsKKyB1bnNpZ25lZCBsb25nIF9fdW51c2VkMjsKKyB1bnNpZ25lZCBsb25nIHNlbV9uc2VtczsKKyB1bnNpZ25lZCBsb25nIF9fdW51c2VkMzsKKyB1bnNpZ25lZCBsb25nIF9fdW51c2VkNDsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3NldHVwLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc2V0dXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTZlZDk3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3NldHVwLmgKQEAgLTAsMCArMSwxNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQVNNX1g4Nl9TRVRVUF9ICisjZGVmaW5lIF9BU01fWDg2X1NFVFVQX0gKKworI2RlZmluZSBDT01NQU5EX0xJTkVfU0laRSAyMDQ4CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3NobWJ1Zi5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3NobWJ1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxNGNjYjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc2htYnVmLmgKQEAgLTAsMCArMSw0OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQVNNX1g4Nl9TSE1CVUZfSAorI2RlZmluZSBfQVNNX1g4Nl9TSE1CVUZfSAorCitzdHJ1Y3Qgc2htaWQ2NF9kcyB7Cisgc3RydWN0IGlwYzY0X3Blcm0gc2htX3Blcm07Cisgc2l6ZV90IHNobV9zZWdzejsKKyBfX2tlcm5lbF90aW1lX3Qgc2htX2F0aW1lOworI2lmZGVmIF9faTM4Nl9fCisgdW5zaWduZWQgbG9uZyBfX3VudXNlZDE7CisjZW5kaWYKKyBfX2tlcm5lbF90aW1lX3Qgc2htX2R0aW1lOworI2lmZGVmIF9faTM4Nl9fCisgdW5zaWduZWQgbG9uZyBfX3VudXNlZDI7CisjZW5kaWYKKyBfX2tlcm5lbF90aW1lX3Qgc2htX2N0aW1lOworI2lmZGVmIF9faTM4Nl9fCisgdW5zaWduZWQgbG9uZyBfX3VudXNlZDM7CisjZW5kaWYKKyBfX2tlcm5lbF9waWRfdCBzaG1fY3BpZDsKKyBfX2tlcm5lbF9waWRfdCBzaG1fbHBpZDsKKyB1bnNpZ25lZCBsb25nIHNobV9uYXR0Y2g7CisgdW5zaWduZWQgbG9uZyBfX3VudXNlZDQ7CisgdW5zaWduZWQgbG9uZyBfX3VudXNlZDU7Cit9OworCitzdHJ1Y3Qgc2htaW5mbzY0IHsKKyB1bnNpZ25lZCBsb25nIHNobW1heDsKKyB1bnNpZ25lZCBsb25nIHNobW1pbjsKKyB1bnNpZ25lZCBsb25nIHNobW1uaTsKKyB1bnNpZ25lZCBsb25nIHNobXNlZzsKKyB1bnNpZ25lZCBsb25nIHNobWFsbDsKKyB1bnNpZ25lZCBsb25nIF9fdW51c2VkMTsKKyB1bnNpZ25lZCBsb25nIF9fdW51c2VkMjsKKyB1bnNpZ25lZCBsb25nIF9fdW51c2VkMzsKKyB1bnNpZ25lZCBsb25nIF9fdW51c2VkNDsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3NobXBhcmFtLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc2htcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjY3YmExCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3NobXBhcmFtLmgKQEAgLTAsMCArMSwxNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQVNNX1g4Nl9TSE1QQVJBTV9ICisjZGVmaW5lIF9BU01fWDg2X1NITVBBUkFNX0gKKworI2RlZmluZSBTSE1MQkEgUEFHRV9TSVpFICAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc2lnY29udGV4dC5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3NpZ2NvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGY3NmYwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3NpZ2NvbnRleHQuaApAQCAtMCwwICsxLDEzMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQVNNX1g4Nl9TSUdDT05URVhUX0gKKyNkZWZpbmUgX0FTTV9YODZfU0lHQ09OVEVYVF9ICisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCisjaWZkZWYgX19pMzg2X18KKworc3RydWN0IF9mcHJlZyB7CisgdW5zaWduZWQgc2hvcnQgc2lnbmlmaWNhbmRbNF07CisgdW5zaWduZWQgc2hvcnQgZXhwb25lbnQ7Cit9OworCitzdHJ1Y3QgX2ZweHJlZyB7CisgdW5zaWduZWQgc2hvcnQgc2lnbmlmaWNhbmRbNF07CisgdW5zaWduZWQgc2hvcnQgZXhwb25lbnQ7CisgdW5zaWduZWQgc2hvcnQgcGFkZGluZ1szXTsKK307CisKK3N0cnVjdCBfeG1tcmVnIHsKKyB1bnNpZ25lZCBsb25nIGVsZW1lbnRbNF07Cit9OworCitzdHJ1Y3QgX2Zwc3RhdGUgeworCisgdW5zaWduZWQgbG9uZyBjdzsKKyB1bnNpZ25lZCBsb25nIHN3OworIHVuc2lnbmVkIGxvbmcgdGFnOworIHVuc2lnbmVkIGxvbmcgaXBvZmY7CisgdW5zaWduZWQgbG9uZyBjc3NlbDsKKyB1bnNpZ25lZCBsb25nIGRhdGFvZmY7CisgdW5zaWduZWQgbG9uZyBkYXRhc2VsOworIHN0cnVjdCBfZnByZWcgX3N0WzhdOworIHVuc2lnbmVkIHNob3J0IHN0YXR1czsKKyB1bnNpZ25lZCBzaG9ydCBtYWdpYzsKKworIHVuc2lnbmVkIGxvbmcgX2Z4c3JfZW52WzZdOworIHVuc2lnbmVkIGxvbmcgbXhjc3I7CisgdW5zaWduZWQgbG9uZyByZXNlcnZlZDsKKyBzdHJ1Y3QgX2ZweHJlZyBfZnhzcl9zdFs4XTsKKyBzdHJ1Y3QgX3htbXJlZyBfeG1tWzhdOworIHVuc2lnbmVkIGxvbmcgcGFkZGluZ1s1Nl07Cit9OworCisjZGVmaW5lIFg4Nl9GWFNSX01BR0lDIDB4MDAwMAorCitzdHJ1Y3Qgc2lnY29udGV4dCB7CisgdW5zaWduZWQgc2hvcnQgZ3MsIF9fZ3NoOworIHVuc2lnbmVkIHNob3J0IGZzLCBfX2ZzaDsKKyB1bnNpZ25lZCBzaG9ydCBlcywgX19lc2g7CisgdW5zaWduZWQgc2hvcnQgZHMsIF9fZHNoOworIHVuc2lnbmVkIGxvbmcgZWRpOworIHVuc2lnbmVkIGxvbmcgZXNpOworIHVuc2lnbmVkIGxvbmcgZWJwOworIHVuc2lnbmVkIGxvbmcgZXNwOworIHVuc2lnbmVkIGxvbmcgZWJ4OworIHVuc2lnbmVkIGxvbmcgZWR4OworIHVuc2lnbmVkIGxvbmcgZWN4OworIHVuc2lnbmVkIGxvbmcgZWF4OworIHVuc2lnbmVkIGxvbmcgdHJhcG5vOworIHVuc2lnbmVkIGxvbmcgZXJyOworIHVuc2lnbmVkIGxvbmcgZWlwOworIHVuc2lnbmVkIHNob3J0IGNzLCBfX2NzaDsKKyB1bnNpZ25lZCBsb25nIGVmbGFnczsKKyB1bnNpZ25lZCBsb25nIGVzcF9hdF9zaWduYWw7CisgdW5zaWduZWQgc2hvcnQgc3MsIF9fc3NoOworIHN0cnVjdCBfZnBzdGF0ZSBfX3VzZXIgKiBmcHN0YXRlOworIHVuc2lnbmVkIGxvbmcgb2xkbWFzazsKKyB1bnNpZ25lZCBsb25nIGNyMjsKK307CisKKyNlbHNlCisKK3N0cnVjdCBfZnBzdGF0ZSB7CisgX191MTYgY3dkOworIF9fdTE2IHN3ZDsKKyBfX3UxNiB0d2Q7CisgX191MTYgZm9wOworIF9fdTY0IHJpcDsKKyBfX3U2NCByZHA7CisgX191MzIgbXhjc3I7CisgX191MzIgbXhjc3JfbWFzazsKKyBfX3UzMiBzdF9zcGFjZVszMl07CisgX191MzIgeG1tX3NwYWNlWzY0XTsKKyBfX3UzMiByZXNlcnZlZDJbMjRdOworfTsKKworc3RydWN0IHNpZ2NvbnRleHQgeworIHVuc2lnbmVkIGxvbmcgcjg7CisgdW5zaWduZWQgbG9uZyByOTsKKyB1bnNpZ25lZCBsb25nIHIxMDsKKyB1bnNpZ25lZCBsb25nIHIxMTsKKyB1bnNpZ25lZCBsb25nIHIxMjsKKyB1bnNpZ25lZCBsb25nIHIxMzsKKyB1bnNpZ25lZCBsb25nIHIxNDsKKyB1bnNpZ25lZCBsb25nIHIxNTsKKyB1bnNpZ25lZCBsb25nIHJkaTsKKyB1bnNpZ25lZCBsb25nIHJzaTsKKyB1bnNpZ25lZCBsb25nIHJicDsKKyB1bnNpZ25lZCBsb25nIHJieDsKKyB1bnNpZ25lZCBsb25nIHJkeDsKKyB1bnNpZ25lZCBsb25nIHJheDsKKyB1bnNpZ25lZCBsb25nIHJjeDsKKyB1bnNpZ25lZCBsb25nIHJzcDsKKyB1bnNpZ25lZCBsb25nIHJpcDsKKyB1bnNpZ25lZCBsb25nIGVmbGFnczsKKyB1bnNpZ25lZCBzaG9ydCBjczsKKyB1bnNpZ25lZCBzaG9ydCBnczsKKyB1bnNpZ25lZCBzaG9ydCBmczsKKyB1bnNpZ25lZCBzaG9ydCBfX3BhZDA7CisgdW5zaWduZWQgbG9uZyBlcnI7CisgdW5zaWduZWQgbG9uZyB0cmFwbm87CisgdW5zaWduZWQgbG9uZyBvbGRtYXNrOworIHVuc2lnbmVkIGxvbmcgY3IyOworIHN0cnVjdCBfZnBzdGF0ZSBfX3VzZXIgKmZwc3RhdGU7CisgdW5zaWduZWQgbG9uZyByZXNlcnZlZDFbOF07Cit9OworCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc2lnaW5mby5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3NpZ2luZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDIxZDIyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3NpZ2luZm8uaApAQCAtMCwwICsxLDIxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01fWDg2X1NJR0lORk9fSAorI2RlZmluZSBfQVNNX1g4Nl9TSUdJTkZPX0gKKworI2lmZGVmIF9feDg2XzY0X18KKyNkZWZpbmUgX19BUkNIX1NJX1BSRUFNQkxFX1NJWkUgKDQgKiBzaXplb2YoaW50KSkKKyNlbmRpZgorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2lnaW5mby5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zaWduYWwuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zaWduYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDg0ZWFiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3NpZ25hbC5oCkBAIC0wLDAgKzEsMTI3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01fWDg2X1NJR05BTF9ICisjZGVmaW5lIF9BU01fWDg2X1NJR05BTF9ICisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKworc3RydWN0IHNpZ2luZm87CisKKyNkZWZpbmUgTlNJRyAzMgordHlwZWRlZiB1bnNpZ25lZCBsb25nIHNpZ3NldF90OworCisjZW5kaWYKKworI2RlZmluZSBTSUdIVVAgMQorI2RlZmluZSBTSUdJTlQgMgorI2RlZmluZSBTSUdRVUlUIDMKKyNkZWZpbmUgU0lHSUxMIDQKKyNkZWZpbmUgU0lHVFJBUCA1CisjZGVmaW5lIFNJR0FCUlQgNgorI2RlZmluZSBTSUdJT1QgNgorI2RlZmluZSBTSUdCVVMgNworI2RlZmluZSBTSUdGUEUgOAorI2RlZmluZSBTSUdLSUxMIDkKKyNkZWZpbmUgU0lHVVNSMSAxMAorI2RlZmluZSBTSUdTRUdWIDExCisjZGVmaW5lIFNJR1VTUjIgMTIKKyNkZWZpbmUgU0lHUElQRSAxMworI2RlZmluZSBTSUdBTFJNIDE0CisjZGVmaW5lIFNJR1RFUk0gMTUKKyNkZWZpbmUgU0lHU1RLRkxUIDE2CisjZGVmaW5lIFNJR0NITEQgMTcKKyNkZWZpbmUgU0lHQ09OVCAxOAorI2RlZmluZSBTSUdTVE9QIDE5CisjZGVmaW5lIFNJR1RTVFAgMjAKKyNkZWZpbmUgU0lHVFRJTiAyMQorI2RlZmluZSBTSUdUVE9VIDIyCisjZGVmaW5lIFNJR1VSRyAyMworI2RlZmluZSBTSUdYQ1BVIDI0CisjZGVmaW5lIFNJR1hGU1ogMjUKKyNkZWZpbmUgU0lHVlRBTFJNIDI2CisjZGVmaW5lIFNJR1BST0YgMjcKKyNkZWZpbmUgU0lHV0lOQ0ggMjgKKyNkZWZpbmUgU0lHSU8gMjkKKyNkZWZpbmUgU0lHUE9MTCBTSUdJTworCisjZGVmaW5lIFNJR1BXUiAzMAorI2RlZmluZSBTSUdTWVMgMzEKKyNkZWZpbmUgU0lHVU5VU0VEIDMxCisKKyNkZWZpbmUgU0lHUlRNSU4gMzIKKyNkZWZpbmUgU0lHUlRNQVggX05TSUcKKworI2RlZmluZSBTQV9OT0NMRFNUT1AgMHgwMDAwMDAwMXUKKyNkZWZpbmUgU0FfTk9DTERXQUlUIDB4MDAwMDAwMDJ1CisjZGVmaW5lIFNBX1NJR0lORk8gMHgwMDAwMDAwNHUKKyNkZWZpbmUgU0FfT05TVEFDSyAweDA4MDAwMDAwdQorI2RlZmluZSBTQV9SRVNUQVJUIDB4MTAwMDAwMDB1CisjZGVmaW5lIFNBX05PREVGRVIgMHg0MDAwMDAwMHUKKyNkZWZpbmUgU0FfUkVTRVRIQU5EIDB4ODAwMDAwMDB1CisKKyNkZWZpbmUgU0FfTk9NQVNLIFNBX05PREVGRVIKKyNkZWZpbmUgU0FfT05FU0hPVCBTQV9SRVNFVEhBTkQKKworI2RlZmluZSBTQV9SRVNUT1JFUiAweDA0MDAwMDAwCisKKyNkZWZpbmUgU1NfT05TVEFDSyAxCisjZGVmaW5lIFNTX0RJU0FCTEUgMgorCisjZGVmaW5lIE1JTlNJR1NUS1NaIDIwNDgKKyNkZWZpbmUgU0lHU1RLU1ogODE5MgorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2lnbmFsLmg+CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpZmRlZiBfX2kzODZfXworCitzdHJ1Y3Qgc2lnYWN0aW9uIHsKKyB1bmlvbiB7CisgX19zaWdoYW5kbGVyX3QgX3NhX2hhbmRsZXI7Cisgdm9pZCAoKl9zYV9zaWdhY3Rpb24pKGludCwgc3RydWN0IHNpZ2luZm8gKiwgdm9pZCAqKTsKKyB9IF91OworIHNpZ3NldF90IHNhX21hc2s7CisgdW5zaWduZWQgbG9uZyBzYV9mbGFnczsKKyB2b2lkICgqc2FfcmVzdG9yZXIpKHZvaWQpOworfTsKKworI2RlZmluZSBzYV9oYW5kbGVyIF91Ll9zYV9oYW5kbGVyCisjZGVmaW5lIHNhX3NpZ2FjdGlvbiBfdS5fc2Ffc2lnYWN0aW9uCisKKyNlbHNlCisKK3N0cnVjdCBzaWdhY3Rpb24geworIF9fc2lnaGFuZGxlcl90IHNhX2hhbmRsZXI7CisgdW5zaWduZWQgbG9uZyBzYV9mbGFnczsKKyBfX3NpZ3Jlc3RvcmVfdCBzYV9yZXN0b3JlcjsKKyBzaWdzZXRfdCBzYV9tYXNrOworfTsKKworc3RydWN0IGtfc2lnYWN0aW9uIHsKKyBzdHJ1Y3Qgc2lnYWN0aW9uIHNhOworfTsKKworI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IHNpZ2FsdHN0YWNrIHsKKyB2b2lkIF9fdXNlciAqc3Nfc3A7CisgaW50IHNzX2ZsYWdzOworIHNpemVfdCBzc19zaXplOworfSBzdGFja190OworCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc21wLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc21wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBkNDYwMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zbXAuaApAQCAtMCwwICsxLDEyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAic21wXzY0LmgiCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc21wXzMyLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc21wXzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA5M2EyNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zbXBfMzIuaApAQCAtMCwwICsxLDM0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQVNNX1NNUF9ICisjZGVmaW5lIF9fQVNNX1NNUF9ICisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KKyNlbmRpZgorCisjZGVmaW5lIEJBRF9BUElDSUQgMHhGRnUKKworI2RlZmluZSBzYWZlX3NtcF9wcm9jZXNzb3JfaWQoKSAwCisjZGVmaW5lIGNwdV9waHlzaWNhbF9pZChjcHUpIGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZAorCisjZGVmaW5lIE5PX1BST0NfSUQgMHhGRiAgCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNkZWZpbmUgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCkgMAorCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc29ja2V0LmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc29ja2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdkMjQzZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zb2NrZXQuaApAQCAtMCwwICsxLDYzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01fU09DS0VUX0gKKyNkZWZpbmUgX0FTTV9TT0NLRVRfSAorCisjaW5jbHVkZSA8YXNtL3NvY2tpb3MuaD4KKworI2RlZmluZSBTT0xfU09DS0VUIDEKKworI2RlZmluZSBTT19ERUJVRyAxCisjZGVmaW5lIFNPX1JFVVNFQUREUiAyCisjZGVmaW5lIFNPX1RZUEUgMworI2RlZmluZSBTT19FUlJPUiA0CisjZGVmaW5lIFNPX0RPTlRST1VURSA1CisjZGVmaW5lIFNPX0JST0FEQ0FTVCA2CisjZGVmaW5lIFNPX1NOREJVRiA3CisjZGVmaW5lIFNPX1JDVkJVRiA4CisjZGVmaW5lIFNPX1NOREJVRkZPUkNFIDMyCisjZGVmaW5lIFNPX1JDVkJVRkZPUkNFIDMzCisjZGVmaW5lIFNPX0tFRVBBTElWRSA5CisjZGVmaW5lIFNPX09PQklOTElORSAxMAorI2RlZmluZSBTT19OT19DSEVDSyAxMQorI2RlZmluZSBTT19QUklPUklUWSAxMgorI2RlZmluZSBTT19MSU5HRVIgMTMKKyNkZWZpbmUgU09fQlNEQ09NUEFUIDE0CisKKyNkZWZpbmUgU09fUEFTU0NSRUQgMTYKKyNkZWZpbmUgU09fUEVFUkNSRUQgMTcKKyNkZWZpbmUgU09fUkNWTE9XQVQgMTgKKyNkZWZpbmUgU09fU05ETE9XQVQgMTkKKyNkZWZpbmUgU09fUkNWVElNRU8gMjAKKyNkZWZpbmUgU09fU05EVElNRU8gMjEKKworI2RlZmluZSBTT19TRUNVUklUWV9BVVRIRU5USUNBVElPTiAyMgorI2RlZmluZSBTT19TRUNVUklUWV9FTkNSWVBUSU9OX1RSQU5TUE9SVCAyMworI2RlZmluZSBTT19TRUNVUklUWV9FTkNSWVBUSU9OX05FVFdPUksgMjQKKworI2RlZmluZSBTT19CSU5EVE9ERVZJQ0UgMjUKKworI2RlZmluZSBTT19BVFRBQ0hfRklMVEVSIDI2CisjZGVmaW5lIFNPX0RFVEFDSF9GSUxURVIgMjcKKworI2RlZmluZSBTT19QRUVSTkFNRSAyOAorI2RlZmluZSBTT19USU1FU1RBTVAgMjkKKyNkZWZpbmUgU0NNX1RJTUVTVEFNUCBTT19USU1FU1RBTVAKKworI2RlZmluZSBTT19BQ0NFUFRDT05OIDMwCisKKyNkZWZpbmUgU09fUEVFUlNFQyAzMQorI2RlZmluZSBTT19QQVNTU0VDIDM0CisjZGVmaW5lIFNPX1RJTUVTVEFNUE5TIDM1CisjZGVmaW5lIFNDTV9USU1FU1RBTVBOUyBTT19USU1FU1RBTVBOUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zb2NraW9zLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc29ja2lvcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViZGZhOTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc29ja2lvcy5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FTTV9YODZfU09DS0lPU19ICisjZGVmaW5lIF9BU01fWDg2X1NPQ0tJT1NfSAorCisjZGVmaW5lIEZJT1NFVE9XTiAweDg5MDEKKyNkZWZpbmUgU0lPQ1NQR1JQIDB4ODkwMgorI2RlZmluZSBGSU9HRVRPV04gMHg4OTAzCisjZGVmaW5lIFNJT0NHUEdSUCAweDg5MDQKKyNkZWZpbmUgU0lPQ0FUTUFSSyAweDg5MDUKKyNkZWZpbmUgU0lPQ0dTVEFNUCAweDg5MDYgIAorI2RlZmluZSBTSU9DR1NUQU1QTlMgMHg4OTA3ICAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc3BpbmxvY2suaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zcGlubG9jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwZDEyM2EKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc3BpbmxvY2suaApAQCAtMCwwICsxLDEyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAic3BpbmxvY2tfNjQuaCIKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zcGlubG9ja18zMi5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3NwaW5sb2NrXzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTcxNzgzZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zcGlubG9ja18zMi5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19BU01fU1BJTkxPQ0tfSAorI2RlZmluZSBfX0FTTV9TUElOTE9DS19ICisKKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtL3J3bG9jay5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisKKyNkZWZpbmUgQ0xJX1NUUklORyAiY2xpIgorI2RlZmluZSBTVElfU1RSSU5HICJzdGkiCisjZGVmaW5lIENMSV9TVElfQ0xPQkJFUlMKKyNkZWZpbmUgQ0xJX1NUSV9JTlBVVF9BUkdTCisKKyNkZWZpbmUgX3Jhd19zcGluX3JlbGF4KGxvY2spIGNwdV9yZWxheCgpCisjZGVmaW5lIF9yYXdfcmVhZF9yZWxheChsb2NrKSBjcHVfcmVsYXgoKQorI2RlZmluZSBfcmF3X3dyaXRlX3JlbGF4KGxvY2spIGNwdV9yZWxheCgpCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zcGlubG9ja190eXBlcy5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3NwaW5sb2NrX3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI5MTRjNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zcGlubG9ja190eXBlcy5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19BU01fU1BJTkxPQ0tfVFlQRVNfSAorI2RlZmluZSBfX0FTTV9TUElOTE9DS19UWVBFU19ICisKKyNpZm5kZWYgX19MSU5VWF9TUElOTE9DS19UWVBFU19ICisjZXJyb3IgInBsZWFzZSBkb24ndCBpbmNsdWRlIHRoaXMgZmlsZSBkaXJlY3RseSIKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCB7CisgdW5zaWduZWQgaW50IHNsb2NrOworfSByYXdfc3BpbmxvY2tfdDsKKworI2RlZmluZSBfX1JBV19TUElOX0xPQ0tfVU5MT0NLRUQgeyAxIH0KKwordHlwZWRlZiBzdHJ1Y3QgeworIHVuc2lnbmVkIGludCBsb2NrOworfSByYXdfcndsb2NrX3Q7CisKKyNkZWZpbmUgX19SQVdfUldfTE9DS19VTkxPQ0tFRCB7IFJXX0xPQ0tfQklBUyB9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3N0YXQuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zdGF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM3ZDcxNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zdGF0LmgKQEAgLTAsMCArMSwxMjAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FTTV9YODZfU1RBVF9ICisjZGVmaW5lIF9BU01fWDg2X1NUQVRfSAorCisjZGVmaW5lIFNUQVRfSEFWRV9OU0VDIDEKKworI2lmZGVmIF9faTM4Nl9fCitzdHJ1Y3Qgc3RhdCB7CisgdW5zaWduZWQgbG9uZyBzdF9kZXY7CisgdW5zaWduZWQgbG9uZyBzdF9pbm87CisgdW5zaWduZWQgc2hvcnQgc3RfbW9kZTsKKyB1bnNpZ25lZCBzaG9ydCBzdF9ubGluazsKKyB1bnNpZ25lZCBzaG9ydCBzdF91aWQ7CisgdW5zaWduZWQgc2hvcnQgc3RfZ2lkOworIHVuc2lnbmVkIGxvbmcgc3RfcmRldjsKKyB1bnNpZ25lZCBsb25nIHN0X3NpemU7CisgdW5zaWduZWQgbG9uZyBzdF9ibGtzaXplOworIHVuc2lnbmVkIGxvbmcgc3RfYmxvY2tzOworIHVuc2lnbmVkIGxvbmcgc3RfYXRpbWU7CisgdW5zaWduZWQgbG9uZyBzdF9hdGltZV9uc2VjOworIHVuc2lnbmVkIGxvbmcgc3RfbXRpbWU7CisgdW5zaWduZWQgbG9uZyBzdF9tdGltZV9uc2VjOworIHVuc2lnbmVkIGxvbmcgc3RfY3RpbWU7CisgdW5zaWduZWQgbG9uZyBzdF9jdGltZV9uc2VjOworIHVuc2lnbmVkIGxvbmcgX191bnVzZWQ0OworIHVuc2lnbmVkIGxvbmcgX191bnVzZWQ1OworfTsKKworI2RlZmluZSBTVEFUNjRfSEFTX0JST0tFTl9TVF9JTk8gMQorCitzdHJ1Y3Qgc3RhdDY0IHsKKyB1bnNpZ25lZCBsb25nIGxvbmcgc3RfZGV2OworIHVuc2lnbmVkIGNoYXIgX19wYWQwWzRdOworCisgdW5zaWduZWQgbG9uZyBfX3N0X2lubzsKKworIHVuc2lnbmVkIGludCBzdF9tb2RlOworIHVuc2lnbmVkIGludCBzdF9ubGluazsKKworIHVuc2lnbmVkIGxvbmcgc3RfdWlkOworIHVuc2lnbmVkIGxvbmcgc3RfZ2lkOworCisgdW5zaWduZWQgbG9uZyBsb25nIHN0X3JkZXY7CisgdW5zaWduZWQgY2hhciBfX3BhZDNbNF07CisKKyBsb25nIGxvbmcgc3Rfc2l6ZTsKKyB1bnNpZ25lZCBsb25nIHN0X2Jsa3NpemU7CisKKyB1bnNpZ25lZCBsb25nIGxvbmcgc3RfYmxvY2tzOworCisgdW5zaWduZWQgbG9uZyBzdF9hdGltZTsKKyB1bnNpZ25lZCBsb25nIHN0X2F0aW1lX25zZWM7CisKKyB1bnNpZ25lZCBsb25nIHN0X210aW1lOworIHVuc2lnbmVkIGludCBzdF9tdGltZV9uc2VjOworCisgdW5zaWduZWQgbG9uZyBzdF9jdGltZTsKKyB1bnNpZ25lZCBsb25nIHN0X2N0aW1lX25zZWM7CisKKyB1bnNpZ25lZCBsb25nIGxvbmcgc3RfaW5vOworfTsKKworI2Vsc2UKKworc3RydWN0IHN0YXQgeworIHVuc2lnbmVkIGxvbmcgc3RfZGV2OworIHVuc2lnbmVkIGxvbmcgc3RfaW5vOworIHVuc2lnbmVkIGxvbmcgc3Rfbmxpbms7CisKKyB1bnNpZ25lZCBpbnQgc3RfbW9kZTsKKyB1bnNpZ25lZCBpbnQgc3RfdWlkOworIHVuc2lnbmVkIGludCBzdF9naWQ7CisgdW5zaWduZWQgaW50IF9fcGFkMDsKKyB1bnNpZ25lZCBsb25nIHN0X3JkZXY7CisgbG9uZyBzdF9zaXplOworIGxvbmcgc3RfYmxrc2l6ZTsKKyBsb25nIHN0X2Jsb2NrczsKKworIHVuc2lnbmVkIGxvbmcgc3RfYXRpbWU7CisgdW5zaWduZWQgbG9uZyBzdF9hdGltZV9uc2VjOworIHVuc2lnbmVkIGxvbmcgc3RfbXRpbWU7CisgdW5zaWduZWQgbG9uZyBzdF9tdGltZV9uc2VjOworIHVuc2lnbmVkIGxvbmcgc3RfY3RpbWU7CisgdW5zaWduZWQgbG9uZyBzdF9jdGltZV9uc2VjOworIGxvbmcgX191bnVzZWRbM107Cit9OworI2VuZGlmCisKK3N0cnVjdCBfX29sZF9rZXJuZWxfc3RhdCB7CisgdW5zaWduZWQgc2hvcnQgc3RfZGV2OworIHVuc2lnbmVkIHNob3J0IHN0X2lubzsKKyB1bnNpZ25lZCBzaG9ydCBzdF9tb2RlOworIHVuc2lnbmVkIHNob3J0IHN0X25saW5rOworIHVuc2lnbmVkIHNob3J0IHN0X3VpZDsKKyB1bnNpZ25lZCBzaG9ydCBzdF9naWQ7CisgdW5zaWduZWQgc2hvcnQgc3RfcmRldjsKKyNpZmRlZiBfX2kzODZfXworIHVuc2lnbmVkIGxvbmcgc3Rfc2l6ZTsKKyB1bnNpZ25lZCBsb25nIHN0X2F0aW1lOworIHVuc2lnbmVkIGxvbmcgc3RfbXRpbWU7CisgdW5zaWduZWQgbG9uZyBzdF9jdGltZTsKKyNlbHNlCisgdW5zaWduZWQgaW50IHN0X3NpemU7CisgdW5zaWduZWQgaW50IHN0X2F0aW1lOworIHVuc2lnbmVkIGludCBzdF9tdGltZTsKKyB1bnNpZ25lZCBpbnQgc3RfY3RpbWU7CisjZW5kaWYKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3N0YXRmcy5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3N0YXRmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5MmQ4NjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc3RhdGZzLmgKQEAgLTAsMCArMSw2MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQVNNX1g4Nl9TVEFURlNfSAorI2RlZmluZSBfQVNNX1g4Nl9TVEFURlNfSAorCisjaWZkZWYgX19pMzg2X18KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zdGF0ZnMuaD4KKyNlbHNlCisKK3N0cnVjdCBzdGF0ZnMgeworIGxvbmcgZl90eXBlOworIGxvbmcgZl9ic2l6ZTsKKyBsb25nIGZfYmxvY2tzOworIGxvbmcgZl9iZnJlZTsKKyBsb25nIGZfYmF2YWlsOworIGxvbmcgZl9maWxlczsKKyBsb25nIGZfZmZyZWU7CisgX19rZXJuZWxfZnNpZF90IGZfZnNpZDsKKyBsb25nIGZfbmFtZWxlbjsKKyBsb25nIGZfZnJzaXplOworIGxvbmcgZl9zcGFyZVs1XTsKK307CisKK3N0cnVjdCBzdGF0ZnM2NCB7CisgbG9uZyBmX3R5cGU7CisgbG9uZyBmX2JzaXplOworIGxvbmcgZl9ibG9ja3M7CisgbG9uZyBmX2JmcmVlOworIGxvbmcgZl9iYXZhaWw7CisgbG9uZyBmX2ZpbGVzOworIGxvbmcgZl9mZnJlZTsKKyBfX2tlcm5lbF9mc2lkX3QgZl9mc2lkOworIGxvbmcgZl9uYW1lbGVuOworIGxvbmcgZl9mcnNpemU7CisgbG9uZyBmX3NwYXJlWzVdOworfTsKKworc3RydWN0IGNvbXBhdF9zdGF0ZnM2NCB7CisgX191MzIgZl90eXBlOworIF9fdTMyIGZfYnNpemU7CisgX191NjQgZl9ibG9ja3M7CisgX191NjQgZl9iZnJlZTsKKyBfX3U2NCBmX2JhdmFpbDsKKyBfX3U2NCBmX2ZpbGVzOworIF9fdTY0IGZfZmZyZWU7CisgX19rZXJuZWxfZnNpZF90IGZfZnNpZDsKKyBfX3UzMiBmX25hbWVsZW47CisgX191MzIgZl9mcnNpemU7CisgX191MzIgZl9zcGFyZVs1XTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc3RyaW5nLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc3RyaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJmYTI5MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zdHJpbmcuaApAQCAtMCwwICsxLDEyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAic3RyaW5nXzY0LmgiCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc3RyaW5nXzMyLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc3RyaW5nXzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThhNzJkNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zdHJpbmdfMzIuaApAQCAtMCwwICsxLDE1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9JMzg2X1NUUklOR19IXworI2RlZmluZSBfSTM4Nl9TVFJJTkdfSF8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc3dpb3RsYi5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3N3aW90bGIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWUzN2IzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3N3aW90bGIuaApAQCAtMCwwICsxLDE5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01fU1dJT1RMQl9ICisjZGVmaW5lIF9BU01fU1dJT1RMQl9IIDEKKworI2luY2x1ZGUgPGFzbS9kbWEtbWFwcGluZy5oPgorCisjZGVmaW5lIHN3aW90bGIgMAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zeXN0ZW0uaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zeXN0ZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzQxOTNiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3N5c3RlbS5oCkBAIC0wLDAgKzEsMTIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJzeXN0ZW1fNjQuaCIKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zeXN0ZW1fMzIuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zeXN0ZW1fMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzk5YWU2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3N5c3RlbV8zMi5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19BU01fU1lTVEVNX0gKKyNkZWZpbmUgX19BU01fU1lTVEVNX0gKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CisjaW5jbHVkZSA8YXNtL2NwdWZlYXR1cmUuaD4KKyNpbmNsdWRlIDxhc20vY21weGNoZy5oPgorCisjZGVmaW5lIG5vcCgpIF9fYXNtX18gX192b2xhdGlsZV9fICgibm9wIikKKyNkZWZpbmUgbWIoKSBhbHRlcm5hdGl2ZSgibG9jazsgYWRkbCAkMCwwKCUlZXNwKSIsICJtZmVuY2UiLCBYODZfRkVBVFVSRV9YTU0yKQorI2RlZmluZSBybWIoKSBhbHRlcm5hdGl2ZSgibG9jazsgYWRkbCAkMCwwKCUlZXNwKSIsICJsZmVuY2UiLCBYODZfRkVBVFVSRV9YTU0yKQorI2RlZmluZSB3bWIoKSBhbHRlcm5hdGl2ZSgibG9jazsgYWRkbCAkMCwwKCUlZXNwKSIsICJzZmVuY2UiLCBYODZfRkVBVFVSRV9YTU0pCisjZGVmaW5lIHJlYWRfYmFycmllcl9kZXBlbmRzKCkgZG8geyB9IHdoaWxlKDApCisjZGVmaW5lIHNtcF9tYigpIGJhcnJpZXIoKQorI2RlZmluZSBzbXBfcm1iKCkgYmFycmllcigpCisjZGVmaW5lIHNtcF93bWIoKSBiYXJyaWVyKCkKKyNkZWZpbmUgc21wX3JlYWRfYmFycmllcl9kZXBlbmRzKCkgZG8geyB9IHdoaWxlKDApCisjZGVmaW5lIHNldF9tYih2YXIsIHZhbHVlKSBkbyB7IHZhciA9IHZhbHVlOyBiYXJyaWVyKCk7IH0gd2hpbGUgKDApCisjaW5jbHVkZSA8bGludXgvaXJxZmxhZ3MuaD4KKyNkZWZpbmUgSEFWRV9ESVNBQkxFX0hMVAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS90ZXJtYml0cy5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3Rlcm1iaXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ3YzVlOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS90ZXJtYml0cy5oCkBAIC0wLDAgKzEsMjAxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01fWDg2X1RFUk1CSVRTX0gKKyNkZWZpbmUgX0FTTV9YODZfVEVSTUJJVFNfSAorCisjaW5jbHVkZSA8bGludXgvcG9zaXhfdHlwZXMuaD4KKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIGNjX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludCBzcGVlZF90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgdGNmbGFnX3Q7CisKKyNkZWZpbmUgTkNDUyAxOQorc3RydWN0IHRlcm1pb3MgeworIHRjZmxhZ190IGNfaWZsYWc7CisgdGNmbGFnX3QgY19vZmxhZzsKKyB0Y2ZsYWdfdCBjX2NmbGFnOworIHRjZmxhZ190IGNfbGZsYWc7CisgY2NfdCBjX2xpbmU7CisgY2NfdCBjX2NjW05DQ1NdOworfTsKKworc3RydWN0IHRlcm1pb3MyIHsKKyB0Y2ZsYWdfdCBjX2lmbGFnOworIHRjZmxhZ190IGNfb2ZsYWc7CisgdGNmbGFnX3QgY19jZmxhZzsKKyB0Y2ZsYWdfdCBjX2xmbGFnOworIGNjX3QgY19saW5lOworIGNjX3QgY19jY1tOQ0NTXTsKKyBzcGVlZF90IGNfaXNwZWVkOworIHNwZWVkX3QgY19vc3BlZWQ7Cit9OworCitzdHJ1Y3Qga3Rlcm1pb3MgeworIHRjZmxhZ190IGNfaWZsYWc7CisgdGNmbGFnX3QgY19vZmxhZzsKKyB0Y2ZsYWdfdCBjX2NmbGFnOworIHRjZmxhZ190IGNfbGZsYWc7CisgY2NfdCBjX2xpbmU7CisgY2NfdCBjX2NjW05DQ1NdOworIHNwZWVkX3QgY19pc3BlZWQ7Cisgc3BlZWRfdCBjX29zcGVlZDsKK307CisKKyNkZWZpbmUgVklOVFIgMAorI2RlZmluZSBWUVVJVCAxCisjZGVmaW5lIFZFUkFTRSAyCisjZGVmaW5lIFZLSUxMIDMKKyNkZWZpbmUgVkVPRiA0CisjZGVmaW5lIFZUSU1FIDUKKyNkZWZpbmUgVk1JTiA2CisjZGVmaW5lIFZTV1RDIDcKKyNkZWZpbmUgVlNUQVJUIDgKKyNkZWZpbmUgVlNUT1AgOQorI2RlZmluZSBWU1VTUCAxMAorI2RlZmluZSBWRU9MIDExCisjZGVmaW5lIFZSRVBSSU5UIDEyCisjZGVmaW5lIFZESVNDQVJEIDEzCisjZGVmaW5lIFZXRVJBU0UgMTQKKyNkZWZpbmUgVkxORVhUIDE1CisjZGVmaW5lIFZFT0wyIDE2CisKKyNkZWZpbmUgSUdOQlJLIDAwMDAwMDEKKyNkZWZpbmUgQlJLSU5UIDAwMDAwMDIKKyNkZWZpbmUgSUdOUEFSIDAwMDAwMDQKKyNkZWZpbmUgUEFSTVJLIDAwMDAwMTAKKyNkZWZpbmUgSU5QQ0sgMDAwMDAyMAorI2RlZmluZSBJU1RSSVAgMDAwMDA0MAorI2RlZmluZSBJTkxDUiAwMDAwMTAwCisjZGVmaW5lIElHTkNSIDAwMDAyMDAKKyNkZWZpbmUgSUNSTkwgMDAwMDQwMAorI2RlZmluZSBJVUNMQyAwMDAxMDAwCisjZGVmaW5lIElYT04gMDAwMjAwMAorI2RlZmluZSBJWEFOWSAwMDA0MDAwCisjZGVmaW5lIElYT0ZGIDAwMTAwMDAKKyNkZWZpbmUgSU1BWEJFTCAwMDIwMDAwCisjZGVmaW5lIElVVEY4IDAwNDAwMDAKKworI2RlZmluZSBPUE9TVCAwMDAwMDAxCisjZGVmaW5lIE9MQ1VDIDAwMDAwMDIKKyNkZWZpbmUgT05MQ1IgMDAwMDAwNAorI2RlZmluZSBPQ1JOTCAwMDAwMDEwCisjZGVmaW5lIE9OT0NSIDAwMDAwMjAKKyNkZWZpbmUgT05MUkVUIDAwMDAwNDAKKyNkZWZpbmUgT0ZJTEwgMDAwMDEwMAorI2RlZmluZSBPRkRFTCAwMDAwMjAwCisjZGVmaW5lIE5MRExZIDAwMDA0MDAKKyNkZWZpbmUgTkwwIDAwMDAwMDAKKyNkZWZpbmUgTkwxIDAwMDA0MDAKKyNkZWZpbmUgQ1JETFkgMDAwMzAwMAorI2RlZmluZSBDUjAgMDAwMDAwMAorI2RlZmluZSBDUjEgMDAwMTAwMAorI2RlZmluZSBDUjIgMDAwMjAwMAorI2RlZmluZSBDUjMgMDAwMzAwMAorI2RlZmluZSBUQUJETFkgMDAxNDAwMAorI2RlZmluZSBUQUIwIDAwMDAwMDAKKyNkZWZpbmUgVEFCMSAwMDA0MDAwCisjZGVmaW5lIFRBQjIgMDAxMDAwMAorI2RlZmluZSBUQUIzIDAwMTQwMDAKKyNkZWZpbmUgWFRBQlMgMDAxNDAwMAorI2RlZmluZSBCU0RMWSAwMDIwMDAwCisjZGVmaW5lIEJTMCAwMDAwMDAwCisjZGVmaW5lIEJTMSAwMDIwMDAwCisjZGVmaW5lIFZURExZIDAwNDAwMDAKKyNkZWZpbmUgVlQwIDAwMDAwMDAKKyNkZWZpbmUgVlQxIDAwNDAwMDAKKyNkZWZpbmUgRkZETFkgMDEwMDAwMAorI2RlZmluZSBGRjAgMDAwMDAwMAorI2RlZmluZSBGRjEgMDEwMDAwMAorCisjZGVmaW5lIENCQVVEIDAwMTAwMTcKKyNkZWZpbmUgQjAgMDAwMDAwMCAgCisjZGVmaW5lIEI1MCAwMDAwMDAxCisjZGVmaW5lIEI3NSAwMDAwMDAyCisjZGVmaW5lIEIxMTAgMDAwMDAwMworI2RlZmluZSBCMTM0IDAwMDAwMDQKKyNkZWZpbmUgQjE1MCAwMDAwMDA1CisjZGVmaW5lIEIyMDAgMDAwMDAwNgorI2RlZmluZSBCMzAwIDAwMDAwMDcKKyNkZWZpbmUgQjYwMCAwMDAwMDEwCisjZGVmaW5lIEIxMjAwIDAwMDAwMTEKKyNkZWZpbmUgQjE4MDAgMDAwMDAxMgorI2RlZmluZSBCMjQwMCAwMDAwMDEzCisjZGVmaW5lIEI0ODAwIDAwMDAwMTQKKyNkZWZpbmUgQjk2MDAgMDAwMDAxNQorI2RlZmluZSBCMTkyMDAgMDAwMDAxNgorI2RlZmluZSBCMzg0MDAgMDAwMDAxNworI2RlZmluZSBFWFRBIEIxOTIwMAorI2RlZmluZSBFWFRCIEIzODQwMAorI2RlZmluZSBDU0laRSAwMDAwMDYwCisjZGVmaW5lIENTNSAwMDAwMDAwCisjZGVmaW5lIENTNiAwMDAwMDIwCisjZGVmaW5lIENTNyAwMDAwMDQwCisjZGVmaW5lIENTOCAwMDAwMDYwCisjZGVmaW5lIENTVE9QQiAwMDAwMTAwCisjZGVmaW5lIENSRUFEIDAwMDAyMDAKKyNkZWZpbmUgUEFSRU5CIDAwMDA0MDAKKyNkZWZpbmUgUEFST0REIDAwMDEwMDAKKyNkZWZpbmUgSFVQQ0wgMDAwMjAwMAorI2RlZmluZSBDTE9DQUwgMDAwNDAwMAorI2RlZmluZSBDQkFVREVYIDAwMTAwMDAKKyNkZWZpbmUgQk9USEVSIDAwMTAwMDAgIAorI2RlZmluZSBCNTc2MDAgMDAxMDAwMQorI2RlZmluZSBCMTE1MjAwIDAwMTAwMDIKKyNkZWZpbmUgQjIzMDQwMCAwMDEwMDAzCisjZGVmaW5lIEI0NjA4MDAgMDAxMDAwNAorI2RlZmluZSBCNTAwMDAwIDAwMTAwMDUKKyNkZWZpbmUgQjU3NjAwMCAwMDEwMDA2CisjZGVmaW5lIEI5MjE2MDAgMDAxMDAwNworI2RlZmluZSBCMTAwMDAwMCAwMDEwMDEwCisjZGVmaW5lIEIxMTUyMDAwIDAwMTAwMTEKKyNkZWZpbmUgQjE1MDAwMDAgMDAxMDAxMgorI2RlZmluZSBCMjAwMDAwMCAwMDEwMDEzCisjZGVmaW5lIEIyNTAwMDAwIDAwMTAwMTQKKyNkZWZpbmUgQjMwMDAwMDAgMDAxMDAxNQorI2RlZmluZSBCMzUwMDAwMCAwMDEwMDE2CisjZGVmaW5lIEI0MDAwMDAwIDAwMTAwMTcKKyNkZWZpbmUgQ0lCQVVEIDAwMjAwMzYwMDAwMCAgCisjZGVmaW5lIENNU1BBUiAwMTAwMDAwMDAwMDAgIAorI2RlZmluZSBDUlRTQ1RTIDAyMDAwMDAwMDAwMCAgCisKKyNkZWZpbmUgSUJTSElGVCAxNiAgCisKKyNkZWZpbmUgSVNJRyAwMDAwMDAxCisjZGVmaW5lIElDQU5PTiAwMDAwMDAyCisjZGVmaW5lIFhDQVNFIDAwMDAwMDQKKyNkZWZpbmUgRUNITyAwMDAwMDEwCisjZGVmaW5lIEVDSE9FIDAwMDAwMjAKKyNkZWZpbmUgRUNIT0sgMDAwMDA0MAorI2RlZmluZSBFQ0hPTkwgMDAwMDEwMAorI2RlZmluZSBOT0ZMU0ggMDAwMDIwMAorI2RlZmluZSBUT1NUT1AgMDAwMDQwMAorI2RlZmluZSBFQ0hPQ1RMIDAwMDEwMDAKKyNkZWZpbmUgRUNIT1BSVCAwMDAyMDAwCisjZGVmaW5lIEVDSE9LRSAwMDA0MDAwCisjZGVmaW5lIEZMVVNITyAwMDEwMDAwCisjZGVmaW5lIFBFTkRJTiAwMDQwMDAwCisjZGVmaW5lIElFWFRFTiAwMTAwMDAwCisKKyNkZWZpbmUgVENPT0ZGIDAKKyNkZWZpbmUgVENPT04gMQorI2RlZmluZSBUQ0lPRkYgMgorI2RlZmluZSBUQ0lPTiAzCisKKyNkZWZpbmUgVENJRkxVU0ggMAorI2RlZmluZSBUQ09GTFVTSCAxCisjZGVmaW5lIFRDSU9GTFVTSCAyCisKKyNkZWZpbmUgVENTQU5PVyAwCisjZGVmaW5lIFRDU0FEUkFJTiAxCisjZGVmaW5lIFRDU0FGTFVTSCAyCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3Rlcm1pb3MuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS90ZXJtaW9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGEzOGFlZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS90ZXJtaW9zLmgKQEAgLTAsMCArMSw1MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQVNNX1g4Nl9URVJNSU9TX0gKKyNkZWZpbmUgX0FTTV9YODZfVEVSTUlPU19ICisKKyNpbmNsdWRlIDxhc20vdGVybWJpdHMuaD4KKyNpbmNsdWRlIDxhc20vaW9jdGxzLmg+CisKK3N0cnVjdCB3aW5zaXplIHsKKyB1bnNpZ25lZCBzaG9ydCB3c19yb3c7CisgdW5zaWduZWQgc2hvcnQgd3NfY29sOworIHVuc2lnbmVkIHNob3J0IHdzX3hwaXhlbDsKKyB1bnNpZ25lZCBzaG9ydCB3c195cGl4ZWw7Cit9OworCisjZGVmaW5lIE5DQyA4CitzdHJ1Y3QgdGVybWlvIHsKKyB1bnNpZ25lZCBzaG9ydCBjX2lmbGFnOworIHVuc2lnbmVkIHNob3J0IGNfb2ZsYWc7CisgdW5zaWduZWQgc2hvcnQgY19jZmxhZzsKKyB1bnNpZ25lZCBzaG9ydCBjX2xmbGFnOworIHVuc2lnbmVkIGNoYXIgY19saW5lOworIHVuc2lnbmVkIGNoYXIgY19jY1tOQ0NdOworfTsKKworI2RlZmluZSBUSU9DTV9MRSAweDAwMQorI2RlZmluZSBUSU9DTV9EVFIgMHgwMDIKKyNkZWZpbmUgVElPQ01fUlRTIDB4MDA0CisjZGVmaW5lIFRJT0NNX1NUIDB4MDA4CisjZGVmaW5lIFRJT0NNX1NSIDB4MDEwCisjZGVmaW5lIFRJT0NNX0NUUyAweDAyMAorI2RlZmluZSBUSU9DTV9DQVIgMHgwNDAKKyNkZWZpbmUgVElPQ01fUk5HIDB4MDgwCisjZGVmaW5lIFRJT0NNX0RTUiAweDEwMAorI2RlZmluZSBUSU9DTV9DRCBUSU9DTV9DQVIKKyNkZWZpbmUgVElPQ01fUkkgVElPQ01fUk5HCisjZGVmaW5lIFRJT0NNX09VVDEgMHgyMDAwCisjZGVmaW5lIFRJT0NNX09VVDIgMHg0MDAwCisjZGVmaW5lIFRJT0NNX0xPT1AgMHg4MDAwCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3RocmVhZF9pbmZvLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vdGhyZWFkX2luZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjQ2YjA4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3RocmVhZF9pbmZvLmgKQEAgLTAsMCArMSwxMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgInRocmVhZF9pbmZvXzY0LmgiCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vdGhyZWFkX2luZm9fMzIuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS90aHJlYWRfaW5mb18zMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NjRlZjgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vdGhyZWFkX2luZm9fMzIuaApAQCAtMCwwICsxLDE1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01fVEhSRUFEX0lORk9fSAorI2RlZmluZSBfQVNNX1RIUkVBRF9JTkZPX0gKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vdGxiZmx1c2guaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS90bGJmbHVzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkNmIyMjYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vdGxiZmx1c2guaApAQCAtMCwwICsxLDEyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAidGxiZmx1c2hfNjQuaCIKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS90bGJmbHVzaF8zMi5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3RsYmZsdXNoXzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGViZmY4MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS90bGJmbHVzaF8zMi5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0kzODZfVExCRkxVU0hfSAorI2RlZmluZSBfSTM4Nl9UTEJGTFVTSF9ICisKKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKworI2RlZmluZSBfX2ZsdXNoX3RsYigpIF9fbmF0aXZlX2ZsdXNoX3RsYigpCisjZGVmaW5lIF9fZmx1c2hfdGxiX2dsb2JhbCgpIF9fbmF0aXZlX2ZsdXNoX3RsYl9nbG9iYWwoKQorI2RlZmluZSBfX2ZsdXNoX3RsYl9zaW5nbGUoYWRkcikgX19uYXRpdmVfZmx1c2hfdGxiX3NpbmdsZShhZGRyKQorCisjZGVmaW5lIF9fbmF0aXZlX2ZsdXNoX3RsYigpICAgZG8geyAgIHVuc2lnbmVkIGludCB0bXByZWc7ICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyggICAibW92bCAlJWNyMywgJTA7ICAgICAgICAgICAgICBcbiIgICAibW92bCAlMCwgJSVjcjM7ICAjIGZsdXNoIFRMQiBcbiIgICA6ICI9ciIgKHRtcHJlZykgICA6OiAibWVtb3J5Iik7ICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBfX25hdGl2ZV9mbHVzaF90bGJfZ2xvYmFsKCkgICBkbyB7ICAgdW5zaWduZWQgaW50IHRtcHJlZywgY3I0LCBjcjRfb3JpZzsgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCAgICJtb3ZsICUlY3I0LCAlMjsgICMgdHVybiBvZmYgUEdFICAgICBcbiIgICAibW92bCAlMiwgJTE7ICAgICAgICAgICAgICAgICAgICAgICAgXG4iICAgImFuZGwgJTMsICUxOyAgICAgICAgICAgICAgICAgICAgICAgIFxuIiAgICJtb3ZsICUxLCAlJWNyNDsgICAgICAgICAgICAgICAgICAgICBcbiIgICAibW92bCAlJWNyMywgJTA7ICAgICAgICAgICAgICAgICAgICAgXG4iICAgIm1vdmwgJTAsICUlY3IzOyAgIyBmbHVzaCBUTEIgICAgICAgIFxuIiAgICJtb3ZsICUyLCAlJWNyNDsgICMgdHVybiBQR0UgYmFjayBvbiBcbiIgICA6ICI9JnIiICh0bXByZWcpLCAiPSZyIiAoY3I0KSwgIj0mciIgKGNyNF9vcmlnKSAgIDogImkiICh+WDg2X0NSNF9QR0UpICAgOiAibWVtb3J5Iik7ICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBfX25hdGl2ZV9mbHVzaF90bGJfc2luZ2xlKGFkZHIpICAgX19hc21fXyBfX3ZvbGF0aWxlX18oImludmxwZyAoJTApIiA6OiJyIiAoYWRkcikgOiAibWVtb3J5IikKKworI2RlZmluZSBfX2ZsdXNoX3RsYl9hbGwoKSAgIGRvIHsgICBpZiAoY3B1X2hhc19wZ2UpICAgX19mbHVzaF90bGJfZ2xvYmFsKCk7ICAgZWxzZSAgIF9fZmx1c2hfdGxiKCk7ICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBjcHVfaGFzX2ludmxwZyAoYm9vdF9jcHVfZGF0YS54ODYgPiAzKQorCisjZGVmaW5lIF9fZmx1c2hfdGxiX29uZShhZGRyKSAgIGRvIHsgICBpZiAoY3B1X2hhc19pbnZscGcpICAgX19mbHVzaF90bGJfc2luZ2xlKGFkZHIpOyAgIGVsc2UgICBfX2ZsdXNoX3RsYigpOyAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgVExCX0ZMVVNIX0FMTCAweGZmZmZmZmZmCisKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorCisjZGVmaW5lIGZsdXNoX3RsYigpIF9fZmx1c2hfdGxiKCkKKyNkZWZpbmUgZmx1c2hfdGxiX2FsbCgpIF9fZmx1c2hfdGxiX2FsbCgpCisjZGVmaW5lIGxvY2FsX2ZsdXNoX3RsYigpIF9fZmx1c2hfdGxiKCkKKworI2RlZmluZSBmbHVzaF90bGJfb3RoZXJzKG1hc2ssIG1tLCB2YSkgICBuYXRpdmVfZmx1c2hfdGxiX290aGVycygmbWFzaywgbW0sIHZhKQorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vdHNjLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vdHNjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjUyOGNkMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS90c2MuaApAQCAtMCwwICsxLDIyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01fWDg2X1RTQ19ICisjZGVmaW5lIF9BU01fWDg2X1RTQ19ICisKKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisKKyNkZWZpbmUgTlNfU0NBTEUgMTAgIAorI2RlZmluZSBVU19TQ0FMRSAzMiAgCisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGN5Y2xlc190OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS90eXBlcy5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFmOTJiMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS90eXBlcy5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FTTV9YODZfVFlQRVNfSAorI2RlZmluZSBfQVNNX1g4Nl9UWVBFU19ICisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgdW1vZGVfdDsKKwordHlwZWRlZiBfX3NpZ25lZF9fIGNoYXIgX19zODsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBfX3U4OworCit0eXBlZGVmIF9fc2lnbmVkX18gc2hvcnQgX19zMTY7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fdTE2OworCit0eXBlZGVmIF9fc2lnbmVkX18gaW50IF9fczMyOwordHlwZWRlZiB1bnNpZ25lZCBpbnQgX191MzI7CisKKyNpZmRlZiBfX2kzODZfXworI2lmZGVmIF9fR05VQ19fCitfX2V4dGVuc2lvbl9fIHR5cGVkZWYgX19zaWduZWRfXyBsb25nIGxvbmcgX19zNjQ7CitfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIF9fdTY0OworI2VuZGlmCisjZWxzZQordHlwZWRlZiBfX3NpZ25lZF9fIGxvbmcgbG9uZyBfX3M2NDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIF9fdTY0OworI2VuZGlmCisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS91YWNjZXNzLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vdWFjY2Vzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyYmVjNjkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vdWFjY2Vzcy5oCkBAIC0wLDAgKzEsMTIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJ1YWNjZXNzXzY0LmgiCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vdWFjY2Vzc18zMi5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3VhY2Nlc3NfMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODI3ZmM0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3VhY2Nlc3NfMzIuaApAQCAtMCwwICsxLDgzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9faTM4Nl9VQUNDRVNTX0gKKyNkZWZpbmUgX19pMzg2X1VBQ0NFU1NfSAorCisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC90aHJlYWRfaW5mby5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworI2RlZmluZSBWRVJJRllfUkVBRCAwCisjZGVmaW5lIFZFUklGWV9XUklURSAxCisKKyNkZWZpbmUgTUFLRV9NTV9TRUcocykgKChtbV9zZWdtZW50X3QpIHsgKHMpIH0pCisKKyNkZWZpbmUgS0VSTkVMX0RTIE1BS0VfTU1fU0VHKDB4RkZGRkZGRkZVTCkKKyNkZWZpbmUgVVNFUl9EUyBNQUtFX01NX1NFRyhQQUdFX09GRlNFVCkKKworI2RlZmluZSBnZXRfZHMoKSAoS0VSTkVMX0RTKQorI2RlZmluZSBnZXRfZnMoKSAoY3VycmVudF90aHJlYWRfaW5mbygpLT5hZGRyX2xpbWl0KQorI2RlZmluZSBzZXRfZnMoeCkgKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+YWRkcl9saW1pdCA9ICh4KSkKKworI2RlZmluZSBzZWdtZW50X2VxKGEsYikgKChhKS5zZWcgPT0gKGIpLnNlZykKKworI2RlZmluZSBfX2FkZHJfb2soYWRkcikgKCh1bnNpZ25lZCBsb25nIF9fZm9yY2UpKGFkZHIpIDwgKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+YWRkcl9saW1pdC5zZWcpKQorCisjZGVmaW5lIF9fcmFuZ2Vfb2soYWRkcixzaXplKSAoeyAgIHVuc2lnbmVkIGxvbmcgZmxhZyxyb2tzdW07ICAgX19jaGtfdXNlcl9wdHIoYWRkcik7ICAgYXNtKCJhZGRsICUzLCUxIDsgc2JibCAlMCwlMDsgY21wbCAlMSwlNDsgc2JibCAkMCwlMCIgICA6Ij0mciIgKGZsYWcpLCAiPXIiIChyb2tzdW0pICAgOiIxIiAoYWRkciksImciICgoaW50KShzaXplKSksInJtIiAoY3VycmVudF90aHJlYWRfaW5mbygpLT5hZGRyX2xpbWl0LnNlZykpOyAgIGZsYWc7IH0pCisKKyNkZWZpbmUgYWNjZXNzX29rKHR5cGUsYWRkcixzaXplKSAobGlrZWx5KF9fcmFuZ2Vfb2soYWRkcixzaXplKSA9PSAwKSkKKworc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeQoreworIHVuc2lnbmVkIGxvbmcgaW5zbiwgZml4dXA7Cit9OworCisjZGVmaW5lIF9fZ2V0X3VzZXJfeChzaXplLHJldCx4LHB0cikgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiY2FsbCBfX2dldF91c2VyXyIgI3NpemUgICA6Ij1hIiAocmV0KSwiPWQiICh4KSAgIDoiMCIgKHB0cikpCisKKyNkZWZpbmUgZ2V0X3VzZXIoeCxwdHIpICAoeyBpbnQgX19yZXRfZ3U7ICAgdW5zaWduZWQgbG9uZyBfX3ZhbF9ndTsgICBfX2Noa191c2VyX3B0cihwdHIpOyAgIHN3aXRjaChzaXplb2YgKCoocHRyKSkpIHsgICBjYXNlIDE6IF9fZ2V0X3VzZXJfeCgxLF9fcmV0X2d1LF9fdmFsX2d1LHB0cik7IGJyZWFrOyAgIGNhc2UgMjogX19nZXRfdXNlcl94KDIsX19yZXRfZ3UsX192YWxfZ3UscHRyKTsgYnJlYWs7ICAgY2FzZSA0OiBfX2dldF91c2VyX3goNCxfX3JldF9ndSxfX3ZhbF9ndSxwdHIpOyBicmVhazsgICBkZWZhdWx0OiBfX2dldF91c2VyX3goWCxfX3JldF9ndSxfX3ZhbF9ndSxwdHIpOyBicmVhazsgICB9ICAgKHgpID0gKF9fdHlwZW9mX18oKihwdHIpKSlfX3ZhbF9ndTsgICBfX3JldF9ndTsgIH0pCisKKyNkZWZpbmUgX19wdXRfdXNlcl8xKHgsIHB0cikgX19hc21fXyBfX3ZvbGF0aWxlX18oImNhbGwgX19wdXRfdXNlcl8xIjoiPWEiIChfX3JldF9wdSk6IjAiICgodHlwZW9mKCoocHRyKSkpKHgpKSwgImMiIChwdHIpKQorI2RlZmluZSBfX3B1dF91c2VyXzIoeCwgcHRyKSBfX2FzbV9fIF9fdm9sYXRpbGVfXygiY2FsbCBfX3B1dF91c2VyXzIiOiI9YSIgKF9fcmV0X3B1KToiMCIgKCh0eXBlb2YoKihwdHIpKSkoeCkpLCAiYyIgKHB0cikpCisjZGVmaW5lIF9fcHV0X3VzZXJfNCh4LCBwdHIpIF9fYXNtX18gX192b2xhdGlsZV9fKCJjYWxsIF9fcHV0X3VzZXJfNCI6Ij1hIiAoX19yZXRfcHUpOiIwIiAoKHR5cGVvZigqKHB0cikpKSh4KSksICJjIiAocHRyKSkKKyNkZWZpbmUgX19wdXRfdXNlcl84KHgsIHB0cikgX19hc21fXyBfX3ZvbGF0aWxlX18oImNhbGwgX19wdXRfdXNlcl84IjoiPWEiIChfX3JldF9wdSk6IkEiICgodHlwZW9mKCoocHRyKSkpKHgpKSwgImMiIChwdHIpKQorI2RlZmluZSBfX3B1dF91c2VyX1goeCwgcHRyKSBfX2FzbV9fIF9fdm9sYXRpbGVfXygiY2FsbCBfX3B1dF91c2VyX1giOiI9YSIgKF9fcmV0X3B1KToiYyIgKHB0cikpCisKKyNkZWZpbmUgcHV0X3VzZXIoeCxwdHIpICAoeyAgIGludCBfX3JldF9wdTsgICBfX3R5cGVvZl9fKCoocHRyKSkgX19wdXNfdG1wID0geDsgICBfX3JldF9wdT0wOyAgIGlmKHVubGlrZWx5KF9fY29weV90b191c2VyX2xsKHB0ciwgJl9fcHVzX3RtcCwgICBzaXplb2YoKihwdHIpKSkgIT0gMCkpICAgX19yZXRfcHU9LUVGQVVMVDsgICBfX3JldF9wdTsgICB9KQorCisjZGVmaW5lIF9fZ2V0X3VzZXIoeCxwdHIpICAgX19nZXRfdXNlcl9ub2NoZWNrKCh4KSwocHRyKSxzaXplb2YoKihwdHIpKSkKKworI2RlZmluZSBfX3B1dF91c2VyKHgscHRyKSAgIF9fcHV0X3VzZXJfbm9jaGVjaygoX190eXBlb2ZfXygqKHB0cikpKSh4KSwocHRyKSxzaXplb2YoKihwdHIpKSkKKworI2RlZmluZSBfX3B1dF91c2VyX25vY2hlY2soeCxwdHIsc2l6ZSkgICh7ICAgbG9uZyBfX3B1X2VycjsgICBfX3B1dF91c2VyX3NpemUoKHgpLChwdHIpLChzaXplKSxfX3B1X2VyciwtRUZBVUxUKTsgICBfX3B1X2VycjsgIH0pCisKKyNkZWZpbmUgX19wdXRfdXNlcl91NjQoeCwgYWRkciwgZXJyKSAgIF9fYXNtX18gX192b2xhdGlsZV9fKCAgICIxOgltb3ZsICUlZWF4LDAoJTIpXG4iICAgIjI6CW1vdmwgJSVlZHgsNCglMilcbiIgICAiMzpcbiIgICAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIiAgICI0Ogltb3ZsICUzLCUwXG4iICAgIglqbXAgM2JcbiIgICAiLnByZXZpb3VzXG4iICAgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIgICAiCS5hbGlnbiA0XG4iICAgIgkubG9uZyAxYiw0YlxuIiAgICIJLmxvbmcgMmIsNGJcbiIgICAiLnByZXZpb3VzIiAgIDogIj1yIihlcnIpICAgOiAiQSIgKHgpLCAiciIgKGFkZHIpLCAiaSIoLUVGQVVMVCksICIwIihlcnIpKQorCisjZGVmaW5lIF9fcHV0X3VzZXJfc2l6ZSh4LHB0cixzaXplLHJldHZhbCxlcnJyZXQpICBkbyB7ICAgX190eXBlb2ZfXygqKHB0cikpIF9fcHVzX3RtcCA9IHg7ICAgcmV0dmFsID0gMDsgICAgIGlmKHVubGlrZWx5KF9fY29weV90b191c2VyX2xsKHB0ciwgJl9fcHVzX3RtcCwgc2l6ZSkgIT0gMCkpICAgcmV0dmFsID0gZXJycmV0OyAgfSB3aGlsZSAoMCkKKworc3RydWN0IF9fbGFyZ2Vfc3RydWN0IHsgdW5zaWduZWQgbG9uZyBidWZbMTAwXTsgfTsKKyNkZWZpbmUgX19tKHgpICgqKHN0cnVjdCBfX2xhcmdlX3N0cnVjdCBfX3VzZXIgKikoeCkpCisKKyNkZWZpbmUgX19wdXRfdXNlcl9hc20oeCwgYWRkciwgZXJyLCBpdHlwZSwgcnR5cGUsIGx0eXBlLCBlcnJyZXQpICAgX19hc21fXyBfX3ZvbGF0aWxlX18oICAgIjE6CW1vdiJpdHlwZSIgJSJydHlwZSIxLCUyXG4iICAgIjI6XG4iICAgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIgICAiMzoJbW92bCAlMywlMFxuIiAgICIJam1wIDJiXG4iICAgIi5wcmV2aW91c1xuIiAgICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iICAgIgkuYWxpZ24gNFxuIiAgICIJLmxvbmcgMWIsM2JcbiIgICAiLnByZXZpb3VzIiAgIDogIj1yIihlcnIpICAgOiBsdHlwZSAoeCksICJtIihfX20oYWRkcikpLCAiaSIoZXJycmV0KSwgIjAiKGVycikpCisKKyNkZWZpbmUgX19nZXRfdXNlcl9ub2NoZWNrKHgscHRyLHNpemUpICAoeyAgIGxvbmcgX19ndV9lcnI7ICAgdW5zaWduZWQgbG9uZyBfX2d1X3ZhbDsgICBfX2dldF91c2VyX3NpemUoX19ndV92YWwsKHB0ciksKHNpemUpLF9fZ3VfZXJyLC1FRkFVTFQpOyAgKHgpID0gKF9fdHlwZW9mX18oKihwdHIpKSlfX2d1X3ZhbDsgICBfX2d1X2VycjsgIH0pCisKKyNkZWZpbmUgX19nZXRfdXNlcl9zaXplKHgscHRyLHNpemUscmV0dmFsLGVycnJldCkgIGRvIHsgICByZXR2YWwgPSAwOyAgIF9fY2hrX3VzZXJfcHRyKHB0cik7ICAgc3dpdGNoIChzaXplKSB7ICAgY2FzZSAxOiBfX2dldF91c2VyX2FzbSh4LHB0cixyZXR2YWwsImIiLCJiIiwiPXEiLGVycnJldCk7YnJlYWs7ICAgY2FzZSAyOiBfX2dldF91c2VyX2FzbSh4LHB0cixyZXR2YWwsInciLCJ3IiwiPXIiLGVycnJldCk7YnJlYWs7ICAgY2FzZSA0OiBfX2dldF91c2VyX2FzbSh4LHB0cixyZXR2YWwsImwiLCIiLCI9ciIsZXJycmV0KTticmVhazsgICBkZWZhdWx0OiAoeCkgPSBfX2dldF91c2VyX2JhZCgpOyAgIH0gIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgX19nZXRfdXNlcl9hc20oeCwgYWRkciwgZXJyLCBpdHlwZSwgcnR5cGUsIGx0eXBlLCBlcnJyZXQpICAgX19hc21fXyBfX3ZvbGF0aWxlX18oICAgIjE6CW1vdiJpdHlwZSIgJTIsJSJydHlwZSIxXG4iICAgIjI6XG4iICAgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIgICAiMzoJbW92bCAlMywlMFxuIiAgICIJeG9yIml0eXBlIiAlInJ0eXBlIjEsJSJydHlwZSIxXG4iICAgIglqbXAgMmJcbiIgICAiLnByZXZpb3VzXG4iICAgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIgICAiCS5hbGlnbiA0XG4iICAgIgkubG9uZyAxYiwzYlxuIiAgICIucHJldmlvdXMiICAgOiAiPXIiKGVyciksIGx0eXBlICh4KSAgIDogIm0iKF9fbShhZGRyKSksICJpIihlcnJyZXQpLCAiMCIoZXJyKSkKKworI2RlZmluZSBBUkNIX0hBU19OT0NBQ0hFX1VBQ0NFU1MKKworI2RlZmluZSBzdHJsZW5fdXNlcihzdHIpIHN0cm5sZW5fdXNlcihzdHIsIExPTkdfTUFYKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS91bmFsaWduZWQuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS91bmFsaWduZWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTdhOGE3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3VuYWxpZ25lZC5oCkBAIC0wLDAgKzEsMTkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FTTV9YODZfVU5BTElHTkVEX0gKKyNkZWZpbmUgX0FTTV9YODZfVU5BTElHTkVEX0gKKworI2RlZmluZSBnZXRfdW5hbGlnbmVkKHB0cikgKCoocHRyKSkKKworI2RlZmluZSBwdXRfdW5hbGlnbmVkKHZhbCwgcHRyKSAoKHZvaWQpKCAqKHB0cikgPSAodmFsKSApKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS91bmlzdGQuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS91bmlzdGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjlmODM2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3VuaXN0ZC5oCkBAIC0wLDAgKzEsMTYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZmRlZiBfX2kzODZfXworI2luY2x1ZGUgInVuaXN0ZF8zMi5oIgorI2Vsc2UKKyNpbmNsdWRlICJ1bmlzdGRfNjQuaCIKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3VuaXN0ZF8zMi5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3VuaXN0ZF8zMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzZDhiMTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vdW5pc3RkXzMyLmgKQEAgLTAsMCArMSwzNDEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FTTV9JMzg2X1VOSVNURF9IXworI2RlZmluZSBfQVNNX0kzODZfVU5JU1REX0hfCisKKyNkZWZpbmUgX19OUl9yZXN0YXJ0X3N5c2NhbGwgMAorI2RlZmluZSBfX05SX2V4aXQgMQorI2RlZmluZSBfX05SX2ZvcmsgMgorI2RlZmluZSBfX05SX3JlYWQgMworI2RlZmluZSBfX05SX3dyaXRlIDQKKyNkZWZpbmUgX19OUl9vcGVuIDUKKyNkZWZpbmUgX19OUl9jbG9zZSA2CisjZGVmaW5lIF9fTlJfd2FpdHBpZCA3CisjZGVmaW5lIF9fTlJfY3JlYXQgOAorI2RlZmluZSBfX05SX2xpbmsgOQorI2RlZmluZSBfX05SX3VubGluayAxMAorI2RlZmluZSBfX05SX2V4ZWN2ZSAxMQorI2RlZmluZSBfX05SX2NoZGlyIDEyCisjZGVmaW5lIF9fTlJfdGltZSAxMworI2RlZmluZSBfX05SX21rbm9kIDE0CisjZGVmaW5lIF9fTlJfY2htb2QgMTUKKyNkZWZpbmUgX19OUl9sY2hvd24gMTYKKyNkZWZpbmUgX19OUl9icmVhayAxNworI2RlZmluZSBfX05SX29sZHN0YXQgMTgKKyNkZWZpbmUgX19OUl9sc2VlayAxOQorI2RlZmluZSBfX05SX2dldHBpZCAyMAorI2RlZmluZSBfX05SX21vdW50IDIxCisjZGVmaW5lIF9fTlJfdW1vdW50IDIyCisjZGVmaW5lIF9fTlJfc2V0dWlkIDIzCisjZGVmaW5lIF9fTlJfZ2V0dWlkIDI0CisjZGVmaW5lIF9fTlJfc3RpbWUgMjUKKyNkZWZpbmUgX19OUl9wdHJhY2UgMjYKKyNkZWZpbmUgX19OUl9hbGFybSAyNworI2RlZmluZSBfX05SX29sZGZzdGF0IDI4CisjZGVmaW5lIF9fTlJfcGF1c2UgMjkKKyNkZWZpbmUgX19OUl91dGltZSAzMAorI2RlZmluZSBfX05SX3N0dHkgMzEKKyNkZWZpbmUgX19OUl9ndHR5IDMyCisjZGVmaW5lIF9fTlJfYWNjZXNzIDMzCisjZGVmaW5lIF9fTlJfbmljZSAzNAorI2RlZmluZSBfX05SX2Z0aW1lIDM1CisjZGVmaW5lIF9fTlJfc3luYyAzNgorI2RlZmluZSBfX05SX2tpbGwgMzcKKyNkZWZpbmUgX19OUl9yZW5hbWUgMzgKKyNkZWZpbmUgX19OUl9ta2RpciAzOQorI2RlZmluZSBfX05SX3JtZGlyIDQwCisjZGVmaW5lIF9fTlJfZHVwIDQxCisjZGVmaW5lIF9fTlJfcGlwZSA0MgorI2RlZmluZSBfX05SX3RpbWVzIDQzCisjZGVmaW5lIF9fTlJfcHJvZiA0NAorI2RlZmluZSBfX05SX2JyayA0NQorI2RlZmluZSBfX05SX3NldGdpZCA0NgorI2RlZmluZSBfX05SX2dldGdpZCA0NworI2RlZmluZSBfX05SX3NpZ25hbCA0OAorI2RlZmluZSBfX05SX2dldGV1aWQgNDkKKyNkZWZpbmUgX19OUl9nZXRlZ2lkIDUwCisjZGVmaW5lIF9fTlJfYWNjdCA1MQorI2RlZmluZSBfX05SX3Vtb3VudDIgNTIKKyNkZWZpbmUgX19OUl9sb2NrIDUzCisjZGVmaW5lIF9fTlJfaW9jdGwgNTQKKyNkZWZpbmUgX19OUl9mY250bCA1NQorI2RlZmluZSBfX05SX21weCA1NgorI2RlZmluZSBfX05SX3NldHBnaWQgNTcKKyNkZWZpbmUgX19OUl91bGltaXQgNTgKKyNkZWZpbmUgX19OUl9vbGRvbGR1bmFtZSA1OQorI2RlZmluZSBfX05SX3VtYXNrIDYwCisjZGVmaW5lIF9fTlJfY2hyb290IDYxCisjZGVmaW5lIF9fTlJfdXN0YXQgNjIKKyNkZWZpbmUgX19OUl9kdXAyIDYzCisjZGVmaW5lIF9fTlJfZ2V0cHBpZCA2NAorI2RlZmluZSBfX05SX2dldHBncnAgNjUKKyNkZWZpbmUgX19OUl9zZXRzaWQgNjYKKyNkZWZpbmUgX19OUl9zaWdhY3Rpb24gNjcKKyNkZWZpbmUgX19OUl9zZ2V0bWFzayA2OAorI2RlZmluZSBfX05SX3NzZXRtYXNrIDY5CisjZGVmaW5lIF9fTlJfc2V0cmV1aWQgNzAKKyNkZWZpbmUgX19OUl9zZXRyZWdpZCA3MQorI2RlZmluZSBfX05SX3NpZ3N1c3BlbmQgNzIKKyNkZWZpbmUgX19OUl9zaWdwZW5kaW5nIDczCisjZGVmaW5lIF9fTlJfc2V0aG9zdG5hbWUgNzQKKyNkZWZpbmUgX19OUl9zZXRybGltaXQgNzUKKyNkZWZpbmUgX19OUl9nZXRybGltaXQgNzYgIAorI2RlZmluZSBfX05SX2dldHJ1c2FnZSA3NworI2RlZmluZSBfX05SX2dldHRpbWVvZmRheSA3OAorI2RlZmluZSBfX05SX3NldHRpbWVvZmRheSA3OQorI2RlZmluZSBfX05SX2dldGdyb3VwcyA4MAorI2RlZmluZSBfX05SX3NldGdyb3VwcyA4MQorI2RlZmluZSBfX05SX3NlbGVjdCA4MgorI2RlZmluZSBfX05SX3N5bWxpbmsgODMKKyNkZWZpbmUgX19OUl9vbGRsc3RhdCA4NAorI2RlZmluZSBfX05SX3JlYWRsaW5rIDg1CisjZGVmaW5lIF9fTlJfdXNlbGliIDg2CisjZGVmaW5lIF9fTlJfc3dhcG9uIDg3CisjZGVmaW5lIF9fTlJfcmVib290IDg4CisjZGVmaW5lIF9fTlJfcmVhZGRpciA4OQorI2RlZmluZSBfX05SX21tYXAgOTAKKyNkZWZpbmUgX19OUl9tdW5tYXAgOTEKKyNkZWZpbmUgX19OUl90cnVuY2F0ZSA5MgorI2RlZmluZSBfX05SX2Z0cnVuY2F0ZSA5MworI2RlZmluZSBfX05SX2ZjaG1vZCA5NAorI2RlZmluZSBfX05SX2ZjaG93biA5NQorI2RlZmluZSBfX05SX2dldHByaW9yaXR5IDk2CisjZGVmaW5lIF9fTlJfc2V0cHJpb3JpdHkgOTcKKyNkZWZpbmUgX19OUl9wcm9maWwgOTgKKyNkZWZpbmUgX19OUl9zdGF0ZnMgOTkKKyNkZWZpbmUgX19OUl9mc3RhdGZzIDEwMAorI2RlZmluZSBfX05SX2lvcGVybSAxMDEKKyNkZWZpbmUgX19OUl9zb2NrZXRjYWxsIDEwMgorI2RlZmluZSBfX05SX3N5c2xvZyAxMDMKKyNkZWZpbmUgX19OUl9zZXRpdGltZXIgMTA0CisjZGVmaW5lIF9fTlJfZ2V0aXRpbWVyIDEwNQorI2RlZmluZSBfX05SX3N0YXQgMTA2CisjZGVmaW5lIF9fTlJfbHN0YXQgMTA3CisjZGVmaW5lIF9fTlJfZnN0YXQgMTA4CisjZGVmaW5lIF9fTlJfb2xkdW5hbWUgMTA5CisjZGVmaW5lIF9fTlJfaW9wbCAxMTAKKyNkZWZpbmUgX19OUl92aGFuZ3VwIDExMQorI2RlZmluZSBfX05SX2lkbGUgMTEyCisjZGVmaW5lIF9fTlJfdm04Nm9sZCAxMTMKKyNkZWZpbmUgX19OUl93YWl0NCAxMTQKKyNkZWZpbmUgX19OUl9zd2Fwb2ZmIDExNQorI2RlZmluZSBfX05SX3N5c2luZm8gMTE2CisjZGVmaW5lIF9fTlJfaXBjIDExNworI2RlZmluZSBfX05SX2ZzeW5jIDExOAorI2RlZmluZSBfX05SX3NpZ3JldHVybiAxMTkKKyNkZWZpbmUgX19OUl9jbG9uZSAxMjAKKyNkZWZpbmUgX19OUl9zZXRkb21haW5uYW1lIDEyMQorI2RlZmluZSBfX05SX3VuYW1lIDEyMgorI2RlZmluZSBfX05SX21vZGlmeV9sZHQgMTIzCisjZGVmaW5lIF9fTlJfYWRqdGltZXggMTI0CisjZGVmaW5lIF9fTlJfbXByb3RlY3QgMTI1CisjZGVmaW5lIF9fTlJfc2lncHJvY21hc2sgMTI2CisjZGVmaW5lIF9fTlJfY3JlYXRlX21vZHVsZSAxMjcKKyNkZWZpbmUgX19OUl9pbml0X21vZHVsZSAxMjgKKyNkZWZpbmUgX19OUl9kZWxldGVfbW9kdWxlIDEyOQorI2RlZmluZSBfX05SX2dldF9rZXJuZWxfc3ltcyAxMzAKKyNkZWZpbmUgX19OUl9xdW90YWN0bCAxMzEKKyNkZWZpbmUgX19OUl9nZXRwZ2lkIDEzMgorI2RlZmluZSBfX05SX2ZjaGRpciAxMzMKKyNkZWZpbmUgX19OUl9iZGZsdXNoIDEzNAorI2RlZmluZSBfX05SX3N5c2ZzIDEzNQorI2RlZmluZSBfX05SX3BlcnNvbmFsaXR5IDEzNgorI2RlZmluZSBfX05SX2Fmc19zeXNjYWxsIDEzNyAgCisjZGVmaW5lIF9fTlJfc2V0ZnN1aWQgMTM4CisjZGVmaW5lIF9fTlJfc2V0ZnNnaWQgMTM5CisjZGVmaW5lIF9fTlJfX2xsc2VlayAxNDAKKyNkZWZpbmUgX19OUl9nZXRkZW50cyAxNDEKKyNkZWZpbmUgX19OUl9fbmV3c2VsZWN0IDE0MgorI2RlZmluZSBfX05SX2Zsb2NrIDE0MworI2RlZmluZSBfX05SX21zeW5jIDE0NAorI2RlZmluZSBfX05SX3JlYWR2IDE0NQorI2RlZmluZSBfX05SX3dyaXRldiAxNDYKKyNkZWZpbmUgX19OUl9nZXRzaWQgMTQ3CisjZGVmaW5lIF9fTlJfZmRhdGFzeW5jIDE0OAorI2RlZmluZSBfX05SX19zeXNjdGwgMTQ5CisjZGVmaW5lIF9fTlJfbWxvY2sgMTUwCisjZGVmaW5lIF9fTlJfbXVubG9jayAxNTEKKyNkZWZpbmUgX19OUl9tbG9ja2FsbCAxNTIKKyNkZWZpbmUgX19OUl9tdW5sb2NrYWxsIDE1MworI2RlZmluZSBfX05SX3NjaGVkX3NldHBhcmFtIDE1NAorI2RlZmluZSBfX05SX3NjaGVkX2dldHBhcmFtIDE1NQorI2RlZmluZSBfX05SX3NjaGVkX3NldHNjaGVkdWxlciAxNTYKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRzY2hlZHVsZXIgMTU3CisjZGVmaW5lIF9fTlJfc2NoZWRfeWllbGQgMTU4CisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21heCAxNTkKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWluIDE2MAorI2RlZmluZSBfX05SX3NjaGVkX3JyX2dldF9pbnRlcnZhbCAxNjEKKyNkZWZpbmUgX19OUl9uYW5vc2xlZXAgMTYyCisjZGVmaW5lIF9fTlJfbXJlbWFwIDE2MworI2RlZmluZSBfX05SX3NldHJlc3VpZCAxNjQKKyNkZWZpbmUgX19OUl9nZXRyZXN1aWQgMTY1CisjZGVmaW5lIF9fTlJfdm04NiAxNjYKKyNkZWZpbmUgX19OUl9xdWVyeV9tb2R1bGUgMTY3CisjZGVmaW5lIF9fTlJfcG9sbCAxNjgKKyNkZWZpbmUgX19OUl9uZnNzZXJ2Y3RsIDE2OQorI2RlZmluZSBfX05SX3NldHJlc2dpZCAxNzAKKyNkZWZpbmUgX19OUl9nZXRyZXNnaWQgMTcxCisjZGVmaW5lIF9fTlJfcHJjdGwgMTcyCisjZGVmaW5lIF9fTlJfcnRfc2lncmV0dXJuIDE3MworI2RlZmluZSBfX05SX3J0X3NpZ2FjdGlvbiAxNzQKKyNkZWZpbmUgX19OUl9ydF9zaWdwcm9jbWFzayAxNzUKKyNkZWZpbmUgX19OUl9ydF9zaWdwZW5kaW5nIDE3NgorI2RlZmluZSBfX05SX3J0X3NpZ3RpbWVkd2FpdCAxNzcKKyNkZWZpbmUgX19OUl9ydF9zaWdxdWV1ZWluZm8gMTc4CisjZGVmaW5lIF9fTlJfcnRfc2lnc3VzcGVuZCAxNzkKKyNkZWZpbmUgX19OUl9wcmVhZDY0IDE4MAorI2RlZmluZSBfX05SX3B3cml0ZTY0IDE4MQorI2RlZmluZSBfX05SX2Nob3duIDE4MgorI2RlZmluZSBfX05SX2dldGN3ZCAxODMKKyNkZWZpbmUgX19OUl9jYXBnZXQgMTg0CisjZGVmaW5lIF9fTlJfY2Fwc2V0IDE4NQorI2RlZmluZSBfX05SX3NpZ2FsdHN0YWNrIDE4NgorI2RlZmluZSBfX05SX3NlbmRmaWxlIDE4NworI2RlZmluZSBfX05SX2dldHBtc2cgMTg4ICAKKyNkZWZpbmUgX19OUl9wdXRwbXNnIDE4OSAgCisjZGVmaW5lIF9fTlJfdmZvcmsgMTkwCisjZGVmaW5lIF9fTlJfdWdldHJsaW1pdCAxOTEgIAorI2RlZmluZSBfX05SX21tYXAyIDE5MgorI2RlZmluZSBfX05SX3RydW5jYXRlNjQgMTkzCisjZGVmaW5lIF9fTlJfZnRydW5jYXRlNjQgMTk0CisjZGVmaW5lIF9fTlJfc3RhdDY0IDE5NQorI2RlZmluZSBfX05SX2xzdGF0NjQgMTk2CisjZGVmaW5lIF9fTlJfZnN0YXQ2NCAxOTcKKyNkZWZpbmUgX19OUl9sY2hvd24zMiAxOTgKKyNkZWZpbmUgX19OUl9nZXR1aWQzMiAxOTkKKyNkZWZpbmUgX19OUl9nZXRnaWQzMiAyMDAKKyNkZWZpbmUgX19OUl9nZXRldWlkMzIgMjAxCisjZGVmaW5lIF9fTlJfZ2V0ZWdpZDMyIDIwMgorI2RlZmluZSBfX05SX3NldHJldWlkMzIgMjAzCisjZGVmaW5lIF9fTlJfc2V0cmVnaWQzMiAyMDQKKyNkZWZpbmUgX19OUl9nZXRncm91cHMzMiAyMDUKKyNkZWZpbmUgX19OUl9zZXRncm91cHMzMiAyMDYKKyNkZWZpbmUgX19OUl9mY2hvd24zMiAyMDcKKyNkZWZpbmUgX19OUl9zZXRyZXN1aWQzMiAyMDgKKyNkZWZpbmUgX19OUl9nZXRyZXN1aWQzMiAyMDkKKyNkZWZpbmUgX19OUl9zZXRyZXNnaWQzMiAyMTAKKyNkZWZpbmUgX19OUl9nZXRyZXNnaWQzMiAyMTEKKyNkZWZpbmUgX19OUl9jaG93bjMyIDIxMgorI2RlZmluZSBfX05SX3NldHVpZDMyIDIxMworI2RlZmluZSBfX05SX3NldGdpZDMyIDIxNAorI2RlZmluZSBfX05SX3NldGZzdWlkMzIgMjE1CisjZGVmaW5lIF9fTlJfc2V0ZnNnaWQzMiAyMTYKKyNkZWZpbmUgX19OUl9waXZvdF9yb290IDIxNworI2RlZmluZSBfX05SX21pbmNvcmUgMjE4CisjZGVmaW5lIF9fTlJfbWFkdmlzZSAyMTkKKyNkZWZpbmUgX19OUl9tYWR2aXNlMSAyMTkgIAorI2RlZmluZSBfX05SX2dldGRlbnRzNjQgMjIwCisjZGVmaW5lIF9fTlJfZmNudGw2NCAyMjEKKworI2RlZmluZSBfX05SX2dldHRpZCAyMjQKKyNkZWZpbmUgX19OUl9yZWFkYWhlYWQgMjI1CisjZGVmaW5lIF9fTlJfc2V0eGF0dHIgMjI2CisjZGVmaW5lIF9fTlJfbHNldHhhdHRyIDIyNworI2RlZmluZSBfX05SX2ZzZXR4YXR0ciAyMjgKKyNkZWZpbmUgX19OUl9nZXR4YXR0ciAyMjkKKyNkZWZpbmUgX19OUl9sZ2V0eGF0dHIgMjMwCisjZGVmaW5lIF9fTlJfZmdldHhhdHRyIDIzMQorI2RlZmluZSBfX05SX2xpc3R4YXR0ciAyMzIKKyNkZWZpbmUgX19OUl9sbGlzdHhhdHRyIDIzMworI2RlZmluZSBfX05SX2ZsaXN0eGF0dHIgMjM0CisjZGVmaW5lIF9fTlJfcmVtb3ZleGF0dHIgMjM1CisjZGVmaW5lIF9fTlJfbHJlbW92ZXhhdHRyIDIzNgorI2RlZmluZSBfX05SX2ZyZW1vdmV4YXR0ciAyMzcKKyNkZWZpbmUgX19OUl90a2lsbCAyMzgKKyNkZWZpbmUgX19OUl9zZW5kZmlsZTY0IDIzOQorI2RlZmluZSBfX05SX2Z1dGV4IDI0MAorI2RlZmluZSBfX05SX3NjaGVkX3NldGFmZmluaXR5IDI0MQorI2RlZmluZSBfX05SX3NjaGVkX2dldGFmZmluaXR5IDI0MgorI2RlZmluZSBfX05SX3NldF90aHJlYWRfYXJlYSAyNDMKKyNkZWZpbmUgX19OUl9nZXRfdGhyZWFkX2FyZWEgMjQ0CisjZGVmaW5lIF9fTlJfaW9fc2V0dXAgMjQ1CisjZGVmaW5lIF9fTlJfaW9fZGVzdHJveSAyNDYKKyNkZWZpbmUgX19OUl9pb19nZXRldmVudHMgMjQ3CisjZGVmaW5lIF9fTlJfaW9fc3VibWl0IDI0OAorI2RlZmluZSBfX05SX2lvX2NhbmNlbCAyNDkKKyNkZWZpbmUgX19OUl9mYWR2aXNlNjQgMjUwCisKKyNkZWZpbmUgX19OUl9leGl0X2dyb3VwIDI1MgorI2RlZmluZSBfX05SX2xvb2t1cF9kY29va2llIDI1MworI2RlZmluZSBfX05SX2Vwb2xsX2NyZWF0ZSAyNTQKKyNkZWZpbmUgX19OUl9lcG9sbF9jdGwgMjU1CisjZGVmaW5lIF9fTlJfZXBvbGxfd2FpdCAyNTYKKyNkZWZpbmUgX19OUl9yZW1hcF9maWxlX3BhZ2VzIDI1NworI2RlZmluZSBfX05SX3NldF90aWRfYWRkcmVzcyAyNTgKKyNkZWZpbmUgX19OUl90aW1lcl9jcmVhdGUgMjU5CisjZGVmaW5lIF9fTlJfdGltZXJfc2V0dGltZSAoX19OUl90aW1lcl9jcmVhdGUrMSkKKyNkZWZpbmUgX19OUl90aW1lcl9nZXR0aW1lIChfX05SX3RpbWVyX2NyZWF0ZSsyKQorI2RlZmluZSBfX05SX3RpbWVyX2dldG92ZXJydW4gKF9fTlJfdGltZXJfY3JlYXRlKzMpCisjZGVmaW5lIF9fTlJfdGltZXJfZGVsZXRlIChfX05SX3RpbWVyX2NyZWF0ZSs0KQorI2RlZmluZSBfX05SX2Nsb2NrX3NldHRpbWUgKF9fTlJfdGltZXJfY3JlYXRlKzUpCisjZGVmaW5lIF9fTlJfY2xvY2tfZ2V0dGltZSAoX19OUl90aW1lcl9jcmVhdGUrNikKKyNkZWZpbmUgX19OUl9jbG9ja19nZXRyZXMgKF9fTlJfdGltZXJfY3JlYXRlKzcpCisjZGVmaW5lIF9fTlJfY2xvY2tfbmFub3NsZWVwIChfX05SX3RpbWVyX2NyZWF0ZSs4KQorI2RlZmluZSBfX05SX3N0YXRmczY0IDI2OAorI2RlZmluZSBfX05SX2ZzdGF0ZnM2NCAyNjkKKyNkZWZpbmUgX19OUl90Z2tpbGwgMjcwCisjZGVmaW5lIF9fTlJfdXRpbWVzIDI3MQorI2RlZmluZSBfX05SX2ZhZHZpc2U2NF82NCAyNzIKKyNkZWZpbmUgX19OUl92c2VydmVyIDI3MworI2RlZmluZSBfX05SX21iaW5kIDI3NAorI2RlZmluZSBfX05SX2dldF9tZW1wb2xpY3kgMjc1CisjZGVmaW5lIF9fTlJfc2V0X21lbXBvbGljeSAyNzYKKyNkZWZpbmUgX19OUl9tcV9vcGVuIDI3NworI2RlZmluZSBfX05SX21xX3VubGluayAoX19OUl9tcV9vcGVuKzEpCisjZGVmaW5lIF9fTlJfbXFfdGltZWRzZW5kIChfX05SX21xX29wZW4rMikKKyNkZWZpbmUgX19OUl9tcV90aW1lZHJlY2VpdmUgKF9fTlJfbXFfb3BlbiszKQorI2RlZmluZSBfX05SX21xX25vdGlmeSAoX19OUl9tcV9vcGVuKzQpCisjZGVmaW5lIF9fTlJfbXFfZ2V0c2V0YXR0ciAoX19OUl9tcV9vcGVuKzUpCisjZGVmaW5lIF9fTlJfa2V4ZWNfbG9hZCAyODMKKyNkZWZpbmUgX19OUl93YWl0aWQgMjg0CisKKyNkZWZpbmUgX19OUl9hZGRfa2V5IDI4NgorI2RlZmluZSBfX05SX3JlcXVlc3Rfa2V5IDI4NworI2RlZmluZSBfX05SX2tleWN0bCAyODgKKyNkZWZpbmUgX19OUl9pb3ByaW9fc2V0IDI4OQorI2RlZmluZSBfX05SX2lvcHJpb19nZXQgMjkwCisjZGVmaW5lIF9fTlJfaW5vdGlmeV9pbml0IDI5MQorI2RlZmluZSBfX05SX2lub3RpZnlfYWRkX3dhdGNoIDI5MgorI2RlZmluZSBfX05SX2lub3RpZnlfcm1fd2F0Y2ggMjkzCisjZGVmaW5lIF9fTlJfbWlncmF0ZV9wYWdlcyAyOTQKKyNkZWZpbmUgX19OUl9vcGVuYXQgMjk1CisjZGVmaW5lIF9fTlJfbWtkaXJhdCAyOTYKKyNkZWZpbmUgX19OUl9ta25vZGF0IDI5NworI2RlZmluZSBfX05SX2ZjaG93bmF0IDI5OAorI2RlZmluZSBfX05SX2Z1dGltZXNhdCAyOTkKKyNkZWZpbmUgX19OUl9mc3RhdGF0NjQgMzAwCisjZGVmaW5lIF9fTlJfdW5saW5rYXQgMzAxCisjZGVmaW5lIF9fTlJfcmVuYW1lYXQgMzAyCisjZGVmaW5lIF9fTlJfbGlua2F0IDMwMworI2RlZmluZSBfX05SX3N5bWxpbmthdCAzMDQKKyNkZWZpbmUgX19OUl9yZWFkbGlua2F0IDMwNQorI2RlZmluZSBfX05SX2ZjaG1vZGF0IDMwNgorI2RlZmluZSBfX05SX2ZhY2Nlc3NhdCAzMDcKKyNkZWZpbmUgX19OUl9wc2VsZWN0NiAzMDgKKyNkZWZpbmUgX19OUl9wcG9sbCAzMDkKKyNkZWZpbmUgX19OUl91bnNoYXJlIDMxMAorI2RlZmluZSBfX05SX3NldF9yb2J1c3RfbGlzdCAzMTEKKyNkZWZpbmUgX19OUl9nZXRfcm9idXN0X2xpc3QgMzEyCisjZGVmaW5lIF9fTlJfc3BsaWNlIDMxMworI2RlZmluZSBfX05SX3N5bmNfZmlsZV9yYW5nZSAzMTQKKyNkZWZpbmUgX19OUl90ZWUgMzE1CisjZGVmaW5lIF9fTlJfdm1zcGxpY2UgMzE2CisjZGVmaW5lIF9fTlJfbW92ZV9wYWdlcyAzMTcKKyNkZWZpbmUgX19OUl9nZXRjcHUgMzE4CisjZGVmaW5lIF9fTlJfZXBvbGxfcHdhaXQgMzE5CisjZGVmaW5lIF9fTlJfdXRpbWVuc2F0IDMyMAorI2RlZmluZSBfX05SX3NpZ25hbGZkIDMyMQorI2RlZmluZSBfX05SX3RpbWVyZmQgMzIyCisjZGVmaW5lIF9fTlJfZXZlbnRmZCAzMjMKKyNkZWZpbmUgX19OUl9mYWxsb2NhdGUgMzI0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3VzZXIuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS91c2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTgwYjBhYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS91c2VyLmgKQEAgLTAsMCArMSwxNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmZGVmIF9faTM4Nl9fCisjaW5jbHVkZSAidXNlcl8zMi5oIgorI2Vsc2UKKyNpbmNsdWRlICJ1c2VyXzY0LmgiCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS91c2VyMzIuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS91c2VyMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWVhYmIxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3VzZXIzMi5oCkBAIC0wLDAgKzEsNzMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgVVNFUjMyX0gKKyNkZWZpbmUgVVNFUjMyX0ggMQorCitzdHJ1Y3QgdXNlcl9pMzg3X2lhMzJfc3RydWN0IHsKKyB1MzIgY3dkOworIHUzMiBzd2Q7CisgdTMyIHR3ZDsKKyB1MzIgZmlwOworIHUzMiBmY3M7CisgdTMyIGZvbzsKKyB1MzIgZm9zOworIHUzMiBzdF9zcGFjZVsyMF07Cit9OworCitzdHJ1Y3QgdXNlcjMyX2Z4c3Jfc3RydWN0IHsKKyB1bnNpZ25lZCBzaG9ydCBjd2Q7CisgdW5zaWduZWQgc2hvcnQgc3dkOworIHVuc2lnbmVkIHNob3J0IHR3ZDsKKyB1bnNpZ25lZCBzaG9ydCBmb3A7CisgaW50IGZpcDsKKyBpbnQgZmNzOworIGludCBmb287CisgaW50IGZvczsKKyBpbnQgbXhjc3I7CisgaW50IHJlc2VydmVkOworIGludCBzdF9zcGFjZVszMl07CisgaW50IHhtbV9zcGFjZVszMl07CisgaW50IHBhZGRpbmdbNTZdOworfTsKKworc3RydWN0IHVzZXJfcmVnc19zdHJ1Y3QzMiB7CisgX191MzIgZWJ4LCBlY3gsIGVkeCwgZXNpLCBlZGksIGVicCwgZWF4OworIHVuc2lnbmVkIHNob3J0IGRzLCBfX2RzLCBlcywgX19lczsKKyB1bnNpZ25lZCBzaG9ydCBmcywgX19mcywgZ3MsIF9fZ3M7CisgX191MzIgb3JpZ19lYXgsIGVpcDsKKyB1bnNpZ25lZCBzaG9ydCBjcywgX19jczsKKyBfX3UzMiBlZmxhZ3MsIGVzcDsKKyB1bnNpZ25lZCBzaG9ydCBzcywgX19zczsKK307CisKK3N0cnVjdCB1c2VyMzIgeworIHN0cnVjdCB1c2VyX3JlZ3Nfc3RydWN0MzIgcmVnczsKKyBpbnQgdV9mcHZhbGlkOworCisgc3RydWN0IHVzZXJfaTM4N19pYTMyX3N0cnVjdCBpMzg3OworCisgX191MzIgdV90c2l6ZTsKKyBfX3UzMiB1X2RzaXplOworIF9fdTMyIHVfc3NpemU7CisgX191MzIgc3RhcnRfY29kZTsKKyBfX3UzMiBzdGFydF9zdGFjazsKKyBfX3UzMiBzaWduYWw7CisgaW50IHJlc2VydmVkOworIF9fdTMyIHVfYXIwOworCisgX191MzIgdV9mcHN0YXRlOworIF9fdTMyIG1hZ2ljOworIGNoYXIgdV9jb21tWzMyXTsKKyBpbnQgdV9kZWJ1Z3JlZ1s4XTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3VzZXJfMzIuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS91c2VyXzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUwMjk2YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS91c2VyXzMyLmgKQEAgLTAsMCArMSw4MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfSTM4Nl9VU0VSX0gKKyNkZWZpbmUgX0kzODZfVVNFUl9ICisKKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorCitzdHJ1Y3QgdXNlcl9pMzg3X3N0cnVjdCB7CisgbG9uZyBjd2Q7CisgbG9uZyBzd2Q7CisgbG9uZyB0d2Q7CisgbG9uZyBmaXA7CisgbG9uZyBmY3M7CisgbG9uZyBmb287CisgbG9uZyBmb3M7CisgbG9uZyBzdF9zcGFjZVsyMF07Cit9OworCitzdHJ1Y3QgdXNlcl9meHNyX3N0cnVjdCB7CisgdW5zaWduZWQgc2hvcnQgY3dkOworIHVuc2lnbmVkIHNob3J0IHN3ZDsKKyB1bnNpZ25lZCBzaG9ydCB0d2Q7CisgdW5zaWduZWQgc2hvcnQgZm9wOworIGxvbmcgZmlwOworIGxvbmcgZmNzOworIGxvbmcgZm9vOworIGxvbmcgZm9zOworIGxvbmcgbXhjc3I7CisgbG9uZyByZXNlcnZlZDsKKyBsb25nIHN0X3NwYWNlWzMyXTsKKyBsb25nIHhtbV9zcGFjZVszMl07CisgbG9uZyBwYWRkaW5nWzU2XTsKK307CisKK3N0cnVjdCB1c2VyX3JlZ3Nfc3RydWN0IHsKKyBsb25nIGVieCwgZWN4LCBlZHgsIGVzaSwgZWRpLCBlYnAsIGVheDsKKyB1bnNpZ25lZCBzaG9ydCBkcywgX19kcywgZXMsIF9fZXM7CisgdW5zaWduZWQgc2hvcnQgZnMsIF9fZnMsIGdzLCBfX2dzOworIGxvbmcgb3JpZ19lYXgsIGVpcDsKKyB1bnNpZ25lZCBzaG9ydCBjcywgX19jczsKKyBsb25nIGVmbGFncywgZXNwOworIHVuc2lnbmVkIHNob3J0IHNzLCBfX3NzOworfTsKKworc3RydWN0IHVzZXJ7CisKKyBzdHJ1Y3QgdXNlcl9yZWdzX3N0cnVjdCByZWdzOworCisgaW50IHVfZnB2YWxpZDsKKworIHN0cnVjdCB1c2VyX2kzODdfc3RydWN0IGkzODc7CisKKyB1bnNpZ25lZCBsb25nIGludCB1X3RzaXplOworIHVuc2lnbmVkIGxvbmcgaW50IHVfZHNpemU7CisgdW5zaWduZWQgbG9uZyBpbnQgdV9zc2l6ZTsKKyB1bnNpZ25lZCBsb25nIHN0YXJ0X2NvZGU7CisgdW5zaWduZWQgbG9uZyBzdGFydF9zdGFjazsKKyBsb25nIGludCBzaWduYWw7CisgaW50IHJlc2VydmVkOworIHN0cnVjdCB1c2VyX3B0X3JlZ3MgKiB1X2FyMDsKKworIHN0cnVjdCB1c2VyX2kzODdfc3RydWN0KiB1X2Zwc3RhdGU7CisgdW5zaWduZWQgbG9uZyBtYWdpYzsKKyBjaGFyIHVfY29tbVszMl07CisgaW50IHVfZGVidWdyZWdbOF07Cit9OworI2RlZmluZSBOQlBHIFBBR0VfU0laRQorI2RlZmluZSBVUEFHRVMgMQorI2RlZmluZSBIT1NUX1RFWFRfU1RBUlRfQUREUiAodS5zdGFydF9jb2RlKQorI2RlZmluZSBIT1NUX1NUQUNLX0VORF9BRERSICh1LnN0YXJ0X3N0YWNrICsgdS51X3NzaXplICogTkJQRykKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vdm04Ni5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3ZtODYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGU3MWYxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3ZtODYuaApAQCAtMCwwICsxLDExMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfVk04Nl9ICisjZGVmaW5lIF9MSU5VWF9WTTg2X0gKKworI2RlZmluZSBURl9NQVNLIDB4MDAwMDAxMDAKKyNkZWZpbmUgSUZfTUFTSyAweDAwMDAwMjAwCisjZGVmaW5lIElPUExfTUFTSyAweDAwMDAzMDAwCisjZGVmaW5lIE5UX01BU0sgMHgwMDAwNDAwMAorI2RlZmluZSBWTV9NQVNLIDAgIAorI2RlZmluZSBBQ19NQVNLIDB4MDAwNDAwMDAKKyNkZWZpbmUgVklGX01BU0sgMHgwMDA4MDAwMCAgCisjZGVmaW5lIFZJUF9NQVNLIDB4MDAxMDAwMDAgIAorI2RlZmluZSBJRF9NQVNLIDB4MDAyMDAwMDAKKworI2RlZmluZSBCSU9TU0VHIDB4MGYwMDAKKworI2RlZmluZSBDUFVfMDg2IDAKKyNkZWZpbmUgQ1BVXzE4NiAxCisjZGVmaW5lIENQVV8yODYgMgorI2RlZmluZSBDUFVfMzg2IDMKKyNkZWZpbmUgQ1BVXzQ4NiA0CisjZGVmaW5lIENQVV81ODYgNQorCisjZGVmaW5lIFZNODZfVFlQRShyZXR2YWwpICgocmV0dmFsKSAmIDB4ZmYpCisjZGVmaW5lIFZNODZfQVJHKHJldHZhbCkgKChyZXR2YWwpID4+IDgpCisKKyNkZWZpbmUgVk04Nl9TSUdOQUwgMCAgCisjZGVmaW5lIFZNODZfVU5LTk9XTiAxICAKKyNkZWZpbmUgVk04Nl9JTlR4IDIgIAorI2RlZmluZSBWTTg2X1NUSSAzICAKKworI2RlZmluZSBWTTg2X1BJQ1JFVFVSTiA0ICAKKyNkZWZpbmUgVk04Nl9UUkFQIDYgIAorCisjZGVmaW5lIFZNODZfUExVU19JTlNUQUxMX0NIRUNLIDAKKyNkZWZpbmUgVk04Nl9FTlRFUiAxCisjZGVmaW5lIFZNODZfRU5URVJfTk9fQllQQVNTIDIKKyNkZWZpbmUgVk04Nl9SRVFVRVNUX0lSUSAzCisjZGVmaW5lIFZNODZfRlJFRV9JUlEgNAorI2RlZmluZSBWTTg2X0dFVF9JUlFfQklUUyA1CisjZGVmaW5lIFZNODZfR0VUX0FORF9SRVNFVF9JUlEgNgorCitzdHJ1Y3Qgdm04Nl9yZWdzIHsKKworIGxvbmcgZWJ4OworIGxvbmcgZWN4OworIGxvbmcgZWR4OworIGxvbmcgZXNpOworIGxvbmcgZWRpOworIGxvbmcgZWJwOworIGxvbmcgZWF4OworIGxvbmcgX19udWxsX2RzOworIGxvbmcgX19udWxsX2VzOworIGxvbmcgX19udWxsX2ZzOworIGxvbmcgX19udWxsX2dzOworIGxvbmcgb3JpZ19lYXg7CisgbG9uZyBlaXA7CisgdW5zaWduZWQgc2hvcnQgY3MsIF9fY3NoOworIGxvbmcgZWZsYWdzOworIGxvbmcgZXNwOworIHVuc2lnbmVkIHNob3J0IHNzLCBfX3NzaDsKKworIHVuc2lnbmVkIHNob3J0IGVzLCBfX2VzaDsKKyB1bnNpZ25lZCBzaG9ydCBkcywgX19kc2g7CisgdW5zaWduZWQgc2hvcnQgZnMsIF9fZnNoOworIHVuc2lnbmVkIHNob3J0IGdzLCBfX2dzaDsKK307CisKK3N0cnVjdCByZXZlY3RvcmVkX3N0cnVjdCB7CisgdW5zaWduZWQgbG9uZyBfX21hcFs4XTsKK307CisKK3N0cnVjdCB2bTg2X3N0cnVjdCB7Cisgc3RydWN0IHZtODZfcmVncyByZWdzOworIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisgdW5zaWduZWQgbG9uZyBzY3JlZW5fYml0bWFwOworIHVuc2lnbmVkIGxvbmcgY3B1X3R5cGU7Cisgc3RydWN0IHJldmVjdG9yZWRfc3RydWN0IGludF9yZXZlY3RvcmVkOworIHN0cnVjdCByZXZlY3RvcmVkX3N0cnVjdCBpbnQyMV9yZXZlY3RvcmVkOworfTsKKworI2RlZmluZSBWTTg2X1NDUkVFTl9CSVRNQVAgMHgwMDAxCisKK3N0cnVjdCB2bTg2cGx1c19pbmZvX3N0cnVjdCB7CisgdW5zaWduZWQgbG9uZyBmb3JjZV9yZXR1cm5fZm9yX3BpYzoxOworIHVuc2lnbmVkIGxvbmcgdm04NmRiZ19hY3RpdmU6MTsKKyB1bnNpZ25lZCBsb25nIHZtODZkYmdfVEZwZW5kaWc6MTsKKyB1bnNpZ25lZCBsb25nIHVudXNlZDoyODsKKyB1bnNpZ25lZCBsb25nIGlzX3ZtODZwdXM6MTsKKyB1bnNpZ25lZCBjaGFyIHZtODZkYmdfaW50eHh0YWJbMzJdOworfTsKKworc3RydWN0IHZtODZwbHVzX3N0cnVjdCB7Cisgc3RydWN0IHZtODZfcmVncyByZWdzOworIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisgdW5zaWduZWQgbG9uZyBzY3JlZW5fYml0bWFwOworIHVuc2lnbmVkIGxvbmcgY3B1X3R5cGU7Cisgc3RydWN0IHJldmVjdG9yZWRfc3RydWN0IGludF9yZXZlY3RvcmVkOworIHN0cnVjdCByZXZlY3RvcmVkX3N0cnVjdCBpbnQyMV9yZXZlY3RvcmVkOworIHN0cnVjdCB2bTg2cGx1c19pbmZvX3N0cnVjdCB2bTg2cGx1czsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3ZveWFnZXIuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS92b3lhZ2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZmNTBhOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS92b3lhZ2VyLmgKQEAgLTAsMCArMSw0MzcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyN1bmRlZiBWT1lBR0VSX0RFQlVHCisjdW5kZWYgVk9ZQUdFUl9DQVRfREVCVUcKKworI2lmZGVmIFZPWUFHRVJfREVCVUcKKyNkZWZpbmUgVkRFQlVHKHgpIHByaW50ayB4CisjZWxzZQorI2RlZmluZSBWREVCVUcoeCkKKyNlbmRpZgorCisjZGVmaW5lIFZPWUFHRVJfTEVWRUw1X0FORF9BQk9WRSAweDM0MzUKKyNkZWZpbmUgVk9ZQUdFUl9MRVZFTDQgMHgzMzYwCisKKyNkZWZpbmUgVk9ZQUdFUl9ESU5PIDB4NDMKKworI2RlZmluZSBWT1lBR0VSX01DX1NFVFVQIDB4OTYKKworI2RlZmluZSBWT1lBR0VSX0NBVF9DT05GSUdfUE9SVCAweDk3CisjZGVmaW5lIFZPWUFHRVJfQ0FUX0RFU0VMRUNUIDB4ZmYKKyNkZWZpbmUgVk9ZQUdFUl9TU1BCX1JFTE9DQVRJT05fUE9SVCAweDk4CisKKyNkZWZpbmUgVk9ZQUdFUl9DQVRfSVJDWUMgMHgwMQorCisjZGVmaW5lIFZPWUFHRVJfQ0FUX0RSQ1lDIDB4MDIKKworI2RlZmluZSBWT1lBR0VSX0NBVF9SVU4gMHgwRgorCisjZGVmaW5lIFZPWUFHRVJfQ0FUX0VORCAweDgwCisKKyNkZWZpbmUgVk9ZQUdFUl9DQVRfSE9MRCAweDkwCisKKyNkZWZpbmUgVk9ZQUdFUl9DQVRfU1RFUCAweEUwCisKKyNkZWZpbmUgVk9ZQUdFUl9DQVRfQ0xFTVNPTiAweEZGCisKKyNkZWZpbmUgVk9ZQUdFUl9DQVRfSEVBREVSIDB4N0YKKworI2RlZmluZSBWT1lBR0VSX01JTl9NT0RVTEUgMHgxMAorI2RlZmluZSBWT1lBR0VSX01BWF9NT0RVTEUgMHgxZgorCisjZGVmaW5lIFZPWUFHRVJfQVNJQ19JRF9SRUcgMHgwMAorI2RlZmluZSBWT1lBR0VSX0FTSUNfVFlQRV9SRUcgMHgwMQorCisjZGVmaW5lIFZPWUFHRVJfQVVUT19JTkNfUkVHIDB4MDIKKyNkZWZpbmUgVk9ZQUdFUl9BVVRPX0lOQyAweDA0CisjZGVmaW5lIFZPWUFHRVJfTk9fQVVUT19JTkMgMHhmYgorI2RlZmluZSBWT1lBR0VSX1NVQkFERFJEQVRBIDB4MDMKKyNkZWZpbmUgVk9ZQUdFUl9TQ0FOUEFUSCAweDA1CisjZGVmaW5lIFZPWUFHRVJfQ09OTkVDVF9BU0lDIDB4MDEKKyNkZWZpbmUgVk9ZQUdFUl9ESVNDT05ORUNUX0FTSUMgMHhmZQorI2RlZmluZSBWT1lBR0VSX1NVQkFERFJMTyAweDA2CisjZGVmaW5lIFZPWUFHRVJfU1VCQUREUkhJIDB4MDcKKyNkZWZpbmUgVk9ZQUdFUl9TVUJNT0RTRUxFQ1QgMHgwOAorI2RlZmluZSBWT1lBR0VSX1NVQk1PRFBSRVNFTlQgMHgwOQorCisjZGVmaW5lIFZPWUFHRVJfU1VCQUREUl9MTyAweGZmCisjZGVmaW5lIFZPWUFHRVJfU1VCQUREUl9ISSAweGZmZmYKKworI2RlZmluZSBWT1lBR0VSX01BWF9TQ0FOX1BBVEggMHgxMDAKKworI2RlZmluZSBWT1lBR0VSX01BWF9SRUdfU0laRSA0CisKKyNkZWZpbmUgVk9ZQUdFUl9NQVhfTU9EVUxFUyAxNgorCisjZGVmaW5lIFZPWUFHRVJfTUFYX0FTSUNTX1BFUl9NT0RVTEUgNworCisjZGVmaW5lIFZPWUFHRVJfQ0FUX0lEIDAKKyNkZWZpbmUgVk9ZQUdFUl9QU0kgMHgxYQorCisjZGVmaW5lIFZPWUFHRVJfUkVBRF9DT05GSUcgMHgxCisjZGVmaW5lIFZPWUFHRVJfV1JJVEVfQ09ORklHIDB4MgorI2RlZmluZSBWT1lBR0VSX0JZUEFTUyAweGZmCisKK3R5cGVkZWYgc3RydWN0IHZveWFnZXJfYXNpYworeworIF9fdTggYXNpY19hZGRyOworIF9fdTggYXNpY190eXBlOworIF9fdTggYXNpY19pZDsKKyBfX3U4IGp0YWdfaWRbNF07CisgX191OCBhc2ljX2xvY2F0aW9uOworIF9fdTggYml0X2xvY2F0aW9uOworIF9fdTggaXJlZ19sZW5ndGg7CisgX191MTYgc3ViYWRkcjsKKyBzdHJ1Y3Qgdm95YWdlcl9hc2ljICpuZXh0OworfSB2b3lhZ2VyX2FzaWNfdDsKKwordHlwZWRlZiBzdHJ1Y3Qgdm95YWdlcl9tb2R1bGUgeworIF9fdTggbW9kdWxlX2FkZHI7CisgX191OCBzY2FuX3BhdGhfY29ubmVjdGVkOworIF9fdTE2IGVlX3NpemU7CisgX191MTYgbnVtX2FzaWNzOworIF9fdTE2IGluc3RfYml0czsKKyBfX3UxNiBsYXJnZXN0X3JlZzsKKyBfX3UxNiBzbWFsbGVzdF9yZWc7Cisgdm95YWdlcl9hc2ljX3QgKmFzaWM7Cisgc3RydWN0IHZveWFnZXJfbW9kdWxlICpzdWJtb2R1bGU7Cisgc3RydWN0IHZveWFnZXJfbW9kdWxlICpuZXh0OworfSB2b3lhZ2VyX21vZHVsZV90OworCit0eXBlZGVmIHN0cnVjdCB2b3lhZ2VyX2VlcHJvbV9oZHIgeworIF9fdTggbW9kdWxlX2lkWzRdOworIF9fdTggdmVyc2lvbl9pZDsKKyBfX3U4IGNvbmZpZ19pZDsKKyBfX3UxNiBib3VuZHJ5X2lkOworIF9fdTE2IGVlX3NpemU7CisgX191OCBhc3NlbWJseVsxMV07CisgX191OCBhc3NlbWJseV9yZXY7CisgX191OCB0cmFjZXJbNF07CisgX191MTYgYXNzZW1ibHlfY2tzdW07CisgX191MTYgcG93ZXJfY29uc3VtcDsKKyBfX3UxNiBudW1fYXNpY3M7CisgX191MTYgYmlzdF90aW1lOworIF9fdTE2IGVycl9sb2dfb2Zmc2V0OworIF9fdTE2IHNjYW5fcGF0aF9vZmZzZXQ7CisgX191MTYgY2N0X29mZnNldDsKKyBfX3UxNiBsb2dfbGVuZ3RoOworIF9fdTE2IHhzdW1fZW5kOworIF9fdTggcmVzZXJ2ZWRbNF07CisgX191OCBzZmxhZzsKKyBfX3U4IHBhcnRfbnVtYmVyWzEzXTsKKyBfX3U4IHZlcnNpb25bMTBdOworIF9fdTggc2lnbmF0dXJlWzhdOworIF9fdTE2IGVlcHJvbV9jaGtzdW07CisgX191MzIgZGF0YV9zdGFtcF9vZmZzZXQ7CisgX191OCBlZmxhZyA7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHZveWFnZXJfZXByb21faGRyX3Q7CisKKyNkZWZpbmUgVk9ZQUdFUl9FUFJPTV9TSVpFX09GRlNFVCAoKF9fdTE2KSgmKCgodm95YWdlcl9lcHJvbV9oZHJfdCAqKTApLT5lZV9zaXplKSkpCisjZGVmaW5lIFZPWUFHRVJfWFNVTV9FTkRfT0ZGU0VUIDB4MmEKKwordHlwZWRlZiBzdHJ1Y3Qgdm95YWdlcl9zcF90YWJsZSB7CisgX191OCBhc2ljX2lkOworIF9fdTggYnlwYXNzX2ZsYWc7CisgX191MTYgYXNpY19kYXRhX29mZnNldDsKKyBfX3UxNiBjb25maWdfZGF0YV9vZmZzZXQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHZveWFnZXJfc3BfdGFibGVfdDsKKwordHlwZWRlZiBzdHJ1Y3Qgdm95YWdlcl9qdGFnX3RhYmxlIHsKKyBfX3U4IGljb2RlWzRdOworIF9fdTggcnVuYmlzdFs0XTsKKyBfX3U4IGludGVzdFs0XTsKKyBfX3U4IHNhbXBfcHJlbGRbNF07CisgX191OCBpcmVnX2xlbjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdm95YWdlcl9qdHRfdDsKKwordHlwZWRlZiBzdHJ1Y3Qgdm95YWdlcl9hc2ljX2RhdGFfdGFibGUgeworIF9fdTgganRhZ19pZFs0XTsKKyBfX3UxNiBsZW5ndGhfYnNyOworIF9fdTE2IGxlbmd0aF9iaXN0X3JlZzsKKyBfX3UzMiBiaXN0X2NsazsKKyBfX3UxNiBzdWJhZGRyX2JpdHM7CisgX191MTYgc2VlZF9iaXRzOworIF9fdTE2IHNpZ19iaXRzOworIF9fdTE2IGp0YWdfb2Zmc2V0OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2b3lhZ2VyX2F0X3Q7CisKKyNkZWZpbmUgVk9ZQUdFUl9XQ0JJQzAgMHg0MSAgCisjZGVmaW5lIFZPWUFHRVJfV0NCSUMxIDB4NDkgIAorI2RlZmluZSBWT1lBR0VSX1dDQklDMiAweDUxICAKKyNkZWZpbmUgVk9ZQUdFUl9XQ0JJQzMgMHg1OSAgCisjZGVmaW5lIFZPWUFHRVJfV0NCSUM0IDB4NjEgIAorI2RlZmluZSBWT1lBR0VSX1dDQklDNSAweDY5ICAKKyNkZWZpbmUgVk9ZQUdFUl9XQ0JJQzYgMHg3MSAgCisjZGVmaW5lIFZPWUFHRVJfV0NCSUM3IDB4NzkgIAorCisjZGVmaW5lIFZPWUFHRVJfV0NCSUNfVE9NX0wgMHg0CisjZGVmaW5lIFZPWUFHRVJfV0NCSUNfVE9NX0ggMHg1CisKKyNkZWZpbmUgVk9ZQUdFUl9WTUMxIDB4ODEKKyNkZWZpbmUgVk9ZQUdFUl9WTUMyIDB4OTEKKyNkZWZpbmUgVk9ZQUdFUl9WTUMzIDB4YTEKKyNkZWZpbmUgVk9ZQUdFUl9WTUM0IDB4YjEKKworI2RlZmluZSBWT1lBR0VSX1ZNQ19NRU1PUllfU0VUVVAgMHg5CisjZGVmaW5lIFZNQ19JbnRlcmxlYXZpbmcgMHgwMQorI2RlZmluZSBWTUNfNFdheSAweDAyCisjZGVmaW5lIFZNQ19FdmVuQ2FjaGVMaW5lcyAweDA0CisjZGVmaW5lIFZNQ19IaWdoTGluZSAweDA4CisjZGVmaW5lIFZNQ19TdGFydDBfRW5hYmxlIDB4MjAKKyNkZWZpbmUgVk1DX1N0YXJ0MV9FbmFibGUgMHg0MAorI2RlZmluZSBWTUNfVnJlbWFwIDB4ODAKKyNkZWZpbmUgVk9ZQUdFUl9WTUNfQkFOS19ERU5TSVRZIDB4YQorI2RlZmluZSBWTUNfQkFOS19FTVBUWSAwCisjZGVmaW5lIFZNQ19CQU5LXzRNQiAxCisjZGVmaW5lIFZNQ19CQU5LXzE2TUIgMgorI2RlZmluZSBWTUNfQkFOS182NE1CIDMKKyNkZWZpbmUgVk1DX0JBTkswX01BU0sgMHgwMworI2RlZmluZSBWTUNfQkFOSzFfTUFTSyAweDBDCisjZGVmaW5lIFZNQ19CQU5LMl9NQVNLIDB4MzAKKyNkZWZpbmUgVk1DX0JBTkszX01BU0sgMHhDMAorCisjZGVmaW5lIFZPWUFHRVJfTU1DX0FTSUNfSUQgMQorCisjZGVmaW5lIFZPWUFHRVJfTU1DX01FTU9SWTBfTU9EVUxFIDB4MTQKKyNkZWZpbmUgVk9ZQUdFUl9NTUNfTUVNT1JZMV9NT0RVTEUgMHgxNQorCisjZGVmaW5lIFZPWUFHRVJfTU1BX0FTSUNfSUQgMgorCisjZGVmaW5lIFZPWUFHRVJfUVVBRF9CQVNFQk9BUkQgMQorCisjZGVmaW5lIFZPWUFHRVJfUVVBRF9RREFUQTAgMQorI2RlZmluZSBWT1lBR0VSX1FVQURfUURBVEExIDIKKyNkZWZpbmUgVk9ZQUdFUl9RVUFEX1FBQkMgMworCisjZGVmaW5lIFZPWUFHRVJfUFJPQ0VTU09SX1BSRVNFTlRfTUFTSyAweDg4YQorI2RlZmluZSBWT1lBR0VSX01FTU9SWV9DTElDS01BUCAweGEyMworI2RlZmluZSBWT1lBR0VSX0RVTVBfTE9DQVRJT04gMHhiMWEKKworI2RlZmluZSBWT1lBR0VSX1NVU19JTl9DT05UUk9MX1BPUlQgMHgzZmYKKyNkZWZpbmUgVk9ZQUdFUl9JTl9DT05UUk9MX0ZMQUcgMHg4MAorCisjZGVmaW5lIFZPWUFHRVJfUFNJX1NUQVRVU19SRUcgMHgwOAorI2RlZmluZSBQU0lfRENfRkFJTCAweDAxCisjZGVmaW5lIFBTSV9NT04gMHgwMgorI2RlZmluZSBQU0lfRkFVTFQgMHgwNAorI2RlZmluZSBQU0lfQUxBUk0gMHgwOAorI2RlZmluZSBQU0lfQ1VSUkVOVCAweDEwCisjZGVmaW5lIFBTSV9EVk0gMHgyMAorI2RlZmluZSBQU0lfUFNDRkFVTFQgMHg0MAorI2RlZmluZSBQU0lfU1RBVF9DSEcgMHg4MAorCisjZGVmaW5lIFZPWUFHRVJfUFNJX1NVUFBMWV9SRUcgMHg4MDAwCisKKyNkZWZpbmUgUFNJX0ZBSUxfREMgMHgwMQorI2RlZmluZSBQU0lfRkFJTF9BQyAweDAyCisjZGVmaW5lIFBTSV9NT05fSU5UIDB4MDQKKyNkZWZpbmUgUFNJX1NXSVRDSF9PRkYgMHgwOAorI2RlZmluZSBQU0lfSFhfT0ZGIDB4MTAKKyNkZWZpbmUgUFNJX1NFQ1VSSVRZIDB4MjAKKyNkZWZpbmUgUFNJX0NNT1NfQkFUVF9MT1cgMHg0MAorI2RlZmluZSBQU0lfQ01PU19CQVRUX0ZBSUwgMHg4MAorCisjZGVmaW5lIFBTSV9DTFJfU1dJVENIX09GRiAweDEzCisjZGVmaW5lIFBTSV9DTFJfSFhfT0ZGIDB4MTQKKyNkZWZpbmUgUFNJX0NMUl9DTU9TX0JBVFRfRkFJTCAweDE3CisKKyNkZWZpbmUgVk9ZQUdFUl9QU0lfTUFTSyAweDgwMDEKKyNkZWZpbmUgUFNJX01BU0tfTUFTSyAweDEwCisKKyNkZWZpbmUgVk9ZQUdFUl9QU0lfQUNfRkFJTF9SRUcgMHg4MDA0CisjZGVmaW5lIEFDX0ZBSUxfU1RBVF9DSEFOR0UgMHg4MAorCisjZGVmaW5lIFZPWUFHRVJfUFNJX0dFTkVSQUxfUkVHIDB4ODAwNworCisjZGVmaW5lIFBTSV9TV0lUQ0hfT04gMHgwMQorI2RlZmluZSBQU0lfU1dJVENIX0VOQUJMRUQgMHgwMgorI2RlZmluZSBQU0lfQUxBUk1fRU5BQkxFRCAweDA4CisjZGVmaW5lIFBTSV9TRUNVUkVfRU5BQkxFRCAweDEwCisjZGVmaW5lIFBTSV9DT0xEX1JFU0VUIDB4MjAKKyNkZWZpbmUgUFNJX0NPTERfU1RBUlQgMHg4MAorCisjZGVmaW5lIFBTSV9QT1dFUl9ET1dOIDB4MTAKKyNkZWZpbmUgUFNJX1NXSVRDSF9ESVNBQkxFIDB4MDEKKyNkZWZpbmUgUFNJX1NXSVRDSF9FTkFCTEUgMHgxMQorI2RlZmluZSBQU0lfQ0xFQVIgMHgxMgorI2RlZmluZSBQU0lfQUxBUk1fRElTQUJMRSAweDAzCisjZGVmaW5lIFBTSV9BTEFSTV9FTkFCTEUgMHgxMworI2RlZmluZSBQU0lfQ0xFQVJfQ09MRF9SRVNFVCAweDA1CisjZGVmaW5lIFBTSV9TRVRfQ09MRF9SRVNFVCAweDE1CisjZGVmaW5lIFBTSV9DTEVBUl9DT0xEX1NUQVJUIDB4MDcKKyNkZWZpbmUgUFNJX1NFVF9DT0xEX1NUQVJUIDB4MTcKKworc3RydWN0IHZveWFnZXJfYmlvc19pbmZvIHsKKyBfX3U4IGxlbjsKKyBfX3U4IG1ham9yOworIF9fdTggbWlub3I7CisgX191OCBkZWJ1ZzsKKyBfX3U4IG51bV9jbGFzc2VzOworIF9fdTggY2xhc3NfMTsKKyBfX3U4IGNsYXNzXzI7Cit9OworCisjZGVmaW5lIE5VTUJFUl9PRl9NQ19CVVNTRVMgMgorI2RlZmluZSBTTE9UU19QRVJfTUNfQlVTIDgKKyNkZWZpbmUgTUFYX0NQVVMgMTYgIAorI2RlZmluZSBNQVhfUFJPQ0VTU09SX0JPQVJEUyA0ICAKKyNkZWZpbmUgTUFYX0NBQ0hFX0xFVkVMUyA0ICAKKyNkZWZpbmUgTUFYX1NIQVJFRF9DUFVTIDQgIAorI2RlZmluZSBOVU1CRVJfT0ZfUE9TX1JFR1MgOAorCit0eXBlZGVmIHN0cnVjdCB7CisgX191OCBNQ19TbG90OworIF9fdTggUE9TX1ZhbHVlc1tOVU1CRVJfT0ZfUE9TX1JFR1NdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBNQ19TbG90SW5mb3JtYXRpb25fdDsKKworc3RydWN0IFF1YWREZXNjcmlwdGlvbiB7CisgX191OCBUeXBlOworIF9fdTggU3RydWN0dXJlVmVyc2lvbjsKKyBfX3UzMiBDUElfQmFzZUFkZHJlc3M7CisgX191MzIgTEFSQ19CYW5rU2l6ZTsKKyBfX3UzMiBMb2NhbE1lbW9yeVN0YXRlQml0czsKKyBfX3U4IFNsb3Q7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgUHJvY0JvYXJkSW5mbyB7CisgX191OCBUeXBlOworIF9fdTggU3RydWN0dXJlVmVyc2lvbjsKKyBfX3U4IE51bWJlck9mQm9hcmRzOworIHN0cnVjdCBRdWFkRGVzY3JpcHRpb24gUXVhZERhdGFbTUFYX1BST0NFU1NPUl9CT0FSRFNdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IENhY2hlRGVzY3JpcHRpb24geworIF9fdTggTGV2ZWw7CisgX191MzIgVG90YWxTaXplOworIF9fdTE2IExpbmVTaXplOworIF9fdTggQXNzb2NpYXRpdml0eTsKKyBfX3U4IENhY2hlVHlwZTsKKyBfX3U4IFdyaXRlVHlwZTsKKyBfX3U4IE51bWJlcl9DUFVzX1NoYXJlZEJ5OworIF9fdTggU2hhcmVkX0NQVXNfSGFyZHdhcmVfSURzW01BWF9TSEFSRURfQ1BVU107CisKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBDUFVfRGVzY3JpcHRpb24geworIF9fdTggQ1BVX0hhcmR3YXJlSWQ7CisgY2hhciAqRlJVX1N0cmluZzsKKyBfX3U4IE51bWJlck9mQ2FjaGVMZXZlbHM7Cisgc3RydWN0IENhY2hlRGVzY3JpcHRpb24gQ2FjaGVMZXZlbERhdGFbTUFYX0NBQ0hFX0xFVkVMU107Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgQ1BVX0luZm8geworIF9fdTggVHlwZTsKKyBfX3U4IFN0cnVjdHVyZVZlcnNpb247CisgX191OCBOdW1iZXJPZl9DUFVzOworIHN0cnVjdCBDUFVfRGVzY3JpcHRpb24gQ1BVX0RhdGFbTUFYX0NQVVNdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwordHlwZWRlZiBzdHJ1Y3QgeworIF9fdTggTWFpbGJveF9TVVM7CisgX191OCBNYWlsYm94X09TOworIF9fdTggU1VTX01haWxib3hWZXJzaW9uOworIF9fdTggT1NfTWFpbGJveFZlcnNpb247CisgX191MzIgT1NfRmxhZ3M7CisgX191MzIgU1VTX0ZsYWdzOworIF9fdTMyIFdhdGNoRG9nUGVyaW9kOworIF9fdTMyIFdhdGNoRG9nQ291bnQ7CisgX191MzIgTWVtb3J5Rm9yX1NVU19FcnJvckxvZzsKKyBNQ19TbG90SW5mb3JtYXRpb25fdCBNQ19TbG90SW5mb1tOVU1CRVJfT0ZfTUNfQlVTU0VTKlNMT1RTX1BFUl9NQ19CVVNdOworCisgc3RydWN0IFByb2NCb2FyZEluZm8gKkJvYXJkRGF0YTsKKyBzdHJ1Y3QgQ1BVX0luZm8gKkNQVV9EYXRhOworCit9IFZveWFnZXJfS2VybmVsU1VTX01ib3hfdDsKKworc3RydWN0IHZveWFnZXJfcWljX2NwaSB7CisKKyBzdHJ1Y3QgeworIF9fdTMyIHBhZDFbM107CisgX191MzIgY3BpOworIF9fdTMyIHBhZDJbNF07CisgfSBxaWNfY3BpWzhdOworfTsKKworc3RydWN0IHZveWFnZXJfc3RhdHVzIHsKKyBfX3UzMiBwb3dlcl9mYWlsOjE7CisgX191MzIgc3dpdGNoX29mZjoxOworIF9fdTMyIHJlcXVlc3RfZnJvbV9rZXJuZWw6MTsKK307CisKK3N0cnVjdCB2b3lhZ2VyX3BzaV9yZWdzIHsKKyBfX3U4IGNhdF9pZDsKKyBfX3U4IGNhdF9kZXY7CisgX191OCBjYXRfY29udHJvbDsKKyBfX3U4IHN1YmFkZHI7CisgX191OCBkdW1teTQ7CisgX191OCBjaGVja2JpdDsKKyBfX3U4IHN1YmFkZHJfbG93OworIF9fdTggc3ViYWRkcl9oaWdoOworIF9fdTggaW50c3RhdHVzOworIF9fdTggc3RhdDE7CisgX191OCBzdGF0MzsKKyBfX3U4IGZhdWx0OworIF9fdTggdG1zOworIF9fdTggZ2VuOworIF9fdTggc3lzY29uZjsKKyBfX3U4IGR1bW15MTU7Cit9OworCitzdHJ1Y3Qgdm95YWdlcl9wc2lfc3VicmVncyB7CisgX191OCBzdXBwbHk7CisgX191OCBtYXNrOworIF9fdTggcHJlc2VudDsKKyBfX3U4IERDZmFpbDsKKyBfX3U4IEFDZmFpbDsKKyBfX3U4IGZhaWw7CisgX191OCBVUFNmYWlsOworIF9fdTggZ2Vuc3RhdHVzOworfTsKKworc3RydWN0IHZveWFnZXJfcHNpIHsKKyBzdHJ1Y3Qgdm95YWdlcl9wc2lfcmVncyByZWdzOworIHN0cnVjdCB2b3lhZ2VyX3BzaV9zdWJyZWdzIHN1YnJlZ3M7Cit9OworCitzdHJ1Y3Qgdm95YWdlcl9TVVMgeworI2RlZmluZSBWT1lBR0VSX0RVTVBfQlVUVE9OX05NSSAweDEKKyNkZWZpbmUgVk9ZQUdFUl9TVVNfVkFMSUQgMHgyCisjZGVmaW5lIFZPWUFHRVJfU1lTSU5UX0NPTVBMRVRFIDB4MworIF9fdTggU1VTX21ib3g7CisjZGVmaW5lIFZPWUFHRVJfTk9fQ09NTUFORCAweDAKKyNkZWZpbmUgVk9ZQUdFUl9JR05PUkVfRFVNUCAweDEKKyNkZWZpbmUgVk9ZQUdFUl9ET19EVU1QIDB4MgorI2RlZmluZSBWT1lBR0VSX1NZU0lOVF9IQU5EU0hBS0UgMHgzCisjZGVmaW5lIFZPWUFHRVJfRE9fTUVNX0RVTVAgMHg0CisjZGVmaW5lIFZPWUFHRVJfU1lTSU5UX1dBU19SRUNPVkVSRUQgMHg1CisgX191OCBrZXJuZWxfbWJveDsKKyNkZWZpbmUgVk9ZQUdFUl9NQUlMQk9YX1ZFUlNJT04gMHgxMAorIF9fdTggU1VTX3ZlcnNpb247CisgX191OCBrZXJuZWxfdmVyc2lvbjsKKyNkZWZpbmUgVk9ZQUdFUl9PU19IQVNfU1lTSU5UIDB4MQorI2RlZmluZSBWT1lBR0VSX09TX0lOX1BST0dSRVNTIDB4MgorI2RlZmluZSBWT1lBR0VSX1VQREFUSU5HX1dEUEVSSU9EIDB4NAorIF9fdTMyIGtlcm5lbF9mbGFnczsKKyNkZWZpbmUgVk9ZQUdFUl9TVVNfQk9PVElORyAweDEKKyNkZWZpbmUgVk9ZQUdFUl9TVVNfSU5fUFJPR1JFU1MgMHgyCisgX191MzIgU1VTX2ZsYWdzOworIF9fdTMyIHdhdGNoZG9nX3BlcmlvZDsKKyBfX3UzMiB3YXRjaGRvZ19jb3VudDsKKyBfX3UzMiBTVVNfZXJyb3Jsb2c7CisKK307CisKKyNkZWZpbmUgVk9ZQUdFUl9QU0lfUkVBRCAwCisjZGVmaW5lIFZPWUFHRVJfUFNJX1dSSVRFIDEKKyNkZWZpbmUgVk9ZQUdFUl9QU0lfU1VCUkVBRCAyCisjZGVmaW5lIFZPWUFHRVJfUFNJX1NVQldSSVRFIDMKKwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3ZzeXNjYWxsLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vdnN5c2NhbGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2JlZTNiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3ZzeXNjYWxsLmgKQEAgLTAsMCArMSwyNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQVNNX1g4Nl82NF9WU1lTQ0FMTF9IXworI2RlZmluZSBfQVNNX1g4Nl82NF9WU1lTQ0FMTF9IXworCitlbnVtIHZzeXNjYWxsX251bSB7CisgX19OUl92Z2V0dGltZW9mZGF5LAorIF9fTlJfdnRpbWUsCisgX19OUl92Z2V0Y3B1LAorfTsKKworI2RlZmluZSBWU1lTQ0FMTF9TVEFSVCAoLTEwVUwgPDwgMjApCisjZGVmaW5lIFZTWVNDQUxMX1NJWkUgMTAyNAorI2RlZmluZSBWU1lTQ0FMTF9FTkQgKC0yVUwgPDwgMjApCisjZGVmaW5lIFZTWVNDQUxMX01BUFBFRF9QQUdFUyAxCisjZGVmaW5lIFZTWVNDQUxMX0FERFIodnN5c2NhbGxfbnIpIChWU1lTQ0FMTF9TVEFSVCtWU1lTQ0FMTF9TSVpFKih2c3lzY2FsbF9ucikpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3hlbi9oeXBlcmNhbGwuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS94ZW4vaHlwZXJjYWxsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M1MjNhOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS94ZW4vaHlwZXJjYWxsLmgKQEAgLTAsMCArMSwzNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0hZUEVSQ0FMTF9IX18KKyNkZWZpbmUgX19IWVBFUkNBTExfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorCisjaW5jbHVkZSA8eGVuL2ludGVyZmFjZS94ZW4uaD4KKyNpbmNsdWRlIDx4ZW4vaW50ZXJmYWNlL3NjaGVkLmg+CisjaW5jbHVkZSA8eGVuL2ludGVyZmFjZS9waHlzZGV2Lmg+CisKKyNkZWZpbmUgX2h5cGVyY2FsbDAodHlwZSwgbmFtZSkgICh7ICAgbG9uZyBfX3JlczsgICBhc20gdm9sYXRpbGUgKCAgICJjYWxsICVbY2FsbF0iICAgOiAiPWEiIChfX3JlcykgICA6IFtjYWxsXSAibSIgKGh5cGVyY2FsbF9wYWdlW19fSFlQRVJWSVNPUl8jI25hbWVdKSAgIDogIm1lbW9yeSIgKTsgICAodHlwZSlfX3JlczsgIH0pCisKKyNkZWZpbmUgX2h5cGVyY2FsbDEodHlwZSwgbmFtZSwgYTEpICAoeyAgIGxvbmcgX19yZXMsIF9faWduMTsgICBhc20gdm9sYXRpbGUgKCAgICJjYWxsICVbY2FsbF0iICAgOiAiPWEiIChfX3JlcyksICI9YiIgKF9faWduMSkgICA6ICIxIiAoKGxvbmcpKGExKSksICAgW2NhbGxdICJtIiAoaHlwZXJjYWxsX3BhZ2VbX19IWVBFUlZJU09SXyMjbmFtZV0pICAgOiAibWVtb3J5IiApOyAgICh0eXBlKV9fcmVzOyAgfSkKKworI2RlZmluZSBfaHlwZXJjYWxsMih0eXBlLCBuYW1lLCBhMSwgYTIpICAoeyAgIGxvbmcgX19yZXMsIF9faWduMSwgX19pZ24yOyAgIGFzbSB2b2xhdGlsZSAoICAgImNhbGwgJVtjYWxsXSIgICA6ICI9YSIgKF9fcmVzKSwgIj1iIiAoX19pZ24xKSwgIj1jIiAoX19pZ24yKSAgIDogIjEiICgobG9uZykoYTEpKSwgIjIiICgobG9uZykoYTIpKSwgICBbY2FsbF0gIm0iIChoeXBlcmNhbGxfcGFnZVtfX0hZUEVSVklTT1JfIyNuYW1lXSkgICA6ICJtZW1vcnkiICk7ICAgKHR5cGUpX19yZXM7ICB9KQorCisjZGVmaW5lIF9oeXBlcmNhbGwzKHR5cGUsIG5hbWUsIGExLCBhMiwgYTMpICAoeyAgIGxvbmcgX19yZXMsIF9faWduMSwgX19pZ24yLCBfX2lnbjM7ICAgYXNtIHZvbGF0aWxlICggICAiY2FsbCAlW2NhbGxdIiAgIDogIj1hIiAoX19yZXMpLCAiPWIiIChfX2lnbjEpLCAiPWMiIChfX2lnbjIpLCAgICI9ZCIgKF9faWduMykgICA6ICIxIiAoKGxvbmcpKGExKSksICIyIiAoKGxvbmcpKGEyKSksICAgIjMiICgobG9uZykoYTMpKSwgICBbY2FsbF0gIm0iIChoeXBlcmNhbGxfcGFnZVtfX0hZUEVSVklTT1JfIyNuYW1lXSkgICA6ICJtZW1vcnkiICk7ICAgKHR5cGUpX19yZXM7ICB9KQorCisjZGVmaW5lIF9oeXBlcmNhbGw0KHR5cGUsIG5hbWUsIGExLCBhMiwgYTMsIGE0KSAgKHsgICBsb25nIF9fcmVzLCBfX2lnbjEsIF9faWduMiwgX19pZ24zLCBfX2lnbjQ7ICAgYXNtIHZvbGF0aWxlICggICAiY2FsbCAlW2NhbGxdIiAgIDogIj1hIiAoX19yZXMpLCAiPWIiIChfX2lnbjEpLCAiPWMiIChfX2lnbjIpLCAgICI9ZCIgKF9faWduMyksICI9UyIgKF9faWduNCkgICA6ICIxIiAoKGxvbmcpKGExKSksICIyIiAoKGxvbmcpKGEyKSksICAgIjMiICgobG9uZykoYTMpKSwgIjQiICgobG9uZykoYTQpKSwgICBbY2FsbF0gIm0iIChoeXBlcmNhbGxfcGFnZVtfX0hZUEVSVklTT1JfIyNuYW1lXSkgICA6ICJtZW1vcnkiICk7ICAgKHR5cGUpX19yZXM7ICB9KQorCisjZGVmaW5lIF9oeXBlcmNhbGw1KHR5cGUsIG5hbWUsIGExLCBhMiwgYTMsIGE0LCBhNSkgICh7ICAgbG9uZyBfX3JlcywgX19pZ24xLCBfX2lnbjIsIF9faWduMywgX19pZ240LCBfX2lnbjU7ICAgYXNtIHZvbGF0aWxlICggICAiY2FsbCAlW2NhbGxdIiAgIDogIj1hIiAoX19yZXMpLCAiPWIiIChfX2lnbjEpLCAiPWMiIChfX2lnbjIpLCAgICI9ZCIgKF9faWduMyksICI9UyIgKF9faWduNCksICI9RCIgKF9faWduNSkgICA6ICIxIiAoKGxvbmcpKGExKSksICIyIiAoKGxvbmcpKGEyKSksICAgIjMiICgobG9uZykoYTMpKSwgIjQiICgobG9uZykoYTQpKSwgICAiNSIgKChsb25nKShhNSkpLCAgIFtjYWxsXSAibSIgKGh5cGVyY2FsbF9wYWdlW19fSFlQRVJWSVNPUl8jI25hbWVdKSAgIDogIm1lbW9yeSIgKTsgICAodHlwZSlfX3JlczsgIH0pCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljLzRsZXZlbC1maXh1cC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljLzRsZXZlbC1maXh1cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxYWU3ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvNGxldmVsLWZpeHVwLmgKQEAgLTAsMCArMSw0MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfNExFVkVMX0ZJWFVQX0gKKyNkZWZpbmUgXzRMRVZFTF9GSVhVUF9ICisKKyNkZWZpbmUgX19BUkNIX0hBU180TEVWRUxfSEFDSworI2RlZmluZSBfX1BBR0VUQUJMRV9QVURfRk9MREVECisKKyNkZWZpbmUgUFVEX1NJWkUgUEdESVJfU0laRQorI2RlZmluZSBQVURfTUFTSyBQR0RJUl9NQVNLCisjZGVmaW5lIFBUUlNfUEVSX1BVRCAxCisKKyNkZWZpbmUgcHVkX3QgcGdkX3QKKworI2RlZmluZSBwbWRfYWxsb2MobW0sIHB1ZCwgYWRkcmVzcykgICAoKHVubGlrZWx5KHBnZF9ub25lKCoocHVkKSkpICYmIF9fcG1kX2FsbG9jKG1tLCBwdWQsIGFkZHJlc3MpKT8gICBOVUxMOiBwbWRfb2Zmc2V0KHB1ZCwgYWRkcmVzcykpCisKKyNkZWZpbmUgcHVkX2FsbG9jKG1tLCBwZ2QsIGFkZHJlc3MpIChwZ2QpCisjZGVmaW5lIHB1ZF9vZmZzZXQocGdkLCBzdGFydCkgKHBnZCkKKyNkZWZpbmUgcHVkX25vbmUocHVkKSAwCisjZGVmaW5lIHB1ZF9iYWQocHVkKSAwCisjZGVmaW5lIHB1ZF9wcmVzZW50KHB1ZCkgMQorI2RlZmluZSBwdWRfRVJST1IocHVkKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHB1ZF9jbGVhcihwdWQpIHBnZF9jbGVhcihwdWQpCisKKyN1bmRlZiBwdWRfZnJlZV90bGIKKyNkZWZpbmUgcHVkX2ZyZWVfdGxiKHRsYiwgeCkgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBwdWRfZnJlZSh4KSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIF9fcHVkX2ZyZWVfdGxiKHRsYiwgeCkgZG8geyB9IHdoaWxlICgwKQorCisjdW5kZWYgcHVkX2FkZHJfZW5kCisjZGVmaW5lIHB1ZF9hZGRyX2VuZChhZGRyLCBlbmQpIChlbmQpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2F1ZGl0X2Rpcl93cml0ZS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2F1ZGl0X2Rpcl93cml0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMjdiNTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvYXVkaXRfZGlyX3dyaXRlLmgKQEAgLTAsMCArMSwxMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2JpdG9wcy9fX2Zmcy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2JpdG9wcy9fX2Zmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkMTM1YmQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvYml0b3BzL19fZmZzLmgKQEAgLTAsMCArMSwxOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQVNNX0dFTkVSSUNfQklUT1BTX19fRkZTX0hfCisjZGVmaW5lIF9BU01fR0VORVJJQ19CSVRPUFNfX19GRlNfSF8KKworI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCisjaWYgQklUU19QRVJfTE9ORyA9PSA2NAorI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9iaXRvcHMvYXRvbWljLmggYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvYml0b3BzL2F0b21pYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmNTNiYTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvYml0b3BzL2F0b21pYy5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FTTV9HRU5FUklDX0JJVE9QU19BVE9NSUNfSF8KKyNkZWZpbmUgX0FTTV9HRU5FUklDX0JJVE9QU19BVE9NSUNfSF8KKworI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCisjZGVmaW5lIEJJVE9QX01BU0sobnIpICgxVUwgPDwgKChucikgJSBCSVRTX1BFUl9MT05HKSkKKyNkZWZpbmUgQklUT1BfV09SRChucikgKChucikgLyBCSVRTX1BFUl9MT05HKQorCisjZGVmaW5lIF9hdG9taWNfc3Bpbl9sb2NrX2lycXNhdmUobCxmKSBkbyB7IGxvY2FsX2lycV9zYXZlKGYpOyB9IHdoaWxlICgwKQorI2RlZmluZSBfYXRvbWljX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUobCxmKSBkbyB7IGxvY2FsX2lycV9yZXN0b3JlKGYpOyB9IHdoaWxlICgwKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9iaXRvcHMvZmZ6LmggYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvYml0b3BzL2Zmei5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4ZGEyNzEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvYml0b3BzL2Zmei5oCkBAIC0wLDAgKzEsMTcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FTTV9HRU5FUklDX0JJVE9QU19GRlpfSF8KKyNkZWZpbmUgX0FTTV9HRU5FUklDX0JJVE9QU19GRlpfSF8KKworI2RlZmluZSBmZnooeCkgX19mZnMofih4KSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvYml0b3BzL2ZpbmQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9iaXRvcHMvZmluZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzNjFjZmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvYml0b3BzL2ZpbmQuaApAQCAtMCwwICsxLDE4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01fR0VORVJJQ19CSVRPUFNfRklORF9IXworI2RlZmluZSBfQVNNX0dFTkVSSUNfQklUT1BTX0ZJTkRfSF8KKworI2RlZmluZSBmaW5kX2ZpcnN0X2JpdChhZGRyLCBzaXplKSBmaW5kX25leHRfYml0KChhZGRyKSwgKHNpemUpLCAwKQorI2RlZmluZSBmaW5kX2ZpcnN0X3plcm9fYml0KGFkZHIsIHNpemUpIGZpbmRfbmV4dF96ZXJvX2JpdCgoYWRkciksIChzaXplKSwgMCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvYml0b3BzL2Zscy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2JpdG9wcy9mbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWRiZjMxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2JpdG9wcy9mbHMuaApAQCAtMCwwICsxLDE1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01fR0VORVJJQ19CSVRPUFNfRkxTX0hfCisjZGVmaW5lIF9BU01fR0VORVJJQ19CSVRPUFNfRkxTX0hfCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2JpdG9wcy9mbHM2NC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2JpdG9wcy9mbHM2NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmNzcwOTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvYml0b3BzL2ZsczY0LmgKQEAgLTAsMCArMSwxNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQVNNX0dFTkVSSUNfQklUT1BTX0ZMUzY0X0hfCisjZGVmaW5lIF9BU01fR0VORVJJQ19CSVRPUFNfRkxTNjRfSF8KKworI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9iaXRvcHMvbGUuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9iaXRvcHMvbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2NhOTczCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2JpdG9wcy9sZS5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FTTV9HRU5FUklDX0JJVE9QU19MRV9IXworI2RlZmluZSBfQVNNX0dFTkVSSUNfQklUT1BTX0xFX0hfCisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisKKyNkZWZpbmUgQklUT1BfV09SRChucikgKChucikgLyBCSVRTX1BFUl9MT05HKQorI2RlZmluZSBCSVRPUF9MRV9TV0laWkxFICgoQklUU19QRVJfTE9ORy0xKSAmIH4weDcpCisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU4KKworI2RlZmluZSBnZW5lcmljX3Rlc3RfbGVfYml0KG5yLCBhZGRyKSB0ZXN0X2JpdChuciwgYWRkcikKKyNkZWZpbmUgZ2VuZXJpY19fX3NldF9sZV9iaXQobnIsIGFkZHIpIF9fc2V0X2JpdChuciwgYWRkcikKKyNkZWZpbmUgZ2VuZXJpY19fX2NsZWFyX2xlX2JpdChuciwgYWRkcikgX19jbGVhcl9iaXQobnIsIGFkZHIpCisKKyNkZWZpbmUgZ2VuZXJpY190ZXN0X2FuZF9zZXRfbGVfYml0KG5yLCBhZGRyKSB0ZXN0X2FuZF9zZXRfYml0KG5yLCBhZGRyKQorI2RlZmluZSBnZW5lcmljX3Rlc3RfYW5kX2NsZWFyX2xlX2JpdChuciwgYWRkcikgdGVzdF9hbmRfY2xlYXJfYml0KG5yLCBhZGRyKQorCisjZGVmaW5lIGdlbmVyaWNfX190ZXN0X2FuZF9zZXRfbGVfYml0KG5yLCBhZGRyKSBfX3Rlc3RfYW5kX3NldF9iaXQobnIsIGFkZHIpCisjZGVmaW5lIGdlbmVyaWNfX190ZXN0X2FuZF9jbGVhcl9sZV9iaXQobnIsIGFkZHIpIF9fdGVzdF9hbmRfY2xlYXJfYml0KG5yLCBhZGRyKQorCisjZGVmaW5lIGdlbmVyaWNfZmluZF9uZXh0X3plcm9fbGVfYml0KGFkZHIsIHNpemUsIG9mZnNldCkgZmluZF9uZXh0X3plcm9fYml0KGFkZHIsIHNpemUsIG9mZnNldCkKKworI2VsaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisKKyNkZWZpbmUgZ2VuZXJpY190ZXN0X2xlX2JpdChuciwgYWRkcikgICB0ZXN0X2JpdCgobnIpIF4gQklUT1BfTEVfU1dJWlpMRSwgKGFkZHIpKQorI2RlZmluZSBnZW5lcmljX19fc2V0X2xlX2JpdChuciwgYWRkcikgICBfX3NldF9iaXQoKG5yKSBeIEJJVE9QX0xFX1NXSVpaTEUsIChhZGRyKSkKKyNkZWZpbmUgZ2VuZXJpY19fX2NsZWFyX2xlX2JpdChuciwgYWRkcikgICBfX2NsZWFyX2JpdCgobnIpIF4gQklUT1BfTEVfU1dJWlpMRSwgKGFkZHIpKQorCisjZGVmaW5lIGdlbmVyaWNfdGVzdF9hbmRfc2V0X2xlX2JpdChuciwgYWRkcikgICB0ZXN0X2FuZF9zZXRfYml0KChucikgXiBCSVRPUF9MRV9TV0laWkxFLCAoYWRkcikpCisjZGVmaW5lIGdlbmVyaWNfdGVzdF9hbmRfY2xlYXJfbGVfYml0KG5yLCBhZGRyKSAgIHRlc3RfYW5kX2NsZWFyX2JpdCgobnIpIF4gQklUT1BfTEVfU1dJWlpMRSwgKGFkZHIpKQorCisjZGVmaW5lIGdlbmVyaWNfX190ZXN0X2FuZF9zZXRfbGVfYml0KG5yLCBhZGRyKSAgIF9fdGVzdF9hbmRfc2V0X2JpdCgobnIpIF4gQklUT1BfTEVfU1dJWlpMRSwgKGFkZHIpKQorI2RlZmluZSBnZW5lcmljX19fdGVzdF9hbmRfY2xlYXJfbGVfYml0KG5yLCBhZGRyKSAgIF9fdGVzdF9hbmRfY2xlYXJfYml0KChucikgXiBCSVRPUF9MRV9TV0laWkxFLCAoYWRkcikpCisKKyNlbHNlCisjZXJyb3IgIlBsZWFzZSBmaXggPGFzbS9ieXRlb3JkZXIuaD4iCisjZW5kaWYKKworI2RlZmluZSBnZW5lcmljX2ZpbmRfZmlyc3RfemVyb19sZV9iaXQoYWRkciwgc2l6ZSkgICBnZW5lcmljX2ZpbmRfbmV4dF96ZXJvX2xlX2JpdCgoYWRkciksIChzaXplKSwgMCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvYml0b3BzL25vbi1hdG9taWMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9iaXRvcHMvbm9uLWF0b21pYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyN2Y3MzYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvYml0b3BzL25vbi1hdG9taWMuaApAQCAtMCwwICsxLDIwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01fR0VORVJJQ19CSVRPUFNfTk9OX0FUT01JQ19IXworI2RlZmluZSBfQVNNX0dFTkVSSUNfQklUT1BTX05PTl9BVE9NSUNfSF8KKworI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCisjZGVmaW5lIEJJVE9QX01BU0sobnIpICgxVUwgPDwgKChucikgJSBCSVRTX1BFUl9MT05HKSkKKyNkZWZpbmUgQklUT1BfV09SRChucikgKChucikgLyBCSVRTX1BFUl9MT05HKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9idWcuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9idWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTFhMTM1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2J1Zy5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FTTV9HRU5FUklDX0JVR19ICisjZGVmaW5lIF9BU01fR0VORVJJQ19CVUdfSAorCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKworI2lmbmRlZiBIQVZFX0FSQ0hfQlVHCisjZGVmaW5lIEJVRygpCisjZW5kaWYKKworI2lmbmRlZiBIQVZFX0FSQ0hfQlVHX09OCisjZGVmaW5lIEJVR19PTihjb25kaXRpb24pIGRvIHsgaWYgKGNvbmRpdGlvbikgOyB9IHdoaWxlKDApCisjZW5kaWYKKworI2lmbmRlZiBIQVZFX0FSQ0hfV0FSTl9PTgorI2RlZmluZSBXQVJOX09OKGNvbmRpdGlvbikgZG8geyBpZiAoY29uZGl0aW9uKSA7IH0gd2hpbGUoMCkKKyNlbmRpZgorCisjZGVmaW5lIFdBUk5fT05fT05DRShjb25kaXRpb24pICAoeyAgIHN0YXRpYyBpbnQgX193YXJuX29uY2UgPSAxOyAgIGludCBfX3JldCA9IDA7ICAgICBpZiAodW5saWtlbHkoKGNvbmRpdGlvbikgJiYgX193YXJuX29uY2UpKSB7ICAgX193YXJuX29uY2UgPSAwOyAgIFdBUk5fT04oMSk7ICAgX19yZXQgPSAxOyAgIH0gICBfX3JldDsgIH0pCisKKyNkZWZpbmUgV0FSTl9PTl9TTVAoeCkgZG8geyB9IHdoaWxlICgwKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9jcHV0aW1lLmggYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvY3B1dGltZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0ODZiODcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvY3B1dGltZS5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FTTV9HRU5FUklDX0NQVVRJTUVfSAorI2RlZmluZSBfQVNNX0dFTkVSSUNfQ1BVVElNRV9ICisKKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgY3B1dGltZV90OworCisjZGVmaW5lIGNwdXRpbWVfemVybyAoMFVMKQorI2RlZmluZSBjcHV0aW1lX21heCAoKH4wVUwgPj4gMSkgLSAxKQorI2RlZmluZSBjcHV0aW1lX2FkZChfX2EsIF9fYikgKChfX2EpICsgKF9fYikpCisjZGVmaW5lIGNwdXRpbWVfc3ViKF9fYSwgX19iKSAoKF9fYSkgLSAoX19iKSkKKyNkZWZpbmUgY3B1dGltZV9kaXYoX19hLCBfX24pICgoX19hKSAvIChfX24pKQorI2RlZmluZSBjcHV0aW1lX2hhbHZlKF9fYSkgKChfX2EpID4+IDEpCisjZGVmaW5lIGNwdXRpbWVfZXEoX19hLCBfX2IpICgoX19hKSA9PSAoX19iKSkKKyNkZWZpbmUgY3B1dGltZV9ndChfX2EsIF9fYikgKChfX2EpID4gKF9fYikpCisjZGVmaW5lIGNwdXRpbWVfZ2UoX19hLCBfX2IpICgoX19hKSA+PSAoX19iKSkKKyNkZWZpbmUgY3B1dGltZV9sdChfX2EsIF9fYikgKChfX2EpIDwgKF9fYikpCisjZGVmaW5lIGNwdXRpbWVfbGUoX19hLCBfX2IpICgoX19hKSA8PSAoX19iKSkKKyNkZWZpbmUgY3B1dGltZV90b19qaWZmaWVzKF9fY3QpIChfX2N0KQorI2RlZmluZSBqaWZmaWVzX3RvX2NwdXRpbWUoX19oeikgKF9faHopCisKK3R5cGVkZWYgdTY0IGNwdXRpbWU2NF90OworCisjZGVmaW5lIGNwdXRpbWU2NF96ZXJvICgwVUxMKQorI2RlZmluZSBjcHV0aW1lNjRfYWRkKF9fYSwgX19iKSAoKF9fYSkgKyAoX19iKSkKKyNkZWZpbmUgY3B1dGltZTY0X3N1YihfX2EsIF9fYikgKChfX2EpIC0gKF9fYikpCisjZGVmaW5lIGNwdXRpbWU2NF90b19qaWZmaWVzNjQoX19jdCkgKF9fY3QpCisjZGVmaW5lIGppZmZpZXM2NF90b19jcHV0aW1lNjQoX19qaWYpIChfX2ppZikKKyNkZWZpbmUgY3B1dGltZV90b19jcHV0aW1lNjQoX19jdCkgKCh1NjQpIF9fY3QpCisKKyNkZWZpbmUgY3B1dGltZV90b19tc2VjcyhfX2N0KSBqaWZmaWVzX3RvX21zZWNzKF9fY3QpCisjZGVmaW5lIG1zZWNzX3RvX2NwdXRpbWUoX19tc2VjcykgbXNlY3NfdG9famlmZmllcyhfX21zZWNzKQorCisjZGVmaW5lIGNwdXRpbWVfdG9fc2VjcyhqaWYpICgoamlmKSAvIEhaKQorI2RlZmluZSBzZWNzX3RvX2NwdXRpbWUoc2VjKSAoKHNlYykgKiBIWikKKworI2RlZmluZSB0aW1lc3BlY190b19jcHV0aW1lKF9fdmFsKSB0aW1lc3BlY190b19qaWZmaWVzKF9fdmFsKQorI2RlZmluZSBjcHV0aW1lX3RvX3RpbWVzcGVjKF9fY3QsX192YWwpIGppZmZpZXNfdG9fdGltZXNwZWMoX19jdCxfX3ZhbCkKKworI2RlZmluZSB0aW1ldmFsX3RvX2NwdXRpbWUoX192YWwpIHRpbWV2YWxfdG9famlmZmllcyhfX3ZhbCkKKyNkZWZpbmUgY3B1dGltZV90b190aW1ldmFsKF9fY3QsX192YWwpIGppZmZpZXNfdG9fdGltZXZhbChfX2N0LF9fdmFsKQorCisjZGVmaW5lIGNwdXRpbWVfdG9fY2xvY2tfdChfX2N0KSBqaWZmaWVzX3RvX2Nsb2NrX3QoX19jdCkKKyNkZWZpbmUgY2xvY2tfdF90b19jcHV0aW1lKF9feCkgY2xvY2tfdF90b19qaWZmaWVzKF9feCkKKworI2RlZmluZSBjcHV0aW1lNjRfdG9fY2xvY2tfdChfX2N0KSBqaWZmaWVzXzY0X3RvX2Nsb2NrX3QoX19jdCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvZW1lcmdlbmN5LXJlc3RhcnQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9lbWVyZ2VuY3ktcmVzdGFydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxOWM2ODIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvZW1lcmdlbmN5LXJlc3RhcnQuaApAQCAtMCwwICsxLDE1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01fR0VORVJJQ19FTUVSR0VOQ1lfUkVTVEFSVF9ICisjZGVmaW5lIF9BU01fR0VORVJJQ19FTUVSR0VOQ1lfUkVTVEFSVF9ICisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2Vycm5vLWJhc2UuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9lcnJuby1iYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZiNGEzMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9lcnJuby1iYXNlLmgKQEAgLTAsMCArMSw1MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQVNNX0dFTkVSSUNfRVJSTk9fQkFTRV9ICisjZGVmaW5lIF9BU01fR0VORVJJQ19FUlJOT19CQVNFX0gKKworI2RlZmluZSBFUEVSTSAxICAKKyNkZWZpbmUgRU5PRU5UIDIgIAorI2RlZmluZSBFU1JDSCAzICAKKyNkZWZpbmUgRUlOVFIgNCAgCisjZGVmaW5lIEVJTyA1ICAKKyNkZWZpbmUgRU5YSU8gNiAgCisjZGVmaW5lIEUyQklHIDcgIAorI2RlZmluZSBFTk9FWEVDIDggIAorI2RlZmluZSBFQkFERiA5ICAKKyNkZWZpbmUgRUNISUxEIDEwICAKKyNkZWZpbmUgRUFHQUlOIDExICAKKyNkZWZpbmUgRU5PTUVNIDEyICAKKyNkZWZpbmUgRUFDQ0VTIDEzICAKKyNkZWZpbmUgRUZBVUxUIDE0ICAKKyNkZWZpbmUgRU5PVEJMSyAxNSAgCisjZGVmaW5lIEVCVVNZIDE2ICAKKyNkZWZpbmUgRUVYSVNUIDE3ICAKKyNkZWZpbmUgRVhERVYgMTggIAorI2RlZmluZSBFTk9ERVYgMTkgIAorI2RlZmluZSBFTk9URElSIDIwICAKKyNkZWZpbmUgRUlTRElSIDIxICAKKyNkZWZpbmUgRUlOVkFMIDIyICAKKyNkZWZpbmUgRU5GSUxFIDIzICAKKyNkZWZpbmUgRU1GSUxFIDI0ICAKKyNkZWZpbmUgRU5PVFRZIDI1ICAKKyNkZWZpbmUgRVRYVEJTWSAyNiAgCisjZGVmaW5lIEVGQklHIDI3ICAKKyNkZWZpbmUgRU5PU1BDIDI4ICAKKyNkZWZpbmUgRVNQSVBFIDI5ICAKKyNkZWZpbmUgRVJPRlMgMzAgIAorI2RlZmluZSBFTUxJTksgMzEgIAorI2RlZmluZSBFUElQRSAzMiAgCisjZGVmaW5lIEVET00gMzMgIAorI2RlZmluZSBFUkFOR0UgMzQgIAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9lcnJuby5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2Vycm5vLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFkZDAwZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9lcnJuby5oCkBAIC0wLDAgKzEsMTE5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01fR0VORVJJQ19FUlJOT19ICisjZGVmaW5lIF9BU01fR0VORVJJQ19FUlJOT19ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9lcnJuby1iYXNlLmg+CisKKyNkZWZpbmUgRURFQURMSyAzNSAgCisjZGVmaW5lIEVOQU1FVE9PTE9ORyAzNiAgCisjZGVmaW5lIEVOT0xDSyAzNyAgCisjZGVmaW5lIEVOT1NZUyAzOCAgCisjZGVmaW5lIEVOT1RFTVBUWSAzOSAgCisjZGVmaW5lIEVMT09QIDQwICAKKyNkZWZpbmUgRVdPVUxEQkxPQ0sgRUFHQUlOICAKKyNkZWZpbmUgRU5PTVNHIDQyICAKKyNkZWZpbmUgRUlEUk0gNDMgIAorI2RlZmluZSBFQ0hSTkcgNDQgIAorI2RlZmluZSBFTDJOU1lOQyA0NSAgCisjZGVmaW5lIEVMM0hMVCA0NiAgCisjZGVmaW5lIEVMM1JTVCA0NyAgCisjZGVmaW5lIEVMTlJORyA0OCAgCisjZGVmaW5lIEVVTkFUQ0ggNDkgIAorI2RlZmluZSBFTk9DU0kgNTAgIAorI2RlZmluZSBFTDJITFQgNTEgIAorI2RlZmluZSBFQkFERSA1MiAgCisjZGVmaW5lIEVCQURSIDUzICAKKyNkZWZpbmUgRVhGVUxMIDU0ICAKKyNkZWZpbmUgRU5PQU5PIDU1ICAKKyNkZWZpbmUgRUJBRFJRQyA1NiAgCisjZGVmaW5lIEVCQURTTFQgNTcgIAorCisjZGVmaW5lIEVERUFETE9DSyBFREVBRExLCisKKyNkZWZpbmUgRUJGT05UIDU5ICAKKyNkZWZpbmUgRU5PU1RSIDYwICAKKyNkZWZpbmUgRU5PREFUQSA2MSAgCisjZGVmaW5lIEVUSU1FIDYyICAKKyNkZWZpbmUgRU5PU1IgNjMgIAorI2RlZmluZSBFTk9ORVQgNjQgIAorI2RlZmluZSBFTk9QS0cgNjUgIAorI2RlZmluZSBFUkVNT1RFIDY2ICAKKyNkZWZpbmUgRU5PTElOSyA2NyAgCisjZGVmaW5lIEVBRFYgNjggIAorI2RlZmluZSBFU1JNTlQgNjkgIAorI2RlZmluZSBFQ09NTSA3MCAgCisjZGVmaW5lIEVQUk9UTyA3MSAgCisjZGVmaW5lIEVNVUxUSUhPUCA3MiAgCisjZGVmaW5lIEVET1RET1QgNzMgIAorI2RlZmluZSBFQkFETVNHIDc0ICAKKyNkZWZpbmUgRU9WRVJGTE9XIDc1ICAKKyNkZWZpbmUgRU5PVFVOSVEgNzYgIAorI2RlZmluZSBFQkFERkQgNzcgIAorI2RlZmluZSBFUkVNQ0hHIDc4ICAKKyNkZWZpbmUgRUxJQkFDQyA3OSAgCisjZGVmaW5lIEVMSUJCQUQgODAgIAorI2RlZmluZSBFTElCU0NOIDgxICAKKyNkZWZpbmUgRUxJQk1BWCA4MiAgCisjZGVmaW5lIEVMSUJFWEVDIDgzICAKKyNkZWZpbmUgRUlMU0VRIDg0ICAKKyNkZWZpbmUgRVJFU1RBUlQgODUgIAorI2RlZmluZSBFU1RSUElQRSA4NiAgCisjZGVmaW5lIEVVU0VSUyA4NyAgCisjZGVmaW5lIEVOT1RTT0NLIDg4ICAKKyNkZWZpbmUgRURFU1RBRERSUkVRIDg5ICAKKyNkZWZpbmUgRU1TR1NJWkUgOTAgIAorI2RlZmluZSBFUFJPVE9UWVBFIDkxICAKKyNkZWZpbmUgRU5PUFJPVE9PUFQgOTIgIAorI2RlZmluZSBFUFJPVE9OT1NVUFBPUlQgOTMgIAorI2RlZmluZSBFU09DS1ROT1NVUFBPUlQgOTQgIAorI2RlZmluZSBFT1BOT1RTVVBQIDk1ICAKKyNkZWZpbmUgRVBGTk9TVVBQT1JUIDk2ICAKKyNkZWZpbmUgRUFGTk9TVVBQT1JUIDk3ICAKKyNkZWZpbmUgRUFERFJJTlVTRSA5OCAgCisjZGVmaW5lIEVBRERSTk9UQVZBSUwgOTkgIAorI2RlZmluZSBFTkVURE9XTiAxMDAgIAorI2RlZmluZSBFTkVUVU5SRUFDSCAxMDEgIAorI2RlZmluZSBFTkVUUkVTRVQgMTAyICAKKyNkZWZpbmUgRUNPTk5BQk9SVEVEIDEwMyAgCisjZGVmaW5lIEVDT05OUkVTRVQgMTA0ICAKKyNkZWZpbmUgRU5PQlVGUyAxMDUgIAorI2RlZmluZSBFSVNDT05OIDEwNiAgCisjZGVmaW5lIEVOT1RDT05OIDEwNyAgCisjZGVmaW5lIEVTSFVURE9XTiAxMDggIAorI2RlZmluZSBFVE9PTUFOWVJFRlMgMTA5ICAKKyNkZWZpbmUgRVRJTUVET1VUIDExMCAgCisjZGVmaW5lIEVDT05OUkVGVVNFRCAxMTEgIAorI2RlZmluZSBFSE9TVERPV04gMTEyICAKKyNkZWZpbmUgRUhPU1RVTlJFQUNIIDExMyAgCisjZGVmaW5lIEVBTFJFQURZIDExNCAgCisjZGVmaW5lIEVJTlBST0dSRVNTIDExNSAgCisjZGVmaW5lIEVTVEFMRSAxMTYgIAorI2RlZmluZSBFVUNMRUFOIDExNyAgCisjZGVmaW5lIEVOT1ROQU0gMTE4ICAKKyNkZWZpbmUgRU5BVkFJTCAxMTkgIAorI2RlZmluZSBFSVNOQU0gMTIwICAKKyNkZWZpbmUgRVJFTU9URUlPIDEyMSAgCisjZGVmaW5lIEVEUVVPVCAxMjIgIAorCisjZGVmaW5lIEVOT01FRElVTSAxMjMgIAorI2RlZmluZSBFTUVESVVNVFlQRSAxMjQgIAorI2RlZmluZSBFQ0FOQ0VMRUQgMTI1ICAKKyNkZWZpbmUgRU5PS0VZIDEyNiAgCisjZGVmaW5lIEVLRVlFWFBJUkVEIDEyNyAgCisjZGVmaW5lIEVLRVlSRVZPS0VEIDEyOCAgCisjZGVmaW5lIEVLRVlSRUpFQ1RFRCAxMjkgIAorCisjZGVmaW5lIEVPV05FUkRFQUQgMTMwICAKKyNkZWZpbmUgRU5PVFJFQ09WRVJBQkxFIDEzMSAgCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2ZjbnRsLmggYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvZmNudGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTNiNTM2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2ZjbnRsLmgKQEAgLTAsMCArMSwxNDggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FTTV9HRU5FUklDX0ZDTlRMX0gKKyNkZWZpbmUgX0FTTV9HRU5FUklDX0ZDTlRMX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNkZWZpbmUgT19BQ0NNT0RFIDAwMDAwMDAzCisjZGVmaW5lIE9fUkRPTkxZIDAwMDAwMDAwCisjZGVmaW5lIE9fV1JPTkxZIDAwMDAwMDAxCisjZGVmaW5lIE9fUkRXUiAwMDAwMDAwMgorI2lmbmRlZiBPX0NSRUFUCisjZGVmaW5lIE9fQ1JFQVQgMDAwMDAxMDAgIAorI2VuZGlmCisjaWZuZGVmIE9fRVhDTAorI2RlZmluZSBPX0VYQ0wgMDAwMDAyMDAgIAorI2VuZGlmCisjaWZuZGVmIE9fTk9DVFRZCisjZGVmaW5lIE9fTk9DVFRZIDAwMDAwNDAwICAKKyNlbmRpZgorI2lmbmRlZiBPX1RSVU5DCisjZGVmaW5lIE9fVFJVTkMgMDAwMDEwMDAgIAorI2VuZGlmCisjaWZuZGVmIE9fQVBQRU5ECisjZGVmaW5lIE9fQVBQRU5EIDAwMDAyMDAwCisjZW5kaWYKKyNpZm5kZWYgT19OT05CTE9DSworI2RlZmluZSBPX05PTkJMT0NLIDAwMDA0MDAwCisjZW5kaWYKKyNpZm5kZWYgT19TWU5DCisjZGVmaW5lIE9fU1lOQyAwMDAxMDAwMAorI2VuZGlmCisjaWZuZGVmIEZBU1lOQworI2RlZmluZSBGQVNZTkMgMDAwMjAwMDAgIAorI2VuZGlmCisjaWZuZGVmIE9fRElSRUNUCisjZGVmaW5lIE9fRElSRUNUIDAwMDQwMDAwICAKKyNlbmRpZgorI2lmbmRlZiBPX0xBUkdFRklMRQorI2RlZmluZSBPX0xBUkdFRklMRSAwMDEwMDAwMAorI2VuZGlmCisjaWZuZGVmIE9fRElSRUNUT1JZCisjZGVmaW5lIE9fRElSRUNUT1JZIDAwMjAwMDAwICAKKyNlbmRpZgorI2lmbmRlZiBPX05PRk9MTE9XCisjZGVmaW5lIE9fTk9GT0xMT1cgMDA0MDAwMDAgIAorI2VuZGlmCisjaWZuZGVmIE9fTk9BVElNRQorI2RlZmluZSBPX05PQVRJTUUgMDEwMDAwMDAKKyNlbmRpZgorI2lmbmRlZiBPX05ERUxBWQorI2RlZmluZSBPX05ERUxBWSBPX05PTkJMT0NLCisjZW5kaWYKKworI2RlZmluZSBGX0RVUEZEIDAgIAorI2RlZmluZSBGX0dFVEZEIDEgIAorI2RlZmluZSBGX1NFVEZEIDIgIAorI2RlZmluZSBGX0dFVEZMIDMgIAorI2RlZmluZSBGX1NFVEZMIDQgIAorI2lmbmRlZiBGX0dFVExLCisjZGVmaW5lIEZfR0VUTEsgNQorI2RlZmluZSBGX1NFVExLIDYKKyNkZWZpbmUgRl9TRVRMS1cgNworI2VuZGlmCisjaWZuZGVmIEZfU0VUT1dOCisjZGVmaW5lIEZfU0VUT1dOIDggIAorI2RlZmluZSBGX0dFVE9XTiA5ICAKKyNlbmRpZgorI2lmbmRlZiBGX1NFVFNJRworI2RlZmluZSBGX1NFVFNJRyAxMCAgCisjZGVmaW5lIEZfR0VUU0lHIDExICAKKyNlbmRpZgorCisjZGVmaW5lIEZEX0NMT0VYRUMgMSAgCisKKyNpZm5kZWYgRl9SRExDSworI2RlZmluZSBGX1JETENLIDAKKyNkZWZpbmUgRl9XUkxDSyAxCisjZGVmaW5lIEZfVU5MQ0sgMgorI2VuZGlmCisKKyNpZm5kZWYgRl9FWExDSworI2RlZmluZSBGX0VYTENLIDQgIAorI2RlZmluZSBGX1NITENLIDggIAorI2VuZGlmCisKKyNpZm5kZWYgRl9JTlBST0dSRVNTCisjZGVmaW5lIEZfSU5QUk9HUkVTUyAxNgorI2VuZGlmCisKKyNkZWZpbmUgTE9DS19TSCAxICAKKyNkZWZpbmUgTE9DS19FWCAyICAKKyNkZWZpbmUgTE9DS19OQiA0ICAKKyNkZWZpbmUgTE9DS19VTiA4ICAKKworI2RlZmluZSBMT0NLX01BTkQgMzIgIAorI2RlZmluZSBMT0NLX1JFQUQgNjQgIAorI2RlZmluZSBMT0NLX1dSSVRFIDEyOCAgCisjZGVmaW5lIExPQ0tfUlcgMTkyICAKKworI2RlZmluZSBGX0xJTlVYX1NQRUNJRklDX0JBU0UgMTAyNAorCisjaWZuZGVmIEhBVkVfQVJDSF9TVFJVQ1RfRkxPQ0sKKyNpZm5kZWYgX19BUkNIX0ZMT0NLX1BBRAorI2RlZmluZSBfX0FSQ0hfRkxPQ0tfUEFECisjZW5kaWYKKworc3RydWN0IGZsb2NrIHsKKyBzaG9ydCBsX3R5cGU7Cisgc2hvcnQgbF93aGVuY2U7Cisgb2ZmX3QgbF9zdGFydDsKKyBvZmZfdCBsX2xlbjsKKyBwaWRfdCBsX3BpZDsKKyBfX0FSQ0hfRkxPQ0tfUEFECit9OworI2VuZGlmCisKKyNpZm5kZWYgRl9HRVRMSzY0CisjZGVmaW5lIEZfR0VUTEs2NCAxMiAgCisjZGVmaW5lIEZfU0VUTEs2NCAxMworI2RlZmluZSBGX1NFVExLVzY0IDE0CisjZW5kaWYKKworI2lmbmRlZiBIQVZFX0FSQ0hfU1RSVUNUX0ZMT0NLNjQKKyNpZm5kZWYgX19BUkNIX0ZMT0NLNjRfUEFECisjZGVmaW5lIF9fQVJDSF9GTE9DSzY0X1BBRAorI2VuZGlmCisKK3N0cnVjdCBmbG9jazY0IHsKKyBzaG9ydCBsX3R5cGU7Cisgc2hvcnQgbF93aGVuY2U7CisgbG9mZl90IGxfc3RhcnQ7CisgbG9mZl90IGxfbGVuOworIHBpZF90IGxfcGlkOworIF9fQVJDSF9GTE9DSzY0X1BBRAorfTsKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9mdXRleC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2Z1dGV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVkM2FmZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9mdXRleC5oCkBAIC0wLDAgKzEsMTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FTTV9HRU5FUklDX0ZVVEVYX0gKKyNkZWZpbmUgX0FTTV9HRU5FUklDX0ZVVEVYX0gKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvaW9jdGwuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9pb2N0bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiYTJiOGUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvaW9jdGwuaApAQCAtMCwwICsxLDU4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01fR0VORVJJQ19JT0NUTF9ICisjZGVmaW5lIF9BU01fR0VORVJJQ19JT0NUTF9ICisKKyNkZWZpbmUgX0lPQ19OUkJJVFMgOAorI2RlZmluZSBfSU9DX1RZUEVCSVRTIDgKKyNkZWZpbmUgX0lPQ19TSVpFQklUUyAxNAorI2RlZmluZSBfSU9DX0RJUkJJVFMgMgorCisjZGVmaW5lIF9JT0NfTlJNQVNLICgoMSA8PCBfSU9DX05SQklUUyktMSkKKyNkZWZpbmUgX0lPQ19UWVBFTUFTSyAoKDEgPDwgX0lPQ19UWVBFQklUUyktMSkKKyNkZWZpbmUgX0lPQ19TSVpFTUFTSyAoKDEgPDwgX0lPQ19TSVpFQklUUyktMSkKKyNkZWZpbmUgX0lPQ19ESVJNQVNLICgoMSA8PCBfSU9DX0RJUkJJVFMpLTEpCisKKyNkZWZpbmUgX0lPQ19OUlNISUZUIDAKKyNkZWZpbmUgX0lPQ19UWVBFU0hJRlQgKF9JT0NfTlJTSElGVCtfSU9DX05SQklUUykKKyNkZWZpbmUgX0lPQ19TSVpFU0hJRlQgKF9JT0NfVFlQRVNISUZUK19JT0NfVFlQRUJJVFMpCisjZGVmaW5lIF9JT0NfRElSU0hJRlQgKF9JT0NfU0laRVNISUZUK19JT0NfU0laRUJJVFMpCisKKyNkZWZpbmUgX0lPQ19OT05FIDBVCisjZGVmaW5lIF9JT0NfV1JJVEUgMVUKKyNkZWZpbmUgX0lPQ19SRUFEIDJVCisKKyNkZWZpbmUgX0lPQyhkaXIsdHlwZSxucixzaXplKSAgICgoKGRpcikgPDwgX0lPQ19ESVJTSElGVCkgfCAgICgodHlwZSkgPDwgX0lPQ19UWVBFU0hJRlQpIHwgICAoKG5yKSA8PCBfSU9DX05SU0hJRlQpIHwgICAoKHNpemUpIDw8IF9JT0NfU0laRVNISUZUKSkKKworZXh0ZXJuIHVuc2lnbmVkIGludCBfX2ludmFsaWRfc2l6ZV9hcmd1bWVudF9mb3JfSU9DOworI2RlZmluZSBfSU9DX1RZUEVDSEVDSyh0KSAgICgoc2l6ZW9mKHQpID09IHNpemVvZih0WzFdKSAmJiAgIHNpemVvZih0KSA8ICgxIDw8IF9JT0NfU0laRUJJVFMpKSA/ICAgc2l6ZW9mKHQpIDogX19pbnZhbGlkX3NpemVfYXJndW1lbnRfZm9yX0lPQykKKworI2RlZmluZSBfSU8odHlwZSxucikgX0lPQyhfSU9DX05PTkUsKHR5cGUpLChuciksMCkKKyNkZWZpbmUgX0lPUih0eXBlLG5yLHNpemUpIF9JT0MoX0lPQ19SRUFELCh0eXBlKSwobnIpLChfSU9DX1RZUEVDSEVDSyhzaXplKSkpCisjZGVmaW5lIF9JT1codHlwZSxucixzaXplKSBfSU9DKF9JT0NfV1JJVEUsKHR5cGUpLChuciksKF9JT0NfVFlQRUNIRUNLKHNpemUpKSkKKyNkZWZpbmUgX0lPV1IodHlwZSxucixzaXplKSBfSU9DKF9JT0NfUkVBRHxfSU9DX1dSSVRFLCh0eXBlKSwobnIpLChfSU9DX1RZUEVDSEVDSyhzaXplKSkpCisjZGVmaW5lIF9JT1JfQkFEKHR5cGUsbnIsc2l6ZSkgX0lPQyhfSU9DX1JFQUQsKHR5cGUpLChuciksc2l6ZW9mKHNpemUpKQorI2RlZmluZSBfSU9XX0JBRCh0eXBlLG5yLHNpemUpIF9JT0MoX0lPQ19XUklURSwodHlwZSksKG5yKSxzaXplb2Yoc2l6ZSkpCisjZGVmaW5lIF9JT1dSX0JBRCh0eXBlLG5yLHNpemUpIF9JT0MoX0lPQ19SRUFEfF9JT0NfV1JJVEUsKHR5cGUpLChuciksc2l6ZW9mKHNpemUpKQorCisjZGVmaW5lIF9JT0NfRElSKG5yKSAoKChucikgPj4gX0lPQ19ESVJTSElGVCkgJiBfSU9DX0RJUk1BU0spCisjZGVmaW5lIF9JT0NfVFlQRShucikgKCgobnIpID4+IF9JT0NfVFlQRVNISUZUKSAmIF9JT0NfVFlQRU1BU0spCisjZGVmaW5lIF9JT0NfTlIobnIpICgoKG5yKSA+PiBfSU9DX05SU0hJRlQpICYgX0lPQ19OUk1BU0spCisjZGVmaW5lIF9JT0NfU0laRShucikgKCgobnIpID4+IF9JT0NfU0laRVNISUZUKSAmIF9JT0NfU0laRU1BU0spCisKKyNkZWZpbmUgSU9DX0lOIChfSU9DX1dSSVRFIDw8IF9JT0NfRElSU0hJRlQpCisjZGVmaW5lIElPQ19PVVQgKF9JT0NfUkVBRCA8PCBfSU9DX0RJUlNISUZUKQorI2RlZmluZSBJT0NfSU5PVVQgKChfSU9DX1dSSVRFfF9JT0NfUkVBRCkgPDwgX0lPQ19ESVJTSElGVCkKKyNkZWZpbmUgSU9DU0laRV9NQVNLIChfSU9DX1NJWkVNQVNLIDw8IF9JT0NfU0laRVNISUZUKQorI2RlZmluZSBJT0NTSVpFX1NISUZUIChfSU9DX1NJWkVTSElGVCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvaXBjLmggYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvaXBjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc2NTdhNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9pcGMuaApAQCAtMCwwICsxLDM3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01fR0VORVJJQ19JUENfSAorI2RlZmluZSBfQVNNX0dFTkVSSUNfSVBDX0gKKworc3RydWN0IGlwY19rbHVkZ2UgeworIHN0cnVjdCBtc2didWYgX191c2VyICptc2dwOworIGxvbmcgbXNndHlwOworfTsKKworI2RlZmluZSBTRU1PUCAxCisjZGVmaW5lIFNFTUdFVCAyCisjZGVmaW5lIFNFTUNUTCAzCisjZGVmaW5lIFNFTVRJTUVET1AgNAorI2RlZmluZSBNU0dTTkQgMTEKKyNkZWZpbmUgTVNHUkNWIDEyCisjZGVmaW5lIE1TR0dFVCAxMworI2RlZmluZSBNU0dDVEwgMTQKKyNkZWZpbmUgU0hNQVQgMjEKKyNkZWZpbmUgU0hNRFQgMjIKKyNkZWZpbmUgU0hNR0VUIDIzCisjZGVmaW5lIFNITUNUTCAyNAorCisjZGVmaW5lIERJUEMgMjUKKworI2RlZmluZSBJUENDQUxMKHZlcnNpb24sb3ApICgodmVyc2lvbik8PDE2IHwgKG9wKSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvbG9jYWwuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9sb2NhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhZTBkNTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvbG9jYWwuaApAQCAtMCwwICsxLDUxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01fR0VORVJJQ19MT0NBTF9ICisjZGVmaW5lIF9BU01fR0VORVJJQ19MT0NBTF9ICisKKyNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCit0eXBlZGVmIHN0cnVjdAoreworIGF0b21pY19sb25nX3QgYTsKK30gbG9jYWxfdDsKKworI2RlZmluZSBMT0NBTF9JTklUKGkpIHsgQVRPTUlDX0xPTkdfSU5JVChpKSB9CisKKyNkZWZpbmUgbG9jYWxfcmVhZChsKSBhdG9taWNfbG9uZ19yZWFkKCYobCktPmEpCisjZGVmaW5lIGxvY2FsX3NldChsLGkpIGF0b21pY19sb25nX3NldCgoJihsKS0+YSksKGkpKQorI2RlZmluZSBsb2NhbF9pbmMobCkgYXRvbWljX2xvbmdfaW5jKCYobCktPmEpCisjZGVmaW5lIGxvY2FsX2RlYyhsKSBhdG9taWNfbG9uZ19kZWMoJihsKS0+YSkKKyNkZWZpbmUgbG9jYWxfYWRkKGksbCkgYXRvbWljX2xvbmdfYWRkKChpKSwoJihsKS0+YSkpCisjZGVmaW5lIGxvY2FsX3N1YihpLGwpIGF0b21pY19sb25nX3N1YigoaSksKCYobCktPmEpKQorCisjZGVmaW5lIF9fbG9jYWxfaW5jKGwpIGxvY2FsX3NldCgobCksIGxvY2FsX3JlYWQobCkgKyAxKQorI2RlZmluZSBfX2xvY2FsX2RlYyhsKSBsb2NhbF9zZXQoKGwpLCBsb2NhbF9yZWFkKGwpIC0gMSkKKyNkZWZpbmUgX19sb2NhbF9hZGQoaSxsKSBsb2NhbF9zZXQoKGwpLCBsb2NhbF9yZWFkKGwpICsgKGkpKQorI2RlZmluZSBfX2xvY2FsX3N1YihpLGwpIGxvY2FsX3NldCgobCksIGxvY2FsX3JlYWQobCkgLSAoaSkpCisKKyNkZWZpbmUgY3B1X2xvY2FsX3JlYWQodikgbG9jYWxfcmVhZCgmX19nZXRfY3B1X3Zhcih2KSkKKyNkZWZpbmUgY3B1X2xvY2FsX3NldCh2LCBpKSBsb2NhbF9zZXQoJl9fZ2V0X2NwdV92YXIodiksIChpKSkKKyNkZWZpbmUgY3B1X2xvY2FsX2luYyh2KSBsb2NhbF9pbmMoJl9fZ2V0X2NwdV92YXIodikpCisjZGVmaW5lIGNwdV9sb2NhbF9kZWModikgbG9jYWxfZGVjKCZfX2dldF9jcHVfdmFyKHYpKQorI2RlZmluZSBjcHVfbG9jYWxfYWRkKGksIHYpIGxvY2FsX2FkZCgoaSksICZfX2dldF9jcHVfdmFyKHYpKQorI2RlZmluZSBjcHVfbG9jYWxfc3ViKGksIHYpIGxvY2FsX3N1YigoaSksICZfX2dldF9jcHVfdmFyKHYpKQorCisjZGVmaW5lIF9fY3B1X2xvY2FsX2luYyh2KSBfX2xvY2FsX2luYygmX19nZXRfY3B1X3Zhcih2KSkKKyNkZWZpbmUgX19jcHVfbG9jYWxfZGVjKHYpIF9fbG9jYWxfZGVjKCZfX2dldF9jcHVfdmFyKHYpKQorI2RlZmluZSBfX2NwdV9sb2NhbF9hZGQoaSwgdikgX19sb2NhbF9hZGQoKGkpLCAmX19nZXRfY3B1X3Zhcih2KSkKKyNkZWZpbmUgX19jcHVfbG9jYWxfc3ViKGksIHYpIF9fbG9jYWxfc3ViKChpKSwgJl9fZ2V0X2NwdV92YXIodikpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL21lbW9yeV9tb2RlbC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL21lbW9yeV9tb2RlbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNzYwMmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvbWVtb3J5X21vZGVsLmgKQEAgLTAsMCArMSwxNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FTTV9NRU1PUllfTU9ERUxfSAorI2RlZmluZSBfX0FTTV9NRU1PUllfTU9ERUxfSAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9tbWFuLmggYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvbW1hbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4ZDI3ODMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvbW1hbi5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FTTV9HRU5FUklDX01NQU5fSAorI2RlZmluZSBfQVNNX0dFTkVSSUNfTU1BTl9ICisKKyNkZWZpbmUgUFJPVF9SRUFEIDB4MSAgCisjZGVmaW5lIFBST1RfV1JJVEUgMHgyICAKKyNkZWZpbmUgUFJPVF9FWEVDIDB4NCAgCisjZGVmaW5lIFBST1RfU0VNIDB4OCAgCisjZGVmaW5lIFBST1RfTk9ORSAweDAgIAorI2RlZmluZSBQUk9UX0dST1dTRE9XTiAweDAxMDAwMDAwICAKKyNkZWZpbmUgUFJPVF9HUk9XU1VQIDB4MDIwMDAwMDAgIAorCisjZGVmaW5lIE1BUF9TSEFSRUQgMHgwMSAgCisjZGVmaW5lIE1BUF9QUklWQVRFIDB4MDIgIAorI2RlZmluZSBNQVBfVFlQRSAweDBmICAKKyNkZWZpbmUgTUFQX0ZJWEVEIDB4MTAgIAorI2RlZmluZSBNQVBfQU5PTllNT1VTIDB4MjAgIAorCisjZGVmaW5lIE1TX0FTWU5DIDEgIAorI2RlZmluZSBNU19JTlZBTElEQVRFIDIgIAorI2RlZmluZSBNU19TWU5DIDQgIAorCisjZGVmaW5lIE1BRFZfTk9STUFMIDAgIAorI2RlZmluZSBNQURWX1JBTkRPTSAxICAKKyNkZWZpbmUgTUFEVl9TRVFVRU5USUFMIDIgIAorI2RlZmluZSBNQURWX1dJTExORUVEIDMgIAorI2RlZmluZSBNQURWX0RPTlRORUVEIDQgIAorCisjZGVmaW5lIE1BRFZfUkVNT1ZFIDkgIAorI2RlZmluZSBNQURWX0RPTlRGT1JLIDEwICAKKyNkZWZpbmUgTUFEVl9ET0ZPUksgMTEgIAorCisjZGVmaW5lIE1BUF9BTk9OIE1BUF9BTk9OWU1PVVMKKyNkZWZpbmUgTUFQX0ZJTEUgMAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9tdXRleC14Y2hnLmggYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvbXV0ZXgteGNoZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzYTU1N2UKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvbXV0ZXgteGNoZy5oCkBAIC0wLDAgKzEsMTYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FTTV9HRU5FUklDX01VVEVYX1hDSEdfSAorI2RlZmluZSBfQVNNX0dFTkVSSUNfTVVURVhfWENIR19ICisKKyNkZWZpbmUgX19tdXRleF9zbG93cGF0aF9uZWVkc190b191bmxvY2soKSAwCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9wZXJjcHUuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9wZXJjcHUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDk4MzAwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL3BlcmNwdS5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FTTV9HRU5FUklDX1BFUkNQVV9IXworI2RlZmluZSBfQVNNX0dFTkVSSUNfUEVSQ1BVX0hfCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKworI2RlZmluZSBfX0dFTkVSSUNfUEVSX0NQVQorCisjZGVmaW5lIERFRklORV9QRVJfQ1BVKHR5cGUsIG5hbWUpICAgX190eXBlb2ZfXyh0eXBlKSBwZXJfY3B1X18jI25hbWUKKworI2RlZmluZSBwZXJfY3B1KHZhciwgY3B1KSAoKigodm9pZCkoY3B1KSwgJnBlcl9jcHVfXyMjdmFyKSkKKyNkZWZpbmUgX19nZXRfY3B1X3Zhcih2YXIpIHBlcl9jcHVfXyMjdmFyCisjZGVmaW5lIF9fcmF3X2dldF9jcHVfdmFyKHZhcikgcGVyX2NwdV9fIyN2YXIKKworI2RlZmluZSBERUNMQVJFX1BFUl9DUFUodHlwZSwgbmFtZSkgZXh0ZXJuIF9fdHlwZW9mX18odHlwZSkgcGVyX2NwdV9fIyNuYW1lCisKKyNkZWZpbmUgRVhQT1JUX1BFUl9DUFVfU1lNQk9MKHZhcikgRVhQT1JUX1NZTUJPTChwZXJfY3B1X18jI3ZhcikKKyNkZWZpbmUgRVhQT1JUX1BFUl9DUFVfU1lNQk9MX0dQTCh2YXIpIEVYUE9SVF9TWU1CT0xfR1BMKHBlcl9jcHVfXyMjdmFyKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9wZ3RhYmxlLW5vcHVkLmggYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvcGd0YWJsZS1ub3B1ZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4NWY4MTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvcGd0YWJsZS1ub3B1ZC5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX1BHVEFCTEVfTk9QVURfSAorI2RlZmluZSBfUEdUQUJMRV9OT1BVRF9ICisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNkZWZpbmUgX19QQUdFVEFCTEVfUFVEX0ZPTERFRAorCit0eXBlZGVmIHN0cnVjdCB7IHBnZF90IHBnZDsgfSBwdWRfdDsKKworI2RlZmluZSBQVURfU0hJRlQgUEdESVJfU0hJRlQKKyNkZWZpbmUgUFRSU19QRVJfUFVEIDEKKyNkZWZpbmUgUFVEX1NJWkUgKDFVTCA8PCBQVURfU0hJRlQpCisjZGVmaW5lIFBVRF9NQVNLICh+KFBVRF9TSVpFLTEpKQorCisjZGVmaW5lIHB1ZF9FUlJPUihwdWQpIChwZ2RfRVJST1IoKHB1ZCkucGdkKSkKKyNkZWZpbmUgcGdkX3BvcHVsYXRlKG1tLCBwZ2QsIHB1ZCkgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBzZXRfcGdkKHBnZHB0ciwgcGdkdmFsKSBzZXRfcHVkKChwdWRfdCAqKShwZ2RwdHIpLCAocHVkX3QpIHsgcGdkdmFsIH0pCisjZGVmaW5lIHB1ZF92YWwoeCkgKHBnZF92YWwoKHgpLnBnZCkpCisjZGVmaW5lIF9fcHVkKHgpICgocHVkX3QpIHsgX19wZ2QoeCkgfSApCisjZGVmaW5lIHBnZF9wYWdlKHBnZCkgKHB1ZF9wYWdlKChwdWRfdCl7IHBnZCB9KSkKKyNkZWZpbmUgcGdkX3BhZ2Vfa2VybmVsKHBnZCkgKHB1ZF9wYWdlX2tlcm5lbCgocHVkX3QpeyBwZ2QgfSkpCisjZGVmaW5lIHB1ZF9hbGxvY19vbmUobW0sIGFkZHJlc3MpIE5VTEwKKyNkZWZpbmUgcHVkX2ZyZWUoeCkgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBfX3B1ZF9mcmVlX3RsYih0bGIsIHgpIGRvIHsgfSB3aGlsZSAoMCkKKyN1bmRlZiBwdWRfYWRkcl9lbmQKKyNkZWZpbmUgcHVkX2FkZHJfZW5kKGFkZHIsIGVuZCkgKGVuZCkKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvcGd0YWJsZS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL3BndGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjFjZGJhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL3BndGFibGUuaApAQCAtMCwwICsxLDk1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01fR0VORVJJQ19QR1RBQkxFX0gKKyNkZWZpbmUgX0FTTV9HRU5FUklDX1BHVEFCTEVfSAorCisjaWZuZGVmIF9fSEFWRV9BUkNIX1BURVBfRVNUQUJMSVNICisKKyNpZm5kZWYgX19IQVZFX0FSQ0hfU0VUX1BURV9BVE9NSUMKKyNkZWZpbmUgcHRlcF9lc3RhYmxpc2goX192bWEsIF9fYWRkcmVzcywgX19wdGVwLCBfX2VudHJ5KSAgZG8geyAgIHNldF9wdGVfYXQoKF9fdm1hKS0+dm1fbW0sIChfX2FkZHJlc3MpLCBfX3B0ZXAsIF9fZW50cnkpOyAgIGZsdXNoX3RsYl9wYWdlKF9fdm1hLCBfX2FkZHJlc3MpOyAgfSB3aGlsZSAoMCkKKyNlbHNlCisjZGVmaW5lIHB0ZXBfZXN0YWJsaXNoKF9fdm1hLCBfX2FkZHJlc3MsIF9fcHRlcCwgX19lbnRyeSkgIGRvIHsgICBzZXRfcHRlX2F0b21pYyhfX3B0ZXAsIF9fZW50cnkpOyAgIGZsdXNoX3RsYl9wYWdlKF9fdm1hLCBfX2FkZHJlc3MpOyAgfSB3aGlsZSAoMCkKKyNlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgX19IQVZFX0FSQ0hfUFRFUF9TRVRfQUNDRVNTX0ZMQUdTCisKKyNkZWZpbmUgcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKF9fdm1hLCBfX2FkZHJlc3MsIF9fcHRlcCwgX19lbnRyeSwgX19kaXJ0eSkgIGRvIHsgICBzZXRfcHRlX2F0KChfX3ZtYSktPnZtX21tLCAoX19hZGRyZXNzKSwgX19wdGVwLCBfX2VudHJ5KTsgICBmbHVzaF90bGJfcGFnZShfX3ZtYSwgX19hZGRyZXNzKTsgIH0gd2hpbGUgKDApCisjZW5kaWYKKworI2lmbmRlZiBfX0hBVkVfQVJDSF9QVEVQX1RFU1RfQU5EX0NMRUFSX1lPVU5HCisjZGVmaW5lIHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoX192bWEsIF9fYWRkcmVzcywgX19wdGVwKSAgKHsgICBwdGVfdCBfX3B0ZSA9ICooX19wdGVwKTsgICBpbnQgciA9IDE7ICAgaWYgKCFwdGVfeW91bmcoX19wdGUpKSAgIHIgPSAwOyAgIGVsc2UgICBzZXRfcHRlX2F0KChfX3ZtYSktPnZtX21tLCAoX19hZGRyZXNzKSwgICAoX19wdGVwKSwgcHRlX21rb2xkKF9fcHRlKSk7ICAgcjsgIH0pCisjZW5kaWYKKworI2lmbmRlZiBfX0hBVkVfQVJDSF9QVEVQX0NMRUFSX1lPVU5HX0ZMVVNICisjZGVmaW5lIHB0ZXBfY2xlYXJfZmx1c2hfeW91bmcoX192bWEsIF9fYWRkcmVzcywgX19wdGVwKSAgKHsgICBpbnQgX195b3VuZzsgICBfX3lvdW5nID0gcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZyhfX3ZtYSwgX19hZGRyZXNzLCBfX3B0ZXApOyAgIGlmIChfX3lvdW5nKSAgIGZsdXNoX3RsYl9wYWdlKF9fdm1hLCBfX2FkZHJlc3MpOyAgIF9feW91bmc7ICB9KQorI2VuZGlmCisKKyNpZm5kZWYgX19IQVZFX0FSQ0hfUFRFUF9URVNUX0FORF9DTEVBUl9ESVJUWQorI2RlZmluZSBwdGVwX3Rlc3RfYW5kX2NsZWFyX2RpcnR5KF9fdm1hLCBfX2FkZHJlc3MsIF9fcHRlcCkgICh7ICAgcHRlX3QgX19wdGUgPSAqX19wdGVwOyAgIGludCByID0gMTsgICBpZiAoIXB0ZV9kaXJ0eShfX3B0ZSkpICAgciA9IDA7ICAgZWxzZSAgIHNldF9wdGVfYXQoKF9fdm1hKS0+dm1fbW0sIChfX2FkZHJlc3MpLCAoX19wdGVwKSwgICBwdGVfbWtjbGVhbihfX3B0ZSkpOyAgIHI7ICB9KQorI2VuZGlmCisKKyNpZm5kZWYgX19IQVZFX0FSQ0hfUFRFUF9DTEVBUl9ESVJUWV9GTFVTSAorI2RlZmluZSBwdGVwX2NsZWFyX2ZsdXNoX2RpcnR5KF9fdm1hLCBfX2FkZHJlc3MsIF9fcHRlcCkgICh7ICAgaW50IF9fZGlydHk7ICAgX19kaXJ0eSA9IHB0ZXBfdGVzdF9hbmRfY2xlYXJfZGlydHkoX192bWEsIF9fYWRkcmVzcywgX19wdGVwKTsgICBpZiAoX19kaXJ0eSkgICBmbHVzaF90bGJfcGFnZShfX3ZtYSwgX19hZGRyZXNzKTsgICBfX2RpcnR5OyAgfSkKKyNlbmRpZgorCisjaWZuZGVmIF9fSEFWRV9BUkNIX1BURVBfR0VUX0FORF9DTEVBUgorI2RlZmluZSBwdGVwX2dldF9hbmRfY2xlYXIoX19tbSwgX19hZGRyZXNzLCBfX3B0ZXApICAoeyAgIHB0ZV90IF9fcHRlID0gKihfX3B0ZXApOyAgIHB0ZV9jbGVhcigoX19tbSksIChfX2FkZHJlc3MpLCAoX19wdGVwKSk7ICAgX19wdGU7ICB9KQorI2VuZGlmCisKKyNpZm5kZWYgX19IQVZFX0FSQ0hfUFRFUF9HRVRfQU5EX0NMRUFSX0ZVTEwKKyNkZWZpbmUgcHRlcF9nZXRfYW5kX2NsZWFyX2Z1bGwoX19tbSwgX19hZGRyZXNzLCBfX3B0ZXAsIF9fZnVsbCkgICh7ICAgcHRlX3QgX19wdGU7ICAgX19wdGUgPSBwdGVwX2dldF9hbmRfY2xlYXIoKF9fbW0pLCAoX19hZGRyZXNzKSwgKF9fcHRlcCkpOyAgIF9fcHRlOyAgfSkKKyNlbmRpZgorCisjaWZuZGVmIF9fSEFWRV9BUkNIX1BURV9DTEVBUl9GVUxMCisjZGVmaW5lIHB0ZV9jbGVhcl9mdWxsKF9fbW0sIF9fYWRkcmVzcywgX19wdGVwLCBfX2Z1bGwpICBkbyB7ICAgcHRlX2NsZWFyKChfX21tKSwgKF9fYWRkcmVzcyksIChfX3B0ZXApKTsgIH0gd2hpbGUgKDApCisjZW5kaWYKKworI2lmbmRlZiBfX0hBVkVfQVJDSF9QVEVQX0NMRUFSX0ZMVVNICisjZGVmaW5lIHB0ZXBfY2xlYXJfZmx1c2goX192bWEsIF9fYWRkcmVzcywgX19wdGVwKSAgKHsgICBwdGVfdCBfX3B0ZTsgICBfX3B0ZSA9IHB0ZXBfZ2V0X2FuZF9jbGVhcigoX192bWEpLT52bV9tbSwgX19hZGRyZXNzLCBfX3B0ZXApOyAgIGZsdXNoX3RsYl9wYWdlKF9fdm1hLCBfX2FkZHJlc3MpOyAgIF9fcHRlOyAgfSkKKyNlbmRpZgorCisjaWZuZGVmIF9fSEFWRV9BUkNIX1BURVBfU0VUX1dSUFJPVEVDVAorc3RydWN0IG1tX3N0cnVjdDsKKyNlbmRpZgorI2lmbmRlZiBfX0hBVkVfQVJDSF9QVEVfU0FNRQorI2RlZmluZSBwdGVfc2FtZShBLEIpIChwdGVfdmFsKEEpID09IHB0ZV92YWwoQikpCisjZW5kaWYKKyNpZm5kZWYgX19IQVZFX0FSQ0hfUEFHRV9URVNUX0FORF9DTEVBUl9ESVJUWQorI2RlZmluZSBwYWdlX3Rlc3RfYW5kX2NsZWFyX2RpcnR5KHBhZ2UpICgwKQorI2RlZmluZSBwdGVfbWF5YmVfZGlydHkocHRlKSBwdGVfZGlydHkocHRlKQorI2Vsc2UKKyNkZWZpbmUgcHRlX21heWJlX2RpcnR5KHB0ZSkgKDEpCisjZW5kaWYKKyNpZm5kZWYgX19IQVZFX0FSQ0hfUEFHRV9URVNUX0FORF9DTEVBUl9ZT1VORworI2RlZmluZSBwYWdlX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHBhZ2UpICgwKQorI2VuZGlmCisjaWZuZGVmIF9fSEFWRV9BUkNIX1BHRF9PRkZTRVRfR0FURQorI2RlZmluZSBwZ2Rfb2Zmc2V0X2dhdGUobW0sIGFkZHIpIHBnZF9vZmZzZXQobW0sIGFkZHIpCisjZW5kaWYKKyNpZm5kZWYgX19IQVZFX0FSQ0hfTEFaWV9NTVVfUFJPVF9VUERBVEUKKyNkZWZpbmUgbGF6eV9tbXVfcHJvdF91cGRhdGUocHRlKSBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKyNpZm5kZWYgX19IQVZFX0FSQ0hfTU9WRV9QVEUKKyNkZWZpbmUgbW92ZV9wdGUocHRlLCBwcm90LCBvbGRfYWRkciwgbmV3X2FkZHIpIChwdGUpCisjZW5kaWYKKyNkZWZpbmUgcGdkX2FkZHJfZW5kKGFkZHIsIGVuZCkgICh7IHVuc2lnbmVkIGxvbmcgX19ib3VuZGFyeSA9ICgoYWRkcikgKyBQR0RJUl9TSVpFKSAmIFBHRElSX01BU0s7ICAgKF9fYm91bmRhcnkgLSAxIDwgKGVuZCkgLSAxKT8gX19ib3VuZGFyeTogKGVuZCk7ICB9KQorI2lmbmRlZiBwdWRfYWRkcl9lbmQKKyNkZWZpbmUgcHVkX2FkZHJfZW5kKGFkZHIsIGVuZCkgICh7IHVuc2lnbmVkIGxvbmcgX19ib3VuZGFyeSA9ICgoYWRkcikgKyBQVURfU0laRSkgJiBQVURfTUFTSzsgICAoX19ib3VuZGFyeSAtIDEgPCAoZW5kKSAtIDEpPyBfX2JvdW5kYXJ5OiAoZW5kKTsgIH0pCisjZW5kaWYKKyNpZm5kZWYgcG1kX2FkZHJfZW5kCisjZGVmaW5lIHBtZF9hZGRyX2VuZChhZGRyLCBlbmQpICAoeyB1bnNpZ25lZCBsb25nIF9fYm91bmRhcnkgPSAoKGFkZHIpICsgUE1EX1NJWkUpICYgUE1EX01BU0s7ICAgKF9fYm91bmRhcnkgLSAxIDwgKGVuZCkgLSAxKT8gX19ib3VuZGFyeTogKGVuZCk7ICB9KQorI2VuZGlmCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL3BvbGwuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9wb2xsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhjZDNkYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9wb2xsLmgKQEAgLTAsMCArMSw0NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FTTV9HRU5FUklDX1BPTExfSAorI2RlZmluZSBfX0FTTV9HRU5FUklDX1BPTExfSAorCisjZGVmaW5lIFBPTExJTiAweDAwMDEKKyNkZWZpbmUgUE9MTFBSSSAweDAwMDIKKyNkZWZpbmUgUE9MTE9VVCAweDAwMDQKKyNkZWZpbmUgUE9MTEVSUiAweDAwMDgKKyNkZWZpbmUgUE9MTEhVUCAweDAwMTAKKyNkZWZpbmUgUE9MTE5WQUwgMHgwMDIwCisKKyNkZWZpbmUgUE9MTFJETk9STSAweDAwNDAKKyNkZWZpbmUgUE9MTFJEQkFORCAweDAwODAKKyNpZm5kZWYgUE9MTFdSTk9STQorI2RlZmluZSBQT0xMV1JOT1JNIDB4MDEwMAorI2VuZGlmCisjaWZuZGVmIFBPTExXUkJBTkQKKyNkZWZpbmUgUE9MTFdSQkFORCAweDAyMDAKKyNlbmRpZgorI2lmbmRlZiBQT0xMTVNHCisjZGVmaW5lIFBPTExNU0cgMHgwNDAwCisjZW5kaWYKKyNpZm5kZWYgUE9MTFJFTU9WRQorI2RlZmluZSBQT0xMUkVNT1ZFIDB4MTAwMAorI2VuZGlmCisjaWZuZGVmIFBPTExSREhVUAorI2RlZmluZSBQT0xMUkRIVVAgMHgyMDAwCisjZW5kaWYKKworc3RydWN0IHBvbGxmZCB7CisgaW50IGZkOworIHNob3J0IGV2ZW50czsKKyBzaG9ydCByZXZlbnRzOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvcmVzb3VyY2UuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9yZXNvdXJjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3ZjdkZWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvcmVzb3VyY2UuaApAQCAtMCwwICsxLDU3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01fR0VORVJJQ19SRVNPVVJDRV9ICisjZGVmaW5lIF9BU01fR0VORVJJQ19SRVNPVVJDRV9ICisKKyNkZWZpbmUgUkxJTUlUX0NQVSAwICAKKyNkZWZpbmUgUkxJTUlUX0ZTSVpFIDEgIAorI2RlZmluZSBSTElNSVRfREFUQSAyICAKKyNkZWZpbmUgUkxJTUlUX1NUQUNLIDMgIAorI2RlZmluZSBSTElNSVRfQ09SRSA0ICAKKworI2lmbmRlZiBSTElNSVRfUlNTCisjZGVmaW5lIFJMSU1JVF9SU1MgNSAgCisjZW5kaWYKKworI2lmbmRlZiBSTElNSVRfTlBST0MKKyNkZWZpbmUgUkxJTUlUX05QUk9DIDYgIAorI2VuZGlmCisKKyNpZm5kZWYgUkxJTUlUX05PRklMRQorI2RlZmluZSBSTElNSVRfTk9GSUxFIDcgIAorI2VuZGlmCisKKyNpZm5kZWYgUkxJTUlUX01FTUxPQ0sKKyNkZWZpbmUgUkxJTUlUX01FTUxPQ0sgOCAgCisjZW5kaWYKKworI2lmbmRlZiBSTElNSVRfQVMKKyNkZWZpbmUgUkxJTUlUX0FTIDkgIAorI2VuZGlmCisKKyNkZWZpbmUgUkxJTUlUX0xPQ0tTIDEwICAKKyNkZWZpbmUgUkxJTUlUX1NJR1BFTkRJTkcgMTEgIAorI2RlZmluZSBSTElNSVRfTVNHUVVFVUUgMTIgIAorI2RlZmluZSBSTElNSVRfTklDRSAxMyAgCisjZGVmaW5lIFJMSU1JVF9SVFBSSU8gMTQgIAorCisjZGVmaW5lIFJMSU1fTkxJTUlUUyAxNQorCisjaWZuZGVmIFJMSU1fSU5GSU5JVFkKKyNkZWZpbmUgUkxJTV9JTkZJTklUWSAofjBVTCkKKyNlbmRpZgorCisjaWZuZGVmIF9TVEtfTElNX01BWAorI2RlZmluZSBfU1RLX0xJTV9NQVggUkxJTV9JTkZJTklUWQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL3NlY3Rpb25zLmggYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvc2VjdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWVhYTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL3NlY3Rpb25zLmgKQEAgLTAsMCArMSwxNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQVNNX0dFTkVSSUNfU0VDVElPTlNfSF8KKyNkZWZpbmUgX0FTTV9HRU5FUklDX1NFQ1RJT05TX0hfCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL3NpZ2luZm8uaCBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9zaWdpbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY3NDNhNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9zaWdpbmZvLmgKQEAgLTAsMCArMSwyMTMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FTTV9HRU5FUklDX1NJR0lORk9fSAorI2RlZmluZSBfQVNNX0dFTkVSSUNfU0lHSU5GT19ICisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3R5cGVkZWYgdW5pb24gc2lndmFsIHsKKyBpbnQgc2l2YWxfaW50OworIHZvaWQgX191c2VyICpzaXZhbF9wdHI7Cit9IHNpZ3ZhbF90OworCisjaWZuZGVmIF9fQVJDSF9TSV9QUkVBTUJMRV9TSVpFCisjZGVmaW5lIF9fQVJDSF9TSV9QUkVBTUJMRV9TSVpFICgzICogc2l6ZW9mKGludCkpCisjZW5kaWYKKworI2RlZmluZSBTSV9NQVhfU0laRSAxMjgKKyNpZm5kZWYgU0lfUEFEX1NJWkUKKyNkZWZpbmUgU0lfUEFEX1NJWkUgKChTSV9NQVhfU0laRSAtIF9fQVJDSF9TSV9QUkVBTUJMRV9TSVpFKSAvIHNpemVvZihpbnQpKQorI2VuZGlmCisKKyNpZm5kZWYgX19BUkNIX1NJX1VJRF9UCisjZGVmaW5lIF9fQVJDSF9TSV9VSURfVCB1aWRfdAorI2VuZGlmCisKKyNpZm5kZWYgX19BUkNIX1NJX0JBTkRfVAorI2RlZmluZSBfX0FSQ0hfU0lfQkFORF9UIGxvbmcKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfQVJDSF9TSUdJTkZPX1QKKwordHlwZWRlZiBzdHJ1Y3Qgc2lnaW5mbyB7CisgaW50IHNpX3NpZ25vOworIGludCBzaV9lcnJubzsKKyBpbnQgc2lfY29kZTsKKworIHVuaW9uIHsKKyBpbnQgX3BhZFtTSV9QQURfU0laRV07CisKKyBzdHJ1Y3QgeworIHBpZF90IF9waWQ7CisgX19BUkNIX1NJX1VJRF9UIF91aWQ7CisgfSBfa2lsbDsKKworIHN0cnVjdCB7CisgdGltZXJfdCBfdGlkOworIGludCBfb3ZlcnJ1bjsKKyBjaGFyIF9wYWRbc2l6ZW9mKCBfX0FSQ0hfU0lfVUlEX1QpIC0gc2l6ZW9mKGludCldOworIHNpZ3ZhbF90IF9zaWd2YWw7CisgaW50IF9zeXNfcHJpdmF0ZTsKKyB9IF90aW1lcjsKKworIHN0cnVjdCB7CisgcGlkX3QgX3BpZDsKKyBfX0FSQ0hfU0lfVUlEX1QgX3VpZDsKKyBzaWd2YWxfdCBfc2lndmFsOworIH0gX3J0OworCisgc3RydWN0IHsKKyBwaWRfdCBfcGlkOworIF9fQVJDSF9TSV9VSURfVCBfdWlkOworIGludCBfc3RhdHVzOworIGNsb2NrX3QgX3V0aW1lOworIGNsb2NrX3QgX3N0aW1lOworIH0gX3NpZ2NobGQ7CisKKyBzdHJ1Y3QgeworIHZvaWQgX191c2VyICpfYWRkcjsKKyNpZmRlZiBfX0FSQ0hfU0lfVFJBUE5PCisgaW50IF90cmFwbm87CisjZW5kaWYKKyB9IF9zaWdmYXVsdDsKKworIHN0cnVjdCB7CisgX19BUkNIX1NJX0JBTkRfVCBfYmFuZDsKKyBpbnQgX2ZkOworIH0gX3NpZ3BvbGw7CisgfSBfc2lmaWVsZHM7Cit9IHNpZ2luZm9fdDsKKworI2VuZGlmCisKKyNkZWZpbmUgc2lfcGlkIF9zaWZpZWxkcy5fa2lsbC5fcGlkCisjZGVmaW5lIHNpX3VpZCBfc2lmaWVsZHMuX2tpbGwuX3VpZAorI2RlZmluZSBzaV90aWQgX3NpZmllbGRzLl90aW1lci5fdGlkCisjZGVmaW5lIHNpX292ZXJydW4gX3NpZmllbGRzLl90aW1lci5fb3ZlcnJ1bgorI2RlZmluZSBzaV9zeXNfcHJpdmF0ZSBfc2lmaWVsZHMuX3RpbWVyLl9zeXNfcHJpdmF0ZQorI2RlZmluZSBzaV9zdGF0dXMgX3NpZmllbGRzLl9zaWdjaGxkLl9zdGF0dXMKKyNkZWZpbmUgc2lfdXRpbWUgX3NpZmllbGRzLl9zaWdjaGxkLl91dGltZQorI2RlZmluZSBzaV9zdGltZSBfc2lmaWVsZHMuX3NpZ2NobGQuX3N0aW1lCisjZGVmaW5lIHNpX3ZhbHVlIF9zaWZpZWxkcy5fcnQuX3NpZ3ZhbAorI2RlZmluZSBzaV9pbnQgX3NpZmllbGRzLl9ydC5fc2lndmFsLnNpdmFsX2ludAorI2RlZmluZSBzaV9wdHIgX3NpZmllbGRzLl9ydC5fc2lndmFsLnNpdmFsX3B0cgorI2RlZmluZSBzaV9hZGRyIF9zaWZpZWxkcy5fc2lnZmF1bHQuX2FkZHIKKyNpZmRlZiBfX0FSQ0hfU0lfVFJBUE5PCisjZGVmaW5lIHNpX3RyYXBubyBfc2lmaWVsZHMuX3NpZ2ZhdWx0Ll90cmFwbm8KKyNlbmRpZgorI2RlZmluZSBzaV9iYW5kIF9zaWZpZWxkcy5fc2lncG9sbC5fYmFuZAorI2RlZmluZSBzaV9mZCBfc2lmaWVsZHMuX3NpZ3BvbGwuX2ZkCisKKyNkZWZpbmUgX19TSV9LSUxMIDAKKyNkZWZpbmUgX19TSV9USU1FUiAwCisjZGVmaW5lIF9fU0lfUE9MTCAwCisjZGVmaW5lIF9fU0lfRkFVTFQgMAorI2RlZmluZSBfX1NJX0NITEQgMAorI2RlZmluZSBfX1NJX1JUIDAKKyNkZWZpbmUgX19TSV9NRVNHUSAwCisjZGVmaW5lIF9fU0lfQ09ERShULE4pIChOKQorCisjZGVmaW5lIFNJX1VTRVIgMCAgCisjZGVmaW5lIFNJX0tFUk5FTCAweDgwICAKKyNkZWZpbmUgU0lfUVVFVUUgLTEgIAorI2RlZmluZSBTSV9USU1FUiBfX1NJX0NPREUoX19TSV9USU1FUiwtMikgIAorI2RlZmluZSBTSV9NRVNHUSBfX1NJX0NPREUoX19TSV9NRVNHUSwtMykgIAorI2RlZmluZSBTSV9BU1lOQ0lPIC00ICAKKyNkZWZpbmUgU0lfU0lHSU8gLTUgIAorI2RlZmluZSBTSV9US0lMTCAtNiAgCisjZGVmaW5lIFNJX0RFVEhSRUFEIC03ICAKKworI2RlZmluZSBTSV9GUk9NVVNFUihzaXB0cikgKChzaXB0ciktPnNpX2NvZGUgPD0gMCkKKyNkZWZpbmUgU0lfRlJPTUtFUk5FTChzaXB0cikgKChzaXB0ciktPnNpX2NvZGUgPiAwKQorCisjZGVmaW5lIElMTF9JTExPUEMgKF9fU0lfRkFVTFR8MSkgIAorI2RlZmluZSBJTExfSUxMT1BOIChfX1NJX0ZBVUxUfDIpICAKKyNkZWZpbmUgSUxMX0lMTEFEUiAoX19TSV9GQVVMVHwzKSAgCisjZGVmaW5lIElMTF9JTExUUlAgKF9fU0lfRkFVTFR8NCkgIAorI2RlZmluZSBJTExfUFJWT1BDIChfX1NJX0ZBVUxUfDUpICAKKyNkZWZpbmUgSUxMX1BSVlJFRyAoX19TSV9GQVVMVHw2KSAgCisjZGVmaW5lIElMTF9DT1BST0MgKF9fU0lfRkFVTFR8NykgIAorI2RlZmluZSBJTExfQkFEU1RLIChfX1NJX0ZBVUxUfDgpICAKKyNkZWZpbmUgTlNJR0lMTCA4CisKKyNkZWZpbmUgRlBFX0lOVERJViAoX19TSV9GQVVMVHwxKSAgCisjZGVmaW5lIEZQRV9JTlRPVkYgKF9fU0lfRkFVTFR8MikgIAorI2RlZmluZSBGUEVfRkxURElWIChfX1NJX0ZBVUxUfDMpICAKKyNkZWZpbmUgRlBFX0ZMVE9WRiAoX19TSV9GQVVMVHw0KSAgCisjZGVmaW5lIEZQRV9GTFRVTkQgKF9fU0lfRkFVTFR8NSkgIAorI2RlZmluZSBGUEVfRkxUUkVTIChfX1NJX0ZBVUxUfDYpICAKKyNkZWZpbmUgRlBFX0ZMVElOViAoX19TSV9GQVVMVHw3KSAgCisjZGVmaW5lIEZQRV9GTFRTVUIgKF9fU0lfRkFVTFR8OCkgIAorI2RlZmluZSBOU0lHRlBFIDgKKworI2RlZmluZSBTRUdWX01BUEVSUiAoX19TSV9GQVVMVHwxKSAgCisjZGVmaW5lIFNFR1ZfQUNDRVJSIChfX1NJX0ZBVUxUfDIpICAKKyNkZWZpbmUgTlNJR1NFR1YgMgorCisjZGVmaW5lIEJVU19BRFJBTE4gKF9fU0lfRkFVTFR8MSkgIAorI2RlZmluZSBCVVNfQURSRVJSIChfX1NJX0ZBVUxUfDIpICAKKyNkZWZpbmUgQlVTX09CSkVSUiAoX19TSV9GQVVMVHwzKSAgCisjZGVmaW5lIE5TSUdCVVMgMworCisjZGVmaW5lIFRSQVBfQlJLUFQgKF9fU0lfRkFVTFR8MSkgIAorI2RlZmluZSBUUkFQX1RSQUNFIChfX1NJX0ZBVUxUfDIpICAKKyNkZWZpbmUgTlNJR1RSQVAgMgorCisjZGVmaW5lIENMRF9FWElURUQgKF9fU0lfQ0hMRHwxKSAgCisjZGVmaW5lIENMRF9LSUxMRUQgKF9fU0lfQ0hMRHwyKSAgCisjZGVmaW5lIENMRF9EVU1QRUQgKF9fU0lfQ0hMRHwzKSAgCisjZGVmaW5lIENMRF9UUkFQUEVEIChfX1NJX0NITER8NCkgIAorI2RlZmluZSBDTERfU1RPUFBFRCAoX19TSV9DSExEfDUpICAKKyNkZWZpbmUgQ0xEX0NPTlRJTlVFRCAoX19TSV9DSExEfDYpICAKKyNkZWZpbmUgTlNJR0NITEQgNgorCisjZGVmaW5lIFBPTExfSU4gKF9fU0lfUE9MTHwxKSAgCisjZGVmaW5lIFBPTExfT1VUIChfX1NJX1BPTEx8MikgIAorI2RlZmluZSBQT0xMX01TRyAoX19TSV9QT0xMfDMpICAKKyNkZWZpbmUgUE9MTF9FUlIgKF9fU0lfUE9MTHw0KSAgCisjZGVmaW5lIFBPTExfUFJJIChfX1NJX1BPTEx8NSkgIAorI2RlZmluZSBQT0xMX0hVUCAoX19TSV9QT0xMfDYpICAKKyNkZWZpbmUgTlNJR1BPTEwgNgorCisjZGVmaW5lIFNJR0VWX1NJR05BTCAwICAKKyNkZWZpbmUgU0lHRVZfTk9ORSAxICAKKyNkZWZpbmUgU0lHRVZfVEhSRUFEIDIgIAorI2RlZmluZSBTSUdFVl9USFJFQURfSUQgNCAgCisKKyNpZm5kZWYgX19BUkNIX1NJR0VWX1BSRUFNQkxFX1NJWkUKKyNkZWZpbmUgX19BUkNIX1NJR0VWX1BSRUFNQkxFX1NJWkUgKHNpemVvZihpbnQpICogMiArIHNpemVvZihzaWd2YWxfdCkpCisjZW5kaWYKKworI2RlZmluZSBTSUdFVl9NQVhfU0laRSA2NAorI2RlZmluZSBTSUdFVl9QQURfU0laRSAoKFNJR0VWX01BWF9TSVpFIC0gX19BUkNIX1NJR0VWX1BSRUFNQkxFX1NJWkUpICAgLyBzaXplb2YoaW50KSkKKwordHlwZWRlZiBzdHJ1Y3Qgc2lnZXZlbnQgeworIHNpZ3ZhbF90IHNpZ2V2X3ZhbHVlOworIGludCBzaWdldl9zaWdubzsKKyBpbnQgc2lnZXZfbm90aWZ5OworIHVuaW9uIHsKKyBpbnQgX3BhZFtTSUdFVl9QQURfU0laRV07CisgaW50IF90aWQ7CisKKyBzdHJ1Y3QgeworIHZvaWQgKCpfZnVuY3Rpb24pKHNpZ3ZhbF90KTsKKyB2b2lkICpfYXR0cmlidXRlOworIH0gX3NpZ2V2X3RocmVhZDsKKyB9IF9zaWdldl91bjsKK30gc2lnZXZlbnRfdDsKKworI2RlZmluZSBzaWdldl9ub3RpZnlfZnVuY3Rpb24gX3NpZ2V2X3VuLl9zaWdldl90aHJlYWQuX2Z1bmN0aW9uCisjZGVmaW5lIHNpZ2V2X25vdGlmeV9hdHRyaWJ1dGVzIF9zaWdldl91bi5fc2lnZXZfdGhyZWFkLl9hdHRyaWJ1dGUKKyNkZWZpbmUgc2lnZXZfbm90aWZ5X3RocmVhZF9pZCBfc2lnZXZfdW4uX3RpZAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9zaWduYWwuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9zaWduYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjZkOTljCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL3NpZ25hbC5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19BU01fR0VORVJJQ19TSUdOQUxfSAorI2RlZmluZSBfX0FTTV9HRU5FUklDX1NJR05BTF9ICisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorCisjaWZuZGVmIFNJR19CTE9DSworI2RlZmluZSBTSUdfQkxPQ0sgMCAgCisjZW5kaWYKKyNpZm5kZWYgU0lHX1VOQkxPQ0sKKyNkZWZpbmUgU0lHX1VOQkxPQ0sgMSAgCisjZW5kaWYKKyNpZm5kZWYgU0lHX1NFVE1BU0sKKyNkZWZpbmUgU0lHX1NFVE1BU0sgMiAgCisjZW5kaWYKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK3R5cGVkZWYgdm9pZCBfX3NpZ25hbGZuX3QoaW50KTsKK3R5cGVkZWYgX19zaWduYWxmbl90IF9fdXNlciAqX19zaWdoYW5kbGVyX3Q7CisKK3R5cGVkZWYgdm9pZCBfX3Jlc3RvcmVmbl90KHZvaWQpOwordHlwZWRlZiBfX3Jlc3RvcmVmbl90IF9fdXNlciAqX19zaWdyZXN0b3JlX3Q7CisKKyNkZWZpbmUgU0lHX0RGTCAoKF9fZm9yY2UgX19zaWdoYW5kbGVyX3QpMCkgIAorI2RlZmluZSBTSUdfSUdOICgoX19mb3JjZSBfX3NpZ2hhbmRsZXJfdCkxKSAgCisjZGVmaW5lIFNJR19FUlIgKChfX2ZvcmNlIF9fc2lnaGFuZGxlcl90KS0xKSAgCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvdGxiLmggYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvdGxiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGMxZTc5ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy90bGIuaApAQCAtMCwwICsxLDM3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01fR0VORVJJQ19fVExCX0gKKyNkZWZpbmUgX0FTTV9HRU5FUklDX19UTEJfSAorCisjaW5jbHVkZSA8bGludXgvc3dhcC5oPgorI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CisjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CisKKyNkZWZpbmUgRlJFRV9QVEVfTlIgMQorI2RlZmluZSB0bGJfZmFzdF9tb2RlKHRsYikgMQorCitzdHJ1Y3QgbW11X2dhdGhlciB7Cisgc3RydWN0IG1tX3N0cnVjdCAqbW07CisgdW5zaWduZWQgaW50IG5yOworIHVuc2lnbmVkIGludCBuZWVkX2ZsdXNoOworIHVuc2lnbmVkIGludCBmdWxsbW07Cisgc3RydWN0IHBhZ2UgKiBwYWdlc1tGUkVFX1BURV9OUl07Cit9OworCisjZGVmaW5lIHRsYl9yZW1vdmVfdGxiX2VudHJ5KHRsYiwgcHRlcCwgYWRkcmVzcykgICBkbyB7ICAgdGxiLT5uZWVkX2ZsdXNoID0gMTsgICBfX3RsYl9yZW1vdmVfdGxiX2VudHJ5KHRsYiwgcHRlcCwgYWRkcmVzcyk7ICAgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcHRlX2ZyZWVfdGxiKHRsYiwgcHRlcCkgICBkbyB7ICAgdGxiLT5uZWVkX2ZsdXNoID0gMTsgICBfX3B0ZV9mcmVlX3RsYih0bGIsIHB0ZXApOyAgIH0gd2hpbGUgKDApCisjaWZuZGVmIF9fQVJDSF9IQVNfNExFVkVMX0hBQ0sKKyNkZWZpbmUgcHVkX2ZyZWVfdGxiKHRsYiwgcHVkcCkgICBkbyB7ICAgdGxiLT5uZWVkX2ZsdXNoID0gMTsgICBfX3B1ZF9mcmVlX3RsYih0bGIsIHB1ZHApOyAgIH0gd2hpbGUgKDApCisjZW5kaWYKKyNkZWZpbmUgcG1kX2ZyZWVfdGxiKHRsYiwgcG1kcCkgICBkbyB7ICAgdGxiLT5uZWVkX2ZsdXNoID0gMTsgICBfX3BtZF9mcmVlX3RsYih0bGIsIHBtZHApOyAgIH0gd2hpbGUgKDApCisjZGVmaW5lIHRsYl9taWdyYXRlX2ZpbmlzaChtbSkgZG8ge30gd2hpbGUgKDApCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy90b3BvbG9neS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL3RvcG9sb2d5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg5YjFmMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy90b3BvbG9neS5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FTTV9HRU5FUklDX1RPUE9MT0dZX0gKKyNkZWZpbmUgX0FTTV9HRU5FUklDX1RPUE9MT0dZX0gKKworI2lmbmRlZiBjcHVfdG9fbm9kZQorI2RlZmluZSBjcHVfdG9fbm9kZShjcHUpICgwKQorI2VuZGlmCisjaWZuZGVmIHBhcmVudF9ub2RlCisjZGVmaW5lIHBhcmVudF9ub2RlKG5vZGUpICgwKQorI2VuZGlmCisjaWZuZGVmIG5vZGVfdG9fY3B1bWFzaworI2RlZmluZSBub2RlX3RvX2NwdW1hc2sobm9kZSkgKGNwdV9vbmxpbmVfbWFwKQorI2VuZGlmCisjaWZuZGVmIG5vZGVfdG9fZmlyc3RfY3B1CisjZGVmaW5lIG5vZGVfdG9fZmlyc3RfY3B1KG5vZGUpICgwKQorI2VuZGlmCisjaWZuZGVmIHBjaWJ1c190b19ub2RlCisjZGVmaW5lIHBjaWJ1c190b19ub2RlKG5vZGUpICgtMSkKKyNlbmRpZgorCisjaWZuZGVmIHBjaWJ1c190b19jcHVtYXNrCisjZGVmaW5lIHBjaWJ1c190b19jcHVtYXNrKGJ1cykgKHBjaWJ1c190b19ub2RlKGJ1cykgPT0gLTEgPyAgIENQVV9NQVNLX0FMTCA6ICAgbm9kZV90b19jcHVtYXNrKHBjaWJ1c190b19ub2RlKGJ1cykpICAgKQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL3hvci5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL3hvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiMWU0ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMveG9yLmgKQEAgLTAsMCArMSwxNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKworI2RlZmluZSBYT1JfVFJZX1RFTVBMQVRFUyAgIGRvIHsgICB4b3Jfc3BlZWQoJnhvcl9ibG9ja184cmVncyk7ICAgeG9yX3NwZWVkKCZ4b3JfYmxvY2tfOHJlZ3NfcCk7ICAgeG9yX3NwZWVkKCZ4b3JfYmxvY2tfMzJyZWdzKTsgICB4b3Jfc3BlZWQoJnhvcl9ibG9ja18zMnJlZ3NfcCk7ICAgfSB3aGlsZSAoMCkKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hLm91dC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Eub3V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzMyNTMwNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hLm91dC5oCkBAIC0wLDAgKzEsMjIwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQV9PVVRfR05VX0hfXworI2RlZmluZSBfX0FfT1VUX0dOVV9IX18KKworI2RlZmluZSBfX0dOVV9FWEVDX01BQ1JPU19fCisKKyNpZm5kZWYgX19TVFJVQ1RfRVhFQ19PVkVSUklERV9fCisKKyNpbmNsdWRlIDxhc20vYS5vdXQuaD4KKworI2VuZGlmCisKK2VudW0gbWFjaGluZV90eXBlIHsKKyNpZmRlZiBNX09MRFNVTjIKKyBNX19PTERTVU4yID0gTV9PTERTVU4yLAorI2Vsc2UKKyBNX09MRFNVTjIgPSAwLAorI2VuZGlmCisjaWZkZWYgTV82ODAxMAorIE1fXzY4MDEwID0gTV82ODAxMCwKKyNlbHNlCisgTV82ODAxMCA9IDEsCisjZW5kaWYKKyNpZmRlZiBNXzY4MDIwCisgTV9fNjgwMjAgPSBNXzY4MDIwLAorI2Vsc2UKKyBNXzY4MDIwID0gMiwKKyNlbmRpZgorI2lmZGVmIE1fU1BBUkMKKyBNX19TUEFSQyA9IE1fU1BBUkMsCisjZWxzZQorIE1fU1BBUkMgPSAzLAorI2VuZGlmCisKKyBNXzM4NiA9IDEwMCwKKyBNX01JUFMxID0gMTUxLAorIE1fTUlQUzIgPSAxNTIKK307CisKKyNpZm5kZWYgTl9NQUdJQworI2RlZmluZSBOX01BR0lDKGV4ZWMpICgoZXhlYykuYV9pbmZvICYgMHhmZmZmKQorI2VuZGlmCisjZGVmaW5lIE5fTUFDSFRZUEUoZXhlYykgKChlbnVtIG1hY2hpbmVfdHlwZSkoKChleGVjKS5hX2luZm8gPj4gMTYpICYgMHhmZikpCisjZGVmaW5lIE5fRkxBR1MoZXhlYykgKCgoZXhlYykuYV9pbmZvID4+IDI0KSAmIDB4ZmYpCisjZGVmaW5lIE5fU0VUX0lORk8oZXhlYywgbWFnaWMsIHR5cGUsIGZsYWdzKSAgICgoZXhlYykuYV9pbmZvID0gKChtYWdpYykgJiAweGZmZmYpICAgfCAoKChpbnQpKHR5cGUpICYgMHhmZikgPDwgMTYpICAgfCAoKChmbGFncykgJiAweGZmKSA8PCAyNCkpCisjZGVmaW5lIE5fU0VUX01BR0lDKGV4ZWMsIG1hZ2ljKSAgICgoZXhlYykuYV9pbmZvID0gKCgoZXhlYykuYV9pbmZvICYgMHhmZmZmMDAwMCkgfCAoKG1hZ2ljKSAmIDB4ZmZmZikpKQorCisjZGVmaW5lIE5fU0VUX01BQ0hUWVBFKGV4ZWMsIG1hY2h0eXBlKSAgICgoZXhlYykuYV9pbmZvID0gICAoKGV4ZWMpLmFfaW5mbyYweGZmMDBmZmZmKSB8ICgoKChpbnQpKG1hY2h0eXBlKSkmMHhmZikgPDwgMTYpKQorCisjZGVmaW5lIE5fU0VUX0ZMQUdTKGV4ZWMsIGZsYWdzKSAgICgoZXhlYykuYV9pbmZvID0gICAoKGV4ZWMpLmFfaW5mbyYweDAwZmZmZmZmKSB8ICgoKGZsYWdzKSAmIDB4ZmYpIDw8IDI0KSkKKworI2RlZmluZSBPTUFHSUMgMDQwNworCisjZGVmaW5lIE5NQUdJQyAwNDEwCisKKyNkZWZpbmUgWk1BR0lDIDA0MTMKKworI2RlZmluZSBRTUFHSUMgMDMxNAorCisjZGVmaW5lIENNQUdJQyAwNDIxCisKKyNpZm5kZWYgTl9CQURNQUcKKyNkZWZpbmUgTl9CQURNQUcoeCkgKE5fTUFHSUMoeCkgIT0gT01BR0lDICAgJiYgTl9NQUdJQyh4KSAhPSBOTUFHSUMgICAmJiBOX01BR0lDKHgpICE9IFpNQUdJQyAgICYmIE5fTUFHSUMoeCkgIT0gUU1BR0lDKQorI2VuZGlmCisKKyNkZWZpbmUgX05fSERST0ZGKHgpICgxMDI0IC0gc2l6ZW9mIChzdHJ1Y3QgZXhlYykpCisKKyNpZm5kZWYgTl9UWFRPRkYKKyNkZWZpbmUgTl9UWFRPRkYoeCkgICAoTl9NQUdJQyh4KSA9PSBaTUFHSUMgPyBfTl9IRFJPRkYoKHgpKSArIHNpemVvZiAoc3RydWN0IGV4ZWMpIDogICAoTl9NQUdJQyh4KSA9PSBRTUFHSUMgPyAwIDogc2l6ZW9mIChzdHJ1Y3QgZXhlYykpKQorI2VuZGlmCisKKyNpZm5kZWYgTl9EQVRPRkYKKyNkZWZpbmUgTl9EQVRPRkYoeCkgKE5fVFhUT0ZGKHgpICsgKHgpLmFfdGV4dCkKKyNlbmRpZgorCisjaWZuZGVmIE5fVFJFTE9GRgorI2RlZmluZSBOX1RSRUxPRkYoeCkgKE5fREFUT0ZGKHgpICsgKHgpLmFfZGF0YSkKKyNlbmRpZgorCisjaWZuZGVmIE5fRFJFTE9GRgorI2RlZmluZSBOX0RSRUxPRkYoeCkgKE5fVFJFTE9GRih4KSArIE5fVFJTSVpFKHgpKQorI2VuZGlmCisKKyNpZm5kZWYgTl9TWU1PRkYKKyNkZWZpbmUgTl9TWU1PRkYoeCkgKE5fRFJFTE9GRih4KSArIE5fRFJTSVpFKHgpKQorI2VuZGlmCisKKyNpZm5kZWYgTl9TVFJPRkYKKyNkZWZpbmUgTl9TVFJPRkYoeCkgKE5fU1lNT0ZGKHgpICsgTl9TWU1TSVpFKHgpKQorI2VuZGlmCisKKyNpZm5kZWYgTl9UWFRBRERSCisjZGVmaW5lIE5fVFhUQUREUih4KSAoTl9NQUdJQyh4KSA9PSBRTUFHSUMgPyBQQUdFX1NJWkUgOiAwKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKHZheCkgfHwgZGVmaW5lZChocDMwMCkgfHwgZGVmaW5lZChweXIpCisjZGVmaW5lIFNFR01FTlRfU0laRSBwYWdlX3NpemUKKyNlbmRpZgorI2lmZGVmIHNvbnkKKyNkZWZpbmUgU0VHTUVOVF9TSVpFIDB4MjAwMAorI2VuZGlmCisjaWZkZWYgaXM2OGsKKyNkZWZpbmUgU0VHTUVOVF9TSVpFIDB4MjAwMDAKKyNlbmRpZgorI2lmIGRlZmluZWQobTY4aykgJiYgZGVmaW5lZChQT1JUQVIpCisjZGVmaW5lIFBBR0VfU0laRSAweDQwMAorI2RlZmluZSBTRUdNRU5UX1NJWkUgUEFHRV9TSVpFCisjZW5kaWYKKworI2lmZGVmIGxpbnV4CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9fbWM2ODAwMF9fKQorI2RlZmluZSBTRUdNRU5UX1NJWkUgMTAyNAorI2Vsc2UKKyNpZm5kZWYgU0VHTUVOVF9TSVpFCisjZGVmaW5lIFNFR01FTlRfU0laRSBQQUdFX1NJWkUKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKworI2RlZmluZSBfTl9TRUdNRU5UX1JPVU5EKHgpIEFMSUdOKHgsIFNFR01FTlRfU0laRSkKKworI2RlZmluZSBfTl9UWFRFTkRBRERSKHgpIChOX1RYVEFERFIoeCkrKHgpLmFfdGV4dCkKKworI2lmbmRlZiBOX0RBVEFERFIKKyNkZWZpbmUgTl9EQVRBRERSKHgpICAgKE5fTUFHSUMoeCk9PU9NQUdJQz8gKF9OX1RYVEVOREFERFIoeCkpICAgOiAoX05fU0VHTUVOVF9ST1VORCAoX05fVFhURU5EQUREUih4KSkpKQorI2VuZGlmCisKKyNpZm5kZWYgTl9CU1NBRERSCisjZGVmaW5lIE5fQlNTQUREUih4KSAoTl9EQVRBRERSKHgpICsgKHgpLmFfZGF0YSkKKyNlbmRpZgorCisjaWZuZGVmIE5fTkxJU1RfREVDTEFSRUQKK3N0cnVjdCBubGlzdCB7CisgdW5pb24geworIGNoYXIgKm5fbmFtZTsKKyBzdHJ1Y3Qgbmxpc3QgKm5fbmV4dDsKKyBsb25nIG5fc3RyeDsKKyB9IG5fdW47CisgdW5zaWduZWQgY2hhciBuX3R5cGU7CisgY2hhciBuX290aGVyOworIHNob3J0IG5fZGVzYzsKKyB1bnNpZ25lZCBsb25nIG5fdmFsdWU7Cit9OworI2VuZGlmCisKKyNpZm5kZWYgTl9VTkRGCisjZGVmaW5lIE5fVU5ERiAwCisjZW5kaWYKKyNpZm5kZWYgTl9BQlMKKyNkZWZpbmUgTl9BQlMgMgorI2VuZGlmCisjaWZuZGVmIE5fVEVYVAorI2RlZmluZSBOX1RFWFQgNAorI2VuZGlmCisjaWZuZGVmIE5fREFUQQorI2RlZmluZSBOX0RBVEEgNgorI2VuZGlmCisjaWZuZGVmIE5fQlNTCisjZGVmaW5lIE5fQlNTIDgKKyNlbmRpZgorI2lmbmRlZiBOX0ZOCisjZGVmaW5lIE5fRk4gMTUKKyNlbmRpZgorCisjaWZuZGVmIE5fRVhUCisjZGVmaW5lIE5fRVhUIDEKKyNlbmRpZgorI2lmbmRlZiBOX1RZUEUKKyNkZWZpbmUgTl9UWVBFIDAzNgorI2VuZGlmCisjaWZuZGVmIE5fU1RBQgorI2RlZmluZSBOX1NUQUIgMDM0MAorI2VuZGlmCisKKyNkZWZpbmUgTl9JTkRSIDB4YQorCisjZGVmaW5lIE5fU0VUQSAweDE0ICAKKyNkZWZpbmUgTl9TRVRUIDB4MTYgIAorI2RlZmluZSBOX1NFVEQgMHgxOCAgCisjZGVmaW5lIE5fU0VUQiAweDFBICAKKworI2RlZmluZSBOX1NFVFYgMHgxQyAgCisKKyNpZm5kZWYgTl9SRUxPQ0FUSU9OX0lORk9fREVDTEFSRUQKKworc3RydWN0IHJlbG9jYXRpb25faW5mbworeworCisgaW50IHJfYWRkcmVzczsKKworIHVuc2lnbmVkIGludCByX3N5bWJvbG51bToyNDsKKworIHVuc2lnbmVkIGludCByX3BjcmVsOjE7CisKKyB1bnNpZ25lZCBpbnQgcl9sZW5ndGg6MjsKKworIHVuc2lnbmVkIGludCByX2V4dGVybjoxOworCisjaWZkZWYgTlMzMksKKyB1bnNpZ25lZCByX2JzcjoxOworIHVuc2lnbmVkIHJfZGlzcDoxOworIHVuc2lnbmVkIHJfcGFkOjI7CisjZWxzZQorIHVuc2lnbmVkIGludCByX3BhZDo0OworI2VuZGlmCit9OworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Fpb19hYmkuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9haW9fYWJpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkyYmM4ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9haW9fYWJpLmgKQEAgLTAsMCArMSw2NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0xJTlVYX19BSU9fQUJJX0gKKyNkZWZpbmUgX19MSU5VWF9fQUlPX0FCSV9ICisKKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBhaW9fY29udGV4dF90OworCitlbnVtIHsKKyBJT0NCX0NNRF9QUkVBRCA9IDAsCisgSU9DQl9DTURfUFdSSVRFID0gMSwKKyBJT0NCX0NNRF9GU1lOQyA9IDIsCisgSU9DQl9DTURfRkRTWU5DID0gMywKKworIElPQ0JfQ01EX05PT1AgPSA2LAorfTsKKworc3RydWN0IGlvX2V2ZW50IHsKKyBfX3U2NCBkYXRhOworIF9fdTY0IG9iajsKKyBfX3M2NCByZXM7CisgX19zNjQgcmVzMjsKK307CisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU4KKyNkZWZpbmUgUEFEREVEKHgseSkgeCwgeQorI2VsaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisjZGVmaW5lIFBBRERFRCh4LHkpIHksIHgKKyNlbHNlCisjZXJyb3IgZWRpdCBmb3IgeW91ciBvZGQgYnl0ZW9yZGVyLgorI2VuZGlmCisKK3N0cnVjdCBpb2NiIHsKKworIF9fdTY0IGFpb19kYXRhOworIF9fdTMyIFBBRERFRChhaW9fa2V5LCBhaW9fcmVzZXJ2ZWQxKTsKKworIF9fdTE2IGFpb19saW9fb3Bjb2RlOworIF9fczE2IGFpb19yZXFwcmlvOworIF9fdTMyIGFpb19maWxkZXM7CisKKyBfX3U2NCBhaW9fYnVmOworIF9fdTY0IGFpb19uYnl0ZXM7CisgX19zNjQgYWlvX29mZnNldDsKKworIF9fdTY0IGFpb19yZXNlcnZlZDI7CisgX191NjQgYWlvX3Jlc2VydmVkMzsKK307CisKKyN1bmRlZiBJRkJJRworI3VuZGVmIElGTElUVExFCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYWttODk3Ni5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2FrbTg5NzYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWFhNjhlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2FrbTg5NzYuaApAQCAtMCwwICsxLDg5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIEFLTTg5NzZfSAorI2RlZmluZSBBS004OTc2X0gKKworI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisKKyNkZWZpbmUgQUtFQ1NfTU9ERV9NRUFTVVJFIDB4MDAgIAorCisjZGVmaW5lIEFLRUNTX01PREVfUEZGRCAweDAxICAKKyNkZWZpbmUgQUtFQ1NfTU9ERV9FMlBfUkVBRCAweDAyICAKKyNkZWZpbmUgQUtFQ1NfTU9ERV9QT1dFUkRPV04gMHgwMyAgCisKKyNkZWZpbmUgQUtFQ1NfTU9ERV9NRUFTVVJFX1NORyAweDEwICAKKyNkZWZpbmUgQUtFQ1NfTU9ERV9NRUFTVVJFX1NFUSAweDExICAKKworI2RlZmluZSBDU1BFQ19BSU5UIDB4MDEgIAorI2RlZmluZSBDU1BFQ19TTkdfTlVNIDB4MDEgIAorI2RlZmluZSBDU1BFQ19TRVFfTlVNIDB4MDIgIAorI2RlZmluZSBDU1BFQ19TRlJRXzMyIDB4MDAgIAorI2RlZmluZSBDU1BFQ19TRlJRXzY0IDB4MDEgIAorI2RlZmluZSBDU1BFQ19NQ1MgMHgwNyAgCisjZGVmaW5lIENTUEVDX01LUyAweDAxICAKKyNkZWZpbmUgQ1NQRUNfSU5URU4gMHgwMSAgCisKKyNkZWZpbmUgUkJVRkZfU0laRSAzMSAgCisjZGVmaW5lIE1BWF9DQUxJX1NJWkUgMHgxMDAwVSAgCisKKyNkZWZpbmUgQUtFQ1NfUkVHX1NUIDB4QzAKKyNkZWZpbmUgQUtFQ1NfUkVHX1RNUFMgMHhDMQorI2RlZmluZSBBS0VDU19SRUdfTVMxIDB4RTAKKyNkZWZpbmUgQUtFQ1NfUkVHX01TMiAweEUxCisjZGVmaW5lIEFLRUNTX1JFR19NUzMgMHhFMgorCisjZGVmaW5lIEFLTUlPIDB4QTEKKworI2RlZmluZSBFQ1NfSU9DVExfSU5JVCBfSU8oQUtNSU8sIDB4MDEpCisjZGVmaW5lIEVDU19JT0NUTF9XUklURSBfSU9XKEFLTUlPLCAweDAyLCBjaGFyWzVdKQorI2RlZmluZSBFQ1NfSU9DVExfUkVBRCBfSU9XUihBS01JTywgMHgwMywgY2hhcls1XSkKKyNkZWZpbmUgRUNTX0lPQ1RMX1JFU0VUIF9JTyhBS01JTywgMHgwNCkKKyNkZWZpbmUgRUNTX0lPQ1RMX0lOVF9TVEFUVVMgX0lPKEFLTUlPLCAweDA1KQorI2RlZmluZSBFQ1NfSU9DVExfRkZEX1NUQVRVUyBfSU8oQUtNSU8sIDB4MDYpCisjZGVmaW5lIEVDU19JT0NUTF9TRVRfTU9ERSBfSU9XKEFLTUlPLCAweDA3LCBzaG9ydCkKKyNkZWZpbmUgRUNTX0lPQ1RMX0dFVERBVEEgX0lPUihBS01JTywgMHgwOCwgY2hhcltSQlVGRl9TSVpFKzFdKQorI2RlZmluZSBFQ1NfSU9DVExfR0VUX05VTUZSUSBfSU9SKEFLTUlPLCAweDA5LCBjaGFyWzJdKQorI2RlZmluZSBFQ1NfSU9DVExfU0VUX1BFUlNUIF9JTyhBS01JTywgMHgwQSkKKyNkZWZpbmUgRUNTX0lPQ1RMX1NFVF9HMFJTVCBfSU8oQUtNSU8sIDB4MEIpCisjZGVmaW5lIEVDU19JT0NUTF9TRVRfWVBSIF9JT1coQUtNSU8sIDB4MEMsIHNob3J0WzEyXSkKKyNkZWZpbmUgRUNTX0lPQ1RMX0dFVF9PUEVOX1NUQVRVUyBfSU9SKEFLTUlPLCAweDBELCBpbnQpCisjZGVmaW5lIEVDU19JT0NUTF9HRVRfQ0xPU0VfU1RBVFVTIF9JT1IoQUtNSU8sIDB4MEUsIGludCkKKyNkZWZpbmUgRUNTX0lPQ1RMX0dFVF9DQUxJX0RBVEEgX0lPUihBS01JTywgMHgwRiwgY2hhcltNQVhfQ0FMSV9TSVpFXSkKKyNkZWZpbmUgRUNTX0lPQ1RMX0dFVF9ERUxBWSBfSU9SKEFLTUlPLCAweDMwLCBzaG9ydCkKKworI2RlZmluZSBFQ1NfSU9DVExfQVBQX1NFVF9NT0RFIF9JT1coQUtNSU8sIDB4MTAsIHNob3J0KQorI2RlZmluZSBFQ1NfSU9DVExfQVBQX1NFVF9NRkxBRyBfSU9XKEFLTUlPLCAweDExLCBzaG9ydCkKKyNkZWZpbmUgRUNTX0lPQ1RMX0FQUF9HRVRfTUZMQUcgX0lPVyhBS01JTywgMHgxMiwgc2hvcnQpCisjZGVmaW5lIEVDU19JT0NUTF9BUFBfU0VUX0FGTEFHIF9JT1coQUtNSU8sIDB4MTMsIHNob3J0KQorI2RlZmluZSBFQ1NfSU9DVExfQVBQX0dFVF9BRkxBRyBfSU9SKEFLTUlPLCAweDE0LCBzaG9ydCkKKyNkZWZpbmUgRUNTX0lPQ1RMX0FQUF9TRVRfVEZMQUcgX0lPUihBS01JTywgMHgxNSwgc2hvcnQpCisjZGVmaW5lIEVDU19JT0NUTF9BUFBfR0VUX1RGTEFHIF9JT1IoQUtNSU8sIDB4MTYsIHNob3J0KQorI2RlZmluZSBFQ1NfSU9DVExfQVBQX1JFU0VUX1BFRE9NRVRFUiBfSU8oQUtNSU8sIDB4MTcpCisjZGVmaW5lIEVDU19JT0NUTF9BUFBfU0VUX0RFTEFZIF9JT1coQUtNSU8sIDB4MTgsIHNob3J0KQorI2RlZmluZSBFQ1NfSU9DVExfQVBQX0dFVF9ERUxBWSBFQ1NfSU9DVExfR0VUX0RFTEFZCisjZGVmaW5lIEVDU19JT0NUTF9BUFBfU0VUX01WRkxBRyBfSU9XKEFLTUlPLCAweDE5LCBzaG9ydCkgIAorI2RlZmluZSBFQ1NfSU9DVExfQVBQX0dFVF9NVkZMQUcgX0lPUihBS01JTywgMHgxQSwgc2hvcnQpICAKKworI2RlZmluZSBFQ1NfSU9DVExfU0VUX1NURVBfQ05UIF9JT1coQUtNSU8sIDB4MjAsIHNob3J0KQorCisjZGVmaW5lIEVDU19SU1QgMTQ2ICAKKyNkZWZpbmUgRUNTX0NMS19PTiAxNTUgIAorI2RlZmluZSBFQ1NfSU5UUiAxNjEgIAorCitzdHJ1Y3QgYWttODk3Nl9wbGF0Zm9ybV9kYXRhIHsKKyBpbnQgcmVzZXQ7CisgaW50IGNsa19vbjsKKyBpbnQgaW50cjsKK307CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYW5kcm9pZF9hbGFybS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2FuZHJvaWRfYWxhcm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDgyOGVhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2FuZHJvaWRfYWxhcm0uaApAQCAtMCwwICsxLDUwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9BTkRST0lEX0FMQVJNX0gKKyNkZWZpbmUgX0xJTlVYX0FORFJPSURfQUxBUk1fSAorCisjaW5jbHVkZSA8YXNtL2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorCit0eXBlZGVmIGVudW0geworCisgQU5EUk9JRF9BTEFSTV9SVENfV0FLRVVQLAorIEFORFJPSURfQUxBUk1fUlRDLAorIEFORFJPSURfQUxBUk1fRUxBUFNFRF9SRUFMVElNRV9XQUtFVVAsCisgQU5EUk9JRF9BTEFSTV9FTEFQU0VEX1JFQUxUSU1FLAorIEFORFJPSURfQUxBUk1fU1lTVEVNVElNRSwKKworIEFORFJPSURfQUxBUk1fVFlQRV9DT1VOVCwKKworfSBhbmRyb2lkX2FsYXJtX3R5cGVfdDsKKwordHlwZWRlZiBlbnVtIHsKKyBBTkRST0lEX0FMQVJNX1JUQ19XQUtFVVBfTUFTSyA9IDFVIDw8IEFORFJPSURfQUxBUk1fUlRDX1dBS0VVUCwKKyBBTkRST0lEX0FMQVJNX1JUQ19NQVNLID0gMVUgPDwgQU5EUk9JRF9BTEFSTV9SVEMsCisgQU5EUk9JRF9BTEFSTV9FTEFQU0VEX1JFQUxUSU1FX1dBS0VVUF9NQVNLID0gMVUgPDwgQU5EUk9JRF9BTEFSTV9FTEFQU0VEX1JFQUxUSU1FX1dBS0VVUCwKKyBBTkRST0lEX0FMQVJNX0VMQVBTRURfUkVBTFRJTUVfTUFTSyA9IDFVIDw8IEFORFJPSURfQUxBUk1fRUxBUFNFRF9SRUFMVElNRSwKKyBBTkRST0lEX0FMQVJNX1NZU1RFTVRJTUVfTUFTSyA9IDFVIDw8IEFORFJPSURfQUxBUk1fU1lTVEVNVElNRSwKKyBBTkRST0lEX0FMQVJNX1RJTUVfQ0hBTkdFX01BU0sgPSAxVSA8PCAxNgorfSBhbmRyb2lkX2FsYXJtX3JldHVybl9mbGFnc190OworCisjZGVmaW5lIEFORFJPSURfQUxBUk1fQ0xFQVIodHlwZSkgX0lPKCdhJywgMCB8ICgodHlwZSkgPDwgNCkpIAorI2RlZmluZSBBTkRST0lEX0FMQVJNX1dBSVQgX0lPKCdhJywgMSkgCisjZGVmaW5lIEFORFJPSURfQUxBUk1fU0VUKHR5cGUpIF9JT1coJ2EnLCAyIHwgKCh0eXBlKSA8PCA0KSwgc3RydWN0IHRpbWVzcGVjKSAKKyNkZWZpbmUgQU5EUk9JRF9BTEFSTV9TRVRfQU5EX1dBSVQodHlwZSkgX0lPVygnYScsIDMgfCAoKHR5cGUpIDw8IDQpLCBzdHJ1Y3QgdGltZXNwZWMpCisjZGVmaW5lIEFORFJPSURfQUxBUk1fR0VUX1RJTUUodHlwZSkgX0lPVygnYScsIDQgfCAoKHR5cGUpIDw8IDQpLCBzdHJ1Y3QgdGltZXNwZWMpCisjZGVmaW5lIEFORFJPSURfQUxBUk1fU0VUX1JUQyBfSU9XKCdhJywgNSwgc3RydWN0IHRpbWVzcGVjKQorI2RlZmluZSBBTkRST0lEX0FMQVJNX1NFVF9USU1FWk9ORSBfSU9XKCdhJywgNiwgc3RydWN0IHRpbWV6b25lKQorCisjZGVmaW5lIEFORFJPSURfQUxBUk1fQkFTRV9DTUQoY21kKSAoY21kICYgfihfSU9DKDAsIDAsIDB4ZjAsIDApKSkKKyNkZWZpbmUgQU5EUk9JRF9BTEFSTV9JT0NUTF9UT19UWVBFKGNtZCkgKF9JT0NfTlIoY21kKSA+PiA0KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hbmRyb2lkX3BtZW0uaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hbmRyb2lkX3BtZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTg4NTdlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2FuZHJvaWRfcG1lbS5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FORFJPSURfUE1FTV9IXworI2RlZmluZSBfQU5EUk9JRF9QTUVNX0hfCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2lmbmRlZiBfX3VzZXIKKyNkZWZpbmUgX191c2VyCisjZW5kaWYKKworc3RydWN0IHBtZW1fcmVnaW9uIHsKKyB1bnNpZ25lZCBsb25nIG9mZnNldDsKKyB1bnNpZ25lZCBsb25nIGxlbjsKK307CisKKyNkZWZpbmUgUE1FTV9JT0NUTF9NQUdJQyAncCcKKyNkZWZpbmUgUE1FTV9HRVRfUEhZUyBfSU9XKFBNRU1fSU9DVExfTUFHSUMsIDEsIHN0cnVjdCBwbWVtX3JlZ2lvbiAqKQorI2RlZmluZSBQTUVNX01BUCBfSU9XKFBNRU1fSU9DVExfTUFHSUMsIDIsIHN0cnVjdCBwbWVtX3JlZ2lvbiAqKQorI2RlZmluZSBQTUVNX0dFVF9TSVpFIF9JT1coUE1FTV9JT0NUTF9NQUdJQywgMywgc3RydWN0IHBtZW1fcmVnaW9uICopCisjZGVmaW5lIFBNRU1fVU5NQVAgX0lPVyhQTUVNX0lPQ1RMX01BR0lDLCA0LCBzdHJ1Y3QgcG1lbV9yZWdpb24gKikKKworI2RlZmluZSBQTUVNX0FMTE9DQVRFIF9JT1coUE1FTV9JT0NUTF9NQUdJQywgNSwgdW5zaWduZWQgaW50KQorCisjZGVmaW5lIFBNRU1fQ09OTkVDVCBfSU9XKFBNRU1fSU9DVExfTUFHSUMsIDYsIHVuc2lnbmVkIGludCkKKworI2RlZmluZSBQTUVNX0dFVF9UT1RBTF9TSVpFIF9JT1coUE1FTV9JT0NUTF9NQUdJQywgNywgc3RydWN0IHBtZW1fcmVnaW9uICopCisKKyNkZWZpbmUgSFczRF9SRVZPS0VfR1BVIF9JT1coUE1FTV9JT0NUTF9NQUdJQywgOCwgdW5zaWduZWQgaW50KQorI2RlZmluZSBIVzNEX0dSQU5UX0dQVSBfSU9XKFBNRU1fSU9DVExfTUFHSUMsIDksIHVuc2lnbmVkIGludCkKKyNkZWZpbmUgSFczRF9XQUlUX0lSUSBfSU9XKFBNRU1fSU9DVExfTUFHSUMsMTAsIHVuc2lnbmVkIGludCkKKworc3RydWN0IGFuZHJvaWRfcG1lbV9wbGF0Zm9ybV9kYXRhOworc3RydWN0IHBtZW1fZmlsZV9vcGVyYXRpb25zIHsKKyBpbnQgKCptbWFwKSAoc3RydWN0IGZpbGUgKiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICopOworIGludCAoKm9wZW4pIChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7Cisgc3NpemVfdCAoKnJlYWQpIChzdHJ1Y3QgZmlsZSAqLCBjaGFyIF9fdXNlciAqLCBzaXplX3QsIGxvbmcgbG9uZyAqKTsKKyBpbnQgKCpyZWxlYXNlKSAoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopOworIGxvbmcgKCppb2N0bCkgKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7Cit9OworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2FuZHJvaWRfcG93ZXIuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hbmRyb2lkX3Bvd2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU5MDMyMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hbmRyb2lkX3Bvd2VyLmgKQEAgLTAsMCArMSw1NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfQU5EUk9JRF9QT1dFUl9ICisjZGVmaW5lIF9MSU5VWF9BTkRST0lEX1BPV0VSX0gKKworI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyBzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7CisgaW50IGxvY2tfY291bnQ7CisgaW50IGZsYWdzOworIGNvbnN0IGNoYXIgKm5hbWU7CisgaW50IGV4cGlyZXM7Cit9IGFuZHJvaWRfc3VzcGVuZF9sb2NrX3Q7CisKKyNkZWZpbmUgQU5EUk9JRF9TVVNQRU5EX0xPQ0tfRkxBR19DT1VOVEVEICgxVSA8PCAwKQorI2RlZmluZSBBTkRST0lEX1NVU1BFTkRfTE9DS19GTEFHX1VTRVJfUkVBREFCTEUgKDFVIDw8IDEpCisjZGVmaW5lIEFORFJPSURfU1VTUEVORF9MT0NLX0ZMQUdfVVNFUl9TRVQgKDFVIDw8IDIpCisjZGVmaW5lIEFORFJPSURfU1VTUEVORF9MT0NLX0ZMQUdfVVNFUl9DTEVBUiAoMVUgPDwgMykKKyNkZWZpbmUgQU5EUk9JRF9TVVNQRU5EX0xPQ0tfRkxBR19VU0VSX0lOQyAoMVUgPDwgNCkKKyNkZWZpbmUgQU5EUk9JRF9TVVNQRU5EX0xPQ0tfRkxBR19VU0VSX0RFQyAoMVUgPDwgNSkKKyNkZWZpbmUgQU5EUk9JRF9TVVNQRU5EX0xPQ0tfRkxBR19VU0VSX1ZJU0lCTEVfTUFTSyAoMHgxZlUgPDwgMSkKKyNkZWZpbmUgQU5EUk9JRF9TVVNQRU5EX0xPQ0tfQVVUT19FWFBJUkUgKDFVIDw8IDYpCisKK3R5cGVkZWYgc3RydWN0IGFuZHJvaWRfZWFybHlfc3VzcGVuZCBhbmRyb2lkX2Vhcmx5X3N1c3BlbmRfdDsKK3N0cnVjdCBhbmRyb2lkX2Vhcmx5X3N1c3BlbmQKK3sKKyBzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7CisgaW50IGxldmVsOworIHZvaWQgKCpzdXNwZW5kKShhbmRyb2lkX2Vhcmx5X3N1c3BlbmRfdCAqaCk7Cisgdm9pZCAoKnJlc3VtZSkoYW5kcm9pZF9lYXJseV9zdXNwZW5kX3QgKmgpOworfTsKKwordHlwZWRlZiBlbnVtIHsKKyBBTkRST0lEX0NIQVJHSU5HX1NUQVRFX1VOS05PV04sCisgQU5EUk9JRF9DSEFSR0lOR19TVEFURV9ESVNDSEFSR0UsCisgQU5EUk9JRF9DSEFSR0lOR19TVEFURV9NQUlOVEFJTiwKKyBBTkRST0lEX0NIQVJHSU5HX1NUQVRFX1NMT1csCisgQU5EUk9JRF9DSEFSR0lOR19TVEFURV9OT1JNQUwsCisgQU5EUk9JRF9DSEFSR0lOR19TVEFURV9GQVNULAorIEFORFJPSURfQ0hBUkdJTkdfU1RBVEVfT1ZFUkhFQVQKK30gYW5kcm9pZF9jaGFyZ2luZ19zdGF0ZV90OworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2FwbV9iaW9zLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYXBtX2Jpb3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzJiNGFhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2FwbV9iaW9zLmgKQEAgLTAsMCArMSw5NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfQVBNX0gKKyNkZWZpbmUgX0xJTlVYX0FQTV9ICisKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgYXBtX2V2ZW50X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGFwbV9ldmVudGluZm9fdDsKKworI2RlZmluZSBBUE1fU1RBVEVfUkVBRFkgMHgwMDAwCisjZGVmaW5lIEFQTV9TVEFURV9TVEFOREJZIDB4MDAwMQorI2RlZmluZSBBUE1fU1RBVEVfU1VTUEVORCAweDAwMDIKKyNkZWZpbmUgQVBNX1NUQVRFX09GRiAweDAwMDMKKyNkZWZpbmUgQVBNX1NUQVRFX0JVU1kgMHgwMDA0CisjZGVmaW5lIEFQTV9TVEFURV9SRUpFQ1QgMHgwMDA1CisjZGVmaW5lIEFQTV9TVEFURV9PRU1fU1lTIDB4MDAyMAorI2RlZmluZSBBUE1fU1RBVEVfT0VNX0RFViAweDAwNDAKKworI2RlZmluZSBBUE1fU1RBVEVfRElTQUJMRSAweDAwMDAKKyNkZWZpbmUgQVBNX1NUQVRFX0VOQUJMRSAweDAwMDEKKworI2RlZmluZSBBUE1fU1RBVEVfRElTRU5HQUdFIDB4MDAwMAorI2RlZmluZSBBUE1fU1RBVEVfRU5HQUdFIDB4MDAwMQorCisjZGVmaW5lIEFQTV9TWVNfU1RBTkRCWSAweDAwMDEKKyNkZWZpbmUgQVBNX1NZU19TVVNQRU5EIDB4MDAwMgorI2RlZmluZSBBUE1fTk9STUFMX1JFU1VNRSAweDAwMDMKKyNkZWZpbmUgQVBNX0NSSVRJQ0FMX1JFU1VNRSAweDAwMDQKKyNkZWZpbmUgQVBNX0xPV19CQVRURVJZIDB4MDAwNQorI2RlZmluZSBBUE1fUE9XRVJfU1RBVFVTX0NIQU5HRSAweDAwMDYKKyNkZWZpbmUgQVBNX1VQREFURV9USU1FIDB4MDAwNworI2RlZmluZSBBUE1fQ1JJVElDQUxfU1VTUEVORCAweDAwMDgKKyNkZWZpbmUgQVBNX1VTRVJfU1RBTkRCWSAweDAwMDkKKyNkZWZpbmUgQVBNX1VTRVJfU1VTUEVORCAweDAwMGEKKyNkZWZpbmUgQVBNX1NUQU5EQllfUkVTVU1FIDB4MDAwYgorI2RlZmluZSBBUE1fQ0FQQUJJTElUWV9DSEFOR0UgMHgwMDBjCisKKyNkZWZpbmUgQVBNX1NVQ0NFU1MgMHgwMAorI2RlZmluZSBBUE1fRElTQUJMRUQgMHgwMQorI2RlZmluZSBBUE1fQ09OTkVDVEVEIDB4MDIKKyNkZWZpbmUgQVBNX05PVF9DT05ORUNURUQgMHgwMworI2RlZmluZSBBUE1fMTZfQ09OTkVDVEVEIDB4MDUKKyNkZWZpbmUgQVBNXzE2X1VOU1VQUE9SVEVEIDB4MDYKKyNkZWZpbmUgQVBNXzMyX0NPTk5FQ1RFRCAweDA3CisjZGVmaW5lIEFQTV8zMl9VTlNVUFBPUlRFRCAweDA4CisjZGVmaW5lIEFQTV9CQURfREVWSUNFIDB4MDkKKyNkZWZpbmUgQVBNX0JBRF9QQVJBTSAweDBhCisjZGVmaW5lIEFQTV9OT1RfRU5HQUdFRCAweDBiCisjZGVmaW5lIEFQTV9CQURfRlVOQ1RJT04gMHgwYworI2RlZmluZSBBUE1fUkVTVU1FX0RJU0FCTEVEIDB4MGQKKyNkZWZpbmUgQVBNX05PX0VSUk9SIDB4NTMKKyNkZWZpbmUgQVBNX0JBRF9TVEFURSAweDYwCisjZGVmaW5lIEFQTV9OT19FVkVOVFMgMHg4MAorI2RlZmluZSBBUE1fTk9UX1BSRVNFTlQgMHg4NgorCisjZGVmaW5lIEFQTV9ERVZJQ0VfQklPUyAweDAwMDAKKyNkZWZpbmUgQVBNX0RFVklDRV9BTEwgMHgwMDAxCisjZGVmaW5lIEFQTV9ERVZJQ0VfRElTUExBWSAweDAxMDAKKyNkZWZpbmUgQVBNX0RFVklDRV9TVE9SQUdFIDB4MDIwMAorI2RlZmluZSBBUE1fREVWSUNFX1BBUkFMTEVMIDB4MDMwMAorI2RlZmluZSBBUE1fREVWSUNFX1NFUklBTCAweDA0MDAKKyNkZWZpbmUgQVBNX0RFVklDRV9ORVRXT1JLIDB4MDUwMAorI2RlZmluZSBBUE1fREVWSUNFX1BDTUNJQSAweDA2MDAKKyNkZWZpbmUgQVBNX0RFVklDRV9CQVRURVJZIDB4ODAwMAorI2RlZmluZSBBUE1fREVWSUNFX09FTSAweGUwMDAKKyNkZWZpbmUgQVBNX0RFVklDRV9PTERfQUxMIDB4ZmZmZgorI2RlZmluZSBBUE1fREVWSUNFX0NMQVNTIDB4MDBmZgorI2RlZmluZSBBUE1fREVWSUNFX01BU0sgMHhmZjAwCisKKyNkZWZpbmUgQVBNX01BWF9CQVRURVJJRVMgMgorCisjZGVmaW5lIEFQTV9DQVBfR0xPQkFMX1NUQU5EQlkgMHgwMDAxCisjZGVmaW5lIEFQTV9DQVBfR0xPQkFMX1NVU1BFTkQgMHgwMDAyCisjZGVmaW5lIEFQTV9DQVBfUkVTVU1FX1NUQU5EQllfVElNRVIgMHgwMDA0ICAKKyNkZWZpbmUgQVBNX0NBUF9SRVNVTUVfU1VTUEVORF9USU1FUiAweDAwMDggIAorI2RlZmluZSBBUE1fQ0FQX1JFU1VNRV9TVEFOREJZX1JJTkcgMHgwMDEwICAKKyNkZWZpbmUgQVBNX0NBUF9SRVNVTUVfU1VTUEVORF9SSU5HIDB4MDAyMCAgCisjZGVmaW5lIEFQTV9DQVBfUkVTVU1FX1NUQU5EQllfUENNQ0lBIDB4MDA0MCAgCisjZGVmaW5lIEFQTV9DQVBfUkVTVU1FX1NVU1BFTkRfUENNQ0lBIDB4MDA4MCAgCisKKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorCisjZGVmaW5lIEFQTV9JT0NfU1RBTkRCWSBfSU8oJ0EnLCAxKQorI2RlZmluZSBBUE1fSU9DX1NVU1BFTkQgX0lPKCdBJywgMikKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYXNobWVtLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYXNobWVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU3ZDFkZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hc2htZW0uaApAQCAtMCwwICsxLDQ2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9BU0hNRU1fSAorI2RlZmluZSBfTElOVVhfQVNITUVNX0gKKworI2luY2x1ZGUgPGxpbnV4L2xpbWl0cy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisKKyNkZWZpbmUgQVNITUVNX05BTUVfTEVOIDI1NgorCisjZGVmaW5lIEFTSE1FTV9OQU1FX0RFRiAiZGV2L2FzaG1lbSIKKworI2RlZmluZSBBU0hNRU1fTk9UX1BVUkdFRCAwCisjZGVmaW5lIEFTSE1FTV9XQVNfUFVSR0VEIDEKKworI2RlZmluZSBBU0hNRU1fSVNfVU5QSU5ORUQgMAorI2RlZmluZSBBU0hNRU1fSVNfUElOTkVEIDEKKworc3RydWN0IGFzaG1lbV9waW4geworIF9fdTMyIG9mZnNldDsKKyBfX3UzMiBsZW47Cit9OworCisjZGVmaW5lIF9fQVNITUVNSU9DIDB4NzcKKworI2RlZmluZSBBU0hNRU1fU0VUX05BTUUgX0lPVyhfX0FTSE1FTUlPQywgMSwgY2hhcltBU0hNRU1fTkFNRV9MRU5dKQorI2RlZmluZSBBU0hNRU1fR0VUX05BTUUgX0lPUihfX0FTSE1FTUlPQywgMiwgY2hhcltBU0hNRU1fTkFNRV9MRU5dKQorI2RlZmluZSBBU0hNRU1fU0VUX1NJWkUgX0lPVyhfX0FTSE1FTUlPQywgMywgc2l6ZV90KQorI2RlZmluZSBBU0hNRU1fR0VUX1NJWkUgX0lPKF9fQVNITUVNSU9DLCA0KQorI2RlZmluZSBBU0hNRU1fU0VUX1BST1RfTUFTSyBfSU9XKF9fQVNITUVNSU9DLCA1LCB1bnNpZ25lZCBsb25nKQorI2RlZmluZSBBU0hNRU1fR0VUX1BST1RfTUFTSyBfSU8oX19BU0hNRU1JT0MsIDYpCisjZGVmaW5lIEFTSE1FTV9QSU4gX0lPVyhfX0FTSE1FTUlPQywgNywgc3RydWN0IGFzaG1lbV9waW4pCisjZGVmaW5lIEFTSE1FTV9VTlBJTiBfSU9XKF9fQVNITUVNSU9DLCA4LCBzdHJ1Y3QgYXNobWVtX3BpbikKKyNkZWZpbmUgQVNITUVNX0dFVF9QSU5fU1RBVFVTIF9JTyhfX0FTSE1FTUlPQywgOSkKKyNkZWZpbmUgQVNITUVNX1BVUkdFX0FMTF9DQUNIRVMgX0lPKF9fQVNITUVNSU9DLCAxMCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYXRhLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZhZjU3NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hdGEuaApAQCAtMCwwICsxLDI2NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0xJTlVYX0FUQV9IX18KKyNkZWZpbmUgX19MSU5VWF9BVEFfSF9fCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjZGVmaW5lIEFUQV9ETUFfQk9VTkRBUlkgMHhmZmZmVUwKKyNkZWZpbmUgQVRBX0RNQV9NQVNLIDB4ZmZmZmZmZmZVTEwKKworZW51bSB7CisKKyBBVEFfTUFYX0RFVklDRVMgPSAyLAorIEFUQV9NQVhfUFJEID0gMjU2LAorIEFUQV9TRUNUX1NJWkUgPSA1MTIsCisKKyBBVEFfSURfV09SRFMgPSAyNTYsCisgQVRBX0lEX1NFUk5PX09GUyA9IDEwLAorIEFUQV9JRF9GV19SRVZfT0ZTID0gMjMsCisgQVRBX0lEX1BST0RfT0ZTID0gMjcsCisgQVRBX0lEX09MRF9QSU9fTU9ERVMgPSA1MSwKKyBBVEFfSURfRklFTERfVkFMSUQgPSA1MywKKyBBVEFfSURfTVdETUFfTU9ERVMgPSA2MywKKyBBVEFfSURfUElPX01PREVTID0gNjQsCisgQVRBX0lEX0VJREVfRE1BX01JTiA9IDY1LAorIEFUQV9JRF9FSURFX1BJTyA9IDY3LAorIEFUQV9JRF9FSURFX1BJT19JT1JEWSA9IDY4LAorIEFUQV9JRF9VRE1BX01PREVTID0gODgsCisgQVRBX0lEX01BSk9SX1ZFUiA9IDgwLAorIEFUQV9JRF9QSU80ID0gKDEgPDwgMSksCisKKyBBVEFfUENJX0NUTF9PRlMgPSAyLAorIEFUQV9TRVJOT19MRU4gPSAyMCwKKyBBVEFfVURNQTAgPSAoMSA8PCAwKSwKKyBBVEFfVURNQTEgPSBBVEFfVURNQTAgfCAoMSA8PCAxKSwKKyBBVEFfVURNQTIgPSBBVEFfVURNQTEgfCAoMSA8PCAyKSwKKyBBVEFfVURNQTMgPSBBVEFfVURNQTIgfCAoMSA8PCAzKSwKKyBBVEFfVURNQTQgPSBBVEFfVURNQTMgfCAoMSA8PCA0KSwKKyBBVEFfVURNQTUgPSBBVEFfVURNQTQgfCAoMSA8PCA1KSwKKyBBVEFfVURNQTYgPSBBVEFfVURNQTUgfCAoMSA8PCA2KSwKKyBBVEFfVURNQTcgPSBBVEFfVURNQTYgfCAoMSA8PCA3KSwKKworIEFUQV9VRE1BX01BU0tfNDBDID0gQVRBX1VETUEyLAorCisgQVRBX1BSRF9TWiA9IDgsCisgQVRBX1BSRF9UQkxfU1ogPSAoQVRBX01BWF9QUkQgKiBBVEFfUFJEX1NaKSwKKyBBVEFfUFJEX0VPVCA9ICgxIDw8IDMxKSwKKworIEFUQV9ETUFfVEFCTEVfT0ZTID0gNCwKKyBBVEFfRE1BX1NUQVRVUyA9IDIsCisgQVRBX0RNQV9DTUQgPSAwLAorIEFUQV9ETUFfV1IgPSAoMSA8PCAzKSwKKyBBVEFfRE1BX1NUQVJUID0gKDEgPDwgMCksCisgQVRBX0RNQV9JTlRSID0gKDEgPDwgMiksCisgQVRBX0RNQV9FUlIgPSAoMSA8PCAxKSwKKyBBVEFfRE1BX0FDVElWRSA9ICgxIDw8IDApLAorCisgQVRBX0hPQiA9ICgxIDw8IDcpLAorIEFUQV9OSUVOID0gKDEgPDwgMSksCisgQVRBX0xCQSA9ICgxIDw8IDYpLAorIEFUQV9ERVYxID0gKDEgPDwgNCksCisgQVRBX0RFVklDRV9PQlMgPSAoMSA8PCA3KSB8ICgxIDw8IDUpLAorIEFUQV9ERVZDVExfT0JTID0gKDEgPDwgMyksCisgQVRBX0JVU1kgPSAoMSA8PCA3KSwKKyBBVEFfRFJEWSA9ICgxIDw8IDYpLAorIEFUQV9ERiA9ICgxIDw8IDUpLAorIEFUQV9EUlEgPSAoMSA8PCAzKSwKKyBBVEFfRVJSID0gKDEgPDwgMCksCisgQVRBX1NSU1QgPSAoMSA8PCAyKSwKKyBBVEFfSUNSQyA9ICgxIDw8IDcpLAorIEFUQV9VTkMgPSAoMSA8PCA2KSwKKyBBVEFfSURORiA9ICgxIDw8IDQpLAorIEFUQV9BQk9SVEVEID0gKDEgPDwgMiksCisKKyBBVEFfUkVHX0RBVEEgPSAweDAwLAorIEFUQV9SRUdfRVJSID0gMHgwMSwKKyBBVEFfUkVHX05TRUNUID0gMHgwMiwKKyBBVEFfUkVHX0xCQUwgPSAweDAzLAorIEFUQV9SRUdfTEJBTSA9IDB4MDQsCisgQVRBX1JFR19MQkFIID0gMHgwNSwKKyBBVEFfUkVHX0RFVklDRSA9IDB4MDYsCisgQVRBX1JFR19TVEFUVVMgPSAweDA3LAorCisgQVRBX1JFR19GRUFUVVJFID0gQVRBX1JFR19FUlIsCisgQVRBX1JFR19DTUQgPSBBVEFfUkVHX1NUQVRVUywKKyBBVEFfUkVHX0JZVEVMID0gQVRBX1JFR19MQkFNLAorIEFUQV9SRUdfQllURUggPSBBVEFfUkVHX0xCQUgsCisgQVRBX1JFR19ERVZTRUwgPSBBVEFfUkVHX0RFVklDRSwKKyBBVEFfUkVHX0lSUSA9IEFUQV9SRUdfTlNFQ1QsCisKKyBBVEFfQ01EX0NIS19QT1dFUiA9IDB4RTUsCisgQVRBX0NNRF9TVEFOREJZID0gMHhFMiwKKyBBVEFfQ01EX0lETEUgPSAweEUzLAorIEFUQV9DTURfRUREID0gMHg5MCwKKyBBVEFfQ01EX0ZMVVNIID0gMHhFNywKKyBBVEFfQ01EX0ZMVVNIX0VYVCA9IDB4RUEsCisgQVRBX0NNRF9JRF9BVEEgPSAweEVDLAorIEFUQV9DTURfSURfQVRBUEkgPSAweEExLAorIEFUQV9DTURfUkVBRCA9IDB4QzgsCisgQVRBX0NNRF9SRUFEX0VYVCA9IDB4MjUsCisgQVRBX0NNRF9XUklURSA9IDB4Q0EsCisgQVRBX0NNRF9XUklURV9FWFQgPSAweDM1LAorIEFUQV9DTURfV1JJVEVfRlVBX0VYVCA9IDB4M0QsCisgQVRBX0NNRF9GUERNQV9SRUFEID0gMHg2MCwKKyBBVEFfQ01EX0ZQRE1BX1dSSVRFID0gMHg2MSwKKyBBVEFfQ01EX1BJT19SRUFEID0gMHgyMCwKKyBBVEFfQ01EX1BJT19SRUFEX0VYVCA9IDB4MjQsCisgQVRBX0NNRF9QSU9fV1JJVEUgPSAweDMwLAorIEFUQV9DTURfUElPX1dSSVRFX0VYVCA9IDB4MzQsCisgQVRBX0NNRF9SRUFEX01VTFRJID0gMHhDNCwKKyBBVEFfQ01EX1JFQURfTVVMVElfRVhUID0gMHgyOSwKKyBBVEFfQ01EX1dSSVRFX01VTFRJID0gMHhDNSwKKyBBVEFfQ01EX1dSSVRFX01VTFRJX0VYVCA9IDB4MzksCisgQVRBX0NNRF9XUklURV9NVUxUSV9GVUFfRVhUID0gMHhDRSwKKyBBVEFfQ01EX1NFVF9GRUFUVVJFUyA9IDB4RUYsCisgQVRBX0NNRF9QQUNLRVQgPSAweEEwLAorIEFUQV9DTURfVkVSSUZZID0gMHg0MCwKKyBBVEFfQ01EX1ZFUklGWV9FWFQgPSAweDQyLAorIEFUQV9DTURfU1RBTkRCWU5PVzEgPSAweEUwLAorIEFUQV9DTURfSURMRUlNTUVESUFURSA9IDB4RTEsCisgQVRBX0NNRF9JTklUX0RFVl9QQVJBTVMgPSAweDkxLAorIEFUQV9DTURfUkVBRF9OQVRJVkVfTUFYID0gMHhGOCwKKyBBVEFfQ01EX1JFQURfTkFUSVZFX01BWF9FWFQgPSAweDI3LAorIEFUQV9DTURfUkVBRF9MT0dfRVhUID0gMHgyZiwKKworIEFUQV9MT0dfU0FUQV9OQ1EgPSAweDEwLAorCisgU0VURkVBVFVSRVNfWEZFUiA9IDB4MDMsCisgWEZFUl9VRE1BXzcgPSAweDQ3LAorIFhGRVJfVURNQV82ID0gMHg0NiwKKyBYRkVSX1VETUFfNSA9IDB4NDUsCisgWEZFUl9VRE1BXzQgPSAweDQ0LAorIFhGRVJfVURNQV8zID0gMHg0MywKKyBYRkVSX1VETUFfMiA9IDB4NDIsCisgWEZFUl9VRE1BXzEgPSAweDQxLAorIFhGRVJfVURNQV8wID0gMHg0MCwKKyBYRkVSX01XX0RNQV8yID0gMHgyMiwKKyBYRkVSX01XX0RNQV8xID0gMHgyMSwKKyBYRkVSX01XX0RNQV8wID0gMHgyMCwKKyBYRkVSX1NXX0RNQV8yID0gMHgxMiwKKyBYRkVSX1NXX0RNQV8xID0gMHgxMSwKKyBYRkVSX1NXX0RNQV8wID0gMHgxMCwKKyBYRkVSX1BJT180ID0gMHgwQywKKyBYRkVSX1BJT18zID0gMHgwQiwKKyBYRkVSX1BJT18yID0gMHgwQSwKKyBYRkVSX1BJT18xID0gMHgwOSwKKyBYRkVSX1BJT18wID0gMHgwOCwKKyBYRkVSX1BJT19TTE9XID0gMHgwMCwKKworIFNFVEZFQVRVUkVTX1dDX09OID0gMHgwMiwKKyBTRVRGRUFUVVJFU19XQ19PRkYgPSAweDgyLAorCisgQVRBUElfUEtUX0RNQSA9ICgxIDw8IDApLAorIEFUQVBJX0RNQURJUiA9ICgxIDw8IDIpLAorIEFUQVBJX0NEQl9MRU4gPSAxNiwKKworIEFUQV9DQkxfTk9ORSA9IDAsCisgQVRBX0NCTF9QQVRBNDAgPSAxLAorIEFUQV9DQkxfUEFUQTgwID0gMiwKKyBBVEFfQ0JMX1BBVEFfVU5LID0gMywKKyBBVEFfQ0JMX1NBVEEgPSA0LAorCisgU0NSX1NUQVRVUyA9IDAsCisgU0NSX0VSUk9SID0gMSwKKyBTQ1JfQ09OVFJPTCA9IDIsCisgU0NSX0FDVElWRSA9IDMsCisgU0NSX05PVElGSUNBVElPTiA9IDQsCisKKyBTRVJSX0RBVEFfUkVDT1ZFUkVEID0gKDEgPDwgMCksCisgU0VSUl9DT01NX1JFQ09WRVJFRCA9ICgxIDw8IDEpLAorIFNFUlJfREFUQSA9ICgxIDw8IDgpLAorIFNFUlJfUEVSU0lTVEVOVCA9ICgxIDw8IDkpLAorIFNFUlJfUFJPVE9DT0wgPSAoMSA8PCAxMCksCisgU0VSUl9JTlRFUk5BTCA9ICgxIDw8IDExKSwKKyBTRVJSX1BIWVJEWV9DSEcgPSAoMSA8PCAxNiksCisgU0VSUl9ERVZfWENIRyA9ICgxIDw8IDI2KSwKKworIEFUQV9URkxBR19MQkE0OCA9ICgxIDw8IDApLAorIEFUQV9URkxBR19JU0FERFIgPSAoMSA8PCAxKSwKKyBBVEFfVEZMQUdfREVWSUNFID0gKDEgPDwgMiksCisgQVRBX1RGTEFHX1dSSVRFID0gKDEgPDwgMyksCisgQVRBX1RGTEFHX0xCQSA9ICgxIDw8IDQpLAorIEFUQV9URkxBR19GVUEgPSAoMSA8PCA1KSwKKyBBVEFfVEZMQUdfUE9MTElORyA9ICgxIDw8IDYpLAorfTsKKworZW51bSBhdGFfdGZfcHJvdG9jb2xzIHsKKworIEFUQV9QUk9UX1VOS05PV04sCisgQVRBX1BST1RfTk9EQVRBLAorIEFUQV9QUk9UX1BJTywKKyBBVEFfUFJPVF9ETUEsCisgQVRBX1BST1RfTkNRLAorIEFUQV9QUk9UX0FUQVBJLAorIEFUQV9QUk9UX0FUQVBJX05PREFUQSwKKyBBVEFfUFJPVF9BVEFQSV9ETUEsCit9OworCitlbnVtIGF0YV9pb2N0bHMgeworIEFUQV9JT0NfR0VUX0lPMzIgPSAweDMwOSwKKyBBVEFfSU9DX1NFVF9JTzMyID0gMHgzMjQsCit9OworCitzdHJ1Y3QgYXRhX3ByZCB7CisgdTMyIGFkZHI7CisgdTMyIGZsYWdzX2xlbjsKK307CisKK3N0cnVjdCBhdGFfdGFza2ZpbGUgeworIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisgdTggcHJvdG9jb2w7CisKKyB1OCBjdGw7CisKKyB1OCBob2JfZmVhdHVyZTsKKyB1OCBob2JfbnNlY3Q7CisgdTggaG9iX2xiYWw7CisgdTggaG9iX2xiYW07CisgdTggaG9iX2xiYWg7CisKKyB1OCBmZWF0dXJlOworIHU4IG5zZWN0OworIHU4IGxiYWw7CisgdTggbGJhbTsKKyB1OCBsYmFoOworCisgdTggZGV2aWNlOworCisgdTggY29tbWFuZDsKK307CisKKyNkZWZpbmUgYXRhX2lkX2lzX2F0YShpZCkgKCgoaWQpWzBdICYgKDEgPDwgMTUpKSA9PSAwKQorI2RlZmluZSBhdGFfaWRfaXNfY2ZhKGlkKSAoKGlkKVswXSA9PSAweDg0OEEpCisjZGVmaW5lIGF0YV9pZF9pc19zYXRhKGlkKSAoKGlkKVs5M10gPT0gMCkKKyNkZWZpbmUgYXRhX2lkX3JhaGVhZF9lbmFibGVkKGlkKSAoKGlkKVs4NV0gJiAoMSA8PCA2KSkKKyNkZWZpbmUgYXRhX2lkX3djYWNoZV9lbmFibGVkKGlkKSAoKGlkKVs4NV0gJiAoMSA8PCA1KSkKKyNkZWZpbmUgYXRhX2lkX2hwYV9lbmFibGVkKGlkKSAoKGlkKVs4NV0gJiAoMSA8PCAxMCkpCisjZGVmaW5lIGF0YV9pZF9oYXNfZnVhKGlkKSAoKGlkKVs4NF0gJiAoMSA8PCA2KSkKKyNkZWZpbmUgYXRhX2lkX2hhc19mbHVzaChpZCkgKChpZClbODNdICYgKDEgPDwgMTIpKQorI2RlZmluZSBhdGFfaWRfaGFzX2ZsdXNoX2V4dChpZCkgKChpZClbODNdICYgKDEgPDwgMTMpKQorI2RlZmluZSBhdGFfaWRfaGFzX2xiYTQ4KGlkKSAoKGlkKVs4M10gJiAoMSA8PCAxMCkpCisjZGVmaW5lIGF0YV9pZF9oYXNfaHBhKGlkKSAoKGlkKVs4Ml0gJiAoMSA8PCAxMCkpCisjZGVmaW5lIGF0YV9pZF9oYXNfd2NhY2hlKGlkKSAoKGlkKVs4Ml0gJiAoMSA8PCA1KSkKKyNkZWZpbmUgYXRhX2lkX2hhc19wbShpZCkgKChpZClbODJdICYgKDEgPDwgMykpCisjZGVmaW5lIGF0YV9pZF9oYXNfbGJhKGlkKSAoKGlkKVs0OV0gJiAoMSA8PCA5KSkKKyNkZWZpbmUgYXRhX2lkX2hhc19kbWEoaWQpICgoaWQpWzQ5XSAmICgxIDw8IDgpKQorI2RlZmluZSBhdGFfaWRfaGFzX25jcShpZCkgKChpZClbNzZdICYgKDEgPDwgOCkpCisjZGVmaW5lIGF0YV9pZF9xdWV1ZV9kZXB0aChpZCkgKCgoaWQpWzc1XSAmIDB4MWYpICsgMSkKKyNkZWZpbmUgYXRhX2lkX3JlbW92ZWFibGUoaWQpICgoaWQpWzBdICYgKDEgPDwgNykpCisjZGVmaW5lIGF0YV9pZF9oYXNfZHdvcmRfaW8oaWQpICgoaWQpWzUwXSAmICgxIDw8IDApKQorI2RlZmluZSBhdGFfaWRfdTMyKGlkLG4pICAgKCgodTMyKSAoaWQpWyhuKSArIDFdIDw8IDE2KSB8ICgodTMyKSAoaWQpWyhuKV0pKQorI2RlZmluZSBhdGFfaWRfdTY0KGlkLG4pICAgKCAoKHU2NCkgKGlkKVsobikgKyAzXSA8PCA0OCkgfCAgICgodTY0KSAoaWQpWyhuKSArIDJdIDw8IDMyKSB8ICAgKCh1NjQpIChpZClbKG4pICsgMV0gPDwgMTYpIHwgICAoKHU2NCkgKGlkKVsobikgKyAwXSkgKQorCisjZGVmaW5lIGF0YV9pZF9jZGJfaW50cihpZCkgKCgoaWQpWzBdICYgMHg2MCkgPT0gMHgyMCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYXRtLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYXRtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzliY2Q3MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hdG0uaApAQCAtMCwwICsxLDE2MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfQVRNX0gKKyNkZWZpbmUgX0xJTlVYX0FUTV9ICisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L2F0bWFwaS5oPgorI2luY2x1ZGUgPGxpbnV4L2F0bXNhcC5oPgorI2luY2x1ZGUgPGxpbnV4L2F0bWlvYy5oPgorCisjZGVmaW5lIEFUTV9DRUxMX1NJWkUgNTMgIAorI2RlZmluZSBBVE1fQ0VMTF9QQVlMT0FEIDQ4ICAKKyNkZWZpbmUgQVRNX0FBTDBfU0RVIDUyICAKKyNkZWZpbmUgQVRNX01BWF9BQUwzNF9QRFUgNjU1MzUgIAorI2RlZmluZSBBVE1fQUFMNV9UUkFJTEVSIDggIAorI2RlZmluZSBBVE1fTUFYX0FBTDVfUERVIDY1NTM1ICAKKyNkZWZpbmUgQVRNX01BWF9DRFYgOTk5OSAgCisjZGVmaW5lIEFUTV9OT1RfUlNWX1ZDSSAzMiAgCisKKyNkZWZpbmUgQVRNX01BWF9WUEkgMjU1ICAKKyNkZWZpbmUgQVRNX01BWF9WUElfTk5JIDQwOTYgIAorI2RlZmluZSBBVE1fTUFYX1ZDSSA2NTUzNSAgCisKKyNkZWZpbmUgQVRNX05PX0FBTCAwICAKKyNkZWZpbmUgQVRNX0FBTDAgMTMgIAorI2RlZmluZSBBVE1fQUFMMSAxICAKKyNkZWZpbmUgQVRNX0FBTDIgMiAgCisjZGVmaW5lIEFUTV9BQUwzNCAzICAKKyNkZWZpbmUgQVRNX0FBTDUgNSAgCisKKyNkZWZpbmUgX19TT19FTkNPREUobCxuLHQpICgoKChsKSAmIDB4MUZGKSA8PCAyMikgfCAoKG4pIDw8IDE2KSB8ICAgc2l6ZW9mKHQpKQorI2RlZmluZSBfX1NPX0xFVkVMX01BVENIKGMsbSkgKCgoYykgPj4gMjIpID09ICgobSkgJiAweDFGRikpCisjZGVmaW5lIF9fU09fTlVNQkVSKGMpICgoKGMpID4+IDE2KSAmIDB4M2YpCisjZGVmaW5lIF9fU09fU0laRShjKSAoKGMpICYgMHgzZmZmKQorCisjZGVmaW5lIFNPX1NFVENMUCBfX1NPX0VOQ09ERShTT0xfQVRNLDAsaW50KQorCisjZGVmaW5lIFNPX0NJUkFOR0UgX19TT19FTkNPREUoU09MX0FUTSwxLHN0cnVjdCBhdG1fY2lyYW5nZSkKKworI2RlZmluZSBTT19BVE1RT1MgX19TT19FTkNPREUoU09MX0FUTSwyLHN0cnVjdCBhdG1fcW9zKQorCisjZGVmaW5lIFNPX0FUTVNBUCBfX1NPX0VOQ09ERShTT0xfQVRNLDMsc3RydWN0IGF0bV9zYXApCisKKyNkZWZpbmUgU09fQVRNUFZDIF9fU09fRU5DT0RFKFNPTF9BVE0sNCxzdHJ1Y3Qgc29ja2FkZHJfYXRtcHZjKQorCisjZGVmaW5lIFNPX01VTFRJUE9JTlQgX19TT19FTkNPREUoU09MX0FUTSwgNSwgaW50KQorCisjZGVmaW5lIEFUTV9IRFJfR0ZDX01BU0sgMHhmMDAwMDAwMAorI2RlZmluZSBBVE1fSERSX0dGQ19TSElGVCAyOAorI2RlZmluZSBBVE1fSERSX1ZQSV9NQVNLIDB4MGZmMDAwMDAKKyNkZWZpbmUgQVRNX0hEUl9WUElfU0hJRlQgMjAKKyNkZWZpbmUgQVRNX0hEUl9WQ0lfTUFTSyAweDAwMGZmZmYwCisjZGVmaW5lIEFUTV9IRFJfVkNJX1NISUZUIDQKKyNkZWZpbmUgQVRNX0hEUl9QVElfTUFTSyAweDAwMDAwMDBlCisjZGVmaW5lIEFUTV9IRFJfUFRJX1NISUZUIDEKKyNkZWZpbmUgQVRNX0hEUl9DTFAgMHgwMDAwMDAwMQorCisjZGVmaW5lIEFUTV9QVElfVVMwIDAgIAorI2RlZmluZSBBVE1fUFRJX1VTMSAxICAKKyNkZWZpbmUgQVRNX1BUSV9VQ0VTMCAyICAKKyNkZWZpbmUgQVRNX1BUSV9VQ0VTMSAzICAKKyNkZWZpbmUgQVRNX1BUSV9TRUdGNSA0ICAKKyNkZWZpbmUgQVRNX1BUSV9FMkVGNSA1ICAKKyNkZWZpbmUgQVRNX1BUSV9SU1ZfUk0gNiAgCisjZGVmaW5lIEFUTV9QVElfUlNWIDcgIAorCisjZGVmaW5lIEFUTV9OT05FIDAgIAorI2RlZmluZSBBVE1fVUJSIDEKKyNkZWZpbmUgQVRNX0NCUiAyCisjZGVmaW5lIEFUTV9WQlIgMworI2RlZmluZSBBVE1fQUJSIDQKKyNkZWZpbmUgQVRNX0FOWUNMQVNTIDUgIAorCisjZGVmaW5lIEFUTV9NQVhfUENSIC0xICAKKworc3RydWN0IGF0bV90cmFmcHJtIHsKKyB1bnNpZ25lZCBjaGFyIHRyYWZmaWNfY2xhc3M7CisgaW50IG1heF9wY3I7CisgaW50IHBjcjsKKyBpbnQgbWluX3BjcjsKKyBpbnQgbWF4X2NkdjsKKyBpbnQgbWF4X3NkdTsKKworIHVuc2lnbmVkIGludCBpY3I7CisgdW5zaWduZWQgaW50IHRiZTsKKyB1bnNpZ25lZCBpbnQgZnJ0dCA6IDI0OworIHVuc2lnbmVkIGludCByaWYgOiA0OworIHVuc2lnbmVkIGludCByZGYgOiA0OworIHVuc2lnbmVkIGludCBucm1fcHJlcyA6MTsKKyB1bnNpZ25lZCBpbnQgdHJtX3ByZXMgOjE7CisgdW5zaWduZWQgaW50IGFkdGZfcHJlcyA6MTsKKyB1bnNpZ25lZCBpbnQgY2RmX3ByZXMgOjE7CisgdW5zaWduZWQgaW50IG5ybSA6MzsKKyB1bnNpZ25lZCBpbnQgdHJtIDozOworIHVuc2lnbmVkIGludCBhZHRmIDoxMDsKKyB1bnNpZ25lZCBpbnQgY2RmIDozOworIHVuc2lnbmVkIGludCBzcGFyZSA6OTsKK307CisKK3N0cnVjdCBhdG1fcW9zIHsKKyBzdHJ1Y3QgYXRtX3RyYWZwcm0gdHh0cDsKKyBzdHJ1Y3QgYXRtX3RyYWZwcm0gcnh0cCBfX0FUTV9BUElfQUxJR047CisKKyB1bnNpZ25lZCBjaGFyIGFhbCBfX0FUTV9BUElfQUxJR047Cit9OworCisjZGVmaW5lIEFUTV9JVEZfQU5ZIC0xICAKKyNkZWZpbmUgQVRNX1ZQSV9BTlkgLTEKKyNkZWZpbmUgQVRNX1ZDSV9BTlkgLTEKKyNkZWZpbmUgQVRNX1ZQSV9VTlNQRUMgLTIKKyNkZWZpbmUgQVRNX1ZDSV9VTlNQRUMgLTIKKworc3RydWN0IHNvY2thZGRyX2F0bXB2YyB7CisgdW5zaWduZWQgc2hvcnQgc2FwX2ZhbWlseTsKKyBzdHJ1Y3QgeworIHNob3J0IGl0ZjsKKyBzaG9ydCB2cGk7CisgaW50IHZjaTsKKyB9IHNhcF9hZGRyIF9fQVRNX0FQSV9BTElHTjsKK307CisKKyNkZWZpbmUgQVRNX0VTQV9MRU4gMjAgIAorI2RlZmluZSBBVE1fRTE2NF9MRU4gMTIgIAorCisjZGVmaW5lIEFUTV9BRklfRENDIDB4MzkgIAorI2RlZmluZSBBVE1fQUZJX0lDRCAweDQ3ICAKKyNkZWZpbmUgQVRNX0FGSV9FMTY0IDB4NDUgIAorI2RlZmluZSBBVE1fQUZJX0xPQ0FMIDB4NDkgICAKKworI2RlZmluZSBBVE1fQUZJX0RDQ19HUk9VUCAweEJEICAKKyNkZWZpbmUgQVRNX0FGSV9JQ0RfR1JPVVAgMHhDNSAgCisjZGVmaW5lIEFUTV9BRklfRTE2NF9HUk9VUCAweEMzICAKKyNkZWZpbmUgQVRNX0FGSV9MT0NBTF9HUk9VUCAweEM3ICAKKworI2RlZmluZSBBVE1fTElKX05PTkUgMCAgCisjZGVmaW5lIEFUTV9MSUogMSAgCisjZGVmaW5lIEFUTV9MSUpfUlBKIDIgIAorI2RlZmluZSBBVE1fTElKX05KIDMgIAorCitzdHJ1Y3Qgc29ja2FkZHJfYXRtc3ZjIHsKKyB1bnNpZ25lZCBzaG9ydCBzYXNfZmFtaWx5OworIHN0cnVjdCB7CisgdW5zaWduZWQgY2hhciBwcnZbQVRNX0VTQV9MRU5dOworIGNoYXIgcHViW0FUTV9FMTY0X0xFTisxXTsKKworIGNoYXIgbGlqX3R5cGU7CisgdWludDMyX3QgbGlqX2lkOworIH0gc2FzX2FkZHIgX19BVE1fQVBJX0FMSUdOOworfTsKKwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBhdG1fYmFja2VuZF90OworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYXRtYXBpLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYXRtYXBpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVlNWNhZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hdG1hcGkuaApAQCAtMCwwICsxLDI0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9BVE1BUElfSAorI2RlZmluZSBfTElOVVhfQVRNQVBJX0gKKworI2lmIGRlZmluZWQoX19zcGFyY19fKSB8fCBkZWZpbmVkKF9faWE2NF9fKQorCisjZGVmaW5lIF9fQVRNX0FQSV9BTElHTiBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSkKKyNlbHNlCisjZGVmaW5lIF9fQVRNX0FQSV9BTElHTgorI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgY2hhciBfWzhdOyB9IF9fQVRNX0FQSV9BTElHTiBhdG1fa3B0cl90OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hdG1kZXYuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hdG1kZXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2JhZWIwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2F0bWRldi5oCkBAIC0wLDAgKzEsMTYxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIExJTlVYX0FUTURFVl9ICisjZGVmaW5lIExJTlVYX0FUTURFVl9ICisKKyNpbmNsdWRlIDxsaW51eC9hdG1hcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9hdG0uaD4KKyNpbmNsdWRlIDxsaW51eC9hdG1pb2MuaD4KKworI2RlZmluZSBFU0lfTEVOIDYKKworI2RlZmluZSBBVE1fT0MzX1BDUiAoMTU1NTIwMDAwLzI3MCoyNjAvOC81MykKKworI2RlZmluZSBBVE1fMjVfUENSICgoMjU2MDAwMDAvOC04MDAwKS81NCkKKworI2RlZmluZSBBVE1fT0MxMl9QQ1IgKDYyMjA4MDAwMC8xMDgwKjEwNDAvOC81MykKKworI2RlZmluZSBBVE1fRFMzX1BDUiAoODAwMCoxMikKKworI2RlZmluZSBfX0FBTF9TVEFUX0lURU1TICAgX19IQU5ETEVfSVRFTSh0eCk7ICAgICBfX0hBTkRMRV9JVEVNKHR4X2Vycik7ICAgICBfX0hBTkRMRV9JVEVNKHJ4KTsgICAgIF9fSEFORExFX0lURU0ocnhfZXJyKTsgICAgIF9fSEFORExFX0lURU0ocnhfZHJvcCk7ICAKKworc3RydWN0IGF0bV9hYWxfc3RhdHMgeworI2RlZmluZSBfX0hBTkRMRV9JVEVNKGkpIGludCBpCisgX19BQUxfU1RBVF9JVEVNUworI3VuZGVmIF9fSEFORExFX0lURU0KK307CisKK3N0cnVjdCBhdG1fZGV2X3N0YXRzIHsKKyBzdHJ1Y3QgYXRtX2FhbF9zdGF0cyBhYWwwOworIHN0cnVjdCBhdG1fYWFsX3N0YXRzIGFhbDM0OworIHN0cnVjdCBhdG1fYWFsX3N0YXRzIGFhbDU7Cit9IF9fQVRNX0FQSV9BTElHTjsKKworI2RlZmluZSBBVE1fR0VUTElOS1JBVEUgX0lPVygnYScsQVRNSU9DX0lURisxLHN0cnVjdCBhdG1pZl9zaW9jKQorCisjZGVmaW5lIEFUTV9HRVROQU1FUyBfSU9XKCdhJyxBVE1JT0NfSVRGKzMsc3RydWN0IGF0bV9pb2J1ZikKKworI2RlZmluZSBBVE1fR0VUVFlQRSBfSU9XKCdhJyxBVE1JT0NfSVRGKzQsc3RydWN0IGF0bWlmX3Npb2MpCisKKyNkZWZpbmUgQVRNX0dFVEVTSSBfSU9XKCdhJyxBVE1JT0NfSVRGKzUsc3RydWN0IGF0bWlmX3Npb2MpCisKKyNkZWZpbmUgQVRNX0dFVEFERFIgX0lPVygnYScsQVRNSU9DX0lURis2LHN0cnVjdCBhdG1pZl9zaW9jKQorCisjZGVmaW5lIEFUTV9SU1RBRERSIF9JT1coJ2EnLEFUTUlPQ19JVEYrNyxzdHJ1Y3QgYXRtaWZfc2lvYykKKworI2RlZmluZSBBVE1fQUREQUREUiBfSU9XKCdhJyxBVE1JT0NfSVRGKzgsc3RydWN0IGF0bWlmX3Npb2MpCisKKyNkZWZpbmUgQVRNX0RFTEFERFIgX0lPVygnYScsQVRNSU9DX0lURis5LHN0cnVjdCBhdG1pZl9zaW9jKQorCisjZGVmaW5lIEFUTV9HRVRDSVJBTkdFIF9JT1coJ2EnLEFUTUlPQ19JVEYrMTAsc3RydWN0IGF0bWlmX3Npb2MpCisKKyNkZWZpbmUgQVRNX1NFVENJUkFOR0UgX0lPVygnYScsQVRNSU9DX0lURisxMSxzdHJ1Y3QgYXRtaWZfc2lvYykKKworI2RlZmluZSBBVE1fU0VURVNJIF9JT1coJ2EnLEFUTUlPQ19JVEYrMTIsc3RydWN0IGF0bWlmX3Npb2MpCisKKyNkZWZpbmUgQVRNX1NFVEVTSUYgX0lPVygnYScsQVRNSU9DX0lURisxMyxzdHJ1Y3QgYXRtaWZfc2lvYykKKworI2RlZmluZSBBVE1fQURETEVDU0FERFIgX0lPVygnYScsIEFUTUlPQ19JVEYrMTQsIHN0cnVjdCBhdG1pZl9zaW9jKQorCisjZGVmaW5lIEFUTV9ERUxMRUNTQUREUiBfSU9XKCdhJywgQVRNSU9DX0lURisxNSwgc3RydWN0IGF0bWlmX3Npb2MpCisKKyNkZWZpbmUgQVRNX0dFVExFQ1NBRERSIF9JT1coJ2EnLCBBVE1JT0NfSVRGKzE2LCBzdHJ1Y3QgYXRtaWZfc2lvYykKKworI2RlZmluZSBBVE1fR0VUU1RBVCBfSU9XKCdhJyxBVE1JT0NfU0FSQ09NKzAsc3RydWN0IGF0bWlmX3Npb2MpCisKKyNkZWZpbmUgQVRNX0dFVFNUQVRaIF9JT1coJ2EnLEFUTUlPQ19TQVJDT00rMSxzdHJ1Y3QgYXRtaWZfc2lvYykKKworI2RlZmluZSBBVE1fR0VUTE9PUCBfSU9XKCdhJyxBVE1JT0NfU0FSQ09NKzIsc3RydWN0IGF0bWlmX3Npb2MpCisKKyNkZWZpbmUgQVRNX1NFVExPT1AgX0lPVygnYScsQVRNSU9DX1NBUkNPTSszLHN0cnVjdCBhdG1pZl9zaW9jKQorCisjZGVmaW5lIEFUTV9RVUVSWUxPT1AgX0lPVygnYScsQVRNSU9DX1NBUkNPTSs0LHN0cnVjdCBhdG1pZl9zaW9jKQorCisjZGVmaW5lIEFUTV9TRVRTQyBfSU9XKCdhJyxBVE1JT0NfU1BFQ0lBTCsxLGludCkKKworI2RlZmluZSBBVE1fU0VUQkFDS0VORCBfSU9XKCdhJyxBVE1JT0NfU1BFQ0lBTCsyLGF0bV9iYWNrZW5kX3QpCisKKyNkZWZpbmUgQVRNX05FV0JBQ0tFTkRJRiBfSU9XKCdhJyxBVE1JT0NfU1BFQ0lBTCszLGF0bV9iYWNrZW5kX3QpCisKKyNkZWZpbmUgQVRNX0FERFBBUlRZIF9JT1coJ2EnLCBBVE1JT0NfU1BFQ0lBTCs0LHN0cnVjdCBhdG1faW9idWYpCisKKyNkZWZpbmUgQVRNX0RST1BQQVJUWSBfSU9XKCdhJywgQVRNSU9DX1NQRUNJQUwrNSxpbnQpCisKKyNkZWZpbmUgQVRNX0JBQ0tFTkRfUkFXIDAgCisjZGVmaW5lIEFUTV9CQUNLRU5EX1BQUCAxICAKKyNkZWZpbmUgQVRNX0JBQ0tFTkRfQlIyNjg0IDIgIAorCisjZGVmaW5lIEFUTV9JVEZUWVBfTEVOIDggIAorCisjZGVmaW5lIF9fQVRNX0xNX05PTkUgMCAgCisjZGVmaW5lIF9fQVRNX0xNX0FBTCAxICAKKyNkZWZpbmUgX19BVE1fTE1fQVRNIDIgIAorCisjZGVmaW5lIF9fQVRNX0xNX1BIWSA4ICAKKyNkZWZpbmUgX19BVE1fTE1fQU5BTE9HIDE2ICAKKworI2RlZmluZSBfX0FUTV9MTV9NS0xPQyhuKSAoKG4pKSAgCisjZGVmaW5lIF9fQVRNX0xNX01LUk1UKG4pICgobikgPDwgOCkgIAorCisjZGVmaW5lIF9fQVRNX0xNX1hUTE9DKG4pICgobikgJiAweGZmKQorI2RlZmluZSBfX0FUTV9MTV9YVFJNVChuKSAoKChuKSA+PiA4KSAmIDB4ZmYpCisKKyNkZWZpbmUgQVRNX0xNX05PTkUgMCAgCisKKyNkZWZpbmUgQVRNX0xNX0xPQ19BQUwgX19BVE1fTE1fTUtMT0MoX19BVE1fTE1fQUFMKQorI2RlZmluZSBBVE1fTE1fTE9DX0FUTSBfX0FUTV9MTV9NS0xPQyhfX0FUTV9MTV9BVE0pCisjZGVmaW5lIEFUTV9MTV9MT0NfUEhZIF9fQVRNX0xNX01LTE9DKF9fQVRNX0xNX1BIWSkKKyNkZWZpbmUgQVRNX0xNX0xPQ19BTkFMT0cgX19BVE1fTE1fTUtMT0MoX19BVE1fTE1fQU5BTE9HKQorCisjZGVmaW5lIEFUTV9MTV9STVRfQUFMIF9fQVRNX0xNX01LUk1UKF9fQVRNX0xNX0FBTCkKKyNkZWZpbmUgQVRNX0xNX1JNVF9BVE0gX19BVE1fTE1fTUtSTVQoX19BVE1fTE1fQVRNKQorI2RlZmluZSBBVE1fTE1fUk1UX1BIWSBfX0FUTV9MTV9NS1JNVChfX0FUTV9MTV9QSFkpCisjZGVmaW5lIEFUTV9MTV9STVRfQU5BTE9HIF9fQVRNX0xNX01LUk1UKF9fQVRNX0xNX0FOQUxPRykKKworc3RydWN0IGF0bV9pb2J1ZiB7CisgaW50IGxlbmd0aDsKKyB2b2lkIF9fdXNlciAqYnVmZmVyOworfTsKKworI2RlZmluZSBBVE1fQ0lfTUFYIC0xICAKKworc3RydWN0IGF0bV9jaXJhbmdlIHsKKyBzaWduZWQgY2hhciB2cGlfYml0czsKKyBzaWduZWQgY2hhciB2Y2lfYml0czsKK307CisKKyNkZWZpbmUgQVRNX1NDX1JYIDEwMjQgIAorI2RlZmluZSBBVE1fU0NfVFggMjA0OCAgCisKKyNkZWZpbmUgQVRNX0JBQ0tMT0dfREVGQVVMVCAzMiAgCisKKyNkZWZpbmUgQVRNX01GX0lNTUVEIDEgIAorI2RlZmluZSBBVE1fTUZfSU5DX1JTViAyICAKKyNkZWZpbmUgQVRNX01GX0lOQ19TSFAgNCAgCisjZGVmaW5lIEFUTV9NRl9ERUNfUlNWIDggIAorI2RlZmluZSBBVE1fTUZfREVDX1NIUCAxNiAgCisjZGVmaW5lIEFUTV9NRl9CV0QgMzIgIAorCisjZGVmaW5lIEFUTV9NRl9TRVQgKEFUTV9NRl9JTkNfUlNWIHwgQVRNX01GX0lOQ19TSFAgfCBBVE1fTUZfREVDX1JTViB8ICAgQVRNX01GX0RFQ19TSFAgfCBBVE1fTUZfQldEKQorCisjZGVmaW5lIEFUTV9WU19JRExFIDAgIAorI2RlZmluZSBBVE1fVlNfQ09OTkVDVEVEIDEgIAorI2RlZmluZSBBVE1fVlNfQ0xPU0lORyAyICAKKyNkZWZpbmUgQVRNX1ZTX0xJU1RFTiAzICAKKyNkZWZpbmUgQVRNX1ZTX0lOVVNFIDQgIAorI2RlZmluZSBBVE1fVlNfQk9VTkQgNSAgCisKKyNkZWZpbmUgQVRNX1ZTMlRYVF9NQVAgICAiSURMRSIsICJDT05ORUNURUQiLCAiQ0xPU0lORyIsICJMSVNURU4iLCAiSU5VU0UiLCAiQk9VTkQiCisKKyNkZWZpbmUgQVRNX1ZGMlRYVF9NQVAgICAiQUREUiIsICJSRUFEWSIsICJQQVJUSUFMIiwgIlJFR0lTIiwgICAiUkVMRUFTRUQiLCAiSEFTUU9TIiwgIkxJU1RFTiIsICJNRVRBIiwgICAiMjU2IiwgIjUxMiIsICIxMDI0IiwgIjIwNDgiLCAgICJTRVNTSU9OIiwgIkhBU1NBUCIsICJCT1VORCIsICJDTE9TRSIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYXRtaW9jLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYXRtaW9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAwNDMzOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hdG1pb2MuaApAQCAtMCwwICsxLDQwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9BVE1JT0NfSAorI2RlZmluZSBfTElOVVhfQVRNSU9DX0gKKworI2luY2x1ZGUgPGFzbS9pb2N0bC5oPgorCisjZGVmaW5lIEFUTUlPQ19QSFlDT00gMHgwMCAgCisjZGVmaW5lIEFUTUlPQ19QSFlDT01fRU5EIDB4MGYKKyNkZWZpbmUgQVRNSU9DX1BIWVRZUCAweDEwICAKKyNkZWZpbmUgQVRNSU9DX1BIWVRZUF9FTkQgMHgyZgorI2RlZmluZSBBVE1JT0NfUEhZUFJWIDB4MzAgIAorI2RlZmluZSBBVE1JT0NfUEhZUFJWX0VORCAweDRmCisjZGVmaW5lIEFUTUlPQ19TQVJDT00gMHg1MCAgCisjZGVmaW5lIEFUTUlPQ19TQVJDT01fRU5EIDB4NTAKKyNkZWZpbmUgQVRNSU9DX1NBUlBSViAweDYwICAKKyNkZWZpbmUgQVRNSU9DX1NBUlBSVl9FTkQgMHg3ZgorI2RlZmluZSBBVE1JT0NfSVRGIDB4ODAgIAorI2RlZmluZSBBVE1JT0NfSVRGX0VORCAweDhmCisjZGVmaW5lIEFUTUlPQ19CQUNLRU5EIDB4OTAgIAorI2RlZmluZSBBVE1JT0NfQkFDS0VORF9FTkQgMHhhZgorCisjZGVmaW5lIEFUTUlPQ19BUkVRVUlQQSAweGMwICAKKyNkZWZpbmUgQVRNSU9DX0xBTkUgMHhkMCAgCisjZGVmaW5lIEFUTUlPQ19NUE9BIDB4ZDggIAorI2RlZmluZSBBVE1JT0NfQ0xJUCAweGUwICAKKyNkZWZpbmUgQVRNSU9DX0NMSVBfRU5EIDB4ZWYKKyNkZWZpbmUgQVRNSU9DX1NQRUNJQUwgMHhmMCAgCisjZGVmaW5lIEFUTUlPQ19TUEVDSUFMX0VORCAweGZmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2F0bXBwcC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2F0bXBwcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMzBjMzIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYXRtcHBwLmgKQEAgLTAsMCArMSwyNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfQVRNUFBQX0gKKyNkZWZpbmUgX0xJTlVYX0FUTVBQUF9ICisKKyNpbmNsdWRlIDxsaW51eC9hdG0uaD4KKworI2RlZmluZSBQUFBPQVRNX0VOQ0FQU19BVVRPREVURUNUICgwKQorI2RlZmluZSBQUFBPQVRNX0VOQ0FQU19WQyAoMSkKKyNkZWZpbmUgUFBQT0FUTV9FTkNBUFNfTExDICgyKQorCitzdHJ1Y3QgYXRtX2JhY2tlbmRfcHBwIHsKKyBhdG1fYmFja2VuZF90IGJhY2tlbmRfbnVtOworIGludCBlbmNhcHM7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hdG1zYXAuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hdG1zYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTZmNzVmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2F0bXNhcC5oCkBAIC0wLDAgKzEsMTE3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9BVE1TQVBfSAorI2RlZmluZSBfTElOVVhfQVRNU0FQX0gKKworI2luY2x1ZGUgPGxpbnV4L2F0bWFwaS5oPgorCisjZGVmaW5lIEFUTV9MMl9OT05FIDAgIAorI2RlZmluZSBBVE1fTDJfSVNPMTc0NSAweDAxICAKKyNkZWZpbmUgQVRNX0wyX1EyOTEgMHgwMiAgCisjZGVmaW5lIEFUTV9MMl9YMjVfTEwgMHgwNiAgCisjZGVmaW5lIEFUTV9MMl9YMjVfTUwgMHgwNyAgCisjZGVmaW5lIEFUTV9MMl9MQVBCIDB4MDggIAorI2RlZmluZSBBVE1fTDJfSERMQ19BUk0gMHgwOSAgCisjZGVmaW5lIEFUTV9MMl9IRExDX05STSAweDBhICAKKyNkZWZpbmUgQVRNX0wyX0hETENfQUJNIDB4MGIgIAorI2RlZmluZSBBVE1fTDJfSVNPODgwMiAweDBjICAKKyNkZWZpbmUgQVRNX0wyX1g3NSAweDBkICAKKyNkZWZpbmUgQVRNX0wyX1E5MjIgMHgwZSAgCisjZGVmaW5lIEFUTV9MMl9VU0VSIDB4MTAgIAorI2RlZmluZSBBVE1fTDJfSVNPNzc3NiAweDExICAKKworI2RlZmluZSBBVE1fTDNfTk9ORSAwICAKKyNkZWZpbmUgQVRNX0wzX1gyNSAweDA2ICAKKyNkZWZpbmUgQVRNX0wzX0lTTzgyMDggMHgwNyAgCisjZGVmaW5lIEFUTV9MM19YMjIzIDB4MDggIAorI2RlZmluZSBBVE1fTDNfSVNPODQ3MyAweDA5ICAKKyNkZWZpbmUgQVRNX0wzX1Q3MCAweDBhICAKKyNkZWZpbmUgQVRNX0wzX1RSOTU3NyAweDBiICAKKyNkZWZpbmUgQVRNX0wzX0gzMTAgMHgwYyAgCisjZGVmaW5lIEFUTV9MM19IMzIxIDB4MGQgIAorI2RlZmluZSBBVE1fTDNfVVNFUiAweDEwICAKKworI2RlZmluZSBBVE1fSExfTk9ORSAwICAKKyNkZWZpbmUgQVRNX0hMX0lTTyAweDAxICAKKyNkZWZpbmUgQVRNX0hMX1VTRVIgMHgwMiAgCisjZGVmaW5lIEFUTV9ITF9ITFAgMHgwMyAgCisjZGVmaW5lIEFUTV9ITF9WRU5ET1IgMHgwNCAgCisKKyNkZWZpbmUgQVRNX0lNRF9OT05FIDAgIAorI2RlZmluZSBBVE1fSU1EX05PUk1BTCAxICAKKyNkZWZpbmUgQVRNX0lNRF9FWFRFTkRFRCAyICAKKworI2RlZmluZSBBVE1fVFRfTk9ORSAwICAKKyNkZWZpbmUgQVRNX1RUX1JYIDEgIAorI2RlZmluZSBBVE1fVFRfVFggMiAgCisjZGVmaW5lIEFUTV9UVF9SWFRYIDMgIAorCisjZGVmaW5lIEFUTV9NQ19OT05FIDAgIAorI2RlZmluZSBBVE1fTUNfVFMgMSAgCisjZGVmaW5lIEFUTV9NQ19UU19GRUMgMiAgCisjZGVmaW5lIEFUTV9NQ19QUyAzICAKKyNkZWZpbmUgQVRNX01DX1BTX0ZFQyA0ICAKKyNkZWZpbmUgQVRNX01DX0gyMjEgNSAgCisKKyNkZWZpbmUgQVRNX01BWF9ITEkgOCAgCisKK3N0cnVjdCBhdG1fYmxsaSB7CisgdW5zaWduZWQgY2hhciBsMl9wcm90bzsKKyB1bmlvbiB7Cisgc3RydWN0IHsKKyB1bnNpZ25lZCBjaGFyIG1vZGU7CisKKyB1bnNpZ25lZCBjaGFyIHdpbmRvdzsKKyB9IGl0dTsKKyB1bnNpZ25lZCBjaGFyIHVzZXI7CisgfSBsMjsKKyB1bnNpZ25lZCBjaGFyIGwzX3Byb3RvOworIHVuaW9uIHsKKyBzdHJ1Y3QgeworIHVuc2lnbmVkIGNoYXIgbW9kZTsKKworIHVuc2lnbmVkIGNoYXIgZGVmX3NpemU7CisKKyB1bnNpZ25lZCBjaGFyIHdpbmRvdzsKKyB9IGl0dTsKKyB1bnNpZ25lZCBjaGFyIHVzZXI7Cisgc3RydWN0IHsKKyB1bnNpZ25lZCBjaGFyIHRlcm1fdHlwZTsKKyB1bnNpZ25lZCBjaGFyIGZ3X21weF9jYXA7CisKKyB1bnNpZ25lZCBjaGFyIGJ3X21weF9jYXA7CisKKyB9IGgzMTA7Cisgc3RydWN0IHsKKyB1bnNpZ25lZCBjaGFyIGlwaTsKKyB1bnNpZ25lZCBjaGFyIHNuYXBbNV07CisKKyB9IHRyOTU3NzsKKyB9IGwzOworfSBfX0FUTV9BUElfQUxJR047CisKK3N0cnVjdCBhdG1fYmhsaSB7CisgdW5zaWduZWQgY2hhciBobF90eXBlOworIHVuc2lnbmVkIGNoYXIgaGxfbGVuZ3RoOworCisgdW5zaWduZWQgY2hhciBobF9pbmZvW0FUTV9NQVhfSExJXTsKK307CisKKyNkZWZpbmUgQVRNX01BWF9CTExJIDMgIAorCitzdHJ1Y3QgYXRtX3NhcCB7Cisgc3RydWN0IGF0bV9iaGxpIGJobGk7Cisgc3RydWN0IGF0bV9ibGxpIGJsbGlbQVRNX01BWF9CTExJXSBfX0FUTV9BUElfQUxJR047CisKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2F0dHJpYnV0ZV9jb250YWluZXIuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hdHRyaWJ1dGVfY29udGFpbmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE5YmZiMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hdHRyaWJ1dGVfY29udGFpbmVyLmgKQEAgLTAsMCArMSwzNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQVRUUklCVVRFX0NPTlRBSU5FUl9IXworI2RlZmluZSBfQVRUUklCVVRFX0NPTlRBSU5FUl9IXworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKworc3RydWN0IGF0dHJpYnV0ZV9jb250YWluZXIgeworIHN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKKyBzdHJ1Y3Qga2xpc3QgY29udGFpbmVyczsKKyBzdHJ1Y3QgY2xhc3MgKmNsYXNzOworIHN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlICoqYXR0cnM7CisgaW50ICgqbWF0Y2gpKHN0cnVjdCBhdHRyaWJ1dGVfY29udGFpbmVyICosIHN0cnVjdCBkZXZpY2UgKik7CisjZGVmaW5lIEFUVFJJQlVURV9DT05UQUlORVJfTk9fQ0xBU1NERVZTIDB4MDEKKyB1bnNpZ25lZCBsb25nIGZsYWdzOworfTsKKworc3RydWN0IGF0dHJpYnV0ZV9jb250YWluZXIgKmF0dHJpYnV0ZV9jb250YWluZXJfY2xhc3NkZXZfdG9fY29udGFpbmVyKHN0cnVjdCBjbGFzc19kZXZpY2UgKik7CitzdHJ1Y3QgY2xhc3NfZGV2aWNlICphdHRyaWJ1dGVfY29udGFpbmVyX2ZpbmRfY2xhc3NfZGV2aWNlKHN0cnVjdCBhdHRyaWJ1dGVfY29udGFpbmVyICosIHN0cnVjdCBkZXZpY2UgKik7CitzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSAqKmF0dHJpYnV0ZV9jb250YWluZXJfY2xhc3NkZXZfdG9fYXR0cnMoY29uc3Qgc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NkZXYpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hdXRvX2ZzLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYXV0b19mcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3MTFjYzQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYXV0b19mcy5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX0FVVE9fRlNfSAorI2RlZmluZSBfTElOVVhfQVVUT19GU19ICisKKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorCisjZGVmaW5lIEFVVE9GU19QUk9UT19WRVJTSU9OIDMKKworI2RlZmluZSBBVVRPRlNfTUFYX1BST1RPX1ZFUlNJT04gQVVUT0ZTX1BST1RPX1ZFUlNJT04KKyNkZWZpbmUgQVVUT0ZTX01JTl9QUk9UT19WRVJTSU9OIEFVVE9GU19QUk9UT19WRVJTSU9OCisKKyNpZiBkZWZpbmVkKF9fc3BhcmNfXykgfHwgZGVmaW5lZChfX21pcHNfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBkZWZpbmVkKF9fcG93ZXJwY19fKSB8fCBkZWZpbmVkKF9fczM5MF9fKQordHlwZWRlZiB1bnNpZ25lZCBpbnQgYXV0b2ZzX3dxdF90OworI2Vsc2UKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBhdXRvZnNfd3F0X3Q7CisjZW5kaWYKKworI2RlZmluZSBhdXRvZnNfcHR5cGVfbWlzc2luZyAwICAKKyNkZWZpbmUgYXV0b2ZzX3B0eXBlX2V4cGlyZSAxICAKKworc3RydWN0IGF1dG9mc19wYWNrZXRfaGRyIHsKKyBpbnQgcHJvdG9fdmVyc2lvbjsKKyBpbnQgdHlwZTsKK307CisKK3N0cnVjdCBhdXRvZnNfcGFja2V0X21pc3NpbmcgeworIHN0cnVjdCBhdXRvZnNfcGFja2V0X2hkciBoZHI7CisgYXV0b2ZzX3dxdF90IHdhaXRfcXVldWVfdG9rZW47CisgaW50IGxlbjsKKyBjaGFyIG5hbWVbTkFNRV9NQVgrMV07Cit9OworCitzdHJ1Y3QgYXV0b2ZzX3BhY2tldF9leHBpcmUgeworIHN0cnVjdCBhdXRvZnNfcGFja2V0X2hkciBoZHI7CisgaW50IGxlbjsKKyBjaGFyIG5hbWVbTkFNRV9NQVgrMV07Cit9OworCisjZGVmaW5lIEFVVE9GU19JT0NfUkVBRFkgX0lPKDB4OTMsMHg2MCkKKyNkZWZpbmUgQVVUT0ZTX0lPQ19GQUlMIF9JTygweDkzLDB4NjEpCisjZGVmaW5lIEFVVE9GU19JT0NfQ0FUQVRPTklDIF9JTygweDkzLDB4NjIpCisjZGVmaW5lIEFVVE9GU19JT0NfUFJPVE9WRVIgX0lPUigweDkzLDB4NjMsaW50KQorI2RlZmluZSBBVVRPRlNfSU9DX1NFVFRJTUVPVVQgX0lPV1IoMHg5MywweDY0LHVuc2lnbmVkIGxvbmcpCisjZGVmaW5lIEFVVE9GU19JT0NfRVhQSVJFIF9JT1IoMHg5MywweDY1LHN0cnVjdCBhdXRvZnNfcGFja2V0X2V4cGlyZSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYXV0b2NvbmYuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hdXRvY29uZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNmJmMTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYXV0b2NvbmYuaApAQCAtMCwwICsxLDE3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIExJTlVYX0FVVE9DT05GX0NSQVBfR09FU19IRVJFCisjZGVmaW5lIExJTlVYX0FVVE9DT05GX0NSQVBfR09FU19IRVJFCisKKyNkZWZpbmUgQVVUT0NPTkZfSU5DTFVERUQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYXV4dmVjLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYXV4dmVjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhhMDcwMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hdXh2ZWMuaApAQCAtMCwwICsxLDQwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9BVVhWRUNfSAorI2RlZmluZSBfTElOVVhfQVVYVkVDX0gKKworI2luY2x1ZGUgPGFzbS9hdXh2ZWMuaD4KKworI2RlZmluZSBBVF9OVUxMIDAgIAorI2RlZmluZSBBVF9JR05PUkUgMSAgCisjZGVmaW5lIEFUX0VYRUNGRCAyICAKKyNkZWZpbmUgQVRfUEhEUiAzICAKKyNkZWZpbmUgQVRfUEhFTlQgNCAgCisjZGVmaW5lIEFUX1BITlVNIDUgIAorI2RlZmluZSBBVF9QQUdFU1ogNiAgCisjZGVmaW5lIEFUX0JBU0UgNyAgCisjZGVmaW5lIEFUX0ZMQUdTIDggIAorI2RlZmluZSBBVF9FTlRSWSA5ICAKKyNkZWZpbmUgQVRfTk9URUxGIDEwICAKKyNkZWZpbmUgQVRfVUlEIDExICAKKyNkZWZpbmUgQVRfRVVJRCAxMiAgCisjZGVmaW5lIEFUX0dJRCAxMyAgCisjZGVmaW5lIEFUX0VHSUQgMTQgIAorI2RlZmluZSBBVF9QTEFURk9STSAxNSAgCisjZGVmaW5lIEFUX0hXQ0FQIDE2ICAKKyNkZWZpbmUgQVRfQ0xLVENLIDE3ICAKKworI2RlZmluZSBBVF9TRUNVUkUgMjMgIAorCisjZGVmaW5lIEFUX1ZFQ1RPUl9TSVpFIDQ0ICAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYmFja2luZy1kZXYuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9iYWNraW5nLWRldi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5OTZkMmMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYmFja2luZy1kZXYuaApAQCAtMCwwICsxLDUzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9CQUNLSU5HX0RFVl9ICisjZGVmaW5lIF9MSU5VWF9CQUNLSU5HX0RFVl9ICisKKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisKK2VudW0gYmRpX3N0YXRlIHsKKyBCRElfcGRmbHVzaCwKKyBCRElfd3JpdGVfY29uZ2VzdGVkLAorIEJESV9yZWFkX2Nvbmdlc3RlZCwKKyBCRElfdW51c2VkLAorfTsKKwordHlwZWRlZiBpbnQgKGNvbmdlc3RlZF9mbikodm9pZCAqLCBpbnQpOworCitzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyB7CisgdW5zaWduZWQgbG9uZyByYV9wYWdlczsKKyB1bnNpZ25lZCBsb25nIHN0YXRlOworIHVuc2lnbmVkIGludCBjYXBhYmlsaXRpZXM7CisgY29uZ2VzdGVkX2ZuICpjb25nZXN0ZWRfZm47Cisgdm9pZCAqY29uZ2VzdGVkX2RhdGE7Cisgdm9pZCAoKnVucGx1Z19pb19mbikoc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKiwgc3RydWN0IHBhZ2UgKik7Cisgdm9pZCAqdW5wbHVnX2lvX2RhdGE7Cit9OworCisjZGVmaW5lIEJESV9DQVBfTk9fQUNDVF9ESVJUWSAweDAwMDAwMDAxICAKKyNkZWZpbmUgQkRJX0NBUF9OT19XUklURUJBQ0sgMHgwMDAwMDAwMiAgCisjZGVmaW5lIEJESV9DQVBfTUFQX0NPUFkgMHgwMDAwMDAwNCAgCisjZGVmaW5lIEJESV9DQVBfTUFQX0RJUkVDVCAweDAwMDAwMDA4ICAKKyNkZWZpbmUgQkRJX0NBUF9SRUFEX01BUCAweDAwMDAwMDEwICAKKyNkZWZpbmUgQkRJX0NBUF9XUklURV9NQVAgMHgwMDAwMDAyMCAgCisjZGVmaW5lIEJESV9DQVBfRVhFQ19NQVAgMHgwMDAwMDA0MCAgCisjZGVmaW5lIEJESV9DQVBfVk1GTEFHUyAgIChCRElfQ0FQX1JFQURfTUFQIHwgQkRJX0NBUF9XUklURV9NQVAgfCBCRElfQ0FQX0VYRUNfTUFQKQorCisjaWYgZGVmaW5lZChWTV9NQVlSRUFEKSAmJiBCRElfQ0FQX1JFQURfTUFQICE9IChWTV9NQVlSRUFEIHx8IEJESV9DQVBfV1JJVEVfTUFQICE9IChWTV9NQVlXUklURSB8fCBCRElfQ0FQX0VYRUNfTUFQICE9IFZNX01BWUVYRUMpKQorI2Vycm9yIHBsZWFzZSBjaGFuZ2UgYmFja2luZ19kZXZfaW5mbzo6Y2FwYWJpbGl0aWVzIGZsYWdzCisjZW5kaWYKKworI2RlZmluZSBiZGlfY2FwX3dyaXRlYmFja19kaXJ0eShiZGkpICAgKCEoKGJkaSktPmNhcGFiaWxpdGllcyAmIEJESV9DQVBfTk9fV1JJVEVCQUNLKSkKKyNkZWZpbmUgYmRpX2NhcF9hY2NvdW50X2RpcnR5KGJkaSkgICAoISgoYmRpKS0+Y2FwYWJpbGl0aWVzICYgQkRJX0NBUF9OT19BQ0NUX0RJUlRZKSkKKyNkZWZpbmUgbWFwcGluZ19jYXBfd3JpdGViYWNrX2RpcnR5KG1hcHBpbmcpICAgYmRpX2NhcF93cml0ZWJhY2tfZGlydHkoKG1hcHBpbmcpLT5iYWNraW5nX2Rldl9pbmZvKQorI2RlZmluZSBtYXBwaW5nX2NhcF9hY2NvdW50X2RpcnR5KG1hcHBpbmcpICAgYmRpX2NhcF9hY2NvdW50X2RpcnR5KChtYXBwaW5nKS0+YmFja2luZ19kZXZfaW5mbykKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2JpbmRlci5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2JpbmRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5N2VhZmIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYmluZGVyLmgKQEAgLTAsMCArMSwxODYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX0JJTkRFUl9ICisjZGVmaW5lIF9MSU5VWF9CSU5ERVJfSAorCisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKworI2RlZmluZSBCX1BBQ0tfQ0hBUlMoYzEsIGMyLCBjMywgYzQpICAgKCgoKGMxKTw8MjQpKSB8ICgoKGMyKTw8MTYpKSB8ICgoKGMzKTw8OCkpIHwgKGM0KSkKKyNkZWZpbmUgQl9UWVBFX0xBUkdFIDB4ODUKKworZW51bSB7CisgQklOREVSX1RZUEVfQklOREVSID0gQl9QQUNLX0NIQVJTKCdzJywgJ2InLCAnKicsIEJfVFlQRV9MQVJHRSksCisgQklOREVSX1RZUEVfV0VBS19CSU5ERVIgPSBCX1BBQ0tfQ0hBUlMoJ3cnLCAnYicsICcqJywgQl9UWVBFX0xBUkdFKSwKKyBCSU5ERVJfVFlQRV9IQU5ETEUgPSBCX1BBQ0tfQ0hBUlMoJ3MnLCAnaCcsICcqJywgQl9UWVBFX0xBUkdFKSwKKyBCSU5ERVJfVFlQRV9XRUFLX0hBTkRMRSA9IEJfUEFDS19DSEFSUygndycsICdoJywgJyonLCBCX1RZUEVfTEFSR0UpLAorIEJJTkRFUl9UWVBFX0ZEID0gQl9QQUNLX0NIQVJTKCdmJywgJ2QnLCAnKicsIEJfVFlQRV9MQVJHRSksCit9OworCitlbnVtIHsKKyBGTEFUX0JJTkRFUl9GTEFHX1BSSU9SSVRZX01BU0sgPSAweGZmLAorIEZMQVRfQklOREVSX0ZMQUdfQUNDRVBUU19GRFMgPSAweDEwMCwKK307CisKK3N0cnVjdCBmbGF0X2JpbmRlcl9vYmplY3QgeworCisgdW5zaWduZWQgbG9uZyB0eXBlOworIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKyB1bmlvbiB7Cisgdm9pZCAqYmluZGVyOworIHNpZ25lZCBsb25nIGhhbmRsZTsKKyB9OworCisgdm9pZCAqY29va2llOworfTsKKworc3RydWN0IGJpbmRlcl93cml0ZV9yZWFkIHsKKyBzaWduZWQgbG9uZyB3cml0ZV9zaXplOworIHNpZ25lZCBsb25nIHdyaXRlX2NvbnN1bWVkOworIHVuc2lnbmVkIGxvbmcgd3JpdGVfYnVmZmVyOworIHNpZ25lZCBsb25nIHJlYWRfc2l6ZTsKKyBzaWduZWQgbG9uZyByZWFkX2NvbnN1bWVkOworIHVuc2lnbmVkIGxvbmcgcmVhZF9idWZmZXI7Cit9OworCitzdHJ1Y3QgYmluZGVyX3ZlcnNpb24geworCisgc2lnbmVkIGxvbmcgcHJvdG9jb2xfdmVyc2lvbjsKK307CisKKyNkZWZpbmUgQklOREVSX0NVUlJFTlRfUFJPVE9DT0xfVkVSU0lPTiA3CisKKyNkZWZpbmUgQklOREVSX1dSSVRFX1JFQUQgX0lPV1IoJ2InLCAxLCBzdHJ1Y3QgYmluZGVyX3dyaXRlX3JlYWQpCisjZGVmaW5lIEJJTkRFUl9TRVRfSURMRV9USU1FT1VUIF9JT1coJ2InLCAzLCBpbnQ2NF90KQorI2RlZmluZSBCSU5ERVJfU0VUX01BWF9USFJFQURTIF9JT1coJ2InLCA1LCBzaXplX3QpCisjZGVmaW5lIEJJTkRFUl9TRVRfSURMRV9QUklPUklUWSBfSU9XKCdiJywgNiwgaW50KQorI2RlZmluZSBCSU5ERVJfU0VUX0NPTlRFWFRfTUdSIF9JT1coJ2InLCA3LCBpbnQpCisjZGVmaW5lIEJJTkRFUl9USFJFQURfRVhJVCBfSU9XKCdiJywgOCwgaW50KQorI2RlZmluZSBCSU5ERVJfVkVSU0lPTiBfSU9XUignYicsIDksIHN0cnVjdCBiaW5kZXJfdmVyc2lvbikKKworZW51bSB0cmFuc2FjdGlvbl9mbGFncyB7CisgVEZfT05FX1dBWSA9IDB4MDEsCisgVEZfUk9PVF9PQkpFQ1QgPSAweDA0LAorIFRGX1NUQVRVU19DT0RFID0gMHgwOCwKKyBURl9BQ0NFUFRfRkRTID0gMHgxMCwKK307CisKK3N0cnVjdCBiaW5kZXJfdHJhbnNhY3Rpb25fZGF0YSB7CisKKyB1bmlvbiB7Cisgc2l6ZV90IGhhbmRsZTsKKyB2b2lkICpwdHI7CisgfSB0YXJnZXQ7Cisgdm9pZCAqY29va2llOworIHVuc2lnbmVkIGludCBjb2RlOworCisgdW5zaWduZWQgaW50IGZsYWdzOworIHBpZF90IHNlbmRlcl9waWQ7CisgdWlkX3Qgc2VuZGVyX2V1aWQ7Cisgc2l6ZV90IGRhdGFfc2l6ZTsKKyBzaXplX3Qgb2Zmc2V0c19zaXplOworCisgdW5pb24geworIHN0cnVjdCB7CisKKyBjb25zdCB2b2lkICpidWZmZXI7CisKKyBjb25zdCB2b2lkICpvZmZzZXRzOworIH0gcHRyOworIHVpbnQ4X3QgYnVmWzhdOworIH0gZGF0YTsKK307CisKK3N0cnVjdCBiaW5kZXJfcHRyX2Nvb2tpZSB7Cisgdm9pZCAqcHRyOworIHZvaWQgKmNvb2tpZTsKK307CisKK3N0cnVjdCBiaW5kZXJfcHJpX2Rlc2MgeworIGludCBwcmlvcml0eTsKKyBpbnQgZGVzYzsKK307CisKK3N0cnVjdCBiaW5kZXJfcHJpX3B0cl9jb29raWUgeworIGludCBwcmlvcml0eTsKKyB2b2lkICpwdHI7Cisgdm9pZCAqY29va2llOworfTsKKworZW51bSBCaW5kZXJEcml2ZXJSZXR1cm5Qcm90b2NvbCB7CisgQlJfRVJST1IgPSBfSU9SX0JBRCgncicsIDAsIGludCksCisKKyBCUl9PSyA9IF9JTygncicsIDEpLAorCisgQlJfVFJBTlNBQ1RJT04gPSBfSU9SX0JBRCgncicsIDIsIHN0cnVjdCBiaW5kZXJfdHJhbnNhY3Rpb25fZGF0YSksCisgQlJfUkVQTFkgPSBfSU9SX0JBRCgncicsIDMsIHN0cnVjdCBiaW5kZXJfdHJhbnNhY3Rpb25fZGF0YSksCisKKyBCUl9BQ1FVSVJFX1JFU1VMVCA9IF9JT1JfQkFEKCdyJywgNCwgaW50KSwKKworIEJSX0RFQURfUkVQTFkgPSBfSU8oJ3InLCA1KSwKKworIEJSX1RSQU5TQUNUSU9OX0NPTVBMRVRFID0gX0lPKCdyJywgNiksCisKKyBCUl9JTkNSRUZTID0gX0lPUl9CQUQoJ3InLCA3LCBzdHJ1Y3QgYmluZGVyX3B0cl9jb29raWUpLAorIEJSX0FDUVVJUkUgPSBfSU9SX0JBRCgncicsIDgsIHN0cnVjdCBiaW5kZXJfcHRyX2Nvb2tpZSksCisgQlJfUkVMRUFTRSA9IF9JT1JfQkFEKCdyJywgOSwgc3RydWN0IGJpbmRlcl9wdHJfY29va2llKSwKKyBCUl9ERUNSRUZTID0gX0lPUl9CQUQoJ3InLCAxMCwgc3RydWN0IGJpbmRlcl9wdHJfY29va2llKSwKKworIEJSX0FUVEVNUFRfQUNRVUlSRSA9IF9JT1JfQkFEKCdyJywgMTEsIHN0cnVjdCBiaW5kZXJfcHJpX3B0cl9jb29raWUpLAorCisgQlJfTk9PUCA9IF9JTygncicsIDEyKSwKKworIEJSX1NQQVdOX0xPT1BFUiA9IF9JTygncicsIDEzKSwKKworIEJSX0ZJTklTSEVEID0gX0lPKCdyJywgMTQpLAorCisgQlJfREVBRF9CSU5ERVIgPSBfSU9SX0JBRCgncicsIDE1LCB2b2lkICopLAorCisgQlJfQ0xFQVJfREVBVEhfTk9USUZJQ0FUSU9OX0RPTkUgPSBfSU9SX0JBRCgncicsIDE2LCB2b2lkICopLAorCisgQlJfRkFJTEVEX1JFUExZID0gX0lPKCdyJywgMTcpLAorCit9OworCitlbnVtIEJpbmRlckRyaXZlckNvbW1hbmRQcm90b2NvbCB7CisgQkNfVFJBTlNBQ1RJT04gPSBfSU9XX0JBRCgnYycsIDAsIHN0cnVjdCBiaW5kZXJfdHJhbnNhY3Rpb25fZGF0YSksCisgQkNfUkVQTFkgPSBfSU9XX0JBRCgnYycsIDEsIHN0cnVjdCBiaW5kZXJfdHJhbnNhY3Rpb25fZGF0YSksCisKKyBCQ19BQ1FVSVJFX1JFU1VMVCA9IF9JT1dfQkFEKCdjJywgMiwgaW50KSwKKworIEJDX0ZSRUVfQlVGRkVSID0gX0lPV19CQUQoJ2MnLCAzLCBpbnQpLAorCisgQkNfSU5DUkVGUyA9IF9JT1dfQkFEKCdjJywgNCwgaW50KSwKKyBCQ19BQ1FVSVJFID0gX0lPV19CQUQoJ2MnLCA1LCBpbnQpLAorIEJDX1JFTEVBU0UgPSBfSU9XX0JBRCgnYycsIDYsIGludCksCisgQkNfREVDUkVGUyA9IF9JT1dfQkFEKCdjJywgNywgaW50KSwKKworIEJDX0lOQ1JFRlNfRE9ORSA9IF9JT1dfQkFEKCdjJywgOCwgc3RydWN0IGJpbmRlcl9wdHJfY29va2llKSwKKyBCQ19BQ1FVSVJFX0RPTkUgPSBfSU9XX0JBRCgnYycsIDksIHN0cnVjdCBiaW5kZXJfcHRyX2Nvb2tpZSksCisKKyBCQ19BVFRFTVBUX0FDUVVJUkUgPSBfSU9XX0JBRCgnYycsIDEwLCBzdHJ1Y3QgYmluZGVyX3ByaV9kZXNjKSwKKworIEJDX1JFR0lTVEVSX0xPT1BFUiA9IF9JTygnYycsIDExKSwKKworIEJDX0VOVEVSX0xPT1BFUiA9IF9JTygnYycsIDEyKSwKKyBCQ19FWElUX0xPT1BFUiA9IF9JTygnYycsIDEzKSwKKworIEJDX1JFUVVFU1RfREVBVEhfTk9USUZJQ0FUSU9OID0gX0lPV19CQUQoJ2MnLCAxNCwgc3RydWN0IGJpbmRlcl9wdHJfY29va2llKSwKKworIEJDX0NMRUFSX0RFQVRIX05PVElGSUNBVElPTiA9IF9JT1dfQkFEKCdjJywgMTUsIHN0cnVjdCBiaW5kZXJfcHRyX2Nvb2tpZSksCisKKyBCQ19ERUFEX0JJTkRFUl9ET05FID0gX0lPV19CQUQoJ2MnLCAxNiwgdm9pZCAqKSwKKworfTsKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9iaW5mbXRzLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYmluZm10cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMzU5ODUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYmluZm10cy5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX0JJTkZNVFNfSAorI2RlZmluZSBfTElOVVhfQklORk1UU19ICisKKyNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CisKK3N0cnVjdCBwdF9yZWdzOworCisjZGVmaW5lIE1BWF9BUkdfUEFHRVMgMzIKKworI2RlZmluZSBCSU5QUk1fQlVGX1NJWkUgMTI4CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Jpby5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Jpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlOTEzMTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYmlvLmgKQEAgLTAsMCArMSwxNzEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19MSU5VWF9CSU9fSAorI2RlZmluZSBfX0xJTlVYX0JJT19ICisKKyNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisjaW5jbHVkZSA8bGludXgvbWVtcG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcHJpby5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNpZiBkZWZpbmVkKEJJT19WTUVSR0VfTUFYX1NJWkUpICYmIGRlZmluZWQoQklPX1ZNRVJHRV9CT1VOREFSWSkKKyNkZWZpbmUgQklPVkVDX1ZJUlRfU1RBUlRfU0laRSh4KSAoYnZlY190b19waHlzKHgpICYgKEJJT19WTUVSR0VfQk9VTkRBUlkgLSAxKSkKKyNkZWZpbmUgQklPVkVDX1ZJUlRfT1ZFUlNJWkUoeCkgKCh4KSA+IEJJT19WTUVSR0VfTUFYX1NJWkUpCisjZWxzZQorI2RlZmluZSBCSU9WRUNfVklSVF9TVEFSVF9TSVpFKHgpIDAKKyNkZWZpbmUgQklPVkVDX1ZJUlRfT1ZFUlNJWkUoeCkgMAorI2VuZGlmCisKKyNpZm5kZWYgQklPX1ZNRVJHRV9CT1VOREFSWQorI2RlZmluZSBCSU9fVk1FUkdFX0JPVU5EQVJZIDAKKyNlbmRpZgorCisjZGVmaW5lIEJJT19ERUJVRworCisjaWZkZWYgQklPX0RFQlVHCisjZGVmaW5lIEJJT19CVUdfT04gQlVHX09OCisjZWxzZQorI2RlZmluZSBCSU9fQlVHX09OCisjZW5kaWYKKworI2RlZmluZSBCSU9fTUFYX1BBR0VTIDI1NgorI2RlZmluZSBCSU9fTUFYX1NJWkUgKEJJT19NQVhfUEFHRVMgPDwgUEFHRV9DQUNIRV9TSElGVCkKKyNkZWZpbmUgQklPX01BWF9TRUNUT1JTIChCSU9fTUFYX1NJWkUgPj4gOSkKKworc3RydWN0IGJpb192ZWMgeworIHN0cnVjdCBwYWdlICpidl9wYWdlOworIHVuc2lnbmVkIGludCBidl9sZW47CisgdW5zaWduZWQgaW50IGJ2X29mZnNldDsKK307CisKK3N0cnVjdCBiaW9fc2V0Oworc3RydWN0IGJpbzsKK3R5cGVkZWYgaW50IChiaW9fZW5kX2lvX3QpIChzdHJ1Y3QgYmlvICosIHVuc2lnbmVkIGludCwgaW50KTsKK3R5cGVkZWYgdm9pZCAoYmlvX2Rlc3RydWN0b3JfdCkgKHN0cnVjdCBiaW8gKik7CisKK3N0cnVjdCBiaW8geworIHNlY3Rvcl90IGJpX3NlY3RvcjsKKyBzdHJ1Y3QgYmlvICpiaV9uZXh0OworIHN0cnVjdCBibG9ja19kZXZpY2UgKmJpX2JkZXY7CisgdW5zaWduZWQgbG9uZyBiaV9mbGFnczsKKyB1bnNpZ25lZCBsb25nIGJpX3J3OworCisgdW5zaWduZWQgc2hvcnQgYmlfdmNudDsKKyB1bnNpZ25lZCBzaG9ydCBiaV9pZHg7CisKKyB1bnNpZ25lZCBzaG9ydCBiaV9waHlzX3NlZ21lbnRzOworCisgdW5zaWduZWQgc2hvcnQgYmlfaHdfc2VnbWVudHM7CisKKyB1bnNpZ25lZCBpbnQgYmlfc2l6ZTsKKworIHVuc2lnbmVkIGludCBiaV9od19mcm9udF9zaXplOworIHVuc2lnbmVkIGludCBiaV9od19iYWNrX3NpemU7CisKKyB1bnNpZ25lZCBpbnQgYmlfbWF4X3ZlY3M7CisKKyBzdHJ1Y3QgYmlvX3ZlYyAqYmlfaW9fdmVjOworCisgYmlvX2VuZF9pb190ICpiaV9lbmRfaW87CisgYXRvbWljX3QgYmlfY250OworCisgdm9pZCAqYmlfcHJpdmF0ZTsKKworIGJpb19kZXN0cnVjdG9yX3QgKmJpX2Rlc3RydWN0b3I7Cit9OworCisjZGVmaW5lIEJJT19VUFRPREFURSAwICAKKyNkZWZpbmUgQklPX1JXX0JMT0NLIDEgIAorI2RlZmluZSBCSU9fRU9GIDIgIAorI2RlZmluZSBCSU9fU0VHX1ZBTElEIDMgIAorI2RlZmluZSBCSU9fQ0xPTkVEIDQgIAorI2RlZmluZSBCSU9fQk9VTkNFRCA1ICAKKyNkZWZpbmUgQklPX1VTRVJfTUFQUEVEIDYgIAorI2RlZmluZSBCSU9fRU9QTk9UU1VQUCA3ICAKKyNkZWZpbmUgYmlvX2ZsYWdnZWQoYmlvLCBmbGFnKSAoKGJpbyktPmJpX2ZsYWdzICYgKDEgPDwgKGZsYWcpKSkKKworI2RlZmluZSBCSU9fUE9PTF9CSVRTICg0KQorI2RlZmluZSBCSU9fUE9PTF9PRkZTRVQgKEJJVFNfUEVSX0xPTkcgLSBCSU9fUE9PTF9CSVRTKQorI2RlZmluZSBCSU9fUE9PTF9NQVNLICgxVUwgPDwgQklPX1BPT0xfT0ZGU0VUKQorI2RlZmluZSBCSU9fUE9PTF9JRFgoYmlvKSAoKGJpbyktPmJpX2ZsYWdzID4+IEJJT19QT09MX09GRlNFVCkgCisKKyNkZWZpbmUgQklPX1JXIDAKKyNkZWZpbmUgQklPX1JXX0FIRUFEIDEKKyNkZWZpbmUgQklPX1JXX0JBUlJJRVIgMgorI2RlZmluZSBCSU9fUldfRkFJTEZBU1QgMworI2RlZmluZSBCSU9fUldfU1lOQyA0CisKKyNkZWZpbmUgQklPX1BSSU9fU0hJRlQgKDggKiBzaXplb2YodW5zaWduZWQgbG9uZykgLSBJT1BSSU9fQklUUykKKyNkZWZpbmUgYmlvX3ByaW8oYmlvKSAoKGJpbyktPmJpX3J3ID4+IEJJT19QUklPX1NISUZUKQorI2RlZmluZSBiaW9fcHJpb192YWxpZChiaW8pIGlvcHJpb192YWxpZChiaW9fcHJpbyhiaW8pKQorCisjZGVmaW5lIGJpb19zZXRfcHJpbyhiaW8sIHByaW8pIGRvIHsgICBXQVJOX09OKHByaW8gPj0gKDEgPDwgSU9QUklPX0JJVFMpKTsgICAoYmlvKS0+YmlfcncgJj0gKCgxVUwgPDwgQklPX1BSSU9fU0hJRlQpIC0gMSk7ICAgKGJpbyktPmJpX3J3IHw9ICgodW5zaWduZWQgbG9uZykgKHByaW8pIDw8IEJJT19QUklPX1NISUZUKTsgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgYmlvX2lvdmVjX2lkeChiaW8sIGlkeCkgKCYoKGJpbyktPmJpX2lvX3ZlY1soaWR4KV0pKQorI2RlZmluZSBiaW9faW92ZWMoYmlvKSBiaW9faW92ZWNfaWR4KChiaW8pLCAoYmlvKS0+YmlfaWR4KQorI2RlZmluZSBiaW9fcGFnZShiaW8pIGJpb19pb3ZlYygoYmlvKSktPmJ2X3BhZ2UKKyNkZWZpbmUgYmlvX29mZnNldChiaW8pIGJpb19pb3ZlYygoYmlvKSktPmJ2X29mZnNldAorI2RlZmluZSBiaW9fc2VnbWVudHMoYmlvKSAoKGJpbyktPmJpX3ZjbnQgLSAoYmlvKS0+YmlfaWR4KQorI2RlZmluZSBiaW9fc2VjdG9ycyhiaW8pICgoYmlvKS0+Ymlfc2l6ZSA+PiA5KQorI2RlZmluZSBiaW9fY3VyX3NlY3RvcnMoYmlvKSAoYmlvX2lvdmVjKGJpbyktPmJ2X2xlbiA+PiA5KQorI2RlZmluZSBiaW9fZGF0YShiaW8pIChwYWdlX2FkZHJlc3MoYmlvX3BhZ2UoKGJpbykpKSArIGJpb19vZmZzZXQoKGJpbykpKQorI2RlZmluZSBiaW9fYmFycmllcihiaW8pICgoYmlvKS0+YmlfcncgJiAoMSA8PCBCSU9fUldfQkFSUklFUikpCisjZGVmaW5lIGJpb19zeW5jKGJpbykgKChiaW8pLT5iaV9ydyAmICgxIDw8IEJJT19SV19TWU5DKSkKKyNkZWZpbmUgYmlvX2ZhaWxmYXN0KGJpbykgKChiaW8pLT5iaV9ydyAmICgxIDw8IEJJT19SV19GQUlMRkFTVCkpCisjZGVmaW5lIGJpb19yd19haGVhZChiaW8pICgoYmlvKS0+YmlfcncgJiAoMSA8PCBCSU9fUldfQUhFQUQpKQorCisjZGVmaW5lIGJpb190b19waHlzKGJpbykgKHBhZ2VfdG9fcGh5cyhiaW9fcGFnZSgoYmlvKSkpICsgKHVuc2lnbmVkIGxvbmcpIGJpb19vZmZzZXQoKGJpbykpKQorI2RlZmluZSBidmVjX3RvX3BoeXMoYnYpIChwYWdlX3RvX3BoeXMoKGJ2KS0+YnZfcGFnZSkgKyAodW5zaWduZWQgbG9uZykgKGJ2KS0+YnZfb2Zmc2V0KQorCisjZGVmaW5lIF9fYmlvX2ttYXBfYXRvbWljKGJpbywgaWR4LCBrbXR5cGUpICAgKGttYXBfYXRvbWljKGJpb19pb3ZlY19pZHgoKGJpbyksIChpZHgpKS0+YnZfcGFnZSwga210eXBlKSArICAgYmlvX2lvdmVjX2lkeCgoYmlvKSwgKGlkeCkpLT5idl9vZmZzZXQpCisKKyNkZWZpbmUgX19iaW9fa3VubWFwX2F0b21pYyhhZGRyLCBrbXR5cGUpIGt1bm1hcF9hdG9taWMoYWRkciwga210eXBlKQorCisjZGVmaW5lIF9fQlZFQ19FTkQoYmlvKSBiaW9faW92ZWNfaWR4KChiaW8pLCAoYmlvKS0+YmlfdmNudCAtIDEpCisjZGVmaW5lIF9fQlZFQ19TVEFSVChiaW8pIGJpb19pb3ZlY19pZHgoKGJpbyksIChiaW8pLT5iaV9pZHgpCisKKyNpZm5kZWYgQklPVkVDX1BIWVNfTUVSR0VBQkxFCisjZGVmaW5lIEJJT1ZFQ19QSFlTX01FUkdFQUJMRSh2ZWMxLCB2ZWMyKSAgICgoYnZlY190b19waHlzKCh2ZWMxKSkgKyAodmVjMSktPmJ2X2xlbikgPT0gYnZlY190b19waHlzKCh2ZWMyKSkpCisjZW5kaWYKKworI2RlZmluZSBCSU9WRUNfVklSVF9NRVJHRUFCTEUodmVjMSwgdmVjMikgICAoKCgoYnZlY190b19waHlzKCh2ZWMxKSkgKyAodmVjMSktPmJ2X2xlbikgfCBidmVjX3RvX3BoeXMoKHZlYzIpKSkgJiAoQklPX1ZNRVJHRV9CT1VOREFSWSAtIDEpKSA9PSAwKQorI2RlZmluZSBfX0JJT19TRUdfQk9VTkRBUlkoYWRkcjEsIGFkZHIyLCBtYXNrKSAgICgoKGFkZHIxKSB8IChtYXNrKSkgPT0gKCgoYWRkcjIpIC0gMSkgfCAobWFzaykpKQorI2RlZmluZSBCSU9WRUNfU0VHX0JPVU5EQVJZKHEsIGIxLCBiMikgICBfX0JJT19TRUdfQk9VTkRBUlkoYnZlY190b19waHlzKChiMSkpLCBidmVjX3RvX3BoeXMoKGIyKSkgKyAoYjIpLT5idl9sZW4sIChxKS0+c2VnX2JvdW5kYXJ5X21hc2spCisjZGVmaW5lIEJJT19TRUdfQk9VTkRBUlkocSwgYjEsIGIyKSAgIEJJT1ZFQ19TRUdfQk9VTkRBUlkoKHEpLCBfX0JWRUNfRU5EKChiMSkpLCBfX0JWRUNfU1RBUlQoKGIyKSkpCisKKyNkZWZpbmUgYmlvX2lvX2Vycm9yKGJpbywgYnl0ZXMpIGJpb19lbmRpbygoYmlvKSwgKGJ5dGVzKSwgLUVJTykKKworI2RlZmluZSBfX2Jpb19mb3JfZWFjaF9zZWdtZW50KGJ2bCwgYmlvLCBpLCBzdGFydF9pZHgpICAgZm9yIChidmwgPSBiaW9faW92ZWNfaWR4KChiaW8pLCAoc3RhcnRfaWR4KSksIGkgPSAoc3RhcnRfaWR4KTsgICBpIDwgKGJpbyktPmJpX3ZjbnQ7ICAgYnZsKyssIGkrKykKKworI2RlZmluZSBiaW9fZm9yX2VhY2hfc2VnbWVudChidmwsIGJpbywgaSkgICBfX2Jpb19mb3JfZWFjaF9zZWdtZW50KGJ2bCwgYmlvLCBpLCAoYmlvKS0+YmlfaWR4KQorCisjZGVmaW5lIGJpb19nZXQoYmlvKSBhdG9taWNfaW5jKCYoYmlvKS0+YmlfY250KQorCitzdHJ1Y3QgYmlvX3BhaXIgeworIHN0cnVjdCBiaW8gYmlvMSwgYmlvMjsKKyBzdHJ1Y3QgYmlvX3ZlYyBidjEsIGJ2MjsKKyBhdG9taWNfdCBjbnQ7CisgaW50IGVycm9yOworfTsKKworc3RydWN0IHJlcXVlc3RfcXVldWU7CisKK3N0cnVjdCBzZ19pb3ZlYzsKKworI2RlZmluZSBidmVjX2ttYXBfaXJxKGJ2ZWMsIGZsYWdzKSAocGFnZV9hZGRyZXNzKChidmVjKS0+YnZfcGFnZSkgKyAoYnZlYyktPmJ2X29mZnNldCkKKyNkZWZpbmUgYnZlY19rdW5tYXBfaXJxKGJ1ZiwgZmxhZ3MpIGRvIHsgKihmbGFncykgPSAwOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIF9fYmlvX2t1bm1hcF9pcnEoYnVmLCBmbGFncykgYnZlY19rdW5tYXBfaXJxKGJ1ZiwgZmxhZ3MpCisjZGVmaW5lIGJpb19rbWFwX2lycShiaW8sIGZsYWdzKSAgIF9fYmlvX2ttYXBfaXJxKChiaW8pLCAoYmlvKS0+YmlfaWR4LCAoZmxhZ3MpKQorI2RlZmluZSBiaW9fa3VubWFwX2lycShidWYsZmxhZ3MpIF9fYmlvX2t1bm1hcF9pcnEoYnVmLCBmbGFncykKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2JpdG1hcC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2JpdG1hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0NmQxNTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYml0bWFwLmgKQEAgLTAsMCArMSwyNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0xJTlVYX0JJVE1BUF9ICisjZGVmaW5lIF9fTElOVVhfQklUTUFQX0gKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisKKyNkZWZpbmUgQklUTUFQX0xBU1RfV09SRF9NQVNLKG5iaXRzKSAgKCAgICgobmJpdHMpICUgQklUU19QRVJfTE9ORykgPyAgICgxVUw8PCgobmJpdHMpICUgQklUU19QRVJfTE9ORykpLTEgOiB+MFVMICApCisKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYml0b3BzLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYml0b3BzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhkZjYxNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9iaXRvcHMuaApAQCAtMCwwICsxLDE4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9CSVRPUFNfSAorI2RlZmluZSBfTElOVVhfQklUT1BTX0gKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKworI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYmxrZGV2LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYmxrZGV2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzAwNDUyNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ibGtkZXYuaApAQCAtMCwwICsxLDQ2MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfQkxLREVWX0gKKyNkZWZpbmUgX0xJTlVYX0JMS0RFVl9ICisKKyNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgorI2luY2x1ZGUgPGxpbnV4L2dlbmhkLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L2JhY2tpbmctZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L21lbXBvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9iaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KKworI2luY2x1ZGUgPGFzbS9zY2F0dGVybGlzdC5oPgorCitzdHJ1Y3Qgc2NzaV9pb2N0bF9jb21tYW5kOworCitzdHJ1Y3QgcmVxdWVzdF9xdWV1ZTsKK3R5cGVkZWYgc3RydWN0IHJlcXVlc3RfcXVldWUgcmVxdWVzdF9xdWV1ZV90Oworc3RydWN0IGVsZXZhdG9yX3F1ZXVlOwordHlwZWRlZiBzdHJ1Y3QgZWxldmF0b3JfcXVldWUgZWxldmF0b3JfdDsKK3N0cnVjdCByZXF1ZXN0X3BtX3N0YXRlOworc3RydWN0IGJsa190cmFjZTsKKworI2RlZmluZSBCTEtERVZfTUlOX1JRIDQKKyNkZWZpbmUgQkxLREVWX01BWF9SUSAxMjggIAorCitzdHJ1Y3QgYXNfaW9fY29udGV4dCB7Cisgc3BpbmxvY2tfdCBsb2NrOworCisgdm9pZCAoKmR0b3IpKHN0cnVjdCBhc19pb19jb250ZXh0ICphaWMpOworIHZvaWQgKCpleGl0KShzdHJ1Y3QgYXNfaW9fY29udGV4dCAqYWljKTsKKworIHVuc2lnbmVkIGxvbmcgc3RhdGU7CisgYXRvbWljX3QgbnJfcXVldWVkOworIGF0b21pY190IG5yX2Rpc3BhdGNoZWQ7CisKKyB1bnNpZ25lZCBsb25nIGxhc3RfZW5kX3JlcXVlc3Q7CisgdW5zaWduZWQgbG9uZyB0dGltZV90b3RhbDsKKyB1bnNpZ25lZCBsb25nIHR0aW1lX3NhbXBsZXM7CisgdW5zaWduZWQgbG9uZyB0dGltZV9tZWFuOworCisgdW5zaWduZWQgaW50IHNlZWtfc2FtcGxlczsKKyBzZWN0b3JfdCBsYXN0X3JlcXVlc3RfcG9zOworIHU2NCBzZWVrX3RvdGFsOworIHNlY3Rvcl90IHNlZWtfbWVhbjsKK307CisKK3N0cnVjdCBjZnFfcXVldWU7CitzdHJ1Y3QgY2ZxX2lvX2NvbnRleHQgeworIHN0cnVjdCByYl9ub2RlIHJiX25vZGU7Cisgdm9pZCAqa2V5OworCisgc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcVsyXTsKKworIHN0cnVjdCBpb19jb250ZXh0ICppb2M7CisKKyB1bnNpZ25lZCBsb25nIGxhc3RfZW5kX3JlcXVlc3Q7Cisgc2VjdG9yX3QgbGFzdF9yZXF1ZXN0X3BvczsKKyB1bnNpZ25lZCBsb25nIGxhc3RfcXVldWU7CisKKyB1bnNpZ25lZCBsb25nIHR0aW1lX3RvdGFsOworIHVuc2lnbmVkIGxvbmcgdHRpbWVfc2FtcGxlczsKKyB1bnNpZ25lZCBsb25nIHR0aW1lX21lYW47CisKKyB1bnNpZ25lZCBpbnQgc2Vla19zYW1wbGVzOworIHU2NCBzZWVrX3RvdGFsOworIHNlY3Rvcl90IHNlZWtfbWVhbjsKKworIHN0cnVjdCBsaXN0X2hlYWQgcXVldWVfbGlzdDsKKworIHZvaWQgKCpkdG9yKShzdHJ1Y3QgaW9fY29udGV4dCAqKTsKKyB2b2lkICgqZXhpdCkoc3RydWN0IGlvX2NvbnRleHQgKik7Cit9OworCitzdHJ1Y3QgaW9fY29udGV4dCB7CisgYXRvbWljX3QgcmVmY291bnQ7Cisgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOworCisgaW50ICgqc2V0X2lvcHJpbykoc3RydWN0IGlvX2NvbnRleHQgKiwgdW5zaWduZWQgaW50KTsKKworIHVuc2lnbmVkIGxvbmcgbGFzdF93YWl0ZWQ7CisgaW50IG5yX2JhdGNoX3JlcXVlc3RzOworCisgc3RydWN0IGFzX2lvX2NvbnRleHQgKmFpYzsKKyBzdHJ1Y3QgcmJfcm9vdCBjaWNfcm9vdDsKK307CisKK3N0cnVjdCBpb19jb250ZXh0ICpjdXJyZW50X2lvX2NvbnRleHQoZ2ZwX3QgZ2ZwX2ZsYWdzKTsKK3N0cnVjdCBpb19jb250ZXh0ICpnZXRfaW9fY29udGV4dChnZnBfdCBnZnBfZmxhZ3MpOworCitzdHJ1Y3QgcmVxdWVzdDsKK3R5cGVkZWYgdm9pZCAocnFfZW5kX2lvX2ZuKShzdHJ1Y3QgcmVxdWVzdCAqLCBpbnQpOworCitzdHJ1Y3QgcmVxdWVzdF9saXN0IHsKKyBpbnQgY291bnRbMl07CisgaW50IHN0YXJ2ZWRbMl07CisgaW50IGVsdnByaXY7CisgbWVtcG9vbF90ICpycV9wb29sOworIHdhaXRfcXVldWVfaGVhZF90IHdhaXRbMl07Cit9OworCisjZGVmaW5lIEJMS19NQVhfQ0RCIDE2CisKK3N0cnVjdCByZXF1ZXN0IHsKKyBzdHJ1Y3QgbGlzdF9oZWFkIHF1ZXVlbGlzdDsKKyBzdHJ1Y3QgbGlzdF9oZWFkIGRvbmVsaXN0OworCisgdW5zaWduZWQgbG9uZyBmbGFnczsKKworIHNlY3Rvcl90IHNlY3RvcjsKKyB1bnNpZ25lZCBsb25nIG5yX3NlY3RvcnM7CisKKyB1bnNpZ25lZCBpbnQgY3VycmVudF9ucl9zZWN0b3JzOworCisgc2VjdG9yX3QgaGFyZF9zZWN0b3I7CisgdW5zaWduZWQgbG9uZyBoYXJkX25yX3NlY3RvcnM7CisKKyB1bnNpZ25lZCBpbnQgaGFyZF9jdXJfc2VjdG9yczsKKworIHN0cnVjdCBiaW8gKmJpbzsKKyBzdHJ1Y3QgYmlvICpiaW90YWlsOworCisgdm9pZCAqZWxldmF0b3JfcHJpdmF0ZTsKKyB2b2lkICpjb21wbGV0aW9uX2RhdGE7CisKKyBpbnQgcnFfc3RhdHVzOworIGludCBlcnJvcnM7Cisgc3RydWN0IGdlbmRpc2sgKnJxX2Rpc2s7CisgdW5zaWduZWQgbG9uZyBzdGFydF90aW1lOworCisgdW5zaWduZWQgc2hvcnQgbnJfcGh5c19zZWdtZW50czsKKworIHVuc2lnbmVkIHNob3J0IG5yX2h3X3NlZ21lbnRzOworCisgdW5zaWduZWQgc2hvcnQgaW9wcmlvOworCisgaW50IHRhZzsKKworIGludCByZWZfY291bnQ7CisgcmVxdWVzdF9xdWV1ZV90ICpxOworIHN0cnVjdCByZXF1ZXN0X2xpc3QgKnJsOworCisgc3RydWN0IGNvbXBsZXRpb24gKndhaXRpbmc7Cisgdm9pZCAqc3BlY2lhbDsKKyBjaGFyICpidWZmZXI7CisKKyB1bnNpZ25lZCBpbnQgY21kX2xlbjsKKyB1bnNpZ25lZCBjaGFyIGNtZFtCTEtfTUFYX0NEQl07CisKKyB1bnNpZ25lZCBpbnQgZGF0YV9sZW47CisgdW5zaWduZWQgaW50IHNlbnNlX2xlbjsKKyB2b2lkICpkYXRhOworIHZvaWQgKnNlbnNlOworCisgdW5zaWduZWQgaW50IHRpbWVvdXQ7CisgaW50IHJldHJpZXM7CisKKyBycV9lbmRfaW9fZm4gKmVuZF9pbzsKKyB2b2lkICplbmRfaW9fZGF0YTsKK307CisKK2VudW0gcnFfZmxhZ19iaXRzIHsKKyBfX1JFUV9SVywKKyBfX1JFUV9GQUlMRkFTVCwKKyBfX1JFUV9TT1JURUQsCisgX19SRVFfU09GVEJBUlJJRVIsCisgX19SRVFfSEFSREJBUlJJRVIsCisgX19SRVFfRlVBLAorIF9fUkVRX0NNRCwKKyBfX1JFUV9OT01FUkdFLAorIF9fUkVRX1NUQVJURUQsCisgX19SRVFfRE9OVFBSRVAsCisgX19SRVFfUVVFVUVELAorIF9fUkVRX0VMVlBSSVYsCisKKyBfX1JFUV9QQywKKyBfX1JFUV9CTE9DS19QQywKKyBfX1JFUV9TRU5TRSwKKworIF9fUkVRX0ZBSUxFRCwKKyBfX1JFUV9RVUlFVCwKKyBfX1JFUV9TUEVDSUFMLAorIF9fUkVRX0RSSVZFX0NNRCwKKyBfX1JFUV9EUklWRV9UQVNLLAorIF9fUkVRX0RSSVZFX1RBU0tGSUxFLAorIF9fUkVRX1BSRUVNUFQsCisgX19SRVFfUE1fU1VTUEVORCwKKyBfX1JFUV9QTV9SRVNVTUUsCisgX19SRVFfUE1fU0hVVERPV04sCisgX19SRVFfT1JERVJFRF9DT0xPUiwKKyBfX1JFUV9SV19TWU5DLAorIF9fUkVRX05SX0JJVFMsCit9OworCisjZGVmaW5lIFJFUV9SVyAoMSA8PCBfX1JFUV9SVykKKyNkZWZpbmUgUkVRX0ZBSUxGQVNUICgxIDw8IF9fUkVRX0ZBSUxGQVNUKQorI2RlZmluZSBSRVFfU09SVEVEICgxIDw8IF9fUkVRX1NPUlRFRCkKKyNkZWZpbmUgUkVRX1NPRlRCQVJSSUVSICgxIDw8IF9fUkVRX1NPRlRCQVJSSUVSKQorI2RlZmluZSBSRVFfSEFSREJBUlJJRVIgKDEgPDwgX19SRVFfSEFSREJBUlJJRVIpCisjZGVmaW5lIFJFUV9GVUEgKDEgPDwgX19SRVFfRlVBKQorI2RlZmluZSBSRVFfQ01EICgxIDw8IF9fUkVRX0NNRCkKKyNkZWZpbmUgUkVRX05PTUVSR0UgKDEgPDwgX19SRVFfTk9NRVJHRSkKKyNkZWZpbmUgUkVRX1NUQVJURUQgKDEgPDwgX19SRVFfU1RBUlRFRCkKKyNkZWZpbmUgUkVRX0RPTlRQUkVQICgxIDw8IF9fUkVRX0RPTlRQUkVQKQorI2RlZmluZSBSRVFfUVVFVUVEICgxIDw8IF9fUkVRX1FVRVVFRCkKKyNkZWZpbmUgUkVRX0VMVlBSSVYgKDEgPDwgX19SRVFfRUxWUFJJVikKKyNkZWZpbmUgUkVRX1BDICgxIDw8IF9fUkVRX1BDKQorI2RlZmluZSBSRVFfQkxPQ0tfUEMgKDEgPDwgX19SRVFfQkxPQ0tfUEMpCisjZGVmaW5lIFJFUV9TRU5TRSAoMSA8PCBfX1JFUV9TRU5TRSkKKyNkZWZpbmUgUkVRX0ZBSUxFRCAoMSA8PCBfX1JFUV9GQUlMRUQpCisjZGVmaW5lIFJFUV9RVUlFVCAoMSA8PCBfX1JFUV9RVUlFVCkKKyNkZWZpbmUgUkVRX1NQRUNJQUwgKDEgPDwgX19SRVFfU1BFQ0lBTCkKKyNkZWZpbmUgUkVRX0RSSVZFX0NNRCAoMSA8PCBfX1JFUV9EUklWRV9DTUQpCisjZGVmaW5lIFJFUV9EUklWRV9UQVNLICgxIDw8IF9fUkVRX0RSSVZFX1RBU0spCisjZGVmaW5lIFJFUV9EUklWRV9UQVNLRklMRSAoMSA8PCBfX1JFUV9EUklWRV9UQVNLRklMRSkKKyNkZWZpbmUgUkVRX1BSRUVNUFQgKDEgPDwgX19SRVFfUFJFRU1QVCkKKyNkZWZpbmUgUkVRX1BNX1NVU1BFTkQgKDEgPDwgX19SRVFfUE1fU1VTUEVORCkKKyNkZWZpbmUgUkVRX1BNX1JFU1VNRSAoMSA8PCBfX1JFUV9QTV9SRVNVTUUpCisjZGVmaW5lIFJFUV9QTV9TSFVURE9XTiAoMSA8PCBfX1JFUV9QTV9TSFVURE9XTikKKyNkZWZpbmUgUkVRX09SREVSRURfQ09MT1IgKDEgPDwgX19SRVFfT1JERVJFRF9DT0xPUikKKyNkZWZpbmUgUkVRX1JXX1NZTkMgKDEgPDwgX19SRVFfUldfU1lOQykKKworc3RydWN0IHJlcXVlc3RfcG1fc3RhdGUKK3sKKworIGludCBwbV9zdGVwOworCisgdTMyIHBtX3N0YXRlOworIHZvaWQqIGRhdGE7Cit9OworCisjaW5jbHVkZSA8bGludXgvZWxldmF0b3IuaD4KKwordHlwZWRlZiBpbnQgKG1lcmdlX3JlcXVlc3RfZm4pIChyZXF1ZXN0X3F1ZXVlX3QgKiwgc3RydWN0IHJlcXVlc3QgKiwKKyBzdHJ1Y3QgYmlvICopOwordHlwZWRlZiBpbnQgKG1lcmdlX3JlcXVlc3RzX2ZuKSAocmVxdWVzdF9xdWV1ZV90ICosIHN0cnVjdCByZXF1ZXN0ICosCisgc3RydWN0IHJlcXVlc3QgKik7Cit0eXBlZGVmIHZvaWQgKHJlcXVlc3RfZm5fcHJvYykgKHJlcXVlc3RfcXVldWVfdCAqcSk7Cit0eXBlZGVmIGludCAobWFrZV9yZXF1ZXN0X2ZuKSAocmVxdWVzdF9xdWV1ZV90ICpxLCBzdHJ1Y3QgYmlvICpiaW8pOwordHlwZWRlZiBpbnQgKHByZXBfcnFfZm4pIChyZXF1ZXN0X3F1ZXVlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7Cit0eXBlZGVmIHZvaWQgKHVucGx1Z19mbikgKHJlcXVlc3RfcXVldWVfdCAqKTsKKworc3RydWN0IGJpb192ZWM7Cit0eXBlZGVmIGludCAobWVyZ2VfYnZlY19mbikgKHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgYmlvICosIHN0cnVjdCBiaW9fdmVjICopOwordHlwZWRlZiB2b2lkIChhY3Rpdml0eV9mbikgKHZvaWQgKmRhdGEsIGludCBydyk7Cit0eXBlZGVmIGludCAoaXNzdWVfZmx1c2hfZm4pIChyZXF1ZXN0X3F1ZXVlX3QgKiwgc3RydWN0IGdlbmRpc2sgKiwgc2VjdG9yX3QgKik7Cit0eXBlZGVmIHZvaWQgKHByZXBhcmVfZmx1c2hfZm4pIChyZXF1ZXN0X3F1ZXVlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7Cit0eXBlZGVmIHZvaWQgKHNvZnRpcnFfZG9uZV9mbikoc3RydWN0IHJlcXVlc3QgKik7CisKK2VudW0gYmxrX3F1ZXVlX3N0YXRlIHsKKyBRdWV1ZV9kb3duLAorIFF1ZXVlX3VwLAorfTsKKworc3RydWN0IGJsa19xdWV1ZV90YWcgeworIHN0cnVjdCByZXF1ZXN0ICoqdGFnX2luZGV4OworIHVuc2lnbmVkIGxvbmcgKnRhZ19tYXA7Cisgc3RydWN0IGxpc3RfaGVhZCBidXN5X2xpc3Q7CisgaW50IGJ1c3k7CisgaW50IG1heF9kZXB0aDsKKyBpbnQgcmVhbF9tYXhfZGVwdGg7CisgYXRvbWljX3QgcmVmY250OworfTsKKworc3RydWN0IHJlcXVlc3RfcXVldWUKK3sKKworIHN0cnVjdCBsaXN0X2hlYWQgcXVldWVfaGVhZDsKKyBzdHJ1Y3QgcmVxdWVzdCAqbGFzdF9tZXJnZTsKKyBlbGV2YXRvcl90ICplbGV2YXRvcjsKKworIHN0cnVjdCByZXF1ZXN0X2xpc3QgcnE7CisKKyByZXF1ZXN0X2ZuX3Byb2MgKnJlcXVlc3RfZm47CisgbWVyZ2VfcmVxdWVzdF9mbiAqYmFja19tZXJnZV9mbjsKKyBtZXJnZV9yZXF1ZXN0X2ZuICpmcm9udF9tZXJnZV9mbjsKKyBtZXJnZV9yZXF1ZXN0c19mbiAqbWVyZ2VfcmVxdWVzdHNfZm47CisgbWFrZV9yZXF1ZXN0X2ZuICptYWtlX3JlcXVlc3RfZm47CisgcHJlcF9ycV9mbiAqcHJlcF9ycV9mbjsKKyB1bnBsdWdfZm4gKnVucGx1Z19mbjsKKyBtZXJnZV9idmVjX2ZuICptZXJnZV9idmVjX2ZuOworIGFjdGl2aXR5X2ZuICphY3Rpdml0eV9mbjsKKyBpc3N1ZV9mbHVzaF9mbiAqaXNzdWVfZmx1c2hfZm47CisgcHJlcGFyZV9mbHVzaF9mbiAqcHJlcGFyZV9mbHVzaF9mbjsKKyBzb2Z0aXJxX2RvbmVfZm4gKnNvZnRpcnFfZG9uZV9mbjsKKworIHNlY3Rvcl90IGVuZF9zZWN0b3I7Cisgc3RydWN0IHJlcXVlc3QgKmJvdW5kYXJ5X3JxOworCisgc3RydWN0IHRpbWVyX2xpc3QgdW5wbHVnX3RpbWVyOworIGludCB1bnBsdWdfdGhyZXNoOworIHVuc2lnbmVkIGxvbmcgdW5wbHVnX2RlbGF5OworIHN0cnVjdCB3b3JrX3N0cnVjdCB1bnBsdWdfd29yazsKKworIHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvIGJhY2tpbmdfZGV2X2luZm87CisKKyB2b2lkICpxdWV1ZWRhdGE7CisKKyB2b2lkICphY3Rpdml0eV9kYXRhOworCisgdW5zaWduZWQgbG9uZyBib3VuY2VfcGZuOworIGdmcF90IGJvdW5jZV9nZnA7CisKKyB1bnNpZ25lZCBsb25nIHF1ZXVlX2ZsYWdzOworCisgc3BpbmxvY2tfdCBfX3F1ZXVlX2xvY2s7Cisgc3BpbmxvY2tfdCAqcXVldWVfbG9jazsKKworIHN0cnVjdCBrb2JqZWN0IGtvYmo7CisKKyB1bnNpZ25lZCBsb25nIG5yX3JlcXVlc3RzOworIHVuc2lnbmVkIGludCBucl9jb25nZXN0aW9uX29uOworIHVuc2lnbmVkIGludCBucl9jb25nZXN0aW9uX29mZjsKKyB1bnNpZ25lZCBpbnQgbnJfYmF0Y2hpbmc7CisKKyB1bnNpZ25lZCBpbnQgbWF4X3NlY3RvcnM7CisgdW5zaWduZWQgaW50IG1heF9od19zZWN0b3JzOworIHVuc2lnbmVkIHNob3J0IG1heF9waHlzX3NlZ21lbnRzOworIHVuc2lnbmVkIHNob3J0IG1heF9od19zZWdtZW50czsKKyB1bnNpZ25lZCBzaG9ydCBoYXJkc2VjdF9zaXplOworIHVuc2lnbmVkIGludCBtYXhfc2VnbWVudF9zaXplOworCisgdW5zaWduZWQgbG9uZyBzZWdfYm91bmRhcnlfbWFzazsKKyB1bnNpZ25lZCBpbnQgZG1hX2FsaWdubWVudDsKKworIHN0cnVjdCBibGtfcXVldWVfdGFnICpxdWV1ZV90YWdzOworCisgdW5zaWduZWQgaW50IG5yX3NvcnRlZDsKKyB1bnNpZ25lZCBpbnQgaW5fZmxpZ2h0OworCisgdW5zaWduZWQgaW50IHNnX3RpbWVvdXQ7CisgdW5zaWduZWQgaW50IHNnX3Jlc2VydmVkX3NpemU7CisgaW50IG5vZGU7CisKKyBzdHJ1Y3QgYmxrX3RyYWNlICpibGtfdHJhY2U7CisKKyB1bnNpZ25lZCBpbnQgb3JkZXJlZCwgbmV4dF9vcmRlcmVkLCBvcmRzZXE7CisgaW50IG9yZGVyciwgb3JkY29sb3I7Cisgc3RydWN0IHJlcXVlc3QgcHJlX2ZsdXNoX3JxLCBiYXJfcnEsIHBvc3RfZmx1c2hfcnE7Cisgc3RydWN0IHJlcXVlc3QgKm9yaWdfYmFyX3JxOworIHVuc2lnbmVkIGludCBiaV9zaXplOworCisgc3RydWN0IG11dGV4IHN5c2ZzX2xvY2s7Cit9OworCisjZGVmaW5lIFJRX0lOQUNUSVZFICgtMSkKKyNkZWZpbmUgUlFfQUNUSVZFIDEKKworI2RlZmluZSBRVUVVRV9GTEFHX0NMVVNURVIgMCAgCisjZGVmaW5lIFFVRVVFX0ZMQUdfUVVFVUVEIDEgIAorI2RlZmluZSBRVUVVRV9GTEFHX1NUT1BQRUQgMiAgCisjZGVmaW5lIFFVRVVFX0ZMQUdfUkVBREZVTEwgMyAgCisjZGVmaW5lIFFVRVVFX0ZMQUdfV1JJVEVGVUxMIDQgIAorI2RlZmluZSBRVUVVRV9GTEFHX0RFQUQgNSAgCisjZGVmaW5lIFFVRVVFX0ZMQUdfUkVFTlRFUiA2ICAKKyNkZWZpbmUgUVVFVUVfRkxBR19QTFVHR0VEIDcgIAorI2RlZmluZSBRVUVVRV9GTEFHX0VMVlNXSVRDSCA4ICAKKworZW51bSB7CisKKyBRVUVVRV9PUkRFUkVEX05PTkUgPSAweDAwLAorIFFVRVVFX09SREVSRURfRFJBSU4gPSAweDAxLAorIFFVRVVFX09SREVSRURfVEFHID0gMHgwMiwKKworIFFVRVVFX09SREVSRURfUFJFRkxVU0ggPSAweDEwLAorIFFVRVVFX09SREVSRURfUE9TVEZMVVNIID0gMHgyMCwKKyBRVUVVRV9PUkRFUkVEX0ZVQSA9IDB4NDAsCisKKyBRVUVVRV9PUkRFUkVEX0RSQUlOX0ZMVVNIID0gUVVFVUVfT1JERVJFRF9EUkFJTiB8CisgUVVFVUVfT1JERVJFRF9QUkVGTFVTSCB8IFFVRVVFX09SREVSRURfUE9TVEZMVVNILAorIFFVRVVFX09SREVSRURfRFJBSU5fRlVBID0gUVVFVUVfT1JERVJFRF9EUkFJTiB8CisgUVVFVUVfT1JERVJFRF9QUkVGTFVTSCB8IFFVRVVFX09SREVSRURfRlVBLAorIFFVRVVFX09SREVSRURfVEFHX0ZMVVNIID0gUVVFVUVfT1JERVJFRF9UQUcgfAorIFFVRVVFX09SREVSRURfUFJFRkxVU0ggfCBRVUVVRV9PUkRFUkVEX1BPU1RGTFVTSCwKKyBRVUVVRV9PUkRFUkVEX1RBR19GVUEgPSBRVUVVRV9PUkRFUkVEX1RBRyB8CisgUVVFVUVfT1JERVJFRF9QUkVGTFVTSCB8IFFVRVVFX09SREVSRURfRlVBLAorCisgUVVFVUVfT1JEU0VRX1NUQVJURUQgPSAweDAxLAorIFFVRVVFX09SRFNFUV9EUkFJTiA9IDB4MDIsCisgUVVFVUVfT1JEU0VRX1BSRUZMVVNIID0gMHgwNCwKKyBRVUVVRV9PUkRTRVFfQkFSID0gMHgwOCwKKyBRVUVVRV9PUkRTRVFfUE9TVEZMVVNIID0gMHgxMCwKKyBRVUVVRV9PUkRTRVFfRE9ORSA9IDB4MjAsCit9OworCisjZGVmaW5lIGJsa19xdWV1ZV9wbHVnZ2VkKHEpIHRlc3RfYml0KFFVRVVFX0ZMQUdfUExVR0dFRCwgJihxKS0+cXVldWVfZmxhZ3MpCisjZGVmaW5lIGJsa19xdWV1ZV90YWdnZWQocSkgdGVzdF9iaXQoUVVFVUVfRkxBR19RVUVVRUQsICYocSktPnF1ZXVlX2ZsYWdzKQorI2RlZmluZSBibGtfcXVldWVfc3RvcHBlZChxKSB0ZXN0X2JpdChRVUVVRV9GTEFHX1NUT1BQRUQsICYocSktPnF1ZXVlX2ZsYWdzKQorI2RlZmluZSBibGtfcXVldWVfZmx1c2hpbmcocSkgKChxKS0+b3Jkc2VxKQorCisjZGVmaW5lIGJsa19mc19yZXF1ZXN0KHJxKSAoKHJxKS0+ZmxhZ3MgJiBSRVFfQ01EKQorI2RlZmluZSBibGtfcGNfcmVxdWVzdChycSkgKChycSktPmZsYWdzICYgUkVRX0JMT0NLX1BDKQorI2RlZmluZSBibGtfbm9yZXRyeV9yZXF1ZXN0KHJxKSAoKHJxKS0+ZmxhZ3MgJiBSRVFfRkFJTEZBU1QpCisjZGVmaW5lIGJsa19ycV9zdGFydGVkKHJxKSAoKHJxKS0+ZmxhZ3MgJiBSRVFfU1RBUlRFRCkKKworI2RlZmluZSBibGtfYWNjb3VudF9ycShycSkgKGJsa19ycV9zdGFydGVkKHJxKSAmJiBibGtfZnNfcmVxdWVzdChycSkpCisKKyNkZWZpbmUgYmxrX3BtX3N1c3BlbmRfcmVxdWVzdChycSkgKChycSktPmZsYWdzICYgUkVRX1BNX1NVU1BFTkQpCisjZGVmaW5lIGJsa19wbV9yZXN1bWVfcmVxdWVzdChycSkgKChycSktPmZsYWdzICYgUkVRX1BNX1JFU1VNRSkKKyNkZWZpbmUgYmxrX3BtX3JlcXVlc3QocnEpICAgKChycSktPmZsYWdzICYgKFJFUV9QTV9TVVNQRU5EIHwgUkVRX1BNX1JFU1VNRSkpCisKKyNkZWZpbmUgYmxrX3NvcnRlZF9ycShycSkgKChycSktPmZsYWdzICYgUkVRX1NPUlRFRCkKKyNkZWZpbmUgYmxrX2JhcnJpZXJfcnEocnEpICgocnEpLT5mbGFncyAmIFJFUV9IQVJEQkFSUklFUikKKyNkZWZpbmUgYmxrX2Z1YV9ycShycSkgKChycSktPmZsYWdzICYgUkVRX0ZVQSkKKworI2RlZmluZSBsaXN0X2VudHJ5X3JxKHB0cikgbGlzdF9lbnRyeSgocHRyKSwgc3RydWN0IHJlcXVlc3QsIHF1ZXVlbGlzdCkKKworI2RlZmluZSBycV9kYXRhX2RpcihycSkgKChycSktPmZsYWdzICYgMSkKKworI2RlZmluZSBSUV9OT01FUkdFX0ZMQUdTICAgKFJFUV9OT01FUkdFIHwgUkVRX1NUQVJURUQgfCBSRVFfSEFSREJBUlJJRVIgfCBSRVFfU09GVEJBUlJJRVIpCisjZGVmaW5lIHJxX21lcmdlYWJsZShycSkgICAoISgocnEpLT5mbGFncyAmIFJRX05PTUVSR0VfRkxBR1MpICYmIGJsa19mc19yZXF1ZXN0KChycSkpKQorI2RlZmluZSBibGtfcXVldWVfaGVhZGFjdGl2ZShxLCBoZWFkX2FjdGl2ZSkKKyNkZWZpbmUgQkxLUFJFUF9PSyAwICAKKyNkZWZpbmUgQkxLUFJFUF9LSUxMIDEgIAorI2RlZmluZSBCTEtQUkVQX0RFRkVSIDIgIAorCisjZGVmaW5lIEJMS19CT1VOQ0VfSElHSCAoKHU2NClibGtfbWF4X2xvd19wZm4gPDwgUEFHRV9TSElGVCkKKyNkZWZpbmUgQkxLX0JPVU5DRV9BTlkgKCh1NjQpYmxrX21heF9wZm4gPDwgUEFHRV9TSElGVCkKKyNkZWZpbmUgQkxLX0JPVU5DRV9JU0EgKElTQV9ETUFfVEhSRVNIT0xEKQorCisjZGVmaW5lIHJxX2Zvcl9lYWNoX2JpbyhfYmlvLCBycSkgICBpZiAoKHJxLT5iaW8pKSAgIGZvciAoX2JpbyA9IChycSktPmJpbzsgX2JpbzsgX2JpbyA9IF9iaW8tPmJpX25leHQpCisKKyNkZWZpbmUgZW5kX2lvX2Vycm9yKHVwdG9kYXRlKSAodW5saWtlbHkoKHVwdG9kYXRlKSA8PSAwKSkKKworI2RlZmluZSBibGtfcXVldWVfdGFnX2RlcHRoKHEpICgocSktPnF1ZXVlX3RhZ3MtPmJ1c3kpCisjZGVmaW5lIGJsa19xdWV1ZV90YWdfcXVldWUocSkgKChxKS0+cXVldWVfdGFncy0+YnVzeSA8IChxKS0+cXVldWVfdGFncy0+bWF4X2RlcHRoKQorI2RlZmluZSBibGtfcnFfdGFnZ2VkKHJxKSAoKHJxKS0+ZmxhZ3MgJiBSRVFfUVVFVUVEKQorCisjZGVmaW5lIE1BWF9QSFlTX1NFR01FTlRTIDEyOAorI2RlZmluZSBNQVhfSFdfU0VHTUVOVFMgMTI4CisjZGVmaW5lIFNBRkVfTUFYX1NFQ1RPUlMgMjU1CisjZGVmaW5lIEJMS19ERUZfTUFYX1NFQ1RPUlMgMTAyNAorCisjZGVmaW5lIE1BWF9TRUdNRU5UX1NJWkUgNjU1MzYKKworI2RlZmluZSBibGtkZXZfZW50cnlfdG9fcmVxdWVzdChlbnRyeSkgbGlzdF9lbnRyeSgoZW50cnkpLCBzdHJ1Y3QgcmVxdWVzdCwgcXVldWVsaXN0KQorCisjZGVmaW5lIGJsa19maW5pc2hlZF9pbyhuc2VjdHMpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgYmxrX3N0YXJ0ZWRfaW8obnNlY3RzKSBkbyB7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgc2VjdG9yX2RpdihuLCBiKSggIHsgICBpbnQgX3JlczsgICBfcmVzID0gKG4pICUgKGIpOyAgIChuKSAvPSAoYik7ICAgX3JlczsgIH0gICkKKworI2RlZmluZSBNT0RVTEVfQUxJQVNfQkxPQ0tERVYobWFqb3IsbWlub3IpICAgTU9EVUxFX0FMSUFTKCJibG9jay1tYWpvci0iIF9fc3RyaW5naWZ5KG1ham9yKSAiLSIgX19zdHJpbmdpZnkobWlub3IpKQorI2RlZmluZSBNT0RVTEVfQUxJQVNfQkxPQ0tERVZfTUFKT1IobWFqb3IpICAgTU9EVUxFX0FMSUFTKCJibG9jay1tYWpvci0iIF9fc3RyaW5naWZ5KG1ham9yKSAiLSoiKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ibGtwZy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Jsa3BnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVhNGE0NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ibGtwZy5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX0JMS1BHX0gKKyNkZWZpbmUgX0xJTlVYX0JMS1BHX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKworI2RlZmluZSBCTEtQRyBfSU8oMHgxMiwxMDUpCisKK3N0cnVjdCBibGtwZ19pb2N0bF9hcmcgeworIGludCBvcDsKKyBpbnQgZmxhZ3M7CisgaW50IGRhdGFsZW47Cisgdm9pZCBfX3VzZXIgKmRhdGE7Cit9OworCisjZGVmaW5lIEJMS1BHX0FERF9QQVJUSVRJT04gMQorI2RlZmluZSBCTEtQR19ERUxfUEFSVElUSU9OIDIKKworI2RlZmluZSBCTEtQR19ERVZOQU1FTFRIIDY0CisjZGVmaW5lIEJMS1BHX1ZPTE5BTUVMVEggNjQKKworc3RydWN0IGJsa3BnX3BhcnRpdGlvbiB7CisgbG9uZyBsb25nIHN0YXJ0OworIGxvbmcgbG9uZyBsZW5ndGg7CisgaW50IHBubzsKKyBjaGFyIGRldm5hbWVbQkxLUEdfREVWTkFNRUxUSF07CisgY2hhciB2b2xuYW1lW0JMS1BHX1ZPTE5BTUVMVEhdOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYmxvY2tncm91cF9sb2NrLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYmxvY2tncm91cF9sb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgxNDAyMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ibG9ja2dyb3VwX2xvY2suaApAQCAtMCwwICsxLDI5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9CTE9DS0dST1VQX0xPQ0tfSAorI2RlZmluZSBfTElOVVhfQkxPQ0tHUk9VUF9MT0NLX0gKKworI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KKworI2RlZmluZSBOUl9CR19MT0NLUyAxCisKK3N0cnVjdCBiZ2xfbG9jayB7Cisgc3BpbmxvY2tfdCBsb2NrOworfSBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOworCitzdHJ1Y3QgYmxvY2tncm91cF9sb2NrIHsKKyBzdHJ1Y3QgYmdsX2xvY2sgbG9ja3NbTlJfQkdfTE9DS1NdOworfTsKKworI2RlZmluZSBzYl9iZ2xfbG9jayhzYiwgYmxvY2tfZ3JvdXApICAgKCYoc2IpLT5zX2Jsb2NrZ3JvdXBfbG9jay5sb2Nrc1soYmxvY2tfZ3JvdXApICYgKE5SX0JHX0xPQ0tTLTEpXS5sb2NrKQorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYnl0ZW9yZGVyL2JpZ19lbmRpYW4uaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ieXRlb3JkZXIvYmlnX2VuZGlhbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlMGQ4ODAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYnl0ZW9yZGVyL2JpZ19lbmRpYW4uaApAQCAtMCwwICsxLDY3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9CWVRFT1JERVJfQklHX0VORElBTl9ICisjZGVmaW5lIF9MSU5VWF9CWVRFT1JERVJfQklHX0VORElBTl9ICisKKyNpZm5kZWYgX19CSUdfRU5ESUFOCisjZGVmaW5lIF9fQklHX0VORElBTiA0MzIxCisjZW5kaWYKKyNpZm5kZWYgX19CSUdfRU5ESUFOX0JJVEZJRUxECisjZGVmaW5lIF9fQklHX0VORElBTl9CSVRGSUVMRAorI2VuZGlmCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9zd2FiLmg+CisKKyNkZWZpbmUgX19jb25zdGFudF9odG9ubCh4KSAoKF9fZm9yY2UgX19iZTMyKShfX3UzMikoeCkpCisjZGVmaW5lIF9fY29uc3RhbnRfbnRvaGwoeCkgKChfX2ZvcmNlIF9fdTMyKShfX2JlMzIpKHgpKQorI2RlZmluZSBfX2NvbnN0YW50X2h0b25zKHgpICgoX19mb3JjZSBfX2JlMTYpKF9fdTE2KSh4KSkKKyNkZWZpbmUgX19jb25zdGFudF9udG9ocyh4KSAoKF9fZm9yY2UgX191MTYpKF9fYmUxNikoeCkpCisjZGVmaW5lIF9fY29uc3RhbnRfY3B1X3RvX2xlNjQoeCkgKChfX2ZvcmNlIF9fbGU2NClfX19jb25zdGFudF9zd2FiNjQoKHgpKSkKKyNkZWZpbmUgX19jb25zdGFudF9sZTY0X3RvX2NwdSh4KSBfX19jb25zdGFudF9zd2FiNjQoKF9fZm9yY2UgX191NjQpKF9fbGU2NCkoeCkpCisjZGVmaW5lIF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoeCkgKChfX2ZvcmNlIF9fbGUzMilfX19jb25zdGFudF9zd2FiMzIoKHgpKSkKKyNkZWZpbmUgX19jb25zdGFudF9sZTMyX3RvX2NwdSh4KSBfX19jb25zdGFudF9zd2FiMzIoKF9fZm9yY2UgX191MzIpKF9fbGUzMikoeCkpCisjZGVmaW5lIF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoeCkgKChfX2ZvcmNlIF9fbGUxNilfX19jb25zdGFudF9zd2FiMTYoKHgpKSkKKyNkZWZpbmUgX19jb25zdGFudF9sZTE2X3RvX2NwdSh4KSBfX19jb25zdGFudF9zd2FiMTYoKF9fZm9yY2UgX191MTYpKF9fbGUxNikoeCkpCisjZGVmaW5lIF9fY29uc3RhbnRfY3B1X3RvX2JlNjQoeCkgKChfX2ZvcmNlIF9fYmU2NCkoX191NjQpKHgpKQorI2RlZmluZSBfX2NvbnN0YW50X2JlNjRfdG9fY3B1KHgpICgoX19mb3JjZSBfX3U2NCkoX19iZTY0KSh4KSkKKyNkZWZpbmUgX19jb25zdGFudF9jcHVfdG9fYmUzMih4KSAoKF9fZm9yY2UgX19iZTMyKShfX3UzMikoeCkpCisjZGVmaW5lIF9fY29uc3RhbnRfYmUzMl90b19jcHUoeCkgKChfX2ZvcmNlIF9fdTMyKShfX2JlMzIpKHgpKQorI2RlZmluZSBfX2NvbnN0YW50X2NwdV90b19iZTE2KHgpICgoX19mb3JjZSBfX2JlMTYpKF9fdTE2KSh4KSkKKyNkZWZpbmUgX19jb25zdGFudF9iZTE2X3RvX2NwdSh4KSAoKF9fZm9yY2UgX191MTYpKF9fYmUxNikoeCkpCisjZGVmaW5lIF9fY3B1X3RvX2xlNjQoeCkgKChfX2ZvcmNlIF9fbGU2NClfX3N3YWI2NCgoeCkpKQorI2RlZmluZSBfX2xlNjRfdG9fY3B1KHgpIF9fc3dhYjY0KChfX2ZvcmNlIF9fdTY0KShfX2xlNjQpKHgpKQorI2RlZmluZSBfX2NwdV90b19sZTMyKHgpICgoX19mb3JjZSBfX2xlMzIpX19zd2FiMzIoKHgpKSkKKyNkZWZpbmUgX19sZTMyX3RvX2NwdSh4KSBfX3N3YWIzMigoX19mb3JjZSBfX3UzMikoX19sZTMyKSh4KSkKKyNkZWZpbmUgX19jcHVfdG9fbGUxNih4KSAoKF9fZm9yY2UgX19sZTE2KV9fc3dhYjE2KCh4KSkpCisjZGVmaW5lIF9fbGUxNl90b19jcHUoeCkgX19zd2FiMTYoKF9fZm9yY2UgX191MTYpKF9fbGUxNikoeCkpCisjZGVmaW5lIF9fY3B1X3RvX2JlNjQoeCkgKChfX2ZvcmNlIF9fYmU2NCkoX191NjQpKHgpKQorI2RlZmluZSBfX2JlNjRfdG9fY3B1KHgpICgoX19mb3JjZSBfX3U2NCkoX19iZTY0KSh4KSkKKyNkZWZpbmUgX19jcHVfdG9fYmUzMih4KSAoKF9fZm9yY2UgX19iZTMyKShfX3UzMikoeCkpCisjZGVmaW5lIF9fYmUzMl90b19jcHUoeCkgKChfX2ZvcmNlIF9fdTMyKShfX2JlMzIpKHgpKQorI2RlZmluZSBfX2NwdV90b19iZTE2KHgpICgoX19mb3JjZSBfX2JlMTYpKF9fdTE2KSh4KSkKKyNkZWZpbmUgX19iZTE2X3RvX2NwdSh4KSAoKF9fZm9yY2UgX191MTYpKF9fYmUxNikoeCkpCisKKyNkZWZpbmUgX19jcHVfdG9fbGU2NHMoeCkgX19zd2FiNjRzKCh4KSkKKyNkZWZpbmUgX19sZTY0X3RvX2NwdXMoeCkgX19zd2FiNjRzKCh4KSkKKyNkZWZpbmUgX19jcHVfdG9fbGUzMnMoeCkgX19zd2FiMzJzKCh4KSkKKyNkZWZpbmUgX19sZTMyX3RvX2NwdXMoeCkgX19zd2FiMzJzKCh4KSkKKyNkZWZpbmUgX19jcHVfdG9fbGUxNnMoeCkgX19zd2FiMTZzKCh4KSkKKyNkZWZpbmUgX19sZTE2X3RvX2NwdXMoeCkgX19zd2FiMTZzKCh4KSkKKyNkZWZpbmUgX19jcHVfdG9fYmU2NHMoeCkgZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIF9fYmU2NF90b19jcHVzKHgpIGRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBfX2NwdV90b19iZTMycyh4KSBkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgX19iZTMyX3RvX2NwdXMoeCkgZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIF9fY3B1X3RvX2JlMTZzKHgpIGRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBfX2JlMTZfdG9fY3B1cyh4KSBkbyB7fSB3aGlsZSAoMCkKKyNpbmNsdWRlIDxsaW51eC9ieXRlb3JkZXIvZ2VuZXJpYy5oPgorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYnl0ZW9yZGVyL2dlbmVyaWMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ieXRlb3JkZXIvZ2VuZXJpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjNDY5ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYnl0ZW9yZGVyL2dlbmVyaWMuaApAQCAtMCwwICsxLDE1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9CWVRFT1JERVJfR0VORVJJQ19ICisjZGVmaW5lIF9MSU5VWF9CWVRFT1JERVJfR0VORVJJQ19ICisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2J5dGVvcmRlci9saXR0bGVfZW5kaWFuLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYnl0ZW9yZGVyL2xpdHRsZV9lbmRpYW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzI2ZTljCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2J5dGVvcmRlci9saXR0bGVfZW5kaWFuLmgKQEAgLTAsMCArMSw2NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfQllURU9SREVSX0xJVFRMRV9FTkRJQU5fSAorI2RlZmluZSBfTElOVVhfQllURU9SREVSX0xJVFRMRV9FTkRJQU5fSAorCisjaWZuZGVmIF9fTElUVExFX0VORElBTgorI2RlZmluZSBfX0xJVFRMRV9FTkRJQU4gMTIzNAorI2VuZGlmCisjaWZuZGVmIF9fTElUVExFX0VORElBTl9CSVRGSUVMRAorI2RlZmluZSBfX0xJVFRMRV9FTkRJQU5fQklURklFTEQKKyNlbmRpZgorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9ieXRlb3JkZXIvc3dhYi5oPgorCisjZGVmaW5lIF9fY29uc3RhbnRfaHRvbmwoeCkgKChfX2ZvcmNlIF9fYmUzMilfX19jb25zdGFudF9zd2FiMzIoKHgpKSkKKyNkZWZpbmUgX19jb25zdGFudF9udG9obCh4KSBfX19jb25zdGFudF9zd2FiMzIoKF9fZm9yY2UgX19iZTMyKSh4KSkKKyNkZWZpbmUgX19jb25zdGFudF9odG9ucyh4KSAoKF9fZm9yY2UgX19iZTE2KV9fX2NvbnN0YW50X3N3YWIxNigoeCkpKQorI2RlZmluZSBfX2NvbnN0YW50X250b2hzKHgpIF9fX2NvbnN0YW50X3N3YWIxNigoX19mb3JjZSBfX2JlMTYpKHgpKQorI2RlZmluZSBfX2NvbnN0YW50X2NwdV90b19sZTY0KHgpICgoX19mb3JjZSBfX2xlNjQpKF9fdTY0KSh4KSkKKyNkZWZpbmUgX19jb25zdGFudF9sZTY0X3RvX2NwdSh4KSAoKF9fZm9yY2UgX191NjQpKF9fbGU2NCkoeCkpCisjZGVmaW5lIF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoeCkgKChfX2ZvcmNlIF9fbGUzMikoX191MzIpKHgpKQorI2RlZmluZSBfX2NvbnN0YW50X2xlMzJfdG9fY3B1KHgpICgoX19mb3JjZSBfX3UzMikoX19sZTMyKSh4KSkKKyNkZWZpbmUgX19jb25zdGFudF9jcHVfdG9fbGUxNih4KSAoKF9fZm9yY2UgX19sZTE2KShfX3UxNikoeCkpCisjZGVmaW5lIF9fY29uc3RhbnRfbGUxNl90b19jcHUoeCkgKChfX2ZvcmNlIF9fdTE2KShfX2xlMTYpKHgpKQorI2RlZmluZSBfX2NvbnN0YW50X2NwdV90b19iZTY0KHgpICgoX19mb3JjZSBfX2JlNjQpX19fY29uc3RhbnRfc3dhYjY0KCh4KSkpCisjZGVmaW5lIF9fY29uc3RhbnRfYmU2NF90b19jcHUoeCkgX19fY29uc3RhbnRfc3dhYjY0KChfX2ZvcmNlIF9fdTY0KShfX2JlNjQpKHgpKQorI2RlZmluZSBfX2NvbnN0YW50X2NwdV90b19iZTMyKHgpICgoX19mb3JjZSBfX2JlMzIpX19fY29uc3RhbnRfc3dhYjMyKCh4KSkpCisjZGVmaW5lIF9fY29uc3RhbnRfYmUzMl90b19jcHUoeCkgX19fY29uc3RhbnRfc3dhYjMyKChfX2ZvcmNlIF9fdTMyKShfX2JlMzIpKHgpKQorI2RlZmluZSBfX2NvbnN0YW50X2NwdV90b19iZTE2KHgpICgoX19mb3JjZSBfX2JlMTYpX19fY29uc3RhbnRfc3dhYjE2KCh4KSkpCisjZGVmaW5lIF9fY29uc3RhbnRfYmUxNl90b19jcHUoeCkgX19fY29uc3RhbnRfc3dhYjE2KChfX2ZvcmNlIF9fdTE2KShfX2JlMTYpKHgpKQorI2RlZmluZSBfX2NwdV90b19sZTY0KHgpICgoX19mb3JjZSBfX2xlNjQpKF9fdTY0KSh4KSkKKyNkZWZpbmUgX19sZTY0X3RvX2NwdSh4KSAoKF9fZm9yY2UgX191NjQpKF9fbGU2NCkoeCkpCisjZGVmaW5lIF9fY3B1X3RvX2xlMzIoeCkgKChfX2ZvcmNlIF9fbGUzMikoX191MzIpKHgpKQorI2RlZmluZSBfX2xlMzJfdG9fY3B1KHgpICgoX19mb3JjZSBfX3UzMikoX19sZTMyKSh4KSkKKyNkZWZpbmUgX19jcHVfdG9fbGUxNih4KSAoKF9fZm9yY2UgX19sZTE2KShfX3UxNikoeCkpCisjZGVmaW5lIF9fbGUxNl90b19jcHUoeCkgKChfX2ZvcmNlIF9fdTE2KShfX2xlMTYpKHgpKQorI2RlZmluZSBfX2NwdV90b19iZTY0KHgpICgoX19mb3JjZSBfX2JlNjQpX19zd2FiNjQoKHgpKSkKKyNkZWZpbmUgX19iZTY0X3RvX2NwdSh4KSBfX3N3YWI2NCgoX19mb3JjZSBfX3U2NCkoX19iZTY0KSh4KSkKKyNkZWZpbmUgX19jcHVfdG9fYmUzMih4KSAoKF9fZm9yY2UgX19iZTMyKV9fc3dhYjMyKCh4KSkpCisjZGVmaW5lIF9fYmUzMl90b19jcHUoeCkgX19zd2FiMzIoKF9fZm9yY2UgX191MzIpKF9fYmUzMikoeCkpCisjZGVmaW5lIF9fY3B1X3RvX2JlMTYoeCkgKChfX2ZvcmNlIF9fYmUxNilfX3N3YWIxNigoeCkpKQorI2RlZmluZSBfX2JlMTZfdG9fY3B1KHgpIF9fc3dhYjE2KChfX2ZvcmNlIF9fdTE2KShfX2JlMTYpKHgpKQorCisjZGVmaW5lIF9fY3B1X3RvX2xlNjRzKHgpIGRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBfX2xlNjRfdG9fY3B1cyh4KSBkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgX19jcHVfdG9fbGUzMnMoeCkgZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIF9fbGUzMl90b19jcHVzKHgpIGRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBfX2NwdV90b19sZTE2cyh4KSBkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgX19sZTE2X3RvX2NwdXMoeCkgZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIF9fY3B1X3RvX2JlNjRzKHgpIF9fc3dhYjY0cygoeCkpCisjZGVmaW5lIF9fYmU2NF90b19jcHVzKHgpIF9fc3dhYjY0cygoeCkpCisjZGVmaW5lIF9fY3B1X3RvX2JlMzJzKHgpIF9fc3dhYjMycygoeCkpCisjZGVmaW5lIF9fYmUzMl90b19jcHVzKHgpIF9fc3dhYjMycygoeCkpCisjZGVmaW5lIF9fY3B1X3RvX2JlMTZzKHgpIF9fc3dhYjE2cygoeCkpCisjZGVmaW5lIF9fYmUxNl90b19jcHVzKHgpIF9fc3dhYjE2cygoeCkpCisjaW5jbHVkZSA8bGludXgvYnl0ZW9yZGVyL2dlbmVyaWMuaD4KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2J5dGVvcmRlci9zd2FiLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYnl0ZW9yZGVyL3N3YWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzMzNmI1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2J5dGVvcmRlci9zd2FiLmgKQEAgLTAsMCArMSw3MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfQllURU9SREVSX1NXQUJfSAorI2RlZmluZSBfTElOVVhfQllURU9SREVSX1NXQUJfSAorCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKworI2RlZmluZSBfX19zd2FiMTYoeCkgICh7ICAgX191MTYgX194ID0gKHgpOyAgICgoX191MTYpKCAgICgoKF9fdTE2KShfX3gpICYgKF9fdTE2KTB4MDBmZlUpIDw8IDgpIHwgICAoKChfX3UxNikoX194KSAmIChfX3UxNikweGZmMDBVKSA+PiA4KSApKTsgIH0pCisKKyNkZWZpbmUgX19fc3dhYjMyKHgpICAoeyAgIF9fdTMyIF9feCA9ICh4KTsgICAoKF9fdTMyKSggICAoKChfX3UzMikoX194KSAmIChfX3UzMikweDAwMDAwMGZmVUwpIDw8IDI0KSB8ICAgKCgoX191MzIpKF9feCkgJiAoX191MzIpMHgwMDAwZmYwMFVMKSA8PCA4KSB8ICAgKCgoX191MzIpKF9feCkgJiAoX191MzIpMHgwMGZmMDAwMFVMKSA+PiA4KSB8ICAgKCgoX191MzIpKF9feCkgJiAoX191MzIpMHhmZjAwMDAwMFVMKSA+PiAyNCkgKSk7ICB9KQorCisjZGVmaW5lIF9fX3N3YWI2NCh4KSAgKHsgICBfX3U2NCBfX3ggPSAoeCk7ICAgKChfX3U2NCkoICAgKF9fdTY0KSgoKF9fdTY0KShfX3gpICYgKF9fdTY0KTB4MDAwMDAwMDAwMDAwMDBmZlVMTCkgPDwgNTYpIHwgICAoX191NjQpKCgoX191NjQpKF9feCkgJiAoX191NjQpMHgwMDAwMDAwMDAwMDBmZjAwVUxMKSA8PCA0MCkgfCAgIChfX3U2NCkoKChfX3U2NCkoX194KSAmIChfX3U2NCkweDAwMDAwMDAwMDBmZjAwMDBVTEwpIDw8IDI0KSB8ICAgKF9fdTY0KSgoKF9fdTY0KShfX3gpICYgKF9fdTY0KTB4MDAwMDAwMDBmZjAwMDAwMFVMTCkgPDwgOCkgfCAgIChfX3U2NCkoKChfX3U2NCkoX194KSAmIChfX3U2NCkweDAwMDAwMGZmMDAwMDAwMDBVTEwpID4+IDgpIHwgICAoX191NjQpKCgoX191NjQpKF9feCkgJiAoX191NjQpMHgwMDAwZmYwMDAwMDAwMDAwVUxMKSA+PiAyNCkgfCAgIChfX3U2NCkoKChfX3U2NCkoX194KSAmIChfX3U2NCkweDAwZmYwMDAwMDAwMDAwMDBVTEwpID4+IDQwKSB8ICAgKF9fdTY0KSgoKF9fdTY0KShfX3gpICYgKF9fdTY0KTB4ZmYwMDAwMDAwMDAwMDAwMFVMTCkgPj4gNTYpICkpOyAgfSkKKworI2RlZmluZSBfX19jb25zdGFudF9zd2FiMTYoeCkgICAoKF9fdTE2KSggICAoKChfX3UxNikoeCkgJiAoX191MTYpMHgwMGZmVSkgPDwgOCkgfCAgICgoKF9fdTE2KSh4KSAmIChfX3UxNikweGZmMDBVKSA+PiA4KSApKQorI2RlZmluZSBfX19jb25zdGFudF9zd2FiMzIoeCkgICAoKF9fdTMyKSggICAoKChfX3UzMikoeCkgJiAoX191MzIpMHgwMDAwMDBmZlVMKSA8PCAyNCkgfCAgICgoKF9fdTMyKSh4KSAmIChfX3UzMikweDAwMDBmZjAwVUwpIDw8IDgpIHwgICAoKChfX3UzMikoeCkgJiAoX191MzIpMHgwMGZmMDAwMFVMKSA+PiA4KSB8ICAgKCgoX191MzIpKHgpICYgKF9fdTMyKTB4ZmYwMDAwMDBVTCkgPj4gMjQpICkpCisjZGVmaW5lIF9fX2NvbnN0YW50X3N3YWI2NCh4KSAgICgoX191NjQpKCAgIChfX3U2NCkoKChfX3U2NCkoeCkgJiAoX191NjQpMHgwMDAwMDAwMDAwMDAwMGZmVUxMKSA8PCA1NikgfCAgIChfX3U2NCkoKChfX3U2NCkoeCkgJiAoX191NjQpMHgwMDAwMDAwMDAwMDBmZjAwVUxMKSA8PCA0MCkgfCAgIChfX3U2NCkoKChfX3U2NCkoeCkgJiAoX191NjQpMHgwMDAwMDAwMDAwZmYwMDAwVUxMKSA8PCAyNCkgfCAgIChfX3U2NCkoKChfX3U2NCkoeCkgJiAoX191NjQpMHgwMDAwMDAwMGZmMDAwMDAwVUxMKSA8PCA4KSB8ICAgKF9fdTY0KSgoKF9fdTY0KSh4KSAmIChfX3U2NCkweDAwMDAwMGZmMDAwMDAwMDBVTEwpID4+IDgpIHwgICAoX191NjQpKCgoX191NjQpKHgpICYgKF9fdTY0KTB4MDAwMGZmMDAwMDAwMDAwMFVMTCkgPj4gMjQpIHwgICAoX191NjQpKCgoX191NjQpKHgpICYgKF9fdTY0KTB4MDBmZjAwMDAwMDAwMDAwMFVMTCkgPj4gNDApIHwgICAoX191NjQpKCgoX191NjQpKHgpICYgKF9fdTY0KTB4ZmYwMDAwMDAwMDAwMDAwMFVMTCkgPj4gNTYpICkpCisKKyNpZm5kZWYgX19hcmNoX19zd2FiMTYKKyNkZWZpbmUgX19hcmNoX19zd2FiMTYoeCkgKHsgX191MTYgX190bXAgPSAoeCkgOyBfX19zd2FiMTYoX190bXApOyB9KQorI2VuZGlmCisjaWZuZGVmIF9fYXJjaF9fc3dhYjMyCisjZGVmaW5lIF9fYXJjaF9fc3dhYjMyKHgpICh7IF9fdTMyIF9fdG1wID0gKHgpIDsgX19fc3dhYjMyKF9fdG1wKTsgfSkKKyNlbmRpZgorI2lmbmRlZiBfX2FyY2hfX3N3YWI2NAorI2RlZmluZSBfX2FyY2hfX3N3YWI2NCh4KSAoeyBfX3U2NCBfX3RtcCA9ICh4KSA7IF9fX3N3YWI2NChfX3RtcCk7IH0pCisjZW5kaWYKKworI2lmbmRlZiBfX2FyY2hfX3N3YWIxNnAKKyNkZWZpbmUgX19hcmNoX19zd2FiMTZwKHgpIF9fYXJjaF9fc3dhYjE2KCooeCkpCisjZW5kaWYKKyNpZm5kZWYgX19hcmNoX19zd2FiMzJwCisjZGVmaW5lIF9fYXJjaF9fc3dhYjMycCh4KSBfX2FyY2hfX3N3YWIzMigqKHgpKQorI2VuZGlmCisjaWZuZGVmIF9fYXJjaF9fc3dhYjY0cAorI2RlZmluZSBfX2FyY2hfX3N3YWI2NHAoeCkgX19hcmNoX19zd2FiNjQoKih4KSkKKyNlbmRpZgorCisjaWZuZGVmIF9fYXJjaF9fc3dhYjE2cworI2RlZmluZSBfX2FyY2hfX3N3YWIxNnMoeCkgZG8geyAqKHgpID0gX19hcmNoX19zd2FiMTZwKCh4KSk7IH0gd2hpbGUgKDApCisjZW5kaWYKKyNpZm5kZWYgX19hcmNoX19zd2FiMzJzCisjZGVmaW5lIF9fYXJjaF9fc3dhYjMycyh4KSBkbyB7ICooeCkgPSBfX2FyY2hfX3N3YWIzMnAoKHgpKTsgfSB3aGlsZSAoMCkKKyNlbmRpZgorI2lmbmRlZiBfX2FyY2hfX3N3YWI2NHMKKyNkZWZpbmUgX19hcmNoX19zd2FiNjRzKHgpIGRvIHsgKih4KSA9IF9fYXJjaF9fc3dhYjY0cCgoeCkpOyB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKF9fT1BUSU1JWkVfXykKKyNkZWZpbmUgX19zd2FiMTYoeCkgIChfX2J1aWx0aW5fY29uc3RhbnRfcCgoX191MTYpKHgpKSA/ICAgX19fc3dhYjE2KCh4KSkgOiAgIF9fZnN3YWIxNigoeCkpKQorI2RlZmluZSBfX3N3YWIzMih4KSAgKF9fYnVpbHRpbl9jb25zdGFudF9wKChfX3UzMikoeCkpID8gICBfX19zd2FiMzIoKHgpKSA6ICAgX19mc3dhYjMyKCh4KSkpCisjZGVmaW5lIF9fc3dhYjY0KHgpICAoX19idWlsdGluX2NvbnN0YW50X3AoKF9fdTY0KSh4KSkgPyAgIF9fX3N3YWI2NCgoeCkpIDogICBfX2Zzd2FiNjQoKHgpKSkKKyNlbHNlCisjZGVmaW5lIF9fc3dhYjE2KHgpIF9fZnN3YWIxNih4KQorI2RlZmluZSBfX3N3YWIzMih4KSBfX2Zzd2FiMzIoeCkKKyNkZWZpbmUgX19zd2FiNjQoeCkgX19mc3dhYjY0KHgpCisjZW5kaWYKKworI2lmZGVmIF9fQllURU9SREVSX0hBU19VNjRfXworI2lmZGVmIF9fU1dBQl82NF9USFJVXzMyX18KKyNlbHNlCisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYnl0ZW9yZGVyL3N3YWJiLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYnl0ZW9yZGVyL3N3YWJiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzViNmEzZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ieXRlb3JkZXIvc3dhYmIuaApAQCAtMCwwICsxLDUyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9CWVRFT1JERVJfU1dBQkJfSAorI2RlZmluZSBfTElOVVhfQllURU9SREVSX1NXQUJCX0gKKworI2RlZmluZSBfX19zd2FodzMyKHgpICAoeyAgIF9fdTMyIF9feCA9ICh4KTsgICAoKF9fdTMyKSggICAoKChfX3UzMikoX194KSAmIChfX3UzMikweDAwMDBmZmZmVUwpIDw8IDE2KSB8ICAgKCgoX191MzIpKF9feCkgJiAoX191MzIpMHhmZmZmMDAwMFVMKSA+PiAxNikgKSk7ICB9KQorI2RlZmluZSBfX19zd2FoYjMyKHgpICAoeyAgIF9fdTMyIF9feCA9ICh4KTsgICAoKF9fdTMyKSggICAoKChfX3UzMikoX194KSAmIChfX3UzMikweDAwZmYwMGZmVUwpIDw8IDgpIHwgICAoKChfX3UzMikoX194KSAmIChfX3UzMikweGZmMDBmZjAwVUwpID4+IDgpICkpOyAgfSkKKworI2RlZmluZSBfX19jb25zdGFudF9zd2FodzMyKHgpICAgKChfX3UzMikoICAgKCgoX191MzIpKHgpICYgKF9fdTMyKTB4MDAwMGZmZmZVTCkgPDwgMTYpIHwgICAoKChfX3UzMikoeCkgJiAoX191MzIpMHhmZmZmMDAwMFVMKSA+PiAxNikgKSkKKyNkZWZpbmUgX19fY29uc3RhbnRfc3dhaGIzMih4KSAgICgoX191MzIpKCAgICgoKF9fdTMyKSh4KSAmIChfX3UzMikweDAwZmYwMGZmVUwpIDw8IDgpIHwgICAoKChfX3UzMikoeCkgJiAoX191MzIpMHhmZjAwZmYwMFVMKSA+PiA4KSApKQorCisjaWZuZGVmIF9fYXJjaF9fc3dhaHczMgorI2RlZmluZSBfX2FyY2hfX3N3YWh3MzIoeCkgX19fc3dhaHczMih4KQorI2VuZGlmCisjaWZuZGVmIF9fYXJjaF9fc3dhaGIzMgorI2RlZmluZSBfX2FyY2hfX3N3YWhiMzIoeCkgX19fc3dhaGIzMih4KQorI2VuZGlmCisKKyNpZm5kZWYgX19hcmNoX19zd2FodzMycAorI2RlZmluZSBfX2FyY2hfX3N3YWh3MzJwKHgpIF9fc3dhaHczMigqKHgpKQorI2VuZGlmCisjaWZuZGVmIF9fYXJjaF9fc3dhaGIzMnAKKyNkZWZpbmUgX19hcmNoX19zd2FoYjMycCh4KSBfX3N3YWhiMzIoKih4KSkKKyNlbmRpZgorCisjaWZuZGVmIF9fYXJjaF9fc3dhaHczMnMKKyNkZWZpbmUgX19hcmNoX19zd2FodzMycyh4KSBkbyB7ICooeCkgPSBfX3N3YWh3MzJwKCh4KSk7IH0gd2hpbGUgKDApCisjZW5kaWYKKyNpZm5kZWYgX19hcmNoX19zd2FoYjMycworI2RlZmluZSBfX2FyY2hfX3N3YWhiMzJzKHgpIGRvIHsgKih4KSA9IF9fc3dhaGIzMnAoKHgpKTsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgZGVmaW5lZChfX09QVElNSVpFX18pCisjZGVmaW5lIF9fc3dhaHczMih4KSAgKF9fYnVpbHRpbl9jb25zdGFudF9wKChfX3UzMikoeCkpID8gICBfX19zd2FodzMyKCh4KSkgOiAgIF9fZnN3YWh3MzIoKHgpKSkKKyNkZWZpbmUgX19zd2FoYjMyKHgpICAoX19idWlsdGluX2NvbnN0YW50X3AoKF9fdTMyKSh4KSkgPyAgIF9fX3N3YWhiMzIoKHgpKSA6ICAgX19mc3dhaGIzMigoeCkpKQorI2Vsc2UKKyNkZWZpbmUgX19zd2FodzMyKHgpIF9fZnN3YWh3MzIoeCkKKyNkZWZpbmUgX19zd2FoYjMyKHgpIF9fZnN3YWhiMzIoeCkKKyNlbmRpZgorCisjaWZkZWYgX19CWVRFT1JERVJfSEFTX1U2NF9fCisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2NhY2hlLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjgxODU1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2NhY2hlLmgKQEAgLTAsMCArMSw1NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0xJTlVYX0NBQ0hFX0gKKyNkZWZpbmUgX19MSU5VWF9DQUNIRV9ICisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGUuaD4KKworI2lmbmRlZiBMMV9DQUNIRV9BTElHTgorI2RlZmluZSBMMV9DQUNIRV9BTElHTih4KSBBTElHTih4LCBMMV9DQUNIRV9CWVRFUykKKyNlbmRpZgorCisjaWZuZGVmIFNNUF9DQUNIRV9CWVRFUworI2RlZmluZSBTTVBfQ0FDSEVfQllURVMgTDFfQ0FDSEVfQllURVMKKyNlbmRpZgorCisjaWZuZGVmIF9fcmVhZF9tb3N0bHkKKyNkZWZpbmUgX19yZWFkX21vc3RseQorI2VuZGlmCisKKyNpZm5kZWYgX19fX2NhY2hlbGluZV9hbGlnbmVkCisjZGVmaW5lIF9fX19jYWNoZWxpbmVfYWxpZ25lZCBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyhTTVBfQ0FDSEVfQllURVMpKSkKKyNlbmRpZgorCisjaWZuZGVmIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXAKKyNkZWZpbmUgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcAorI2VuZGlmCisKKyNpZm5kZWYgX19jYWNoZWxpbmVfYWxpZ25lZAorI2RlZmluZSBfX2NhY2hlbGluZV9hbGlnbmVkICAgX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oU01QX0NBQ0hFX0JZVEVTKSwgICBfX3NlY3Rpb25fXygiLmRhdGEuY2FjaGVsaW5lX2FsaWduZWQiKSkpCisjZW5kaWYKKworI2lmbmRlZiBfX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcAorI2RlZmluZSBfX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcAorI2VuZGlmCisKKyNpZm5kZWYgSU5URVJOT0RFX0NBQ0hFX1NISUZUCisjZGVmaW5lIElOVEVSTk9ERV9DQUNIRV9TSElGVCBMMV9DQUNIRV9TSElGVAorI2VuZGlmCisKKyNpZm5kZWYgX19fX2NhY2hlbGluZV9pbnRlcm5vZGVhbGlnbmVkX2luX3NtcAorI2RlZmluZSBfX19fY2FjaGVsaW5lX2ludGVybm9kZWFsaWduZWRfaW5fc21wCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY2FsYzY0LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY2FsYzY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY3MjZhYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jYWxjNjQuaApAQCAtMCwwICsxLDIyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9DQUxDNjRfSAorI2RlZmluZSBfTElOVVhfQ0FMQzY0X0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CisKKyNpZm5kZWYgZGl2X2xvbmdfbG9uZ19yZW0KKyNkZWZpbmUgZGl2X2xvbmdfbG9uZ19yZW0oZGl2aWRlbmQsIGRpdmlzb3IsIHJlbWFpbmRlcikgICBkb19kaXZfbGxyKChkaXZpZGVuZCksIGRpdmlzb3IsIHJlbWFpbmRlcikKKworI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jYXBhYmlsaXR5LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY2FwYWJpbGl0eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwNWJjMjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY2FwYWJpbGl0eS5oCkBAIC0wLDAgKzEsOTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX0NBUEFCSUxJVFlfSAorI2RlZmluZSBfTElOVVhfQ0FQQUJJTElUWV9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisKKyNkZWZpbmUgX0xJTlVYX0NBUEFCSUxJVFlfVkVSU0lPTiAweDE5OTgwMzMwCisKK3R5cGVkZWYgc3RydWN0IF9fdXNlcl9jYXBfaGVhZGVyX3N0cnVjdCB7CisgX191MzIgdmVyc2lvbjsKKyBpbnQgcGlkOworfSBfX3VzZXIgKmNhcF91c2VyX2hlYWRlcl90OworCit0eXBlZGVmIHN0cnVjdCBfX3VzZXJfY2FwX2RhdGFfc3RydWN0IHsKKyBfX3UzMiBlZmZlY3RpdmU7CisgX191MzIgcGVybWl0dGVkOworIF9fdTMyIGluaGVyaXRhYmxlOworfSBfX3VzZXIgKmNhcF91c2VyX2RhdGFfdDsKKworI2RlZmluZSBDQVBfQ0hPV04gMAorCisjZGVmaW5lIENBUF9EQUNfT1ZFUlJJREUgMQorCisjZGVmaW5lIENBUF9EQUNfUkVBRF9TRUFSQ0ggMgorCisjZGVmaW5lIENBUF9GT1dORVIgMworCisjZGVmaW5lIENBUF9GU0VUSUQgNAorCisjZGVmaW5lIENBUF9GU19NQVNLIDB4MWYKKworI2RlZmluZSBDQVBfS0lMTCA1CisKKyNkZWZpbmUgQ0FQX1NFVEdJRCA2CisKKyNkZWZpbmUgQ0FQX1NFVFVJRCA3CisKKyNkZWZpbmUgQ0FQX1NFVFBDQVAgOAorCisjZGVmaW5lIENBUF9MSU5VWF9JTU1VVEFCTEUgOQorCisjZGVmaW5lIENBUF9ORVRfQklORF9TRVJWSUNFIDEwCisKKyNkZWZpbmUgQ0FQX05FVF9CUk9BRENBU1QgMTEKKworI2RlZmluZSBDQVBfTkVUX0FETUlOIDEyCisKKyNkZWZpbmUgQ0FQX05FVF9SQVcgMTMKKworI2RlZmluZSBDQVBfSVBDX0xPQ0sgMTQKKworI2RlZmluZSBDQVBfSVBDX09XTkVSIDE1CisKKyNkZWZpbmUgQ0FQX1NZU19NT0RVTEUgMTYKKworI2RlZmluZSBDQVBfU1lTX1JBV0lPIDE3CisKKyNkZWZpbmUgQ0FQX1NZU19DSFJPT1QgMTgKKworI2RlZmluZSBDQVBfU1lTX1BUUkFDRSAxOQorCisjZGVmaW5lIENBUF9TWVNfUEFDQ1QgMjAKKworI2RlZmluZSBDQVBfU1lTX0FETUlOIDIxCisKKyNkZWZpbmUgQ0FQX1NZU19CT09UIDIyCisKKyNkZWZpbmUgQ0FQX1NZU19OSUNFIDIzCisKKyNkZWZpbmUgQ0FQX1NZU19SRVNPVVJDRSAyNAorCisjZGVmaW5lIENBUF9TWVNfVElNRSAyNQorCisjZGVmaW5lIENBUF9TWVNfVFRZX0NPTkZJRyAyNgorCisjZGVmaW5lIENBUF9NS05PRCAyNworCisjZGVmaW5lIENBUF9MRUFTRSAyOAorCisjZGVmaW5lIENBUF9BVURJVF9XUklURSAyOQorCisjZGVmaW5lIENBUF9BVURJVF9DT05UUk9MIDMwCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2NhcGkuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jYXBpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU5MWNmNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jYXBpLmgKQEAgLTAsMCArMSw4OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0xJTlVYX0NBUElfSF9fCisjZGVmaW5lIF9fTElOVVhfQ0FQSV9IX18KKworI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsY2FwaS5oPgorCit0eXBlZGVmIHN0cnVjdCBjYXBpX3JlZ2lzdGVyX3BhcmFtcyB7CisgX191MzIgbGV2ZWwzY250OworIF9fdTMyIGRhdGFibGtjbnQ7CisgX191MzIgZGF0YWJsa2xlbjsKK30gY2FwaV9yZWdpc3Rlcl9wYXJhbXM7CisKKyNkZWZpbmUgQ0FQSV9SRUdJU1RFUiBfSU9XKCdDJywweDAxLHN0cnVjdCBjYXBpX3JlZ2lzdGVyX3BhcmFtcykKKworI2RlZmluZSBDQVBJX01BTlVGQUNUVVJFUl9MRU4gNjQKKworI2RlZmluZSBDQVBJX0dFVF9NQU5VRkFDVFVSRVIgX0lPV1IoJ0MnLDB4MDYsaW50KSAgCisKK3R5cGVkZWYgc3RydWN0IGNhcGlfdmVyc2lvbiB7CisgX191MzIgbWFqb3J2ZXJzaW9uOworIF9fdTMyIG1pbm9ydmVyc2lvbjsKKyBfX3UzMiBtYWpvcm1hbnV2ZXJzaW9uOworIF9fdTMyIG1pbm9ybWFudXZlcnNpb247Cit9IGNhcGlfdmVyc2lvbjsKKworI2RlZmluZSBDQVBJX0dFVF9WRVJTSU9OIF9JT1dSKCdDJywweDA3LHN0cnVjdCBjYXBpX3ZlcnNpb24pCisKKyNkZWZpbmUgQ0FQSV9TRVJJQUxfTEVOIDgKKyNkZWZpbmUgQ0FQSV9HRVRfU0VSSUFMIF9JT1dSKCdDJywweDA4LGludCkgIAorCit0eXBlZGVmIHN0cnVjdCBjYXBpX3Byb2ZpbGUgeworIF9fdTE2IG5jb250cm9sbGVyOworIF9fdTE2IG5iY2hhbm5lbDsKKyBfX3UzMiBnb3B0aW9uczsKKyBfX3UzMiBzdXBwb3J0MTsKKyBfX3UzMiBzdXBwb3J0MjsKKyBfX3UzMiBzdXBwb3J0MzsKKyBfX3UzMiByZXNlcnZlZFs2XTsKKyBfX3UzMiBtYW51WzVdOworfSBjYXBpX3Byb2ZpbGU7CisKKyNkZWZpbmUgQ0FQSV9HRVRfUFJPRklMRSBfSU9XUignQycsMHgwOSxzdHJ1Y3QgY2FwaV9wcm9maWxlKQorCit0eXBlZGVmIHN0cnVjdCBjYXBpX21hbnVmYWN0dXJlcl9jbWQgeworIHVuc2lnbmVkIGxvbmcgY21kOworIHZvaWQgX191c2VyICpkYXRhOworfSBjYXBpX21hbnVmYWN0dXJlcl9jbWQ7CisKKyNkZWZpbmUgQ0FQSV9NQU5VRkFDVFVSRVJfQ01EIF9JT1dSKCdDJywweDIwLCBzdHJ1Y3QgY2FwaV9tYW51ZmFjdHVyZXJfY21kKQorCisjZGVmaW5lIENBUElfR0VUX0VSUkNPREUgX0lPUignQycsMHgyMSwgX191MTYpCisKKyNkZWZpbmUgQ0FQSV9JTlNUQUxMRUQgX0lPUignQycsMHgyMiwgX191MTYpCisKK3R5cGVkZWYgdW5pb24gY2FwaV9pb2N0bF9zdHJ1Y3QgeworIF9fdTMyIGNvbnRyOworIGNhcGlfcmVnaXN0ZXJfcGFyYW1zIHJwYXJhbXM7CisgX191OCBtYW51ZmFjdHVyZXJbQ0FQSV9NQU5VRkFDVFVSRVJfTEVOXTsKKyBjYXBpX3ZlcnNpb24gdmVyc2lvbjsKKyBfX3U4IHNlcmlhbFtDQVBJX1NFUklBTF9MRU5dOworIGNhcGlfcHJvZmlsZSBwcm9maWxlOworIGNhcGlfbWFudWZhY3R1cmVyX2NtZCBjbWQ7CisgX191MTYgZXJyY29kZTsKK30gY2FwaV9pb2N0bF9zdHJ1Y3Q7CisKKyNkZWZpbmUgQ0FQSUZMQUdfSElHSEpBQ0tJTkcgMHgwMDAxCisKKyNkZWZpbmUgQ0FQSV9HRVRfRkxBR1MgX0lPUignQycsMHgyMywgdW5zaWduZWQpCisjZGVmaW5lIENBUElfU0VUX0ZMQUdTIF9JT1IoJ0MnLDB4MjQsIHVuc2lnbmVkKQorI2RlZmluZSBDQVBJX0NMUl9GTEFHUyBfSU9SKCdDJywweDI1LCB1bnNpZ25lZCkKKworI2RlZmluZSBDQVBJX05DQ0lfT1BFTkNPVU5UIF9JT1IoJ0MnLDB4MjYsIHVuc2lnbmVkKQorCisjZGVmaW5lIENBUElfTkNDSV9HRVRVTklUIF9JT1IoJ0MnLDB4MjcsIHVuc2lnbmVkKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jZGV2LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY2Rldi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhNzFjN2UKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY2Rldi5oCkBAIC0wLDAgKzEsMTQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX0NERVZfSAorI2RlZmluZSBfTElOVVhfQ0RFVl9ICisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jZHJvbS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Nkcm9tLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M3MGM5ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jZHJvbS5oCkBAIC0wLDAgKzEsNzE4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9DRFJPTV9ICisjZGVmaW5lIF9MSU5VWF9DRFJPTV9ICisKKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisKKyNkZWZpbmUgRURSSVZFX0NBTlRfRE9fVEhJUyBFT1BOT1RTVVBQCisKKyNkZWZpbmUgQ0RST01QQVVTRSAweDUzMDEgICAKKyNkZWZpbmUgQ0RST01SRVNVTUUgMHg1MzAyICAKKyNkZWZpbmUgQ0RST01QTEFZTVNGIDB4NTMwMyAgCisjZGVmaW5lIENEUk9NUExBWVRSS0lORCAweDUzMDQgIAorI2RlZmluZSBDRFJPTVJFQURUT0NIRFIgMHg1MzA1ICAKKyNkZWZpbmUgQ0RST01SRUFEVE9DRU5UUlkgMHg1MzA2ICAKKyNkZWZpbmUgQ0RST01TVE9QIDB4NTMwNyAgCisjZGVmaW5lIENEUk9NU1RBUlQgMHg1MzA4ICAKKyNkZWZpbmUgQ0RST01FSkVDVCAweDUzMDkgIAorI2RlZmluZSBDRFJPTVZPTENUUkwgMHg1MzBhICAKKyNkZWZpbmUgQ0RST01TVUJDSE5MIDB4NTMwYiAgCisjZGVmaW5lIENEUk9NUkVBRE1PREUyIDB4NTMwYyAgCisjZGVmaW5lIENEUk9NUkVBRE1PREUxIDB4NTMwZCAgCisjZGVmaW5lIENEUk9NUkVBREFVRElPIDB4NTMwZSAgCisjZGVmaW5lIENEUk9NRUpFQ1RfU1cgMHg1MzBmICAKKyNkZWZpbmUgQ0RST01NVUxUSVNFU1NJT04gMHg1MzEwICAKKyNkZWZpbmUgQ0RST01fR0VUX01DTiAweDUzMTEgIAorI2RlZmluZSBDRFJPTV9HRVRfVVBDIENEUk9NX0dFVF9NQ04gIAorI2RlZmluZSBDRFJPTVJFU0VUIDB4NTMxMiAgCisjZGVmaW5lIENEUk9NVk9MUkVBRCAweDUzMTMgIAorI2RlZmluZSBDRFJPTVJFQURSQVcgMHg1MzE0ICAKKworI2RlZmluZSBDRFJPTVJFQURDT09LRUQgMHg1MzE1ICAKKyNkZWZpbmUgQ0RST01TRUVLIDB4NTMxNiAgCisKKyNkZWZpbmUgQ0RST01QTEFZQkxLIDB4NTMxNyAgCisKKyNkZWZpbmUgQ0RST01SRUFEQUxMIDB4NTMxOCAgCisKKyNkZWZpbmUgQ0RST01HRVRTUElORE9XTiAweDUzMWQKKyNkZWZpbmUgQ0RST01TRVRTUElORE9XTiAweDUzMWUKKworI2RlZmluZSBDRFJPTUNMT1NFVFJBWSAweDUzMTkgIAorI2RlZmluZSBDRFJPTV9TRVRfT1BUSU9OUyAweDUzMjAgIAorI2RlZmluZSBDRFJPTV9DTEVBUl9PUFRJT05TIDB4NTMyMSAgCisjZGVmaW5lIENEUk9NX1NFTEVDVF9TUEVFRCAweDUzMjIgIAorI2RlZmluZSBDRFJPTV9TRUxFQ1RfRElTQyAweDUzMjMgIAorI2RlZmluZSBDRFJPTV9NRURJQV9DSEFOR0VEIDB4NTMyNSAgCisjZGVmaW5lIENEUk9NX0RSSVZFX1NUQVRVUyAweDUzMjYgIAorI2RlZmluZSBDRFJPTV9ESVNDX1NUQVRVUyAweDUzMjcgIAorI2RlZmluZSBDRFJPTV9DSEFOR0VSX05TTE9UUyAweDUzMjggIAorI2RlZmluZSBDRFJPTV9MT0NLRE9PUiAweDUzMjkgIAorI2RlZmluZSBDRFJPTV9ERUJVRyAweDUzMzAgIAorI2RlZmluZSBDRFJPTV9HRVRfQ0FQQUJJTElUWSAweDUzMzEgIAorCisjZGVmaW5lIENEUk9NQVVESU9CVUZTSVogMHg1MzgyICAKKworI2RlZmluZSBEVkRfUkVBRF9TVFJVQ1QgMHg1MzkwICAKKyNkZWZpbmUgRFZEX1dSSVRFX1NUUlVDVCAweDUzOTEgIAorI2RlZmluZSBEVkRfQVVUSCAweDUzOTIgIAorCisjZGVmaW5lIENEUk9NX1NFTkRfUEFDS0VUIDB4NTM5MyAgCisjZGVmaW5lIENEUk9NX05FWFRfV1JJVEFCTEUgMHg1Mzk0ICAKKyNkZWZpbmUgQ0RST01fTEFTVF9XUklUVEVOIDB4NTM5NSAgCisKK3N0cnVjdCBjZHJvbV9tc2YwCit7CisgX191OCBtaW51dGU7CisgX191OCBzZWNvbmQ7CisgX191OCBmcmFtZTsKK307CisKK3VuaW9uIGNkcm9tX2FkZHIKK3sKKyBzdHJ1Y3QgY2Ryb21fbXNmMCBtc2Y7CisgaW50IGxiYTsKK307CisKK3N0cnVjdCBjZHJvbV9tc2YKK3sKKyBfX3U4IGNkbXNmX21pbjA7CisgX191OCBjZG1zZl9zZWMwOworIF9fdTggY2Rtc2ZfZnJhbWUwOworIF9fdTggY2Rtc2ZfbWluMTsKKyBfX3U4IGNkbXNmX3NlYzE7CisgX191OCBjZG1zZl9mcmFtZTE7Cit9OworCitzdHJ1Y3QgY2Ryb21fdGkKK3sKKyBfX3U4IGNkdGlfdHJrMDsKKyBfX3U4IGNkdGlfaW5kMDsKKyBfX3U4IGNkdGlfdHJrMTsKKyBfX3U4IGNkdGlfaW5kMTsKK307CisKK3N0cnVjdCBjZHJvbV90b2NoZHIKK3sKKyBfX3U4IGNkdGhfdHJrMDsKKyBfX3U4IGNkdGhfdHJrMTsKK307CisKK3N0cnVjdCBjZHJvbV92b2xjdHJsCit7CisgX191OCBjaGFubmVsMDsKKyBfX3U4IGNoYW5uZWwxOworIF9fdTggY2hhbm5lbDI7CisgX191OCBjaGFubmVsMzsKK307CisKK3N0cnVjdCBjZHJvbV9zdWJjaG5sCit7CisgX191OCBjZHNjX2Zvcm1hdDsKKyBfX3U4IGNkc2NfYXVkaW9zdGF0dXM7CisgX191OCBjZHNjX2FkcjogNDsKKyBfX3U4IGNkc2NfY3RybDogNDsKKyBfX3U4IGNkc2NfdHJrOworIF9fdTggY2RzY19pbmQ7CisgdW5pb24gY2Ryb21fYWRkciBjZHNjX2Fic2FkZHI7CisgdW5pb24gY2Ryb21fYWRkciBjZHNjX3JlbGFkZHI7Cit9OworCitzdHJ1Y3QgY2Ryb21fdG9jZW50cnkKK3sKKyBfX3U4IGNkdGVfdHJhY2s7CisgX191OCBjZHRlX2FkciA6NDsKKyBfX3U4IGNkdGVfY3RybCA6NDsKKyBfX3U4IGNkdGVfZm9ybWF0OworIHVuaW9uIGNkcm9tX2FkZHIgY2R0ZV9hZGRyOworIF9fdTggY2R0ZV9kYXRhbW9kZTsKK307CisKK3N0cnVjdCBjZHJvbV9yZWFkCit7CisgaW50IGNkcmVhZF9sYmE7CisgY2hhciAqY2RyZWFkX2J1ZmFkZHI7CisgaW50IGNkcmVhZF9idWZsZW47Cit9OworCitzdHJ1Y3QgY2Ryb21fcmVhZF9hdWRpbworeworIHVuaW9uIGNkcm9tX2FkZHIgYWRkcjsKKyBfX3U4IGFkZHJfZm9ybWF0OworIGludCBuZnJhbWVzOworIF9fdTggX191c2VyICpidWY7Cit9OworCitzdHJ1Y3QgY2Ryb21fbXVsdGlzZXNzaW9uCit7CisgdW5pb24gY2Ryb21fYWRkciBhZGRyOworIF9fdTggeGFfZmxhZzsKKyBfX3U4IGFkZHJfZm9ybWF0OworfTsKKworc3RydWN0IGNkcm9tX21jbgoreworIF9fdTggbWVkaXVtX2NhdGFsb2dfbnVtYmVyWzE0XTsKK307CisKK3N0cnVjdCBjZHJvbV9ibGsKK3sKKyB1bnNpZ25lZCBmcm9tOworIHVuc2lnbmVkIHNob3J0IGxlbjsKK307CisKKyNkZWZpbmUgQ0RST01fUEFDS0VUX1NJWkUgMTIKKworI2RlZmluZSBDR0NfREFUQV9VTktOT1dOIDAKKyNkZWZpbmUgQ0dDX0RBVEFfV1JJVEUgMQorI2RlZmluZSBDR0NfREFUQV9SRUFEIDIKKyNkZWZpbmUgQ0dDX0RBVEFfTk9ORSAzCisKK3N0cnVjdCBjZHJvbV9nZW5lcmljX2NvbW1hbmQKK3sKKyB1bnNpZ25lZCBjaGFyIGNtZFtDRFJPTV9QQUNLRVRfU0laRV07CisgdW5zaWduZWQgY2hhciBfX3VzZXIgKmJ1ZmZlcjsKKyB1bnNpZ25lZCBpbnQgYnVmbGVuOworIGludCBzdGF0OworIHN0cnVjdCByZXF1ZXN0X3NlbnNlIF9fdXNlciAqc2Vuc2U7CisgdW5zaWduZWQgY2hhciBkYXRhX2RpcmVjdGlvbjsKKyBpbnQgcXVpZXQ7CisgaW50IHRpbWVvdXQ7Cisgdm9pZCBfX3VzZXIgKnJlc2VydmVkWzFdOworfTsKKworI2RlZmluZSBDRF9NSU5TIDc0ICAKKyNkZWZpbmUgQ0RfU0VDUyA2MCAgCisjZGVmaW5lIENEX0ZSQU1FUyA3NSAgCisjZGVmaW5lIENEX1NZTkNfU0laRSAxMiAgCisjZGVmaW5lIENEX01TRl9PRkZTRVQgMTUwICAKKyNkZWZpbmUgQ0RfQ0hVTktfU0laRSAyNCAgCisjZGVmaW5lIENEX05VTV9PRl9DSFVOS1MgOTggIAorI2RlZmluZSBDRF9GUkFNRVNJWkVfU1VCIDk2ICAKKyNkZWZpbmUgQ0RfSEVBRF9TSVpFIDQgIAorI2RlZmluZSBDRF9TVUJIRUFEX1NJWkUgOCAgCisjZGVmaW5lIENEX0VEQ19TSVpFIDQgIAorI2RlZmluZSBDRF9aRVJPX1NJWkUgOCAgCisjZGVmaW5lIENEX0VDQ19TSVpFIDI3NiAgCisjZGVmaW5lIENEX0ZSQU1FU0laRSAyMDQ4ICAKKyNkZWZpbmUgQ0RfRlJBTUVTSVpFX1JBVyAyMzUyICAKKyNkZWZpbmUgQ0RfRlJBTUVTSVpFX1JBV0VSIDI2NDYgICAKKworI2RlZmluZSBDRF9GUkFNRVNJWkVfUkFXMSAoQ0RfRlJBTUVTSVpFX1JBVy1DRF9TWU5DX1NJWkUpICAKKyNkZWZpbmUgQ0RfRlJBTUVTSVpFX1JBVzAgKENEX0ZSQU1FU0laRV9SQVctQ0RfU1lOQ19TSVpFLUNEX0hFQURfU0laRSkgIAorCisjZGVmaW5lIENEX1hBX0hFQUQgKENEX0hFQURfU0laRStDRF9TVUJIRUFEX1NJWkUpICAKKyNkZWZpbmUgQ0RfWEFfVEFJTCAoQ0RfRURDX1NJWkUrQ0RfRUNDX1NJWkUpICAKKyNkZWZpbmUgQ0RfWEFfU1lOQ19IRUFEIChDRF9TWU5DX1NJWkUrQ0RfWEFfSEVBRCkgIAorCisjZGVmaW5lIENEUk9NX0xCQSAweDAxICAKKyNkZWZpbmUgQ0RST01fTVNGIDB4MDIgIAorCisjZGVmaW5lIENEUk9NX0RBVEFfVFJBQ0sgMHgwNAorCisjZGVmaW5lIENEUk9NX0xFQURPVVQgMHhBQQorCisjZGVmaW5lIENEUk9NX0FVRElPX0lOVkFMSUQgMHgwMCAgCisjZGVmaW5lIENEUk9NX0FVRElPX1BMQVkgMHgxMSAgCisjZGVmaW5lIENEUk9NX0FVRElPX1BBVVNFRCAweDEyICAKKyNkZWZpbmUgQ0RST01fQVVESU9fQ09NUExFVEVEIDB4MTMgIAorI2RlZmluZSBDRFJPTV9BVURJT19FUlJPUiAweDE0ICAKKyNkZWZpbmUgQ0RST01fQVVESU9fTk9fU1RBVFVTIDB4MTUgIAorCisjZGVmaW5lIENEQ19DTE9TRV9UUkFZIDB4MSAgCisjZGVmaW5lIENEQ19PUEVOX1RSQVkgMHgyICAKKyNkZWZpbmUgQ0RDX0xPQ0sgMHg0ICAKKyNkZWZpbmUgQ0RDX1NFTEVDVF9TUEVFRCAweDggIAorI2RlZmluZSBDRENfU0VMRUNUX0RJU0MgMHgxMCAgCisjZGVmaW5lIENEQ19NVUxUSV9TRVNTSU9OIDB4MjAgIAorI2RlZmluZSBDRENfTUNOIDB4NDAgIAorI2RlZmluZSBDRENfTUVESUFfQ0hBTkdFRCAweDgwICAKKyNkZWZpbmUgQ0RDX1BMQVlfQVVESU8gMHgxMDAgIAorI2RlZmluZSBDRENfUkVTRVQgMHgyMDAgIAorI2RlZmluZSBDRENfRFJJVkVfU1RBVFVTIDB4ODAwICAKKyNkZWZpbmUgQ0RDX0dFTkVSSUNfUEFDS0VUIDB4MTAwMCAgCisjZGVmaW5lIENEQ19DRF9SIDB4MjAwMCAgCisjZGVmaW5lIENEQ19DRF9SVyAweDQwMDAgIAorI2RlZmluZSBDRENfRFZEIDB4ODAwMCAgCisjZGVmaW5lIENEQ19EVkRfUiAweDEwMDAwICAKKyNkZWZpbmUgQ0RDX0RWRF9SQU0gMHgyMDAwMCAgCisjZGVmaW5lIENEQ19NT19EUklWRSAweDQwMDAwICAKKyNkZWZpbmUgQ0RDX01SVyAweDgwMDAwICAKKyNkZWZpbmUgQ0RDX01SV19XIDB4MTAwMDAwICAKKyNkZWZpbmUgQ0RDX1JBTSAweDIwMDAwMCAgCisKKyNkZWZpbmUgQ0RTX05PX0lORk8gMCAgCisjZGVmaW5lIENEU19OT19ESVNDIDEKKyNkZWZpbmUgQ0RTX1RSQVlfT1BFTiAyCisjZGVmaW5lIENEU19EUklWRV9OT1RfUkVBRFkgMworI2RlZmluZSBDRFNfRElTQ19PSyA0CisKKyNkZWZpbmUgQ0RTX0FVRElPIDEwMAorI2RlZmluZSBDRFNfREFUQV8xIDEwMQorI2RlZmluZSBDRFNfREFUQV8yIDEwMgorI2RlZmluZSBDRFNfWEFfMl8xIDEwMworI2RlZmluZSBDRFNfWEFfMl8yIDEwNAorI2RlZmluZSBDRFNfTUlYRUQgMTA1CisKKyNkZWZpbmUgQ0RPX0FVVE9fQ0xPU0UgMHgxICAKKyNkZWZpbmUgQ0RPX0FVVE9fRUpFQ1QgMHgyICAKKyNkZWZpbmUgQ0RPX1VTRV9GRkxBR1MgMHg0ICAKKyNkZWZpbmUgQ0RPX0xPQ0sgMHg4ICAKKyNkZWZpbmUgQ0RPX0NIRUNLX1RZUEUgMHgxMCAgCisKKyNkZWZpbmUgQ0RTTF9OT05FICgoaW50KSAofjBVPj4xKS0xKQorI2RlZmluZSBDRFNMX0NVUlJFTlQgKChpbnQpICh+MFU+PjEpKQorCisjZGVmaW5lIENEX1BBUlRfTUFYIDY0CisjZGVmaW5lIENEX1BBUlRfTUFTSyAoQ0RfUEFSVF9NQVggLSAxKQorCisjZGVmaW5lIEdQQ01EX0JMQU5LIDB4YTEKKyNkZWZpbmUgR1BDTURfQ0xPU0VfVFJBQ0sgMHg1YgorI2RlZmluZSBHUENNRF9GTFVTSF9DQUNIRSAweDM1CisjZGVmaW5lIEdQQ01EX0ZPUk1BVF9VTklUIDB4MDQKKyNkZWZpbmUgR1BDTURfR0VUX0NPTkZJR1VSQVRJT04gMHg0NgorI2RlZmluZSBHUENNRF9HRVRfRVZFTlRfU1RBVFVTX05PVElGSUNBVElPTiAweDRhCisjZGVmaW5lIEdQQ01EX0dFVF9QRVJGT1JNQU5DRSAweGFjCisjZGVmaW5lIEdQQ01EX0lOUVVJUlkgMHgxMgorI2RlZmluZSBHUENNRF9MT0FEX1VOTE9BRCAweGE2CisjZGVmaW5lIEdQQ01EX01FQ0hBTklTTV9TVEFUVVMgMHhiZAorI2RlZmluZSBHUENNRF9NT0RFX1NFTEVDVF8xMCAweDU1CisjZGVmaW5lIEdQQ01EX01PREVfU0VOU0VfMTAgMHg1YQorI2RlZmluZSBHUENNRF9QQVVTRV9SRVNVTUUgMHg0YgorI2RlZmluZSBHUENNRF9QTEFZX0FVRElPXzEwIDB4NDUKKyNkZWZpbmUgR1BDTURfUExBWV9BVURJT19NU0YgMHg0NworI2RlZmluZSBHUENNRF9QTEFZX0FVRElPX1RJIDB4NDgKKyNkZWZpbmUgR1BDTURfUExBWV9DRCAweGJjCisjZGVmaW5lIEdQQ01EX1BSRVZFTlRfQUxMT1dfTUVESVVNX1JFTU9WQUwgMHgxZQorI2RlZmluZSBHUENNRF9SRUFEXzEwIDB4MjgKKyNkZWZpbmUgR1BDTURfUkVBRF8xMiAweGE4CisjZGVmaW5lIEdQQ01EX1JFQURfQlVGRkVSX0NBUEFDSVRZIDB4NWMKKyNkZWZpbmUgR1BDTURfUkVBRF9DRFZEX0NBUEFDSVRZIDB4MjUKKyNkZWZpbmUgR1BDTURfUkVBRF9DRCAweGJlCisjZGVmaW5lIEdQQ01EX1JFQURfQ0RfTVNGIDB4YjkKKyNkZWZpbmUgR1BDTURfUkVBRF9ESVNDX0lORk8gMHg1MQorI2RlZmluZSBHUENNRF9SRUFEX0RWRF9TVFJVQ1RVUkUgMHhhZAorI2RlZmluZSBHUENNRF9SRUFEX0ZPUk1BVF9DQVBBQ0lUSUVTIDB4MjMKKyNkZWZpbmUgR1BDTURfUkVBRF9IRUFERVIgMHg0NAorI2RlZmluZSBHUENNRF9SRUFEX1RSQUNLX1JaT05FX0lORk8gMHg1MgorI2RlZmluZSBHUENNRF9SRUFEX1NVQkNIQU5ORUwgMHg0MgorI2RlZmluZSBHUENNRF9SRUFEX1RPQ19QTUFfQVRJUCAweDQzCisjZGVmaW5lIEdQQ01EX1JFUEFJUl9SWk9ORV9UUkFDSyAweDU4CisjZGVmaW5lIEdQQ01EX1JFUE9SVF9LRVkgMHhhNAorI2RlZmluZSBHUENNRF9SRVFVRVNUX1NFTlNFIDB4MDMKKyNkZWZpbmUgR1BDTURfUkVTRVJWRV9SWk9ORV9UUkFDSyAweDUzCisjZGVmaW5lIEdQQ01EX1NFTkRfQ1VFX1NIRUVUIDB4NWQKKyNkZWZpbmUgR1BDTURfU0NBTiAweGJhCisjZGVmaW5lIEdQQ01EX1NFRUsgMHgyYgorI2RlZmluZSBHUENNRF9TRU5EX0RWRF9TVFJVQ1RVUkUgMHhiZgorI2RlZmluZSBHUENNRF9TRU5EX0VWRU5UIDB4YTIKKyNkZWZpbmUgR1BDTURfU0VORF9LRVkgMHhhMworI2RlZmluZSBHUENNRF9TRU5EX09QQyAweDU0CisjZGVmaW5lIEdQQ01EX1NFVF9SRUFEX0FIRUFEIDB4YTcKKyNkZWZpbmUgR1BDTURfU0VUX1NUUkVBTUlORyAweGI2CisjZGVmaW5lIEdQQ01EX1NUQVJUX1NUT1BfVU5JVCAweDFiCisjZGVmaW5lIEdQQ01EX1NUT1BfUExBWV9TQ0FOIDB4NGUKKyNkZWZpbmUgR1BDTURfVEVTVF9VTklUX1JFQURZIDB4MDAKKyNkZWZpbmUgR1BDTURfVkVSSUZZXzEwIDB4MmYKKyNkZWZpbmUgR1BDTURfV1JJVEVfMTAgMHgyYQorI2RlZmluZSBHUENNRF9XUklURV9BTkRfVkVSSUZZXzEwIDB4MmUKKworI2RlZmluZSBHUENNRF9TRVRfU1BFRUQgMHhiYgorCisjZGVmaW5lIEdQQ01EX1BMQVlBVURJT19USSAweDQ4CisKKyNkZWZpbmUgR1BDTURfR0VUX01FRElBX1NUQVRVUyAweGRhCisKKyNkZWZpbmUgR1BNT0RFX1ZFTkRPUl9QQUdFIDB4MDAKKyNkZWZpbmUgR1BNT0RFX1JfV19FUlJPUl9QQUdFIDB4MDEKKyNkZWZpbmUgR1BNT0RFX1dSSVRFX1BBUk1TX1BBR0UgMHgwNQorI2RlZmluZSBHUE1PREVfV0NBQ0hJTkdfUEFHRSAweDA4CisjZGVmaW5lIEdQTU9ERV9BVURJT19DVExfUEFHRSAweDBlCisjZGVmaW5lIEdQTU9ERV9QT1dFUl9QQUdFIDB4MWEKKyNkZWZpbmUgR1BNT0RFX0ZBVUxUX0ZBSUxfUEFHRSAweDFjCisjZGVmaW5lIEdQTU9ERV9UT19QUk9URUNUX1BBR0UgMHgxZAorI2RlZmluZSBHUE1PREVfQ0FQQUJJTElUSUVTX1BBR0UgMHgyYQorI2RlZmluZSBHUE1PREVfQUxMX1BBR0VTIDB4M2YKKworI2RlZmluZSBHUE1PREVfQ0RST01fUEFHRSAweDBkCisKKyNkZWZpbmUgRFZEX1NUUlVDVF9QSFlTSUNBTCAweDAwCisjZGVmaW5lIERWRF9TVFJVQ1RfQ09QWVJJR0hUIDB4MDEKKyNkZWZpbmUgRFZEX1NUUlVDVF9ESVNDS0VZIDB4MDIKKyNkZWZpbmUgRFZEX1NUUlVDVF9CQ0EgMHgwMworI2RlZmluZSBEVkRfU1RSVUNUX01BTlVGQUNUIDB4MDQKKworc3RydWN0IGR2ZF9sYXllciB7CisgX191OCBib29rX3ZlcnNpb24gOiA0OworIF9fdTggYm9va190eXBlIDogNDsKKyBfX3U4IG1pbl9yYXRlIDogNDsKKyBfX3U4IGRpc2Nfc2l6ZSA6IDQ7CisgX191OCBsYXllcl90eXBlIDogNDsKKyBfX3U4IHRyYWNrX3BhdGggOiAxOworIF9fdTggbmxheWVycyA6IDI7CisgX191OCB0cmFja19kZW5zaXR5IDogNDsKKyBfX3U4IGxpbmVhcl9kZW5zaXR5IDogNDsKKyBfX3U4IGJjYSA6IDE7CisgX191MzIgc3RhcnRfc2VjdG9yOworIF9fdTMyIGVuZF9zZWN0b3I7CisgX191MzIgZW5kX3NlY3Rvcl9sMDsKK307CisKKyNkZWZpbmUgRFZEX0xBWUVSUyA0CisKK3N0cnVjdCBkdmRfcGh5c2ljYWwgeworIF9fdTggdHlwZTsKKyBfX3U4IGxheWVyX251bTsKKyBzdHJ1Y3QgZHZkX2xheWVyIGxheWVyW0RWRF9MQVlFUlNdOworfTsKKworc3RydWN0IGR2ZF9jb3B5cmlnaHQgeworIF9fdTggdHlwZTsKKworIF9fdTggbGF5ZXJfbnVtOworIF9fdTggY3BzdDsKKyBfX3U4IHJtaTsKK307CisKK3N0cnVjdCBkdmRfZGlzY2tleSB7CisgX191OCB0eXBlOworCisgdW5zaWduZWQgYWdpZCA6IDI7CisgX191OCB2YWx1ZVsyMDQ4XTsKK307CisKK3N0cnVjdCBkdmRfYmNhIHsKKyBfX3U4IHR5cGU7CisKKyBpbnQgbGVuOworIF9fdTggdmFsdWVbMTg4XTsKK307CisKK3N0cnVjdCBkdmRfbWFudWZhY3QgeworIF9fdTggdHlwZTsKKworIF9fdTggbGF5ZXJfbnVtOworIGludCBsZW47CisgX191OCB2YWx1ZVsyMDQ4XTsKK307CisKK3R5cGVkZWYgdW5pb24geworIF9fdTggdHlwZTsKKworIHN0cnVjdCBkdmRfcGh5c2ljYWwgcGh5c2ljYWw7Cisgc3RydWN0IGR2ZF9jb3B5cmlnaHQgY29weXJpZ2h0OworIHN0cnVjdCBkdmRfZGlzY2tleSBkaXNja2V5OworIHN0cnVjdCBkdmRfYmNhIGJjYTsKKyBzdHJ1Y3QgZHZkX21hbnVmYWN0IG1hbnVmYWN0OworfSBkdmRfc3RydWN0OworCisjZGVmaW5lIERWRF9MVV9TRU5EX0FHSUQgMAorI2RlZmluZSBEVkRfSE9TVF9TRU5EX0NIQUxMRU5HRSAxCisjZGVmaW5lIERWRF9MVV9TRU5EX0tFWTEgMgorI2RlZmluZSBEVkRfTFVfU0VORF9DSEFMTEVOR0UgMworI2RlZmluZSBEVkRfSE9TVF9TRU5EX0tFWTIgNAorCisjZGVmaW5lIERWRF9BVVRIX0VTVEFCTElTSEVEIDUKKyNkZWZpbmUgRFZEX0FVVEhfRkFJTFVSRSA2CisKKyNkZWZpbmUgRFZEX0xVX1NFTkRfVElUTEVfS0VZIDcKKyNkZWZpbmUgRFZEX0xVX1NFTkRfQVNGIDgKKyNkZWZpbmUgRFZEX0lOVkFMSURBVEVfQUdJRCA5CisjZGVmaW5lIERWRF9MVV9TRU5EX1JQQ19TVEFURSAxMAorI2RlZmluZSBEVkRfSE9TVF9TRU5EX1JQQ19TVEFURSAxMQorCit0eXBlZGVmIF9fdTggZHZkX2tleVs1XTsKK3R5cGVkZWYgX191OCBkdmRfY2hhbGxlbmdlWzEwXTsKKworc3RydWN0IGR2ZF9sdV9zZW5kX2FnaWQgeworIF9fdTggdHlwZTsKKyB1bnNpZ25lZCBhZ2lkIDogMjsKK307CisKK3N0cnVjdCBkdmRfaG9zdF9zZW5kX2NoYWxsZW5nZSB7CisgX191OCB0eXBlOworIHVuc2lnbmVkIGFnaWQgOiAyOworCisgZHZkX2NoYWxsZW5nZSBjaGFsOworfTsKKworc3RydWN0IGR2ZF9zZW5kX2tleSB7CisgX191OCB0eXBlOworIHVuc2lnbmVkIGFnaWQgOiAyOworCisgZHZkX2tleSBrZXk7Cit9OworCitzdHJ1Y3QgZHZkX2x1X3NlbmRfY2hhbGxlbmdlIHsKKyBfX3U4IHR5cGU7CisgdW5zaWduZWQgYWdpZCA6IDI7CisKKyBkdmRfY2hhbGxlbmdlIGNoYWw7Cit9OworCisjZGVmaW5lIERWRF9DUE1fTk9fQ09QWVJJR0hUIDAKKyNkZWZpbmUgRFZEX0NQTV9DT1BZUklHSFRFRCAxCisKKyNkZWZpbmUgRFZEX0NQX1NFQ19OT05FIDAKKyNkZWZpbmUgRFZEX0NQX1NFQ19FWElTVCAxCisKKyNkZWZpbmUgRFZEX0NHTVNfVU5SRVNUUklDVEVEIDAKKyNkZWZpbmUgRFZEX0NHTVNfU0lOR0xFIDIKKyNkZWZpbmUgRFZEX0NHTVNfUkVTVFJJQ1RFRCAzCisKK3N0cnVjdCBkdmRfbHVfc2VuZF90aXRsZV9rZXkgeworIF9fdTggdHlwZTsKKyB1bnNpZ25lZCBhZ2lkIDogMjsKKworIGR2ZF9rZXkgdGl0bGVfa2V5OworIGludCBsYmE7CisgdW5zaWduZWQgY3BtIDogMTsKKyB1bnNpZ25lZCBjcF9zZWMgOiAxOworIHVuc2lnbmVkIGNnbXMgOiAyOworfTsKKworc3RydWN0IGR2ZF9sdV9zZW5kX2FzZiB7CisgX191OCB0eXBlOworIHVuc2lnbmVkIGFnaWQgOiAyOworCisgdW5zaWduZWQgYXNmIDogMTsKK307CisKK3N0cnVjdCBkdmRfaG9zdF9zZW5kX3JwY3N0YXRlIHsKKyBfX3U4IHR5cGU7CisgX191OCBwZHJjOworfTsKKworc3RydWN0IGR2ZF9sdV9zZW5kX3JwY3N0YXRlIHsKKyBfX3U4IHR5cGUgOiAyOworIF9fdTggdnJhIDogMzsKKyBfX3U4IHVjY2EgOiAzOworIF9fdTggcmVnaW9uX21hc2s7CisgX191OCBycGNfc2NoZW1lOworfTsKKwordHlwZWRlZiB1bmlvbiB7CisgX191OCB0eXBlOworCisgc3RydWN0IGR2ZF9sdV9zZW5kX2FnaWQgbHNhOworIHN0cnVjdCBkdmRfaG9zdF9zZW5kX2NoYWxsZW5nZSBoc2M7Cisgc3RydWN0IGR2ZF9zZW5kX2tleSBsc2s7Cisgc3RydWN0IGR2ZF9sdV9zZW5kX2NoYWxsZW5nZSBsc2M7Cisgc3RydWN0IGR2ZF9zZW5kX2tleSBoc2s7Cisgc3RydWN0IGR2ZF9sdV9zZW5kX3RpdGxlX2tleSBsc3RrOworIHN0cnVjdCBkdmRfbHVfc2VuZF9hc2YgbHNhc2Y7Cisgc3RydWN0IGR2ZF9ob3N0X3NlbmRfcnBjc3RhdGUgaHJwY3M7Cisgc3RydWN0IGR2ZF9sdV9zZW5kX3JwY3N0YXRlIGxycGNzOworfSBkdmRfYXV0aGluZm87CisKK3N0cnVjdCByZXF1ZXN0X3NlbnNlIHsKKyNpZmRlZiBfX0JJR19FTkRJQU5fQklURklFTEQKKyBfX3U4IHZhbGlkIDogMTsKKyBfX3U4IGVycm9yX2NvZGUgOiA3OworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fQklURklFTEQpCisgX191OCBlcnJvcl9jb2RlIDogNzsKKyBfX3U4IHZhbGlkIDogMTsKKyNlbmRpZgorIF9fdTggc2VnbWVudF9udW1iZXI7CisjaWZkZWYgX19CSUdfRU5ESUFOX0JJVEZJRUxECisgX191OCByZXNlcnZlZDEgOiAyOworIF9fdTggaWxpIDogMTsKKyBfX3U4IHJlc2VydmVkMiA6IDE7CisgX191OCBzZW5zZV9rZXkgOiA0OworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fQklURklFTEQpCisgX191OCBzZW5zZV9rZXkgOiA0OworIF9fdTggcmVzZXJ2ZWQyIDogMTsKKyBfX3U4IGlsaSA6IDE7CisgX191OCByZXNlcnZlZDEgOiAyOworI2VuZGlmCisgX191OCBpbmZvcm1hdGlvbls0XTsKKyBfX3U4IGFkZF9zZW5zZV9sZW47CisgX191OCBjb21tYW5kX2luZm9bNF07CisgX191OCBhc2M7CisgX191OCBhc2NxOworIF9fdTggZnJ1YzsKKyBfX3U4IHNrc1szXTsKKyBfX3U4IGFzYls0Nl07Cit9OworCisjZGVmaW5lIENERl9SV1JUIDB4MDAyMCAgCisjZGVmaW5lIENERl9IV0RNIDB4MDAyNCAgCisjZGVmaW5lIENERl9NUlcgMHgwMDI4CisKKyNkZWZpbmUgQ0RNX01SV19OT1RNUlcgMAorI2RlZmluZSBDRE1fTVJXX0JHRk9STUFUX0lOQUNUSVZFIDEKKyNkZWZpbmUgQ0RNX01SV19CR0ZPUk1BVF9BQ1RJVkUgMgorI2RlZmluZSBDRE1fTVJXX0JHRk9STUFUX0NPTVBMRVRFIDMKKworI2RlZmluZSBNUldfTEJBX0RNQSAwCisjZGVmaW5lIE1SV19MQkFfR0FBIDEKKworI2RlZmluZSBNUldfTU9ERV9QQ19QUkUxIDB4MmMKKyNkZWZpbmUgTVJXX01PREVfUEMgMHgwMworCitzdHJ1Y3QgbXJ3X2ZlYXR1cmVfZGVzYyB7CisgX191MTYgZmVhdHVyZV9jb2RlOworI2lmZGVmIF9fQklHX0VORElBTl9CSVRGSUVMRAorIF9fdTggcmVzZXJ2ZWQxIDogMjsKKyBfX3U4IGZlYXR1cmVfdmVyc2lvbiA6IDQ7CisgX191OCBwZXJzaXN0ZW50IDogMTsKKyBfX3U4IGN1cnIgOiAxOworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fQklURklFTEQpCisgX191OCBjdXJyIDogMTsKKyBfX3U4IHBlcnNpc3RlbnQgOiAxOworIF9fdTggZmVhdHVyZV92ZXJzaW9uIDogNDsKKyBfX3U4IHJlc2VydmVkMSA6IDI7CisjZW5kaWYKKyBfX3U4IGFkZF9sZW47CisjaWZkZWYgX19CSUdfRU5ESUFOX0JJVEZJRUxECisgX191OCByZXNlcnZlZDIgOiA3OworIF9fdTggd3JpdGUgOiAxOworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fQklURklFTEQpCisgX191OCB3cml0ZSA6IDE7CisgX191OCByZXNlcnZlZDIgOiA3OworI2VuZGlmCisgX191OCByZXNlcnZlZDM7CisgX191OCByZXNlcnZlZDQ7CisgX191OCByZXNlcnZlZDU7Cit9OworCitzdHJ1Y3QgcndydF9mZWF0dXJlX2Rlc2MgeworIF9fdTE2IGZlYXR1cmVfY29kZTsKKyNpZmRlZiBfX0JJR19FTkRJQU5fQklURklFTEQKKyBfX3U4IHJlc2VydmVkMSA6IDI7CisgX191OCBmZWF0dXJlX3ZlcnNpb24gOiA0OworIF9fdTggcGVyc2lzdGVudCA6IDE7CisgX191OCBjdXJyIDogMTsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKQorIF9fdTggY3VyciA6IDE7CisgX191OCBwZXJzaXN0ZW50IDogMTsKKyBfX3U4IGZlYXR1cmVfdmVyc2lvbiA6IDQ7CisgX191OCByZXNlcnZlZDEgOiAyOworI2VuZGlmCisgX191OCBhZGRfbGVuOworIF9fdTMyIGxhc3RfbGJhOworIF9fdTMyIGJsb2NrX3NpemU7CisgX191MTYgYmxvY2tpbmc7CisjaWZkZWYgX19CSUdfRU5ESUFOX0JJVEZJRUxECisgX191OCByZXNlcnZlZDIgOiA3OworIF9fdTggcGFnZV9wcmVzZW50IDogMTsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKQorIF9fdTggcGFnZV9wcmVzZW50IDogMTsKKyBfX3U4IHJlc2VydmVkMiA6IDc7CisjZW5kaWYKKyBfX3U4IHJlc2VydmVkMzsKK307CisKK3R5cGVkZWYgc3RydWN0IHsKKyBfX3UxNiBkaXNjX2luZm9ybWF0aW9uX2xlbmd0aDsKKyNpZmRlZiBfX0JJR19FTkRJQU5fQklURklFTEQKKyBfX3U4IHJlc2VydmVkMSA6IDM7CisgX191OCBlcmFzYWJsZSA6IDE7CisgX191OCBib3JkZXJfc3RhdHVzIDogMjsKKyBfX3U4IGRpc2Nfc3RhdHVzIDogMjsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKQorIF9fdTggZGlzY19zdGF0dXMgOiAyOworIF9fdTggYm9yZGVyX3N0YXR1cyA6IDI7CisgX191OCBlcmFzYWJsZSA6IDE7CisgX191OCByZXNlcnZlZDEgOiAzOworI2Vsc2UKKyNlcnJvciAiUGxlYXNlIGZpeCA8YXNtL2J5dGVvcmRlci5oPiIKKyNlbmRpZgorIF9fdTggbl9maXJzdF90cmFjazsKKyBfX3U4IG5fc2Vzc2lvbnNfbHNiOworIF9fdTggZmlyc3RfdHJhY2tfbHNiOworIF9fdTggbGFzdF90cmFja19sc2I7CisjaWZkZWYgX19CSUdfRU5ESUFOX0JJVEZJRUxECisgX191OCBkaWRfdiA6IDE7CisgX191OCBkYmNfdiA6IDE7CisgX191OCB1cnUgOiAxOworIF9fdTggcmVzZXJ2ZWQyIDogMjsKKyBfX3U4IGRiaXQgOiAxOworIF9fdTggbXJ3X3N0YXR1cyA6IDI7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9CSVRGSUVMRCkKKyBfX3U4IG1yd19zdGF0dXMgOiAyOworIF9fdTggZGJpdCA6IDE7CisgX191OCByZXNlcnZlZDIgOiAyOworIF9fdTggdXJ1IDogMTsKKyBfX3U4IGRiY192IDogMTsKKyBfX3U4IGRpZF92IDogMTsKKyNlbmRpZgorIF9fdTggZGlzY190eXBlOworIF9fdTggbl9zZXNzaW9uc19tc2I7CisgX191OCBmaXJzdF90cmFja19tc2I7CisgX191OCBsYXN0X3RyYWNrX21zYjsKKyBfX3UzMiBkaXNjX2lkOworIF9fdTMyIGxlYWRfaW47CisgX191MzIgbGVhZF9vdXQ7CisgX191OCBkaXNjX2Jhcl9jb2RlWzhdOworIF9fdTggcmVzZXJ2ZWQzOworIF9fdTggbl9vcGM7Cit9IGRpc2NfaW5mb3JtYXRpb247CisKK3R5cGVkZWYgc3RydWN0IHsKKyBfX3UxNiB0cmFja19pbmZvcm1hdGlvbl9sZW5ndGg7CisgX191OCB0cmFja19sc2I7CisgX191OCBzZXNzaW9uX2xzYjsKKyBfX3U4IHJlc2VydmVkMTsKKyNpZmRlZiBfX0JJR19FTkRJQU5fQklURklFTEQKKyBfX3U4IHJlc2VydmVkMiA6IDI7CisgX191OCBkYW1hZ2UgOiAxOworIF9fdTggY29weSA6IDE7CisgX191OCB0cmFja19tb2RlIDogNDsKKyBfX3U4IHJ0IDogMTsKKyBfX3U4IGJsYW5rIDogMTsKKyBfX3U4IHBhY2tldCA6IDE7CisgX191OCBmcCA6IDE7CisgX191OCBkYXRhX21vZGUgOiA0OworIF9fdTggcmVzZXJ2ZWQzIDogNjsKKyBfX3U4IGxyYV92IDogMTsKKyBfX3U4IG53YV92IDogMTsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKQorIF9fdTggdHJhY2tfbW9kZSA6IDQ7CisgX191OCBjb3B5IDogMTsKKyBfX3U4IGRhbWFnZSA6IDE7CisgX191OCByZXNlcnZlZDIgOiAyOworIF9fdTggZGF0YV9tb2RlIDogNDsKKyBfX3U4IGZwIDogMTsKKyBfX3U4IHBhY2tldCA6IDE7CisgX191OCBibGFuayA6IDE7CisgX191OCBydCA6IDE7CisgX191OCBud2FfdiA6IDE7CisgX191OCBscmFfdiA6IDE7CisgX191OCByZXNlcnZlZDMgOiA2OworI2VuZGlmCisgX191MzIgdHJhY2tfc3RhcnQ7CisgX191MzIgbmV4dF93cml0YWJsZTsKKyBfX3UzMiBmcmVlX2Jsb2NrczsKKyBfX3UzMiBmaXhlZF9wYWNrZXRfc2l6ZTsKKyBfX3UzMiB0cmFja19zaXplOworIF9fdTMyIGxhc3RfcmVjX2FkZHJlc3M7Cit9IHRyYWNrX2luZm9ybWF0aW9uOworCitzdHJ1Y3QgZmVhdHVyZV9oZWFkZXIgeworIF9fdTMyIGRhdGFfbGVuOworIF9fdTggcmVzZXJ2ZWQxOworIF9fdTggcmVzZXJ2ZWQyOworIF9fdTE2IGN1cnJfcHJvZmlsZTsKK307CisKK3N0cnVjdCBtb2RlX3BhZ2VfaGVhZGVyIHsKKyBfX3UxNiBtb2RlX2RhdGFfbGVuZ3RoOworIF9fdTggbWVkaXVtX3R5cGU7CisgX191OCByZXNlcnZlZDE7CisgX191OCByZXNlcnZlZDI7CisgX191OCByZXNlcnZlZDM7CisgX191MTYgZGVzY19sZW5ndGg7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jaXJjX2J1Zi5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2NpcmNfYnVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM4MjUwYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jaXJjX2J1Zi5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX0NJUkNfQlVGX0gKKyNkZWZpbmUgX0xJTlVYX0NJUkNfQlVGX0ggMQorCitzdHJ1Y3QgY2lyY19idWYgeworIGNoYXIgKmJ1ZjsKKyBpbnQgaGVhZDsKKyBpbnQgdGFpbDsKK307CisKKyNkZWZpbmUgQ0lSQ19DTlQoaGVhZCx0YWlsLHNpemUpICgoKGhlYWQpIC0gKHRhaWwpKSAmICgoc2l6ZSktMSkpCisKKyNkZWZpbmUgQ0lSQ19TUEFDRShoZWFkLHRhaWwsc2l6ZSkgQ0lSQ19DTlQoKHRhaWwpLCgoaGVhZCkrMSksKHNpemUpKQorCisjZGVmaW5lIENJUkNfQ05UX1RPX0VORChoZWFkLHRhaWwsc2l6ZSkgICAoe2ludCBlbmQgPSAoc2l6ZSkgLSAodGFpbCk7ICAgaW50IG4gPSAoKGhlYWQpICsgZW5kKSAmICgoc2l6ZSktMSk7ICAgbiA8IGVuZCA/IG4gOiBlbmQ7fSkKKworI2RlZmluZSBDSVJDX1NQQUNFX1RPX0VORChoZWFkLHRhaWwsc2l6ZSkgICAoe2ludCBlbmQgPSAoc2l6ZSkgLSAxIC0gKGhlYWQpOyAgIGludCBuID0gKGVuZCArICh0YWlsKSkgJiAoKHNpemUpLTEpOyAgIG4gPD0gZW5kID8gbiA6IGVuZCsxO30pCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Nsay5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Nsay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiOGY0MzYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY2xrLmgKQEAgLTAsMCArMSwyMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0xJTlVYX0NMS19ICisjZGVmaW5lIF9fTElOVVhfQ0xLX0gKKworc3RydWN0IGRldmljZTsKKworc3RydWN0IGNsazsKKworc3RydWN0IGNsayAqY2xrX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmlkKTsKKworc3RydWN0IGNsayAqY2xrX2dldF9wYXJlbnQoc3RydWN0IGNsayAqY2xrKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY29kYS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2NvZGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2U4OWY5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2NvZGEuaApAQCAtMCwwICsxLDU5NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQ09EQV9IRUFERVJfCisjZGVmaW5lIF9DT0RBX0hFQURFUl8KKworI2lmIGRlZmluZWQoX19OZXRCU0RfXykgfHwgKGRlZmluZWQoREpHUFApIHx8IGRlZmluZWQoX19DWUdXSU4zMl9fKSkgJiYgIWRlZmluZWQoS0VSTkVMKQorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisKKyNpZm5kZWYgQ09EQV9NQVhTWU1MSU5LUworI2RlZmluZSBDT0RBX01BWFNZTUxJTktTIDEwCisjZW5kaWYKKworI2lmIGRlZmluZWQoREpHUFApIHx8IGRlZmluZWQoX19DWUdXSU4zMl9fKQorI2lmZGVmIEtFUk5FTAordHlwZWRlZiB1bnNpZ25lZCBsb25nIHVfbG9uZzsKK3R5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1X3Nob3J0OwordHlwZWRlZiB1X2xvbmcgaW5vX3Q7Cit0eXBlZGVmIHVfbG9uZyBkZXZfdDsKK3R5cGVkZWYgdm9pZCAqIGNhZGRyX3Q7CisjaWZkZWYgRE9TCit0eXBlZGVmIHVuc2lnbmVkIF9faW50NjQgdV9xdWFkX3Q7CisjZWxzZQordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdV9xdWFkX3Q7CisjZW5kaWYKKworI2RlZmluZSBpbmxpbmUKKworc3RydWN0IHRpbWVzcGVjIHsKKyBsb25nIHRzX3NlYzsKKyBsb25nIHRzX25zZWM7Cit9OworI2Vsc2UKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdV9xdWFkX3Q7CisjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgX19saW51eF9fCisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2RlZmluZSBjZGV2X3QgdV9xdWFkX3QKKyNpZiAhZGVmaW5lZChfVVFVQURfVF8pICYmICghZGVmaW5lZChfX0dMSUJDX18pIHx8IF9fR0xJQkNfXyA8IDIpCisjZGVmaW5lIF9VUVVBRF9UXyAxCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1X3F1YWRfdDsKKyNlbmRpZgorI2Vsc2UKKyNkZWZpbmUgY2Rldl90IGRldl90CisjZW5kaWYKKworI2lmZGVmIF9fQ1lHV0lOMzJfXworc3RydWN0IHRpbWVzcGVjIHsKKyB0aW1lX3QgdHZfc2VjOworIGxvbmcgdHZfbnNlYzsKK307CisjZW5kaWYKKworI2lmbmRlZiBfX0JJVF9UWVBFU19ERUZJTkVEX18KKyNkZWZpbmUgX19CSVRfVFlQRVNfREVGSU5FRF9fCit0eXBlZGVmIHNpZ25lZCBjaGFyIGludDhfdDsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciB1X2ludDhfdDsKK3R5cGVkZWYgc2hvcnQgaW50MTZfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgdV9pbnQxNl90OwordHlwZWRlZiBpbnQgaW50MzJfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MzJfdDsKKyNlbmRpZgorCisjZGVmaW5lIENPREFfTUFYTkFNTEVOIDI1NQorI2RlZmluZSBDT0RBX01BWFBBVEhMRU4gMTAyNAorI2RlZmluZSBDT0RBX01BWFNZTUxJTksgMTAKKworI2RlZmluZSBDX09fUkVBRCAweDAwMQorI2RlZmluZSBDX09fV1JJVEUgMHgwMDIKKyNkZWZpbmUgQ19PX1RSVU5DIDB4MDEwCisjZGVmaW5lIENfT19FWENMIDB4MTAwCisjZGVmaW5lIENfT19DUkVBVCAweDIwMAorCisjZGVmaW5lIENfTV9SRUFEIDAwNDAwCisjZGVmaW5lIENfTV9XUklURSAwMDIwMAorCisjZGVmaW5lIENfQV9DX09LIDggIAorI2RlZmluZSBDX0FfUl9PSyA0ICAKKyNkZWZpbmUgQ19BX1dfT0sgMiAgCisjZGVmaW5lIENfQV9YX09LIDEgIAorI2RlZmluZSBDX0FfRl9PSyAwICAKKworI2lmbmRlZiBfVkVOVVNfRElSRU5UX1RfCisjZGVmaW5lIF9WRU5VU19ESVJFTlRfVF8gMQorc3RydWN0IHZlbnVzX2RpcmVudCB7CisgdV9pbnQzMl90IGRfZmlsZW5vOworIHVfaW50MTZfdCBkX3JlY2xlbjsKKyB1X2ludDhfdCBkX3R5cGU7CisgdV9pbnQ4X3QgZF9uYW1sZW47CisgY2hhciBkX25hbWVbQ09EQV9NQVhOQU1MRU4gKyAxXTsKK307CisjdW5kZWYgRElSU0laCisjZGVmaW5lIERJUlNJWihkcCkgKChzaXplb2YgKHN0cnVjdCB2ZW51c19kaXJlbnQpIC0gKENPREFfTUFYTkFNTEVOKzEpKSArICAgKCgoZHApLT5kX25hbWxlbisxICsgMykgJn4gMykpCisKKyNkZWZpbmUgQ0RUX1VOS05PV04gMAorI2RlZmluZSBDRFRfRklGTyAxCisjZGVmaW5lIENEVF9DSFIgMgorI2RlZmluZSBDRFRfRElSIDQKKyNkZWZpbmUgQ0RUX0JMSyA2CisjZGVmaW5lIENEVF9SRUcgOAorI2RlZmluZSBDRFRfTE5LIDEwCisjZGVmaW5lIENEVF9TT0NLIDEyCisjZGVmaW5lIENEVF9XSFQgMTQKKworI2RlZmluZSBJRlRPQ0RUKG1vZGUpICgoKG1vZGUpICYgMDE3MDAwMCkgPj4gMTIpCisjZGVmaW5lIENEVFRPSUYoZGlydHlwZSkgKChkaXJ0eXBlKSA8PCAxMikKKworI2VuZGlmCisKKyNpZm5kZWYgX1ZVSURfVF8KKyNkZWZpbmUgX1ZVSURfVF8KK3R5cGVkZWYgdV9pbnQzMl90IHZ1aWRfdDsKK3R5cGVkZWYgdV9pbnQzMl90IHZnaWRfdDsKKyNlbmRpZgorCitzdHJ1Y3QgQ29kYUZpZCB7CisgdV9pbnQzMl90IG9wYXF1ZVs0XTsKK307CisKKyNkZWZpbmUgY29kYV9mMmkoZmlkKSAgKGZpZCA/IChmaWQtPm9wYXF1ZVszXSBeIChmaWQtPm9wYXF1ZVsyXTw8MTApIF4gKGZpZC0+b3BhcXVlWzFdPDwyMCkgXiBmaWQtPm9wYXF1ZVswXSkgOiAwKQorCisjaWZuZGVmIF9WRU5VU19WQVRUUl9UXworI2RlZmluZSBfVkVOVVNfVkFUVFJfVF8KKworZW51bSBjb2RhX3Z0eXBlIHsgQ19WTk9OLCBDX1ZSRUcsIENfVkRJUiwgQ19WQkxLLCBDX1ZDSFIsIENfVkxOSywgQ19WU09DSywgQ19WRklGTywgQ19WQkFEIH07CisKK3N0cnVjdCBjb2RhX3ZhdHRyIHsKKyBsb25nIHZhX3R5cGU7CisgdV9zaG9ydCB2YV9tb2RlOworIHNob3J0IHZhX25saW5rOworIHZ1aWRfdCB2YV91aWQ7CisgdmdpZF90IHZhX2dpZDsKKyBsb25nIHZhX2ZpbGVpZDsKKyB1X3F1YWRfdCB2YV9zaXplOworIGxvbmcgdmFfYmxvY2tzaXplOworIHN0cnVjdCB0aW1lc3BlYyB2YV9hdGltZTsKKyBzdHJ1Y3QgdGltZXNwZWMgdmFfbXRpbWU7Cisgc3RydWN0IHRpbWVzcGVjIHZhX2N0aW1lOworIHVfbG9uZyB2YV9nZW47CisgdV9sb25nIHZhX2ZsYWdzOworIGNkZXZfdCB2YV9yZGV2OworIHVfcXVhZF90IHZhX2J5dGVzOworIHVfcXVhZF90IHZhX2ZpbGVyZXY7Cit9OworCisjZW5kaWYKKworc3RydWN0IGNvZGFfc3RhdGZzIHsKKyBpbnQzMl90IGZfYmxvY2tzOworIGludDMyX3QgZl9iZnJlZTsKKyBpbnQzMl90IGZfYmF2YWlsOworIGludDMyX3QgZl9maWxlczsKKyBpbnQzMl90IGZfZmZyZWU7Cit9OworCisjZGVmaW5lIENPREFfUk9PVCAyCisjZGVmaW5lIENPREFfT1BFTl9CWV9GRCAzCisjZGVmaW5lIENPREFfT1BFTiA0CisjZGVmaW5lIENPREFfQ0xPU0UgNQorI2RlZmluZSBDT0RBX0lPQ1RMIDYKKyNkZWZpbmUgQ09EQV9HRVRBVFRSIDcKKyNkZWZpbmUgQ09EQV9TRVRBVFRSIDgKKyNkZWZpbmUgQ09EQV9BQ0NFU1MgOQorI2RlZmluZSBDT0RBX0xPT0tVUCAxMAorI2RlZmluZSBDT0RBX0NSRUFURSAxMQorI2RlZmluZSBDT0RBX1JFTU9WRSAxMgorI2RlZmluZSBDT0RBX0xJTksgMTMKKyNkZWZpbmUgQ09EQV9SRU5BTUUgMTQKKyNkZWZpbmUgQ09EQV9NS0RJUiAxNQorI2RlZmluZSBDT0RBX1JNRElSIDE2CisjZGVmaW5lIENPREFfU1lNTElOSyAxOAorI2RlZmluZSBDT0RBX1JFQURMSU5LIDE5CisjZGVmaW5lIENPREFfRlNZTkMgMjAKKyNkZWZpbmUgQ09EQV9WR0VUIDIyCisjZGVmaW5lIENPREFfU0lHTkFMIDIzCisjZGVmaW5lIENPREFfUkVQTEFDRSAyNCAgCisjZGVmaW5lIENPREFfRkxVU0ggMjUgIAorI2RlZmluZSBDT0RBX1BVUkdFVVNFUiAyNiAgCisjZGVmaW5lIENPREFfWkFQRklMRSAyNyAgCisjZGVmaW5lIENPREFfWkFQRElSIDI4ICAKKyNkZWZpbmUgQ09EQV9QVVJHRUZJRCAzMCAgCisjZGVmaW5lIENPREFfT1BFTl9CWV9QQVRIIDMxCisjZGVmaW5lIENPREFfUkVTT0xWRSAzMgorI2RlZmluZSBDT0RBX1JFSU5URUdSQVRFIDMzCisjZGVmaW5lIENPREFfU1RBVEZTIDM0CisjZGVmaW5lIENPREFfU1RPUkUgMzUKKyNkZWZpbmUgQ09EQV9SRUxFQVNFIDM2CisjZGVmaW5lIENPREFfTkNBTExTIDM3CisKKyNkZWZpbmUgRE9XTkNBTEwob3Bjb2RlKSAob3Bjb2RlID49IENPREFfUkVQTEFDRSAmJiBvcGNvZGUgPD0gQ09EQV9QVVJHRUZJRCkKKworI2RlZmluZSBWQ19NQVhEQVRBU0laRSA4MTkyCisjZGVmaW5lIFZDX01BWE1TR1NJWkUgc2l6ZW9mKHVuaW9uIGlucHV0QXJncykrc2l6ZW9mKHVuaW9uIG91dHB1dEFyZ3MpICsgIFZDX01BWERBVEFTSVpFIAorCisjZGVmaW5lIENJT0NfS0VSTkVMX1ZFUlNJT04gX0lPV1IoJ2MnLCAxMCwgc2l6ZV90KQorCisjZGVmaW5lIENPREFfS0VSTkVMX1ZFUlNJT04gMyAgCisKK3N0cnVjdCBjb2RhX2luX2hkciB7CisgdV9pbnQzMl90IG9wY29kZTsKKyB1X2ludDMyX3QgdW5pcXVlOworIHBpZF90IHBpZDsKKyBwaWRfdCBwZ2lkOworIHZ1aWRfdCB1aWQ7Cit9OworCitzdHJ1Y3QgY29kYV9vdXRfaGRyIHsKKyB1X2ludDMyX3Qgb3Bjb2RlOworIHVfaW50MzJfdCB1bmlxdWU7CisgdV9pbnQzMl90IHJlc3VsdDsKK307CisKK3N0cnVjdCBjb2RhX3Jvb3Rfb3V0IHsKKyBzdHJ1Y3QgY29kYV9vdXRfaGRyIG9oOworIHN0cnVjdCBDb2RhRmlkIFZGaWQ7Cit9OworCitzdHJ1Y3QgY29kYV9yb290X2luIHsKKyBzdHJ1Y3QgY29kYV9pbl9oZHIgaW47Cit9OworCitzdHJ1Y3QgY29kYV9vcGVuX2luIHsKKyBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7Cisgc3RydWN0IENvZGFGaWQgVkZpZDsKKyBpbnQgZmxhZ3M7Cit9OworCitzdHJ1Y3QgY29kYV9vcGVuX291dCB7Cisgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKKyBjZGV2X3QgZGV2OworIGlub190IGlub2RlOworfTsKKworc3RydWN0IGNvZGFfc3RvcmVfaW4geworIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKKyBzdHJ1Y3QgQ29kYUZpZCBWRmlkOworIGludCBmbGFnczsKK307CisKK3N0cnVjdCBjb2RhX3N0b3JlX291dCB7Cisgc3RydWN0IGNvZGFfb3V0X2hkciBvdXQ7Cit9OworCitzdHJ1Y3QgY29kYV9yZWxlYXNlX2luIHsKKyBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7Cisgc3RydWN0IENvZGFGaWQgVkZpZDsKKyBpbnQgZmxhZ3M7Cit9OworCitzdHJ1Y3QgY29kYV9yZWxlYXNlX291dCB7Cisgc3RydWN0IGNvZGFfb3V0X2hkciBvdXQ7Cit9OworCitzdHJ1Y3QgY29kYV9jbG9zZV9pbiB7Cisgc3RydWN0IGNvZGFfaW5faGRyIGloOworIHN0cnVjdCBDb2RhRmlkIFZGaWQ7CisgaW50IGZsYWdzOworfTsKKworc3RydWN0IGNvZGFfY2xvc2Vfb3V0IHsKKyBzdHJ1Y3QgY29kYV9vdXRfaGRyIG91dDsKK307CisKK3N0cnVjdCBjb2RhX2lvY3RsX2luIHsKKyBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7Cisgc3RydWN0IENvZGFGaWQgVkZpZDsKKyBpbnQgY21kOworIGludCBsZW47CisgaW50IHJ3ZmxhZzsKKyBjaGFyICpkYXRhOworfTsKKworc3RydWN0IGNvZGFfaW9jdGxfb3V0IHsKKyBzdHJ1Y3QgY29kYV9vdXRfaGRyIG9oOworIGludCBsZW47CisgY2FkZHJfdCBkYXRhOworfTsKKworc3RydWN0IGNvZGFfZ2V0YXR0cl9pbiB7Cisgc3RydWN0IGNvZGFfaW5faGRyIGloOworIHN0cnVjdCBDb2RhRmlkIFZGaWQ7Cit9OworCitzdHJ1Y3QgY29kYV9nZXRhdHRyX291dCB7Cisgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKKyBzdHJ1Y3QgY29kYV92YXR0ciBhdHRyOworfTsKKworc3RydWN0IGNvZGFfc2V0YXR0cl9pbiB7Cisgc3RydWN0IGNvZGFfaW5faGRyIGloOworIHN0cnVjdCBDb2RhRmlkIFZGaWQ7Cisgc3RydWN0IGNvZGFfdmF0dHIgYXR0cjsKK307CisKK3N0cnVjdCBjb2RhX3NldGF0dHJfb3V0IHsKKyBzdHJ1Y3QgY29kYV9vdXRfaGRyIG91dDsKK307CisKK3N0cnVjdCBjb2RhX2FjY2Vzc19pbiB7Cisgc3RydWN0IGNvZGFfaW5faGRyIGloOworIHN0cnVjdCBDb2RhRmlkIFZGaWQ7CisgaW50IGZsYWdzOworfTsKKworc3RydWN0IGNvZGFfYWNjZXNzX291dCB7Cisgc3RydWN0IGNvZGFfb3V0X2hkciBvdXQ7Cit9OworCisjZGVmaW5lIENMVV9DQVNFX1NFTlNJVElWRSAweDAxCisjZGVmaW5lIENMVV9DQVNFX0lOU0VOU0lUSVZFIDB4MDIKKworc3RydWN0IGNvZGFfbG9va3VwX2luIHsKKyBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7Cisgc3RydWN0IENvZGFGaWQgVkZpZDsKKyBpbnQgbmFtZTsKKyBpbnQgZmxhZ3M7Cit9OworCitzdHJ1Y3QgY29kYV9sb29rdXBfb3V0IHsKKyBzdHJ1Y3QgY29kYV9vdXRfaGRyIG9oOworIHN0cnVjdCBDb2RhRmlkIFZGaWQ7CisgaW50IHZ0eXBlOworfTsKKworc3RydWN0IGNvZGFfY3JlYXRlX2luIHsKKyBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7Cisgc3RydWN0IENvZGFGaWQgVkZpZDsKKyBzdHJ1Y3QgY29kYV92YXR0ciBhdHRyOworIGludCBleGNsOworIGludCBtb2RlOworIGludCBuYW1lOworfTsKKworc3RydWN0IGNvZGFfY3JlYXRlX291dCB7Cisgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKKyBzdHJ1Y3QgQ29kYUZpZCBWRmlkOworIHN0cnVjdCBjb2RhX3ZhdHRyIGF0dHI7Cit9OworCitzdHJ1Y3QgY29kYV9yZW1vdmVfaW4geworIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKKyBzdHJ1Y3QgQ29kYUZpZCBWRmlkOworIGludCBuYW1lOworfTsKKworc3RydWN0IGNvZGFfcmVtb3ZlX291dCB7Cisgc3RydWN0IGNvZGFfb3V0X2hkciBvdXQ7Cit9OworCitzdHJ1Y3QgY29kYV9saW5rX2luIHsKKyBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7Cisgc3RydWN0IENvZGFGaWQgc291cmNlRmlkOworIHN0cnVjdCBDb2RhRmlkIGRlc3RGaWQ7CisgaW50IHRuYW1lOworfTsKKworc3RydWN0IGNvZGFfbGlua19vdXQgeworIHN0cnVjdCBjb2RhX291dF9oZHIgb3V0OworfTsKKworc3RydWN0IGNvZGFfcmVuYW1lX2luIHsKKyBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7Cisgc3RydWN0IENvZGFGaWQgc291cmNlRmlkOworIGludCBzcmNuYW1lOworIHN0cnVjdCBDb2RhRmlkIGRlc3RGaWQ7CisgaW50IGRlc3RuYW1lOworfTsKKworc3RydWN0IGNvZGFfcmVuYW1lX291dCB7Cisgc3RydWN0IGNvZGFfb3V0X2hkciBvdXQ7Cit9OworCitzdHJ1Y3QgY29kYV9ta2Rpcl9pbiB7Cisgc3RydWN0IGNvZGFfaW5faGRyIGloOworIHN0cnVjdCBDb2RhRmlkIFZGaWQ7Cisgc3RydWN0IGNvZGFfdmF0dHIgYXR0cjsKKyBpbnQgbmFtZTsKK307CisKK3N0cnVjdCBjb2RhX21rZGlyX291dCB7Cisgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKKyBzdHJ1Y3QgQ29kYUZpZCBWRmlkOworIHN0cnVjdCBjb2RhX3ZhdHRyIGF0dHI7Cit9OworCitzdHJ1Y3QgY29kYV9ybWRpcl9pbiB7Cisgc3RydWN0IGNvZGFfaW5faGRyIGloOworIHN0cnVjdCBDb2RhRmlkIFZGaWQ7CisgaW50IG5hbWU7Cit9OworCitzdHJ1Y3QgY29kYV9ybWRpcl9vdXQgeworIHN0cnVjdCBjb2RhX291dF9oZHIgb3V0OworfTsKKworc3RydWN0IGNvZGFfc3ltbGlua19pbiB7Cisgc3RydWN0IGNvZGFfaW5faGRyIGloOworIHN0cnVjdCBDb2RhRmlkIFZGaWQ7CisgaW50IHNyY25hbWU7Cisgc3RydWN0IGNvZGFfdmF0dHIgYXR0cjsKKyBpbnQgdG5hbWU7Cit9OworCitzdHJ1Y3QgY29kYV9zeW1saW5rX291dCB7Cisgc3RydWN0IGNvZGFfb3V0X2hkciBvdXQ7Cit9OworCitzdHJ1Y3QgY29kYV9yZWFkbGlua19pbiB7Cisgc3RydWN0IGNvZGFfaW5faGRyIGloOworIHN0cnVjdCBDb2RhRmlkIFZGaWQ7Cit9OworCitzdHJ1Y3QgY29kYV9yZWFkbGlua19vdXQgeworIHN0cnVjdCBjb2RhX291dF9oZHIgb2g7CisgaW50IGNvdW50OworIGNhZGRyX3QgZGF0YTsKK307CisKK3N0cnVjdCBjb2RhX2ZzeW5jX2luIHsKKyBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7Cisgc3RydWN0IENvZGFGaWQgVkZpZDsKK307CisKK3N0cnVjdCBjb2RhX2ZzeW5jX291dCB7Cisgc3RydWN0IGNvZGFfb3V0X2hkciBvdXQ7Cit9OworCitzdHJ1Y3QgY29kYV92Z2V0X2luIHsKKyBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7Cisgc3RydWN0IENvZGFGaWQgVkZpZDsKK307CisKK3N0cnVjdCBjb2RhX3ZnZXRfb3V0IHsKKyBzdHJ1Y3QgY29kYV9vdXRfaGRyIG9oOworIHN0cnVjdCBDb2RhRmlkIFZGaWQ7CisgaW50IHZ0eXBlOworfTsKKworc3RydWN0IGNvZGFfcHVyZ2V1c2VyX291dCB7Cisgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKKyB2dWlkX3QgdWlkOworfTsKKworc3RydWN0IGNvZGFfemFwZmlsZV9vdXQgeworIHN0cnVjdCBjb2RhX291dF9oZHIgb2g7Cisgc3RydWN0IENvZGFGaWQgQ29kYUZpZDsKK307CisKK3N0cnVjdCBjb2RhX3phcGRpcl9vdXQgeworIHN0cnVjdCBjb2RhX291dF9oZHIgb2g7Cisgc3RydWN0IENvZGFGaWQgQ29kYUZpZDsKK307CisKK3N0cnVjdCBjb2RhX3B1cmdlZmlkX291dCB7Cisgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKKyBzdHJ1Y3QgQ29kYUZpZCBDb2RhRmlkOworfTsKKworc3RydWN0IGNvZGFfcmVwbGFjZV9vdXQgeworIHN0cnVjdCBjb2RhX291dF9oZHIgb2g7Cisgc3RydWN0IENvZGFGaWQgTmV3RmlkOworIHN0cnVjdCBDb2RhRmlkIE9sZEZpZDsKK307CisKK3N0cnVjdCBjb2RhX29wZW5fYnlfZmRfaW4geworIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKKyBzdHJ1Y3QgQ29kYUZpZCBWRmlkOworIGludCBmbGFnczsKK307CisKK3N0cnVjdCBjb2RhX29wZW5fYnlfZmRfb3V0IHsKKyBzdHJ1Y3QgY29kYV9vdXRfaGRyIG9oOworIGludCBmZDsKKworfTsKKworc3RydWN0IGNvZGFfb3Blbl9ieV9wYXRoX2luIHsKKyBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7Cisgc3RydWN0IENvZGFGaWQgVkZpZDsKKyBpbnQgZmxhZ3M7Cit9OworCitzdHJ1Y3QgY29kYV9vcGVuX2J5X3BhdGhfb3V0IHsKKyBzdHJ1Y3QgY29kYV9vdXRfaGRyIG9oOworIGludCBwYXRoOworfTsKKworc3RydWN0IGNvZGFfc3RhdGZzX2luIHsKKyBzdHJ1Y3QgY29kYV9pbl9oZHIgaW47Cit9OworCitzdHJ1Y3QgY29kYV9zdGF0ZnNfb3V0IHsKKyBzdHJ1Y3QgY29kYV9vdXRfaGRyIG9oOworIHN0cnVjdCBjb2RhX3N0YXRmcyBzdGF0OworfTsKKworI2RlZmluZSBDT0RBX05PQ0FDSEUgMHg4MDAwMDAwMAorCit1bmlvbiBpbnB1dEFyZ3MgeworIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKKyBzdHJ1Y3QgY29kYV9vcGVuX2luIGNvZGFfb3BlbjsKKyBzdHJ1Y3QgY29kYV9zdG9yZV9pbiBjb2RhX3N0b3JlOworIHN0cnVjdCBjb2RhX3JlbGVhc2VfaW4gY29kYV9yZWxlYXNlOworIHN0cnVjdCBjb2RhX2Nsb3NlX2luIGNvZGFfY2xvc2U7Cisgc3RydWN0IGNvZGFfaW9jdGxfaW4gY29kYV9pb2N0bDsKKyBzdHJ1Y3QgY29kYV9nZXRhdHRyX2luIGNvZGFfZ2V0YXR0cjsKKyBzdHJ1Y3QgY29kYV9zZXRhdHRyX2luIGNvZGFfc2V0YXR0cjsKKyBzdHJ1Y3QgY29kYV9hY2Nlc3NfaW4gY29kYV9hY2Nlc3M7Cisgc3RydWN0IGNvZGFfbG9va3VwX2luIGNvZGFfbG9va3VwOworIHN0cnVjdCBjb2RhX2NyZWF0ZV9pbiBjb2RhX2NyZWF0ZTsKKyBzdHJ1Y3QgY29kYV9yZW1vdmVfaW4gY29kYV9yZW1vdmU7Cisgc3RydWN0IGNvZGFfbGlua19pbiBjb2RhX2xpbms7Cisgc3RydWN0IGNvZGFfcmVuYW1lX2luIGNvZGFfcmVuYW1lOworIHN0cnVjdCBjb2RhX21rZGlyX2luIGNvZGFfbWtkaXI7Cisgc3RydWN0IGNvZGFfcm1kaXJfaW4gY29kYV9ybWRpcjsKKyBzdHJ1Y3QgY29kYV9zeW1saW5rX2luIGNvZGFfc3ltbGluazsKKyBzdHJ1Y3QgY29kYV9yZWFkbGlua19pbiBjb2RhX3JlYWRsaW5rOworIHN0cnVjdCBjb2RhX2ZzeW5jX2luIGNvZGFfZnN5bmM7Cisgc3RydWN0IGNvZGFfdmdldF9pbiBjb2RhX3ZnZXQ7Cisgc3RydWN0IGNvZGFfb3Blbl9ieV9mZF9pbiBjb2RhX29wZW5fYnlfZmQ7Cisgc3RydWN0IGNvZGFfb3Blbl9ieV9wYXRoX2luIGNvZGFfb3Blbl9ieV9wYXRoOworIHN0cnVjdCBjb2RhX3N0YXRmc19pbiBjb2RhX3N0YXRmczsKK307CisKK3VuaW9uIG91dHB1dEFyZ3MgeworIHN0cnVjdCBjb2RhX291dF9oZHIgb2g7Cisgc3RydWN0IGNvZGFfcm9vdF9vdXQgY29kYV9yb290OworIHN0cnVjdCBjb2RhX29wZW5fb3V0IGNvZGFfb3BlbjsKKyBzdHJ1Y3QgY29kYV9pb2N0bF9vdXQgY29kYV9pb2N0bDsKKyBzdHJ1Y3QgY29kYV9nZXRhdHRyX291dCBjb2RhX2dldGF0dHI7Cisgc3RydWN0IGNvZGFfbG9va3VwX291dCBjb2RhX2xvb2t1cDsKKyBzdHJ1Y3QgY29kYV9jcmVhdGVfb3V0IGNvZGFfY3JlYXRlOworIHN0cnVjdCBjb2RhX21rZGlyX291dCBjb2RhX21rZGlyOworIHN0cnVjdCBjb2RhX3JlYWRsaW5rX291dCBjb2RhX3JlYWRsaW5rOworIHN0cnVjdCBjb2RhX3ZnZXRfb3V0IGNvZGFfdmdldDsKKyBzdHJ1Y3QgY29kYV9wdXJnZXVzZXJfb3V0IGNvZGFfcHVyZ2V1c2VyOworIHN0cnVjdCBjb2RhX3phcGZpbGVfb3V0IGNvZGFfemFwZmlsZTsKKyBzdHJ1Y3QgY29kYV96YXBkaXJfb3V0IGNvZGFfemFwZGlyOworIHN0cnVjdCBjb2RhX3B1cmdlZmlkX291dCBjb2RhX3B1cmdlZmlkOworIHN0cnVjdCBjb2RhX3JlcGxhY2Vfb3V0IGNvZGFfcmVwbGFjZTsKKyBzdHJ1Y3QgY29kYV9vcGVuX2J5X2ZkX291dCBjb2RhX29wZW5fYnlfZmQ7Cisgc3RydWN0IGNvZGFfb3Blbl9ieV9wYXRoX291dCBjb2RhX29wZW5fYnlfcGF0aDsKKyBzdHJ1Y3QgY29kYV9zdGF0ZnNfb3V0IGNvZGFfc3RhdGZzOworfTsKKwordW5pb24gY29kYV9kb3duY2FsbHMgeworCisgc3RydWN0IGNvZGFfcHVyZ2V1c2VyX291dCBwdXJnZXVzZXI7Cisgc3RydWN0IGNvZGFfemFwZmlsZV9vdXQgemFwZmlsZTsKKyBzdHJ1Y3QgY29kYV96YXBkaXJfb3V0IHphcGRpcjsKKyBzdHJ1Y3QgY29kYV9wdXJnZWZpZF9vdXQgcHVyZ2VmaWQ7Cisgc3RydWN0IGNvZGFfcmVwbGFjZV9vdXQgcmVwbGFjZTsKK307CisKKyNkZWZpbmUgUElPQ1BBUk1fTUFTSyAweDAwMDBmZmZmCitzdHJ1Y3QgVmljZUlvY3RsIHsKKyB2b2lkIF9fdXNlciAqaW47Cisgdm9pZCBfX3VzZXIgKm91dDsKKyB1X3Nob3J0IGluX3NpemU7CisgdV9zaG9ydCBvdXRfc2l6ZTsKK307CisKK3N0cnVjdCBQaW9jdGxEYXRhIHsKKyBjb25zdCBjaGFyIF9fdXNlciAqcGF0aDsKKyBpbnQgZm9sbG93OworIHN0cnVjdCBWaWNlSW9jdGwgdmk7Cit9OworCisjZGVmaW5lIENPREFfQ09OVFJPTCAiLkNPTlRST0wiCisjZGVmaW5lIENPREFfQ09OVFJPTExFTiA4CisjZGVmaW5lIENUTF9JTk8gLTEKKworI2RlZmluZSBDT0RBX01PVU5UX1ZFUlNJT04gMQorCitzdHJ1Y3QgY29kYV9tb3VudF9kYXRhIHsKKyBpbnQgdmVyc2lvbjsKKyBpbnQgZmQ7Cit9OworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2NvZGFfZnNfaS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2NvZGFfZnNfaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4YjBlNTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY29kYV9mc19pLmgKQEAgLTAsMCArMSwxNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfQ09EQV9GU19JCisjZGVmaW5lIF9MSU5VWF9DT0RBX0ZTX0kKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY29tcGF0LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY29tcGF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMwYjU1MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jb21wYXQuaApAQCAtMCwwICsxLDE1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9DT01QQVRfSAorI2RlZmluZSBfTElOVVhfQ09NUEFUX0gKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY29tcGlsZXItZ2NjLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY29tcGlsZXItZ2NjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRkNGE2MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jb21waWxlci1nY2MuaApAQCAtMCwwICsxLDIyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIGJhcnJpZXIoKSBfX2FzbV9fIF9fdm9sYXRpbGVfXygiIjogOiA6Im1lbW9yeSIpCisKKyNkZWZpbmUgUkVMT0NfSElERShwdHIsIG9mZikgICAoeyB1bnNpZ25lZCBsb25nIF9fcHRyOyAgIF9fYXNtX18gKCIiIDogIj1yIihfX3B0cikgOiAiMCIocHRyKSk7ICAgKHR5cGVvZihwdHIpKSAoX19wdHIgKyAob2ZmKSk7IH0pCisKKyNkZWZpbmUgaW5saW5lIGlubGluZSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkKKyNkZWZpbmUgX19pbmxpbmVfXyBfX2lubGluZV9fIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKQorI2RlZmluZSBfX2lubGluZSBfX2lubGluZSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkKKyNkZWZpbmUgX19kZXByZWNhdGVkIF9fYXR0cmlidXRlX18oKGRlcHJlY2F0ZWQpKQorI2RlZmluZSBub2lubGluZSBfX2F0dHJpYnV0ZV9fKChub2lubGluZSkpCisjZGVmaW5lIF9fYXR0cmlidXRlX3B1cmVfXyBfX2F0dHJpYnV0ZV9fKChwdXJlKSkKKyNkZWZpbmUgX19hdHRyaWJ1dGVfY29uc3RfXyBfX2F0dHJpYnV0ZV9fKChfX2NvbnN0X18pKQpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2NvbXBpbGVyLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY29tcGlsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDU1ZTMzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2NvbXBpbGVyLmgKQEAgLTAsMCArMSwzOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0xJTlVYX0NPTVBJTEVSX0gKKyNkZWZpbmUgX19MSU5VWF9DT01QSUxFUl9ICisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNkZWZpbmUgX191c2VyCisjZGVmaW5lIF9fa2VybmVsCisjZGVmaW5lIF9fc2FmZQorI2RlZmluZSBfX2ZvcmNlCisjZGVmaW5lIF9fbm9jYXN0CisjZGVmaW5lIF9faW9tZW0KKyNkZWZpbmUgX19jaGtfdXNlcl9wdHIoeCkgKHZvaWQpMAorI2RlZmluZSBfX2Noa19pb19wdHIoeCkgKHZvaWQpMAorI2RlZmluZSBfX2J1aWx0aW5fd2FybmluZyh4LCB5Li4uKSAoMSkKKyNkZWZpbmUgX19hY3F1aXJlcyh4KQorI2RlZmluZSBfX3JlbGVhc2VzKHgpCisjZGVmaW5lIF9fYWNxdWlyZSh4KSAodm9pZCkwCisjZGVmaW5lIF9fcmVsZWFzZSh4KSAodm9pZCkwCisjZGVmaW5lIF9fY29uZF9sb2NrKHgpICh4KQorCisjZW5kaWYKKworI2lmbmRlZiBfX2F0dHJpYnV0ZV9jb25zdF9fCisjZGVmaW5lIF9fYXR0cmlidXRlX2NvbnN0X18gIAorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2NvbXBsZXRpb24uaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jb21wbGV0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWUxODIxMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jb21wbGV0aW9uLmgKQEAgLTAsMCArMSwzMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0xJTlVYX0NPTVBMRVRJT05fSAorI2RlZmluZSBfX0xJTlVYX0NPTVBMRVRJT05fSAorCisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorCitzdHJ1Y3QgY29tcGxldGlvbiB7CisgdW5zaWduZWQgaW50IGRvbmU7Cisgd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKK307CisKKyNkZWZpbmUgQ09NUExFVElPTl9JTklUSUFMSVpFUih3b3JrKSAgIHsgMCwgX19XQUlUX1FVRVVFX0hFQURfSU5JVElBTElaRVIoKHdvcmspLndhaXQpIH0KKworI2RlZmluZSBDT01QTEVUSU9OX0lOSVRJQUxJWkVSX09OU1RBQ0sod29yaykgICAoeyBpbml0X2NvbXBsZXRpb24oJndvcmspOyB3b3JrOyB9KQorCisjZGVmaW5lIERFQ0xBUkVfQ09NUExFVElPTih3b3JrKSAgIHN0cnVjdCBjb21wbGV0aW9uIHdvcmsgPSBDT01QTEVUSU9OX0lOSVRJQUxJWkVSKHdvcmspCisKKyNkZWZpbmUgREVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0sod29yaykgREVDTEFSRV9DT01QTEVUSU9OKHdvcmspCisKKyNkZWZpbmUgSU5JVF9DT01QTEVUSU9OKHgpICgoeCkuZG9uZSA9IDApCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2NvbmZpZy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhYTEwNTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY29uZmlnLmgKQEAgLTAsMCArMSwxNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfQ09ORklHX0gKKyNkZWZpbmUgX0xJTlVYX0NPTkZJR19ICisKKyNpbmNsdWRlIDxsaW51eC9hdXRvY29uZi5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jb25zb2xlX3N0cnVjdC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2NvbnNvbGVfc3RydWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBlNGNiZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jb25zb2xlX3N0cnVjdC5oCkBAIC0wLDAgKzEsMTIxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L3Z0Lmg+CisKK3N0cnVjdCB2dF9zdHJ1Y3Q7CisKKyNkZWZpbmUgTlBBUiAxNgorCitzdHJ1Y3QgdmNfZGF0YSB7CisgdW5zaWduZWQgc2hvcnQgdmNfbnVtOworIHVuc2lnbmVkIGludCB2Y19jb2xzOworIHVuc2lnbmVkIGludCB2Y19yb3dzOworIHVuc2lnbmVkIGludCB2Y19zaXplX3JvdzsKKyB1bnNpZ25lZCBpbnQgdmNfc2Nhbl9saW5lczsKKyB1bnNpZ25lZCBsb25nIHZjX29yaWdpbjsKKyB1bnNpZ25lZCBsb25nIHZjX3Njcl9lbmQ7CisgdW5zaWduZWQgbG9uZyB2Y192aXNpYmxlX29yaWdpbjsKKyB1bnNpZ25lZCBpbnQgdmNfdG9wLCB2Y19ib3R0b207CisgY29uc3Qgc3RydWN0IGNvbnN3ICp2Y19zdzsKKyB1bnNpZ25lZCBzaG9ydCAqdmNfc2NyZWVuYnVmOworIHVuc2lnbmVkIGludCB2Y19zY3JlZW5idWZfc2l6ZTsKKyB1bnNpZ25lZCBjaGFyIHZjX21vZGU7CisKKyB1bnNpZ25lZCBjaGFyIHZjX2F0dHI7CisgdW5zaWduZWQgY2hhciB2Y19kZWZfY29sb3I7CisgdW5zaWduZWQgY2hhciB2Y19jb2xvcjsKKyB1bnNpZ25lZCBjaGFyIHZjX3NfY29sb3I7CisgdW5zaWduZWQgY2hhciB2Y191bGNvbG9yOworIHVuc2lnbmVkIGNoYXIgdmNfaGFsZmNvbG9yOworCisgdW5zaWduZWQgaW50IHZjX2N1cnNvcl90eXBlOworIHVuc2lnbmVkIHNob3J0IHZjX2NvbXBsZW1lbnRfbWFzazsKKyB1bnNpZ25lZCBzaG9ydCB2Y19zX2NvbXBsZW1lbnRfbWFzazsKKyB1bnNpZ25lZCBpbnQgdmNfeCwgdmNfeTsKKyB1bnNpZ25lZCBpbnQgdmNfc2F2ZWRfeCwgdmNfc2F2ZWRfeTsKKyB1bnNpZ25lZCBsb25nIHZjX3BvczsKKworIHVuc2lnbmVkIHNob3J0IHZjX2hpX2ZvbnRfbWFzazsKKyBzdHJ1Y3QgY29uc29sZV9mb250IHZjX2ZvbnQ7CisgdW5zaWduZWQgc2hvcnQgdmNfdmlkZW9fZXJhc2VfY2hhcjsKKworIHVuc2lnbmVkIGludCB2Y19zdGF0ZTsKKyB1bnNpZ25lZCBpbnQgdmNfbnBhcix2Y19wYXJbTlBBUl07Cisgc3RydWN0IHR0eV9zdHJ1Y3QgKnZjX3R0eTsKKworIHN0cnVjdCB2dF9tb2RlIHZ0X21vZGU7CisgaW50IHZ0X3BpZDsKKyBpbnQgdnRfbmV3dnQ7Cisgd2FpdF9xdWV1ZV9oZWFkX3QgcGFzdGVfd2FpdDsKKworIHVuc2lnbmVkIGludCB2Y19jaGFyc2V0IDogMTsKKyB1bnNpZ25lZCBpbnQgdmNfc19jaGFyc2V0IDogMTsKKyB1bnNpZ25lZCBpbnQgdmNfZGlzcF9jdHJsIDogMTsKKyB1bnNpZ25lZCBpbnQgdmNfdG9nZ2xlX21ldGEgOiAxOworIHVuc2lnbmVkIGludCB2Y19kZWNzY25tIDogMTsKKyB1bnNpZ25lZCBpbnQgdmNfZGVjb20gOiAxOworIHVuc2lnbmVkIGludCB2Y19kZWNhd20gOiAxOworIHVuc2lnbmVkIGludCB2Y19kZWNjbSA6IDE7CisgdW5zaWduZWQgaW50IHZjX2RlY2ltIDogMTsKKyB1bnNpZ25lZCBpbnQgdmNfZGVjY29sbSA6IDE7CisKKyB1bnNpZ25lZCBpbnQgdmNfaW50ZW5zaXR5IDogMjsKKyB1bnNpZ25lZCBpbnQgdmNfdW5kZXJsaW5lIDogMTsKKyB1bnNpZ25lZCBpbnQgdmNfYmxpbmsgOiAxOworIHVuc2lnbmVkIGludCB2Y19yZXZlcnNlIDogMTsKKyB1bnNpZ25lZCBpbnQgdmNfc19pbnRlbnNpdHkgOiAyOworIHVuc2lnbmVkIGludCB2Y19zX3VuZGVybGluZSA6IDE7CisgdW5zaWduZWQgaW50IHZjX3NfYmxpbmsgOiAxOworIHVuc2lnbmVkIGludCB2Y19zX3JldmVyc2UgOiAxOworCisgdW5zaWduZWQgaW50IHZjX3F1ZXMgOiAxOworIHVuc2lnbmVkIGludCB2Y19uZWVkX3dyYXAgOiAxOworIHVuc2lnbmVkIGludCB2Y19jYW5fZG9fY29sb3IgOiAxOworIHVuc2lnbmVkIGludCB2Y19yZXBvcnRfbW91c2UgOiAyOworIHVuc2lnbmVkIGludCB2Y19rbWFsbG9jZWQgOiAxOworIHVuc2lnbmVkIGNoYXIgdmNfdXRmIDogMTsKKyB1bnNpZ25lZCBjaGFyIHZjX3V0Zl9jb3VudDsKKyBpbnQgdmNfdXRmX2NoYXI7CisgdW5zaWduZWQgaW50IHZjX3RhYl9zdG9wWzhdOworIHVuc2lnbmVkIGNoYXIgdmNfcGFsZXR0ZVsxNiozXTsKKyB1bnNpZ25lZCBzaG9ydCAqIHZjX3RyYW5zbGF0ZTsKKyB1bnNpZ25lZCBjaGFyIHZjX0cwX2NoYXJzZXQ7CisgdW5zaWduZWQgY2hhciB2Y19HMV9jaGFyc2V0OworIHVuc2lnbmVkIGNoYXIgdmNfc2F2ZWRfRzA7CisgdW5zaWduZWQgY2hhciB2Y19zYXZlZF9HMTsKKyB1bnNpZ25lZCBpbnQgdmNfYmVsbF9waXRjaDsKKyB1bnNpZ25lZCBpbnQgdmNfYmVsbF9kdXJhdGlvbjsKKyBzdHJ1Y3QgdmNfZGF0YSAqKnZjX2Rpc3BsYXlfZmc7CisgdW5zaWduZWQgbG9uZyB2Y191bmlfcGFnZWRpcjsKKyB1bnNpZ25lZCBsb25nICp2Y191bmlfcGFnZWRpcl9sb2M7CisKK307CisKK3N0cnVjdCB2YyB7Cisgc3RydWN0IHZjX2RhdGEgKmQ7CisKK307CisKKyNkZWZpbmUgQ1VSX0RFRiAwCisjZGVmaW5lIENVUl9OT05FIDEKKyNkZWZpbmUgQ1VSX1VOREVSTElORSAyCisjZGVmaW5lIENVUl9MT1dFUl9USElSRCAzCisjZGVmaW5lIENVUl9MT1dFUl9IQUxGIDQKKyNkZWZpbmUgQ1VSX1RXT19USElSRFMgNQorI2RlZmluZSBDVVJfQkxPQ0sgNgorI2RlZmluZSBDVVJfSFdNQVNLIDB4MGYKKyNkZWZpbmUgQ1VSX1NXTUFTSyAweGZmZjAKKworI2RlZmluZSBDVVJfREVGQVVMVCBDVVJfVU5ERVJMSU5FCisKKyNkZWZpbmUgQ09OX0lTX1ZJU0lCTEUoY29ucCkgKCpjb25wLT52Y19kaXNwbGF5X2ZnID09IGNvbnApCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY3B1LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY3B1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdlMzg4OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jcHUuaApAQCAtMCwwICsxLDM2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9DUFVfSF8KKyNkZWZpbmUgX0xJTlVYX0NQVV9IXworCisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvbm9kZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KKworc3RydWN0IGNwdSB7CisgaW50IG5vZGVfaWQ7CisgaW50IG5vX2NvbnRyb2w7Cisgc3RydWN0IHN5c19kZXZpY2Ugc3lzZGV2OworfTsKKworc3RydWN0IG5vdGlmaWVyX2Jsb2NrOworCisjZGVmaW5lIGxvY2tfY3B1X2hvdHBsdWcoKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHVubG9ja19jcHVfaG90cGx1ZygpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgbG9ja19jcHVfaG90cGx1Z19pbnRlcnJ1cHRpYmxlKCkgMAorI2RlZmluZSBob3RjcHVfbm90aWZpZXIoZm4sIHByaSkgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSByZWdpc3Rlcl9ob3RjcHVfbm90aWZpZXIobmIpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgdW5yZWdpc3Rlcl9ob3RjcHVfbm90aWZpZXIobmIpIGRvIHsgfSB3aGlsZSAoMCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY3B1bWFzay5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2NwdW1hc2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDE5NDBhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2NwdW1hc2suaApAQCAtMCwwICsxLDg3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTElOVVhfQ1BVTUFTS19ICisjZGVmaW5lIF9fTElOVVhfQ1BVTUFTS19ICisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisjaW5jbHVkZSA8bGludXgvYml0bWFwLmg+CisKK3R5cGVkZWYgc3RydWN0IHsgREVDTEFSRV9CSVRNQVAoYml0cywgTlJfQ1BVUyk7IH0gY3B1bWFza190OworCisjZGVmaW5lIGNwdV9zZXQoY3B1LCBkc3QpIF9fY3B1X3NldCgoY3B1KSwgJihkc3QpKQorI2RlZmluZSBjcHVfY2xlYXIoY3B1LCBkc3QpIF9fY3B1X2NsZWFyKChjcHUpLCAmKGRzdCkpCisjZGVmaW5lIGNwdXNfc2V0YWxsKGRzdCkgX19jcHVzX3NldGFsbCgmKGRzdCksIE5SX0NQVVMpCisjZGVmaW5lIGNwdXNfY2xlYXIoZHN0KSBfX2NwdXNfY2xlYXIoJihkc3QpLCBOUl9DUFVTKQorI2RlZmluZSBjcHVfaXNzZXQoY3B1LCBjcHVtYXNrKSB0ZXN0X2JpdCgoY3B1KSwgKGNwdW1hc2spLmJpdHMpCisjZGVmaW5lIGNwdV90ZXN0X2FuZF9zZXQoY3B1LCBjcHVtYXNrKSBfX2NwdV90ZXN0X2FuZF9zZXQoKGNwdSksICYoY3B1bWFzaykpCisjZGVmaW5lIGNwdXNfYW5kKGRzdCwgc3JjMSwgc3JjMikgX19jcHVzX2FuZCgmKGRzdCksICYoc3JjMSksICYoc3JjMiksIE5SX0NQVVMpCisjZGVmaW5lIGNwdXNfb3IoZHN0LCBzcmMxLCBzcmMyKSBfX2NwdXNfb3IoJihkc3QpLCAmKHNyYzEpLCAmKHNyYzIpLCBOUl9DUFVTKQorI2RlZmluZSBjcHVzX3hvcihkc3QsIHNyYzEsIHNyYzIpIF9fY3B1c194b3IoJihkc3QpLCAmKHNyYzEpLCAmKHNyYzIpLCBOUl9DUFVTKQorI2RlZmluZSBjcHVzX2FuZG5vdChkc3QsIHNyYzEsIHNyYzIpICAgX19jcHVzX2FuZG5vdCgmKGRzdCksICYoc3JjMSksICYoc3JjMiksIE5SX0NQVVMpCisjZGVmaW5lIGNwdXNfY29tcGxlbWVudChkc3QsIHNyYykgX19jcHVzX2NvbXBsZW1lbnQoJihkc3QpLCAmKHNyYyksIE5SX0NQVVMpCisjZGVmaW5lIGNwdXNfZXF1YWwoc3JjMSwgc3JjMikgX19jcHVzX2VxdWFsKCYoc3JjMSksICYoc3JjMiksIE5SX0NQVVMpCisjZGVmaW5lIGNwdXNfaW50ZXJzZWN0cyhzcmMxLCBzcmMyKSBfX2NwdXNfaW50ZXJzZWN0cygmKHNyYzEpLCAmKHNyYzIpLCBOUl9DUFVTKQorI2RlZmluZSBjcHVzX3N1YnNldChzcmMxLCBzcmMyKSBfX2NwdXNfc3Vic2V0KCYoc3JjMSksICYoc3JjMiksIE5SX0NQVVMpCisjZGVmaW5lIGNwdXNfZW1wdHkoc3JjKSBfX2NwdXNfZW1wdHkoJihzcmMpLCBOUl9DUFVTKQorI2RlZmluZSBjcHVzX2Z1bGwoY3B1bWFzaykgX19jcHVzX2Z1bGwoJihjcHVtYXNrKSwgTlJfQ1BVUykKKyNkZWZpbmUgY3B1c193ZWlnaHQoY3B1bWFzaykgX19jcHVzX3dlaWdodCgmKGNwdW1hc2spLCBOUl9DUFVTKQorI2RlZmluZSBjcHVzX3NoaWZ0X3JpZ2h0KGRzdCwgc3JjLCBuKSAgIF9fY3B1c19zaGlmdF9yaWdodCgmKGRzdCksICYoc3JjKSwgKG4pLCBOUl9DUFVTKQorI2RlZmluZSBjcHVzX3NoaWZ0X2xlZnQoZHN0LCBzcmMsIG4pICAgX19jcHVzX3NoaWZ0X2xlZnQoJihkc3QpLCAmKHNyYyksIChuKSwgTlJfQ1BVUykKKyNkZWZpbmUgZmlyc3RfY3B1KHNyYykgMAorI2RlZmluZSBuZXh0X2NwdShuLCBzcmMpIDEKKyNkZWZpbmUgY3B1bWFza19vZl9jcHUoY3B1KSAgKHsgICB0eXBlb2YoX3VudXNlZF9jcHVtYXNrX2FyZ18pIG07ICAgaWYgKHNpemVvZihtKSA9PSBzaXplb2YodW5zaWduZWQgbG9uZykpIHsgICBtLmJpdHNbMF0gPSAxVUw8PChjcHUpOyAgIH0gZWxzZSB7ICAgY3B1c19jbGVhcihtKTsgICBjcHVfc2V0KChjcHUpLCBtKTsgICB9ICAgbTsgIH0pCisjZGVmaW5lIENQVV9NQVNLX0xBU1RfV09SRCBCSVRNQVBfTEFTVF9XT1JEX01BU0soTlJfQ1BVUykKKyNpZiBOUl9DUFVTIDw9IEJJVFNfUEVSX0xPTkcKKyNkZWZpbmUgQ1BVX01BU0tfQUxMICAoY3B1bWFza190KSB7IHsgICBbQklUU19UT19MT05HUyhOUl9DUFVTKS0xXSA9IENQVV9NQVNLX0xBU1RfV09SRCAgfSB9CisjZWxzZQorI2RlZmluZSBDUFVfTUFTS19BTEwgIChjcHVtYXNrX3QpIHsgeyAgIFswIC4uLiBCSVRTX1RPX0xPTkdTKE5SX0NQVVMpLTJdID0gfjBVTCwgICBbQklUU19UT19MT05HUyhOUl9DUFVTKS0xXSA9IENQVV9NQVNLX0xBU1RfV09SRCAgfSB9CisjZW5kaWYKKyNkZWZpbmUgQ1BVX01BU0tfTk9ORSAgKGNwdW1hc2tfdCkgeyB7ICAgWzAgLi4uIEJJVFNfVE9fTE9OR1MoTlJfQ1BVUyktMV0gPSAwVUwgIH0gfQorI2RlZmluZSBDUFVfTUFTS19DUFUwICAoY3B1bWFza190KSB7IHsgICBbMF0gPSAxVUwgIH0gfQorI2RlZmluZSBjcHVzX2FkZHIoc3JjKSAoKHNyYykuYml0cykKKyNkZWZpbmUgY3B1bWFza19zY25wcmludGYoYnVmLCBsZW4sIHNyYykgICBfX2NwdW1hc2tfc2NucHJpbnRmKChidWYpLCAobGVuKSwgJihzcmMpLCBOUl9DUFVTKQorI2RlZmluZSBjcHVtYXNrX3BhcnNlKHVidWYsIHVsZW4sIGRzdCkgICBfX2NwdW1hc2tfcGFyc2UoKHVidWYpLCAodWxlbiksICYoZHN0KSwgTlJfQ1BVUykKKyNkZWZpbmUgY3B1bGlzdF9zY25wcmludGYoYnVmLCBsZW4sIHNyYykgICBfX2NwdWxpc3Rfc2NucHJpbnRmKChidWYpLCAobGVuKSwgJihzcmMpLCBOUl9DUFVTKQorI2RlZmluZSBjcHVsaXN0X3BhcnNlKGJ1ZiwgZHN0KSBfX2NwdWxpc3RfcGFyc2UoKGJ1ZiksICYoZHN0KSwgTlJfQ1BVUykKKyNkZWZpbmUgY3B1X3JlbWFwKG9sZGJpdCwgb2xkLCBuZXcpICAgX19jcHVfcmVtYXAoKG9sZGJpdCksICYob2xkKSwgJihuZXcpLCBOUl9DUFVTKQorI2RlZmluZSBjcHVzX3JlbWFwKGRzdCwgc3JjLCBvbGQsIG5ldykgICBfX2NwdXNfcmVtYXAoJihkc3QpLCAmKHNyYyksICYob2xkKSwgJihuZXcpLCBOUl9DUFVTKQorI2lmIE5SX0NQVVMgPiAxCisjZGVmaW5lIGZvcl9lYWNoX2NwdV9tYXNrKGNwdSwgbWFzaykgICBmb3IgKChjcHUpID0gZmlyc3RfY3B1KG1hc2spOyAgIChjcHUpIDwgTlJfQ1BVUzsgICAoY3B1KSA9IG5leHRfY3B1KChjcHUpLCAobWFzaykpKQorI2Vsc2UKKyNkZWZpbmUgZm9yX2VhY2hfY3B1X21hc2soY3B1LCBtYXNrKSAgIGZvciAoKGNwdSkgPSAwOyAoY3B1KSA8IDE7IChjcHUpKyssICh2b2lkKW1hc2spCisjZW5kaWYKKworI2lmIE5SX0NQVVMgPiAxCisjZGVmaW5lIG51bV9vbmxpbmVfY3B1cygpIGNwdXNfd2VpZ2h0KGNwdV9vbmxpbmVfbWFwKQorI2RlZmluZSBudW1fcG9zc2libGVfY3B1cygpIGNwdXNfd2VpZ2h0KGNwdV9wb3NzaWJsZV9tYXApCisjZGVmaW5lIG51bV9wcmVzZW50X2NwdXMoKSBjcHVzX3dlaWdodChjcHVfcHJlc2VudF9tYXApCisjZGVmaW5lIGNwdV9vbmxpbmUoY3B1KSBjcHVfaXNzZXQoKGNwdSksIGNwdV9vbmxpbmVfbWFwKQorI2RlZmluZSBjcHVfcG9zc2libGUoY3B1KSBjcHVfaXNzZXQoKGNwdSksIGNwdV9wb3NzaWJsZV9tYXApCisjZGVmaW5lIGNwdV9wcmVzZW50KGNwdSkgY3B1X2lzc2V0KChjcHUpLCBjcHVfcHJlc2VudF9tYXApCisjZWxzZQorI2RlZmluZSBudW1fb25saW5lX2NwdXMoKSAxCisjZGVmaW5lIG51bV9wb3NzaWJsZV9jcHVzKCkgMQorI2RlZmluZSBudW1fcHJlc2VudF9jcHVzKCkgMQorI2RlZmluZSBjcHVfb25saW5lKGNwdSkgKChjcHUpID09IDApCisjZGVmaW5lIGNwdV9wb3NzaWJsZShjcHUpICgoY3B1KSA9PSAwKQorI2RlZmluZSBjcHVfcHJlc2VudChjcHUpICgoY3B1KSA9PSAwKQorI2VuZGlmCisKKyNkZWZpbmUgaGlnaGVzdF9wb3NzaWJsZV9wcm9jZXNzb3JfaWQoKSAwCisjZGVmaW5lIGFueV9vbmxpbmVfY3B1KG1hc2spIDAKKworI2RlZmluZSBmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSBmb3JfZWFjaF9jcHVfbWFzaygoY3B1KSwgY3B1X3Bvc3NpYmxlX21hcCkKKyNkZWZpbmUgZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIGZvcl9lYWNoX2NwdV9tYXNrKChjcHUpLCBjcHVfb25saW5lX21hcCkKKyNkZWZpbmUgZm9yX2VhY2hfcHJlc2VudF9jcHUoY3B1KSBmb3JfZWFjaF9jcHVfbWFzaygoY3B1KSwgY3B1X3ByZXNlbnRfbWFwKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jdHlwZS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2N0eXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY0NGQxMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jdHlwZS5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX0NUWVBFX0gKKyNkZWZpbmUgX0xJTlVYX0NUWVBFX0gKKworI2RlZmluZSBfVSAweDAxICAKKyNkZWZpbmUgX0wgMHgwMiAgCisjZGVmaW5lIF9EIDB4MDQgIAorI2RlZmluZSBfQyAweDA4ICAKKyNkZWZpbmUgX1AgMHgxMCAgCisjZGVmaW5lIF9TIDB4MjAgIAorI2RlZmluZSBfWCAweDQwICAKKyNkZWZpbmUgX1NQIDB4ODAgIAorCisjZGVmaW5lIF9faXNtYXNrKHgpIChfY3R5cGVbKGludCkodW5zaWduZWQgY2hhcikoeCldKQorCisjZGVmaW5lIGlzYWxudW0oYykgKChfX2lzbWFzayhjKSYoX1V8X0x8X0QpKSAhPSAwKQorI2RlZmluZSBpc2FscGhhKGMpICgoX19pc21hc2soYykmKF9VfF9MKSkgIT0gMCkKKyNkZWZpbmUgaXNjbnRybChjKSAoKF9faXNtYXNrKGMpJihfQykpICE9IDApCisjZGVmaW5lIGlzZGlnaXQoYykgKChfX2lzbWFzayhjKSYoX0QpKSAhPSAwKQorI2RlZmluZSBpc2dyYXBoKGMpICgoX19pc21hc2soYykmKF9QfF9VfF9MfF9EKSkgIT0gMCkKKyNkZWZpbmUgaXNsb3dlcihjKSAoKF9faXNtYXNrKGMpJihfTCkpICE9IDApCisjZGVmaW5lIGlzcHJpbnQoYykgKChfX2lzbWFzayhjKSYoX1B8X1V8X0x8X0R8X1NQKSkgIT0gMCkKKyNkZWZpbmUgaXNwdW5jdChjKSAoKF9faXNtYXNrKGMpJihfUCkpICE9IDApCisjZGVmaW5lIGlzc3BhY2UoYykgKChfX2lzbWFzayhjKSYoX1MpKSAhPSAwKQorI2RlZmluZSBpc3VwcGVyKGMpICgoX19pc21hc2soYykmKF9VKSkgIT0gMCkKKyNkZWZpbmUgaXN4ZGlnaXQoYykgKChfX2lzbWFzayhjKSYoX0R8X1gpKSAhPSAwKQorCisjZGVmaW5lIGlzYXNjaWkoYykgKCgodW5zaWduZWQgY2hhcikoYykpPD0weDdmKQorI2RlZmluZSB0b2FzY2lpKGMpICgoKHVuc2lnbmVkIGNoYXIpKGMpKSYweDdmKQorCisjZGVmaW5lIHRvbG93ZXIoYykgX190b2xvd2VyKGMpCisjZGVmaW5lIHRvdXBwZXIoYykgX190b3VwcGVyKGMpCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9kY2NwLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZGNjcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlMzM3NzcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZGNjcC5oCkBAIC0wLDAgKzEsMTM1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9EQ0NQX0gKKyNkZWZpbmUgX0xJTlVYX0RDQ1BfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisKK3N0cnVjdCBkY2NwX2hkciB7CisgX19iZTE2IGRjY3BoX3Nwb3J0LAorIGRjY3BoX2Rwb3J0OworIF9fdTggZGNjcGhfZG9mZjsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fQklURklFTEQKKyBfX3U4IGRjY3BoX2NzY292OjQsCisgZGNjcGhfY2N2YWw6NDsKKyNlbGlmIGRlZmluZWQoX19CSUdfRU5ESUFOX0JJVEZJRUxEKQorIF9fdTggZGNjcGhfY2N2YWw6NCwKKyBkY2NwaF9jc2Nvdjo0OworI2Vsc2UKKyNlcnJvciAiQWRqdXN0IHlvdXIgPGFzbS9ieXRlb3JkZXIuaD4gZGVmaW5lcyIKKyNlbmRpZgorIF9fdTE2IGRjY3BoX2NoZWNrc3VtOworI2lmZGVmIF9fTElUVExFX0VORElBTl9CSVRGSUVMRAorIF9fdTggZGNjcGhfeDoxLAorIGRjY3BoX3R5cGU6NCwKKyBkY2NwaF9yZXNlcnZlZDozOworI2VsaWYgZGVmaW5lZChfX0JJR19FTkRJQU5fQklURklFTEQpCisgX191OCBkY2NwaF9yZXNlcnZlZDozLAorIGRjY3BoX3R5cGU6NCwKKyBkY2NwaF94OjE7CisjZWxzZQorI2Vycm9yICJBZGp1c3QgeW91ciA8YXNtL2J5dGVvcmRlci5oPiBkZWZpbmVzIgorI2VuZGlmCisgX191OCBkY2NwaF9zZXEyOworIF9fYmUxNiBkY2NwaF9zZXE7Cit9OworCitzdHJ1Y3QgZGNjcF9oZHJfZXh0IHsKKyBfX2JlMzIgZGNjcGhfc2VxX2xvdzsKK307CisKK3N0cnVjdCBkY2NwX2hkcl9yZXF1ZXN0IHsKKyBfX2JlMzIgZGNjcGhfcmVxX3NlcnZpY2U7Cit9OworCitzdHJ1Y3QgZGNjcF9oZHJfYWNrX2JpdHMgeworIF9fYmUxNiBkY2NwaF9yZXNlcnZlZDE7CisgX19iZTE2IGRjY3BoX2Fja19ucl9oaWdoOworIF9fYmUzMiBkY2NwaF9hY2tfbnJfbG93OworfTsKKworc3RydWN0IGRjY3BfaGRyX3Jlc3BvbnNlIHsKKyBzdHJ1Y3QgZGNjcF9oZHJfYWNrX2JpdHMgZGNjcGhfcmVzcF9hY2s7CisgX19iZTMyIGRjY3BoX3Jlc3Bfc2VydmljZTsKK307CisKK3N0cnVjdCBkY2NwX2hkcl9yZXNldCB7Cisgc3RydWN0IGRjY3BfaGRyX2Fja19iaXRzIGRjY3BoX3Jlc2V0X2FjazsKKyBfX3U4IGRjY3BoX3Jlc2V0X2NvZGUsCisgZGNjcGhfcmVzZXRfZGF0YVszXTsKK307CisKK2VudW0gZGNjcF9wa3RfdHlwZSB7CisgRENDUF9QS1RfUkVRVUVTVCA9IDAsCisgRENDUF9QS1RfUkVTUE9OU0UsCisgRENDUF9QS1RfREFUQSwKKyBEQ0NQX1BLVF9BQ0ssCisgRENDUF9QS1RfREFUQUFDSywKKyBEQ0NQX1BLVF9DTE9TRVJFUSwKKyBEQ0NQX1BLVF9DTE9TRSwKKyBEQ0NQX1BLVF9SRVNFVCwKKyBEQ0NQX1BLVF9TWU5DLAorIERDQ1BfUEtUX1NZTkNBQ0ssCisgRENDUF9QS1RfSU5WQUxJRCwKK307CisKKyNkZWZpbmUgRENDUF9OUl9QS1RfVFlQRVMgRENDUF9QS1RfSU5WQUxJRAorCitlbnVtIHsKKyBEQ0NQT19QQURESU5HID0gMCwKKyBEQ0NQT19NQU5EQVRPUlkgPSAxLAorIERDQ1BPX01JTl9SRVNFUlZFRCA9IDMsCisgRENDUE9fTUFYX1JFU0VSVkVEID0gMzEsCisgRENDUE9fQ0hBTkdFX0wgPSAzMiwKKyBEQ0NQT19DT05GSVJNX0wgPSAzMywKKyBEQ0NQT19DSEFOR0VfUiA9IDM0LAorIERDQ1BPX0NPTkZJUk1fUiA9IDM1LAorIERDQ1BPX05EUF9DT1VOVCA9IDM3LAorIERDQ1BPX0FDS19WRUNUT1JfMCA9IDM4LAorIERDQ1BPX0FDS19WRUNUT1JfMSA9IDM5LAorIERDQ1BPX1RJTUVTVEFNUCA9IDQxLAorIERDQ1BPX1RJTUVTVEFNUF9FQ0hPID0gNDIsCisgRENDUE9fRUxBUFNFRF9USU1FID0gNDMsCisgRENDUE9fTUFYID0gNDUsCisgRENDUE9fTUlOX0NDSURfU1BFQ0lGSUMgPSAxMjgsCisgRENDUE9fTUFYX0NDSURfU1BFQ0lGSUMgPSAyNTUsCit9OworCitlbnVtIHsKKyBEQ0NQRl9SRVNFUlZFRCA9IDAsCisgRENDUEZfQ0NJRCA9IDEsCisgRENDUEZfU0VRVUVOQ0VfV0lORE9XID0gMywKKyBEQ0NQRl9BQ0tfUkFUSU8gPSA1LAorIERDQ1BGX1NFTkRfQUNLX1ZFQ1RPUiA9IDYsCisgRENDUEZfU0VORF9ORFBfQ09VTlQgPSA3LAorCisgRENDUEZfTUlOX0NDSURfU1BFQ0lGSUMgPSAxMjgsCisgRENDUEZfTUFYX0NDSURfU1BFQ0lGSUMgPSAyNTUsCit9OworCitzdHJ1Y3QgZGNjcF9zb19mZWF0IHsKKyBfX3U4IGRjY3BzZl9mZWF0OworIF9fdTggKmRjY3BzZl92YWw7CisgX191OCBkY2Nwc2ZfbGVuOworfTsKKworI2RlZmluZSBEQ0NQX1NPQ0tPUFRfUEFDS0VUX1NJWkUgMQorI2RlZmluZSBEQ0NQX1NPQ0tPUFRfU0VSVklDRSAyCisjZGVmaW5lIERDQ1BfU09DS09QVF9DSEFOR0VfTCAzCisjZGVmaW5lIERDQ1BfU09DS09QVF9DSEFOR0VfUiA0CisjZGVmaW5lIERDQ1BfU09DS09QVF9DQ0lEX1JYX0lORk8gMTI4CisjZGVmaW5lIERDQ1BfU09DS09QVF9DQ0lEX1RYX0lORk8gMTkyCisKKyNkZWZpbmUgRENDUF9TRVJWSUNFX0xJU1RfTUFYX0xFTiAzMgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9kZWJ1Z19sb2Nrcy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2RlYnVnX2xvY2tzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ1NWZjZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9kZWJ1Z19sb2Nrcy5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19MSU5VWF9ERUJVR19MT0NLSU5HX0gKKyNkZWZpbmUgX19MSU5VWF9ERUJVR19MT0NLSU5HX0gKKworc3RydWN0IHRhc2tfc3RydWN0OworCisjZGVmaW5lIF9SRVRfSVBfICh1bnNpZ25lZCBsb25nKV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKQorI2RlZmluZSBfVEhJU19JUF8gKHsgX19sYWJlbF9fIF9faGVyZTsgX19oZXJlOiAodW5zaWduZWQgbG9uZykmJl9faGVyZTsgfSkKKworI2RlZmluZSBERUJVR19MT0NLU19XQVJOX09OKGMpICAoeyAgIGludCBfX3JldCA9IDA7ICAgICBpZiAodW5saWtlbHkoYykpIHsgICBpZiAoZGVidWdfbG9ja3Nfb2ZmKCkpICAgV0FSTl9PTigxKTsgICBfX3JldCA9IDE7ICAgfSAgIF9fcmV0OyAgfSkKKworI2RlZmluZSBTTVBfREVCVUdfTE9DS1NfV0FSTl9PTihjKSBkbyB7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgbG9ja2luZ19zZWxmdGVzdCgpIGRvIHsgfSB3aGlsZSAoMCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZGVsYXkuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9kZWxheS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwMzJiNmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZGVsYXkuaApAQCAtMCwwICsxLDI5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9ERUxBWV9ICisjZGVmaW5lIF9MSU5VWF9ERUxBWV9ICisKKyNpbmNsdWRlIDxhc20vZGVsYXkuaD4KKworI2lmbmRlZiBNQVhfVURFTEFZX01TCisjZGVmaW5lIE1BWF9VREVMQVlfTVMgNQorI2VuZGlmCisKKyNpZm5kZWYgbWRlbGF5CisjZGVmaW5lIG1kZWxheShuKSAoICAoX19idWlsdGluX2NvbnN0YW50X3AobikgJiYgKG4pPD1NQVhfVURFTEFZX01TKSA/IHVkZWxheSgobikqMTAwMCkgOiAgICh7dW5zaWduZWQgbG9uZyBfX21zPShuKTsgd2hpbGUgKF9fbXMtLSkgdWRlbGF5KDEwMDApO30pKQorI2VuZGlmCisKKyNpZm5kZWYgbmRlbGF5CisjZGVmaW5lIG5kZWxheSh4KSB1ZGVsYXkoKCh4KSs5OTkpLzEwMDApCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZGV2aWNlLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZGV2aWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQxOTMyMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9kZXZpY2UuaApAQCAtMCwwICsxLDIyMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfREVWSUNFX0hfCisjZGVmaW5lIF9ERVZJQ0VfSF8KKworI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2tvYmplY3QuaD4KKyNpbmNsdWRlIDxsaW51eC9rbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKworI2RlZmluZSBERVZJQ0VfTkFNRV9TSVpFIDUwCisjZGVmaW5lIERFVklDRV9OQU1FX0hBTEYgX19zdHJpbmdpZnkoMjApICAKKyNkZWZpbmUgREVWSUNFX0lEX1NJWkUgMzIKKyNkZWZpbmUgQlVTX0lEX1NJWkUgS09CSl9OQU1FX0xFTgorCitzdHJ1Y3QgZGV2aWNlOworc3RydWN0IGRldmljZV9kcml2ZXI7CitzdHJ1Y3QgY2xhc3M7CitzdHJ1Y3QgY2xhc3NfZGV2aWNlOworCitzdHJ1Y3QgYnVzX3R5cGUgeworIGNvbnN0IGNoYXIgKiBuYW1lOworCisgc3RydWN0IHN1YnN5c3RlbSBzdWJzeXM7Cisgc3RydWN0IGtzZXQgZHJpdmVyczsKKyBzdHJ1Y3Qga3NldCBkZXZpY2VzOworIHN0cnVjdCBrbGlzdCBrbGlzdF9kZXZpY2VzOworIHN0cnVjdCBrbGlzdCBrbGlzdF9kcml2ZXJzOworCisgc3RydWN0IGJ1c19hdHRyaWJ1dGUgKiBidXNfYXR0cnM7Cisgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKiBkZXZfYXR0cnM7Cisgc3RydWN0IGRyaXZlcl9hdHRyaWJ1dGUgKiBkcnZfYXR0cnM7CisKKyBpbnQgKCptYXRjaCkoc3RydWN0IGRldmljZSAqIGRldiwgc3RydWN0IGRldmljZV9kcml2ZXIgKiBkcnYpOworIGludCAoKnVldmVudCkoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICoqZW52cCwKKyBpbnQgbnVtX2VudnAsIGNoYXIgKmJ1ZmZlciwgaW50IGJ1ZmZlcl9zaXplKTsKKyBpbnQgKCpwcm9iZSkoc3RydWN0IGRldmljZSAqIGRldik7CisgaW50ICgqcmVtb3ZlKShzdHJ1Y3QgZGV2aWNlICogZGV2KTsKKyB2b2lkICgqc2h1dGRvd24pKHN0cnVjdCBkZXZpY2UgKiBkZXYpOworIGludCAoKnN1c3BlbmQpKHN0cnVjdCBkZXZpY2UgKiBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSk7CisgaW50ICgqcmVzdW1lKShzdHJ1Y3QgZGV2aWNlICogZGV2KTsKK307CisKK3N0cnVjdCBkZXZpY2UgKiBidXNfZmluZF9kZXZpY2Uoc3RydWN0IGJ1c190eXBlICpidXMsIHN0cnVjdCBkZXZpY2UgKnN0YXJ0LAorIHZvaWQgKmRhdGEsIGludCAoKm1hdGNoKShzdHJ1Y3QgZGV2aWNlICosIHZvaWQgKikpOworCitzdHJ1Y3QgYnVzX2F0dHJpYnV0ZSB7Cisgc3RydWN0IGF0dHJpYnV0ZSBhdHRyOworIHNzaXplX3QgKCpzaG93KShzdHJ1Y3QgYnVzX3R5cGUgKiwgY2hhciAqIGJ1Zik7Cisgc3NpemVfdCAoKnN0b3JlKShzdHJ1Y3QgYnVzX3R5cGUgKiwgY29uc3QgY2hhciAqIGJ1Ziwgc2l6ZV90IGNvdW50KTsKK307CisKKyNkZWZpbmUgQlVTX0FUVFIoX25hbWUsX21vZGUsX3Nob3csX3N0b3JlKSAgc3RydWN0IGJ1c19hdHRyaWJ1dGUgYnVzX2F0dHJfIyNfbmFtZSA9IF9fQVRUUihfbmFtZSxfbW9kZSxfc2hvdyxfc3RvcmUpCisKK3N0cnVjdCBkZXZpY2VfZHJpdmVyIHsKKyBjb25zdCBjaGFyICogbmFtZTsKKyBzdHJ1Y3QgYnVzX3R5cGUgKiBidXM7CisKKyBzdHJ1Y3QgY29tcGxldGlvbiB1bmxvYWRlZDsKKyBzdHJ1Y3Qga29iamVjdCBrb2JqOworIHN0cnVjdCBrbGlzdCBrbGlzdF9kZXZpY2VzOworIHN0cnVjdCBrbGlzdF9ub2RlIGtub2RlX2J1czsKKworIHN0cnVjdCBtb2R1bGUgKiBvd25lcjsKKworIGludCAoKnByb2JlKSAoc3RydWN0IGRldmljZSAqIGRldik7CisgaW50ICgqcmVtb3ZlKSAoc3RydWN0IGRldmljZSAqIGRldik7Cisgdm9pZCAoKnNodXRkb3duKSAoc3RydWN0IGRldmljZSAqIGRldik7CisgaW50ICgqc3VzcGVuZCkgKHN0cnVjdCBkZXZpY2UgKiBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSk7CisgaW50ICgqcmVzdW1lKSAoc3RydWN0IGRldmljZSAqIGRldik7Cit9OworCitzdHJ1Y3QgZHJpdmVyX2F0dHJpYnV0ZSB7Cisgc3RydWN0IGF0dHJpYnV0ZSBhdHRyOworIHNzaXplX3QgKCpzaG93KShzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqLCBjaGFyICogYnVmKTsKKyBzc2l6ZV90ICgqc3RvcmUpKHN0cnVjdCBkZXZpY2VfZHJpdmVyICosIGNvbnN0IGNoYXIgKiBidWYsIHNpemVfdCBjb3VudCk7Cit9OworCisjZGVmaW5lIERSSVZFUl9BVFRSKF9uYW1lLF9tb2RlLF9zaG93LF9zdG9yZSkgIHN0cnVjdCBkcml2ZXJfYXR0cmlidXRlIGRyaXZlcl9hdHRyXyMjX25hbWUgPSBfX0FUVFIoX25hbWUsX21vZGUsX3Nob3csX3N0b3JlKQorCitzdHJ1Y3QgZGV2aWNlICogZHJpdmVyX2ZpbmRfZGV2aWNlKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYsCisgc3RydWN0IGRldmljZSAqc3RhcnQsIHZvaWQgKmRhdGEsCisgaW50ICgqbWF0Y2gpKHN0cnVjdCBkZXZpY2UgKiwgdm9pZCAqKSk7CisKK3N0cnVjdCBjbGFzcyB7CisgY29uc3QgY2hhciAqIG5hbWU7Cisgc3RydWN0IG1vZHVsZSAqIG93bmVyOworCisgc3RydWN0IHN1YnN5c3RlbSBzdWJzeXM7Cisgc3RydWN0IGxpc3RfaGVhZCBjaGlsZHJlbjsKKyBzdHJ1Y3QgbGlzdF9oZWFkIGRldmljZXM7Cisgc3RydWN0IGxpc3RfaGVhZCBpbnRlcmZhY2VzOworIHN0cnVjdCBzZW1hcGhvcmUgc2VtOworCisgc3RydWN0IGNsYXNzX2F0dHJpYnV0ZSAqIGNsYXNzX2F0dHJzOworIHN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlICogY2xhc3NfZGV2X2F0dHJzOworCisgaW50ICgqdWV2ZW50KShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpkZXYsIGNoYXIgKiplbnZwLAorIGludCBudW1fZW52cCwgY2hhciAqYnVmZmVyLCBpbnQgYnVmZmVyX3NpemUpOworCisgdm9pZCAoKnJlbGVhc2UpKHN0cnVjdCBjbGFzc19kZXZpY2UgKmRldik7Cisgdm9pZCAoKmNsYXNzX3JlbGVhc2UpKHN0cnVjdCBjbGFzcyAqY2xhc3MpOworfTsKKworc3RydWN0IGNsYXNzX2F0dHJpYnV0ZSB7Cisgc3RydWN0IGF0dHJpYnV0ZSBhdHRyOworIHNzaXplX3QgKCpzaG93KShzdHJ1Y3QgY2xhc3MgKiwgY2hhciAqIGJ1Zik7Cisgc3NpemVfdCAoKnN0b3JlKShzdHJ1Y3QgY2xhc3MgKiwgY29uc3QgY2hhciAqIGJ1Ziwgc2l6ZV90IGNvdW50KTsKK307CisKKyNkZWZpbmUgQ0xBU1NfQVRUUihfbmFtZSxfbW9kZSxfc2hvdyxfc3RvcmUpICBzdHJ1Y3QgY2xhc3NfYXR0cmlidXRlIGNsYXNzX2F0dHJfIyNfbmFtZSA9IF9fQVRUUihfbmFtZSxfbW9kZSxfc2hvdyxfc3RvcmUpIAorCitzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSB7Cisgc3RydWN0IGF0dHJpYnV0ZSBhdHRyOworIHNzaXplX3QgKCpzaG93KShzdHJ1Y3QgY2xhc3NfZGV2aWNlICosIGNoYXIgKiBidWYpOworIHNzaXplX3QgKCpzdG9yZSkoc3RydWN0IGNsYXNzX2RldmljZSAqLCBjb25zdCBjaGFyICogYnVmLCBzaXplX3QgY291bnQpOworfTsKKworI2RlZmluZSBDTEFTU19ERVZJQ0VfQVRUUihfbmFtZSxfbW9kZSxfc2hvdyxfc3RvcmUpICBzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSBjbGFzc19kZXZpY2VfYXR0cl8jI19uYW1lID0gICBfX0FUVFIoX25hbWUsX21vZGUsX3Nob3csX3N0b3JlKQorCitzdHJ1Y3QgY2xhc3NfZGV2aWNlIHsKKyBzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CisKKyBzdHJ1Y3Qga29iamVjdCBrb2JqOworIHN0cnVjdCBjbGFzcyAqIGNsYXNzOworIGRldl90IGRldnQ7Cisgc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgKmRldnRfYXR0cjsKKyBzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSB1ZXZlbnRfYXR0cjsKKyBzdHJ1Y3QgZGV2aWNlICogZGV2OworIHZvaWQgKiBjbGFzc19kYXRhOworIHN0cnVjdCBjbGFzc19kZXZpY2UgKnBhcmVudDsKKyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICoqIGdyb3VwczsKKworIHZvaWQgKCpyZWxlYXNlKShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpkZXYpOworIGludCAoKnVldmVudCkoc3RydWN0IGNsYXNzX2RldmljZSAqZGV2LCBjaGFyICoqZW52cCwKKyBpbnQgbnVtX2VudnAsIGNoYXIgKmJ1ZmZlciwgaW50IGJ1ZmZlcl9zaXplKTsKKyBjaGFyIGNsYXNzX2lkW0JVU19JRF9TSVpFXTsKK307CisKK3N0cnVjdCBjbGFzc19pbnRlcmZhY2UgeworIHN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKKyBzdHJ1Y3QgY2xhc3MgKmNsYXNzOworCisgaW50ICgqYWRkKSAoc3RydWN0IGNsYXNzX2RldmljZSAqLCBzdHJ1Y3QgY2xhc3NfaW50ZXJmYWNlICopOworIHZvaWQgKCpyZW1vdmUpIChzdHJ1Y3QgY2xhc3NfZGV2aWNlICosIHN0cnVjdCBjbGFzc19pbnRlcmZhY2UgKik7Cit9OworCitzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSB7Cisgc3RydWN0IGF0dHJpYnV0ZSBhdHRyOworIHNzaXplX3QgKCpzaG93KShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorIGNoYXIgKmJ1Zik7Cisgc3NpemVfdCAoKnN0b3JlKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KTsKK307CisKKyNkZWZpbmUgREVWSUNFX0FUVFIoX25hbWUsX21vZGUsX3Nob3csX3N0b3JlKSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2X2F0dHJfIyNfbmFtZSA9IF9fQVRUUihfbmFtZSxfbW9kZSxfc2hvdyxfc3RvcmUpCisKK3N0cnVjdCBkZXZpY2UgeworIHN0cnVjdCBrbGlzdCBrbGlzdF9jaGlsZHJlbjsKKyBzdHJ1Y3Qga2xpc3Rfbm9kZSBrbm9kZV9wYXJlbnQ7Cisgc3RydWN0IGtsaXN0X25vZGUga25vZGVfZHJpdmVyOworIHN0cnVjdCBrbGlzdF9ub2RlIGtub2RlX2J1czsKKyBzdHJ1Y3QgZGV2aWNlICogcGFyZW50OworCisgc3RydWN0IGtvYmplY3Qga29iajsKKyBjaGFyIGJ1c19pZFtCVVNfSURfU0laRV07Cisgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgdWV2ZW50X2F0dHI7Cisgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldnRfYXR0cjsKKworIHN0cnVjdCBzZW1hcGhvcmUgc2VtOworCisgc3RydWN0IGJ1c190eXBlICogYnVzOworIHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcml2ZXI7Cisgdm9pZCAqZHJpdmVyX2RhdGE7Cisgdm9pZCAqcGxhdGZvcm1fZGF0YTsKKyB2b2lkICpmaXJtd2FyZV9kYXRhOworIHN0cnVjdCBkZXZfcG1faW5mbyBwb3dlcjsKKworIHU2NCAqZG1hX21hc2s7CisgdTY0IGNvaGVyZW50X2RtYV9tYXNrOworCisgc3RydWN0IGxpc3RfaGVhZCBkbWFfcG9vbHM7CisKKyBzdHJ1Y3QgZG1hX2NvaGVyZW50X21lbSAqZG1hX21lbTsKKworIHN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKKyBzdHJ1Y3QgY2xhc3MgKmNsYXNzOworIGRldl90IGRldnQ7CisKKyB2b2lkICgqcmVsZWFzZSkoc3RydWN0IGRldmljZSAqIGRldik7Cit9OworCisjZGVmaW5lIGRldl9wcmludGsobGV2ZWwsIGRldiwgZm9ybWF0LCBhcmcuLi4pICAgcHJpbnRrKGxldmVsICIlcyAlczogIiBmb3JtYXQgLCBkZXZfZHJpdmVyX3N0cmluZyhkZXYpICwgKGRldiktPmJ1c19pZCAsICMjIGFyZykKKworI2lmZGVmIERFQlVHCisjZGVmaW5lIGRldl9kYmcoZGV2LCBmb3JtYXQsIGFyZy4uLikgICBkZXZfcHJpbnRrKEtFUk5fREVCVUcgLCBkZXYgLCBmb3JtYXQgLCAjIyBhcmcpCisjZWxzZQorI2RlZmluZSBkZXZfZGJnKGRldiwgZm9ybWF0LCBhcmcuLi4pIGRvIHsgKHZvaWQpKGRldik7IH0gd2hpbGUgKDApCisjZW5kaWYKKworI2RlZmluZSBkZXZfZXJyKGRldiwgZm9ybWF0LCBhcmcuLi4pICAgZGV2X3ByaW50ayhLRVJOX0VSUiAsIGRldiAsIGZvcm1hdCAsICMjIGFyZykKKyNkZWZpbmUgZGV2X2luZm8oZGV2LCBmb3JtYXQsIGFyZy4uLikgICBkZXZfcHJpbnRrKEtFUk5fSU5GTyAsIGRldiAsIGZvcm1hdCAsICMjIGFyZykKKyNkZWZpbmUgZGV2X3dhcm4oZGV2LCBmb3JtYXQsIGFyZy4uLikgICBkZXZfcHJpbnRrKEtFUk5fV0FSTklORyAsIGRldiAsIGZvcm1hdCAsICMjIGFyZykKKyNkZWZpbmUgZGV2X25vdGljZShkZXYsIGZvcm1hdCwgYXJnLi4uKSAgIGRldl9wcmludGsoS0VSTl9OT1RJQ0UgLCBkZXYgLCBmb3JtYXQgLCAjIyBhcmcpCisKKyNkZWZpbmUgTU9EVUxFX0FMSUFTX0NIQVJERVYobWFqb3IsbWlub3IpICAgTU9EVUxFX0FMSUFTKCJjaGFyLW1ham9yLSIgX19zdHJpbmdpZnkobWFqb3IpICItIiBfX3N0cmluZ2lmeShtaW5vcikpCisjZGVmaW5lIE1PRFVMRV9BTElBU19DSEFSREVWX01BSk9SKG1ham9yKSAgIE1PRFVMRV9BTElBUygiY2hhci1tYWpvci0iIF9fc3RyaW5naWZ5KG1ham9yKSAiLSoiKQorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZGlyZW50LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZGlyZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRhY2UxOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9kaXJlbnQuaApAQCAtMCwwICsxLDMwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9ESVJFTlRfSAorI2RlZmluZSBfTElOVVhfRElSRU5UX0gKKworc3RydWN0IGRpcmVudCB7CisgbG9uZyBkX2lubzsKKyBfX2tlcm5lbF9vZmZfdCBkX29mZjsKKyB1bnNpZ25lZCBzaG9ydCBkX3JlY2xlbjsKKyBjaGFyIGRfbmFtZVsyNTZdOworfTsKKworc3RydWN0IGRpcmVudDY0IHsKKyBfX3U2NCBkX2lubzsKKyBfX3M2NCBkX29mZjsKKyB1bnNpZ25lZCBzaG9ydCBkX3JlY2xlbjsKKyB1bnNpZ25lZCBjaGFyIGRfdHlwZTsKKyBjaGFyIGRfbmFtZVsyNTZdOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZG0taW9jdGwuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9kbS1pb2N0bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhZDc3NDQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZG0taW9jdGwuaApAQCAtMCwwICsxLDE0NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfRE1fSU9DVExfVjRfSAorI2RlZmluZSBfTElOVVhfRE1fSU9DVExfVjRfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2RlZmluZSBETV9ESVIgIm1hcHBlciIgIAorI2RlZmluZSBETV9NQVhfVFlQRV9OQU1FIDE2CisjZGVmaW5lIERNX05BTUVfTEVOIDEyOAorI2RlZmluZSBETV9VVUlEX0xFTiAxMjkKKworc3RydWN0IGRtX2lvY3RsIHsKKworIHVpbnQzMl90IHZlcnNpb25bM107CisgdWludDMyX3QgZGF0YV9zaXplOworCisgdWludDMyX3QgZGF0YV9zdGFydDsKKworIHVpbnQzMl90IHRhcmdldF9jb3VudDsKKyBpbnQzMl90IG9wZW5fY291bnQ7CisgdWludDMyX3QgZmxhZ3M7CisgdWludDMyX3QgZXZlbnRfbnI7CisgdWludDMyX3QgcGFkZGluZzsKKworIHVpbnQ2NF90IGRldjsKKworIGNoYXIgbmFtZVtETV9OQU1FX0xFTl07CisgY2hhciB1dWlkW0RNX1VVSURfTEVOXTsKKyBjaGFyIGRhdGFbN107Cit9OworCitzdHJ1Y3QgZG1fdGFyZ2V0X3NwZWMgeworIHVpbnQ2NF90IHNlY3Rvcl9zdGFydDsKKyB1aW50NjRfdCBsZW5ndGg7CisgaW50MzJfdCBzdGF0dXM7CisKKyB1aW50MzJfdCBuZXh0OworCisgY2hhciB0YXJnZXRfdHlwZVtETV9NQVhfVFlQRV9OQU1FXTsKKworfTsKKworc3RydWN0IGRtX3RhcmdldF9kZXBzIHsKKyB1aW50MzJfdCBjb3VudDsKKyB1aW50MzJfdCBwYWRkaW5nOworIHVpbnQ2NF90IGRldlswXTsKK307CisKK3N0cnVjdCBkbV9uYW1lX2xpc3QgeworIHVpbnQ2NF90IGRldjsKKyB1aW50MzJfdCBuZXh0OworIGNoYXIgbmFtZVswXTsKK307CisKK3N0cnVjdCBkbV90YXJnZXRfdmVyc2lvbnMgeworIHVpbnQzMl90IG5leHQ7CisgdWludDMyX3QgdmVyc2lvblszXTsKKworIGNoYXIgbmFtZVswXTsKK307CisKK3N0cnVjdCBkbV90YXJnZXRfbXNnIHsKKyB1aW50NjRfdCBzZWN0b3I7CisKKyBjaGFyIG1lc3NhZ2VbMF07Cit9OworCitlbnVtIHsKKworIERNX1ZFUlNJT05fQ01EID0gMCwKKyBETV9SRU1PVkVfQUxMX0NNRCwKKyBETV9MSVNUX0RFVklDRVNfQ01ELAorCisgRE1fREVWX0NSRUFURV9DTUQsCisgRE1fREVWX1JFTU9WRV9DTUQsCisgRE1fREVWX1JFTkFNRV9DTUQsCisgRE1fREVWX1NVU1BFTkRfQ01ELAorIERNX0RFVl9TVEFUVVNfQ01ELAorIERNX0RFVl9XQUlUX0NNRCwKKworIERNX1RBQkxFX0xPQURfQ01ELAorIERNX1RBQkxFX0NMRUFSX0NNRCwKKyBETV9UQUJMRV9ERVBTX0NNRCwKKyBETV9UQUJMRV9TVEFUVVNfQ01ELAorCisgRE1fTElTVF9WRVJTSU9OU19DTUQsCisgRE1fVEFSR0VUX01TR19DTUQsCisgRE1fREVWX1NFVF9HRU9NRVRSWV9DTUQKK307CisKKyNkZWZpbmUgRE1fSU9DVEwgMHhmZAorCisjZGVmaW5lIERNX1ZFUlNJT04gX0lPV1IoRE1fSU9DVEwsIERNX1ZFUlNJT05fQ01ELCBzdHJ1Y3QgZG1faW9jdGwpCisjZGVmaW5lIERNX1JFTU9WRV9BTEwgX0lPV1IoRE1fSU9DVEwsIERNX1JFTU9WRV9BTExfQ01ELCBzdHJ1Y3QgZG1faW9jdGwpCisjZGVmaW5lIERNX0xJU1RfREVWSUNFUyBfSU9XUihETV9JT0NUTCwgRE1fTElTVF9ERVZJQ0VTX0NNRCwgc3RydWN0IGRtX2lvY3RsKQorCisjZGVmaW5lIERNX0RFVl9DUkVBVEUgX0lPV1IoRE1fSU9DVEwsIERNX0RFVl9DUkVBVEVfQ01ELCBzdHJ1Y3QgZG1faW9jdGwpCisjZGVmaW5lIERNX0RFVl9SRU1PVkUgX0lPV1IoRE1fSU9DVEwsIERNX0RFVl9SRU1PVkVfQ01ELCBzdHJ1Y3QgZG1faW9jdGwpCisjZGVmaW5lIERNX0RFVl9SRU5BTUUgX0lPV1IoRE1fSU9DVEwsIERNX0RFVl9SRU5BTUVfQ01ELCBzdHJ1Y3QgZG1faW9jdGwpCisjZGVmaW5lIERNX0RFVl9TVVNQRU5EIF9JT1dSKERNX0lPQ1RMLCBETV9ERVZfU1VTUEVORF9DTUQsIHN0cnVjdCBkbV9pb2N0bCkKKyNkZWZpbmUgRE1fREVWX1NUQVRVUyBfSU9XUihETV9JT0NUTCwgRE1fREVWX1NUQVRVU19DTUQsIHN0cnVjdCBkbV9pb2N0bCkKKyNkZWZpbmUgRE1fREVWX1dBSVQgX0lPV1IoRE1fSU9DVEwsIERNX0RFVl9XQUlUX0NNRCwgc3RydWN0IGRtX2lvY3RsKQorCisjZGVmaW5lIERNX1RBQkxFX0xPQUQgX0lPV1IoRE1fSU9DVEwsIERNX1RBQkxFX0xPQURfQ01ELCBzdHJ1Y3QgZG1faW9jdGwpCisjZGVmaW5lIERNX1RBQkxFX0NMRUFSIF9JT1dSKERNX0lPQ1RMLCBETV9UQUJMRV9DTEVBUl9DTUQsIHN0cnVjdCBkbV9pb2N0bCkKKyNkZWZpbmUgRE1fVEFCTEVfREVQUyBfSU9XUihETV9JT0NUTCwgRE1fVEFCTEVfREVQU19DTUQsIHN0cnVjdCBkbV9pb2N0bCkKKyNkZWZpbmUgRE1fVEFCTEVfU1RBVFVTIF9JT1dSKERNX0lPQ1RMLCBETV9UQUJMRV9TVEFUVVNfQ01ELCBzdHJ1Y3QgZG1faW9jdGwpCisKKyNkZWZpbmUgRE1fTElTVF9WRVJTSU9OUyBfSU9XUihETV9JT0NUTCwgRE1fTElTVF9WRVJTSU9OU19DTUQsIHN0cnVjdCBkbV9pb2N0bCkKKworI2RlZmluZSBETV9UQVJHRVRfTVNHIF9JT1dSKERNX0lPQ1RMLCBETV9UQVJHRVRfTVNHX0NNRCwgc3RydWN0IGRtX2lvY3RsKQorI2RlZmluZSBETV9ERVZfU0VUX0dFT01FVFJZIF9JT1dSKERNX0lPQ1RMLCBETV9ERVZfU0VUX0dFT01FVFJZX0NNRCwgc3RydWN0IGRtX2lvY3RsKQorCisjZGVmaW5lIERNX1ZFUlNJT05fTUFKT1IgNAorI2RlZmluZSBETV9WRVJTSU9OX01JTk9SIDE0CisjZGVmaW5lIERNX1ZFUlNJT05fUEFUQ0hMRVZFTCAwCisjZGVmaW5lIERNX1ZFUlNJT05fRVhUUkEgIi1pb2N0bCAoMjAwOC0wNC0yMykiCisKKyNkZWZpbmUgRE1fUkVBRE9OTFlfRkxBRyAoMSA8PCAwKSAgCisjZGVmaW5lIERNX1NVU1BFTkRfRkxBRyAoMSA8PCAxKSAgCisjZGVmaW5lIERNX1BFUlNJU1RFTlRfREVWX0ZMQUcgKDEgPDwgMykgIAorCisjZGVmaW5lIERNX1NUQVRVU19UQUJMRV9GTEFHICgxIDw8IDQpICAKKworI2RlZmluZSBETV9BQ1RJVkVfUFJFU0VOVF9GTEFHICgxIDw8IDUpICAKKyNkZWZpbmUgRE1fSU5BQ1RJVkVfUFJFU0VOVF9GTEFHICgxIDw8IDYpICAKKworI2RlZmluZSBETV9CVUZGRVJfRlVMTF9GTEFHICgxIDw8IDgpICAKKworI2RlZmluZSBETV9TS0lQX0JER0VUX0ZMQUcgKDEgPDwgOSkgIAorCisjZGVmaW5lIERNX1NLSVBfTE9DS0ZTX0ZMQUcgKDEgPDwgMTApICAKKworI2RlZmluZSBETV9OT0ZMVVNIX0ZMQUcgKDEgPDwgMTEpICAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZG1hLW1hcHBpbmcuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9kbWEtbWFwcGluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MzIyNTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZG1hLW1hcHBpbmcuaApAQCAtMCwwICsxLDQ4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01fTElOVVhfRE1BX01BUFBJTkdfSAorI2RlZmluZSBfQVNNX0xJTlVYX0RNQV9NQVBQSU5HX0gKKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorCitlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiB7CisgRE1BX0JJRElSRUNUSU9OQUwgPSAwLAorIERNQV9UT19ERVZJQ0UgPSAxLAorIERNQV9GUk9NX0RFVklDRSA9IDIsCisgRE1BX05PTkUgPSAzLAorfTsKKworI2RlZmluZSBETUFfNjRCSVRfTUFTSyAweGZmZmZmZmZmZmZmZmZmZmZVTEwKKyNkZWZpbmUgRE1BXzQ4QklUX01BU0sgMHgwMDAwZmZmZmZmZmZmZmZmVUxMCisjZGVmaW5lIERNQV80MEJJVF9NQVNLIDB4MDAwMDAwZmZmZmZmZmZmZlVMTAorI2RlZmluZSBETUFfMzlCSVRfTUFTSyAweDAwMDAwMDdmZmZmZmZmZmZVTEwKKyNkZWZpbmUgRE1BXzMyQklUX01BU0sgMHgwMDAwMDAwMGZmZmZmZmZmVUxMCisjZGVmaW5lIERNQV8zMUJJVF9NQVNLIDB4MDAwMDAwMDA3ZmZmZmZmZlVMTAorI2RlZmluZSBETUFfMzBCSVRfTUFTSyAweDAwMDAwMDAwM2ZmZmZmZmZVTEwKKyNkZWZpbmUgRE1BXzI5QklUX01BU0sgMHgwMDAwMDAwMDFmZmZmZmZmVUxMCisjZGVmaW5lIERNQV8yOEJJVF9NQVNLIDB4MDAwMDAwMDAwZmZmZmZmZlVMTAorI2RlZmluZSBETUFfMjRCSVRfTUFTSyAweDAwMDAwMDAwMDBmZmZmZmZVTEwKKworI2luY2x1ZGUgPGFzbS9kbWEtbWFwcGluZy5oPgorCisjZGVmaW5lIGRtYV9zeW5jX3NpbmdsZSBkbWFfc3luY19zaW5nbGVfZm9yX2NwdQorI2RlZmluZSBkbWFfc3luY19zZyBkbWFfc3luY19zZ19mb3JfY3B1CisKKyNkZWZpbmUgRE1BX01FTU9SWV9NQVAgMHgwMQorI2RlZmluZSBETUFfTUVNT1JZX0lPIDB4MDIKKyNkZWZpbmUgRE1BX01FTU9SWV9JTkNMVURFU19DSElMRFJFTiAweDA0CisjZGVmaW5lIERNQV9NRU1PUllfRVhDTFVTSVZFIDB4MDgKKworI2lmbmRlZiBBUkNIX0hBU19ETUFfREVDTEFSRV9DT0hFUkVOVF9NRU1PUlkKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZG1hZW5naW5lLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZG1hZW5naW5lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ5ZmVhOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9kbWFlbmdpbmUuaApAQCAtMCwwICsxLDE1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIERNQUVOR0lORV9ICisjZGVmaW5lIERNQUVOR0lORV9ICisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Vmc19kaXIuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9lZnNfZGlyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJlMjc2MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9lZnNfZGlyLmgKQEAgLTAsMCArMSw0NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0VGU19ESVJfSF9fCisjZGVmaW5lIF9fRUZTX0RJUl9IX18KKworI2RlZmluZSBFRlNfRElSQlNJWkVfQklUUyBFRlNfQkxPQ0tTSVpFX0JJVFMKKyNkZWZpbmUgRUZTX0RJUkJTSVpFICgxIDw8IEVGU19ESVJCU0laRV9CSVRTKQorCitzdHJ1Y3QgZWZzX2RlbnRyeSB7CisgX19iZTMyIGlub2RlOworIHVuc2lnbmVkIGNoYXIgbmFtZWxlbjsKKyBjaGFyIG5hbWVbM107Cit9OworCisjZGVmaW5lIEVGU19ERU5UU0laRSAoc2l6ZW9mKHN0cnVjdCBlZnNfZGVudHJ5KSAtIDMgKyAxKQorI2RlZmluZSBFRlNfTUFYTkFNRUxFTiAoKDEgPDwgKHNpemVvZihjaGFyKSAqIDgpKSAtIDEpCisKKyNkZWZpbmUgRUZTX0RJUkJMS19IRUFERVJTSVpFIDQKKyNkZWZpbmUgRUZTX0RJUkJMS19NQUdJQyAweGJlZWYgIAorCitzdHJ1Y3QgZWZzX2RpciB7CisgX19iZTE2IG1hZ2ljOworIHVuc2lnbmVkIGNoYXIgZmlyc3R1c2VkOworIHVuc2lnbmVkIGNoYXIgc2xvdHM7CisKKyB1bnNpZ25lZCBjaGFyIHNwYWNlW0VGU19ESVJCU0laRSAtIEVGU19ESVJCTEtfSEVBREVSU0laRV07Cit9OworCisjZGVmaW5lIEVGU19NQVhFTlRTICAgKChFRlNfRElSQlNJWkUgLSBFRlNfRElSQkxLX0hFQURFUlNJWkUpIC8gICAoRUZTX0RFTlRTSVpFICsgc2l6ZW9mKGNoYXIpKSkKKworI2RlZmluZSBFRlNfU0xPVEFUKGRpciwgc2xvdCkgRUZTX1JFQUxPRkYoKGRpciktPnNwYWNlW3Nsb3RdKQorCisjZGVmaW5lIEVGU19SRUFMT0ZGKG9mZnNldCkgKChvZmZzZXQgPDwgMSkpCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZWZzX2ZzX2kuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9lZnNfZnNfaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkODhkMjgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZWZzX2ZzX2kuaApAQCAtMCwwICsxLDYzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fRUZTX0ZTX0lfSF9fCisjZGVmaW5lIF9fRUZTX0ZTX0lfSF9fCisKK3R5cGVkZWYgaW50MzJfdCBlZnNfYmxvY2tfdDsKK3R5cGVkZWYgdWludDMyX3QgZWZzX2lub190OworCisjZGVmaW5lIEVGU19ESVJFQ1RFWFRFTlRTIDEyCisKK3R5cGVkZWYgdW5pb24gZXh0ZW50X3UgeworIHVuc2lnbmVkIGNoYXIgcmF3WzhdOworIHN0cnVjdCBleHRlbnRfcyB7CisgdW5zaWduZWQgaW50IGV4X21hZ2ljOjg7CisgdW5zaWduZWQgaW50IGV4X2JuOjI0OworIHVuc2lnbmVkIGludCBleF9sZW5ndGg6ODsKKyB1bnNpZ25lZCBpbnQgZXhfb2Zmc2V0OjI0OworIH0gY29va2VkOworfSBlZnNfZXh0ZW50OworCit0eXBlZGVmIHN0cnVjdCBlZGV2cyB7CisgX19iZTE2IG9kZXY7CisgX19iZTMyIG5kZXY7Cit9IGVmc19kZXZzOworCitzdHJ1Y3QgZWZzX2Rpbm9kZSB7CisgX19iZTE2IGRpX21vZGU7CisgX19iZTE2IGRpX25saW5rOworIF9fYmUxNiBkaV91aWQ7CisgX19iZTE2IGRpX2dpZDsKKyBfX2JlMzIgZGlfc2l6ZTsKKyBfX2JlMzIgZGlfYXRpbWU7CisgX19iZTMyIGRpX210aW1lOworIF9fYmUzMiBkaV9jdGltZTsKKyBfX2JlMzIgZGlfZ2VuOworIF9fYmUxNiBkaV9udW1leHRlbnRzOworIHVfY2hhciBkaV92ZXJzaW9uOworIHVfY2hhciBkaV9zcGFyZTsKKyB1bmlvbiBkaV9hZGRyIHsKKyBlZnNfZXh0ZW50IGRpX2V4dGVudHNbRUZTX0RJUkVDVEVYVEVOVFNdOworIGVmc19kZXZzIGRpX2RldjsKKyB9IGRpX3U7Cit9OworCitzdHJ1Y3QgZWZzX2lub2RlX2luZm8geworIGludCBudW1leHRlbnRzOworIGludCBsYXN0ZXh0ZW50OworCisgZWZzX2V4dGVudCBleHRlbnRzW0VGU19ESVJFQ1RFWFRFTlRTXTsKKyBzdHJ1Y3QgaW5vZGUgdmZzX2lub2RlOworfTsKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9lZnNfZnNfc2IuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9lZnNfZnNfc2IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzk2MGMwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Vmc19mc19zYi5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19FRlNfRlNfU0JfSF9fCisjZGVmaW5lIF9fRUZTX0ZTX1NCX0hfXworCisjZGVmaW5lIEVGU19TVVBFUl9NQUdJQyAweDQxNEE1MworCisjZGVmaW5lIEVGU19NQUdJQyAweDA3Mjk1OQorI2RlZmluZSBFRlNfTkVXTUFHSUMgMHgwNzI5NWEKKworI2RlZmluZSBJU19FRlNfTUFHSUMoeCkgKCh4ID09IEVGU19NQUdJQykgfHwgKHggPT0gRUZTX05FV01BR0lDKSkKKworI2RlZmluZSBFRlNfU1VQRVIgMQorI2RlZmluZSBFRlNfUk9PVElOT0RFIDIKKworc3RydWN0IGVmc19zdXBlciB7CisgX19iZTMyIGZzX3NpemU7CisgX19iZTMyIGZzX2ZpcnN0Y2c7CisgX19iZTMyIGZzX2NnZnNpemU7CisgX19iZTE2IGZzX2NnaXNpemU7CisgX19iZTE2IGZzX3NlY3RvcnM7CisgX19iZTE2IGZzX2hlYWRzOworIF9fYmUxNiBmc19uY2c7CisgX19iZTE2IGZzX2RpcnR5OworIF9fYmUzMiBmc190aW1lOworIF9fYmUzMiBmc19tYWdpYzsKKyBjaGFyIGZzX2ZuYW1lWzZdOworIGNoYXIgZnNfZnBhY2tbNl07CisgX19iZTMyIGZzX2Jtc2l6ZTsKKyBfX2JlMzIgZnNfdGZyZWU7CisgX19iZTMyIGZzX3Rpbm9kZTsKKyBfX2JlMzIgZnNfYm1ibG9jazsKKyBfX2JlMzIgZnNfcmVwbHNiOworIF9fYmUzMiBmc19sYXN0aWFsbG9jOworIGNoYXIgZnNfc3BhcmVbMjBdOworIF9fYmUzMiBmc19jaGVja3N1bTsKK307CisKK3N0cnVjdCBlZnNfc2JfaW5mbyB7CisgX191MzIgZnNfbWFnaWM7CisgX191MzIgZnNfc3RhcnQ7CisgX191MzIgZmlyc3RfYmxvY2s7CisgX191MzIgdG90YWxfYmxvY2tzOworIF9fdTMyIGdyb3VwX3NpemU7CisgX191MzIgZGF0YV9mcmVlOworIF9fdTMyIGlub2RlX2ZyZWU7CisgX191MTYgaW5vZGVfYmxvY2tzOworIF9fdTE2IHRvdGFsX2dyb3VwczsKK307CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZWxldmF0b3IuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9lbGV2YXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlNzljZTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZWxldmF0b3IuaApAQCAtMCwwICsxLDEwOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfRUxFVkFUT1JfSAorI2RlZmluZSBfTElOVVhfRUxFVkFUT1JfSAorCit0eXBlZGVmIGludCAoZWxldmF0b3JfbWVyZ2VfZm4pIChyZXF1ZXN0X3F1ZXVlX3QgKiwgc3RydWN0IHJlcXVlc3QgKiosCisgc3RydWN0IGJpbyAqKTsKKwordHlwZWRlZiB2b2lkIChlbGV2YXRvcl9tZXJnZV9yZXFfZm4pIChyZXF1ZXN0X3F1ZXVlX3QgKiwgc3RydWN0IHJlcXVlc3QgKiwgc3RydWN0IHJlcXVlc3QgKik7CisKK3R5cGVkZWYgdm9pZCAoZWxldmF0b3JfbWVyZ2VkX2ZuKSAocmVxdWVzdF9xdWV1ZV90ICosIHN0cnVjdCByZXF1ZXN0ICopOworCit0eXBlZGVmIGludCAoZWxldmF0b3JfZGlzcGF0Y2hfZm4pIChyZXF1ZXN0X3F1ZXVlX3QgKiwgaW50KTsKKwordHlwZWRlZiB2b2lkIChlbGV2YXRvcl9hZGRfcmVxX2ZuKSAocmVxdWVzdF9xdWV1ZV90ICosIHN0cnVjdCByZXF1ZXN0ICopOwordHlwZWRlZiBpbnQgKGVsZXZhdG9yX3F1ZXVlX2VtcHR5X2ZuKSAocmVxdWVzdF9xdWV1ZV90ICopOwordHlwZWRlZiBzdHJ1Y3QgcmVxdWVzdCAqKGVsZXZhdG9yX3JlcXVlc3RfbGlzdF9mbikgKHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKK3R5cGVkZWYgdm9pZCAoZWxldmF0b3JfY29tcGxldGVkX3JlcV9mbikgKHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKK3R5cGVkZWYgaW50IChlbGV2YXRvcl9tYXlfcXVldWVfZm4pIChyZXF1ZXN0X3F1ZXVlX3QgKiwgaW50LCBzdHJ1Y3QgYmlvICopOworCit0eXBlZGVmIGludCAoZWxldmF0b3Jfc2V0X3JlcV9mbikgKHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqLCBzdHJ1Y3QgYmlvICosIGdmcF90KTsKK3R5cGVkZWYgdm9pZCAoZWxldmF0b3JfcHV0X3JlcV9mbikgKHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKK3R5cGVkZWYgdm9pZCAoZWxldmF0b3JfYWN0aXZhdGVfcmVxX2ZuKSAocmVxdWVzdF9xdWV1ZV90ICosIHN0cnVjdCByZXF1ZXN0ICopOwordHlwZWRlZiB2b2lkIChlbGV2YXRvcl9kZWFjdGl2YXRlX3JlcV9mbikgKHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKKwordHlwZWRlZiB2b2lkICooZWxldmF0b3JfaW5pdF9mbikgKHJlcXVlc3RfcXVldWVfdCAqLCBlbGV2YXRvcl90ICopOwordHlwZWRlZiB2b2lkIChlbGV2YXRvcl9leGl0X2ZuKSAoZWxldmF0b3JfdCAqKTsKKworc3RydWN0IGVsZXZhdG9yX29wcworeworIGVsZXZhdG9yX21lcmdlX2ZuICplbGV2YXRvcl9tZXJnZV9mbjsKKyBlbGV2YXRvcl9tZXJnZWRfZm4gKmVsZXZhdG9yX21lcmdlZF9mbjsKKyBlbGV2YXRvcl9tZXJnZV9yZXFfZm4gKmVsZXZhdG9yX21lcmdlX3JlcV9mbjsKKworIGVsZXZhdG9yX2Rpc3BhdGNoX2ZuICplbGV2YXRvcl9kaXNwYXRjaF9mbjsKKyBlbGV2YXRvcl9hZGRfcmVxX2ZuICplbGV2YXRvcl9hZGRfcmVxX2ZuOworIGVsZXZhdG9yX2FjdGl2YXRlX3JlcV9mbiAqZWxldmF0b3JfYWN0aXZhdGVfcmVxX2ZuOworIGVsZXZhdG9yX2RlYWN0aXZhdGVfcmVxX2ZuICplbGV2YXRvcl9kZWFjdGl2YXRlX3JlcV9mbjsKKworIGVsZXZhdG9yX3F1ZXVlX2VtcHR5X2ZuICplbGV2YXRvcl9xdWV1ZV9lbXB0eV9mbjsKKyBlbGV2YXRvcl9jb21wbGV0ZWRfcmVxX2ZuICplbGV2YXRvcl9jb21wbGV0ZWRfcmVxX2ZuOworCisgZWxldmF0b3JfcmVxdWVzdF9saXN0X2ZuICplbGV2YXRvcl9mb3JtZXJfcmVxX2ZuOworIGVsZXZhdG9yX3JlcXVlc3RfbGlzdF9mbiAqZWxldmF0b3JfbGF0dGVyX3JlcV9mbjsKKworIGVsZXZhdG9yX3NldF9yZXFfZm4gKmVsZXZhdG9yX3NldF9yZXFfZm47CisgZWxldmF0b3JfcHV0X3JlcV9mbiAqZWxldmF0b3JfcHV0X3JlcV9mbjsKKworIGVsZXZhdG9yX21heV9xdWV1ZV9mbiAqZWxldmF0b3JfbWF5X3F1ZXVlX2ZuOworCisgZWxldmF0b3JfaW5pdF9mbiAqZWxldmF0b3JfaW5pdF9mbjsKKyBlbGV2YXRvcl9leGl0X2ZuICplbGV2YXRvcl9leGl0X2ZuOworIHZvaWQgKCp0cmltKShzdHJ1Y3QgaW9fY29udGV4dCAqKTsKK307CisKKyNkZWZpbmUgRUxWX05BTUVfTUFYICgxNikKKworc3RydWN0IGVsdl9mc19lbnRyeSB7Cisgc3RydWN0IGF0dHJpYnV0ZSBhdHRyOworIHNzaXplX3QgKCpzaG93KShlbGV2YXRvcl90ICosIGNoYXIgKik7Cisgc3NpemVfdCAoKnN0b3JlKShlbGV2YXRvcl90ICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKK307CisKK3N0cnVjdCBlbGV2YXRvcl90eXBlCit7Cisgc3RydWN0IGxpc3RfaGVhZCBsaXN0OworIHN0cnVjdCBlbGV2YXRvcl9vcHMgb3BzOworIHN0cnVjdCBlbGV2YXRvcl90eXBlICplbGV2YXRvcl90eXBlOworIHN0cnVjdCBlbHZfZnNfZW50cnkgKmVsZXZhdG9yX2F0dHJzOworIGNoYXIgZWxldmF0b3JfbmFtZVtFTFZfTkFNRV9NQVhdOworIHN0cnVjdCBtb2R1bGUgKmVsZXZhdG9yX293bmVyOworfTsKKworc3RydWN0IGVsZXZhdG9yX3F1ZXVlCit7Cisgc3RydWN0IGVsZXZhdG9yX29wcyAqb3BzOworIHZvaWQgKmVsZXZhdG9yX2RhdGE7Cisgc3RydWN0IGtvYmplY3Qga29iajsKKyBzdHJ1Y3QgZWxldmF0b3JfdHlwZSAqZWxldmF0b3JfdHlwZTsKKyBzdHJ1Y3QgbXV0ZXggc3lzZnNfbG9jazsKK307CisKKyNkZWZpbmUgRUxFVkFUT1JfTk9fTUVSR0UgMAorI2RlZmluZSBFTEVWQVRPUl9GUk9OVF9NRVJHRSAxCisjZGVmaW5lIEVMRVZBVE9SX0JBQ0tfTUVSR0UgMgorCisjZGVmaW5lIEVMRVZBVE9SX0lOU0VSVF9GUk9OVCAxCisjZGVmaW5lIEVMRVZBVE9SX0lOU0VSVF9CQUNLIDIKKyNkZWZpbmUgRUxFVkFUT1JfSU5TRVJUX1NPUlQgMworI2RlZmluZSBFTEVWQVRPUl9JTlNFUlRfUkVRVUVVRSA0CisKK2VudW0geworIEVMVl9NUVVFVUVfTUFZLAorIEVMVl9NUVVFVUVfTk8sCisgRUxWX01RVUVVRV9NVVNULAorfTsKKworI2RlZmluZSBycV9lbmRfc2VjdG9yKHJxKSAoKHJxKS0+c2VjdG9yICsgKHJxKS0+bnJfc2VjdG9ycykKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZWxmLWVtLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZWxmLWVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE1MWZkZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9lbGYtZW0uaApAQCAtMCwwICsxLDUxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9FTEZfRU1fSAorI2RlZmluZSBfTElOVVhfRUxGX0VNX0gKKworI2RlZmluZSBFTV9OT05FIDAKKyNkZWZpbmUgRU1fTTMyIDEKKyNkZWZpbmUgRU1fU1BBUkMgMgorI2RlZmluZSBFTV8zODYgMworI2RlZmluZSBFTV82OEsgNAorI2RlZmluZSBFTV84OEsgNQorI2RlZmluZSBFTV80ODYgNiAgCisjZGVmaW5lIEVNXzg2MCA3CisjZGVmaW5lIEVNX01JUFMgOCAgCisKKyNkZWZpbmUgRU1fTUlQU19SUzNfTEUgMTAgIAorI2RlZmluZSBFTV9NSVBTX1JTNF9CRSAxMCAgCisKKyNkZWZpbmUgRU1fUEFSSVNDIDE1ICAKKyNkZWZpbmUgRU1fU1BBUkMzMlBMVVMgMTggIAorI2RlZmluZSBFTV9QUEMgMjAgIAorI2RlZmluZSBFTV9QUEM2NCAyMSAgCisjZGVmaW5lIEVNX1NIIDQyICAKKyNkZWZpbmUgRU1fU1BBUkNWOSA0MyAgCisjZGVmaW5lIEVNX0lBXzY0IDUwICAKKyNkZWZpbmUgRU1fWDg2XzY0IDYyICAKKyNkZWZpbmUgRU1fUzM5MCAyMiAgCisjZGVmaW5lIEVNX0NSSVMgNzYgIAorI2RlZmluZSBFTV9WODUwIDg3ICAKKyNkZWZpbmUgRU1fTTMyUiA4OCAgCisjZGVmaW5lIEVNX0g4XzMwMCA0NiAgCisjZGVmaW5lIEVNX0ZSViAweDU0NDEgIAorCisjZGVmaW5lIEVNX0FMUEhBIDB4OTAyNgorCisjZGVmaW5lIEVNX0NZR05VU19WODUwIDB4OTA4MAorCisjZGVmaW5lIEVNX0NZR05VU19NMzJSIDB4OTA0MQorCisjZGVmaW5lIEVNX1MzOTBfT0xEIDB4QTM5MAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9lbGYuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9lbGYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTZiNDM5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2VsZi5oCkBAIC0wLDAgKzEsMzYxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9FTEZfSAorI2RlZmluZSBfTElOVVhfRUxGX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvYXV4dmVjLmg+CisjaW5jbHVkZSA8bGludXgvZWxmLWVtLmg+CisjaW5jbHVkZSA8YXNtL2VsZi5oPgorCisjaWZuZGVmIGVsZl9yZWFkX2ltcGxpZXNfZXhlYworCisjZGVmaW5lIGVsZl9yZWFkX2ltcGxpZXNfZXhlYyhleCwgaGF2ZV9wdF9nbnVfc3RhY2spIDAKKyNlbmRpZgorCit0eXBlZGVmIF9fdTMyIEVsZjMyX0FkZHI7Cit0eXBlZGVmIF9fdTE2IEVsZjMyX0hhbGY7Cit0eXBlZGVmIF9fdTMyIEVsZjMyX09mZjsKK3R5cGVkZWYgX19zMzIgRWxmMzJfU3dvcmQ7Cit0eXBlZGVmIF9fdTMyIEVsZjMyX1dvcmQ7CisKK3R5cGVkZWYgX191NjQgRWxmNjRfQWRkcjsKK3R5cGVkZWYgX191MTYgRWxmNjRfSGFsZjsKK3R5cGVkZWYgX19zMTYgRWxmNjRfU0hhbGY7Cit0eXBlZGVmIF9fdTY0IEVsZjY0X09mZjsKK3R5cGVkZWYgX19zMzIgRWxmNjRfU3dvcmQ7Cit0eXBlZGVmIF9fdTMyIEVsZjY0X1dvcmQ7Cit0eXBlZGVmIF9fdTY0IEVsZjY0X1h3b3JkOwordHlwZWRlZiBfX3M2NCBFbGY2NF9TeHdvcmQ7CisKKyNkZWZpbmUgUFRfTlVMTCAwCisjZGVmaW5lIFBUX0xPQUQgMQorI2RlZmluZSBQVF9EWU5BTUlDIDIKKyNkZWZpbmUgUFRfSU5URVJQIDMKKyNkZWZpbmUgUFRfTk9URSA0CisjZGVmaW5lIFBUX1NITElCIDUKKyNkZWZpbmUgUFRfUEhEUiA2CisjZGVmaW5lIFBUX1RMUyA3ICAKKyNkZWZpbmUgUFRfTE9PUyAweDYwMDAwMDAwICAKKyNkZWZpbmUgUFRfSElPUyAweDZmZmZmZmZmICAKKyNkZWZpbmUgUFRfTE9QUk9DIDB4NzAwMDAwMDAKKyNkZWZpbmUgUFRfSElQUk9DIDB4N2ZmZmZmZmYKKyNkZWZpbmUgUFRfR05VX0VIX0ZSQU1FIDB4NjQ3NGU1NTAKKworI2RlZmluZSBQVF9HTlVfU1RBQ0sgKFBUX0xPT1MgKyAweDQ3NGU1NTEpCisKKyNkZWZpbmUgRVRfTk9ORSAwCisjZGVmaW5lIEVUX1JFTCAxCisjZGVmaW5lIEVUX0VYRUMgMgorI2RlZmluZSBFVF9EWU4gMworI2RlZmluZSBFVF9DT1JFIDQKKyNkZWZpbmUgRVRfTE9QUk9DIDB4ZmYwMAorI2RlZmluZSBFVF9ISVBST0MgMHhmZmZmCisKKyNkZWZpbmUgRFRfTlVMTCAwCisjZGVmaW5lIERUX05FRURFRCAxCisjZGVmaW5lIERUX1BMVFJFTFNaIDIKKyNkZWZpbmUgRFRfUExUR09UIDMKKyNkZWZpbmUgRFRfSEFTSCA0CisjZGVmaW5lIERUX1NUUlRBQiA1CisjZGVmaW5lIERUX1NZTVRBQiA2CisjZGVmaW5lIERUX1JFTEEgNworI2RlZmluZSBEVF9SRUxBU1ogOAorI2RlZmluZSBEVF9SRUxBRU5UIDkKKyNkZWZpbmUgRFRfU1RSU1ogMTAKKyNkZWZpbmUgRFRfU1lNRU5UIDExCisjZGVmaW5lIERUX0lOSVQgMTIKKyNkZWZpbmUgRFRfRklOSSAxMworI2RlZmluZSBEVF9TT05BTUUgMTQKKyNkZWZpbmUgRFRfUlBBVEggMTUKKyNkZWZpbmUgRFRfU1lNQk9MSUMgMTYKKyNkZWZpbmUgRFRfUkVMIDE3CisjZGVmaW5lIERUX1JFTFNaIDE4CisjZGVmaW5lIERUX1JFTEVOVCAxOQorI2RlZmluZSBEVF9QTFRSRUwgMjAKKyNkZWZpbmUgRFRfREVCVUcgMjEKKyNkZWZpbmUgRFRfVEVYVFJFTCAyMgorI2RlZmluZSBEVF9KTVBSRUwgMjMKKyNkZWZpbmUgRFRfTE9QUk9DIDB4NzAwMDAwMDAKKyNkZWZpbmUgRFRfSElQUk9DIDB4N2ZmZmZmZmYKKworI2RlZmluZSBTVEJfTE9DQUwgMAorI2RlZmluZSBTVEJfR0xPQkFMIDEKKyNkZWZpbmUgU1RCX1dFQUsgMgorCisjZGVmaW5lIFNUVF9OT1RZUEUgMAorI2RlZmluZSBTVFRfT0JKRUNUIDEKKyNkZWZpbmUgU1RUX0ZVTkMgMgorI2RlZmluZSBTVFRfU0VDVElPTiAzCisjZGVmaW5lIFNUVF9GSUxFIDQKKyNkZWZpbmUgU1RUX0NPTU1PTiA1CisjZGVmaW5lIFNUVF9UTFMgNgorCisjZGVmaW5lIEVMRl9TVF9CSU5EKHgpICgoeCkgPj4gNCkKKyNkZWZpbmUgRUxGX1NUX1RZUEUoeCkgKCgodW5zaWduZWQgaW50KSB4KSAmIDB4ZikKKyNkZWZpbmUgRUxGMzJfU1RfQklORCh4KSBFTEZfU1RfQklORCh4KQorI2RlZmluZSBFTEYzMl9TVF9UWVBFKHgpIEVMRl9TVF9UWVBFKHgpCisjZGVmaW5lIEVMRjY0X1NUX0JJTkQoeCkgRUxGX1NUX0JJTkQoeCkKKyNkZWZpbmUgRUxGNjRfU1RfVFlQRSh4KSBFTEZfU1RfVFlQRSh4KQorCit0eXBlZGVmIHN0cnVjdCBkeW5hbWljeworIEVsZjMyX1N3b3JkIGRfdGFnOworIHVuaW9ueworIEVsZjMyX1N3b3JkIGRfdmFsOworIEVsZjMyX0FkZHIgZF9wdHI7CisgfSBkX3VuOworfSBFbGYzMl9EeW47CisKK3R5cGVkZWYgc3RydWN0IHsKKyBFbGY2NF9TeHdvcmQgZF90YWc7CisgdW5pb24geworIEVsZjY0X1h3b3JkIGRfdmFsOworIEVsZjY0X0FkZHIgZF9wdHI7CisgfSBkX3VuOworfSBFbGY2NF9EeW47CisKKyNkZWZpbmUgRUxGMzJfUl9TWU0oeCkgKCh4KSA+PiA4KQorI2RlZmluZSBFTEYzMl9SX1RZUEUoeCkgKCh4KSAmIDB4ZmYpCisKKyNkZWZpbmUgRUxGNjRfUl9TWU0oaSkgKChpKSA+PiAzMikKKyNkZWZpbmUgRUxGNjRfUl9UWVBFKGkpICgoaSkgJiAweGZmZmZmZmZmKQorCit0eXBlZGVmIHN0cnVjdCBlbGYzMl9yZWwgeworIEVsZjMyX0FkZHIgcl9vZmZzZXQ7CisgRWxmMzJfV29yZCByX2luZm87Cit9IEVsZjMyX1JlbDsKKwordHlwZWRlZiBzdHJ1Y3QgZWxmNjRfcmVsIHsKKyBFbGY2NF9BZGRyIHJfb2Zmc2V0OworIEVsZjY0X1h3b3JkIHJfaW5mbzsKK30gRWxmNjRfUmVsOworCit0eXBlZGVmIHN0cnVjdCBlbGYzMl9yZWxheworIEVsZjMyX0FkZHIgcl9vZmZzZXQ7CisgRWxmMzJfV29yZCByX2luZm87CisgRWxmMzJfU3dvcmQgcl9hZGRlbmQ7Cit9IEVsZjMyX1JlbGE7CisKK3R5cGVkZWYgc3RydWN0IGVsZjY0X3JlbGEgeworIEVsZjY0X0FkZHIgcl9vZmZzZXQ7CisgRWxmNjRfWHdvcmQgcl9pbmZvOworIEVsZjY0X1N4d29yZCByX2FkZGVuZDsKK30gRWxmNjRfUmVsYTsKKwordHlwZWRlZiBzdHJ1Y3QgZWxmMzJfc3lteworIEVsZjMyX1dvcmQgc3RfbmFtZTsKKyBFbGYzMl9BZGRyIHN0X3ZhbHVlOworIEVsZjMyX1dvcmQgc3Rfc2l6ZTsKKyB1bnNpZ25lZCBjaGFyIHN0X2luZm87CisgdW5zaWduZWQgY2hhciBzdF9vdGhlcjsKKyBFbGYzMl9IYWxmIHN0X3NobmR4OworfSBFbGYzMl9TeW07CisKK3R5cGVkZWYgc3RydWN0IGVsZjY0X3N5bSB7CisgRWxmNjRfV29yZCBzdF9uYW1lOworIHVuc2lnbmVkIGNoYXIgc3RfaW5mbzsKKyB1bnNpZ25lZCBjaGFyIHN0X290aGVyOworIEVsZjY0X0hhbGYgc3Rfc2huZHg7CisgRWxmNjRfQWRkciBzdF92YWx1ZTsKKyBFbGY2NF9Yd29yZCBzdF9zaXplOworfSBFbGY2NF9TeW07CisKKyNkZWZpbmUgRUlfTklERU5UIDE2CisKK3R5cGVkZWYgc3RydWN0IGVsZjMyX2hkcnsKKyB1bnNpZ25lZCBjaGFyIGVfaWRlbnRbRUlfTklERU5UXTsKKyBFbGYzMl9IYWxmIGVfdHlwZTsKKyBFbGYzMl9IYWxmIGVfbWFjaGluZTsKKyBFbGYzMl9Xb3JkIGVfdmVyc2lvbjsKKyBFbGYzMl9BZGRyIGVfZW50cnk7CisgRWxmMzJfT2ZmIGVfcGhvZmY7CisgRWxmMzJfT2ZmIGVfc2hvZmY7CisgRWxmMzJfV29yZCBlX2ZsYWdzOworIEVsZjMyX0hhbGYgZV9laHNpemU7CisgRWxmMzJfSGFsZiBlX3BoZW50c2l6ZTsKKyBFbGYzMl9IYWxmIGVfcGhudW07CisgRWxmMzJfSGFsZiBlX3NoZW50c2l6ZTsKKyBFbGYzMl9IYWxmIGVfc2hudW07CisgRWxmMzJfSGFsZiBlX3Noc3RybmR4OworfSBFbGYzMl9FaGRyOworCit0eXBlZGVmIHN0cnVjdCBlbGY2NF9oZHIgeworIHVuc2lnbmVkIGNoYXIgZV9pZGVudFsxNl07CisgRWxmNjRfSGFsZiBlX3R5cGU7CisgRWxmNjRfSGFsZiBlX21hY2hpbmU7CisgRWxmNjRfV29yZCBlX3ZlcnNpb247CisgRWxmNjRfQWRkciBlX2VudHJ5OworIEVsZjY0X09mZiBlX3Bob2ZmOworIEVsZjY0X09mZiBlX3Nob2ZmOworIEVsZjY0X1dvcmQgZV9mbGFnczsKKyBFbGY2NF9IYWxmIGVfZWhzaXplOworIEVsZjY0X0hhbGYgZV9waGVudHNpemU7CisgRWxmNjRfSGFsZiBlX3BobnVtOworIEVsZjY0X0hhbGYgZV9zaGVudHNpemU7CisgRWxmNjRfSGFsZiBlX3NobnVtOworIEVsZjY0X0hhbGYgZV9zaHN0cm5keDsKK30gRWxmNjRfRWhkcjsKKworI2RlZmluZSBQRl9SIDB4NAorI2RlZmluZSBQRl9XIDB4MgorI2RlZmluZSBQRl9YIDB4MQorCit0eXBlZGVmIHN0cnVjdCBlbGYzMl9waGRyeworIEVsZjMyX1dvcmQgcF90eXBlOworIEVsZjMyX09mZiBwX29mZnNldDsKKyBFbGYzMl9BZGRyIHBfdmFkZHI7CisgRWxmMzJfQWRkciBwX3BhZGRyOworIEVsZjMyX1dvcmQgcF9maWxlc3o7CisgRWxmMzJfV29yZCBwX21lbXN6OworIEVsZjMyX1dvcmQgcF9mbGFnczsKKyBFbGYzMl9Xb3JkIHBfYWxpZ247Cit9IEVsZjMyX1BoZHI7CisKK3R5cGVkZWYgc3RydWN0IGVsZjY0X3BoZHIgeworIEVsZjY0X1dvcmQgcF90eXBlOworIEVsZjY0X1dvcmQgcF9mbGFnczsKKyBFbGY2NF9PZmYgcF9vZmZzZXQ7CisgRWxmNjRfQWRkciBwX3ZhZGRyOworIEVsZjY0X0FkZHIgcF9wYWRkcjsKKyBFbGY2NF9Yd29yZCBwX2ZpbGVzejsKKyBFbGY2NF9Yd29yZCBwX21lbXN6OworIEVsZjY0X1h3b3JkIHBfYWxpZ247Cit9IEVsZjY0X1BoZHI7CisKKyNkZWZpbmUgU0hUX05VTEwgMAorI2RlZmluZSBTSFRfUFJPR0JJVFMgMQorI2RlZmluZSBTSFRfU1lNVEFCIDIKKyNkZWZpbmUgU0hUX1NUUlRBQiAzCisjZGVmaW5lIFNIVF9SRUxBIDQKKyNkZWZpbmUgU0hUX0hBU0ggNQorI2RlZmluZSBTSFRfRFlOQU1JQyA2CisjZGVmaW5lIFNIVF9OT1RFIDcKKyNkZWZpbmUgU0hUX05PQklUUyA4CisjZGVmaW5lIFNIVF9SRUwgOQorI2RlZmluZSBTSFRfU0hMSUIgMTAKKyNkZWZpbmUgU0hUX0RZTlNZTSAxMQorI2RlZmluZSBTSFRfTlVNIDEyCisjZGVmaW5lIFNIVF9MT1BST0MgMHg3MDAwMDAwMAorI2RlZmluZSBTSFRfSElQUk9DIDB4N2ZmZmZmZmYKKyNkZWZpbmUgU0hUX0xPVVNFUiAweDgwMDAwMDAwCisjZGVmaW5lIFNIVF9ISVVTRVIgMHhmZmZmZmZmZgorCisjZGVmaW5lIFNIRl9XUklURSAweDEKKyNkZWZpbmUgU0hGX0FMTE9DIDB4MgorI2RlZmluZSBTSEZfRVhFQ0lOU1RSIDB4NAorI2RlZmluZSBTSEZfTUFTS1BST0MgMHhmMDAwMDAwMAorCisjZGVmaW5lIFNITl9VTkRFRiAwCisjZGVmaW5lIFNITl9MT1JFU0VSVkUgMHhmZjAwCisjZGVmaW5lIFNITl9MT1BST0MgMHhmZjAwCisjZGVmaW5lIFNITl9ISVBST0MgMHhmZjFmCisjZGVmaW5lIFNITl9BQlMgMHhmZmYxCisjZGVmaW5lIFNITl9DT01NT04gMHhmZmYyCisjZGVmaW5lIFNITl9ISVJFU0VSVkUgMHhmZmZmCisKK3R5cGVkZWYgc3RydWN0IHsKKyBFbGYzMl9Xb3JkIHNoX25hbWU7CisgRWxmMzJfV29yZCBzaF90eXBlOworIEVsZjMyX1dvcmQgc2hfZmxhZ3M7CisgRWxmMzJfQWRkciBzaF9hZGRyOworIEVsZjMyX09mZiBzaF9vZmZzZXQ7CisgRWxmMzJfV29yZCBzaF9zaXplOworIEVsZjMyX1dvcmQgc2hfbGluazsKKyBFbGYzMl9Xb3JkIHNoX2luZm87CisgRWxmMzJfV29yZCBzaF9hZGRyYWxpZ247CisgRWxmMzJfV29yZCBzaF9lbnRzaXplOworfSBFbGYzMl9TaGRyOworCit0eXBlZGVmIHN0cnVjdCBlbGY2NF9zaGRyIHsKKyBFbGY2NF9Xb3JkIHNoX25hbWU7CisgRWxmNjRfV29yZCBzaF90eXBlOworIEVsZjY0X1h3b3JkIHNoX2ZsYWdzOworIEVsZjY0X0FkZHIgc2hfYWRkcjsKKyBFbGY2NF9PZmYgc2hfb2Zmc2V0OworIEVsZjY0X1h3b3JkIHNoX3NpemU7CisgRWxmNjRfV29yZCBzaF9saW5rOworIEVsZjY0X1dvcmQgc2hfaW5mbzsKKyBFbGY2NF9Yd29yZCBzaF9hZGRyYWxpZ247CisgRWxmNjRfWHdvcmQgc2hfZW50c2l6ZTsKK30gRWxmNjRfU2hkcjsKKworI2RlZmluZSBFSV9NQUcwIDAgIAorI2RlZmluZSBFSV9NQUcxIDEKKyNkZWZpbmUgRUlfTUFHMiAyCisjZGVmaW5lIEVJX01BRzMgMworI2RlZmluZSBFSV9DTEFTUyA0CisjZGVmaW5lIEVJX0RBVEEgNQorI2RlZmluZSBFSV9WRVJTSU9OIDYKKyNkZWZpbmUgRUlfT1NBQkkgNworI2RlZmluZSBFSV9QQUQgOAorCisjZGVmaW5lIEVMRk1BRzAgMHg3ZiAgCisjZGVmaW5lIEVMRk1BRzEgJ0UnCisjZGVmaW5lIEVMRk1BRzIgJ0wnCisjZGVmaW5lIEVMRk1BRzMgJ0YnCisjZGVmaW5lIEVMRk1BRyAiXDE3N0VMRiIKKyNkZWZpbmUgU0VMRk1BRyA0CisKKyNkZWZpbmUgRUxGQ0xBU1NOT05FIDAgIAorI2RlZmluZSBFTEZDTEFTUzMyIDEKKyNkZWZpbmUgRUxGQ0xBU1M2NCAyCisjZGVmaW5lIEVMRkNMQVNTTlVNIDMKKworI2RlZmluZSBFTEZEQVRBTk9ORSAwICAKKyNkZWZpbmUgRUxGREFUQTJMU0IgMQorI2RlZmluZSBFTEZEQVRBMk1TQiAyCisKKyNkZWZpbmUgRVZfTk9ORSAwICAKKyNkZWZpbmUgRVZfQ1VSUkVOVCAxCisjZGVmaW5lIEVWX05VTSAyCisKKyNkZWZpbmUgRUxGT1NBQklfTk9ORSAwCisjZGVmaW5lIEVMRk9TQUJJX0xJTlVYIDMKKworI2lmbmRlZiBFTEZfT1NBQkkKKyNkZWZpbmUgRUxGX09TQUJJIEVMRk9TQUJJX05PTkUKKyNlbmRpZgorCisjZGVmaW5lIE5UX1BSU1RBVFVTIDEKKyNkZWZpbmUgTlRfUFJGUFJFRyAyCisjZGVmaW5lIE5UX1BSUFNJTkZPIDMKKyNkZWZpbmUgTlRfVEFTS1NUUlVDVCA0CisjZGVmaW5lIE5UX0FVWFYgNgorI2RlZmluZSBOVF9QUlhGUFJFRyAweDQ2ZTYyYjdmICAKKwordHlwZWRlZiBzdHJ1Y3QgZWxmMzJfbm90ZSB7CisgRWxmMzJfV29yZCBuX25hbWVzejsKKyBFbGYzMl9Xb3JkIG5fZGVzY3N6OworIEVsZjMyX1dvcmQgbl90eXBlOworfSBFbGYzMl9OaGRyOworCit0eXBlZGVmIHN0cnVjdCBlbGY2NF9ub3RlIHsKKyBFbGY2NF9Xb3JkIG5fbmFtZXN6OworIEVsZjY0X1dvcmQgbl9kZXNjc3o7CisgRWxmNjRfV29yZCBuX3R5cGU7Cit9IEVsZjY0X05oZHI7CisKKyNpZiBFTEZfQ0xBU1MgPT0gRUxGQ0xBU1MzMgorCisjZGVmaW5lIGVsZmhkciBlbGYzMl9oZHIKKyNkZWZpbmUgZWxmX3BoZHIgZWxmMzJfcGhkcgorI2RlZmluZSBlbGZfbm90ZSBlbGYzMl9ub3RlCisKKyNlbHNlCisKKyNkZWZpbmUgZWxmaGRyIGVsZjY0X2hkcgorI2RlZmluZSBlbGZfcGhkciBlbGY2NF9waGRyCisjZGVmaW5lIGVsZl9ub3RlIGVsZjY0X25vdGUKKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Vyci5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Vyci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhYTRmOWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZXJyLmgKQEAgLTAsMCArMSwyMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfRVJSX0gKKyNkZWZpbmUgX0xJTlVYX0VSUl9ICisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorCisjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CisKKyNkZWZpbmUgTUFYX0VSUk5PIDQwOTUKKworI2RlZmluZSBJU19FUlJfVkFMVUUoeCkgdW5saWtlbHkoKHgpID49ICh1bnNpZ25lZCBsb25nKS1NQVhfRVJSTk8pCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Vycm5vLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZXJybm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmVlNjQyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Vycm5vLmgKQEAgLTAsMCArMSwxNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfRVJSTk9fSAorI2RlZmluZSBfTElOVVhfRVJSTk9fSAorCisjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2VycnF1ZXVlLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZXJycXVldWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2IyZTQyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2VycnF1ZXVlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfRVJSUVVFVUVfSAorI2RlZmluZSBfTElOVVhfRVJSUVVFVUVfSCAxCisKK3N0cnVjdCBzb2NrX2V4dGVuZGVkX2VycgoreworIF9fdTMyIGVlX2Vycm5vOworIF9fdTggZWVfb3JpZ2luOworIF9fdTggZWVfdHlwZTsKKyBfX3U4IGVlX2NvZGU7CisgX191OCBlZV9wYWQ7CisgX191MzIgZWVfaW5mbzsKKyBfX3UzMiBlZV9kYXRhOworfTsKKworI2RlZmluZSBTT19FRV9PUklHSU5fTk9ORSAwCisjZGVmaW5lIFNPX0VFX09SSUdJTl9MT0NBTCAxCisjZGVmaW5lIFNPX0VFX09SSUdJTl9JQ01QIDIKKyNkZWZpbmUgU09fRUVfT1JJR0lOX0lDTVA2IDMKKworI2RlZmluZSBTT19FRV9PRkZFTkRFUihlZSkgKChzdHJ1Y3Qgc29ja2FkZHIqKSgoZWUpKzEpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ldGhlcmRldmljZS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2V0aGVyZGV2aWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA4N2U4ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ldGhlcmRldmljZS5oCkBAIC0wLDAgKzEsMTkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX0VUSEVSREVWSUNFX0gKKyNkZWZpbmUgX0xJTlVYX0VUSEVSREVWSUNFX0gKKworI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2V4dDJfZnMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9leHQyX2ZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIxYjA5YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9leHQyX2ZzLmgKQEAgLTAsMCArMSwzNzggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX0VYVDJfRlNfSAorI2RlZmluZSBfTElOVVhfRVhUMl9GU19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjdW5kZWYgRVhUMkZTX0RFQlVHCisKKyNkZWZpbmUgRVhUMl9QUkVBTExPQ0FURQorI2RlZmluZSBFWFQyX0RFRkFVTFRfUFJFQUxMT0NfQkxPQ0tTIDgKKworI2RlZmluZSBFWFQyRlNfREFURSAiOTUvMDgvMDkiCisjZGVmaW5lIEVYVDJGU19WRVJTSU9OICIwLjViIgorCisjaWZkZWYgRVhUMkZTX0RFQlVHCisjZGVmaW5lIGV4dDJfZGVidWcoZiwgYS4uLikgeyAgIHByaW50ayAoIkVYVDItZnMgREVCVUcgKCVzLCAlZCk6ICVzOiIsICAgX19GSUxFX18sIF9fTElORV9fLCBfX0ZVTkNUSU9OX18pOyAgIHByaW50ayAoZiwgIyMgYSk7ICAgfQorI2Vsc2UKKyNkZWZpbmUgZXh0Ml9kZWJ1ZyhmLCBhLi4uKSAgCisjZW5kaWYKKworI2RlZmluZSBFWFQyX0JBRF9JTk8gMSAgCisjZGVmaW5lIEVYVDJfUk9PVF9JTk8gMiAgCisjZGVmaW5lIEVYVDJfQk9PVF9MT0FERVJfSU5PIDUgIAorI2RlZmluZSBFWFQyX1VOREVMX0RJUl9JTk8gNiAgCisKKyNkZWZpbmUgRVhUMl9HT09EX09MRF9GSVJTVF9JTk8gMTEKKworI2RlZmluZSBFWFQyX1NVUEVSX01BR0lDIDB4RUY1MworCisjZGVmaW5lIEVYVDJfU0Ioc2IpIChzYikKKworI2RlZmluZSBFWFQyX0xJTktfTUFYIDMyMDAwCisKKyNkZWZpbmUgRVhUMl9NSU5fQkxPQ0tfU0laRSAxMDI0CisjZGVmaW5lIEVYVDJfTUFYX0JMT0NLX1NJWkUgNDA5NgorI2RlZmluZSBFWFQyX01JTl9CTE9DS19MT0dfU0laRSAxMAorI2RlZmluZSBFWFQyX0JMT0NLX1NJWkUocykgKEVYVDJfTUlOX0JMT0NLX1NJWkUgPDwgKHMpLT5zX2xvZ19ibG9ja19zaXplKQorI2RlZmluZSBFWFQyX0FERFJfUEVSX0JMT0NLKHMpIChFWFQyX0JMT0NLX1NJWkUocykgLyBzaXplb2YgKF9fdTMyKSkKKyNkZWZpbmUgRVhUMl9CTE9DS19TSVpFX0JJVFMocykgKChzKS0+c19sb2dfYmxvY2tfc2l6ZSArIDEwKQorI2RlZmluZSBFWFQyX0lOT0RFX1NJWkUocykgKCgocyktPnNfcmV2X2xldmVsID09IEVYVDJfR09PRF9PTERfUkVWKSA/ICAgRVhUMl9HT09EX09MRF9JTk9ERV9TSVpFIDogICAocyktPnNfaW5vZGVfc2l6ZSkKKyNkZWZpbmUgRVhUMl9GSVJTVF9JTk8ocykgKCgocyktPnNfcmV2X2xldmVsID09IEVYVDJfR09PRF9PTERfUkVWKSA/ICAgRVhUMl9HT09EX09MRF9GSVJTVF9JTk8gOiAgIChzKS0+c19maXJzdF9pbm8pCisKKyNkZWZpbmUgRVhUMl9NSU5fRlJBR19TSVpFIDEwMjQKKyNkZWZpbmUgRVhUMl9NQVhfRlJBR19TSVpFIDQwOTYKKyNkZWZpbmUgRVhUMl9NSU5fRlJBR19MT0dfU0laRSAxMAorI2RlZmluZSBFWFQyX0ZSQUdfU0laRShzKSAoRVhUMl9NSU5fRlJBR19TSVpFIDw8IChzKS0+c19sb2dfZnJhZ19zaXplKQorI2RlZmluZSBFWFQyX0ZSQUdTX1BFUl9CTE9DSyhzKSAoRVhUMl9CTE9DS19TSVpFKHMpIC8gRVhUMl9GUkFHX1NJWkUocykpCisKK3N0cnVjdCBleHQyX2dyb3VwX2Rlc2MKK3sKKyBfX2xlMzIgYmdfYmxvY2tfYml0bWFwOworIF9fbGUzMiBiZ19pbm9kZV9iaXRtYXA7CisgX19sZTMyIGJnX2lub2RlX3RhYmxlOworIF9fbGUxNiBiZ19mcmVlX2Jsb2Nrc19jb3VudDsKKyBfX2xlMTYgYmdfZnJlZV9pbm9kZXNfY291bnQ7CisgX19sZTE2IGJnX3VzZWRfZGlyc19jb3VudDsKKyBfX2xlMTYgYmdfcGFkOworIF9fbGUzMiBiZ19yZXNlcnZlZFszXTsKK307CisKKyNkZWZpbmUgRVhUMl9CTE9DS1NfUEVSX0dST1VQKHMpICgocyktPnNfYmxvY2tzX3Blcl9ncm91cCkKKyNkZWZpbmUgRVhUMl9ERVNDX1BFUl9CTE9DSyhzKSAoRVhUMl9CTE9DS19TSVpFKHMpIC8gc2l6ZW9mIChzdHJ1Y3QgZXh0Ml9ncm91cF9kZXNjKSkKKyNkZWZpbmUgRVhUMl9JTk9ERVNfUEVSX0dST1VQKHMpICgocyktPnNfaW5vZGVzX3Blcl9ncm91cCkKKworI2RlZmluZSBFWFQyX05ESVJfQkxPQ0tTIDEyCisjZGVmaW5lIEVYVDJfSU5EX0JMT0NLIEVYVDJfTkRJUl9CTE9DS1MKKyNkZWZpbmUgRVhUMl9ESU5EX0JMT0NLIChFWFQyX0lORF9CTE9DSyArIDEpCisjZGVmaW5lIEVYVDJfVElORF9CTE9DSyAoRVhUMl9ESU5EX0JMT0NLICsgMSkKKyNkZWZpbmUgRVhUMl9OX0JMT0NLUyAoRVhUMl9USU5EX0JMT0NLICsgMSkKKworI2RlZmluZSBFWFQyX1NFQ1JNX0ZMIDB4MDAwMDAwMDEgIAorI2RlZmluZSBFWFQyX1VOUk1fRkwgMHgwMDAwMDAwMiAgCisjZGVmaW5lIEVYVDJfQ09NUFJfRkwgMHgwMDAwMDAwNCAgCisjZGVmaW5lIEVYVDJfU1lOQ19GTCAweDAwMDAwMDA4ICAKKyNkZWZpbmUgRVhUMl9JTU1VVEFCTEVfRkwgMHgwMDAwMDAxMCAgCisjZGVmaW5lIEVYVDJfQVBQRU5EX0ZMIDB4MDAwMDAwMjAgIAorI2RlZmluZSBFWFQyX05PRFVNUF9GTCAweDAwMDAwMDQwICAKKyNkZWZpbmUgRVhUMl9OT0FUSU1FX0ZMIDB4MDAwMDAwODAgIAorCisjZGVmaW5lIEVYVDJfRElSVFlfRkwgMHgwMDAwMDEwMAorI2RlZmluZSBFWFQyX0NPTVBSQkxLX0ZMIDB4MDAwMDAyMDAgIAorI2RlZmluZSBFWFQyX05PQ09NUF9GTCAweDAwMDAwNDAwICAKKyNkZWZpbmUgRVhUMl9FQ09NUFJfRkwgMHgwMDAwMDgwMCAgCisKKyNkZWZpbmUgRVhUMl9CVFJFRV9GTCAweDAwMDAxMDAwICAKKyNkZWZpbmUgRVhUMl9JTkRFWF9GTCAweDAwMDAxMDAwICAKKyNkZWZpbmUgRVhUMl9JTUFHSUNfRkwgMHgwMDAwMjAwMCAgCisjZGVmaW5lIEVYVDJfSk9VUk5BTF9EQVRBX0ZMIDB4MDAwMDQwMDAgIAorI2RlZmluZSBFWFQyX05PVEFJTF9GTCAweDAwMDA4MDAwICAKKyNkZWZpbmUgRVhUMl9ESVJTWU5DX0ZMIDB4MDAwMTAwMDAgIAorI2RlZmluZSBFWFQyX1RPUERJUl9GTCAweDAwMDIwMDAwICAKKyNkZWZpbmUgRVhUMl9SRVNFUlZFRF9GTCAweDgwMDAwMDAwICAKKworI2RlZmluZSBFWFQyX0ZMX1VTRVJfVklTSUJMRSAweDAwMDNERkZGICAKKyNkZWZpbmUgRVhUMl9GTF9VU0VSX01PRElGSUFCTEUgMHgwMDAzODBGRiAgCisKKyNkZWZpbmUgRVhUMl9JT0NfR0VURkxBR1MgX0lPUignZicsIDEsIGxvbmcpCisjZGVmaW5lIEVYVDJfSU9DX1NFVEZMQUdTIF9JT1coJ2YnLCAyLCBsb25nKQorI2RlZmluZSBFWFQyX0lPQ19HRVRWRVJTSU9OIF9JT1IoJ3YnLCAxLCBsb25nKQorI2RlZmluZSBFWFQyX0lPQ19TRVRWRVJTSU9OIF9JT1coJ3YnLCAyLCBsb25nKQorCitzdHJ1Y3QgZXh0Ml9pbm9kZSB7CisgX19sZTE2IGlfbW9kZTsKKyBfX2xlMTYgaV91aWQ7CisgX19sZTMyIGlfc2l6ZTsKKyBfX2xlMzIgaV9hdGltZTsKKyBfX2xlMzIgaV9jdGltZTsKKyBfX2xlMzIgaV9tdGltZTsKKyBfX2xlMzIgaV9kdGltZTsKKyBfX2xlMTYgaV9naWQ7CisgX19sZTE2IGlfbGlua3NfY291bnQ7CisgX19sZTMyIGlfYmxvY2tzOworIF9fbGUzMiBpX2ZsYWdzOworIHVuaW9uIHsKKyBzdHJ1Y3QgeworIF9fbGUzMiBsX2lfcmVzZXJ2ZWQxOworIH0gbGludXgxOworIHN0cnVjdCB7CisgX19sZTMyIGhfaV90cmFuc2xhdG9yOworIH0gaHVyZDE7Cisgc3RydWN0IHsKKyBfX2xlMzIgbV9pX3Jlc2VydmVkMTsKKyB9IG1hc2l4MTsKKyB9IG9zZDE7CisgX19sZTMyIGlfYmxvY2tbRVhUMl9OX0JMT0NLU107CisgX19sZTMyIGlfZ2VuZXJhdGlvbjsKKyBfX2xlMzIgaV9maWxlX2FjbDsKKyBfX2xlMzIgaV9kaXJfYWNsOworIF9fbGUzMiBpX2ZhZGRyOworIHVuaW9uIHsKKyBzdHJ1Y3QgeworIF9fdTggbF9pX2ZyYWc7CisgX191OCBsX2lfZnNpemU7CisgX191MTYgaV9wYWQxOworIF9fbGUxNiBsX2lfdWlkX2hpZ2g7CisgX19sZTE2IGxfaV9naWRfaGlnaDsKKyBfX3UzMiBsX2lfcmVzZXJ2ZWQyOworIH0gbGludXgyOworIHN0cnVjdCB7CisgX191OCBoX2lfZnJhZzsKKyBfX3U4IGhfaV9mc2l6ZTsKKyBfX2xlMTYgaF9pX21vZGVfaGlnaDsKKyBfX2xlMTYgaF9pX3VpZF9oaWdoOworIF9fbGUxNiBoX2lfZ2lkX2hpZ2g7CisgX19sZTMyIGhfaV9hdXRob3I7CisgfSBodXJkMjsKKyBzdHJ1Y3QgeworIF9fdTggbV9pX2ZyYWc7CisgX191OCBtX2lfZnNpemU7CisgX191MTYgbV9wYWQxOworIF9fdTMyIG1faV9yZXNlcnZlZDJbMl07CisgfSBtYXNpeDI7CisgfSBvc2QyOworfTsKKworI2RlZmluZSBpX3NpemVfaGlnaCBpX2Rpcl9hY2wKKworI2lmZGVmIF9fbGludXhfXworI2RlZmluZSBpX3Jlc2VydmVkMSBvc2QxLmxpbnV4MS5sX2lfcmVzZXJ2ZWQxCisjZGVmaW5lIGlfZnJhZyBvc2QyLmxpbnV4Mi5sX2lfZnJhZworI2RlZmluZSBpX2ZzaXplIG9zZDIubGludXgyLmxfaV9mc2l6ZQorI2RlZmluZSBpX3VpZF9sb3cgaV91aWQKKyNkZWZpbmUgaV9naWRfbG93IGlfZ2lkCisjZGVmaW5lIGlfdWlkX2hpZ2ggb3NkMi5saW51eDIubF9pX3VpZF9oaWdoCisjZGVmaW5lIGlfZ2lkX2hpZ2ggb3NkMi5saW51eDIubF9pX2dpZF9oaWdoCisjZGVmaW5lIGlfcmVzZXJ2ZWQyIG9zZDIubGludXgyLmxfaV9yZXNlcnZlZDIKKyNlbmRpZgorCisjaWZkZWYgX19odXJkX18KKyNkZWZpbmUgaV90cmFuc2xhdG9yIG9zZDEuaHVyZDEuaF9pX3RyYW5zbGF0b3IKKyNkZWZpbmUgaV9mcmFnIG9zZDIuaHVyZDIuaF9pX2ZyYWc7CisjZGVmaW5lIGlfZnNpemUgb3NkMi5odXJkMi5oX2lfZnNpemU7CisjZGVmaW5lIGlfdWlkX2hpZ2ggb3NkMi5odXJkMi5oX2lfdWlkX2hpZ2gKKyNkZWZpbmUgaV9naWRfaGlnaCBvc2QyLmh1cmQyLmhfaV9naWRfaGlnaAorI2RlZmluZSBpX2F1dGhvciBvc2QyLmh1cmQyLmhfaV9hdXRob3IKKyNlbmRpZgorCisjaWZkZWYgX19tYXNpeF9fCisjZGVmaW5lIGlfcmVzZXJ2ZWQxIG9zZDEubWFzaXgxLm1faV9yZXNlcnZlZDEKKyNkZWZpbmUgaV9mcmFnIG9zZDIubWFzaXgyLm1faV9mcmFnCisjZGVmaW5lIGlfZnNpemUgb3NkMi5tYXNpeDIubV9pX2ZzaXplCisjZGVmaW5lIGlfcmVzZXJ2ZWQyIG9zZDIubWFzaXgyLm1faV9yZXNlcnZlZDIKKyNlbmRpZgorCisjZGVmaW5lIEVYVDJfVkFMSURfRlMgMHgwMDAxICAKKyNkZWZpbmUgRVhUMl9FUlJPUl9GUyAweDAwMDIgIAorCisjZGVmaW5lIEVYVDJfTU9VTlRfQ0hFQ0sgMHgwMDAwMDEgIAorI2RlZmluZSBFWFQyX01PVU5UX09MREFMTE9DIDB4MDAwMDAyICAKKyNkZWZpbmUgRVhUMl9NT1VOVF9HUlBJRCAweDAwMDAwNCAgCisjZGVmaW5lIEVYVDJfTU9VTlRfREVCVUcgMHgwMDAwMDggIAorI2RlZmluZSBFWFQyX01PVU5UX0VSUk9SU19DT05UIDB4MDAwMDEwICAKKyNkZWZpbmUgRVhUMl9NT1VOVF9FUlJPUlNfUk8gMHgwMDAwMjAgIAorI2RlZmluZSBFWFQyX01PVU5UX0VSUk9SU19QQU5JQyAweDAwMDA0MCAgCisjZGVmaW5lIEVYVDJfTU9VTlRfTUlOSVhfREYgMHgwMDAwODAgIAorI2RlZmluZSBFWFQyX01PVU5UX05PQkggMHgwMDAxMDAgIAorI2RlZmluZSBFWFQyX01PVU5UX05PX1VJRDMyIDB4MDAwMjAwICAKKyNkZWZpbmUgRVhUMl9NT1VOVF9YQVRUUl9VU0VSIDB4MDA0MDAwICAKKyNkZWZpbmUgRVhUMl9NT1VOVF9QT1NJWF9BQ0wgMHgwMDgwMDAgIAorI2RlZmluZSBFWFQyX01PVU5UX1hJUCAweDAxMDAwMCAgCisjZGVmaW5lIEVYVDJfTU9VTlRfVVNSUVVPVEEgMHgwMjAwMDAgIAorI2RlZmluZSBFWFQyX01PVU5UX0dSUFFVT1RBIDB4MDQwMDAwICAKKworI2RlZmluZSBjbGVhcl9vcHQobywgb3B0KSBvICY9IH5FWFQyX01PVU5UXyMjb3B0CisjZGVmaW5lIHNldF9vcHQobywgb3B0KSBvIHw9IEVYVDJfTU9VTlRfIyNvcHQKKyNkZWZpbmUgdGVzdF9vcHQoc2IsIG9wdCkgKEVYVDJfU0Ioc2IpLT5zX21vdW50X29wdCAmICAgRVhUMl9NT1VOVF8jI29wdCkKKworI2RlZmluZSBFWFQyX0RGTF9NQVhfTU5UX0NPVU5UIDIwICAKKyNkZWZpbmUgRVhUMl9ERkxfQ0hFQ0tJTlRFUlZBTCAwICAKKworI2RlZmluZSBFWFQyX0VSUk9SU19DT05USU5VRSAxICAKKyNkZWZpbmUgRVhUMl9FUlJPUlNfUk8gMiAgCisjZGVmaW5lIEVYVDJfRVJST1JTX1BBTklDIDMgIAorI2RlZmluZSBFWFQyX0VSUk9SU19ERUZBVUxUIEVYVDJfRVJST1JTX0NPTlRJTlVFCisKK3N0cnVjdCBleHQyX3N1cGVyX2Jsb2NrIHsKKyBfX2xlMzIgc19pbm9kZXNfY291bnQ7CisgX19sZTMyIHNfYmxvY2tzX2NvdW50OworIF9fbGUzMiBzX3JfYmxvY2tzX2NvdW50OworIF9fbGUzMiBzX2ZyZWVfYmxvY2tzX2NvdW50OworIF9fbGUzMiBzX2ZyZWVfaW5vZGVzX2NvdW50OworIF9fbGUzMiBzX2ZpcnN0X2RhdGFfYmxvY2s7CisgX19sZTMyIHNfbG9nX2Jsb2NrX3NpemU7CisgX19sZTMyIHNfbG9nX2ZyYWdfc2l6ZTsKKyBfX2xlMzIgc19ibG9ja3NfcGVyX2dyb3VwOworIF9fbGUzMiBzX2ZyYWdzX3Blcl9ncm91cDsKKyBfX2xlMzIgc19pbm9kZXNfcGVyX2dyb3VwOworIF9fbGUzMiBzX210aW1lOworIF9fbGUzMiBzX3d0aW1lOworIF9fbGUxNiBzX21udF9jb3VudDsKKyBfX2xlMTYgc19tYXhfbW50X2NvdW50OworIF9fbGUxNiBzX21hZ2ljOworIF9fbGUxNiBzX3N0YXRlOworIF9fbGUxNiBzX2Vycm9yczsKKyBfX2xlMTYgc19taW5vcl9yZXZfbGV2ZWw7CisgX19sZTMyIHNfbGFzdGNoZWNrOworIF9fbGUzMiBzX2NoZWNraW50ZXJ2YWw7CisgX19sZTMyIHNfY3JlYXRvcl9vczsKKyBfX2xlMzIgc19yZXZfbGV2ZWw7CisgX19sZTE2IHNfZGVmX3Jlc3VpZDsKKyBfX2xlMTYgc19kZWZfcmVzZ2lkOworCisgX19sZTMyIHNfZmlyc3RfaW5vOworIF9fbGUxNiBzX2lub2RlX3NpemU7CisgX19sZTE2IHNfYmxvY2tfZ3JvdXBfbnI7CisgX19sZTMyIHNfZmVhdHVyZV9jb21wYXQ7CisgX19sZTMyIHNfZmVhdHVyZV9pbmNvbXBhdDsKKyBfX2xlMzIgc19mZWF0dXJlX3JvX2NvbXBhdDsKKyBfX3U4IHNfdXVpZFsxNl07CisgY2hhciBzX3ZvbHVtZV9uYW1lWzE2XTsKKyBjaGFyIHNfbGFzdF9tb3VudGVkWzY0XTsKKyBfX2xlMzIgc19hbGdvcml0aG1fdXNhZ2VfYml0bWFwOworCisgX191OCBzX3ByZWFsbG9jX2Jsb2NrczsKKyBfX3U4IHNfcHJlYWxsb2NfZGlyX2Jsb2NrczsKKyBfX3UxNiBzX3BhZGRpbmcxOworCisgX191OCBzX2pvdXJuYWxfdXVpZFsxNl07CisgX191MzIgc19qb3VybmFsX2ludW07CisgX191MzIgc19qb3VybmFsX2RldjsKKyBfX3UzMiBzX2xhc3Rfb3JwaGFuOworIF9fdTMyIHNfaGFzaF9zZWVkWzRdOworIF9fdTggc19kZWZfaGFzaF92ZXJzaW9uOworIF9fdTggc19yZXNlcnZlZF9jaGFyX3BhZDsKKyBfX3UxNiBzX3Jlc2VydmVkX3dvcmRfcGFkOworIF9fbGUzMiBzX2RlZmF1bHRfbW91bnRfb3B0czsKKyBfX2xlMzIgc19maXJzdF9tZXRhX2JnOworIF9fdTMyIHNfcmVzZXJ2ZWRbMTkwXTsKK307CisKKyNkZWZpbmUgRVhUMl9PU19MSU5VWCAwCisjZGVmaW5lIEVYVDJfT1NfSFVSRCAxCisjZGVmaW5lIEVYVDJfT1NfTUFTSVggMgorI2RlZmluZSBFWFQyX09TX0ZSRUVCU0QgMworI2RlZmluZSBFWFQyX09TX0xJVEVTIDQKKworI2RlZmluZSBFWFQyX0dPT0RfT0xEX1JFViAwICAKKyNkZWZpbmUgRVhUMl9EWU5BTUlDX1JFViAxICAKKworI2RlZmluZSBFWFQyX0NVUlJFTlRfUkVWIEVYVDJfR09PRF9PTERfUkVWCisjZGVmaW5lIEVYVDJfTUFYX1NVUFBfUkVWIEVYVDJfRFlOQU1JQ19SRVYKKworI2RlZmluZSBFWFQyX0dPT0RfT0xEX0lOT0RFX1NJWkUgMTI4CisKKyNkZWZpbmUgRVhUMl9IQVNfQ09NUEFUX0ZFQVRVUkUoc2IsbWFzaykgICAoIEVYVDJfU0Ioc2IpLT5zX2VzLT5zX2ZlYXR1cmVfY29tcGF0ICYgY3B1X3RvX2xlMzIobWFzaykgKQorI2RlZmluZSBFWFQyX0hBU19ST19DT01QQVRfRkVBVFVSRShzYixtYXNrKSAgICggRVhUMl9TQihzYiktPnNfZXMtPnNfZmVhdHVyZV9yb19jb21wYXQgJiBjcHVfdG9fbGUzMihtYXNrKSApCisjZGVmaW5lIEVYVDJfSEFTX0lOQ09NUEFUX0ZFQVRVUkUoc2IsbWFzaykgICAoIEVYVDJfU0Ioc2IpLT5zX2VzLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBjcHVfdG9fbGUzMihtYXNrKSApCisjZGVmaW5lIEVYVDJfU0VUX0NPTVBBVF9GRUFUVVJFKHNiLG1hc2spICAgRVhUMl9TQihzYiktPnNfZXMtPnNfZmVhdHVyZV9jb21wYXQgfD0gY3B1X3RvX2xlMzIobWFzaykKKyNkZWZpbmUgRVhUMl9TRVRfUk9fQ09NUEFUX0ZFQVRVUkUoc2IsbWFzaykgICBFWFQyX1NCKHNiKS0+c19lcy0+c19mZWF0dXJlX3JvX2NvbXBhdCB8PSBjcHVfdG9fbGUzMihtYXNrKQorI2RlZmluZSBFWFQyX1NFVF9JTkNPTVBBVF9GRUFUVVJFKHNiLG1hc2spICAgRVhUMl9TQihzYiktPnNfZXMtPnNfZmVhdHVyZV9pbmNvbXBhdCB8PSBjcHVfdG9fbGUzMihtYXNrKQorI2RlZmluZSBFWFQyX0NMRUFSX0NPTVBBVF9GRUFUVVJFKHNiLG1hc2spICAgRVhUMl9TQihzYiktPnNfZXMtPnNfZmVhdHVyZV9jb21wYXQgJj0gfmNwdV90b19sZTMyKG1hc2spCisjZGVmaW5lIEVYVDJfQ0xFQVJfUk9fQ09NUEFUX0ZFQVRVUkUoc2IsbWFzaykgICBFWFQyX1NCKHNiKS0+c19lcy0+c19mZWF0dXJlX3JvX2NvbXBhdCAmPSB+Y3B1X3RvX2xlMzIobWFzaykKKyNkZWZpbmUgRVhUMl9DTEVBUl9JTkNPTVBBVF9GRUFUVVJFKHNiLG1hc2spICAgRVhUMl9TQihzYiktPnNfZXMtPnNfZmVhdHVyZV9pbmNvbXBhdCAmPSB+Y3B1X3RvX2xlMzIobWFzaykKKworI2RlZmluZSBFWFQyX0ZFQVRVUkVfQ09NUEFUX0RJUl9QUkVBTExPQyAweDAwMDEKKyNkZWZpbmUgRVhUMl9GRUFUVVJFX0NPTVBBVF9JTUFHSUNfSU5PREVTIDB4MDAwMgorI2RlZmluZSBFWFQzX0ZFQVRVUkVfQ09NUEFUX0hBU19KT1VSTkFMIDB4MDAwNAorI2RlZmluZSBFWFQyX0ZFQVRVUkVfQ09NUEFUX0VYVF9BVFRSIDB4MDAwOAorI2RlZmluZSBFWFQyX0ZFQVRVUkVfQ09NUEFUX1JFU0laRV9JTk8gMHgwMDEwCisjZGVmaW5lIEVYVDJfRkVBVFVSRV9DT01QQVRfRElSX0lOREVYIDB4MDAyMAorI2RlZmluZSBFWFQyX0ZFQVRVUkVfQ09NUEFUX0FOWSAweGZmZmZmZmZmCisKKyNkZWZpbmUgRVhUMl9GRUFUVVJFX1JPX0NPTVBBVF9TUEFSU0VfU1VQRVIgMHgwMDAxCisjZGVmaW5lIEVYVDJfRkVBVFVSRV9ST19DT01QQVRfTEFSR0VfRklMRSAweDAwMDIKKyNkZWZpbmUgRVhUMl9GRUFUVVJFX1JPX0NPTVBBVF9CVFJFRV9ESVIgMHgwMDA0CisjZGVmaW5lIEVYVDJfRkVBVFVSRV9ST19DT01QQVRfQU5ZIDB4ZmZmZmZmZmYKKworI2RlZmluZSBFWFQyX0ZFQVRVUkVfSU5DT01QQVRfQ09NUFJFU1NJT04gMHgwMDAxCisjZGVmaW5lIEVYVDJfRkVBVFVSRV9JTkNPTVBBVF9GSUxFVFlQRSAweDAwMDIKKyNkZWZpbmUgRVhUM19GRUFUVVJFX0lOQ09NUEFUX1JFQ09WRVIgMHgwMDA0CisjZGVmaW5lIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9KT1VSTkFMX0RFViAweDAwMDgKKyNkZWZpbmUgRVhUMl9GRUFUVVJFX0lOQ09NUEFUX01FVEFfQkcgMHgwMDEwCisjZGVmaW5lIEVYVDJfRkVBVFVSRV9JTkNPTVBBVF9BTlkgMHhmZmZmZmZmZgorCisjZGVmaW5lIEVYVDJfRkVBVFVSRV9DT01QQVRfU1VQUCBFWFQyX0ZFQVRVUkVfQ09NUEFUX0VYVF9BVFRSCisjZGVmaW5lIEVYVDJfRkVBVFVSRV9JTkNPTVBBVF9TVVBQIChFWFQyX0ZFQVRVUkVfSU5DT01QQVRfRklMRVRZUEV8ICAgRVhUMl9GRUFUVVJFX0lOQ09NUEFUX01FVEFfQkcpCisjZGVmaW5lIEVYVDJfRkVBVFVSRV9ST19DT01QQVRfU1VQUCAoRVhUMl9GRUFUVVJFX1JPX0NPTVBBVF9TUEFSU0VfU1VQRVJ8ICAgRVhUMl9GRUFUVVJFX1JPX0NPTVBBVF9MQVJHRV9GSUxFfCAgIEVYVDJfRkVBVFVSRV9ST19DT01QQVRfQlRSRUVfRElSKQorI2RlZmluZSBFWFQyX0ZFQVRVUkVfUk9fQ09NUEFUX1VOU1VQUE9SVEVEIH5FWFQyX0ZFQVRVUkVfUk9fQ09NUEFUX1NVUFAKKyNkZWZpbmUgRVhUMl9GRUFUVVJFX0lOQ09NUEFUX1VOU1VQUE9SVEVEIH5FWFQyX0ZFQVRVUkVfSU5DT01QQVRfU1VQUAorCisjZGVmaW5lIEVYVDJfREVGX1JFU1VJRCAwCisjZGVmaW5lIEVYVDJfREVGX1JFU0dJRCAwCisKKyNkZWZpbmUgRVhUMl9ERUZNX0RFQlVHIDB4MDAwMQorI2RlZmluZSBFWFQyX0RFRk1fQlNER1JPVVBTIDB4MDAwMgorI2RlZmluZSBFWFQyX0RFRk1fWEFUVFJfVVNFUiAweDAwMDQKKyNkZWZpbmUgRVhUMl9ERUZNX0FDTCAweDAwMDgKKyNkZWZpbmUgRVhUMl9ERUZNX1VJRDE2IDB4MDAxMAorCisjZGVmaW5lIEVYVDNfREVGTV9KTU9ERSAweDAwNjAgCisjZGVmaW5lIEVYVDNfREVGTV9KTU9ERV9EQVRBIDB4MDAyMAorI2RlZmluZSBFWFQzX0RFRk1fSk1PREVfT1JERVJFRCAweDAwNDAKKyNkZWZpbmUgRVhUM19ERUZNX0pNT0RFX1dCQUNLIDB4MDA2MAorCisjZGVmaW5lIEVYVDJfTkFNRV9MRU4gMjU1CisKK3N0cnVjdCBleHQyX2Rpcl9lbnRyeSB7CisgX19sZTMyIGlub2RlOworIF9fbGUxNiByZWNfbGVuOworIF9fbGUxNiBuYW1lX2xlbjsKKyBjaGFyIG5hbWVbRVhUMl9OQU1FX0xFTl07Cit9OworCitzdHJ1Y3QgZXh0Ml9kaXJfZW50cnlfMiB7CisgX19sZTMyIGlub2RlOworIF9fbGUxNiByZWNfbGVuOworIF9fdTggbmFtZV9sZW47CisgX191OCBmaWxlX3R5cGU7CisgY2hhciBuYW1lW0VYVDJfTkFNRV9MRU5dOworfTsKKworZW51bSB7CisgRVhUMl9GVF9VTktOT1dOLAorIEVYVDJfRlRfUkVHX0ZJTEUsCisgRVhUMl9GVF9ESVIsCisgRVhUMl9GVF9DSFJERVYsCisgRVhUMl9GVF9CTEtERVYsCisgRVhUMl9GVF9GSUZPLAorIEVYVDJfRlRfU09DSywKKyBFWFQyX0ZUX1NZTUxJTkssCisgRVhUMl9GVF9NQVgKK307CisKKyNkZWZpbmUgRVhUMl9ESVJfUEFEIDQKKyNkZWZpbmUgRVhUMl9ESVJfUk9VTkQgKEVYVDJfRElSX1BBRCAtIDEpCisjZGVmaW5lIEVYVDJfRElSX1JFQ19MRU4obmFtZV9sZW4pICgoKG5hbWVfbGVuKSArIDggKyBFWFQyX0RJUl9ST1VORCkgJiAgIH5FWFQyX0RJUl9ST1VORCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZXh0M19mcy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2V4dDNfZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDE2ZmQxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2V4dDNfZnMuaApAQCAtMCwwICsxLDQ0OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfRVhUM19GU19ICisjZGVmaW5lIF9MSU5VWF9FWFQzX0ZTX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyN1bmRlZiBFWFQzRlNfREVCVUcKKworI2RlZmluZSBFWFQzX0RFRkFVTFRfUkVTRVJWRV9CTE9DS1MgOAorCisjZGVmaW5lIEVYVDNfTUFYX1JFU0VSVkVfQkxPQ0tTIDEwMjcKKyNkZWZpbmUgRVhUM19SRVNFUlZFX1dJTkRPV19OT1RfQUxMT0NBVEVEIDAKKworI2RlZmluZSBDT05GSUdfRVhUM19JTkRFWAorCisjaWZkZWYgRVhUM0ZTX0RFQlVHCisjZGVmaW5lIGV4dDNfZGVidWcoZiwgYS4uLikgICBkbyB7ICAgcHJpbnRrIChLRVJOX0RFQlVHICJFWFQzLWZzIERFQlVHICglcywgJWQpOiAlczoiLCAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19GVU5DVElPTl9fKTsgICBwcmludGsgKEtFUk5fREVCVUcgZiwgIyMgYSk7ICAgfSB3aGlsZSAoMCkKKyNlbHNlCisjZGVmaW5lIGV4dDNfZGVidWcoZiwgYS4uLikgZG8ge30gd2hpbGUgKDApCisjZW5kaWYKKworI2RlZmluZSBFWFQzX0JBRF9JTk8gMSAgCisjZGVmaW5lIEVYVDNfUk9PVF9JTk8gMiAgCisjZGVmaW5lIEVYVDNfQk9PVF9MT0FERVJfSU5PIDUgIAorI2RlZmluZSBFWFQzX1VOREVMX0RJUl9JTk8gNiAgCisjZGVmaW5lIEVYVDNfUkVTSVpFX0lOTyA3ICAKKyNkZWZpbmUgRVhUM19KT1VSTkFMX0lOTyA4ICAKKworI2RlZmluZSBFWFQzX0dPT0RfT0xEX0ZJUlNUX0lOTyAxMQorCisjZGVmaW5lIEVYVDNfU1VQRVJfTUFHSUMgMHhFRjUzCisKKyNkZWZpbmUgRVhUM19MSU5LX01BWCAzMjAwMAorCisjZGVmaW5lIEVYVDNfTUlOX0JMT0NLX1NJWkUgMTAyNAorI2RlZmluZSBFWFQzX01BWF9CTE9DS19TSVpFIDQwOTYKKyNkZWZpbmUgRVhUM19NSU5fQkxPQ0tfTE9HX1NJWkUgMTAKKyNkZWZpbmUgRVhUM19CTE9DS19TSVpFKHMpIChFWFQzX01JTl9CTE9DS19TSVpFIDw8IChzKS0+c19sb2dfYmxvY2tfc2l6ZSkKKyNkZWZpbmUgRVhUM19BRERSX1BFUl9CTE9DSyhzKSAoRVhUM19CTE9DS19TSVpFKHMpIC8gc2l6ZW9mIChfX3UzMikpCisjZGVmaW5lIEVYVDNfQkxPQ0tfU0laRV9CSVRTKHMpICgocyktPnNfbG9nX2Jsb2NrX3NpemUgKyAxMCkKKyNkZWZpbmUgRVhUM19JTk9ERV9TSVpFKHMpICgoKHMpLT5zX3Jldl9sZXZlbCA9PSBFWFQzX0dPT0RfT0xEX1JFVikgPyAgIEVYVDNfR09PRF9PTERfSU5PREVfU0laRSA6ICAgKHMpLT5zX2lub2RlX3NpemUpCisjZGVmaW5lIEVYVDNfRklSU1RfSU5PKHMpICgoKHMpLT5zX3Jldl9sZXZlbCA9PSBFWFQzX0dPT0RfT0xEX1JFVikgPyAgIEVYVDNfR09PRF9PTERfRklSU1RfSU5PIDogICAocyktPnNfZmlyc3RfaW5vKQorCisjZGVmaW5lIEVYVDNfTUlOX0ZSQUdfU0laRSAxMDI0CisjZGVmaW5lIEVYVDNfTUFYX0ZSQUdfU0laRSA0MDk2CisjZGVmaW5lIEVYVDNfTUlOX0ZSQUdfTE9HX1NJWkUgMTAKKyNkZWZpbmUgRVhUM19GUkFHX1NJWkUocykgKEVYVDNfTUlOX0ZSQUdfU0laRSA8PCAocyktPnNfbG9nX2ZyYWdfc2l6ZSkKKyNkZWZpbmUgRVhUM19GUkFHU19QRVJfQkxPQ0socykgKEVYVDNfQkxPQ0tfU0laRShzKSAvIEVYVDNfRlJBR19TSVpFKHMpKQorCitzdHJ1Y3QgZXh0M19ncm91cF9kZXNjCit7CisgX19sZTMyIGJnX2Jsb2NrX2JpdG1hcDsKKyBfX2xlMzIgYmdfaW5vZGVfYml0bWFwOworIF9fbGUzMiBiZ19pbm9kZV90YWJsZTsKKyBfX2xlMTYgYmdfZnJlZV9ibG9ja3NfY291bnQ7CisgX19sZTE2IGJnX2ZyZWVfaW5vZGVzX2NvdW50OworIF9fbGUxNiBiZ191c2VkX2RpcnNfY291bnQ7CisgX191MTYgYmdfcGFkOworIF9fbGUzMiBiZ19yZXNlcnZlZFszXTsKK307CisKKyNkZWZpbmUgRVhUM19CTE9DS1NfUEVSX0dST1VQKHMpICgocyktPnNfYmxvY2tzX3Blcl9ncm91cCkKKyNkZWZpbmUgRVhUM19ERVNDX1BFUl9CTE9DSyhzKSAoRVhUM19CTE9DS19TSVpFKHMpIC8gc2l6ZW9mIChzdHJ1Y3QgZXh0M19ncm91cF9kZXNjKSkKKyNkZWZpbmUgRVhUM19JTk9ERVNfUEVSX0dST1VQKHMpICgocyktPnNfaW5vZGVzX3Blcl9ncm91cCkKKworI2RlZmluZSBFWFQzX05ESVJfQkxPQ0tTIDEyCisjZGVmaW5lIEVYVDNfSU5EX0JMT0NLIEVYVDNfTkRJUl9CTE9DS1MKKyNkZWZpbmUgRVhUM19ESU5EX0JMT0NLIChFWFQzX0lORF9CTE9DSyArIDEpCisjZGVmaW5lIEVYVDNfVElORF9CTE9DSyAoRVhUM19ESU5EX0JMT0NLICsgMSkKKyNkZWZpbmUgRVhUM19OX0JMT0NLUyAoRVhUM19USU5EX0JMT0NLICsgMSkKKworI2RlZmluZSBFWFQzX1NFQ1JNX0ZMIDB4MDAwMDAwMDEgIAorI2RlZmluZSBFWFQzX1VOUk1fRkwgMHgwMDAwMDAwMiAgCisjZGVmaW5lIEVYVDNfQ09NUFJfRkwgMHgwMDAwMDAwNCAgCisjZGVmaW5lIEVYVDNfU1lOQ19GTCAweDAwMDAwMDA4ICAKKyNkZWZpbmUgRVhUM19JTU1VVEFCTEVfRkwgMHgwMDAwMDAxMCAgCisjZGVmaW5lIEVYVDNfQVBQRU5EX0ZMIDB4MDAwMDAwMjAgIAorI2RlZmluZSBFWFQzX05PRFVNUF9GTCAweDAwMDAwMDQwICAKKyNkZWZpbmUgRVhUM19OT0FUSU1FX0ZMIDB4MDAwMDAwODAgIAorCisjZGVmaW5lIEVYVDNfRElSVFlfRkwgMHgwMDAwMDEwMAorI2RlZmluZSBFWFQzX0NPTVBSQkxLX0ZMIDB4MDAwMDAyMDAgIAorI2RlZmluZSBFWFQzX05PQ09NUFJfRkwgMHgwMDAwMDQwMCAgCisjZGVmaW5lIEVYVDNfRUNPTVBSX0ZMIDB4MDAwMDA4MDAgIAorCisjZGVmaW5lIEVYVDNfSU5ERVhfRkwgMHgwMDAwMTAwMCAgCisjZGVmaW5lIEVYVDNfSU1BR0lDX0ZMIDB4MDAwMDIwMDAgIAorI2RlZmluZSBFWFQzX0pPVVJOQUxfREFUQV9GTCAweDAwMDA0MDAwICAKKyNkZWZpbmUgRVhUM19OT1RBSUxfRkwgMHgwMDAwODAwMCAgCisjZGVmaW5lIEVYVDNfRElSU1lOQ19GTCAweDAwMDEwMDAwICAKKyNkZWZpbmUgRVhUM19UT1BESVJfRkwgMHgwMDAyMDAwMCAgCisjZGVmaW5lIEVYVDNfUkVTRVJWRURfRkwgMHg4MDAwMDAwMCAgCisKKyNkZWZpbmUgRVhUM19GTF9VU0VSX1ZJU0lCTEUgMHgwMDAzREZGRiAgCisjZGVmaW5lIEVYVDNfRkxfVVNFUl9NT0RJRklBQkxFIDB4MDAwMzgwRkYgIAorCisjZGVmaW5lIEVYVDNfU1RBVEVfSkRBVEEgMHgwMDAwMDAwMSAgCisjZGVmaW5lIEVYVDNfU1RBVEVfTkVXIDB4MDAwMDAwMDIgIAorI2RlZmluZSBFWFQzX1NUQVRFX1hBVFRSIDB4MDAwMDAwMDQgIAorCitzdHJ1Y3QgZXh0M19uZXdfZ3JvdXBfaW5wdXQgeworIF9fdTMyIGdyb3VwOworIF9fdTMyIGJsb2NrX2JpdG1hcDsKKyBfX3UzMiBpbm9kZV9iaXRtYXA7CisgX191MzIgaW5vZGVfdGFibGU7CisgX191MzIgYmxvY2tzX2NvdW50OworIF9fdTE2IHJlc2VydmVkX2Jsb2NrczsKKyBfX3UxNiB1bnVzZWQ7Cit9OworCitzdHJ1Y3QgZXh0M19uZXdfZ3JvdXBfZGF0YSB7CisgX191MzIgZ3JvdXA7CisgX191MzIgYmxvY2tfYml0bWFwOworIF9fdTMyIGlub2RlX2JpdG1hcDsKKyBfX3UzMiBpbm9kZV90YWJsZTsKKyBfX3UzMiBibG9ja3NfY291bnQ7CisgX191MTYgcmVzZXJ2ZWRfYmxvY2tzOworIF9fdTE2IHVudXNlZDsKKyBfX3UzMiBmcmVlX2Jsb2Nrc19jb3VudDsKK307CisKKyNkZWZpbmUgRVhUM19JT0NfR0VURkxBR1MgX0lPUignZicsIDEsIGxvbmcpCisjZGVmaW5lIEVYVDNfSU9DX1NFVEZMQUdTIF9JT1coJ2YnLCAyLCBsb25nKQorI2RlZmluZSBFWFQzX0lPQ19HRVRWRVJTSU9OIF9JT1IoJ2YnLCAzLCBsb25nKQorI2RlZmluZSBFWFQzX0lPQ19TRVRWRVJTSU9OIF9JT1coJ2YnLCA0LCBsb25nKQorI2RlZmluZSBFWFQzX0lPQ19HUk9VUF9FWFRFTkQgX0lPVygnZicsIDcsIHVuc2lnbmVkIGxvbmcpCisjZGVmaW5lIEVYVDNfSU9DX0dST1VQX0FERCBfSU9XKCdmJywgOCxzdHJ1Y3QgZXh0M19uZXdfZ3JvdXBfaW5wdXQpCisjZGVmaW5lIEVYVDNfSU9DX0dFVFZFUlNJT05fT0xEIF9JT1IoJ3YnLCAxLCBsb25nKQorI2RlZmluZSBFWFQzX0lPQ19TRVRWRVJTSU9OX09MRCBfSU9XKCd2JywgMiwgbG9uZykKKyNkZWZpbmUgRVhUM19JT0NfR0VUUlNWU1ogX0lPUignZicsIDUsIGxvbmcpCisjZGVmaW5lIEVYVDNfSU9DX1NFVFJTVlNaIF9JT1coJ2YnLCA2LCBsb25nKQorCitzdHJ1Y3QgZXh0M19tb3VudF9vcHRpb25zIHsKKyB1bnNpZ25lZCBsb25nIHNfbW91bnRfb3B0OworIHVpZF90IHNfcmVzdWlkOworIGdpZF90IHNfcmVzZ2lkOworIHVuc2lnbmVkIGxvbmcgc19jb21taXRfaW50ZXJ2YWw7Cit9OworCitzdHJ1Y3QgZXh0M19pbm9kZSB7CisgX19sZTE2IGlfbW9kZTsKKyBfX2xlMTYgaV91aWQ7CisgX19sZTMyIGlfc2l6ZTsKKyBfX2xlMzIgaV9hdGltZTsKKyBfX2xlMzIgaV9jdGltZTsKKyBfX2xlMzIgaV9tdGltZTsKKyBfX2xlMzIgaV9kdGltZTsKKyBfX2xlMTYgaV9naWQ7CisgX19sZTE2IGlfbGlua3NfY291bnQ7CisgX19sZTMyIGlfYmxvY2tzOworIF9fbGUzMiBpX2ZsYWdzOworIHVuaW9uIHsKKyBzdHJ1Y3QgeworIF9fdTMyIGxfaV9yZXNlcnZlZDE7CisgfSBsaW51eDE7Cisgc3RydWN0IHsKKyBfX3UzMiBoX2lfdHJhbnNsYXRvcjsKKyB9IGh1cmQxOworIHN0cnVjdCB7CisgX191MzIgbV9pX3Jlc2VydmVkMTsKKyB9IG1hc2l4MTsKKyB9IG9zZDE7CisgX19sZTMyIGlfYmxvY2tbRVhUM19OX0JMT0NLU107CisgX19sZTMyIGlfZ2VuZXJhdGlvbjsKKyBfX2xlMzIgaV9maWxlX2FjbDsKKyBfX2xlMzIgaV9kaXJfYWNsOworIF9fbGUzMiBpX2ZhZGRyOworIHVuaW9uIHsKKyBzdHJ1Y3QgeworIF9fdTggbF9pX2ZyYWc7CisgX191OCBsX2lfZnNpemU7CisgX191MTYgaV9wYWQxOworIF9fbGUxNiBsX2lfdWlkX2hpZ2g7CisgX19sZTE2IGxfaV9naWRfaGlnaDsKKyBfX3UzMiBsX2lfcmVzZXJ2ZWQyOworIH0gbGludXgyOworIHN0cnVjdCB7CisgX191OCBoX2lfZnJhZzsKKyBfX3U4IGhfaV9mc2l6ZTsKKyBfX3UxNiBoX2lfbW9kZV9oaWdoOworIF9fdTE2IGhfaV91aWRfaGlnaDsKKyBfX3UxNiBoX2lfZ2lkX2hpZ2g7CisgX191MzIgaF9pX2F1dGhvcjsKKyB9IGh1cmQyOworIHN0cnVjdCB7CisgX191OCBtX2lfZnJhZzsKKyBfX3U4IG1faV9mc2l6ZTsKKyBfX3UxNiBtX3BhZDE7CisgX191MzIgbV9pX3Jlc2VydmVkMlsyXTsKKyB9IG1hc2l4MjsKKyB9IG9zZDI7CisgX19sZTE2IGlfZXh0cmFfaXNpemU7CisgX19sZTE2IGlfcGFkMTsKK307CisKKyNkZWZpbmUgaV9zaXplX2hpZ2ggaV9kaXJfYWNsCisKKyNpZmRlZiBfX2xpbnV4X18KKyNkZWZpbmUgaV9yZXNlcnZlZDEgb3NkMS5saW51eDEubF9pX3Jlc2VydmVkMQorI2RlZmluZSBpX2ZyYWcgb3NkMi5saW51eDIubF9pX2ZyYWcKKyNkZWZpbmUgaV9mc2l6ZSBvc2QyLmxpbnV4Mi5sX2lfZnNpemUKKyNkZWZpbmUgaV91aWRfbG93IGlfdWlkCisjZGVmaW5lIGlfZ2lkX2xvdyBpX2dpZAorI2RlZmluZSBpX3VpZF9oaWdoIG9zZDIubGludXgyLmxfaV91aWRfaGlnaAorI2RlZmluZSBpX2dpZF9oaWdoIG9zZDIubGludXgyLmxfaV9naWRfaGlnaAorI2RlZmluZSBpX3Jlc2VydmVkMiBvc2QyLmxpbnV4Mi5sX2lfcmVzZXJ2ZWQyCisKKyNlbGlmIGRlZmluZWQoX19HTlVfXykKKworI2RlZmluZSBpX3RyYW5zbGF0b3Igb3NkMS5odXJkMS5oX2lfdHJhbnNsYXRvcgorI2RlZmluZSBpX2ZyYWcgb3NkMi5odXJkMi5oX2lfZnJhZzsKKyNkZWZpbmUgaV9mc2l6ZSBvc2QyLmh1cmQyLmhfaV9mc2l6ZTsKKyNkZWZpbmUgaV91aWRfaGlnaCBvc2QyLmh1cmQyLmhfaV91aWRfaGlnaAorI2RlZmluZSBpX2dpZF9oaWdoIG9zZDIuaHVyZDIuaF9pX2dpZF9oaWdoCisjZGVmaW5lIGlfYXV0aG9yIG9zZDIuaHVyZDIuaF9pX2F1dGhvcgorCisjZWxpZiBkZWZpbmVkKF9fbWFzaXhfXykKKworI2RlZmluZSBpX3Jlc2VydmVkMSBvc2QxLm1hc2l4MS5tX2lfcmVzZXJ2ZWQxCisjZGVmaW5lIGlfZnJhZyBvc2QyLm1hc2l4Mi5tX2lfZnJhZworI2RlZmluZSBpX2ZzaXplIG9zZDIubWFzaXgyLm1faV9mc2l6ZQorI2RlZmluZSBpX3Jlc2VydmVkMiBvc2QyLm1hc2l4Mi5tX2lfcmVzZXJ2ZWQyCisKKyNlbmRpZgorCisjZGVmaW5lIEVYVDNfVkFMSURfRlMgMHgwMDAxICAKKyNkZWZpbmUgRVhUM19FUlJPUl9GUyAweDAwMDIgIAorI2RlZmluZSBFWFQzX09SUEhBTl9GUyAweDAwMDQgIAorCisjZGVmaW5lIEVYVDNfTU9VTlRfQ0hFQ0sgMHgwMDAwMSAgCisjZGVmaW5lIEVYVDNfTU9VTlRfT0xEQUxMT0MgMHgwMDAwMiAgCisjZGVmaW5lIEVYVDNfTU9VTlRfR1JQSUQgMHgwMDAwNCAgCisjZGVmaW5lIEVYVDNfTU9VTlRfREVCVUcgMHgwMDAwOCAgCisjZGVmaW5lIEVYVDNfTU9VTlRfRVJST1JTX0NPTlQgMHgwMDAxMCAgCisjZGVmaW5lIEVYVDNfTU9VTlRfRVJST1JTX1JPIDB4MDAwMjAgIAorI2RlZmluZSBFWFQzX01PVU5UX0VSUk9SU19QQU5JQyAweDAwMDQwICAKKyNkZWZpbmUgRVhUM19NT1VOVF9NSU5JWF9ERiAweDAwMDgwICAKKyNkZWZpbmUgRVhUM19NT1VOVF9OT0xPQUQgMHgwMDEwMCAgCisjZGVmaW5lIEVYVDNfTU9VTlRfQUJPUlQgMHgwMDIwMCAgCisjZGVmaW5lIEVYVDNfTU9VTlRfREFUQV9GTEFHUyAweDAwQzAwICAKKyNkZWZpbmUgRVhUM19NT1VOVF9KT1VSTkFMX0RBVEEgMHgwMDQwMCAgCisjZGVmaW5lIEVYVDNfTU9VTlRfT1JERVJFRF9EQVRBIDB4MDA4MDAgIAorI2RlZmluZSBFWFQzX01PVU5UX1dSSVRFQkFDS19EQVRBIDB4MDBDMDAgIAorI2RlZmluZSBFWFQzX01PVU5UX1VQREFURV9KT1VSTkFMIDB4MDEwMDAgIAorI2RlZmluZSBFWFQzX01PVU5UX05PX1VJRDMyIDB4MDIwMDAgIAorI2RlZmluZSBFWFQzX01PVU5UX1hBVFRSX1VTRVIgMHgwNDAwMCAgCisjZGVmaW5lIEVYVDNfTU9VTlRfUE9TSVhfQUNMIDB4MDgwMDAgIAorI2RlZmluZSBFWFQzX01PVU5UX1JFU0VSVkFUSU9OIDB4MTAwMDAgIAorI2RlZmluZSBFWFQzX01PVU5UX0JBUlJJRVIgMHgyMDAwMCAgCisjZGVmaW5lIEVYVDNfTU9VTlRfTk9CSCAweDQwMDAwICAKKyNkZWZpbmUgRVhUM19NT1VOVF9RVU9UQSAweDgwMDAwICAKKyNkZWZpbmUgRVhUM19NT1VOVF9VU1JRVU9UQSAweDEwMDAwMCAgCisjZGVmaW5lIEVYVDNfTU9VTlRfR1JQUVVPVEEgMHgyMDAwMDAgIAorCisjaWZuZGVmIF9MSU5VWF9FWFQyX0ZTX0gKKyNkZWZpbmUgY2xlYXJfb3B0KG8sIG9wdCkgbyAmPSB+RVhUM19NT1VOVF8jI29wdAorI2RlZmluZSBzZXRfb3B0KG8sIG9wdCkgbyB8PSBFWFQzX01PVU5UXyMjb3B0CisjZGVmaW5lIHRlc3Rfb3B0KHNiLCBvcHQpIChFWFQzX1NCKHNiKS0+c19tb3VudF9vcHQgJiAgIEVYVDNfTU9VTlRfIyNvcHQpCisjZWxzZQorI2RlZmluZSBFWFQyX01PVU5UX05PTE9BRCBFWFQzX01PVU5UX05PTE9BRAorI2RlZmluZSBFWFQyX01PVU5UX0FCT1JUIEVYVDNfTU9VTlRfQUJPUlQKKyNkZWZpbmUgRVhUMl9NT1VOVF9EQVRBX0ZMQUdTIEVYVDNfTU9VTlRfREFUQV9GTEFHUworI2VuZGlmCisKKyNkZWZpbmUgZXh0M19zZXRfYml0IGV4dDJfc2V0X2JpdAorI2RlZmluZSBleHQzX3NldF9iaXRfYXRvbWljIGV4dDJfc2V0X2JpdF9hdG9taWMKKyNkZWZpbmUgZXh0M19jbGVhcl9iaXQgZXh0Ml9jbGVhcl9iaXQKKyNkZWZpbmUgZXh0M19jbGVhcl9iaXRfYXRvbWljIGV4dDJfY2xlYXJfYml0X2F0b21pYworI2RlZmluZSBleHQzX3Rlc3RfYml0IGV4dDJfdGVzdF9iaXQKKyNkZWZpbmUgZXh0M19maW5kX2ZpcnN0X3plcm9fYml0IGV4dDJfZmluZF9maXJzdF96ZXJvX2JpdAorI2RlZmluZSBleHQzX2ZpbmRfbmV4dF96ZXJvX2JpdCBleHQyX2ZpbmRfbmV4dF96ZXJvX2JpdAorCisjZGVmaW5lIEVYVDNfREZMX01BWF9NTlRfQ09VTlQgMjAgIAorI2RlZmluZSBFWFQzX0RGTF9DSEVDS0lOVEVSVkFMIDAgIAorCisjZGVmaW5lIEVYVDNfRVJST1JTX0NPTlRJTlVFIDEgIAorI2RlZmluZSBFWFQzX0VSUk9SU19STyAyICAKKyNkZWZpbmUgRVhUM19FUlJPUlNfUEFOSUMgMyAgCisjZGVmaW5lIEVYVDNfRVJST1JTX0RFRkFVTFQgRVhUM19FUlJPUlNfQ09OVElOVUUKKworc3RydWN0IGV4dDNfc3VwZXJfYmxvY2sgeworICBfX2xlMzIgc19pbm9kZXNfY291bnQ7CisgX19sZTMyIHNfYmxvY2tzX2NvdW50OworIF9fbGUzMiBzX3JfYmxvY2tzX2NvdW50OworIF9fbGUzMiBzX2ZyZWVfYmxvY2tzX2NvdW50OworICBfX2xlMzIgc19mcmVlX2lub2Rlc19jb3VudDsKKyBfX2xlMzIgc19maXJzdF9kYXRhX2Jsb2NrOworIF9fbGUzMiBzX2xvZ19ibG9ja19zaXplOworIF9fbGUzMiBzX2xvZ19mcmFnX3NpemU7CisgIF9fbGUzMiBzX2Jsb2Nrc19wZXJfZ3JvdXA7CisgX19sZTMyIHNfZnJhZ3NfcGVyX2dyb3VwOworIF9fbGUzMiBzX2lub2Rlc19wZXJfZ3JvdXA7CisgX19sZTMyIHNfbXRpbWU7CisgIF9fbGUzMiBzX3d0aW1lOworIF9fbGUxNiBzX21udF9jb3VudDsKKyBfX2xlMTYgc19tYXhfbW50X2NvdW50OworIF9fbGUxNiBzX21hZ2ljOworIF9fbGUxNiBzX3N0YXRlOworIF9fbGUxNiBzX2Vycm9yczsKKyBfX2xlMTYgc19taW5vcl9yZXZfbGV2ZWw7CisgIF9fbGUzMiBzX2xhc3RjaGVjazsKKyBfX2xlMzIgc19jaGVja2ludGVydmFsOworIF9fbGUzMiBzX2NyZWF0b3Jfb3M7CisgX19sZTMyIHNfcmV2X2xldmVsOworICBfX2xlMTYgc19kZWZfcmVzdWlkOworIF9fbGUxNiBzX2RlZl9yZXNnaWQ7CisKKyBfX2xlMzIgc19maXJzdF9pbm87CisgX19sZTE2IHNfaW5vZGVfc2l6ZTsKKyBfX2xlMTYgc19ibG9ja19ncm91cF9ucjsKKyBfX2xlMzIgc19mZWF0dXJlX2NvbXBhdDsKKyAgX19sZTMyIHNfZmVhdHVyZV9pbmNvbXBhdDsKKyBfX2xlMzIgc19mZWF0dXJlX3JvX2NvbXBhdDsKKyAgX191OCBzX3V1aWRbMTZdOworICBjaGFyIHNfdm9sdW1lX25hbWVbMTZdOworICBjaGFyIHNfbGFzdF9tb3VudGVkWzY0XTsKKyAgX19sZTMyIHNfYWxnb3JpdGhtX3VzYWdlX2JpdG1hcDsKKworIF9fdTggc19wcmVhbGxvY19ibG9ja3M7CisgX191OCBzX3ByZWFsbG9jX2Rpcl9ibG9ja3M7CisgX191MTYgc19yZXNlcnZlZF9nZHRfYmxvY2tzOworCisgIF9fdTggc19qb3VybmFsX3V1aWRbMTZdOworICBfX2xlMzIgc19qb3VybmFsX2ludW07CisgX19sZTMyIHNfam91cm5hbF9kZXY7CisgX19sZTMyIHNfbGFzdF9vcnBoYW47CisgX19sZTMyIHNfaGFzaF9zZWVkWzRdOworIF9fdTggc19kZWZfaGFzaF92ZXJzaW9uOworIF9fdTggc19yZXNlcnZlZF9jaGFyX3BhZDsKKyBfX3UxNiBzX3Jlc2VydmVkX3dvcmRfcGFkOworIF9fbGUzMiBzX2RlZmF1bHRfbW91bnRfb3B0czsKKyBfX2xlMzIgc19maXJzdF9tZXRhX2JnOworIF9fdTMyIHNfcmVzZXJ2ZWRbMTkwXTsKK307CisKKyNkZWZpbmUgRVhUM19TQihzYikgKHNiKQorCisjZGVmaW5lIE5FWFRfT1JQSEFOKGlub2RlKSBFWFQzX0koaW5vZGUpLT5pX2R0aW1lCisKKyNkZWZpbmUgRVhUM19PU19MSU5VWCAwCisjZGVmaW5lIEVYVDNfT1NfSFVSRCAxCisjZGVmaW5lIEVYVDNfT1NfTUFTSVggMgorI2RlZmluZSBFWFQzX09TX0ZSRUVCU0QgMworI2RlZmluZSBFWFQzX09TX0xJVEVTIDQKKworI2RlZmluZSBFWFQzX0dPT0RfT0xEX1JFViAwICAKKyNkZWZpbmUgRVhUM19EWU5BTUlDX1JFViAxICAKKworI2RlZmluZSBFWFQzX0NVUlJFTlRfUkVWIEVYVDNfR09PRF9PTERfUkVWCisjZGVmaW5lIEVYVDNfTUFYX1NVUFBfUkVWIEVYVDNfRFlOQU1JQ19SRVYKKworI2RlZmluZSBFWFQzX0dPT0RfT0xEX0lOT0RFX1NJWkUgMTI4CisKKyNkZWZpbmUgRVhUM19IQVNfQ09NUEFUX0ZFQVRVUkUoc2IsbWFzaykgICAoIEVYVDNfU0Ioc2IpLT5zX2VzLT5zX2ZlYXR1cmVfY29tcGF0ICYgY3B1X3RvX2xlMzIobWFzaykgKQorI2RlZmluZSBFWFQzX0hBU19ST19DT01QQVRfRkVBVFVSRShzYixtYXNrKSAgICggRVhUM19TQihzYiktPnNfZXMtPnNfZmVhdHVyZV9yb19jb21wYXQgJiBjcHVfdG9fbGUzMihtYXNrKSApCisjZGVmaW5lIEVYVDNfSEFTX0lOQ09NUEFUX0ZFQVRVUkUoc2IsbWFzaykgICAoIEVYVDNfU0Ioc2IpLT5zX2VzLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBjcHVfdG9fbGUzMihtYXNrKSApCisjZGVmaW5lIEVYVDNfU0VUX0NPTVBBVF9GRUFUVVJFKHNiLG1hc2spICAgRVhUM19TQihzYiktPnNfZXMtPnNfZmVhdHVyZV9jb21wYXQgfD0gY3B1X3RvX2xlMzIobWFzaykKKyNkZWZpbmUgRVhUM19TRVRfUk9fQ09NUEFUX0ZFQVRVUkUoc2IsbWFzaykgICBFWFQzX1NCKHNiKS0+c19lcy0+c19mZWF0dXJlX3JvX2NvbXBhdCB8PSBjcHVfdG9fbGUzMihtYXNrKQorI2RlZmluZSBFWFQzX1NFVF9JTkNPTVBBVF9GRUFUVVJFKHNiLG1hc2spICAgRVhUM19TQihzYiktPnNfZXMtPnNfZmVhdHVyZV9pbmNvbXBhdCB8PSBjcHVfdG9fbGUzMihtYXNrKQorI2RlZmluZSBFWFQzX0NMRUFSX0NPTVBBVF9GRUFUVVJFKHNiLG1hc2spICAgRVhUM19TQihzYiktPnNfZXMtPnNfZmVhdHVyZV9jb21wYXQgJj0gfmNwdV90b19sZTMyKG1hc2spCisjZGVmaW5lIEVYVDNfQ0xFQVJfUk9fQ09NUEFUX0ZFQVRVUkUoc2IsbWFzaykgICBFWFQzX1NCKHNiKS0+c19lcy0+c19mZWF0dXJlX3JvX2NvbXBhdCAmPSB+Y3B1X3RvX2xlMzIobWFzaykKKyNkZWZpbmUgRVhUM19DTEVBUl9JTkNPTVBBVF9GRUFUVVJFKHNiLG1hc2spICAgRVhUM19TQihzYiktPnNfZXMtPnNfZmVhdHVyZV9pbmNvbXBhdCAmPSB+Y3B1X3RvX2xlMzIobWFzaykKKworI2RlZmluZSBFWFQzX0ZFQVRVUkVfQ09NUEFUX0RJUl9QUkVBTExPQyAweDAwMDEKKyNkZWZpbmUgRVhUM19GRUFUVVJFX0NPTVBBVF9JTUFHSUNfSU5PREVTIDB4MDAwMgorI2RlZmluZSBFWFQzX0ZFQVRVUkVfQ09NUEFUX0hBU19KT1VSTkFMIDB4MDAwNAorI2RlZmluZSBFWFQzX0ZFQVRVUkVfQ09NUEFUX0VYVF9BVFRSIDB4MDAwOAorI2RlZmluZSBFWFQzX0ZFQVRVUkVfQ09NUEFUX1JFU0laRV9JTk9ERSAweDAwMTAKKyNkZWZpbmUgRVhUM19GRUFUVVJFX0NPTVBBVF9ESVJfSU5ERVggMHgwMDIwCisKKyNkZWZpbmUgRVhUM19GRUFUVVJFX1JPX0NPTVBBVF9TUEFSU0VfU1VQRVIgMHgwMDAxCisjZGVmaW5lIEVYVDNfRkVBVFVSRV9ST19DT01QQVRfTEFSR0VfRklMRSAweDAwMDIKKyNkZWZpbmUgRVhUM19GRUFUVVJFX1JPX0NPTVBBVF9CVFJFRV9ESVIgMHgwMDA0CisKKyNkZWZpbmUgRVhUM19GRUFUVVJFX0lOQ09NUEFUX0NPTVBSRVNTSU9OIDB4MDAwMQorI2RlZmluZSBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfRklMRVRZUEUgMHgwMDAyCisjZGVmaW5lIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9SRUNPVkVSIDB4MDAwNCAgCisjZGVmaW5lIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9KT1VSTkFMX0RFViAweDAwMDggIAorI2RlZmluZSBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfTUVUQV9CRyAweDAwMTAKKworI2RlZmluZSBFWFQzX0ZFQVRVUkVfQ09NUEFUX1NVUFAgRVhUMl9GRUFUVVJFX0NPTVBBVF9FWFRfQVRUUgorI2RlZmluZSBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfU1VQUCAoRVhUM19GRUFUVVJFX0lOQ09NUEFUX0ZJTEVUWVBFfCAgIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9SRUNPVkVSfCAgIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9NRVRBX0JHKQorI2RlZmluZSBFWFQzX0ZFQVRVUkVfUk9fQ09NUEFUX1NVUFAgKEVYVDNfRkVBVFVSRV9ST19DT01QQVRfU1BBUlNFX1NVUEVSfCAgIEVYVDNfRkVBVFVSRV9ST19DT01QQVRfTEFSR0VfRklMRXwgICBFWFQzX0ZFQVRVUkVfUk9fQ09NUEFUX0JUUkVFX0RJUikKKworI2RlZmluZSBFWFQzX0RFRl9SRVNVSUQgMAorI2RlZmluZSBFWFQzX0RFRl9SRVNHSUQgMAorCisjZGVmaW5lIEVYVDNfREVGTV9ERUJVRyAweDAwMDEKKyNkZWZpbmUgRVhUM19ERUZNX0JTREdST1VQUyAweDAwMDIKKyNkZWZpbmUgRVhUM19ERUZNX1hBVFRSX1VTRVIgMHgwMDA0CisjZGVmaW5lIEVYVDNfREVGTV9BQ0wgMHgwMDA4CisjZGVmaW5lIEVYVDNfREVGTV9VSUQxNiAweDAwMTAKKyNkZWZpbmUgRVhUM19ERUZNX0pNT0RFIDB4MDA2MAorI2RlZmluZSBFWFQzX0RFRk1fSk1PREVfREFUQSAweDAwMjAKKyNkZWZpbmUgRVhUM19ERUZNX0pNT0RFX09SREVSRUQgMHgwMDQwCisjZGVmaW5lIEVYVDNfREVGTV9KTU9ERV9XQkFDSyAweDAwNjAKKworI2RlZmluZSBFWFQzX05BTUVfTEVOIDI1NQorCitzdHJ1Y3QgZXh0M19kaXJfZW50cnkgeworIF9fbGUzMiBpbm9kZTsKKyBfX2xlMTYgcmVjX2xlbjsKKyBfX2xlMTYgbmFtZV9sZW47CisgY2hhciBuYW1lW0VYVDNfTkFNRV9MRU5dOworfTsKKworc3RydWN0IGV4dDNfZGlyX2VudHJ5XzIgeworIF9fbGUzMiBpbm9kZTsKKyBfX2xlMTYgcmVjX2xlbjsKKyBfX3U4IG5hbWVfbGVuOworIF9fdTggZmlsZV90eXBlOworIGNoYXIgbmFtZVtFWFQzX05BTUVfTEVOXTsKK307CisKKyNkZWZpbmUgRVhUM19GVF9VTktOT1dOIDAKKyNkZWZpbmUgRVhUM19GVF9SRUdfRklMRSAxCisjZGVmaW5lIEVYVDNfRlRfRElSIDIKKyNkZWZpbmUgRVhUM19GVF9DSFJERVYgMworI2RlZmluZSBFWFQzX0ZUX0JMS0RFViA0CisjZGVmaW5lIEVYVDNfRlRfRklGTyA1CisjZGVmaW5lIEVYVDNfRlRfU09DSyA2CisjZGVmaW5lIEVYVDNfRlRfU1lNTElOSyA3CisKKyNkZWZpbmUgRVhUM19GVF9NQVggOAorCisjZGVmaW5lIEVYVDNfRElSX1BBRCA0CisjZGVmaW5lIEVYVDNfRElSX1JPVU5EIChFWFQzX0RJUl9QQUQgLSAxKQorI2RlZmluZSBFWFQzX0RJUl9SRUNfTEVOKG5hbWVfbGVuKSAoKChuYW1lX2xlbikgKyA4ICsgRVhUM19ESVJfUk9VTkQpICYgICB+RVhUM19ESVJfUk9VTkQpCisKKyNkZWZpbmUgaXNfZHgoZGlyKSAwCisjZGVmaW5lIEVYVDNfRElSX0xJTktfTUFYKGRpcikgKChkaXIpLT5pX25saW5rID49IEVYVDNfTElOS19NQVgpCisjZGVmaW5lIEVYVDNfRElSX0xJTktfRU1QVFkoZGlyKSAoKGRpciktPmlfbmxpbmsgPT0gMikKKworI2RlZmluZSBEWF9IQVNIX0xFR0FDWSAwCisjZGVmaW5lIERYX0hBU0hfSEFMRl9NRDQgMQorI2RlZmluZSBEWF9IQVNIX1RFQSAyCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2ZhZHZpc2UuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9mYWR2aXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVhMGE0YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9mYWR2aXNlLmgKQEAgLTAsMCArMSwyOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBGQURWSVNFX0hfSU5DTFVERUQKKyNkZWZpbmUgRkFEVklTRV9IX0lOQ0xVREVECisKKyNkZWZpbmUgUE9TSVhfRkFEVl9OT1JNQUwgMCAgCisjZGVmaW5lIFBPU0lYX0ZBRFZfUkFORE9NIDEgIAorI2RlZmluZSBQT1NJWF9GQURWX1NFUVVFTlRJQUwgMiAgCisjZGVmaW5lIFBPU0lYX0ZBRFZfV0lMTE5FRUQgMyAgCisKKyNpZmRlZiBfX3MzOTB4X18KKyNkZWZpbmUgUE9TSVhfRkFEVl9ET05UTkVFRCA2ICAKKyNkZWZpbmUgUE9TSVhfRkFEVl9OT1JFVVNFIDcgIAorI2Vsc2UKKyNkZWZpbmUgUE9TSVhfRkFEVl9ET05UTkVFRCA0ICAKKyNkZWZpbmUgUE9TSVhfRkFEVl9OT1JFVVNFIDUgIAorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2ZiLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZmIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzZjNDM5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2ZiLmgKQEAgLTAsMCArMSwzNDcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX0ZCX0gKKyNkZWZpbmUgX0xJTlVYX0ZCX0gKKworI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCisjZGVmaW5lIEZCX01BSk9SIDI5CisjZGVmaW5lIEZCX01BWCAzMiAgCisKKyNkZWZpbmUgRkJJT0dFVF9WU0NSRUVOSU5GTyAweDQ2MDAKKyNkZWZpbmUgRkJJT1BVVF9WU0NSRUVOSU5GTyAweDQ2MDEKKyNkZWZpbmUgRkJJT0dFVF9GU0NSRUVOSU5GTyAweDQ2MDIKKyNkZWZpbmUgRkJJT0dFVENNQVAgMHg0NjA0CisjZGVmaW5lIEZCSU9QVVRDTUFQIDB4NDYwNQorI2RlZmluZSBGQklPUEFOX0RJU1BMQVkgMHg0NjA2CisjZGVmaW5lIEZCSU9fQ1VSU09SIF9JT1dSKCdGJywgMHgwOCwgc3RydWN0IGZiX2N1cnNvcikKKworI2RlZmluZSBGQklPR0VUX0NPTjJGQk1BUCAweDQ2MEYKKyNkZWZpbmUgRkJJT1BVVF9DT04yRkJNQVAgMHg0NjEwCisjZGVmaW5lIEZCSU9CTEFOSyAweDQ2MTEgIAorI2RlZmluZSBGQklPR0VUX1ZCTEFOSyBfSU9SKCdGJywgMHgxMiwgc3RydWN0IGZiX3ZibGFuaykKKyNkZWZpbmUgRkJJT19BTExPQyAweDQ2MTMKKyNkZWZpbmUgRkJJT19GUkVFIDB4NDYxNAorI2RlZmluZSBGQklPR0VUX0dMWVBIIDB4NDYxNQorI2RlZmluZSBGQklPR0VUX0hXQ0lORk8gMHg0NjE2CisjZGVmaW5lIEZCSU9QVVRfTU9ERUlORk8gMHg0NjE3CisjZGVmaW5lIEZCSU9HRVRfRElTUElORk8gMHg0NjE4CisKKyNkZWZpbmUgRkJfVFlQRV9QQUNLRURfUElYRUxTIDAgIAorI2RlZmluZSBGQl9UWVBFX1BMQU5FUyAxICAKKyNkZWZpbmUgRkJfVFlQRV9JTlRFUkxFQVZFRF9QTEFORVMgMiAgCisjZGVmaW5lIEZCX1RZUEVfVEVYVCAzICAKKyNkZWZpbmUgRkJfVFlQRV9WR0FfUExBTkVTIDQgIAorCisjZGVmaW5lIEZCX0FVWF9URVhUX01EQSAwICAKKyNkZWZpbmUgRkJfQVVYX1RFWFRfQ0dBIDEgIAorI2RlZmluZSBGQl9BVVhfVEVYVF9TM19NTUlPIDIgIAorI2RlZmluZSBGQl9BVVhfVEVYVF9NR0FfU1RFUDE2IDMgIAorI2RlZmluZSBGQl9BVVhfVEVYVF9NR0FfU1RFUDggNCAgCisKKyNkZWZpbmUgRkJfQVVYX1ZHQV9QTEFORVNfVkdBNCAwICAKKyNkZWZpbmUgRkJfQVVYX1ZHQV9QTEFORVNfQ0ZCNCAxICAKKyNkZWZpbmUgRkJfQVVYX1ZHQV9QTEFORVNfQ0ZCOCAyICAKKworI2RlZmluZSBGQl9WSVNVQUxfTU9OTzAxIDAgIAorI2RlZmluZSBGQl9WSVNVQUxfTU9OTzEwIDEgIAorI2RlZmluZSBGQl9WSVNVQUxfVFJVRUNPTE9SIDIgIAorI2RlZmluZSBGQl9WSVNVQUxfUFNFVURPQ09MT1IgMyAgCisjZGVmaW5lIEZCX1ZJU1VBTF9ESVJFQ1RDT0xPUiA0ICAKKyNkZWZpbmUgRkJfVklTVUFMX1NUQVRJQ19QU0VVRE9DT0xPUiA1ICAKKworI2RlZmluZSBGQl9BQ0NFTF9OT05FIDAgIAorI2RlZmluZSBGQl9BQ0NFTF9BVEFSSUJMSVRUIDEgIAorI2RlZmluZSBGQl9BQ0NFTF9BTUlHQUJMSVRUIDIgIAorI2RlZmluZSBGQl9BQ0NFTF9TM19UUklPNjQgMyAgCisjZGVmaW5lIEZCX0FDQ0VMX05DUl83N0MzMkJMVCA0ICAKKyNkZWZpbmUgRkJfQUNDRUxfUzNfVklSR0UgNSAgCisjZGVmaW5lIEZCX0FDQ0VMX0FUSV9NQUNINjRHWCA2ICAKKyNkZWZpbmUgRkJfQUNDRUxfREVDX1RHQSA3ICAKKyNkZWZpbmUgRkJfQUNDRUxfQVRJX01BQ0g2NENUIDggIAorI2RlZmluZSBGQl9BQ0NFTF9BVElfTUFDSDY0VlQgOSAgCisjZGVmaW5lIEZCX0FDQ0VMX0FUSV9NQUNINjRHVCAxMCAgCisjZGVmaW5lIEZCX0FDQ0VMX1NVTl9DUkVBVE9SIDExICAKKyNkZWZpbmUgRkJfQUNDRUxfU1VOX0NHU0lYIDEyICAKKyNkZWZpbmUgRkJfQUNDRUxfU1VOX0xFTyAxMyAgCisjZGVmaW5lIEZCX0FDQ0VMX0lNU19UV0lOVFVSQk8gMTQgIAorI2RlZmluZSBGQl9BQ0NFTF8zRExBQlNfUEVSTUVESUEyIDE1ICAKKyNkZWZpbmUgRkJfQUNDRUxfTUFUUk9YX01HQTIwNjRXIDE2ICAKKyNkZWZpbmUgRkJfQUNDRUxfTUFUUk9YX01HQTEwNjRTRyAxNyAgCisjZGVmaW5lIEZCX0FDQ0VMX01BVFJPWF9NR0EyMTY0VyAxOCAgCisjZGVmaW5lIEZCX0FDQ0VMX01BVFJPWF9NR0EyMTY0V19BR1AgMTkgIAorI2RlZmluZSBGQl9BQ0NFTF9NQVRST1hfTUdBRzEwMCAyMCAgCisjZGVmaW5lIEZCX0FDQ0VMX01BVFJPWF9NR0FHMjAwIDIxICAKKyNkZWZpbmUgRkJfQUNDRUxfU1VOX0NHMTQgMjIgIAorI2RlZmluZSBGQl9BQ0NFTF9TVU5fQldUV08gMjMgIAorI2RlZmluZSBGQl9BQ0NFTF9TVU5fQ0dUSFJFRSAyNCAgCisjZGVmaW5lIEZCX0FDQ0VMX1NVTl9UQ1ggMjUgIAorI2RlZmluZSBGQl9BQ0NFTF9NQVRST1hfTUdBRzQwMCAyNiAgCisjZGVmaW5lIEZCX0FDQ0VMX05WMyAyNyAgCisjZGVmaW5lIEZCX0FDQ0VMX05WNCAyOCAgCisjZGVmaW5lIEZCX0FDQ0VMX05WNSAyOSAgCisjZGVmaW5lIEZCX0FDQ0VMX0NUXzY1NTV4IDMwICAKKyNkZWZpbmUgRkJfQUNDRUxfM0RGWF9CQU5TSEVFIDMxICAKKyNkZWZpbmUgRkJfQUNDRUxfQVRJX1JBR0UxMjggMzIgIAorI2RlZmluZSBGQl9BQ0NFTF9JR1NfQ1lCRVIyMDAwIDMzICAKKyNkZWZpbmUgRkJfQUNDRUxfSUdTX0NZQkVSMjAxMCAzNCAgCisjZGVmaW5lIEZCX0FDQ0VMX0lHU19DWUJFUjUwMDAgMzUgIAorI2RlZmluZSBGQl9BQ0NFTF9TSVNfR0xBTU9VUiAzNiAgCisjZGVmaW5lIEZCX0FDQ0VMXzNETEFCU19QRVJNRURJQTMgMzcgIAorI2RlZmluZSBGQl9BQ0NFTF9BVElfUkFERU9OIDM4ICAKKyNkZWZpbmUgRkJfQUNDRUxfSTgxMCAzOSAgCisjZGVmaW5lIEZCX0FDQ0VMX1NJU19HTEFNT1VSXzIgNDAgIAorI2RlZmluZSBGQl9BQ0NFTF9TSVNfWEFCUkUgNDEgIAorI2RlZmluZSBGQl9BQ0NFTF9JODMwIDQyICAKKyNkZWZpbmUgRkJfQUNDRUxfTlZfMTAgNDMgIAorI2RlZmluZSBGQl9BQ0NFTF9OVl8yMCA0NCAgCisjZGVmaW5lIEZCX0FDQ0VMX05WXzMwIDQ1ICAKKyNkZWZpbmUgRkJfQUNDRUxfTlZfNDAgNDYgIAorI2RlZmluZSBGQl9BQ0NFTF9YR0lfVk9MQVJJX1YgNDcgIAorI2RlZmluZSBGQl9BQ0NFTF9YR0lfVk9MQVJJX1ogNDggIAorI2RlZmluZSBGQl9BQ0NFTF9PTUFQMTYxMCA0OSAgCisjZGVmaW5lIEZCX0FDQ0VMX05FT01BR0lDX05NMjA3MCA5MCAgCisjZGVmaW5lIEZCX0FDQ0VMX05FT01BR0lDX05NMjA5MCA5MSAgCisjZGVmaW5lIEZCX0FDQ0VMX05FT01BR0lDX05NMjA5MyA5MiAgCisjZGVmaW5lIEZCX0FDQ0VMX05FT01BR0lDX05NMjA5NyA5MyAgCisjZGVmaW5lIEZCX0FDQ0VMX05FT01BR0lDX05NMjE2MCA5NCAgCisjZGVmaW5lIEZCX0FDQ0VMX05FT01BR0lDX05NMjIwMCA5NSAgCisjZGVmaW5lIEZCX0FDQ0VMX05FT01BR0lDX05NMjIzMCA5NiAgCisjZGVmaW5lIEZCX0FDQ0VMX05FT01BR0lDX05NMjM2MCA5NyAgCisjZGVmaW5lIEZCX0FDQ0VMX05FT01BR0lDX05NMjM4MCA5OCAgCisKKyNkZWZpbmUgRkJfQUNDRUxfU0FWQUdFNCAweDgwICAKKyNkZWZpbmUgRkJfQUNDRUxfU0FWQUdFM0QgMHg4MSAgCisjZGVmaW5lIEZCX0FDQ0VMX1NBVkFHRTNEX01WIDB4ODIgIAorI2RlZmluZSBGQl9BQ0NFTF9TQVZBR0UyMDAwIDB4ODMgIAorI2RlZmluZSBGQl9BQ0NFTF9TQVZBR0VfTVhfTVYgMHg4NCAgCisjZGVmaW5lIEZCX0FDQ0VMX1NBVkFHRV9NWCAweDg1ICAKKyNkZWZpbmUgRkJfQUNDRUxfU0FWQUdFX0lYX01WIDB4ODYgIAorI2RlZmluZSBGQl9BQ0NFTF9TQVZBR0VfSVggMHg4NyAgCisjZGVmaW5lIEZCX0FDQ0VMX1BST1NBVkFHRV9QTSAweDg4ICAKKyNkZWZpbmUgRkJfQUNDRUxfUFJPU0FWQUdFX0tNIDB4ODkgIAorI2RlZmluZSBGQl9BQ0NFTF9TM1RXSVNURVJfUCAweDhhICAKKyNkZWZpbmUgRkJfQUNDRUxfUzNUV0lTVEVSX0sgMHg4YiAgCisjZGVmaW5lIEZCX0FDQ0VMX1NVUEVSU0FWQUdFIDB4OGMgIAorI2RlZmluZSBGQl9BQ0NFTF9QUk9TQVZBR0VfRERSIDB4OGQgIAorI2RlZmluZSBGQl9BQ0NFTF9QUk9TQVZBR0VfRERSSyAweDhlICAKKworc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvIHsKKyBjaGFyIGlkWzE2XTsKKyB1bnNpZ25lZCBsb25nIHNtZW1fc3RhcnQ7CisKKyBfX3UzMiBzbWVtX2xlbjsKKyBfX3UzMiB0eXBlOworIF9fdTMyIHR5cGVfYXV4OworIF9fdTMyIHZpc3VhbDsKKyBfX3UxNiB4cGFuc3RlcDsKKyBfX3UxNiB5cGFuc3RlcDsKKyBfX3UxNiB5d3JhcHN0ZXA7CisgX191MzIgbGluZV9sZW5ndGg7CisgdW5zaWduZWQgbG9uZyBtbWlvX3N0YXJ0OworCisgX191MzIgbW1pb19sZW47CisgX191MzIgYWNjZWw7CisKKyBfX3UxNiByZXNlcnZlZFszXTsKK307CisKK3N0cnVjdCBmYl9iaXRmaWVsZCB7CisgX191MzIgb2Zmc2V0OworIF9fdTMyIGxlbmd0aDsKKyBfX3UzMiBtc2JfcmlnaHQ7CisKK307CisKKyNkZWZpbmUgRkJfTk9OU1REX0hBTSAxICAKKworI2RlZmluZSBGQl9BQ1RJVkFURV9OT1cgMCAgCisjZGVmaW5lIEZCX0FDVElWQVRFX05YVE9QRU4gMSAgCisjZGVmaW5lIEZCX0FDVElWQVRFX1RFU1QgMiAgCisjZGVmaW5lIEZCX0FDVElWQVRFX01BU0sgMTUKKworI2RlZmluZSBGQl9BQ1RJVkFURV9WQkwgMTYgIAorI2RlZmluZSBGQl9DSEFOR0VfQ01BUF9WQkwgMzIgIAorI2RlZmluZSBGQl9BQ1RJVkFURV9BTEwgNjQgIAorI2RlZmluZSBGQl9BQ1RJVkFURV9GT1JDRSAxMjggIAorI2RlZmluZSBGQl9BQ1RJVkFURV9JTlZfTU9ERSAyNTYgIAorCisjZGVmaW5lIEZCX0FDQ0VMRl9URVhUIDEgIAorCisjZGVmaW5lIEZCX1NZTkNfSE9SX0hJR0hfQUNUIDEgIAorI2RlZmluZSBGQl9TWU5DX1ZFUlRfSElHSF9BQ1QgMiAgCisjZGVmaW5lIEZCX1NZTkNfRVhUIDQgIAorI2RlZmluZSBGQl9TWU5DX0NPTVBfSElHSF9BQ1QgOCAgCisjZGVmaW5lIEZCX1NZTkNfQlJPQURDQVNUIDE2ICAKKworI2RlZmluZSBGQl9TWU5DX09OX0dSRUVOIDMyICAKKworI2RlZmluZSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VEIDAgIAorI2RlZmluZSBGQl9WTU9ERV9JTlRFUkxBQ0VEIDEgIAorI2RlZmluZSBGQl9WTU9ERV9ET1VCTEUgMiAgCisjZGVmaW5lIEZCX1ZNT0RFX01BU0sgMjU1CisKKyNkZWZpbmUgRkJfVk1PREVfWVdSQVAgMjU2ICAKKyNkZWZpbmUgRkJfVk1PREVfU01PT1RIX1hQQU4gNTEyICAKKyNkZWZpbmUgRkJfVk1PREVfQ09OVVBEQVRFIDUxMiAgCisKKyNkZWZpbmUgRkJfUk9UQVRFX1VSIDAKKyNkZWZpbmUgRkJfUk9UQVRFX0NXIDEKKyNkZWZpbmUgRkJfUk9UQVRFX1VEIDIKKyNkZWZpbmUgRkJfUk9UQVRFX0NDVyAzCisKKyNkZWZpbmUgUElDT1MyS0haKGEpICgxMDAwMDAwMDAwVUwvKGEpKQorI2RlZmluZSBLSFoyUElDT1MoYSkgKDEwMDAwMDAwMDBVTC8oYSkpCisKK3N0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyB7CisgX191MzIgeHJlczsKKyBfX3UzMiB5cmVzOworIF9fdTMyIHhyZXNfdmlydHVhbDsKKyBfX3UzMiB5cmVzX3ZpcnR1YWw7CisgX191MzIgeG9mZnNldDsKKyBfX3UzMiB5b2Zmc2V0OworCisgX191MzIgYml0c19wZXJfcGl4ZWw7CisgX191MzIgZ3JheXNjYWxlOworCisgc3RydWN0IGZiX2JpdGZpZWxkIHJlZDsKKyBzdHJ1Y3QgZmJfYml0ZmllbGQgZ3JlZW47Cisgc3RydWN0IGZiX2JpdGZpZWxkIGJsdWU7Cisgc3RydWN0IGZiX2JpdGZpZWxkIHRyYW5zcDsKKworIF9fdTMyIG5vbnN0ZDsKKworIF9fdTMyIGFjdGl2YXRlOworCisgX191MzIgaGVpZ2h0OworIF9fdTMyIHdpZHRoOworCisgX191MzIgYWNjZWxfZmxhZ3M7CisKKyBfX3UzMiBwaXhjbG9jazsKKyBfX3UzMiBsZWZ0X21hcmdpbjsKKyBfX3UzMiByaWdodF9tYXJnaW47CisgX191MzIgdXBwZXJfbWFyZ2luOworIF9fdTMyIGxvd2VyX21hcmdpbjsKKyBfX3UzMiBoc3luY19sZW47CisgX191MzIgdnN5bmNfbGVuOworIF9fdTMyIHN5bmM7CisgX191MzIgdm1vZGU7CisgX191MzIgcm90YXRlOworIF9fdTMyIHJlc2VydmVkWzVdOworfTsKKworc3RydWN0IGZiX2NtYXAgeworIF9fdTMyIHN0YXJ0OworIF9fdTMyIGxlbjsKKyBfX3UxNiAqcmVkOworIF9fdTE2ICpncmVlbjsKKyBfX3UxNiAqYmx1ZTsKKyBfX3UxNiAqdHJhbnNwOworfTsKKworc3RydWN0IGZiX2NvbjJmYm1hcCB7CisgX191MzIgY29uc29sZTsKKyBfX3UzMiBmcmFtZWJ1ZmZlcjsKK307CisKKyNkZWZpbmUgVkVTQV9OT19CTEFOS0lORyAwCisjZGVmaW5lIFZFU0FfVlNZTkNfU1VTUEVORCAxCisjZGVmaW5lIFZFU0FfSFNZTkNfU1VTUEVORCAyCisjZGVmaW5lIFZFU0FfUE9XRVJET1dOIDMKKworZW51bSB7CisKKyBGQl9CTEFOS19VTkJMQU5LID0gVkVTQV9OT19CTEFOS0lORywKKworIEZCX0JMQU5LX05PUk1BTCA9IFZFU0FfTk9fQkxBTktJTkcgKyAxLAorCisgRkJfQkxBTktfVlNZTkNfU1VTUEVORCA9IFZFU0FfVlNZTkNfU1VTUEVORCArIDEsCisKKyBGQl9CTEFOS19IU1lOQ19TVVNQRU5EID0gVkVTQV9IU1lOQ19TVVNQRU5EICsgMSwKKworIEZCX0JMQU5LX1BPV0VSRE9XTiA9IFZFU0FfUE9XRVJET1dOICsgMQorfTsKKworI2RlZmluZSBGQl9WQkxBTktfVkJMQU5LSU5HIDB4MDAxICAKKyNkZWZpbmUgRkJfVkJMQU5LX0hCTEFOS0lORyAweDAwMiAgCisjZGVmaW5lIEZCX1ZCTEFOS19IQVZFX1ZCTEFOSyAweDAwNCAgCisjZGVmaW5lIEZCX1ZCTEFOS19IQVZFX0hCTEFOSyAweDAwOCAgCisjZGVmaW5lIEZCX1ZCTEFOS19IQVZFX0NPVU5UIDB4MDEwICAKKyNkZWZpbmUgRkJfVkJMQU5LX0hBVkVfVkNPVU5UIDB4MDIwICAKKyNkZWZpbmUgRkJfVkJMQU5LX0hBVkVfSENPVU5UIDB4MDQwICAKKyNkZWZpbmUgRkJfVkJMQU5LX1ZTWU5DSU5HIDB4MDgwICAKKyNkZWZpbmUgRkJfVkJMQU5LX0hBVkVfVlNZTkMgMHgxMDAgIAorCitzdHJ1Y3QgZmJfdmJsYW5rIHsKKyBfX3UzMiBmbGFnczsKKyBfX3UzMiBjb3VudDsKKyBfX3UzMiB2Y291bnQ7CisgX191MzIgaGNvdW50OworIF9fdTMyIHJlc2VydmVkWzRdOworfTsKKworI2RlZmluZSBST1BfQ09QWSAwCisjZGVmaW5lIFJPUF9YT1IgMQorCitzdHJ1Y3QgZmJfY29weWFyZWEgeworIF9fdTMyIGR4OworIF9fdTMyIGR5OworIF9fdTMyIHdpZHRoOworIF9fdTMyIGhlaWdodDsKKyBfX3UzMiBzeDsKKyBfX3UzMiBzeTsKK307CisKK3N0cnVjdCBmYl9maWxscmVjdCB7CisgX191MzIgZHg7CisgX191MzIgZHk7CisgX191MzIgd2lkdGg7CisgX191MzIgaGVpZ2h0OworIF9fdTMyIGNvbG9yOworIF9fdTMyIHJvcDsKK307CisKK3N0cnVjdCBmYl9pbWFnZSB7CisgX191MzIgZHg7CisgX191MzIgZHk7CisgX191MzIgd2lkdGg7CisgX191MzIgaGVpZ2h0OworIF9fdTMyIGZnX2NvbG9yOworIF9fdTMyIGJnX2NvbG9yOworIF9fdTggZGVwdGg7CisgY29uc3QgY2hhciAqZGF0YTsKKyBzdHJ1Y3QgZmJfY21hcCBjbWFwOworfTsKKworI2RlZmluZSBGQl9DVVJfU0VUSU1BR0UgMHgwMQorI2RlZmluZSBGQl9DVVJfU0VUUE9TIDB4MDIKKyNkZWZpbmUgRkJfQ1VSX1NFVEhPVCAweDA0CisjZGVmaW5lIEZCX0NVUl9TRVRDTUFQIDB4MDgKKyNkZWZpbmUgRkJfQ1VSX1NFVFNIQVBFIDB4MTAKKyNkZWZpbmUgRkJfQ1VSX1NFVFNJWkUgMHgyMAorI2RlZmluZSBGQl9DVVJfU0VUQUxMIDB4RkYKKworc3RydWN0IGZiY3VycG9zIHsKKyBfX3UxNiB4LCB5OworfTsKKworc3RydWN0IGZiX2N1cnNvciB7CisgX191MTYgc2V0OworIF9fdTE2IGVuYWJsZTsKKyBfX3UxNiByb3A7CisgY29uc3QgY2hhciAqbWFzazsKKyBzdHJ1Y3QgZmJjdXJwb3MgaG90OworIHN0cnVjdCBmYl9pbWFnZSBpbWFnZTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2ZjbnRsLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZmNudGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjNlODdhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2ZjbnRsLmgKQEAgLTAsMCArMSwzNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfRkNOVExfSAorI2RlZmluZSBfTElOVVhfRkNOVExfSAorCisjaW5jbHVkZSA8YXNtL2ZjbnRsLmg+CisKKyNkZWZpbmUgRl9TRVRMRUFTRSAoRl9MSU5VWF9TUEVDSUZJQ19CQVNFKzApCisjZGVmaW5lIEZfR0VUTEVBU0UgKEZfTElOVVhfU1BFQ0lGSUNfQkFTRSsxKQorCisjZGVmaW5lIEZfTk9USUZZIChGX0xJTlVYX1NQRUNJRklDX0JBU0UrMikKKworI2RlZmluZSBETl9BQ0NFU1MgMHgwMDAwMDAwMSAgCisjZGVmaW5lIEROX01PRElGWSAweDAwMDAwMDAyICAKKyNkZWZpbmUgRE5fQ1JFQVRFIDB4MDAwMDAwMDQgIAorI2RlZmluZSBETl9ERUxFVEUgMHgwMDAwMDAwOCAgCisjZGVmaW5lIEROX1JFTkFNRSAweDAwMDAwMDEwICAKKyNkZWZpbmUgRE5fQVRUUklCIDB4MDAwMDAwMjAgIAorI2RlZmluZSBETl9NVUxUSVNIT1QgMHg4MDAwMDAwMCAgCisKKyNkZWZpbmUgQVRfRkRDV0QgLTEwMCAgCisjZGVmaW5lIEFUX1NZTUxJTktfTk9GT0xMT1cgMHgxMDAgIAorI2RlZmluZSBBVF9SRU1PVkVESVIgMHgyMDAgIAorI2RlZmluZSBBVF9TWU1MSU5LX0ZPTExPVyAweDQwMCAgCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2ZkLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2JlZGQxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2ZkLmgKQEAgLTAsMCArMSwyNTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX0ZEX0gKKyNkZWZpbmUgX0xJTlVYX0ZEX0gKKworI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKworc3RydWN0IGZsb3BweV9zdHJ1Y3QgeworIHVuc2lnbmVkIGludCBzaXplLAorIHNlY3QsCisgaGVhZCwKKyB0cmFjaywKKyBzdHJldGNoOworI2RlZmluZSBGRF9TVFJFVENIIDEKKyNkZWZpbmUgRkRfU1dBUFNJREVTIDIKKyNkZWZpbmUgRkRfWkVST0JBU0VEIDQKKworIHVuc2lnbmVkIGNoYXIgZ2FwLAorCisgcmF0ZSwKKyNkZWZpbmUgRkRfMk0gMHg0CisjZGVmaW5lIEZEX1NJWkVDT0RFTUFTSyAweDM4CisjZGVmaW5lIEZEX1NJWkVDT0RFKGZsb3BweSkgKCgoKChmbG9wcHkpLT5yYXRlJkZEX1NJWkVDT0RFTUFTSyk+PiAzKSsgMikgJTgpCisjZGVmaW5lIEZEX1NFQ1RTSVpFKGZsb3BweSkgKCAoZmxvcHB5KS0+cmF0ZSAmIEZEXzJNID8gICA1MTIgOiAxMjggPDwgRkRfU0laRUNPREUoZmxvcHB5KSApCisjZGVmaW5lIEZEX1BFUlAgMHg0MAorCisgc3BlYzEsCisgZm10X2dhcDsKKyBjb25zdCBjaGFyICogbmFtZTsKK307CisKKyNkZWZpbmUgRkRDTFJQUk0gX0lPKDIsIDB4NDEpCisKKyNkZWZpbmUgRkRTRVRQUk0gX0lPVygyLCAweDQyLCBzdHJ1Y3QgZmxvcHB5X3N0cnVjdCkgCisjZGVmaW5lIEZEU0VUTUVESUFQUk0gRkRTRVRQUk0KKworI2RlZmluZSBGRERFRlBSTSBfSU9XKDIsIDB4NDMsIHN0cnVjdCBmbG9wcHlfc3RydWN0KSAKKyNkZWZpbmUgRkRHRVRQUk0gX0lPUigyLCAweDA0LCBzdHJ1Y3QgZmxvcHB5X3N0cnVjdCkKKyNkZWZpbmUgRkRERUZNRURJQVBSTSBGRERFRlBSTQorI2RlZmluZSBGREdFVE1FRElBUFJNIEZER0VUUFJNCisKKyNkZWZpbmUgRkRNU0dPTiBfSU8oMiwweDQ1KQorI2RlZmluZSBGRE1TR09GRiBfSU8oMiwweDQ2KQorCisjZGVmaW5lIEZEX0ZJTExfQllURSAweEY2ICAKKworc3RydWN0IGZvcm1hdF9kZXNjciB7CisgdW5zaWduZWQgaW50IGRldmljZSxoZWFkLHRyYWNrOworfTsKKworI2RlZmluZSBGREZNVEJFRyBfSU8oMiwweDQ3KQorCisjZGVmaW5lIEZERk1UVFJLIF9JT1coMiwweDQ4LCBzdHJ1Y3QgZm9ybWF0X2Rlc2NyKQorCisjZGVmaW5lIEZERk1URU5EIF9JTygyLDB4NDkpCisKK3N0cnVjdCBmbG9wcHlfbWF4X2Vycm9ycyB7CisgdW5zaWduZWQgaW50CisgYWJvcnQsCisgcmVhZF90cmFjaywKKyByZXNldCwKKyByZWNhbCwKKworIHJlcG9ydGluZzsKKworfTsKKworI2RlZmluZSBGRFNFVEVNU0dUUkVTSCBfSU8oMiwweDRhKQorCisjZGVmaW5lIEZERkxVU0ggX0lPKDIsMHg0YikKKworI2RlZmluZSBGRFNFVE1BWEVSUlMgX0lPVygyLCAweDRjLCBzdHJ1Y3QgZmxvcHB5X21heF9lcnJvcnMpCisjZGVmaW5lIEZER0VUTUFYRVJSUyBfSU9SKDIsIDB4MGUsIHN0cnVjdCBmbG9wcHlfbWF4X2Vycm9ycykKKwordHlwZWRlZiBjaGFyIGZsb3BweV9kcml2ZV9uYW1lWzE2XTsKKyNkZWZpbmUgRkRHRVREUlZUWVAgX0lPUigyLCAweDBmLCBmbG9wcHlfZHJpdmVfbmFtZSkKKworc3RydWN0IGZsb3BweV9kcml2ZV9wYXJhbXMgeworIHNpZ25lZCBjaGFyIGNtb3M7CisKKyB1bnNpZ25lZCBsb25nIG1heF9kdHI7CisgdW5zaWduZWQgbG9uZyBobHQ7CisgdW5zaWduZWQgbG9uZyBodXQ7CisgdW5zaWduZWQgbG9uZyBzcnQ7CisKKyB1bnNpZ25lZCBsb25nIHNwaW51cDsKKyB1bnNpZ25lZCBsb25nIHNwaW5kb3duOworIHVuc2lnbmVkIGNoYXIgc3BpbmRvd25fb2Zmc2V0OworIHVuc2lnbmVkIGNoYXIgc2VsZWN0X2RlbGF5OworIHVuc2lnbmVkIGNoYXIgcnBzOworIHVuc2lnbmVkIGNoYXIgdHJhY2tzOworIHVuc2lnbmVkIGxvbmcgdGltZW91dDsKKworIHVuc2lnbmVkIGNoYXIgaW50ZXJsZWF2ZV9zZWN0OworCisgc3RydWN0IGZsb3BweV9tYXhfZXJyb3JzIG1heF9lcnJvcnM7CisKKyBjaGFyIGZsYWdzOworCisjZGVmaW5lIEZURF9NU0cgMHgxMAorI2RlZmluZSBGRF9CUk9LRU5fRENMIDB4MjAKKyNkZWZpbmUgRkRfREVCVUcgMHgwMgorI2RlZmluZSBGRF9TSUxFTlRfRENMX0NMRUFSIDB4NAorI2RlZmluZSBGRF9JTlZFUlRFRF9EQ0wgMHg4MCAgCisKKyBjaGFyIHJlYWRfdHJhY2s7CisKKyBzaG9ydCBhdXRvZGV0ZWN0WzhdOworCisgaW50IGNoZWNrZnJlcTsKKyBpbnQgbmF0aXZlX2Zvcm1hdDsKK307CisKK2VudW0geworIEZEX05FRURfVFdBRERMRV9CSVQsCisgRkRfVkVSSUZZX0JJVCwKKyBGRF9ESVNLX05FV0NIQU5HRV9CSVQsCisgRkRfVU5VU0VEX0JJVCwKKyBGRF9ESVNLX0NIQU5HRURfQklULAorIEZEX0RJU0tfV1JJVEFCTEVfQklUCit9OworCisjZGVmaW5lIEZEU0VURFJWUFJNIF9JT1coMiwgMHg5MCwgc3RydWN0IGZsb3BweV9kcml2ZV9wYXJhbXMpCisjZGVmaW5lIEZER0VURFJWUFJNIF9JT1IoMiwgMHgxMSwgc3RydWN0IGZsb3BweV9kcml2ZV9wYXJhbXMpCisKK3N0cnVjdCBmbG9wcHlfZHJpdmVfc3RydWN0IHsKKyB1bnNpZ25lZCBsb25nIGZsYWdzOworCisjZGVmaW5lIEZEX05FRURfVFdBRERMRSAoMSA8PCBGRF9ORUVEX1RXQURETEVfQklUKQorI2RlZmluZSBGRF9WRVJJRlkgKDEgPDwgRkRfVkVSSUZZX0JJVCkKKyNkZWZpbmUgRkRfRElTS19ORVdDSEFOR0UgKDEgPDwgRkRfRElTS19ORVdDSEFOR0VfQklUKQorI2RlZmluZSBGRF9ESVNLX0NIQU5HRUQgKDEgPDwgRkRfRElTS19DSEFOR0VEX0JJVCkKKyNkZWZpbmUgRkRfRElTS19XUklUQUJMRSAoMSA8PCBGRF9ESVNLX1dSSVRBQkxFX0JJVCkKKworIHVuc2lnbmVkIGxvbmcgc3BpbnVwX2RhdGU7CisgdW5zaWduZWQgbG9uZyBzZWxlY3RfZGF0ZTsKKyB1bnNpZ25lZCBsb25nIGZpcnN0X3JlYWRfZGF0ZTsKKyBzaG9ydCBwcm9iZWRfZm9ybWF0OworIHNob3J0IHRyYWNrOworIHNob3J0IG1heGJsb2NrOworIHNob3J0IG1heHRyYWNrOworIGludCBnZW5lcmF0aW9uOworCisgaW50IGtlZXBfZGF0YTsKKworIGludCBmZF9yZWY7CisgaW50IGZkX2RldmljZTsKKyB1bnNpZ25lZCBsb25nIGxhc3RfY2hlY2tlZDsKKworIGNoYXIgKmRtYWJ1ZjsKKyBpbnQgYnVmYmxvY2tzOworfTsKKworI2RlZmluZSBGREdFVERSVlNUQVQgX0lPUigyLCAweDEyLCBzdHJ1Y3QgZmxvcHB5X2RyaXZlX3N0cnVjdCkKKyNkZWZpbmUgRkRQT0xMRFJWU1RBVCBfSU9SKDIsIDB4MTMsIHN0cnVjdCBmbG9wcHlfZHJpdmVfc3RydWN0KQorCitlbnVtIHJlc2V0X21vZGUgeworIEZEX1JFU0VUX0lGX05FRURFRCwKKyBGRF9SRVNFVF9JRl9SQVdDTUQsCisgRkRfUkVTRVRfQUxXQVlTCit9OworI2RlZmluZSBGRFJFU0VUIF9JTygyLCAweDU0KQorCitzdHJ1Y3QgZmxvcHB5X2ZkY19zdGF0ZSB7CisgaW50IHNwZWMxOworIGludCBzcGVjMjsKKyBpbnQgZHRyOworIHVuc2lnbmVkIGNoYXIgdmVyc2lvbjsKKyB1bnNpZ25lZCBjaGFyIGRvcjsKKyB1bnNpZ25lZCBsb25nIGFkZHJlc3M7CisgdW5zaWduZWQgaW50IHJhd2NtZDoyOworIHVuc2lnbmVkIGludCByZXNldDoxOworIHVuc2lnbmVkIGludCBuZWVkX2NvbmZpZ3VyZToxOworIHVuc2lnbmVkIGludCBwZXJwX21vZGU6MjsKKyB1bnNpZ25lZCBpbnQgaGFzX2ZpZm86MTsKKyB1bnNpZ25lZCBpbnQgZHJpdmVyX3ZlcnNpb247CisjZGVmaW5lIEZEX0RSSVZFUl9WRVJTSU9OIDB4MTAwCisKKyB1bnNpZ25lZCBjaGFyIHRyYWNrWzRdOworCit9OworCisjZGVmaW5lIEZER0VURkRDU1RBVCBfSU9SKDIsIDB4MTUsIHN0cnVjdCBmbG9wcHlfZmRjX3N0YXRlKQorCitzdHJ1Y3QgZmxvcHB5X3dyaXRlX2Vycm9ycyB7CisKKyB1bnNpZ25lZCBpbnQgd3JpdGVfZXJyb3JzOworCisgdW5zaWduZWQgbG9uZyBmaXJzdF9lcnJvcl9zZWN0b3I7CisgaW50IGZpcnN0X2Vycm9yX2dlbmVyYXRpb247CisgdW5zaWduZWQgbG9uZyBsYXN0X2Vycm9yX3NlY3RvcjsKKyBpbnQgbGFzdF9lcnJvcl9nZW5lcmF0aW9uOworCisgdW5zaWduZWQgaW50IGJhZG5lc3M7Cit9OworCisjZGVmaW5lIEZEV0VSUk9SQ0xSIF9JTygyLCAweDU2KQorCisjZGVmaW5lIEZEV0VSUk9SR0VUIF9JT1IoMiwgMHgxNywgc3RydWN0IGZsb3BweV93cml0ZV9lcnJvcnMpCisKKyNkZWZpbmUgRkRIQVZFQkFUQ0hFRFJBV0NNRAorCitzdHJ1Y3QgZmxvcHB5X3Jhd19jbWQgeworIHVuc2lnbmVkIGludCBmbGFnczsKKyNkZWZpbmUgRkRfUkFXX1JFQUQgMQorI2RlZmluZSBGRF9SQVdfV1JJVEUgMgorI2RlZmluZSBGRF9SQVdfTk9fTU9UT1IgNAorI2RlZmluZSBGRF9SQVdfRElTS19DSEFOR0UgNCAgCisjZGVmaW5lIEZEX1JBV19JTlRSIDggIAorI2RlZmluZSBGRF9SQVdfU1BJTiAweDEwICAKKyNkZWZpbmUgRkRfUkFXX05PX01PVE9SX0FGVEVSIDB4MjAgIAorI2RlZmluZSBGRF9SQVdfTkVFRF9ESVNLIDB4NDAgIAorI2RlZmluZSBGRF9SQVdfTkVFRF9TRUVLIDB4ODAgIAorCisjZGVmaW5lIEZEX1JBV19NT1JFIDB4MTAwICAKKyNkZWZpbmUgRkRfUkFXX1NUT1BfSUZfRkFJTFVSRSAweDIwMCAgCisjZGVmaW5lIEZEX1JBV19TVE9QX0lGX1NVQ0NFU1MgMHg0MDAgIAorI2RlZmluZSBGRF9SQVdfU09GVEZBSUxVUkUgMHg4MDAgIAorCisjZGVmaW5lIEZEX1JBV19GQUlMVVJFIDB4MTAwMDAgIAorI2RlZmluZSBGRF9SQVdfSEFSREZBSUxVUkUgMHgyMDAwMCAgCisKKyB2b2lkIF9fdXNlciAqZGF0YTsKKyBjaGFyICprZXJuZWxfZGF0YTsKKyBzdHJ1Y3QgZmxvcHB5X3Jhd19jbWQgKm5leHQ7CisgbG9uZyBsZW5ndGg7CisgbG9uZyBwaHlzX2xlbmd0aDsKKyBpbnQgYnVmZmVyX2xlbmd0aDsKKworIHVuc2lnbmVkIGNoYXIgcmF0ZTsKKyB1bnNpZ25lZCBjaGFyIGNtZF9jb3VudDsKKyB1bnNpZ25lZCBjaGFyIGNtZFsxNl07CisgdW5zaWduZWQgY2hhciByZXBseV9jb3VudDsKKyB1bnNpZ25lZCBjaGFyIHJlcGx5WzE2XTsKKyBpbnQgdHJhY2s7CisgaW50IHJlc3VsdGNvZGU7CisKKyBpbnQgcmVzZXJ2ZWQxOworIGludCByZXNlcnZlZDI7Cit9OworCisjZGVmaW5lIEZEUkFXQ01EIF9JTygyLCAweDU4KQorCisjZGVmaW5lIEZEVFdBRERMRSBfSU8oMiwgMHg1OSkKKworI2RlZmluZSBGREVKRUNUIF9JTygyLCAweDVhKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9maWxlLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZmlsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3ZTU3MGIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZmlsZS5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19MSU5VWF9GSUxFX0gKKyNkZWZpbmUgX19MSU5VWF9GSUxFX0gKKworI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxsaW51eC9wb3NpeF90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNkZWZpbmUgTlJfT1BFTl9ERUZBVUxUIEJJVFNfUEVSX0xPTkcKKworc3RydWN0IGVtYmVkZGVkX2ZkX3NldCB7CisgdW5zaWduZWQgbG9uZyBmZHNfYml0c1sxXTsKK307CisKKyNkZWZpbmUgRU1CRURERURfRkRfU0VUX1NJWkUgKEJJVFNfUEVSX0JZVEUgKiBzaXplb2Yoc3RydWN0IGVtYmVkZGVkX2ZkX3NldCkpCisKK3N0cnVjdCBmZHRhYmxlIHsKKyB1bnNpZ25lZCBpbnQgbWF4X2ZkczsKKyBpbnQgbWF4X2Zkc2V0OworIHN0cnVjdCBmaWxlICoqIGZkOworIGZkX3NldCAqY2xvc2Vfb25fZXhlYzsKKyBmZF9zZXQgKm9wZW5fZmRzOworIHN0cnVjdCByY3VfaGVhZCByY3U7Cisgc3RydWN0IGZpbGVzX3N0cnVjdCAqZnJlZV9maWxlczsKKyBzdHJ1Y3QgZmR0YWJsZSAqbmV4dDsKK307CisKK3N0cnVjdCBmaWxlc19zdHJ1Y3QgeworCisgYXRvbWljX3QgY291bnQ7Cisgc3RydWN0IGZkdGFibGUgKmZkdDsKKyBzdHJ1Y3QgZmR0YWJsZSBmZHRhYjsKKworIHNwaW5sb2NrX3QgZmlsZV9sb2NrIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7CisgaW50IG5leHRfZmQ7Cisgc3RydWN0IGVtYmVkZGVkX2ZkX3NldCBjbG9zZV9vbl9leGVjX2luaXQ7Cisgc3RydWN0IGVtYmVkZGVkX2ZkX3NldCBvcGVuX2Zkc19pbml0OworIHN0cnVjdCBmaWxlICogZmRfYXJyYXlbTlJfT1BFTl9ERUZBVUxUXTsKK307CisKKyNkZWZpbmUgZmlsZXNfZmR0YWJsZShmaWxlcykgKHJjdV9kZXJlZmVyZW5jZSgoZmlsZXMpLT5mZHQpKQorCitzdHJ1Y3Qga21lbV9jYWNoZTsKKworI2RlZmluZSBmY2hlY2soZmQpIGZjaGVja19maWxlcyhjdXJyZW50LT5maWxlcywgZmQpCisKK3N0cnVjdCB0YXNrX3N0cnVjdDsKKworc3RydWN0IGZpbGVzX3N0cnVjdCAqZ2V0X2ZpbGVzX3N0cnVjdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2ZpbHRlci5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2ZpbHRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4NThhMGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZmlsdGVyLmgKQEAgLTAsMCArMSwxMDQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19MSU5VWF9GSUxURVJfSF9fCisjZGVmaW5lIF9fTElOVVhfRklMVEVSX0hfXworCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjZGVmaW5lIEJQRl9NQUpPUl9WRVJTSU9OIDEKKyNkZWZpbmUgQlBGX01JTk9SX1ZFUlNJT04gMQorCitzdHJ1Y3Qgc29ja19maWx0ZXIKK3sKKyBfX3UxNiBjb2RlOworIF9fdTgganQ7CisgX191OCBqZjsKKyBfX3UzMiBrOworfTsKKworc3RydWN0IHNvY2tfZnByb2cKK3sKKyB1bnNpZ25lZCBzaG9ydCBsZW47Cisgc3RydWN0IHNvY2tfZmlsdGVyIF9fdXNlciAqZmlsdGVyOworfTsKKworI2RlZmluZSBCUEZfQ0xBU1MoY29kZSkgKChjb2RlKSAmIDB4MDcpCisjZGVmaW5lIEJQRl9MRCAweDAwCisjZGVmaW5lIEJQRl9MRFggMHgwMQorI2RlZmluZSBCUEZfU1QgMHgwMgorI2RlZmluZSBCUEZfU1RYIDB4MDMKKyNkZWZpbmUgQlBGX0FMVSAweDA0CisjZGVmaW5lIEJQRl9KTVAgMHgwNQorI2RlZmluZSBCUEZfUkVUIDB4MDYKKyNkZWZpbmUgQlBGX01JU0MgMHgwNworCisjZGVmaW5lIEJQRl9TSVpFKGNvZGUpICgoY29kZSkgJiAweDE4KQorI2RlZmluZSBCUEZfVyAweDAwCisjZGVmaW5lIEJQRl9IIDB4MDgKKyNkZWZpbmUgQlBGX0IgMHgxMAorI2RlZmluZSBCUEZfTU9ERShjb2RlKSAoKGNvZGUpICYgMHhlMCkKKyNkZWZpbmUgQlBGX0lNTSAweDAwCisjZGVmaW5lIEJQRl9BQlMgMHgyMAorI2RlZmluZSBCUEZfSU5EIDB4NDAKKyNkZWZpbmUgQlBGX01FTSAweDYwCisjZGVmaW5lIEJQRl9MRU4gMHg4MAorI2RlZmluZSBCUEZfTVNIIDB4YTAKKworI2RlZmluZSBCUEZfT1AoY29kZSkgKChjb2RlKSAmIDB4ZjApCisjZGVmaW5lIEJQRl9BREQgMHgwMAorI2RlZmluZSBCUEZfU1VCIDB4MTAKKyNkZWZpbmUgQlBGX01VTCAweDIwCisjZGVmaW5lIEJQRl9ESVYgMHgzMAorI2RlZmluZSBCUEZfT1IgMHg0MAorI2RlZmluZSBCUEZfQU5EIDB4NTAKKyNkZWZpbmUgQlBGX0xTSCAweDYwCisjZGVmaW5lIEJQRl9SU0ggMHg3MAorI2RlZmluZSBCUEZfTkVHIDB4ODAKKyNkZWZpbmUgQlBGX0pBIDB4MDAKKyNkZWZpbmUgQlBGX0pFUSAweDEwCisjZGVmaW5lIEJQRl9KR1QgMHgyMAorI2RlZmluZSBCUEZfSkdFIDB4MzAKKyNkZWZpbmUgQlBGX0pTRVQgMHg0MAorI2RlZmluZSBCUEZfU1JDKGNvZGUpICgoY29kZSkgJiAweDA4KQorI2RlZmluZSBCUEZfSyAweDAwCisjZGVmaW5lIEJQRl9YIDB4MDgKKworI2RlZmluZSBCUEZfUlZBTChjb2RlKSAoKGNvZGUpICYgMHgxOCkKKyNkZWZpbmUgQlBGX0EgMHgxMAorCisjZGVmaW5lIEJQRl9NSVNDT1AoY29kZSkgKChjb2RlKSAmIDB4ZjgpCisjZGVmaW5lIEJQRl9UQVggMHgwMAorI2RlZmluZSBCUEZfVFhBIDB4ODAKKworI2lmbmRlZiBCUEZfTUFYSU5TTlMKKyNkZWZpbmUgQlBGX01BWElOU05TIDQwOTYKKyNlbmRpZgorCisjaWZuZGVmIEJQRl9TVE1UCisjZGVmaW5lIEJQRl9TVE1UKGNvZGUsIGspIHsgKHVuc2lnbmVkIHNob3J0KShjb2RlKSwgMCwgMCwgayB9CisjZW5kaWYKKyNpZm5kZWYgQlBGX0pVTVAKKyNkZWZpbmUgQlBGX0pVTVAoY29kZSwgaywganQsIGpmKSB7ICh1bnNpZ25lZCBzaG9ydCkoY29kZSksIGp0LCBqZiwgayB9CisjZW5kaWYKKworI2RlZmluZSBCUEZfTUVNV09SRFMgMTYKKworI2RlZmluZSBTS0ZfQURfT0ZGICgtMHgxMDAwKQorI2RlZmluZSBTS0ZfQURfUFJPVE9DT0wgMAorI2RlZmluZSBTS0ZfQURfUEtUVFlQRSA0CisjZGVmaW5lIFNLRl9BRF9JRklOREVYIDgKKyNkZWZpbmUgU0tGX0FEX01BWCAxMgorI2RlZmluZSBTS0ZfTkVUX09GRiAoLTB4MTAwMDAwKQorI2RlZmluZSBTS0ZfTExfT0ZGICgtMHgyMDAwMDApCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2ZzLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDM3NWI1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2ZzLmgKQEAgLTAsMCArMSwxNjIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX0ZTX0gKKyNkZWZpbmUgX0xJTlVYX0ZTX0gKKworI2luY2x1ZGUgPGxpbnV4L2xpbWl0cy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisKKyN1bmRlZiBOUl9PUEVOCisjZGVmaW5lIE5SX09QRU4gKDEwMjQqMTAyNCkgIAorI2RlZmluZSBJTlJfT1BFTiAxMDI0ICAKKworI2RlZmluZSBCTE9DS19TSVpFX0JJVFMgMTAKKyNkZWZpbmUgQkxPQ0tfU0laRSAoMTw8QkxPQ0tfU0laRV9CSVRTKQorCisjZGVmaW5lIFNFRUtfU0VUIDAgIAorI2RlZmluZSBTRUVLX0NVUiAxICAKKyNkZWZpbmUgU0VFS19FTkQgMiAgCisKK3N0cnVjdCBmaWxlc19zdGF0X3N0cnVjdCB7CisgaW50IG5yX2ZpbGVzOworIGludCBucl9mcmVlX2ZpbGVzOworIGludCBtYXhfZmlsZXM7Cit9OworCitzdHJ1Y3QgaW5vZGVzX3N0YXRfdCB7CisgaW50IG5yX2lub2RlczsKKyBpbnQgbnJfdW51c2VkOworIGludCBkdW1teVs1XTsKK307CisKKyNkZWZpbmUgTlJfRklMRSA4MTkyICAKKworI2RlZmluZSBNQVlfRVhFQyAxCisjZGVmaW5lIE1BWV9XUklURSAyCisjZGVmaW5lIE1BWV9SRUFEIDQKKyNkZWZpbmUgTUFZX0FQUEVORCA4CisKKyNkZWZpbmUgRk1PREVfUkVBRCAxCisjZGVmaW5lIEZNT0RFX1dSSVRFIDIKKworI2RlZmluZSBGTU9ERV9MU0VFSyA0CisjZGVmaW5lIEZNT0RFX1BSRUFEIDgKKyNkZWZpbmUgRk1PREVfUFdSSVRFIEZNT0RFX1BSRUFEICAKKworI2RlZmluZSBGTU9ERV9FWEVDIDE2CisKKyNkZWZpbmUgUldfTUFTSyAxCisjZGVmaW5lIFJXQV9NQVNLIDIKKyNkZWZpbmUgUkVBRCAwCisjZGVmaW5lIFdSSVRFIDEKKyNkZWZpbmUgUkVBREEgMiAgCisjZGVmaW5lIFNXUklURSAzICAKKyNkZWZpbmUgU1BFQ0lBTCA0ICAKKyNkZWZpbmUgUkVBRF9TWU5DIChSRUFEIHwgKDEgPDwgQklPX1JXX1NZTkMpKQorI2RlZmluZSBXUklURV9TWU5DIChXUklURSB8ICgxIDw8IEJJT19SV19TWU5DKSkKKyNkZWZpbmUgV1JJVEVfQkFSUklFUiAoKDEgPDwgQklPX1JXKSB8ICgxIDw8IEJJT19SV19CQVJSSUVSKSkKKworI2RlZmluZSBTRUxfSU4gMQorI2RlZmluZSBTRUxfT1VUIDIKKyNkZWZpbmUgU0VMX0VYIDQKKworI2RlZmluZSBGU19SRVFVSVJFU19ERVYgMSAKKyNkZWZpbmUgRlNfQklOQVJZX01PVU5UREFUQSAyCisjZGVmaW5lIEZTX1JFVkFMX0RPVCAxNjM4NCAgCisjZGVmaW5lIEZTX09ERF9SRU5BTUUgMzI3NjggIAorCisjZGVmaW5lIE1TX1JET05MWSAxICAKKyNkZWZpbmUgTVNfTk9TVUlEIDIgIAorI2RlZmluZSBNU19OT0RFViA0ICAKKyNkZWZpbmUgTVNfTk9FWEVDIDggIAorI2RlZmluZSBNU19TWU5DSFJPTk9VUyAxNiAgCisjZGVmaW5lIE1TX1JFTU9VTlQgMzIgIAorI2RlZmluZSBNU19NQU5ETE9DSyA2NCAgCisjZGVmaW5lIE1TX0RJUlNZTkMgMTI4ICAKKyNkZWZpbmUgTVNfTk9BVElNRSAxMDI0ICAKKyNkZWZpbmUgTVNfTk9ESVJBVElNRSAyMDQ4ICAKKyNkZWZpbmUgTVNfQklORCA0MDk2CisjZGVmaW5lIE1TX01PVkUgODE5MgorI2RlZmluZSBNU19SRUMgMTYzODQKKyNkZWZpbmUgTVNfVkVSQk9TRSAzMjc2OCAgCisjZGVmaW5lIE1TX1NJTEVOVCAzMjc2OAorI2RlZmluZSBNU19QT1NJWEFDTCAoMTw8MTYpICAKKyNkZWZpbmUgTVNfVU5CSU5EQUJMRSAoMTw8MTcpICAKKyNkZWZpbmUgTVNfUFJJVkFURSAoMTw8MTgpICAKKyNkZWZpbmUgTVNfU0xBVkUgKDE8PDE5KSAgCisjZGVmaW5lIE1TX1NIQVJFRCAoMTw8MjApICAKKyNkZWZpbmUgTVNfQUNUSVZFICgxPDwzMCkKKyNkZWZpbmUgTVNfTk9VU0VSICgxPDwzMSkKKworI2RlZmluZSBNU19STVRfTUFTSyAoTVNfUkRPTkxZfE1TX1NZTkNIUk9OT1VTfE1TX01BTkRMT0NLKQorCisjZGVmaW5lIE1TX01HQ19WQUwgMHhDMEVEMDAwMAorI2RlZmluZSBNU19NR0NfTVNLIDB4ZmZmZjAwMDAKKworI2RlZmluZSBTX1NZTkMgMSAgCisjZGVmaW5lIFNfTk9BVElNRSAyICAKKyNkZWZpbmUgU19BUFBFTkQgNCAgCisjZGVmaW5lIFNfSU1NVVRBQkxFIDggIAorI2RlZmluZSBTX0RFQUQgMTYgIAorI2RlZmluZSBTX05PUVVPVEEgMzIgIAorI2RlZmluZSBTX0RJUlNZTkMgNjQgIAorI2RlZmluZSBTX05PQ01USU1FIDEyOCAgCisjZGVmaW5lIFNfU1dBUEZJTEUgMjU2ICAKKyNkZWZpbmUgU19QUklWQVRFIDUxMiAgCisKKyNkZWZpbmUgX19JU19GTEcoaW5vZGUsZmxnKSAoKGlub2RlKS0+aV9zYi0+c19mbGFncyAmIChmbGcpKQorCisjZGVmaW5lIElTX1JET05MWShpbm9kZSkgKChpbm9kZSktPmlfc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpCisjZGVmaW5lIElTX1NZTkMoaW5vZGUpIChfX0lTX0ZMRyhpbm9kZSwgTVNfU1lOQ0hST05PVVMpIHx8ICAgKChpbm9kZSktPmlfZmxhZ3MgJiBTX1NZTkMpKQorI2RlZmluZSBJU19ESVJTWU5DKGlub2RlKSAoX19JU19GTEcoaW5vZGUsIE1TX1NZTkNIUk9OT1VTfE1TX0RJUlNZTkMpIHx8ICAgKChpbm9kZSktPmlfZmxhZ3MgJiAoU19TWU5DfFNfRElSU1lOQykpKQorI2RlZmluZSBJU19NQU5ETE9DSyhpbm9kZSkgX19JU19GTEcoaW5vZGUsIE1TX01BTkRMT0NLKQorCisjZGVmaW5lIElTX05PUVVPVEEoaW5vZGUpICgoaW5vZGUpLT5pX2ZsYWdzICYgU19OT1FVT1RBKQorI2RlZmluZSBJU19BUFBFTkQoaW5vZGUpICgoaW5vZGUpLT5pX2ZsYWdzICYgU19BUFBFTkQpCisjZGVmaW5lIElTX0lNTVVUQUJMRShpbm9kZSkgKChpbm9kZSktPmlfZmxhZ3MgJiBTX0lNTVVUQUJMRSkKKyNkZWZpbmUgSVNfUE9TSVhBQ0woaW5vZGUpIF9fSVNfRkxHKGlub2RlLCBNU19QT1NJWEFDTCkKKworI2RlZmluZSBJU19ERUFERElSKGlub2RlKSAoKGlub2RlKS0+aV9mbGFncyAmIFNfREVBRCkKKyNkZWZpbmUgSVNfTk9DTVRJTUUoaW5vZGUpICgoaW5vZGUpLT5pX2ZsYWdzICYgU19OT0NNVElNRSkKKyNkZWZpbmUgSVNfU1dBUEZJTEUoaW5vZGUpICgoaW5vZGUpLT5pX2ZsYWdzICYgU19TV0FQRklMRSkKKyNkZWZpbmUgSVNfUFJJVkFURShpbm9kZSkgKChpbm9kZSktPmlfZmxhZ3MgJiBTX1BSSVZBVEUpCisKKyNkZWZpbmUgQkxLUk9TRVQgX0lPKDB4MTIsOTMpICAKKyNkZWZpbmUgQkxLUk9HRVQgX0lPKDB4MTIsOTQpICAKKyNkZWZpbmUgQkxLUlJQQVJUIF9JTygweDEyLDk1KSAgCisjZGVmaW5lIEJMS0dFVFNJWkUgX0lPKDB4MTIsOTYpICAKKyNkZWZpbmUgQkxLRkxTQlVGIF9JTygweDEyLDk3KSAgCisjZGVmaW5lIEJMS1JBU0VUIF9JTygweDEyLDk4KSAgCisjZGVmaW5lIEJMS1JBR0VUIF9JTygweDEyLDk5KSAgCisjZGVmaW5lIEJMS0ZSQVNFVCBfSU8oMHgxMiwxMDApIAorI2RlZmluZSBCTEtGUkFHRVQgX0lPKDB4MTIsMTAxKSAKKyNkZWZpbmUgQkxLU0VDVFNFVCBfSU8oMHgxMiwxMDIpIAorI2RlZmluZSBCTEtTRUNUR0VUIF9JTygweDEyLDEwMykgCisjZGVmaW5lIEJMS1NTWkdFVCBfSU8oMHgxMiwxMDQpIAorCisjZGVmaW5lIEJMS0JTWkdFVCBfSU9SKDB4MTIsMTEyLHNpemVfdCkKKyNkZWZpbmUgQkxLQlNaU0VUIF9JT1coMHgxMiwxMTMsc2l6ZV90KQorI2RlZmluZSBCTEtHRVRTSVpFNjQgX0lPUigweDEyLDExNCxzaXplX3QpICAKKyNkZWZpbmUgQkxLVFJBQ0VTRVRVUCBfSU9XUigweDEyLDExNSxzdHJ1Y3QgYmxrX3VzZXJfdHJhY2Vfc2V0dXApCisjZGVmaW5lIEJMS1RSQUNFU1RBUlQgX0lPKDB4MTIsMTE2KQorI2RlZmluZSBCTEtUUkFDRVNUT1AgX0lPKDB4MTIsMTE3KQorI2RlZmluZSBCTEtUUkFDRVRFQVJET1dOIF9JTygweDEyLDExOCkKKworI2RlZmluZSBCTUFQX0lPQ1RMIDEgIAorI2RlZmluZSBGSUJNQVAgX0lPKDB4MDAsMSkgIAorI2RlZmluZSBGSUdFVEJTWiBfSU8oMHgwMCwyKSAgCisKKyNkZWZpbmUgU1lOQ19GSUxFX1JBTkdFX1dBSVRfQkVGT1JFIDEKKyNkZWZpbmUgU1lOQ19GSUxFX1JBTkdFX1dSSVRFIDIKKyNkZWZpbmUgU1lOQ19GSUxFX1JBTkdFX1dBSVRfQUZURVIgNAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9mdGFwZS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Z0YXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmIxNTI3YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9mdGFwZS5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0ZUQVBFX0gKKyNkZWZpbmUgX0ZUQVBFX0gKKworI2RlZmluZSBGVEFQRV9WRVJTSU9OICJmdGFwZSB2My4wNGQgMjUvMTEvOTciCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L210aW8uaD4KKworI2RlZmluZSBGVF9TRUNUT1IoeCkgKHgrMSkgIAorI2RlZmluZSBGVF9TRUNUT1JfU0laRSAxMDI0CisjZGVmaW5lIEZUX1NFQ1RPUlNfUEVSX1NFR01FTlQgMzIKKyNkZWZpbmUgRlRfRUNDX1NFQ1RPUlMgMworI2RlZmluZSBGVF9TRUdNRU5UX1NJWkUgKChGVF9TRUNUT1JTX1BFUl9TRUdNRU5UIC0gRlRfRUNDX1NFQ1RPUlMpICogRlRfU0VDVE9SX1NJWkUpCisjZGVmaW5lIEZUX0JVRkZfU0laRSAoRlRfU0VDVE9SU19QRVJfU0VHTUVOVCAqIEZUX1NFQ1RPUl9TSVpFKQorCisjZGVmaW5lIEZUQVBFX1NFTF9BIDAKKyNkZWZpbmUgRlRBUEVfU0VMX0IgMQorI2RlZmluZSBGVEFQRV9TRUxfQyAyCisjZGVmaW5lIEZUQVBFX1NFTF9EIDMKKyNkZWZpbmUgRlRBUEVfU0VMX01BU0sgMworI2RlZmluZSBGVEFQRV9TRUwodW5pdCkgKCh1bml0KSAmIEZUQVBFX1NFTF9NQVNLKQorI2RlZmluZSBGVEFQRV9OT19SRVdJTkQgNCAgCisKK3R5cGVkZWYgdW5pb24geworIHN0cnVjdCB7CisgX191OCBlcnJvcjsKKyBfX3U4IGNvbW1hbmQ7CisgfSBlcnJvcjsKKyBsb25nIHNwYWNlOworfSBmdF9kcml2ZV9lcnJvcjsKK3R5cGVkZWYgdW5pb24geworIHN0cnVjdCB7CisgX191OCBkcml2ZV9zdGF0dXM7CisgX191OCBkcml2ZV9jb25maWc7CisgX191OCB0YXBlX3N0YXR1czsKKyB9IHN0YXR1czsKKyBsb25nIHNwYWNlOworfSBmdF9kcml2ZV9zdGF0dXM7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Z1dGV4LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZnV0ZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGY5ZTU5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Z1dGV4LmgKQEAgLTAsMCArMSw2MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfRlVURVhfSAorI2RlZmluZSBfTElOVVhfRlVURVhfSAorCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKworI2RlZmluZSBGVVRFWF9XQUlUIDAKKyNkZWZpbmUgRlVURVhfV0FLRSAxCisjZGVmaW5lIEZVVEVYX0ZEIDIKKyNkZWZpbmUgRlVURVhfUkVRVUVVRSAzCisjZGVmaW5lIEZVVEVYX0NNUF9SRVFVRVVFIDQKKyNkZWZpbmUgRlVURVhfV0FLRV9PUCA1CisjZGVmaW5lIEZVVEVYX0xPQ0tfUEkgNgorI2RlZmluZSBGVVRFWF9VTkxPQ0tfUEkgNworI2RlZmluZSBGVVRFWF9UUllMT0NLX1BJIDgKKworc3RydWN0IHJvYnVzdF9saXN0IHsKKyBzdHJ1Y3Qgcm9idXN0X2xpc3QgX191c2VyICpuZXh0OworfTsKKworc3RydWN0IHJvYnVzdF9saXN0X2hlYWQgeworCisgc3RydWN0IHJvYnVzdF9saXN0IGxpc3Q7CisKKyBsb25nIGZ1dGV4X29mZnNldDsKKworIHN0cnVjdCByb2J1c3RfbGlzdCBfX3VzZXIgKmxpc3Rfb3BfcGVuZGluZzsKK307CisKKyNkZWZpbmUgRlVURVhfV0FJVEVSUyAweDgwMDAwMDAwCisKKyNkZWZpbmUgRlVURVhfT1dORVJfRElFRCAweDQwMDAwMDAwCisKKyNkZWZpbmUgRlVURVhfVElEX01BU0sgMHgzZmZmZmZmZgorCisjZGVmaW5lIFJPQlVTVF9MSVNUX0xJTUlUIDIwNDgKKworI2RlZmluZSBGVVRFWF9PUF9TRVQgMCAgCisjZGVmaW5lIEZVVEVYX09QX0FERCAxICAKKyNkZWZpbmUgRlVURVhfT1BfT1IgMiAgCisjZGVmaW5lIEZVVEVYX09QX0FORE4gMyAgCisjZGVmaW5lIEZVVEVYX09QX1hPUiA0ICAKKyNkZWZpbmUgRlVURVhfT1BfT1BBUkdfU0hJRlQgOCAgCisjZGVmaW5lIEZVVEVYX09QX0NNUF9FUSAwICAKKyNkZWZpbmUgRlVURVhfT1BfQ01QX05FIDEgIAorI2RlZmluZSBGVVRFWF9PUF9DTVBfTFQgMiAgCisjZGVmaW5lIEZVVEVYX09QX0NNUF9MRSAzICAKKyNkZWZpbmUgRlVURVhfT1BfQ01QX0dUIDQgIAorI2RlZmluZSBGVVRFWF9PUF9DTVBfR0UgNSAgCisjZGVmaW5lIEZVVEVYX09QKG9wLCBvcGFyZywgY21wLCBjbXBhcmcpICAgKCgob3AgJiAweGYpIDw8IDI4KSB8ICgoY21wICYgMHhmKSA8PCAyNCkgICB8ICgob3BhcmcgJiAweGZmZikgPDwgMTIpIHwgKGNtcGFyZyAmIDB4ZmZmKSkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2dlbmhkLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZ2VuaGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2EzOTI0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2dlbmhkLmgKQEAgLTAsMCArMSw1NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfR0VOSERfSAorI2RlZmluZSBfTElOVVhfR0VOSERfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworZW51bSB7CisKKyBET1NfRVhURU5ERURfUEFSVElUSU9OID0gNSwKKyBMSU5VWF9FWFRFTkRFRF9QQVJUSVRJT04gPSAweDg1LAorIFdJTjk4X0VYVEVOREVEX1BBUlRJVElPTiA9IDB4MGYsCisKKyBMSU5VWF9TV0FQX1BBUlRJVElPTiA9IDB4ODIsCisgTElOVVhfUkFJRF9QQVJUSVRJT04gPSAweGZkLAorCisgU09MQVJJU19YODZfUEFSVElUSU9OID0gTElOVVhfU1dBUF9QQVJUSVRJT04sCisgTkVXX1NPTEFSSVNfWDg2X1BBUlRJVElPTiA9IDB4YmYsCisKKyBETTZfQVVYMVBBUlRJVElPTiA9IDB4NTEsCisgRE02X0FVWDNQQVJUSVRJT04gPSAweDUzLAorIERNNl9QQVJUSVRJT04gPSAweDU0LAorIEVaRF9QQVJUSVRJT04gPSAweDU1LAorCisgRlJFRUJTRF9QQVJUSVRJT04gPSAweGE1LAorIE9QRU5CU0RfUEFSVElUSU9OID0gMHhhNiwKKyBORVRCU0RfUEFSVElUSU9OID0gMHhhOSwKKyBCU0RJX1BBUlRJVElPTiA9IDB4YjcsCisgTUlOSVhfUEFSVElUSU9OID0gMHg4MSwKKyBVTklYV0FSRV9QQVJUSVRJT04gPSAweDYzLAorfTsKKworc3RydWN0IHBhcnRpdGlvbiB7CisgdW5zaWduZWQgY2hhciBib290X2luZDsKKyB1bnNpZ25lZCBjaGFyIGhlYWQ7CisgdW5zaWduZWQgY2hhciBzZWN0b3I7CisgdW5zaWduZWQgY2hhciBjeWw7CisgdW5zaWduZWQgY2hhciBzeXNfaW5kOworIHVuc2lnbmVkIGNoYXIgZW5kX2hlYWQ7CisgdW5zaWduZWQgY2hhciBlbmRfc2VjdG9yOworIHVuc2lnbmVkIGNoYXIgZW5kX2N5bDsKKyB1bnNpZ25lZCBpbnQgc3RhcnRfc2VjdDsKKyB1bnNpZ25lZCBpbnQgbnJfc2VjdHM7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9nZnAuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9nZnAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTU5ZmU5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2dmcC5oCkBAIC0wLDAgKzEsNzYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19MSU5VWF9HRlBfSAorI2RlZmluZSBfX0xJTlVYX0dGUF9ICisKKyNpbmNsdWRlIDxsaW51eC9tbXpvbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisKK3N0cnVjdCB2bV9hcmVhX3N0cnVjdDsKKworI2RlZmluZSBfX0dGUF9ETUEgKChfX2ZvcmNlIGdmcF90KTB4MDF1KQorI2RlZmluZSBfX0dGUF9ISUdITUVNICgoX19mb3JjZSBnZnBfdCkweDAydSkKKyNpZiBCSVRTX1BFUl9MT05HIDwgNjQKKyNkZWZpbmUgX19HRlBfRE1BMzIgKChfX2ZvcmNlIGdmcF90KTB4MDApICAKKyNlbHNlCisjZGVmaW5lIF9fR0ZQX0RNQTMyICgoX19mb3JjZSBnZnBfdCkweDA0KSAgCisjZW5kaWYKKworI2RlZmluZSBfX0dGUF9XQUlUICgoX19mb3JjZSBnZnBfdCkweDEwdSkgIAorI2RlZmluZSBfX0dGUF9ISUdIICgoX19mb3JjZSBnZnBfdCkweDIwdSkgIAorI2RlZmluZSBfX0dGUF9JTyAoKF9fZm9yY2UgZ2ZwX3QpMHg0MHUpICAKKyNkZWZpbmUgX19HRlBfRlMgKChfX2ZvcmNlIGdmcF90KTB4ODB1KSAgCisjZGVmaW5lIF9fR0ZQX0NPTEQgKChfX2ZvcmNlIGdmcF90KTB4MTAwdSkgIAorI2RlZmluZSBfX0dGUF9OT1dBUk4gKChfX2ZvcmNlIGdmcF90KTB4MjAwdSkgIAorI2RlZmluZSBfX0dGUF9SRVBFQVQgKChfX2ZvcmNlIGdmcF90KTB4NDAwdSkgIAorI2RlZmluZSBfX0dGUF9OT0ZBSUwgKChfX2ZvcmNlIGdmcF90KTB4ODAwdSkgIAorI2RlZmluZSBfX0dGUF9OT1JFVFJZICgoX19mb3JjZSBnZnBfdCkweDEwMDB1KSAKKyNkZWZpbmUgX19HRlBfTk9fR1JPVyAoKF9fZm9yY2UgZ2ZwX3QpMHgyMDAwdSkgCisjZGVmaW5lIF9fR0ZQX0NPTVAgKChfX2ZvcmNlIGdmcF90KTB4NDAwMHUpIAorI2RlZmluZSBfX0dGUF9aRVJPICgoX19mb3JjZSBnZnBfdCkweDgwMDB1KSAKKyNkZWZpbmUgX19HRlBfTk9NRU1BTExPQyAoKF9fZm9yY2UgZ2ZwX3QpMHgxMDAwMHUpICAKKyNkZWZpbmUgX19HRlBfSEFSRFdBTEwgKChfX2ZvcmNlIGdmcF90KTB4MjAwMDB1KSAgCisKKyNkZWZpbmUgX19HRlBfQklUU19TSElGVCAyMCAgCisjZGVmaW5lIF9fR0ZQX0JJVFNfTUFTSyAoKF9fZm9yY2UgZ2ZwX3QpKCgxIDw8IF9fR0ZQX0JJVFNfU0hJRlQpIC0gMSkpCisKKyNkZWZpbmUgR0ZQX0xFVkVMX01BU0sgKF9fR0ZQX1dBSVR8X19HRlBfSElHSHxfX0dGUF9JT3xfX0dGUF9GU3wgICBfX0dGUF9DT0xEfF9fR0ZQX05PV0FSTnxfX0dGUF9SRVBFQVR8ICAgX19HRlBfTk9GQUlMfF9fR0ZQX05PUkVUUll8X19HRlBfTk9fR1JPV3xfX0dGUF9DT01QfCAgIF9fR0ZQX05PTUVNQUxMT0N8X19HRlBfSEFSRFdBTEwpCisKKyNkZWZpbmUgR0ZQX05PV0FJVCAoR0ZQX0FUT01JQyAmIH5fX0dGUF9ISUdIKQorCisjZGVmaW5lIEdGUF9BVE9NSUMgKF9fR0ZQX0hJR0gpCisjZGVmaW5lIEdGUF9OT0lPIChfX0dGUF9XQUlUKQorI2RlZmluZSBHRlBfTk9GUyAoX19HRlBfV0FJVCB8IF9fR0ZQX0lPKQorI2RlZmluZSBHRlBfS0VSTkVMIChfX0dGUF9XQUlUIHwgX19HRlBfSU8gfCBfX0dGUF9GUykKKyNkZWZpbmUgR0ZQX1VTRVIgKF9fR0ZQX1dBSVQgfCBfX0dGUF9JTyB8IF9fR0ZQX0ZTIHwgX19HRlBfSEFSRFdBTEwpCisjZGVmaW5lIEdGUF9ISUdIVVNFUiAoX19HRlBfV0FJVCB8IF9fR0ZQX0lPIHwgX19HRlBfRlMgfCBfX0dGUF9IQVJEV0FMTCB8ICAgX19HRlBfSElHSE1FTSkKKworI2RlZmluZSBHRlBfRE1BIF9fR0ZQX0RNQQorCisjZGVmaW5lIEdGUF9ETUEzMiBfX0dGUF9ETUEzMgorCisjaWZuZGVmIEhBVkVfQVJDSF9GUkVFX1BBR0UKKyNlbmRpZgorCisjZGVmaW5lIGFsbG9jX3BhZ2VzKGdmcF9tYXNrLCBvcmRlcikgICBhbGxvY19wYWdlc19ub2RlKG51bWFfbm9kZV9pZCgpLCBnZnBfbWFzaywgb3JkZXIpCisjZGVmaW5lIGFsbG9jX3BhZ2Vfdm1hKGdmcF9tYXNrLCB2bWEsIGFkZHIpIGFsbG9jX3BhZ2VzKGdmcF9tYXNrLCAwKQorI2RlZmluZSBhbGxvY19wYWdlKGdmcF9tYXNrKSBhbGxvY19wYWdlcyhnZnBfbWFzaywgMCkKKworI2RlZmluZSBfX2dldF9mcmVlX3BhZ2UoZ2ZwX21hc2spICAgX19nZXRfZnJlZV9wYWdlcygoZ2ZwX21hc2spLDApCisKKyNkZWZpbmUgX19nZXRfZG1hX3BhZ2VzKGdmcF9tYXNrLCBvcmRlcikgICBfX2dldF9mcmVlX3BhZ2VzKChnZnBfbWFzaykgfCBHRlBfRE1BLChvcmRlcikpCisKKyNkZWZpbmUgX19mcmVlX3BhZ2UocGFnZSkgX19mcmVlX3BhZ2VzKChwYWdlKSwgMCkKKyNkZWZpbmUgZnJlZV9wYWdlKGFkZHIpIGZyZWVfcGFnZXMoKGFkZHIpLDApCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2hhcmRpcnEuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9oYXJkaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA1NjZiMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9oYXJkaXJxLmgKQEAgLTAsMCArMSw3MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBMSU5VWF9IQVJESVJRX0gKKyNkZWZpbmUgTElOVVhfSEFSRElSUV9ICisKKyNpbmNsdWRlIDxsaW51eC9wcmVlbXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9sb2NrZGVwLmg+CisjaW5jbHVkZSA8YXNtL2hhcmRpcnEuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisKKyNkZWZpbmUgUFJFRU1QVF9CSVRTIDgKKyNkZWZpbmUgU09GVElSUV9CSVRTIDgKKworI2lmbmRlZiBIQVJESVJRX0JJVFMKKyNkZWZpbmUgSEFSRElSUV9CSVRTIDEyCisKKyNpZiAxIDw8IEhBUkRJUlFfQklUUyA8IE5SX0lSUVMKKyNlcnJvciBIQVJESVJRX0JJVFMgaXMgdG9vIGxvdyEKKyNlbmRpZgorI2VuZGlmCisKKyNkZWZpbmUgUFJFRU1QVF9TSElGVCAwCisjZGVmaW5lIFNPRlRJUlFfU0hJRlQgKFBSRUVNUFRfU0hJRlQgKyBQUkVFTVBUX0JJVFMpCisjZGVmaW5lIEhBUkRJUlFfU0hJRlQgKFNPRlRJUlFfU0hJRlQgKyBTT0ZUSVJRX0JJVFMpCisKKyNkZWZpbmUgX19JUlFfTUFTSyh4KSAoKDFVTCA8PCAoeCkpLTEpCisKKyNkZWZpbmUgUFJFRU1QVF9NQVNLIChfX0lSUV9NQVNLKFBSRUVNUFRfQklUUykgPDwgUFJFRU1QVF9TSElGVCkKKyNkZWZpbmUgU09GVElSUV9NQVNLIChfX0lSUV9NQVNLKFNPRlRJUlFfQklUUykgPDwgU09GVElSUV9TSElGVCkKKyNkZWZpbmUgSEFSRElSUV9NQVNLIChfX0lSUV9NQVNLKEhBUkRJUlFfQklUUykgPDwgSEFSRElSUV9TSElGVCkKKworI2RlZmluZSBQUkVFTVBUX09GRlNFVCAoMVVMIDw8IFBSRUVNUFRfU0hJRlQpCisjZGVmaW5lIFNPRlRJUlFfT0ZGU0VUICgxVUwgPDwgU09GVElSUV9TSElGVCkKKyNkZWZpbmUgSEFSRElSUV9PRkZTRVQgKDFVTCA8PCBIQVJESVJRX1NISUZUKQorCisjaWYgUFJFRU1QVF9BQ1RJVkUgPCAxIDw8IEhBUkRJUlFfU0hJRlQgKyBIQVJESVJRX0JJVFMKKyNlcnJvciBQUkVFTVBUX0FDVElWRSBpcyB0b28gbG93IQorI2VuZGlmCisKKyNkZWZpbmUgaGFyZGlycV9jb3VudCgpIChwcmVlbXB0X2NvdW50KCkgJiBIQVJESVJRX01BU0spCisjZGVmaW5lIHNvZnRpcnFfY291bnQoKSAocHJlZW1wdF9jb3VudCgpICYgU09GVElSUV9NQVNLKQorI2RlZmluZSBpcnFfY291bnQoKSAocHJlZW1wdF9jb3VudCgpICYgKEhBUkRJUlFfTUFTSyB8IFNPRlRJUlFfTUFTSykpCisKKyNkZWZpbmUgaW5faXJxKCkgKGhhcmRpcnFfY291bnQoKSkKKyNkZWZpbmUgaW5fc29mdGlycSgpIChzb2Z0aXJxX2NvdW50KCkpCisjZGVmaW5lIGluX2ludGVycnVwdCgpIChpcnFfY291bnQoKSkKKworI2RlZmluZSBpbl9hdG9taWMoKSAoKHByZWVtcHRfY291bnQoKSAmIH5QUkVFTVBUX0FDVElWRSkgIT0gMCkKKworI2RlZmluZSBwcmVlbXB0aWJsZSgpIDAKKyNkZWZpbmUgSVJRX0VYSVRfT0ZGU0VUIEhBUkRJUlFfT0ZGU0VUCisKKyNkZWZpbmUgc3luY2hyb25pemVfaXJxKGlycSkgYmFycmllcigpCisKK3N0cnVjdCB0YXNrX3N0cnVjdDsKKworI2RlZmluZSBpcnFfZW50ZXIoKSAgIGRvIHsgICBhY2NvdW50X3N5c3RlbV92dGltZShjdXJyZW50KTsgICBhZGRfcHJlZW1wdF9jb3VudChIQVJESVJRX09GRlNFVCk7ICAgdHJhY2VfaGFyZGlycV9lbnRlcigpOyAgIH0gd2hpbGUgKDApCisjZGVmaW5lIF9faXJxX2V4aXQoKSAgIGRvIHsgICB0cmFjZV9oYXJkaXJxX2V4aXQoKTsgICBhY2NvdW50X3N5c3RlbV92dGltZShjdXJyZW50KTsgICBzdWJfcHJlZW1wdF9jb3VudChIQVJESVJRX09GRlNFVCk7ICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBubWlfZW50ZXIoKSBkbyB7IGxvY2tkZXBfb2ZmKCk7IGlycV9lbnRlcigpOyB9IHdoaWxlICgwKQorI2RlZmluZSBubWlfZXhpdCgpIGRvIHsgX19pcnFfZXhpdCgpOyBsb2NrZGVwX29uKCk7IH0gd2hpbGUgKDApCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2hkbGMvaW9jdGwuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9oZGxjL2lvY3RsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE1YTY3ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9oZGxjL2lvY3RsLmgKQEAgLTAsMCArMSw1NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0hETENfSU9DVExfSF9fCisjZGVmaW5lIF9fSERMQ19JT0NUTF9IX18KKwordHlwZWRlZiBzdHJ1Y3QgeworIHVuc2lnbmVkIGludCBjbG9ja19yYXRlOworIHVuc2lnbmVkIGludCBjbG9ja190eXBlOworIHVuc2lnbmVkIHNob3J0IGxvb3BiYWNrOworfSBzeW5jX3NlcmlhbF9zZXR0aW5nczsKKwordHlwZWRlZiBzdHJ1Y3QgeworIHVuc2lnbmVkIGludCBjbG9ja19yYXRlOworIHVuc2lnbmVkIGludCBjbG9ja190eXBlOworIHVuc2lnbmVkIHNob3J0IGxvb3BiYWNrOworIHVuc2lnbmVkIGludCBzbG90X21hcDsKK30gdGUxX3NldHRpbmdzOworCit0eXBlZGVmIHN0cnVjdCB7CisgdW5zaWduZWQgc2hvcnQgZW5jb2Rpbmc7CisgdW5zaWduZWQgc2hvcnQgcGFyaXR5OworfSByYXdfaGRsY19wcm90bzsKKwordHlwZWRlZiBzdHJ1Y3QgeworIHVuc2lnbmVkIGludCB0MzkxOworIHVuc2lnbmVkIGludCB0MzkyOworIHVuc2lnbmVkIGludCBuMzkxOworIHVuc2lnbmVkIGludCBuMzkyOworIHVuc2lnbmVkIGludCBuMzkzOworIHVuc2lnbmVkIHNob3J0IGxtaTsKKyB1bnNpZ25lZCBzaG9ydCBkY2U7Cit9IGZyX3Byb3RvOworCit0eXBlZGVmIHN0cnVjdCB7CisgdW5zaWduZWQgaW50IGRsY2k7Cit9IGZyX3Byb3RvX3B2YzsKKwordHlwZWRlZiBzdHJ1Y3QgeworIHVuc2lnbmVkIGludCBkbGNpOworIGNoYXIgbWFzdGVyW0lGTkFNU0laXTsKK31mcl9wcm90b19wdmNfaW5mbzsKKwordHlwZWRlZiBzdHJ1Y3QgeworIHVuc2lnbmVkIGludCBpbnRlcnZhbDsKKyB1bnNpZ25lZCBpbnQgdGltZW91dDsKK30gY2lzY29fcHJvdG87CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2hkcmVnLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaGRyZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjg0ZWU5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2hkcmVnLmgKQEAgLTAsMCArMSw0MzIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX0hEUkVHX0gKKyNkZWZpbmUgX0xJTlVYX0hEUkVHX0gKKworI2RlZmluZSBIRElPX0RSSVZFX0NNRF9IRFJfU0laRSAoNCAqIHNpemVvZih1OCkpCisjZGVmaW5lIEhESU9fRFJJVkVfSE9CX0hEUl9TSVpFICg4ICogc2l6ZW9mKHU4KSkKKyNkZWZpbmUgSERJT19EUklWRV9UQVNLX0hEUl9TSVpFICg4ICogc2l6ZW9mKHU4KSkKKworI2RlZmluZSBJREVfRFJJVkVfVEFTS19JTlZBTElEIC0xCisjZGVmaW5lIElERV9EUklWRV9UQVNLX05PX0RBVEEgMAorI2RlZmluZSBJREVfRFJJVkVfVEFTS19TRVRfWEZFUiAxCisKKyNkZWZpbmUgSURFX0RSSVZFX1RBU0tfSU4gMgorCisjZGVmaW5lIElERV9EUklWRV9UQVNLX09VVCAzCisjZGVmaW5lIElERV9EUklWRV9UQVNLX1JBV19XUklURSA0CisKKyNkZWZpbmUgSURFX1RBU0tGSUxFX1NURF9JTl9GTEFHUyAweEZFCisjZGVmaW5lIElERV9IT0JfU1REX0lOX0ZMQUdTIDB4M0MKKyNkZWZpbmUgSURFX1RBU0tGSUxFX1NURF9PVVRfRkxBR1MgMHhGRQorI2RlZmluZSBJREVfSE9CX1NURF9PVVRfRkxBR1MgMHgzQworCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdGFza19pb3JlZ190OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIHNhdGFfaW9yZWdfdDsKKwordHlwZWRlZiB1bmlvbiBpZGVfcmVnX3ZhbGlkX3MgeworIHVuc2lnbmVkIGFsbCA6IDE2OworIHN0cnVjdCB7CisgdW5zaWduZWQgZGF0YSA6IDE7CisgdW5zaWduZWQgZXJyb3JfZmVhdHVyZSA6IDE7CisgdW5zaWduZWQgc2VjdG9yIDogMTsKKyB1bnNpZ25lZCBuc2VjdG9yIDogMTsKKyB1bnNpZ25lZCBsY3lsIDogMTsKKyB1bnNpZ25lZCBoY3lsIDogMTsKKyB1bnNpZ25lZCBzZWxlY3QgOiAxOworIHVuc2lnbmVkIHN0YXR1c19jb21tYW5kIDogMTsKKworIHVuc2lnbmVkIGRhdGFfaG9iIDogMTsKKyB1bnNpZ25lZCBlcnJvcl9mZWF0dXJlX2hvYiA6IDE7CisgdW5zaWduZWQgc2VjdG9yX2hvYiA6IDE7CisgdW5zaWduZWQgbnNlY3Rvcl9ob2IgOiAxOworIHVuc2lnbmVkIGxjeWxfaG9iIDogMTsKKyB1bnNpZ25lZCBoY3lsX2hvYiA6IDE7CisgdW5zaWduZWQgc2VsZWN0X2hvYiA6IDE7CisgdW5zaWduZWQgY29udHJvbF9ob2IgOiAxOworIH0gYjsKK30gaWRlX3JlZ192YWxpZF90OworCit0eXBlZGVmIHN0cnVjdCBpZGVfdGFza19yZXF1ZXN0X3MgeworIHRhc2tfaW9yZWdfdCBpb19wb3J0c1s4XTsKKyB0YXNrX2lvcmVnX3QgaG9iX3BvcnRzWzhdOworIGlkZV9yZWdfdmFsaWRfdCBvdXRfZmxhZ3M7CisgaWRlX3JlZ192YWxpZF90IGluX2ZsYWdzOworIGludCBkYXRhX3BoYXNlOworIGludCByZXFfY21kOworIHVuc2lnbmVkIGxvbmcgb3V0X3NpemU7CisgdW5zaWduZWQgbG9uZyBpbl9zaXplOworfSBpZGVfdGFza19yZXF1ZXN0X3Q7CisKK3R5cGVkZWYgc3RydWN0IGlkZV9pb2N0bF9yZXF1ZXN0X3MgeworIGlkZV90YXNrX3JlcXVlc3RfdCAqdGFza19yZXF1ZXN0OworIHVuc2lnbmVkIGNoYXIgKm91dF9idWZmZXI7CisgdW5zaWduZWQgY2hhciAqaW5fYnVmZmVyOworfSBpZGVfaW9jdGxfcmVxdWVzdF90OworCitzdHJ1Y3QgaGRfZHJpdmVfY21kX2hkciB7CisgdGFza19pb3JlZ190IGNvbW1hbmQ7CisgdGFza19pb3JlZ190IHNlY3Rvcl9udW1iZXI7CisgdGFza19pb3JlZ190IGZlYXR1cmU7CisgdGFza19pb3JlZ190IHNlY3Rvcl9jb3VudDsKK307CisKK3R5cGVkZWYgc3RydWN0IGhkX2RyaXZlX3Rhc2tfaGRyIHsKKyB0YXNrX2lvcmVnX3QgZGF0YTsKKyB0YXNrX2lvcmVnX3QgZmVhdHVyZTsKKyB0YXNrX2lvcmVnX3Qgc2VjdG9yX2NvdW50OworIHRhc2tfaW9yZWdfdCBzZWN0b3JfbnVtYmVyOworIHRhc2tfaW9yZWdfdCBsb3dfY3lsaW5kZXI7CisgdGFza19pb3JlZ190IGhpZ2hfY3lsaW5kZXI7CisgdGFza19pb3JlZ190IGRldmljZV9oZWFkOworIHRhc2tfaW9yZWdfdCBjb21tYW5kOworfSB0YXNrX3N0cnVjdF90OworCit0eXBlZGVmIHN0cnVjdCBoZF9kcml2ZV9ob2JfaGRyIHsKKyB0YXNrX2lvcmVnX3QgZGF0YTsKKyB0YXNrX2lvcmVnX3QgZmVhdHVyZTsKKyB0YXNrX2lvcmVnX3Qgc2VjdG9yX2NvdW50OworIHRhc2tfaW9yZWdfdCBzZWN0b3JfbnVtYmVyOworIHRhc2tfaW9yZWdfdCBsb3dfY3lsaW5kZXI7CisgdGFza19pb3JlZ190IGhpZ2hfY3lsaW5kZXI7CisgdGFza19pb3JlZ190IGRldmljZV9oZWFkOworIHRhc2tfaW9yZWdfdCBjb250cm9sOworfSBob2Jfc3RydWN0X3Q7CisKKyNkZWZpbmUgVEFTS0ZJTEVfSU5WQUxJRCAweDdmZmYKKyNkZWZpbmUgVEFTS0ZJTEVfNDggMHg4MDAwCisKKyNkZWZpbmUgVEFTS0ZJTEVfTk9fREFUQSAweDAwMDAKKworI2RlZmluZSBUQVNLRklMRV9JTiAweDAwMDEKKyNkZWZpbmUgVEFTS0ZJTEVfTVVMVElfSU4gMHgwMDAyCisKKyNkZWZpbmUgVEFTS0ZJTEVfT1VUIDB4MDAwNAorI2RlZmluZSBUQVNLRklMRV9NVUxUSV9PVVQgMHgwMDA4CisjZGVmaW5lIFRBU0tGSUxFX0lOX09VVCAweDAwMTAKKworI2RlZmluZSBUQVNLRklMRV9JTl9ETUEgMHgwMDIwCisjZGVmaW5lIFRBU0tGSUxFX09VVF9ETUEgMHgwMDQwCisjZGVmaW5lIFRBU0tGSUxFX0lOX0RNQVEgMHgwMDgwCisjZGVmaW5lIFRBU0tGSUxFX09VVF9ETUFRIDB4MDEwMAorCisjZGVmaW5lIFRBU0tGSUxFX1BfSU4gMHgwMjAwCisjZGVmaW5lIFRBU0tGSUxFX1BfT1VUIDB4MDQwMAorI2RlZmluZSBUQVNLRklMRV9QX0lOX0RNQSAweDA4MDAKKyNkZWZpbmUgVEFTS0ZJTEVfUF9PVVRfRE1BIDB4MTAwMAorI2RlZmluZSBUQVNLRklMRV9QX0lOX0RNQVEgMHgyMDAwCisjZGVmaW5lIFRBU0tGSUxFX1BfT1VUX0RNQVEgMHg0MDAwCisKKyNkZWZpbmUgV0lOX05PUCAweDAwCisKKyNkZWZpbmUgQ0ZBX1JFUV9FWFRfRVJST1JfQ09ERSAweDAzICAKKworI2RlZmluZSBXSU5fU1JTVCAweDA4ICAKKyNkZWZpbmUgV0lOX0RFVklDRV9SRVNFVCAweDA4CisKKyNkZWZpbmUgV0lOX1JFQ0FMIDB4MTAKKyNkZWZpbmUgV0lOX1JFU1RPUkUgV0lOX1JFQ0FMCisKKyNkZWZpbmUgV0lOX1JFQUQgMHgyMCAgCisjZGVmaW5lIFdJTl9SRUFEX09OQ0UgMHgyMSAgCisjZGVmaW5lIFdJTl9SRUFEX0xPTkcgMHgyMiAgCisjZGVmaW5lIFdJTl9SRUFEX0xPTkdfT05DRSAweDIzICAKKyNkZWZpbmUgV0lOX1JFQURfRVhUIDB4MjQgIAorI2RlZmluZSBXSU5fUkVBRERNQV9FWFQgMHgyNSAgCisjZGVmaW5lIFdJTl9SRUFERE1BX1FVRVVFRF9FWFQgMHgyNiAgCisjZGVmaW5lIFdJTl9SRUFEX05BVElWRV9NQVhfRVhUIDB4MjcgIAorCisjZGVmaW5lIFdJTl9NVUxUUkVBRF9FWFQgMHgyOSAgCisKKyNkZWZpbmUgV0lOX1dSSVRFIDB4MzAgIAorI2RlZmluZSBXSU5fV1JJVEVfT05DRSAweDMxICAKKyNkZWZpbmUgV0lOX1dSSVRFX0xPTkcgMHgzMiAgCisjZGVmaW5lIFdJTl9XUklURV9MT05HX09OQ0UgMHgzMyAgCisjZGVmaW5lIFdJTl9XUklURV9FWFQgMHgzNCAgCisjZGVmaW5lIFdJTl9XUklURURNQV9FWFQgMHgzNSAgCisjZGVmaW5lIFdJTl9XUklURURNQV9RVUVVRURfRVhUIDB4MzYgIAorI2RlZmluZSBXSU5fU0VUX01BWF9FWFQgMHgzNyAgCisjZGVmaW5lIENGQV9XUklURV9TRUNUX1dPX0VSQVNFIDB4MzggIAorI2RlZmluZSBXSU5fTVVMVFdSSVRFX0VYVCAweDM5ICAKKworI2RlZmluZSBXSU5fV1JJVEVfVkVSSUZZIDB4M0MgIAorCisjZGVmaW5lIFdJTl9WRVJJRlkgMHg0MCAgCisjZGVmaW5lIFdJTl9WRVJJRllfT05DRSAweDQxICAKKyNkZWZpbmUgV0lOX1ZFUklGWV9FWFQgMHg0MiAgCisKKyNkZWZpbmUgV0lOX0ZPUk1BVCAweDUwCisKKyNkZWZpbmUgV0lOX0lOSVQgMHg2MAorCisjZGVmaW5lIFdJTl9TRUVLIDB4NzAgIAorCisjZGVmaW5lIENGQV9UUkFOU0xBVEVfU0VDVE9SIDB4ODcgIAorI2RlZmluZSBXSU5fRElBR05PU0UgMHg5MAorI2RlZmluZSBXSU5fU1BFQ0lGWSAweDkxICAKKyNkZWZpbmUgV0lOX0RPV05MT0FEX01JQ1JPQ09ERSAweDkyCisjZGVmaW5lIFdJTl9TVEFOREJZTk9XMiAweDk0CisjZGVmaW5lIFdJTl9TVEFOREJZMiAweDk2CisjZGVmaW5lIFdJTl9TRVRJRExFMiAweDk3CisjZGVmaW5lIFdJTl9DSEVDS1BPV0VSTU9ERTIgMHg5OAorI2RlZmluZSBXSU5fU0xFRVBOT1cyIDB4OTkKKworI2RlZmluZSBXSU5fUEFDS0VUQ01EIDB4QTAgIAorI2RlZmluZSBXSU5fUElERU5USUZZIDB4QTEgIAorI2RlZmluZSBXSU5fUVVFVUVEX1NFUlZJQ0UgMHhBMgorI2RlZmluZSBXSU5fU01BUlQgMHhCMCAgCisjZGVmaW5lIENGQV9FUkFTRV9TRUNUT1JTIDB4QzAKKyNkZWZpbmUgV0lOX01VTFRSRUFEIDB4QzQgIAorI2RlZmluZSBXSU5fTVVMVFdSSVRFIDB4QzUgIAorI2RlZmluZSBXSU5fU0VUTVVMVCAweEM2ICAKKyNkZWZpbmUgV0lOX1JFQURETUFfUVVFVUVEIDB4QzcgIAorI2RlZmluZSBXSU5fUkVBRERNQSAweEM4ICAKKyNkZWZpbmUgV0lOX1JFQURETUFfT05DRSAweEM5ICAKKyNkZWZpbmUgV0lOX1dSSVRFRE1BIDB4Q0EgIAorI2RlZmluZSBXSU5fV1JJVEVETUFfT05DRSAweENCICAKKyNkZWZpbmUgV0lOX1dSSVRFRE1BX1FVRVVFRCAweENDICAKKyNkZWZpbmUgQ0ZBX1dSSVRFX01VTFRJX1dPX0VSQVNFIDB4Q0QgIAorI2RlZmluZSBXSU5fR0VUTUVESUFTVEFUVVMgMHhEQQorI2RlZmluZSBXSU5fQUNLTUVESUFDSEFOR0UgMHhEQiAgCisjZGVmaW5lIFdJTl9QT1NUQk9PVCAweERDCisjZGVmaW5lIFdJTl9QUkVCT09UIDB4REQKKyNkZWZpbmUgV0lOX0RPT1JMT0NLIDB4REUgIAorI2RlZmluZSBXSU5fRE9PUlVOTE9DSyAweERGICAKKyNkZWZpbmUgV0lOX1NUQU5EQllOT1cxIDB4RTAKKyNkZWZpbmUgV0lOX0lETEVJTU1FRElBVEUgMHhFMSAgCisjZGVmaW5lIFdJTl9TVEFOREJZIDB4RTIgIAorI2RlZmluZSBXSU5fU0VUSURMRTEgMHhFMworI2RlZmluZSBXSU5fUkVBRF9CVUZGRVIgMHhFNCAgCisjZGVmaW5lIFdJTl9DSEVDS1BPV0VSTU9ERTEgMHhFNQorI2RlZmluZSBXSU5fU0xFRVBOT1cxIDB4RTYKKyNkZWZpbmUgV0lOX0ZMVVNIX0NBQ0hFIDB4RTcKKyNkZWZpbmUgV0lOX1dSSVRFX0JVRkZFUiAweEU4ICAKKyNkZWZpbmUgV0lOX1dSSVRFX1NBTUUgMHhFOSAgCisKKyNkZWZpbmUgV0lOX0ZMVVNIX0NBQ0hFX0VYVCAweEVBICAKKyNkZWZpbmUgV0lOX0lERU5USUZZIDB4RUMgIAorI2RlZmluZSBXSU5fTUVESUFFSkVDVCAweEVECisjZGVmaW5lIFdJTl9JREVOVElGWV9ETUEgMHhFRSAgCisjZGVmaW5lIFdJTl9TRVRGRUFUVVJFUyAweEVGICAKKyNkZWZpbmUgRVhBQllURV9FTkFCTEVfTkVTVCAweEYwCisjZGVmaW5lIFdJTl9TRUNVUklUWV9TRVRfUEFTUyAweEYxCisjZGVmaW5lIFdJTl9TRUNVUklUWV9VTkxPQ0sgMHhGMgorI2RlZmluZSBXSU5fU0VDVVJJVFlfRVJBU0VfUFJFUEFSRSAweEYzCisjZGVmaW5lIFdJTl9TRUNVUklUWV9FUkFTRV9VTklUIDB4RjQKKyNkZWZpbmUgV0lOX1NFQ1VSSVRZX0ZSRUVaRV9MT0NLIDB4RjUKKyNkZWZpbmUgV0lOX1NFQ1VSSVRZX0RJU0FCTEUgMHhGNgorI2RlZmluZSBXSU5fUkVBRF9OQVRJVkVfTUFYIDB4RjggIAorI2RlZmluZSBXSU5fU0VUX01BWCAweEY5CisjZGVmaW5lIERJU0FCTEVfU0VBR0FURSAweEZCCisKKyNkZWZpbmUgU01BUlRfUkVBRF9WQUxVRVMgMHhEMAorI2RlZmluZSBTTUFSVF9SRUFEX1RIUkVTSE9MRFMgMHhEMQorI2RlZmluZSBTTUFSVF9BVVRPU0FWRSAweEQyCisjZGVmaW5lIFNNQVJUX1NBVkUgMHhEMworI2RlZmluZSBTTUFSVF9JTU1FRElBVEVfT0ZGTElORSAweEQ0CisjZGVmaW5lIFNNQVJUX1JFQURfTE9HX1NFQ1RPUiAweEQ1CisjZGVmaW5lIFNNQVJUX1dSSVRFX0xPR19TRUNUT1IgMHhENgorI2RlZmluZSBTTUFSVF9XUklURV9USFJFU0hPTERTIDB4RDcKKyNkZWZpbmUgU01BUlRfRU5BQkxFIDB4RDgKKyNkZWZpbmUgU01BUlRfRElTQUJMRSAweEQ5CisjZGVmaW5lIFNNQVJUX1NUQVRVUyAweERBCisjZGVmaW5lIFNNQVJUX0FVVE9fT0ZGTElORSAweERCCisKKyNkZWZpbmUgU01BUlRfTENZTF9QQVNTIDB4NEYKKyNkZWZpbmUgU01BUlRfSENZTF9QQVNTIDB4QzIKKworI2RlZmluZSBTRVRGRUFUVVJFU19FTl84QklUIDB4MDEgIAorI2RlZmluZSBTRVRGRUFUVVJFU19FTl9XQ0FDSEUgMHgwMiAgCisjZGVmaW5lIFNFVEZFQVRVUkVTX0RJU19ERUZFQ1QgMHgwNCAgCisjZGVmaW5lIFNFVEZFQVRVUkVTX0VOX0FQTSAweDA1ICAKKyNkZWZpbmUgU0VURkVBVFVSRVNfRU5fU0FNRV9SIDB4MjIgIAorI2RlZmluZSBTRVRGRUFUVVJFU19ESVNfTVNOIDB4MzEgIAorI2RlZmluZSBTRVRGRUFUVVJFU19ESVNfUkVUUlkgMHgzMyAgCisjZGVmaW5lIFNFVEZFQVRVUkVTX0VOX0FBTSAweDQyICAKKyNkZWZpbmUgU0VURkVBVFVSRVNfUldfTE9ORyAweDQ0ICAKKyNkZWZpbmUgU0VURkVBVFVSRVNfU0VUX0NBQ0hFIDB4NTQgIAorI2RlZmluZSBTRVRGRUFUVVJFU19ESVNfUkxBIDB4NTUgIAorI2RlZmluZSBTRVRGRUFUVVJFU19FTl9SSSAweDVEICAKKyNkZWZpbmUgU0VURkVBVFVSRVNfRU5fU0kgMHg1RSAgCisjZGVmaW5lIFNFVEZFQVRVUkVTX0RJU19SUE9EIDB4NjYgIAorI2RlZmluZSBTRVRGRUFUVVJFU19ESVNfRUNDIDB4NzcgIAorI2RlZmluZSBTRVRGRUFUVVJFU19ESVNfOEJJVCAweDgxICAKKyNkZWZpbmUgU0VURkVBVFVSRVNfRElTX1dDQUNIRSAweDgyICAKKyNkZWZpbmUgU0VURkVBVFVSRVNfRU5fREVGRUNUIDB4ODQgIAorI2RlZmluZSBTRVRGRUFUVVJFU19ESVNfQVBNIDB4ODUgIAorI2RlZmluZSBTRVRGRUFUVVJFU19FTl9FQ0MgMHg4OCAgCisjZGVmaW5lIFNFVEZFQVRVUkVTX0VOX01TTiAweDk1ICAKKyNkZWZpbmUgU0VURkVBVFVSRVNfRU5fUkVUUlkgMHg5OSAgCisjZGVmaW5lIFNFVEZFQVRVUkVTX0VOX1JMQSAweEFBICAKKyNkZWZpbmUgU0VURkVBVFVSRVNfUFJFRkVUQ0ggMHhBQiAgCisjZGVmaW5lIFNFVEZFQVRVUkVTX0VOX1JFU1QgMHhBQyAgCisjZGVmaW5lIFNFVEZFQVRVUkVTXzRCX1JXX0xPTkcgMHhCQiAgCisjZGVmaW5lIFNFVEZFQVRVUkVTX0RJU19BQU0gMHhDMiAgCisjZGVmaW5lIFNFVEZFQVRVUkVTX0VOX1JQT0QgMHhDQyAgCisjZGVmaW5lIFNFVEZFQVRVUkVTX0RJU19SSSAweEREICAKKyNkZWZpbmUgU0VURkVBVFVSRVNfRU5fU0FNRV9NIDB4REQgIAorI2RlZmluZSBTRVRGRUFUVVJFU19ESVNfU0kgMHhERSAgCisKKyNkZWZpbmUgU0VDVVJJVFlfU0VUX1BBU1NXT1JEIDB4QkEKKyNkZWZpbmUgU0VDVVJJVFlfVU5MT0NLIDB4QkIKKyNkZWZpbmUgU0VDVVJJVFlfRVJBU0VfUFJFUEFSRSAweEJDCisjZGVmaW5lIFNFQ1VSSVRZX0VSQVNFX1VOSVQgMHhCRAorI2RlZmluZSBTRUNVUklUWV9GUkVFWkVfTE9DSyAweEJFCisjZGVmaW5lIFNFQ1VSSVRZX0RJU0FCTEVfUEFTU1dPUkQgMHhCRgorCitzdHJ1Y3QgaGRfZ2VvbWV0cnkgeworIHVuc2lnbmVkIGNoYXIgaGVhZHM7CisgdW5zaWduZWQgY2hhciBzZWN0b3JzOworIHVuc2lnbmVkIHNob3J0IGN5bGluZGVyczsKKyB1bnNpZ25lZCBsb25nIHN0YXJ0OworfTsKKworI2RlZmluZSBIRElPX0dFVEdFTyAweDAzMDEgIAorI2RlZmluZSBIRElPX0dFVF9VTk1BU0tJTlRSIDB4MDMwMiAgCisjZGVmaW5lIEhESU9fR0VUX01VTFRDT1VOVCAweDAzMDQgIAorI2RlZmluZSBIRElPX0dFVF9RRE1BIDB4MDMwNSAgCisKKyNkZWZpbmUgSERJT19TRVRfWEZFUiAweDAzMDYgIAorCisjZGVmaW5lIEhESU9fT0JTT0xFVEVfSURFTlRJVFkgMHgwMzA3ICAKKyNkZWZpbmUgSERJT19HRVRfS0VFUFNFVFRJTkdTIDB4MDMwOCAgCisjZGVmaW5lIEhESU9fR0VUXzMyQklUIDB4MDMwOSAgCisjZGVmaW5lIEhESU9fR0VUX05PV0VSUiAweDAzMGEgIAorI2RlZmluZSBIRElPX0dFVF9ETUEgMHgwMzBiICAKKyNkZWZpbmUgSERJT19HRVRfTklDRSAweDAzMGMgIAorI2RlZmluZSBIRElPX0dFVF9JREVOVElUWSAweDAzMGQgIAorI2RlZmluZSBIRElPX0dFVF9XQ0FDSEUgMHgwMzBlICAKKyNkZWZpbmUgSERJT19HRVRfQUNPVVNUSUMgMHgwMzBmICAKKyNkZWZpbmUgSERJT19HRVRfQUREUkVTUyAweDAzMTAgIAorCisjZGVmaW5lIEhESU9fR0VUX0JVU1NUQVRFIDB4MDMxYSAgCisjZGVmaW5lIEhESU9fVFJJU1RBVEVfSFdJRiAweDAzMWIgIAorI2RlZmluZSBIRElPX0RSSVZFX1JFU0VUIDB4MDMxYyAgCisjZGVmaW5lIEhESU9fRFJJVkVfVEFTS0ZJTEUgMHgwMzFkICAKKyNkZWZpbmUgSERJT19EUklWRV9UQVNLIDB4MDMxZSAgCisjZGVmaW5lIEhESU9fRFJJVkVfQ01EIDB4MDMxZiAgCisjZGVmaW5lIEhESU9fRFJJVkVfQ01EX0FFQiBIRElPX0RSSVZFX1RBU0sKKworI2RlZmluZSBIRElPX1NFVF9NVUxUQ09VTlQgMHgwMzIxICAKKyNkZWZpbmUgSERJT19TRVRfVU5NQVNLSU5UUiAweDAzMjIgIAorI2RlZmluZSBIRElPX1NFVF9LRUVQU0VUVElOR1MgMHgwMzIzICAKKyNkZWZpbmUgSERJT19TRVRfMzJCSVQgMHgwMzI0ICAKKyNkZWZpbmUgSERJT19TRVRfTk9XRVJSIDB4MDMyNSAgCisjZGVmaW5lIEhESU9fU0VUX0RNQSAweDAzMjYgIAorI2RlZmluZSBIRElPX1NFVF9QSU9fTU9ERSAweDAzMjcgIAorI2RlZmluZSBIRElPX1NDQU5fSFdJRiAweDAzMjggIAorI2RlZmluZSBIRElPX1NFVF9OSUNFIDB4MDMyOSAgCisjZGVmaW5lIEhESU9fVU5SRUdJU1RFUl9IV0lGIDB4MDMyYSAgCisjZGVmaW5lIEhESU9fU0VUX1dDQUNIRSAweDAzMmIgIAorI2RlZmluZSBIRElPX1NFVF9BQ09VU1RJQyAweDAzMmMgIAorI2RlZmluZSBIRElPX1NFVF9CVVNTVEFURSAweDAzMmQgIAorI2RlZmluZSBIRElPX1NFVF9RRE1BIDB4MDMyZSAgCisjZGVmaW5lIEhESU9fU0VUX0FERFJFU1MgMHgwMzJmICAKKworZW51bSB7CisgQlVTU1RBVEVfT0ZGID0gMCwKKyBCVVNTVEFURV9PTiwKKyBCVVNTVEFURV9UUklTVEFURQorfTsKKworI2RlZmluZSBfX05FV19IRF9EUklWRV9JRAorCitzdHJ1Y3QgaGRfZHJpdmVpZCB7CisgdW5zaWduZWQgc2hvcnQgY29uZmlnOworIHVuc2lnbmVkIHNob3J0IGN5bHM7CisgdW5zaWduZWQgc2hvcnQgcmVzZXJ2ZWQyOworIHVuc2lnbmVkIHNob3J0IGhlYWRzOworIHVuc2lnbmVkIHNob3J0IHRyYWNrX2J5dGVzOworIHVuc2lnbmVkIHNob3J0IHNlY3Rvcl9ieXRlczsKKyB1bnNpZ25lZCBzaG9ydCBzZWN0b3JzOworIHVuc2lnbmVkIHNob3J0IHZlbmRvcjA7CisgdW5zaWduZWQgc2hvcnQgdmVuZG9yMTsKKyB1bnNpZ25lZCBzaG9ydCB2ZW5kb3IyOworIHVuc2lnbmVkIGNoYXIgc2VyaWFsX25vWzIwXTsKKyB1bnNpZ25lZCBzaG9ydCBidWZfdHlwZTsKKyB1bnNpZ25lZCBzaG9ydCBidWZfc2l6ZTsKKyB1bnNpZ25lZCBzaG9ydCBlY2NfYnl0ZXM7CisgdW5zaWduZWQgY2hhciBmd19yZXZbOF07CisgdW5zaWduZWQgY2hhciBtb2RlbFs0MF07CisgdW5zaWduZWQgY2hhciBtYXhfbXVsdHNlY3Q7CisgdW5zaWduZWQgY2hhciB2ZW5kb3IzOworIHVuc2lnbmVkIHNob3J0IGR3b3JkX2lvOworIHVuc2lnbmVkIGNoYXIgdmVuZG9yNDsKKyB1bnNpZ25lZCBjaGFyIGNhcGFiaWxpdHk7CisgdW5zaWduZWQgc2hvcnQgcmVzZXJ2ZWQ1MDsKKyB1bnNpZ25lZCBjaGFyIHZlbmRvcjU7CisgdW5zaWduZWQgY2hhciB0UElPOworIHVuc2lnbmVkIGNoYXIgdmVuZG9yNjsKKyB1bnNpZ25lZCBjaGFyIHRETUE7CisgdW5zaWduZWQgc2hvcnQgZmllbGRfdmFsaWQ7CisgdW5zaWduZWQgc2hvcnQgY3VyX2N5bHM7CisgdW5zaWduZWQgc2hvcnQgY3VyX2hlYWRzOworIHVuc2lnbmVkIHNob3J0IGN1cl9zZWN0b3JzOworIHVuc2lnbmVkIHNob3J0IGN1cl9jYXBhY2l0eTA7CisgdW5zaWduZWQgc2hvcnQgY3VyX2NhcGFjaXR5MTsKKyB1bnNpZ25lZCBjaGFyIG11bHRzZWN0OworIHVuc2lnbmVkIGNoYXIgbXVsdHNlY3RfdmFsaWQ7CisgdW5zaWduZWQgaW50IGxiYV9jYXBhY2l0eTsKKyB1bnNpZ25lZCBzaG9ydCBkbWFfMXdvcmQ7CisgdW5zaWduZWQgc2hvcnQgZG1hX213b3JkOworIHVuc2lnbmVkIHNob3J0IGVpZGVfcGlvX21vZGVzOworIHVuc2lnbmVkIHNob3J0IGVpZGVfZG1hX21pbjsKKyB1bnNpZ25lZCBzaG9ydCBlaWRlX2RtYV90aW1lOworIHVuc2lnbmVkIHNob3J0IGVpZGVfcGlvOworIHVuc2lnbmVkIHNob3J0IGVpZGVfcGlvX2lvcmR5OworIHVuc2lnbmVkIHNob3J0IHdvcmRzNjlfNzBbMl07CisKKyB1bnNpZ25lZCBzaG9ydCB3b3JkczcxXzc0WzRdOworIHVuc2lnbmVkIHNob3J0IHF1ZXVlX2RlcHRoOworIHVuc2lnbmVkIHNob3J0IHdvcmRzNzZfNzlbNF07CisgdW5zaWduZWQgc2hvcnQgbWFqb3JfcmV2X251bTsKKyB1bnNpZ25lZCBzaG9ydCBtaW5vcl9yZXZfbnVtOworIHVuc2lnbmVkIHNob3J0IGNvbW1hbmRfc2V0XzE7CisgdW5zaWduZWQgc2hvcnQgY29tbWFuZF9zZXRfMjsKKyB1bnNpZ25lZCBzaG9ydCBjZnNzZTsKKyB1bnNpZ25lZCBzaG9ydCBjZnNfZW5hYmxlXzE7CisgdW5zaWduZWQgc2hvcnQgY2ZzX2VuYWJsZV8yOworIHVuc2lnbmVkIHNob3J0IGNzZl9kZWZhdWx0OworIHVuc2lnbmVkIHNob3J0IGRtYV91bHRyYTsKKyB1bnNpZ25lZCBzaG9ydCB0cnNldWM7CisgdW5zaWduZWQgc2hvcnQgdHJzRXVjOworIHVuc2lnbmVkIHNob3J0IEN1ckFQTXZhbHVlczsKKyB1bnNpZ25lZCBzaG9ydCBtcHJjOworIHVuc2lnbmVkIHNob3J0IGh3X2NvbmZpZzsKKyB1bnNpZ25lZCBzaG9ydCBhY291c3RpYzsKKyB1bnNpZ25lZCBzaG9ydCBtc3JxczsKKyB1bnNpZ25lZCBzaG9ydCBzeGZlcnQ7CisgdW5zaWduZWQgc2hvcnQgc2FsOworIHVuc2lnbmVkIGludCBzcGc7CisgdW5zaWduZWQgbG9uZyBsb25nIGxiYV9jYXBhY2l0eV8yOworIHVuc2lnbmVkIHNob3J0IHdvcmRzMTA0XzEyNVsyMl07CisgdW5zaWduZWQgc2hvcnQgbGFzdF9sdW47CisgdW5zaWduZWQgc2hvcnQgd29yZDEyNzsKKyB1bnNpZ25lZCBzaG9ydCBkbGY7CisgdW5zaWduZWQgc2hvcnQgY3NmbzsKKyB1bnNpZ25lZCBzaG9ydCB3b3JkczEzMF8xNTVbMjZdOworIHVuc2lnbmVkIHNob3J0IHdvcmQxNTY7CisgdW5zaWduZWQgc2hvcnQgd29yZHMxNTdfMTU5WzNdOworIHVuc2lnbmVkIHNob3J0IGNmYV9wb3dlcjsKKyB1bnNpZ25lZCBzaG9ydCB3b3JkczE2MV8xNzVbMTVdOworIHVuc2lnbmVkIHNob3J0IHdvcmRzMTc2XzIwNVszMF07CisgdW5zaWduZWQgc2hvcnQgd29yZHMyMDZfMjU0WzQ5XTsKKyB1bnNpZ25lZCBzaG9ydCBpbnRlZ3JpdHlfd29yZDsKK307CisKKyNkZWZpbmUgSURFX05JQ0VfRFNDX09WRVJMQVAgKDApICAKKyNkZWZpbmUgSURFX05JQ0VfQVRBUElfT1ZFUkxBUCAoMSkgIAorI2RlZmluZSBJREVfTklDRV8wICgyKSAgCisjZGVmaW5lIElERV9OSUNFXzEgKDMpICAKKyNkZWZpbmUgSURFX05JQ0VfMiAoNCkgIAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9oZHNtYXJ0LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaGRzbWFydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjYmM2NTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaGRzbWFydC5oCkBAIC0wLDAgKzEsMTE0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9IRFNNQVJUX0gKKyNkZWZpbmUgX0xJTlVYX0hEU01BUlRfSAorCisjZGVmaW5lIE9GRkxJTkVfRlVMTF9TQ0FOIDAKKyNkZWZpbmUgU0hPUlRfU0VMRl9URVNUIDEKKyNkZWZpbmUgRVhURU5EX1NFTEZfVEVTVCAyCisjZGVmaW5lIFNIT1JUX0NBUFRJVkVfU0VMRl9URVNUIDEyOQorI2RlZmluZSBFWFRFTkRfQ0FQVElWRV9TRUxGX1RFU1QgMTMwCisKK3R5cGVkZWYgc3RydWN0IGF0YV9zbWFydF9hdHRyaWJ1dGVfcyB7CisgdW5zaWduZWQgY2hhciBpZDsKKyB1bnNpZ25lZCBzaG9ydCBzdGF0dXNfZmxhZzsKKyB1bnNpZ25lZCBjaGFyIG5vcm1hbGl6ZWQ7CisgdW5zaWduZWQgY2hhciB3b3JzZV9ub3JtYWw7CisgdW5zaWduZWQgY2hhciByYXdbNl07CisgdW5zaWduZWQgY2hhciByZXNlcnY7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBhdGFfc21hcnRfYXR0cmlidXRlX3Q7CisKK3R5cGVkZWYgc3RydWN0IGF0YV9zbWFydF92YWx1ZXNfcyB7CisgdW5zaWduZWQgc2hvcnQgcmV2bnVtYmVyOworIGF0YV9zbWFydF9hdHRyaWJ1dGVfdCB2ZW5kb3JfYXR0cmlidXRlcyBbMzBdOworIHVuc2lnbmVkIGNoYXIgb2ZmbGluZV9kYXRhX2NvbGxlY3Rpb25fc3RhdHVzOworIHVuc2lnbmVkIGNoYXIgc2VsZl90ZXN0X2V4ZWNfc3RhdHVzOworIHVuc2lnbmVkIHNob3J0IHRvdGFsX3RpbWVfdG9fY29tcGxldGVfb2ZmX2xpbmU7CisgdW5zaWduZWQgY2hhciB2ZW5kb3Jfc3BlY2lmaWNfMzY2OworIHVuc2lnbmVkIGNoYXIgb2ZmbGluZV9kYXRhX2NvbGxlY3Rpb25fY2FwYWJpbGl0eTsKKyB1bnNpZ25lZCBzaG9ydCBzbWFydF9jYXBhYmlsaXR5OworIHVuc2lnbmVkIGNoYXIgZXJyb3Jsb2dfY2FwYWJpbGl0eTsKKyB1bnNpZ25lZCBjaGFyIHZlbmRvcl9zcGVjaWZpY18zNzE7CisgdW5zaWduZWQgY2hhciBzaG9ydF90ZXN0X2NvbXBsZXRpb25fdGltZTsKKyB1bnNpZ25lZCBjaGFyIGV4dGVuZF90ZXN0X2NvbXBsZXRpb25fdGltZTsKKyB1bnNpZ25lZCBjaGFyIHJlc2VydmVkXzM3NF8zODUgWzEyXTsKKyB1bnNpZ25lZCBjaGFyIHZlbmRvcl9zcGVjaWZpY18zODZfNTA5IFsxMjVdOworIHVuc2lnbmVkIGNoYXIgY2hrc3VtOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgYXRhX3NtYXJ0X3ZhbHVlc190OworCit0eXBlZGVmIHN0cnVjdCBhdGFfc21hcnRfdGhyZXNob2xkX2VudHJ5X3MgeworIHVuc2lnbmVkIGNoYXIgaWQ7CisgdW5zaWduZWQgY2hhciBub3JtYWxpemVkX3RocmVzaG9sZDsKKyB1bnNpZ25lZCBjaGFyIHJlc2VydmVkWzEwXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGF0YV9zbWFydF90aHJlc2hvbGRfZW50cnlfdDsKKwordHlwZWRlZiBzdHJ1Y3QgYXRhX3NtYXJ0X3RocmVzaG9sZHNfcyB7CisgdW5zaWduZWQgc2hvcnQgcmV2bnVtYmVyOworIGF0YV9zbWFydF90aHJlc2hvbGRfZW50cnlfdCB0aHJlc19lbnRyaWVzWzMwXTsKKyB1bnNpZ25lZCBjaGFyIHJlc2VydmVkWzE0OV07CisgdW5zaWduZWQgY2hhciBjaGtzdW07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBhdGFfc21hcnRfdGhyZXNob2xkc190OworCit0eXBlZGVmIHN0cnVjdCBhdGFfc21hcnRfZXJyb3Jsb2dfY29tbWFuZF9zdHJ1Y3RfcyB7CisgdW5zaWduZWQgY2hhciBkZXZpY2Vjb250cm9scmVnOworIHVuc2lnbmVkIGNoYXIgZmVhdHVyZXNyZWc7CisgdW5zaWduZWQgY2hhciBzZWN0b3JfY291bnQ7CisgdW5zaWduZWQgY2hhciBzZWN0b3JfbnVtYmVyOworIHVuc2lnbmVkIGNoYXIgY3lsaW5kZXJfbG93OworIHVuc2lnbmVkIGNoYXIgY3lsaW5kZXJfaGlnaDsKKyB1bnNpZ25lZCBjaGFyIGRyaXZlX2hlYWQ7CisgdW5zaWduZWQgY2hhciBjb21tYW5kcmVnOworIHVuc2lnbmVkIGludCB0aW1lc3RhbXA7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBhdGFfc21hcnRfZXJyb3Jsb2dfY29tbWFuZF9zdHJ1Y3RfdDsKKwordHlwZWRlZiBzdHJ1Y3QgYXRhX3NtYXJ0X2Vycm9ybG9nX2Vycm9yX3N0cnVjdF9zIHsKKyB1bnNpZ25lZCBjaGFyIGVycm9yX2NvbmRpdGlvbjsKKyB1bnNpZ25lZCBjaGFyIGV4dGVuZGVkX2Vycm9yWzE0XTsKKyB1bnNpZ25lZCBjaGFyIHN0YXRlOworIHVuc2lnbmVkIHNob3J0IHRpbWVzdGFtcDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGF0YV9zbWFydF9lcnJvcmxvZ19lcnJvcl9zdHJ1Y3RfdDsKKwordHlwZWRlZiBzdHJ1Y3QgYXRhX3NtYXJ0X2Vycm9ybG9nX3N0cnVjdF9zIHsKKyBhdGFfc21hcnRfZXJyb3Jsb2dfY29tbWFuZF9zdHJ1Y3RfdCBjb21tYW5kc1s2XTsKKyBhdGFfc21hcnRfZXJyb3Jsb2dfZXJyb3Jfc3RydWN0X3QgZXJyb3Jfc3RydWN0OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgYXRhX3NtYXJ0X2Vycm9ybG9nX3N0cnVjdF90OworCit0eXBlZGVmIHN0cnVjdCBhdGFfc21hcnRfZXJyb3Jsb2dfcyB7CisgdW5zaWduZWQgY2hhciByZXZudW1iZXI7CisgdW5zaWduZWQgY2hhciBlcnJvcl9sb2dfcG9pbnRlcjsKKyBhdGFfc21hcnRfZXJyb3Jsb2dfc3RydWN0X3QgZXJyb3Jsb2dfc3RydWN0WzVdOworIHVuc2lnbmVkIHNob3J0IGF0YV9lcnJvcl9jb3VudDsKKyB1bnNpZ25lZCBzaG9ydCBub25fZmF0YWxfY291bnQ7CisgdW5zaWduZWQgc2hvcnQgZHJpdmVfdGltZW91dF9jb3VudDsKKyB1bnNpZ25lZCBjaGFyIHJlc2VydmVkWzUzXTsKKyB1bnNpZ25lZCBjaGFyIGNoa3N1bTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGF0YV9zbWFydF9lcnJvcmxvZ190OworCit0eXBlZGVmIHN0cnVjdCBhdGFfc21hcnRfc2VsZnRlc3Rsb2dfc3RydWN0X3MgeworIHVuc2lnbmVkIGNoYXIgc2VsZnRlc3RudW1iZXI7CisgdW5zaWduZWQgY2hhciBzZWxmdGVzdHN0YXR1czsKKyB1bnNpZ25lZCBzaG9ydCB0aW1lc3RhbXA7CisgdW5zaWduZWQgY2hhciBzZWxmdGVzdGZhaWx1cmVjaGVja3BvaW50OworIHVuc2lnbmVkIGludCBsYmFmaXJzdGZhaWx1cmU7CisgdW5zaWduZWQgY2hhciB2ZW5kb3JzcGVjaWZpY1sxNV07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBhdGFfc21hcnRfc2VsZnRlc3Rsb2dfc3RydWN0X3Q7CisKK3R5cGVkZWYgc3RydWN0IGF0YV9zbWFydF9zZWxmdGVzdGxvZ19zIHsKKyB1bnNpZ25lZCBzaG9ydCByZXZudW1iZXI7CisgYXRhX3NtYXJ0X3NlbGZ0ZXN0bG9nX3N0cnVjdF90IHNlbGZ0ZXN0X3N0cnVjdFsyMV07CisgdW5zaWduZWQgY2hhciB2ZW5kb3JzcGVjaWZpY1syXTsKKyB1bnNpZ25lZCBjaGFyIG1vc3RyZWNlbnR0ZXN0OworIHVuc2lnbmVkIGNoYXIgcmVzZXZlcmVkWzJdOworIHVuc2lnbmVkIGNoYXIgY2hrc3VtOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgYXRhX3NtYXJ0X3NlbGZ0ZXN0bG9nX3Q7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2hpZ2htZW0uaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9oaWdobWVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRhMzRjYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9oaWdobWVtLmgKQEAgLTAsMCArMSwzMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfSElHSE1FTV9ICisjZGVmaW5lIF9MSU5VWF9ISUdITUVNX0gKKworI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKworI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisKKyNpZm5kZWYgQVJDSF9IQVNfRkxVU0hfQU5PTl9QQUdFCisjZW5kaWYKKyNpZm5kZWYgQVJDSF9IQVNfRkxVU0hfS0VSTkVMX0RDQUNIRV9QQUdFCisjZW5kaWYKKyNkZWZpbmUga3VubWFwKHBhZ2UpIGRvIHsgKHZvaWQpIChwYWdlKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUga21hcF9hdG9taWMocGFnZSwgaWR4KSBwYWdlX2FkZHJlc3MocGFnZSkKKyNkZWZpbmUga3VubWFwX2F0b21pYyhhZGRyLCBpZHgpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUga21hcF9hdG9taWNfcGZuKHBmbiwgaWR4KSBwYWdlX2FkZHJlc3MocGZuX3RvX3BhZ2UocGZuKSkKKyNkZWZpbmUga21hcF9hdG9taWNfdG9fcGFnZShwdHIpIHZpcnRfdG9fcGFnZShwdHIpCisjaWZuZGVmIF9fSEFWRV9BUkNIX0FMTE9DX1pFUk9FRF9VU0VSX0hJR0hQQUdFCisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2hpbC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2hpbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwYjNiOTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaGlsLmgKQEAgLTAsMCArMSwyNTYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0hJTF9IXworI2RlZmluZSBfSElMX0hfCisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKworI2RlZmluZSBISUxfQ0xPQ0sgOE1IWgorI2RlZmluZSBISUxfRUsxX0NMT0NLIDMwSFoKKyNkZWZpbmUgSElMX0VLMl9DTE9DSyA2MEhaCisKKyNkZWZpbmUgSElMX1RJTUVPVVRfREVWIDUgIAorI2RlZmluZSBISUxfVElNRU9VVF9ERVZTIDEwICAKKyNkZWZpbmUgSElMX1RJTUVPVVRfTk9SRVNQIDEwICAKKyNkZWZpbmUgSElMX1RJTUVPVVRfREVWU19EQVRBIDE2ICAKKyNkZWZpbmUgSElMX1RJTUVPVVRfU0VMRlRFU1QgMjAwICAKKworI2RlZmluZSBISUxfV0lSRV9QQUNLRVRfTEVOIDE1CitlbnVtIGhpbF93aXJlX2JpdHBvcyB7CisgSElMX1dJUkVfU1RBUlQgPSAwLAorIEhJTF9XSVJFX0FERFIyLAorIEhJTF9XSVJFX0FERFIxLAorIEhJTF9XSVJFX0FERFIwLAorIEhJTF9XSVJFX0NPTU1BTkQsCisgSElMX1dJUkVfREFUQTcsCisgSElMX1dJUkVfREFUQTYsCisgSElMX1dJUkVfREFUQTUsCisgSElMX1dJUkVfREFUQTQsCisgSElMX1dJUkVfREFUQTMsCisgSElMX1dJUkVfREFUQTIsCisgSElMX1dJUkVfREFUQTEsCisgSElMX1dJUkVfREFUQTAsCisgSElMX1dJUkVfUEFSSVRZLAorIEhJTF9XSVJFX1NUT1AKK307CisKK2VudW0gaGlsX3BrdF9iaXRwb3MgeworIEhJTF9QS1RfQ01EID0gMHgwMDAwMDgwMCwKKyBISUxfUEtUX0FERFIyID0gMHgwMDAwMDQwMCwKKyBISUxfUEtUX0FERFIxID0gMHgwMDAwMDIwMCwKKyBISUxfUEtUX0FERFIwID0gMHgwMDAwMDEwMCwKKyBISUxfUEtUX0FERFJfTUFTSyA9IDB4MDAwMDA3MDAsCisgSElMX1BLVF9BRERSX1NISUZUID0gOCwKKyBISUxfUEtUX0RBVEE3ID0gMHgwMDAwMDA4MCwKKyBISUxfUEtUX0RBVEE2ID0gMHgwMDAwMDA0MCwKKyBISUxfUEtUX0RBVEE1ID0gMHgwMDAwMDAyMCwKKyBISUxfUEtUX0RBVEE0ID0gMHgwMDAwMDAxMCwKKyBISUxfUEtUX0RBVEEzID0gMHgwMDAwMDAwOCwKKyBISUxfUEtUX0RBVEEyID0gMHgwMDAwMDAwNCwKKyBISUxfUEtUX0RBVEExID0gMHgwMDAwMDAwMiwKKyBISUxfUEtUX0RBVEEwID0gMHgwMDAwMDAwMSwKKyBISUxfUEtUX0RBVEFfTUFTSyA9IDB4MDAwMDAwRkYsCisgSElMX1BLVF9EQVRBX1NISUZUID0gMAorfTsKKworZW51bSBoaWxfZXJyb3JfYml0cG9zIHsKKyBISUxfRVJSX09CID0gMHgwMDAwMDgwMCwKKyBISUxfRVJSX0lOVCA9IDB4MDAwMTAwMDAsCisgSElMX0VSUl9OTUkgPSAweDAwMDIwMDAwLAorIEhJTF9FUlJfTEVSUiA9IDB4MDAwNDAwMDAsCisgSElMX0VSUl9QRVJSID0gMHgwMTAwMDAwMCwKKyBISUxfRVJSX0ZFUlIgPSAweDAyMDAwMDAwLAorIEhJTF9FUlJfRk9GID0gMHgwNDAwMDAwMAorfTsKKworZW51bSBoaWxfY29udHJvbF9iaXRwb3MgeworIEhJTF9DVFJMX1RFU1QgPSAweDAwMDEwMDAwLAorIEhJTF9DVFJMX0lQRiA9IDB4MDAwNDAwMDAsCisgSElMX0NUUkxfQVBFID0gMHgwMjAwMDAwMAorfTsKKworI2RlZmluZSBISUxfRE9fQUxURVJfQ1RSTCAweDQwMDAwMDAwICAKKyNkZWZpbmUgSElMX0NUUkxfT05MWSAweGMwMDAwMDAwICAKKwordHlwZWRlZiB1MzIgaGlsX3BhY2tldDsKKworZW51bSBoaWxfY29tbWFuZCB7CisgSElMX0NNRF9JRkMgPSAweDAwLAorIEhJTF9DTURfRVBUID0gMHgwMSwKKyBISUxfQ01EX0VMQiA9IDB4MDIsCisgSElMX0NNRF9JREQgPSAweDAzLAorIEhJTF9DTURfRFNSID0gMHgwNCwKKyBISUxfQ01EX1BTVCA9IDB4MDUsCisgSElMX0NNRF9SUkcgPSAweDA2LAorIEhJTF9DTURfV1JHID0gMHgwNywKKyBISUxfQ01EX0FDRiA9IDB4MDgsCisgSElMX0NNRElEX0FDRiA9IDB4MDcsCisgSElMX0NNRF9QT0wgPSAweDEwLAorIEhJTF9DTURDVF9QT0wgPSAweDBmLAorIEhJTF9DTURfUlBMID0gMHgyMCwKKyBISUxfQ01EQ1RfUlBMID0gMHgwZiwKKyBISUxfQ01EX1JOTSA9IDB4MzAsCisgSElMX0NNRF9SU1QgPSAweDMxLAorIEhJTF9DTURfRVhEID0gMHgzMiwKKyBISUxfQ01EX1JTQyA9IDB4MzMsCisKKyBISUxfQ01EX0RLQSA9IDB4M2QsCisgSElMX0NNRF9FSzEgPSAweDNlLAorIEhJTF9DTURfRUsyID0gMHgzZiwKKyBISUxfQ01EX1BSMSA9IDB4NDAsCisgSElMX0NNRF9QUjIgPSAweDQxLAorIEhJTF9DTURfUFIzID0gMHg0MiwKKyBISUxfQ01EX1BSNCA9IDB4NDMsCisgSElMX0NNRF9QUjUgPSAweDQ0LAorIEhJTF9DTURfUFI2ID0gMHg0NSwKKyBISUxfQ01EX1BSNyA9IDB4NDYsCisgSElMX0NNRF9QUk0gPSAweDQ3LAorIEhJTF9DTURfQUsxID0gMHg0OCwKKyBISUxfQ01EX0FLMiA9IDB4NDksCisgSElMX0NNRF9BSzMgPSAweDRhLAorIEhJTF9DTURfQUs0ID0gMHg0YiwKKyBISUxfQ01EX0FLNSA9IDB4NGMsCisgSElMX0NNRF9BSzYgPSAweDRkLAorIEhJTF9DTURfQUs3ID0gMHg0ZSwKKyBISUxfQ01EX0FDSyA9IDB4NGYsCisKKyBISUxfQ01EX1JJTyA9IDB4ZmEsCisgSElMX0NNRF9TSFIgPSAweGZiLAorIEhJTF9DTURfVEVSID0gMHhmYywKKyBISUxfQ01EX0NBRSA9IDB4ZmQsCisgSElMX0NNRF9ESFIgPSAweGZlLAorCit9OworCisjZGVmaW5lIEhJTF9JRERfRElEX1RZUEVfTUFTSyAweGUwICAKKyNkZWZpbmUgSElMX0lERF9ESURfVFlQRV9LQl9JTlRFR1JBTCAweGEwICAKKyNkZWZpbmUgSElMX0lERF9ESURfVFlQRV9LQl9JVEYgMHhjMCAgCisjZGVmaW5lIEhJTF9JRERfRElEX1RZUEVfS0JfUlNWRCAweGUwICAKKyNkZWZpbmUgSElMX0lERF9ESURfVFlQRV9LQl9MQU5HX01BU0sgMHgxZiAgCisjZGVmaW5lIEhJTF9JRERfRElEX0tCTEFOR19VU0VfRVNEIDB4MDAgIAorI2RlZmluZSBISUxfSUREX0RJRF9UWVBFX0FCUyAweDgwICAKKyNkZWZpbmUgSElMX0lERF9ESURfQUJTX1JTVkQxX01BU0sgMHhmOCAgCisjZGVmaW5lIEhJTF9JRERfRElEX0FCU19SU1ZEMSAweDk4CisjZGVmaW5lIEhJTF9JRERfRElEX0FCU19UQUJMRVRfTUFTSyAweGY4ICAKKyNkZWZpbmUgSElMX0lERF9ESURfQUJTX1RBQkxFVCAweDkwCisjZGVmaW5lIEhJTF9JRERfRElEX0FCU19UU0NSRUVOX01BU0sgMHhmYyAgCisjZGVmaW5lIEhJTF9JRERfRElEX0FCU19UU0NSRUVOIDB4OGMKKyNkZWZpbmUgSElMX0lERF9ESURfQUJTX1JTVkQyX01BU0sgMHhmYyAgCisjZGVmaW5lIEhJTF9JRERfRElEX0FCU19SU1ZEMiAweDg4CisjZGVmaW5lIEhJTF9JRERfRElEX0FCU19SU1ZEM19NQVNLIDB4ZmMgIAorI2RlZmluZSBISUxfSUREX0RJRF9BQlNfUlNWRDMgMHg4MAorI2RlZmluZSBISUxfSUREX0RJRF9UWVBFX1JFTCAweDYwICAKKyNkZWZpbmUgSElMX0lERF9ESURfUkVMX1JTVkQxX01BU0sgMHhmMCAgCisjZGVmaW5lIEhJTF9JRERfRElEX1JFTF9SU1ZEMSAweDcwCisjZGVmaW5lIEhJTF9JRERfRElEX1JFTF9SU1ZEMl9NQVNLIDB4ZmMgIAorI2RlZmluZSBISUxfSUREX0RJRF9SRUxfUlNWRDIgMHg2YworI2RlZmluZSBISUxfSUREX0RJRF9SRUxfTU9VU0VfTUFTSyAweGZjICAKKyNkZWZpbmUgSElMX0lERF9ESURfUkVMX01PVVNFIDB4NjgKKyNkZWZpbmUgSElMX0lERF9ESURfUkVMX1FVQURfTUFTSyAweGY4ICAKKyNkZWZpbmUgSElMX0lERF9ESURfUkVMX1FVQUQgMHg2MAorI2RlZmluZSBISUxfSUREX0RJRF9UWVBFX0NIQVIgMHg0MCAgCisjZGVmaW5lIEhJTF9JRERfRElEX0NIQVJfQkFSQ09ERV9NQVNLIDB4ZmMgIAorI2RlZmluZSBISUxfSUREX0RJRF9DSEFSX0JBUkNPREUgMHg1YworI2RlZmluZSBISUxfSUREX0RJRF9DSEFSX1JTVkQxX01BU0sgMHhmYyAgCisjZGVmaW5lIEhJTF9JRERfRElEX0NIQVJfUlNWRDEgMHg1OAorI2RlZmluZSBISUxfSUREX0RJRF9DSEFSX1JTVkQyX01BU0sgMHhmOCAgCisjZGVmaW5lIEhJTF9JRERfRElEX0NIQVJfUlNWRDIgMHg1MAorI2RlZmluZSBISUxfSUREX0RJRF9DSEFSX1JTVkQzX01BU0sgMHhmMCAgCisjZGVmaW5lIEhJTF9JRERfRElEX0NIQVJfUlNWRDMgMHg0MAorI2RlZmluZSBISUxfSUREX0RJRF9UWVBFX09USEVSIDB4MjAgIAorI2RlZmluZSBISUxfSUREX0RJRF9PVEhFUl9SU1ZEMV9NQVNLIDB4ZjAgIAorI2RlZmluZSBISUxfSUREX0RJRF9PVEhFUl9SU1ZEMSAweDMwCisjZGVmaW5lIEhJTF9JRERfRElEX09USEVSX0JBUkNPREVfTUFTSyAweGZjICAKKyNkZWZpbmUgSElMX0lERF9ESURfT1RIRVJfQkFSQ09ERSAweDJjCisjZGVmaW5lIEhJTF9JRERfRElEX09USEVSX1JTVkQyX01BU0sgMHhmYyAgCisjZGVmaW5lIEhJTF9JRERfRElEX09USEVSX1JTVkQyIDB4MjgKKyNkZWZpbmUgSElMX0lERF9ESURfT1RIRVJfUlNWRDNfTUFTSyAweGY4ICAKKyNkZWZpbmUgSElMX0lERF9ESURfT1RIRVJfUlNWRDMgMHgyMAorI2RlZmluZSBISUxfSUREX0RJRF9UWVBFX0tFWVBBRCAweDAwICAKKworI2RlZmluZSBISUxfSUREX0hFQURFUl9BWFNFVF9NQVNLIDB4MDMgIAorI2RlZmluZSBISUxfSUREX0hFQURFUl9SU0MgMHgwNCAgCisjZGVmaW5lIEhJTF9JRERfSEVBREVSX0VYRCAweDA4ICAKKyNkZWZpbmUgSElMX0lERF9IRUFERVJfSU9EIDB4MTAgIAorI2RlZmluZSBISUxfSUREX0hFQURFUl8xNkJJVCAweDIwICAKKyNkZWZpbmUgSElMX0lERF9IRUFERVJfQUJTIDB4NDAgIAorI2RlZmluZSBISUxfSUREX0hFQURFUl8yWF9BWElTIDB4ODAgIAorCisjZGVmaW5lIEhJTF9JRERfSU9EX05CVVRUT05fTUFTSyAweDA3ICAKKyNkZWZpbmUgSElMX0lERF9JT0RfUFJPWElNSVRZIDB4MDggIAorI2RlZmluZSBISUxfSUREX0lPRF9QUk9NUFRfTUFTSyAweDcwICAKKyNkZWZpbmUgSElMX0lERF9JT0RfUFJPTVBUX1NISUZUIDQKKyNkZWZpbmUgSElMX0lERF9JT0RfUFJPTVBUIDB4ODAgIAorCisjZGVmaW5lIEhJTF9JRERfTlVNX0FYRVNfUEVSX1NFVChoZWFkZXJfcGFja2V0KSAgKChoZWFkZXJfcGFja2V0KSAmIEhJTF9JRERfSEVBREVSX0FYU0VUX01BU0spCisKKyNkZWZpbmUgSElMX0lERF9OVU1fQVhTRVRTKGhlYWRlcl9wYWNrZXQpICAoMiAtICEoKGhlYWRlcl9wYWNrZXQpICYgSElMX0lERF9IRUFERVJfMlhfQVhJUykpCisKKyNkZWZpbmUgSElMX0lERF9MRU4oaGVhZGVyX3BhY2tldCkgICgoNCAtICEoaGVhZGVyX3BhY2tldCAmIEhJTF9JRERfSEVBREVSX0lPRCkgLSAgIDIgKiAhKEhJTF9JRERfTlVNX0FYRVNfUEVSX1NFVChoZWFkZXJfcGFja2V0KSkpICsgICAyICogSElMX0lERF9OVU1fQVhFU19QRVJfU0VUKGhlYWRlcl9wYWNrZXQpICogICAhISgoaGVhZGVyX3BhY2tldCkgJiBISUxfSUREX0hFQURFUl9BQlMpKQorCisjZGVmaW5lIEhJTF9JRERfQVhJU19DT1VOVFNfUEVSX00oaGVhZGVyX3B0cikgICghKEhJTF9JRERfTlVNX0FYU0VUUygqKGhlYWRlcl9wdHIpKSkgPyAtMSA6ICAoKCgqKGhlYWRlcl9wdHIgKyAxKSAmIEhJTF9QS1RfREFUQV9NQVNLKSArICAgKCgqKGhlYWRlcl9wdHIgKyAyKSAmIEhJTF9QS1RfREFUQV9NQVNLKSkgPDwgOCkgICogKCgqKGhlYWRlcl9wdHIpICYgSElMX0lERF9IRUFERVJfMTZCSVQpID8gMTAwIDogMSkpKQorCisjZGVmaW5lIEhJTF9JRERfQVhJU19NQVgoaGVhZGVyX3B0ciwgX19heG51bSkgICgoISgqKGhlYWRlcl9wdHIpICYgSElMX0lERF9IRUFERVJfQUJTKSB8fCAgIChISUxfSUREX05VTV9BWEVTX1BFUl9TRVQoKihoZWFkZXJfcHRyKSkgPD0gX19heG51bSkpID8gMCA6ICAgKChISUxfUEtUX0RBVEFfTUFTSyAmICooKGhlYWRlcl9wdHIpICsgMyArIDIgKiBfX2F4bnVtKSkgKyAgICgoSElMX1BLVF9EQVRBX01BU0sgJiAqKChoZWFkZXJfcHRyKSArIDQgKyAyICogX19heG51bSkpIDw8IDgpKSkKKworI2RlZmluZSBISUxfSUREX0lPRChoZWFkZXJfcHRyKSAgKCooaGVhZGVyX3B0ciArIEhJTF9JRERfTEVOKCgqaGVhZGVyX3B0cikpIC0gMSkpCisKKyNkZWZpbmUgSElMX0lERF9IQVNfR0VOX1BST01QVChoZWFkZXJfcHRyKSAgKCgqaGVhZGVyX3B0ciAmIEhJTF9JRERfSEVBREVSX0lPRCkgJiYgICAoSElMX0lERF9JT0QoaGVhZGVyX3B0cikgJiBISUxfSUREX0lPRF9QUk9NUFQpKQorCisjZGVmaW5lIEhJTF9JRERfSEFTX0dFTl9QUk9YSU1JVFkoaGVhZGVyX3B0cikgICgoKmhlYWRlcl9wdHIgJiBISUxfSUREX0hFQURFUl9JT0QpICYmICAgKEhJTF9JRERfSU9EKGhlYWRlcl9wdHIpICYgSElMX0lERF9JT0RfUFJPWElNSVRZKSkKKworI2RlZmluZSBISUxfSUREX05VTV9CVVRUT05TKGhlYWRlcl9wdHIpICAoKCpoZWFkZXJfcHRyICYgSElMX0lERF9IRUFERVJfSU9EKSA/ICAgKEhJTF9JRERfSU9EKGhlYWRlcl9wdHIpICYgSElMX0lERF9JT0RfTkJVVFRPTl9NQVNLKSA6IDApCisKKyNkZWZpbmUgSElMX0lERF9OVU1fUFJPTVBUUyhoZWFkZXJfcHRyKSAgKCgqaGVhZGVyX3B0ciAmIEhJTF9JRERfSEVBREVSX0lPRCkgPyAgICgoSElMX0lERF9JT0QoaGVhZGVyX3B0cikgJiBISUxfSUREX0lPRF9OUFJPTVBUX01BU0spICAgPj4gSElMX0lERF9JT0RfUFJPTVBUX1NISUZUKSA6IDApCisKKyNkZWZpbmUgSElMX0VYRF9IRUFERVJfV1JHIDB4MDMgIAorI2RlZmluZSBISUxfRVhEX0hFQURFUl9XUkdfVFlQRTEgMHgwMSAgCisjZGVmaW5lIEhJTF9FWERfSEVBREVSX1dSR19UWVBFMiAweDAyICAKKyNkZWZpbmUgSElMX0VYRF9IRUFERVJfUlJHIDB4MDQgIAorI2RlZmluZSBISUxfRVhEX0hFQURFUl9STk0gMHgxMCAgCisjZGVmaW5lIEhJTF9FWERfSEVBREVSX1JTVCAweDIwICAKKyNkZWZpbmUgSElMX0VYRF9IRUFERVJfTE9DQUxFIDB4NDAgIAorCisjZGVmaW5lIEhJTF9FWERfTlVNX1JSRyhoZWFkZXJfcHRyKSAgKCgqaGVhZGVyX3B0ciAmIEhJTF9FWERfSEVBREVSX1JSRykgPyAgICgqKGhlYWRlcl9wdHIgKyAxKSAmIEhJTF9QS1RfREFUQV9NQVNLKSA6IDApCisKKyNkZWZpbmUgSElMX0VYRF9OVU1fV1dHKGhlYWRlcl9wdHIpICAoKCpoZWFkZXJfcHRyICYgSElMX0VYRF9IRUFERVJfV1JHKSA/ICAgKCooaGVhZGVyX3B0ciArIDIgLSAhKCpoZWFkZXJfcHRyICYgSElMX0VYRF9IRUFERVJfUlJHKSkgJiAgIEhJTF9QS1RfREFUQV9NQVNLKSA6IDApCisKKyNkZWZpbmUgSElMX0VYRF9MRU4oaGVhZGVyX3B0cikgICghISgqaGVhZGVyX3B0ciAmIEhJTF9FWERfSEVBREVSX1JSRykgKyAgICEhKCpoZWFkZXJfcHRyICYgSElMX0VYRF9IRUFERVJfV1JHKSArICAgISEoKmhlYWRlcl9wdHIgJiBISUxfRVhEX0hFQURFUl9MT0NBTEUpICsgICAyICogISEoKmhlYWRlcl9wdHIgJiBISUxfRVhEX0hFQURFUl9XUkdfVFlQRTIpICsgMSkKKworI2RlZmluZSBISUxfRVhEX0xPQ0FMRShoZWFkZXJfcHRyKSAgKCEoKmhlYWRlcl9wdHIgJiBISUxfRVhEX0hFQURFUl9MT0NBTEUpID8gLTEgOiAgICgqKGhlYWRlcl9wdHIgKyBISUxfRVhEX0xFTihoZWFkZXJfcHRyKSAtIDEpICYgSElMX1BLVF9EQVRBX01BU0spKQorCisjZGVmaW5lIEhJTF9FWERfV1JHX1RZUEUyX0xFTihoZWFkZXJfcHRyKSAgKCEoKmhlYWRlcl9wdHIgJiBISUxfRVhEX0hFQURFUl9XUkdfVFlQRTIpID8gLTEgOiAgICgqKGhlYWRlcl9wdHIgKyBISUxfRVhEX0xFTihoZWFkZXJfcHRyKSAtIDIgLSAgICEhKCpoZWFkZXJfcHRyICYgSElMX0VYRF9IRUFERVJfTE9DQUxFKSkgJiBISUxfUEtUX0RBVEFfTUFTSykgKyAgICgoKihoZWFkZXJfcHRyICsgSElMX0VYRF9MRU4oaGVhZGVyX3B0cikgLSAxIC0gICAhISgqaGVhZGVyX3B0ciAmIEhJTF9FWERfSEVBREVSX0xPQ0FMRSkpICYgSElMX1BLVF9EQVRBX01BU0spIDw8IDgpKQorCisjZGVmaW5lIEhJTF9MT0NBTEVfTUFYIDB4MWYKKworI2RlZmluZSBISUxfTE9DQUxFX01BUCAgIiIsICAgICIiLCAgICAiIiwgICAgInN3aXNzLmZyZW5jaCIsICAgICJwb3J0dWd1ZXNlIiwgICAgImFyYWJpYyIsICAgICJoZWJyZXciLCAgICAiZW5nbGlzaC5jYW5hZGlhbiIsICAgICJ0dXJraXNoIiwgICAgImdyZWVrIiwgICAgInRoYWkiLCAgICAiaXRhbGlhbiIsICAgICJrb3JlYW4iLCAgICAiZHV0Y2giLCAgICAic3dlZGlzaCIsICAgICJnZXJtYW4iLCAgICAiY2hpbmVzZSIsICAgICJjaGluZXNlIiwgICAgInN3aXNzLmZyZW5jaCIsICAgICJzcGFuaXNoIiwgICAgInN3aXNzLmdlcm1hbiIsICAgICJmbGVtaXNoIiwgICAgImZpbm5pc2giLCAgICAiZW5nbGlzaC51ayIsICAgICJmcmVuY2guY2FuYWRpYW4iLCAgICAic3dpc3MuZ2VybWFuIiwgICAgIm5vcndlZ2lhbiIsICAgICJmcmVuY2giLCAgICAiZGFuaXNoIiwgICAgImphcGFuZXNlIiwgICAgInNwYW5pc2giLCAgICJlbmdsaXNoLnVzIiAgICAKKworI2RlZmluZSBISUxfS0VZQ09ERVNfU0VUMV9UQkxTSVpFIDEyOAorI2RlZmluZSBISUxfS0VZQ09ERVNfU0VUMSAgIEtFWV81LCBLRVlfUkVTRVJWRUQsIEtFWV9SSUdIVEFMVCwgS0VZX0xFRlRBTFQsICAgS0VZX1JJR0hUU0hJRlQsIEtFWV9MRUZUU0hJRlQsIEtFWV9MRUZUQ1RSTCwgS0VZX1NZU1JRLCAgIEtFWV9LUDQsIEtFWV9LUDgsIEtFWV9LUDUsIEtFWV9LUDksICAgS0VZX0tQNiwgS0VZX0tQNywgS0VZX0tQQ09NTUEsIEtFWV9LUEVOVEVSLCAgIEtFWV9LUDEsIEtFWV9LUFNMQVNILCBLRVlfS1AyLCBLRVlfS1BQTFVTLCAgIEtFWV9LUDMsIEtFWV9LUEFTVEVSSVNLLCBLRVlfS1AwLCBLRVlfS1BNSU5VUywgICBLRVlfQiwgS0VZX1YsIEtFWV9DLCBLRVlfWCwgICBLRVlfWiwgS0VZX1JFU0VSVkVELCBLRVlfUkVTRVJWRUQsIEtFWV9FU0MsICAgS0VZXzYsIEtFWV9GMTAsIEtFWV8zLCBLRVlfRjExLCAgIEtFWV9LUERPVCwgS0VZX0Y5LCBLRVlfVEFCICAsIEtFWV9GMTIsICAgS0VZX0gsIEtFWV9HLCBLRVlfRiwgS0VZX0QsICAgS0VZX1MsIEtFWV9BLCBLRVlfUkVTRVJWRUQsIEtFWV9DQVBTTE9DSywgICBLRVlfVSwgS0VZX1ksIEtFWV9ULCBLRVlfUiwgICBLRVlfRSwgS0VZX1csIEtFWV9RLCBLRVlfVEFCLCAgIEtFWV83LCBLRVlfNiwgS0VZXzUsIEtFWV80LCAgIEtFWV8zLCBLRVlfMiwgS0VZXzEsIEtFWV9HUkFWRSwgICBLRVlfRjEzLCBLRVlfRjE0LCBLRVlfRjE1LCBLRVlfRjE2LCAgIEtFWV9GMTcsIEtFWV9GMTgsIEtFWV9GMTksIEtFWV9GMjAsICAgS0VZX01FTlUsIEtFWV9GNCwgS0VZX0YzLCBLRVlfRjIsICAgS0VZX0YxLCBLRVlfVk9MVU1FVVAsIEtFWV9TVE9QLCBLRVlfU0VOREZJTEUsICAgS0VZX1NZU1JRLCBLRVlfRjUsIEtFWV9GNiwgS0VZX0Y3LCAgIEtFWV9GOCwgS0VZX1ZPTFVNRURPV04sIEtFWV9ERUxfRU9MLCBLRVlfREVMX0VPUywgICBLRVlfOCwgS0VZXzksIEtFWV8wLCBLRVlfTUlOVVMsICAgS0VZX0VRVUFMLCBLRVlfQkFDS1NQQUNFLCBLRVlfSU5TX0xJTkUsIEtFWV9ERUxfTElORSwgICBLRVlfSSwgS0VZX08sIEtFWV9QLCBLRVlfTEVGVEJSQUNFLCAgIEtFWV9SSUdIVEJSQUNFLCBLRVlfQkFDS1NMQVNILCBLRVlfSU5TRVJULCBLRVlfREVMRVRFLCAgIEtFWV9KLCBLRVlfSywgS0VZX0wsIEtFWV9TRU1JQ09MT04sICAgS0VZX0FQT1NUUk9QSEUsIEtFWV9FTlRFUiwgS0VZX0hPTUUsIEtFWV9QQUdFVVAsICAgS0VZX00sIEtFWV9DT01NQSwgS0VZX0RPVCwgS0VZX1NMQVNILCAgIEtFWV9CQUNLU0xBU0gsIEtFWV9TRUxFQ1QsIEtFWV8xMDJORCwgS0VZX1BBR0VET1dOLCAgIEtFWV9OLCBLRVlfU1BBQ0UsIEtFWV9ORVhULCBLRVlfUkVTRVJWRUQsICAgS0VZX0xFRlQsIEtFWV9ET1dOLCBLRVlfVVAsIEtFWV9SSUdIVAorCisjZGVmaW5lIEhJTF9LRVlDT0RFU19TRVQzX1RCTFNJWkUgMTI4CisjZGVmaW5lIEhJTF9LRVlDT0RFU19TRVQzICAgS0VZX1JFU0VSVkVELCBLRVlfRVNDLCBLRVlfMSwgS0VZXzIsICAgS0VZXzMsIEtFWV80LCBLRVlfNSwgS0VZXzYsICAgS0VZXzcsIEtFWV84LCBLRVlfOSwgS0VZXzAsICAgS0VZX01JTlVTLCBLRVlfRVFVQUwsIEtFWV9CQUNLU1BBQ0UsIEtFWV9UQUIsICAgS0VZX1EsIEtFWV9XLCBLRVlfRSwgS0VZX1IsICAgS0VZX1QsIEtFWV9ZLCBLRVlfVSwgS0VZX0ksICAgS0VZX08sIEtFWV9QLCBLRVlfTEVGVEJSQUNFLCBLRVlfUklHSFRCUkFDRSwgICBLRVlfRU5URVIsIEtFWV9MRUZUQ1RSTCwgS0VZX0EsIEtFWV9TLCAgIEtFWV9ELCBLRVlfRiwgS0VZX0csIEtFWV9ILCAgIEtFWV9KLCBLRVlfSywgS0VZX0wsIEtFWV9TRU1JQ09MT04sICAgS0VZX0FQT1NUUk9QSEUsS0VZX0dSQVZFLCBLRVlfTEVGVFNISUZULCBLRVlfQkFDS1NMQVNILCAgIEtFWV9aLCBLRVlfWCwgS0VZX0MsIEtFWV9WLCAgIEtFWV9CLCBLRVlfTiwgS0VZX00sIEtFWV9DT01NQSwgICBLRVlfRE9ULCBLRVlfU0xBU0gsIEtFWV9SSUdIVFNISUZULCBLRVlfS1BBU1RFUklTSywgICBLRVlfTEVGVEFMVCwgS0VZX1NQQUNFLCBLRVlfQ0FQU0xPQ0ssIEtFWV9GMSwgICBLRVlfRjIsIEtFWV9GMywgS0VZX0Y0LCBLRVlfRjUsICAgS0VZX0Y2LCBLRVlfRjcsIEtFWV9GOCwgS0VZX0Y5LCAgIEtFWV9GMTAsIEtFWV9OVU1MT0NLLCBLRVlfU0NST0xMTE9DSywgS0VZX0tQNywgICBLRVlfS1A4LCBLRVlfS1A5LCBLRVlfS1BNSU5VUywgS0VZX0tQNCwgICBLRVlfS1A1LCBLRVlfS1A2LCBLRVlfS1BQTFVTLCBLRVlfS1AxLCAgIEtFWV9LUDIsIEtFWV9LUDMsIEtFWV9LUDAsIEtFWV9LUERPVCwgICBLRVlfU1lTUlEsIEtFWV9SRVNFUlZFRCwgS0VZX1JFU0VSVkVELCBLRVlfUkVTRVJWRUQsICAgS0VZX1JFU0VSVkVELCBLRVlfUkVTRVJWRUQsIEtFWV9SRVNFUlZFRCwgS0VZX1JFU0VSVkVELCAgIEtFWV9SRVNFUlZFRCwgS0VZX1JFU0VSVkVELCBLRVlfUkVTRVJWRUQsIEtFWV9SRVNFUlZFRCwgICBLRVlfVVAsIEtFWV9MRUZULCBLRVlfRE9XTiwgS0VZX1JJR0hULCAgIEtFWV9IT01FLCBLRVlfUEFHRVVQLCBLRVlfRU5ELCBLRVlfUEFHRURPV04sICAgS0VZX0lOU0VSVCwgS0VZX0RFTEVURSwgS0VZXzEwMk5ELCBLRVlfUkVTRVJWRUQsICAgS0VZX1JFU0VSVkVELCBLRVlfUkVTRVJWRUQsIEtFWV9SRVNFUlZFRCwgS0VZX1JFU0VSVkVELCAgIEtFWV9GMSwgS0VZX0YyLCBLRVlfRjMsIEtFWV9GNCwgICBLRVlfRjUsIEtFWV9GNiwgS0VZX0Y3LCBLRVlfRjgsICAgS0VZX1JFU0VSVkVELCBLRVlfUkVTRVJWRUQsIEtFWV9SRVNFUlZFRCwgS0VZX1JFU0VSVkVELCAgIEtFWV9SRVNFUlZFRCwgS0VZX1JFU0VSVkVELCBLRVlfUkVTRVJWRUQsIEtFWV9SRVNFUlZFRAorCisjZGVmaW5lIEhJTF9QT0xfTlVNX0FYRVNfTUFTSyAweDAzICAKKyNkZWZpbmUgSElMX1BPTF9DVFMgMHgwNCAgCisjZGVmaW5lIEhJTF9QT0xfU1RBVFVTX1BFTkRJTkcgMHgwOCAgCisjZGVmaW5lIEhJTF9QT0xfQ0hBUlRZUEVfTUFTSyAweDcwICAKKyNkZWZpbmUgSElMX1BPTF9DSEFSVFlQRV9OT05FIDB4MDAgIAorI2RlZmluZSBISUxfUE9MX0NIQVJUWVBFX1JTVkQxIDB4MTAgIAorI2RlZmluZSBISUxfUE9MX0NIQVJUWVBFX0FTQ0lJIDB4MjAgIAorI2RlZmluZSBISUxfUE9MX0NIQVJUWVBFX0JJTkFSWSAweDMwICAKKyNkZWZpbmUgSElMX1BPTF9DSEFSVFlQRV9TRVQxIDB4NDAgIAorI2RlZmluZSBISUxfUE9MX0NIQVJUWVBFX1JTVkQyIDB4NTAgIAorI2RlZmluZSBISUxfUE9MX0NIQVJUWVBFX1NFVDIgMHg2MCAgCisjZGVmaW5lIEhJTF9QT0xfQ0hBUlRZUEVfU0VUMyAweDcwICAKKyNkZWZpbmUgSElMX1BPTF9BWElTX0FMVCAweDgwICAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaTJjLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaTJjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUxM2ZjNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pMmMuaApAQCAtMCwwICsxLDk1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9JMkNfSAorI2RlZmluZSBfTElOVVhfSTJDX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3N0cnVjdCBpMmNfbXNnIHsKKyBfX3UxNiBhZGRyOworIF9fdTE2IGZsYWdzOworI2RlZmluZSBJMkNfTV9URU4gMHgxMCAgCisjZGVmaW5lIEkyQ19NX1JEIDB4MDEKKyNkZWZpbmUgSTJDX01fTk9TVEFSVCAweDQwMDAKKyNkZWZpbmUgSTJDX01fUkVWX0RJUl9BRERSIDB4MjAwMAorI2RlZmluZSBJMkNfTV9JR05PUkVfTkFLIDB4MTAwMAorI2RlZmluZSBJMkNfTV9OT19SRF9BQ0sgMHgwODAwCisgX191MTYgbGVuOworIF9fdTggKmJ1ZjsKK307CisKKyNkZWZpbmUgSTJDX0ZVTkNfSTJDIDB4MDAwMDAwMDEKKyNkZWZpbmUgSTJDX0ZVTkNfMTBCSVRfQUREUiAweDAwMDAwMDAyCisjZGVmaW5lIEkyQ19GVU5DX1BST1RPQ09MX01BTkdMSU5HIDB4MDAwMDAwMDQgIAorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19IV1BFQ19DQUxDIDB4MDAwMDAwMDggIAorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19CTE9DS19QUk9DX0NBTEwgMHgwMDAwODAwMCAgCisjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX1FVSUNLIDB4MDAwMTAwMDAgCisjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX1JFQURfQllURSAweDAwMDIwMDAwIAorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19XUklURV9CWVRFIDB4MDAwNDAwMDAgCisjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX1JFQURfQllURV9EQVRBIDB4MDAwODAwMDAgCisjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX1dSSVRFX0JZVEVfREFUQSAweDAwMTAwMDAwIAorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19SRUFEX1dPUkRfREFUQSAweDAwMjAwMDAwIAorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19XUklURV9XT1JEX0RBVEEgMHgwMDQwMDAwMCAKKyNkZWZpbmUgSTJDX0ZVTkNfU01CVVNfUFJPQ19DQUxMIDB4MDA4MDAwMDAgCisjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX1JFQURfQkxPQ0tfREFUQSAweDAxMDAwMDAwIAorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19XUklURV9CTE9DS19EQVRBIDB4MDIwMDAwMDAgCisjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX1JFQURfSTJDX0JMT0NLIDB4MDQwMDAwMDAgIAorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19XUklURV9JMkNfQkxPQ0sgMHgwODAwMDAwMCAgCisjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX1JFQURfSTJDX0JMT0NLXzIgMHgxMDAwMDAwMCAgCisjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX1dSSVRFX0kyQ19CTE9DS18yIDB4MjAwMDAwMDAgIAorCisjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX0JZVEUgKEkyQ19GVU5DX1NNQlVTX1JFQURfQllURSB8ICAgSTJDX0ZVTkNfU01CVVNfV1JJVEVfQllURSkKKyNkZWZpbmUgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBIChJMkNfRlVOQ19TTUJVU19SRUFEX0JZVEVfREFUQSB8ICAgSTJDX0ZVTkNfU01CVVNfV1JJVEVfQllURV9EQVRBKQorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19XT1JEX0RBVEEgKEkyQ19GVU5DX1NNQlVTX1JFQURfV09SRF9EQVRBIHwgICBJMkNfRlVOQ19TTUJVU19XUklURV9XT1JEX0RBVEEpCisjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX0JMT0NLX0RBVEEgKEkyQ19GVU5DX1NNQlVTX1JFQURfQkxPQ0tfREFUQSB8ICAgSTJDX0ZVTkNfU01CVVNfV1JJVEVfQkxPQ0tfREFUQSkKKyNkZWZpbmUgSTJDX0ZVTkNfU01CVVNfSTJDX0JMT0NLIChJMkNfRlVOQ19TTUJVU19SRUFEX0kyQ19CTE9DSyB8ICAgSTJDX0ZVTkNfU01CVVNfV1JJVEVfSTJDX0JMT0NLKQorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19JMkNfQkxPQ0tfMiAoSTJDX0ZVTkNfU01CVVNfUkVBRF9JMkNfQkxPQ0tfMiB8ICAgSTJDX0ZVTkNfU01CVVNfV1JJVEVfSTJDX0JMT0NLXzIpCisKKyNkZWZpbmUgSTJDX0ZVTkNfU01CVVNfRU1VTCAoSTJDX0ZVTkNfU01CVVNfUVVJQ0sgfCAgIEkyQ19GVU5DX1NNQlVTX0JZVEUgfCAgIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSB8ICAgSTJDX0ZVTkNfU01CVVNfV09SRF9EQVRBIHwgICBJMkNfRlVOQ19TTUJVU19QUk9DX0NBTEwgfCAgIEkyQ19GVU5DX1NNQlVTX1dSSVRFX0JMT0NLX0RBVEEgfCAgIEkyQ19GVU5DX1NNQlVTX0kyQ19CTE9DSykKKworI2RlZmluZSBJMkNfU01CVVNfQkxPQ0tfTUFYIDMyICAgCit1bmlvbiBpMmNfc21idXNfZGF0YSB7CisgX191OCBieXRlOworIF9fdTE2IHdvcmQ7CisgX191OCBibG9ja1tJMkNfU01CVVNfQkxPQ0tfTUFYICsgMl07CisKK307CisKKyNkZWZpbmUgSTJDX1NNQlVTX1JFQUQgMQorI2RlZmluZSBJMkNfU01CVVNfV1JJVEUgMAorCisjZGVmaW5lIEkyQ19TTUJVU19RVUlDSyAwCisjZGVmaW5lIEkyQ19TTUJVU19CWVRFIDEKKyNkZWZpbmUgSTJDX1NNQlVTX0JZVEVfREFUQSAyIAorI2RlZmluZSBJMkNfU01CVVNfV09SRF9EQVRBIDMKKyNkZWZpbmUgSTJDX1NNQlVTX1BST0NfQ0FMTCA0CisjZGVmaW5lIEkyQ19TTUJVU19CTE9DS19EQVRBIDUKKyNkZWZpbmUgSTJDX1NNQlVTX0kyQ19CTE9DS19EQVRBIDYKKyNkZWZpbmUgSTJDX1NNQlVTX0JMT0NLX1BST0NfQ0FMTCA3ICAKKworI2RlZmluZSBJMkNfUkVUUklFUyAweDA3MDEgIAorCisjZGVmaW5lIEkyQ19USU1FT1VUIDB4MDcwMiAgCisKKyNkZWZpbmUgSTJDX1NMQVZFIDB4MDcwMyAgCisKKyNkZWZpbmUgSTJDX1NMQVZFX0ZPUkNFIDB4MDcwNiAgCisKKyNkZWZpbmUgSTJDX1RFTkJJVCAweDA3MDQgIAorCisjZGVmaW5lIEkyQ19GVU5DUyAweDA3MDUgIAorI2RlZmluZSBJMkNfUkRXUiAweDA3MDcgIAorI2RlZmluZSBJMkNfUEVDIDB4MDcwOCAgCisKKyNkZWZpbmUgSTJDX1NNQlVTIDB4MDcyMCAgCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2ljbXAuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pY21wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzViNThiYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pY21wLmgKQEAgLTAsMCArMSw4MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfSUNNUF9ICisjZGVmaW5lIF9MSU5VWF9JQ01QX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNkZWZpbmUgSUNNUF9FQ0hPUkVQTFkgMCAgCisjZGVmaW5lIElDTVBfREVTVF9VTlJFQUNIIDMgIAorI2RlZmluZSBJQ01QX1NPVVJDRV9RVUVOQ0ggNCAgCisjZGVmaW5lIElDTVBfUkVESVJFQ1QgNSAgCisjZGVmaW5lIElDTVBfRUNITyA4ICAKKyNkZWZpbmUgSUNNUF9USU1FX0VYQ0VFREVEIDExICAKKyNkZWZpbmUgSUNNUF9QQVJBTUVURVJQUk9CIDEyICAKKyNkZWZpbmUgSUNNUF9USU1FU1RBTVAgMTMgIAorI2RlZmluZSBJQ01QX1RJTUVTVEFNUFJFUExZIDE0ICAKKyNkZWZpbmUgSUNNUF9JTkZPX1JFUVVFU1QgMTUgIAorI2RlZmluZSBJQ01QX0lORk9fUkVQTFkgMTYgIAorI2RlZmluZSBJQ01QX0FERFJFU1MgMTcgIAorI2RlZmluZSBJQ01QX0FERFJFU1NSRVBMWSAxOCAgCisjZGVmaW5lIE5SX0lDTVBfVFlQRVMgMTgKKworI2RlZmluZSBJQ01QX05FVF9VTlJFQUNIIDAgIAorI2RlZmluZSBJQ01QX0hPU1RfVU5SRUFDSCAxICAKKyNkZWZpbmUgSUNNUF9QUk9UX1VOUkVBQ0ggMiAgCisjZGVmaW5lIElDTVBfUE9SVF9VTlJFQUNIIDMgIAorI2RlZmluZSBJQ01QX0ZSQUdfTkVFREVEIDQgIAorI2RlZmluZSBJQ01QX1NSX0ZBSUxFRCA1ICAKKyNkZWZpbmUgSUNNUF9ORVRfVU5LTk9XTiA2CisjZGVmaW5lIElDTVBfSE9TVF9VTktOT1dOIDcKKyNkZWZpbmUgSUNNUF9IT1NUX0lTT0xBVEVEIDgKKyNkZWZpbmUgSUNNUF9ORVRfQU5PIDkKKyNkZWZpbmUgSUNNUF9IT1NUX0FOTyAxMAorI2RlZmluZSBJQ01QX05FVF9VTlJfVE9TIDExCisjZGVmaW5lIElDTVBfSE9TVF9VTlJfVE9TIDEyCisjZGVmaW5lIElDTVBfUEtUX0ZJTFRFUkVEIDEzICAKKyNkZWZpbmUgSUNNUF9QUkVDX1ZJT0xBVElPTiAxNCAgCisjZGVmaW5lIElDTVBfUFJFQ19DVVRPRkYgMTUgIAorI2RlZmluZSBOUl9JQ01QX1VOUkVBQ0ggMTUgIAorCisjZGVmaW5lIElDTVBfUkVESVJfTkVUIDAgIAorI2RlZmluZSBJQ01QX1JFRElSX0hPU1QgMSAgCisjZGVmaW5lIElDTVBfUkVESVJfTkVUVE9TIDIgIAorI2RlZmluZSBJQ01QX1JFRElSX0hPU1RUT1MgMyAgCisKKyNkZWZpbmUgSUNNUF9FWENfVFRMIDAgIAorI2RlZmluZSBJQ01QX0VYQ19GUkFHVElNRSAxICAKKworc3RydWN0IGljbXBoZHIgeworIF9fdTggdHlwZTsKKyBfX3U4IGNvZGU7CisgX191MTYgY2hlY2tzdW07CisgdW5pb24geworIHN0cnVjdCB7CisgX191MTYgaWQ7CisgX191MTYgc2VxdWVuY2U7CisgfSBlY2hvOworIF9fdTMyIGdhdGV3YXk7Cisgc3RydWN0IHsKKyBfX3UxNiBfX3VudXNlZF9maWVsZDsKKyBfX3UxNiBtdHU7CisgfSBmcmFnOworIH0gdW47Cit9OworCisjZGVmaW5lIElDTVBfRklMVEVSIDEKKworc3RydWN0IGljbXBfZmlsdGVyIHsKKyBfX3UzMiBkYXRhOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaWYuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3YzI5ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaWYuaApAQCAtMCwwICsxLDE3NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfSUZfSAorI2RlZmluZSBfTElOVVhfSUZfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4gIAorI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPiAgCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4gIAorCisjZGVmaW5lIElGTkFNU0laIDE2CisjaW5jbHVkZSA8bGludXgvaGRsYy9pb2N0bC5oPgorCisjZGVmaW5lIElGRl9VUCAweDEgIAorI2RlZmluZSBJRkZfQlJPQURDQVNUIDB4MiAgCisjZGVmaW5lIElGRl9ERUJVRyAweDQgIAorI2RlZmluZSBJRkZfTE9PUEJBQ0sgMHg4ICAKKyNkZWZpbmUgSUZGX1BPSU5UT1BPSU5UIDB4MTAgIAorI2RlZmluZSBJRkZfTk9UUkFJTEVSUyAweDIwICAKKyNkZWZpbmUgSUZGX1JVTk5JTkcgMHg0MCAgCisjZGVmaW5lIElGRl9OT0FSUCAweDgwICAKKyNkZWZpbmUgSUZGX1BST01JU0MgMHgxMDAgIAorI2RlZmluZSBJRkZfQUxMTVVMVEkgMHgyMDAgIAorCisjZGVmaW5lIElGRl9NQVNURVIgMHg0MDAgIAorI2RlZmluZSBJRkZfU0xBVkUgMHg4MDAgIAorCisjZGVmaW5lIElGRl9NVUxUSUNBU1QgMHgxMDAwICAKKworI2RlZmluZSBJRkZfUE9SVFNFTCAweDIwMDAgIAorI2RlZmluZSBJRkZfQVVUT01FRElBIDB4NDAwMCAgCisjZGVmaW5lIElGRl9EWU5BTUlDIDB4ODAwMCAgCisKKyNkZWZpbmUgSUZGX0xPV0VSX1VQIDB4MTAwMDAgIAorI2RlZmluZSBJRkZfRE9STUFOVCAweDIwMDAwICAKKworI2RlZmluZSBJRkZfVk9MQVRJTEUgKElGRl9MT09QQkFDS3xJRkZfUE9JTlRPUE9JTlR8SUZGX0JST0FEQ0FTVHwgIElGRl9NQVNURVJ8SUZGX1NMQVZFfElGRl9SVU5OSU5HfElGRl9MT1dFUl9VUHxJRkZfRE9STUFOVCkKKworI2RlZmluZSBJRkZfODAyXzFRX1ZMQU4gMHgxICAKKyNkZWZpbmUgSUZGX0VCUklER0UgMHgyICAKKyNkZWZpbmUgSUZGX1NMQVZFX0lOQUNUSVZFIDB4NCAgCisjZGVmaW5lIElGRl9NQVNURVJfODAyM0FEIDB4OCAgCisjZGVmaW5lIElGRl9NQVNURVJfQUxCIDB4MTAgIAorCisjZGVmaW5lIElGX0dFVF9JRkFDRSAweDAwMDEgIAorI2RlZmluZSBJRl9HRVRfUFJPVE8gMHgwMDAyCisKKyNkZWZpbmUgSUZfSUZBQ0VfVjM1IDB4MTAwMCAgCisjZGVmaW5lIElGX0lGQUNFX1YyNCAweDEwMDEgIAorI2RlZmluZSBJRl9JRkFDRV9YMjEgMHgxMDAyICAKKyNkZWZpbmUgSUZfSUZBQ0VfVDEgMHgxMDAzICAKKyNkZWZpbmUgSUZfSUZBQ0VfRTEgMHgxMDA0ICAKKyNkZWZpbmUgSUZfSUZBQ0VfU1lOQ19TRVJJQUwgMHgxMDA1ICAKKyNkZWZpbmUgSUZfSUZBQ0VfWDIxRCAweDEwMDYgIAorCisjZGVmaW5lIElGX1BST1RPX0hETEMgMHgyMDAwICAKKyNkZWZpbmUgSUZfUFJPVE9fUFBQIDB4MjAwMSAgCisjZGVmaW5lIElGX1BST1RPX0NJU0NPIDB4MjAwMiAgCisjZGVmaW5lIElGX1BST1RPX0ZSIDB4MjAwMyAgCisjZGVmaW5lIElGX1BST1RPX0ZSX0FERF9QVkMgMHgyMDA0ICAKKyNkZWZpbmUgSUZfUFJPVE9fRlJfREVMX1BWQyAweDIwMDUgIAorI2RlZmluZSBJRl9QUk9UT19YMjUgMHgyMDA2ICAKKyNkZWZpbmUgSUZfUFJPVE9fSERMQ19FVEggMHgyMDA3ICAKKyNkZWZpbmUgSUZfUFJPVE9fRlJfQUREX0VUSF9QVkMgMHgyMDA4ICAKKyNkZWZpbmUgSUZfUFJPVE9fRlJfREVMX0VUSF9QVkMgMHgyMDA5ICAKKyNkZWZpbmUgSUZfUFJPVE9fRlJfUFZDIDB4MjAwQSAgCisjZGVmaW5lIElGX1BST1RPX0ZSX0VUSF9QVkMgMHgyMDBCCisjZGVmaW5lIElGX1BST1RPX1JBVyAweDIwMEMgIAorCitlbnVtIHsKKyBJRl9PUEVSX1VOS05PV04sCisgSUZfT1BFUl9OT1RQUkVTRU5ULAorIElGX09QRVJfRE9XTiwKKyBJRl9PUEVSX0xPV0VSTEFZRVJET1dOLAorIElGX09QRVJfVEVTVElORywKKyBJRl9PUEVSX0RPUk1BTlQsCisgSUZfT1BFUl9VUCwKK307CisKK2VudW0geworIElGX0xJTktfTU9ERV9ERUZBVUxULAorIElGX0xJTktfTU9ERV9ET1JNQU5ULAorfTsKKworc3RydWN0IGlmbWFwCit7CisgdW5zaWduZWQgbG9uZyBtZW1fc3RhcnQ7CisgdW5zaWduZWQgbG9uZyBtZW1fZW5kOworIHVuc2lnbmVkIHNob3J0IGJhc2VfYWRkcjsKKyB1bnNpZ25lZCBjaGFyIGlycTsKKyB1bnNpZ25lZCBjaGFyIGRtYTsKKyB1bnNpZ25lZCBjaGFyIHBvcnQ7CisKK307CisKK3N0cnVjdCBpZl9zZXR0aW5ncworeworIHVuc2lnbmVkIGludCB0eXBlOworIHVuc2lnbmVkIGludCBzaXplOworIHVuaW9uIHsKKworIHJhd19oZGxjX3Byb3RvIF9fdXNlciAqcmF3X2hkbGM7CisgY2lzY29fcHJvdG8gX191c2VyICpjaXNjbzsKKyBmcl9wcm90byBfX3VzZXIgKmZyOworIGZyX3Byb3RvX3B2YyBfX3VzZXIgKmZyX3B2YzsKKyBmcl9wcm90b19wdmNfaW5mbyBfX3VzZXIgKmZyX3B2Y19pbmZvOworCisgc3luY19zZXJpYWxfc2V0dGluZ3MgX191c2VyICpzeW5jOworIHRlMV9zZXR0aW5ncyBfX3VzZXIgKnRlMTsKKyB9IGlmc19pZnN1OworfTsKKworc3RydWN0IGlmcmVxCit7CisjZGVmaW5lIElGSFdBRERSTEVOIDYKKyB1bmlvbgorIHsKKyBjaGFyIGlmcm5fbmFtZVtJRk5BTVNJWl07CisgfSBpZnJfaWZybjsKKworIHVuaW9uIHsKKyBzdHJ1Y3Qgc29ja2FkZHIgaWZydV9hZGRyOworIHN0cnVjdCBzb2NrYWRkciBpZnJ1X2RzdGFkZHI7Cisgc3RydWN0IHNvY2thZGRyIGlmcnVfYnJvYWRhZGRyOworIHN0cnVjdCBzb2NrYWRkciBpZnJ1X25ldG1hc2s7Cisgc3RydWN0IHNvY2thZGRyIGlmcnVfaHdhZGRyOworIHNob3J0IGlmcnVfZmxhZ3M7CisgaW50IGlmcnVfaXZhbHVlOworIGludCBpZnJ1X210dTsKKyBzdHJ1Y3QgaWZtYXAgaWZydV9tYXA7CisgY2hhciBpZnJ1X3NsYXZlW0lGTkFNU0laXTsKKyBjaGFyIGlmcnVfbmV3bmFtZVtJRk5BTVNJWl07Cisgdm9pZCBfX3VzZXIgKiBpZnJ1X2RhdGE7Cisgc3RydWN0IGlmX3NldHRpbmdzIGlmcnVfc2V0dGluZ3M7CisgfSBpZnJfaWZydTsKK307CisKKyNkZWZpbmUgaWZyX25hbWUgaWZyX2lmcm4uaWZybl9uYW1lICAKKyNkZWZpbmUgaWZyX2h3YWRkciBpZnJfaWZydS5pZnJ1X2h3YWRkciAgCisjZGVmaW5lIGlmcl9hZGRyIGlmcl9pZnJ1LmlmcnVfYWRkciAgCisjZGVmaW5lIGlmcl9kc3RhZGRyIGlmcl9pZnJ1LmlmcnVfZHN0YWRkciAgCisjZGVmaW5lIGlmcl9icm9hZGFkZHIgaWZyX2lmcnUuaWZydV9icm9hZGFkZHIgIAorI2RlZmluZSBpZnJfbmV0bWFzayBpZnJfaWZydS5pZnJ1X25ldG1hc2sgIAorI2RlZmluZSBpZnJfZmxhZ3MgaWZyX2lmcnUuaWZydV9mbGFncyAgCisjZGVmaW5lIGlmcl9tZXRyaWMgaWZyX2lmcnUuaWZydV9pdmFsdWUgIAorI2RlZmluZSBpZnJfbXR1IGlmcl9pZnJ1LmlmcnVfbXR1ICAKKyNkZWZpbmUgaWZyX21hcCBpZnJfaWZydS5pZnJ1X21hcCAgCisjZGVmaW5lIGlmcl9zbGF2ZSBpZnJfaWZydS5pZnJ1X3NsYXZlICAKKyNkZWZpbmUgaWZyX2RhdGEgaWZyX2lmcnUuaWZydV9kYXRhICAKKyNkZWZpbmUgaWZyX2lmaW5kZXggaWZyX2lmcnUuaWZydV9pdmFsdWUgIAorI2RlZmluZSBpZnJfYmFuZHdpZHRoIGlmcl9pZnJ1LmlmcnVfaXZhbHVlICAKKyNkZWZpbmUgaWZyX3FsZW4gaWZyX2lmcnUuaWZydV9pdmFsdWUgIAorI2RlZmluZSBpZnJfbmV3bmFtZSBpZnJfaWZydS5pZnJ1X25ld25hbWUgIAorI2RlZmluZSBpZnJfc2V0dGluZ3MgaWZyX2lmcnUuaWZydV9zZXR0aW5ncyAgCisKK3N0cnVjdCBpZmNvbmYKK3sKKyBpbnQgaWZjX2xlbjsKKyB1bmlvbgorIHsKKyBjaGFyIF9fdXNlciAqaWZjdV9idWY7Cisgc3RydWN0IGlmcmVxIF9fdXNlciAqaWZjdV9yZXE7CisgfSBpZmNfaWZjdTsKK307CisjZGVmaW5lIGlmY19idWYgaWZjX2lmY3UuaWZjdV9idWYgIAorI2RlZmluZSBpZmNfcmVxIGlmY19pZmN1LmlmY3VfcmVxICAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaWZfYXJjbmV0LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaWZfYXJjbmV0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFhZDg3NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pZl9hcmNuZXQuaApAQCAtMCwwICsxLDk0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9JRl9BUkNORVRfSAorI2RlZmluZSBfTElOVVhfSUZfQVJDTkVUX0gKKworI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CisKKyNkZWZpbmUgQVJDX1BfSVAgMjEyICAKKyNkZWZpbmUgQVJDX1BfSVBWNiAxOTYgIAorI2RlZmluZSBBUkNfUF9BUlAgMjEzICAKKyNkZWZpbmUgQVJDX1BfUkFSUCAyMTQgIAorI2RlZmluZSBBUkNfUF9JUFggMjUwICAKKyNkZWZpbmUgQVJDX1BfTk9WRUxMX0VDIDIzNiAgCisKKyNkZWZpbmUgQVJDX1BfSVBfUkZDMTA1MSAyNDAgIAorI2RlZmluZSBBUkNfUF9BUlBfUkZDMTA1MSAyNDEgIAorCisjZGVmaW5lIEFSQ19QX0VUSEVSIDIzMiAgCisKKyNkZWZpbmUgQVJDX1BfREFUQVBPSU5UX0JPT1QgMCAgCisjZGVmaW5lIEFSQ19QX0RBVEFQT0lOVF9NT1VOVCAxCisjZGVmaW5lIEFSQ19QX1BPV0VSTEFOX0JFQUNPTiA4ICAKKyNkZWZpbmUgQVJDX1BfUE9XRVJMQU5fQkVBQ09OMiAyNDMgIAorI2RlZmluZSBBUkNfUF9MQU5TT0ZUIDI1MSAgCisjZGVmaW5lIEFSQ19QX0FUQUxLIDB4REQKKworI2RlZmluZSBBUkNORVRfQUxFTiAxCisKK3N0cnVjdCBhcmNfcmZjMTIwMQoreworIHVpbnQ4X3QgcHJvdG87CisgdWludDhfdCBzcGxpdF9mbGFnOworIHVpbnQxNl90IHNlcXVlbmNlOworIHVpbnQ4X3QgcGF5bG9hZFswXTsKK307CisjZGVmaW5lIFJGQzEyMDFfSERSX1NJWkUgNAorCitzdHJ1Y3QgYXJjX3JmYzEwNTEKK3sKKyB1aW50OF90IHByb3RvOworIHVpbnQ4X3QgcGF5bG9hZFswXTsKK307CisjZGVmaW5lIFJGQzEwNTFfSERSX1NJWkUgMQorCitzdHJ1Y3QgYXJjX2V0aF9lbmNhcAoreworIHVpbnQ4X3QgcHJvdG87Cisgc3RydWN0IGV0aGhkciBldGg7CisgdWludDhfdCBwYXlsb2FkWzBdOworfTsKKyNkZWZpbmUgRVRIX0VOQ0FQX0hEUl9TSVpFIDE0CisKK3N0cnVjdCBhcmNfY2FwCit7CisgdWludDhfdCBwcm90bzsKKyB1aW50OF90IGNvb2tpZVtzaXplb2YoaW50KV07CisgdW5pb24geworIHVpbnQ4X3QgYWNrOworIHVpbnQ4X3QgcmF3WzBdOworIH0gbWVzOworfTsKKworc3RydWN0IGFyY19oYXJkd2FyZQoreworIHVpbnQ4X3Qgc291cmNlLAorIGRlc3QsCisgb2Zmc2V0WzJdOworfTsKKyNkZWZpbmUgQVJDX0hEUl9TSVpFIDQKKworc3RydWN0IGFyY2hkcgoreworCisgc3RydWN0IGFyY19oYXJkd2FyZSBoYXJkOworCisgdW5pb24geworIHN0cnVjdCBhcmNfcmZjMTIwMSByZmMxMjAxOworIHN0cnVjdCBhcmNfcmZjMTA1MSByZmMxMDUxOworIHN0cnVjdCBhcmNfZXRoX2VuY2FwIGV0aF9lbmNhcDsKKyBzdHJ1Y3QgYXJjX2NhcCBjYXA7CisgdWludDhfdCByYXdbMF07CisgfSBzb2Z0OworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaWZfYXJwLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaWZfYXJwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRhNTBmNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pZl9hcnAuaApAQCAtMCwwICsxLDExOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfSUZfQVJQX0gKKyNkZWZpbmUgX0xJTlVYX0lGX0FSUF9ICisKKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKworI2RlZmluZSBBUlBIUkRfTkVUUk9NIDAgIAorI2RlZmluZSBBUlBIUkRfRVRIRVIgMSAgCisjZGVmaW5lIEFSUEhSRF9FRVRIRVIgMiAgCisjZGVmaW5lIEFSUEhSRF9BWDI1IDMgIAorI2RlZmluZSBBUlBIUkRfUFJPTkVUIDQgIAorI2RlZmluZSBBUlBIUkRfQ0hBT1MgNSAgCisjZGVmaW5lIEFSUEhSRF9JRUVFODAyIDYgIAorI2RlZmluZSBBUlBIUkRfQVJDTkVUIDcgIAorI2RlZmluZSBBUlBIUkRfQVBQTEVUTEsgOCAgCisjZGVmaW5lIEFSUEhSRF9ETENJIDE1ICAKKyNkZWZpbmUgQVJQSFJEX0FUTSAxOSAgCisjZGVmaW5lIEFSUEhSRF9NRVRSSUNPTSAyMyAgCisjZGVmaW5lIEFSUEhSRF9JRUVFMTM5NCAyNCAgCisjZGVmaW5lIEFSUEhSRF9FVUk2NCAyNyAgCisjZGVmaW5lIEFSUEhSRF9JTkZJTklCQU5EIDMyICAKKworI2RlZmluZSBBUlBIUkRfU0xJUCAyNTYKKyNkZWZpbmUgQVJQSFJEX0NTTElQIDI1NworI2RlZmluZSBBUlBIUkRfU0xJUDYgMjU4CisjZGVmaW5lIEFSUEhSRF9DU0xJUDYgMjU5CisjZGVmaW5lIEFSUEhSRF9SU1JWRCAyNjAgIAorI2RlZmluZSBBUlBIUkRfQURBUFQgMjY0CisjZGVmaW5lIEFSUEhSRF9ST1NFIDI3MAorI2RlZmluZSBBUlBIUkRfWDI1IDI3MSAgCisjZGVmaW5lIEFSUEhSRF9IV1gyNSAyNzIgIAorI2RlZmluZSBBUlBIUkRfUFBQIDUxMgorI2RlZmluZSBBUlBIUkRfQ0lTQ08gNTEzICAKKyNkZWZpbmUgQVJQSFJEX0hETEMgQVJQSFJEX0NJU0NPCisjZGVmaW5lIEFSUEhSRF9MQVBCIDUxNiAgCisjZGVmaW5lIEFSUEhSRF9ERENNUCA1MTcgIAorI2RlZmluZSBBUlBIUkRfUkFXSERMQyA1MTggIAorCisjZGVmaW5lIEFSUEhSRF9UVU5ORUwgNzY4ICAKKyNkZWZpbmUgQVJQSFJEX1RVTk5FTDYgNzY5ICAKKyNkZWZpbmUgQVJQSFJEX0ZSQUQgNzcwICAKKyNkZWZpbmUgQVJQSFJEX1NLSVAgNzcxICAKKyNkZWZpbmUgQVJQSFJEX0xPT1BCQUNLIDc3MiAgCisjZGVmaW5lIEFSUEhSRF9MT0NBTFRMSyA3NzMgIAorI2RlZmluZSBBUlBIUkRfRkRESSA3NzQgIAorI2RlZmluZSBBUlBIUkRfQklGIDc3NSAgCisjZGVmaW5lIEFSUEhSRF9TSVQgNzc2ICAKKyNkZWZpbmUgQVJQSFJEX0lQRERQIDc3NyAgCisjZGVmaW5lIEFSUEhSRF9JUEdSRSA3NzggIAorI2RlZmluZSBBUlBIUkRfUElNUkVHIDc3OSAgCisjZGVmaW5lIEFSUEhSRF9ISVBQSSA3ODAgIAorI2RlZmluZSBBUlBIUkRfQVNIIDc4MSAgCisjZGVmaW5lIEFSUEhSRF9FQ09ORVQgNzgyICAKKyNkZWZpbmUgQVJQSFJEX0lSREEgNzgzICAKKworI2RlZmluZSBBUlBIUkRfRkNQUCA3ODQgIAorI2RlZmluZSBBUlBIUkRfRkNBTCA3ODUgIAorI2RlZmluZSBBUlBIUkRfRkNQTCA3ODYgIAorI2RlZmluZSBBUlBIUkRfRkNGQUJSSUMgNzg3ICAKKworI2RlZmluZSBBUlBIUkRfSUVFRTgwMl9UUiA4MDAgIAorI2RlZmluZSBBUlBIUkRfSUVFRTgwMjExIDgwMSAgCisjZGVmaW5lIEFSUEhSRF9JRUVFODAyMTFfUFJJU00gODAyICAKKyNkZWZpbmUgQVJQSFJEX0lFRUU4MDIxMV9SQURJT1RBUCA4MDMgIAorCisjZGVmaW5lIEFSUEhSRF9WT0lEIDB4RkZGRiAgCisjZGVmaW5lIEFSUEhSRF9OT05FIDB4RkZGRSAgCisKKyNkZWZpbmUgQVJQT1BfUkVRVUVTVCAxICAKKyNkZWZpbmUgQVJQT1BfUkVQTFkgMiAgCisjZGVmaW5lIEFSUE9QX1JSRVFVRVNUIDMgIAorI2RlZmluZSBBUlBPUF9SUkVQTFkgNCAgCisjZGVmaW5lIEFSUE9QX0luUkVRVUVTVCA4ICAKKyNkZWZpbmUgQVJQT1BfSW5SRVBMWSA5ICAKKyNkZWZpbmUgQVJQT1BfTkFLIDEwICAKKworc3RydWN0IGFycHJlcSB7Cisgc3RydWN0IHNvY2thZGRyIGFycF9wYTsKKyBzdHJ1Y3Qgc29ja2FkZHIgYXJwX2hhOworIGludCBhcnBfZmxhZ3M7Cisgc3RydWN0IHNvY2thZGRyIGFycF9uZXRtYXNrOworIGNoYXIgYXJwX2RldlsxNl07Cit9OworCitzdHJ1Y3QgYXJwcmVxX29sZCB7Cisgc3RydWN0IHNvY2thZGRyIGFycF9wYTsKKyBzdHJ1Y3Qgc29ja2FkZHIgYXJwX2hhOworIGludCBhcnBfZmxhZ3M7Cisgc3RydWN0IHNvY2thZGRyIGFycF9uZXRtYXNrOworfTsKKworI2RlZmluZSBBVEZfQ09NIDB4MDIgIAorI2RlZmluZSBBVEZfUEVSTSAweDA0ICAKKyNkZWZpbmUgQVRGX1BVQkwgMHgwOCAgCisjZGVmaW5lIEFURl9VU0VUUkFJTEVSUyAweDEwICAKKyNkZWZpbmUgQVRGX05FVE1BU0sgMHgyMCAgCisjZGVmaW5lIEFURl9ET05UUFVCIDB4NDAgIAorCitzdHJ1Y3QgYXJwaGRyCit7CisgdW5zaWduZWQgc2hvcnQgYXJfaHJkOworIHVuc2lnbmVkIHNob3J0IGFyX3BybzsKKyB1bnNpZ25lZCBjaGFyIGFyX2hsbjsKKyB1bnNpZ25lZCBjaGFyIGFyX3BsbjsKKyB1bnNpZ25lZCBzaG9ydCBhcl9vcDsKKworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaWZfYnJpZGdlLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaWZfYnJpZGdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNmOTQ5NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pZl9icmlkZ2UuaApAQCAtMCwwICsxLDEwMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfSUZfQlJJREdFX0gKKyNkZWZpbmUgX0xJTlVYX0lGX0JSSURHRV9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjZGVmaW5lIFNZU0ZTX0JSSURHRV9BVFRSICJicmlkZ2UiCisjZGVmaW5lIFNZU0ZTX0JSSURHRV9GREIgImJyZm9yd2FyZCIKKyNkZWZpbmUgU1lTRlNfQlJJREdFX1BPUlRfU1VCRElSICJicmlmIgorI2RlZmluZSBTWVNGU19CUklER0VfUE9SVF9BVFRSICJicnBvcnQiCisjZGVmaW5lIFNZU0ZTX0JSSURHRV9QT1JUX0xJTksgImJyaWRnZSIKKworI2RlZmluZSBCUkNUTF9WRVJTSU9OIDEKKworI2RlZmluZSBCUkNUTF9HRVRfVkVSU0lPTiAwCisjZGVmaW5lIEJSQ1RMX0dFVF9CUklER0VTIDEKKyNkZWZpbmUgQlJDVExfQUREX0JSSURHRSAyCisjZGVmaW5lIEJSQ1RMX0RFTF9CUklER0UgMworI2RlZmluZSBCUkNUTF9BRERfSUYgNAorI2RlZmluZSBCUkNUTF9ERUxfSUYgNQorI2RlZmluZSBCUkNUTF9HRVRfQlJJREdFX0lORk8gNgorI2RlZmluZSBCUkNUTF9HRVRfUE9SVF9MSVNUIDcKKyNkZWZpbmUgQlJDVExfU0VUX0JSSURHRV9GT1JXQVJEX0RFTEFZIDgKKyNkZWZpbmUgQlJDVExfU0VUX0JSSURHRV9IRUxMT19USU1FIDkKKyNkZWZpbmUgQlJDVExfU0VUX0JSSURHRV9NQVhfQUdFIDEwCisjZGVmaW5lIEJSQ1RMX1NFVF9BR0VJTkdfVElNRSAxMQorI2RlZmluZSBCUkNUTF9TRVRfR0NfSU5URVJWQUwgMTIKKyNkZWZpbmUgQlJDVExfR0VUX1BPUlRfSU5GTyAxMworI2RlZmluZSBCUkNUTF9TRVRfQlJJREdFX1NUUF9TVEFURSAxNAorI2RlZmluZSBCUkNUTF9TRVRfQlJJREdFX1BSSU9SSVRZIDE1CisjZGVmaW5lIEJSQ1RMX1NFVF9QT1JUX1BSSU9SSVRZIDE2CisjZGVmaW5lIEJSQ1RMX1NFVF9QQVRIX0NPU1QgMTcKKyNkZWZpbmUgQlJDVExfR0VUX0ZEQl9FTlRSSUVTIDE4CisKKyNkZWZpbmUgQlJfU1RBVEVfRElTQUJMRUQgMAorI2RlZmluZSBCUl9TVEFURV9MSVNURU5JTkcgMQorI2RlZmluZSBCUl9TVEFURV9MRUFSTklORyAyCisjZGVmaW5lIEJSX1NUQVRFX0ZPUldBUkRJTkcgMworI2RlZmluZSBCUl9TVEFURV9CTE9DS0lORyA0CisKK3N0cnVjdCBfX2JyaWRnZV9pbmZvCit7CisgX191NjQgZGVzaWduYXRlZF9yb290OworIF9fdTY0IGJyaWRnZV9pZDsKKyBfX3UzMiByb290X3BhdGhfY29zdDsKKyBfX3UzMiBtYXhfYWdlOworIF9fdTMyIGhlbGxvX3RpbWU7CisgX191MzIgZm9yd2FyZF9kZWxheTsKKyBfX3UzMiBicmlkZ2VfbWF4X2FnZTsKKyBfX3UzMiBicmlkZ2VfaGVsbG9fdGltZTsKKyBfX3UzMiBicmlkZ2VfZm9yd2FyZF9kZWxheTsKKyBfX3U4IHRvcG9sb2d5X2NoYW5nZTsKKyBfX3U4IHRvcG9sb2d5X2NoYW5nZV9kZXRlY3RlZDsKKyBfX3U4IHJvb3RfcG9ydDsKKyBfX3U4IHN0cF9lbmFibGVkOworIF9fdTMyIGFnZWluZ190aW1lOworIF9fdTMyIGdjX2ludGVydmFsOworIF9fdTMyIGhlbGxvX3RpbWVyX3ZhbHVlOworIF9fdTMyIHRjbl90aW1lcl92YWx1ZTsKKyBfX3UzMiB0b3BvbG9neV9jaGFuZ2VfdGltZXJfdmFsdWU7CisgX191MzIgZ2NfdGltZXJfdmFsdWU7Cit9OworCitzdHJ1Y3QgX19wb3J0X2luZm8KK3sKKyBfX3U2NCBkZXNpZ25hdGVkX3Jvb3Q7CisgX191NjQgZGVzaWduYXRlZF9icmlkZ2U7CisgX191MTYgcG9ydF9pZDsKKyBfX3UxNiBkZXNpZ25hdGVkX3BvcnQ7CisgX191MzIgcGF0aF9jb3N0OworIF9fdTMyIGRlc2lnbmF0ZWRfY29zdDsKKyBfX3U4IHN0YXRlOworIF9fdTggdG9wX2NoYW5nZV9hY2s7CisgX191OCBjb25maWdfcGVuZGluZzsKKyBfX3U4IHVudXNlZDA7CisgX191MzIgbWVzc2FnZV9hZ2VfdGltZXJfdmFsdWU7CisgX191MzIgZm9yd2FyZF9kZWxheV90aW1lcl92YWx1ZTsKKyBfX3UzMiBob2xkX3RpbWVyX3ZhbHVlOworfTsKKworc3RydWN0IF9fZmRiX2VudHJ5Cit7CisgX191OCBtYWNfYWRkcls2XTsKKyBfX3U4IHBvcnRfbm87CisgX191OCBpc19sb2NhbDsKKyBfX3UzMiBhZ2VpbmdfdGltZXJfdmFsdWU7CisgX191MzIgdW51c2VkOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaWZfZXRoZXIuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pZl9ldGhlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmODljM2QKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaWZfZXRoZXIuaApAQCAtMCwwICsxLDgxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9JRl9FVEhFUl9ICisjZGVmaW5lIF9MSU5VWF9JRl9FVEhFUl9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjZGVmaW5lIEVUSF9BTEVOIDYgIAorI2RlZmluZSBFVEhfSExFTiAxNCAgCisjZGVmaW5lIEVUSF9aTEVOIDYwICAKKyNkZWZpbmUgRVRIX0RBVEFfTEVOIDE1MDAgIAorI2RlZmluZSBFVEhfRlJBTUVfTEVOIDE1MTQgIAorCisjZGVmaW5lIEVUSF9QX0xPT1AgMHgwMDYwICAKKyNkZWZpbmUgRVRIX1BfUFVQIDB4MDIwMCAgCisjZGVmaW5lIEVUSF9QX1BVUEFUIDB4MDIwMSAgCisjZGVmaW5lIEVUSF9QX0lQIDB4MDgwMCAgCisjZGVmaW5lIEVUSF9QX1gyNSAweDA4MDUgIAorI2RlZmluZSBFVEhfUF9BUlAgMHgwODA2ICAKKyNkZWZpbmUgRVRIX1BfQlBRIDB4MDhGRiAgCisjZGVmaW5lIEVUSF9QX0lFRUVQVVAgMHgwYTAwICAKKyNkZWZpbmUgRVRIX1BfSUVFRVBVUEFUIDB4MGEwMSAgCisjZGVmaW5lIEVUSF9QX0RFQyAweDYwMDAgIAorI2RlZmluZSBFVEhfUF9ETkFfREwgMHg2MDAxICAKKyNkZWZpbmUgRVRIX1BfRE5BX1JDIDB4NjAwMiAgCisjZGVmaW5lIEVUSF9QX0ROQV9SVCAweDYwMDMgIAorI2RlZmluZSBFVEhfUF9MQVQgMHg2MDA0ICAKKyNkZWZpbmUgRVRIX1BfRElBRyAweDYwMDUgIAorI2RlZmluZSBFVEhfUF9DVVNUIDB4NjAwNiAgCisjZGVmaW5lIEVUSF9QX1NDQSAweDYwMDcgIAorI2RlZmluZSBFVEhfUF9SQVJQIDB4ODAzNSAgCisjZGVmaW5lIEVUSF9QX0FUQUxLIDB4ODA5QiAgCisjZGVmaW5lIEVUSF9QX0FBUlAgMHg4MEYzICAKKyNkZWZpbmUgRVRIX1BfODAyMVEgMHg4MTAwICAKKyNkZWZpbmUgRVRIX1BfSVBYIDB4ODEzNyAgCisjZGVmaW5lIEVUSF9QX0lQVjYgMHg4NkREICAKKyNkZWZpbmUgRVRIX1BfU0xPVyAweDg4MDkgIAorI2RlZmluZSBFVEhfUF9XQ0NQIDB4ODgzRSAgCisjZGVmaW5lIEVUSF9QX1BQUF9ESVNDIDB4ODg2MyAgCisjZGVmaW5lIEVUSF9QX1BQUF9TRVMgMHg4ODY0ICAKKyNkZWZpbmUgRVRIX1BfTVBMU19VQyAweDg4NDcgIAorI2RlZmluZSBFVEhfUF9NUExTX01DIDB4ODg0OCAgCisjZGVmaW5lIEVUSF9QX0FUTU1QT0EgMHg4ODRjICAKKyNkZWZpbmUgRVRIX1BfQVRNRkFURSAweDg4ODQgIAorI2RlZmluZSBFVEhfUF9BT0UgMHg4OEEyICAKKyNkZWZpbmUgRVRIX1BfVElQQyAweDg4Q0EgIAorCisjZGVmaW5lIEVUSF9QXzgwMl8zIDB4MDAwMSAgCisjZGVmaW5lIEVUSF9QX0FYMjUgMHgwMDAyICAKKyNkZWZpbmUgRVRIX1BfQUxMIDB4MDAwMyAgCisjZGVmaW5lIEVUSF9QXzgwMl8yIDB4MDAwNCAgCisjZGVmaW5lIEVUSF9QX1NOQVAgMHgwMDA1ICAKKyNkZWZpbmUgRVRIX1BfRERDTVAgMHgwMDA2ICAKKyNkZWZpbmUgRVRIX1BfV0FOX1BQUCAweDAwMDcgIAorI2RlZmluZSBFVEhfUF9QUFBfTVAgMHgwMDA4ICAKKyNkZWZpbmUgRVRIX1BfTE9DQUxUQUxLIDB4MDAwOSAgCisjZGVmaW5lIEVUSF9QX1BQUFRBTEsgMHgwMDEwICAKKyNkZWZpbmUgRVRIX1BfVFJfODAyXzIgMHgwMDExICAKKyNkZWZpbmUgRVRIX1BfTU9CSVRFWCAweDAwMTUgIAorI2RlZmluZSBFVEhfUF9DT05UUk9MIDB4MDAxNiAgCisjZGVmaW5lIEVUSF9QX0lSREEgMHgwMDE3ICAKKyNkZWZpbmUgRVRIX1BfRUNPTkVUIDB4MDAxOCAgCisjZGVmaW5lIEVUSF9QX0hETEMgMHgwMDE5ICAKKyNkZWZpbmUgRVRIX1BfQVJDTkVUIDB4MDAxQSAgCisKK3N0cnVjdCBldGhoZHIgeworIHVuc2lnbmVkIGNoYXIgaF9kZXN0W0VUSF9BTEVOXTsKKyB1bnNpZ25lZCBjaGFyIGhfc291cmNlW0VUSF9BTEVOXTsKKyBfX2JlMTYgaF9wcm90bzsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lmX2ZjLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaWZfZmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmE0N2I0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lmX2ZjLmgKQEAgLTAsMCArMSwzNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfSUZfRkNfSAorI2RlZmluZSBfTElOVVhfSUZfRkNfSAorCisjZGVmaW5lIEZDX0FMRU4gNiAgCisjZGVmaW5lIEZDX0hMRU4gKHNpemVvZihzdHJ1Y3QgZmNoX2hkcikrc2l6ZW9mKHN0cnVjdCBmY2xsYykpCisjZGVmaW5lIEZDX0lEX0xFTiAzICAKKworI2RlZmluZSBFWFRFTkRFRF9TQVAgMHhBQQorI2RlZmluZSBVSV9DTUQgMHgwMworCitzdHJ1Y3QgZmNoX2hkciB7CisgX191OCBkYWRkcltGQ19BTEVOXTsKKyBfX3U4IHNhZGRyW0ZDX0FMRU5dOworfTsKKworc3RydWN0IGZjbGxjIHsKKyBfX3U4IGRzYXA7CisgX191OCBzc2FwOworIF9fdTggbGxjOworIF9fdTggcHJvdGlkWzNdOworIF9fYmUxNiBldGhlcnR5cGU7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pZl9mZGRpLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaWZfZmRkaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1OTQ5MmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaWZfZmRkaS5oCkBAIC0wLDAgKzEsODMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX0lGX0ZERElfSAorI2RlZmluZSBfTElOVVhfSUZfRkRESV9ICisKKyNkZWZpbmUgRkRESV9LX0FMRU4gNiAgCisjZGVmaW5lIEZERElfS184MDIyX0hMRU4gMTYgIAorI2RlZmluZSBGRERJX0tfU05BUF9ITEVOIDIxICAKKyNkZWZpbmUgRkRESV9LXzgwMjJfWkxFTiAxNiAgCisjZGVmaW5lIEZERElfS19TTkFQX1pMRU4gMjEgIAorI2RlZmluZSBGRERJX0tfODAyMl9ETEVOIDQ0NzUgIAorI2RlZmluZSBGRERJX0tfU05BUF9ETEVOIDQ0NzAgIAorI2RlZmluZSBGRERJX0tfTExDX1pMRU4gMTMgIAorI2RlZmluZSBGRERJX0tfTExDX0xFTiA0NDkxICAKKworI2RlZmluZSBGRERJX0ZDX0tfVk9JRCAweDAwIAorI2RlZmluZSBGRERJX0ZDX0tfTk9OX1JFU1RSSUNURURfVE9LRU4gMHg4MCAKKyNkZWZpbmUgRkRESV9GQ19LX1JFU1RSSUNURURfVE9LRU4gMHhDMCAKKyNkZWZpbmUgRkRESV9GQ19LX1NNVF9NSU4gMHg0MQorI2RlZmluZSBGRERJX0ZDX0tfU01UX01BWCAweDRGCisjZGVmaW5lIEZERElfRkNfS19NQUNfTUlOIDB4QzEKKyNkZWZpbmUgRkRESV9GQ19LX01BQ19NQVggMHhDRiAKKyNkZWZpbmUgRkRESV9GQ19LX0FTWU5DX0xMQ19NSU4gMHg1MAorI2RlZmluZSBGRERJX0ZDX0tfQVNZTkNfTExDX0RFRiAweDU0CisjZGVmaW5lIEZERElfRkNfS19BU1lOQ19MTENfTUFYIDB4NUYKKyNkZWZpbmUgRkRESV9GQ19LX1NZTkNfTExDX01JTiAweEQwCisjZGVmaW5lIEZERElfRkNfS19TWU5DX0xMQ19NQVggMHhENworI2RlZmluZSBGRERJX0ZDX0tfSU1QTEVNRU5UT1JfTUlOIDB4NjAKKyNkZWZpbmUgRkRESV9GQ19LX0lNUExFTUVOVE9SX01BWCAweDZGCisjZGVmaW5lIEZERElfRkNfS19SRVNFUlZFRF9NSU4gMHg3MAorI2RlZmluZSBGRERJX0ZDX0tfUkVTRVJWRURfTUFYIDB4N0YKKworI2RlZmluZSBGRERJX0VYVEVOREVEX1NBUCAweEFBCisjZGVmaW5lIEZERElfVUlfQ01EIDB4MDMKKworc3RydWN0IGZkZGlfODAyMl8xX2hkcgorIHsKKyBfX3U4IGRzYXA7CisgX191OCBzc2FwOworIF9fdTggY3RybDsKKyB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGZkZGlfODAyMl8yX2hkcgorIHsKKyBfX3U4IGRzYXA7CisgX191OCBzc2FwOworIF9fdTggY3RybF8xOworIF9fdTggY3RybF8yOworIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIEZERElfS19PVUlfTEVOIDMKK3N0cnVjdCBmZGRpX3NuYXBfaGRyCisgeworIF9fdTggZHNhcDsKKyBfX3U4IHNzYXA7CisgX191OCBjdHJsOworIF9fdTggb3VpW0ZERElfS19PVUlfTEVOXTsKKyBfX2JlMTYgZXRoZXJ0eXBlOworIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgZmRkaWhkcgorIHsKKyBfX3U4IGZjOworIF9fdTggZGFkZHJbRkRESV9LX0FMRU5dOworIF9fdTggc2FkZHJbRkRESV9LX0FMRU5dOworIHVuaW9uCisgeworIHN0cnVjdCBmZGRpXzgwMjJfMV9oZHIgbGxjXzgwMjJfMTsKKyBzdHJ1Y3QgZmRkaV84MDIyXzJfaGRyIGxsY184MDIyXzI7Cisgc3RydWN0IGZkZGlfc25hcF9oZHIgbGxjX3NuYXA7CisgfSBoZHI7CisgfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lmX2hpcHBpLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaWZfaGlwcGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmQzNmY2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lmX2hpcHBpLmgKQEAgLTAsMCArMSw5OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfSUZfSElQUElfSAorI2RlZmluZSBfTElOVVhfSUZfSElQUElfSAorCisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorCisjZGVmaW5lIEhJUFBJX0FMRU4gNiAgCisjZGVmaW5lIEhJUFBJX0hMRU4gc2l6ZW9mKHN0cnVjdCBoaXBwaV9oZHIpCisjZGVmaW5lIEhJUFBJX1pMRU4gMCAgCisjZGVmaW5lIEhJUFBJX0RBVEFfTEVOIDY1MjgwICAKKyNkZWZpbmUgSElQUElfRlJBTUVfTEVOIChISVBQSV9EQVRBX0xFTiArIEhJUFBJX0hMRU4pCisKKyNkZWZpbmUgSElQUElfRVhURU5ERURfU0FQIDB4QUEKKyNkZWZpbmUgSElQUElfVUlfQ01EIDB4MDMKKworc3RydWN0IGhpcG5ldF9zdGF0aXN0aWNzCit7CisgaW50IHJ4X3BhY2tldHM7CisgaW50IHR4X3BhY2tldHM7CisgaW50IHJ4X2Vycm9yczsKKyBpbnQgdHhfZXJyb3JzOworIGludCByeF9kcm9wcGVkOworIGludCB0eF9kcm9wcGVkOworCisgaW50IHJ4X2xlbmd0aF9lcnJvcnM7CisgaW50IHJ4X292ZXJfZXJyb3JzOworIGludCByeF9jcmNfZXJyb3JzOworIGludCByeF9mcmFtZV9lcnJvcnM7CisgaW50IHJ4X2ZpZm9fZXJyb3JzOworIGludCByeF9taXNzZWRfZXJyb3JzOworCisgaW50IHR4X2Fib3J0ZWRfZXJyb3JzOworIGludCB0eF9jYXJyaWVyX2Vycm9yczsKKyBpbnQgdHhfZmlmb19lcnJvcnM7CisgaW50IHR4X2hlYXJ0YmVhdF9lcnJvcnM7CisgaW50IHR4X3dpbmRvd19lcnJvcnM7Cit9OworCitzdHJ1Y3QgaGlwcGlfZnBfaGRyCit7CisgX19iZTMyIGZpeGVkOworIF9fYmUzMiBkMl9zaXplOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBoaXBwaV9sZV9oZHIKK3sKKyNpZmRlZiBfX0JJR19FTkRJQU5fQklURklFTEQKKyBfX3U4IGZjOjM7CisgX191OCBkb3VibGVfd2lkZToxOworIF9fdTggbWVzc2FnZV90eXBlOjQ7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9CSVRGSUVMRCkKKyBfX3U4IG1lc3NhZ2VfdHlwZTo0OworIF9fdTggZG91YmxlX3dpZGU6MTsKKyBfX3U4IGZjOjM7CisjZW5kaWYKKyBfX3U4IGRlc3Rfc3dpdGNoX2FkZHJbM107CisjaWZkZWYgX19CSUdfRU5ESUFOX0JJVEZJRUxECisgX191OCBkZXN0X2FkZHJfdHlwZTo0LAorIHNyY19hZGRyX3R5cGU6NDsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKQorIF9fdTggc3JjX2FkZHJfdHlwZTo0LAorIGRlc3RfYWRkcl90eXBlOjQ7CisjZW5kaWYKKyBfX3U4IHNyY19zd2l0Y2hfYWRkclszXTsKKyBfX3UxNiByZXNlcnZlZDsKKyBfX3U4IGRhZGRyW0hJUFBJX0FMRU5dOworIF9fdTE2IGxvY2FsbHlfYWRtaW5pc3RlcmVkOworIF9fdTggc2FkZHJbSElQUElfQUxFTl07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2RlZmluZSBISVBQSV9PVUlfTEVOIDMKKworc3RydWN0IGhpcHBpX3NuYXBfaGRyCit7CisgX191OCBkc2FwOworIF9fdTggc3NhcDsKKyBfX3U4IGN0cmw7CisgX191OCBvdWlbSElQUElfT1VJX0xFTl07CisgX19iZTE2IGV0aGVydHlwZTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgaGlwcGlfaGRyCit7Cisgc3RydWN0IGhpcHBpX2ZwX2hkciBmcDsKKyBzdHJ1Y3QgaGlwcGlfbGVfaGRyIGxlOworIHN0cnVjdCBoaXBwaV9zbmFwX2hkciBzbmFwOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lmX3BhY2tldC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lmX3BhY2tldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhYTNiZWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaWZfcGFja2V0LmgKQEAgLTAsMCArMSw5NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0xJTlVYX0lGX1BBQ0tFVF9ICisjZGVmaW5lIF9fTElOVVhfSUZfUEFDS0VUX0gKKworc3RydWN0IHNvY2thZGRyX3BrdAoreworIHVuc2lnbmVkIHNob3J0IHNwa3RfZmFtaWx5OworIHVuc2lnbmVkIGNoYXIgc3BrdF9kZXZpY2VbMTRdOworIHVuc2lnbmVkIHNob3J0IHNwa3RfcHJvdG9jb2w7Cit9OworCitzdHJ1Y3Qgc29ja2FkZHJfbGwKK3sKKyB1bnNpZ25lZCBzaG9ydCBzbGxfZmFtaWx5OworIHVuc2lnbmVkIHNob3J0IHNsbF9wcm90b2NvbDsKKyBpbnQgc2xsX2lmaW5kZXg7CisgdW5zaWduZWQgc2hvcnQgc2xsX2hhdHlwZTsKKyB1bnNpZ25lZCBjaGFyIHNsbF9wa3R0eXBlOworIHVuc2lnbmVkIGNoYXIgc2xsX2hhbGVuOworIHVuc2lnbmVkIGNoYXIgc2xsX2FkZHJbOF07Cit9OworCisjZGVmaW5lIFBBQ0tFVF9IT1NUIDAgIAorI2RlZmluZSBQQUNLRVRfQlJPQURDQVNUIDEgIAorI2RlZmluZSBQQUNLRVRfTVVMVElDQVNUIDIgIAorI2RlZmluZSBQQUNLRVRfT1RIRVJIT1NUIDMgIAorI2RlZmluZSBQQUNLRVRfT1VUR09JTkcgNCAgCisKKyNkZWZpbmUgUEFDS0VUX0xPT1BCQUNLIDUgIAorI2RlZmluZSBQQUNLRVRfRkFTVFJPVVRFIDYgIAorCisjZGVmaW5lIFBBQ0tFVF9BRERfTUVNQkVSU0hJUCAxCisjZGVmaW5lIFBBQ0tFVF9EUk9QX01FTUJFUlNISVAgMgorI2RlZmluZSBQQUNLRVRfUkVDVl9PVVRQVVQgMworCisjZGVmaW5lIFBBQ0tFVF9SWF9SSU5HIDUKKyNkZWZpbmUgUEFDS0VUX1NUQVRJU1RJQ1MgNgorI2RlZmluZSBQQUNLRVRfQ09QWV9USFJFU0ggNworCitzdHJ1Y3QgdHBhY2tldF9zdGF0cworeworIHVuc2lnbmVkIGludCB0cF9wYWNrZXRzOworIHVuc2lnbmVkIGludCB0cF9kcm9wczsKK307CisKK3N0cnVjdCB0cGFja2V0X2hkcgoreworIHVuc2lnbmVkIGxvbmcgdHBfc3RhdHVzOworI2RlZmluZSBUUF9TVEFUVVNfS0VSTkVMIDAKKyNkZWZpbmUgVFBfU1RBVFVTX1VTRVIgMQorI2RlZmluZSBUUF9TVEFUVVNfQ09QWSAyCisjZGVmaW5lIFRQX1NUQVRVU19MT1NJTkcgNAorI2RlZmluZSBUUF9TVEFUVVNfQ1NVTU5PVFJFQURZIDgKKyB1bnNpZ25lZCBpbnQgdHBfbGVuOworIHVuc2lnbmVkIGludCB0cF9zbmFwbGVuOworIHVuc2lnbmVkIHNob3J0IHRwX21hYzsKKyB1bnNpZ25lZCBzaG9ydCB0cF9uZXQ7CisgdW5zaWduZWQgaW50IHRwX3NlYzsKKyB1bnNpZ25lZCBpbnQgdHBfdXNlYzsKK307CisKKyNkZWZpbmUgVFBBQ0tFVF9BTElHTk1FTlQgMTYKKyNkZWZpbmUgVFBBQ0tFVF9BTElHTih4KSAoKCh4KStUUEFDS0VUX0FMSUdOTUVOVC0xKSZ+KFRQQUNLRVRfQUxJR05NRU5ULTEpKQorI2RlZmluZSBUUEFDS0VUX0hEUkxFTiAoVFBBQ0tFVF9BTElHTihzaXplb2Yoc3RydWN0IHRwYWNrZXRfaGRyKSkgKyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2xsKSkKKworc3RydWN0IHRwYWNrZXRfcmVxCit7CisgdW5zaWduZWQgaW50IHRwX2Jsb2NrX3NpemU7CisgdW5zaWduZWQgaW50IHRwX2Jsb2NrX25yOworIHVuc2lnbmVkIGludCB0cF9mcmFtZV9zaXplOworIHVuc2lnbmVkIGludCB0cF9mcmFtZV9ucjsKK307CisKK3N0cnVjdCBwYWNrZXRfbXJlcQoreworIGludCBtcl9pZmluZGV4OworIHVuc2lnbmVkIHNob3J0IG1yX3R5cGU7CisgdW5zaWduZWQgc2hvcnQgbXJfYWxlbjsKKyB1bnNpZ25lZCBjaGFyIG1yX2FkZHJlc3NbOF07Cit9OworCisjZGVmaW5lIFBBQ0tFVF9NUl9NVUxUSUNBU1QgMAorI2RlZmluZSBQQUNLRVRfTVJfUFJPTUlTQyAxCisjZGVmaW5lIFBBQ0tFVF9NUl9BTExNVUxUSSAyCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lmX3BwcC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lmX3BwcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmMzVjOTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaWZfcHBwLmgKQEAgLTAsMCArMSwxMTYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0lGX1BQUF9IXworI2RlZmluZSBfSUZfUFBQX0hfCisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorCisjZGVmaW5lIFBQUF9NVFUgMTUwMCAgCisjZGVmaW5lIFBQUF9NQVhNUlUgNjUwMDAgIAorI2RlZmluZSBQUk9UT19JUFggMHgwMDJiICAKKyNkZWZpbmUgUFJPVE9fRE5BX1JUIDB4MDAyNyAgCisKKyNkZWZpbmUgU0NfQ09NUF9QUk9UIDB4MDAwMDAwMDEgIAorI2RlZmluZSBTQ19DT01QX0FDIDB4MDAwMDAwMDIgIAorI2RlZmluZSBTQ19DT01QX1RDUCAweDAwMDAwMDA0ICAKKyNkZWZpbmUgU0NfTk9fVENQX0NDSUQgMHgwMDAwMDAwOCAgCisjZGVmaW5lIFNDX1JFSl9DT01QX0FDIDB4MDAwMDAwMTAgIAorI2RlZmluZSBTQ19SRUpfQ09NUF9UQ1AgMHgwMDAwMDAyMCAgCisjZGVmaW5lIFNDX0NDUF9PUEVOIDB4MDAwMDAwNDAgIAorI2RlZmluZSBTQ19DQ1BfVVAgMHgwMDAwMDA4MCAgCisjZGVmaW5lIFNDX0VOQUJMRV9JUCAweDAwMDAwMTAwICAKKyNkZWZpbmUgU0NfTE9PUF9UUkFGRklDIDB4MDAwMDAyMDAgIAorI2RlZmluZSBTQ19NVUxUSUxJTksgMHgwMDAwMDQwMCAgCisjZGVmaW5lIFNDX01QX1NIT1JUU0VRIDB4MDAwMDA4MDAgIAorI2RlZmluZSBTQ19DT01QX1JVTiAweDAwMDAxMDAwICAKKyNkZWZpbmUgU0NfREVDT01QX1JVTiAweDAwMDAyMDAwICAKKyNkZWZpbmUgU0NfTVBfWFNIT1JUU0VRIDB4MDAwMDQwMDAgIAorI2RlZmluZSBTQ19ERUJVRyAweDAwMDEwMDAwICAKKyNkZWZpbmUgU0NfTE9HX0lOUEtUIDB4MDAwMjAwMDAgIAorI2RlZmluZSBTQ19MT0dfT1VUUEtUIDB4MDAwNDAwMDAgIAorI2RlZmluZSBTQ19MT0dfUkFXSU4gMHgwMDA4MDAwMCAgCisjZGVmaW5lIFNDX0xPR19GTFVTSCAweDAwMTAwMDAwICAKKyNkZWZpbmUgU0NfU1lOQyAweDAwMjAwMDAwICAKKyNkZWZpbmUgU0NfTVVTVF9DT01QIDB4MDA0MDAwMDAgIAorI2RlZmluZSBTQ19NQVNLIDB4MGY2MDBmZmYgIAorCisjZGVmaW5lIFNDX1hNSVRfQlVTWSAweDEwMDAwMDAwICAKKyNkZWZpbmUgU0NfUkNWX09ERFAgMHgwODAwMDAwMCAgCisjZGVmaW5lIFNDX1JDVl9FVk5QIDB4MDQwMDAwMDAgIAorI2RlZmluZSBTQ19SQ1ZfQjdfMSAweDAyMDAwMDAwICAKKyNkZWZpbmUgU0NfUkNWX0I3XzAgMHgwMTAwMDAwMCAgCisjZGVmaW5lIFNDX0RDX0ZFUlJPUiAweDAwODAwMDAwICAKKyNkZWZpbmUgU0NfRENfRVJST1IgMHgwMDQwMDAwMCAgCisKK3N0cnVjdCBucGlvY3RsIHsKKyBpbnQgcHJvdG9jb2w7CisgZW51bSBOUG1vZGUgbW9kZTsKK307CisKK3N0cnVjdCBwcHBfb3B0aW9uX2RhdGEgeworIF9fdTggX191c2VyICpwdHI7CisgX191MzIgbGVuZ3RoOworIGludCB0cmFuc21pdDsKK307CisKK3N0cnVjdCBpZnBwcHN0YXRzcmVxIHsKKyBzdHJ1Y3QgaWZyZXEgYjsKKyBzdHJ1Y3QgcHBwX3N0YXRzIHN0YXRzOworfTsKKworc3RydWN0IGlmcHBwY3N0YXRzcmVxIHsKKyBzdHJ1Y3QgaWZyZXEgYjsKKyBzdHJ1Y3QgcHBwX2NvbXBfc3RhdHMgc3RhdHM7Cit9OworCisjZGVmaW5lIGlmcl9fbmFtZSBiLmlmcl9pZnJuLmlmcm5fbmFtZQorI2RlZmluZSBzdGF0c19wdHIgYi5pZnJfaWZydS5pZnJ1X2RhdGEKKworI2RlZmluZSBQUFBJT0NHRkxBR1MgX0lPUigndCcsIDkwLCBpbnQpICAKKyNkZWZpbmUgUFBQSU9DU0ZMQUdTIF9JT1coJ3QnLCA4OSwgaW50KSAgCisjZGVmaW5lIFBQUElPQ0dBU1lOQ01BUCBfSU9SKCd0JywgODgsIGludCkgIAorI2RlZmluZSBQUFBJT0NTQVNZTkNNQVAgX0lPVygndCcsIDg3LCBpbnQpICAKKyNkZWZpbmUgUFBQSU9DR1VOSVQgX0lPUigndCcsIDg2LCBpbnQpICAKKyNkZWZpbmUgUFBQSU9DR1JBU1lOQ01BUCBfSU9SKCd0JywgODUsIGludCkgIAorI2RlZmluZSBQUFBJT0NTUkFTWU5DTUFQIF9JT1coJ3QnLCA4NCwgaW50KSAgCisjZGVmaW5lIFBQUElPQ0dNUlUgX0lPUigndCcsIDgzLCBpbnQpICAKKyNkZWZpbmUgUFBQSU9DU01SVSBfSU9XKCd0JywgODIsIGludCkgIAorI2RlZmluZSBQUFBJT0NTTUFYQ0lEIF9JT1coJ3QnLCA4MSwgaW50KSAgCisjZGVmaW5lIFBQUElPQ0dYQVNZTkNNQVAgX0lPUigndCcsIDgwLCBleHRfYWNjbSkgIAorI2RlZmluZSBQUFBJT0NTWEFTWU5DTUFQIF9JT1coJ3QnLCA3OSwgZXh0X2FjY20pICAKKyNkZWZpbmUgUFBQSU9DWEZFUlVOSVQgX0lPKCd0JywgNzgpICAKKyNkZWZpbmUgUFBQSU9DU0NPTVBSRVNTIF9JT1coJ3QnLCA3Nywgc3RydWN0IHBwcF9vcHRpb25fZGF0YSkKKyNkZWZpbmUgUFBQSU9DR05QTU9ERSBfSU9XUigndCcsIDc2LCBzdHJ1Y3QgbnBpb2N0bCkgIAorI2RlZmluZSBQUFBJT0NTTlBNT0RFIF9JT1coJ3QnLCA3NSwgc3RydWN0IG5waW9jdGwpICAKKyNkZWZpbmUgUFBQSU9DU1BBU1MgX0lPVygndCcsIDcxLCBzdHJ1Y3Qgc29ja19mcHJvZykgIAorI2RlZmluZSBQUFBJT0NTQUNUSVZFIF9JT1coJ3QnLCA3MCwgc3RydWN0IHNvY2tfZnByb2cpICAKKyNkZWZpbmUgUFBQSU9DR0RFQlVHIF9JT1IoJ3QnLCA2NSwgaW50KSAgCisjZGVmaW5lIFBQUElPQ1NERUJVRyBfSU9XKCd0JywgNjQsIGludCkgIAorI2RlZmluZSBQUFBJT0NHSURMRSBfSU9SKCd0JywgNjMsIHN0cnVjdCBwcHBfaWRsZSkgIAorI2RlZmluZSBQUFBJT0NORVdVTklUIF9JT1dSKCd0JywgNjIsIGludCkgIAorI2RlZmluZSBQUFBJT0NBVFRBQ0ggX0lPVygndCcsIDYxLCBpbnQpICAKKyNkZWZpbmUgUFBQSU9DREVUQUNIIF9JT1coJ3QnLCA2MCwgaW50KSAgCisjZGVmaW5lIFBQUElPQ1NNUlJVIF9JT1coJ3QnLCA1OSwgaW50KSAgCisjZGVmaW5lIFBQUElPQ0NPTk5FQ1QgX0lPVygndCcsIDU4LCBpbnQpICAKKyNkZWZpbmUgUFBQSU9DRElTQ09OTiBfSU8oJ3QnLCA1NykgIAorI2RlZmluZSBQUFBJT0NBVFRDSEFOIF9JT1coJ3QnLCA1NiwgaW50KSAgCisjZGVmaW5lIFBQUElPQ0dDSEFOIF9JT1IoJ3QnLCA1NSwgaW50KSAgCisKKyNkZWZpbmUgU0lPQ0dQUFBTVEFUUyAoU0lPQ0RFVlBSSVZBVEUgKyAwKQorI2RlZmluZSBTSU9DR1BQUFZFUiAoU0lPQ0RFVlBSSVZBVEUgKyAxKSAgCisjZGVmaW5lIFNJT0NHUFBQQ1NUQVRTIChTSU9DREVWUFJJVkFURSArIDIpCisKKyNpZm5kZWYgaWZyX210dQorI2RlZmluZSBpZnJfbXR1IGlmcl9pZnJ1LmlmcnVfbWV0cmljCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaWZfdHIuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pZl90ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkNjMxOWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaWZfdHIuaApAQCAtMCwwICsxLDc2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9JRl9UUl9ICisjZGVmaW5lIF9MSU5VWF9JRl9UUl9ICisKKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+ICAKKworI2RlZmluZSBUUl9BTEVOIDYgIAorI2RlZmluZSBUUl9ITEVOIChzaXplb2Yoc3RydWN0IHRyaF9oZHIpK3NpemVvZihzdHJ1Y3QgdHJsbGMpKQorI2RlZmluZSBBQyAweDEwCisjZGVmaW5lIExMQ19GUkFNRSAweDQwCisKKyNkZWZpbmUgRVhURU5ERURfU0FQIDB4QUEKKyNkZWZpbmUgVUlfQ01EIDB4MDMKKworc3RydWN0IHRyaF9oZHIgeworIF9fdTggYWM7CisgX191OCBmYzsKKyBfX3U4IGRhZGRyW1RSX0FMRU5dOworIF9fdTggc2FkZHJbVFJfQUxFTl07CisgX19iZTE2IHJjZjsKKyBfX2JlMTYgcnNlZ1s4XTsKK307CisKK3N0cnVjdCB0cmxsYyB7CisgX191OCBkc2FwOworIF9fdTggc3NhcDsKKyBfX3U4IGxsYzsKKyBfX3U4IHByb3RpZFszXTsKKyBfX2JlMTYgZXRoZXJ0eXBlOworfTsKKworc3RydWN0IHRyX3N0YXRpc3RpY3MgeworIHVuc2lnbmVkIGxvbmcgcnhfcGFja2V0czsKKyB1bnNpZ25lZCBsb25nIHR4X3BhY2tldHM7CisgdW5zaWduZWQgbG9uZyByeF9ieXRlczsKKyB1bnNpZ25lZCBsb25nIHR4X2J5dGVzOworIHVuc2lnbmVkIGxvbmcgcnhfZXJyb3JzOworIHVuc2lnbmVkIGxvbmcgdHhfZXJyb3JzOworIHVuc2lnbmVkIGxvbmcgcnhfZHJvcHBlZDsKKyB1bnNpZ25lZCBsb25nIHR4X2Ryb3BwZWQ7CisgdW5zaWduZWQgbG9uZyBtdWx0aWNhc3Q7CisgdW5zaWduZWQgbG9uZyB0cmFuc21pdF9jb2xsaXNpb247CisKKyB1bnNpZ25lZCBsb25nIGxpbmVfZXJyb3JzOworIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxfZXJyb3JzOworIHVuc2lnbmVkIGxvbmcgYnVyc3RfZXJyb3JzOworIHVuc2lnbmVkIGxvbmcgQV9DX2Vycm9yczsKKyB1bnNpZ25lZCBsb25nIGFib3J0X2RlbGltaXRlcnM7CisgdW5zaWduZWQgbG9uZyBsb3N0X2ZyYW1lczsKKyB1bnNpZ25lZCBsb25nIHJlY3ZfY29uZ2VzdF9jb3VudDsKKyB1bnNpZ25lZCBsb25nIGZyYW1lX2NvcGllZF9lcnJvcnM7CisgdW5zaWduZWQgbG9uZyBmcmVxdWVuY3lfZXJyb3JzOworIHVuc2lnbmVkIGxvbmcgdG9rZW5fZXJyb3JzOworIHVuc2lnbmVkIGxvbmcgZHVtbXkxOworfTsKKworI2RlZmluZSBUUl9SSUkgMHg4MAorI2RlZmluZSBUUl9SQ0ZfRElSX0JJVCAweDgwCisjZGVmaW5lIFRSX1JDRl9MRU5fTUFTSyAweDFmMDAKKyNkZWZpbmUgVFJfUkNGX0JST0FEQ0FTVCAweDgwMDAgIAorI2RlZmluZSBUUl9SQ0ZfTElNSVRFRF9CUk9BRENBU1QgMHhDMDAwICAKKyNkZWZpbmUgVFJfUkNGX0ZSQU1FMksgMHgyMAorI2RlZmluZSBUUl9SQ0ZfQlJPQURDQVNUX01BU0sgMHhDMDAwCisjZGVmaW5lIFRSX01BWFJJRkxFTiAxOAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pZl90dW4uaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pZl90dW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWRiNGUwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lmX3R1bi5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19JRl9UVU5fSAorI2RlZmluZSBfX0lGX1RVTl9ICisKKyNkZWZpbmUgVFVOX1JFQURRX1NJWkUgNTAwCisKKyNkZWZpbmUgVFVOX1RVTl9ERVYgMHgwMDAxIAorI2RlZmluZSBUVU5fVEFQX0RFViAweDAwMDIKKyNkZWZpbmUgVFVOX1RZUEVfTUFTSyAweDAwMGYKKworI2RlZmluZSBUVU5fRkFTWU5DIDB4MDAxMAorI2RlZmluZSBUVU5fTk9DSEVDS1NVTSAweDAwMjAKKyNkZWZpbmUgVFVOX05PX1BJIDB4MDA0MAorI2RlZmluZSBUVU5fT05FX1FVRVVFIDB4MDA4MAorI2RlZmluZSBUVU5fUEVSU0lTVCAweDAxMDAgCisKKyNkZWZpbmUgVFVOU0VUTk9DU1VNIF9JT1coJ1QnLCAyMDAsIGludCkgCisjZGVmaW5lIFRVTlNFVERFQlVHIF9JT1coJ1QnLCAyMDEsIGludCkgCisjZGVmaW5lIFRVTlNFVElGRiBfSU9XKCdUJywgMjAyLCBpbnQpIAorI2RlZmluZSBUVU5TRVRQRVJTSVNUIF9JT1coJ1QnLCAyMDMsIGludCkgCisjZGVmaW5lIFRVTlNFVE9XTkVSIF9JT1coJ1QnLCAyMDQsIGludCkKKyNkZWZpbmUgVFVOU0VUTElOSyBfSU9XKCdUJywgMjA1LCBpbnQpCisKKyNkZWZpbmUgSUZGX1RVTiAweDAwMDEKKyNkZWZpbmUgSUZGX1RBUCAweDAwMDIKKyNkZWZpbmUgSUZGX05PX1BJIDB4MTAwMAorI2RlZmluZSBJRkZfT05FX1FVRVVFIDB4MjAwMAorCitzdHJ1Y3QgdHVuX3BpIHsKKyB1bnNpZ25lZCBzaG9ydCBmbGFnczsKKyB1bnNpZ25lZCBzaG9ydCBwcm90bzsKK307CisjZGVmaW5lIFRVTl9QS1RfU1RSSVAgMHgwMDAxCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lmX3ZsYW4uaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pZl92bGFuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNkMmRmMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pZl92bGFuLmgKQEAgLTAsMCArMSw1MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfSUZfVkxBTl9IXworI2RlZmluZSBfTElOVVhfSUZfVkxBTl9IXworCitlbnVtIHZsYW5faW9jdGxfY21kcyB7CisgQUREX1ZMQU5fQ01ELAorIERFTF9WTEFOX0NNRCwKKyBTRVRfVkxBTl9JTkdSRVNTX1BSSU9SSVRZX0NNRCwKKyBTRVRfVkxBTl9FR1JFU1NfUFJJT1JJVFlfQ01ELAorIEdFVF9WTEFOX0lOR1JFU1NfUFJJT1JJVFlfQ01ELAorIEdFVF9WTEFOX0VHUkVTU19QUklPUklUWV9DTUQsCisgU0VUX1ZMQU5fTkFNRV9UWVBFX0NNRCwKKyBTRVRfVkxBTl9GTEFHX0NNRCwKKyBHRVRfVkxBTl9SRUFMREVWX05BTUVfQ01ELAorIEdFVF9WTEFOX1ZJRF9DTUQKK307CisKK2VudW0gdmxhbl9uYW1lX3R5cGVzIHsKKyBWTEFOX05BTUVfVFlQRV9QTFVTX1ZJRCwKKyBWTEFOX05BTUVfVFlQRV9SQVdfUExVU19WSUQsCisgVkxBTl9OQU1FX1RZUEVfUExVU19WSURfTk9fUEFELAorIFZMQU5fTkFNRV9UWVBFX1JBV19QTFVTX1ZJRF9OT19QQUQsCisgVkxBTl9OQU1FX1RZUEVfSElHSEVTVAorfTsKKworc3RydWN0IHZsYW5faW9jdGxfYXJncyB7CisgaW50IGNtZDsKKyBjaGFyIGRldmljZTFbMjRdOworCisgdW5pb24geworIGNoYXIgZGV2aWNlMlsyNF07CisgaW50IFZJRDsKKyB1bnNpZ25lZCBpbnQgc2tiX3ByaW9yaXR5OworIHVuc2lnbmVkIGludCBuYW1lX3R5cGU7CisgdW5zaWduZWQgaW50IGJpbmRfdHlwZTsKKyB1bnNpZ25lZCBpbnQgZmxhZzsKKyB9IHU7CisKKyBzaG9ydCB2bGFuX3FvczsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2luLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTRlMmRhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2luLmgKQEAgLTAsMCArMSwyMTEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX0lOX0gKKyNkZWZpbmUgX0xJTlVYX0lOX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CisKK2VudW0geworIElQUFJPVE9fSVAgPSAwLAorIElQUFJPVE9fSUNNUCA9IDEsCisgSVBQUk9UT19JR01QID0gMiwKKyBJUFBST1RPX0lQSVAgPSA0LAorIElQUFJPVE9fVENQID0gNiwKKyBJUFBST1RPX0VHUCA9IDgsCisgSVBQUk9UT19QVVAgPSAxMiwKKyBJUFBST1RPX1VEUCA9IDE3LAorIElQUFJPVE9fSURQID0gMjIsCisgSVBQUk9UT19EQ0NQID0gMzMsCisgSVBQUk9UT19SU1ZQID0gNDYsCisgSVBQUk9UT19HUkUgPSA0NywKKworIElQUFJPVE9fSVBWNiA9IDQxLAorCisgSVBQUk9UT19FU1AgPSA1MCwKKyBJUFBST1RPX0FIID0gNTEsCisgSVBQUk9UT19QSU0gPSAxMDMsCisKKyBJUFBST1RPX0NPTVAgPSAxMDgsCisgSVBQUk9UT19TQ1RQID0gMTMyLAorCisgSVBQUk9UT19SQVcgPSAyNTUsCisgSVBQUk9UT19NQVgKK307CisKK3N0cnVjdCBpbl9hZGRyIHsKKyBfX3UzMiBzX2FkZHI7Cit9OworCisjZGVmaW5lIElQX1RPUyAxCisjZGVmaW5lIElQX1RUTCAyCisjZGVmaW5lIElQX0hEUklOQ0wgMworI2RlZmluZSBJUF9PUFRJT05TIDQKKyNkZWZpbmUgSVBfUk9VVEVSX0FMRVJUIDUKKyNkZWZpbmUgSVBfUkVDVk9QVFMgNgorI2RlZmluZSBJUF9SRVRPUFRTIDcKKyNkZWZpbmUgSVBfUEtUSU5GTyA4CisjZGVmaW5lIElQX1BLVE9QVElPTlMgOQorI2RlZmluZSBJUF9NVFVfRElTQ09WRVIgMTAKKyNkZWZpbmUgSVBfUkVDVkVSUiAxMQorI2RlZmluZSBJUF9SRUNWVFRMIDEyCisjZGVmaW5lIElQX1JFQ1ZUT1MgMTMKKyNkZWZpbmUgSVBfTVRVIDE0CisjZGVmaW5lIElQX0ZSRUVCSU5EIDE1CisjZGVmaW5lIElQX0lQU0VDX1BPTElDWSAxNgorI2RlZmluZSBJUF9YRlJNX1BPTElDWSAxNworI2RlZmluZSBJUF9QQVNTU0VDIDE4CisKKyNkZWZpbmUgSVBfUkVDVlJFVE9QVFMgSVBfUkVUT1BUUworCisjZGVmaW5lIElQX1BNVFVESVNDX0RPTlQgMCAgCisjZGVmaW5lIElQX1BNVFVESVNDX1dBTlQgMSAgCisjZGVmaW5lIElQX1BNVFVESVNDX0RPIDIgIAorCisjZGVmaW5lIElQX01VTFRJQ0FTVF9JRiAzMgorI2RlZmluZSBJUF9NVUxUSUNBU1RfVFRMIDMzCisjZGVmaW5lIElQX01VTFRJQ0FTVF9MT09QIDM0CisjZGVmaW5lIElQX0FERF9NRU1CRVJTSElQIDM1CisjZGVmaW5lIElQX0RST1BfTUVNQkVSU0hJUCAzNgorI2RlZmluZSBJUF9VTkJMT0NLX1NPVVJDRSAzNworI2RlZmluZSBJUF9CTE9DS19TT1VSQ0UgMzgKKyNkZWZpbmUgSVBfQUREX1NPVVJDRV9NRU1CRVJTSElQIDM5CisjZGVmaW5lIElQX0RST1BfU09VUkNFX01FTUJFUlNISVAgNDAKKyNkZWZpbmUgSVBfTVNGSUxURVIgNDEKKyNkZWZpbmUgTUNBU1RfSk9JTl9HUk9VUCA0MgorI2RlZmluZSBNQ0FTVF9CTE9DS19TT1VSQ0UgNDMKKyNkZWZpbmUgTUNBU1RfVU5CTE9DS19TT1VSQ0UgNDQKKyNkZWZpbmUgTUNBU1RfTEVBVkVfR1JPVVAgNDUKKyNkZWZpbmUgTUNBU1RfSk9JTl9TT1VSQ0VfR1JPVVAgNDYKKyNkZWZpbmUgTUNBU1RfTEVBVkVfU09VUkNFX0dST1VQIDQ3CisjZGVmaW5lIE1DQVNUX01TRklMVEVSIDQ4CisKKyNkZWZpbmUgTUNBU1RfRVhDTFVERSAwCisjZGVmaW5lIE1DQVNUX0lOQ0xVREUgMQorCisjZGVmaW5lIElQX0RFRkFVTFRfTVVMVElDQVNUX1RUTCAxCisjZGVmaW5lIElQX0RFRkFVTFRfTVVMVElDQVNUX0xPT1AgMQorCitzdHJ1Y3QgaXBfbXJlcQoreworIHN0cnVjdCBpbl9hZGRyIGltcl9tdWx0aWFkZHI7Cisgc3RydWN0IGluX2FkZHIgaW1yX2ludGVyZmFjZTsKK307CisKK3N0cnVjdCBpcF9tcmVxbgoreworIHN0cnVjdCBpbl9hZGRyIGltcl9tdWx0aWFkZHI7Cisgc3RydWN0IGluX2FkZHIgaW1yX2FkZHJlc3M7CisgaW50IGltcl9pZmluZGV4OworfTsKKworc3RydWN0IGlwX21yZXFfc291cmNlIHsKKyBfX3UzMiBpbXJfbXVsdGlhZGRyOworIF9fdTMyIGltcl9pbnRlcmZhY2U7CisgX191MzIgaW1yX3NvdXJjZWFkZHI7Cit9OworCitzdHJ1Y3QgaXBfbXNmaWx0ZXIgeworIF9fdTMyIGltc2ZfbXVsdGlhZGRyOworIF9fdTMyIGltc2ZfaW50ZXJmYWNlOworIF9fdTMyIGltc2ZfZm1vZGU7CisgX191MzIgaW1zZl9udW1zcmM7CisgX191MzIgaW1zZl9zbGlzdFsxXTsKK307CisKKyNkZWZpbmUgSVBfTVNGSUxURVJfU0laRShudW1zcmMpICAgKHNpemVvZihzdHJ1Y3QgaXBfbXNmaWx0ZXIpIC0gc2l6ZW9mKF9fdTMyKSAgICsgKG51bXNyYykgKiBzaXplb2YoX191MzIpKQorCitzdHJ1Y3QgZ3JvdXBfcmVxCit7CisgX191MzIgZ3JfaW50ZXJmYWNlOworIHN0cnVjdCBfX2tlcm5lbF9zb2NrYWRkcl9zdG9yYWdlIGdyX2dyb3VwOworfTsKKworc3RydWN0IGdyb3VwX3NvdXJjZV9yZXEKK3sKKyBfX3UzMiBnc3JfaW50ZXJmYWNlOworIHN0cnVjdCBfX2tlcm5lbF9zb2NrYWRkcl9zdG9yYWdlIGdzcl9ncm91cDsKKyBzdHJ1Y3QgX19rZXJuZWxfc29ja2FkZHJfc3RvcmFnZSBnc3Jfc291cmNlOworfTsKKworc3RydWN0IGdyb3VwX2ZpbHRlcgoreworIF9fdTMyIGdmX2ludGVyZmFjZTsKKyBzdHJ1Y3QgX19rZXJuZWxfc29ja2FkZHJfc3RvcmFnZSBnZl9ncm91cDsKKyBfX3UzMiBnZl9mbW9kZTsKKyBfX3UzMiBnZl9udW1zcmM7Cisgc3RydWN0IF9fa2VybmVsX3NvY2thZGRyX3N0b3JhZ2UgZ2Zfc2xpc3RbMV07Cit9OworCisjZGVmaW5lIEdST1VQX0ZJTFRFUl9TSVpFKG51bXNyYykgICAoc2l6ZW9mKHN0cnVjdCBncm91cF9maWx0ZXIpIC0gc2l6ZW9mKHN0cnVjdCBfX2tlcm5lbF9zb2NrYWRkcl9zdG9yYWdlKSAgICsgKG51bXNyYykgKiBzaXplb2Yoc3RydWN0IF9fa2VybmVsX3NvY2thZGRyX3N0b3JhZ2UpKQorCitzdHJ1Y3QgaW5fcGt0aW5mbworeworIGludCBpcGlfaWZpbmRleDsKKyBzdHJ1Y3QgaW5fYWRkciBpcGlfc3BlY19kc3Q7Cisgc3RydWN0IGluX2FkZHIgaXBpX2FkZHI7Cit9OworCisjZGVmaW5lIF9fU09DS19TSVpFX18gMTYgIAorc3RydWN0IHNvY2thZGRyX2luIHsKKyBzYV9mYW1pbHlfdCBzaW5fZmFtaWx5OworIHVuc2lnbmVkIHNob3J0IGludCBzaW5fcG9ydDsKKyBzdHJ1Y3QgaW5fYWRkciBzaW5fYWRkcjsKKworIHVuc2lnbmVkIGNoYXIgX19wYWRbX19TT0NLX1NJWkVfXyAtIHNpemVvZihzaG9ydCBpbnQpIC0KKyBzaXplb2YodW5zaWduZWQgc2hvcnQgaW50KSAtIHNpemVvZihzdHJ1Y3QgaW5fYWRkcildOworfTsKKyNkZWZpbmUgc2luX3plcm8gX19wYWQgIAorCisjZGVmaW5lIElOX0NMQVNTQShhKSAoKCgobG9uZyBpbnQpIChhKSkgJiAweDgwMDAwMDAwKSA9PSAwKQorI2RlZmluZSBJTl9DTEFTU0FfTkVUIDB4ZmYwMDAwMDAKKyNkZWZpbmUgSU5fQ0xBU1NBX05TSElGVCAyNAorI2RlZmluZSBJTl9DTEFTU0FfSE9TVCAoMHhmZmZmZmZmZiAmIH5JTl9DTEFTU0FfTkVUKQorI2RlZmluZSBJTl9DTEFTU0FfTUFYIDEyOAorCisjZGVmaW5lIElOX0NMQVNTQihhKSAoKCgobG9uZyBpbnQpIChhKSkgJiAweGMwMDAwMDAwKSA9PSAweDgwMDAwMDAwKQorI2RlZmluZSBJTl9DTEFTU0JfTkVUIDB4ZmZmZjAwMDAKKyNkZWZpbmUgSU5fQ0xBU1NCX05TSElGVCAxNgorI2RlZmluZSBJTl9DTEFTU0JfSE9TVCAoMHhmZmZmZmZmZiAmIH5JTl9DTEFTU0JfTkVUKQorI2RlZmluZSBJTl9DTEFTU0JfTUFYIDY1NTM2CisKKyNkZWZpbmUgSU5fQ0xBU1NDKGEpICgoKChsb25nIGludCkgKGEpKSAmIDB4ZTAwMDAwMDApID09IDB4YzAwMDAwMDApCisjZGVmaW5lIElOX0NMQVNTQ19ORVQgMHhmZmZmZmYwMAorI2RlZmluZSBJTl9DTEFTU0NfTlNISUZUIDgKKyNkZWZpbmUgSU5fQ0xBU1NDX0hPU1QgKDB4ZmZmZmZmZmYgJiB+SU5fQ0xBU1NDX05FVCkKKworI2RlZmluZSBJTl9DTEFTU0QoYSkgKCgoKGxvbmcgaW50KSAoYSkpICYgMHhmMDAwMDAwMCkgPT0gMHhlMDAwMDAwMCkKKyNkZWZpbmUgSU5fTVVMVElDQVNUKGEpIElOX0NMQVNTRChhKQorI2RlZmluZSBJTl9NVUxUSUNBU1RfTkVUIDB4RjAwMDAwMDAKKworI2RlZmluZSBJTl9FWFBFUklNRU5UQUwoYSkgKCgoKGxvbmcgaW50KSAoYSkpICYgMHhmMDAwMDAwMCkgPT0gMHhmMDAwMDAwMCkKKyNkZWZpbmUgSU5fQkFEQ0xBU1MoYSkgSU5fRVhQRVJJTUVOVEFMKChhKSkKKworI2RlZmluZSBJTkFERFJfQU5ZICgodW5zaWduZWQgbG9uZyBpbnQpIDB4MDAwMDAwMDApCisKKyNkZWZpbmUgSU5BRERSX0JST0FEQ0FTVCAoKHVuc2lnbmVkIGxvbmcgaW50KSAweGZmZmZmZmZmKQorCisjZGVmaW5lIElOQUREUl9OT05FICgodW5zaWduZWQgbG9uZyBpbnQpIDB4ZmZmZmZmZmYpCisKKyNkZWZpbmUgSU5fTE9PUEJBQ0tORVQgMTI3CisKKyNkZWZpbmUgSU5BRERSX0xPT1BCQUNLIDB4N2YwMDAwMDEgIAorI2RlZmluZSBJTl9MT09QQkFDSyhhKSAoKCgobG9uZyBpbnQpIChhKSkgJiAweGZmMDAwMDAwKSA9PSAweDdmMDAwMDAwKQorCisjZGVmaW5lIElOQUREUl9VTlNQRUNfR1JPVVAgMHhlMDAwMDAwMFUgIAorI2RlZmluZSBJTkFERFJfQUxMSE9TVFNfR1JPVVAgMHhlMDAwMDAwMVUgIAorI2RlZmluZSBJTkFERFJfQUxMUlRSU19HUk9VUCAweGUwMDAwMDAyVSAgCisjZGVmaW5lIElOQUREUl9NQVhfTE9DQUxfR1JPVVAgMHhlMDAwMDBmZlUgIAorCisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPiAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaW42LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaW42LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VhZWI3ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pbjYuaApAQCAtMCwwICsxLDE1OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfSU42X0gKKyNkZWZpbmUgX0xJTlVYX0lONl9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3QgaW42X2FkZHIKK3sKKyB1bmlvbgorIHsKKyBfX3U4IHU2X2FkZHI4WzE2XTsKKyBfX3UxNiB1Nl9hZGRyMTZbOF07CisgX191MzIgdTZfYWRkcjMyWzRdOworIH0gaW42X3U7CisjZGVmaW5lIHM2X2FkZHIgaW42X3UudTZfYWRkcjgKKyNkZWZpbmUgczZfYWRkcjE2IGluNl91LnU2X2FkZHIxNgorI2RlZmluZSBzNl9hZGRyMzIgaW42X3UudTZfYWRkcjMyCit9OworCisjZGVmaW5lIElONkFERFJfTE9PUEJBQ0tfSU5JVCB7IHsgeyAwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxIH0gfSB9CisKK3N0cnVjdCBzb2NrYWRkcl9pbjYgeworIHVuc2lnbmVkIHNob3J0IGludCBzaW42X2ZhbWlseTsKKyBfX3UxNiBzaW42X3BvcnQ7CisgX191MzIgc2luNl9mbG93aW5mbzsKKyBzdHJ1Y3QgaW42X2FkZHIgc2luNl9hZGRyOworIF9fdTMyIHNpbjZfc2NvcGVfaWQ7Cit9OworCitzdHJ1Y3QgaXB2Nl9tcmVxIHsKKworIHN0cnVjdCBpbjZfYWRkciBpcHY2bXJfbXVsdGlhZGRyOworCisgaW50IGlwdjZtcl9pZmluZGV4OworfTsKKworI2RlZmluZSBpcHY2bXJfYWNhZGRyIGlwdjZtcl9tdWx0aWFkZHIKKworc3RydWN0IGluNl9mbG93bGFiZWxfcmVxCit7Cisgc3RydWN0IGluNl9hZGRyIGZscl9kc3Q7CisgX191MzIgZmxyX2xhYmVsOworIF9fdTggZmxyX2FjdGlvbjsKKyBfX3U4IGZscl9zaGFyZTsKKyBfX3UxNiBmbHJfZmxhZ3M7CisgX191MTYgZmxyX2V4cGlyZXM7CisgX191MTYgZmxyX2xpbmdlcjsKKyBfX3UzMiBfX2Zscl9wYWQ7CisKK307CisKKyNkZWZpbmUgSVBWNl9GTF9BX0dFVCAwCisjZGVmaW5lIElQVjZfRkxfQV9QVVQgMQorI2RlZmluZSBJUFY2X0ZMX0FfUkVORVcgMgorCisjZGVmaW5lIElQVjZfRkxfRl9DUkVBVEUgMQorI2RlZmluZSBJUFY2X0ZMX0ZfRVhDTCAyCisKKyNkZWZpbmUgSVBWNl9GTF9TX05PTkUgMAorI2RlZmluZSBJUFY2X0ZMX1NfRVhDTCAxCisjZGVmaW5lIElQVjZfRkxfU19QUk9DRVNTIDIKKyNkZWZpbmUgSVBWNl9GTF9TX1VTRVIgMworI2RlZmluZSBJUFY2X0ZMX1NfQU5ZIDI1NQorCisjZGVmaW5lIElQVjZfRkxPV0lORk9fRkxPV0xBQkVMIDB4MDAwZmZmZmYKKyNkZWZpbmUgSVBWNl9GTE9XSU5GT19QUklPUklUWSAweDBmZjAwMDAwCisKKyNkZWZpbmUgSVBWNl9QUklPUklUWV9VTkNIQVJBQ1RFUklaRUQgMHgwMDAwCisjZGVmaW5lIElQVjZfUFJJT1JJVFlfRklMTEVSIDB4MDEwMAorI2RlZmluZSBJUFY2X1BSSU9SSVRZX1VOQVRURU5ERUQgMHgwMjAwCisjZGVmaW5lIElQVjZfUFJJT1JJVFlfUkVTRVJWRUQxIDB4MDMwMAorI2RlZmluZSBJUFY2X1BSSU9SSVRZX0JVTEsgMHgwNDAwCisjZGVmaW5lIElQVjZfUFJJT1JJVFlfUkVTRVJWRUQyIDB4MDUwMAorI2RlZmluZSBJUFY2X1BSSU9SSVRZX0lOVEVSQUNUSVZFIDB4MDYwMAorI2RlZmluZSBJUFY2X1BSSU9SSVRZX0NPTlRST0wgMHgwNzAwCisjZGVmaW5lIElQVjZfUFJJT1JJVFlfOCAweDA4MDAKKyNkZWZpbmUgSVBWNl9QUklPUklUWV85IDB4MDkwMAorI2RlZmluZSBJUFY2X1BSSU9SSVRZXzEwIDB4MGEwMAorI2RlZmluZSBJUFY2X1BSSU9SSVRZXzExIDB4MGIwMAorI2RlZmluZSBJUFY2X1BSSU9SSVRZXzEyIDB4MGMwMAorI2RlZmluZSBJUFY2X1BSSU9SSVRZXzEzIDB4MGQwMAorI2RlZmluZSBJUFY2X1BSSU9SSVRZXzE0IDB4MGUwMAorI2RlZmluZSBJUFY2X1BSSU9SSVRZXzE1IDB4MGYwMAorCisjZGVmaW5lIElQUFJPVE9fSE9QT1BUUyAwICAKKyNkZWZpbmUgSVBQUk9UT19ST1VUSU5HIDQzICAKKyNkZWZpbmUgSVBQUk9UT19GUkFHTUVOVCA0NCAgCisjZGVmaW5lIElQUFJPVE9fSUNNUFY2IDU4ICAKKyNkZWZpbmUgSVBQUk9UT19OT05FIDU5ICAKKyNkZWZpbmUgSVBQUk9UT19EU1RPUFRTIDYwICAKKworI2RlZmluZSBJUFY2X1RMVl9QQUQwIDAKKyNkZWZpbmUgSVBWNl9UTFZfUEFETiAxCisjZGVmaW5lIElQVjZfVExWX1JPVVRFUkFMRVJUIDUKKyNkZWZpbmUgSVBWNl9UTFZfSlVNQk8gMTk0CisKKyNkZWZpbmUgSVBWNl9BRERSRk9STSAxCisjZGVmaW5lIElQVjZfMjI5MlBLVElORk8gMgorI2RlZmluZSBJUFY2XzIyOTJIT1BPUFRTIDMKKyNkZWZpbmUgSVBWNl8yMjkyRFNUT1BUUyA0CisjZGVmaW5lIElQVjZfMjI5MlJUSERSIDUKKyNkZWZpbmUgSVBWNl8yMjkyUEtUT1BUSU9OUyA2CisjZGVmaW5lIElQVjZfQ0hFQ0tTVU0gNworI2RlZmluZSBJUFY2XzIyOTJIT1BMSU1JVCA4CisjZGVmaW5lIElQVjZfTkVYVEhPUCA5CisjZGVmaW5lIElQVjZfQVVUSEhEUiAxMCAgCisjZGVmaW5lIElQVjZfRkxPV0lORk8gMTEKKworI2RlZmluZSBJUFY2X1VOSUNBU1RfSE9QUyAxNgorI2RlZmluZSBJUFY2X01VTFRJQ0FTVF9JRiAxNworI2RlZmluZSBJUFY2X01VTFRJQ0FTVF9IT1BTIDE4CisjZGVmaW5lIElQVjZfTVVMVElDQVNUX0xPT1AgMTkKKyNkZWZpbmUgSVBWNl9BRERfTUVNQkVSU0hJUCAyMAorI2RlZmluZSBJUFY2X0RST1BfTUVNQkVSU0hJUCAyMQorI2RlZmluZSBJUFY2X1JPVVRFUl9BTEVSVCAyMgorI2RlZmluZSBJUFY2X01UVV9ESVNDT1ZFUiAyMworI2RlZmluZSBJUFY2X01UVSAyNAorI2RlZmluZSBJUFY2X1JFQ1ZFUlIgMjUKKyNkZWZpbmUgSVBWNl9WNk9OTFkgMjYKKyNkZWZpbmUgSVBWNl9KT0lOX0FOWUNBU1QgMjcKKyNkZWZpbmUgSVBWNl9MRUFWRV9BTllDQVNUIDI4CisKKyNkZWZpbmUgSVBWNl9QTVRVRElTQ19ET05UIDAKKyNkZWZpbmUgSVBWNl9QTVRVRElTQ19XQU5UIDEKKyNkZWZpbmUgSVBWNl9QTVRVRElTQ19ETyAyCisKKyNkZWZpbmUgSVBWNl9GTE9XTEFCRUxfTUdSIDMyCisjZGVmaW5lIElQVjZfRkxPV0lORk9fU0VORCAzMworCisjZGVmaW5lIElQVjZfSVBTRUNfUE9MSUNZIDM0CisjZGVmaW5lIElQVjZfWEZSTV9QT0xJQ1kgMzUKKworI2RlZmluZSBJUFY2X1JFQ1ZQS1RJTkZPIDQ5CisjZGVmaW5lIElQVjZfUEtUSU5GTyA1MAorI2RlZmluZSBJUFY2X1JFQ1ZIT1BMSU1JVCA1MQorI2RlZmluZSBJUFY2X0hPUExJTUlUIDUyCisjZGVmaW5lIElQVjZfUkVDVkhPUE9QVFMgNTMKKyNkZWZpbmUgSVBWNl9IT1BPUFRTIDU0CisjZGVmaW5lIElQVjZfUlRIRFJEU1RPUFRTIDU1CisjZGVmaW5lIElQVjZfUkVDVlJUSERSIDU2CisjZGVmaW5lIElQVjZfUlRIRFIgNTcKKyNkZWZpbmUgSVBWNl9SRUNWRFNUT1BUUyA1OAorI2RlZmluZSBJUFY2X0RTVE9QVFMgNTkKKworI2RlZmluZSBJUFY2X1JFQ1ZUQ0xBU1MgNjYKKyNkZWZpbmUgSVBWNl9UQ0xBU1MgNjcKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaW5pdC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2luaXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDZjNGViCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2luaXQuaApAQCAtMCwwICsxLDEzNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfSU5JVF9ICisjZGVmaW5lIF9MSU5VWF9JTklUX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisKKyNkZWZpbmUgX19pbml0IF9fYXR0cmlidXRlX18gKChfX3NlY3Rpb25fXyAoIi5pbml0LnRleHQiKSkpCisjZGVmaW5lIF9faW5pdGRhdGEgX19hdHRyaWJ1dGVfXyAoKF9fc2VjdGlvbl9fICgiLmluaXQuZGF0YSIpKSkKKyNkZWZpbmUgX19leGl0ZGF0YSBfX2F0dHJpYnV0ZV9fICgoX19zZWN0aW9uX18oIi5leGl0LmRhdGEiKSkpCisjZGVmaW5lIF9fZXhpdF9jYWxsIF9fYXR0cmlidXRlX3VzZWRfXyBfX2F0dHJpYnV0ZV9fICgoX19zZWN0aW9uX18gKCIuZXhpdGNhbGwuZXhpdCIpKSkKKworI2lmZGVmIE1PRFVMRQorI2RlZmluZSBfX2V4aXQgX19hdHRyaWJ1dGVfXyAoKF9fc2VjdGlvbl9fKCIuZXhpdC50ZXh0IikpKQorI2Vsc2UKKyNkZWZpbmUgX19leGl0IF9fYXR0cmlidXRlX3VzZWRfXyBfX2F0dHJpYnV0ZV9fICgoX19zZWN0aW9uX18oIi5leGl0LnRleHQiKSkpCisjZW5kaWYKKworI2RlZmluZSBfX0lOSVQgLnNlY3Rpb24gIi5pbml0LnRleHQiLCJheCIKKyNkZWZpbmUgX19GSU5JVCAucHJldmlvdXMKKyNkZWZpbmUgX19JTklUREFUQSAuc2VjdGlvbiAiLmluaXQuZGF0YSIsImF3IgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCit0eXBlZGVmIGludCAoKmluaXRjYWxsX3QpKHZvaWQpOwordHlwZWRlZiB2b2lkICgqZXhpdGNhbGxfdCkodm9pZCk7CisKKyNlbmRpZgorCisjaWZuZGVmIE1PRFVMRQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjZGVmaW5lIF9fZGVmaW5lX2luaXRjYWxsKGxldmVsLGZuKSAgIHN0YXRpYyBpbml0Y2FsbF90IF9faW5pdGNhbGxfIyNmbiBfX2F0dHJpYnV0ZV91c2VkX18gICBfX2F0dHJpYnV0ZV9fKChfX3NlY3Rpb25fXygiLmluaXRjYWxsIiBsZXZlbCAiLmluaXQiKSkpID0gZm4KKworI2RlZmluZSBjb3JlX2luaXRjYWxsKGZuKSBfX2RlZmluZV9pbml0Y2FsbCgiMSIsZm4pCisjZGVmaW5lIHBvc3Rjb3JlX2luaXRjYWxsKGZuKSBfX2RlZmluZV9pbml0Y2FsbCgiMiIsZm4pCisjZGVmaW5lIGFyY2hfaW5pdGNhbGwoZm4pIF9fZGVmaW5lX2luaXRjYWxsKCIzIixmbikKKyNkZWZpbmUgc3Vic3lzX2luaXRjYWxsKGZuKSBfX2RlZmluZV9pbml0Y2FsbCgiNCIsZm4pCisjZGVmaW5lIGZzX2luaXRjYWxsKGZuKSBfX2RlZmluZV9pbml0Y2FsbCgiNSIsZm4pCisjZGVmaW5lIGRldmljZV9pbml0Y2FsbChmbikgX19kZWZpbmVfaW5pdGNhbGwoIjYiLGZuKQorI2RlZmluZSBsYXRlX2luaXRjYWxsKGZuKSBfX2RlZmluZV9pbml0Y2FsbCgiNyIsZm4pCisKKyNkZWZpbmUgX19pbml0Y2FsbChmbikgZGV2aWNlX2luaXRjYWxsKGZuKQorCisjZGVmaW5lIF9fZXhpdGNhbGwoZm4pICAgc3RhdGljIGV4aXRjYWxsX3QgX19leGl0Y2FsbF8jI2ZuIF9fZXhpdF9jYWxsID0gZm4KKworI2RlZmluZSBjb25zb2xlX2luaXRjYWxsKGZuKSAgIHN0YXRpYyBpbml0Y2FsbF90IF9faW5pdGNhbGxfIyNmbiAgIF9fYXR0cmlidXRlX3VzZWRfXyBfX2F0dHJpYnV0ZV9fKChfX3NlY3Rpb25fXygiLmNvbl9pbml0Y2FsbC5pbml0IikpKT1mbgorCisjZGVmaW5lIHNlY3VyaXR5X2luaXRjYWxsKGZuKSAgIHN0YXRpYyBpbml0Y2FsbF90IF9faW5pdGNhbGxfIyNmbiAgIF9fYXR0cmlidXRlX3VzZWRfXyBfX2F0dHJpYnV0ZV9fKChfX3NlY3Rpb25fXygiLnNlY3VyaXR5X2luaXRjYWxsLmluaXQiKSkpID0gZm4KKworc3RydWN0IG9ic19rZXJuZWxfcGFyYW0geworIGNvbnN0IGNoYXIgKnN0cjsKKyBpbnQgKCpzZXR1cF9mdW5jKShjaGFyICopOworIGludCBlYXJseTsKK307CisKKyNkZWZpbmUgX19zZXR1cF9wYXJhbShzdHIsIHVuaXF1ZV9pZCwgZm4sIGVhcmx5KSAgIHN0YXRpYyBjaGFyIF9fc2V0dXBfc3RyXyMjdW5pcXVlX2lkW10gX19pbml0ZGF0YSA9IHN0cjsgICBzdGF0aWMgc3RydWN0IG9ic19rZXJuZWxfcGFyYW0gX19zZXR1cF8jI3VuaXF1ZV9pZCAgIF9fYXR0cmlidXRlX3VzZWRfXyAgIF9fYXR0cmlidXRlX18oKF9fc2VjdGlvbl9fKCIuaW5pdC5zZXR1cCIpKSkgICBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKChzaXplb2YobG9uZykpKSkpICAgPSB7IF9fc2V0dXBfc3RyXyMjdW5pcXVlX2lkLCBmbiwgZWFybHkgfQorCisjZGVmaW5lIF9fc2V0dXBfbnVsbF9wYXJhbShzdHIsIHVuaXF1ZV9pZCkgICBfX3NldHVwX3BhcmFtKHN0ciwgdW5pcXVlX2lkLCBOVUxMLCAwKQorCisjZGVmaW5lIF9fc2V0dXAoc3RyLCBmbikgICBfX3NldHVwX3BhcmFtKHN0ciwgZm4sIGZuLCAwKQorCisjZGVmaW5lIF9fb2Jzb2xldGVfc2V0dXAoc3RyKSAgIF9fc2V0dXBfbnVsbF9wYXJhbShzdHIsIF9fTElORV9fKQorCisjZGVmaW5lIGVhcmx5X3BhcmFtKHN0ciwgZm4pICAgX19zZXR1cF9wYXJhbShzdHIsIGZuLCBmbiwgMSkKKworI2VuZGlmCisKKyNkZWZpbmUgbW9kdWxlX2luaXQoeCkgX19pbml0Y2FsbCh4KTsKKworI2RlZmluZSBtb2R1bGVfZXhpdCh4KSBfX2V4aXRjYWxsKHgpOworCisjZWxzZQorCisjZGVmaW5lIGNvcmVfaW5pdGNhbGwoZm4pIG1vZHVsZV9pbml0KGZuKQorI2RlZmluZSBwb3N0Y29yZV9pbml0Y2FsbChmbikgbW9kdWxlX2luaXQoZm4pCisjZGVmaW5lIGFyY2hfaW5pdGNhbGwoZm4pIG1vZHVsZV9pbml0KGZuKQorI2RlZmluZSBzdWJzeXNfaW5pdGNhbGwoZm4pIG1vZHVsZV9pbml0KGZuKQorI2RlZmluZSBmc19pbml0Y2FsbChmbikgbW9kdWxlX2luaXQoZm4pCisjZGVmaW5lIGRldmljZV9pbml0Y2FsbChmbikgbW9kdWxlX2luaXQoZm4pCisjZGVmaW5lIGxhdGVfaW5pdGNhbGwoZm4pIG1vZHVsZV9pbml0KGZuKQorCisjZGVmaW5lIHNlY3VyaXR5X2luaXRjYWxsKGZuKSBtb2R1bGVfaW5pdChmbikKKworI2RlZmluZSBtb2R1bGVfaW5pdChpbml0Zm4pICAgc3RhdGljIGlubGluZSBpbml0Y2FsbF90IF9faW5pdHRlc3Qodm9pZCkgICB7IHJldHVybiBpbml0Zm47IH0gICBpbnQgaW5pdF9tb2R1bGUodm9pZCkgX19hdHRyaWJ1dGVfXygoYWxpYXMoI2luaXRmbikpKTsKKworI2RlZmluZSBtb2R1bGVfZXhpdChleGl0Zm4pICAgc3RhdGljIGlubGluZSBleGl0Y2FsbF90IF9fZXhpdHRlc3Qodm9pZCkgICB7IHJldHVybiBleGl0Zm47IH0gICB2b2lkIGNsZWFudXBfbW9kdWxlKHZvaWQpIF9fYXR0cmlidXRlX18oKGFsaWFzKCNleGl0Zm4pKSk7CisKKyNkZWZpbmUgX19zZXR1cF9wYXJhbShzdHIsIHVuaXF1ZV9pZCwgZm4pICAKKyNkZWZpbmUgX19zZXR1cF9udWxsX3BhcmFtKHN0ciwgdW5pcXVlX2lkKSAgCisjZGVmaW5lIF9fc2V0dXAoc3RyLCBmdW5jKSAgCisjZGVmaW5lIF9fb2Jzb2xldGVfc2V0dXAoc3RyKSAgCisjZW5kaWYKKworI2RlZmluZSBfX25vc2F2ZWRhdGEgX19hdHRyaWJ1dGVfXyAoKF9fc2VjdGlvbl9fICgiLmRhdGEubm9zYXZlIikpKQorCisjZGVmaW5lIF9faW5pdF9vcl9tb2R1bGUgX19pbml0CisjZGVmaW5lIF9faW5pdGRhdGFfb3JfbW9kdWxlIF9faW5pdGRhdGEKKworI2RlZmluZSBfX2RldmluaXQgX19pbml0CisjZGVmaW5lIF9fZGV2aW5pdGRhdGEgX19pbml0ZGF0YQorI2RlZmluZSBfX2RldmV4aXQgX19leGl0CisjZGVmaW5lIF9fZGV2ZXhpdGRhdGEgX19leGl0ZGF0YQorCisjZGVmaW5lIF9fY3B1aW5pdCBfX2luaXQKKyNkZWZpbmUgX19jcHVpbml0ZGF0YSBfX2luaXRkYXRhCisjZGVmaW5lIF9fY3B1ZXhpdCBfX2V4aXQKKyNkZWZpbmUgX19jcHVleGl0ZGF0YSBfX2V4aXRkYXRhCisKKyNkZWZpbmUgX19tZW1pbml0IF9faW5pdAorI2RlZmluZSBfX21lbWluaXRkYXRhIF9faW5pdGRhdGEKKyNkZWZpbmUgX19tZW1leGl0IF9fZXhpdAorI2RlZmluZSBfX21lbWV4aXRkYXRhIF9fZXhpdGRhdGEKKworI2lmZGVmIE1PRFVMRQorI2RlZmluZSBfX2RldmV4aXRfcCh4KSB4CisjZWxzZQorI2RlZmluZSBfX2RldmV4aXRfcCh4KSBOVUxMCisjZW5kaWYKKworI2lmZGVmIE1PRFVMRQorI2RlZmluZSBfX2V4aXRfcCh4KSB4CisjZWxzZQorI2RlZmluZSBfX2V4aXRfcCh4KSBOVUxMCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaW5vdGlmeS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lub3RpZnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjUzNDE3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lub3RpZnkuaApAQCAtMCwwICsxLDUzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9JTk9USUZZX0gKKyNkZWZpbmUgX0xJTlVYX0lOT1RJRllfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IGlub3RpZnlfZXZlbnQgeworIF9fczMyIHdkOworIF9fdTMyIG1hc2s7CisgX191MzIgY29va2llOworIF9fdTMyIGxlbjsKKyBjaGFyIG5hbWVbMF07Cit9OworCisjZGVmaW5lIElOX0FDQ0VTUyAweDAwMDAwMDAxICAKKyNkZWZpbmUgSU5fTU9ESUZZIDB4MDAwMDAwMDIgIAorI2RlZmluZSBJTl9BVFRSSUIgMHgwMDAwMDAwNCAgCisjZGVmaW5lIElOX0NMT1NFX1dSSVRFIDB4MDAwMDAwMDggIAorI2RlZmluZSBJTl9DTE9TRV9OT1dSSVRFIDB4MDAwMDAwMTAgIAorI2RlZmluZSBJTl9PUEVOIDB4MDAwMDAwMjAgIAorI2RlZmluZSBJTl9NT1ZFRF9GUk9NIDB4MDAwMDAwNDAgIAorI2RlZmluZSBJTl9NT1ZFRF9UTyAweDAwMDAwMDgwICAKKyNkZWZpbmUgSU5fQ1JFQVRFIDB4MDAwMDAxMDAgIAorI2RlZmluZSBJTl9ERUxFVEUgMHgwMDAwMDIwMCAgCisjZGVmaW5lIElOX0RFTEVURV9TRUxGIDB4MDAwMDA0MDAgIAorI2RlZmluZSBJTl9NT1ZFX1NFTEYgMHgwMDAwMDgwMCAgCisKKyNkZWZpbmUgSU5fVU5NT1VOVCAweDAwMDAyMDAwICAKKyNkZWZpbmUgSU5fUV9PVkVSRkxPVyAweDAwMDA0MDAwICAKKyNkZWZpbmUgSU5fSUdOT1JFRCAweDAwMDA4MDAwICAKKworI2RlZmluZSBJTl9DTE9TRSAoSU5fQ0xPU0VfV1JJVEUgfCBJTl9DTE9TRV9OT1dSSVRFKSAgCisjZGVmaW5lIElOX01PVkUgKElOX01PVkVEX0ZST00gfCBJTl9NT1ZFRF9UTykgIAorCisjZGVmaW5lIElOX09OTFlESVIgMHgwMTAwMDAwMCAgCisjZGVmaW5lIElOX0RPTlRfRk9MTE9XIDB4MDIwMDAwMDAgIAorI2RlZmluZSBJTl9NQVNLX0FERCAweDIwMDAwMDAwICAKKyNkZWZpbmUgSU5fSVNESVIgMHg0MDAwMDAwMCAgCisjZGVmaW5lIElOX09ORVNIT1QgMHg4MDAwMDAwMCAgCisKKyNkZWZpbmUgSU5fQUxMX0VWRU5UUyAoSU5fQUNDRVNTIHwgSU5fTU9ESUZZIHwgSU5fQVRUUklCIHwgSU5fQ0xPU0VfV1JJVEUgfCAgIElOX0NMT1NFX05PV1JJVEUgfCBJTl9PUEVOIHwgSU5fTU9WRURfRlJPTSB8ICAgSU5fTU9WRURfVE8gfCBJTl9ERUxFVEUgfCBJTl9DUkVBVEUgfCBJTl9ERUxFVEVfU0VMRiB8ICAgSU5fTU9WRV9TRUxGKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pbnB1dC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lucHV0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZkYWUxNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pbnB1dC5oCkBAIC0wLDAgKzEsNzE1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9JTlBVVF9ICisjZGVmaW5lIF9JTlBVVF9ICisKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCitzdHJ1Y3QgaW5wdXRfZXZlbnQgeworIHN0cnVjdCB0aW1ldmFsIHRpbWU7CisgX191MTYgdHlwZTsKKyBfX3UxNiBjb2RlOworIF9fczMyIHZhbHVlOworfTsKKworI2RlZmluZSBFVl9WRVJTSU9OIDB4MDEwMDAwCisKK3N0cnVjdCBpbnB1dF9pZCB7CisgX191MTYgYnVzdHlwZTsKKyBfX3UxNiB2ZW5kb3I7CisgX191MTYgcHJvZHVjdDsKKyBfX3UxNiB2ZXJzaW9uOworfTsKKworc3RydWN0IGlucHV0X2Fic2luZm8geworIF9fczMyIHZhbHVlOworIF9fczMyIG1pbmltdW07CisgX19zMzIgbWF4aW11bTsKKyBfX3MzMiBmdXp6OworIF9fczMyIGZsYXQ7Cit9OworCisjZGVmaW5lIEVWSU9DR1ZFUlNJT04gX0lPUignRScsIDB4MDEsIGludCkgIAorI2RlZmluZSBFVklPQ0dJRCBfSU9SKCdFJywgMHgwMiwgc3RydWN0IGlucHV0X2lkKSAgCisjZGVmaW5lIEVWSU9DR1JFUCBfSU9SKCdFJywgMHgwMywgaW50WzJdKSAgCisjZGVmaW5lIEVWSU9DU1JFUCBfSU9XKCdFJywgMHgwMywgaW50WzJdKSAgCisjZGVmaW5lIEVWSU9DR0tFWUNPREUgX0lPUignRScsIDB4MDQsIGludFsyXSkgIAorI2RlZmluZSBFVklPQ1NLRVlDT0RFIF9JT1coJ0UnLCAweDA0LCBpbnRbMl0pICAKKworI2RlZmluZSBFVklPQ0dOQU1FKGxlbikgX0lPQyhfSU9DX1JFQUQsICdFJywgMHgwNiwgbGVuKSAgCisjZGVmaW5lIEVWSU9DR1BIWVMobGVuKSBfSU9DKF9JT0NfUkVBRCwgJ0UnLCAweDA3LCBsZW4pICAKKyNkZWZpbmUgRVZJT0NHVU5JUShsZW4pIF9JT0MoX0lPQ19SRUFELCAnRScsIDB4MDgsIGxlbikgIAorCisjZGVmaW5lIEVWSU9DR0tFWShsZW4pIF9JT0MoX0lPQ19SRUFELCAnRScsIDB4MTgsIGxlbikgIAorI2RlZmluZSBFVklPQ0dMRUQobGVuKSBfSU9DKF9JT0NfUkVBRCwgJ0UnLCAweDE5LCBsZW4pICAKKyNkZWZpbmUgRVZJT0NHU05EKGxlbikgX0lPQyhfSU9DX1JFQUQsICdFJywgMHgxYSwgbGVuKSAgCisjZGVmaW5lIEVWSU9DR1NXKGxlbikgX0lPQyhfSU9DX1JFQUQsICdFJywgMHgxYiwgbGVuKSAgCisKKyNkZWZpbmUgRVZJT0NHQklUKGV2LGxlbikgX0lPQyhfSU9DX1JFQUQsICdFJywgMHgyMCArIGV2LCBsZW4pICAKKyNkZWZpbmUgRVZJT0NHQUJTKGFicykgX0lPUignRScsIDB4NDAgKyBhYnMsIHN0cnVjdCBpbnB1dF9hYnNpbmZvKSAgCisjZGVmaW5lIEVWSU9DU0FCUyhhYnMpIF9JT1coJ0UnLCAweGMwICsgYWJzLCBzdHJ1Y3QgaW5wdXRfYWJzaW5mbykgIAorCisjZGVmaW5lIEVWSU9DU0ZGIF9JT0MoX0lPQ19XUklURSwgJ0UnLCAweDgwLCBzaXplb2Yoc3RydWN0IGZmX2VmZmVjdCkpICAKKyNkZWZpbmUgRVZJT0NSTUZGIF9JT1coJ0UnLCAweDgxLCBpbnQpICAKKyNkZWZpbmUgRVZJT0NHRUZGRUNUUyBfSU9SKCdFJywgMHg4NCwgaW50KSAgCisKKyNkZWZpbmUgRVZJT0NHUkFCIF9JT1coJ0UnLCAweDkwLCBpbnQpICAKKworI2RlZmluZSBFVl9TWU4gMHgwMAorI2RlZmluZSBFVl9LRVkgMHgwMQorI2RlZmluZSBFVl9SRUwgMHgwMgorI2RlZmluZSBFVl9BQlMgMHgwMworI2RlZmluZSBFVl9NU0MgMHgwNAorI2RlZmluZSBFVl9TVyAweDA1CisjZGVmaW5lIEVWX0xFRCAweDExCisjZGVmaW5lIEVWX1NORCAweDEyCisjZGVmaW5lIEVWX1JFUCAweDE0CisjZGVmaW5lIEVWX0ZGIDB4MTUKKyNkZWZpbmUgRVZfUFdSIDB4MTYKKyNkZWZpbmUgRVZfRkZfU1RBVFVTIDB4MTcKKyNkZWZpbmUgRVZfTUFYIDB4MWYKKworI2RlZmluZSBTWU5fUkVQT1JUIDAKKyNkZWZpbmUgU1lOX0NPTkZJRyAxCisKKyNkZWZpbmUgS0VZX1JFU0VSVkVEIDAKKyNkZWZpbmUgS0VZX0VTQyAxCisjZGVmaW5lIEtFWV8xIDIKKyNkZWZpbmUgS0VZXzIgMworI2RlZmluZSBLRVlfMyA0CisjZGVmaW5lIEtFWV80IDUKKyNkZWZpbmUgS0VZXzUgNgorI2RlZmluZSBLRVlfNiA3CisjZGVmaW5lIEtFWV83IDgKKyNkZWZpbmUgS0VZXzggOQorI2RlZmluZSBLRVlfOSAxMAorI2RlZmluZSBLRVlfMCAxMQorI2RlZmluZSBLRVlfTUlOVVMgMTIKKyNkZWZpbmUgS0VZX0VRVUFMIDEzCisjZGVmaW5lIEtFWV9CQUNLU1BBQ0UgMTQKKyNkZWZpbmUgS0VZX1RBQiAxNQorI2RlZmluZSBLRVlfUSAxNgorI2RlZmluZSBLRVlfVyAxNworI2RlZmluZSBLRVlfRSAxOAorI2RlZmluZSBLRVlfUiAxOQorI2RlZmluZSBLRVlfVCAyMAorI2RlZmluZSBLRVlfWSAyMQorI2RlZmluZSBLRVlfVSAyMgorI2RlZmluZSBLRVlfSSAyMworI2RlZmluZSBLRVlfTyAyNAorI2RlZmluZSBLRVlfUCAyNQorI2RlZmluZSBLRVlfTEVGVEJSQUNFIDI2CisjZGVmaW5lIEtFWV9SSUdIVEJSQUNFIDI3CisjZGVmaW5lIEtFWV9FTlRFUiAyOAorI2RlZmluZSBLRVlfTEVGVENUUkwgMjkKKyNkZWZpbmUgS0VZX0EgMzAKKyNkZWZpbmUgS0VZX1MgMzEKKyNkZWZpbmUgS0VZX0QgMzIKKyNkZWZpbmUgS0VZX0YgMzMKKyNkZWZpbmUgS0VZX0cgMzQKKyNkZWZpbmUgS0VZX0ggMzUKKyNkZWZpbmUgS0VZX0ogMzYKKyNkZWZpbmUgS0VZX0sgMzcKKyNkZWZpbmUgS0VZX0wgMzgKKyNkZWZpbmUgS0VZX1NFTUlDT0xPTiAzOQorI2RlZmluZSBLRVlfQVBPU1RST1BIRSA0MAorI2RlZmluZSBLRVlfR1JBVkUgNDEKKyNkZWZpbmUgS0VZX0xFRlRTSElGVCA0MgorI2RlZmluZSBLRVlfQkFDS1NMQVNIIDQzCisjZGVmaW5lIEtFWV9aIDQ0CisjZGVmaW5lIEtFWV9YIDQ1CisjZGVmaW5lIEtFWV9DIDQ2CisjZGVmaW5lIEtFWV9WIDQ3CisjZGVmaW5lIEtFWV9CIDQ4CisjZGVmaW5lIEtFWV9OIDQ5CisjZGVmaW5lIEtFWV9NIDUwCisjZGVmaW5lIEtFWV9DT01NQSA1MQorI2RlZmluZSBLRVlfRE9UIDUyCisjZGVmaW5lIEtFWV9TTEFTSCA1MworI2RlZmluZSBLRVlfUklHSFRTSElGVCA1NAorI2RlZmluZSBLRVlfS1BBU1RFUklTSyA1NQorI2RlZmluZSBLRVlfTEVGVEFMVCA1NgorI2RlZmluZSBLRVlfU1BBQ0UgNTcKKyNkZWZpbmUgS0VZX0NBUFNMT0NLIDU4CisjZGVmaW5lIEtFWV9GMSA1OQorI2RlZmluZSBLRVlfRjIgNjAKKyNkZWZpbmUgS0VZX0YzIDYxCisjZGVmaW5lIEtFWV9GNCA2MgorI2RlZmluZSBLRVlfRjUgNjMKKyNkZWZpbmUgS0VZX0Y2IDY0CisjZGVmaW5lIEtFWV9GNyA2NQorI2RlZmluZSBLRVlfRjggNjYKKyNkZWZpbmUgS0VZX0Y5IDY3CisjZGVmaW5lIEtFWV9GMTAgNjgKKyNkZWZpbmUgS0VZX05VTUxPQ0sgNjkKKyNkZWZpbmUgS0VZX1NDUk9MTExPQ0sgNzAKKyNkZWZpbmUgS0VZX0tQNyA3MQorI2RlZmluZSBLRVlfS1A4IDcyCisjZGVmaW5lIEtFWV9LUDkgNzMKKyNkZWZpbmUgS0VZX0tQTUlOVVMgNzQKKyNkZWZpbmUgS0VZX0tQNCA3NQorI2RlZmluZSBLRVlfS1A1IDc2CisjZGVmaW5lIEtFWV9LUDYgNzcKKyNkZWZpbmUgS0VZX0tQUExVUyA3OAorI2RlZmluZSBLRVlfS1AxIDc5CisjZGVmaW5lIEtFWV9LUDIgODAKKyNkZWZpbmUgS0VZX0tQMyA4MQorI2RlZmluZSBLRVlfS1AwIDgyCisjZGVmaW5lIEtFWV9LUERPVCA4MworCisjZGVmaW5lIEtFWV9aRU5LQUtVSEFOS0FLVSA4NQorI2RlZmluZSBLRVlfMTAyTkQgODYKKyNkZWZpbmUgS0VZX0YxMSA4NworI2RlZmluZSBLRVlfRjEyIDg4CisjZGVmaW5lIEtFWV9STyA4OQorI2RlZmluZSBLRVlfS0FUQUtBTkEgOTAKKyNkZWZpbmUgS0VZX0hJUkFHQU5BIDkxCisjZGVmaW5lIEtFWV9IRU5LQU4gOTIKKyNkZWZpbmUgS0VZX0tBVEFLQU5BSElSQUdBTkEgOTMKKyNkZWZpbmUgS0VZX01VSEVOS0FOIDk0CisjZGVmaW5lIEtFWV9LUEpQQ09NTUEgOTUKKyNkZWZpbmUgS0VZX0tQRU5URVIgOTYKKyNkZWZpbmUgS0VZX1JJR0hUQ1RSTCA5NworI2RlZmluZSBLRVlfS1BTTEFTSCA5OAorI2RlZmluZSBLRVlfU1lTUlEgOTkKKyNkZWZpbmUgS0VZX1JJR0hUQUxUIDEwMAorI2RlZmluZSBLRVlfTElORUZFRUQgMTAxCisjZGVmaW5lIEtFWV9IT01FIDEwMgorI2RlZmluZSBLRVlfVVAgMTAzCisjZGVmaW5lIEtFWV9QQUdFVVAgMTA0CisjZGVmaW5lIEtFWV9MRUZUIDEwNQorI2RlZmluZSBLRVlfUklHSFQgMTA2CisjZGVmaW5lIEtFWV9FTkQgMTA3CisjZGVmaW5lIEtFWV9ET1dOIDEwOAorI2RlZmluZSBLRVlfUEFHRURPV04gMTA5CisjZGVmaW5lIEtFWV9JTlNFUlQgMTEwCisjZGVmaW5lIEtFWV9ERUxFVEUgMTExCisjZGVmaW5lIEtFWV9NQUNSTyAxMTIKKyNkZWZpbmUgS0VZX01VVEUgMTEzCisjZGVmaW5lIEtFWV9WT0xVTUVET1dOIDExNAorI2RlZmluZSBLRVlfVk9MVU1FVVAgMTE1CisjZGVmaW5lIEtFWV9QT1dFUiAxMTYKKyNkZWZpbmUgS0VZX0tQRVFVQUwgMTE3CisjZGVmaW5lIEtFWV9LUFBMVVNNSU5VUyAxMTgKKyNkZWZpbmUgS0VZX1BBVVNFIDExOQorCisjZGVmaW5lIEtFWV9LUENPTU1BIDEyMQorI2RlZmluZSBLRVlfSEFOR0VVTCAxMjIKKyNkZWZpbmUgS0VZX0hBTkdVRUwgS0VZX0hBTkdFVUwKKyNkZWZpbmUgS0VZX0hBTkpBIDEyMworI2RlZmluZSBLRVlfWUVOIDEyNAorI2RlZmluZSBLRVlfTEVGVE1FVEEgMTI1CisjZGVmaW5lIEtFWV9SSUdIVE1FVEEgMTI2CisjZGVmaW5lIEtFWV9DT01QT1NFIDEyNworCisjZGVmaW5lIEtFWV9TVE9QIDEyOAorI2RlZmluZSBLRVlfQUdBSU4gMTI5CisjZGVmaW5lIEtFWV9QUk9QUyAxMzAKKyNkZWZpbmUgS0VZX1VORE8gMTMxCisjZGVmaW5lIEtFWV9GUk9OVCAxMzIKKyNkZWZpbmUgS0VZX0NPUFkgMTMzCisjZGVmaW5lIEtFWV9PUEVOIDEzNAorI2RlZmluZSBLRVlfUEFTVEUgMTM1CisjZGVmaW5lIEtFWV9GSU5EIDEzNgorI2RlZmluZSBLRVlfQ1VUIDEzNworI2RlZmluZSBLRVlfSEVMUCAxMzgKKyNkZWZpbmUgS0VZX01FTlUgMTM5CisjZGVmaW5lIEtFWV9DQUxDIDE0MAorI2RlZmluZSBLRVlfU0VUVVAgMTQxCisjZGVmaW5lIEtFWV9TTEVFUCAxNDIKKyNkZWZpbmUgS0VZX1dBS0VVUCAxNDMKKyNkZWZpbmUgS0VZX0ZJTEUgMTQ0CisjZGVmaW5lIEtFWV9TRU5ERklMRSAxNDUKKyNkZWZpbmUgS0VZX0RFTEVURUZJTEUgMTQ2CisjZGVmaW5lIEtFWV9YRkVSIDE0NworI2RlZmluZSBLRVlfUFJPRzEgMTQ4CisjZGVmaW5lIEtFWV9QUk9HMiAxNDkKKyNkZWZpbmUgS0VZX1dXVyAxNTAKKyNkZWZpbmUgS0VZX01TRE9TIDE1MQorI2RlZmluZSBLRVlfQ09GRkVFIDE1MgorI2RlZmluZSBLRVlfRElSRUNUSU9OIDE1MworI2RlZmluZSBLRVlfQ1lDTEVXSU5ET1dTIDE1NAorI2RlZmluZSBLRVlfTUFJTCAxNTUKKyNkZWZpbmUgS0VZX0JPT0tNQVJLUyAxNTYKKyNkZWZpbmUgS0VZX0NPTVBVVEVSIDE1NworI2RlZmluZSBLRVlfQkFDSyAxNTgKKyNkZWZpbmUgS0VZX0ZPUldBUkQgMTU5CisjZGVmaW5lIEtFWV9DTE9TRUNEIDE2MAorI2RlZmluZSBLRVlfRUpFQ1RDRCAxNjEKKyNkZWZpbmUgS0VZX0VKRUNUQ0xPU0VDRCAxNjIKKyNkZWZpbmUgS0VZX05FWFRTT05HIDE2MworI2RlZmluZSBLRVlfUExBWVBBVVNFIDE2NAorI2RlZmluZSBLRVlfUFJFVklPVVNTT05HIDE2NQorI2RlZmluZSBLRVlfU1RPUENEIDE2NgorI2RlZmluZSBLRVlfUkVDT1JEIDE2NworI2RlZmluZSBLRVlfUkVXSU5EIDE2OAorI2RlZmluZSBLRVlfUEhPTkUgMTY5CisjZGVmaW5lIEtFWV9JU08gMTcwCisjZGVmaW5lIEtFWV9DT05GSUcgMTcxCisjZGVmaW5lIEtFWV9IT01FUEFHRSAxNzIKKyNkZWZpbmUgS0VZX1JFRlJFU0ggMTczCisjZGVmaW5lIEtFWV9FWElUIDE3NAorI2RlZmluZSBLRVlfTU9WRSAxNzUKKyNkZWZpbmUgS0VZX0VESVQgMTc2CisjZGVmaW5lIEtFWV9TQ1JPTExVUCAxNzcKKyNkZWZpbmUgS0VZX1NDUk9MTERPV04gMTc4CisjZGVmaW5lIEtFWV9LUExFRlRQQVJFTiAxNzkKKyNkZWZpbmUgS0VZX0tQUklHSFRQQVJFTiAxODAKKyNkZWZpbmUgS0VZX05FVyAxODEKKyNkZWZpbmUgS0VZX1JFRE8gMTgyCisKKyNkZWZpbmUgS0VZX0YxMyAxODMKKyNkZWZpbmUgS0VZX0YxNCAxODQKKyNkZWZpbmUgS0VZX0YxNSAxODUKKyNkZWZpbmUgS0VZX0YxNiAxODYKKyNkZWZpbmUgS0VZX0YxNyAxODcKKyNkZWZpbmUgS0VZX0YxOCAxODgKKyNkZWZpbmUgS0VZX0YxOSAxODkKKyNkZWZpbmUgS0VZX0YyMCAxOTAKKyNkZWZpbmUgS0VZX0YyMSAxOTEKKyNkZWZpbmUgS0VZX0YyMiAxOTIKKyNkZWZpbmUgS0VZX0YyMyAxOTMKKyNkZWZpbmUgS0VZX0YyNCAxOTQKKworI2RlZmluZSBLRVlfUExBWUNEIDIwMAorI2RlZmluZSBLRVlfUEFVU0VDRCAyMDEKKyNkZWZpbmUgS0VZX1BST0czIDIwMgorI2RlZmluZSBLRVlfUFJPRzQgMjAzCisjZGVmaW5lIEtFWV9TVVNQRU5EIDIwNQorI2RlZmluZSBLRVlfQ0xPU0UgMjA2CisjZGVmaW5lIEtFWV9QTEFZIDIwNworI2RlZmluZSBLRVlfRkFTVEZPUldBUkQgMjA4CisjZGVmaW5lIEtFWV9CQVNTQk9PU1QgMjA5CisjZGVmaW5lIEtFWV9QUklOVCAyMTAKKyNkZWZpbmUgS0VZX0hQIDIxMQorI2RlZmluZSBLRVlfQ0FNRVJBIDIxMgorI2RlZmluZSBLRVlfU09VTkQgMjEzCisjZGVmaW5lIEtFWV9RVUVTVElPTiAyMTQKKyNkZWZpbmUgS0VZX0VNQUlMIDIxNQorI2RlZmluZSBLRVlfQ0hBVCAyMTYKKyNkZWZpbmUgS0VZX1NFQVJDSCAyMTcKKyNkZWZpbmUgS0VZX0NPTk5FQ1QgMjE4CisjZGVmaW5lIEtFWV9GSU5BTkNFIDIxOQorI2RlZmluZSBLRVlfU1BPUlQgMjIwCisjZGVmaW5lIEtFWV9TSE9QIDIyMQorI2RlZmluZSBLRVlfQUxURVJBU0UgMjIyCisjZGVmaW5lIEtFWV9DQU5DRUwgMjIzCisjZGVmaW5lIEtFWV9CUklHSFRORVNTRE9XTiAyMjQKKyNkZWZpbmUgS0VZX0JSSUdIVE5FU1NVUCAyMjUKKyNkZWZpbmUgS0VZX01FRElBIDIyNgorCisjZGVmaW5lIEtFWV9TVEFSIDIyNworI2RlZmluZSBLRVlfU0hBUlAgMjI4CisjZGVmaW5lIEtFWV9TT0ZUMSAyMjkKKyNkZWZpbmUgS0VZX1NPRlQyIDIzMAorI2RlZmluZSBLRVlfU0VORCAyMzEKKyNkZWZpbmUgS0VZX0NFTlRFUiAyMzIKKyNkZWZpbmUgS0VZX0hFQURTRVRIT09LIDIzMworI2RlZmluZSBLRVlfMF81IDIzNAorI2RlZmluZSBLRVlfMl81IDIzNQorCisjZGVmaW5lIEtFWV9TV0lUQ0hWSURFT01PREUgMjM2CisjZGVmaW5lIEtFWV9LQkRJTExVTVRPR0dMRSAyMzcKKyNkZWZpbmUgS0VZX0tCRElMTFVNRE9XTiAyMzgKKyNkZWZpbmUgS0VZX0tCRElMTFVNVVAgMjM5CisKKyNkZWZpbmUgS0VZX1NFTkQgMjMxCisjZGVmaW5lIEtFWV9SRVBMWSAyMzIKKyNkZWZpbmUgS0VZX0ZPUldBUkRNQUlMIDIzMworI2RlZmluZSBLRVlfU0FWRSAyMzQKKyNkZWZpbmUgS0VZX0RPQ1VNRU5UUyAyMzUKKworI2RlZmluZSBLRVlfQkFUVEVSWSAyMzYKKworI2RlZmluZSBLRVlfVU5LTk9XTiAyNDAKKworI2RlZmluZSBCVE5fTUlTQyAweDEwMAorI2RlZmluZSBCVE5fMCAweDEwMAorI2RlZmluZSBCVE5fMSAweDEwMQorI2RlZmluZSBCVE5fMiAweDEwMgorI2RlZmluZSBCVE5fMyAweDEwMworI2RlZmluZSBCVE5fNCAweDEwNAorI2RlZmluZSBCVE5fNSAweDEwNQorI2RlZmluZSBCVE5fNiAweDEwNgorI2RlZmluZSBCVE5fNyAweDEwNworI2RlZmluZSBCVE5fOCAweDEwOAorI2RlZmluZSBCVE5fOSAweDEwOQorCisjZGVmaW5lIEJUTl9NT1VTRSAweDExMAorI2RlZmluZSBCVE5fTEVGVCAweDExMAorI2RlZmluZSBCVE5fUklHSFQgMHgxMTEKKyNkZWZpbmUgQlROX01JRERMRSAweDExMgorI2RlZmluZSBCVE5fU0lERSAweDExMworI2RlZmluZSBCVE5fRVhUUkEgMHgxMTQKKyNkZWZpbmUgQlROX0ZPUldBUkQgMHgxMTUKKyNkZWZpbmUgQlROX0JBQ0sgMHgxMTYKKyNkZWZpbmUgQlROX1RBU0sgMHgxMTcKKworI2RlZmluZSBCVE5fSk9ZU1RJQ0sgMHgxMjAKKyNkZWZpbmUgQlROX1RSSUdHRVIgMHgxMjAKKyNkZWZpbmUgQlROX1RIVU1CIDB4MTIxCisjZGVmaW5lIEJUTl9USFVNQjIgMHgxMjIKKyNkZWZpbmUgQlROX1RPUCAweDEyMworI2RlZmluZSBCVE5fVE9QMiAweDEyNAorI2RlZmluZSBCVE5fUElOS0lFIDB4MTI1CisjZGVmaW5lIEJUTl9CQVNFIDB4MTI2CisjZGVmaW5lIEJUTl9CQVNFMiAweDEyNworI2RlZmluZSBCVE5fQkFTRTMgMHgxMjgKKyNkZWZpbmUgQlROX0JBU0U0IDB4MTI5CisjZGVmaW5lIEJUTl9CQVNFNSAweDEyYQorI2RlZmluZSBCVE5fQkFTRTYgMHgxMmIKKyNkZWZpbmUgQlROX0RFQUQgMHgxMmYKKworI2RlZmluZSBCVE5fR0FNRVBBRCAweDEzMAorI2RlZmluZSBCVE5fQSAweDEzMAorI2RlZmluZSBCVE5fQiAweDEzMQorI2RlZmluZSBCVE5fQyAweDEzMgorI2RlZmluZSBCVE5fWCAweDEzMworI2RlZmluZSBCVE5fWSAweDEzNAorI2RlZmluZSBCVE5fWiAweDEzNQorI2RlZmluZSBCVE5fVEwgMHgxMzYKKyNkZWZpbmUgQlROX1RSIDB4MTM3CisjZGVmaW5lIEJUTl9UTDIgMHgxMzgKKyNkZWZpbmUgQlROX1RSMiAweDEzOQorI2RlZmluZSBCVE5fU0VMRUNUIDB4MTNhCisjZGVmaW5lIEJUTl9TVEFSVCAweDEzYgorI2RlZmluZSBCVE5fTU9ERSAweDEzYworI2RlZmluZSBCVE5fVEhVTUJMIDB4MTNkCisjZGVmaW5lIEJUTl9USFVNQlIgMHgxM2UKKworI2RlZmluZSBCVE5fRElHSSAweDE0MAorI2RlZmluZSBCVE5fVE9PTF9QRU4gMHgxNDAKKyNkZWZpbmUgQlROX1RPT0xfUlVCQkVSIDB4MTQxCisjZGVmaW5lIEJUTl9UT09MX0JSVVNIIDB4MTQyCisjZGVmaW5lIEJUTl9UT09MX1BFTkNJTCAweDE0MworI2RlZmluZSBCVE5fVE9PTF9BSVJCUlVTSCAweDE0NAorI2RlZmluZSBCVE5fVE9PTF9GSU5HRVIgMHgxNDUKKyNkZWZpbmUgQlROX1RPT0xfTU9VU0UgMHgxNDYKKyNkZWZpbmUgQlROX1RPT0xfTEVOUyAweDE0NworI2RlZmluZSBCVE5fVE9VQ0ggMHgxNGEKKyNkZWZpbmUgQlROX1NUWUxVUyAweDE0YgorI2RlZmluZSBCVE5fU1RZTFVTMiAweDE0YworI2RlZmluZSBCVE5fVE9PTF9ET1VCTEVUQVAgMHgxNGQKKyNkZWZpbmUgQlROX1RPT0xfVFJJUExFVEFQIDB4MTRlCisKKyNkZWZpbmUgQlROX1dIRUVMIDB4MTUwCisjZGVmaW5lIEJUTl9HRUFSX0RPV04gMHgxNTAKKyNkZWZpbmUgQlROX0dFQVJfVVAgMHgxNTEKKworI2RlZmluZSBLRVlfT0sgMHgxNjAKKyNkZWZpbmUgS0VZX1NFTEVDVCAweDE2MQorI2RlZmluZSBLRVlfR09UTyAweDE2MgorI2RlZmluZSBLRVlfQ0xFQVIgMHgxNjMKKyNkZWZpbmUgS0VZX1BPV0VSMiAweDE2NAorI2RlZmluZSBLRVlfT1BUSU9OIDB4MTY1CisjZGVmaW5lIEtFWV9JTkZPIDB4MTY2CisjZGVmaW5lIEtFWV9USU1FIDB4MTY3CisjZGVmaW5lIEtFWV9WRU5ET1IgMHgxNjgKKyNkZWZpbmUgS0VZX0FSQ0hJVkUgMHgxNjkKKyNkZWZpbmUgS0VZX1BST0dSQU0gMHgxNmEKKyNkZWZpbmUgS0VZX0NIQU5ORUwgMHgxNmIKKyNkZWZpbmUgS0VZX0ZBVk9SSVRFUyAweDE2YworI2RlZmluZSBLRVlfRVBHIDB4MTZkCisjZGVmaW5lIEtFWV9QVlIgMHgxNmUKKyNkZWZpbmUgS0VZX01IUCAweDE2ZgorI2RlZmluZSBLRVlfTEFOR1VBR0UgMHgxNzAKKyNkZWZpbmUgS0VZX1RJVExFIDB4MTcxCisjZGVmaW5lIEtFWV9TVUJUSVRMRSAweDE3MgorI2RlZmluZSBLRVlfQU5HTEUgMHgxNzMKKyNkZWZpbmUgS0VZX1pPT00gMHgxNzQKKyNkZWZpbmUgS0VZX01PREUgMHgxNzUKKyNkZWZpbmUgS0VZX0tFWUJPQVJEIDB4MTc2CisjZGVmaW5lIEtFWV9TQ1JFRU4gMHgxNzcKKyNkZWZpbmUgS0VZX1BDIDB4MTc4CisjZGVmaW5lIEtFWV9UViAweDE3OQorI2RlZmluZSBLRVlfVFYyIDB4MTdhCisjZGVmaW5lIEtFWV9WQ1IgMHgxN2IKKyNkZWZpbmUgS0VZX1ZDUjIgMHgxN2MKKyNkZWZpbmUgS0VZX1NBVCAweDE3ZAorI2RlZmluZSBLRVlfU0FUMiAweDE3ZQorI2RlZmluZSBLRVlfQ0QgMHgxN2YKKyNkZWZpbmUgS0VZX1RBUEUgMHgxODAKKyNkZWZpbmUgS0VZX1JBRElPIDB4MTgxCisjZGVmaW5lIEtFWV9UVU5FUiAweDE4MgorI2RlZmluZSBLRVlfUExBWUVSIDB4MTgzCisjZGVmaW5lIEtFWV9URVhUIDB4MTg0CisjZGVmaW5lIEtFWV9EVkQgMHgxODUKKyNkZWZpbmUgS0VZX0FVWCAweDE4NgorI2RlZmluZSBLRVlfTVAzIDB4MTg3CisjZGVmaW5lIEtFWV9BVURJTyAweDE4OAorI2RlZmluZSBLRVlfVklERU8gMHgxODkKKyNkZWZpbmUgS0VZX0RJUkVDVE9SWSAweDE4YQorI2RlZmluZSBLRVlfTElTVCAweDE4YgorI2RlZmluZSBLRVlfTUVNTyAweDE4YworI2RlZmluZSBLRVlfQ0FMRU5EQVIgMHgxOGQKKyNkZWZpbmUgS0VZX1JFRCAweDE4ZQorI2RlZmluZSBLRVlfR1JFRU4gMHgxOGYKKyNkZWZpbmUgS0VZX1lFTExPVyAweDE5MAorI2RlZmluZSBLRVlfQkxVRSAweDE5MQorI2RlZmluZSBLRVlfQ0hBTk5FTFVQIDB4MTkyCisjZGVmaW5lIEtFWV9DSEFOTkVMRE9XTiAweDE5MworI2RlZmluZSBLRVlfRklSU1QgMHgxOTQKKyNkZWZpbmUgS0VZX0xBU1QgMHgxOTUKKyNkZWZpbmUgS0VZX0FCIDB4MTk2CisjZGVmaW5lIEtFWV9ORVhUIDB4MTk3CisjZGVmaW5lIEtFWV9SRVNUQVJUIDB4MTk4CisjZGVmaW5lIEtFWV9TTE9XIDB4MTk5CisjZGVmaW5lIEtFWV9TSFVGRkxFIDB4MTlhCisjZGVmaW5lIEtFWV9CUkVBSyAweDE5YgorI2RlZmluZSBLRVlfUFJFVklPVVMgMHgxOWMKKyNkZWZpbmUgS0VZX0RJR0lUUyAweDE5ZAorI2RlZmluZSBLRVlfVEVFTiAweDE5ZQorI2RlZmluZSBLRVlfVFdFTiAweDE5ZgorCisjZGVmaW5lIEtFWV9ERUxfRU9MIDB4MWMwCisjZGVmaW5lIEtFWV9ERUxfRU9TIDB4MWMxCisjZGVmaW5lIEtFWV9JTlNfTElORSAweDFjMgorI2RlZmluZSBLRVlfREVMX0xJTkUgMHgxYzMKKworI2RlZmluZSBLRVlfRk4gMHgxZDAKKyNkZWZpbmUgS0VZX0ZOX0VTQyAweDFkMQorI2RlZmluZSBLRVlfRk5fRjEgMHgxZDIKKyNkZWZpbmUgS0VZX0ZOX0YyIDB4MWQzCisjZGVmaW5lIEtFWV9GTl9GMyAweDFkNAorI2RlZmluZSBLRVlfRk5fRjQgMHgxZDUKKyNkZWZpbmUgS0VZX0ZOX0Y1IDB4MWQ2CisjZGVmaW5lIEtFWV9GTl9GNiAweDFkNworI2RlZmluZSBLRVlfRk5fRjcgMHgxZDgKKyNkZWZpbmUgS0VZX0ZOX0Y4IDB4MWQ5CisjZGVmaW5lIEtFWV9GTl9GOSAweDFkYQorI2RlZmluZSBLRVlfRk5fRjEwIDB4MWRiCisjZGVmaW5lIEtFWV9GTl9GMTEgMHgxZGMKKyNkZWZpbmUgS0VZX0ZOX0YxMiAweDFkZAorI2RlZmluZSBLRVlfRk5fMSAweDFkZQorI2RlZmluZSBLRVlfRk5fMiAweDFkZgorI2RlZmluZSBLRVlfRk5fRCAweDFlMAorI2RlZmluZSBLRVlfRk5fRSAweDFlMQorI2RlZmluZSBLRVlfRk5fRiAweDFlMgorI2RlZmluZSBLRVlfRk5fUyAweDFlMworI2RlZmluZSBLRVlfRk5fQiAweDFlNAorCisjZGVmaW5lIEtFWV9CUkxfRE9UMSAweDFmMQorI2RlZmluZSBLRVlfQlJMX0RPVDIgMHgxZjIKKyNkZWZpbmUgS0VZX0JSTF9ET1QzIDB4MWYzCisjZGVmaW5lIEtFWV9CUkxfRE9UNCAweDFmNAorI2RlZmluZSBLRVlfQlJMX0RPVDUgMHgxZjUKKyNkZWZpbmUgS0VZX0JSTF9ET1Q2IDB4MWY2CisjZGVmaW5lIEtFWV9CUkxfRE9UNyAweDFmNworI2RlZmluZSBLRVlfQlJMX0RPVDggMHgxZjgKKworI2RlZmluZSBLRVlfTUlOX0lOVEVSRVNUSU5HIEtFWV9NVVRFCisjZGVmaW5lIEtFWV9NQVggMHgxZmYKKworI2RlZmluZSBSRUxfWCAweDAwCisjZGVmaW5lIFJFTF9ZIDB4MDEKKyNkZWZpbmUgUkVMX1ogMHgwMgorI2RlZmluZSBSRUxfUlggMHgwMworI2RlZmluZSBSRUxfUlkgMHgwNAorI2RlZmluZSBSRUxfUlogMHgwNQorI2RlZmluZSBSRUxfSFdIRUVMIDB4MDYKKyNkZWZpbmUgUkVMX0RJQUwgMHgwNworI2RlZmluZSBSRUxfV0hFRUwgMHgwOAorI2RlZmluZSBSRUxfTUlTQyAweDA5CisjZGVmaW5lIFJFTF9NQVggMHgwZgorCisjZGVmaW5lIEFCU19YIDB4MDAKKyNkZWZpbmUgQUJTX1kgMHgwMQorI2RlZmluZSBBQlNfWiAweDAyCisjZGVmaW5lIEFCU19SWCAweDAzCisjZGVmaW5lIEFCU19SWSAweDA0CisjZGVmaW5lIEFCU19SWiAweDA1CisjZGVmaW5lIEFCU19USFJPVFRMRSAweDA2CisjZGVmaW5lIEFCU19SVURERVIgMHgwNworI2RlZmluZSBBQlNfV0hFRUwgMHgwOAorI2RlZmluZSBBQlNfR0FTIDB4MDkKKyNkZWZpbmUgQUJTX0JSQUtFIDB4MGEKKyNkZWZpbmUgQUJTX0hBVDBYIDB4MTAKKyNkZWZpbmUgQUJTX0hBVDBZIDB4MTEKKyNkZWZpbmUgQUJTX0hBVDFYIDB4MTIKKyNkZWZpbmUgQUJTX0hBVDFZIDB4MTMKKyNkZWZpbmUgQUJTX0hBVDJYIDB4MTQKKyNkZWZpbmUgQUJTX0hBVDJZIDB4MTUKKyNkZWZpbmUgQUJTX0hBVDNYIDB4MTYKKyNkZWZpbmUgQUJTX0hBVDNZIDB4MTcKKyNkZWZpbmUgQUJTX1BSRVNTVVJFIDB4MTgKKyNkZWZpbmUgQUJTX0RJU1RBTkNFIDB4MTkKKyNkZWZpbmUgQUJTX1RJTFRfWCAweDFhCisjZGVmaW5lIEFCU19USUxUX1kgMHgxYgorI2RlZmluZSBBQlNfVE9PTF9XSURUSCAweDFjCisjZGVmaW5lIEFCU19WT0xVTUUgMHgyMAorI2RlZmluZSBBQlNfTUlTQyAweDI4CisjZGVmaW5lIEFCU19NQVggMHgzZgorCisjZGVmaW5lIFNXX0xJRCAweDAwICAKKyNkZWZpbmUgU1dfVEFCTEVUX01PREUgMHgwMSAgCisjZGVmaW5lIFNXX0hFQURQSE9ORV9JTlNFUlQgMHgwMiAgCisjZGVmaW5lIFNXX01BWCAweDBmCisKKyNkZWZpbmUgTVNDX1NFUklBTCAweDAwCisjZGVmaW5lIE1TQ19QVUxTRUxFRCAweDAxCisjZGVmaW5lIE1TQ19HRVNUVVJFIDB4MDIKKyNkZWZpbmUgTVNDX1JBVyAweDAzCisjZGVmaW5lIE1TQ19TQ0FOIDB4MDQKKyNkZWZpbmUgTVNDX01BWCAweDA3CisKKyNkZWZpbmUgTEVEX05VTUwgMHgwMAorI2RlZmluZSBMRURfQ0FQU0wgMHgwMQorI2RlZmluZSBMRURfU0NST0xMTCAweDAyCisjZGVmaW5lIExFRF9DT01QT1NFIDB4MDMKKyNkZWZpbmUgTEVEX0tBTkEgMHgwNAorI2RlZmluZSBMRURfU0xFRVAgMHgwNQorI2RlZmluZSBMRURfU1VTUEVORCAweDA2CisjZGVmaW5lIExFRF9NVVRFIDB4MDcKKyNkZWZpbmUgTEVEX01JU0MgMHgwOAorI2RlZmluZSBMRURfTUFJTCAweDA5CisjZGVmaW5lIExFRF9DSEFSR0lORyAweDBhCisjZGVmaW5lIExFRF9NQVggMHgwZgorCisjZGVmaW5lIFJFUF9ERUxBWSAweDAwCisjZGVmaW5lIFJFUF9QRVJJT0QgMHgwMQorI2RlZmluZSBSRVBfTUFYIDB4MDEKKworI2RlZmluZSBTTkRfQ0xJQ0sgMHgwMAorI2RlZmluZSBTTkRfQkVMTCAweDAxCisjZGVmaW5lIFNORF9UT05FIDB4MDIKKyNkZWZpbmUgU05EX01BWCAweDA3CisKKyNkZWZpbmUgSURfQlVTIDAKKyNkZWZpbmUgSURfVkVORE9SIDEKKyNkZWZpbmUgSURfUFJPRFVDVCAyCisjZGVmaW5lIElEX1ZFUlNJT04gMworCisjZGVmaW5lIEJVU19QQ0kgMHgwMQorI2RlZmluZSBCVVNfSVNBUE5QIDB4MDIKKyNkZWZpbmUgQlVTX1VTQiAweDAzCisjZGVmaW5lIEJVU19ISUwgMHgwNAorI2RlZmluZSBCVVNfQkxVRVRPT1RIIDB4MDUKKworI2RlZmluZSBCVVNfSVNBIDB4MTAKKyNkZWZpbmUgQlVTX0k4MDQyIDB4MTEKKyNkZWZpbmUgQlVTX1hUS0JEIDB4MTIKKyNkZWZpbmUgQlVTX1JTMjMyIDB4MTMKKyNkZWZpbmUgQlVTX0dBTUVQT1JUIDB4MTQKKyNkZWZpbmUgQlVTX1BBUlBPUlQgMHgxNQorI2RlZmluZSBCVVNfQU1JR0EgMHgxNgorI2RlZmluZSBCVVNfQURCIDB4MTcKKyNkZWZpbmUgQlVTX0kyQyAweDE4CisjZGVmaW5lIEJVU19IT1NUIDB4MTkKKyNkZWZpbmUgQlVTX0dTQyAweDFBCisKKyNkZWZpbmUgRkZfU1RBVFVTX1NUT1BQRUQgMHgwMAorI2RlZmluZSBGRl9TVEFUVVNfUExBWUlORyAweDAxCisjZGVmaW5lIEZGX1NUQVRVU19NQVggMHgwMQorCitzdHJ1Y3QgZmZfcmVwbGF5IHsKKyBfX3UxNiBsZW5ndGg7CisgX191MTYgZGVsYXk7Cit9OworCitzdHJ1Y3QgZmZfdHJpZ2dlciB7CisgX191MTYgYnV0dG9uOworIF9fdTE2IGludGVydmFsOworfTsKKworc3RydWN0IGZmX2VudmVsb3BlIHsKKyBfX3UxNiBhdHRhY2tfbGVuZ3RoOworIF9fdTE2IGF0dGFja19sZXZlbDsKKyBfX3UxNiBmYWRlX2xlbmd0aDsKKyBfX3UxNiBmYWRlX2xldmVsOworfTsKKworc3RydWN0IGZmX2NvbnN0YW50X2VmZmVjdCB7CisgX19zMTYgbGV2ZWw7Cisgc3RydWN0IGZmX2VudmVsb3BlIGVudmVsb3BlOworfTsKKworc3RydWN0IGZmX3JhbXBfZWZmZWN0IHsKKyBfX3MxNiBzdGFydF9sZXZlbDsKKyBfX3MxNiBlbmRfbGV2ZWw7Cisgc3RydWN0IGZmX2VudmVsb3BlIGVudmVsb3BlOworfTsKKworc3RydWN0IGZmX2NvbmRpdGlvbl9lZmZlY3QgeworIF9fdTE2IHJpZ2h0X3NhdHVyYXRpb247CisgX191MTYgbGVmdF9zYXR1cmF0aW9uOworCisgX19zMTYgcmlnaHRfY29lZmY7CisgX19zMTYgbGVmdF9jb2VmZjsKKworIF9fdTE2IGRlYWRiYW5kOworIF9fczE2IGNlbnRlcjsKKworfTsKKworc3RydWN0IGZmX3BlcmlvZGljX2VmZmVjdCB7CisgX191MTYgd2F2ZWZvcm07CisgX191MTYgcGVyaW9kOworIF9fczE2IG1hZ25pdHVkZTsKKyBfX3MxNiBvZmZzZXQ7CisgX191MTYgcGhhc2U7CisKKyBzdHJ1Y3QgZmZfZW52ZWxvcGUgZW52ZWxvcGU7CisKKyBfX3UzMiBjdXN0b21fbGVuOworIF9fczE2ICpjdXN0b21fZGF0YTsKKworfTsKKworc3RydWN0IGZmX3J1bWJsZV9lZmZlY3QgeworIF9fdTE2IHN0cm9uZ19tYWduaXR1ZGU7CisgX191MTYgd2Vha19tYWduaXR1ZGU7Cit9OworCitzdHJ1Y3QgZmZfZWZmZWN0IHsKKyBfX3UxNiB0eXBlOworCisgX19zMTYgaWQ7CisKKyBfX3UxNiBkaXJlY3Rpb247CisKKyBzdHJ1Y3QgZmZfdHJpZ2dlciB0cmlnZ2VyOworIHN0cnVjdCBmZl9yZXBsYXkgcmVwbGF5OworCisgdW5pb24geworIHN0cnVjdCBmZl9jb25zdGFudF9lZmZlY3QgY29uc3RhbnQ7Cisgc3RydWN0IGZmX3JhbXBfZWZmZWN0IHJhbXA7Cisgc3RydWN0IGZmX3BlcmlvZGljX2VmZmVjdCBwZXJpb2RpYzsKKyBzdHJ1Y3QgZmZfY29uZGl0aW9uX2VmZmVjdCBjb25kaXRpb25bMl07Cisgc3RydWN0IGZmX3J1bWJsZV9lZmZlY3QgcnVtYmxlOworIH0gdTsKK307CisKKyNkZWZpbmUgRkZfUlVNQkxFIDB4NTAKKyNkZWZpbmUgRkZfUEVSSU9ESUMgMHg1MQorI2RlZmluZSBGRl9DT05TVEFOVCAweDUyCisjZGVmaW5lIEZGX1NQUklORyAweDUzCisjZGVmaW5lIEZGX0ZSSUNUSU9OIDB4NTQKKyNkZWZpbmUgRkZfREFNUEVSIDB4NTUKKyNkZWZpbmUgRkZfSU5FUlRJQSAweDU2CisjZGVmaW5lIEZGX1JBTVAgMHg1NworCisjZGVmaW5lIEZGX1NRVUFSRSAweDU4CisjZGVmaW5lIEZGX1RSSUFOR0xFIDB4NTkKKyNkZWZpbmUgRkZfU0lORSAweDVhCisjZGVmaW5lIEZGX1NBV19VUCAweDViCisjZGVmaW5lIEZGX1NBV19ET1dOIDB4NWMKKyNkZWZpbmUgRkZfQ1VTVE9NIDB4NWQKKworI2RlZmluZSBGRl9HQUlOIDB4NjAKKyNkZWZpbmUgRkZfQVVUT0NFTlRFUiAweDYxCisKKyNkZWZpbmUgRkZfTUFYIDB4N2YKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaW50ZXJydXB0LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaW50ZXJydXB0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ4NTkyZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pbnRlcnJ1cHQuaApAQCAtMCwwICsxLDEyMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfSU5URVJSVVBUX0gKKyNkZWZpbmUgX0xJTlVYX0lOVEVSUlVQVF9ICisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZW1wdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KKyNpbmNsdWRlIDxsaW51eC9pcnFyZXR1cm4uaD4KKyNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnFmbGFncy5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorCisjZGVmaW5lIElSUUZfVFJJR0dFUl9OT05FIDB4MDAwMDAwMDAKKyNkZWZpbmUgSVJRRl9UUklHR0VSX1JJU0lORyAweDAwMDAwMDAxCisjZGVmaW5lIElSUUZfVFJJR0dFUl9GQUxMSU5HIDB4MDAwMDAwMDIKKyNkZWZpbmUgSVJRRl9UUklHR0VSX0hJR0ggMHgwMDAwMDAwNAorI2RlZmluZSBJUlFGX1RSSUdHRVJfTE9XIDB4MDAwMDAwMDgKKyNkZWZpbmUgSVJRRl9UUklHR0VSX01BU0sgKElSUUZfVFJJR0dFUl9ISUdIIHwgSVJRRl9UUklHR0VSX0xPVyB8ICAgSVJRRl9UUklHR0VSX1JJU0lORyB8IElSUUZfVFJJR0dFUl9GQUxMSU5HKQorI2RlZmluZSBJUlFGX1RSSUdHRVJfUFJPQkUgMHgwMDAwMDAxMAorCisjZGVmaW5lIElSUUZfRElTQUJMRUQgMHgwMDAwMDAyMAorI2RlZmluZSBJUlFGX1NBTVBMRV9SQU5ET00gMHgwMDAwMDA0MAorI2RlZmluZSBJUlFGX1NIQVJFRCAweDAwMDAwMDgwCisjZGVmaW5lIElSUUZfUFJPQkVfU0hBUkVEIDB4MDAwMDAxMDAKKyNkZWZpbmUgSVJRRl9USU1FUiAweDAwMDAwMjAwCisjZGVmaW5lIElSUUZfUEVSQ1BVIDB4MDAwMDA0MDAKKworI2RlZmluZSBTQV9JTlRFUlJVUFQgSVJRRl9ESVNBQkxFRAorI2RlZmluZSBTQV9TQU1QTEVfUkFORE9NIElSUUZfU0FNUExFX1JBTkRPTQorI2RlZmluZSBTQV9TSElSUSBJUlFGX1NIQVJFRAorI2RlZmluZSBTQV9QUk9CRUlSUSBJUlFGX1BST0JFX1NIQVJFRAorI2RlZmluZSBTQV9QRVJDUFUgSVJRRl9QRVJDUFUKKworI2RlZmluZSBTQV9UUklHR0VSX0xPVyBJUlFGX1RSSUdHRVJfTE9XCisjZGVmaW5lIFNBX1RSSUdHRVJfSElHSCBJUlFGX1RSSUdHRVJfSElHSAorI2RlZmluZSBTQV9UUklHR0VSX0ZBTExJTkcgSVJRRl9UUklHR0VSX0ZBTExJTkcKKyNkZWZpbmUgU0FfVFJJR0dFUl9SSVNJTkcgSVJRRl9UUklHR0VSX1JJU0lORworI2RlZmluZSBTQV9UUklHR0VSX01BU0sgSVJRRl9UUklHR0VSX01BU0sKKworc3RydWN0IGlycWFjdGlvbiB7CisgaXJxcmV0dXJuX3QgKCpoYW5kbGVyKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKik7CisgdW5zaWduZWQgbG9uZyBmbGFnczsKKyBjcHVtYXNrX3QgbWFzazsKKyBjb25zdCBjaGFyICpuYW1lOworIHZvaWQgKmRldl9pZDsKKyBzdHJ1Y3QgaXJxYWN0aW9uICpuZXh0OworIGludCBpcnE7Cisgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpkaXI7Cit9OworCisjZGVmaW5lIGxvY2FsX2lycV9lbmFibGVfaW5faGFyZGlycSgpIGxvY2FsX2lycV9lbmFibGUoKQorCisjZGVmaW5lIGRpc2FibGVfaXJxX25vc3luY19sb2NrZGVwKGlycSkgZGlzYWJsZV9pcnFfbm9zeW5jKGlycSkKKyNkZWZpbmUgZGlzYWJsZV9pcnFfbG9ja2RlcChpcnEpIGRpc2FibGVfaXJxKGlycSkKKyNkZWZpbmUgZW5hYmxlX2lycV9sb2NrZGVwKGlycSkgZW5hYmxlX2lycShpcnEpCisKKyNpZm5kZWYgX19BUkNIX1NFVF9TT0ZUSVJRX1BFTkRJTkcKKyNkZWZpbmUgc2V0X3NvZnRpcnFfcGVuZGluZyh4KSAobG9jYWxfc29mdGlycV9wZW5kaW5nKCkgPSAoeCkpCisjZGVmaW5lIG9yX3NvZnRpcnFfcGVuZGluZyh4KSAobG9jYWxfc29mdGlycV9wZW5kaW5nKCkgfD0gKHgpKQorI2VuZGlmCisKKyNkZWZpbmUgc2F2ZV9mbGFncyh4KSBzYXZlX2ZsYWdzKCZ4KQorI2RlZmluZSBzYXZlX2FuZF9jbGkoeCkgc2F2ZV9hbmRfY2xpKCZ4KQorCitlbnVtCit7CisgSElfU09GVElSUT0wLAorIFRJTUVSX1NPRlRJUlEsCisgTkVUX1RYX1NPRlRJUlEsCisgTkVUX1JYX1NPRlRJUlEsCisgQkxPQ0tfU09GVElSUSwKKyBUQVNLTEVUX1NPRlRJUlEKK307CisKK3N0cnVjdCBzb2Z0aXJxX2FjdGlvbgoreworIHZvaWQgKCphY3Rpb24pKHN0cnVjdCBzb2Z0aXJxX2FjdGlvbiAqKTsKKyB2b2lkICpkYXRhOworfTsKKworI2RlZmluZSBfX3JhaXNlX3NvZnRpcnFfaXJxb2ZmKG5yKSBkbyB7IG9yX3NvZnRpcnFfcGVuZGluZygxVUwgPDwgKG5yKSk7IH0gd2hpbGUgKDApCisKK3N0cnVjdCB0YXNrbGV0X3N0cnVjdAoreworIHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqbmV4dDsKKyB1bnNpZ25lZCBsb25nIHN0YXRlOworIGF0b21pY190IGNvdW50OworIHZvaWQgKCpmdW5jKSh1bnNpZ25lZCBsb25nKTsKKyB1bnNpZ25lZCBsb25nIGRhdGE7Cit9OworCisjZGVmaW5lIERFQ0xBUkVfVEFTS0xFVChuYW1lLCBmdW5jLCBkYXRhKSAgc3RydWN0IHRhc2tsZXRfc3RydWN0IG5hbWUgPSB7IE5VTEwsIDAsIEFUT01JQ19JTklUKDApLCBmdW5jLCBkYXRhIH0KKworI2RlZmluZSBERUNMQVJFX1RBU0tMRVRfRElTQUJMRUQobmFtZSwgZnVuYywgZGF0YSkgIHN0cnVjdCB0YXNrbGV0X3N0cnVjdCBuYW1lID0geyBOVUxMLCAwLCBBVE9NSUNfSU5JVCgxKSwgZnVuYywgZGF0YSB9CisKK2VudW0KK3sKKyBUQVNLTEVUX1NUQVRFX1NDSEVELAorIFRBU0tMRVRfU1RBVEVfUlVOCit9OworCisjZGVmaW5lIHRhc2tsZXRfdHJ5bG9jayh0KSAxCisjZGVmaW5lIHRhc2tsZXRfdW5sb2NrX3dhaXQodCkgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSB0YXNrbGV0X3VubG9jayh0KSBkbyB7IH0gd2hpbGUgKDApCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lvY3RsLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaW9jdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWZiZWFiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lvY3RsLmgKQEAgLTAsMCArMSwxOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfSU9DVExfSAorI2RlZmluZSBfTElOVVhfSU9DVExfSAorCisjaW5jbHVkZSA8YXNtL2lvY3RsLmg+CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaW9wb3J0LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaW9wb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjIwODFmYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pb3BvcnQuaApAQCAtMCwwICsxLDk1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9JT1BPUlRfSAorI2RlZmluZSBfTElOVVhfSU9QT1JUX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IHJlc291cmNlIHsKKyByZXNvdXJjZV9zaXplX3Qgc3RhcnQ7CisgcmVzb3VyY2Vfc2l6ZV90IGVuZDsKKyBjb25zdCBjaGFyICpuYW1lOworIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Cisgc3RydWN0IHJlc291cmNlICpwYXJlbnQsICpzaWJsaW5nLCAqY2hpbGQ7Cit9OworCitzdHJ1Y3QgcmVzb3VyY2VfbGlzdCB7Cisgc3RydWN0IHJlc291cmNlX2xpc3QgKm5leHQ7Cisgc3RydWN0IHJlc291cmNlICpyZXM7Cisgc3RydWN0IHBjaV9kZXYgKmRldjsKK307CisKKyNkZWZpbmUgSU9SRVNPVVJDRV9CSVRTIDB4MDAwMDAwZmYgIAorCisjZGVmaW5lIElPUkVTT1VSQ0VfSU8gMHgwMDAwMDEwMCAgCisjZGVmaW5lIElPUkVTT1VSQ0VfTUVNIDB4MDAwMDAyMDAKKyNkZWZpbmUgSU9SRVNPVVJDRV9JUlEgMHgwMDAwMDQwMAorI2RlZmluZSBJT1JFU09VUkNFX0RNQSAweDAwMDAwODAwCisKKyNkZWZpbmUgSU9SRVNPVVJDRV9QUkVGRVRDSCAweDAwMDAxMDAwICAKKyNkZWZpbmUgSU9SRVNPVVJDRV9SRUFET05MWSAweDAwMDAyMDAwCisjZGVmaW5lIElPUkVTT1VSQ0VfQ0FDSEVBQkxFIDB4MDAwMDQwMDAKKyNkZWZpbmUgSU9SRVNPVVJDRV9SQU5HRUxFTkdUSCAweDAwMDA4MDAwCisjZGVmaW5lIElPUkVTT1VSQ0VfU0hBRE9XQUJMRSAweDAwMDEwMDAwCisjZGVmaW5lIElPUkVTT1VSQ0VfQlVTX0hBU19WR0EgMHgwMDA4MDAwMAorCisjZGVmaW5lIElPUkVTT1VSQ0VfRElTQUJMRUQgMHgxMDAwMDAwMAorI2RlZmluZSBJT1JFU09VUkNFX1VOU0VUIDB4MjAwMDAwMDAKKyNkZWZpbmUgSU9SRVNPVVJDRV9BVVRPIDB4NDAwMDAwMDAKKyNkZWZpbmUgSU9SRVNPVVJDRV9CVVNZIDB4ODAwMDAwMDAgIAorCisjZGVmaW5lIElPUkVTT1VSQ0VfSVJRX0hJR0hFREdFICgxPDwwKQorI2RlZmluZSBJT1JFU09VUkNFX0lSUV9MT1dFREdFICgxPDwxKQorI2RlZmluZSBJT1JFU09VUkNFX0lSUV9ISUdITEVWRUwgKDE8PDIpCisjZGVmaW5lIElPUkVTT1VSQ0VfSVJRX0xPV0xFVkVMICgxPDwzKQorI2RlZmluZSBJT1JFU09VUkNFX0lSUV9TSEFSRUFCTEUgKDE8PDQpCisKKyNkZWZpbmUgSU9SRVNPVVJDRV9ETUFfVFlQRV9NQVNLICgzPDwwKQorI2RlZmluZSBJT1JFU09VUkNFX0RNQV84QklUICgwPDwwKQorI2RlZmluZSBJT1JFU09VUkNFX0RNQV84QU5EMTZCSVQgKDE8PDApCisjZGVmaW5lIElPUkVTT1VSQ0VfRE1BXzE2QklUICgyPDwwKQorCisjZGVmaW5lIElPUkVTT1VSQ0VfRE1BX01BU1RFUiAoMTw8MikKKyNkZWZpbmUgSU9SRVNPVVJDRV9ETUFfQllURSAoMTw8MykKKyNkZWZpbmUgSU9SRVNPVVJDRV9ETUFfV09SRCAoMTw8NCkKKworI2RlZmluZSBJT1JFU09VUkNFX0RNQV9TUEVFRF9NQVNLICgzPDw2KQorI2RlZmluZSBJT1JFU09VUkNFX0RNQV9DT01QQVRJQkxFICgwPDw2KQorI2RlZmluZSBJT1JFU09VUkNFX0RNQV9UWVBFQSAoMTw8NikKKyNkZWZpbmUgSU9SRVNPVVJDRV9ETUFfVFlQRUIgKDI8PDYpCisjZGVmaW5lIElPUkVTT1VSQ0VfRE1BX1RZUEVGICgzPDw2KQorCisjZGVmaW5lIElPUkVTT1VSQ0VfTUVNX1dSSVRFQUJMRSAoMTw8MCkgIAorI2RlZmluZSBJT1JFU09VUkNFX01FTV9DQUNIRUFCTEUgKDE8PDEpICAKKyNkZWZpbmUgSU9SRVNPVVJDRV9NRU1fUkFOR0VMRU5HVEggKDE8PDIpICAKKyNkZWZpbmUgSU9SRVNPVVJDRV9NRU1fVFlQRV9NQVNLICgzPDwzKQorI2RlZmluZSBJT1JFU09VUkNFX01FTV84QklUICgwPDwzKQorI2RlZmluZSBJT1JFU09VUkNFX01FTV8xNkJJVCAoMTw8MykKKyNkZWZpbmUgSU9SRVNPVVJDRV9NRU1fOEFORDE2QklUICgyPDwzKQorI2RlZmluZSBJT1JFU09VUkNFX01FTV8zMkJJVCAoMzw8MykKKyNkZWZpbmUgSU9SRVNPVVJDRV9NRU1fU0hBRE9XQUJMRSAoMTw8NSkgIAorI2RlZmluZSBJT1JFU09VUkNFX01FTV9FWFBBTlNJT05ST00gKDE8PDYpCisKKyNkZWZpbmUgSU9SRVNPVVJDRV9ST01fRU5BQkxFICgxPDwwKSAgCisjZGVmaW5lIElPUkVTT1VSQ0VfUk9NX1NIQURPVyAoMTw8MSkgIAorI2RlZmluZSBJT1JFU09VUkNFX1JPTV9DT1BZICgxPDwyKSAgCisKKyNkZWZpbmUgcmVxdWVzdF9yZWdpb24oc3RhcnQsbixuYW1lKSBfX3JlcXVlc3RfcmVnaW9uKCZpb3BvcnRfcmVzb3VyY2UsIChzdGFydCksIChuKSwgKG5hbWUpKQorI2RlZmluZSByZXF1ZXN0X21lbV9yZWdpb24oc3RhcnQsbixuYW1lKSBfX3JlcXVlc3RfcmVnaW9uKCZpb21lbV9yZXNvdXJjZSwgKHN0YXJ0KSwgKG4pLCAobmFtZSkpCisjZGVmaW5lIHJlbmFtZV9yZWdpb24ocmVnaW9uLCBuZXduYW1lKSBkbyB7IChyZWdpb24pLT5uYW1lID0gKG5ld25hbWUpOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIHJlbGVhc2VfcmVnaW9uKHN0YXJ0LG4pIF9fcmVsZWFzZV9yZWdpb24oJmlvcG9ydF9yZXNvdXJjZSwgKHN0YXJ0KSwgKG4pKQorI2RlZmluZSBjaGVja19tZW1fcmVnaW9uKHN0YXJ0LG4pIF9fY2hlY2tfcmVnaW9uKCZpb21lbV9yZXNvdXJjZSwgKHN0YXJ0KSwgKG4pKQorI2RlZmluZSByZWxlYXNlX21lbV9yZWdpb24oc3RhcnQsbikgX19yZWxlYXNlX3JlZ2lvbigmaW9tZW1fcmVzb3VyY2UsIChzdGFydCksIChuKSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaW9wcmlvLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaW9wcmlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBhNWQ0OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pb3ByaW8uaApAQCAtMCwwICsxLDQ0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIElPUFJJT19ICisjZGVmaW5lIElPUFJJT19ICisKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorCisjZGVmaW5lIElPUFJJT19CSVRTICgxNikKKyNkZWZpbmUgSU9QUklPX0NMQVNTX1NISUZUICgxMykKKyNkZWZpbmUgSU9QUklPX1BSSU9fTUFTSyAoKDFVTCA8PCBJT1BSSU9fQ0xBU1NfU0hJRlQpIC0gMSkKKworI2RlZmluZSBJT1BSSU9fUFJJT19DTEFTUyhtYXNrKSAoKG1hc2spID4+IElPUFJJT19DTEFTU19TSElGVCkKKyNkZWZpbmUgSU9QUklPX1BSSU9fREFUQShtYXNrKSAoKG1hc2spICYgSU9QUklPX1BSSU9fTUFTSykKKyNkZWZpbmUgSU9QUklPX1BSSU9fVkFMVUUoY2xhc3MsIGRhdGEpICgoKGNsYXNzKSA8PCBJT1BSSU9fQ0xBU1NfU0hJRlQpIHwgZGF0YSkKKworI2RlZmluZSBpb3ByaW9fdmFsaWQobWFzaykgKElPUFJJT19QUklPX0NMQVNTKChtYXNrKSkgIT0gSU9QUklPX0NMQVNTX05PTkUpCisKK2VudW0geworIElPUFJJT19DTEFTU19OT05FLAorIElPUFJJT19DTEFTU19SVCwKKyBJT1BSSU9fQ0xBU1NfQkUsCisgSU9QUklPX0NMQVNTX0lETEUsCit9OworCisjZGVmaW5lIElPUFJJT19CRV9OUiAoOCkKKworZW51bSB7CisgSU9QUklPX1dIT19QUk9DRVNTID0gMSwKKyBJT1BSSU9fV0hPX1BHUlAsCisgSU9QUklPX1dIT19VU0VSLAorfTsKKworI2RlZmluZSBJT1BSSU9fTk9STSAoNCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaXAuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0MDc4OWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaXAuaApAQCAtMCwwICsxLDExOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfSVBfSAorI2RlZmluZSBfTElOVVhfSVBfSAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorCisjZGVmaW5lIElQVE9TX1RPU19NQVNLIDB4MUUKKyNkZWZpbmUgSVBUT1NfVE9TKHRvcykgKCh0b3MpJklQVE9TX1RPU19NQVNLKQorI2RlZmluZSBJUFRPU19MT1dERUxBWSAweDEwCisjZGVmaW5lIElQVE9TX1RIUk9VR0hQVVQgMHgwOAorI2RlZmluZSBJUFRPU19SRUxJQUJJTElUWSAweDA0CisjZGVmaW5lIElQVE9TX01JTkNPU1QgMHgwMgorCisjZGVmaW5lIElQVE9TX1BSRUNfTUFTSyAweEUwCisjZGVmaW5lIElQVE9TX1BSRUModG9zKSAoKHRvcykmSVBUT1NfUFJFQ19NQVNLKQorI2RlZmluZSBJUFRPU19QUkVDX05FVENPTlRST0wgMHhlMAorI2RlZmluZSBJUFRPU19QUkVDX0lOVEVSTkVUQ09OVFJPTCAweGMwCisjZGVmaW5lIElQVE9TX1BSRUNfQ1JJVElDX0VDUCAweGEwCisjZGVmaW5lIElQVE9TX1BSRUNfRkxBU0hPVkVSUklERSAweDgwCisjZGVmaW5lIElQVE9TX1BSRUNfRkxBU0ggMHg2MAorI2RlZmluZSBJUFRPU19QUkVDX0lNTUVESUFURSAweDQwCisjZGVmaW5lIElQVE9TX1BSRUNfUFJJT1JJVFkgMHgyMAorI2RlZmluZSBJUFRPU19QUkVDX1JPVVRJTkUgMHgwMAorCisjZGVmaW5lIElQT1BUX0NPUFkgMHg4MAorI2RlZmluZSBJUE9QVF9DTEFTU19NQVNLIDB4NjAKKyNkZWZpbmUgSVBPUFRfTlVNQkVSX01BU0sgMHgxZgorCisjZGVmaW5lIElQT1BUX0NPUElFRChvKSAoKG8pJklQT1BUX0NPUFkpCisjZGVmaW5lIElQT1BUX0NMQVNTKG8pICgobykmSVBPUFRfQ0xBU1NfTUFTSykKKyNkZWZpbmUgSVBPUFRfTlVNQkVSKG8pICgobykmSVBPUFRfTlVNQkVSX01BU0spCisKKyNkZWZpbmUgSVBPUFRfQ09OVFJPTCAweDAwCisjZGVmaW5lIElQT1BUX1JFU0VSVkVEMSAweDIwCisjZGVmaW5lIElQT1BUX01FQVNVUkVNRU5UIDB4NDAKKyNkZWZpbmUgSVBPUFRfUkVTRVJWRUQyIDB4NjAKKworI2RlZmluZSBJUE9QVF9FTkQgKDAgfElQT1BUX0NPTlRST0wpCisjZGVmaW5lIElQT1BUX05PT1AgKDEgfElQT1BUX0NPTlRST0wpCisjZGVmaW5lIElQT1BUX1NFQyAoMiB8SVBPUFRfQ09OVFJPTHxJUE9QVF9DT1BZKQorI2RlZmluZSBJUE9QVF9MU1JSICgzIHxJUE9QVF9DT05UUk9MfElQT1BUX0NPUFkpCisjZGVmaW5lIElQT1BUX1RJTUVTVEFNUCAoNCB8SVBPUFRfTUVBU1VSRU1FTlQpCisjZGVmaW5lIElQT1BUX1JSICg3IHxJUE9QVF9DT05UUk9MKQorI2RlZmluZSBJUE9QVF9TSUQgKDggfElQT1BUX0NPTlRST0x8SVBPUFRfQ09QWSkKKyNkZWZpbmUgSVBPUFRfU1NSUiAoOSB8SVBPUFRfQ09OVFJPTHxJUE9QVF9DT1BZKQorI2RlZmluZSBJUE9QVF9SQSAoMjB8SVBPUFRfQ09OVFJPTHxJUE9QVF9DT1BZKQorCisjZGVmaW5lIElQVkVSU0lPTiA0CisjZGVmaW5lIE1BWFRUTCAyNTUKKyNkZWZpbmUgSVBERUZUVEwgNjQKKworI2RlZmluZSBJUE9QVF9PUFRWQUwgMAorI2RlZmluZSBJUE9QVF9PTEVOIDEKKyNkZWZpbmUgSVBPUFRfT0ZGU0VUIDIKKyNkZWZpbmUgSVBPUFRfTUlOT0ZGIDQKKyNkZWZpbmUgTUFYX0lQT1BUTEVOIDQwCisjZGVmaW5lIElQT1BUX05PUCBJUE9QVF9OT09QCisjZGVmaW5lIElQT1BUX0VPTCBJUE9QVF9FTkQKKyNkZWZpbmUgSVBPUFRfVFMgSVBPUFRfVElNRVNUQU1QCisKKyNkZWZpbmUgSVBPUFRfVFNfVFNPTkxZIDAgIAorI2RlZmluZSBJUE9QVF9UU19UU0FOREFERFIgMSAgCisjZGVmaW5lIElQT1BUX1RTX1BSRVNQRUMgMyAgCisKK3N0cnVjdCBpcGhkciB7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxECisgX191OCBpaGw6NCwKKyB2ZXJzaW9uOjQ7CisjZWxpZiBkZWZpbmVkIChfX0JJR19FTkRJQU5fQklURklFTEQpCisgX191OCB2ZXJzaW9uOjQsCisgaWhsOjQ7CisjZWxzZQorI2Vycm9yICJQbGVhc2UgZml4IDxhc20vYnl0ZW9yZGVyLmg+IgorI2VuZGlmCisgX191OCB0b3M7CisgX19iZTE2IHRvdF9sZW47CisgX19iZTE2IGlkOworIF9fYmUxNiBmcmFnX29mZjsKKyBfX3U4IHR0bDsKKyBfX3U4IHByb3RvY29sOworIF9fdTE2IGNoZWNrOworIF9fYmUzMiBzYWRkcjsKKyBfX2JlMzIgZGFkZHI7CisKK307CisKK3N0cnVjdCBpcF9hdXRoX2hkciB7CisgX191OCBuZXh0aGRyOworIF9fdTggaGRybGVuOworIF9fdTE2IHJlc2VydmVkOworIF9fdTMyIHNwaTsKKyBfX3UzMiBzZXFfbm87CisgX191OCBhdXRoX2RhdGFbMF07Cit9OworCitzdHJ1Y3QgaXBfZXNwX2hkciB7CisgX191MzIgc3BpOworIF9fdTMyIHNlcV9ubzsKKyBfX3U4IGVuY19kYXRhWzBdOworfTsKKworc3RydWN0IGlwX2NvbXBfaGRyIHsKKyBfX3U4IG5leHRoZHI7CisgX191OCBmbGFnczsKKyBfX3UxNiBjcGk7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pcGMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pcGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDc2NmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lwYy5oCkBAIC0wLDAgKzEsNDggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX0lQQ19ICisjZGVmaW5lIF9MSU5VWF9JUENfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2RlZmluZSBJUENfUFJJVkFURSAoKF9fa2VybmVsX2tleV90KSAwKSAKKworc3RydWN0IGlwY19wZXJtCit7CisgX19rZXJuZWxfa2V5X3Qga2V5OworIF9fa2VybmVsX3VpZF90IHVpZDsKKyBfX2tlcm5lbF9naWRfdCBnaWQ7CisgX19rZXJuZWxfdWlkX3QgY3VpZDsKKyBfX2tlcm5lbF9naWRfdCBjZ2lkOworIF9fa2VybmVsX21vZGVfdCBtb2RlOworIHVuc2lnbmVkIHNob3J0IHNlcTsKK307CisKKyNpbmNsdWRlIDxhc20vaXBjYnVmLmg+CisKKyNkZWZpbmUgSVBDX0NSRUFUIDAwMDAxMDAwICAKKyNkZWZpbmUgSVBDX0VYQ0wgMDAwMDIwMDAgIAorI2RlZmluZSBJUENfTk9XQUlUIDAwMDA0MDAwICAKKworI2RlZmluZSBJUENfRElQQyAwMDAxMDAwMCAgCisjZGVmaW5lIElQQ19PV04gMDAwMjAwMDAgIAorCisjZGVmaW5lIElQQ19STUlEIDAgIAorI2RlZmluZSBJUENfU0VUIDEgIAorI2RlZmluZSBJUENfU1RBVCAyICAKKyNkZWZpbmUgSVBDX0lORk8gMyAgCisKKyNkZWZpbmUgSVBDX09MRCAwICAKKyNkZWZpbmUgSVBDXzY0IDB4MDEwMCAgCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaXBtaV9tc2dkZWZzLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaXBtaV9tc2dkZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ3ZDU2MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pcG1pX21zZ2RlZnMuaApAQCAtMCwwICsxLDY5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTElOVVhfSVBNSV9NU0dERUZTX0gKKyNkZWZpbmUgX19MSU5VWF9JUE1JX01TR0RFRlNfSAorCisjZGVmaW5lIElQTUlfTkVURk5fU0VOU09SX0VWRU5UX1JFUVVFU1QgMHgwNAorI2RlZmluZSBJUE1JX05FVEZOX1NFTlNPUl9FVkVOVF9SRVNQT05TRSAweDA1CisjZGVmaW5lIElQTUlfR0VUX0VWRU5UX1JFQ0VJVkVSX0NNRCAweDAxCisKKyNkZWZpbmUgSVBNSV9ORVRGTl9BUFBfUkVRVUVTVCAweDA2CisjZGVmaW5lIElQTUlfTkVURk5fQVBQX1JFU1BPTlNFIDB4MDcKKyNkZWZpbmUgSVBNSV9HRVRfREVWSUNFX0lEX0NNRCAweDAxCisjZGVmaW5lIElQTUlfQ0xFQVJfTVNHX0ZMQUdTX0NNRCAweDMwCisjZGVmaW5lIElQTUlfR0VUX0RFVklDRV9HVUlEX0NNRCAweDA4CisjZGVmaW5lIElQTUlfR0VUX01TR19GTEFHU19DTUQgMHgzMQorI2RlZmluZSBJUE1JX1NFTkRfTVNHX0NNRCAweDM0CisjZGVmaW5lIElQTUlfR0VUX01TR19DTUQgMHgzMworI2RlZmluZSBJUE1JX1NFVF9CTUNfR0xPQkFMX0VOQUJMRVNfQ01EIDB4MmUKKyNkZWZpbmUgSVBNSV9HRVRfQk1DX0dMT0JBTF9FTkFCTEVTX0NNRCAweDJmCisjZGVmaW5lIElQTUlfUkVBRF9FVkVOVF9NU0dfQlVGRkVSX0NNRCAweDM1CisjZGVmaW5lIElQTUlfR0VUX0NIQU5ORUxfSU5GT19DTUQgMHg0MgorCisjZGVmaW5lIElQTUlfTkVURk5fU1RPUkFHRV9SRVFVRVNUIDB4MGEKKyNkZWZpbmUgSVBNSV9ORVRGTl9TVE9SQUdFX1JFU1BPTlNFIDB4MGIKKyNkZWZpbmUgSVBNSV9BRERfU0VMX0VOVFJZX0NNRCAweDQ0CisKKyNkZWZpbmUgSVBNSV9CTUNfU0xBVkVfQUREUiAweDIwCisKKyNkZWZpbmUgSVBNSV9NQVhfTVNHX0xFTkdUSCAyNzIgIAorCisjZGVmaW5lIElQTUlfQ0NfTk9fRVJST1IgMHgwMAorI2RlZmluZSBJUE1JX05PREVfQlVTWV9FUlIgMHhjMAorI2RlZmluZSBJUE1JX0lOVkFMSURfQ09NTUFORF9FUlIgMHhjMQorI2RlZmluZSBJUE1JX0VSUl9NU0dfVFJVTkNBVEVEIDB4YzYKKyNkZWZpbmUgSVBNSV9MT1NUX0FSQklUUkFUSU9OX0VSUiAweDgxCisjZGVmaW5lIElQTUlfRVJSX1VOU1BFQ0lGSUVEIDB4ZmYKKworI2RlZmluZSBJUE1JX0NIQU5ORUxfUFJPVE9DT0xfSVBNQiAxCisjZGVmaW5lIElQTUlfQ0hBTk5FTF9QUk9UT0NPTF9JQ01CIDIKKyNkZWZpbmUgSVBNSV9DSEFOTkVMX1BST1RPQ09MX1NNQlVTIDQKKyNkZWZpbmUgSVBNSV9DSEFOTkVMX1BST1RPQ09MX0tDUyA1CisjZGVmaW5lIElQTUlfQ0hBTk5FTF9QUk9UT0NPTF9TTUlDIDYKKyNkZWZpbmUgSVBNSV9DSEFOTkVMX1BST1RPQ09MX0JUMTAgNworI2RlZmluZSBJUE1JX0NIQU5ORUxfUFJPVE9DT0xfQlQxNSA4CisjZGVmaW5lIElQTUlfQ0hBTk5FTF9QUk9UT0NPTF9UTU9ERSA5CisKKyNkZWZpbmUgSVBNSV9DSEFOTkVMX01FRElVTV9JUE1CIDEKKyNkZWZpbmUgSVBNSV9DSEFOTkVMX01FRElVTV9JQ01CMTAgMgorI2RlZmluZSBJUE1JX0NIQU5ORUxfTUVESVVNX0lDTUIwOSAzCisjZGVmaW5lIElQTUlfQ0hBTk5FTF9NRURJVU1fODAyM0xBTiA0CisjZGVmaW5lIElQTUlfQ0hBTk5FTF9NRURJVU1fQVNZTkMgNQorI2RlZmluZSBJUE1JX0NIQU5ORUxfTUVESVVNX09USEVSX0xBTiA2CisjZGVmaW5lIElQTUlfQ0hBTk5FTF9NRURJVU1fUENJX1NNQlVTIDcKKyNkZWZpbmUgSVBNSV9DSEFOTkVMX01FRElVTV9TTUJVUzEgOAorI2RlZmluZSBJUE1JX0NIQU5ORUxfTUVESVVNX1NNQlVTMiA5CisjZGVmaW5lIElQTUlfQ0hBTk5FTF9NRURJVU1fVVNCMSAxMAorI2RlZmluZSBJUE1JX0NIQU5ORUxfTUVESVVNX1VTQjIgMTEKKyNkZWZpbmUgSVBNSV9DSEFOTkVMX01FRElVTV9TWVNJTlRGIDEyCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lwbWlfc21pLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaXBtaV9zbWkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmNjMjEwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lwbWlfc21pLmgKQEAgLTAsMCArMSw3OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0xJTlVYX0lQTUlfU01JX0gKKyNkZWZpbmUgX19MSU5VWF9JUE1JX1NNSV9ICisKKyNpbmNsdWRlIDxsaW51eC9pcG1pX21zZ2RlZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaXBtaV9zbWkuaD4KKwordHlwZWRlZiBzdHJ1Y3QgaXBtaV9zbWkgKmlwbWlfc21pX3Q7CisKK3N0cnVjdCBpcG1pX3NtaV9tc2cKK3sKKyBzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7CisKKyBsb25nIG1zZ2lkOworIHZvaWQgKnVzZXJfZGF0YTsKKworIGludCBkYXRhX3NpemU7CisgdW5zaWduZWQgY2hhciBkYXRhW0lQTUlfTUFYX01TR19MRU5HVEhdOworCisgaW50IHJzcF9zaXplOworIHVuc2lnbmVkIGNoYXIgcnNwW0lQTUlfTUFYX01TR19MRU5HVEhdOworCisgdm9pZCAoKmRvbmUpKHN0cnVjdCBpcG1pX3NtaV9tc2cgKm1zZyk7Cit9OworCitzdHJ1Y3QgaXBtaV9zbWlfaGFuZGxlcnMKK3sKKyBzdHJ1Y3QgbW9kdWxlICpvd25lcjsKKworIGludCAoKnN0YXJ0X3Byb2Nlc3NpbmcpKHZvaWQgKnNlbmRfaW5mbywKKyBpcG1pX3NtaV90IG5ld19pbnRmKTsKKworIHZvaWQgKCpzZW5kZXIpKHZvaWQgKnNlbmRfaW5mbywKKyBzdHJ1Y3QgaXBtaV9zbWlfbXNnICptc2csCisgaW50IHByaW9yaXR5KTsKKworIHZvaWQgKCpyZXF1ZXN0X2V2ZW50cykodm9pZCAqc2VuZF9pbmZvKTsKKworIHZvaWQgKCpzZXRfcnVuX3RvX2NvbXBsZXRpb24pKHZvaWQgKnNlbmRfaW5mbywgaW50IHJ1bl90b19jb21wbGV0aW9uKTsKKworIHZvaWQgKCpwb2xsKSh2b2lkICpzZW5kX2luZm8pOworCisgaW50ICgqaW5jX3VzZWNvdW50KSh2b2lkICpzZW5kX2luZm8pOworIHZvaWQgKCpkZWNfdXNlY291bnQpKHZvaWQgKnNlbmRfaW5mbyk7Cit9OworCitzdHJ1Y3QgaXBtaV9kZXZpY2VfaWQgeworIHVuc2lnbmVkIGNoYXIgZGV2aWNlX2lkOworIHVuc2lnbmVkIGNoYXIgZGV2aWNlX3JldmlzaW9uOworIHVuc2lnbmVkIGNoYXIgZmlybXdhcmVfcmV2aXNpb25fMTsKKyB1bnNpZ25lZCBjaGFyIGZpcm13YXJlX3JldmlzaW9uXzI7CisgdW5zaWduZWQgY2hhciBpcG1pX3ZlcnNpb247CisgdW5zaWduZWQgY2hhciBhZGRpdGlvbmFsX2RldmljZV9zdXBwb3J0OworIHVuc2lnbmVkIGludCBtYW51ZmFjdHVyZXJfaWQ7CisgdW5zaWduZWQgaW50IHByb2R1Y3RfaWQ7CisgdW5zaWduZWQgY2hhciBhdXhfZmlybXdhcmVfcmV2aXNpb25bNF07CisgdW5zaWduZWQgaW50IGF1eF9maXJtd2FyZV9yZXZpc2lvbl9zZXQgOiAxOworfTsKKworI2RlZmluZSBpcG1pX3ZlcnNpb25fbWFqb3IodikgKCh2KS0+aXBtaV92ZXJzaW9uICYgMHhmKQorI2RlZmluZSBpcG1pX3ZlcnNpb25fbWlub3IodikgKCh2KS0+aXBtaV92ZXJzaW9uID4+IDQpCisKK3N0cnVjdCBpcG1pX3NtaV9tc2cgKmlwbWlfYWxsb2Nfc21pX21zZyh2b2lkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaXB4LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaXB4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY2NzVlOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pcHguaApAQCAtMCwwICsxLDc4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9JUFhfSF8KKyNkZWZpbmUgX0lQWF9IXworI2luY2x1ZGUgPGxpbnV4L3NvY2tpb3MuaD4KKyNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KKyNkZWZpbmUgSVBYX05PREVfTEVOIDYKKyNkZWZpbmUgSVBYX01UVSA1NzYKKworc3RydWN0IHNvY2thZGRyX2lweCB7Cisgc2FfZmFtaWx5X3Qgc2lweF9mYW1pbHk7CisgX191MTYgc2lweF9wb3J0OworIF9fdTMyIHNpcHhfbmV0d29yazsKKyB1bnNpZ25lZCBjaGFyIHNpcHhfbm9kZVtJUFhfTk9ERV9MRU5dOworIF9fdTggc2lweF90eXBlOworIHVuc2lnbmVkIGNoYXIgc2lweF96ZXJvOworfTsKKworI2RlZmluZSBzaXB4X3NwZWNpYWwgc2lweF9wb3J0CisjZGVmaW5lIHNpcHhfYWN0aW9uIHNpcHhfemVybworI2RlZmluZSBJUFhfRExUSVRGIDAKKyNkZWZpbmUgSVBYX0NSVElURiAxCisKK3N0cnVjdCBpcHhfcm91dGVfZGVmaW5pdGlvbiB7CisgX191MzIgaXB4X25ldHdvcms7CisgX191MzIgaXB4X3JvdXRlcl9uZXR3b3JrOworIHVuc2lnbmVkIGNoYXIgaXB4X3JvdXRlcl9ub2RlW0lQWF9OT0RFX0xFTl07Cit9OworCitzdHJ1Y3QgaXB4X2ludGVyZmFjZV9kZWZpbml0aW9uIHsKKyBfX3UzMiBpcHhfbmV0d29yazsKKyB1bnNpZ25lZCBjaGFyIGlweF9kZXZpY2VbMTZdOworIHVuc2lnbmVkIGNoYXIgaXB4X2RsaW5rX3R5cGU7CisjZGVmaW5lIElQWF9GUkFNRV9OT05FIDAKKyNkZWZpbmUgSVBYX0ZSQU1FX1NOQVAgMQorI2RlZmluZSBJUFhfRlJBTUVfODAyMiAyCisjZGVmaW5lIElQWF9GUkFNRV9FVEhFUklJIDMKKyNkZWZpbmUgSVBYX0ZSQU1FXzgwMjMgNAorI2RlZmluZSBJUFhfRlJBTUVfVFJfODAyMiA1ICAKKyB1bnNpZ25lZCBjaGFyIGlweF9zcGVjaWFsOworI2RlZmluZSBJUFhfU1BFQ0lBTF9OT05FIDAKKyNkZWZpbmUgSVBYX1BSSU1BUlkgMQorI2RlZmluZSBJUFhfSU5URVJOQUwgMgorIHVuc2lnbmVkIGNoYXIgaXB4X25vZGVbSVBYX05PREVfTEVOXTsKK307CisKK3N0cnVjdCBpcHhfY29uZmlnX2RhdGEgeworIHVuc2lnbmVkIGNoYXIgaXB4Y2ZnX2F1dG9fc2VsZWN0X3ByaW1hcnk7CisgdW5zaWduZWQgY2hhciBpcHhjZmdfYXV0b19jcmVhdGVfaW50ZXJmYWNlczsKK307CisKK3N0cnVjdCBpcHhfcm91dGVfZGVmIHsKKyBfX3UzMiBpcHhfbmV0d29yazsKKyBfX3UzMiBpcHhfcm91dGVyX25ldHdvcms7CisjZGVmaW5lIElQWF9ST1VURV9OT19ST1VURVIgMAorIHVuc2lnbmVkIGNoYXIgaXB4X3JvdXRlcl9ub2RlW0lQWF9OT0RFX0xFTl07CisgdW5zaWduZWQgY2hhciBpcHhfZGV2aWNlWzE2XTsKKyB1bnNpZ25lZCBzaG9ydCBpcHhfZmxhZ3M7CisjZGVmaW5lIElQWF9SVF9TTkFQIDgKKyNkZWZpbmUgSVBYX1JUXzgwMjIgNAorI2RlZmluZSBJUFhfUlRfQkxVRUJPT0sgMgorI2RlZmluZSBJUFhfUlRfUk9VVEVEIDEKK307CisKKyNkZWZpbmUgU0lPQ0FJUFhJVEZDUlQgKFNJT0NQUk9UT1BSSVZBVEUpCisjZGVmaW5lIFNJT0NBSVBYUFJJU0xUIChTSU9DUFJPVE9QUklWQVRFICsgMSkKKyNkZWZpbmUgU0lPQ0lQWENGR0RBVEEgKFNJT0NQUk9UT1BSSVZBVEUgKyAyKQorI2RlZmluZSBTSU9DSVBYTkNQQ09OTiAoU0lPQ1BST1RPUFJJVkFURSArIDMpCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pcnEuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pcnEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGY1ZGI3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lycS5oCkBAIC0wLDAgKzEsMTAwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9JUlFfSAorI2RlZmluZSBfTElOVVhfSVJRX0gKKworI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CisjaW5jbHVkZSA8bGludXgvaXJxcmV0dXJuLmg+CisKKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorCisjZGVmaW5lIElSUV9UWVBFX05PTkUgMHgwMDAwMDAwMCAgCisjZGVmaW5lIElSUV9UWVBFX0VER0VfUklTSU5HIDB4MDAwMDAwMDEgIAorI2RlZmluZSBJUlFfVFlQRV9FREdFX0ZBTExJTkcgMHgwMDAwMDAwMiAgCisjZGVmaW5lIElSUV9UWVBFX0VER0VfQk9USCAoSVJRX1RZUEVfRURHRV9GQUxMSU5HIHwgSVJRX1RZUEVfRURHRV9SSVNJTkcpCisjZGVmaW5lIElSUV9UWVBFX0xFVkVMX0hJR0ggMHgwMDAwMDAwNCAgCisjZGVmaW5lIElSUV9UWVBFX0xFVkVMX0xPVyAweDAwMDAwMDA4ICAKKyNkZWZpbmUgSVJRX1RZUEVfU0VOU0VfTUFTSyAweDAwMDAwMDBmICAKKyNkZWZpbmUgSVJRX1RZUEVfUFJPQkUgMHgwMDAwMDAxMCAgCisKKyNkZWZpbmUgSVJRX0lOUFJPR1JFU1MgMHgwMDAxMDAwMCAgCisjZGVmaW5lIElSUV9ESVNBQkxFRCAweDAwMDIwMDAwICAKKyNkZWZpbmUgSVJRX1BFTkRJTkcgMHgwMDA0MDAwMCAgCisjZGVmaW5lIElSUV9SRVBMQVkgMHgwMDA4MDAwMCAgCisjZGVmaW5lIElSUV9BVVRPREVURUNUIDB4MDAxMDAwMDAgIAorI2RlZmluZSBJUlFfV0FJVElORyAweDAwMjAwMDAwICAKKyNkZWZpbmUgSVJRX0xFVkVMIDB4MDA0MDAwMDAgIAorI2RlZmluZSBJUlFfTUFTS0VEIDB4MDA4MDAwMDAgIAorI2RlZmluZSBJUlFfUEVSX0NQVSAweDAxMDAwMDAwICAKKyNkZWZpbmUgQ0hFQ0tfSVJRX1BFUl9DUFUodmFyKSAwCisKKyNkZWZpbmUgSVJRX05PUFJPQkUgMHgwMjAwMDAwMCAgCisjZGVmaW5lIElSUV9OT1JFUVVFU1QgMHgwNDAwMDAwMCAgCisjZGVmaW5lIElSUV9OT0FVVE9FTiAweDA4MDAwMDAwICAKKyNkZWZpbmUgSVJRX0RFTEFZRURfRElTQUJMRSAweDEwMDAwMDAwICAKKyNkZWZpbmUgSVJRX1dBS0VVUCAweDIwMDAwMDAwICAKKworc3RydWN0IHByb2NfZGlyX2VudHJ5OworCitzdHJ1Y3QgaXJxX2NoaXAgeworIGNvbnN0IGNoYXIgKm5hbWU7CisgdW5zaWduZWQgaW50ICgqc3RhcnR1cCkodW5zaWduZWQgaW50IGlycSk7Cisgdm9pZCAoKnNodXRkb3duKSh1bnNpZ25lZCBpbnQgaXJxKTsKKyB2b2lkICgqZW5hYmxlKSh1bnNpZ25lZCBpbnQgaXJxKTsKKyB2b2lkICgqZGlzYWJsZSkodW5zaWduZWQgaW50IGlycSk7CisKKyB2b2lkICgqYWNrKSh1bnNpZ25lZCBpbnQgaXJxKTsKKyB2b2lkICgqbWFzaykodW5zaWduZWQgaW50IGlycSk7Cisgdm9pZCAoKm1hc2tfYWNrKSh1bnNpZ25lZCBpbnQgaXJxKTsKKyB2b2lkICgqdW5tYXNrKSh1bnNpZ25lZCBpbnQgaXJxKTsKKyB2b2lkICgqZW9pKSh1bnNpZ25lZCBpbnQgaXJxKTsKKworIHZvaWQgKCplbmQpKHVuc2lnbmVkIGludCBpcnEpOworIHZvaWQgKCpzZXRfYWZmaW5pdHkpKHVuc2lnbmVkIGludCBpcnEsIGNwdW1hc2tfdCBkZXN0KTsKKyBpbnQgKCpyZXRyaWdnZXIpKHVuc2lnbmVkIGludCBpcnEpOworIGludCAoKnNldF90eXBlKSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgZmxvd190eXBlKTsKKyBpbnQgKCpzZXRfd2FrZSkodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IG9uKTsKKworIGNvbnN0IGNoYXIgKnR5cGVuYW1lOworfTsKKworc3RydWN0IGlycV9kZXNjIHsKKyB2b2lkIGZhc3RjYWxsICgqaGFuZGxlX2lycSkodW5zaWduZWQgaW50IGlycSwKKyBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsCisgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworIHN0cnVjdCBpcnFfY2hpcCAqY2hpcDsKKyB2b2lkICpoYW5kbGVyX2RhdGE7Cisgdm9pZCAqY2hpcF9kYXRhOworIHN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbjsKKyB1bnNpZ25lZCBpbnQgc3RhdHVzOworCisgdW5zaWduZWQgaW50IGRlcHRoOworIHVuc2lnbmVkIGludCB3YWtlX2RlcHRoOworIHVuc2lnbmVkIGludCBpcnFfY291bnQ7CisgdW5zaWduZWQgaW50IGlycXNfdW5oYW5kbGVkOworIHNwaW5sb2NrX3QgbG9jazsKK30gX19fX2NhY2hlbGluZV9hbGlnbmVkOworCisjZGVmaW5lIGh3X2ludGVycnVwdF90eXBlIGlycV9jaGlwCit0eXBlZGVmIHN0cnVjdCBpcnFfY2hpcCBod19pcnFfY29udHJvbGxlcjsKKyNkZWZpbmUgbm9faXJxX3R5cGUgbm9faXJxX2NoaXAKK3R5cGVkZWYgc3RydWN0IGlycV9kZXNjIGlycV9kZXNjX3Q7CisKKyNpbmNsdWRlIDxhc20vaHdfaXJxLmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lycV9jcHVzdGF0LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaXJxX2NwdXN0YXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTQwYTRhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lycV9jcHVzdGF0LmgKQEAgLTAsMCArMSwyNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX2lycV9jcHVzdGF0X2gKKyNkZWZpbmUgX19pcnFfY3B1c3RhdF9oCisKKyNpZm5kZWYgX19BUkNIX0lSUV9TVEFUCisKKyNkZWZpbmUgX19JUlFfU1RBVChjcHUsIG1lbWJlcikgKGlycV9zdGF0W2NwdV0ubWVtYmVyKQorI2VuZGlmCisKKyNkZWZpbmUgbG9jYWxfc29mdGlycV9wZW5kaW5nKCkgICBfX0lSUV9TVEFUKHNtcF9wcm9jZXNzb3JfaWQoKSwgX19zb2Z0aXJxX3BlbmRpbmcpCisKKyNkZWZpbmUgbm1pX2NvdW50KGNwdSkgX19JUlFfU1RBVCgoY3B1KSwgX19ubWlfY291bnQpICAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaXJxZmxhZ3MuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pcnFmbGFncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiZjNmOTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaXJxZmxhZ3MuaApAQCAtMCwwICsxLDM0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9UUkFDRV9JUlFGTEFHU19ICisjZGVmaW5lIF9MSU5VWF9UUkFDRV9JUlFGTEFHU19ICisKKyNkZWZpbmUgdHJhY2VfaGFyZGlycXNfb24oKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHRyYWNlX2hhcmRpcnFzX29mZigpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgdHJhY2Vfc29mdGlycXNfb24oaXApIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgdHJhY2Vfc29mdGlycXNfb2ZmKGlwKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHRyYWNlX2hhcmRpcnFfY29udGV4dChwKSAwCisjZGVmaW5lIHRyYWNlX3NvZnRpcnFfY29udGV4dChwKSAwCisjZGVmaW5lIHRyYWNlX2hhcmRpcnFzX2VuYWJsZWQocCkgMAorI2RlZmluZSB0cmFjZV9zb2Z0aXJxc19lbmFibGVkKHApIDAKKyNkZWZpbmUgdHJhY2VfaGFyZGlycV9lbnRlcigpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgdHJhY2VfaGFyZGlycV9leGl0KCkgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSB0cmFjZV9zb2Z0aXJxX2VudGVyKCkgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSB0cmFjZV9zb2Z0aXJxX2V4aXQoKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIElOSVRfVFJBQ0VfSVJRRkxBR1MKKworI2RlZmluZSByYXdfbG9jYWxfaXJxX2Rpc2FibGUoKSBsb2NhbF9pcnFfZGlzYWJsZSgpCisjZGVmaW5lIHJhd19sb2NhbF9pcnFfZW5hYmxlKCkgbG9jYWxfaXJxX2VuYWJsZSgpCisjZGVmaW5lIHJhd19sb2NhbF9pcnFfc2F2ZShmbGFncykgbG9jYWxfaXJxX3NhdmUoZmxhZ3MpCisjZGVmaW5lIHJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncykgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lycXJldHVybi5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lycXJldHVybi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzN2Y0MzAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaXJxcmV0dXJuLmgKQEAgLTAsMCArMSwyMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfSVJRUkVUVVJOX0gKKyNkZWZpbmUgX0xJTlVYX0lSUVJFVFVSTl9ICisKK3R5cGVkZWYgaW50IGlycXJldHVybl90OworCisjZGVmaW5lIElSUV9OT05FICgwKQorI2RlZmluZSBJUlFfSEFORExFRCAoMSkKKyNkZWZpbmUgSVJRX1JFVFZBTCh4KSAoKHgpICE9IDApCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2piZC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2piZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiYTc2NmMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvamJkLmgKQEAgLTAsMCArMSwxMTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX0pCRF9ICisjZGVmaW5lIF9MSU5VWF9KQkRfSAorCisjaW5jbHVkZSAiamZzX2NvbXBhdC5oIgorI2RlZmluZSBKRlNfREVCVUcKKyNkZWZpbmUgamZzX2RlYnVnIGpiZF9kZWJ1ZworCisjZGVmaW5lIGpvdXJuYWxfb29tX3JldHJ5IDEKKworI3VuZGVmIEpCRF9QQVJBTk9JRF9JT0ZBSUwKKworI2RlZmluZSBKQkRfREVGQVVMVF9NQVhfQ09NTUlUX0FHRSA1CisKKyNkZWZpbmUgamJkX2RlYnVnKGYsIGEuLi4pICAKKworI2RlZmluZSBqYmRfa21hbGxvYyhzaXplLCBmbGFncykgICBfX2piZF9rbWFsbG9jKF9fRlVOQ1RJT05fXywgKHNpemUpLCAoZmxhZ3MpLCBqb3VybmFsX29vbV9yZXRyeSkKKyNkZWZpbmUgamJkX3JlcF9rbWFsbG9jKHNpemUsIGZsYWdzKSAgIF9famJkX2ttYWxsb2MoX19GVU5DVElPTl9fLCAoc2l6ZSksIChmbGFncyksIDEpCisKKyNkZWZpbmUgSkZTX01JTl9KT1VSTkFMX0JMT0NLUyAxMDI0CisKKyNkZWZpbmUgSkZTX01BR0lDX05VTUJFUiAweGMwM2IzOTk4VSAgCisKKyNkZWZpbmUgSkZTX0RFU0NSSVBUT1JfQkxPQ0sgMQorI2RlZmluZSBKRlNfQ09NTUlUX0JMT0NLIDIKKyNkZWZpbmUgSkZTX1NVUEVSQkxPQ0tfVjEgMworI2RlZmluZSBKRlNfU1VQRVJCTE9DS19WMiA0CisjZGVmaW5lIEpGU19SRVZPS0VfQkxPQ0sgNQorCit0eXBlZGVmIHN0cnVjdCBqb3VybmFsX2hlYWRlcl9zCit7CisgX19iZTMyIGhfbWFnaWM7CisgX19iZTMyIGhfYmxvY2t0eXBlOworIF9fYmUzMiBoX3NlcXVlbmNlOworfSBqb3VybmFsX2hlYWRlcl90OworCit0eXBlZGVmIHN0cnVjdCBqb3VybmFsX2Jsb2NrX3RhZ19zCit7CisgX19iZTMyIHRfYmxvY2tucjsKKyBfX2JlMzIgdF9mbGFnczsKK30gam91cm5hbF9ibG9ja190YWdfdDsKKwordHlwZWRlZiBzdHJ1Y3Qgam91cm5hbF9yZXZva2VfaGVhZGVyX3MKK3sKKyBqb3VybmFsX2hlYWRlcl90IHJfaGVhZGVyOworIF9fYmUzMiByX2NvdW50OworfSBqb3VybmFsX3Jldm9rZV9oZWFkZXJfdDsKKworI2RlZmluZSBKRlNfRkxBR19FU0NBUEUgMSAgCisjZGVmaW5lIEpGU19GTEFHX1NBTUVfVVVJRCAyICAKKyNkZWZpbmUgSkZTX0ZMQUdfREVMRVRFRCA0ICAKKyNkZWZpbmUgSkZTX0ZMQUdfTEFTVF9UQUcgOCAgCisKK3R5cGVkZWYgc3RydWN0IGpvdXJuYWxfc3VwZXJibG9ja19zCit7CisKKyBqb3VybmFsX2hlYWRlcl90IHNfaGVhZGVyOworCisgX19iZTMyIHNfYmxvY2tzaXplOworIF9fYmUzMiBzX21heGxlbjsKKyBfX2JlMzIgc19maXJzdDsKKworIF9fYmUzMiBzX3NlcXVlbmNlOworIF9fYmUzMiBzX3N0YXJ0OworCisgX19iZTMyIHNfZXJybm87CisKKyBfX2JlMzIgc19mZWF0dXJlX2NvbXBhdDsKKyBfX2JlMzIgc19mZWF0dXJlX2luY29tcGF0OworIF9fYmUzMiBzX2ZlYXR1cmVfcm9fY29tcGF0OworCisgX191OCBzX3V1aWRbMTZdOworCisgX19iZTMyIHNfbnJfdXNlcnM7CisKKyBfX2JlMzIgc19keW5zdXBlcjsKKworIF9fYmUzMiBzX21heF90cmFuc2FjdGlvbjsKKyBfX2JlMzIgc19tYXhfdHJhbnNfZGF0YTsKKworIF9fdTMyIHNfcGFkZGluZ1s0NF07CisKKyBfX3U4IHNfdXNlcnNbMTYqNDhdOworCit9IGpvdXJuYWxfc3VwZXJibG9ja190OworCisjZGVmaW5lIEpGU19IQVNfQ09NUEFUX0ZFQVRVUkUoaixtYXNrKSAgICgoaiktPmpfZm9ybWF0X3ZlcnNpb24gPj0gMiAmJiAgICgoaiktPmpfc3VwZXJibG9jay0+c19mZWF0dXJlX2NvbXBhdCAmIGNwdV90b19iZTMyKChtYXNrKSkpKQorI2RlZmluZSBKRlNfSEFTX1JPX0NPTVBBVF9GRUFUVVJFKGosbWFzaykgICAoKGopLT5qX2Zvcm1hdF92ZXJzaW9uID49IDIgJiYgICAoKGopLT5qX3N1cGVyYmxvY2stPnNfZmVhdHVyZV9yb19jb21wYXQgJiBjcHVfdG9fYmUzMigobWFzaykpKSkKKyNkZWZpbmUgSkZTX0hBU19JTkNPTVBBVF9GRUFUVVJFKGosbWFzaykgICAoKGopLT5qX2Zvcm1hdF92ZXJzaW9uID49IDIgJiYgICAoKGopLT5qX3N1cGVyYmxvY2stPnNfZmVhdHVyZV9pbmNvbXBhdCAmIGNwdV90b19iZTMyKChtYXNrKSkpKQorCisjZGVmaW5lIEpGU19GRUFUVVJFX0lOQ09NUEFUX1JFVk9LRSAweDAwMDAwMDAxCisKKyNkZWZpbmUgSkZTX0tOT1dOX0NPTVBBVF9GRUFUVVJFUyAwCisjZGVmaW5lIEpGU19LTk9XTl9ST0NPTVBBVF9GRUFUVVJFUyAwCisjZGVmaW5lIEpGU19LTk9XTl9JTkNPTVBBVF9GRUFUVVJFUyBKRlNfRkVBVFVSRV9JTkNPTVBBVF9SRVZPS0UKKworI2RlZmluZSBCSl9Ob25lIDAgIAorI2RlZmluZSBCSl9TeW5jRGF0YSAxICAKKyNkZWZpbmUgQkpfTWV0YWRhdGEgMiAgCisjZGVmaW5lIEJKX0ZvcmdldCAzICAKKyNkZWZpbmUgQkpfSU8gNCAgCisjZGVmaW5lIEJKX1NoYWRvdyA1ICAKKyNkZWZpbmUgQkpfTG9nQ3RsIDYgIAorI2RlZmluZSBCSl9SZXNlcnZlZCA3ICAKKyNkZWZpbmUgQkpfTG9ja2VkIDggIAorI2RlZmluZSBCSl9UeXBlcyA5CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2ppZmZpZXMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9qaWZmaWVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZiNzA1YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9qaWZmaWVzLmgKQEAgLTAsMCArMSwxMTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX0pJRkZJRVNfSAorI2RlZmluZSBfTElOVVhfSklGRklFU19ICisKKyNpbmNsdWRlIDxsaW51eC9jYWxjNjQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1leC5oPgorI2luY2x1ZGUgPGFzbS9wYXJhbS5oPiAgCisKKyNpZiBIWiA+PSAoMTIgJiYgSFogPCAyNCkKKyNkZWZpbmUgU0hJRlRfSFogNAorI2VsaWYgSFogPj0gMjQgJiYgSFogPCA0OAorI2RlZmluZSBTSElGVF9IWiA1CisjZWxpZiBIWiA+PSA0OCAmJiBIWiA8IDk2CisjZGVmaW5lIFNISUZUX0haIDYKKyNlbGlmIEhaID49IDk2ICYmIEhaIDwgMTkyCisjZGVmaW5lIFNISUZUX0haIDcKKyNlbGlmIEhaID49IDE5MiAmJiBIWiA8IDM4NAorI2RlZmluZSBTSElGVF9IWiA4CisjZWxpZiBIWiA+PSAzODQgJiYgSFogPCA3NjgKKyNkZWZpbmUgU0hJRlRfSFogOQorI2VsaWYgSFogPj0gNzY4ICYmIEhaIDwgMTUzNgorI2RlZmluZSBTSElGVF9IWiAxMAorI2Vsc2UKKyNlcnJvciBZb3UgbG9zZS4KKyNlbmRpZgorCisjZGVmaW5lIExBVENIICgoQ0xPQ0tfVElDS19SQVRFICsgSFovMikgLyBIWikgIAorCisjZGVmaW5lIExBVENIX0hQRVQgKChIUEVUX1RJQ0tfUkFURSArIEhaLzIpIC8gSFopCisKKyNkZWZpbmUgU0hfRElWKE5PTSxERU4sTFNIKSAoICgoKE5PTSkgLyAoREVOKSkgPDwgKExTSCkpICAgKyAoKCgoTk9NKSAlIChERU4pKSA8PCAoTFNIKSkgKyAoREVOKSAvIDIpIC8gKERFTikpCisKKyNkZWZpbmUgQUNUSFogKFNIX0RJViAoQ0xPQ0tfVElDS19SQVRFLCBMQVRDSCwgOCkpCisKKyNkZWZpbmUgQUNUSFpfSFBFVCAoU0hfRElWIChIUEVUX1RJQ0tfUkFURSwgTEFUQ0hfSFBFVCwgOCkpCisKKyNkZWZpbmUgVElDS19OU0VDIChTSF9ESVYgKDEwMDAwMDBVTCAqIDEwMDAsIEFDVEhaLCA4KSkKKworI2RlZmluZSBUSUNLX05TRUNfSFBFVCAoU0hfRElWKDEwMDAwMDBVTCAqIDEwMDAsIEFDVEhaX0hQRVQsIDgpKQorCisjZGVmaW5lIFRJQ0tfVVNFQyAoKDEwMDAwMDBVTCArIFVTRVJfSFovMikgLyBVU0VSX0haKQorCisjZGVmaW5lIFRJQ0tfVVNFQ19UT19OU0VDKFRVU0VDKSAoU0hfRElWIChUVVNFQyAqIFVTRVJfSFogKiAxMDAwLCBBQ1RIWiwgOCkpCisKKyNkZWZpbmUgX19qaWZmeV9kYXRhIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5kYXRhIikpKQorCisjaWYgQklUU19QRVJfTE9ORyA8IDY0CisKKyNlbHNlCisjZW5kaWYKKyNkZWZpbmUgdGltZV9hZnRlcihhLGIpICAgKHR5cGVjaGVjayh1bnNpZ25lZCBsb25nLCBhKSAmJiAgIHR5cGVjaGVjayh1bnNpZ25lZCBsb25nLCBiKSAmJiAgICgobG9uZykoYikgLSAobG9uZykoYSkgPCAwKSkKKyNkZWZpbmUgdGltZV9iZWZvcmUoYSxiKSB0aW1lX2FmdGVyKGIsYSkKKyNkZWZpbmUgdGltZV9hZnRlcl9lcShhLGIpICAgKHR5cGVjaGVjayh1bnNpZ25lZCBsb25nLCBhKSAmJiAgIHR5cGVjaGVjayh1bnNpZ25lZCBsb25nLCBiKSAmJiAgICgobG9uZykoYSkgLSAobG9uZykoYikgPj0gMCkpCisjZGVmaW5lIHRpbWVfYmVmb3JlX2VxKGEsYikgdGltZV9hZnRlcl9lcShiLGEpCisjZGVmaW5lIElOSVRJQUxfSklGRklFUyAoKHVuc2lnbmVkIGxvbmcpKHVuc2lnbmVkIGludCkgKC0zMDAqSFopKQorI2RlZmluZSBNQVhfSklGRllfT0ZGU0VUICgofjBVTCA+PiAxKS0xKQorI2RlZmluZSBTRUNfSklGRklFX1NDICgzMSAtIFNISUZUX0haKQorI2lmICEoKE5TRUNfUEVSX1NFQyA8PCAyKSAvIFRJQ0tfTlNFQyA8PCBTRUNfSklGRklFX1NDIC0gMiAmIDB4ODAwMDAwMDApCisjdW5kZWYgU0VDX0pJRkZJRV9TQworI2RlZmluZSBTRUNfSklGRklFX1NDICgzMiAtIFNISUZUX0haKQorI2VuZGlmCisjZGVmaW5lIE5TRUNfSklGRklFX1NDIChTRUNfSklGRklFX1NDICsgMjkpCisjZGVmaW5lIFVTRUNfSklGRklFX1NDIChTRUNfSklGRklFX1NDICsgMTkpCisjZGVmaW5lIFNFQ19DT05WRVJTSU9OICgodW5zaWduZWQgbG9uZykoKCgodTY0KU5TRUNfUEVSX1NFQyA8PCBTRUNfSklGRklFX1NDKSArICBUSUNLX05TRUMgLTEpIC8gKHU2NClUSUNLX05TRUMpKQorI2RlZmluZSBOU0VDX0NPTlZFUlNJT04gKCh1bnNpZ25lZCBsb25nKSgoKCh1NjQpMSA8PCBOU0VDX0pJRkZJRV9TQykgKyAgVElDS19OU0VDIC0xKSAvICh1NjQpVElDS19OU0VDKSkKKyNkZWZpbmUgVVNFQ19DT05WRVJTSU9OICAgKCh1bnNpZ25lZCBsb25nKSgoKCh1NjQpTlNFQ19QRVJfVVNFQyA8PCBVU0VDX0pJRkZJRV9TQykgKyAgVElDS19OU0VDIC0xKSAvICh1NjQpVElDS19OU0VDKSkKKyNkZWZpbmUgVVNFQ19ST1VORCAodTY0KSgoKHU2NCkxIDw8IFVTRUNfSklGRklFX1NDKSAtIDEpCisjaWYgQklUU19QRVJfTE9ORyA8IDY0CisjZGVmaW5lIE1BWF9TRUNfSU5fSklGRklFUyAgIChsb25nKSgodTY0KSgodTY0KU1BWF9KSUZGWV9PRkZTRVQgKiBUSUNLX05TRUMpIC8gTlNFQ19QRVJfU0VDKQorI2Vsc2UKKyNkZWZpbmUgTUFYX1NFQ19JTl9KSUZGSUVTICAgKFNIX0RJVigoTUFYX0pJRkZZX09GRlNFVCA+PiBTRUNfSklGRklFX1NDKSAqIFRJQ0tfTlNFQywgTlNFQ19QRVJfU0VDLCAxKSAtIDEpCisjZW5kaWYKKyNpZiBIWiA8PSAoTVNFQ19QRVJfU0VDICYmICEoTVNFQ19QRVJfU0VDICUgSFopKQorI2VsaWYgSFogPiBNU0VDX1BFUl9TRUMgJiYgIShIWiAlIE1TRUNfUEVSX1NFQykKKyNlbHNlCisjZW5kaWYKKyNpZiBIWiA8PSAoVVNFQ19QRVJfU0VDICYmICEoVVNFQ19QRVJfU0VDICUgSFopKQorI2VsaWYgSFogPiBVU0VDX1BFUl9TRUMgJiYgIShIWiAlIFVTRUNfUEVSX1NFQykKKyNlbHNlCisjZW5kaWYKKyNpZiBIWiA8PSAoTVNFQ19QRVJfU0VDICYmICEoTVNFQ19QRVJfU0VDICUgSFopKQorI2VsaWYgSFogPiBNU0VDX1BFUl9TRUMgJiYgIShIWiAlIE1TRUNfUEVSX1NFQykKKyNlbHNlCisjZW5kaWYKKyNpZiBIWiA8PSAoVVNFQ19QRVJfU0VDICYmICEoVVNFQ19QRVJfU0VDICUgSFopKQorI2VsaWYgSFogPiBVU0VDX1BFUl9TRUMgJiYgIShIWiAlIFVTRUNfUEVSX1NFQykKKyNlbHNlCisjZW5kaWYKKyNpZiBUSUNLX05TRUMgJSBOU0VDX1BFUl9TRUMgLyBVU0VSX0haID09IDAKKyNlbHNlCisjZW5kaWYKKyNpZiBIWiAlIFVTRVJfSFogPT0gMAorI2Vsc2UKKyNlbmRpZgorI2lmIFRJQ0tfTlNFQyAlIE5TRUNfUEVSX1NFQyAvIFVTRVJfSFogPT0gMAorI2Vsc2UKKyNlbmRpZgorI2lmIE5TRUNfUEVSX1NFQyAlIFVTRVJfSFogPT0gMAorI2VsaWYgKFVTRVJfSFogJSA1MTIpID09IDAKKyNlbHNlCisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2tkLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgva2QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTQxZGRmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2tkLmgKQEAgLTAsMCArMSwxNzYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX0tEX0gKKyNkZWZpbmUgX0xJTlVYX0tEX0gKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisKKyNkZWZpbmUgR0lPX0ZPTlQgMHg0QjYwICAKKyNkZWZpbmUgUElPX0ZPTlQgMHg0QjYxICAKKworI2RlZmluZSBHSU9fRk9OVFggMHg0QjZCICAKKyNkZWZpbmUgUElPX0ZPTlRYIDB4NEI2QyAgCitzdHJ1Y3QgY29uc29sZWZvbnRkZXNjIHsKKyB1bnNpZ25lZCBzaG9ydCBjaGFyY291bnQ7CisgdW5zaWduZWQgc2hvcnQgY2hhcmhlaWdodDsKKyBjaGFyIF9fdXNlciAqY2hhcmRhdGE7Cit9OworCisjZGVmaW5lIFBJT19GT05UUkVTRVQgMHg0QjZEICAKKworI2RlZmluZSBHSU9fQ01BUCAweDRCNzAgIAorI2RlZmluZSBQSU9fQ01BUCAweDRCNzEgIAorCisjZGVmaW5lIEtJT0NTT1VORCAweDRCMkYgIAorI2RlZmluZSBLRE1LVE9ORSAweDRCMzAgIAorCisjZGVmaW5lIEtER0VUTEVEIDB4NEIzMSAgCisjZGVmaW5lIEtEU0VUTEVEIDB4NEIzMiAgCisjZGVmaW5lIExFRF9TQ1IgMHgwMSAgCisjZGVmaW5lIExFRF9OVU0gMHgwMiAgCisjZGVmaW5lIExFRF9DQVAgMHgwNCAgCisKKyNkZWZpbmUgS0RHS0JUWVBFIDB4NEIzMyAgCisjZGVmaW5lIEtCXzg0IDB4MDEKKyNkZWZpbmUgS0JfMTAxIDB4MDIgIAorI2RlZmluZSBLQl9PVEhFUiAweDAzCisKKyNkZWZpbmUgS0RBRERJTyAweDRCMzQgIAorI2RlZmluZSBLRERFTElPIDB4NEIzNSAgCisjZGVmaW5lIEtERU5BQklPIDB4NEIzNiAgCisjZGVmaW5lIEtERElTQUJJTyAweDRCMzcgIAorCisjZGVmaW5lIEtEU0VUTU9ERSAweDRCM0EgIAorI2RlZmluZSBLRF9URVhUIDB4MDAKKyNkZWZpbmUgS0RfR1JBUEhJQ1MgMHgwMQorI2RlZmluZSBLRF9URVhUMCAweDAyICAKKyNkZWZpbmUgS0RfVEVYVDEgMHgwMyAgCisjZGVmaW5lIEtER0VUTU9ERSAweDRCM0IgIAorCisjZGVmaW5lIEtETUFQRElTUCAweDRCM0MgIAorI2RlZmluZSBLRFVOTUFQRElTUCAweDRCM0QgIAorCit0eXBlZGVmIGNoYXIgc2Nybm1hcF90OworI2RlZmluZSBFX1RBQlNaIDI1NgorI2RlZmluZSBHSU9fU0NSTk1BUCAweDRCNDAgIAorI2RlZmluZSBQSU9fU0NSTk1BUCAweDRCNDEgIAorI2RlZmluZSBHSU9fVU5JU0NSTk1BUCAweDRCNjkgIAorI2RlZmluZSBQSU9fVU5JU0NSTk1BUCAweDRCNkEgIAorCisjZGVmaW5lIEdJT19VTklNQVAgMHg0QjY2ICAKK3N0cnVjdCB1bmlwYWlyIHsKKyB1bnNpZ25lZCBzaG9ydCB1bmljb2RlOworIHVuc2lnbmVkIHNob3J0IGZvbnRwb3M7Cit9Oworc3RydWN0IHVuaW1hcGRlc2MgeworIHVuc2lnbmVkIHNob3J0IGVudHJ5X2N0OworIHN0cnVjdCB1bmlwYWlyIF9fdXNlciAqZW50cmllczsKK307CisjZGVmaW5lIFBJT19VTklNQVAgMHg0QjY3ICAKKyNkZWZpbmUgUElPX1VOSU1BUENMUiAweDRCNjggIAorc3RydWN0IHVuaW1hcGluaXQgeworIHVuc2lnbmVkIHNob3J0IGFkdmlzZWRfaGFzaHNpemU7CisgdW5zaWduZWQgc2hvcnQgYWR2aXNlZF9oYXNoc3RlcDsKKyB1bnNpZ25lZCBzaG9ydCBhZHZpc2VkX2hhc2hsZXZlbDsKK307CisKKyNkZWZpbmUgVU5JX0RJUkVDVF9CQVNFIDB4RjAwMCAgCisjZGVmaW5lIFVOSV9ESVJFQ1RfTUFTSyAweDAxRkYgIAorCisjZGVmaW5lIEtfUkFXIDB4MDAKKyNkZWZpbmUgS19YTEFURSAweDAxCisjZGVmaW5lIEtfTUVESVVNUkFXIDB4MDIKKyNkZWZpbmUgS19VTklDT0RFIDB4MDMKKyNkZWZpbmUgS0RHS0JNT0RFIDB4NEI0NCAgCisjZGVmaW5lIEtEU0tCTU9ERSAweDRCNDUgIAorCisjZGVmaW5lIEtfTUVUQUJJVCAweDAzCisjZGVmaW5lIEtfRVNDUFJFRklYIDB4MDQKKyNkZWZpbmUgS0RHS0JNRVRBIDB4NEI2MiAgCisjZGVmaW5lIEtEU0tCTUVUQSAweDRCNjMgIAorCisjZGVmaW5lIEtfU0NST0xMTE9DSyAweDAxCisjZGVmaW5lIEtfTlVNTE9DSyAweDAyCisjZGVmaW5lIEtfQ0FQU0xPQ0sgMHgwNAorI2RlZmluZSBLREdLQkxFRCAweDRCNjQgIAorI2RlZmluZSBLRFNLQkxFRCAweDRCNjUgIAorCitzdHJ1Y3Qga2JlbnRyeSB7CisgdW5zaWduZWQgY2hhciBrYl90YWJsZTsKKyB1bnNpZ25lZCBjaGFyIGtiX2luZGV4OworIHVuc2lnbmVkIHNob3J0IGtiX3ZhbHVlOworfTsKKyNkZWZpbmUgS19OT1JNVEFCIDB4MDAKKyNkZWZpbmUgS19TSElGVFRBQiAweDAxCisjZGVmaW5lIEtfQUxUVEFCIDB4MDIKKyNkZWZpbmUgS19BTFRTSElGVFRBQiAweDAzCisKKyNkZWZpbmUgS0RHS0JFTlQgMHg0QjQ2ICAKKyNkZWZpbmUgS0RTS0JFTlQgMHg0QjQ3ICAKKworc3RydWN0IGtic2VudHJ5IHsKKyB1bnNpZ25lZCBjaGFyIGtiX2Z1bmM7CisgdW5zaWduZWQgY2hhciBrYl9zdHJpbmdbNTEyXTsKK307CisjZGVmaW5lIEtER0tCU0VOVCAweDRCNDggIAorI2RlZmluZSBLRFNLQlNFTlQgMHg0QjQ5ICAKKworc3RydWN0IGtiZGlhY3IgeworIHVuc2lnbmVkIGNoYXIgZGlhY3IsIGJhc2UsIHJlc3VsdDsKK307CitzdHJ1Y3Qga2JkaWFjcnMgeworIHVuc2lnbmVkIGludCBrYl9jbnQ7Cisgc3RydWN0IGtiZGlhY3Iga2JkaWFjclsyNTZdOworfTsKKyNkZWZpbmUgS0RHS0JESUFDUiAweDRCNEEgIAorI2RlZmluZSBLRFNLQkRJQUNSIDB4NEI0QiAgCisKK3N0cnVjdCBrYmtleWNvZGUgeworIHVuc2lnbmVkIGludCBzY2FuY29kZSwga2V5Y29kZTsKK307CisjZGVmaW5lIEtER0VUS0VZQ09ERSAweDRCNEMgIAorI2RlZmluZSBLRFNFVEtFWUNPREUgMHg0QjREICAKKworI2RlZmluZSBLRFNJR0FDQ0VQVCAweDRCNEUgIAorCitzdHJ1Y3Qga2JkX3JlcGVhdCB7CisgaW50IGRlbGF5OworIGludCBwZXJpb2Q7CisKK307CisKKyNkZWZpbmUgS0RLQkRSRVAgMHg0QjUyICAKKworI2RlZmluZSBLREZPTlRPUCAweDRCNzIgIAorCitzdHJ1Y3QgY29uc29sZV9mb250X29wIHsKKyB1bnNpZ25lZCBpbnQgb3A7CisgdW5zaWduZWQgaW50IGZsYWdzOworIHVuc2lnbmVkIGludCB3aWR0aCwgaGVpZ2h0OworIHVuc2lnbmVkIGludCBjaGFyY291bnQ7CisgdW5zaWduZWQgY2hhciBfX3VzZXIgKmRhdGE7Cit9OworCitzdHJ1Y3QgY29uc29sZV9mb250IHsKKyB1bnNpZ25lZCBpbnQgd2lkdGgsIGhlaWdodDsKKyB1bnNpZ25lZCBpbnQgY2hhcmNvdW50OworIHVuc2lnbmVkIGNoYXIgKmRhdGE7Cit9OworCisjZGVmaW5lIEtEX0ZPTlRfT1BfU0VUIDAgIAorI2RlZmluZSBLRF9GT05UX09QX0dFVCAxICAKKyNkZWZpbmUgS0RfRk9OVF9PUF9TRVRfREVGQVVMVCAyICAKKyNkZWZpbmUgS0RfRk9OVF9PUF9DT1BZIDMgIAorCisjZGVmaW5lIEtEX0ZPTlRfRkxBR19ET05UX1JFQ0FMQyAxICAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgva2Rldl90LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgva2Rldl90LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE3ZjljMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9rZGV2X3QuaApAQCAtMCwwICsxLDE4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9LREVWX1RfSAorI2RlZmluZSBfTElOVVhfS0RFVl9UX0gKKworI2RlZmluZSBNQUpPUihkZXYpICgoZGV2KT4+OCkKKyNkZWZpbmUgTUlOT1IoZGV2KSAoKGRldikgJiAweGZmKQorI2RlZmluZSBNS0RFVihtYSxtaSkgKChtYSk8PDggfCAobWkpKQorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgva2VybmVsLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgva2VybmVsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY4MmU0NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9rZXJuZWwuaApAQCAtMCwwICsxLDM5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9LRVJORUxfSAorI2RlZmluZSBfTElOVVhfS0VSTkVMX0gKKworI2RlZmluZSBTSV9MT0FEX1NISUZUIDE2CitzdHJ1Y3Qgc3lzaW5mbyB7CisgbG9uZyB1cHRpbWU7CisgdW5zaWduZWQgbG9uZyBsb2Fkc1szXTsKKyB1bnNpZ25lZCBsb25nIHRvdGFscmFtOworIHVuc2lnbmVkIGxvbmcgZnJlZXJhbTsKKyB1bnNpZ25lZCBsb25nIHNoYXJlZHJhbTsKKyB1bnNpZ25lZCBsb25nIGJ1ZmZlcnJhbTsKKyB1bnNpZ25lZCBsb25nIHRvdGFsc3dhcDsKKyB1bnNpZ25lZCBsb25nIGZyZWVzd2FwOworIHVuc2lnbmVkIHNob3J0IHByb2NzOworIHVuc2lnbmVkIHNob3J0IHBhZDsKKyB1bnNpZ25lZCBsb25nIHRvdGFsaGlnaDsKKyB1bnNpZ25lZCBsb25nIGZyZWVoaWdoOworIHVuc2lnbmVkIGludCBtZW1fdW5pdDsKKyBjaGFyIF9mWzIwLTIqc2l6ZW9mKGxvbmcpLXNpemVvZihpbnQpXTsKK307CisKKyNkZWZpbmUgQlVJTERfQlVHX09OKGNvbmRpdGlvbikgKCh2b2lkKXNpemVvZihjaGFyWzEgLSAyKiEhKGNvbmRpdGlvbildKSkKKworI2RlZmluZSBCVUlMRF9CVUdfT05fWkVSTyhlKSAoc2l6ZW9mKGNoYXJbMSAtIDIgKiAhIShlKV0pIC0gMSkKKworI2RlZmluZSBfX0ZVTkNUSU9OX18gKF9fZnVuY19fKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9rZXJuZWxfc3RhdC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2tlcm5lbF9zdGF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMzMzczNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9rZXJuZWxfc3RhdC5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX0tFUk5FTF9TVEFUX0gKKyNkZWZpbmUgX0xJTlVYX0tFUk5FTF9TVEFUX0gKKworI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorI2luY2x1ZGUgPGFzbS9jcHV0aW1lLmg+CisKK3N0cnVjdCBjcHVfdXNhZ2Vfc3RhdCB7CisgY3B1dGltZTY0X3QgdXNlcjsKKyBjcHV0aW1lNjRfdCBuaWNlOworIGNwdXRpbWU2NF90IHN5c3RlbTsKKyBjcHV0aW1lNjRfdCBzb2Z0aXJxOworIGNwdXRpbWU2NF90IGlycTsKKyBjcHV0aW1lNjRfdCBpZGxlOworIGNwdXRpbWU2NF90IGlvd2FpdDsKKyBjcHV0aW1lNjRfdCBzdGVhbDsKK307CisKK3N0cnVjdCBrZXJuZWxfc3RhdCB7Cisgc3RydWN0IGNwdV91c2FnZV9zdGF0IGNwdXN0YXQ7CisgdW5zaWduZWQgaW50IGlycXNbTlJfSVJRU107Cit9OworCisjZGVmaW5lIGtzdGF0X2NwdShjcHUpIHBlcl9jcHUoa3N0YXQsIGNwdSkKKworI2RlZmluZSBrc3RhdF90aGlzX2NwdSBfX2dldF9jcHVfdmFyKGtzdGF0KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9rZXJuZWxjYXBpLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgva2VybmVsY2FwaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2MzhiMGEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgva2VybmVsY2FwaS5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19LRVJORUxDQVBJX0hfXworI2RlZmluZSBfX0tFUk5FTENBUElfSF9fCisKKyNkZWZpbmUgQ0FQSV9NQVhBUFBMIDI0MCAgCisjZGVmaW5lIENBUElfTUFYQ09OVFIgMzIgIAorI2RlZmluZSBDQVBJX01BWERBVEFXSU5ET1cgOAorCit0eXBlZGVmIHN0cnVjdCBrY2FwaV9mbGFnZGVmIHsKKyBpbnQgY29udHI7CisgaW50IGZsYWc7Cit9IGtjYXBpX2ZsYWdkZWY7CisKK3R5cGVkZWYgc3RydWN0IGtjYXBpX2NhcmRkZWYgeworIGNoYXIgZHJpdmVyWzMyXTsKKyB1bnNpZ25lZCBpbnQgcG9ydDsKKyB1bnNpZ25lZCBpcnE7CisgdW5zaWduZWQgaW50IG1lbWJhc2U7CisgaW50IGNhcmRucjsKK30ga2NhcGlfY2FyZGRlZjsKKworI2RlZmluZSBLQ0FQSV9DTURfVFJBQ0UgMTAKKyNkZWZpbmUgS0NBUElfQ01EX0FERENBUkQgMTEgIAorCisjZGVmaW5lIEtDQVBJX1RSQUNFX09GRiAwCisjZGVmaW5lIEtDQVBJX1RSQUNFX1NIT1JUX05PX0RBVEEgMQorI2RlZmluZSBLQ0FQSV9UUkFDRV9GVUxMX05PX0RBVEEgMgorI2RlZmluZSBLQ0FQSV9UUkFDRV9TSE9SVCAzCisjZGVmaW5lIEtDQVBJX1RSQUNFX0ZVTEwgNAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9rZXhlYy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2tleGVjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAwNDY0NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9rZXhlYy5oCkBAIC0wLDAgKzEsMTcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgTElOVVhfS0VYRUNfSAorI2RlZmluZSBMSU5VWF9LRVhFQ19ICisKK3N0cnVjdCBwdF9yZWdzOworc3RydWN0IHRhc2tfc3RydWN0OworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgva2V5LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgva2V5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM0ODVkNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9rZXkuaApAQCAtMCwwICsxLDIxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9LRVlfSAorI2RlZmluZSBfTElOVVhfS0VZX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9rZXlib2FyZC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2tleWJvYXJkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVlMDk0NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9rZXlib2FyZC5oCkBAIC0wLDAgKzEsNDQ2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTElOVVhfS0VZQk9BUkRfSAorI2RlZmluZSBfX0xJTlVYX0tFWUJPQVJEX0gKKworI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKworI2RlZmluZSBLR19TSElGVCAwCisjZGVmaW5lIEtHX0NUUkwgMgorI2RlZmluZSBLR19BTFQgMworI2RlZmluZSBLR19BTFRHUiAxCisjZGVmaW5lIEtHX1NISUZUTCA0CisjZGVmaW5lIEtHX0tBTkFTSElGVCA0CisjZGVmaW5lIEtHX1NISUZUUiA1CisjZGVmaW5lIEtHX0NUUkxMIDYKKyNkZWZpbmUgS0dfQ1RSTFIgNworI2RlZmluZSBLR19DQVBTU0hJRlQgOAorCisjZGVmaW5lIE5SX1NISUZUIDkKKworI2RlZmluZSBOUl9LRVlTIDI1NgorI2RlZmluZSBNQVhfTlJfS0VZTUFQUyAyNTYKKworI2RlZmluZSBNQVhfTlJfT0ZfVVNFUl9LRVlNQVBTIDI1NiAgCisKKyNkZWZpbmUgTUFYX05SX0ZVTkMgMjU2ICAKKworI2RlZmluZSBLVF9MQVRJTiAwICAKKyNkZWZpbmUgS1RfTEVUVEVSIDExICAKKyNkZWZpbmUgS1RfRk4gMQorI2RlZmluZSBLVF9TUEVDIDIKKyNkZWZpbmUgS1RfUEFEIDMKKyNkZWZpbmUgS1RfREVBRCA0CisjZGVmaW5lIEtUX0NPTlMgNQorI2RlZmluZSBLVF9DVVIgNgorI2RlZmluZSBLVF9TSElGVCA3CisjZGVmaW5lIEtUX01FVEEgOAorI2RlZmluZSBLVF9BU0NJSSA5CisjZGVmaW5lIEtUX0xPQ0sgMTAKKyNkZWZpbmUgS1RfU0xPQ0sgMTIKKyNkZWZpbmUgS1RfQlJMIDE0CisKKyNkZWZpbmUgSyh0LHYpICgoKHQpPDw4KXwodikpCisjZGVmaW5lIEtUWVAoeCkgKCh4KSA+PiA4KQorI2RlZmluZSBLVkFMKHgpICgoeCkgJiAweGZmKQorCisjZGVmaW5lIEtfRjEgSyhLVF9GTiwwKQorI2RlZmluZSBLX0YyIEsoS1RfRk4sMSkKKyNkZWZpbmUgS19GMyBLKEtUX0ZOLDIpCisjZGVmaW5lIEtfRjQgSyhLVF9GTiwzKQorI2RlZmluZSBLX0Y1IEsoS1RfRk4sNCkKKyNkZWZpbmUgS19GNiBLKEtUX0ZOLDUpCisjZGVmaW5lIEtfRjcgSyhLVF9GTiw2KQorI2RlZmluZSBLX0Y4IEsoS1RfRk4sNykKKyNkZWZpbmUgS19GOSBLKEtUX0ZOLDgpCisjZGVmaW5lIEtfRjEwIEsoS1RfRk4sOSkKKyNkZWZpbmUgS19GMTEgSyhLVF9GTiwxMCkKKyNkZWZpbmUgS19GMTIgSyhLVF9GTiwxMSkKKyNkZWZpbmUgS19GMTMgSyhLVF9GTiwxMikKKyNkZWZpbmUgS19GMTQgSyhLVF9GTiwxMykKKyNkZWZpbmUgS19GMTUgSyhLVF9GTiwxNCkKKyNkZWZpbmUgS19GMTYgSyhLVF9GTiwxNSkKKyNkZWZpbmUgS19GMTcgSyhLVF9GTiwxNikKKyNkZWZpbmUgS19GMTggSyhLVF9GTiwxNykKKyNkZWZpbmUgS19GMTkgSyhLVF9GTiwxOCkKKyNkZWZpbmUgS19GMjAgSyhLVF9GTiwxOSkKKyNkZWZpbmUgS19GSU5EIEsoS1RfRk4sMjApCisjZGVmaW5lIEtfSU5TRVJUIEsoS1RfRk4sMjEpCisjZGVmaW5lIEtfUkVNT1ZFIEsoS1RfRk4sMjIpCisjZGVmaW5lIEtfU0VMRUNUIEsoS1RfRk4sMjMpCisjZGVmaW5lIEtfUEdVUCBLKEtUX0ZOLDI0KSAgCisjZGVmaW5lIEtfUEdETiBLKEtUX0ZOLDI1KSAgCisjZGVmaW5lIEtfTUFDUk8gSyhLVF9GTiwyNikKKyNkZWZpbmUgS19IRUxQIEsoS1RfRk4sMjcpCisjZGVmaW5lIEtfRE8gSyhLVF9GTiwyOCkKKyNkZWZpbmUgS19QQVVTRSBLKEtUX0ZOLDI5KQorI2RlZmluZSBLX0YyMSBLKEtUX0ZOLDMwKQorI2RlZmluZSBLX0YyMiBLKEtUX0ZOLDMxKQorI2RlZmluZSBLX0YyMyBLKEtUX0ZOLDMyKQorI2RlZmluZSBLX0YyNCBLKEtUX0ZOLDMzKQorI2RlZmluZSBLX0YyNSBLKEtUX0ZOLDM0KQorI2RlZmluZSBLX0YyNiBLKEtUX0ZOLDM1KQorI2RlZmluZSBLX0YyNyBLKEtUX0ZOLDM2KQorI2RlZmluZSBLX0YyOCBLKEtUX0ZOLDM3KQorI2RlZmluZSBLX0YyOSBLKEtUX0ZOLDM4KQorI2RlZmluZSBLX0YzMCBLKEtUX0ZOLDM5KQorI2RlZmluZSBLX0YzMSBLKEtUX0ZOLDQwKQorI2RlZmluZSBLX0YzMiBLKEtUX0ZOLDQxKQorI2RlZmluZSBLX0YzMyBLKEtUX0ZOLDQyKQorI2RlZmluZSBLX0YzNCBLKEtUX0ZOLDQzKQorI2RlZmluZSBLX0YzNSBLKEtUX0ZOLDQ0KQorI2RlZmluZSBLX0YzNiBLKEtUX0ZOLDQ1KQorI2RlZmluZSBLX0YzNyBLKEtUX0ZOLDQ2KQorI2RlZmluZSBLX0YzOCBLKEtUX0ZOLDQ3KQorI2RlZmluZSBLX0YzOSBLKEtUX0ZOLDQ4KQorI2RlZmluZSBLX0Y0MCBLKEtUX0ZOLDQ5KQorI2RlZmluZSBLX0Y0MSBLKEtUX0ZOLDUwKQorI2RlZmluZSBLX0Y0MiBLKEtUX0ZOLDUxKQorI2RlZmluZSBLX0Y0MyBLKEtUX0ZOLDUyKQorI2RlZmluZSBLX0Y0NCBLKEtUX0ZOLDUzKQorI2RlZmluZSBLX0Y0NSBLKEtUX0ZOLDU0KQorI2RlZmluZSBLX0Y0NiBLKEtUX0ZOLDU1KQorI2RlZmluZSBLX0Y0NyBLKEtUX0ZOLDU2KQorI2RlZmluZSBLX0Y0OCBLKEtUX0ZOLDU3KQorI2RlZmluZSBLX0Y0OSBLKEtUX0ZOLDU4KQorI2RlZmluZSBLX0Y1MCBLKEtUX0ZOLDU5KQorI2RlZmluZSBLX0Y1MSBLKEtUX0ZOLDYwKQorI2RlZmluZSBLX0Y1MiBLKEtUX0ZOLDYxKQorI2RlZmluZSBLX0Y1MyBLKEtUX0ZOLDYyKQorI2RlZmluZSBLX0Y1NCBLKEtUX0ZOLDYzKQorI2RlZmluZSBLX0Y1NSBLKEtUX0ZOLDY0KQorI2RlZmluZSBLX0Y1NiBLKEtUX0ZOLDY1KQorI2RlZmluZSBLX0Y1NyBLKEtUX0ZOLDY2KQorI2RlZmluZSBLX0Y1OCBLKEtUX0ZOLDY3KQorI2RlZmluZSBLX0Y1OSBLKEtUX0ZOLDY4KQorI2RlZmluZSBLX0Y2MCBLKEtUX0ZOLDY5KQorI2RlZmluZSBLX0Y2MSBLKEtUX0ZOLDcwKQorI2RlZmluZSBLX0Y2MiBLKEtUX0ZOLDcxKQorI2RlZmluZSBLX0Y2MyBLKEtUX0ZOLDcyKQorI2RlZmluZSBLX0Y2NCBLKEtUX0ZOLDczKQorI2RlZmluZSBLX0Y2NSBLKEtUX0ZOLDc0KQorI2RlZmluZSBLX0Y2NiBLKEtUX0ZOLDc1KQorI2RlZmluZSBLX0Y2NyBLKEtUX0ZOLDc2KQorI2RlZmluZSBLX0Y2OCBLKEtUX0ZOLDc3KQorI2RlZmluZSBLX0Y2OSBLKEtUX0ZOLDc4KQorI2RlZmluZSBLX0Y3MCBLKEtUX0ZOLDc5KQorI2RlZmluZSBLX0Y3MSBLKEtUX0ZOLDgwKQorI2RlZmluZSBLX0Y3MiBLKEtUX0ZOLDgxKQorI2RlZmluZSBLX0Y3MyBLKEtUX0ZOLDgyKQorI2RlZmluZSBLX0Y3NCBLKEtUX0ZOLDgzKQorI2RlZmluZSBLX0Y3NSBLKEtUX0ZOLDg0KQorI2RlZmluZSBLX0Y3NiBLKEtUX0ZOLDg1KQorI2RlZmluZSBLX0Y3NyBLKEtUX0ZOLDg2KQorI2RlZmluZSBLX0Y3OCBLKEtUX0ZOLDg3KQorI2RlZmluZSBLX0Y3OSBLKEtUX0ZOLDg4KQorI2RlZmluZSBLX0Y4MCBLKEtUX0ZOLDg5KQorI2RlZmluZSBLX0Y4MSBLKEtUX0ZOLDkwKQorI2RlZmluZSBLX0Y4MiBLKEtUX0ZOLDkxKQorI2RlZmluZSBLX0Y4MyBLKEtUX0ZOLDkyKQorI2RlZmluZSBLX0Y4NCBLKEtUX0ZOLDkzKQorI2RlZmluZSBLX0Y4NSBLKEtUX0ZOLDk0KQorI2RlZmluZSBLX0Y4NiBLKEtUX0ZOLDk1KQorI2RlZmluZSBLX0Y4NyBLKEtUX0ZOLDk2KQorI2RlZmluZSBLX0Y4OCBLKEtUX0ZOLDk3KQorI2RlZmluZSBLX0Y4OSBLKEtUX0ZOLDk4KQorI2RlZmluZSBLX0Y5MCBLKEtUX0ZOLDk5KQorI2RlZmluZSBLX0Y5MSBLKEtUX0ZOLDEwMCkKKyNkZWZpbmUgS19GOTIgSyhLVF9GTiwxMDEpCisjZGVmaW5lIEtfRjkzIEsoS1RfRk4sMTAyKQorI2RlZmluZSBLX0Y5NCBLKEtUX0ZOLDEwMykKKyNkZWZpbmUgS19GOTUgSyhLVF9GTiwxMDQpCisjZGVmaW5lIEtfRjk2IEsoS1RfRk4sMTA1KQorI2RlZmluZSBLX0Y5NyBLKEtUX0ZOLDEwNikKKyNkZWZpbmUgS19GOTggSyhLVF9GTiwxMDcpCisjZGVmaW5lIEtfRjk5IEsoS1RfRk4sMTA4KQorI2RlZmluZSBLX0YxMDAgSyhLVF9GTiwxMDkpCisjZGVmaW5lIEtfRjEwMSBLKEtUX0ZOLDExMCkKKyNkZWZpbmUgS19GMTAyIEsoS1RfRk4sMTExKQorI2RlZmluZSBLX0YxMDMgSyhLVF9GTiwxMTIpCisjZGVmaW5lIEtfRjEwNCBLKEtUX0ZOLDExMykKKyNkZWZpbmUgS19GMTA1IEsoS1RfRk4sMTE0KQorI2RlZmluZSBLX0YxMDYgSyhLVF9GTiwxMTUpCisjZGVmaW5lIEtfRjEwNyBLKEtUX0ZOLDExNikKKyNkZWZpbmUgS19GMTA4IEsoS1RfRk4sMTE3KQorI2RlZmluZSBLX0YxMDkgSyhLVF9GTiwxMTgpCisjZGVmaW5lIEtfRjExMCBLKEtUX0ZOLDExOSkKKyNkZWZpbmUgS19GMTExIEsoS1RfRk4sMTIwKQorI2RlZmluZSBLX0YxMTIgSyhLVF9GTiwxMjEpCisjZGVmaW5lIEtfRjExMyBLKEtUX0ZOLDEyMikKKyNkZWZpbmUgS19GMTE0IEsoS1RfRk4sMTIzKQorI2RlZmluZSBLX0YxMTUgSyhLVF9GTiwxMjQpCisjZGVmaW5lIEtfRjExNiBLKEtUX0ZOLDEyNSkKKyNkZWZpbmUgS19GMTE3IEsoS1RfRk4sMTI2KQorI2RlZmluZSBLX0YxMTggSyhLVF9GTiwxMjcpCisjZGVmaW5lIEtfRjExOSBLKEtUX0ZOLDEyOCkKKyNkZWZpbmUgS19GMTIwIEsoS1RfRk4sMTI5KQorI2RlZmluZSBLX0YxMjEgSyhLVF9GTiwxMzApCisjZGVmaW5lIEtfRjEyMiBLKEtUX0ZOLDEzMSkKKyNkZWZpbmUgS19GMTIzIEsoS1RfRk4sMTMyKQorI2RlZmluZSBLX0YxMjQgSyhLVF9GTiwxMzMpCisjZGVmaW5lIEtfRjEyNSBLKEtUX0ZOLDEzNCkKKyNkZWZpbmUgS19GMTI2IEsoS1RfRk4sMTM1KQorI2RlZmluZSBLX0YxMjcgSyhLVF9GTiwxMzYpCisjZGVmaW5lIEtfRjEyOCBLKEtUX0ZOLDEzNykKKyNkZWZpbmUgS19GMTI5IEsoS1RfRk4sMTM4KQorI2RlZmluZSBLX0YxMzAgSyhLVF9GTiwxMzkpCisjZGVmaW5lIEtfRjEzMSBLKEtUX0ZOLDE0MCkKKyNkZWZpbmUgS19GMTMyIEsoS1RfRk4sMTQxKQorI2RlZmluZSBLX0YxMzMgSyhLVF9GTiwxNDIpCisjZGVmaW5lIEtfRjEzNCBLKEtUX0ZOLDE0MykKKyNkZWZpbmUgS19GMTM1IEsoS1RfRk4sMTQ0KQorI2RlZmluZSBLX0YxMzYgSyhLVF9GTiwxNDUpCisjZGVmaW5lIEtfRjEzNyBLKEtUX0ZOLDE0NikKKyNkZWZpbmUgS19GMTM4IEsoS1RfRk4sMTQ3KQorI2RlZmluZSBLX0YxMzkgSyhLVF9GTiwxNDgpCisjZGVmaW5lIEtfRjE0MCBLKEtUX0ZOLDE0OSkKKyNkZWZpbmUgS19GMTQxIEsoS1RfRk4sMTUwKQorI2RlZmluZSBLX0YxNDIgSyhLVF9GTiwxNTEpCisjZGVmaW5lIEtfRjE0MyBLKEtUX0ZOLDE1MikKKyNkZWZpbmUgS19GMTQ0IEsoS1RfRk4sMTUzKQorI2RlZmluZSBLX0YxNDUgSyhLVF9GTiwxNTQpCisjZGVmaW5lIEtfRjE0NiBLKEtUX0ZOLDE1NSkKKyNkZWZpbmUgS19GMTQ3IEsoS1RfRk4sMTU2KQorI2RlZmluZSBLX0YxNDggSyhLVF9GTiwxNTcpCisjZGVmaW5lIEtfRjE0OSBLKEtUX0ZOLDE1OCkKKyNkZWZpbmUgS19GMTUwIEsoS1RfRk4sMTU5KQorI2RlZmluZSBLX0YxNTEgSyhLVF9GTiwxNjApCisjZGVmaW5lIEtfRjE1MiBLKEtUX0ZOLDE2MSkKKyNkZWZpbmUgS19GMTUzIEsoS1RfRk4sMTYyKQorI2RlZmluZSBLX0YxNTQgSyhLVF9GTiwxNjMpCisjZGVmaW5lIEtfRjE1NSBLKEtUX0ZOLDE2NCkKKyNkZWZpbmUgS19GMTU2IEsoS1RfRk4sMTY1KQorI2RlZmluZSBLX0YxNTcgSyhLVF9GTiwxNjYpCisjZGVmaW5lIEtfRjE1OCBLKEtUX0ZOLDE2NykKKyNkZWZpbmUgS19GMTU5IEsoS1RfRk4sMTY4KQorI2RlZmluZSBLX0YxNjAgSyhLVF9GTiwxNjkpCisjZGVmaW5lIEtfRjE2MSBLKEtUX0ZOLDE3MCkKKyNkZWZpbmUgS19GMTYyIEsoS1RfRk4sMTcxKQorI2RlZmluZSBLX0YxNjMgSyhLVF9GTiwxNzIpCisjZGVmaW5lIEtfRjE2NCBLKEtUX0ZOLDE3MykKKyNkZWZpbmUgS19GMTY1IEsoS1RfRk4sMTc0KQorI2RlZmluZSBLX0YxNjYgSyhLVF9GTiwxNzUpCisjZGVmaW5lIEtfRjE2NyBLKEtUX0ZOLDE3NikKKyNkZWZpbmUgS19GMTY4IEsoS1RfRk4sMTc3KQorI2RlZmluZSBLX0YxNjkgSyhLVF9GTiwxNzgpCisjZGVmaW5lIEtfRjE3MCBLKEtUX0ZOLDE3OSkKKyNkZWZpbmUgS19GMTcxIEsoS1RfRk4sMTgwKQorI2RlZmluZSBLX0YxNzIgSyhLVF9GTiwxODEpCisjZGVmaW5lIEtfRjE3MyBLKEtUX0ZOLDE4MikKKyNkZWZpbmUgS19GMTc0IEsoS1RfRk4sMTgzKQorI2RlZmluZSBLX0YxNzUgSyhLVF9GTiwxODQpCisjZGVmaW5lIEtfRjE3NiBLKEtUX0ZOLDE4NSkKKyNkZWZpbmUgS19GMTc3IEsoS1RfRk4sMTg2KQorI2RlZmluZSBLX0YxNzggSyhLVF9GTiwxODcpCisjZGVmaW5lIEtfRjE3OSBLKEtUX0ZOLDE4OCkKKyNkZWZpbmUgS19GMTgwIEsoS1RfRk4sMTg5KQorI2RlZmluZSBLX0YxODEgSyhLVF9GTiwxOTApCisjZGVmaW5lIEtfRjE4MiBLKEtUX0ZOLDE5MSkKKyNkZWZpbmUgS19GMTgzIEsoS1RfRk4sMTkyKQorI2RlZmluZSBLX0YxODQgSyhLVF9GTiwxOTMpCisjZGVmaW5lIEtfRjE4NSBLKEtUX0ZOLDE5NCkKKyNkZWZpbmUgS19GMTg2IEsoS1RfRk4sMTk1KQorI2RlZmluZSBLX0YxODcgSyhLVF9GTiwxOTYpCisjZGVmaW5lIEtfRjE4OCBLKEtUX0ZOLDE5NykKKyNkZWZpbmUgS19GMTg5IEsoS1RfRk4sMTk4KQorI2RlZmluZSBLX0YxOTAgSyhLVF9GTiwxOTkpCisjZGVmaW5lIEtfRjE5MSBLKEtUX0ZOLDIwMCkKKyNkZWZpbmUgS19GMTkyIEsoS1RfRk4sMjAxKQorI2RlZmluZSBLX0YxOTMgSyhLVF9GTiwyMDIpCisjZGVmaW5lIEtfRjE5NCBLKEtUX0ZOLDIwMykKKyNkZWZpbmUgS19GMTk1IEsoS1RfRk4sMjA0KQorI2RlZmluZSBLX0YxOTYgSyhLVF9GTiwyMDUpCisjZGVmaW5lIEtfRjE5NyBLKEtUX0ZOLDIwNikKKyNkZWZpbmUgS19GMTk4IEsoS1RfRk4sMjA3KQorI2RlZmluZSBLX0YxOTkgSyhLVF9GTiwyMDgpCisjZGVmaW5lIEtfRjIwMCBLKEtUX0ZOLDIwOSkKKyNkZWZpbmUgS19GMjAxIEsoS1RfRk4sMjEwKQorI2RlZmluZSBLX0YyMDIgSyhLVF9GTiwyMTEpCisjZGVmaW5lIEtfRjIwMyBLKEtUX0ZOLDIxMikKKyNkZWZpbmUgS19GMjA0IEsoS1RfRk4sMjEzKQorI2RlZmluZSBLX0YyMDUgSyhLVF9GTiwyMTQpCisjZGVmaW5lIEtfRjIwNiBLKEtUX0ZOLDIxNSkKKyNkZWZpbmUgS19GMjA3IEsoS1RfRk4sMjE2KQorI2RlZmluZSBLX0YyMDggSyhLVF9GTiwyMTcpCisjZGVmaW5lIEtfRjIwOSBLKEtUX0ZOLDIxOCkKKyNkZWZpbmUgS19GMjEwIEsoS1RfRk4sMjE5KQorI2RlZmluZSBLX0YyMTEgSyhLVF9GTiwyMjApCisjZGVmaW5lIEtfRjIxMiBLKEtUX0ZOLDIyMSkKKyNkZWZpbmUgS19GMjEzIEsoS1RfRk4sMjIyKQorI2RlZmluZSBLX0YyMTQgSyhLVF9GTiwyMjMpCisjZGVmaW5lIEtfRjIxNSBLKEtUX0ZOLDIyNCkKKyNkZWZpbmUgS19GMjE2IEsoS1RfRk4sMjI1KQorI2RlZmluZSBLX0YyMTcgSyhLVF9GTiwyMjYpCisjZGVmaW5lIEtfRjIxOCBLKEtUX0ZOLDIyNykKKyNkZWZpbmUgS19GMjE5IEsoS1RfRk4sMjI4KQorI2RlZmluZSBLX0YyMjAgSyhLVF9GTiwyMjkpCisjZGVmaW5lIEtfRjIyMSBLKEtUX0ZOLDIzMCkKKyNkZWZpbmUgS19GMjIyIEsoS1RfRk4sMjMxKQorI2RlZmluZSBLX0YyMjMgSyhLVF9GTiwyMzIpCisjZGVmaW5lIEtfRjIyNCBLKEtUX0ZOLDIzMykKKyNkZWZpbmUgS19GMjI1IEsoS1RfRk4sMjM0KQorI2RlZmluZSBLX0YyMjYgSyhLVF9GTiwyMzUpCisjZGVmaW5lIEtfRjIyNyBLKEtUX0ZOLDIzNikKKyNkZWZpbmUgS19GMjI4IEsoS1RfRk4sMjM3KQorI2RlZmluZSBLX0YyMjkgSyhLVF9GTiwyMzgpCisjZGVmaW5lIEtfRjIzMCBLKEtUX0ZOLDIzOSkKKyNkZWZpbmUgS19GMjMxIEsoS1RfRk4sMjQwKQorI2RlZmluZSBLX0YyMzIgSyhLVF9GTiwyNDEpCisjZGVmaW5lIEtfRjIzMyBLKEtUX0ZOLDI0MikKKyNkZWZpbmUgS19GMjM0IEsoS1RfRk4sMjQzKQorI2RlZmluZSBLX0YyMzUgSyhLVF9GTiwyNDQpCisjZGVmaW5lIEtfRjIzNiBLKEtUX0ZOLDI0NSkKKyNkZWZpbmUgS19GMjM3IEsoS1RfRk4sMjQ2KQorI2RlZmluZSBLX0YyMzggSyhLVF9GTiwyNDcpCisjZGVmaW5lIEtfRjIzOSBLKEtUX0ZOLDI0OCkKKyNkZWZpbmUgS19GMjQwIEsoS1RfRk4sMjQ5KQorI2RlZmluZSBLX0YyNDEgSyhLVF9GTiwyNTApCisjZGVmaW5lIEtfRjI0MiBLKEtUX0ZOLDI1MSkKKyNkZWZpbmUgS19GMjQzIEsoS1RfRk4sMjUyKQorI2RlZmluZSBLX0YyNDQgSyhLVF9GTiwyNTMpCisjZGVmaW5lIEtfRjI0NSBLKEtUX0ZOLDI1NCkKKyNkZWZpbmUgS19VTkRPIEsoS1RfRk4sMjU1KQorCisjZGVmaW5lIEtfSE9MRSBLKEtUX1NQRUMsMCkKKyNkZWZpbmUgS19FTlRFUiBLKEtUX1NQRUMsMSkKKyNkZWZpbmUgS19TSF9SRUdTIEsoS1RfU1BFQywyKQorI2RlZmluZSBLX1NIX01FTSBLKEtUX1NQRUMsMykKKyNkZWZpbmUgS19TSF9TVEFUIEsoS1RfU1BFQyw0KQorI2RlZmluZSBLX0JSRUFLIEsoS1RfU1BFQyw1KQorI2RlZmluZSBLX0NPTlMgSyhLVF9TUEVDLDYpCisjZGVmaW5lIEtfQ0FQUyBLKEtUX1NQRUMsNykKKyNkZWZpbmUgS19OVU0gSyhLVF9TUEVDLDgpCisjZGVmaW5lIEtfSE9MRCBLKEtUX1NQRUMsOSkKKyNkZWZpbmUgS19TQ1JPTExGT1JXIEsoS1RfU1BFQywxMCkKKyNkZWZpbmUgS19TQ1JPTExCQUNLIEsoS1RfU1BFQywxMSkKKyNkZWZpbmUgS19CT09UIEsoS1RfU1BFQywxMikKKyNkZWZpbmUgS19DQVBTT04gSyhLVF9TUEVDLDEzKQorI2RlZmluZSBLX0NPTVBPU0UgSyhLVF9TUEVDLDE0KQorI2RlZmluZSBLX1NBSyBLKEtUX1NQRUMsMTUpCisjZGVmaW5lIEtfREVDUkNPTlNPTEUgSyhLVF9TUEVDLDE2KQorI2RlZmluZSBLX0lOQ1JDT05TT0xFIEsoS1RfU1BFQywxNykKKyNkZWZpbmUgS19TUEFXTkNPTlNPTEUgSyhLVF9TUEVDLDE4KQorI2RlZmluZSBLX0JBUkVOVU1MT0NLIEsoS1RfU1BFQywxOSkKKworI2RlZmluZSBLX0FMTE9DQVRFRCBLKEtUX1NQRUMsMTI2KSAgCisjZGVmaW5lIEtfTk9TVUNITUFQIEsoS1RfU1BFQywxMjcpICAKKworI2RlZmluZSBLX1AwIEsoS1RfUEFELDApCisjZGVmaW5lIEtfUDEgSyhLVF9QQUQsMSkKKyNkZWZpbmUgS19QMiBLKEtUX1BBRCwyKQorI2RlZmluZSBLX1AzIEsoS1RfUEFELDMpCisjZGVmaW5lIEtfUDQgSyhLVF9QQUQsNCkKKyNkZWZpbmUgS19QNSBLKEtUX1BBRCw1KQorI2RlZmluZSBLX1A2IEsoS1RfUEFELDYpCisjZGVmaW5lIEtfUDcgSyhLVF9QQUQsNykKKyNkZWZpbmUgS19QOCBLKEtUX1BBRCw4KQorI2RlZmluZSBLX1A5IEsoS1RfUEFELDkpCisjZGVmaW5lIEtfUFBMVVMgSyhLVF9QQUQsMTApICAKKyNkZWZpbmUgS19QTUlOVVMgSyhLVF9QQUQsMTEpICAKKyNkZWZpbmUgS19QU1RBUiBLKEtUX1BBRCwxMikgIAorI2RlZmluZSBLX1BTTEFTSCBLKEtUX1BBRCwxMykgIAorI2RlZmluZSBLX1BFTlRFUiBLKEtUX1BBRCwxNCkgIAorI2RlZmluZSBLX1BDT01NQSBLKEtUX1BBRCwxNSkgIAorI2RlZmluZSBLX1BET1QgSyhLVF9QQUQsMTYpICAKKyNkZWZpbmUgS19QUExVU01JTlVTIEsoS1RfUEFELDE3KSAgCisjZGVmaW5lIEtfUFBBUkVOTCBLKEtUX1BBRCwxOCkgIAorI2RlZmluZSBLX1BQQVJFTlIgSyhLVF9QQUQsMTkpICAKKworI2RlZmluZSBOUl9QQUQgMjAKKworI2RlZmluZSBLX0RHUkFWRSBLKEtUX0RFQUQsMCkKKyNkZWZpbmUgS19EQUNVVEUgSyhLVF9ERUFELDEpCisjZGVmaW5lIEtfRENJUkNNIEsoS1RfREVBRCwyKQorI2RlZmluZSBLX0RUSUxERSBLKEtUX0RFQUQsMykKKyNkZWZpbmUgS19ERElFUkUgSyhLVF9ERUFELDQpCisjZGVmaW5lIEtfRENFRElMIEsoS1RfREVBRCw1KQorCisjZGVmaW5lIE5SX0RFQUQgNgorCisjZGVmaW5lIEtfRE9XTiBLKEtUX0NVUiwwKQorI2RlZmluZSBLX0xFRlQgSyhLVF9DVVIsMSkKKyNkZWZpbmUgS19SSUdIVCBLKEtUX0NVUiwyKQorI2RlZmluZSBLX1VQIEsoS1RfQ1VSLDMpCisKKyNkZWZpbmUgS19TSElGVCBLKEtUX1NISUZULEtHX1NISUZUKQorI2RlZmluZSBLX0NUUkwgSyhLVF9TSElGVCxLR19DVFJMKQorI2RlZmluZSBLX0FMVCBLKEtUX1NISUZULEtHX0FMVCkKKyNkZWZpbmUgS19BTFRHUiBLKEtUX1NISUZULEtHX0FMVEdSKQorI2RlZmluZSBLX1NISUZUTCBLKEtUX1NISUZULEtHX1NISUZUTCkKKyNkZWZpbmUgS19TSElGVFIgSyhLVF9TSElGVCxLR19TSElGVFIpCisjZGVmaW5lIEtfQ1RSTEwgSyhLVF9TSElGVCxLR19DVFJMTCkKKyNkZWZpbmUgS19DVFJMUiBLKEtUX1NISUZULEtHX0NUUkxSKQorI2RlZmluZSBLX0NBUFNTSElGVCBLKEtUX1NISUZULEtHX0NBUFNTSElGVCkKKworI2RlZmluZSBLX0FTQzAgSyhLVF9BU0NJSSwwKQorI2RlZmluZSBLX0FTQzEgSyhLVF9BU0NJSSwxKQorI2RlZmluZSBLX0FTQzIgSyhLVF9BU0NJSSwyKQorI2RlZmluZSBLX0FTQzMgSyhLVF9BU0NJSSwzKQorI2RlZmluZSBLX0FTQzQgSyhLVF9BU0NJSSw0KQorI2RlZmluZSBLX0FTQzUgSyhLVF9BU0NJSSw1KQorI2RlZmluZSBLX0FTQzYgSyhLVF9BU0NJSSw2KQorI2RlZmluZSBLX0FTQzcgSyhLVF9BU0NJSSw3KQorI2RlZmluZSBLX0FTQzggSyhLVF9BU0NJSSw4KQorI2RlZmluZSBLX0FTQzkgSyhLVF9BU0NJSSw5KQorI2RlZmluZSBLX0hFWDAgSyhLVF9BU0NJSSwxMCkKKyNkZWZpbmUgS19IRVgxIEsoS1RfQVNDSUksMTEpCisjZGVmaW5lIEtfSEVYMiBLKEtUX0FTQ0lJLDEyKQorI2RlZmluZSBLX0hFWDMgSyhLVF9BU0NJSSwxMykKKyNkZWZpbmUgS19IRVg0IEsoS1RfQVNDSUksMTQpCisjZGVmaW5lIEtfSEVYNSBLKEtUX0FTQ0lJLDE1KQorI2RlZmluZSBLX0hFWDYgSyhLVF9BU0NJSSwxNikKKyNkZWZpbmUgS19IRVg3IEsoS1RfQVNDSUksMTcpCisjZGVmaW5lIEtfSEVYOCBLKEtUX0FTQ0lJLDE4KQorI2RlZmluZSBLX0hFWDkgSyhLVF9BU0NJSSwxOSkKKyNkZWZpbmUgS19IRVhhIEsoS1RfQVNDSUksMjApCisjZGVmaW5lIEtfSEVYYiBLKEtUX0FTQ0lJLDIxKQorI2RlZmluZSBLX0hFWGMgSyhLVF9BU0NJSSwyMikKKyNkZWZpbmUgS19IRVhkIEsoS1RfQVNDSUksMjMpCisjZGVmaW5lIEtfSEVYZSBLKEtUX0FTQ0lJLDI0KQorI2RlZmluZSBLX0hFWGYgSyhLVF9BU0NJSSwyNSkKKworI2RlZmluZSBOUl9BU0NJSSAyNgorCisjZGVmaW5lIEtfU0hJRlRMT0NLIEsoS1RfTE9DSyxLR19TSElGVCkKKyNkZWZpbmUgS19DVFJMTE9DSyBLKEtUX0xPQ0ssS0dfQ1RSTCkKKyNkZWZpbmUgS19BTFRMT0NLIEsoS1RfTE9DSyxLR19BTFQpCisjZGVmaW5lIEtfQUxUR1JMT0NLIEsoS1RfTE9DSyxLR19BTFRHUikKKyNkZWZpbmUgS19TSElGVExMT0NLIEsoS1RfTE9DSyxLR19TSElGVEwpCisjZGVmaW5lIEtfU0hJRlRSTE9DSyBLKEtUX0xPQ0ssS0dfU0hJRlRSKQorI2RlZmluZSBLX0NUUkxMTE9DSyBLKEtUX0xPQ0ssS0dfQ1RSTEwpCisjZGVmaW5lIEtfQ1RSTFJMT0NLIEsoS1RfTE9DSyxLR19DVFJMUikKKworI2RlZmluZSBLX1NISUZUX1NMT0NLIEsoS1RfU0xPQ0ssS0dfU0hJRlQpCisjZGVmaW5lIEtfQ1RSTF9TTE9DSyBLKEtUX1NMT0NLLEtHX0NUUkwpCisjZGVmaW5lIEtfQUxUX1NMT0NLIEsoS1RfU0xPQ0ssS0dfQUxUKQorI2RlZmluZSBLX0FMVEdSX1NMT0NLIEsoS1RfU0xPQ0ssS0dfQUxUR1IpCisjZGVmaW5lIEtfU0hJRlRMX1NMT0NLIEsoS1RfU0xPQ0ssS0dfU0hJRlRMKQorI2RlZmluZSBLX1NISUZUUl9TTE9DSyBLKEtUX1NMT0NLLEtHX1NISUZUUikKKyNkZWZpbmUgS19DVFJMTF9TTE9DSyBLKEtUX1NMT0NLLEtHX0NUUkxMKQorI2RlZmluZSBLX0NUUkxSX1NMT0NLIEsoS1RfU0xPQ0ssS0dfQ1RSTFIpCisKKyNkZWZpbmUgTlJfTE9DSyA4CisKKyNkZWZpbmUgS19CUkxfQkxBTksgSyhLVF9CUkwsIDApCisjZGVmaW5lIEtfQlJMX0RPVDEgSyhLVF9CUkwsIDEpCisjZGVmaW5lIEtfQlJMX0RPVDIgSyhLVF9CUkwsIDIpCisjZGVmaW5lIEtfQlJMX0RPVDMgSyhLVF9CUkwsIDMpCisjZGVmaW5lIEtfQlJMX0RPVDQgSyhLVF9CUkwsIDQpCisjZGVmaW5lIEtfQlJMX0RPVDUgSyhLVF9CUkwsIDUpCisjZGVmaW5lIEtfQlJMX0RPVDYgSyhLVF9CUkwsIDYpCisjZGVmaW5lIEtfQlJMX0RPVDcgSyhLVF9CUkwsIDcpCisjZGVmaW5lIEtfQlJMX0RPVDggSyhLVF9CUkwsIDgpCisKKyNkZWZpbmUgTlJfQlJMIDkKKworI2RlZmluZSBNQVhfRElBQ1IgMjU2CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9rZXljaG9yZC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2tleWNob3JkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE0ODQzMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9rZXljaG9yZC5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19MSU5VWF9LRVlDSE9SRF9IXworI2RlZmluZSBfX0xJTlVYX0tFWUNIT1JEX0hfCisKKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorCisjZGVmaW5lIEtFWUNIT1JEX1ZFUlNJT04gMQorCitzdHJ1Y3QgaW5wdXRfa2V5Y2hvcmQgeworCisgX191MTYgdmVyc2lvbjsKKworIF9fdTE2IGlkOworCisgX191MTYgY291bnQ7CisKKyBfX3UxNiBrZXljb2Rlc1tdOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgva2xpc3QuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9rbGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkZjAxNGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgva2xpc3QuaApAQCAtMCwwICsxLDQxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9LTElTVF9ICisjZGVmaW5lIF9MSU5VWF9LTElTVF9ICisKKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorCitzdHJ1Y3Qga2xpc3Rfbm9kZTsKK3N0cnVjdCBrbGlzdCB7Cisgc3BpbmxvY2tfdCBrX2xvY2s7Cisgc3RydWN0IGxpc3RfaGVhZCBrX2xpc3Q7Cisgdm9pZCAoKmdldCkoc3RydWN0IGtsaXN0X25vZGUgKik7Cisgdm9pZCAoKnB1dCkoc3RydWN0IGtsaXN0X25vZGUgKik7Cit9OworCitzdHJ1Y3Qga2xpc3Rfbm9kZSB7Cisgc3RydWN0IGtsaXN0ICogbl9rbGlzdDsKKyBzdHJ1Y3QgbGlzdF9oZWFkIG5fbm9kZTsKKyBzdHJ1Y3Qga3JlZiBuX3JlZjsKKyBzdHJ1Y3QgY29tcGxldGlvbiBuX3JlbW92ZWQ7Cit9OworCitzdHJ1Y3Qga2xpc3RfaXRlciB7Cisgc3RydWN0IGtsaXN0ICogaV9rbGlzdDsKKyBzdHJ1Y3QgbGlzdF9oZWFkICogaV9oZWFkOworIHN0cnVjdCBrbGlzdF9ub2RlICogaV9jdXI7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9rbW9kLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgva21vZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNDQ1NmQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgva21vZC5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19MSU5VWF9LTU9EX0hfXworI2RlZmluZSBfX0xJTlVYX0tNT0RfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisKKyNkZWZpbmUgS01PRF9QQVRIX0xFTiAyNTYKKworI2RlZmluZSB0cnlfdGhlbl9yZXF1ZXN0X21vZHVsZSh4LCBtb2QuLi4pICgoeCkgPzogKHJlcXVlc3RfbW9kdWxlKG1vZCksICh4KSkpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2tvYmplY3QuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9rb2JqZWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYxYTk1MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9rb2JqZWN0LmgKQEAgLTAsMCArMSwxNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfS09CSkVDVF9IXworI2RlZmluZSBfS09CSkVDVF9IXworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9rcmVmLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgva3JlZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlMDJiN2YKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgva3JlZi5oCkBAIC0wLDAgKzEsMTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0tSRUZfSF8KKyNkZWZpbmUgX0tSRUZfSF8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgva3RpbWUuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9rdGltZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ZjhmMGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgva3RpbWUuaApAQCAtMCwwICsxLDUyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9LVElNRV9ICisjZGVmaW5lIF9MSU5VWF9LVElNRV9ICisKKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorCit0eXBlZGVmIHVuaW9uIHsKKyBzNjQgdHY2NDsKKyNpZiBCSVRTX1BFUl9MT05HICE9ICg2NCAmJiAhZGVmaW5lZChDT05GSUdfS1RJTUVfU0NBTEFSKSkKKyBzdHJ1Y3QgeworI2lmZGVmIF9fQklHX0VORElBTgorIHMzMiBzZWMsIG5zZWM7CisjZWxzZQorIHMzMiBuc2VjLCBzZWM7CisjZW5kaWYKKyB9IHR2OworI2VuZGlmCit9IGt0aW1lX3Q7CisKKyNkZWZpbmUgS1RJTUVfTUFYICgoczY0KX4oKHU2NCkxIDw8IDYzKSkKKyNkZWZpbmUgS1RJTUVfU0VDX01BWCAoS1RJTUVfTUFYIC8gTlNFQ19QRVJfU0VDKQorCisjaWYgQklUU19QRVJfTE9ORyA9PSA2NAorCisjaWYgQklUU19QRVJfTE9ORyA9PSA2NAorI2VuZGlmCisjZGVmaW5lIGt0aW1lX3N1YihsaHMsIHJocykgICAoeyAoa3RpbWVfdCl7IC50djY0ID0gKGxocykudHY2NCAtIChyaHMpLnR2NjQgfTsgfSkKKyNkZWZpbmUga3RpbWVfYWRkKGxocywgcmhzKSAgICh7IChrdGltZV90KXsgLnR2NjQgPSAobGhzKS50djY0ICsgKHJocykudHY2NCB9OyB9KQorI2RlZmluZSBrdGltZV9hZGRfbnMoa3QsIG5zdmFsKSAgICh7IChrdGltZV90KXsgLnR2NjQgPSAoa3QpLnR2NjQgKyAobnN2YWwpIH07IH0pCisjZGVmaW5lIGt0aW1lX3RvX3RpbWVzcGVjKGt0KSBuc190b190aW1lc3BlYygoa3QpLnR2NjQpCisjZGVmaW5lIGt0aW1lX3RvX3RpbWV2YWwoa3QpIG5zX3RvX3RpbWV2YWwoKGt0KS50djY0KQorI2RlZmluZSBrdGltZV90b19ucyhrdCkgKChrdCkudHY2NCkKKyNlbHNlCisKKyNlbmRpZgorI2RlZmluZSBLVElNRV9SRUFMVElNRV9SRVMgKGt0aW1lX3QpeyAudHY2NCA9IFRJQ0tfTlNFQyB9CisjZGVmaW5lIEtUSU1FX01PTk9UT05JQ19SRVMgKGt0aW1lX3QpeyAudHY2NCA9IFRJQ0tfTlNFQyB9CisKKyNkZWZpbmUga3RpbWVfZ2V0X3JlYWxfdHModHMpIGdldG5zdGltZW9mZGF5KHRzKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9saW1pdHMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9saW1pdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTY1ZTMwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2xpbWl0cy5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX0xJTUlUU19ICisjZGVmaW5lIF9MSU5VWF9MSU1JVFNfSAorCisjZGVmaW5lIE5SX09QRU4gMTAyNAorCisjZGVmaW5lIE5HUk9VUFNfTUFYIDY1NTM2ICAKKyNkZWZpbmUgQVJHX01BWCAxMzEwNzIgIAorI2RlZmluZSBDSElMRF9NQVggOTk5ICAKKyNkZWZpbmUgT1BFTl9NQVggMjU2ICAKKyNkZWZpbmUgTElOS19NQVggMTI3ICAKKyNkZWZpbmUgTUFYX0NBTk9OIDI1NSAgCisjZGVmaW5lIE1BWF9JTlBVVCAyNTUgIAorI2RlZmluZSBOQU1FX01BWCAyNTUgIAorI2RlZmluZSBQQVRIX01BWCA0MDk2ICAKKyNkZWZpbmUgUElQRV9CVUYgNDA5NiAgCisjZGVmaW5lIFhBVFRSX05BTUVfTUFYIDI1NSAgCisjZGVmaW5lIFhBVFRSX1NJWkVfTUFYIDY1NTM2ICAKKyNkZWZpbmUgWEFUVFJfTElTVF9NQVggNjU1MzYgIAorCisjZGVmaW5lIFJUU0lHX01BWCAzMgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9saW5rYWdlLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbGlua2FnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwMTk0YmMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbGlua2FnZS5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX0xJTktBR0VfSAorI2RlZmluZSBfTElOVVhfTElOS0FHRV9ICisKKyNpbmNsdWRlIDxhc20vbGlua2FnZS5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKKyNkZWZpbmUgQ1BQX0FTTUxJTktBR0UgZXh0ZXJuICJDIgorI2Vsc2UKKyNkZWZpbmUgQ1BQX0FTTUxJTktBR0UKKyNlbmRpZgorCisjaWZuZGVmIGFzbWxpbmthZ2UKKyNkZWZpbmUgYXNtbGlua2FnZSBDUFBfQVNNTElOS0FHRQorI2VuZGlmCisKKyNpZm5kZWYgcHJldmVudF90YWlsX2NhbGwKKyNkZWZpbmUgcHJldmVudF90YWlsX2NhbGwocmV0KSBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKworI2lmbmRlZiBfX0FMSUdOCisjZGVmaW5lIF9fQUxJR04gLmFsaWduIDQsMHg5MAorI2RlZmluZSBfX0FMSUdOX1NUUiAiLmFsaWduIDQsMHg5MCIKKyNlbmRpZgorCisjaWZkZWYgX19BU1NFTUJMWV9fCisKKyNkZWZpbmUgQUxJR04gX19BTElHTgorI2RlZmluZSBBTElHTl9TVFIgX19BTElHTl9TVFIKKworI2lmbmRlZiBFTlRSWQorI2RlZmluZSBFTlRSWShuYW1lKSAgIC5nbG9ibCBuYW1lOyAgIEFMSUdOOyAgIG5hbWU6CisjZW5kaWYKKworI2RlZmluZSBLUFJPQkVfRU5UUlkobmFtZSkgICAuc2VjdGlvbiAua3Byb2Jlcy50ZXh0LCAiYXgiOyAgIEVOVFJZKG5hbWUpCisKKyNpZm5kZWYgRU5ECisjZGVmaW5lIEVORChuYW1lKSAgIC5zaXplIG5hbWUsIC4tbmFtZQorI2VuZGlmCisKKyNpZm5kZWYgRU5EUFJPQworI2RlZmluZSBFTkRQUk9DKG5hbWUpICAgLnR5cGUgbmFtZSwgQGZ1bmN0aW9uOyAgIEVORChuYW1lKQorI2VuZGlmCisKKyNlbmRpZgorCisjZGVmaW5lIE5PUkVUX1RZUEUgIAorI2RlZmluZSBBVFRSSUJfTk9SRVQgX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKQorI2RlZmluZSBOT1JFVF9BTkQgbm9yZXR1cm4sCisKKyNpZm5kZWYgRkFTVENBTEwKKyNkZWZpbmUgRkFTVENBTEwoeCkgeAorI2RlZmluZSBmYXN0Y2FsbAorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2xpc3QuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9saXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE3ODcxZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9saXN0LmgKQEAgLTAsMCArMSwxNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfTElTVF9ICisjZGVmaW5lIF9MSU5VWF9MSVNUX0gKKworI3dhcm5pbmcgImRvbid0IGluY2x1ZGUga2VybmVsIGhlYWRlcnMgaW4gdXNlcnNwYWNlIgorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbG9ja2QvbmxtLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbG9ja2QvbmxtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVkNDRmZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9sb2NrZC9ubG0uaApAQCAtMCwwICsxLDUwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIExJTlVYX0xPQ0tEX05MTV9ICisjZGVmaW5lIExJTlVYX0xPQ0tEX05MTV9ICisKKyNkZWZpbmUgTkxNX09GRlNFVF9NQVggKChzMzIpIDB4N2ZmZmZmZmYpCisjZGVmaW5lIE5MTTRfT0ZGU0VUX01BWCAoKHM2NCkgKCh+KHU2NCkwKSA+PiAxKSkKKworZW51bSB7CisgTkxNX0xDS19HUkFOVEVEID0gMCwKKyBOTE1fTENLX0RFTklFRCA9IDEsCisgTkxNX0xDS19ERU5JRURfTk9MT0NLUyA9IDIsCisgTkxNX0xDS19CTE9DS0VEID0gMywKKyBOTE1fTENLX0RFTklFRF9HUkFDRV9QRVJJT0QgPSA0LAorfTsKKworI2RlZmluZSBOTE1fUFJPR1JBTSAxMDAwMjEKKworI2RlZmluZSBOTE1QUk9DX05VTEwgMAorI2RlZmluZSBOTE1QUk9DX1RFU1QgMQorI2RlZmluZSBOTE1QUk9DX0xPQ0sgMgorI2RlZmluZSBOTE1QUk9DX0NBTkNFTCAzCisjZGVmaW5lIE5MTVBST0NfVU5MT0NLIDQKKyNkZWZpbmUgTkxNUFJPQ19HUkFOVEVEIDUKKyNkZWZpbmUgTkxNUFJPQ19URVNUX01TRyA2CisjZGVmaW5lIE5MTVBST0NfTE9DS19NU0cgNworI2RlZmluZSBOTE1QUk9DX0NBTkNFTF9NU0cgOAorI2RlZmluZSBOTE1QUk9DX1VOTE9DS19NU0cgOQorI2RlZmluZSBOTE1QUk9DX0dSQU5URURfTVNHIDEwCisjZGVmaW5lIE5MTVBST0NfVEVTVF9SRVMgMTEKKyNkZWZpbmUgTkxNUFJPQ19MT0NLX1JFUyAxMgorI2RlZmluZSBOTE1QUk9DX0NBTkNFTF9SRVMgMTMKKyNkZWZpbmUgTkxNUFJPQ19VTkxPQ0tfUkVTIDE0CisjZGVmaW5lIE5MTVBST0NfR1JBTlRFRF9SRVMgMTUKKyNkZWZpbmUgTkxNUFJPQ19OU01fTk9USUZZIDE2ICAKKyNkZWZpbmUgTkxNUFJPQ19TSEFSRSAyMAorI2RlZmluZSBOTE1QUk9DX1VOU0hBUkUgMjEKKyNkZWZpbmUgTkxNUFJPQ19OTV9MT0NLIDIyCisjZGVmaW5lIE5MTVBST0NfRlJFRV9BTEwgMjMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbG9ja2QveGRyLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbG9ja2QveGRyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVkMDMwOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9sb2NrZC94ZHIuaApAQCAtMCwwICsxLDczIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIExPQ0tEX1hEUl9ICisjZGVmaW5lIExPQ0tEX1hEUl9ICisKKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L25mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy94ZHIuaD4KKworI2RlZmluZSBOTE1fTUFYQ09PS0lFTEVOIDMyCisjZGVmaW5lIE5MTV9NQVhTVFJMRU4gMTAyNAorCisjZGVmaW5lIG5sbV9ncmFudGVkIF9fY29uc3RhbnRfaHRvbmwoTkxNX0xDS19HUkFOVEVEKQorI2RlZmluZSBubG1fbGNrX2RlbmllZCBfX2NvbnN0YW50X2h0b25sKE5MTV9MQ0tfREVOSUVEKQorI2RlZmluZSBubG1fbGNrX2RlbmllZF9ub2xvY2tzIF9fY29uc3RhbnRfaHRvbmwoTkxNX0xDS19ERU5JRURfTk9MT0NLUykKKyNkZWZpbmUgbmxtX2xja19ibG9ja2VkIF9fY29uc3RhbnRfaHRvbmwoTkxNX0xDS19CTE9DS0VEKQorI2RlZmluZSBubG1fbGNrX2RlbmllZF9ncmFjZV9wZXJpb2QgX19jb25zdGFudF9odG9ubChOTE1fTENLX0RFTklFRF9HUkFDRV9QRVJJT0QpCisKK3N0cnVjdCBubG1fbG9jayB7CisgY2hhciAqIGNhbGxlcjsKKyBpbnQgbGVuOworIHN0cnVjdCBuZnNfZmggZmg7Cisgc3RydWN0IHhkcl9uZXRvYmogb2g7CisgdTMyIHN2aWQ7Cisgc3RydWN0IGZpbGVfbG9jayBmbDsKK307CisKK3N0cnVjdCBubG1fY29va2llCit7CisgdW5zaWduZWQgY2hhciBkYXRhW05MTV9NQVhDT09LSUVMRU5dOworIHVuc2lnbmVkIGludCBsZW47Cit9OworCitzdHJ1Y3QgbmxtX2FyZ3MgeworIHN0cnVjdCBubG1fY29va2llIGNvb2tpZTsKKyBzdHJ1Y3QgbmxtX2xvY2sgbG9jazsKKyB1MzIgYmxvY2s7CisgdTMyIHJlY2xhaW07CisgdTMyIHN0YXRlOworIHUzMiBtb25pdG9yOworIHUzMiBmc21fYWNjZXNzOworIHUzMiBmc21fbW9kZTsKK307CisKK3R5cGVkZWYgc3RydWN0IG5sbV9hcmdzIG5sbV9hcmdzOworCitzdHJ1Y3QgbmxtX3JlcyB7Cisgc3RydWN0IG5sbV9jb29raWUgY29va2llOworIHUzMiBzdGF0dXM7Cisgc3RydWN0IG5sbV9sb2NrIGxvY2s7Cit9OworCitzdHJ1Y3QgbmxtX3JlYm9vdCB7CisgY2hhciAqIG1vbjsKKyBpbnQgbGVuOworIHUzMiBzdGF0ZTsKKyB1MzIgYWRkcjsKKyB1MzIgdmVyczsKKyB1MzIgcHJvdG87Cit9OworCisjZGVmaW5lIE5MTVNWQ19YRFJTSVpFIHNpemVvZihzdHJ1Y3QgbmxtX2FyZ3MpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2xvY2tkZXAuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9sb2NrZGVwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVlODYzNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9sb2NrZGVwLmgKQEAgLTAsMCArMSw1MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0xJTlVYX0xPQ0tERVBfSAorI2RlZmluZSBfX0xJTlVYX0xPQ0tERVBfSAorCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z19sb2Nrcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N0YWNrdHJhY2UuaD4KKworI2RlZmluZSBsb2NrX2FjcXVpcmUobCwgcywgdCwgciwgYywgaSkgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBsb2NrX3JlbGVhc2UobCwgbiwgaSkgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBsb2NrZGVwX2luaXQoKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGxvY2tkZXBfaW5mbygpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgbG9ja2RlcF9pbml0X21hcChsb2NrLCBuYW1lLCBrZXkpIGRvIHsgKHZvaWQpKGtleSk7IH0gd2hpbGUgKDApCisjZGVmaW5lIGxvY2tkZXBfc2V0X2NsYXNzKGxvY2ssIGtleSkgZG8geyAodm9pZCkoa2V5KTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgbG9ja2RlcF9zZXRfY2xhc3NfYW5kX25hbWUobG9jaywga2V5LCBuYW1lKSAgIGRvIHsgKHZvaWQpKGtleSk7IH0gd2hpbGUgKDApCisjZGVmaW5lIElOSVRfTE9DS0RFUAorI2RlZmluZSBsb2NrZGVwX3Jlc2V0KCkgZG8geyBkZWJ1Z19sb2NrcyA9IDE7IH0gd2hpbGUgKDApCisjZGVmaW5lIGxvY2tkZXBfZnJlZV9rZXlfcmFuZ2Uoc3RhcnQsIHNpemUpIGRvIHsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBlYXJseV9pbml0X2lycV9sb2NrX2NsYXNzKCkgZG8geyB9IHdoaWxlICgwKQorCisjZGVmaW5lIGVhcmx5X2Jvb3RfaXJxc19vZmYoKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGVhcmx5X2Jvb3RfaXJxc19vbigpIGRvIHsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBTSU5HTEVfREVQVEhfTkVTVElORyAxCisKKyNkZWZpbmUgc3Bpbl9hY3F1aXJlKGwsIHMsIHQsIGkpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgc3Bpbl9yZWxlYXNlKGwsIG4sIGkpIGRvIHsgfSB3aGlsZSAoMCkKKworI2RlZmluZSByd2xvY2tfYWNxdWlyZShsLCBzLCB0LCBpKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHJ3bG9ja19hY3F1aXJlX3JlYWQobCwgcywgdCwgaSkgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSByd2xvY2tfcmVsZWFzZShsLCBuLCBpKSBkbyB7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgbXV0ZXhfYWNxdWlyZShsLCBzLCB0LCBpKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIG11dGV4X3JlbGVhc2UobCwgbiwgaSkgZG8geyB9IHdoaWxlICgwKQorCisjZGVmaW5lIHJ3c2VtX2FjcXVpcmUobCwgcywgdCwgaSkgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSByd3NlbV9hY3F1aXJlX3JlYWQobCwgcywgdCwgaSkgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSByd3NlbV9yZWxlYXNlKGwsIG4sIGkpIGRvIHsgfSB3aGlsZSAoMCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbG9vcC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2xvb3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2RmZDM4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2xvb3AuaApAQCAtMCwwICsxLDc3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9MT09QX0gKKyNkZWZpbmUgX0xJTlVYX0xPT1BfSAorCisjZGVmaW5lIExPX05BTUVfU0laRSA2NAorI2RlZmluZSBMT19LRVlfU0laRSAzMgorCitlbnVtIHsKKyBMT19GTEFHU19SRUFEX09OTFkgPSAxLAorIExPX0ZMQUdTX1VTRV9BT1BTID0gMiwKK307CisKKyNpbmNsdWRlIDxhc20vcG9zaXhfdHlwZXMuaD4gIAorI2luY2x1ZGUgPGFzbS90eXBlcy5oPiAgCisKK3N0cnVjdCBsb29wX2luZm8geworIGludCBsb19udW1iZXI7CisgX19rZXJuZWxfb2xkX2Rldl90IGxvX2RldmljZTsKKyB1bnNpZ25lZCBsb25nIGxvX2lub2RlOworIF9fa2VybmVsX29sZF9kZXZfdCBsb19yZGV2aWNlOworIGludCBsb19vZmZzZXQ7CisgaW50IGxvX2VuY3J5cHRfdHlwZTsKKyBpbnQgbG9fZW5jcnlwdF9rZXlfc2l6ZTsKKyBpbnQgbG9fZmxhZ3M7CisgY2hhciBsb19uYW1lW0xPX05BTUVfU0laRV07CisgdW5zaWduZWQgY2hhciBsb19lbmNyeXB0X2tleVtMT19LRVlfU0laRV07CisgdW5zaWduZWQgbG9uZyBsb19pbml0WzJdOworIGNoYXIgcmVzZXJ2ZWRbNF07Cit9OworCitzdHJ1Y3QgbG9vcF9pbmZvNjQgeworIF9fdTY0IGxvX2RldmljZTsKKyBfX3U2NCBsb19pbm9kZTsKKyBfX3U2NCBsb19yZGV2aWNlOworIF9fdTY0IGxvX29mZnNldDsKKyBfX3U2NCBsb19zaXplbGltaXQ7CisgX191MzIgbG9fbnVtYmVyOworIF9fdTMyIGxvX2VuY3J5cHRfdHlwZTsKKyBfX3UzMiBsb19lbmNyeXB0X2tleV9zaXplOworIF9fdTMyIGxvX2ZsYWdzOworIF9fdTggbG9fZmlsZV9uYW1lW0xPX05BTUVfU0laRV07CisgX191OCBsb19jcnlwdF9uYW1lW0xPX05BTUVfU0laRV07CisgX191OCBsb19lbmNyeXB0X2tleVtMT19LRVlfU0laRV07CisgX191NjQgbG9faW5pdFsyXTsKK307CisKKyNkZWZpbmUgTE9fQ1JZUFRfTk9ORSAwCisjZGVmaW5lIExPX0NSWVBUX1hPUiAxCisjZGVmaW5lIExPX0NSWVBUX0RFUyAyCisjZGVmaW5lIExPX0NSWVBUX0ZJU0gyIDMgIAorI2RlZmluZSBMT19DUllQVF9CTE9XIDQKKyNkZWZpbmUgTE9fQ1JZUFRfQ0FTVDEyOCA1CisjZGVmaW5lIExPX0NSWVBUX0lERUEgNgorI2RlZmluZSBMT19DUllQVF9EVU1NWSA5CisjZGVmaW5lIExPX0NSWVBUX1NLSVBKQUNLIDEwCisjZGVmaW5lIExPX0NSWVBUX0NSWVBUT0FQSSAxOAorI2RlZmluZSBNQVhfTE9fQ1JZUFQgMjAKKworI2RlZmluZSBMT09QX1NFVF9GRCAweDRDMDAKKyNkZWZpbmUgTE9PUF9DTFJfRkQgMHg0QzAxCisjZGVmaW5lIExPT1BfU0VUX1NUQVRVUyAweDRDMDIKKyNkZWZpbmUgTE9PUF9HRVRfU1RBVFVTIDB4NEMwMworI2RlZmluZSBMT09QX1NFVF9TVEFUVVM2NCAweDRDMDQKKyNkZWZpbmUgTE9PUF9HRVRfU1RBVFVTNjQgMHg0QzA1CisjZGVmaW5lIExPT1BfQ0hBTkdFX0ZEIDB4NEMwNgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tYWdpYy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21hZ2ljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk0ZjljZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tYWdpYy5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19MSU5VWF9NQUdJQ19IX18KKyNkZWZpbmUgX19MSU5VWF9NQUdJQ19IX18KKworI2RlZmluZSBBREZTX1NVUEVSX01BR0lDIDB4YWRmNQorI2RlZmluZSBBRkZTX1NVUEVSX01BR0lDIDB4YWRmZgorI2RlZmluZSBBRlNfU1VQRVJfTUFHSUMgMHg1MzQ2NDE0RgorI2RlZmluZSBBVVRPRlNfU1VQRVJfTUFHSUMgMHgwMTg3CisjZGVmaW5lIENPREFfU1VQRVJfTUFHSUMgMHg3Mzc1NzI0NQorI2RlZmluZSBFRlNfU1VQRVJfTUFHSUMgMHg0MTRBNTMKKyNkZWZpbmUgRVhUMl9TVVBFUl9NQUdJQyAweEVGNTMKKyNkZWZpbmUgRVhUM19TVVBFUl9NQUdJQyAweEVGNTMKKyNkZWZpbmUgRVhUNF9TVVBFUl9NQUdJQyAweEVGNTMKKyNkZWZpbmUgSFBGU19TVVBFUl9NQUdJQyAweGY5OTVlODQ5CisjZGVmaW5lIElTT0ZTX1NVUEVSX01BR0lDIDB4OTY2MAorI2RlZmluZSBKRkZTMl9TVVBFUl9NQUdJQyAweDcyYjYKKyNkZWZpbmUgQU5PTl9JTk9ERV9GU19NQUdJQyAweDA5MDQxOTM0CisKKyNkZWZpbmUgTUlOSVhfU1VQRVJfTUFHSUMgMHgxMzdGICAKKyNkZWZpbmUgTUlOSVhfU1VQRVJfTUFHSUMyIDB4MTM4RiAgCisjZGVmaW5lIE1JTklYMl9TVVBFUl9NQUdJQyAweDI0NjggIAorI2RlZmluZSBNSU5JWDJfU1VQRVJfTUFHSUMyIDB4MjQ3OCAgCisjZGVmaW5lIE1JTklYM19TVVBFUl9NQUdJQyAweDRkNWEgIAorCisjZGVmaW5lIE1TRE9TX1NVUEVSX01BR0lDIDB4NGQ0NCAgCisjZGVmaW5lIE5DUF9TVVBFUl9NQUdJQyAweDU2NGMgIAorI2RlZmluZSBORlNfU1VQRVJfTUFHSUMgMHg2OTY5CisjZGVmaW5lIE9QRU5QUk9NX1NVUEVSX01BR0lDIDB4OWZhMQorI2RlZmluZSBQUk9DX1NVUEVSX01BR0lDIDB4OWZhMAorI2RlZmluZSBRTlg0X1NVUEVSX01BR0lDIDB4MDAyZiAgCisKKyNkZWZpbmUgUkVJU0VSRlNfU1VQRVJfTUFHSUMgMHg1MjY1NDk3MyAgCisKKyNkZWZpbmUgUkVJU0VSRlNfU1VQRVJfTUFHSUNfU1RSSU5HICJSZUlzRXJGcyIKKyNkZWZpbmUgUkVJU0VSMkZTX1NVUEVSX01BR0lDX1NUUklORyAiUmVJc0VyMkZzIgorI2RlZmluZSBSRUlTRVIyRlNfSlJfU1VQRVJfTUFHSUNfU1RSSU5HICJSZUlzRXIzRnMiCisKKyNkZWZpbmUgU01CX1NVUEVSX01BR0lDIDB4NTE3QgorI2RlZmluZSBVU0JERVZJQ0VfU1VQRVJfTUFHSUMgMHg5ZmEyCisjZGVmaW5lIENHUk9VUF9TVVBFUl9NQUdJQyAweDI3ZTBlYgorCisjZGVmaW5lIEZVVEVYRlNfU1VQRVJfTUFHSUMgMHhCQUQxREVBCisjZGVmaW5lIElOT1RJRllGU19TVVBFUl9NQUdJQyAweDJCQUQxREVBCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21ham9yLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbWFqb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDJkNjk4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21ham9yLmgKQEAgLTAsMCArMSwxNzUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX01BSk9SX0gKKyNkZWZpbmUgX0xJTlVYX01BSk9SX0gKKworI2RlZmluZSBVTk5BTUVEX01BSk9SIDAKKyNkZWZpbmUgTUVNX01BSk9SIDEKKyNkZWZpbmUgUkFNRElTS19NQUpPUiAxCisjZGVmaW5lIEZMT1BQWV9NQUpPUiAyCisjZGVmaW5lIFBUWV9NQVNURVJfTUFKT1IgMgorI2RlZmluZSBJREUwX01BSk9SIDMKKyNkZWZpbmUgSERfTUFKT1IgSURFMF9NQUpPUgorI2RlZmluZSBQVFlfU0xBVkVfTUFKT1IgMworI2RlZmluZSBUVFlfTUFKT1IgNAorI2RlZmluZSBUVFlBVVhfTUFKT1IgNQorI2RlZmluZSBMUF9NQUpPUiA2CisjZGVmaW5lIFZDU19NQUpPUiA3CisjZGVmaW5lIExPT1BfTUFKT1IgNworI2RlZmluZSBTQ1NJX0RJU0swX01BSk9SIDgKKyNkZWZpbmUgU0NTSV9UQVBFX01BSk9SIDkKKyNkZWZpbmUgTURfTUFKT1IgOQorI2RlZmluZSBNSVNDX01BSk9SIDEwCisjZGVmaW5lIFNDU0lfQ0RST01fTUFKT1IgMTEKKyNkZWZpbmUgTVVYX01BSk9SIDExICAKKyNkZWZpbmUgWFRfRElTS19NQUpPUiAxMworI2RlZmluZSBJTlBVVF9NQUpPUiAxMworI2RlZmluZSBTT1VORF9NQUpPUiAxNAorI2RlZmluZSBDRFUzMUFfQ0RST01fTUFKT1IgMTUKKyNkZWZpbmUgSk9ZU1RJQ0tfTUFKT1IgMTUKKyNkZWZpbmUgR09MRFNUQVJfQ0RST01fTUFKT1IgMTYKKyNkZWZpbmUgT1BUSUNTX0NEUk9NX01BSk9SIDE3CisjZGVmaW5lIFNBTllPX0NEUk9NX01BSk9SIDE4CisjZGVmaW5lIENZQ0xBREVTX01BSk9SIDE5CisjZGVmaW5lIENZQ0xBREVTQVVYX01BSk9SIDIwCisjZGVmaW5lIE1JVFNVTUlfWF9DRFJPTV9NQUpPUiAyMAorI2RlZmluZSBNRk1fQUNPUk5fTUFKT1IgMjEgIAorI2RlZmluZSBTQ1NJX0dFTkVSSUNfTUFKT1IgMjEKKyNkZWZpbmUgSURFMV9NQUpPUiAyMgorI2RlZmluZSBESUdJQ1VfTUFKT1IgMjIKKyNkZWZpbmUgRElHSV9NQUpPUiAyMworI2RlZmluZSBNSVRTVU1JX0NEUk9NX01BSk9SIDIzCisjZGVmaW5lIENEVTUzNV9DRFJPTV9NQUpPUiAyNAorI2RlZmluZSBTVExfU0VSSUFMTUFKT1IgMjQKKyNkZWZpbmUgTUFUU1VTSElUQV9DRFJPTV9NQUpPUiAyNQorI2RlZmluZSBTVExfQ0FMTE9VVE1BSk9SIDI1CisjZGVmaW5lIE1BVFNVU0hJVEFfQ0RST00yX01BSk9SIDI2CisjZGVmaW5lIFFJQzExN19UQVBFX01BSk9SIDI3CisjZGVmaW5lIE1BVFNVU0hJVEFfQ0RST00zX01BSk9SIDI3CisjZGVmaW5lIE1BVFNVU0hJVEFfQ0RST000X01BSk9SIDI4CisjZGVmaW5lIFNUTF9TSU9NRU1NQUpPUiAyOAorI2RlZmluZSBBQ1NJX01BSk9SIDI4CisjZGVmaW5lIEFaVEVDSF9DRFJPTV9NQUpPUiAyOQorI2RlZmluZSBHUkFQSERFVl9NQUpPUiAyOSAgCisjZGVmaW5lIENNMjA2X0NEUk9NX01BSk9SIDMyCisjZGVmaW5lIElERTJfTUFKT1IgMzMKKyNkZWZpbmUgSURFM19NQUpPUiAzNAorI2RlZmluZSBaODUzMF9NQUpPUiAzNAorI2RlZmluZSBYUFJBTV9NQUpPUiAzNSAgCisjZGVmaW5lIE5FVExJTktfTUFKT1IgMzYKKyNkZWZpbmUgUFMyRVNESV9NQUpPUiAzNgorI2RlZmluZSBJREVUQVBFX01BSk9SIDM3CisjZGVmaW5lIFoyUkFNX01BSk9SIDM3CisjZGVmaW5lIEFQQkxPQ0tfTUFKT1IgMzggIAorI2RlZmluZSBERFZfTUFKT1IgMzkgIAorI2RlZmluZSBOQkRfTUFKT1IgNDMgIAorI2RlZmluZSBSSVNDT004X05PUk1BTF9NQUpPUiA0OAorI2RlZmluZSBEQUM5NjBfTUFKT1IgNDggIAorI2RlZmluZSBSSVNDT004X0NBTExPVVRfTUFKT1IgNDkKKyNkZWZpbmUgTUtJU1NfTUFKT1IgNTUKKyNkZWZpbmUgRFNQNTZLX01BSk9SIDU1ICAKKworI2RlZmluZSBJREU0X01BSk9SIDU2CisjZGVmaW5lIElERTVfTUFKT1IgNTcKKworI2RlZmluZSBTQ1NJX0RJU0sxX01BSk9SIDY1CisjZGVmaW5lIFNDU0lfRElTSzJfTUFKT1IgNjYKKyNkZWZpbmUgU0NTSV9ESVNLM19NQUpPUiA2NworI2RlZmluZSBTQ1NJX0RJU0s0X01BSk9SIDY4CisjZGVmaW5lIFNDU0lfRElTSzVfTUFKT1IgNjkKKyNkZWZpbmUgU0NTSV9ESVNLNl9NQUpPUiA3MAorI2RlZmluZSBTQ1NJX0RJU0s3X01BSk9SIDcxCisKKyNkZWZpbmUgQ09NUEFRX1NNQVJUMl9NQUpPUiA3MgorI2RlZmluZSBDT01QQVFfU01BUlQyX01BSk9SMSA3MworI2RlZmluZSBDT01QQVFfU01BUlQyX01BSk9SMiA3NAorI2RlZmluZSBDT01QQVFfU01BUlQyX01BSk9SMyA3NQorI2RlZmluZSBDT01QQVFfU01BUlQyX01BSk9SNCA3NgorI2RlZmluZSBDT01QQVFfU01BUlQyX01BSk9SNSA3NworI2RlZmluZSBDT01QQVFfU01BUlQyX01BSk9SNiA3OAorI2RlZmluZSBDT01QQVFfU01BUlQyX01BSk9SNyA3OQorCisjZGVmaW5lIFNQRUNJQUxJWF9OT1JNQUxfTUFKT1IgNzUKKyNkZWZpbmUgU1BFQ0lBTElYX0NBTExPVVRfTUFKT1IgNzYKKworI2RlZmluZSBBVVJPUkFfTUFKT1IgNzkKKworI2RlZmluZSBJMk9fTUFKT1IgODAgIAorCisjZGVmaW5lIFNITUlRX01BSk9SIDg1ICAKKyNkZWZpbmUgU0NTSV9DSEFOR0VSX01BSk9SIDg2CisKKyNkZWZpbmUgSURFNl9NQUpPUiA4OAorI2RlZmluZSBJREU3X01BSk9SIDg5CisjZGVmaW5lIElERThfTUFKT1IgOTAKKyNkZWZpbmUgSURFOV9NQUpPUiA5MQorCisjZGVmaW5lIERBU0RfTUFKT1IgOTQKKworI2RlZmluZSBNRElTS19NQUpPUiA5NQorCisjZGVmaW5lIFVCRF9NQUpPUiA5OAorCisjZGVmaW5lIFBQX01BSk9SIDk5CisjZGVmaW5lIEpTRkRfTUFKT1IgOTkKKworI2RlZmluZSBQSE9ORV9NQUpPUiAxMDAKKworI2RlZmluZSBDT01QQVFfQ0lTU19NQUpPUiAxMDQKKyNkZWZpbmUgQ09NUEFRX0NJU1NfTUFKT1IxIDEwNQorI2RlZmluZSBDT01QQVFfQ0lTU19NQUpPUjIgMTA2CisjZGVmaW5lIENPTVBBUV9DSVNTX01BSk9SMyAxMDcKKyNkZWZpbmUgQ09NUEFRX0NJU1NfTUFKT1I0IDEwOAorI2RlZmluZSBDT01QQVFfQ0lTU19NQUpPUjUgMTA5CisjZGVmaW5lIENPTVBBUV9DSVNTX01BSk9SNiAxMTAKKyNkZWZpbmUgQ09NUEFRX0NJU1NfTUFKT1I3IDExMQorCisjZGVmaW5lIFZJT0RBU0RfTUFKT1IgMTEyCisjZGVmaW5lIFZJT0NEX01BSk9SIDExMworCisjZGVmaW5lIEFUQVJBSURfTUFKT1IgMTE0CisKKyNkZWZpbmUgU0NTSV9ESVNLOF9NQUpPUiAxMjgKKyNkZWZpbmUgU0NTSV9ESVNLOV9NQUpPUiAxMjkKKyNkZWZpbmUgU0NTSV9ESVNLMTBfTUFKT1IgMTMwCisjZGVmaW5lIFNDU0lfRElTSzExX01BSk9SIDEzMQorI2RlZmluZSBTQ1NJX0RJU0sxMl9NQUpPUiAxMzIKKyNkZWZpbmUgU0NTSV9ESVNLMTNfTUFKT1IgMTMzCisjZGVmaW5lIFNDU0lfRElTSzE0X01BSk9SIDEzNAorI2RlZmluZSBTQ1NJX0RJU0sxNV9NQUpPUiAxMzUKKworI2RlZmluZSBVTklYOThfUFRZX01BU1RFUl9NQUpPUiAxMjgKKyNkZWZpbmUgVU5JWDk4X1BUWV9NQUpPUl9DT1VOVCA4CisjZGVmaW5lIFVOSVg5OF9QVFlfU0xBVkVfTUFKT1IgKFVOSVg5OF9QVFlfTUFTVEVSX01BSk9SK1VOSVg5OF9QVFlfTUFKT1JfQ09VTlQpCisKKyNkZWZpbmUgUlRGX01BSk9SIDE1MAorI2RlZmluZSBSQVdfTUFKT1IgMTYyCisKKyNkZWZpbmUgVVNCX0FDTV9NQUpPUiAxNjYKKyNkZWZpbmUgVVNCX0FDTV9BVVhfTUFKT1IgMTY3CisjZGVmaW5lIFVTQl9DSEFSX01BSk9SIDE4MAorCisjZGVmaW5lIFZYVk1fTUFKT1IgMTk5ICAKKyNkZWZpbmUgVlhTUEVDX01BSk9SIDIwMCAgCisjZGVmaW5lIFZYRE1QX01BSk9SIDIwMSAgCisKKyNkZWZpbmUgTVNSX01BSk9SIDIwMgorI2RlZmluZSBDUFVJRF9NQUpPUiAyMDMKKworI2RlZmluZSBPU1NUX01BSk9SIDIwNiAgCisKKyNkZWZpbmUgSUJNX1RUWTMyNzBfTUFKT1IgMjI3CisjZGVmaW5lIElCTV9GUzMyNzBfTUFKT1IgMjI4CisKKyNkZWZpbmUgVklPVEFQRV9NQUpPUiAyMzAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbWMxNDY4MThydGMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tYzE0NjgxOHJ0Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0NDM2ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbWMxNDY4MThydGMuaApAQCAtMCwwICsxLDc5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9NQzE0NjgxOFJUQ19ICisjZGVmaW5lIF9NQzE0NjgxOFJUQ19ICisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9ydGMuaD4gIAorI2luY2x1ZGUgPGFzbS9tYzE0NjgxOHJ0Yy5oPiAgCisKKyNkZWZpbmUgUlRDX1NFQ09ORFMgMAorI2RlZmluZSBSVENfU0VDT05EU19BTEFSTSAxCisjZGVmaW5lIFJUQ19NSU5VVEVTIDIKKyNkZWZpbmUgUlRDX01JTlVURVNfQUxBUk0gMworI2RlZmluZSBSVENfSE9VUlMgNAorI2RlZmluZSBSVENfSE9VUlNfQUxBUk0gNQorCisjZGVmaW5lIFJUQ19BTEFSTV9ET05UX0NBUkUgMHhDMAorCisjZGVmaW5lIFJUQ19EQVlfT0ZfV0VFSyA2CisjZGVmaW5lIFJUQ19EQVlfT0ZfTU9OVEggNworI2RlZmluZSBSVENfTU9OVEggOAorI2RlZmluZSBSVENfWUVBUiA5CisKKyNkZWZpbmUgUlRDX1JFR19BIDEwCisjZGVmaW5lIFJUQ19SRUdfQiAxMQorI2RlZmluZSBSVENfUkVHX0MgMTIKKyNkZWZpbmUgUlRDX1JFR19EIDEzCisKKyNkZWZpbmUgUlRDX0ZSRVFfU0VMRUNUIFJUQ19SRUdfQQorCisjZGVmaW5lIFJUQ19VSVAgMHg4MAorI2RlZmluZSBSVENfRElWX0NUTCAweDcwCisKKyNkZWZpbmUgUlRDX1JFRl9DTENLXzRNSFogMHgwMAorI2RlZmluZSBSVENfUkVGX0NMQ0tfMU1IWiAweDEwCisjZGVmaW5lIFJUQ19SRUZfQ0xDS18zMktIWiAweDIwCisKKyNkZWZpbmUgUlRDX0RJVl9SRVNFVDEgMHg2MAorI2RlZmluZSBSVENfRElWX1JFU0VUMiAweDcwCisKKyNkZWZpbmUgUlRDX1JBVEVfU0VMRUNUIDB4MEYKKworI2RlZmluZSBSVENfQ09OVFJPTCBSVENfUkVHX0IKKyNkZWZpbmUgUlRDX1NFVCAweDgwICAKKyNkZWZpbmUgUlRDX1BJRSAweDQwICAKKyNkZWZpbmUgUlRDX0FJRSAweDIwICAKKyNkZWZpbmUgUlRDX1VJRSAweDEwICAKKyNkZWZpbmUgUlRDX1NRV0UgMHgwOCAgCisjZGVmaW5lIFJUQ19ETV9CSU5BUlkgMHgwNCAgCisjZGVmaW5lIFJUQ18yNEggMHgwMiAgCisjZGVmaW5lIFJUQ19EU1RfRU4gMHgwMSAgCisKKyNkZWZpbmUgUlRDX0lOVFJfRkxBR1MgUlRDX1JFR19DCisKKyNkZWZpbmUgUlRDX0lSUUYgMHg4MCAgCisjZGVmaW5lIFJUQ19QRiAweDQwCisjZGVmaW5lIFJUQ19BRiAweDIwCisjZGVmaW5lIFJUQ19VRiAweDEwCisKKyNkZWZpbmUgUlRDX1ZBTElEIFJUQ19SRUdfRAorI2RlZmluZSBSVENfVlJUIDB4ODAgIAorCisjaWZuZGVmIEFSQ0hfUlRDX0xPQ0FUSU9OCisKKyNkZWZpbmUgUlRDX0lPX0VYVEVOVCAweDgKKyNkZWZpbmUgUlRDX0lPTUFQUEVEIDEgIAorCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbWNhLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbWNhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZiZmMyYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tY2EuaApAQCAtMCwwICsxLDc0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9NQ0FfSAorI2RlZmluZSBfTElOVVhfTUNBX0gKKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorCisjZGVmaW5lIE1DQV9idXMgMAorCit0eXBlZGVmIGludCAoKk1DQV9Qcm9jRm4pKGNoYXIqIGJ1ZiwgaW50IHNsb3QsIHZvaWQqIGRldik7CisKK2VudW0gTUNBX0FkYXB0ZXJTdGF0dXMgeworIE1DQV9BREFQVEVSX05PUk1BTCA9IDAsCisgTUNBX0FEQVBURVJfTk9ORSA9IDEsCisgTUNBX0FEQVBURVJfRElTQUJMRUQgPSAyLAorIE1DQV9BREFQVEVSX0VSUk9SID0gMworfTsKKworc3RydWN0IG1jYV9kZXZpY2UgeworIHU2NCBkbWFfbWFzazsKKyBpbnQgcG9zX2lkOworIGludCBzbG90OworCisgaW50IGluZGV4OworCisgaW50IGRyaXZlcl9sb2FkZWQ7CisKKyB1bnNpZ25lZCBjaGFyIHBvc1s4XTsKKworIHNob3J0IHBvc19yZWdpc3RlcjsKKworIGVudW0gTUNBX0FkYXB0ZXJTdGF0dXMgc3RhdHVzOworIHN0cnVjdCBkZXZpY2UgZGV2OworIGNoYXIgbmFtZVszMl07Cit9OworI2RlZmluZSB0b19tY2FfZGV2aWNlKG1kZXYpIGNvbnRhaW5lcl9vZihtZGV2LCBzdHJ1Y3QgbWNhX2RldmljZSwgZGV2KQorCitzdHJ1Y3QgbWNhX2J1c19hY2Nlc3Nvcl9mdW5jdGlvbnMgeworIHVuc2lnbmVkIGNoYXIgKCptY2FfcmVhZF9wb3MpKHN0cnVjdCBtY2FfZGV2aWNlICosIGludCByZWcpOworIHZvaWQgKCptY2Ffd3JpdGVfcG9zKShzdHJ1Y3QgbWNhX2RldmljZSAqLCBpbnQgcmVnLAorIHVuc2lnbmVkIGNoYXIgYnl0ZSk7CisgaW50ICgqbWNhX3RyYW5zZm9ybV9pcnEpKHN0cnVjdCBtY2FfZGV2aWNlICosIGludCBpcnEpOworIGludCAoKm1jYV90cmFuc2Zvcm1faW9wb3J0KShzdHJ1Y3QgbWNhX2RldmljZSAqLAorIGludCByZWdpb24pOworIHZvaWQgKiAoKm1jYV90cmFuc2Zvcm1fbWVtb3J5KShzdHJ1Y3QgbWNhX2RldmljZSAqLAorIHZvaWQgKm1lbW9yeSk7Cit9OworCitzdHJ1Y3QgbWNhX2J1cyB7CisgdTY0IGRlZmF1bHRfZG1hX21hc2s7CisgaW50IG51bWJlcjsKKyBzdHJ1Y3QgbWNhX2J1c19hY2Nlc3Nvcl9mdW5jdGlvbnMgZjsKKyBzdHJ1Y3QgZGV2aWNlIGRldjsKKyBjaGFyIG5hbWVbMzJdOworfTsKKyNkZWZpbmUgdG9fbWNhX2J1cyhtZGV2KSBjb250YWluZXJfb2YobWRldiwgc3RydWN0IG1jYV9idXMsIGRldikKKworc3RydWN0IG1jYV9kcml2ZXIgeworIGNvbnN0IHNob3J0ICppZF90YWJsZTsKKyB2b2lkICpkcml2ZXJfZGF0YTsKKyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBkcml2ZXI7Cit9OworI2RlZmluZSB0b19tY2FfZHJpdmVyKG1kcml2ZXIpIGNvbnRhaW5lcl9vZihtZHJpdmVyLCBzdHJ1Y3QgbWNhX2RyaXZlciwgZHJpdmVyKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tZW1wb2xpY3kuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tZW1wb2xpY3kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjdiMmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21lbXBvbGljeS5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX01FTVBPTElDWV9ICisjZGVmaW5lIF9MSU5VWF9NRU1QT0xJQ1lfSCAxCisKKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorCisjZGVmaW5lIE1QT0xfREVGQVVMVCAwCisjZGVmaW5lIE1QT0xfUFJFRkVSUkVEIDEKKyNkZWZpbmUgTVBPTF9CSU5EIDIKKyNkZWZpbmUgTVBPTF9JTlRFUkxFQVZFIDMKKworI2RlZmluZSBNUE9MX01BWCBNUE9MX0lOVEVSTEVBVkUKKworI2RlZmluZSBNUE9MX0ZfTk9ERSAoMTw8MCkgIAorI2RlZmluZSBNUE9MX0ZfQUREUiAoMTw8MSkgIAorCisjZGVmaW5lIE1QT0xfTUZfU1RSSUNUICgxPDwwKSAgCisjZGVmaW5lIE1QT0xfTUZfTU9WRSAoMTw8MSkgIAorI2RlZmluZSBNUE9MX01GX01PVkVfQUxMICgxPDwyKSAgCisjZGVmaW5lIE1QT0xfTUZfSU5URVJOQUwgKDE8PDMpICAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbWVtcG9vbC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21lbXBvb2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTI0MzJiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21lbXBvb2wuaApAQCAtMCwwICsxLDM0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9NRU1QT09MX0gKKyNkZWZpbmUgX0xJTlVYX01FTVBPT0xfSAorCisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorCitzdHJ1Y3Qga21lbV9jYWNoZTsKKwordHlwZWRlZiB2b2lkICogKG1lbXBvb2xfYWxsb2NfdCkoZ2ZwX3QgZ2ZwX21hc2ssIHZvaWQgKnBvb2xfZGF0YSk7Cit0eXBlZGVmIHZvaWQgKG1lbXBvb2xfZnJlZV90KSh2b2lkICplbGVtZW50LCB2b2lkICpwb29sX2RhdGEpOworCit0eXBlZGVmIHN0cnVjdCBtZW1wb29sX3MgeworIHNwaW5sb2NrX3QgbG9jazsKKyBpbnQgbWluX25yOworIGludCBjdXJyX25yOworIHZvaWQgKiplbGVtZW50czsKKworIHZvaWQgKnBvb2xfZGF0YTsKKyBtZW1wb29sX2FsbG9jX3QgKmFsbG9jOworIG1lbXBvb2xfZnJlZV90ICpmcmVlOworIHdhaXRfcXVldWVfaGVhZF90IHdhaXQ7Cit9IG1lbXBvb2xfdDsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbWlzY2RldmljZS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21pc2NkZXZpY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTc5NjBhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21pc2NkZXZpY2UuaApAQCAtMCwwICsxLDU3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9NSVNDREVWSUNFX0gKKyNkZWZpbmUgX0xJTlVYX01JU0NERVZJQ0VfSAorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CisKKyNkZWZpbmUgUFNNT1VTRV9NSU5PUiAxCisjZGVmaW5lIE1TX0JVU01PVVNFX01JTk9SIDIKKyNkZWZpbmUgQVRJWExfQlVTTU9VU0VfTUlOT1IgMworCisjZGVmaW5lIEFUQVJJTU9VU0VfTUlOT1IgNQorI2RlZmluZSBTVU5fTU9VU0VfTUlOT1IgNgorI2RlZmluZSBBUE9MTE9fTU9VU0VfTUlOT1IgNworI2RlZmluZSBQQzExMFBBRF9NSU5PUiA5CisKKyNkZWZpbmUgV0FUQ0hET0dfTUlOT1IgMTMwICAKKyNkZWZpbmUgVEVNUF9NSU5PUiAxMzEgIAorI2RlZmluZSBSVENfTUlOT1IgMTM1CisjZGVmaW5lIEVGSV9SVENfTUlOT1IgMTM2ICAKKyNkZWZpbmUgU1VOX09QRU5QUk9NX01JTk9SIDEzOQorI2RlZmluZSBETUFQSV9NSU5PUiAxNDAgIAorI2RlZmluZSBOVlJBTV9NSU5PUiAxNDQKKyNkZWZpbmUgU0dJX01NVElNRVIgMTUzCisjZGVmaW5lIFNUT1JFX1FVRVVFX01JTk9SIDE1NQorI2RlZmluZSBJMk9fTUlOT1IgMTY2CisjZGVmaW5lIE1JQ1JPQ09ERV9NSU5PUiAxODQKKyNkZWZpbmUgTVdBVkVfTUlOT1IgMjE5ICAKKyNkZWZpbmUgTVBUX01JTk9SIDIyMAorI2RlZmluZSBNSVNDX0RZTkFNSUNfTUlOT1IgMjU1CisKKyNkZWZpbmUgVFVOX01JTk9SIDIwMAorI2RlZmluZSBIUEVUX01JTk9SIDIyOAorCitzdHJ1Y3QgZGV2aWNlOworc3RydWN0IGNsYXNzX2RldmljZTsKKworc3RydWN0IG1pc2NkZXZpY2UgeworIGludCBtaW5vcjsKKyBjb25zdCBjaGFyICpuYW1lOworIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZvcHM7Cisgc3RydWN0IGxpc3RfaGVhZCBsaXN0OworIHN0cnVjdCBkZXZpY2UgKmRldjsKKyBzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzczsKK307CisKKyNkZWZpbmUgTU9EVUxFX0FMSUFTX01JU0NERVYobWlub3IpICAgTU9EVUxFX0FMSUFTKCJjaGFyLW1ham9yLSIgX19zdHJpbmdpZnkoTUlTQ19NQUpPUikgICAiLSIgX19zdHJpbmdpZnkobWlub3IpKQorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbW0uaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlYTI5M2IKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbW0uaApAQCAtMCwwICsxLDE5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9NTV9ICisjZGVmaW5lIF9MSU5VWF9NTV9ICisKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tbWMvY2FyZC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21tYy9jYXJkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRhZmUyMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tbWMvY2FyZC5oCkBAIC0wLDAgKzEsMTAwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIExJTlVYX01NQ19DQVJEX0gKKyNkZWZpbmUgTElOVVhfTU1DX0NBUkRfSAorCisjaW5jbHVkZSA8bGludXgvbW1jL21tYy5oPgorCitzdHJ1Y3QgbW1jX2NpZCB7CisgdW5zaWduZWQgaW50IG1hbmZpZDsKKyBjaGFyIHByb2RfbmFtZVs4XTsKKyB1bnNpZ25lZCBpbnQgc2VyaWFsOworIHVuc2lnbmVkIHNob3J0IG9lbWlkOworIHVuc2lnbmVkIHNob3J0IHllYXI7CisgdW5zaWduZWQgY2hhciBod3JldjsKKyB1bnNpZ25lZCBjaGFyIGZ3cmV2OworIHVuc2lnbmVkIGNoYXIgbW9udGg7Cit9OworCitzdHJ1Y3QgbW1jX2NzZCB7CisgdW5zaWduZWQgY2hhciBtbWNhX3ZzbjsKKyB1bnNpZ25lZCBzaG9ydCBjbWRjbGFzczsKKyB1bnNpZ25lZCBzaG9ydCB0YWNjX2Nsa3M7CisgdW5zaWduZWQgaW50IHRhY2NfbnM7CisgdW5zaWduZWQgaW50IHIyd19mYWN0b3I7CisgdW5zaWduZWQgaW50IG1heF9kdHI7CisgdW5zaWduZWQgaW50IHJlYWRfYmxrYml0czsKKyB1bnNpZ25lZCBpbnQgd3JpdGVfYmxrYml0czsKKyB1bnNpZ25lZCBpbnQgY2FwYWNpdHk7CisgdW5zaWduZWQgaW50IHJlYWRfcGFydGlhbDoxLAorIHJlYWRfbWlzYWxpZ246MSwKKyB3cml0ZV9wYXJ0aWFsOjEsCisgd3JpdGVfbWlzYWxpZ246MTsKK307CisKK3N0cnVjdCBzZF9zY3IgeworIHVuc2lnbmVkIGNoYXIgc2RhX3ZzbjsKKyB1bnNpZ25lZCBjaGFyIGJ1c193aWR0aHM7CisjZGVmaW5lIFNEX1NDUl9CVVNfV0lEVEhfMSAoMTw8MCkKKyNkZWZpbmUgU0RfU0NSX0JVU19XSURUSF80ICgxPDwyKQorfTsKKworc3RydWN0IG1tY19ob3N0OworCitzdHJ1Y3QgbW1jX2NhcmQgeworIHN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKKyBzdHJ1Y3QgbW1jX2hvc3QgKmhvc3Q7Cisgc3RydWN0IGRldmljZSBkZXY7CisgdW5zaWduZWQgaW50IHJjYTsKKyB1bnNpZ25lZCBpbnQgc3RhdGU7CisjZGVmaW5lIE1NQ19TVEFURV9QUkVTRU5UICgxPDwwKSAgCisjZGVmaW5lIE1NQ19TVEFURV9ERUFEICgxPDwxKSAgCisjZGVmaW5lIE1NQ19TVEFURV9CQUQgKDE8PDIpICAKKyNkZWZpbmUgTU1DX1NUQVRFX1NEQ0FSRCAoMTw8MykgIAorI2RlZmluZSBNTUNfU1RBVEVfUkVBRE9OTFkgKDE8PDQpICAKKyB1MzIgcmF3X2NpZFs0XTsKKyB1MzIgcmF3X2NzZFs0XTsKKyB1MzIgcmF3X3NjclsyXTsKKyBzdHJ1Y3QgbW1jX2NpZCBjaWQ7Cisgc3RydWN0IG1tY19jc2QgY3NkOworIHN0cnVjdCBzZF9zY3Igc2NyOworfTsKKworI2RlZmluZSBtbWNfY2FyZF9wcmVzZW50KGMpICgoYyktPnN0YXRlICYgTU1DX1NUQVRFX1BSRVNFTlQpCisjZGVmaW5lIG1tY19jYXJkX2RlYWQoYykgKChjKS0+c3RhdGUgJiBNTUNfU1RBVEVfREVBRCkKKyNkZWZpbmUgbW1jX2NhcmRfYmFkKGMpICgoYyktPnN0YXRlICYgTU1DX1NUQVRFX0JBRCkKKyNkZWZpbmUgbW1jX2NhcmRfc2QoYykgKChjKS0+c3RhdGUgJiBNTUNfU1RBVEVfU0RDQVJEKQorI2RlZmluZSBtbWNfY2FyZF9yZWFkb25seShjKSAoKGMpLT5zdGF0ZSAmIE1NQ19TVEFURV9SRUFET05MWSkKKworI2RlZmluZSBtbWNfY2FyZF9zZXRfcHJlc2VudChjKSAoKGMpLT5zdGF0ZSB8PSBNTUNfU1RBVEVfUFJFU0VOVCkKKyNkZWZpbmUgbW1jX2NhcmRfc2V0X2RlYWQoYykgKChjKS0+c3RhdGUgfD0gTU1DX1NUQVRFX0RFQUQpCisjZGVmaW5lIG1tY19jYXJkX3NldF9iYWQoYykgKChjKS0+c3RhdGUgfD0gTU1DX1NUQVRFX0JBRCkKKyNkZWZpbmUgbW1jX2NhcmRfc2V0X3NkKGMpICgoYyktPnN0YXRlIHw9IE1NQ19TVEFURV9TRENBUkQpCisjZGVmaW5lIG1tY19jYXJkX3NldF9yZWFkb25seShjKSAoKGMpLT5zdGF0ZSB8PSBNTUNfU1RBVEVfUkVBRE9OTFkpCisKKyNkZWZpbmUgbW1jX2NhcmRfbmFtZShjKSAoKGMpLT5jaWQucHJvZF9uYW1lKQorI2RlZmluZSBtbWNfY2FyZF9pZChjKSAoKGMpLT5kZXYuYnVzX2lkKQorCisjZGVmaW5lIG1tY19saXN0X3RvX2NhcmQobCkgY29udGFpbmVyX29mKGwsIHN0cnVjdCBtbWNfY2FyZCwgbm9kZSkKKyNkZWZpbmUgbW1jX2dldF9kcnZkYXRhKGMpIGRldl9nZXRfZHJ2ZGF0YSgmKGMpLT5kZXYpCisjZGVmaW5lIG1tY19zZXRfZHJ2ZGF0YShjLGQpIGRldl9zZXRfZHJ2ZGF0YSgmKGMpLT5kZXYsIGQpCisKK3N0cnVjdCBtbWNfZHJpdmVyIHsKKyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBkcnY7CisgaW50ICgqcHJvYmUpKHN0cnVjdCBtbWNfY2FyZCAqKTsKKyB2b2lkICgqcmVtb3ZlKShzdHJ1Y3QgbW1jX2NhcmQgKik7CisgaW50ICgqc3VzcGVuZCkoc3RydWN0IG1tY19jYXJkICosIHBtX21lc3NhZ2VfdCk7CisgaW50ICgqcmVzdW1lKShzdHJ1Y3QgbW1jX2NhcmQgKik7Cit9OworCisjZGVmaW5lIG1tY19jYXJkX3JlbGVhc2VfaG9zdChjKSBtbWNfcmVsZWFzZV9ob3N0KChjKS0+aG9zdCkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21tYy9ob3N0LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbW1jL2hvc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDMzNjI2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21tYy9ob3N0LmgKQEAgLTAsMCArMSwxMjAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgTElOVVhfTU1DX0hPU1RfSAorI2RlZmluZSBMSU5VWF9NTUNfSE9TVF9ICisKKyNpbmNsdWRlIDxsaW51eC9tbWMvbW1jLmg+CisKK3N0cnVjdCBtbWNfaW9zIHsKKyB1bnNpZ25lZCBpbnQgY2xvY2s7CisgdW5zaWduZWQgc2hvcnQgdmRkOworCisjZGVmaW5lIE1NQ19WRERfMTUwIDAKKyNkZWZpbmUgTU1DX1ZERF8xNTUgMQorI2RlZmluZSBNTUNfVkREXzE2MCAyCisjZGVmaW5lIE1NQ19WRERfMTY1IDMKKyNkZWZpbmUgTU1DX1ZERF8xNzAgNAorI2RlZmluZSBNTUNfVkREXzE4MCA1CisjZGVmaW5lIE1NQ19WRERfMTkwIDYKKyNkZWZpbmUgTU1DX1ZERF8yMDAgNworI2RlZmluZSBNTUNfVkREXzIxMCA4CisjZGVmaW5lIE1NQ19WRERfMjIwIDkKKyNkZWZpbmUgTU1DX1ZERF8yMzAgMTAKKyNkZWZpbmUgTU1DX1ZERF8yNDAgMTEKKyNkZWZpbmUgTU1DX1ZERF8yNTAgMTIKKyNkZWZpbmUgTU1DX1ZERF8yNjAgMTMKKyNkZWZpbmUgTU1DX1ZERF8yNzAgMTQKKyNkZWZpbmUgTU1DX1ZERF8yODAgMTUKKyNkZWZpbmUgTU1DX1ZERF8yOTAgMTYKKyNkZWZpbmUgTU1DX1ZERF8zMDAgMTcKKyNkZWZpbmUgTU1DX1ZERF8zMTAgMTgKKyNkZWZpbmUgTU1DX1ZERF8zMjAgMTkKKyNkZWZpbmUgTU1DX1ZERF8zMzAgMjAKKyNkZWZpbmUgTU1DX1ZERF8zNDAgMjEKKyNkZWZpbmUgTU1DX1ZERF8zNTAgMjIKKyNkZWZpbmUgTU1DX1ZERF8zNjAgMjMKKworIHVuc2lnbmVkIGNoYXIgYnVzX21vZGU7CisKKyNkZWZpbmUgTU1DX0JVU01PREVfT1BFTkRSQUlOIDEKKyNkZWZpbmUgTU1DX0JVU01PREVfUFVTSFBVTEwgMgorCisgdW5zaWduZWQgY2hhciBjaGlwX3NlbGVjdDsKKworI2RlZmluZSBNTUNfQ1NfRE9OVENBUkUgMAorI2RlZmluZSBNTUNfQ1NfSElHSCAxCisjZGVmaW5lIE1NQ19DU19MT1cgMgorCisgdW5zaWduZWQgY2hhciBwb3dlcl9tb2RlOworCisjZGVmaW5lIE1NQ19QT1dFUl9PRkYgMAorI2RlZmluZSBNTUNfUE9XRVJfVVAgMQorI2RlZmluZSBNTUNfUE9XRVJfT04gMgorCisgdW5zaWduZWQgY2hhciBidXNfd2lkdGg7CisKKyNkZWZpbmUgTU1DX0JVU19XSURUSF8xIDAKKyNkZWZpbmUgTU1DX0JVU19XSURUSF80IDIKK307CisKK3N0cnVjdCBtbWNfaG9zdF9vcHMgeworIHZvaWQgKCpyZXF1ZXN0KShzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfcmVxdWVzdCAqcmVxKTsKKyB2b2lkICgqc2V0X2lvcykoc3RydWN0IG1tY19ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2lvcyAqaW9zKTsKKyBpbnQgKCpnZXRfcm8pKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCk7Cit9OworCitzdHJ1Y3QgbW1jX2NhcmQ7CitzdHJ1Y3QgZGV2aWNlOworCitzdHJ1Y3QgbW1jX2hvc3QgeworIHN0cnVjdCBkZXZpY2UgKmRldjsKKyBzdHJ1Y3QgY2xhc3NfZGV2aWNlIGNsYXNzX2RldjsKKyBpbnQgaW5kZXg7CisgY29uc3Qgc3RydWN0IG1tY19ob3N0X29wcyAqb3BzOworIHVuc2lnbmVkIGludCBmX21pbjsKKyB1bnNpZ25lZCBpbnQgZl9tYXg7CisgdTMyIG9jcl9hdmFpbDsKKworIHVuc2lnbmVkIGxvbmcgY2FwczsKKworI2RlZmluZSBNTUNfQ0FQXzRfQklUX0RBVEEgKDEgPDwgMCkgIAorCisgdW5zaWduZWQgaW50IG1heF9zZWdfc2l6ZTsKKyB1bnNpZ25lZCBzaG9ydCBtYXhfaHdfc2VnczsKKyB1bnNpZ25lZCBzaG9ydCBtYXhfcGh5c19zZWdzOworIHVuc2lnbmVkIHNob3J0IG1heF9zZWN0b3JzOworIHVuc2lnbmVkIHNob3J0IHVudXNlZDsKKworIHN0cnVjdCBtbWNfaW9zIGlvczsKKyB1MzIgb2NyOworCisgdW5zaWduZWQgaW50IG1vZGU7CisjZGVmaW5lIE1NQ19NT0RFX01NQyAwCisjZGVmaW5lIE1NQ19NT0RFX1NEIDEKKworIHN0cnVjdCBsaXN0X2hlYWQgY2FyZHM7CisKKyB3YWl0X3F1ZXVlX2hlYWRfdCB3cTsKKyBzcGlubG9ja190IGxvY2s7Cisgc3RydWN0IG1tY19jYXJkICpjYXJkX2J1c3k7Cisgc3RydWN0IG1tY19jYXJkICpjYXJkX3NlbGVjdGVkOworCisgc3RydWN0IHdvcmtfc3RydWN0IGRldGVjdDsKKworIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZVswXSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7Cit9OworCisjZGVmaW5lIG1tY19kZXYoeCkgKCh4KS0+ZGV2KQorI2RlZmluZSBtbWNfaG9zdG5hbWUoeCkgKCh4KS0+Y2xhc3NfZGV2LmNsYXNzX2lkKQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21tYy9tbWMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tbWMvbW1jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg5NzE0YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tbWMvbW1jLmgKQEAgLTAsMCArMSw5OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBNTUNfSAorI2RlZmluZSBNTUNfSAorCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorCitzdHJ1Y3QgcmVxdWVzdDsKK3N0cnVjdCBtbWNfZGF0YTsKK3N0cnVjdCBtbWNfcmVxdWVzdDsKKworc3RydWN0IG1tY19jb21tYW5kIHsKKyB1MzIgb3Bjb2RlOworIHUzMiBhcmc7CisgdTMyIHJlc3BbNF07CisgdW5zaWduZWQgaW50IGZsYWdzOworI2RlZmluZSBNTUNfUlNQX1BSRVNFTlQgKDEgPDwgMCkKKyNkZWZpbmUgTU1DX1JTUF8xMzYgKDEgPDwgMSkgIAorI2RlZmluZSBNTUNfUlNQX0NSQyAoMSA8PCAyKSAgCisjZGVmaW5lIE1NQ19SU1BfQlVTWSAoMSA8PCAzKSAgCisjZGVmaW5lIE1NQ19SU1BfT1BDT0RFICgxIDw8IDQpICAKKyNkZWZpbmUgTU1DX0NNRF9NQVNLICgzIDw8IDUpICAKKyNkZWZpbmUgTU1DX0NNRF9BQyAoMCA8PCA1KQorI2RlZmluZSBNTUNfQ01EX0FEVEMgKDEgPDwgNSkKKyNkZWZpbmUgTU1DX0NNRF9CQyAoMiA8PCA1KQorI2RlZmluZSBNTUNfQ01EX0JDUiAoMyA8PCA1KQorCisjZGVmaW5lIE1NQ19SU1BfTk9ORSAoMCkKKyNkZWZpbmUgTU1DX1JTUF9SMSAoTU1DX1JTUF9QUkVTRU5UfE1NQ19SU1BfQ1JDfE1NQ19SU1BfT1BDT0RFKQorI2RlZmluZSBNTUNfUlNQX1IxQiAoTU1DX1JTUF9QUkVTRU5UfE1NQ19SU1BfQ1JDfE1NQ19SU1BfT1BDT0RFfE1NQ19SU1BfQlVTWSkKKyNkZWZpbmUgTU1DX1JTUF9SMiAoTU1DX1JTUF9QUkVTRU5UfE1NQ19SU1BfMTM2fE1NQ19SU1BfQ1JDKQorI2RlZmluZSBNTUNfUlNQX1IzIChNTUNfUlNQX1BSRVNFTlQpCisjZGVmaW5lIE1NQ19SU1BfUjYgKE1NQ19SU1BfUFJFU0VOVHxNTUNfUlNQX0NSQykKKworI2RlZmluZSBtbWNfcmVzcF90eXBlKGNtZCkgKChjbWQpLT5mbGFncyAmIChNTUNfUlNQX1BSRVNFTlR8TU1DX1JTUF8xMzZ8TU1DX1JTUF9DUkN8TU1DX1JTUF9CVVNZfE1NQ19SU1BfT1BDT0RFKSkKKworI2RlZmluZSBtbWNfY21kX3R5cGUoY21kKSAoKGNtZCktPmZsYWdzICYgTU1DX0NNRF9NQVNLKQorCisgdW5zaWduZWQgaW50IHJldHJpZXM7CisgdW5zaWduZWQgaW50IGVycm9yOworCisjZGVmaW5lIE1NQ19FUlJfTk9ORSAwCisjZGVmaW5lIE1NQ19FUlJfVElNRU9VVCAxCisjZGVmaW5lIE1NQ19FUlJfQkFEQ1JDIDIKKyNkZWZpbmUgTU1DX0VSUl9GSUZPIDMKKyNkZWZpbmUgTU1DX0VSUl9GQUlMRUQgNAorI2RlZmluZSBNTUNfRVJSX0lOVkFMSUQgNQorCisgc3RydWN0IG1tY19kYXRhICpkYXRhOworIHN0cnVjdCBtbWNfcmVxdWVzdCAqbXJxOworfTsKKworc3RydWN0IG1tY19kYXRhIHsKKyB1bnNpZ25lZCBpbnQgdGltZW91dF9uczsKKyB1bnNpZ25lZCBpbnQgdGltZW91dF9jbGtzOworIHVuc2lnbmVkIGludCBibGtzel9iaXRzOworIHVuc2lnbmVkIGludCBibGtzejsKKyB1bnNpZ25lZCBpbnQgYmxvY2tzOworIHVuc2lnbmVkIGludCBlcnJvcjsKKyB1bnNpZ25lZCBpbnQgZmxhZ3M7CisKKyNkZWZpbmUgTU1DX0RBVEFfV1JJVEUgKDEgPDwgOCkKKyNkZWZpbmUgTU1DX0RBVEFfUkVBRCAoMSA8PCA5KQorI2RlZmluZSBNTUNfREFUQV9TVFJFQU0gKDEgPDwgMTApCisjZGVmaW5lIE1NQ19EQVRBX01VTFRJICgxIDw8IDExKQorCisgdW5zaWduZWQgaW50IGJ5dGVzX3hmZXJlZDsKKworIHN0cnVjdCBtbWNfY29tbWFuZCAqc3RvcDsKKyBzdHJ1Y3QgbW1jX3JlcXVlc3QgKm1ycTsKKworIHVuc2lnbmVkIGludCBzZ19sZW47Cisgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKK307CisKK3N0cnVjdCBtbWNfcmVxdWVzdCB7Cisgc3RydWN0IG1tY19jb21tYW5kICpjbWQ7Cisgc3RydWN0IG1tY19kYXRhICpkYXRhOworIHN0cnVjdCBtbWNfY29tbWFuZCAqc3RvcDsKKworIHZvaWQgKmRvbmVfZGF0YTsKKyB2b2lkICgqZG9uZSkoc3RydWN0IG1tY19yZXF1ZXN0ICopOworfTsKKworc3RydWN0IG1tY19ob3N0Oworc3RydWN0IG1tY19jYXJkOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tbXpvbmUuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tbXpvbmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODEzODJlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21tem9uZS5oCkBAIC0wLDAgKzEsMTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX01NWk9ORV9ICisjZGVmaW5lIF9MSU5VWF9NTVpPTkVfSAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tb2RfZGV2aWNldGFibGUuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tb2RfZGV2aWNldGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2MxZGU4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21vZF9kZXZpY2V0YWJsZS5oCkBAIC0wLDAgKzEsMjA5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIExJTlVYX01PRF9ERVZJQ0VUQUJMRV9ICisjZGVmaW5lIExJTlVYX01PRF9ERVZJQ0VUQUJMRV9ICisKKyNkZWZpbmUgUENJX0FOWV9JRCAofjApCisKK3N0cnVjdCBwY2lfZGV2aWNlX2lkIHsKKyBfX3UzMiB2ZW5kb3IsIGRldmljZTsKKyBfX3UzMiBzdWJ2ZW5kb3IsIHN1YmRldmljZTsKKyBfX3UzMiBjbGFzcywgY2xhc3NfbWFzazsKKyBrZXJuZWxfdWxvbmdfdCBkcml2ZXJfZGF0YTsKK307CisKKyNkZWZpbmUgSUVFRTEzOTRfTUFUQ0hfVkVORE9SX0lEIDB4MDAwMQorI2RlZmluZSBJRUVFMTM5NF9NQVRDSF9NT0RFTF9JRCAweDAwMDIKKyNkZWZpbmUgSUVFRTEzOTRfTUFUQ0hfU1BFQ0lGSUVSX0lEIDB4MDAwNAorI2RlZmluZSBJRUVFMTM5NF9NQVRDSF9WRVJTSU9OIDB4MDAwOAorCitzdHJ1Y3QgaWVlZTEzOTRfZGV2aWNlX2lkIHsKKyBfX3UzMiBtYXRjaF9mbGFnczsKKyBfX3UzMiB2ZW5kb3JfaWQ7CisgX191MzIgbW9kZWxfaWQ7CisgX191MzIgc3BlY2lmaWVyX2lkOworIF9fdTMyIHZlcnNpb247Cisga2VybmVsX3Vsb25nX3QgZHJpdmVyX2RhdGEKKyBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKHNpemVvZihrZXJuZWxfdWxvbmdfdCkpKSk7Cit9OworCitzdHJ1Y3QgdXNiX2RldmljZV9pZCB7CisKKyBfX3UxNiBtYXRjaF9mbGFnczsKKworIF9fdTE2IGlkVmVuZG9yOworIF9fdTE2IGlkUHJvZHVjdDsKKyBfX3UxNiBiY2REZXZpY2VfbG87CisgX191MTYgYmNkRGV2aWNlX2hpOworCisgX191OCBiRGV2aWNlQ2xhc3M7CisgX191OCBiRGV2aWNlU3ViQ2xhc3M7CisgX191OCBiRGV2aWNlUHJvdG9jb2w7CisKKyBfX3U4IGJJbnRlcmZhY2VDbGFzczsKKyBfX3U4IGJJbnRlcmZhY2VTdWJDbGFzczsKKyBfX3U4IGJJbnRlcmZhY2VQcm90b2NvbDsKKworIGtlcm5lbF91bG9uZ190IGRyaXZlcl9pbmZvOworfTsKKworI2RlZmluZSBVU0JfREVWSUNFX0lEX01BVENIX1ZFTkRPUiAweDAwMDEKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9NQVRDSF9QUk9EVUNUIDB4MDAwMgorI2RlZmluZSBVU0JfREVWSUNFX0lEX01BVENIX0RFVl9MTyAweDAwMDQKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZfSEkgMHgwMDA4CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWX0NMQVNTIDB4MDAxMAorI2RlZmluZSBVU0JfREVWSUNFX0lEX01BVENIX0RFVl9TVUJDTEFTUyAweDAwMjAKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZfUFJPVE9DT0wgMHgwMDQwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0NMQVNTIDB4MDA4MAorI2RlZmluZSBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9TVUJDTEFTUyAweDAxMDAKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfUFJPVE9DT0wgMHgwMjAwCisKK3N0cnVjdCBjY3dfZGV2aWNlX2lkIHsKKyBfX3UxNiBtYXRjaF9mbGFnczsKKworIF9fdTE2IGN1X3R5cGU7CisgX191MTYgZGV2X3R5cGU7CisgX191OCBjdV9tb2RlbDsKKyBfX3U4IGRldl9tb2RlbDsKKworIGtlcm5lbF91bG9uZ190IGRyaXZlcl9pbmZvOworfTsKKworI2RlZmluZSBDQ1dfREVWSUNFX0lEX01BVENIX0NVX1RZUEUgMHgwMQorI2RlZmluZSBDQ1dfREVWSUNFX0lEX01BVENIX0NVX01PREVMIDB4MDIKKyNkZWZpbmUgQ0NXX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0VfVFlQRSAweDA0CisjZGVmaW5lIENDV19ERVZJQ0VfSURfTUFUQ0hfREVWSUNFX01PREVMIDB4MDgKKworI2RlZmluZSBQTlBfSURfTEVOIDgKKyNkZWZpbmUgUE5QX01BWF9ERVZJQ0VTIDgKKworc3RydWN0IHBucF9kZXZpY2VfaWQgeworIF9fdTggaWRbUE5QX0lEX0xFTl07Cisga2VybmVsX3Vsb25nX3QgZHJpdmVyX2RhdGE7Cit9OworCitzdHJ1Y3QgcG5wX2NhcmRfZGV2aWNlX2lkIHsKKyBfX3U4IGlkW1BOUF9JRF9MRU5dOworIGtlcm5lbF91bG9uZ190IGRyaXZlcl9kYXRhOworIHN0cnVjdCB7CisgX191OCBpZFtQTlBfSURfTEVOXTsKKyB9IGRldnNbUE5QX01BWF9ERVZJQ0VTXTsKK307CisKKyNkZWZpbmUgU0VSSU9fQU5ZIDB4ZmYKKworc3RydWN0IHNlcmlvX2RldmljZV9pZCB7CisgX191OCB0eXBlOworIF9fdTggZXh0cmE7CisgX191OCBpZDsKKyBfX3U4IHByb3RvOworfTsKKworc3RydWN0IG9mX2RldmljZV9pZAoreworIGNoYXIgbmFtZVszMl07CisgY2hhciB0eXBlWzMyXTsKKyBjaGFyIGNvbXBhdGlibGVbMTI4XTsKKyBrZXJuZWxfdWxvbmdfdCBkYXRhOworfTsKKworc3RydWN0IHZpb19kZXZpY2VfaWQgeworIGNoYXIgdHlwZVszMl07CisgY2hhciBjb21wYXRbMzJdOworfTsKKworc3RydWN0IHBjbWNpYV9kZXZpY2VfaWQgeworIF9fdTE2IG1hdGNoX2ZsYWdzOworCisgX191MTYgbWFuZl9pZDsKKyBfX3UxNiBjYXJkX2lkOworCisgX191OCBmdW5jX2lkOworCisgX191OCBmdW5jdGlvbjsKKworIF9fdTggZGV2aWNlX25vOworCisgX191MzIgcHJvZF9pZF9oYXNoWzRdCisgX19hdHRyaWJ1dGVfXygoYWxpZ25lZChzaXplb2YoX191MzIpKSkpOworCisga2VybmVsX3Vsb25nX3QgcHJvZF9pZFs0XQorIF9fYXR0cmlidXRlX18oKGFsaWduZWQoc2l6ZW9mKGtlcm5lbF91bG9uZ190KSkpKTsKKworIGtlcm5lbF91bG9uZ190IGRyaXZlcl9pbmZvOworIGtlcm5lbF91bG9uZ190IGNpc2ZpbGU7Cit9OworCisjZGVmaW5lIFBDTUNJQV9ERVZfSURfTUFUQ0hfTUFORl9JRCAweDAwMDEKKyNkZWZpbmUgUENNQ0lBX0RFVl9JRF9NQVRDSF9DQVJEX0lEIDB4MDAwMgorI2RlZmluZSBQQ01DSUFfREVWX0lEX01BVENIX0ZVTkNfSUQgMHgwMDA0CisjZGVmaW5lIFBDTUNJQV9ERVZfSURfTUFUQ0hfRlVOQ1RJT04gMHgwMDA4CisjZGVmaW5lIFBDTUNJQV9ERVZfSURfTUFUQ0hfUFJPRF9JRDEgMHgwMDEwCisjZGVmaW5lIFBDTUNJQV9ERVZfSURfTUFUQ0hfUFJPRF9JRDIgMHgwMDIwCisjZGVmaW5lIFBDTUNJQV9ERVZfSURfTUFUQ0hfUFJPRF9JRDMgMHgwMDQwCisjZGVmaW5lIFBDTUNJQV9ERVZfSURfTUFUQ0hfUFJPRF9JRDQgMHgwMDgwCisjZGVmaW5lIFBDTUNJQV9ERVZfSURfTUFUQ0hfREVWSUNFX05PIDB4MDEwMAorI2RlZmluZSBQQ01DSUFfREVWX0lEX01BVENIX0ZBS0VfQ0lTIDB4MDIwMAorI2RlZmluZSBQQ01DSUFfREVWX0lEX01BVENIX0FOT05ZTU9VUyAweDA0MDAKKworc3RydWN0IGkyY19kZXZpY2VfaWQgeworIF9fdTE2IGlkOworfTsKKworI2RlZmluZSBJTlBVVF9ERVZJQ0VfSURfRVZfTUFYIDB4MWYKKyNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX0tFWV9NQVggMHgxZmYKKyNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX1JFTF9NQVggMHgwZgorI2RlZmluZSBJTlBVVF9ERVZJQ0VfSURfQUJTX01BWCAweDNmCisjZGVmaW5lIElOUFVUX0RFVklDRV9JRF9NU0NfTUFYIDB4MDcKKyNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX0xFRF9NQVggMHgwZgorI2RlZmluZSBJTlBVVF9ERVZJQ0VfSURfU05EX01BWCAweDA3CisjZGVmaW5lIElOUFVUX0RFVklDRV9JRF9GRl9NQVggMHg3ZgorI2RlZmluZSBJTlBVVF9ERVZJQ0VfSURfU1dfTUFYIDB4MGYKKworI2RlZmluZSBJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfQlVTIDEKKyNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX01BVENIX1ZFTkRPUiAyCisjZGVmaW5lIElOUFVUX0RFVklDRV9JRF9NQVRDSF9QUk9EVUNUIDQKKyNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX01BVENIX1ZFUlNJT04gOAorCisjZGVmaW5lIElOUFVUX0RFVklDRV9JRF9NQVRDSF9FVkJJVCAweDAwMTAKKyNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX01BVENIX0tFWUJJVCAweDAwMjAKKyNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX01BVENIX1JFTEJJVCAweDAwNDAKKyNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX01BVENIX0FCU0JJVCAweDAwODAKKyNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX01BVENIX01TQ0lUIDB4MDEwMAorI2RlZmluZSBJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfTEVEQklUIDB4MDIwMAorI2RlZmluZSBJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfU05EQklUIDB4MDQwMAorI2RlZmluZSBJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfRkZCSVQgMHgwODAwCisjZGVmaW5lIElOUFVUX0RFVklDRV9JRF9NQVRDSF9TV0JJVCAweDEwMDAKKworc3RydWN0IGlucHV0X2RldmljZV9pZCB7CisKKyBrZXJuZWxfdWxvbmdfdCBmbGFnczsKKworIF9fdTE2IGJ1c3R5cGU7CisgX191MTYgdmVuZG9yOworIF9fdTE2IHByb2R1Y3Q7CisgX191MTYgdmVyc2lvbjsKKworIGtlcm5lbF91bG9uZ190IGV2Yml0W0lOUFVUX0RFVklDRV9JRF9FVl9NQVggLyBCSVRTX1BFUl9MT05HICsgMV07Cisga2VybmVsX3Vsb25nX3Qga2V5Yml0W0lOUFVUX0RFVklDRV9JRF9LRVlfTUFYIC8gQklUU19QRVJfTE9ORyArIDFdOworIGtlcm5lbF91bG9uZ190IHJlbGJpdFtJTlBVVF9ERVZJQ0VfSURfUkVMX01BWCAvIEJJVFNfUEVSX0xPTkcgKyAxXTsKKyBrZXJuZWxfdWxvbmdfdCBhYnNiaXRbSU5QVVRfREVWSUNFX0lEX0FCU19NQVggLyBCSVRTX1BFUl9MT05HICsgMV07Cisga2VybmVsX3Vsb25nX3QgbXNjYml0W0lOUFVUX0RFVklDRV9JRF9NU0NfTUFYIC8gQklUU19QRVJfTE9ORyArIDFdOworIGtlcm5lbF91bG9uZ190IGxlZGJpdFtJTlBVVF9ERVZJQ0VfSURfTEVEX01BWCAvIEJJVFNfUEVSX0xPTkcgKyAxXTsKKyBrZXJuZWxfdWxvbmdfdCBzbmRiaXRbSU5QVVRfREVWSUNFX0lEX1NORF9NQVggLyBCSVRTX1BFUl9MT05HICsgMV07Cisga2VybmVsX3Vsb25nX3QgZmZiaXRbSU5QVVRfREVWSUNFX0lEX0ZGX01BWCAvIEJJVFNfUEVSX0xPTkcgKyAxXTsKKyBrZXJuZWxfdWxvbmdfdCBzd2JpdFtJTlBVVF9ERVZJQ0VfSURfU1dfTUFYIC8gQklUU19QRVJfTE9ORyArIDFdOworCisga2VybmVsX3Vsb25nX3QgZHJpdmVyX2luZm87Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tb2R1bGUuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tb2R1bGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzQ0OWM2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21vZHVsZS5oCkBAIC0wLDAgKzEsMTE0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9NT0RVTEVfSAorI2RlZmluZSBfTElOVVhfTU9EVUxFX0gKKworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc3RhdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CisjaW5jbHVkZSA8bGludXgvZWxmLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5naWZ5Lmg+CisjaW5jbHVkZSA8bGludXgva29iamVjdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8YXNtL2xvY2FsLmg+CisKKyNpbmNsdWRlIDxhc20vbW9kdWxlLmg+CisKKyNkZWZpbmUgTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UobmFtZSkKKworI2lmbmRlZiBNT0RVTEVfU1lNQk9MX1BSRUZJWAorI2RlZmluZSBNT0RVTEVfU1lNQk9MX1BSRUZJWCAiIgorI2VuZGlmCisKKyNkZWZpbmUgTU9EVUxFX05BTUVfTEVOICg2NCAtIHNpemVvZih1bnNpZ25lZCBsb25nKSkKKworc3RydWN0IGtlcm5lbF9zeW1ib2wKK3sKKyB1bnNpZ25lZCBsb25nIHZhbHVlOworIGNvbnN0IGNoYXIgKm5hbWU7Cit9OworCitzdHJ1Y3QgbW9kdmVyc2lvbl9pbmZvCit7CisgdW5zaWduZWQgbG9uZyBjcmM7CisgY2hhciBuYW1lW01PRFVMRV9OQU1FX0xFTl07Cit9OworCitzdHJ1Y3QgbW9kdWxlOworCitzdHJ1Y3QgbW9kdWxlX2F0dHJpYnV0ZSB7Cisgc3RydWN0IGF0dHJpYnV0ZSBhdHRyOworIHNzaXplX3QgKCpzaG93KShzdHJ1Y3QgbW9kdWxlX2F0dHJpYnV0ZSAqLCBzdHJ1Y3QgbW9kdWxlICosIGNoYXIgKik7Cisgc3NpemVfdCAoKnN0b3JlKShzdHJ1Y3QgbW9kdWxlX2F0dHJpYnV0ZSAqLCBzdHJ1Y3QgbW9kdWxlICosCisgY29uc3QgY2hhciAqLCBzaXplX3QgY291bnQpOworIHZvaWQgKCpzZXR1cCkoc3RydWN0IG1vZHVsZSAqLCBjb25zdCBjaGFyICopOworIGludCAoKnRlc3QpKHN0cnVjdCBtb2R1bGUgKik7Cisgdm9pZCAoKmZyZWUpKHN0cnVjdCBtb2R1bGUgKik7Cit9OworCitzdHJ1Y3QgbW9kdWxlX2tvYmplY3QKK3sKKyBzdHJ1Y3Qga29iamVjdCBrb2JqOworIHN0cnVjdCBtb2R1bGUgKm1vZDsKK307CisKK3N0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnk7CisKKyNpZmRlZiBNT0RVTEUKKyNkZWZpbmUgTU9EVUxFX0dFTkVSSUNfVEFCTEUoZ3R5cGUsbmFtZSkgIGV4dGVybiBjb25zdCBzdHJ1Y3QgZ3R5cGUjI19pZCBfX21vZF8jI2d0eXBlIyNfdGFibGUgICBfX2F0dHJpYnV0ZV9fICgodW51c2VkLCBhbGlhcyhfX3N0cmluZ2lmeShuYW1lKSkpKQorCisjZGVmaW5lIFRISVNfTU9EVUxFICgmX190aGlzX21vZHVsZSkKKyNlbHNlCisjZGVmaW5lIE1PRFVMRV9HRU5FUklDX1RBQkxFKGd0eXBlLG5hbWUpCisjZGVmaW5lIFRISVNfTU9EVUxFICgoc3RydWN0IG1vZHVsZSAqKTApCisjZW5kaWYKKworI2RlZmluZSBNT0RVTEVfSU5GTyh0YWcsIGluZm8pIF9fTU9EVUxFX0lORk8odGFnLCB0YWcsIGluZm8pCisKKyNkZWZpbmUgTU9EVUxFX0FMSUFTKF9hbGlhcykgTU9EVUxFX0lORk8oYWxpYXMsIF9hbGlhcykKKworI2RlZmluZSBNT0RVTEVfTElDRU5TRShfbGljZW5zZSkgTU9EVUxFX0lORk8obGljZW5zZSwgX2xpY2Vuc2UpCisKKyNkZWZpbmUgTU9EVUxFX0FVVEhPUihfYXV0aG9yKSBNT0RVTEVfSU5GTyhhdXRob3IsIF9hdXRob3IpCisKKyNkZWZpbmUgTU9EVUxFX0RFU0NSSVBUSU9OKF9kZXNjcmlwdGlvbikgTU9EVUxFX0lORk8oZGVzY3JpcHRpb24sIF9kZXNjcmlwdGlvbikKKworI2RlZmluZSBNT0RVTEVfUEFSTV9ERVNDKF9wYXJtLCBkZXNjKSAgIF9fTU9EVUxFX0lORk8ocGFybSwgX3Bhcm0sICNfcGFybSAiOiIgZGVzYykKKworI2RlZmluZSBNT0RVTEVfREVWSUNFX1RBQkxFKHR5cGUsbmFtZSkgICBNT0RVTEVfR0VORVJJQ19UQUJMRSh0eXBlIyNfZGV2aWNlLG5hbWUpCisKKyNkZWZpbmUgTU9EVUxFX1ZFUlNJT04oX3ZlcnNpb24pIE1PRFVMRV9JTkZPKHZlcnNpb24sIF92ZXJzaW9uKQorCitzdHJ1Y3Qgbm90aWZpZXJfYmxvY2s7CisKKyNkZWZpbmUgRVhQT1JUX1NZTUJPTChzeW0pCisjZGVmaW5lIEVYUE9SVF9TWU1CT0xfR1BMKHN5bSkKKyNkZWZpbmUgRVhQT1JUX1NZTUJPTF9HUExfRlVUVVJFKHN5bSkKKyNkZWZpbmUgRVhQT1JUX1VOVVNFRF9TWU1CT0woc3ltKQorI2RlZmluZSBFWFBPUlRfVU5VU0VEX1NZTUJPTF9HUEwoc3ltKQorCisjZGVmaW5lIHN5bWJvbF9nZXQoeCkgKHsgZXh0ZXJuIHR5cGVvZih4KSB4IF9fYXR0cmlidXRlX18oKHdlYWspKTsgJih4KTsgfSkKKyNkZWZpbmUgc3ltYm9sX3B1dCh4KSBkbyB7IH0gd2hpbGUoMCkKKyNkZWZpbmUgc3ltYm9sX3B1dF9hZGRyKHgpIGRvIHsgfSB3aGlsZSgwKQorI2RlZmluZSBtb2R1bGVfbmFtZShtb2QpICJrZXJuZWwiCisjZGVmaW5lIF9fdW5zYWZlKG1vZCkKKyNkZWZpbmUgbW9kdWxlX3B1dF9hbmRfZXhpdChjb2RlKSBkb19leGl0KGNvZGUpCisKK3N0cnVjdCBtb2R1bGU7CisKKyNkZWZpbmUgc3ltYm9sX3JlcXVlc3QoeCkgdHJ5X3RoZW5fcmVxdWVzdF9tb2R1bGUoc3ltYm9sX2dldCh4KSwgInN5bWJvbDoiICN4KQorI2RlZmluZSBfX01PRFVMRV9TVFJJTkcoeCkgX19zdHJpbmdpZnkoeCkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21vZHVsZXBhcmFtLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbW9kdWxlcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDZkZGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21vZHVsZXBhcmFtLmgKQEAgLTAsMCArMSwxMDEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX01PRFVMRV9QQVJBTVNfSAorI2RlZmluZSBfTElOVVhfTU9EVUxFX1BBUkFNU19ICisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5naWZ5Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKyNpZmRlZiBNT0RVTEUKKyNkZWZpbmUgTU9EVUxFX1BBUkFNX1BSRUZJWCAgCisjZWxzZQorI2RlZmluZSBNT0RVTEVfUEFSQU1fUFJFRklYIEtCVUlMRF9NT0ROQU1FICIuIgorI2VuZGlmCisKKyNpZmRlZiBNT0RVTEUKKyNkZWZpbmUgX19fbW9kdWxlX2NhdChhLGIpIF9fbW9kXyAjIyBhICMjIGIKKyNkZWZpbmUgX19tb2R1bGVfY2F0KGEsYikgX19fbW9kdWxlX2NhdChhLGIpCisjZGVmaW5lIF9fTU9EVUxFX0lORk8odGFnLCBuYW1lLCBpbmZvKSAgc3RhdGljIGNvbnN0IGNoYXIgX19tb2R1bGVfY2F0KG5hbWUsX19MSU5FX18pW10gICBfX2F0dHJpYnV0ZV91c2VkX18gICBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIubW9kaW5mbyIpLHVudXNlZCkpID0gX19zdHJpbmdpZnkodGFnKSAiPSIgaW5mbworI2Vsc2UKKyNkZWZpbmUgX19NT0RVTEVfSU5GTyh0YWcsIG5hbWUsIGluZm8pCisjZW5kaWYKKyNkZWZpbmUgX19NT0RVTEVfUEFSTV9UWVBFKG5hbWUsIF90eXBlKSAgIF9fTU9EVUxFX0lORk8ocGFybXR5cGUsIG5hbWUjI3R5cGUsICNuYW1lICI6IiBfdHlwZSkKKworc3RydWN0IGtlcm5lbF9wYXJhbTsKKwordHlwZWRlZiBpbnQgKCpwYXJhbV9zZXRfZm4pKGNvbnN0IGNoYXIgKnZhbCwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApOworCit0eXBlZGVmIGludCAoKnBhcmFtX2dldF9mbikoY2hhciAqYnVmZmVyLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCk7CisKK3N0cnVjdCBrZXJuZWxfcGFyYW0geworIGNvbnN0IGNoYXIgKm5hbWU7CisgdW5zaWduZWQgaW50IHBlcm07CisgcGFyYW1fc2V0X2ZuIHNldDsKKyBwYXJhbV9nZXRfZm4gZ2V0OworIHZvaWQgKmFyZzsKK307CisKK3N0cnVjdCBrcGFyYW1fc3RyaW5nIHsKKyB1bnNpZ25lZCBpbnQgbWF4bGVuOworIGNoYXIgKnN0cmluZzsKK307CisKK3N0cnVjdCBrcGFyYW1fYXJyYXkKK3sKKyB1bnNpZ25lZCBpbnQgbWF4OworIHVuc2lnbmVkIGludCAqbnVtOworIHBhcmFtX3NldF9mbiBzZXQ7CisgcGFyYW1fZ2V0X2ZuIGdldDsKKyB1bnNpZ25lZCBpbnQgZWxlbXNpemU7Cisgdm9pZCAqZWxlbTsKK307CisKKyNkZWZpbmUgX19tb2R1bGVfcGFyYW1fY2FsbChwcmVmaXgsIG5hbWUsIHNldCwgZ2V0LCBhcmcsIHBlcm0pICAgc3RhdGljIGNoYXIgX19wYXJhbV9zdHJfIyNuYW1lW10gPSBwcmVmaXggI25hbWU7ICAgc3RhdGljIHN0cnVjdCBrZXJuZWxfcGFyYW0gY29uc3QgX19wYXJhbV8jI25hbWUgICBfX2F0dHJpYnV0ZV91c2VkX18gICBfX2F0dHJpYnV0ZV9fICgodW51c2VkLF9fc2VjdGlvbl9fICgiX19wYXJhbSIpLGFsaWduZWQoc2l6ZW9mKHZvaWQgKikpKSkgICA9IHsgX19wYXJhbV9zdHJfIyNuYW1lLCBwZXJtLCBzZXQsIGdldCwgYXJnIH0KKworI2RlZmluZSBtb2R1bGVfcGFyYW1fY2FsbChuYW1lLCBzZXQsIGdldCwgYXJnLCBwZXJtKSAgIF9fbW9kdWxlX3BhcmFtX2NhbGwoTU9EVUxFX1BBUkFNX1BSRUZJWCwgbmFtZSwgc2V0LCBnZXQsIGFyZywgcGVybSkKKworI2RlZmluZSBtb2R1bGVfcGFyYW1fbmFtZWQobmFtZSwgdmFsdWUsIHR5cGUsIHBlcm0pICAgcGFyYW1fY2hlY2tfIyN0eXBlKG5hbWUsICYodmFsdWUpKTsgICBtb2R1bGVfcGFyYW1fY2FsbChuYW1lLCBwYXJhbV9zZXRfIyN0eXBlLCBwYXJhbV9nZXRfIyN0eXBlLCAmdmFsdWUsIHBlcm0pOyAgIF9fTU9EVUxFX1BBUk1fVFlQRShuYW1lLCAjdHlwZSkKKworI2RlZmluZSBtb2R1bGVfcGFyYW0obmFtZSwgdHlwZSwgcGVybSkgICBtb2R1bGVfcGFyYW1fbmFtZWQobmFtZSwgbmFtZSwgdHlwZSwgcGVybSkKKworI2RlZmluZSBtb2R1bGVfcGFyYW1fc3RyaW5nKG5hbWUsIHN0cmluZywgbGVuLCBwZXJtKSAgIHN0YXRpYyBzdHJ1Y3Qga3BhcmFtX3N0cmluZyBfX3BhcmFtX3N0cmluZ18jI25hbWUgICA9IHsgbGVuLCBzdHJpbmcgfTsgICBtb2R1bGVfcGFyYW1fY2FsbChuYW1lLCBwYXJhbV9zZXRfY29weXN0cmluZywgcGFyYW1fZ2V0X3N0cmluZywgICAmX19wYXJhbV9zdHJpbmdfIyNuYW1lLCBwZXJtKTsgICBfX01PRFVMRV9QQVJNX1RZUEUobmFtZSwgInN0cmluZyIpCisKKyNkZWZpbmUgX19wYXJhbV9jaGVjayhuYW1lLCBwLCB0eXBlKSAgIHN0YXRpYyBpbmxpbmUgdHlwZSAqX19jaGVja18jI25hbWUodm9pZCkgeyByZXR1cm4ocCk7IH0KKworI2RlZmluZSBwYXJhbV9jaGVja19ieXRlKG5hbWUsIHApIF9fcGFyYW1fY2hlY2sobmFtZSwgcCwgdW5zaWduZWQgY2hhcikKKworI2RlZmluZSBwYXJhbV9jaGVja19zaG9ydChuYW1lLCBwKSBfX3BhcmFtX2NoZWNrKG5hbWUsIHAsIHNob3J0KQorCisjZGVmaW5lIHBhcmFtX2NoZWNrX3VzaG9ydChuYW1lLCBwKSBfX3BhcmFtX2NoZWNrKG5hbWUsIHAsIHVuc2lnbmVkIHNob3J0KQorCisjZGVmaW5lIHBhcmFtX2NoZWNrX2ludChuYW1lLCBwKSBfX3BhcmFtX2NoZWNrKG5hbWUsIHAsIGludCkKKworI2RlZmluZSBwYXJhbV9jaGVja191aW50KG5hbWUsIHApIF9fcGFyYW1fY2hlY2sobmFtZSwgcCwgdW5zaWduZWQgaW50KQorCisjZGVmaW5lIHBhcmFtX2NoZWNrX2xvbmcobmFtZSwgcCkgX19wYXJhbV9jaGVjayhuYW1lLCBwLCBsb25nKQorCisjZGVmaW5lIHBhcmFtX2NoZWNrX3Vsb25nKG5hbWUsIHApIF9fcGFyYW1fY2hlY2sobmFtZSwgcCwgdW5zaWduZWQgbG9uZykKKworI2RlZmluZSBwYXJhbV9jaGVja19jaGFycChuYW1lLCBwKSBfX3BhcmFtX2NoZWNrKG5hbWUsIHAsIGNoYXIgKikKKworI2RlZmluZSBwYXJhbV9jaGVja19ib29sKG5hbWUsIHApIF9fcGFyYW1fY2hlY2sobmFtZSwgcCwgaW50KQorCisjZGVmaW5lIHBhcmFtX2NoZWNrX2ludmJvb2wobmFtZSwgcCkgX19wYXJhbV9jaGVjayhuYW1lLCBwLCBpbnQpCisKKyNkZWZpbmUgbW9kdWxlX3BhcmFtX2FycmF5X25hbWVkKG5hbWUsIGFycmF5LCB0eXBlLCBudW1wLCBwZXJtKSAgIHN0YXRpYyBzdHJ1Y3Qga3BhcmFtX2FycmF5IF9fcGFyYW1fYXJyXyMjbmFtZSAgID0geyBBUlJBWV9TSVpFKGFycmF5KSwgbnVtcCwgcGFyYW1fc2V0XyMjdHlwZSwgcGFyYW1fZ2V0XyMjdHlwZSwgIHNpemVvZihhcnJheVswXSksIGFycmF5IH07ICAgbW9kdWxlX3BhcmFtX2NhbGwobmFtZSwgcGFyYW1fYXJyYXlfc2V0LCBwYXJhbV9hcnJheV9nZXQsICAgJl9fcGFyYW1fYXJyXyMjbmFtZSwgcGVybSk7ICAgX19NT0RVTEVfUEFSTV9UWVBFKG5hbWUsICJhcnJheSBvZiAiICN0eXBlKQorCisjZGVmaW5lIG1vZHVsZV9wYXJhbV9hcnJheShuYW1lLCB0eXBlLCBudW1wLCBwZXJtKSAgIG1vZHVsZV9wYXJhbV9hcnJheV9uYW1lZChuYW1lLCBuYW1lLCB0eXBlLCBudW1wLCBwZXJtKQorCitzdHJ1Y3QgbW9kdWxlOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tb3VudC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21vdW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU0NzZlMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tb3VudC5oCkBAIC0wLDAgKzEsMTQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX01PVU5UX0gKKyNkZWZpbmUgX0xJTlVYX01PVU5UX0gKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21zZG9zX2ZzLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXNkb3NfZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTRlYjBhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21zZG9zX2ZzLmgKQEAgLTAsMCArMSwxODAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX01TRE9TX0ZTX0gKKyNkZWZpbmUgX0xJTlVYX01TRE9TX0ZTX0gKKworI2luY2x1ZGUgPGxpbnV4L21hZ2ljLmg+CisKKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisKKyNkZWZpbmUgU0VDVE9SX1NJWkUgNTEyICAKKyNkZWZpbmUgU0VDVE9SX0JJVFMgOSAgCisjZGVmaW5lIE1TRE9TX0RQQiAoTVNET1NfRFBTKSAgCisjZGVmaW5lIE1TRE9TX0RQQl9CSVRTIDQgIAorI2RlZmluZSBNU0RPU19EUFMgKFNFQ1RPUl9TSVpFIC8gc2l6ZW9mKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkpKQorI2RlZmluZSBNU0RPU19EUFNfQklUUyA0ICAKKyNkZWZpbmUgQ0ZfTEVfVyh2KSBsZTE2X3RvX2NwdSh2KQorI2RlZmluZSBDRl9MRV9MKHYpIGxlMzJfdG9fY3B1KHYpCisjZGVmaW5lIENUX0xFX1codikgY3B1X3RvX2xlMTYodikKKyNkZWZpbmUgQ1RfTEVfTCh2KSBjcHVfdG9fbGUzMih2KQorCisjZGVmaW5lIE1TRE9TX1JPT1RfSU5PIDEgIAorI2RlZmluZSBNU0RPU19ESVJfQklUUyA1ICAKKworI2RlZmluZSBGQVRfTUFYX0RJUl9FTlRSSUVTICg2NTUzNikKKyNkZWZpbmUgRkFUX01BWF9ESVJfU0laRSAoRkFUX01BWF9ESVJfRU5UUklFUyA8PCBNU0RPU19ESVJfQklUUykKKworI2RlZmluZSBBVFRSX05PTkUgMCAgCisjZGVmaW5lIEFUVFJfUk8gMSAgCisjZGVmaW5lIEFUVFJfSElEREVOIDIgIAorI2RlZmluZSBBVFRSX1NZUyA0ICAKKyNkZWZpbmUgQVRUUl9WT0xVTUUgOCAgCisjZGVmaW5lIEFUVFJfRElSIDE2ICAKKyNkZWZpbmUgQVRUUl9BUkNIIDMyICAKKworI2RlZmluZSBBVFRSX1VOVVNFRCAoQVRUUl9WT0xVTUUgfCBBVFRSX0FSQ0ggfCBBVFRSX1NZUyB8IEFUVFJfSElEREVOKQorCisjZGVmaW5lIEFUVFJfRVhUIChBVFRSX1JPIHwgQVRUUl9ISURERU4gfCBBVFRSX1NZUyB8IEFUVFJfVk9MVU1FKQorCisjZGVmaW5lIENBU0VfTE9XRVJfQkFTRSA4ICAKKyNkZWZpbmUgQ0FTRV9MT1dFUl9FWFQgMTYgIAorCisjZGVmaW5lIERFTEVURURfRkxBRyAweGU1ICAKKyNkZWZpbmUgSVNfRlJFRShuKSAoISoobikgfHwgKihuKSA9PSBERUxFVEVEX0ZMQUcpCisKKyNkZWZpbmUgTVNET1NfVkFMSURfTU9ERSAoU19JRlJFRyB8IFNfSUZESVIgfCBTX0lSV1hVIHwgU19JUldYRyB8IFNfSVJXWE8pCisKKyNkZWZpbmUgTVNET1NfTUtNT0RFKGEsIG0pIChtICYgKGEgJiBBVFRSX1JPID8gU19JUlVHT3xTX0lYVUdPIDogU19JUldYVUdPKSkKKworI2RlZmluZSBNU0RPU19OQU1FIDExICAKKyNkZWZpbmUgTVNET1NfTE9OR05BTUUgMjU2ICAKKyNkZWZpbmUgTVNET1NfU0xPVFMgMjEgIAorI2RlZmluZSBNU0RPU19ET1QgIi4gICAgICAgICAgIiAgCisjZGVmaW5lIE1TRE9TX0RPVERPVCAiLi4gICAgICAgICAiICAKKworI2RlZmluZSBGQVRfVkFMSURfTUVESUEoeCkgKCgweEY4IDw9ICh4KSAmJiAoeCkgPD0gMHhGRikgfHwgKHgpID09IDB4RjApCisjZGVmaW5lIEZBVF9GSVJTVF9FTlQocywgeCkgKChNU0RPU19TQihzKS0+ZmF0X2JpdHMgPT0gMzIgPyAweDBGRkZGRjAwIDogICBNU0RPU19TQihzKS0+ZmF0X2JpdHMgPT0gMTYgPyAweEZGMDAgOiAweEYwMCkgfCAoeCkpCisKKyNkZWZpbmUgRkFUX1NUQVJUX0VOVCAyCisKKyNkZWZpbmUgTUFYX0ZBVDEyIDB4RkY0CisjZGVmaW5lIE1BWF9GQVQxNiAweEZGRjQKKyNkZWZpbmUgTUFYX0ZBVDMyIDB4MEZGRkZGRjYKKyNkZWZpbmUgTUFYX0ZBVChzKSAoTVNET1NfU0IocyktPmZhdF9iaXRzID09IDMyID8gTUFYX0ZBVDMyIDogICBNU0RPU19TQihzKS0+ZmF0X2JpdHMgPT0gMTYgPyBNQVhfRkFUMTYgOiBNQVhfRkFUMTIpCisKKyNkZWZpbmUgQkFEX0ZBVDEyIDB4RkY3CisjZGVmaW5lIEJBRF9GQVQxNiAweEZGRjcKKyNkZWZpbmUgQkFEX0ZBVDMyIDB4MEZGRkZGRjcKKworI2RlZmluZSBFT0ZfRkFUMTIgMHhGRkYKKyNkZWZpbmUgRU9GX0ZBVDE2IDB4RkZGRgorI2RlZmluZSBFT0ZfRkFUMzIgMHgwRkZGRkZGRgorCisjZGVmaW5lIEZBVF9FTlRfRlJFRSAoMCkKKyNkZWZpbmUgRkFUX0VOVF9CQUQgKEJBRF9GQVQzMikKKyNkZWZpbmUgRkFUX0VOVF9FT0YgKEVPRl9GQVQzMikKKworI2RlZmluZSBGQVRfRlNJTkZPX1NJRzEgMHg0MTYxNTI1MgorI2RlZmluZSBGQVRfRlNJTkZPX1NJRzIgMHg2MTQxNzI3MgorI2RlZmluZSBJU19GU0lORk8oeCkgKGxlMzJfdG9fY3B1KCh4KS0+c2lnbmF0dXJlMSkgPT0gRkFUX0ZTSU5GT19TSUcxICAgJiYgbGUzMl90b19jcHUoKHgpLT5zaWduYXR1cmUyKSA9PSBGQVRfRlNJTkZPX1NJRzIpCisKKyNkZWZpbmUgVkZBVF9JT0NUTF9SRUFERElSX0JPVEggX0lPUigncicsIDEsIHN0cnVjdCBkaXJlbnQgWzJdKQorI2RlZmluZSBWRkFUX0lPQ1RMX1JFQURESVJfU0hPUlQgX0lPUigncicsIDIsIHN0cnVjdCBkaXJlbnQgWzJdKQorCisjZGVmaW5lIEZBVF9JT0NUTF9HRVRfQVRUUklCVVRFUyBfSU9SKCdyJywgMHgxMCwgX191MzIpCisjZGVmaW5lIEZBVF9JT0NUTF9TRVRfQVRUUklCVVRFUyBfSU9XKCdyJywgMHgxMSwgX191MzIpCisjZGVmaW5lIFZGQVRfSU9DVExfR0VUX1ZPTFVNRV9JRCBfSU9SKCdyJywgMHgxMiwgX191MzIpCisKKyNkZWZpbmUgVkZBVF9TRk5fRElTUExBWV9MT1dFUiAweDAwMDEgIAorI2RlZmluZSBWRkFUX1NGTl9ESVNQTEFZX1dJTjk1IDB4MDAwMiAgCisjZGVmaW5lIFZGQVRfU0ZOX0RJU1BMQVlfV0lOTlQgMHgwMDA0ICAKKyNkZWZpbmUgVkZBVF9TRk5fQ1JFQVRFX1dJTjk1IDB4MDEwMCAgCisjZGVmaW5lIFZGQVRfU0ZOX0NSRUFURV9XSU5OVCAweDAyMDAgIAorCitzdHJ1Y3QgZmF0X2Jvb3Rfc2VjdG9yIHsKKyBfX3U4IGlnbm9yZWRbM107CisgX191OCBzeXN0ZW1faWRbOF07CisgX191OCBzZWN0b3Jfc2l6ZVsyXTsKKyBfX3U4IHNlY19wZXJfY2x1czsKKyBfX2xlMTYgcmVzZXJ2ZWQ7CisgX191OCBmYXRzOworIF9fdTggZGlyX2VudHJpZXNbMl07CisgX191OCBzZWN0b3JzWzJdOworIF9fdTggbWVkaWE7CisgX19sZTE2IGZhdF9sZW5ndGg7CisgX19sZTE2IHNlY3NfdHJhY2s7CisgX19sZTE2IGhlYWRzOworIF9fbGUzMiBoaWRkZW47CisgX19sZTMyIHRvdGFsX3NlY3Q7CisKKyBfX2xlMzIgZmF0MzJfbGVuZ3RoOworIF9fbGUxNiBmbGFnczsKKyBfX3U4IHZlcnNpb25bMl07CisgX19sZTMyIHJvb3RfY2x1c3RlcjsKKyBfX2xlMTYgaW5mb19zZWN0b3I7CisgX19sZTE2IGJhY2t1cF9ib290OworIF9fbGUxNiByZXNlcnZlZDJbNl07Cit9OworCitzdHJ1Y3QgZmF0X2Jvb3RfZnNpbmZvIHsKKyBfX2xlMzIgc2lnbmF0dXJlMTsKKyBfX2xlMzIgcmVzZXJ2ZWQxWzEyMF07CisgX19sZTMyIHNpZ25hdHVyZTI7CisgX19sZTMyIGZyZWVfY2x1c3RlcnM7CisgX19sZTMyIG5leHRfY2x1c3RlcjsKKyBfX2xlMzIgcmVzZXJ2ZWQyWzRdOworfTsKKworc3RydWN0IGZhdF9ib290X2JzeCB7CisgX191OCBkcml2ZTsKKyBfX3U4IHJlc2VydmVkMTsKKyBfX3U4IHNpZ25hdHVyZTsKKyBfX3U4IHZvbF9pZFs0XTsKKyBfX3U4IHZvbF9sYWJlbFsxMV07CisgX191OCB0eXBlWzhdOworfTsKKyNkZWZpbmUgRkFUMTZfQlNYX09GRlNFVCAzNiAgCisjZGVmaW5lIEZBVDMyX0JTWF9PRkZTRVQgNjQgIAorCitzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5IHsKKyBfX3U4IG5hbWVbTVNET1NfTkFNRV07CisgX191OCBhdHRyOworIF9fdTggbGNhc2U7CisgX191OCBjdGltZV9jczsKKyBfX2xlMTYgY3RpbWU7CisgX19sZTE2IGNkYXRlOworIF9fbGUxNiBhZGF0ZTsKKyBfX2xlMTYgc3RhcnRoaTsKKyBfX2xlMTYgdGltZSxkYXRlLHN0YXJ0OworIF9fbGUzMiBzaXplOworfTsKKworc3RydWN0IG1zZG9zX2Rpcl9zbG90IHsKKyBfX3U4IGlkOworIF9fdTggbmFtZTBfNFsxMF07CisgX191OCBhdHRyOworIF9fdTggcmVzZXJ2ZWQ7CisgX191OCBhbGlhc19jaGVja3N1bTsKKyBfX3U4IG5hbWU1XzEwWzEyXTsKKyBfX2xlMTYgc3RhcnQ7CisgX191OCBuYW1lMTFfMTJbNF07Cit9OworCitzdHJ1Y3QgZmF0X3Nsb3RfaW5mbyB7CisgbG9mZl90IGlfcG9zOworIGxvZmZfdCBzbG90X29mZjsKKyBpbnQgbnJfc2xvdHM7Cisgc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSAqZGU7Cisgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21zZy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21zZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1NGYxZTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXNnLmgKQEAgLTAsMCArMSw2OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfTVNHX0gKKyNkZWZpbmUgX0xJTlVYX01TR19ICisKKyNpbmNsdWRlIDxsaW51eC9pcGMuaD4KKworI2RlZmluZSBNU0dfU1RBVCAxMQorI2RlZmluZSBNU0dfSU5GTyAxMgorCisjZGVmaW5lIE1TR19OT0VSUk9SIDAxMDAwMCAgCisjZGVmaW5lIE1TR19FWENFUFQgMDIwMDAwICAKKworc3RydWN0IG1zcWlkX2RzIHsKKyBzdHJ1Y3QgaXBjX3Blcm0gbXNnX3Blcm07Cisgc3RydWN0IG1zZyAqbXNnX2ZpcnN0OworIHN0cnVjdCBtc2cgKm1zZ19sYXN0OworIF9fa2VybmVsX3RpbWVfdCBtc2dfc3RpbWU7CisgX19rZXJuZWxfdGltZV90IG1zZ19ydGltZTsKKyBfX2tlcm5lbF90aW1lX3QgbXNnX2N0aW1lOworIHVuc2lnbmVkIGxvbmcgbXNnX2xjYnl0ZXM7CisgdW5zaWduZWQgbG9uZyBtc2dfbHFieXRlczsKKyB1bnNpZ25lZCBzaG9ydCBtc2dfY2J5dGVzOworIHVuc2lnbmVkIHNob3J0IG1zZ19xbnVtOworIHVuc2lnbmVkIHNob3J0IG1zZ19xYnl0ZXM7CisgX19rZXJuZWxfaXBjX3BpZF90IG1zZ19sc3BpZDsKKyBfX2tlcm5lbF9pcGNfcGlkX3QgbXNnX2xycGlkOworfTsKKworI2luY2x1ZGUgPGFzbS9tc2didWYuaD4KKworc3RydWN0IG1zZ2J1ZiB7CisgbG9uZyBtdHlwZTsKKyBjaGFyIG10ZXh0WzFdOworfTsKKworc3RydWN0IG1zZ2luZm8geworIGludCBtc2dwb29sOworIGludCBtc2dtYXA7CisgaW50IG1zZ21heDsKKyBpbnQgbXNnbW5iOworIGludCBtc2dtbmk7CisgaW50IG1zZ3NzejsKKyBpbnQgbXNndHFsOworIHVuc2lnbmVkIHNob3J0IG1zZ3NlZzsKK307CisKKyNkZWZpbmUgTVNHTU5JIDE2ICAgIAorI2RlZmluZSBNU0dNQVggODE5MiAgICAKKyNkZWZpbmUgTVNHTU5CIDE2Mzg0ICAgIAorCisjZGVmaW5lIE1TR1BPT0wgKE1TR01OSSpNU0dNTkIvMTAyNCkgIAorI2RlZmluZSBNU0dUUUwgTVNHTU5CICAKKyNkZWZpbmUgTVNHTUFQIE1TR01OQiAgCisjZGVmaW5lIE1TR1NTWiAxNiAgCisjZGVmaW5lIF9fTVNHU0VHICgoTVNHUE9PTCoxMDI0KS8gTVNHU1NaKSAgCisjZGVmaW5lIE1TR1NFRyAoX19NU0dTRUcgPD0gMHhmZmZmID8gX19NU0dTRUcgOiAweGZmZmYpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21zbV9hZHNwLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXNtX2Fkc3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjEyNzA3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21zbV9hZHNwLmgKQEAgLTAsMCArMSw1NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0xJTlVYX01TTV9BRFNQX0gKKyNkZWZpbmUgX19MSU5VWF9NU01fQURTUF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisjaW5jbHVkZSA8YXNtL3NpemVzLmg+CisKKyNkZWZpbmUgQURTUF9JT0NUTF9NQUdJQyAncScKKworc3RydWN0IGFkc3BfY29tbWFuZF90IHsKKyB1aW50MTZfdCBxdWV1ZTsKKyB1aW50MzJfdCBsZW47CisgdWludDhfdCAqZGF0YTsKK307CisKK3N0cnVjdCBhZHNwX2V2ZW50X3QgeworIHVpbnQxNl90IHR5cGU7CisgdWludDMyX3QgdGltZW91dF9tczsKKyB1aW50MTZfdCBtc2dfaWQ7CisgdWludDE2X3QgZmxhZ3M7CisgdWludDMyX3QgbGVuOworIHVpbnQ4X3QgKmRhdGE7Cit9OworCitzdHJ1Y3QgYWRzcF9wbWVtX2luZm9fdCB7CisgaW50IGZkOworIHZvaWQgKnZhZGRyOworfTsKKworI2RlZmluZSBBRFNQX0lPQ1RMX0VOQUJMRSAgIF9JT1IoQURTUF9JT0NUTF9NQUdJQywgMSwgdW5zaWduZWQpCisKKyNkZWZpbmUgQURTUF9JT0NUTF9ESVNBQkxFICAgX0lPUihBRFNQX0lPQ1RMX01BR0lDLCAyLCB1bnNpZ25lZCkKKworI2RlZmluZSBBRFNQX0lPQ1RMX0RJU0FCTEVfQUNLICAgX0lPUihBRFNQX0lPQ1RMX01BR0lDLCAzLCB1bnNpZ25lZCkKKworI2RlZmluZSBBRFNQX0lPQ1RMX1dSSVRFX0NPTU1BTkQgICBfSU9SKEFEU1BfSU9DVExfTUFHSUMsIDQsIHN0cnVjdCBhZHNwX2NvbW1hbmRfdCAqKQorCisjZGVmaW5lIEFEU1BfSU9DVExfR0VUX0VWRU5UICAgX0lPV1IoQURTUF9JT0NUTF9NQUdJQywgNSwgc3RydWN0IGFkc3BfZXZlbnRfZGF0YV90ICopCisKKyNkZWZpbmUgQURTUF9JT0NUTF9ESVNBQkxFX0VWRU5UX1JTUCAgIF9JT1IoQURTUF9JT0NUTF9NQUdJQywgMTAsIHVuc2lnbmVkKQorCisjZGVmaW5lIEFEU1BfSU9DVExfUkVHSVNURVJfUE1FTSAgIF9JT1coQURTUF9JT0NUTF9NQUdJQywgMTMsIHN0cnVjdCBhZHNwX3BtZW1faW5mbyAqKQorCisjZGVmaW5lIEFEU1BfSU9DVExfQUJPUlRfRVZFTlRfUkVBRCAgIF9JT1coQURTUF9JT0NUTF9NQUdJQywgMTUsIHVuc2lnbmVkKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tc21fYXVkaW8uaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tc21fYXVkaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWM1OGFhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21zbV9hdWRpby5oCkBAIC0wLDAgKzEsODUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19MSU5VWF9NU01fQVVESU9fSAorI2RlZmluZSBfX0xJTlVYX01TTV9BVURJT19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisjaW5jbHVkZSA8YXNtL3NpemVzLmg+CisKKyNkZWZpbmUgQVVESU9fSU9DVExfTUFHSUMgJ2EnCisKKyNkZWZpbmUgQVVESU9fU1RBUlQgX0lPVyhBVURJT19JT0NUTF9NQUdJQywgMCwgdW5zaWduZWQpCisjZGVmaW5lIEFVRElPX1NUT1AgX0lPVyhBVURJT19JT0NUTF9NQUdJQywgMSwgdW5zaWduZWQpCisjZGVmaW5lIEFVRElPX0ZMVVNIIF9JT1coQVVESU9fSU9DVExfTUFHSUMsIDIsIHVuc2lnbmVkKQorI2RlZmluZSBBVURJT19HRVRfQ09ORklHIF9JT1IoQVVESU9fSU9DVExfTUFHSUMsIDMsIHVuc2lnbmVkKQorI2RlZmluZSBBVURJT19TRVRfQ09ORklHIF9JT1coQVVESU9fSU9DVExfTUFHSUMsIDQsIHVuc2lnbmVkKQorI2RlZmluZSBBVURJT19HRVRfU1RBVFMgX0lPUihBVURJT19JT0NUTF9NQUdJQywgNSwgdW5zaWduZWQpCisjZGVmaW5lIEFVRElPX0VOQUJMRV9BVURQUCBfSU9XKEFVRElPX0lPQ1RMX01BR0lDLCA2LCB1bnNpZ25lZCkKKyNkZWZpbmUgQVVESU9fU0VUX0FEUkMgX0lPVyhBVURJT19JT0NUTF9NQUdJQywgNywgdW5zaWduZWQpCisjZGVmaW5lIEFVRElPX1NFVF9FUSBfSU9XKEFVRElPX0lPQ1RMX01BR0lDLCA4LCB1bnNpZ25lZCkKKyNkZWZpbmUgQVVESU9fU0VUX1JYX0lJUiBfSU9XKEFVRElPX0lPQ1RMX01BR0lDLCA5LCB1bnNpZ25lZCkKKyNkZWZpbmUgQVVESU9fU0VUX1ZPTFVNRSBfSU9XKEFVRElPX0lPQ1RMX01BR0lDLCAxMCwgdW5zaWduZWQpCisjZGVmaW5lIEFVRElPX0VOQUJMRV9BVURQUkUgX0lPVyhBVURJT19JT0NUTF9NQUdJQywgMTEsIHVuc2lnbmVkKQorI2RlZmluZSBBVURJT19TRVRfQUdDIF9JT1coQVVESU9fSU9DVExfTUFHSUMsIDEyLCB1bnNpZ25lZCkKKyNkZWZpbmUgQVVESU9fU0VUX05TIF9JT1coQVVESU9fSU9DVExfTUFHSUMsIDEzLCB1bnNpZ25lZCkKKyNkZWZpbmUgQVVESU9fU0VUX1RYX0lJUiBfSU9XKEFVRElPX0lPQ1RMX01BR0lDLCAxNCwgdW5zaWduZWQpCisKK3N0cnVjdCBtc21fYXVkaW9fY29uZmlnIHsKKyB1aW50MzJfdCBidWZmZXJfc2l6ZTsKKyB1aW50MzJfdCBidWZmZXJfY291bnQ7CisgdWludDMyX3QgY2hhbm5lbF9jb3VudDsKKyB1aW50MzJfdCBzYW1wbGVfcmF0ZTsKKyB1aW50MzJfdCB0eXBlOworIHVpbnQzMl90IHVudXNlZFszXTsKK307CisKK3N0cnVjdCBtc21fYXVkaW9fc3RhdHMgeworIHVpbnQzMl90IGJ5dGVfY291bnQ7CisgdWludDMyX3Qgc2FtcGxlX2NvdW50OworIHVpbnQzMl90IHVudXNlZFsyXTsKK307CisKKyNkZWZpbmUgU05EX0lPQ1RMX01BR0lDICdzJworCisjZGVmaW5lIFNORF9NVVRFX1VOTVVURUQgMAorI2RlZmluZSBTTkRfTVVURV9NVVRFRCAxCisKK3N0cnVjdCBtc21fc25kX2RldmljZV9jb25maWcgeworIHVpbnQzMl90IGRldmljZTsKKyB1aW50MzJfdCBlYXJfbXV0ZTsKKyB1aW50MzJfdCBtaWNfbXV0ZTsKK307CisKKyNkZWZpbmUgU05EX1NFVF9ERVZJQ0UgX0lPVyhTTkRfSU9DVExfTUFHSUMsIDIsIHN0cnVjdCBtc21fZGV2aWNlX2NvbmZpZyAqKQorCisjZGVmaW5lIFNORF9NRVRIT0RfVk9JQ0UgMAorCitzdHJ1Y3QgbXNtX3NuZF92b2x1bWVfY29uZmlnIHsKKyB1aW50MzJfdCBkZXZpY2U7CisgdWludDMyX3QgbWV0aG9kOworIHVpbnQzMl90IHZvbHVtZTsKK307CisKKyNkZWZpbmUgU05EX1NFVF9WT0xVTUUgX0lPVyhTTkRfSU9DVExfTUFHSUMsIDMsIHN0cnVjdCBtc21fc25kX3ZvbHVtZV9jb25maWcgKikKKworI2RlZmluZSBTTkRfR0VUX05VTV9FTkRQT0lOVFMgX0lPUihTTkRfSU9DVExfTUFHSUMsIDQsIHVuc2lnbmVkICopCisKK3N0cnVjdCBtc21fc25kX2VuZHBvaW50IHsKKyBpbnQgaWQ7CisgY2hhciBuYW1lWzY0XTsKK307CisKKyNkZWZpbmUgU05EX0dFVF9FTkRQT0lOVCBfSU9XUihTTkRfSU9DVExfTUFHSUMsIDUsIHN0cnVjdCBtc21fc25kX2VuZHBvaW50ICopCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXNtX21kcC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21zbV9tZHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTBlZDQzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21zbV9tZHAuaApAQCAtMCwwICsxLDgyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9NU01fTURQX0hfCisjZGVmaW5lIF9NU01fTURQX0hfCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjZGVmaW5lIE1TTUZCX0lPQ1RMX01BR0lDICdtJworI2RlZmluZSBNU01GQl9HUlBfRElTUCBfSU9XKE1TTUZCX0lPQ1RMX01BR0lDLCAxLCB1bnNpZ25lZCBpbnQpCisjZGVmaW5lIE1TTUZCX0JMSVQgX0lPVyhNU01GQl9JT0NUTF9NQUdJQywgMiwgdW5zaWduZWQgaW50KQorCitlbnVtIHsKKyBNRFBfUkdCXzU2NSwKKyBNRFBfWFJHQl84ODg4LAorIE1EUF9ZX0NCQ1JfSDJWMiwKKyBNRFBfQVJHQl84ODg4LAorIE1EUF9SR0JfODg4LAorIE1EUF9ZX0NSQ0JfSDJWMiwKKyBNRFBfWUNSWUNCX0gyVjEsCisgTURQX1lfQ1JDQl9IMlYxLAorIE1EUF9ZX0NCQ1JfSDJWMSwKKyBNRFBfUkdCQV84ODg4LAorIE1EUF9CR1JBXzg4ODgsCisgTURQX0lNR1RZUEVfTElNSVQKK307CisKK2VudW0geworIFBNRU1fSU1HLAorIEZCX0lNRywKK307CisKKyNkZWZpbmUgTURQX1JPVF9OT1AgMAorI2RlZmluZSBNRFBfRkxJUF9MUiAweDEKKyNkZWZpbmUgTURQX0ZMSVBfVUQgMHgyCisjZGVmaW5lIE1EUF9ST1RfOTAgMHg0CisjZGVmaW5lIE1EUF9ST1RfMTgwIChNRFBfRkxJUF9VRHxNRFBfRkxJUF9MUikKKyNkZWZpbmUgTURQX1JPVF8yNzAgKE1EUF9ST1RfOTB8TURQX0ZMSVBfVUR8TURQX0ZMSVBfTFIpCisjZGVmaW5lIE1EUF9ESVRIRVIgMHg4CisKKyNkZWZpbmUgTURQX1RSQU5TUF9OT1AgMHhmZmZmZmZmZgorI2RlZmluZSBNRFBfQUxQSEFfTk9QIDB4ZmYKKworc3RydWN0IG1kcF9yZWN0IHsKKyB1aW50MzJfdCB4OworIHVpbnQzMl90IHk7CisgdWludDMyX3QgdzsKKyB1aW50MzJfdCBoOworfTsKKworc3RydWN0IG1kcF9pbWcgeworIHVpbnQzMl90IHdpZHRoOworIHVpbnQzMl90IGhlaWdodDsKKyB1aW50MzJfdCBmb3JtYXQ7CisgdWludDMyX3Qgb2Zmc2V0OworIGludCBtZW1vcnlfaWQ7Cit9OworCitzdHJ1Y3QgbWRwX2JsaXRfcmVxIHsKKyBzdHJ1Y3QgbWRwX2ltZyBzcmM7Cisgc3RydWN0IG1kcF9pbWcgZHN0OworIHN0cnVjdCBtZHBfcmVjdCBzcmNfcmVjdDsKKyBzdHJ1Y3QgbWRwX3JlY3QgZHN0X3JlY3Q7CisgdWludDMyX3QgYWxwaGE7CisgdWludDMyX3QgdHJhbnNwX21hc2s7CisgdWludDMyX3QgZmxhZ3M7Cit9OworCitzdHJ1Y3QgbWRwX2JsaXRfcmVxX2xpc3QgeworIHVpbnQzMl90IGNvdW50OworIHN0cnVjdCBtZHBfYmxpdF9yZXEgcmVxW107Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdDl0MDEzLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXQ5dDAxMy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExZGM0YjMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXQ5dDAxMy5oCkBAIC0wLDAgKzEsMTEwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIENBTUVSQV9NVDlUMDEzX0gKKyNkZWZpbmUgQ0FNRVJBX01UOVQwMTNfSAorI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisjaW5jbHVkZSA8YXNtL3NpemVzLmg+CisKKyNkZWZpbmUgTVQ5VDAxM19JMkNfSU9DVExfTUFHSUMgJ20nCisKKyNkZWZpbmUgTVQ5VDAxM19JMkNfSU9DVExfVyAgIF9JT1coTVQ5VDAxM19JMkNfSU9DVExfTUFHSUMsIDAsIHVuc2lnbmVkKQorCisjZGVmaW5lIE1UOVQwMTNfSTJDX0lPQ1RMX1IgICBfSU9SKE1UOVQwMTNfSTJDX0lPQ1RMX01BR0lDLCAxLCB1bnNpZ25lZCkKKworI2RlZmluZSBNVDlUMDEzX0kyQ19JT0NUTF9BRl9XICAgX0lPVyhNVDlUMDEzX0kyQ19JT0NUTF9NQUdJQywgMiwgdW5zaWduZWQpCisKKyNkZWZpbmUgTVQ5VDAxM19JMkNfSU9DVExfQ0FNSUZfUEFEX1JFR19SRVNFVCAgIF9JTyhNVDlUMDEzX0kyQ19JT0NUTF9NQUdJQywgMykKKworI2RlZmluZSBNVDlUMDEzX0kyQ19JT0NUTF9DQU1JRl9QQURfUkVHX1JFU0VUXzIgICBfSU8oTVQ5VDAxM19JMkNfSU9DVExfTUFHSUMsIDQpCisKKyNkZWZpbmUgQ0FNRVJBX0NPTkZJR1VSRV9HUElPUyAgIF9JTyhNVDlUMDEzX0kyQ19JT0NUTF9NQUdJQywgNykKKworI2RlZmluZSBDQU1FUkFfVU5DT05GSUdVUkVfR1BJT1MgICBfSU8oTVQ5VDAxM19JMkNfSU9DVExfTUFHSUMsIDgpCisKKyNkZWZpbmUgQ0FNRVJBX0xFTlNfUE9XRVJfT04gICBfSU8oTVQ5VDAxM19JMkNfSU9DVExfTUFHSUMsIDkpCisKKyNkZWZpbmUgQ0FNRVJBX0xFTlNfUE9XRVJfT0ZGICAgX0lPKE1UOVQwMTNfSTJDX0lPQ1RMX01BR0lDLCAxMCkKKworI2RlZmluZSBNVDlUMDEzX0kyQ19JT0NUTF9DQU1JRl9BUFBTX1JFU0VUICAgX0lPKE1UOVQwMTNfSTJDX0lPQ1RMX01BR0lDLCAxMSkKKworI2RlZmluZSBDQU1JT19WRkVfTURDX0NMSyAxICAKKyNkZWZpbmUgQ0FNSU9fTURDX0NMSyAyICAKKyNkZWZpbmUgQ0FNSU9fVkZFX0NMSyAzICAKKworI2RlZmluZSBNVDlUMDEzX0kyQ19JT0NUTF9DTEtfRU5BQkxFICAgX0lPVyhNVDlUMDEzX0kyQ19JT0NUTF9NQUdJQywgMTIsIHVuc2lnbmVkKQorCisjZGVmaW5lIE1UOVQwMTNfSTJDX0lPQ1RMX0NMS19ESVNBQkxFICAgX0lPVyhNVDlUMDEzX0kyQ19JT0NUTF9NQUdJQywgMTMsIHVuc2lnbmVkKQorCisjZGVmaW5lIE1UOVQwMTNfSTJDX0lPQ1RMX0NMS19TRUxFQ1QgICBfSU9XKE1UOVQwMTNfSTJDX0lPQ1RMX01BR0lDLCAxNCwgdW5zaWduZWQpCisKKyNkZWZpbmUgTVQ5VDAxM19JMkNfSU9DVExfQ0xLX0ZSRVFfUFJPRyAgIF9JT1coTVQ5VDAxM19JMkNfSU9DVExfTUFHSUMsIDE1LCB1bnNpZ25lZCkKKworI2RlZmluZSBDQU1TRU5TT1JfUkVHX0lOSVQgMDw8MAorI2RlZmluZSBDQU1TRU5TT1JfUkVHX1VQREFURV9QRVJJT0RJQyAxPDwwCisjZGVmaW5lIENBTVNFTlNPUl9UWVBFX1BSRVZJRVcgMDw8MQorI2RlZmluZSBDQU1TRU5TT1JfVFlQRV9TTkFQU0hPVCAxPDwxCisKKyNkZWZpbmUgTVQ5VDAxM19JMkNfSU9DVExfU0VOU09SX1NFVFRJTkcgICBfSU9XKE1UOVQwMTNfSTJDX0lPQ1RMX01BR0lDLCAxNiwgdWludDMyX3QpCisKK3N0cnVjdCBtdDl0MDEzX3JlZ19zdHJ1Y3QKK3sKKyB1aW50MTZfdCB2dF9waXhfY2xrX2RpdjsKKyB1aW50MTZfdCB2dF9zeXNfY2xrX2RpdjsKKyB1aW50MTZfdCBwcmVfcGxsX2Nsa19kaXY7CisgdWludDE2X3QgcGxsX211bHRpcGxpZXI7CisgdWludDE2X3Qgb3BfcGl4X2Nsa19kaXY7CisgdWludDE2X3Qgb3Bfc3lzX2Nsa19kaXY7CisgdWludDE2X3Qgc2NhbGVfbTsKKyB1aW50MTZfdCByb3dfc3BlZWQ7CisgdWludDE2X3QgeF9hZGRyX3N0YXJ0OworIHVpbnQxNl90IHhfYWRkcl9lbmQ7CisgdWludDE2X3QgeV9hZGRyX3N0YXJ0OworIHVpbnQxNl90IHlfYWRkcl9lbmQ7CisgdWludDE2X3QgcmVhZF9tb2RlOworIHVpbnQxNl90IHhfb3V0cHV0X3NpemUgOworIHVpbnQxNl90IHlfb3V0cHV0X3NpemU7CisgdWludDE2X3QgbGluZV9sZW5ndGhfcGNrOworIHVpbnQxNl90IGZyYW1lX2xlbmd0aF9saW5lczsKKyB1aW50MTZfdCBjb2Fyc2VfaW50ZWdyYXRpb25fdGltZTsKKyB1aW50MTZfdCBmaW5lX2ludGVncmF0aW9uX3RpbWU7Cit9OworCitzdHJ1Y3QgbXQ5dDAxM19yZWdfcGF0IHsKKyBzdHJ1Y3QgbXQ5dDAxM19yZWdfc3RydWN0IHJlZ1syXTsKK307CisKKyNkZWZpbmUgTVQ5VDAxM19JMkNfSU9DVExfR0VUX1JFR0lTVEVSUyAgIF9JT1IoTVQ5VDAxM19JMkNfSU9DVExfTUFHSUMsIDE3LCBzdHJ1Y3QgbXQ5dDAxM19yZWdfcGF0ICopCisKK3N0cnVjdCBtdDl0MDEzX2V4cG9zdXJlX2dhaW4geworIHVpbnQxNl90IGdhaW47CisgdWludDE2X3QgbGluZTsKK307CisKKyNkZWZpbmUgTVQ5VDAxM19JMkNfSU9DVExfRVhQT1NVUkVfR0FJTiAgIF9JT1coTVQ5VDAxM19JMkNfSU9DVExfTUFHSUMsIDE4LCBzdHJ1Y3QgZXhwb3N1cmVfZ2FpbiAqKQorCisjZGVmaW5lIE1UOVQwMTNfSTJDX0lPQ1RMX01PVkVfRk9DVVMgICBfSU9XKE1UOVQwMTNfSTJDX0lPQ1RMX01BR0lDLCAxOSwgdWludDMyX3QpCisKKyNkZWZpbmUgTVQ5VDAxM19JMkNfSU9DVExfU0VUX0RFRkFVTFRfRk9DVVMgICBfSU9XKE1UOVQwMTNfSTJDX0lPQ1RMX01BR0lDLCAyMCwgdWludDMyX3QpCisKKyNkZWZpbmUgTVQ5VDAxM19JMkNfSU9DVExfUE9XRVJfRE9XTiAgIF9JTyhNVDlUMDEzX0kyQ19JT0NUTF9NQUdJQywgMjEpCisKK3N0cnVjdCBtdDl0MDEzX2luaXQgeworIGludCBwcmV2aWV3OworIHVpbnQxNl90IGNoaXBpZDsKK307CisKKyNkZWZpbmUgTVQ5VDAxM19JMkNfSU9DVExfSU5JVCAgIF9JT1dSKE1UOVQwMTNfSTJDX0lPQ1RMX01BR0lDLCAyMiwgc3RydWN0IG10OXQwMTNfaW5pdCAqKQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L210ZC9iYm0uaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdGQvYmJtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTMxMWIyMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdGQvYmJtLmgKQEAgLTAsMCArMSw3NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0xJTlVYX01URF9CQk1fSAorI2RlZmluZSBfX0xJTlVYX01URF9CQk1fSAorCisjZGVmaW5lIE5BTkRfTUFYX0NISVBTIDgKKworc3RydWN0IG5hbmRfYmJ0X2Rlc2NyIHsKKyBpbnQgb3B0aW9uczsKKyBpbnQgcGFnZXNbTkFORF9NQVhfQ0hJUFNdOworIGludCBvZmZzOworIGludCB2ZXJvZmZzOworIHVpbnQ4X3QgdmVyc2lvbltOQU5EX01BWF9DSElQU107CisgaW50IGxlbjsKKyBpbnQgbWF4YmxvY2tzOworIGludCByZXNlcnZlZF9ibG9ja19jb2RlOworIHVpbnQ4X3QgKnBhdHRlcm47Cit9OworCisjZGVmaW5lIE5BTkRfQkJUX05SQklUU19NU0sgMHgwMDAwMDAwRgorI2RlZmluZSBOQU5EX0JCVF8xQklUIDB4MDAwMDAwMDEKKyNkZWZpbmUgTkFORF9CQlRfMkJJVCAweDAwMDAwMDAyCisjZGVmaW5lIE5BTkRfQkJUXzRCSVQgMHgwMDAwMDAwNAorI2RlZmluZSBOQU5EX0JCVF84QklUIDB4MDAwMDAwMDgKKworI2RlZmluZSBOQU5EX0JCVF9MQVNUQkxPQ0sgMHgwMDAwMDAxMAorCisjZGVmaW5lIE5BTkRfQkJUX0FCU1BBR0UgMHgwMDAwMDAyMAorCisjZGVmaW5lIE5BTkRfQkJUX1NFQVJDSCAweDAwMDAwMDQwCisKKyNkZWZpbmUgTkFORF9CQlRfUEVSQ0hJUCAweDAwMDAwMDgwCisKKyNkZWZpbmUgTkFORF9CQlRfVkVSU0lPTiAweDAwMDAwMTAwCisKKyNkZWZpbmUgTkFORF9CQlRfQ1JFQVRFIDB4MDAwMDAyMDAKKworI2RlZmluZSBOQU5EX0JCVF9TQ0FOQUxMUEFHRVMgMHgwMDAwMDQwMAorCisjZGVmaW5lIE5BTkRfQkJUX1NDQU5FTVBUWSAweDAwMDAwODAwCisKKyNkZWZpbmUgTkFORF9CQlRfV1JJVEUgMHgwMDAwMTAwMAorCisjZGVmaW5lIE5BTkRfQkJUX1NBVkVDT05URU5UIDB4MDAwMDIwMDAKKworI2RlZmluZSBOQU5EX0JCVF9TQ0FOMk5EUEFHRSAweDAwMDA0MDAwCisKKyNkZWZpbmUgTkFORF9CQlRfU0NBTl9NQVhCTE9DS1MgNAorCisjZGVmaW5lIE9ORU5BTkRfQkFEQkxPQ0tfUE9TIDAKKworc3RydWN0IGJibV9pbmZvIHsKKyBpbnQgYmJ0X2VyYXNlX3NoaWZ0OworIGludCBiYWRibG9ja3BvczsKKyBpbnQgb3B0aW9uczsKKworIHVpbnQ4X3QgKmJidDsKKworIGludCAoKmlzYmFkX2JidCkoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsIGludCBhbGxvd2JidCk7CisKKyBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgKmJhZGJsb2NrX3BhdHRlcm47CisKKyB2b2lkICpwcml2OworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXRkL2Jsa3RyYW5zLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXRkL2Jsa3RyYW5zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M0MDcyNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdGQvYmxrdHJhbnMuaApAQCAtMCwwICsxLDYzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTVREX1RSQU5TX0hfXworI2RlZmluZSBfX01URF9UUkFOU19IX18KKworI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisKK3N0cnVjdCBoZF9nZW9tZXRyeTsKK3N0cnVjdCBtdGRfaW5mbzsKK3N0cnVjdCBtdGRfYmxrdHJhbnNfb3BzOworc3RydWN0IGZpbGU7CitzdHJ1Y3QgaW5vZGU7CisKK3N0cnVjdCBtdGRfYmxrdHJhbnNfZGV2IHsKKyBzdHJ1Y3QgbXRkX2Jsa3RyYW5zX29wcyAqdHI7Cisgc3RydWN0IGxpc3RfaGVhZCBsaXN0OworIHN0cnVjdCBtdGRfaW5mbyAqbXRkOworIHN0cnVjdCBtdXRleCBsb2NrOworIGludCBkZXZudW07CisgaW50IGJsa3NpemU7CisgdW5zaWduZWQgbG9uZyBzaXplOworIGludCByZWFkb25seTsKKyB2b2lkICpibGtjb3JlX3ByaXY7Cit9OworCitzdHJ1Y3QgYmxrY29yZV9wcml2OworCitzdHJ1Y3QgbXRkX2Jsa3RyYW5zX29wcyB7CisgY2hhciAqbmFtZTsKKyBpbnQgbWFqb3I7CisgaW50IHBhcnRfYml0czsKKworIGludCAoKnJlYWRzZWN0KShzdHJ1Y3QgbXRkX2Jsa3RyYW5zX2RldiAqZGV2LAorIHVuc2lnbmVkIGxvbmcgYmxvY2ssIGNoYXIgKmJ1ZmZlcik7CisgaW50ICgqd3JpdGVzZWN0KShzdHJ1Y3QgbXRkX2Jsa3RyYW5zX2RldiAqZGV2LAorIHVuc2lnbmVkIGxvbmcgYmxvY2ssIGNoYXIgKmJ1ZmZlcik7CisKKyBpbnQgKCpnZXRnZW8pKHN0cnVjdCBtdGRfYmxrdHJhbnNfZGV2ICpkZXYsIHN0cnVjdCBoZF9nZW9tZXRyeSAqZ2VvKTsKKyBpbnQgKCpmbHVzaCkoc3RydWN0IG10ZF9ibGt0cmFuc19kZXYgKmRldik7CisKKyBpbnQgKCpvcGVuKShzdHJ1Y3QgbXRkX2Jsa3RyYW5zX2RldiAqZGV2KTsKKyBpbnQgKCpyZWxlYXNlKShzdHJ1Y3QgbXRkX2Jsa3RyYW5zX2RldiAqZGV2KTsKKworIHZvaWQgKCphZGRfbXRkKShzdHJ1Y3QgbXRkX2Jsa3RyYW5zX29wcyAqdHIsIHN0cnVjdCBtdGRfaW5mbyAqbXRkKTsKKyB2b2lkICgqcmVtb3ZlX2Rldikoc3RydWN0IG10ZF9ibGt0cmFuc19kZXYgKmRldik7CisKKyBzdHJ1Y3QgbGlzdF9oZWFkIGRldnM7Cisgc3RydWN0IGxpc3RfaGVhZCBsaXN0OworIHN0cnVjdCBtb2R1bGUgKm93bmVyOworCisgc3RydWN0IG10ZF9ibGtjb3JlX3ByaXYgKmJsa2NvcmVfcHJpdjsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L210ZC9jZmkuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdGQvY2ZpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdmMWJhMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdGQvY2ZpLmgKQEAgLTAsMCArMSwxODcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19NVERfQ0ZJX0hfXworI2RlZmluZSBfX01URF9DRklfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbXRkL2ZsYXNoY2hpcC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvY2ZpX2VuZGlhbi5oPgorCisjZGVmaW5lIGNmaV9pbnRlcmxlYXZlX2lzXzEoY2ZpKSAoMCkKKworI2RlZmluZSBjZmlfaW50ZXJsZWF2ZV9pc18yKGNmaSkgKDApCisKKyNkZWZpbmUgY2ZpX2ludGVybGVhdmVfaXNfNChjZmkpICgwKQorCisjZGVmaW5lIGNmaV9pbnRlcmxlYXZlX2lzXzgoY2ZpKSAoMCkKKworI2RlZmluZSBDRklfREVWSUNFVFlQRV9YOCAoOCAvIDgpCisjZGVmaW5lIENGSV9ERVZJQ0VUWVBFX1gxNiAoMTYgLyA4KQorI2RlZmluZSBDRklfREVWSUNFVFlQRV9YMzIgKDMyIC8gOCkKKyNkZWZpbmUgQ0ZJX0RFVklDRVRZUEVfWDY0ICg2NCAvIDgpCisKK3N0cnVjdCBjZmlfZXh0cXVlcnkgeworIHVpbnQ4X3QgcHJpWzNdOworIHVpbnQ4X3QgTWFqb3JWZXJzaW9uOworIHVpbnQ4X3QgTWlub3JWZXJzaW9uOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGNmaV9wcmlfaW50ZWxleHQgeworIHVpbnQ4X3QgcHJpWzNdOworIHVpbnQ4X3QgTWFqb3JWZXJzaW9uOworIHVpbnQ4X3QgTWlub3JWZXJzaW9uOworIHVpbnQzMl90IEZlYXR1cmVTdXBwb3J0OworIHVpbnQ4X3QgU3VzcGVuZENtZFN1cHBvcnQ7CisgdWludDE2X3QgQmxrU3RhdHVzUmVnTWFzazsKKyB1aW50OF90IFZjY09wdGltYWw7CisgdWludDhfdCBWcHBPcHRpbWFsOworIHVpbnQ4X3QgTnVtUHJvdGVjdGlvbkZpZWxkczsKKyB1aW50MTZfdCBQcm90UmVnQWRkcjsKKyB1aW50OF90IEZhY3RQcm90UmVnU2l6ZTsKKyB1aW50OF90IFVzZXJQcm90UmVnU2l6ZTsKKyB1aW50OF90IGV4dHJhWzBdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGNmaV9pbnRlbGV4dF9vdHBpbmZvIHsKKyB1aW50MzJfdCBQcm90UmVnQWRkcjsKKyB1aW50MTZfdCBGYWN0R3JvdXBzOworIHVpbnQ4X3QgRmFjdFByb3RSZWdTaXplOworIHVpbnQxNl90IFVzZXJHcm91cHM7CisgdWludDhfdCBVc2VyUHJvdFJlZ1NpemU7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgY2ZpX2ludGVsZXh0X2Jsb2NraW5mbyB7CisgdWludDE2X3QgTnVtSWRlbnRCbG9ja3M7CisgdWludDE2X3QgQmxvY2tTaXplOworIHVpbnQxNl90IE1pbkJsb2NrRXJhc2VDeWNsZXM7CisgdWludDhfdCBCaXRzUGVyQ2VsbDsKKyB1aW50OF90IEJsb2NrQ2FwOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGNmaV9pbnRlbGV4dF9yZWdpb25pbmZvIHsKKyB1aW50MTZfdCBOdW1JZGVudFBhcnRpdGlvbnM7CisgdWludDhfdCBOdW1PcEFsbG93ZWQ7CisgdWludDhfdCBOdW1PcEFsbG93ZWRTaW1Qcm9nTW9kZTsKKyB1aW50OF90IE51bU9wQWxsb3dlZFNpbUVyYU1vZGU7CisgdWludDhfdCBOdW1CbG9ja1R5cGVzOworIHN0cnVjdCBjZmlfaW50ZWxleHRfYmxvY2tpbmZvIEJsb2NrVHlwZXNbMV07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgY2ZpX2ludGVsZXh0X3Byb2dyYW1taW5nX3JlZ2lvbmluZm8geworIHVpbnQ4X3QgUHJvZ1JlZ1NoaWZ0OworIHVpbnQ4X3QgUmVzZXJ2ZWQxOworIHVpbnQ4X3QgQ29udHJvbFZhbGlkOworIHVpbnQ4X3QgUmVzZXJ2ZWQyOworIHVpbnQ4X3QgQ29udHJvbEludmFsaWQ7CisgdWludDhfdCBSZXNlcnZlZDM7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgY2ZpX3ByaV9hbWRzdGQgeworIHVpbnQ4X3QgcHJpWzNdOworIHVpbnQ4X3QgTWFqb3JWZXJzaW9uOworIHVpbnQ4X3QgTWlub3JWZXJzaW9uOworIHVpbnQ4X3QgU2lsaWNvblJldmlzaW9uOworIHVpbnQ4X3QgRXJhc2VTdXNwZW5kOworIHVpbnQ4X3QgQmxrUHJvdDsKKyB1aW50OF90IFRtcEJsa1VucHJvdGVjdDsKKyB1aW50OF90IEJsa1Byb3RVbnByb3Q7CisgdWludDhfdCBTaW11bHRhbmVvdXNPcHM7CisgdWludDhfdCBCdXJzdE1vZGU7CisgdWludDhfdCBQYWdlTW9kZTsKKyB1aW50OF90IFZwcE1pbjsKKyB1aW50OF90IFZwcE1heDsKKyB1aW50OF90IFRvcEJvdHRvbTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBjZmlfcHJpX2F0bWVsIHsKKyB1aW50OF90IHByaVszXTsKKyB1aW50OF90IE1ham9yVmVyc2lvbjsKKyB1aW50OF90IE1pbm9yVmVyc2lvbjsKKyB1aW50OF90IEZlYXR1cmVzOworIHVpbnQ4X3QgQm90dG9tQm9vdDsKKyB1aW50OF90IEJ1cnN0TW9kZTsKKyB1aW50OF90IFBhZ2VNb2RlOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGNmaV9wcmlfcXVlcnkgeworIHVpbnQ4X3QgTnVtRmllbGRzOworIHVpbnQzMl90IFByb3RGaWVsZFsxXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBjZmlfYnJpX3F1ZXJ5IHsKKyB1aW50OF90IFBhZ2VNb2RlUmVhZENhcDsKKyB1aW50OF90IE51bUZpZWxkczsKKyB1aW50MzJfdCBDb25mRmllbGRbMV07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIFBfSURfTk9ORSAweDAwMDAKKyNkZWZpbmUgUF9JRF9JTlRFTF9FWFQgMHgwMDAxCisjZGVmaW5lIFBfSURfQU1EX1NURCAweDAwMDIKKyNkZWZpbmUgUF9JRF9JTlRFTF9TVEQgMHgwMDAzCisjZGVmaW5lIFBfSURfQU1EX0VYVCAweDAwMDQKKyNkZWZpbmUgUF9JRF9XSU5CT05EIDB4MDAwNgorI2RlZmluZSBQX0lEX1NUX0FEViAweDAwMjAKKyNkZWZpbmUgUF9JRF9NSVRTVUJJU0hJX1NURCAweDAxMDAKKyNkZWZpbmUgUF9JRF9NSVRTVUJJU0hJX0VYVCAweDAxMDEKKyNkZWZpbmUgUF9JRF9TU1RfUEFHRSAweDAxMDIKKyNkZWZpbmUgUF9JRF9JTlRFTF9QRVJGT1JNQU5DRSAweDAyMDAKKyNkZWZpbmUgUF9JRF9JTlRFTF9EQVRBIDB4MDIxMAorI2RlZmluZSBQX0lEX1JFU0VSVkVEIDB4ZmZmZgorCisjZGVmaW5lIENGSV9NT0RFX0NGSSAxCisjZGVmaW5lIENGSV9NT0RFX0pFREVDIDAKKworc3RydWN0IGNmaV9wcml2YXRlIHsKKyB1aW50MTZfdCBjbWRzZXQ7Cisgdm9pZCAqY21kc2V0X3ByaXY7CisgaW50IGludGVybGVhdmU7CisgaW50IGRldmljZV90eXBlOworIGludCBjZmlfbW9kZTsKKyBpbnQgYWRkcl91bmxvY2sxOworIGludCBhZGRyX3VubG9jazI7Cisgc3RydWN0IG10ZF9pbmZvICooKmNtZHNldF9zZXR1cCkoc3RydWN0IG1hcF9pbmZvICopOworIHN0cnVjdCBjZmlfaWRlbnQgKmNmaXE7CisgaW50IG1mciwgaWQ7CisgaW50IG51bWNoaXBzOworIHVuc2lnbmVkIGxvbmcgY2hpcHNoaWZ0OworIGNvbnN0IGNoYXIgKmltX25hbWU7Cisgc3RydWN0IGZsY2hpcCBjaGlwc1swXTsKK307CisKKyNpZiBCSVRTX1BFUl9MT05HID49IDY0CisjZW5kaWYKKyNkZWZpbmUgQ01EKHgpIGNmaV9idWlsZF9jbWQoKHgpLCBtYXAsIGNmaSkKKyNpZiBCSVRTX1BFUl9MT05HID49IDY0CisjZW5kaWYKKyNkZWZpbmUgTUVSR0VTVEFUVVMoeCkgY2ZpX21lcmdlX3N0YXR1cygoeCksIG1hcCwgY2ZpKQorCitzdHJ1Y3QgY2ZpX2ZpeHVwIHsKKyB1aW50MTZfdCBtZnI7CisgdWludDE2X3QgaWQ7Cisgdm9pZCAoKmZpeHVwKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdm9pZCogcGFyYW0pOworIHZvaWQqIHBhcmFtOworfTsKKworI2RlZmluZSBDRklfTUZSX0FOWSAweGZmZmYKKyNkZWZpbmUgQ0ZJX0lEX0FOWSAweGZmZmYKKworI2RlZmluZSBDRklfTUZSX0FNRCAweDAwMDEKKyNkZWZpbmUgQ0ZJX01GUl9BVE1FTCAweDAwMUYKKyNkZWZpbmUgQ0ZJX01GUl9TVCAweDAwMjAgIAorCit0eXBlZGVmIGludCAoKnZhcnNpemVfZnJvYl90KShzdHJ1Y3QgbWFwX2luZm8gKm1hcCwgc3RydWN0IGZsY2hpcCAqY2hpcCwKKyB1bnNpZ25lZCBsb25nIGFkciwgaW50IGxlbiwgdm9pZCAqdGh1bmspOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdGQvY2ZpX2VuZGlhbi5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L210ZC9jZmlfZW5kaWFuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDUyMDkxZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdGQvY2ZpX2VuZGlhbi5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisKKyNkZWZpbmUgQ0ZJX0hPU1RfRU5ESUFOCisKKyNpZmRlZiBDRklfTElUVExFX0VORElBTgorI2RlZmluZSBjcHVfdG9fY2ZpOCh4KSAoeCkKKyNkZWZpbmUgY2ZpOF90b19jcHUoeCkgKHgpCisjZGVmaW5lIGNwdV90b19jZmkxNih4KSBjcHVfdG9fbGUxNih4KQorI2RlZmluZSBjcHVfdG9fY2ZpMzIoeCkgY3B1X3RvX2xlMzIoeCkKKyNkZWZpbmUgY3B1X3RvX2NmaTY0KHgpIGNwdV90b19sZTY0KHgpCisjZGVmaW5lIGNmaTE2X3RvX2NwdSh4KSBsZTE2X3RvX2NwdSh4KQorI2RlZmluZSBjZmkzMl90b19jcHUoeCkgbGUzMl90b19jcHUoeCkKKyNkZWZpbmUgY2ZpNjRfdG9fY3B1KHgpIGxlNjRfdG9fY3B1KHgpCisjZWxpZiBkZWZpbmVkIChDRklfQklHX0VORElBTikKKyNkZWZpbmUgY3B1X3RvX2NmaTgoeCkgKHgpCisjZGVmaW5lIGNmaThfdG9fY3B1KHgpICh4KQorI2RlZmluZSBjcHVfdG9fY2ZpMTYoeCkgY3B1X3RvX2JlMTYoeCkKKyNkZWZpbmUgY3B1X3RvX2NmaTMyKHgpIGNwdV90b19iZTMyKHgpCisjZGVmaW5lIGNwdV90b19jZmk2NCh4KSBjcHVfdG9fYmU2NCh4KQorI2RlZmluZSBjZmkxNl90b19jcHUoeCkgYmUxNl90b19jcHUoeCkKKyNkZWZpbmUgY2ZpMzJfdG9fY3B1KHgpIGJlMzJfdG9fY3B1KHgpCisjZGVmaW5lIGNmaTY0X3RvX2NwdSh4KSBiZTY0X3RvX2NwdSh4KQorI2VsaWYgZGVmaW5lZCAoQ0ZJX0hPU1RfRU5ESUFOKQorI2RlZmluZSBjcHVfdG9fY2ZpOCh4KSAoeCkKKyNkZWZpbmUgY2ZpOF90b19jcHUoeCkgKHgpCisjZGVmaW5lIGNwdV90b19jZmkxNih4KSAoeCkKKyNkZWZpbmUgY3B1X3RvX2NmaTMyKHgpICh4KQorI2RlZmluZSBjcHVfdG9fY2ZpNjQoeCkgKHgpCisjZGVmaW5lIGNmaTE2X3RvX2NwdSh4KSAoeCkKKyNkZWZpbmUgY2ZpMzJfdG9fY3B1KHgpICh4KQorI2RlZmluZSBjZmk2NF90b19jcHUoeCkgKHgpCisjZWxzZQorI2Vycm9yIE5vIENGSSBlbmRpYW5uZXNzIGRlZmluZWQKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L210ZC9jb21wYXRtYWMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdGQvY29tcGF0bWFjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQzZjQ2YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdGQvY29tcGF0bWFjLmgKQEAgLTAsMCArMSwxNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0xJTlVYX01URF9DT01QQVRNQUNfSF9fCisjZGVmaW5lIF9fTElOVVhfTVREX0NPTVBBVE1BQ19IX18KKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXRkL2ZsYXNoY2hpcC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L210ZC9mbGFzaGNoaXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDQxMDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L210ZC9mbGFzaGNoaXAuaApAQCAtMCwwICsxLDY4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTVREX0ZMQVNIQ0hJUF9IX18KKyNkZWZpbmUgX19NVERfRkxBU0hDSElQX0hfXworCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKwordHlwZWRlZiBlbnVtIHsKKyBGTF9SRUFEWSwKKyBGTF9TVEFUVVMsCisgRkxfQ0ZJX1FVRVJZLAorIEZMX0pFREVDX1FVRVJZLAorIEZMX0VSQVNJTkcsCisgRkxfRVJBU0VfU1VTUEVORElORywKKyBGTF9FUkFTRV9TVVNQRU5ERUQsCisgRkxfV1JJVElORywKKyBGTF9XUklUSU5HX1RPX0JVRkZFUiwKKyBGTF9PVFBfV1JJVEUsCisgRkxfV1JJVEVfU1VTUEVORElORywKKyBGTF9XUklURV9TVVNQRU5ERUQsCisgRkxfUE1fU1VTUEVOREVELAorIEZMX1NZTkNJTkcsCisgRkxfVU5MT0FESU5HLAorIEZMX0xPQ0tJTkcsCisgRkxfVU5MT0NLSU5HLAorIEZMX1BPSU5ULAorIEZMX1hJUF9XSElMRV9FUkFTSU5HLAorIEZMX1hJUF9XSElMRV9XUklUSU5HLAorIEZMX1VOS05PV04KK30gZmxzdGF0ZV90OworCitzdHJ1Y3QgZmxjaGlwIHsKKyB1bnNpZ25lZCBsb25nIHN0YXJ0OworCisgaW50IHJlZl9wb2ludF9jb3VudGVyOworIGZsc3RhdGVfdCBzdGF0ZTsKKyBmbHN0YXRlX3Qgb2xkc3RhdGU7CisKKyB1bnNpZ25lZCBpbnQgd3JpdGVfc3VzcGVuZGVkOjE7CisgdW5zaWduZWQgaW50IGVyYXNlX3N1c3BlbmRlZDoxOworIHVuc2lnbmVkIGxvbmcgaW5fcHJvZ3Jlc3NfYmxvY2tfYWRkcjsKKworIHNwaW5sb2NrX3QgKm11dGV4OworIHNwaW5sb2NrX3QgX3NwaW5sb2NrOworIHdhaXRfcXVldWVfaGVhZF90IHdxOworIGludCB3b3JkX3dyaXRlX3RpbWU7CisgaW50IGJ1ZmZlcl93cml0ZV90aW1lOworIGludCBlcmFzZV90aW1lOworCisgdm9pZCAqcHJpdjsKK307CisKK3N0cnVjdCBmbGNoaXBfc2hhcmVkIHsKKyBzcGlubG9ja190IGxvY2s7Cisgc3RydWN0IGZsY2hpcCAqd3JpdGluZzsKKyBzdHJ1Y3QgZmxjaGlwICplcmFzaW5nOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXRkL21hcC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L210ZC9tYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzEyNGJjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L210ZC9tYXAuaApAQCAtMCwwICsxLDEwMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0xJTlVYX01URF9NQVBfSF9fCisjZGVmaW5lIF9fTElOVVhfTVREX01BUF9IX18KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorCisjaW5jbHVkZSA8bGludXgvbXRkL2NvbXBhdG1hYy5oPgorCisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2RlZmluZSBtYXBfYmFua3dpZHRoX2lzXzEobWFwKSAoMCkKKworI2RlZmluZSBtYXBfYmFua3dpZHRoX2lzXzIobWFwKSAoMCkKKworI2RlZmluZSBtYXBfYmFua3dpZHRoX2lzXzQobWFwKSAoMCkKKworI2RlZmluZSBtYXBfY2FsY193b3JkcyhtYXApICgobWFwX2Jhbmt3aWR0aChtYXApICsgKHNpemVvZih1bnNpZ25lZCBsb25nKS0xKSkvIHNpemVvZih1bnNpZ25lZCBsb25nKSkKKworI2RlZmluZSBtYXBfYmFua3dpZHRoX2lzXzgobWFwKSAoMCkKKworI2RlZmluZSBtYXBfYmFua3dpZHRoX2lzXzE2KG1hcCkgKDApCisKKyNkZWZpbmUgbWFwX2Jhbmt3aWR0aF9pc18zMihtYXApICgwKQorCisjaWZuZGVmIG1hcF9iYW5rd2lkdGgKKyNlcnJvciAiTm8gYnVzIHdpZHRoIHN1cHBvcnRlZC4gV2hhdCdzIHRoZSBwb2ludD8iCisjZW5kaWYKKworI2RlZmluZSBNQVhfTUFQX0xPTkdTICggKChNQVhfTUFQX0JBTktXSURUSCo4KSArIEJJVFNfUEVSX0xPTkcgLSAxKSAvIEJJVFNfUEVSX0xPTkcgKQorCitzdHJ1Y3QgbWFwX2luZm8geworIGNoYXIgKm5hbWU7CisgdW5zaWduZWQgbG9uZyBzaXplOworIHVuc2lnbmVkIGxvbmcgcGh5czsKKyNkZWZpbmUgTk9fWElQICgtMVVMKQorCisgdm9pZCBfX2lvbWVtICp2aXJ0OworIHZvaWQgKmNhY2hlZDsKKworIGludCBiYW5rd2lkdGg7CisKKyB2b2lkICgqaW52YWxfY2FjaGUpKHN0cnVjdCBtYXBfaW5mbyAqLCB1bnNpZ25lZCBsb25nLCBzc2l6ZV90KTsKKworIHZvaWQgKCpzZXRfdnBwKShzdHJ1Y3QgbWFwX2luZm8gKiwgaW50KTsKKworIHVuc2lnbmVkIGxvbmcgbWFwX3ByaXZfMTsKKyB1bnNpZ25lZCBsb25nIG1hcF9wcml2XzI7Cisgdm9pZCAqZmxkcnZfcHJpdjsKKyBzdHJ1Y3QgbXRkX2NoaXBfZHJpdmVyICpmbGRydjsKK307CisKK3N0cnVjdCBtdGRfY2hpcF9kcml2ZXIgeworIHN0cnVjdCBtdGRfaW5mbyAqKCpwcm9iZSkoc3RydWN0IG1hcF9pbmZvICptYXApOworIHZvaWQgKCpkZXN0cm95KShzdHJ1Y3QgbXRkX2luZm8gKik7Cisgc3RydWN0IG1vZHVsZSAqbW9kdWxlOworIGNoYXIgKm5hbWU7Cisgc3RydWN0IGxpc3RfaGVhZCBsaXN0OworfTsKKworc3RydWN0IG10ZF9pbmZvICpkb19tYXBfcHJvYmUoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IG1hcF9pbmZvICptYXApOworCisjZGVmaW5lIEVOQUJMRV9WUFAobWFwKSBkbyB7IGlmKG1hcC0+c2V0X3ZwcCkgbWFwLT5zZXRfdnBwKG1hcCwgMSk7IH0gd2hpbGUoMCkKKyNkZWZpbmUgRElTQUJMRV9WUFAobWFwKSBkbyB7IGlmKG1hcC0+c2V0X3ZwcCkgbWFwLT5zZXRfdnBwKG1hcCwgMCk7IH0gd2hpbGUoMCkKKworI2RlZmluZSBJTlZBTElEQVRFX0NBQ0hFRF9SQU5HRShtYXAsIGZyb20sIHNpemUpICAgZG8geyBpZihtYXAtPmludmFsX2NhY2hlKSBtYXAtPmludmFsX2NhY2hlKG1hcCwgZnJvbSwgc2l6ZSk7IH0gd2hpbGUoMCkKKworI2RlZmluZSBtYXBfd29yZF9hbmRlcXVhbChtLCBhLCBiLCB6KSBtYXBfd29yZF9lcXVhbChtLCB6LCBtYXBfd29yZF9hbmQobSwgYSwgYikpCisjaWYgQklUU19QRVJfTE9ORyA+PSA2NAorI2VuZGlmCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOCisjZWxzZQorI2VuZGlmCisjaWYgQklUU19QRVJfTE9ORyA8IDY0CisjZGVmaW5lIE1BUF9GRl9MSU1JVCA0CisjZWxzZQorI2RlZmluZSBNQVBfRkZfTElNSVQgOAorI2VuZGlmCisjaWYgQklUU19QRVJfTE9ORyA+PSA2NAorI2VuZGlmCisjaWYgQklUU19QRVJfTE9ORyA+PSA2NAorI2VuZGlmCisjZGVmaW5lIG1hcF9yZWFkKG1hcCwgb2ZzKSBpbmxpbmVfbWFwX3JlYWQobWFwLCBvZnMpCisjZGVmaW5lIG1hcF9jb3B5X2Zyb20obWFwLCB0bywgZnJvbSwgbGVuKSBpbmxpbmVfbWFwX2NvcHlfZnJvbShtYXAsIHRvLCBmcm9tLCBsZW4pCisjZGVmaW5lIG1hcF93cml0ZShtYXAsIGRhdHVtLCBvZnMpIGlubGluZV9tYXBfd3JpdGUobWFwLCBkYXR1bSwgb2ZzKQorI2RlZmluZSBtYXBfY29weV90byhtYXAsIHRvLCBmcm9tLCBsZW4pIGlubGluZV9tYXBfY29weV90byhtYXAsIHRvLCBmcm9tLCBsZW4pCisjZGVmaW5lIHNpbXBsZV9tYXBfaW5pdChtYXApIEJVR19PTighbWFwX2Jhbmt3aWR0aF9zdXBwb3J0ZWQoKG1hcCktPmJhbmt3aWR0aCkpCisjZGVmaW5lIG1hcF9pc19saW5lYXIobWFwKSAoeyAodm9pZCkobWFwKTsgMTsgfSkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L210ZC9tdGQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdGQvbXRkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzAwODEzYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdGQvbXRkLmgKQEAgLTAsMCArMSwxNTMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19NVERfTVREX0hfXworI2RlZmluZSBfX01URF9NVERfSF9fCisKKyNlcnJvciBUaGlzIGlzIGEga2VybmVsIGhlYWRlci4gUGVyaGFwcyBpbmNsdWRlIG10ZC11c2VyLmggaW5zdGVhZD8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdWlvLmg+CisjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KKworI2luY2x1ZGUgPGxpbnV4L210ZC9jb21wYXRtYWMuaD4KKyNpbmNsdWRlIDxtdGQvbXRkLWFiaS5oPgorCisjZGVmaW5lIE1URF9DSEFSX01BSk9SIDkwCisjZGVmaW5lIE1URF9CTE9DS19NQUpPUiAzMQorI2RlZmluZSBNQVhfTVREX0RFVklDRVMgMTYKKworI2RlZmluZSBNVERfRVJBU0VfUEVORElORyAweDAxCisjZGVmaW5lIE1URF9FUkFTSU5HIDB4MDIKKyNkZWZpbmUgTVREX0VSQVNFX1NVU1BFTkQgMHgwNAorI2RlZmluZSBNVERfRVJBU0VfRE9ORSAweDA4CisjZGVmaW5lIE1URF9FUkFTRV9GQUlMRUQgMHgxMAorCitzdHJ1Y3QgZXJhc2VfaW5mbyB7Cisgc3RydWN0IG10ZF9pbmZvICptdGQ7CisgdV9pbnQzMl90IGFkZHI7CisgdV9pbnQzMl90IGxlbjsKKyB1X2ludDMyX3QgZmFpbF9hZGRyOworIHVfbG9uZyB0aW1lOworIHVfbG9uZyByZXRyaWVzOworIHVfaW50IGRldjsKKyB1X2ludCBjZWxsOworIHZvaWQgKCpjYWxsYmFjaykgKHN0cnVjdCBlcmFzZV9pbmZvICpzZWxmKTsKKyB1X2xvbmcgcHJpdjsKKyB1X2NoYXIgc3RhdGU7Cisgc3RydWN0IGVyYXNlX2luZm8gKm5leHQ7Cit9OworCitzdHJ1Y3QgbXRkX2VyYXNlX3JlZ2lvbl9pbmZvIHsKKyB1X2ludDMyX3Qgb2Zmc2V0OworIHVfaW50MzJfdCBlcmFzZXNpemU7CisgdV9pbnQzMl90IG51bWJsb2NrczsKK307CisKK3R5cGVkZWYgZW51bSB7CisgTVREX09PQl9QTEFDRSwKKyBNVERfT09CX0FVVE8sCisgTVREX09PQl9SQVcsCit9IG10ZF9vb2JfbW9kZV90OworCitzdHJ1Y3QgbXRkX29vYl9vcHMgeworIG10ZF9vb2JfbW9kZV90IG1vZGU7Cisgc2l6ZV90IGxlbjsKKyBzaXplX3QgcmV0bGVuOworIHNpemVfdCBvb2JsZW47CisgdWludDMyX3Qgb29ib2ZmczsKKyB1aW50OF90ICpkYXRidWY7CisgdWludDhfdCAqb29iYnVmOworfTsKKworc3RydWN0IG10ZF9pbmZvIHsKKyB1X2NoYXIgdHlwZTsKKyB1X2ludDMyX3QgZmxhZ3M7CisgdV9pbnQzMl90IHNpemU7CisKKyB1X2ludDMyX3QgZXJhc2VzaXplOworCisgdV9pbnQzMl90IHdyaXRlc2l6ZTsKKworIHVfaW50MzJfdCBvb2JzaXplOworIHVfaW50MzJfdCBlY2N0eXBlOworIHVfaW50MzJfdCBlY2NzaXplOworCisjZGVmaW5lIE1URF9QUk9HUkVHSU9OX0NUUkxNT0RFX1ZBTElEKG10ZCkgKG10ZCktPm9vYnNpemUKKyNkZWZpbmUgTVREX1BST0dSRUdJT05fQ1RSTE1PREVfSU5WQUxJRChtdGQpIChtdGQpLT5lY2N0eXBlCisKKyBjaGFyICpuYW1lOworIGludCBpbmRleDsKKworIHN0cnVjdCBuYW5kX2VjY2xheW91dCAqZWNjbGF5b3V0OworCisgaW50IG51bWVyYXNlcmVnaW9uczsKKyBzdHJ1Y3QgbXRkX2VyYXNlX3JlZ2lvbl9pbmZvICplcmFzZXJlZ2lvbnM7CisKKyB1X2ludDMyX3QgYmFua19zaXplOworCisgaW50ICgqZXJhc2UpIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IGVyYXNlX2luZm8gKmluc3RyKTsKKworIGludCAoKnBvaW50KSAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLCBzaXplX3QgKnJldGxlbiwgdV9jaGFyICoqbXRkYnVmKTsKKworIHZvaWQgKCp1bnBvaW50KSAoc3RydWN0IG10ZF9pbmZvICptdGQsIHVfY2hhciAqIGFkZHIsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuKTsKKworIGludCAoKnJlYWQpIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sIHNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmJ1Zik7CisgaW50ICgqd3JpdGUpIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IHRvLCBzaXplX3QgbGVuLCBzaXplX3QgKnJldGxlbiwgY29uc3QgdV9jaGFyICpidWYpOworCisgaW50ICgqcmVhZF9vb2IpIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sCisgc3RydWN0IG10ZF9vb2Jfb3BzICpvcHMpOworIGludCAoKndyaXRlX29vYikgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgdG8sCisgc3RydWN0IG10ZF9vb2Jfb3BzICpvcHMpOworCisgaW50ICgqZ2V0X2ZhY3RfcHJvdF9pbmZvKSAoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBvdHBfaW5mbyAqYnVmLCBzaXplX3QgbGVuKTsKKyBpbnQgKCpyZWFkX2ZhY3RfcHJvdF9yZWcpIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sIHNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmJ1Zik7CisgaW50ICgqZ2V0X3VzZXJfcHJvdF9pbmZvKSAoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBvdHBfaW5mbyAqYnVmLCBzaXplX3QgbGVuKTsKKyBpbnQgKCpyZWFkX3VzZXJfcHJvdF9yZWcpIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sIHNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmJ1Zik7CisgaW50ICgqd3JpdGVfdXNlcl9wcm90X3JlZykgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwgc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqYnVmKTsKKyBpbnQgKCpsb2NrX3VzZXJfcHJvdF9yZWcpIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4pOworCisgaW50ICgqd3JpdGV2KSAoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHN0cnVjdCBrdmVjICp2ZWNzLCB1bnNpZ25lZCBsb25nIGNvdW50LCBsb2ZmX3QgdG8sIHNpemVfdCAqcmV0bGVuKTsKKworIHZvaWQgKCpzeW5jKSAoc3RydWN0IG10ZF9pbmZvICptdGQpOworCisgaW50ICgqbG9jaykgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzLCBzaXplX3QgbGVuKTsKKyBpbnQgKCp1bmxvY2spIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcywgc2l6ZV90IGxlbik7CisKKyBpbnQgKCpzdXNwZW5kKSAoc3RydWN0IG10ZF9pbmZvICptdGQpOworIHZvaWQgKCpyZXN1bWUpIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCk7CisKKyBpbnQgKCpibG9ja19pc2JhZCkgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzKTsKKyBpbnQgKCpibG9ja19tYXJrYmFkKSAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMpOworCisgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHJlYm9vdF9ub3RpZmllcjsKKworIHN0cnVjdCBtdGRfZWNjX3N0YXRzIGVjY19zdGF0czsKKworIHZvaWQgKnByaXY7CisKKyBzdHJ1Y3QgbW9kdWxlICpvd25lcjsKKyBpbnQgdXNlY291bnQ7Cit9OworCitzdHJ1Y3QgbXRkX25vdGlmaWVyIHsKKyB2b2lkICgqYWRkKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCk7Cisgdm9pZCAoKnJlbW92ZSkoc3RydWN0IG10ZF9pbmZvICptdGQpOworIHN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKK307CisKKyNkZWZpbmUgTVREX0RFQlVHX0xFVkVMMCAoMCkgIAorI2RlZmluZSBNVERfREVCVUdfTEVWRUwxICgxKSAgCisjZGVmaW5lIE1URF9ERUJVR19MRVZFTDIgKDIpICAKKyNkZWZpbmUgTVREX0RFQlVHX0xFVkVMMyAoMykgIAorI2RlZmluZSBERUJVRyhuLCBhcmdzLi4uKSBkbyB7IH0gd2hpbGUoMCkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L210ZC9uYW5kLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXRkL25hbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmU5ZmI0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L210ZC9uYW5kLmgKQEAgLTAsMCArMSwzMTkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19MSU5VWF9NVERfTkFORF9ICisjZGVmaW5lIF9fTElOVVhfTVREX05BTkRfSAorCisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorCitzdHJ1Y3QgbXRkX2luZm87CisKKyNkZWZpbmUgTkFORF9NQVhfQ0hJUFMgOAorCisjZGVmaW5lIE5BTkRfTUFYX09PQlNJWkUgNjQKKyNkZWZpbmUgTkFORF9NQVhfUEFHRVNJWkUgMjA0OAorCisjZGVmaW5lIE5BTkRfTkNFIDB4MDEKKworI2RlZmluZSBOQU5EX0NMRSAweDAyCisKKyNkZWZpbmUgTkFORF9BTEUgMHgwNAorCisjZGVmaW5lIE5BTkRfQ1RSTF9DTEUgKE5BTkRfTkNFIHwgTkFORF9DTEUpCisjZGVmaW5lIE5BTkRfQ1RSTF9BTEUgKE5BTkRfTkNFIHwgTkFORF9BTEUpCisjZGVmaW5lIE5BTkRfQ1RSTF9DSEFOR0UgMHg4MAorCisjZGVmaW5lIE5BTkRfQ01EX1JFQUQwIDAKKyNkZWZpbmUgTkFORF9DTURfUkVBRDEgMQorI2RlZmluZSBOQU5EX0NNRF9STkRPVVQgNQorI2RlZmluZSBOQU5EX0NNRF9QQUdFUFJPRyAweDEwCisjZGVmaW5lIE5BTkRfQ01EX1JFQURPT0IgMHg1MAorI2RlZmluZSBOQU5EX0NNRF9FUkFTRTEgMHg2MAorI2RlZmluZSBOQU5EX0NNRF9TVEFUVVMgMHg3MAorI2RlZmluZSBOQU5EX0NNRF9TVEFUVVNfTVVMVEkgMHg3MQorI2RlZmluZSBOQU5EX0NNRF9TRVFJTiAweDgwCisjZGVmaW5lIE5BTkRfQ01EX1JORElOIDB4ODUKKyNkZWZpbmUgTkFORF9DTURfUkVBRElEIDB4OTAKKyNkZWZpbmUgTkFORF9DTURfRVJBU0UyIDB4ZDAKKyNkZWZpbmUgTkFORF9DTURfUkVTRVQgMHhmZgorCisjZGVmaW5lIE5BTkRfQ01EX1JFQURTVEFSVCAweDMwCisjZGVmaW5lIE5BTkRfQ01EX1JORE9VVFNUQVJUIDB4RTAKKyNkZWZpbmUgTkFORF9DTURfQ0FDSEVEUFJPRyAweDE1CisKKyNkZWZpbmUgTkFORF9DTURfREVQTEVURTEgMHgxMDAKKyNkZWZpbmUgTkFORF9DTURfREVQTEVURTIgMHgzOAorI2RlZmluZSBOQU5EX0NNRF9TVEFUVVNfTVVMVEkgMHg3MQorI2RlZmluZSBOQU5EX0NNRF9TVEFUVVNfRVJST1IgMHg3MgorCisjZGVmaW5lIE5BTkRfQ01EX1NUQVRVU19FUlJPUjAgMHg3MworI2RlZmluZSBOQU5EX0NNRF9TVEFUVVNfRVJST1IxIDB4NzQKKyNkZWZpbmUgTkFORF9DTURfU1RBVFVTX0VSUk9SMiAweDc1CisjZGVmaW5lIE5BTkRfQ01EX1NUQVRVU19FUlJPUjMgMHg3NgorI2RlZmluZSBOQU5EX0NNRF9TVEFUVVNfUkVTRVQgMHg3ZgorI2RlZmluZSBOQU5EX0NNRF9TVEFUVVNfQ0xFQVIgMHhmZgorCisjZGVmaW5lIE5BTkRfQ01EX05PTkUgLTEKKworI2RlZmluZSBOQU5EX1NUQVRVU19GQUlMIDB4MDEKKyNkZWZpbmUgTkFORF9TVEFUVVNfRkFJTF9OMSAweDAyCisjZGVmaW5lIE5BTkRfU1RBVFVTX1RSVUVfUkVBRFkgMHgyMAorI2RlZmluZSBOQU5EX1NUQVRVU19SRUFEWSAweDQwCisjZGVmaW5lIE5BTkRfU1RBVFVTX1dQIDB4ODAKKwordHlwZWRlZiBlbnVtIHsKKyBOQU5EX0VDQ19OT05FLAorIE5BTkRfRUNDX1NPRlQsCisgTkFORF9FQ0NfSFcsCisgTkFORF9FQ0NfSFdfU1lORFJPTUUsCit9IG5hbmRfZWNjX21vZGVzX3Q7CisKKyNkZWZpbmUgTkFORF9FQ0NfUkVBRCAwCisKKyNkZWZpbmUgTkFORF9FQ0NfV1JJVEUgMQorCisjZGVmaW5lIE5BTkRfRUNDX1JFQURTWU4gMgorCisjZGVmaW5lIE5BTkRfR0VUX0RFVklDRSAweDgwCisKKyNkZWZpbmUgTkFORF9OT19BVVRPSU5DUiAweDAwMDAwMDAxCisKKyNkZWZpbmUgTkFORF9CVVNXSURUSF8xNiAweDAwMDAwMDAyCisKKyNkZWZpbmUgTkFORF9OT19QQURESU5HIDB4MDAwMDAwMDQKKworI2RlZmluZSBOQU5EX0NBQ0hFUFJHIDB4MDAwMDAwMDgKKworI2RlZmluZSBOQU5EX0NPUFlCQUNLIDB4MDAwMDAwMTAKKworI2RlZmluZSBOQU5EX0lTX0FORCAweDAwMDAwMDIwCisKKyNkZWZpbmUgTkFORF80UEFHRV9BUlJBWSAweDAwMDAwMDQwCisKKyNkZWZpbmUgQkJUX0FVVE9fUkVGUkVTSCAweDAwMDAwMDgwCisKKyNkZWZpbmUgTkFORF9OT19SRUFEUkRZIDB4MDAwMDAxMDAKKworI2RlZmluZSBOQU5EX1NBTVNVTkdfTFBfT1BUSU9OUyAgIChOQU5EX05PX1BBRERJTkcgfCBOQU5EX0NBQ0hFUFJHIHwgTkFORF9DT1BZQkFDSykKKworI2RlZmluZSBOQU5EX0NBTkFVVE9JTkNSKGNoaXApICghKGNoaXAtPm9wdGlvbnMgJiBOQU5EX05PX0FVVE9JTkNSKSkKKyNkZWZpbmUgTkFORF9NVVNUX1BBRChjaGlwKSAoIShjaGlwLT5vcHRpb25zICYgTkFORF9OT19QQURESU5HKSkKKyNkZWZpbmUgTkFORF9IQVNfQ0FDSEVQUk9HKGNoaXApICgoY2hpcC0+b3B0aW9ucyAmIE5BTkRfQ0FDSEVQUkcpKQorI2RlZmluZSBOQU5EX0hBU19DT1BZQkFDSyhjaGlwKSAoKGNoaXAtPm9wdGlvbnMgJiBOQU5EX0NPUFlCQUNLKSkKKworI2RlZmluZSBOQU5EX0NISVBPUFRJT05TX01TSyAoMHgwMDAwZmZmZiAmIH5OQU5EX05PX0FVVE9JTkNSKQorCisjZGVmaW5lIE5BTkRfVVNFX0ZMQVNIX0JCVCAweDAwMDEwMDAwCisKKyNkZWZpbmUgTkFORF9TS0lQX0JCVFNDQU4gMHgwMDAyMDAwMAorCisjZGVmaW5lIE5BTkRfQ09OVFJPTExFUl9BTExPQyAweDgwMDAwMDAwCisKK3R5cGVkZWYgZW51bSB7CisgRkxfUkVBRFksCisgRkxfUkVBRElORywKKyBGTF9XUklUSU5HLAorIEZMX0VSQVNJTkcsCisgRkxfU1lOQ0lORywKKyBGTF9DQUNIRURQUkcsCisgRkxfUE1fU1VTUEVOREVELAorfSBuYW5kX3N0YXRlX3Q7CisKK3N0cnVjdCBuYW5kX2NoaXA7CisKK3N0cnVjdCBuYW5kX2h3X2NvbnRyb2wgeworIHNwaW5sb2NrX3QgbG9jazsKKyBzdHJ1Y3QgbmFuZF9jaGlwICphY3RpdmU7Cisgd2FpdF9xdWV1ZV9oZWFkX3Qgd3E7Cit9OworCitzdHJ1Y3QgbmFuZF9lY2NfY3RybCB7CisgbmFuZF9lY2NfbW9kZXNfdCBtb2RlOworIGludCBzdGVwczsKKyBpbnQgc2l6ZTsKKyBpbnQgYnl0ZXM7CisgaW50IHRvdGFsOworIGludCBwcmVwYWQ7CisgaW50IHBvc3RwYWQ7Cisgc3RydWN0IG5hbmRfZWNjbGF5b3V0ICpsYXlvdXQ7Cisgdm9pZCAoKmh3Y3RsKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IG1vZGUpOworIGludCAoKmNhbGN1bGF0ZSkoc3RydWN0IG10ZF9pbmZvICptdGQsCisgY29uc3QgdWludDhfdCAqZGF0LAorIHVpbnQ4X3QgKmVjY19jb2RlKTsKKyBpbnQgKCpjb3JyZWN0KShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdWludDhfdCAqZGF0LAorIHVpbnQ4X3QgKnJlYWRfZWNjLAorIHVpbnQ4X3QgKmNhbGNfZWNjKTsKKyBpbnQgKCpyZWFkX3BhZ2UpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAorIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsCisgdWludDhfdCAqYnVmKTsKKyB2b2lkICgqd3JpdGVfcGFnZSkoc3RydWN0IG10ZF9pbmZvICptdGQsCisgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwKKyBjb25zdCB1aW50OF90ICpidWYpOworIGludCAoKnJlYWRfb29iKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKKyBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAorIGludCBwYWdlLAorIGludCBzbmRjbWQpOworIGludCAoKndyaXRlX29vYikoc3RydWN0IG10ZF9pbmZvICptdGQsCisgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwKKyBpbnQgcGFnZSk7Cit9OworCitzdHJ1Y3QgbmFuZF9idWZmZXJzIHsKKyB1aW50OF90IGVjY2NhbGNbTkFORF9NQVhfT09CU0laRV07CisgdWludDhfdCBlY2Njb2RlW05BTkRfTUFYX09PQlNJWkVdOworIHVpbnQ4X3Qgb29id2J1ZltOQU5EX01BWF9PT0JTSVpFXTsKKyB1aW50OF90IGRhdGFidWZbTkFORF9NQVhfUEFHRVNJWkVdOworIHVpbnQ4X3Qgb29icmJ1ZltOQU5EX01BWF9PT0JTSVpFXTsKK307CisKK3N0cnVjdCBuYW5kX2NoaXAgeworIHZvaWQgX19pb21lbSAqSU9fQUREUl9SOworIHZvaWQgX19pb21lbSAqSU9fQUREUl9XOworCisgdWludDhfdCAoKnJlYWRfYnl0ZSkoc3RydWN0IG10ZF9pbmZvICptdGQpOworIHUxNiAoKnJlYWRfd29yZCkoc3RydWN0IG10ZF9pbmZvICptdGQpOworIHZvaWQgKCp3cml0ZV9idWYpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1aW50OF90ICpidWYsIGludCBsZW4pOworIHZvaWQgKCpyZWFkX2J1Zikoc3RydWN0IG10ZF9pbmZvICptdGQsIHVpbnQ4X3QgKmJ1ZiwgaW50IGxlbik7CisgaW50ICgqdmVyaWZ5X2J1Zikoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVpbnQ4X3QgKmJ1ZiwgaW50IGxlbik7Cisgdm9pZCAoKnNlbGVjdF9jaGlwKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNoaXApOworIGludCAoKmJsb2NrX2JhZCkoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsIGludCBnZXRjaGlwKTsKKyBpbnQgKCpibG9ja19tYXJrYmFkKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcyk7Cisgdm9pZCAoKmNtZF9jdHJsKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGRhdCwKKyB1bnNpZ25lZCBpbnQgY3RybCk7CisgaW50ICgqZGV2X3JlYWR5KShzdHJ1Y3QgbXRkX2luZm8gKm10ZCk7Cisgdm9pZCAoKmNtZGZ1bmMpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1bnNpZ25lZCBjb21tYW5kLCBpbnQgY29sdW1uLCBpbnQgcGFnZV9hZGRyKTsKKyBpbnQgKCp3YWl0ZnVuYykoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKnRoaXMpOworIHZvaWQgKCplcmFzZV9jbWQpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgcGFnZSk7CisgaW50ICgqc2Nhbl9iYnQpKHN0cnVjdCBtdGRfaW5mbyAqbXRkKTsKKyBpbnQgKCplcnJzdGF0KShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hpcCAqdGhpcywgaW50IHN0YXRlLCBpbnQgc3RhdHVzLCBpbnQgcGFnZSk7CisKKyBpbnQgY2hpcF9kZWxheTsKKyB1bnNpZ25lZCBpbnQgb3B0aW9uczsKKworIGludCBwYWdlX3NoaWZ0OworIGludCBwaHlzX2VyYXNlX3NoaWZ0OworIGludCBiYnRfZXJhc2Vfc2hpZnQ7CisgaW50IGNoaXBfc2hpZnQ7CisgaW50IG51bWNoaXBzOworIHVuc2lnbmVkIGxvbmcgY2hpcHNpemU7CisgaW50IHBhZ2VtYXNrOworIGludCBwYWdlYnVmOworIGludCBiYWRibG9ja3BvczsKKworIG5hbmRfc3RhdGVfdCBzdGF0ZTsKKworIHVpbnQ4X3QgKm9vYl9wb2k7Cisgc3RydWN0IG5hbmRfaHdfY29udHJvbCAqY29udHJvbGxlcjsKKyBzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQgKmVjY2xheW91dDsKKworIHN0cnVjdCBuYW5kX2VjY19jdHJsIGVjYzsKKyBzdHJ1Y3QgbmFuZF9idWZmZXJzIGJ1ZmZlcnM7Cisgc3RydWN0IG5hbmRfaHdfY29udHJvbCBod2NvbnRyb2w7CisKKyBzdHJ1Y3QgbXRkX29vYl9vcHMgb3BzOworCisgdWludDhfdCAqYmJ0OworIHN0cnVjdCBuYW5kX2JidF9kZXNjciAqYmJ0X3RkOworIHN0cnVjdCBuYW5kX2JidF9kZXNjciAqYmJ0X21kOworCisgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyICpiYWRibG9ja19wYXR0ZXJuOworCisgdm9pZCAqcHJpdjsKK307CisKKyNkZWZpbmUgTkFORF9NRlJfVE9TSElCQSAweDk4CisjZGVmaW5lIE5BTkRfTUZSX1NBTVNVTkcgMHhlYworI2RlZmluZSBOQU5EX01GUl9GVUpJVFNVIDB4MDQKKyNkZWZpbmUgTkFORF9NRlJfTkFUSU9OQUwgMHg4ZgorI2RlZmluZSBOQU5EX01GUl9SRU5FU0FTIDB4MDcKKyNkZWZpbmUgTkFORF9NRlJfU1RNSUNSTyAweDIwCisjZGVmaW5lIE5BTkRfTUZSX0hZTklYIDB4YWQKKworc3RydWN0IG5hbmRfZmxhc2hfZGV2IHsKKyBjaGFyICpuYW1lOworIGludCBpZDsKKyB1bnNpZ25lZCBsb25nIHBhZ2VzaXplOworIHVuc2lnbmVkIGxvbmcgY2hpcHNpemU7CisgdW5zaWduZWQgbG9uZyBlcmFzZXNpemU7CisgdW5zaWduZWQgbG9uZyBvcHRpb25zOworfTsKKworc3RydWN0IG5hbmRfbWFudWZhY3R1cmVycyB7CisgaW50IGlkOworIGNoYXIgKiBuYW1lOworfTsKKworc3RydWN0IG5hbmRfYmJ0X2Rlc2NyIHsKKyBpbnQgb3B0aW9uczsKKyBpbnQgcGFnZXNbTkFORF9NQVhfQ0hJUFNdOworIGludCBvZmZzOworIGludCB2ZXJvZmZzOworIHVpbnQ4X3QgdmVyc2lvbltOQU5EX01BWF9DSElQU107CisgaW50IGxlbjsKKyBpbnQgbWF4YmxvY2tzOworIGludCByZXNlcnZlZF9ibG9ja19jb2RlOworIHVpbnQ4X3QgKnBhdHRlcm47Cit9OworCisjZGVmaW5lIE5BTkRfQkJUX05SQklUU19NU0sgMHgwMDAwMDAwRgorI2RlZmluZSBOQU5EX0JCVF8xQklUIDB4MDAwMDAwMDEKKyNkZWZpbmUgTkFORF9CQlRfMkJJVCAweDAwMDAwMDAyCisjZGVmaW5lIE5BTkRfQkJUXzRCSVQgMHgwMDAwMDAwNAorI2RlZmluZSBOQU5EX0JCVF84QklUIDB4MDAwMDAwMDgKKworI2RlZmluZSBOQU5EX0JCVF9MQVNUQkxPQ0sgMHgwMDAwMDAxMAorCisjZGVmaW5lIE5BTkRfQkJUX0FCU1BBR0UgMHgwMDAwMDAyMAorCisjZGVmaW5lIE5BTkRfQkJUX1NFQVJDSCAweDAwMDAwMDQwCisKKyNkZWZpbmUgTkFORF9CQlRfUEVSQ0hJUCAweDAwMDAwMDgwCisKKyNkZWZpbmUgTkFORF9CQlRfVkVSU0lPTiAweDAwMDAwMTAwCisKKyNkZWZpbmUgTkFORF9CQlRfQ1JFQVRFIDB4MDAwMDAyMDAKKworI2RlZmluZSBOQU5EX0JCVF9TQ0FOQUxMUEFHRVMgMHgwMDAwMDQwMAorCisjZGVmaW5lIE5BTkRfQkJUX1NDQU5FTVBUWSAweDAwMDAwODAwCisKKyNkZWZpbmUgTkFORF9CQlRfV1JJVEUgMHgwMDAwMTAwMAorCisjZGVmaW5lIE5BTkRfQkJUX1NBVkVDT05URU5UIDB4MDAwMDIwMDAKKworI2RlZmluZSBOQU5EX0JCVF9TQ0FOMk5EUEFHRSAweDAwMDA0MDAwCisKKyNkZWZpbmUgTkFORF9CQlRfU0NBTl9NQVhCTE9DS1MgNAorCisjZGVmaW5lIE5BTkRfU01BTExfQkFEQkxPQ0tfUE9TIDUKKyNkZWZpbmUgTkFORF9MQVJHRV9CQURCTE9DS19QT1MgMAorCitzdHJ1Y3QgcGxhdGZvcm1fbmFuZF9jaGlwIHsKKyBpbnQgbnJfY2hpcHM7CisgaW50IGNoaXBfb2Zmc2V0OworIGludCBucl9wYXJ0aXRpb25zOworIHN0cnVjdCBtdGRfcGFydGl0aW9uICpwYXJ0aXRpb25zOworIHN0cnVjdCBuYW5kX2VjY2xheW91dCAqZWNjbGF5b3V0OworIGludCBjaGlwX2RlbGF5OworIHVuc2lnbmVkIGludCBvcHRpb25zOworIHZvaWQgKnByaXY7Cit9OworCitzdHJ1Y3QgcGxhdGZvcm1fbmFuZF9jdHJsIHsKKyB2b2lkICgqaHdjb250cm9sKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCk7CisgaW50ICgqZGV2X3JlYWR5KShzdHJ1Y3QgbXRkX2luZm8gKm10ZCk7Cisgdm9pZCAoKnNlbGVjdF9jaGlwKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNoaXApOworIHZvaWQgKnByaXY7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdGQvbmFuZF9lY2MuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdGQvbmFuZF9lY2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTgxN2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L210ZC9uYW5kX2VjYy5oCkBAIC0wLDAgKzEsMTcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19NVERfTkFORF9FQ0NfSF9fCisjZGVmaW5lIF9fTVREX05BTkRfRUNDX0hfXworCitzdHJ1Y3QgbXRkX2luZm87CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L210ZC9uZnRsLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXRkL25mdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTczMjBlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L210ZC9uZnRsLmgKQEAgLTAsMCArMSw1NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX01URF9ORlRMX0hfXworI2RlZmluZSBfX01URF9ORlRMX0hfXworCisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9ibGt0cmFucy5oPgorCisjaW5jbHVkZSA8bXRkL25mdGwtdXNlci5oPgorCisjZGVmaW5lIEJMT0NLX05JTCAweGZmZmYgIAorI2RlZmluZSBCTE9DS19GUkVFIDB4ZmZmZSAgCisjZGVmaW5lIEJMT0NLX05PVEVYUExPUkVEIDB4ZmZmZCAgCisjZGVmaW5lIEJMT0NLX1JFU0VSVkVEIDB4ZmZmYyAgCisKK3N0cnVjdCBORlRMcmVjb3JkIHsKKyBzdHJ1Y3QgbXRkX2Jsa3RyYW5zX2RldiBtYmQ7CisgX191MTYgTWVkaWFVbml0LCBTcGFyZU1lZGlhVW5pdDsKKyBfX3UzMiBFcmFzZVNpemU7Cisgc3RydWN0IE5GVExNZWRpYUhlYWRlciBNZWRpYUhkcjsKKyBpbnQgdXNlY291bnQ7CisgdW5zaWduZWQgY2hhciBoZWFkczsKKyB1bnNpZ25lZCBjaGFyIHNlY3RvcnM7CisgdW5zaWduZWQgc2hvcnQgY3lsaW5kZXJzOworIF9fdTE2IG51bXZ1bml0czsKKyBfX3UxNiBsYXN0RVVOOworIF9fdTE2IG51bWZyZWVFVU5zOworIF9fdTE2IExhc3RGcmVlRVVOOworIGludCBoZWFkLHNlY3QsY3lsOworIF9fdTE2ICpFVU50YWJsZTsKKyBfX3UxNiAqUmVwbFVuaXRUYWJsZTsKKyB1bnNpZ25lZCBpbnQgbmJfYmxvY2tzOworIHVuc2lnbmVkIGludCBuYl9ib290X2Jsb2NrczsKKyBzdHJ1Y3QgZXJhc2VfaW5mbyBpbnN0cjsKKyBzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQgb29iaW5mbzsKK307CisKKyNpZm5kZWYgTkZUTF9NQUpPUgorI2RlZmluZSBORlRMX01BSk9SIDkzCisjZW5kaWYKKworI2RlZmluZSBNQVhfTkZUTFMgMTYKKyNkZWZpbmUgTUFYX1NFQ1RPUlNfUEVSX1VOSVQgNjQKKyNkZWZpbmUgTkZUTF9QQVJUTl9CSVRTIDQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXRkL29uZW5hbmRfcmVncy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L210ZC9vbmVuYW5kX3JlZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzljNzhmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L210ZC9vbmVuYW5kX3JlZ3MuaApAQCAtMCwwICsxLDE0MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX09ORU5BTkRfUkVHX0gKKyNkZWZpbmUgX19PTkVOQU5EX1JFR19ICisKKyNkZWZpbmUgT05FTkFORF9NRU1PUllfTUFQKHgpICgoeCkgPDwgMSkKKworI2RlZmluZSBPTkVOQU5EX0JPT1RSQU0gT05FTkFORF9NRU1PUllfTUFQKDB4MDAwMCkKKyNkZWZpbmUgT05FTkFORF9EQVRBUkFNIE9ORU5BTkRfTUVNT1JZX01BUCgweDAyMDApCisjZGVmaW5lIE9ORU5BTkRfU1BBUkVSQU0gT05FTkFORF9NRU1PUllfTUFQKDB4ODAxMCkKKworI2RlZmluZSBPTkVOQU5EX1JFR19NQU5VRkFDVFVSRVJfSUQgT05FTkFORF9NRU1PUllfTUFQKDB4RjAwMCkKKyNkZWZpbmUgT05FTkFORF9SRUdfREVWSUNFX0lEIE9ORU5BTkRfTUVNT1JZX01BUCgweEYwMDEpCisjZGVmaW5lIE9ORU5BTkRfUkVHX1ZFUlNJT05fSUQgT05FTkFORF9NRU1PUllfTUFQKDB4RjAwMikKKyNkZWZpbmUgT05FTkFORF9SRUdfREFUQV9CVUZGRVJfU0laRSBPTkVOQU5EX01FTU9SWV9NQVAoMHhGMDAzKQorI2RlZmluZSBPTkVOQU5EX1JFR19CT09UX0JVRkZFUl9TSVpFIE9ORU5BTkRfTUVNT1JZX01BUCgweEYwMDQpCisjZGVmaW5lIE9ORU5BTkRfUkVHX05VTV9CVUZGRVJTIE9ORU5BTkRfTUVNT1JZX01BUCgweEYwMDUpCisjZGVmaW5lIE9ORU5BTkRfUkVHX1RFQ0hOT0xPR1kgT05FTkFORF9NRU1PUllfTUFQKDB4RjAwNikKKworI2RlZmluZSBPTkVOQU5EX1JFR19TVEFSVF9BRERSRVNTMSBPTkVOQU5EX01FTU9SWV9NQVAoMHhGMTAwKQorI2RlZmluZSBPTkVOQU5EX1JFR19TVEFSVF9BRERSRVNTMiBPTkVOQU5EX01FTU9SWV9NQVAoMHhGMTAxKQorI2RlZmluZSBPTkVOQU5EX1JFR19TVEFSVF9BRERSRVNTMyBPTkVOQU5EX01FTU9SWV9NQVAoMHhGMTAyKQorI2RlZmluZSBPTkVOQU5EX1JFR19TVEFSVF9BRERSRVNTNCBPTkVOQU5EX01FTU9SWV9NQVAoMHhGMTAzKQorI2RlZmluZSBPTkVOQU5EX1JFR19TVEFSVF9BRERSRVNTNSBPTkVOQU5EX01FTU9SWV9NQVAoMHhGMTA0KQorI2RlZmluZSBPTkVOQU5EX1JFR19TVEFSVF9BRERSRVNTNiBPTkVOQU5EX01FTU9SWV9NQVAoMHhGMTA1KQorI2RlZmluZSBPTkVOQU5EX1JFR19TVEFSVF9BRERSRVNTNyBPTkVOQU5EX01FTU9SWV9NQVAoMHhGMTA2KQorI2RlZmluZSBPTkVOQU5EX1JFR19TVEFSVF9BRERSRVNTOCBPTkVOQU5EX01FTU9SWV9NQVAoMHhGMTA3KQorCisjZGVmaW5lIE9ORU5BTkRfUkVHX1NUQVJUX0JVRkZFUiBPTkVOQU5EX01FTU9SWV9NQVAoMHhGMjAwKQorI2RlZmluZSBPTkVOQU5EX1JFR19DT01NQU5EIE9ORU5BTkRfTUVNT1JZX01BUCgweEYyMjApCisjZGVmaW5lIE9ORU5BTkRfUkVHX1NZU19DRkcxIE9ORU5BTkRfTUVNT1JZX01BUCgweEYyMjEpCisjZGVmaW5lIE9ORU5BTkRfUkVHX1NZU19DRkcyIE9ORU5BTkRfTUVNT1JZX01BUCgweEYyMjIpCisjZGVmaW5lIE9ORU5BTkRfUkVHX0NUUkxfU1RBVFVTIE9ORU5BTkRfTUVNT1JZX01BUCgweEYyNDApCisjZGVmaW5lIE9ORU5BTkRfUkVHX0lOVEVSUlVQVCBPTkVOQU5EX01FTU9SWV9NQVAoMHhGMjQxKQorI2RlZmluZSBPTkVOQU5EX1JFR19TVEFSVF9CTE9DS19BRERSRVNTIE9ORU5BTkRfTUVNT1JZX01BUCgweEYyNEMpCisjZGVmaW5lIE9ORU5BTkRfUkVHX0VORF9CTE9DS19BRERSRVNTIE9ORU5BTkRfTUVNT1JZX01BUCgweEYyNEQpCisjZGVmaW5lIE9ORU5BTkRfUkVHX1dQX1NUQVRVUyBPTkVOQU5EX01FTU9SWV9NQVAoMHhGMjRFKQorCisjZGVmaW5lIE9ORU5BTkRfUkVHX0VDQ19TVEFUVVMgT05FTkFORF9NRU1PUllfTUFQKDB4RkYwMCkKKyNkZWZpbmUgT05FTkFORF9SRUdfRUNDX00wIE9ORU5BTkRfTUVNT1JZX01BUCgweEZGMDEpCisjZGVmaW5lIE9ORU5BTkRfUkVHX0VDQ19TMCBPTkVOQU5EX01FTU9SWV9NQVAoMHhGRjAyKQorI2RlZmluZSBPTkVOQU5EX1JFR19FQ0NfTTEgT05FTkFORF9NRU1PUllfTUFQKDB4RkYwMykKKyNkZWZpbmUgT05FTkFORF9SRUdfRUNDX1MxIE9ORU5BTkRfTUVNT1JZX01BUCgweEZGMDQpCisjZGVmaW5lIE9ORU5BTkRfUkVHX0VDQ19NMiBPTkVOQU5EX01FTU9SWV9NQVAoMHhGRjA1KQorI2RlZmluZSBPTkVOQU5EX1JFR19FQ0NfUzIgT05FTkFORF9NRU1PUllfTUFQKDB4RkYwNikKKyNkZWZpbmUgT05FTkFORF9SRUdfRUNDX00zIE9ORU5BTkRfTUVNT1JZX01BUCgweEZGMDcpCisjZGVmaW5lIE9ORU5BTkRfUkVHX0VDQ19TMyBPTkVOQU5EX01FTU9SWV9NQVAoMHhGRjA4KQorCisjZGVmaW5lIE9ORU5BTkRfREVWSUNFX0RFTlNJVFlfU0hJRlQgKDQpCisjZGVmaW5lIE9ORU5BTkRfREVWSUNFX0lTX0REUCAoMSA8PCAzKQorI2RlZmluZSBPTkVOQU5EX0RFVklDRV9JU19ERU1VWCAoMSA8PCAyKQorI2RlZmluZSBPTkVOQU5EX0RFVklDRV9WQ0NfTUFTSyAoMHgzKQorCisjZGVmaW5lIE9ORU5BTkRfREVWSUNFX0RFTlNJVFlfNTEyTWIgKDB4MDAyKQorCisjZGVmaW5lIE9ORU5BTkRfVkVSU0lPTl9QUk9DRVNTX1NISUZUICg4KQorCisjZGVmaW5lIE9ORU5BTkRfRERQX1NISUZUICgxNSkKKworI2RlZmluZSBPTkVOQU5EX0ZQQV9NQVNLICgweDNmKQorI2RlZmluZSBPTkVOQU5EX0ZQQV9TSElGVCAoMikKKyNkZWZpbmUgT05FTkFORF9GU0FfTUFTSyAoMHgwMykKKworI2RlZmluZSBPTkVOQU5EX0JTQV9NQVNLICgweDAzKQorI2RlZmluZSBPTkVOQU5EX0JTQV9TSElGVCAoOCkKKyNkZWZpbmUgT05FTkFORF9CU0FfQk9PVFJBTSAoMCA8PCAyKQorI2RlZmluZSBPTkVOQU5EX0JTQV9EQVRBUkFNMCAoMiA8PCAyKQorI2RlZmluZSBPTkVOQU5EX0JTQV9EQVRBUkFNMSAoMyA8PCAyKQorI2RlZmluZSBPTkVOQU5EX0JTQ19NQVNLICgweDAzKQorCisjZGVmaW5lIE9ORU5BTkRfQ01EX1JFQUQgKDB4MDApCisjZGVmaW5lIE9ORU5BTkRfQ01EX1JFQURPT0IgKDB4MTMpCisjZGVmaW5lIE9ORU5BTkRfQ01EX1BST0cgKDB4ODApCisjZGVmaW5lIE9ORU5BTkRfQ01EX1BST0dPT0IgKDB4MUEpCisjZGVmaW5lIE9ORU5BTkRfQ01EX1VOTE9DSyAoMHgyMykKKyNkZWZpbmUgT05FTkFORF9DTURfTE9DSyAoMHgyQSkKKyNkZWZpbmUgT05FTkFORF9DTURfTE9DS19USUdIVCAoMHgyQykKKyNkZWZpbmUgT05FTkFORF9DTURfRVJBU0UgKDB4OTQpCisjZGVmaW5lIE9ORU5BTkRfQ01EX1JFU0VUICgweEYwKQorI2RlZmluZSBPTkVOQU5EX0NNRF9PVFBfQUNDRVNTICgweDY1KQorI2RlZmluZSBPTkVOQU5EX0NNRF9SRUFESUQgKDB4OTApCisKKyNkZWZpbmUgT05FTkFORF9DTURfQlVGRkVSUkFNICgweDE5NzgpCisKKyNkZWZpbmUgT05FTkFORF9TWVNfQ0ZHMV9TWU5DX1JFQUQgKDEgPDwgMTUpCisjZGVmaW5lIE9ORU5BTkRfU1lTX0NGRzFfQlJMXzcgKDcgPDwgMTIpCisjZGVmaW5lIE9ORU5BTkRfU1lTX0NGRzFfQlJMXzYgKDYgPDwgMTIpCisjZGVmaW5lIE9ORU5BTkRfU1lTX0NGRzFfQlJMXzUgKDUgPDwgMTIpCisjZGVmaW5lIE9ORU5BTkRfU1lTX0NGRzFfQlJMXzQgKDQgPDwgMTIpCisjZGVmaW5lIE9ORU5BTkRfU1lTX0NGRzFfQlJMXzMgKDMgPDwgMTIpCisjZGVmaW5lIE9ORU5BTkRfU1lTX0NGRzFfQlJMXzEwICgyIDw8IDEyKQorI2RlZmluZSBPTkVOQU5EX1NZU19DRkcxX0JSTF85ICgxIDw8IDEyKQorI2RlZmluZSBPTkVOQU5EX1NZU19DRkcxX0JSTF84ICgwIDw8IDEyKQorI2RlZmluZSBPTkVOQU5EX1NZU19DRkcxX0JSTF9TSElGVCAoMTIpCisjZGVmaW5lIE9ORU5BTkRfU1lTX0NGRzFfQkxfMzIgKDQgPDwgOSkKKyNkZWZpbmUgT05FTkFORF9TWVNfQ0ZHMV9CTF8xNiAoMyA8PCA5KQorI2RlZmluZSBPTkVOQU5EX1NZU19DRkcxX0JMXzggKDIgPDwgOSkKKyNkZWZpbmUgT05FTkFORF9TWVNfQ0ZHMV9CTF80ICgxIDw8IDkpCisjZGVmaW5lIE9ORU5BTkRfU1lTX0NGRzFfQkxfQ09OVCAoMCA8PCA5KQorI2RlZmluZSBPTkVOQU5EX1NZU19DRkcxX0JMX1NISUZUICg5KQorI2RlZmluZSBPTkVOQU5EX1NZU19DRkcxX05PX0VDQyAoMSA8PCA4KQorI2RlZmluZSBPTkVOQU5EX1NZU19DRkcxX1JEWSAoMSA8PCA3KQorI2RlZmluZSBPTkVOQU5EX1NZU19DRkcxX0lOVCAoMSA8PCA2KQorI2RlZmluZSBPTkVOQU5EX1NZU19DRkcxX0lPQkUgKDEgPDwgNSkKKyNkZWZpbmUgT05FTkFORF9TWVNfQ0ZHMV9SRFlfQ09ORiAoMSA8PCA0KQorCisjZGVmaW5lIE9ORU5BTkRfQ1RSTF9PTkdPICgxIDw8IDE1KQorI2RlZmluZSBPTkVOQU5EX0NUUkxfTE9DSyAoMSA8PCAxNCkKKyNkZWZpbmUgT05FTkFORF9DVFJMX0xPQUQgKDEgPDwgMTMpCisjZGVmaW5lIE9ORU5BTkRfQ1RSTF9QUk9HUkFNICgxIDw8IDEyKQorI2RlZmluZSBPTkVOQU5EX0NUUkxfRVJBU0UgKDEgPDwgMTEpCisjZGVmaW5lIE9ORU5BTkRfQ1RSTF9FUlJPUiAoMSA8PCAxMCkKKyNkZWZpbmUgT05FTkFORF9DVFJMX1JTVEIgKDEgPDwgNykKKyNkZWZpbmUgT05FTkFORF9DVFJMX09UUF9MICgxIDw8IDYpCisjZGVmaW5lIE9ORU5BTkRfQ1RSTF9PVFBfQkwgKDEgPDwgNSkKKworI2RlZmluZSBPTkVOQU5EX0lOVF9NQVNURVIgKDEgPDwgMTUpCisjZGVmaW5lIE9ORU5BTkRfSU5UX1JFQUQgKDEgPDwgNykKKyNkZWZpbmUgT05FTkFORF9JTlRfV1JJVEUgKDEgPDwgNikKKyNkZWZpbmUgT05FTkFORF9JTlRfRVJBU0UgKDEgPDwgNSkKKyNkZWZpbmUgT05FTkFORF9JTlRfUkVTRVQgKDEgPDwgNCkKKyNkZWZpbmUgT05FTkFORF9JTlRfQ0xFQVIgKDAgPDwgMCkKKworI2RlZmluZSBPTkVOQU5EX1dQX1VTICgxIDw8IDIpCisjZGVmaW5lIE9ORU5BTkRfV1BfTFMgKDEgPDwgMSkKKyNkZWZpbmUgT05FTkFORF9XUF9MVFMgKDEgPDwgMCkKKworI2RlZmluZSBPTkVOQU5EX0VDQ18xQklUICgxIDw8IDApCisjZGVmaW5lIE9ORU5BTkRfRUNDXzJCSVQgKDEgPDwgMSkKKyNkZWZpbmUgT05FTkFORF9FQ0NfMkJJVF9BTEwgKDB4QUFBQSkKKworI2RlZmluZSBPTkVOQU5EX09UUF9MT0NLX09GRlNFVCAoMTQpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L210ZC9wYXJ0aXRpb25zLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXRkL3BhcnRpdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWIxNWUxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L210ZC9wYXJ0aXRpb25zLmgKQEAgLTAsMCArMSw0MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBNVERfUEFSVElUSU9OU19ICisjZGVmaW5lIE1URF9QQVJUSVRJT05TX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3N0cnVjdCBtdGRfcGFydGl0aW9uIHsKKyBjaGFyICpuYW1lOworIHVfaW50MzJfdCBzaXplOworIHVfaW50MzJfdCBvZmZzZXQ7CisgdV9pbnQzMl90IG1hc2tfZmxhZ3M7Cisgc3RydWN0IG5hbmRfZWNjbGF5b3V0ICplY2NsYXlvdXQ7Cisgc3RydWN0IG10ZF9pbmZvICoqbXRkcDsKK307CisKKyNkZWZpbmUgTVREUEFSVF9PRlNfTlhUQkxLICgtMikKKyNkZWZpbmUgTVREUEFSVF9PRlNfQVBQRU5EICgtMSkKKyNkZWZpbmUgTVREUEFSVF9TSVpfRlVMTCAoMCkKKworc3RydWN0IG10ZF9wYXJ0X3BhcnNlciB7Cisgc3RydWN0IGxpc3RfaGVhZCBsaXN0OworIHN0cnVjdCBtb2R1bGUgKm93bmVyOworIGNvbnN0IGNoYXIgKm5hbWU7CisgaW50ICgqcGFyc2VfZm4pKHN0cnVjdCBtdGRfaW5mbyAqLCBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqKiwgdW5zaWduZWQgbG9uZyk7Cit9OworCisjZGVmaW5lIHB1dF9wYXJ0aXRpb25fcGFyc2VyKHApIGRvIHsgbW9kdWxlX3B1dCgocCktPm93bmVyKTsgfSB3aGlsZSgwKQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L210aW8uaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdhNmUyYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdGlvLmgKQEAgLTAsMCArMSwyNTkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX01USU9fSAorI2RlZmluZSBfTElOVVhfTVRJT19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvcWljMTE3Lmg+CisKK3N0cnVjdCBtdG9wIHsKKyBzaG9ydCBtdF9vcDsKKyBpbnQgbXRfY291bnQ7Cit9OworCisjZGVmaW5lIE1UUkVTRVQgMCAgCisjZGVmaW5lIE1URlNGIDEgIAorI2RlZmluZSBNVEJTRiAyICAKKyNkZWZpbmUgTVRGU1IgMyAgCisjZGVmaW5lIE1UQlNSIDQgIAorI2RlZmluZSBNVFdFT0YgNSAgCisjZGVmaW5lIE1UUkVXIDYgIAorI2RlZmluZSBNVE9GRkwgNyAgCisjZGVmaW5lIE1UTk9QIDggIAorI2RlZmluZSBNVFJFVEVOIDkgIAorI2RlZmluZSBNVEJTRk0gMTAgIAorI2RlZmluZSBNVEZTRk0gMTEgIAorI2RlZmluZSBNVEVPTSAxMiAgCisjZGVmaW5lIE1URVJBU0UgMTMgIAorCisjZGVmaW5lIE1UUkFTMSAxNCAgCisjZGVmaW5lIE1UUkFTMiAxNSAgCisjZGVmaW5lIE1UUkFTMyAxNiAgCisKKyNkZWZpbmUgTVRTRVRCTEsgMjAgIAorI2RlZmluZSBNVFNFVERFTlNJVFkgMjEgIAorI2RlZmluZSBNVFNFRUsgMjIgIAorI2RlZmluZSBNVFRFTEwgMjMgIAorI2RlZmluZSBNVFNFVERSVkJVRkZFUiAyNCAgCisKKyNkZWZpbmUgTVRGU1MgMjUgIAorI2RlZmluZSBNVEJTUyAyNiAgCisjZGVmaW5lIE1UV1NNIDI3ICAKKworI2RlZmluZSBNVExPQ0sgMjggIAorI2RlZmluZSBNVFVOTE9DSyAyOSAgCisjZGVmaW5lIE1UTE9BRCAzMCAgCisjZGVmaW5lIE1UVU5MT0FEIDMxICAKKyNkZWZpbmUgTVRDT01QUkVTU0lPTiAzMiAKKyNkZWZpbmUgTVRTRVRQQVJUIDMzICAKKyNkZWZpbmUgTVRNS1BBUlQgMzQgIAorCitzdHJ1Y3QgbXRnZXQgeworIGxvbmcgbXRfdHlwZTsKKyBsb25nIG10X3Jlc2lkOworCisgbG9uZyBtdF9kc3JlZzsKKyBsb25nIG10X2dzdGF0OworIGxvbmcgbXRfZXJyZWc7CisKKyBfX2tlcm5lbF9kYWRkcl90IG10X2ZpbGVubzsKKyBfX2tlcm5lbF9kYWRkcl90IG10X2Jsa25vOworfTsKKworI2RlZmluZSBNVF9JU1VOS05PV04gMHgwMQorI2RlZmluZSBNVF9JU1FJQzAyIDB4MDIgIAorI2RlZmluZSBNVF9JU1dUNTE1MCAweDAzICAKKyNkZWZpbmUgTVRfSVNBUkNISVZFXzU5NDVMMiAweDA0ICAKKyNkZWZpbmUgTVRfSVNDTVNKNTAwIDB4MDUgIAorI2RlZmluZSBNVF9JU1REQzM2MTAgMHgwNiAgCisjZGVmaW5lIE1UX0lTQVJDSElWRV9WUDYwSSAweDA3ICAKKyNkZWZpbmUgTVRfSVNBUkNISVZFXzIxNTBMIDB4MDggIAorI2RlZmluZSBNVF9JU0FSQ0hJVkVfMjA2MEwgMHgwOSAgCisjZGVmaW5lIE1UX0lTQVJDSElWRVNDNDk5IDB4MEEgIAorI2RlZmluZSBNVF9JU1FJQzAyX0FMTF9GRUFUVVJFUyAweDBGICAKKyNkZWZpbmUgTVRfSVNXVDUwOTlFRU4yNCAweDExICAKKyNkZWZpbmUgTVRfSVNURUFDX01UMlNUIDB4MTIgIAorI2RlZmluZSBNVF9JU0VWRVJFWF9GVDQwQSAweDMyICAKKyNkZWZpbmUgTVRfSVNERFMxIDB4NTEgIAorI2RlZmluZSBNVF9JU0REUzIgMHg1MiAgCisjZGVmaW5lIE1UX0lTT05TVFJFQU1fU0MgMHg2MSAgCisjZGVmaW5lIE1UX0lTU0NTSTEgMHg3MSAgCisjZGVmaW5lIE1UX0lTU0NTSTIgMHg3MiAgCisKKyNkZWZpbmUgTVRfSVNGVEFQRV9VTktOT1dOIDB4ODAwMDAwICAKKyNkZWZpbmUgTVRfSVNGVEFQRV9GTEFHIDB4ODAwMDAwCisKK3N0cnVjdCBtdF90YXBlX2luZm8geworIGxvbmcgdF90eXBlOworIGNoYXIgKnRfbmFtZTsKK307CisKKyNkZWZpbmUgTVRfVEFQRV9JTkZPIHsgICB7TVRfSVNVTktOT1dOLCAiVW5rbm93biB0eXBlIG9mIHRhcGUgZGV2aWNlIn0sICAge01UX0lTUUlDMDIsICJHZW5lcmljIFFJQy0wMiB0YXBlIHN0cmVhbWVyIn0sICAge01UX0lTV1Q1MTUwLCAiV2FuZ3RlayA1MTUwLCBRSUMtMTUwIn0sICAge01UX0lTQVJDSElWRV81OTQ1TDIsICJBcmNoaXZlIDU5NDVMLTIifSwgICB7TVRfSVNDTVNKNTAwLCAiQ01TIEp1bWJvIDUwMCJ9LCAgIHtNVF9JU1REQzM2MTAsICJUYW5kYmVyZyBUREMgMzYxMCwgUUlDLTI0In0sICAge01UX0lTQVJDSElWRV9WUDYwSSwgIkFyY2hpdmUgVlA2MGksIFFJQy0wMiJ9LCAgIHtNVF9JU0FSQ0hJVkVfMjE1MEwsICJBcmNoaXZlIFZpcGVyIDIxNTBMIn0sICAge01UX0lTQVJDSElWRV8yMDYwTCwgIkFyY2hpdmUgVmlwZXIgMjA2MEwifSwgICB7TVRfSVNBUkNISVZFU0M0OTksICJBcmNoaXZlIFNDLTQ5OSBRSUMtMzYgY29udHJvbGxlciJ9LCAgIHtNVF9JU1FJQzAyX0FMTF9GRUFUVVJFUywgIkdlbmVyaWMgUUlDLTAyIHRhcGUsIGFsbCBmZWF0dXJlcyJ9LCAgIHtNVF9JU1dUNTA5OUVFTjI0LCAiV2FuZ3RlayA1MDk5LWVlbjI0LCA2ME1CIn0sICAge01UX0lTVEVBQ19NVDJTVCwgIlRlYWMgTVQtMlNUIDE1NW1iIGRhdGEgY2Fzc2V0dGUgZHJpdmUifSwgICB7TVRfSVNFVkVSRVhfRlQ0MEEsICJFdmVyZXggRlQ0MEEsIFFJQy00MCJ9LCAgIHtNVF9JU09OU1RSRUFNX1NDLCAiT25TdHJlYW0gU0MtLCBESS0sIERQLSwgb3IgVVNCIHRhcGUgZHJpdmUifSwgICB7TVRfSVNTQ1NJMSwgIkdlbmVyaWMgU0NTSS0xIHRhcGUifSwgICB7TVRfSVNTQ1NJMiwgIkdlbmVyaWMgU0NTSS0yIHRhcGUifSwgICB7MCwgTlVMTH0gIH0KKworc3RydWN0IG10cG9zIHsKKyBsb25nIG10X2Jsa25vOworfTsKKworc3RydWN0IG10dm9saW5mbyB7CisgdW5zaWduZWQgaW50IG10X3ZvbG5vOworIHVuc2lnbmVkIGludCBtdF9ibGtzejsKKyB1bnNpZ25lZCBpbnQgbXRfcmF3c2l6ZTsKKyB1bnNpZ25lZCBpbnQgbXRfc2l6ZTsKKyB1bnNpZ25lZCBpbnQgbXRfY21wcjoxOworfTsKKworI2RlZmluZSBNVF9GVF9SRF9TSU5HTEUgMAorI2RlZmluZSBNVF9GVF9SRF9BSEVBRCAxCisjZGVmaW5lIE1UX0ZUX1dSX0FTWU5DIDAgIAorI2RlZmluZSBNVF9GVF9XUl9NVUxUSSAxICAKKyNkZWZpbmUgTVRfRlRfV1JfU0lOR0xFIDIgIAorI2RlZmluZSBNVF9GVF9XUl9ERUxFVEUgMyAgCisKK3N0cnVjdCBtdGZ0c2VnCit7CisgdW5zaWduZWQgbXRfc2Vnbm87CisgdW5zaWduZWQgbXRfbW9kZTsKKyBpbnQgbXRfcmVzdWx0OworIHZvaWQgX191c2VyICptdF9kYXRhOworfTsKKworc3RydWN0IG10dGFwZXNpemUgeworIHVuc2lnbmVkIGxvbmcgbXRfY2FwYWNpdHk7CisgdW5zaWduZWQgbG9uZyBtdF91c2VkOworfTsKKworI2RlZmluZSBGVEZNVF9TRVRfUEFSTVMgMSAgCisjZGVmaW5lIEZURk1UX0dFVF9QQVJNUyAyICAKKyNkZWZpbmUgRlRGTVRfRk9STUFUX1RSQUNLIDMgIAorI2RlZmluZSBGVEZNVF9TVEFUVVMgNCAgCisjZGVmaW5lIEZURk1UX1ZFUklGWSA1ICAKKworc3RydWN0IGZ0Zm10cGFybXMgeworIHVuc2lnbmVkIGNoYXIgZnRfcWljc3RkOworIHVuc2lnbmVkIGNoYXIgZnRfZm10Y29kZTsKKyB1bnNpZ25lZCBjaGFyIGZ0X2ZobTsKKyB1bnNpZ25lZCBjaGFyIGZ0X2Z0bTsKKyB1bnNpZ25lZCBzaG9ydCBmdF9zcHQ7CisgdW5zaWduZWQgc2hvcnQgZnRfdHBjOworfTsKKworc3RydWN0IGZ0Zm10dHJhY2sgeworIHVuc2lnbmVkIGludCBmdF90cmFjazsKKyB1bnNpZ25lZCBjaGFyIGZ0X2dhcDM7Cit9OworCitzdHJ1Y3QgZnRmbXRzdGF0dXMgeworIHVuc2lnbmVkIGludCBmdF9zZWdtZW50OworfTsKKworc3RydWN0IGZ0Zm10dmVyaWZ5IHsKKyB1bnNpZ25lZCBpbnQgZnRfc2VnbWVudDsKKyB1bnNpZ25lZCBsb25nIGZ0X2JzbTsKK307CisKK3N0cnVjdCBtdGZ0Zm9ybWF0IHsKKyB1bnNpZ25lZCBpbnQgZm10X29wOworIHVuaW9uIGZtdF9hcmcgeworIHN0cnVjdCBmdGZtdHBhcm1zIGZtdF9wYXJtczsKKyBzdHJ1Y3QgZnRmbXR0cmFjayBmbXRfdHJhY2s7Cisgc3RydWN0IGZ0Zm10c3RhdHVzIGZtdF9zdGF0dXM7Cisgc3RydWN0IGZ0Zm10dmVyaWZ5IGZtdF92ZXJpZnk7CisgfSBmbXRfYXJnOworfTsKKworc3RydWN0IG10ZnRjbWQgeworIHVuc2lnbmVkIGludCBmdF93YWl0X2JlZm9yZTsKKyBxaWMxMTdfY21kX3QgZnRfY21kOworIHVuc2lnbmVkIGNoYXIgZnRfcGFybV9jbnQ7CisgdW5zaWduZWQgY2hhciBmdF9wYXJtc1szXTsKKyB1bnNpZ25lZCBpbnQgZnRfcmVzdWx0X2JpdHM7CisgdW5zaWduZWQgaW50IGZ0X3Jlc3VsdDsKKyB1bnNpZ25lZCBpbnQgZnRfd2FpdF9hZnRlcjsKKyBpbnQgZnRfc3RhdHVzOworIGludCBmdF9lcnJvcjsKK307CisKKyNkZWZpbmUgTVRJT0NUT1AgX0lPVygnbScsIDEsIHN0cnVjdCBtdG9wKSAgCisjZGVmaW5lIE1USU9DR0VUIF9JT1IoJ20nLCAyLCBzdHJ1Y3QgbXRnZXQpICAKKyNkZWZpbmUgTVRJT0NQT1MgX0lPUignbScsIDMsIHN0cnVjdCBtdHBvcykgIAorCisjZGVmaW5lIE1USU9DR0VUQ09ORklHIF9JT1IoJ20nLCA0LCBzdHJ1Y3QgbXRjb25maWdpbmZvKSAgCisjZGVmaW5lIE1USU9DU0VUQ09ORklHIF9JT1coJ20nLCA1LCBzdHJ1Y3QgbXRjb25maWdpbmZvKSAgCisKKyNkZWZpbmUgTVRJT0NSREZUU0VHIF9JT1dSKCdtJywgNiwgc3RydWN0IG10ZnRzZWcpICAKKyNkZWZpbmUgTVRJT0NXUkZUU0VHIF9JT1dSKCdtJywgNywgc3RydWN0IG10ZnRzZWcpICAKKyNkZWZpbmUgTVRJT0NWT0xJTkZPIF9JT1IoJ20nLCA4LCBzdHJ1Y3QgbXR2b2xpbmZvKSAgCisjZGVmaW5lIE1USU9DR0VUU0laRSBfSU9SKCdtJywgOSwgc3RydWN0IG10dGFwZXNpemUpIAorI2RlZmluZSBNVElPQ0ZURk9STUFUIF9JT1dSKCdtJywgMTAsIHN0cnVjdCBtdGZ0Zm9ybWF0KSAgCisjZGVmaW5lIE1USU9DRlRDTUQgX0lPV1IoJ20nLCAxMSwgc3RydWN0IG10ZnRjbWQpICAKKworI2RlZmluZSBHTVRfRU9GKHgpICgoeCkgJiAweDgwMDAwMDAwKQorI2RlZmluZSBHTVRfQk9UKHgpICgoeCkgJiAweDQwMDAwMDAwKQorI2RlZmluZSBHTVRfRU9UKHgpICgoeCkgJiAweDIwMDAwMDAwKQorI2RlZmluZSBHTVRfU00oeCkgKCh4KSAmIDB4MTAwMDAwMDApICAKKyNkZWZpbmUgR01UX0VPRCh4KSAoKHgpICYgMHgwODAwMDAwMCkgIAorI2RlZmluZSBHTVRfV1JfUFJPVCh4KSAoKHgpICYgMHgwNDAwMDAwMCkKKworI2RlZmluZSBHTVRfT05MSU5FKHgpICgoeCkgJiAweDAxMDAwMDAwKQorI2RlZmluZSBHTVRfRF82MjUwKHgpICgoeCkgJiAweDAwODAwMDAwKQorI2RlZmluZSBHTVRfRF8xNjAwKHgpICgoeCkgJiAweDAwNDAwMDAwKQorI2RlZmluZSBHTVRfRF84MDAoeCkgKCh4KSAmIDB4MDAyMDAwMDApCisKKyNkZWZpbmUgR01UX0RSX09QRU4oeCkgKCh4KSAmIDB4MDAwNDAwMDApICAKKworI2RlZmluZSBHTVRfSU1fUkVQX0VOKHgpICgoeCkgJiAweDAwMDEwMDAwKSAgCisjZGVmaW5lIEdNVF9DTE4oeCkgKCh4KSAmIDB4MDAwMDgwMDApICAKKworI2RlZmluZSBNVF9TVF9CTEtTSVpFX1NISUZUIDAKKyNkZWZpbmUgTVRfU1RfQkxLU0laRV9NQVNLIDB4ZmZmZmZmCisjZGVmaW5lIE1UX1NUX0RFTlNJVFlfU0hJRlQgMjQKKyNkZWZpbmUgTVRfU1RfREVOU0lUWV9NQVNLIDB4ZmYwMDAwMDAKKworI2RlZmluZSBNVF9TVF9TT0ZURVJSX1NISUZUIDAKKyNkZWZpbmUgTVRfU1RfU09GVEVSUl9NQVNLIDB4ZmZmZgorCisjZGVmaW5lIE1UX1NUX09QVElPTlMgMHhmMDAwMDAwMAorI2RlZmluZSBNVF9TVF9CT09MRUFOUyAweDEwMDAwMDAwCisjZGVmaW5lIE1UX1NUX1NFVEJPT0xFQU5TIDB4MzAwMDAwMDAKKyNkZWZpbmUgTVRfU1RfQ0xFQVJCT09MRUFOUyAweDQwMDAwMDAwCisjZGVmaW5lIE1UX1NUX1dSSVRFX1RIUkVTSE9MRCAweDIwMDAwMDAwCisjZGVmaW5lIE1UX1NUX0RFRl9CTEtTSVpFIDB4NTAwMDAwMDAKKyNkZWZpbmUgTVRfU1RfREVGX09QVElPTlMgMHg2MDAwMDAwMAorI2RlZmluZSBNVF9TVF9USU1FT1VUUyAweDcwMDAwMDAwCisjZGVmaW5lIE1UX1NUX1NFVF9USU1FT1VUIChNVF9TVF9USU1FT1VUUyB8IDB4MDAwMDAwKQorI2RlZmluZSBNVF9TVF9TRVRfTE9OR19USU1FT1VUIChNVF9TVF9USU1FT1VUUyB8IDB4MTAwMDAwKQorI2RlZmluZSBNVF9TVF9TRVRfQ0xOIDB4ODAwMDAwMDAKKworI2RlZmluZSBNVF9TVF9CVUZGRVJfV1JJVEVTIDB4MQorI2RlZmluZSBNVF9TVF9BU1lOQ19XUklURVMgMHgyCisjZGVmaW5lIE1UX1NUX1JFQURfQUhFQUQgMHg0CisjZGVmaW5lIE1UX1NUX0RFQlVHR0lORyAweDgKKyNkZWZpbmUgTVRfU1RfVFdPX0ZNIDB4MTAKKyNkZWZpbmUgTVRfU1RfRkFTVF9NVEVPTSAweDIwCisjZGVmaW5lIE1UX1NUX0FVVE9fTE9DSyAweDQwCisjZGVmaW5lIE1UX1NUX0RFRl9XUklURVMgMHg4MAorI2RlZmluZSBNVF9TVF9DQU5fQlNSIDB4MTAwCisjZGVmaW5lIE1UX1NUX05PX0JMS0xJTVMgMHgyMDAKKyNkZWZpbmUgTVRfU1RfQ0FOX1BBUlRJVElPTlMgMHg0MDAKKyNkZWZpbmUgTVRfU1RfU0NTSTJMT0dJQ0FMIDB4ODAwCisjZGVmaW5lIE1UX1NUX1NZU1YgMHgxMDAwCisjZGVmaW5lIE1UX1NUX05PV0FJVCAweDIwMDAKKworI2RlZmluZSBNVF9TVF9DTEVBUl9ERUZBVUxUIDB4ZmZmZmYKKyNkZWZpbmUgTVRfU1RfREVGX0RFTlNJVFkgKE1UX1NUX0RFRl9PUFRJT05TIHwgMHgxMDAwMDApCisjZGVmaW5lIE1UX1NUX0RFRl9DT01QUkVTU0lPTiAoTVRfU1RfREVGX09QVElPTlMgfCAweDIwMDAwMCkKKyNkZWZpbmUgTVRfU1RfREVGX0RSVkJVRkZFUiAoTVRfU1RfREVGX09QVElPTlMgfCAweDMwMDAwMCkKKworI2RlZmluZSBNVF9TVF9IUExPQURFUl9PRkZTRVQgMTAwMDAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXV0ZXgtZGVidWcuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdXRleC1kZWJ1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNjU2MTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXV0ZXgtZGVidWcuaApAQCAtMCwwICsxLDIyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTElOVVhfTVVURVhfREVCVUdfSAorI2RlZmluZSBfX0xJTlVYX01VVEVYX0RFQlVHX0gKKworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9sb2NrZGVwLmg+CisKKyNkZWZpbmUgX19ERUJVR19NVVRFWF9JTklUSUFMSVpFUihsb2NrbmFtZSkgICAsIC5tYWdpYyA9ICZsb2NrbmFtZQorCisjZGVmaW5lIG11dGV4X2luaXQobXV0ZXgpICBkbyB7ICAgc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBfX2tleTsgICAgIF9fbXV0ZXhfaW5pdCgobXV0ZXgpLCAjbXV0ZXgsICZfX2tleSk7ICB9IHdoaWxlICgwKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdXRleC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L211dGV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIzM2E4YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdXRleC5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19MSU5VWF9NVVRFWF9ICisjZGVmaW5lIF9fTElOVVhfTVVURVhfSAorCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrX3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xvY2tkZXAuaD4KKworI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKworc3RydWN0IG11dGV4IHsKKworIGF0b21pY190IGNvdW50OworIHNwaW5sb2NrX3Qgd2FpdF9sb2NrOworIHN0cnVjdCBsaXN0X2hlYWQgd2FpdF9saXN0OworfTsKKworc3RydWN0IG11dGV4X3dhaXRlciB7Cisgc3RydWN0IGxpc3RfaGVhZCBsaXN0OworIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKK307CisKKyNkZWZpbmUgX19ERUJVR19NVVRFWF9JTklUSUFMSVpFUihsb2NrbmFtZSkKKyNkZWZpbmUgbXV0ZXhfaW5pdChtdXRleCkgIGRvIHsgICBzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IF9fa2V5OyAgICAgX19tdXRleF9pbml0KChtdXRleCksICNtdXRleCwgJl9fa2V5KTsgIH0gd2hpbGUgKDApCisjZGVmaW5lIG11dGV4X2Rlc3Ryb3kobXV0ZXgpIGRvIHsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBfX0RFUF9NQVBfTVVURVhfSU5JVElBTElaRVIobG9ja25hbWUpCisKKyNkZWZpbmUgX19NVVRFWF9JTklUSUFMSVpFUihsb2NrbmFtZSkgICB7IC5jb3VudCA9IEFUT01JQ19JTklUKDEpICAgLCAud2FpdF9sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEICAgLCAud2FpdF9saXN0ID0gTElTVF9IRUFEX0lOSVQobG9ja25hbWUud2FpdF9saXN0KSAgIF9fREVCVUdfTVVURVhfSU5JVElBTElaRVIobG9ja25hbWUpICAgX19ERVBfTUFQX01VVEVYX0lOSVRJQUxJWkVSKGxvY2tuYW1lKSB9CisKKyNkZWZpbmUgREVGSU5FX01VVEVYKG11dGV4bmFtZSkgICBzdHJ1Y3QgbXV0ZXggbXV0ZXhuYW1lID0gX19NVVRFWF9JTklUSUFMSVpFUihtdXRleG5hbWUpCisKKyNkZWZpbmUgbXV0ZXhfbG9ja19uZXN0ZWQobG9jaywgc3ViY2xhc3MpIG11dGV4X2xvY2sobG9jaykKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmNwLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmNwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDkxMjIwYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uY3AuaApAQCAtMCwwICsxLDE5MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfTkNQX0gKKyNkZWZpbmUgX0xJTlVYX05DUF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjZGVmaW5lIE5DUF9QVFlQRSAoMHgxMSkKKyNkZWZpbmUgTkNQX1BPUlQgKDB4MDQ1MSkKKworI2RlZmluZSBOQ1BfQUxMT0NfU0xPVF9SRVFVRVNUICgweDExMTEpCisjZGVmaW5lIE5DUF9SRVFVRVNUICgweDIyMjIpCisjZGVmaW5lIE5DUF9ERUFMTE9DX1NMT1RfUkVRVUVTVCAoMHg1NTU1KQorCitzdHJ1Y3QgbmNwX3JlcXVlc3RfaGVhZGVyIHsKKyBfX3UxNiB0eXBlOworIF9fdTggc2VxdWVuY2U7CisgX191OCBjb25uX2xvdzsKKyBfX3U4IHRhc2s7CisgX191OCBjb25uX2hpZ2g7CisgX191OCBmdW5jdGlvbjsKKyBfX3U4IGRhdGFbMF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIE5DUF9SRVBMWSAoMHgzMzMzKQorI2RlZmluZSBOQ1BfV0FUQ0hET0cgKDB4M0UzRSkKKyNkZWZpbmUgTkNQX1BPU0lUSVZFX0FDSyAoMHg5OTk5KQorCitzdHJ1Y3QgbmNwX3JlcGx5X2hlYWRlciB7CisgX191MTYgdHlwZTsKKyBfX3U4IHNlcXVlbmNlOworIF9fdTggY29ubl9sb3c7CisgX191OCB0YXNrOworIF9fdTggY29ubl9oaWdoOworIF9fdTggY29tcGxldGlvbl9jb2RlOworIF9fdTggY29ubmVjdGlvbl9zdGF0ZTsKKyBfX3U4IGRhdGFbMF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIE5DUF9WT0xOQU1FX0xFTiAoMTYpCisjZGVmaW5lIE5DUF9OVU1CRVJfT0ZfVk9MVU1FUyAoMjU2KQorc3RydWN0IG5jcF92b2x1bWVfaW5mbyB7CisgX191MzIgdG90YWxfYmxvY2tzOworIF9fdTMyIGZyZWVfYmxvY2tzOworIF9fdTMyIHB1cmdlYWJsZV9ibG9ja3M7CisgX191MzIgbm90X3lldF9wdXJnZWFibGVfYmxvY2tzOworIF9fdTMyIHRvdGFsX2Rpcl9lbnRyaWVzOworIF9fdTMyIGF2YWlsYWJsZV9kaXJfZW50cmllczsKKyBfX3U4IHNlY3RvcnNfcGVyX2Jsb2NrOworIGNoYXIgdm9sdW1lX25hbWVbTkNQX1ZPTE5BTUVfTEVOICsgMV07Cit9OworCisjZGVmaW5lIEFSX1JFQUQgKGNwdV90b19sZTE2KDEpKQorI2RlZmluZSBBUl9XUklURSAoY3B1X3RvX2xlMTYoMikpCisjZGVmaW5lIEFSX0VYQ0xVU0lWRSAoY3B1X3RvX2xlMTYoMHgyMCkpCisKKyNkZWZpbmUgTkNQX0ZJTEVfSURfTEVOIDYKKworI2RlZmluZSBOV19OU19ET1MgMAorI2RlZmluZSBOV19OU19NQUMgMQorI2RlZmluZSBOV19OU19ORlMgMgorI2RlZmluZSBOV19OU19GVEFNIDMKKyNkZWZpbmUgTldfTlNfT1MyIDQKKworI2RlZmluZSBSSU1fTkFNRSAoY3B1X3RvX2xlMzIoMSkpCisjZGVmaW5lIFJJTV9TUEFDRV9BTExPQ0FURUQgKGNwdV90b19sZTMyKDIpKQorI2RlZmluZSBSSU1fQVRUUklCVVRFUyAoY3B1X3RvX2xlMzIoNCkpCisjZGVmaW5lIFJJTV9EQVRBX1NJWkUgKGNwdV90b19sZTMyKDgpKQorI2RlZmluZSBSSU1fVE9UQUxfU0laRSAoY3B1X3RvX2xlMzIoMHgxMCkpCisjZGVmaW5lIFJJTV9FWFRfQVRUUl9JTkZPIChjcHVfdG9fbGUzMigweDIwKSkKKyNkZWZpbmUgUklNX0FSQ0hJVkUgKGNwdV90b19sZTMyKDB4NDApKQorI2RlZmluZSBSSU1fTU9ESUZZIChjcHVfdG9fbGUzMigweDgwKSkKKyNkZWZpbmUgUklNX0NSRUFUSU9OIChjcHVfdG9fbGUzMigweDEwMCkpCisjZGVmaW5lIFJJTV9PV05JTkdfTkFNRVNQQUNFIChjcHVfdG9fbGUzMigweDIwMCkpCisjZGVmaW5lIFJJTV9ESVJFQ1RPUlkgKGNwdV90b19sZTMyKDB4NDAwKSkKKyNkZWZpbmUgUklNX1JJR0hUUyAoY3B1X3RvX2xlMzIoMHg4MDApKQorI2RlZmluZSBSSU1fQUxMIChjcHVfdG9fbGUzMigweEZGRikpCisjZGVmaW5lIFJJTV9DT01QUkVTU0VEX0lORk8gKGNwdV90b19sZTMyKDB4ODAwMDAwMDApKQorCisjZGVmaW5lIE5TSUJNX05GU19OQU1FIDB4MDAwMQorI2RlZmluZSBOU0lCTV9ORlNfTU9ERSAweDAwMDIKKyNkZWZpbmUgTlNJQk1fTkZTX0dJRCAweDAwMDQKKyNkZWZpbmUgTlNJQk1fTkZTX05MSU5LUyAweDAwMDgKKyNkZWZpbmUgTlNJQk1fTkZTX1JERVYgMHgwMDEwCisjZGVmaW5lIE5TSUJNX05GU19MSU5LIDB4MDAyMAorI2RlZmluZSBOU0lCTV9ORlNfQ1JFQVRFRCAweDAwNDAKKyNkZWZpbmUgTlNJQk1fTkZTX1VJRCAweDAwODAKKyNkZWZpbmUgTlNJQk1fTkZTX0FDU0ZMQUcgMHgwMTAwCisjZGVmaW5lIE5TSUJNX05GU19NWUZMQUcgMHgwMjAwCisKKyNkZWZpbmUgT0NfTU9ERV9PUEVOIDB4MDEKKyNkZWZpbmUgT0NfTU9ERV9UUlVOQ0FURSAweDAyCisjZGVmaW5lIE9DX01PREVfUkVQTEFDRSAweDAyCisjZGVmaW5lIE9DX01PREVfQ1JFQVRFIDB4MDgKKworI2RlZmluZSBPQ19BQ1RJT05fTk9ORSAweDAwCisjZGVmaW5lIE9DX0FDVElPTl9PUEVOIDB4MDEKKyNkZWZpbmUgT0NfQUNUSU9OX0NSRUFURSAweDAyCisjZGVmaW5lIE9DX0FDVElPTl9UUlVOQ0FURSAweDA0CisjZGVmaW5lIE9DX0FDVElPTl9SRVBMQUNFIDB4MDQKKworI2lmbmRlZiBBUl9SRUFEX09OTFkKKyNkZWZpbmUgQVJfUkVBRF9PTkxZIDB4MDAwMQorI2RlZmluZSBBUl9XUklURV9PTkxZIDB4MDAwMgorI2RlZmluZSBBUl9ERU5ZX1JFQUQgMHgwMDA0CisjZGVmaW5lIEFSX0RFTllfV1JJVEUgMHgwMDA4CisjZGVmaW5lIEFSX0NPTVBBVElCSUxJVFkgMHgwMDEwCisjZGVmaW5lIEFSX1dSSVRFX1RIUk9VR0ggMHgwMDQwCisjZGVmaW5lIEFSX09QRU5fQ09NUFJFU1NFRCAweDAxMDAKKyNlbmRpZgorCitzdHJ1Y3QgbndfbmZzX2luZm8geworIF9fdTMyIG1vZGU7CisgX191MzIgcmRldjsKK307CisKK3N0cnVjdCBud19pbmZvX3N0cnVjdCB7CisgX191MzIgc3BhY2VBbGxvYzsKKyBfX2xlMzIgYXR0cmlidXRlczsKKyBfX3UxNiBmbGFnczsKKyBfX2xlMzIgZGF0YVN0cmVhbVNpemU7CisgX19sZTMyIHRvdGFsU3RyZWFtU2l6ZTsKKyBfX3UxNiBudW1iZXJPZlN0cmVhbXM7CisgX19sZTE2IGNyZWF0aW9uVGltZTsKKyBfX2xlMTYgY3JlYXRpb25EYXRlOworIF9fdTMyIGNyZWF0b3JJRDsKKyBfX2xlMTYgbW9kaWZ5VGltZTsKKyBfX2xlMTYgbW9kaWZ5RGF0ZTsKKyBfX3UzMiBtb2RpZmllcklEOworIF9fbGUxNiBsYXN0QWNjZXNzRGF0ZTsKKyBfX3UxNiBhcmNoaXZlVGltZTsKKyBfX3UxNiBhcmNoaXZlRGF0ZTsKKyBfX3UzMiBhcmNoaXZlcklEOworIF9fdTE2IGluaGVyaXRlZFJpZ2h0c01hc2s7CisgX19sZTMyIGRpckVudE51bTsKKyBfX2xlMzIgRG9zRGlyTnVtOworIF9fdTMyIHZvbE51bWJlcjsKKyBfX3UzMiBFQURhdGFTaXplOworIF9fdTMyIEVBS2V5Q291bnQ7CisgX191MzIgRUFLZXlTaXplOworIF9fdTMyIE5TQ3JlYXRvcjsKKyBfX3U4IG5hbWVMZW47CisgX191OCBlbnRyeU5hbWVbMjU2XTsKKworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBETV9BVFRSSUJVVEVTIChjcHVfdG9fbGUzMigweDAyKSkKKyNkZWZpbmUgRE1fQ1JFQVRFX0RBVEUgKGNwdV90b19sZTMyKDB4MDQpKQorI2RlZmluZSBETV9DUkVBVEVfVElNRSAoY3B1X3RvX2xlMzIoMHgwOCkpCisjZGVmaW5lIERNX0NSRUFUT1JfSUQgKGNwdV90b19sZTMyKDB4MTApKQorI2RlZmluZSBETV9BUkNISVZFX0RBVEUgKGNwdV90b19sZTMyKDB4MjApKQorI2RlZmluZSBETV9BUkNISVZFX1RJTUUgKGNwdV90b19sZTMyKDB4NDApKQorI2RlZmluZSBETV9BUkNISVZFUl9JRCAoY3B1X3RvX2xlMzIoMHg4MCkpCisjZGVmaW5lIERNX01PRElGWV9EQVRFIChjcHVfdG9fbGUzMigweDAxMDApKQorI2RlZmluZSBETV9NT0RJRllfVElNRSAoY3B1X3RvX2xlMzIoMHgwMjAwKSkKKyNkZWZpbmUgRE1fTU9ESUZJRVJfSUQgKGNwdV90b19sZTMyKDB4MDQwMCkpCisjZGVmaW5lIERNX0xBU1RfQUNDRVNTX0RBVEUgKGNwdV90b19sZTMyKDB4MDgwMCkpCisjZGVmaW5lIERNX0lOSEVSSVRFRF9SSUdIVFNfTUFTSyAoY3B1X3RvX2xlMzIoMHgxMDAwKSkKKyNkZWZpbmUgRE1fTUFYSU1VTV9TUEFDRSAoY3B1X3RvX2xlMzIoMHgyMDAwKSkKKworc3RydWN0IG53X21vZGlmeV9kb3NfaW5mbyB7CisgX19sZTMyIGF0dHJpYnV0ZXM7CisgX19sZTE2IGNyZWF0aW9uRGF0ZTsKKyBfX2xlMTYgY3JlYXRpb25UaW1lOworIF9fdTMyIGNyZWF0b3JJRDsKKyBfX2xlMTYgbW9kaWZ5RGF0ZTsKKyBfX2xlMTYgbW9kaWZ5VGltZTsKKyBfX3UzMiBtb2RpZmllcklEOworIF9fdTE2IGFyY2hpdmVEYXRlOworIF9fdTE2IGFyY2hpdmVUaW1lOworIF9fdTMyIGFyY2hpdmVySUQ7CisgX19sZTE2IGxhc3RBY2Nlc3NEYXRlOworIF9fdTE2IGluaGVyaXRhbmNlR3JhbnRNYXNrOworIF9fdTE2IGluaGVyaXRhbmNlUmV2b2tlTWFzazsKKyBfX3UzMiBtYXhpbXVtU3BhY2U7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3Qgbndfc2VhcmNoX3NlcXVlbmNlIHsKKyBfX3U4IHZvbE51bWJlcjsKKyBfX3UzMiBkaXJCYXNlOworIF9fdTMyIHNlcXVlbmNlOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmNwX21vdW50LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmNwX21vdW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA0ODY5ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uY3BfbW91bnQuaApAQCAtMCwwICsxLDY5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9OQ1BfTU9VTlRfSAorI2RlZmluZSBfTElOVVhfTkNQX01PVU5UX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbmNwLmg+CisKKyNkZWZpbmUgTkNQX01PVU5UX1ZFUlNJT04gMyAgCisKKyNkZWZpbmUgTkNQX01PVU5UX1NPRlQgMHgwMDAxCisjZGVmaW5lIE5DUF9NT1VOVF9JTlRSIDB4MDAwMgorI2RlZmluZSBOQ1BfTU9VTlRfU1RST05HIDB4MDAwNCAgCisjZGVmaW5lIE5DUF9NT1VOVF9OT19PUzIgMHgwMDA4ICAKKyNkZWZpbmUgTkNQX01PVU5UX05PX05GUyAweDAwMTAgIAorI2RlZmluZSBOQ1BfTU9VTlRfRVhUUkFTIDB4MDAyMAorI2RlZmluZSBOQ1BfTU9VTlRfU1lNTElOS1MgMHgwMDQwICAKKyNkZWZpbmUgTkNQX01PVU5UX05GU19FWFRSQVMgMHgwMDgwICAKKworc3RydWN0IG5jcF9tb3VudF9kYXRhIHsKKyBpbnQgdmVyc2lvbjsKKyB1bnNpZ25lZCBpbnQgbmNwX2ZkOworIF9fa2VybmVsX3VpZF90IG1vdW50ZWRfdWlkOworIF9fa2VybmVsX3BpZF90IHdkb2dfcGlkOworCisgdW5zaWduZWQgY2hhciBtb3VudGVkX3ZvbFtOQ1BfVk9MTkFNRV9MRU4gKyAxXTsKKyB1bnNpZ25lZCBpbnQgdGltZV9vdXQ7CisgdW5zaWduZWQgaW50IHJldHJ5X2NvdW50OworIHVuc2lnbmVkIGludCBmbGFnczsKKworIF9fa2VybmVsX3VpZF90IHVpZDsKKyBfX2tlcm5lbF9naWRfdCBnaWQ7CisgX19rZXJuZWxfbW9kZV90IGZpbGVfbW9kZTsKKyBfX2tlcm5lbF9tb2RlX3QgZGlyX21vZGU7Cit9OworCisjZGVmaW5lIE5DUF9NT1VOVF9WRVJTSU9OX1Y0ICg0KSAgCisKK3N0cnVjdCBuY3BfbW91bnRfZGF0YV92NCB7CisgaW50IHZlcnNpb247CisgdW5zaWduZWQgbG9uZyBmbGFnczsKKworIHVuc2lnbmVkIGxvbmcgbW91bnRlZF91aWQ7CisKKyBsb25nIHdkb2dfcGlkOworCisgdW5zaWduZWQgaW50IG5jcF9mZDsKKyB1bnNpZ25lZCBpbnQgdGltZV9vdXQ7CisgdW5zaWduZWQgaW50IHJldHJ5X2NvdW50OworCisgdW5zaWduZWQgbG9uZyB1aWQ7CisgdW5zaWduZWQgbG9uZyBnaWQ7CisKKyB1bnNpZ25lZCBsb25nIGZpbGVfbW9kZTsKKyB1bnNpZ25lZCBsb25nIGRpcl9tb2RlOworfTsKKworI2RlZmluZSBOQ1BfTU9VTlRfVkVSU0lPTl9WNSAoNSkgIAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uY3Bfbm8uaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uY3Bfbm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWZlZDY4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25jcF9uby5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX05DUF9OTworI2RlZmluZSBfTkNQX05PCisKKyNkZWZpbmUgYVJPTkxZIChfX2NvbnN0YW50X2NwdV90b19sZTMyKDEpKQorI2RlZmluZSBhSElEREVOIChfX2NvbnN0YW50X2NwdV90b19sZTMyKDIpKQorI2RlZmluZSBhU1lTVEVNIChfX2NvbnN0YW50X2NwdV90b19sZTMyKDQpKQorI2RlZmluZSBhRVhFQ1VURSAoX19jb25zdGFudF9jcHVfdG9fbGUzMig4KSkKKyNkZWZpbmUgYURJUiAoX19jb25zdGFudF9jcHVfdG9fbGUzMigweDEwKSkKKyNkZWZpbmUgYUFSQ0ggKF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgyMCkpCisjZGVmaW5lIGFTSEFSRUQgKF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHg4MCkpCisjZGVmaW5lIGFET05UU1VCQUxMT0NBVEUgKF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMUw8PDExKSkKKyNkZWZpbmUgYVRSQU5TQUNUSU9OQUwgKF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMUw8PDEyKSkKKyNkZWZpbmUgYVBVUkdFIChfX2NvbnN0YW50X2NwdV90b19sZTMyKDFMPDwxNikpCisjZGVmaW5lIGFSRU5BTUVJTkhJQklUIChfX2NvbnN0YW50X2NwdV90b19sZTMyKDFMPDwxNykpCisjZGVmaW5lIGFERUxFVEVJTkhJQklUIChfX2NvbnN0YW50X2NwdV90b19sZTMyKDFMPDwxOCkpCisjZGVmaW5lIGFET05UQ09NUFJFU1MgKF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMUw8PDI3KSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjlmY2EyYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXQuaApAQCAtMCwwICsxLDUxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9ORVRfSAorI2RlZmluZSBfTElOVVhfTkVUX0gKKworI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxhc20vc29ja2V0Lmg+CisKK3N0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdDsKK3N0cnVjdCBpbm9kZTsKKworI2RlZmluZSBOUFJPVE8gMzIgIAorCisjZGVmaW5lIFNZU19TT0NLRVQgMSAgCisjZGVmaW5lIFNZU19CSU5EIDIgIAorI2RlZmluZSBTWVNfQ09OTkVDVCAzICAKKyNkZWZpbmUgU1lTX0xJU1RFTiA0ICAKKyNkZWZpbmUgU1lTX0FDQ0VQVCA1ICAKKyNkZWZpbmUgU1lTX0dFVFNPQ0tOQU1FIDYgIAorI2RlZmluZSBTWVNfR0VUUEVFUk5BTUUgNyAgCisjZGVmaW5lIFNZU19TT0NLRVRQQUlSIDggIAorI2RlZmluZSBTWVNfU0VORCA5ICAKKyNkZWZpbmUgU1lTX1JFQ1YgMTAgIAorI2RlZmluZSBTWVNfU0VORFRPIDExICAKKyNkZWZpbmUgU1lTX1JFQ1ZGUk9NIDEyICAKKyNkZWZpbmUgU1lTX1NIVVRET1dOIDEzICAKKyNkZWZpbmUgU1lTX1NFVFNPQ0tPUFQgMTQgIAorI2RlZmluZSBTWVNfR0VUU09DS09QVCAxNSAgCisjZGVmaW5lIFNZU19TRU5ETVNHIDE2ICAKKyNkZWZpbmUgU1lTX1JFQ1ZNU0cgMTcgIAorCit0eXBlZGVmIGVudW0geworIFNTX0ZSRUUgPSAwLAorIFNTX1VOQ09OTkVDVEVELAorIFNTX0NPTk5FQ1RJTkcsCisgU1NfQ09OTkVDVEVELAorIFNTX0RJU0NPTk5FQ1RJTkcKK30gc29ja2V0X3N0YXRlOworCisjZGVmaW5lIF9fU09fQUNDRVBUQ09OICgxIDw8IDE2KSAgCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGRldmljZS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGRldmljZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0YjU4ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZGV2aWNlLmgKQEAgLTAsMCArMSw2OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfTkVUREVWSUNFX0gKKyNkZWZpbmUgX0xJTlVYX05FVERFVklDRV9ICisKKyNpbmNsdWRlIDxsaW51eC9pZi5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CisjaW5jbHVkZSA8bGludXgvaWZfcGFja2V0Lmg+CisKKyNkZWZpbmUgTUFYX0FERFJfTEVOIDMyICAKKworI2RlZmluZSBORVRERVZfVFhfT0sgMCAgCisjZGVmaW5lIE5FVERFVl9UWF9CVVNZIDEgIAorI2RlZmluZSBORVRERVZfVFhfTE9DS0VEIC0xICAKKworI2RlZmluZSBMTF9NQVhfSEVBREVSIDMyCisKKyNkZWZpbmUgTUFYX0hFQURFUiBMTF9NQVhfSEVBREVSCisKK3N0cnVjdCBuZXRfZGV2aWNlX3N0YXRzCit7CisgdW5zaWduZWQgbG9uZyByeF9wYWNrZXRzOworIHVuc2lnbmVkIGxvbmcgdHhfcGFja2V0czsKKyB1bnNpZ25lZCBsb25nIHJ4X2J5dGVzOworIHVuc2lnbmVkIGxvbmcgdHhfYnl0ZXM7CisgdW5zaWduZWQgbG9uZyByeF9lcnJvcnM7CisgdW5zaWduZWQgbG9uZyB0eF9lcnJvcnM7CisgdW5zaWduZWQgbG9uZyByeF9kcm9wcGVkOworIHVuc2lnbmVkIGxvbmcgdHhfZHJvcHBlZDsKKyB1bnNpZ25lZCBsb25nIG11bHRpY2FzdDsKKyB1bnNpZ25lZCBsb25nIGNvbGxpc2lvbnM7CisKKyB1bnNpZ25lZCBsb25nIHJ4X2xlbmd0aF9lcnJvcnM7CisgdW5zaWduZWQgbG9uZyByeF9vdmVyX2Vycm9yczsKKyB1bnNpZ25lZCBsb25nIHJ4X2NyY19lcnJvcnM7CisgdW5zaWduZWQgbG9uZyByeF9mcmFtZV9lcnJvcnM7CisgdW5zaWduZWQgbG9uZyByeF9maWZvX2Vycm9yczsKKyB1bnNpZ25lZCBsb25nIHJ4X21pc3NlZF9lcnJvcnM7CisKKyB1bnNpZ25lZCBsb25nIHR4X2Fib3J0ZWRfZXJyb3JzOworIHVuc2lnbmVkIGxvbmcgdHhfY2Fycmllcl9lcnJvcnM7CisgdW5zaWduZWQgbG9uZyB0eF9maWZvX2Vycm9yczsKKyB1bnNpZ25lZCBsb25nIHR4X2hlYXJ0YmVhdF9lcnJvcnM7CisgdW5zaWduZWQgbG9uZyB0eF93aW5kb3dfZXJyb3JzOworCisgdW5zaWduZWQgbG9uZyByeF9jb21wcmVzc2VkOworIHVuc2lnbmVkIGxvbmcgdHhfY29tcHJlc3NlZDsKK307CisKK2VudW0geworIElGX1BPUlRfVU5LTk9XTiA9IDAsCisgSUZfUE9SVF8xMEJBU0UyLAorIElGX1BPUlRfMTBCQVNFVCwKKyBJRl9QT1JUX0FVSSwKKyBJRl9QT1JUXzEwMEJBU0VULAorIElGX1BPUlRfMTAwQkFTRVRYLAorIElGX1BPUlRfMTAwQkFTRUZYCit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDg4MzQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19MSU5VWF9ORVRGSUxURVJfSAorI2RlZmluZSBfX0xJTlVYX05FVEZJTFRFUl9ICisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorCisjZGVmaW5lIE5GX0RST1AgMAorI2RlZmluZSBORl9BQ0NFUFQgMQorI2RlZmluZSBORl9TVE9MRU4gMgorI2RlZmluZSBORl9RVUVVRSAzCisjZGVmaW5lIE5GX1JFUEVBVCA0CisjZGVmaW5lIE5GX1NUT1AgNQorI2RlZmluZSBORl9NQVhfVkVSRElDVCBORl9TVE9QCisKKyNkZWZpbmUgTkZfVkVSRElDVF9NQVNLIDB4MDAwMGZmZmYKKyNkZWZpbmUgTkZfVkVSRElDVF9CSVRTIDE2CisKKyNkZWZpbmUgTkZfVkVSRElDVF9RTUFTSyAweGZmZmYwMDAwCisjZGVmaW5lIE5GX1ZFUkRJQ1RfUUJJVFMgMTYKKworI2RlZmluZSBORl9RVUVVRV9OUih4KSAoKCh4IDw8IE5GX1ZFUkRJQ1RfUUJJVFMpICYgTkZfVkVSRElDVF9RTUFTSykgfCBORl9RVUVVRSkKKworI2RlZmluZSBORkNfVU5LTk9XTiAweDQwMDAKKyNkZWZpbmUgTkZDX0FMVEVSRUQgMHg4MDAwCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29tbW9uLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTE3N2ZjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29tbW9uLmgKQEAgLTAsMCArMSwxMTQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX05GX0NPTk5UUkFDS19DT01NT05fSAorI2RlZmluZSBfTkZfQ09OTlRSQUNLX0NPTU1PTl9ICisKK2VudW0gaXBfY29ubnRyYWNrX2luZm8KK3sKKworIElQX0NUX0VTVEFCTElTSEVELAorCisgSVBfQ1RfUkVMQVRFRCwKKworIElQX0NUX05FVywKKworIElQX0NUX0lTX1JFUExZLAorCisgSVBfQ1RfTlVNQkVSID0gSVBfQ1RfSVNfUkVQTFkgKiAyIC0gMQorfTsKKworZW51bSBpcF9jb25udHJhY2tfc3RhdHVzIHsKKworIElQU19FWFBFQ1RFRF9CSVQgPSAwLAorIElQU19FWFBFQ1RFRCA9ICgxIDw8IElQU19FWFBFQ1RFRF9CSVQpLAorCisgSVBTX1NFRU5fUkVQTFlfQklUID0gMSwKKyBJUFNfU0VFTl9SRVBMWSA9ICgxIDw8IElQU19TRUVOX1JFUExZX0JJVCksCisKKyBJUFNfQVNTVVJFRF9CSVQgPSAyLAorIElQU19BU1NVUkVEID0gKDEgPDwgSVBTX0FTU1VSRURfQklUKSwKKworIElQU19DT05GSVJNRURfQklUID0gMywKKyBJUFNfQ09ORklSTUVEID0gKDEgPDwgSVBTX0NPTkZJUk1FRF9CSVQpLAorCisgSVBTX1NSQ19OQVRfQklUID0gNCwKKyBJUFNfU1JDX05BVCA9ICgxIDw8IElQU19TUkNfTkFUX0JJVCksCisKKyBJUFNfRFNUX05BVF9CSVQgPSA1LAorIElQU19EU1RfTkFUID0gKDEgPDwgSVBTX0RTVF9OQVRfQklUKSwKKworIElQU19OQVRfTUFTSyA9IChJUFNfRFNUX05BVCB8IElQU19TUkNfTkFUKSwKKworIElQU19TRVFfQURKVVNUX0JJVCA9IDYsCisgSVBTX1NFUV9BREpVU1QgPSAoMSA8PCBJUFNfU0VRX0FESlVTVF9CSVQpLAorCisgSVBTX1NSQ19OQVRfRE9ORV9CSVQgPSA3LAorIElQU19TUkNfTkFUX0RPTkUgPSAoMSA8PCBJUFNfU1JDX05BVF9ET05FX0JJVCksCisKKyBJUFNfRFNUX05BVF9ET05FX0JJVCA9IDgsCisgSVBTX0RTVF9OQVRfRE9ORSA9ICgxIDw8IElQU19EU1RfTkFUX0RPTkVfQklUKSwKKworIElQU19OQVRfRE9ORV9NQVNLID0gKElQU19EU1RfTkFUX0RPTkUgfCBJUFNfU1JDX05BVF9ET05FKSwKKworIElQU19EWUlOR19CSVQgPSA5LAorIElQU19EWUlORyA9ICgxIDw8IElQU19EWUlOR19CSVQpLAorCisgSVBTX0ZJWEVEX1RJTUVPVVRfQklUID0gMTAsCisgSVBTX0ZJWEVEX1RJTUVPVVQgPSAoMSA8PCBJUFNfRklYRURfVElNRU9VVF9CSVQpLAorfTsKKworZW51bSBpcF9jb25udHJhY2tfZXZlbnRzCit7CisKKyBJUENUX05FV19CSVQgPSAwLAorIElQQ1RfTkVXID0gKDEgPDwgSVBDVF9ORVdfQklUKSwKKworIElQQ1RfUkVMQVRFRF9CSVQgPSAxLAorIElQQ1RfUkVMQVRFRCA9ICgxIDw8IElQQ1RfUkVMQVRFRF9CSVQpLAorCisgSVBDVF9ERVNUUk9ZX0JJVCA9IDIsCisgSVBDVF9ERVNUUk9ZID0gKDEgPDwgSVBDVF9ERVNUUk9ZX0JJVCksCisKKyBJUENUX1JFRlJFU0hfQklUID0gMywKKyBJUENUX1JFRlJFU0ggPSAoMSA8PCBJUENUX1JFRlJFU0hfQklUKSwKKworIElQQ1RfU1RBVFVTX0JJVCA9IDQsCisgSVBDVF9TVEFUVVMgPSAoMSA8PCBJUENUX1NUQVRVU19CSVQpLAorCisgSVBDVF9QUk9UT0lORk9fQklUID0gNSwKKyBJUENUX1BST1RPSU5GTyA9ICgxIDw8IElQQ1RfUFJPVE9JTkZPX0JJVCksCisKKyBJUENUX1BST1RPSU5GT19WT0xBVElMRV9CSVQgPSA2LAorIElQQ1RfUFJPVE9JTkZPX1ZPTEFUSUxFID0gKDEgPDwgSVBDVF9QUk9UT0lORk9fVk9MQVRJTEVfQklUKSwKKworIElQQ1RfSEVMUEVSX0JJVCA9IDcsCisgSVBDVF9IRUxQRVIgPSAoMSA8PCBJUENUX0hFTFBFUl9CSVQpLAorCisgSVBDVF9IRUxQSU5GT19CSVQgPSA4LAorIElQQ1RfSEVMUElORk8gPSAoMSA8PCBJUENUX0hFTFBJTkZPX0JJVCksCisKKyBJUENUX0hFTFBJTkZPX1ZPTEFUSUxFX0JJVCA9IDksCisgSVBDVF9IRUxQSU5GT19WT0xBVElMRSA9ICgxIDw8IElQQ1RfSEVMUElORk9fVk9MQVRJTEVfQklUKSwKKworIElQQ1RfTkFUSU5GT19CSVQgPSAxMCwKKyBJUENUX05BVElORk8gPSAoMSA8PCBJUENUX05BVElORk9fQklUKSwKKworIElQQ1RfQ09VTlRFUl9GSUxMSU5HX0JJVCA9IDExLAorIElQQ1RfQ09VTlRFUl9GSUxMSU5HID0gKDEgPDwgSVBDVF9DT1VOVEVSX0ZJTExJTkdfQklUKSwKK307CisKK2VudW0gaXBfY29ubnRyYWNrX2V4cGVjdF9ldmVudHMgeworIElQRVhQX05FV19CSVQgPSAwLAorIElQRVhQX05FVyA9ICgxIDw8IElQRVhQX05FV19CSVQpLAorfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19mdHAuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmODE1YTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19mdHAuaApAQCAtMCwwICsxLDI3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9ORl9DT05OVFJBQ0tfRlRQX0gKKyNkZWZpbmUgX05GX0NPTk5UUkFDS19GVFBfSAorCitlbnVtIGlwX2N0X2Z0cF90eXBlCit7CisKKyBJUF9DVF9GVFBfUE9SVCwKKworIElQX0NUX0ZUUF9QQVNWLAorCisgSVBfQ1RfRlRQX0VQUlQsCisKKyBJUF9DVF9GVFBfRVBTViwKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2N0cC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2N0cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1NzY4YjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zY3RwLmgKQEAgLTAsMCArMSwzNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTkZfQ09OTlRSQUNLX1NDVFBfSAorI2RlZmluZSBfTkZfQ09OTlRSQUNLX1NDVFBfSAorCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZV9jb21tb24uaD4KKworZW51bSBzY3RwX2Nvbm50cmFjayB7CisgU0NUUF9DT05OVFJBQ0tfTk9ORSwKKyBTQ1RQX0NPTk5UUkFDS19DTE9TRUQsCisgU0NUUF9DT05OVFJBQ0tfQ09PS0lFX1dBSVQsCisgU0NUUF9DT05OVFJBQ0tfQ09PS0lFX0VDSE9FRCwKKyBTQ1RQX0NPTk5UUkFDS19FU1RBQkxJU0hFRCwKKyBTQ1RQX0NPTk5UUkFDS19TSFVURE9XTl9TRU5ULAorIFNDVFBfQ09OTlRSQUNLX1NIVVRET1dOX1JFQ0QsCisgU0NUUF9DT05OVFJBQ0tfU0hVVERPV05fQUNLX1NFTlQsCisgU0NUUF9DT05OVFJBQ0tfTUFYCit9OworCitzdHJ1Y3QgaXBfY3Rfc2N0cAoreworIGVudW0gc2N0cF9jb25udHJhY2sgc3RhdGU7CisKKyB1X2ludDMyX3QgdnRhZ1tJUF9DVF9ESVJfTUFYXTsKKyB1X2ludDMyX3QgdHRhZ1tJUF9DVF9ESVJfTUFYXTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGNwLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190Y3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjdmOTAyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGNwLmgKQEAgLTAsMCArMSwzNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTkZfQ09OTlRSQUNLX1RDUF9ICisjZGVmaW5lIF9ORl9DT05OVFJBQ0tfVENQX0gKKworZW51bSB0Y3BfY29ubnRyYWNrIHsKKyBUQ1BfQ09OTlRSQUNLX05PTkUsCisgVENQX0NPTk5UUkFDS19TWU5fU0VOVCwKKyBUQ1BfQ09OTlRSQUNLX1NZTl9SRUNWLAorIFRDUF9DT05OVFJBQ0tfRVNUQUJMSVNIRUQsCisgVENQX0NPTk5UUkFDS19GSU5fV0FJVCwKKyBUQ1BfQ09OTlRSQUNLX0NMT1NFX1dBSVQsCisgVENQX0NPTk5UUkFDS19MQVNUX0FDSywKKyBUQ1BfQ09OTlRSQUNLX1RJTUVfV0FJVCwKKyBUQ1BfQ09OTlRSQUNLX0NMT1NFLAorIFRDUF9DT05OVFJBQ0tfTElTVEVOLAorIFRDUF9DT05OVFJBQ0tfTUFYLAorIFRDUF9DT05OVFJBQ0tfSUdOT1JFCit9OworCisjZGVmaW5lIElQX0NUX1RDUF9GTEFHX1dJTkRPV19TQ0FMRSAweDAxCisKKyNkZWZpbmUgSVBfQ1RfVENQX0ZMQUdfU0FDS19QRVJNIDB4MDIKKworI2RlZmluZSBJUF9DVF9UQ1BfRkxBR19DTE9TRV9JTklUIDB4MDMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZV9jb21tb24uaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlX2NvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyODI1NDMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZV9jb21tb24uaApAQCAtMCwwICsxLDI0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9ORl9DT05OVFJBQ0tfVFVQTEVfQ09NTU9OX0gKKyNkZWZpbmUgX05GX0NPTk5UUkFDS19UVVBMRV9DT01NT05fSAorCitlbnVtIGlwX2Nvbm50cmFja19kaXIKK3sKKyBJUF9DVF9ESVJfT1JJR0lOQUwsCisgSVBfQ1RfRElSX1JFUExZLAorIElQX0NUX0RJUl9NQVgKK307CisKKyNkZWZpbmUgQ1RJTkZPMkRJUihjdGluZm8pICgoY3RpbmZvKSA+PSBJUF9DVF9JU19SRVBMWSA/IElQX0NUX0RJUl9SRVBMWSA6IElQX0NUX0RJUl9PUklHSU5BTCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL25mbmV0bGluay5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTQ0Y2FiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmsuaApAQCAtMCwwICsxLDg0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9ORk5FVExJTktfSAorI2RlZmluZSBfTkZORVRMSU5LX0gKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjZGVmaW5lIE5GX05FVExJTktfQ09OTlRSQUNLX05FVyAweDAwMDAwMDAxCisjZGVmaW5lIE5GX05FVExJTktfQ09OTlRSQUNLX1VQREFURSAweDAwMDAwMDAyCisjZGVmaW5lIE5GX05FVExJTktfQ09OTlRSQUNLX0RFU1RST1kgMHgwMDAwMDAwNAorI2RlZmluZSBORl9ORVRMSU5LX0NPTk5UUkFDS19FWFBfTkVXIDB4MDAwMDAwMDgKKyNkZWZpbmUgTkZfTkVUTElOS19DT05OVFJBQ0tfRVhQX1VQREFURSAweDAwMDAwMDEwCisjZGVmaW5lIE5GX05FVExJTktfQ09OTlRSQUNLX0VYUF9ERVNUUk9ZIDB4MDAwMDAwMjAKKworZW51bSBuZm5ldGxpbmtfZ3JvdXBzIHsKKyBORk5MR1JQX05PTkUsCisjZGVmaW5lIE5GTkxHUlBfTk9ORSBORk5MR1JQX05PTkUKKyBORk5MR1JQX0NPTk5UUkFDS19ORVcsCisjZGVmaW5lIE5GTkxHUlBfQ09OTlRSQUNLX05FVyBORk5MR1JQX0NPTk5UUkFDS19ORVcKKyBORk5MR1JQX0NPTk5UUkFDS19VUERBVEUsCisjZGVmaW5lIE5GTkxHUlBfQ09OTlRSQUNLX1VQREFURSBORk5MR1JQX0NPTk5UUkFDS19VUERBVEUKKyBORk5MR1JQX0NPTk5UUkFDS19ERVNUUk9ZLAorI2RlZmluZSBORk5MR1JQX0NPTk5UUkFDS19ERVNUUk9ZIE5GTkxHUlBfQ09OTlRSQUNLX0RFU1RST1kKKyBORk5MR1JQX0NPTk5UUkFDS19FWFBfTkVXLAorI2RlZmluZSBORk5MR1JQX0NPTk5UUkFDS19FWFBfTkVXIE5GTkxHUlBfQ09OTlRSQUNLX0VYUF9ORVcKKyBORk5MR1JQX0NPTk5UUkFDS19FWFBfVVBEQVRFLAorI2RlZmluZSBORk5MR1JQX0NPTk5UUkFDS19FWFBfVVBEQVRFIE5GTkxHUlBfQ09OTlRSQUNLX0VYUF9VUERBVEUKKyBORk5MR1JQX0NPTk5UUkFDS19FWFBfREVTVFJPWSwKKyNkZWZpbmUgTkZOTEdSUF9DT05OVFJBQ0tfRVhQX0RFU1RST1kgTkZOTEdSUF9DT05OVFJBQ0tfRVhQX0RFU1RST1kKKyBfX05GTkxHUlBfTUFYLAorfTsKKyNkZWZpbmUgTkZOTEdSUF9NQVggKF9fTkZOTEdSUF9NQVggLSAxKQorCitzdHJ1Y3QgbmZhdHRyCit7CisgdV9pbnQxNl90IG5mYV9sZW47CisgdV9pbnQxNl90IG5mYV90eXBlOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgTkZOTF9ORkFfTkVTVCAweDgwMDAKKyNkZWZpbmUgTkZBX1RZUEUoYXR0cikgKChhdHRyKS0+bmZhX3R5cGUgJiAweDdmZmYpCisKKyNkZWZpbmUgTkZBX0FMSUdOVE8gNAorI2RlZmluZSBORkFfQUxJR04obGVuKSAoKChsZW4pICsgTkZBX0FMSUdOVE8gLSAxKSAmIH4oTkZBX0FMSUdOVE8gLSAxKSkKKyNkZWZpbmUgTkZBX09LKG5mYSxsZW4pICgobGVuKSA+IDAgJiYgKG5mYSktPm5mYV9sZW4gPj0gc2l6ZW9mKHN0cnVjdCBuZmF0dHIpICAgJiYgKG5mYSktPm5mYV9sZW4gPD0gKGxlbikpCisjZGVmaW5lIE5GQV9ORVhUKG5mYSxhdHRybGVuKSAoKGF0dHJsZW4pIC09IE5GQV9BTElHTigobmZhKS0+bmZhX2xlbiksICAgKHN0cnVjdCBuZmF0dHIgKikoKChjaGFyICopKG5mYSkpICsgTkZBX0FMSUdOKChuZmEpLT5uZmFfbGVuKSkpCisjZGVmaW5lIE5GQV9MRU5HVEgobGVuKSAoTkZBX0FMSUdOKHNpemVvZihzdHJ1Y3QgbmZhdHRyKSkgKyAobGVuKSkKKyNkZWZpbmUgTkZBX1NQQUNFKGxlbikgTkZBX0FMSUdOKE5GQV9MRU5HVEgobGVuKSkKKyNkZWZpbmUgTkZBX0RBVEEobmZhKSAoKHZvaWQgKikoKChjaGFyICopKG5mYSkpICsgTkZBX0xFTkdUSCgwKSkpCisjZGVmaW5lIE5GQV9QQVlMT0FEKG5mYSkgKChpbnQpKChuZmEpLT5uZmFfbGVuKSAtIE5GQV9MRU5HVEgoMCkpCisjZGVmaW5lIE5GQV9ORVNUKHNrYiwgdHlwZSkgICh7IHN0cnVjdCBuZmF0dHIgKl9fc3RhcnQgPSAoc3RydWN0IG5mYXR0ciAqKSAoc2tiKS0+dGFpbDsgICBORkFfUFVUKHNrYiwgKE5GTkxfTkZBX05FU1QgfCB0eXBlKSwgMCwgTlVMTCk7ICAgX19zdGFydDsgfSkKKyNkZWZpbmUgTkZBX05FU1RfRU5EKHNrYiwgc3RhcnQpICAoeyAoc3RhcnQpLT5uZmFfbGVuID0gKChza2IpLT50YWlsIC0gKHVuc2lnbmVkIGNoYXIgKikgKHN0YXJ0KSk7ICAgKHNrYiktPmxlbjsgfSkKKyNkZWZpbmUgTkZBX05FU1RfQ0FOQ0VMKHNrYiwgc3RhcnQpICAoeyBpZiAoc3RhcnQpICAgc2tiX3RyaW0oc2tiLCAodW5zaWduZWQgY2hhciAqKSAoc3RhcnQpIC0gKHNrYiktPmRhdGEpOyAgIC0xOyB9KQorCitzdHJ1Y3QgbmZnZW5tc2cgeworIHVfaW50OF90IG5mZ2VuX2ZhbWlseTsKKyB1X2ludDhfdCB2ZXJzaW9uOworIHVfaW50MTZfdCByZXNfaWQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2RlZmluZSBORk5FVExJTktfVjAgMAorCisjZGVmaW5lIE5GTV9ORkEobikgKChzdHJ1Y3QgbmZhdHRyICopKCgoY2hhciAqKShuKSkgICArIE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgbmZnZW5tc2cpKSkpCisjZGVmaW5lIE5GTV9QQVlMT0FEKG4pIE5MTVNHX1BBWUxPQUQobiwgc2l6ZW9mKHN0cnVjdCBuZmdlbm1zZykpCisKKyNkZWZpbmUgTkZOTF9TVUJTWVNfSUQoeCkgKCh4ICYgMHhmZjAwKSA+PiA4KQorI2RlZmluZSBORk5MX01TR19UWVBFKHgpICh4ICYgMHgwMGZmKQorCisjZGVmaW5lIE5GTkxfU1VCU1lTX05PTkUgMAorI2RlZmluZSBORk5MX1NVQlNZU19DVE5FVExJTksgMQorI2RlZmluZSBORk5MX1NVQlNZU19DVE5FVExJTktfRVhQIDIKKyNkZWZpbmUgTkZOTF9TVUJTWVNfUVVFVUUgMworI2RlZmluZSBORk5MX1NVQlNZU19VTE9HIDQKKyNkZWZpbmUgTkZOTF9TVUJTWVNfQ09VTlQgNQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2Nvbm50cmFjay5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfY29ubnRyYWNrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA1ZGQwOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2Nvbm50cmFjay5oCkBAIC0wLDAgKzEsMTQ2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9JUENPTk5UUkFDS19ORVRMSU5LX0gKKyNkZWZpbmUgX0lQQ09OTlRSQUNLX05FVExJTktfSAorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci9uZm5ldGxpbmsuaD4KKworZW51bSBjbnRsX21zZ190eXBlcyB7CisgSVBDVE5MX01TR19DVF9ORVcsCisgSVBDVE5MX01TR19DVF9HRVQsCisgSVBDVE5MX01TR19DVF9ERUxFVEUsCisgSVBDVE5MX01TR19DVF9HRVRfQ1RSWkVSTywKKworIElQQ1ROTF9NU0dfTUFYCit9OworCitlbnVtIGN0bmxfZXhwX21zZ190eXBlcyB7CisgSVBDVE5MX01TR19FWFBfTkVXLAorIElQQ1ROTF9NU0dfRVhQX0dFVCwKKyBJUENUTkxfTVNHX0VYUF9ERUxFVEUsCisKKyBJUENUTkxfTVNHX0VYUF9NQVgKK307CisKK2VudW0gY3RhdHRyX3R5cGUgeworIENUQV9VTlNQRUMsCisgQ1RBX1RVUExFX09SSUcsCisgQ1RBX1RVUExFX1JFUExZLAorIENUQV9TVEFUVVMsCisgQ1RBX1BST1RPSU5GTywKKyBDVEFfSEVMUCwKKyBDVEFfTkFUX1NSQywKKyNkZWZpbmUgQ1RBX05BVCBDVEFfTkFUX1NSQyAgCisgQ1RBX1RJTUVPVVQsCisgQ1RBX01BUkssCisgQ1RBX0NPVU5URVJTX09SSUcsCisgQ1RBX0NPVU5URVJTX1JFUExZLAorIENUQV9VU0UsCisgQ1RBX0lELAorIENUQV9OQVRfRFNULAorIF9fQ1RBX01BWAorfTsKKyNkZWZpbmUgQ1RBX01BWCAoX19DVEFfTUFYIC0gMSkKKworZW51bSBjdGF0dHJfdHVwbGUgeworIENUQV9UVVBMRV9VTlNQRUMsCisgQ1RBX1RVUExFX0lQLAorIENUQV9UVVBMRV9QUk9UTywKKyBfX0NUQV9UVVBMRV9NQVgKK307CisjZGVmaW5lIENUQV9UVVBMRV9NQVggKF9fQ1RBX1RVUExFX01BWCAtIDEpCisKK2VudW0gY3RhdHRyX2lwIHsKKyBDVEFfSVBfVU5TUEVDLAorIENUQV9JUF9WNF9TUkMsCisgQ1RBX0lQX1Y0X0RTVCwKKyBDVEFfSVBfVjZfU1JDLAorIENUQV9JUF9WNl9EU1QsCisgX19DVEFfSVBfTUFYCit9OworI2RlZmluZSBDVEFfSVBfTUFYIChfX0NUQV9JUF9NQVggLSAxKQorCitlbnVtIGN0YXR0cl9sNHByb3RvIHsKKyBDVEFfUFJPVE9fVU5TUEVDLAorIENUQV9QUk9UT19OVU0sCisgQ1RBX1BST1RPX1NSQ19QT1JULAorIENUQV9QUk9UT19EU1RfUE9SVCwKKyBDVEFfUFJPVE9fSUNNUF9JRCwKKyBDVEFfUFJPVE9fSUNNUF9UWVBFLAorIENUQV9QUk9UT19JQ01QX0NPREUsCisgQ1RBX1BST1RPX0lDTVBWNl9JRCwKKyBDVEFfUFJPVE9fSUNNUFY2X1RZUEUsCisgQ1RBX1BST1RPX0lDTVBWNl9DT0RFLAorIF9fQ1RBX1BST1RPX01BWAorfTsKKyNkZWZpbmUgQ1RBX1BST1RPX01BWCAoX19DVEFfUFJPVE9fTUFYIC0gMSkKKworZW51bSBjdGF0dHJfcHJvdG9pbmZvIHsKKyBDVEFfUFJPVE9JTkZPX1VOU1BFQywKKyBDVEFfUFJPVE9JTkZPX1RDUCwKKyBfX0NUQV9QUk9UT0lORk9fTUFYCit9OworI2RlZmluZSBDVEFfUFJPVE9JTkZPX01BWCAoX19DVEFfUFJPVE9JTkZPX01BWCAtIDEpCisKK2VudW0gY3RhdHRyX3Byb3RvaW5mb190Y3AgeworIENUQV9QUk9UT0lORk9fVENQX1VOU1BFQywKKyBDVEFfUFJPVE9JTkZPX1RDUF9TVEFURSwKKyBfX0NUQV9QUk9UT0lORk9fVENQX01BWAorfTsKKyNkZWZpbmUgQ1RBX1BST1RPSU5GT19UQ1BfTUFYIChfX0NUQV9QUk9UT0lORk9fVENQX01BWCAtIDEpCisKK2VudW0gY3RhdHRyX2NvdW50ZXJzIHsKKyBDVEFfQ09VTlRFUlNfVU5TUEVDLAorIENUQV9DT1VOVEVSU19QQUNLRVRTLAorIENUQV9DT1VOVEVSU19CWVRFUywKKyBDVEFfQ09VTlRFUlMzMl9QQUNLRVRTLAorIENUQV9DT1VOVEVSUzMyX0JZVEVTLAorIF9fQ1RBX0NPVU5URVJTX01BWAorfTsKKyNkZWZpbmUgQ1RBX0NPVU5URVJTX01BWCAoX19DVEFfQ09VTlRFUlNfTUFYIC0gMSkKKworZW51bSBjdGF0dHJfbmF0IHsKKyBDVEFfTkFUX1VOU1BFQywKKyBDVEFfTkFUX01JTklQLAorIENUQV9OQVRfTUFYSVAsCisgQ1RBX05BVF9QUk9UTywKKyBfX0NUQV9OQVRfTUFYCit9OworI2RlZmluZSBDVEFfTkFUX01BWCAoX19DVEFfTkFUX01BWCAtIDEpCisKK2VudW0gY3RhdHRyX3Byb3RvbmF0IHsKKyBDVEFfUFJPVE9OQVRfVU5TUEVDLAorIENUQV9QUk9UT05BVF9QT1JUX01JTiwKKyBDVEFfUFJPVE9OQVRfUE9SVF9NQVgsCisgX19DVEFfUFJPVE9OQVRfTUFYCit9OworI2RlZmluZSBDVEFfUFJPVE9OQVRfTUFYIChfX0NUQV9QUk9UT05BVF9NQVggLSAxKQorCitlbnVtIGN0YXR0cl9leHBlY3QgeworIENUQV9FWFBFQ1RfVU5TUEVDLAorIENUQV9FWFBFQ1RfTUFTVEVSLAorIENUQV9FWFBFQ1RfVFVQTEUsCisgQ1RBX0VYUEVDVF9NQVNLLAorIENUQV9FWFBFQ1RfVElNRU9VVCwKKyBDVEFfRVhQRUNUX0lELAorIENUQV9FWFBFQ1RfSEVMUF9OQU1FLAorIF9fQ1RBX0VYUEVDVF9NQVgKK307CisjZGVmaW5lIENUQV9FWFBFQ1RfTUFYIChfX0NUQV9FWFBFQ1RfTUFYIC0gMSkKKworZW51bSBjdGF0dHJfaGVscCB7CisgQ1RBX0hFTFBfVU5TUEVDLAorIENUQV9IRUxQX05BTUUsCisgX19DVEFfSEVMUF9NQVgKK307CisjZGVmaW5lIENUQV9IRUxQX01BWCAoX19DVEFfSEVMUF9NQVggLSAxKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzQxODFmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oCkBAIC0wLDAgKzEsMTI1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9YX1RBQkxFU19ICisjZGVmaW5lIF9YX1RBQkxFU19ICisKKyNkZWZpbmUgWFRfRlVOQ1RJT05fTUFYTkFNRUxFTiAzMAorI2RlZmluZSBYVF9UQUJMRV9NQVhOQU1FTEVOIDMyCisKK3N0cnVjdCB4dF9lbnRyeV9tYXRjaAoreworIHVuaW9uIHsKKyBzdHJ1Y3QgeworIHVfaW50MTZfdCBtYXRjaF9zaXplOworCisgY2hhciBuYW1lW1hUX0ZVTkNUSU9OX01BWE5BTUVMRU4tMV07CisKKyB1X2ludDhfdCByZXZpc2lvbjsKKyB9IHVzZXI7Cisgc3RydWN0IHsKKyB1X2ludDE2X3QgbWF0Y2hfc2l6ZTsKKworIHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2g7CisgfSBrZXJuZWw7CisKKyB1X2ludDE2X3QgbWF0Y2hfc2l6ZTsKKyB9IHU7CisKKyB1bnNpZ25lZCBjaGFyIGRhdGFbMF07Cit9OworCitzdHJ1Y3QgeHRfZW50cnlfdGFyZ2V0Cit7CisgdW5pb24geworIHN0cnVjdCB7CisgdV9pbnQxNl90IHRhcmdldF9zaXplOworCisgY2hhciBuYW1lW1hUX0ZVTkNUSU9OX01BWE5BTUVMRU4tMV07CisKKyB1X2ludDhfdCByZXZpc2lvbjsKKyB9IHVzZXI7Cisgc3RydWN0IHsKKyB1X2ludDE2X3QgdGFyZ2V0X3NpemU7CisKKyBzdHJ1Y3QgeHRfdGFyZ2V0ICp0YXJnZXQ7CisgfSBrZXJuZWw7CisKKyB1X2ludDE2X3QgdGFyZ2V0X3NpemU7CisgfSB1OworCisgdW5zaWduZWQgY2hhciBkYXRhWzBdOworfTsKKworc3RydWN0IHh0X3N0YW5kYXJkX3RhcmdldAoreworIHN0cnVjdCB4dF9lbnRyeV90YXJnZXQgdGFyZ2V0OworIGludCB2ZXJkaWN0OworfTsKKworc3RydWN0IHh0X2dldF9yZXZpc2lvbgoreworIGNoYXIgbmFtZVtYVF9GVU5DVElPTl9NQVhOQU1FTEVOLTFdOworCisgdV9pbnQ4X3QgcmV2aXNpb247Cit9OworCisjZGVmaW5lIFhUX0NPTlRJTlVFIDB4RkZGRkZGRkYKKworI2RlZmluZSBYVF9SRVRVUk4gKC1ORl9SRVBFQVQgLSAxKQorCitzdHJ1Y3QgX3h0X2FsaWduCit7CisgdV9pbnQ4X3QgdTg7CisgdV9pbnQxNl90IHUxNjsKKyB1X2ludDMyX3QgdTMyOworIHVfaW50NjRfdCB1NjQ7Cit9OworCisjZGVmaW5lIFhUX0FMSUdOKHMpICgoKHMpICsgKF9fYWxpZ25vZl9fKHN0cnVjdCBfeHRfYWxpZ24pLTEpKSAgICYgfihfX2FsaWdub2ZfXyhzdHJ1Y3QgX3h0X2FsaWduKS0xKSkKKworI2RlZmluZSBYVF9TVEFOREFSRF9UQVJHRVQgIiIKKworI2RlZmluZSBYVF9FUlJPUl9UQVJHRVQgIkVSUk9SIgorCisjZGVmaW5lIFhUX0JBU0VfQ1RMIDY0ICAKKworI2RlZmluZSBYVF9TT19TRVRfUkVQTEFDRSAoWFRfQkFTRV9DVEwpCisjZGVmaW5lIFhUX1NPX1NFVF9BRERfQ09VTlRFUlMgKFhUX0JBU0VfQ1RMICsgMSkKKyNkZWZpbmUgWFRfU09fU0VUX01BWCBYVF9TT19TRVRfQUREX0NPVU5URVJTCisKKyNkZWZpbmUgWFRfU09fR0VUX0lORk8gKFhUX0JBU0VfQ1RMKQorI2RlZmluZSBYVF9TT19HRVRfRU5UUklFUyAoWFRfQkFTRV9DVEwgKyAxKQorI2RlZmluZSBYVF9TT19HRVRfUkVWSVNJT05fTUFUQ0ggKFhUX0JBU0VfQ1RMICsgMikKKyNkZWZpbmUgWFRfU09fR0VUX1JFVklTSU9OX1RBUkdFVCAoWFRfQkFTRV9DVEwgKyAzKQorI2RlZmluZSBYVF9TT19HRVRfTUFYIFhUX1NPX0dFVF9SRVZJU0lPTl9UQVJHRVQKKworI2RlZmluZSBTRVRfQ09VTlRFUihjLGIscCkgZG8geyAoYykuYmNudCA9IChiKTsgKGMpLnBjbnQgPSAocCk7IH0gd2hpbGUoMCkKKyNkZWZpbmUgQUREX0NPVU5URVIoYyxiLHApIGRvIHsgKGMpLmJjbnQgKz0gKGIpOyAoYykucGNudCArPSAocCk7IH0gd2hpbGUoMCkKKworc3RydWN0IHh0X2NvdW50ZXJzCit7CisgdV9pbnQ2NF90IHBjbnQsIGJjbnQ7Cit9OworCitzdHJ1Y3QgeHRfY291bnRlcnNfaW5mbworeworCisgY2hhciBuYW1lW1hUX1RBQkxFX01BWE5BTUVMRU5dOworCisgdW5zaWduZWQgaW50IG51bV9jb3VudGVyczsKKworIHN0cnVjdCB4dF9jb3VudGVycyBjb3VudGVyc1swXTsKK307CisKKyNkZWZpbmUgWFRfSU5WX1BST1RPIDB4NDAgIAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfQ0xBU1NJRlkuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfQ0xBU1NJRlkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTlmNjFlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9DTEFTU0lGWS5oCkBAIC0wLDAgKzEsMTkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX1hUX0NMQVNTSUZZX0gKKyNkZWZpbmUgX1hUX0NMQVNTSUZZX0gKKworc3RydWN0IHh0X2NsYXNzaWZ5X3RhcmdldF9pbmZvIHsKKyB1X2ludDMyX3QgcHJpb3JpdHk7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfQ09OTk1BUksuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfQ09OTk1BUksuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjMwZWViCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9DT05OTUFSSy5oCkBAIC0wLDAgKzEsMjcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX1hUX0NPTk5NQVJLX0hfdGFyZ2V0CisjZGVmaW5lIF9YVF9DT05OTUFSS19IX3RhcmdldAorCitlbnVtIHsKKyBYVF9DT05OTUFSS19TRVQgPSAwLAorIFhUX0NPTk5NQVJLX1NBVkUsCisgWFRfQ09OTk1BUktfUkVTVE9SRQorfTsKKworc3RydWN0IHh0X2Nvbm5tYXJrX3RhcmdldF9pbmZvIHsKKyB1bnNpZ25lZCBsb25nIG1hcms7CisgdW5zaWduZWQgbG9uZyBtYXNrOworIHVfaW50OF90IG1vZGU7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfQ09OTlNFQ01BUksuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfQ09OTlNFQ01BUksuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTE2YjJlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9DT05OU0VDTUFSSy5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX1hUX0NPTk5TRUNNQVJLX0hfdGFyZ2V0CisjZGVmaW5lIF9YVF9DT05OU0VDTUFSS19IX3RhcmdldAorCitlbnVtIHsKKyBDT05OU0VDTUFSS19TQVZFID0gMSwKKyBDT05OU0VDTUFSS19SRVNUT1JFLAorfTsKKworc3RydWN0IHh0X2Nvbm5zZWNtYXJrX3RhcmdldF9pbmZvIHsKKyB1X2ludDhfdCBtb2RlOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X01BUksuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfTUFSSy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1OGM5N2MKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X01BUksuaApAQCAtMCwwICsxLDMwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9YVF9NQVJLX0hfdGFyZ2V0CisjZGVmaW5lIF9YVF9NQVJLX0hfdGFyZ2V0CisKK3N0cnVjdCB4dF9tYXJrX3RhcmdldF9pbmZvIHsKKyB1bnNpZ25lZCBsb25nIG1hcms7Cit9OworCitlbnVtIHsKKyBYVF9NQVJLX1NFVD0wLAorIFhUX01BUktfQU5ELAorIFhUX01BUktfT1IsCit9OworCitzdHJ1Y3QgeHRfbWFya190YXJnZXRfaW5mb192MSB7CisgdW5zaWduZWQgbG9uZyBtYXJrOworIHVfaW50OF90IG1vZGU7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfTkZRVUVVRS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9ORlFVRVVFLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYwY2FjYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfTkZRVUVVRS5oCkBAIC0wLDAgKzEsMTkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX1hUX05GUV9UQVJHRVRfSAorI2RlZmluZSBfWFRfTkZRX1RBUkdFVF9ICisKK3N0cnVjdCB4dF9ORlFfaW5mbyB7CisgdV9pbnQxNl90IHF1ZXVlbnVtOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X1NFQ01BUksuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfU0VDTUFSSy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5MWQzMmMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X1NFQ01BUksuaApAQCAtMCwwICsxLDMwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9YVF9TRUNNQVJLX0hfdGFyZ2V0CisjZGVmaW5lIF9YVF9TRUNNQVJLX0hfdGFyZ2V0CisKKyNkZWZpbmUgU0VDTUFSS19NT0RFX1NFTCAweDAxICAKKyNkZWZpbmUgU0VDTUFSS19TRUxDVFhfTUFYIDI1NgorCitzdHJ1Y3QgeHRfc2VjbWFya190YXJnZXRfc2VsaW51eF9pbmZvIHsKKyB1X2ludDMyX3Qgc2Vsc2lkOworIGNoYXIgc2VsY3R4W1NFQ01BUktfU0VMQ1RYX01BWF07Cit9OworCitzdHJ1Y3QgeHRfc2VjbWFya190YXJnZXRfaW5mbyB7CisgdV9pbnQ4X3QgbW9kZTsKKyB1bmlvbiB7Cisgc3RydWN0IHh0X3NlY21hcmtfdGFyZ2V0X3NlbGludXhfaW5mbyBzZWw7CisgfSB1OworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X2NvbW1lbnQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfY29tbWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlYTI2ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X2NvbW1lbnQuaApAQCAtMCwwICsxLDIxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9YVF9DT01NRU5UX0gKKyNkZWZpbmUgX1hUX0NPTU1FTlRfSAorCisjZGVmaW5lIFhUX01BWF9DT01NRU5UX0xFTiAyNTYKKworc3RydWN0IHh0X2NvbW1lbnRfaW5mbyB7CisgdW5zaWduZWQgY2hhciBjb21tZW50W1hUX01BWF9DT01NRU5UX0xFTl07Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfY29ubmJ5dGVzLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm5ieXRlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjYzgwZTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm5ieXRlcy5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX1hUX0NPTk5CWVRFU19ICisjZGVmaW5lIF9YVF9DT05OQllURVNfSAorCitlbnVtIHh0X2Nvbm5ieXRlc193aGF0IHsKKyBYVF9DT05OQllURVNfUEtUUywKKyBYVF9DT05OQllURVNfQllURVMsCisgWFRfQ09OTkJZVEVTX0FWR1BLVCwKK307CisKK2VudW0geHRfY29ubmJ5dGVzX2RpcmVjdGlvbiB7CisgWFRfQ09OTkJZVEVTX0RJUl9PUklHSU5BTCwKKyBYVF9DT05OQllURVNfRElSX1JFUExZLAorIFhUX0NPTk5CWVRFU19ESVJfQk9USCwKK307CisKK3N0cnVjdCB4dF9jb25uYnl0ZXNfaW5mbworeworIHN0cnVjdCB7CisgYWxpZ25lZF91NjQgZnJvbTsKKyBhbGlnbmVkX3U2NCB0bzsKKyB9IGNvdW50OworIHVfaW50OF90IHdoYXQ7CisgdV9pbnQ4X3QgZGlyZWN0aW9uOworfTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9jb25ubWFyay5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9jb25ubWFyay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyMWUwM2EKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm5tYXJrLmgKQEAgLTAsMCArMSwyMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfWFRfQ09OTk1BUktfSAorI2RlZmluZSBfWFRfQ09OTk1BUktfSAorCitzdHJ1Y3QgeHRfY29ubm1hcmtfaW5mbyB7CisgdW5zaWduZWQgbG9uZyBtYXJrLCBtYXNrOworIHVfaW50OF90IGludmVydDsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfY29ubnRyYWNrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE5YmRlMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfY29ubnRyYWNrLmgKQEAgLTAsMCArMSw2NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfWFRfQ09OTlRSQUNLX0gKKyNkZWZpbmUgX1hUX0NPTk5UUkFDS19ICisKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlX2NvbW1vbi5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisKKyNkZWZpbmUgWFRfQ09OTlRSQUNLX1NUQVRFX0JJVChjdGluZm8pICgxIDw8ICgoY3RpbmZvKSVJUF9DVF9JU19SRVBMWSsxKSkKKyNkZWZpbmUgWFRfQ09OTlRSQUNLX1NUQVRFX0lOVkFMSUQgKDEgPDwgMCkKKworI2RlZmluZSBYVF9DT05OVFJBQ0tfU1RBVEVfU05BVCAoMSA8PCAoSVBfQ1RfTlVNQkVSICsgMSkpCisjZGVmaW5lIFhUX0NPTk5UUkFDS19TVEFURV9ETkFUICgxIDw8IChJUF9DVF9OVU1CRVIgKyAyKSkKKyNkZWZpbmUgWFRfQ09OTlRSQUNLX1NUQVRFX1VOVFJBQ0tFRCAoMSA8PCAoSVBfQ1RfTlVNQkVSICsgMykpCisKKyNkZWZpbmUgWFRfQ09OTlRSQUNLX1NUQVRFIDB4MDEKKyNkZWZpbmUgWFRfQ09OTlRSQUNLX1BST1RPIDB4MDIKKyNkZWZpbmUgWFRfQ09OTlRSQUNLX09SSUdTUkMgMHgwNAorI2RlZmluZSBYVF9DT05OVFJBQ0tfT1JJR0RTVCAweDA4CisjZGVmaW5lIFhUX0NPTk5UUkFDS19SRVBMU1JDIDB4MTAKKyNkZWZpbmUgWFRfQ09OTlRSQUNLX1JFUExEU1QgMHgyMAorI2RlZmluZSBYVF9DT05OVFJBQ0tfU1RBVFVTIDB4NDAKKyNkZWZpbmUgWFRfQ09OTlRSQUNLX0VYUElSRVMgMHg4MAorCitzdHJ1Y3QgaXBfY29ubnRyYWNrX29sZF90dXBsZQoreworIHN0cnVjdCB7CisgX191MzIgaXA7CisgdW5pb24geworIF9fdTE2IGFsbDsKKyB9IHU7CisgfSBzcmM7CisKKyBzdHJ1Y3QgeworIF9fdTMyIGlwOworIHVuaW9uIHsKKyBfX3UxNiBhbGw7CisgfSB1OworCisgX191MTYgcHJvdG9udW07CisgfSBkc3Q7Cit9OworCitzdHJ1Y3QgeHRfY29ubnRyYWNrX2luZm8KK3sKKyB1bnNpZ25lZCBpbnQgc3RhdGVtYXNrLCBzdGF0dXNtYXNrOworCisgc3RydWN0IGlwX2Nvbm50cmFja19vbGRfdHVwbGUgdHVwbGVbSVBfQ1RfRElSX01BWF07Cisgc3RydWN0IGluX2FkZHIgc2lwbXNrW0lQX0NUX0RJUl9NQVhdLCBkaXBtc2tbSVBfQ1RfRElSX01BWF07CisKKyB1bnNpZ25lZCBsb25nIGV4cGlyZXNfbWluLCBleHBpcmVzX21heDsKKworIHVfaW50OF90IGZsYWdzOworCisgdV9pbnQ4X3QgaW52ZmxhZ3M7Cit9OworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X2RjY3AuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfZGNjcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMTBlNjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X2RjY3AuaApAQCAtMCwwICsxLDM0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9YVF9EQ0NQX0hfCisjZGVmaW5lIF9YVF9EQ0NQX0hfCisKKyNkZWZpbmUgWFRfRENDUF9TUkNfUE9SVFMgMHgwMQorI2RlZmluZSBYVF9EQ0NQX0RFU1RfUE9SVFMgMHgwMgorI2RlZmluZSBYVF9EQ0NQX1RZUEUgMHgwNAorI2RlZmluZSBYVF9EQ0NQX09QVElPTiAweDA4CisKKyNkZWZpbmUgWFRfRENDUF9WQUxJRF9GTEFHUyAweDBmCisKK3N0cnVjdCB4dF9kY2NwX2luZm8geworIHVfaW50MTZfdCBkcHRzWzJdOworIHVfaW50MTZfdCBzcHRzWzJdOworCisgdV9pbnQxNl90IGZsYWdzOworIHVfaW50MTZfdCBpbnZmbGFnczsKKworIHVfaW50MTZfdCB0eXBlbWFzazsKKyB1X2ludDhfdCBvcHRpb247Cit9OworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9lc3AuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfZXNwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc1YzQ3ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfZXNwLmgKQEAgLTAsMCArMSwyNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfWFRfRVNQX0gKKyNkZWZpbmUgX1hUX0VTUF9ICisKK3N0cnVjdCB4dF9lc3AKK3sKKyB1X2ludDMyX3Qgc3Bpc1syXTsKKyB1X2ludDhfdCBpbnZmbGFnczsKK307CisKKyNkZWZpbmUgWFRfRVNQX0lOVl9TUEkgMHgwMSAgCisjZGVmaW5lIFhUX0VTUF9JTlZfTUFTSyAweDAxICAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X2hlbHBlci5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9oZWxwZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmZhNDUxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9oZWxwZXIuaApAQCAtMCwwICsxLDE5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9YVF9IRUxQRVJfSAorI2RlZmluZSBfWFRfSEVMUEVSX0gKKworc3RydWN0IHh0X2hlbHBlcl9pbmZvIHsKKyBpbnQgaW52ZXJ0OworIGNoYXIgbmFtZVszMF07Cit9OworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X2xlbmd0aC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9sZW5ndGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmRiNmM3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9sZW5ndGguaApAQCAtMCwwICsxLDIwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9YVF9MRU5HVEhfSAorI2RlZmluZSBfWFRfTEVOR1RIX0gKKworc3RydWN0IHh0X2xlbmd0aF9pbmZvIHsKKyB1X2ludDE2X3QgbWluLCBtYXg7CisgdV9pbnQ4X3QgaW52ZXJ0OworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X2xpbWl0LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X2xpbWl0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjlmYjM3ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfbGltaXQuaApAQCAtMCwwICsxLDI3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9YVF9SQVRFX0gKKyNkZWZpbmUgX1hUX1JBVEVfSAorCisjZGVmaW5lIFhUX0xJTUlUX1NDQUxFIDEwMDAwCisKK3N0cnVjdCB4dF9yYXRlaW5mbyB7CisgdV9pbnQzMl90IGF2ZzsKKyB1X2ludDMyX3QgYnVyc3Q7CisKKyB1bnNpZ25lZCBsb25nIHByZXY7CisgdV9pbnQzMl90IGNyZWRpdDsKKyB1X2ludDMyX3QgY3JlZGl0X2NhcCwgY29zdDsKKworIHN0cnVjdCB4dF9yYXRlaW5mbyAqbWFzdGVyOworfTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9tYWMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfbWFjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ3M2FhYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfbWFjLmgKQEAgLTAsMCArMSwxOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfWFRfTUFDX0gKKyNkZWZpbmUgX1hUX01BQ19ICisKK3N0cnVjdCB4dF9tYWNfaW5mbyB7CisgdW5zaWduZWQgY2hhciBzcmNhZGRyW0VUSF9BTEVOXTsKKyBpbnQgaW52ZXJ0OworfTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9tYXJrLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X21hcmsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTY5OWRmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9tYXJrLmgKQEAgLTAsMCArMSwyMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfWFRfTUFSS19ICisjZGVmaW5lIF9YVF9NQVJLX0gKKworc3RydWN0IHh0X21hcmtfaW5mbyB7CisgdW5zaWduZWQgbG9uZyBtYXJrLCBtYXNrOworIHVfaW50OF90IGludmVydDsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9tdWx0aXBvcnQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfbXVsdGlwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE3OTc5YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfbXVsdGlwb3J0LmgKQEAgLTAsMCArMSw0MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfWFRfTVVMVElQT1JUX0gKKyNkZWZpbmUgX1hUX01VTFRJUE9SVF9ICisKK2VudW0geHRfbXVsdGlwb3J0X2ZsYWdzCit7CisgWFRfTVVMVElQT1JUX1NPVVJDRSwKKyBYVF9NVUxUSVBPUlRfREVTVElOQVRJT04sCisgWFRfTVVMVElQT1JUX0VJVEhFUgorfTsKKworI2RlZmluZSBYVF9NVUxUSV9QT1JUUyAxNQorCitzdHJ1Y3QgeHRfbXVsdGlwb3J0Cit7CisgdV9pbnQ4X3QgZmxhZ3M7CisgdV9pbnQ4X3QgY291bnQ7CisgdV9pbnQxNl90IHBvcnRzW1hUX01VTFRJX1BPUlRTXTsKK307CisKK3N0cnVjdCB4dF9tdWx0aXBvcnRfdjEKK3sKKyB1X2ludDhfdCBmbGFnczsKKyB1X2ludDhfdCBjb3VudDsKKyB1X2ludDE2X3QgcG9ydHNbWFRfTVVMVElfUE9SVFNdOworIHVfaW50OF90IHBmbGFnc1tYVF9NVUxUSV9QT1JUU107CisgdV9pbnQ4X3QgaW52ZXJ0OworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X3BoeXNkZXYuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfcGh5c2Rldi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwY2EwMzIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X3BoeXNkZXYuaApAQCAtMCwwICsxLDMxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9YVF9QSFlTREVWX0gKKyNkZWZpbmUgX1hUX1BIWVNERVZfSAorCisjZGVmaW5lIFhUX1BIWVNERVZfT1BfSU4gMHgwMQorI2RlZmluZSBYVF9QSFlTREVWX09QX09VVCAweDAyCisjZGVmaW5lIFhUX1BIWVNERVZfT1BfQlJJREdFRCAweDA0CisjZGVmaW5lIFhUX1BIWVNERVZfT1BfSVNJTiAweDA4CisjZGVmaW5lIFhUX1BIWVNERVZfT1BfSVNPVVQgMHgxMAorI2RlZmluZSBYVF9QSFlTREVWX09QX01BU0sgKDB4MjAgLSAxKQorCitzdHJ1Y3QgeHRfcGh5c2Rldl9pbmZvIHsKKyBjaGFyIHBoeXNpbmRldltJRk5BTVNJWl07CisgY2hhciBpbl9tYXNrW0lGTkFNU0laXTsKKyBjaGFyIHBoeXNvdXRkZXZbSUZOQU1TSVpdOworIGNoYXIgb3V0X21hc2tbSUZOQU1TSVpdOworIHVfaW50OF90IGludmVydDsKKyB1X2ludDhfdCBiaXRtYXNrOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X3BrdHR5cGUuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfcGt0dHlwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNTI3YjgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X3BrdHR5cGUuaApAQCAtMCwwICsxLDE5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9YVF9QS1RUWVBFX0gKKyNkZWZpbmUgX1hUX1BLVFRZUEVfSAorCitzdHJ1Y3QgeHRfcGt0dHlwZV9pbmZvIHsKKyBpbnQgcGt0dHlwZTsKKyBpbnQgaW52ZXJ0OworfTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9xdW90YS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9xdW90YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzNDc1MmQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X3F1b3RhLmgKQEAgLTAsMCArMSwyNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfWFRfUVVPVEFfSAorI2RlZmluZSBfWFRfUVVPVEFfSAorCitlbnVtIHh0X3F1b3RhX2ZsYWdzIHsKKyBYVF9RVU9UQV9JTlZFUlQgPSAweDEsCit9OworI2RlZmluZSBYVF9RVU9UQV9NQVNLIDB4MQorCitzdHJ1Y3QgeHRfcXVvdGFfaW5mbyB7CisgdV9pbnQzMl90IGZsYWdzOworIHVfaW50MzJfdCBwYWQ7CisgYWxpZ25lZF91NjQgcXVvdGE7Cisgc3RydWN0IHh0X3F1b3RhX2luZm8gKm1hc3RlcjsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9yZWFsbS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9yZWFsbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMmEzY2YKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X3JlYWxtLmgKQEAgLTAsMCArMSwyMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfWFRfUkVBTE1fSAorI2RlZmluZSBfWFRfUkVBTE1fSAorCitzdHJ1Y3QgeHRfcmVhbG1faW5mbyB7CisgdV9pbnQzMl90IGlkOworIHVfaW50MzJfdCBtYXNrOworIHVfaW50OF90IGludmVydDsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9zY3RwLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X3NjdHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzljM2I2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9zY3RwLmgKQEAgLTAsMCArMSw2OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfWFRfU0NUUF9IXworI2RlZmluZSBfWFRfU0NUUF9IXworCisjZGVmaW5lIFhUX1NDVFBfU1JDX1BPUlRTIDB4MDEKKyNkZWZpbmUgWFRfU0NUUF9ERVNUX1BPUlRTIDB4MDIKKyNkZWZpbmUgWFRfU0NUUF9DSFVOS19UWVBFUyAweDA0CisKKyNkZWZpbmUgWFRfU0NUUF9WQUxJRF9GTEFHUyAweDA3CisKKyNkZWZpbmUgRUxFTUNPVU5UKHgpIChzaXplb2YoeCkvc2l6ZW9mKHhbMF0pKQorCitzdHJ1Y3QgeHRfc2N0cF9mbGFnX2luZm8geworIHVfaW50OF90IGNodW5rdHlwZTsKKyB1X2ludDhfdCBmbGFnOworIHVfaW50OF90IGZsYWdfbWFzazsKK307CisKKyNkZWZpbmUgWFRfTlVNX1NDVFBfRkxBR1MgNAorCitzdHJ1Y3QgeHRfc2N0cF9pbmZvIHsKKyB1X2ludDE2X3QgZHB0c1syXTsKKyB1X2ludDE2X3Qgc3B0c1syXTsKKworIHVfaW50MzJfdCBjaHVua21hcFsyNTYgLyBzaXplb2YgKHVfaW50MzJfdCldOworCisjZGVmaW5lIFNDVFBfQ0hVTktfTUFUQ0hfQU5ZIDB4MDEgIAorI2RlZmluZSBTQ1RQX0NIVU5LX01BVENIX0FMTCAweDAyICAKKyNkZWZpbmUgU0NUUF9DSFVOS19NQVRDSF9PTkxZIDB4MDQgIAorCisgdV9pbnQzMl90IGNodW5rX21hdGNoX3R5cGU7Cisgc3RydWN0IHh0X3NjdHBfZmxhZ19pbmZvIGZsYWdfaW5mb1tYVF9OVU1fU0NUUF9GTEFHU107CisgaW50IGZsYWdfY291bnQ7CisKKyB1X2ludDMyX3QgZmxhZ3M7CisgdV9pbnQzMl90IGludmZsYWdzOworfTsKKworI2RlZmluZSBieXRlcyh0eXBlKSAoc2l6ZW9mKHR5cGUpICogOCkKKworI2RlZmluZSBTQ1RQX0NIVU5LTUFQX1NFVChjaHVua21hcCwgdHlwZSkgICBkbyB7ICAgY2h1bmttYXBbdHlwZSAvIGJ5dGVzKHVfaW50MzJfdCldIHw9ICAgMSA8PCAodHlwZSAlIGJ5dGVzKHVfaW50MzJfdCkpOyAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgU0NUUF9DSFVOS01BUF9DTEVBUihjaHVua21hcCwgdHlwZSkgICBkbyB7ICAgY2h1bmttYXBbdHlwZSAvIGJ5dGVzKHVfaW50MzJfdCldICY9ICAgfigxIDw8ICh0eXBlICUgYnl0ZXModV9pbnQzMl90KSkpOyAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgU0NUUF9DSFVOS01BUF9JU19TRVQoY2h1bmttYXAsIHR5cGUpICAoeyAgIChjaHVua21hcFt0eXBlIC8gYnl0ZXMgKHVfaW50MzJfdCldICYgICAoMSA8PCAodHlwZSAlIGJ5dGVzICh1X2ludDMyX3QpKSkpID8gMTogMDsgIH0pCisKKyNkZWZpbmUgU0NUUF9DSFVOS01BUF9SRVNFVChjaHVua21hcCkgICBkbyB7ICAgaW50IGk7ICAgZm9yIChpID0gMDsgaSA8IEVMRU1DT1VOVChjaHVua21hcCk7IGkrKykgICBjaHVua21hcFtpXSA9IDA7ICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBTQ1RQX0NIVU5LTUFQX1NFVF9BTEwoY2h1bmttYXApICAgZG8geyAgIGludCBpOyAgIGZvciAoaSA9IDA7IGkgPCBFTEVNQ09VTlQoY2h1bmttYXApOyBpKyspICAgY2h1bmttYXBbaV0gPSB+MDsgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIFNDVFBfQ0hVTktNQVBfQ09QWShkZXN0bWFwLCBzcmNtYXApICAgZG8geyAgIGludCBpOyAgIGZvciAoaSA9IDA7IGkgPCBFTEVNQ09VTlQoY2h1bmttYXApOyBpKyspICAgZGVzdG1hcFtpXSA9IHNyY21hcFtpXTsgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIFNDVFBfQ0hVTktNQVBfSVNfQ0xFQVIoY2h1bmttYXApICAoeyAgIGludCBpOyAgIGludCBmbGFnID0gMTsgICBmb3IgKGkgPSAwOyBpIDwgRUxFTUNPVU5UKGNodW5rbWFwKTsgaSsrKSB7ICAgaWYgKGNodW5rbWFwW2ldKSB7ICAgZmxhZyA9IDA7ICAgYnJlYWs7ICAgfSAgIH0gICBmbGFnOyAgfSkKKworI2RlZmluZSBTQ1RQX0NIVU5LTUFQX0lTX0FMTF9TRVQoY2h1bmttYXApICAoeyAgIGludCBpOyAgIGludCBmbGFnID0gMTsgICBmb3IgKGkgPSAwOyBpIDwgRUxFTUNPVU5UKGNodW5rbWFwKTsgaSsrKSB7ICAgaWYgKGNodW5rbWFwW2ldICE9IH4wKSB7ICAgZmxhZyA9IDA7ICAgYnJlYWs7ICAgfSAgIH0gICBmbGFnOyAgfSkKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfc3RhdGUuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfc3RhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzU0Nzc2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9zdGF0ZS5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX1hUX1NUQVRFX0gKKyNkZWZpbmUgX1hUX1NUQVRFX0gKKworI2RlZmluZSBYVF9TVEFURV9CSVQoY3RpbmZvKSAoMSA8PCAoKGN0aW5mbyklSVBfQ1RfSVNfUkVQTFkrMSkpCisjZGVmaW5lIFhUX1NUQVRFX0lOVkFMSUQgKDEgPDwgMCkKKworI2RlZmluZSBYVF9TVEFURV9VTlRSQUNLRUQgKDEgPDwgKElQX0NUX05VTUJFUiArIDEpKQorCitzdHJ1Y3QgeHRfc3RhdGVfaW5mbworeworIHVuc2lnbmVkIGludCBzdGF0ZW1hc2s7Cit9OworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X3N0YXRpc3RpYy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9zdGF0aXN0aWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTliMGExCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9zdGF0aXN0aWMuaApAQCAtMCwwICsxLDQzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9YVF9TVEFUSVNUSUNfSAorI2RlZmluZSBfWFRfU1RBVElTVElDX0gKKworZW51bSB4dF9zdGF0aXN0aWNfbW9kZSB7CisgWFRfU1RBVElTVElDX01PREVfUkFORE9NLAorIFhUX1NUQVRJU1RJQ19NT0RFX05USCwKKyBfX1hUX1NUQVRJU1RJQ19NT0RFX01BWAorfTsKKyNkZWZpbmUgWFRfU1RBVElTVElDX01PREVfTUFYIChfX1hUX1NUQVRJU1RJQ19NT0RFX01BWCAtIDEpCisKK2VudW0geHRfc3RhdGlzdGljX2ZsYWdzIHsKKyBYVF9TVEFUSVNUSUNfSU5WRVJUID0gMHgxLAorfTsKKyNkZWZpbmUgWFRfU1RBVElTVElDX01BU0sgMHgxCisKK3N0cnVjdCB4dF9zdGF0aXN0aWNfaW5mbyB7CisgdV9pbnQxNl90IG1vZGU7CisgdV9pbnQxNl90IGZsYWdzOworIHVuaW9uIHsKKyBzdHJ1Y3QgeworIHVfaW50MzJfdCBwcm9iYWJpbGl0eTsKKyB9IHJhbmRvbTsKKyBzdHJ1Y3QgeworIHVfaW50MzJfdCBldmVyeTsKKyB1X2ludDMyX3QgcGFja2V0OworIHVfaW50MzJfdCBjb3VudDsKKyB9IG50aDsKKyB9IHU7Cisgc3RydWN0IHh0X3N0YXRpc3RpY19pbmZvICptYXN0ZXIgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X3N0cmluZy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9zdHJpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDEwMThmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9zdHJpbmcuaApAQCAtMCwwICsxLDI5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9YVF9TVFJJTkdfSAorI2RlZmluZSBfWFRfU1RSSU5HX0gKKworI2RlZmluZSBYVF9TVFJJTkdfTUFYX1BBVFRFUk5fU0laRSAxMjgKKyNkZWZpbmUgWFRfU1RSSU5HX01BWF9BTEdPX05BTUVfU0laRSAxNgorCitzdHJ1Y3QgeHRfc3RyaW5nX2luZm8KK3sKKyB1X2ludDE2X3QgZnJvbV9vZmZzZXQ7CisgdV9pbnQxNl90IHRvX29mZnNldDsKKyBjaGFyIGFsZ29bWFRfU1RSSU5HX01BWF9BTEdPX05BTUVfU0laRV07CisgY2hhciBwYXR0ZXJuW1hUX1NUUklOR19NQVhfUEFUVEVSTl9TSVpFXTsKKyB1X2ludDhfdCBwYXRsZW47CisgdV9pbnQ4X3QgaW52ZXJ0OworIHN0cnVjdCB0c19jb25maWcgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpICpjb25maWc7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfdGNwbXNzLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X3RjcG1zcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzZGUwZWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X3RjcG1zcy5oCkBAIC0wLDAgKzEsMjAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX1hUX1RDUE1TU19NQVRDSF9ICisjZGVmaW5lIF9YVF9UQ1BNU1NfTUFUQ0hfSAorCitzdHJ1Y3QgeHRfdGNwbXNzX21hdGNoX2luZm8geworIHVfaW50MTZfdCBtc3NfbWluLCBtc3NfbWF4OworIHVfaW50OF90IGludmVydDsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF90Y3B1ZHAuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfdGNwdWRwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc2ZmZmYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfdGNwdWRwLmgKQEAgLTAsMCArMSw0MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfWFRfVENQVURQX0gKKyNkZWZpbmUgX1hUX1RDUFVEUF9ICisKK3N0cnVjdCB4dF90Y3AKK3sKKyB1X2ludDE2X3Qgc3B0c1syXTsKKyB1X2ludDE2X3QgZHB0c1syXTsKKyB1X2ludDhfdCBvcHRpb247CisgdV9pbnQ4X3QgZmxnX21hc2s7CisgdV9pbnQ4X3QgZmxnX2NtcDsKKyB1X2ludDhfdCBpbnZmbGFnczsKK307CisKKyNkZWZpbmUgWFRfVENQX0lOVl9TUkNQVCAweDAxICAKKyNkZWZpbmUgWFRfVENQX0lOVl9EU1RQVCAweDAyICAKKyNkZWZpbmUgWFRfVENQX0lOVl9GTEFHUyAweDA0ICAKKyNkZWZpbmUgWFRfVENQX0lOVl9PUFRJT04gMHgwOCAgCisjZGVmaW5lIFhUX1RDUF9JTlZfTUFTSyAweDBGICAKKworc3RydWN0IHh0X3VkcAoreworIHVfaW50MTZfdCBzcHRzWzJdOworIHVfaW50MTZfdCBkcHRzWzJdOworIHVfaW50OF90IGludmZsYWdzOworfTsKKworI2RlZmluZSBYVF9VRFBfSU5WX1NSQ1BUIDB4MDEgIAorI2RlZmluZSBYVF9VRFBfSU5WX0RTVFBUIDB4MDIgIAorI2RlZmluZSBYVF9VRFBfSU5WX01BU0sgMHgwMyAgCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9hcnAuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfYXJwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg1NjlkYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfYXJwLmgKQEAgLTAsMCArMSwyNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0xJTlVYX0FSUF9ORVRGSUxURVJfSAorI2RlZmluZSBfX0xJTlVYX0FSUF9ORVRGSUxURVJfSAorCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyLmg+CisKKyNkZWZpbmUgTkZfQVJQIDAKKworI2RlZmluZSBORl9BUlBfSU4gMAorI2RlZmluZSBORl9BUlBfT1VUIDEKKyNkZWZpbmUgTkZfQVJQX0ZPUldBUkQgMgorI2RlZmluZSBORl9BUlBfTlVNSE9PS1MgMworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfYXJwL2FycF90YWJsZXMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfYXJwL2FycF90YWJsZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjVhMzQ3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9hcnAvYXJwX3RhYmxlcy5oCkBAIC0wLDAgKzEsMTU5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BUlBUQUJMRVNfSAorI2RlZmluZSBfQVJQVEFCTEVTX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2FycC5oPgorCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmg+CisKKyNkZWZpbmUgQVJQVF9GVU5DVElPTl9NQVhOQU1FTEVOIFhUX0ZVTkNUSU9OX01BWE5BTUVMRU4KKyNkZWZpbmUgQVJQVF9UQUJMRV9NQVhOQU1FTEVOIFhUX1RBQkxFX01BWE5BTUVMRU4KKyNkZWZpbmUgYXJwdF90YXJnZXQgeHRfdGFyZ2V0CisjZGVmaW5lIGFycHRfdGFibGUgeHRfdGFibGUKKworI2RlZmluZSBBUlBUX0RFVl9BRERSX0xFTl9NQVggMTYKKworc3RydWN0IGFycHRfZGV2YWRkcl9pbmZvIHsKKyBjaGFyIGFkZHJbQVJQVF9ERVZfQUREUl9MRU5fTUFYXTsKKyBjaGFyIG1hc2tbQVJQVF9ERVZfQUREUl9MRU5fTUFYXTsKK307CisKK3N0cnVjdCBhcnB0X2FycCB7CisKKyBzdHJ1Y3QgaW5fYWRkciBzcmMsIHRndDsKKworIHN0cnVjdCBpbl9hZGRyIHNtc2ssIHRtc2s7CisKKyB1X2ludDhfdCBhcmhsbiwgYXJobG5fbWFzazsKKyBzdHJ1Y3QgYXJwdF9kZXZhZGRyX2luZm8gc3JjX2RldmFkZHI7Cisgc3RydWN0IGFycHRfZGV2YWRkcl9pbmZvIHRndF9kZXZhZGRyOworCisgdV9pbnQxNl90IGFycG9wLCBhcnBvcF9tYXNrOworCisgdV9pbnQxNl90IGFyaHJkLCBhcmhyZF9tYXNrOworIHVfaW50MTZfdCBhcnBybywgYXJwcm9fbWFzazsKKworIGNoYXIgaW5pZmFjZVtJRk5BTVNJWl0sIG91dGlmYWNlW0lGTkFNU0laXTsKKyB1bnNpZ25lZCBjaGFyIGluaWZhY2VfbWFza1tJRk5BTVNJWl0sIG91dGlmYWNlX21hc2tbSUZOQU1TSVpdOworCisgdV9pbnQ4X3QgZmxhZ3M7CisKKyB1X2ludDE2X3QgaW52ZmxhZ3M7Cit9OworCisjZGVmaW5lIGFycHRfZW50cnlfdGFyZ2V0IHh0X2VudHJ5X3RhcmdldAorI2RlZmluZSBhcnB0X3N0YW5kYXJkX3RhcmdldCB4dF9zdGFuZGFyZF90YXJnZXQKKworI2RlZmluZSBBUlBUX0ZfTUFTSyAweDAwICAKKworI2RlZmluZSBBUlBUX0lOVl9WSUFfSU4gMHgwMDAxICAKKyNkZWZpbmUgQVJQVF9JTlZfVklBX09VVCAweDAwMDIgIAorI2RlZmluZSBBUlBUX0lOVl9TUkNJUCAweDAwMDQgIAorI2RlZmluZSBBUlBUX0lOVl9UR1RJUCAweDAwMDggIAorI2RlZmluZSBBUlBUX0lOVl9TUkNERVZBRERSIDB4MDAxMCAgCisjZGVmaW5lIEFSUFRfSU5WX1RHVERFVkFERFIgMHgwMDIwICAKKyNkZWZpbmUgQVJQVF9JTlZfQVJQT1AgMHgwMDQwICAKKyNkZWZpbmUgQVJQVF9JTlZfQVJQSFJEIDB4MDA4MCAgCisjZGVmaW5lIEFSUFRfSU5WX0FSUFBSTyAweDAxMDAgIAorI2RlZmluZSBBUlBUX0lOVl9BUlBITE4gMHgwMjAwICAKKyNkZWZpbmUgQVJQVF9JTlZfTUFTSyAweDAzRkYgIAorCitzdHJ1Y3QgYXJwdF9lbnRyeQoreworIHN0cnVjdCBhcnB0X2FycCBhcnA7CisKKyB1X2ludDE2X3QgdGFyZ2V0X29mZnNldDsKKworIHVfaW50MTZfdCBuZXh0X29mZnNldDsKKworIHVuc2lnbmVkIGludCBjb21lZnJvbTsKKworIHN0cnVjdCB4dF9jb3VudGVycyBjb3VudGVyczsKKworIHVuc2lnbmVkIGNoYXIgZWxlbXNbMF07Cit9OworCisjZGVmaW5lIEFSUFRfQ1RMX09GRlNFVCAzMgorI2RlZmluZSBBUlBUX0JBU0VfQ1RMIChYVF9CQVNFX0NUTCtBUlBUX0NUTF9PRkZTRVQpCisKKyNkZWZpbmUgQVJQVF9TT19TRVRfUkVQTEFDRSAoWFRfU09fU0VUX1JFUExBQ0UrQVJQVF9DVExfT0ZGU0VUKQorI2RlZmluZSBBUlBUX1NPX1NFVF9BRERfQ09VTlRFUlMgKFhUX1NPX1NFVF9BRERfQ09VTlRFUlMrQVJQVF9DVExfT0ZGU0VUKQorI2RlZmluZSBBUlBUX1NPX1NFVF9NQVggKFhUX1NPX1NFVF9NQVgrQVJQVF9DVExfT0ZGU0VUKQorCisjZGVmaW5lIEFSUFRfU09fR0VUX0lORk8gKFhUX1NPX0dFVF9JTkZPK0FSUFRfQ1RMX09GRlNFVCkKKyNkZWZpbmUgQVJQVF9TT19HRVRfRU5UUklFUyAoWFRfU09fR0VUX0VOVFJJRVMrQVJQVF9DVExfT0ZGU0VUKQorCisjZGVmaW5lIEFSUFRfU09fR0VUX1JFVklTSU9OX1RBUkdFVCAoWFRfU09fR0VUX1JFVklTSU9OX1RBUkdFVCtBUlBUX0NUTF9PRkZTRVQpCisjZGVmaW5lIEFSUFRfU09fR0VUX01BWCAoWFRfU09fR0VUX1JFVklTSU9OX1RBUkdFVCtBUlBUX0NUTF9PRkZTRVQpCisKKyNkZWZpbmUgQVJQVF9DT05USU5VRSBYVF9DT05USU5VRQorCisjZGVmaW5lIEFSUFRfUkVUVVJOIFhUX1JFVFVSTgorCitzdHJ1Y3QgYXJwdF9nZXRpbmZvCit7CisKKyBjaGFyIG5hbWVbQVJQVF9UQUJMRV9NQVhOQU1FTEVOXTsKKworIHVuc2lnbmVkIGludCB2YWxpZF9ob29rczsKKworIHVuc2lnbmVkIGludCBob29rX2VudHJ5W05GX0FSUF9OVU1IT09LU107CisKKyB1bnNpZ25lZCBpbnQgdW5kZXJmbG93W05GX0FSUF9OVU1IT09LU107CisKKyB1bnNpZ25lZCBpbnQgbnVtX2VudHJpZXM7CisKKyB1bnNpZ25lZCBpbnQgc2l6ZTsKK307CisKK3N0cnVjdCBhcnB0X3JlcGxhY2UKK3sKKworIGNoYXIgbmFtZVtBUlBUX1RBQkxFX01BWE5BTUVMRU5dOworCisgdW5zaWduZWQgaW50IHZhbGlkX2hvb2tzOworCisgdW5zaWduZWQgaW50IG51bV9lbnRyaWVzOworCisgdW5zaWduZWQgaW50IHNpemU7CisKKyB1bnNpZ25lZCBpbnQgaG9va19lbnRyeVtORl9BUlBfTlVNSE9PS1NdOworCisgdW5zaWduZWQgaW50IHVuZGVyZmxvd1tORl9BUlBfTlVNSE9PS1NdOworCisgdW5zaWduZWQgaW50IG51bV9jb3VudGVyczsKKworIHN0cnVjdCB4dF9jb3VudGVycyBfX3VzZXIgKmNvdW50ZXJzOworCisgc3RydWN0IGFycHRfZW50cnkgZW50cmllc1swXTsKK307CisKKyNkZWZpbmUgYXJwdF9jb3VudGVyc19pbmZvIHh0X2NvdW50ZXJzX2luZm8KKworc3RydWN0IGFycHRfZ2V0X2VudHJpZXMKK3sKKworIGNoYXIgbmFtZVtBUlBUX1RBQkxFX01BWE5BTUVMRU5dOworCisgdW5zaWduZWQgaW50IHNpemU7CisKKyBzdHJ1Y3QgYXJwdF9lbnRyeSBlbnRyeXRhYmxlWzBdOworfTsKKworI2RlZmluZSBBUlBUX1NUQU5EQVJEX1RBUkdFVCBYVF9TVEFOREFSRF9UQVJHRVQKKworI2RlZmluZSBBUlBUX0VSUk9SX1RBUkdFVCBYVF9FUlJPUl9UQVJHRVQKKworI2RlZmluZSBBUlBUX0VOVFJZX0lURVJBVEUoZW50cmllcywgc2l6ZSwgZm4sIGFyZ3MuLi4pICAoeyAgIHVuc2lnbmVkIGludCBfX2k7ICAgaW50IF9fcmV0ID0gMDsgICBzdHJ1Y3QgYXJwdF9lbnRyeSAqX19lbnRyeTsgICAgIGZvciAoX19pID0gMDsgX19pIDwgKHNpemUpOyBfX2kgKz0gX19lbnRyeS0+bmV4dF9vZmZzZXQpIHsgICBfX2VudHJ5ID0gKHZvaWQgKikoZW50cmllcykgKyBfX2k7ICAgICBfX3JldCA9IGZuKF9fZW50cnkgLCAjIyBhcmdzKTsgICBpZiAoX19yZXQgIT0gMCkgICBicmVhazsgICB9ICAgX19yZXQ7ICB9KQorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmNjYTU1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaApAQCAtMCwwICsxLDMwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTElOVVhfQlJJREdFX05FVEZJTFRFUl9ICisjZGVmaW5lIF9fTElOVVhfQlJJREdFX05FVEZJTFRFUl9ICisKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KKworI2RlZmluZSBORl9CUl9QUkVfUk9VVElORyAwCisKKyNkZWZpbmUgTkZfQlJfTE9DQUxfSU4gMQorCisjZGVmaW5lIE5GX0JSX0ZPUldBUkQgMgorCisjZGVmaW5lIE5GX0JSX0xPQ0FMX09VVCAzCisKKyNkZWZpbmUgTkZfQlJfUE9TVF9ST1VUSU5HIDQKKworI2RlZmluZSBORl9CUl9CUk9VVElORyA1CisjZGVmaW5lIE5GX0JSX05VTUhPT0tTIDYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ZmQ0NTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQuaApAQCAtMCwwICsxLDczIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTElOVVhfSVBfTkVURklMVEVSX0gKKyNkZWZpbmUgX19MSU5VWF9JUF9ORVRGSUxURVJfSAorCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyLmg+CisKKyNkZWZpbmUgTkZDX0lQX1NSQyAweDAwMDEKKworI2RlZmluZSBORkNfSVBfRFNUIDB4MDAwMgorCisjZGVmaW5lIE5GQ19JUF9JRl9JTiAweDAwMDQKKworI2RlZmluZSBORkNfSVBfSUZfT1VUIDB4MDAwOAorCisjZGVmaW5lIE5GQ19JUF9UT1MgMHgwMDEwCisKKyNkZWZpbmUgTkZDX0lQX1BST1RPIDB4MDAyMAorCisjZGVmaW5lIE5GQ19JUF9PUFRJT05TIDB4MDA0MAorCisjZGVmaW5lIE5GQ19JUF9GUkFHIDB4MDA4MAorCisjZGVmaW5lIE5GQ19JUF9UQ1BGTEFHUyAweDAxMDAKKworI2RlZmluZSBORkNfSVBfU1JDX1BUIDB4MDIwMAorCisjZGVmaW5lIE5GQ19JUF9EU1RfUFQgMHgwNDAwCisKKyNkZWZpbmUgTkZDX0lQX1BST1RPX1VOS05PV04gMHgyMDAwCisKKyNkZWZpbmUgTkZfSVBfUFJFX1JPVVRJTkcgMAorCisjZGVmaW5lIE5GX0lQX0xPQ0FMX0lOIDEKKworI2RlZmluZSBORl9JUF9GT1JXQVJEIDIKKworI2RlZmluZSBORl9JUF9MT0NBTF9PVVQgMworCisjZGVmaW5lIE5GX0lQX1BPU1RfUk9VVElORyA0CisjZGVmaW5lIE5GX0lQX05VTUhPT0tTIDUKKworZW51bSBuZl9pcF9ob29rX3ByaW9yaXRpZXMgeworIE5GX0lQX1BSSV9GSVJTVCA9IElOVF9NSU4sCisgTkZfSVBfUFJJX0NPTk5UUkFDS19ERUZSQUcgPSAtNDAwLAorIE5GX0lQX1BSSV9SQVcgPSAtMzAwLAorIE5GX0lQX1BSSV9TRUxJTlVYX0ZJUlNUID0gLTIyNSwKKyBORl9JUF9QUklfQ09OTlRSQUNLID0gLTIwMCwKKyBORl9JUF9QUklfQlJJREdFX1NBQk9UQUdFX0ZPUldBUkQgPSAtMTc1LAorIE5GX0lQX1BSSV9NQU5HTEUgPSAtMTUwLAorIE5GX0lQX1BSSV9OQVRfRFNUID0gLTEwMCwKKyBORl9JUF9QUklfQlJJREdFX1NBQk9UQUdFX0xPQ0FMX09VVCA9IC01MCwKKyBORl9JUF9QUklfRklMVEVSID0gMCwKKyBORl9JUF9QUklfTkFUX1NSQyA9IDEwMCwKKyBORl9JUF9QUklfU0VMSU5VWF9MQVNUID0gMjI1LAorIE5GX0lQX1BSSV9DT05OVFJBQ0tfSEVMUEVSID0gSU5UX01BWCAtIDIsCisgTkZfSVBfUFJJX05BVF9TRVFfQURKVVNUID0gSU5UX01BWCAtIDEsCisgTkZfSVBfUFJJX0NPTk5UUkFDS19DT05GSVJNID0gSU5UX01BWCwKKyBORl9JUF9QUklfTEFTVCA9IElOVF9NQVgsCit9OworCisjZGVmaW5lIFNPX09SSUdJTkFMX0RTVCA4MAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2suaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjU1YTYxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFjay5oCkBAIC0wLDAgKzEsMTcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0lQX0NPTk5UUkFDS19ICisjZGVmaW5lIF9JUF9DT05OVFJBQ0tfSAorCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb21tb24uaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX3R1cGxlLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX3R1cGxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM5NmJhZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfdHVwbGUuaApAQCAtMCwwICsxLDgxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9JUF9DT05OVFJBQ0tfVFVQTEVfSAorI2RlZmluZSBfSVBfQ09OTlRSQUNLX1RVUExFX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZV9jb21tb24uaD4KKwordW5pb24gaXBfY29ubnRyYWNrX21hbmlwX3Byb3RvCit7CisKKyB1X2ludDE2X3QgYWxsOworCisgc3RydWN0IHsKKyBfX2JlMTYgcG9ydDsKKyB9IHRjcDsKKyBzdHJ1Y3QgeworIHVfaW50MTZfdCBwb3J0OworIH0gdWRwOworIHN0cnVjdCB7CisgdV9pbnQxNl90IGlkOworIH0gaWNtcDsKKyBzdHJ1Y3QgeworIHVfaW50MTZfdCBwb3J0OworIH0gc2N0cDsKKyBzdHJ1Y3QgeworIF9fYmUxNiBrZXk7CisgfSBncmU7Cit9OworCitzdHJ1Y3QgaXBfY29ubnRyYWNrX21hbmlwCit7CisgdV9pbnQzMl90IGlwOworIHVuaW9uIGlwX2Nvbm50cmFja19tYW5pcF9wcm90byB1OworfTsKKworc3RydWN0IGlwX2Nvbm50cmFja190dXBsZQoreworIHN0cnVjdCBpcF9jb25udHJhY2tfbWFuaXAgc3JjOworCisgc3RydWN0IHsKKyB1X2ludDMyX3QgaXA7CisgdW5pb24geworCisgdV9pbnQxNl90IGFsbDsKKworIHN0cnVjdCB7CisgdV9pbnQxNl90IHBvcnQ7CisgfSB0Y3A7Cisgc3RydWN0IHsKKyB1X2ludDE2X3QgcG9ydDsKKyB9IHVkcDsKKyBzdHJ1Y3QgeworIHVfaW50OF90IHR5cGUsIGNvZGU7CisgfSBpY21wOworIHN0cnVjdCB7CisgdV9pbnQxNl90IHBvcnQ7CisgfSBzY3RwOworIHN0cnVjdCB7CisgX19iZTE2IGtleTsKKyB9IGdyZTsKKyB9IHU7CisKKyB1X2ludDhfdCBwcm90b251bTsKKworIHVfaW50OF90IGRpcjsKKyB9IGRzdDsKK307CisKKyNkZWZpbmUgSVBfQ1RfVFVQTEVfVV9CTEFOSyh0dXBsZSkgICBkbyB7ICAgKHR1cGxlKS0+c3JjLnUuYWxsID0gMDsgICAodHVwbGUpLT5kc3QudS5hbGwgPSAwOyAgIH0gd2hpbGUgKDApCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX25hdC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX25hdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkYjlkYTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfbmF0LmgKQEAgLTAsMCArMSw1NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfSVBfTkFUX0gKKyNkZWZpbmUgX0lQX05BVF9ICisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfdHVwbGUuaD4KKworI2RlZmluZSBJUF9OQVRfTUFQUElOR19UWVBFX01BWF9OQU1FTEVOIDE2CisKK2VudW0gaXBfbmF0X21hbmlwX3R5cGUKK3sKKyBJUF9OQVRfTUFOSVBfU1JDLAorIElQX05BVF9NQU5JUF9EU1QKK307CisKKyNkZWZpbmUgSE9PSzJNQU5JUChob29rbnVtKSAoKGhvb2tudW0pICE9IE5GX0lQX1BPU1RfUk9VVElORyAmJiAoaG9va251bSkgIT0gTkZfSVBfTE9DQUxfSU4pCisKKyNkZWZpbmUgSVBfTkFUX1JBTkdFX01BUF9JUFMgMQorI2RlZmluZSBJUF9OQVRfUkFOR0VfUFJPVE9fU1BFQ0lGSUVEIDIKKworc3RydWN0IGlwX25hdF9zZXEgeworCisgdV9pbnQzMl90IGNvcnJlY3Rpb25fcG9zOworCisgaW50MTZfdCBvZmZzZXRfYmVmb3JlLCBvZmZzZXRfYWZ0ZXI7Cit9OworCitzdHJ1Y3QgaXBfbmF0X3JhbmdlCit7CisKKyB1bnNpZ25lZCBpbnQgZmxhZ3M7CisKKyB1X2ludDMyX3QgbWluX2lwLCBtYXhfaXA7CisKKyB1bmlvbiBpcF9jb25udHJhY2tfbWFuaXBfcHJvdG8gbWluLCBtYXg7Cit9OworCitzdHJ1Y3QgaXBfbmF0X211bHRpX3JhbmdlX2NvbXBhdAoreworIHVuc2lnbmVkIGludCByYW5nZXNpemU7CisKKyBzdHJ1Y3QgaXBfbmF0X3JhbmdlIHJhbmdlWzFdOworfTsKKworI2RlZmluZSBpcF9uYXRfbXVsdGlfcmFuZ2UgaXBfbmF0X211bHRpX3JhbmdlX2NvbXBhdAorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfbmF0X3J1bGUuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9uYXRfcnVsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5ZGIwYjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfbmF0X3J1bGUuaApAQCAtMCwwICsxLDE4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9JUF9OQVRfUlVMRV9ICisjZGVmaW5lIF9JUF9OQVRfUlVMRV9ICisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfdGFibGVzLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfbmF0Lmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3F1ZXVlLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfcXVldWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDE3YTU0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3F1ZXVlLmgKQEAgLTAsMCArMSw2NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfSVBfUVVFVUVfSAorI2RlZmluZSBfSVBfUVVFVUVfSAorCisjaW5jbHVkZSA8bmV0L2lmLmg+CisKK3R5cGVkZWYgc3RydWN0IGlwcV9wYWNrZXRfbXNnIHsKKyB1bnNpZ25lZCBsb25nIHBhY2tldF9pZDsKKyB1bnNpZ25lZCBsb25nIG1hcms7CisgbG9uZyB0aW1lc3RhbXBfc2VjOworIGxvbmcgdGltZXN0YW1wX3VzZWM7CisgdW5zaWduZWQgaW50IGhvb2s7CisgY2hhciBpbmRldl9uYW1lW0lGTkFNU0laXTsKKyBjaGFyIG91dGRldl9uYW1lW0lGTkFNU0laXTsKKyB1bnNpZ25lZCBzaG9ydCBod19wcm90b2NvbDsKKyB1bnNpZ25lZCBzaG9ydCBod190eXBlOworIHVuc2lnbmVkIGNoYXIgaHdfYWRkcmxlbjsKKyB1bnNpZ25lZCBjaGFyIGh3X2FkZHJbOF07Cisgc2l6ZV90IGRhdGFfbGVuOworIHVuc2lnbmVkIGNoYXIgcGF5bG9hZFswXTsKK30gaXBxX3BhY2tldF9tc2dfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaXBxX21vZGVfbXNnIHsKKyB1bnNpZ25lZCBjaGFyIHZhbHVlOworIHNpemVfdCByYW5nZTsKK30gaXBxX21vZGVfbXNnX3Q7CisKK3R5cGVkZWYgc3RydWN0IGlwcV92ZXJkaWN0X21zZyB7CisgdW5zaWduZWQgaW50IHZhbHVlOworIHVuc2lnbmVkIGxvbmcgaWQ7Cisgc2l6ZV90IGRhdGFfbGVuOworIHVuc2lnbmVkIGNoYXIgcGF5bG9hZFswXTsKK30gaXBxX3ZlcmRpY3RfbXNnX3Q7CisKK3R5cGVkZWYgc3RydWN0IGlwcV9wZWVyX21zZyB7CisgdW5pb24geworIGlwcV92ZXJkaWN0X21zZ190IHZlcmRpY3Q7CisgaXBxX21vZGVfbXNnX3QgbW9kZTsKKyB9IG1zZzsKK30gaXBxX3BlZXJfbXNnX3Q7CisKK2VudW0geworIElQUV9DT1BZX05PTkUsCisgSVBRX0NPUFlfTUVUQSwKKyBJUFFfQ09QWV9QQUNLRVQKK307CisjZGVmaW5lIElQUV9DT1BZX01BWCBJUFFfQ09QWV9QQUNLRVQKKworI2RlZmluZSBJUFFNX0JBU0UgMHgxMCAgCisjZGVmaW5lIElQUU1fTU9ERSAoSVBRTV9CQVNFICsgMSkgIAorI2RlZmluZSBJUFFNX1ZFUkRJQ1QgKElQUU1fQkFTRSArIDIpICAgCisjZGVmaW5lIElQUU1fUEFDS0VUIChJUFFNX0JBU0UgKyAzKSAgCisjZGVmaW5lIElQUU1fTUFYIChJUFFNX0JBU0UgKyA0KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF90YWJsZXMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF90YWJsZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTQ4MzA1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oCkBAIC0wLDAgKzEsMTgwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9JUFRBQkxFU19ICisjZGVmaW5lIF9JUFRBQkxFU19ICisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0Lmg+CisKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaD4KKworI2RlZmluZSBJUFRfRlVOQ1RJT05fTUFYTkFNRUxFTiBYVF9GVU5DVElPTl9NQVhOQU1FTEVOCisjZGVmaW5lIElQVF9UQUJMRV9NQVhOQU1FTEVOIFhUX0ZVTkNUSU9OX01BWE5BTUVMRU4KKyNkZWZpbmUgaXB0X21hdGNoIHh0X21hdGNoCisjZGVmaW5lIGlwdF90YXJnZXQgeHRfdGFyZ2V0CisjZGVmaW5lIGlwdF90YWJsZSB4dF90YWJsZQorI2RlZmluZSBpcHRfZ2V0X3JldmlzaW9uIHh0X2dldF9yZXZpc2lvbgorCitzdHJ1Y3QgaXB0X2lwIHsKKworIHN0cnVjdCBpbl9hZGRyIHNyYywgZHN0OworCisgc3RydWN0IGluX2FkZHIgc21zaywgZG1zazsKKyBjaGFyIGluaWZhY2VbSUZOQU1TSVpdLCBvdXRpZmFjZVtJRk5BTVNJWl07CisgdW5zaWduZWQgY2hhciBpbmlmYWNlX21hc2tbSUZOQU1TSVpdLCBvdXRpZmFjZV9tYXNrW0lGTkFNU0laXTsKKworIHVfaW50MTZfdCBwcm90bzsKKworIHVfaW50OF90IGZsYWdzOworCisgdV9pbnQ4X3QgaW52ZmxhZ3M7Cit9OworCisjZGVmaW5lIGlwdF9lbnRyeV9tYXRjaCB4dF9lbnRyeV9tYXRjaAorI2RlZmluZSBpcHRfZW50cnlfdGFyZ2V0IHh0X2VudHJ5X3RhcmdldAorI2RlZmluZSBpcHRfc3RhbmRhcmRfdGFyZ2V0IHh0X3N0YW5kYXJkX3RhcmdldAorCisjZGVmaW5lIGlwdF9jb3VudGVycyB4dF9jb3VudGVycworCisjZGVmaW5lIElQVF9GX0ZSQUcgMHgwMSAgCisjZGVmaW5lIElQVF9GX0dPVE8gMHgwMiAgCisjZGVmaW5lIElQVF9GX01BU0sgMHgwMyAgCisKKyNkZWZpbmUgSVBUX0lOVl9WSUFfSU4gMHgwMSAgCisjZGVmaW5lIElQVF9JTlZfVklBX09VVCAweDAyICAKKyNkZWZpbmUgSVBUX0lOVl9UT1MgMHgwNCAgCisjZGVmaW5lIElQVF9JTlZfU1JDSVAgMHgwOCAgCisjZGVmaW5lIElQVF9JTlZfRFNUSVAgMHgxMCAgCisjZGVmaW5lIElQVF9JTlZfRlJBRyAweDIwICAKKyNkZWZpbmUgSVBUX0lOVl9QUk9UTyBYVF9JTlZfUFJPVE8KKyNkZWZpbmUgSVBUX0lOVl9NQVNLIDB4N0YgIAorCitzdHJ1Y3QgaXB0X2VudHJ5Cit7Cisgc3RydWN0IGlwdF9pcCBpcDsKKworIHVuc2lnbmVkIGludCBuZmNhY2hlOworCisgdV9pbnQxNl90IHRhcmdldF9vZmZzZXQ7CisKKyB1X2ludDE2X3QgbmV4dF9vZmZzZXQ7CisKKyB1bnNpZ25lZCBpbnQgY29tZWZyb207CisKKyBzdHJ1Y3QgeHRfY291bnRlcnMgY291bnRlcnM7CisKKyB1bnNpZ25lZCBjaGFyIGVsZW1zWzBdOworfTsKKworI2RlZmluZSBJUFRfQkFTRV9DVEwgWFRfQkFTRV9DVEwKKworI2RlZmluZSBJUFRfU09fU0VUX1JFUExBQ0UgWFRfU09fU0VUX1JFUExBQ0UKKyNkZWZpbmUgSVBUX1NPX1NFVF9BRERfQ09VTlRFUlMgWFRfU09fU0VUX0FERF9DT1VOVEVSUworI2RlZmluZSBJUFRfU09fU0VUX01BWCBYVF9TT19TRVRfTUFYCisKKyNkZWZpbmUgSVBUX1NPX0dFVF9JTkZPIFhUX1NPX0dFVF9JTkZPCisjZGVmaW5lIElQVF9TT19HRVRfRU5UUklFUyBYVF9TT19HRVRfRU5UUklFUworI2RlZmluZSBJUFRfU09fR0VUX1JFVklTSU9OX01BVENIIFhUX1NPX0dFVF9SRVZJU0lPTl9NQVRDSAorI2RlZmluZSBJUFRfU09fR0VUX1JFVklTSU9OX1RBUkdFVCBYVF9TT19HRVRfUkVWSVNJT05fVEFSR0VUCisjZGVmaW5lIElQVF9TT19HRVRfTUFYIFhUX1NPX0dFVF9SRVZJU0lPTl9UQVJHRVQKKworI2RlZmluZSBJUFRfQ09OVElOVUUgWFRfQ09OVElOVUUKKyNkZWZpbmUgSVBUX1JFVFVSTiBYVF9SRVRVUk4KKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF90Y3B1ZHAuaD4KKyNkZWZpbmUgaXB0X3VkcCB4dF91ZHAKKyNkZWZpbmUgaXB0X3RjcCB4dF90Y3AKKworI2RlZmluZSBJUFRfVENQX0lOVl9TUkNQVCBYVF9UQ1BfSU5WX1NSQ1BUCisjZGVmaW5lIElQVF9UQ1BfSU5WX0RTVFBUIFhUX1RDUF9JTlZfRFNUUFQKKyNkZWZpbmUgSVBUX1RDUF9JTlZfRkxBR1MgWFRfVENQX0lOVl9GTEFHUworI2RlZmluZSBJUFRfVENQX0lOVl9PUFRJT04gWFRfVENQX0lOVl9PUFRJT04KKyNkZWZpbmUgSVBUX1RDUF9JTlZfTUFTSyBYVF9UQ1BfSU5WX01BU0sKKworI2RlZmluZSBJUFRfVURQX0lOVl9TUkNQVCBYVF9VRFBfSU5WX1NSQ1BUCisjZGVmaW5lIElQVF9VRFBfSU5WX0RTVFBUIFhUX1VEUF9JTlZfRFNUUFQKKyNkZWZpbmUgSVBUX1VEUF9JTlZfTUFTSyBYVF9VRFBfSU5WX01BU0sKKworc3RydWN0IGlwdF9pY21wCit7CisgdV9pbnQ4X3QgdHlwZTsKKyB1X2ludDhfdCBjb2RlWzJdOworIHVfaW50OF90IGludmZsYWdzOworfTsKKworI2RlZmluZSBJUFRfSUNNUF9JTlYgMHgwMSAgCisKK3N0cnVjdCBpcHRfZ2V0aW5mbworeworCisgY2hhciBuYW1lW0lQVF9UQUJMRV9NQVhOQU1FTEVOXTsKKworIHVuc2lnbmVkIGludCB2YWxpZF9ob29rczsKKworIHVuc2lnbmVkIGludCBob29rX2VudHJ5W05GX0lQX05VTUhPT0tTXTsKKworIHVuc2lnbmVkIGludCB1bmRlcmZsb3dbTkZfSVBfTlVNSE9PS1NdOworCisgdW5zaWduZWQgaW50IG51bV9lbnRyaWVzOworCisgdW5zaWduZWQgaW50IHNpemU7Cit9OworCitzdHJ1Y3QgaXB0X3JlcGxhY2UKK3sKKworIGNoYXIgbmFtZVtJUFRfVEFCTEVfTUFYTkFNRUxFTl07CisKKyB1bnNpZ25lZCBpbnQgdmFsaWRfaG9va3M7CisKKyB1bnNpZ25lZCBpbnQgbnVtX2VudHJpZXM7CisKKyB1bnNpZ25lZCBpbnQgc2l6ZTsKKworIHVuc2lnbmVkIGludCBob29rX2VudHJ5W05GX0lQX05VTUhPT0tTXTsKKworIHVuc2lnbmVkIGludCB1bmRlcmZsb3dbTkZfSVBfTlVNSE9PS1NdOworCisgdW5zaWduZWQgaW50IG51bV9jb3VudGVyczsKKworIHN0cnVjdCB4dF9jb3VudGVycyBfX3VzZXIgKmNvdW50ZXJzOworCisgc3RydWN0IGlwdF9lbnRyeSBlbnRyaWVzWzBdOworfTsKKworI2RlZmluZSBpcHRfY291bnRlcnNfaW5mbyB4dF9jb3VudGVyc19pbmZvCisKK3N0cnVjdCBpcHRfZ2V0X2VudHJpZXMKK3sKKworIGNoYXIgbmFtZVtJUFRfVEFCTEVfTUFYTkFNRUxFTl07CisKKyB1bnNpZ25lZCBpbnQgc2l6ZTsKKworIHN0cnVjdCBpcHRfZW50cnkgZW50cnl0YWJsZVswXTsKK307CisKKyNkZWZpbmUgSVBUX1NUQU5EQVJEX1RBUkdFVCBYVF9TVEFOREFSRF9UQVJHRVQKKworI2RlZmluZSBJUFRfRVJST1JfVEFSR0VUIFhUX0VSUk9SX1RBUkdFVAorCitzdGF0aWMgX19pbmxpbmVfXyBzdHJ1Y3QgaXB0X2VudHJ5X3RhcmdldCAqCitpcHRfZ2V0X3RhcmdldChzdHJ1Y3QgaXB0X2VudHJ5ICplKQoreworIHJldHVybiAodm9pZCAqKWUgKyBlLT50YXJnZXRfb2Zmc2V0OworfQorCisjZGVmaW5lIElQVF9NQVRDSF9JVEVSQVRFKGUsIGZuLCBhcmdzLi4uKSAgKHsgICB1bnNpZ25lZCBpbnQgX19pOyAgIGludCBfX3JldCA9IDA7ICAgc3RydWN0IGlwdF9lbnRyeV9tYXRjaCAqX19tYXRjaDsgICAgIGZvciAoX19pID0gc2l6ZW9mKHN0cnVjdCBpcHRfZW50cnkpOyAgIF9faSA8IChlKS0+dGFyZ2V0X29mZnNldDsgICBfX2kgKz0gX19tYXRjaC0+dS5tYXRjaF9zaXplKSB7ICAgX19tYXRjaCA9ICh2b2lkICopKGUpICsgX19pOyAgICAgX19yZXQgPSBmbihfX21hdGNoICwgIyMgYXJncyk7ICAgaWYgKF9fcmV0ICE9IDApICAgYnJlYWs7ICAgfSAgIF9fcmV0OyAgfSkKKworI2RlZmluZSBJUFRfRU5UUllfSVRFUkFURShlbnRyaWVzLCBzaXplLCBmbiwgYXJncy4uLikgICh7ICAgdW5zaWduZWQgaW50IF9faTsgICBpbnQgX19yZXQgPSAwOyAgIHN0cnVjdCBpcHRfZW50cnkgKl9fZW50cnk7ICAgICBmb3IgKF9faSA9IDA7IF9faSA8IChzaXplKTsgX19pICs9IF9fZW50cnktPm5leHRfb2Zmc2V0KSB7ICAgX19lbnRyeSA9ICh2b2lkICopKGVudHJpZXMpICsgX19pOyAgICAgX19yZXQgPSBmbihfX2VudHJ5ICwgIyMgYXJncyk7ICAgaWYgKF9fcmV0ICE9IDApICAgYnJlYWs7ICAgfSAgIF9fcmV0OyAgfSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X0NMQVNTSUZZLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X0NMQVNTSUZZLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTczOGVkZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfQ0xBU1NJRlkuaApAQCAtMCwwICsxLDE4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9JUFRfQ0xBU1NJRllfSAorI2RlZmluZSBfSVBUX0NMQVNTSUZZX0gKKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9DTEFTU0lGWS5oPgorI2RlZmluZSBpcHRfY2xhc3NpZnlfdGFyZ2V0X2luZm8geHRfY2xhc3NpZnlfdGFyZ2V0X2luZm8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X0RTQ1AuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfRFNDUC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyNzFmYjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X0RTQ1AuaApAQCAtMCwwICsxLDIwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9JUFRfRFNDUF9UQVJHRVRfSAorI2RlZmluZSBfSVBUX0RTQ1BfVEFSR0VUX0gKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfZHNjcC5oPgorCitzdHJ1Y3QgaXB0X0RTQ1BfaW5mbyB7CisgdV9pbnQ4X3QgZHNjcDsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9FQ04uaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfRUNOLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdjMTZmZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfRUNOLmgKQEAgLTAsMCArMSwzNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfSVBUX0VDTl9UQVJHRVRfSAorI2RlZmluZSBfSVBUX0VDTl9UQVJHRVRfSAorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9EU0NQLmg+CisKKyNkZWZpbmUgSVBUX0VDTl9JUF9NQVNLICh+SVBUX0RTQ1BfTUFTSykKKworI2RlZmluZSBJUFRfRUNOX09QX1NFVF9JUCAweDAxICAKKyNkZWZpbmUgSVBUX0VDTl9PUF9TRVRfRUNFIDB4MTAgIAorI2RlZmluZSBJUFRfRUNOX09QX1NFVF9DV1IgMHgyMCAgCisKKyNkZWZpbmUgSVBUX0VDTl9PUF9NQVNLIDB4Y2UKKworc3RydWN0IGlwdF9FQ05faW5mbyB7CisgdV9pbnQ4X3Qgb3BlcmF0aW9uOworIHVfaW50OF90IGlwX2VjdDsKKyB1bmlvbiB7Cisgc3RydWN0IHsKKyB1X2ludDhfdCBlY2U6MSwgY3dyOjE7CisgfSB0Y3A7CisgfSBwcm90bzsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9MT0cuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfTE9HLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ2ZmQxYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfTE9HLmgKQEAgLTAsMCArMSwyOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfSVBUX0xPR19ICisjZGVmaW5lIF9JUFRfTE9HX0gKKworI2RlZmluZSBJUFRfTE9HX1RDUFNFUSAweDAxICAKKyNkZWZpbmUgSVBUX0xPR19UQ1BPUFQgMHgwMiAgCisjZGVmaW5lIElQVF9MT0dfSVBPUFQgMHgwNCAgCisjZGVmaW5lIElQVF9MT0dfVUlEIDB4MDggIAorI2RlZmluZSBJUFRfTE9HX05GTE9HIDB4MTAgIAorI2RlZmluZSBJUFRfTE9HX01BU0sgMHgxZgorCitzdHJ1Y3QgaXB0X2xvZ19pbmZvIHsKKyB1bnNpZ25lZCBjaGFyIGxldmVsOworIHVuc2lnbmVkIGNoYXIgbG9nZmxhZ3M7CisgY2hhciBwcmVmaXhbMzBdOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X05GUVVFVUUuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfTkZRVUVVRS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3YWM0YTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X05GUVVFVUUuaApAQCAtMCwwICsxLDE5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9JUFRfTkZRX1RBUkdFVF9ICisjZGVmaW5lIF9JUFRfTkZRX1RBUkdFVF9ICisKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfTkZRVUVVRS5oPgorCisjZGVmaW5lIGlwdF9ORlFfaW5mbyB4dF9ORlFfaW5mbworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfUkVKRUNULmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X1JFSkVDVC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzYzM5NjUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X1JFSkVDVC5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0lQVF9SRUpFQ1RfSAorI2RlZmluZSBfSVBUX1JFSkVDVF9ICisKK2VudW0gaXB0X3JlamVjdF93aXRoIHsKKyBJUFRfSUNNUF9ORVRfVU5SRUFDSEFCTEUsCisgSVBUX0lDTVBfSE9TVF9VTlJFQUNIQUJMRSwKKyBJUFRfSUNNUF9QUk9UX1VOUkVBQ0hBQkxFLAorIElQVF9JQ01QX1BPUlRfVU5SRUFDSEFCTEUsCisgSVBUX0lDTVBfRUNIT1JFUExZLAorIElQVF9JQ01QX05FVF9QUk9ISUJJVEVELAorIElQVF9JQ01QX0hPU1RfUFJPSElCSVRFRCwKKyBJUFRfVENQX1JFU0VULAorIElQVF9JQ01QX0FETUlOX1BST0hJQklURUQKK307CisKK3N0cnVjdCBpcHRfcmVqZWN0X2luZm8geworIGVudW0gaXB0X3JlamVjdF93aXRoIHdpdGg7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfVENQTVNTLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X1RDUE1TUy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5MjRmMzcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X1RDUE1TUy5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0lQVF9UQ1BNU1NfSAorI2RlZmluZSBfSVBUX1RDUE1TU19ICisKK3N0cnVjdCBpcHRfdGNwbXNzX2luZm8geworIHVfaW50MTZfdCBtc3M7Cit9OworCisjZGVmaW5lIElQVF9UQ1BNU1NfQ0xBTVBfUE1UVSAweGZmZmYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X1RPUy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9UT1MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2MyMTE2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9UT1MuaApAQCAtMCwwICsxLDIzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9JUFRfVE9TX0hfdGFyZ2V0CisjZGVmaW5lIF9JUFRfVE9TX0hfdGFyZ2V0CisKKyNpZm5kZWYgSVBUT1NfTk9STUFMU1ZDCisjZGVmaW5lIElQVE9TX05PUk1BTFNWQyAwCisjZW5kaWYKKworc3RydWN0IGlwdF90b3NfdGFyZ2V0X2luZm8geworIHVfaW50OF90IHRvczsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9UVEwuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfVFRMLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjllOThhZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfVFRMLmgKQEAgLTAsMCArMSwyOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfSVBUX1RUTF9ICisjZGVmaW5lIF9JUFRfVFRMX0gKKworZW51bSB7CisgSVBUX1RUTF9TRVQgPSAwLAorIElQVF9UVExfSU5DLAorIElQVF9UVExfREVDCit9OworCisjZGVmaW5lIElQVF9UVExfTUFYTU9ERSBJUFRfVFRMX0RFQworCitzdHJ1Y3QgaXB0X1RUTF9pbmZvIHsKKyB1X2ludDhfdCBtb2RlOworIHVfaW50OF90IHR0bDsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9VTE9HLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X1VMT0cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTExY2I4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9VTE9HLmgKQEAgLTAsMCArMSw0OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfSVBUX1VMT0dfSAorI2RlZmluZSBfSVBUX1VMT0dfSAorCisjaWZuZGVmIE5FVExJTktfTkZMT0cKKyNkZWZpbmUgTkVUTElOS19ORkxPRyA1CisjZW5kaWYKKworI2RlZmluZSBVTE9HX0RFRkFVTFRfTkxHUk9VUCAxCisjZGVmaW5lIFVMT0dfREVGQVVMVF9RVEhSRVNIT0xEIDEKKworI2RlZmluZSBVTE9HX01BQ19MRU4gODAKKyNkZWZpbmUgVUxPR19QUkVGSVhfTEVOIDMyCisKKyNkZWZpbmUgVUxPR19NQVhfUUxFTiA1MAorCitzdHJ1Y3QgaXB0X3Vsb2dfaW5mbyB7CisgdW5zaWduZWQgaW50IG5sX2dyb3VwOworIHNpemVfdCBjb3B5X3JhbmdlOworIHNpemVfdCBxdGhyZXNob2xkOworIGNoYXIgcHJlZml4W1VMT0dfUFJFRklYX0xFTl07Cit9OworCit0eXBlZGVmIHN0cnVjdCB1bG9nX3BhY2tldF9tc2cgeworIHVuc2lnbmVkIGxvbmcgbWFyazsKKyBsb25nIHRpbWVzdGFtcF9zZWM7CisgbG9uZyB0aW1lc3RhbXBfdXNlYzsKKyB1bnNpZ25lZCBpbnQgaG9vazsKKyBjaGFyIGluZGV2X25hbWVbSUZOQU1TSVpdOworIGNoYXIgb3V0ZGV2X25hbWVbSUZOQU1TSVpdOworIHNpemVfdCBkYXRhX2xlbjsKKyBjaGFyIHByZWZpeFtVTE9HX1BSRUZJWF9MRU5dOworIHVuc2lnbmVkIGNoYXIgbWFjX2xlbjsKKyB1bnNpZ25lZCBjaGFyIG1hY1tVTE9HX01BQ19MRU5dOworIHVuc2lnbmVkIGNoYXIgcGF5bG9hZFswXTsKK30gdWxvZ19wYWNrZXRfbXNnX3Q7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9hZGRydHlwZS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9hZGRydHlwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyMDNiMzIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2FkZHJ0eXBlLmgKQEAgLTAsMCArMSwyMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfSVBUX0FERFJUWVBFX0gKKyNkZWZpbmUgX0lQVF9BRERSVFlQRV9ICisKK3N0cnVjdCBpcHRfYWRkcnR5cGVfaW5mbyB7CisgdV9pbnQxNl90IHNvdXJjZTsKKyB1X2ludDE2X3QgZGVzdDsKKyB1X2ludDMyX3QgaW52ZXJ0X3NvdXJjZTsKKyB1X2ludDMyX3QgaW52ZXJ0X2Rlc3Q7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfYWguaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfYWguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTk4M2UyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9haC5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0lQVF9BSF9ICisjZGVmaW5lIF9JUFRfQUhfSAorCitzdHJ1Y3QgaXB0X2FoCit7CisgdV9pbnQzMl90IHNwaXNbMl07CisgdV9pbnQ4X3QgaW52ZmxhZ3M7Cit9OworCisjZGVmaW5lIElQVF9BSF9JTlZfU1BJIDB4MDEgIAorI2RlZmluZSBJUFRfQUhfSU5WX01BU0sgMHgwMSAgCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9jb21tZW50LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2NvbW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmQ3NTA3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9jb21tZW50LmgKQEAgLTAsMCArMSwyMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfSVBUX0NPTU1FTlRfSAorI2RlZmluZSBfSVBUX0NPTU1FTlRfSAorCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X2NvbW1lbnQuaD4KKworI2RlZmluZSBJUFRfTUFYX0NPTU1FTlRfTEVOIFhUX01BWF9DT01NRU5UX0xFTgorCisjZGVmaW5lIGlwdF9jb21tZW50X2luZm8geHRfY29tbWVudF9pbmZvCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9jb25uYnl0ZXMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfY29ubmJ5dGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFlMTljNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfY29ubmJ5dGVzLmgKQEAgLTAsMCArMSwyOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfSVBUX0NPTk5CWVRFU19ICisjZGVmaW5lIF9JUFRfQ09OTkJZVEVTX0gKKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9jb25uYnl0ZXMuaD4KKyNkZWZpbmUgaXB0X2Nvbm5ieXRlc193aGF0IHh0X2Nvbm5ieXRlc193aGF0CisKKyNkZWZpbmUgSVBUX0NPTk5CWVRFU19QS1RTIFhUX0NPTk5CWVRFU19QS1RTCisjZGVmaW5lIElQVF9DT05OQllURVNfQllURVMgWFRfQ09OTkJZVEVTX0JZVEVTCisjZGVmaW5lIElQVF9DT05OQllURVNfQVZHUEtUIFhUX0NPTk5CWVRFU19BVkdQS1QKKworI2RlZmluZSBpcHRfY29ubmJ5dGVzX2RpcmVjdGlvbiB4dF9jb25uYnl0ZXNfZGlyZWN0aW9uCisjZGVmaW5lIElQVF9DT05OQllURVNfRElSX09SSUdJTkFMIFhUX0NPTk5CWVRFU19ESVJfT1JJR0lOQUwKKyNkZWZpbmUgSVBUX0NPTk5CWVRFU19ESVJfUkVQTFkgWFRfQ09OTkJZVEVTX0RJUl9SRVBMWQorI2RlZmluZSBJUFRfQ09OTkJZVEVTX0RJUl9CT1RIIFhUX0NPTk5CWVRFU19ESVJfQk9USAorCisjZGVmaW5lIGlwdF9jb25uYnl0ZXNfaW5mbyB4dF9jb25uYnl0ZXNfaW5mbworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfZGNjcC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9kY2NwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzEyMTJjOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfZGNjcC5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0lQVF9EQ0NQX0hfCisjZGVmaW5lIF9JUFRfRENDUF9IXworCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X2RjY3AuaD4KKyNkZWZpbmUgSVBUX0RDQ1BfU1JDX1BPUlRTIFhUX0RDQ1BfU1JDX1BPUlRTCisjZGVmaW5lIElQVF9EQ0NQX0RFU1RfUE9SVFMgWFRfRENDUF9ERVNUX1BPUlRTCisjZGVmaW5lIElQVF9EQ0NQX1RZUEUgWFRfRENDUF9UWVBFCisjZGVmaW5lIElQVF9EQ0NQX09QVElPTiBYVF9EQ0NQX09QVElPTgorCisjZGVmaW5lIElQVF9EQ0NQX1ZBTElEX0ZMQUdTIFhUX0RDQ1BfVkFMSURfRkxBR1MKKworI2RlZmluZSBpcHRfZGNjcF9pbmZvIHh0X2RjY3BfaW5mbworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9kc2NwXy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9kc2NwXy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiYTg4NjEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2RzY3BfLmgKQEAgLTAsMCArMSwyNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfSVBUX0RTQ1BfSAorI2RlZmluZSBfSVBUX0RTQ1BfSAorCisjZGVmaW5lIElQVF9EU0NQX01BU0sgMHhmYyAgCisjZGVmaW5lIElQVF9EU0NQX1NISUZUIDIKKyNkZWZpbmUgSVBUX0RTQ1BfTUFYIDB4M2YgIAorCitzdHJ1Y3QgaXB0X2RzY3BfaW5mbyB7CisgdV9pbnQ4X3QgZHNjcDsKKyB1X2ludDhfdCBpbnZlcnQ7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfZXNwLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2VzcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5NDdlN2UKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2VzcC5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0lQVF9FU1BfSAorI2RlZmluZSBfSVBUX0VTUF9ICisKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfZXNwLmg+CisKKyNkZWZpbmUgaXB0X2VzcCB4dF9lc3AKKyNkZWZpbmUgSVBUX0VTUF9JTlZfU1BJIFhUX0VTUF9JTlZfU1BJCisjZGVmaW5lIElQVF9FU1BfSU5WX01BU0sgWFRfRVNQX0lOVl9NQVNLCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9oYXNobGltaXQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfaGFzaGxpbWl0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRjMWY0MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfaGFzaGxpbWl0LmgKQEAgLTAsMCArMSw0NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfSVBUX0hBU0hMSU1JVF9ICisjZGVmaW5lIF9JUFRfSEFTSExJTUlUX0gKKworI2RlZmluZSBJUFRfSEFTSExJTUlUX1NDQUxFIDEwMDAwCisKK3N0cnVjdCBpcHRfaGFzaGxpbWl0X2h0YWJsZTsKKworI2RlZmluZSBJUFRfSEFTSExJTUlUX0hBU0hfRElQIDB4MDAwMQorI2RlZmluZSBJUFRfSEFTSExJTUlUX0hBU0hfRFBUIDB4MDAwMgorI2RlZmluZSBJUFRfSEFTSExJTUlUX0hBU0hfU0lQIDB4MDAwNAorI2RlZmluZSBJUFRfSEFTSExJTUlUX0hBU0hfU1BUIDB4MDAwOAorCitzdHJ1Y3QgaGFzaGxpbWl0X2NmZyB7CisgdV9pbnQzMl90IG1vZGU7CisgdV9pbnQzMl90IGF2ZzsKKyB1X2ludDMyX3QgYnVyc3Q7CisKKyB1X2ludDMyX3Qgc2l6ZTsKKyB1X2ludDMyX3QgbWF4OworIHVfaW50MzJfdCBnY19pbnRlcnZhbDsKKyB1X2ludDMyX3QgZXhwaXJlOworfTsKKworc3RydWN0IGlwdF9oYXNobGltaXRfaW5mbyB7CisgY2hhciBuYW1lIFtJRk5BTVNJWl07Cisgc3RydWN0IGhhc2hsaW1pdF9jZmcgY2ZnOworIHN0cnVjdCBpcHRfaGFzaGxpbWl0X2h0YWJsZSAqaGluZm87CisKKyB1bmlvbiB7Cisgdm9pZCAqcHRyOworIHN0cnVjdCBpcHRfaGFzaGxpbWl0X2luZm8gKm1hc3RlcjsKKyB9IHU7Cit9OworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2hlbHBlci5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9oZWxwZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzZhZGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9oZWxwZXIuaApAQCAtMCwwICsxLDE4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9JUFRfSEVMUEVSX0gKKyNkZWZpbmUgX0lQVF9IRUxQRVJfSAorCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X2hlbHBlci5oPgorI2RlZmluZSBpcHRfaGVscGVyX2luZm8geHRfaGVscGVyX2luZm8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2lwcmFuZ2UuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfaXByYW5nZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0ZGQ2MDMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2lwcmFuZ2UuaApAQCAtMCwwICsxLDMzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9JUFRfSVBSQU5HRV9ICisjZGVmaW5lIF9JUFRfSVBSQU5HRV9ICisKKyNkZWZpbmUgSVBSQU5HRV9TUkMgMHgwMSAgCisjZGVmaW5lIElQUkFOR0VfRFNUIDB4MDIgIAorI2RlZmluZSBJUFJBTkdFX1NSQ19JTlYgMHgxMCAgCisjZGVmaW5lIElQUkFOR0VfRFNUX0lOViAweDIwICAKKworc3RydWN0IGlwdF9pcHJhbmdlIHsKKworIHVfaW50MzJfdCBtaW5faXAsIG1heF9pcDsKK307CisKK3N0cnVjdCBpcHRfaXByYW5nZV9pbmZvCit7Cisgc3RydWN0IGlwdF9pcHJhbmdlIHNyYzsKKyBzdHJ1Y3QgaXB0X2lwcmFuZ2UgZHN0OworCisgdV9pbnQ4X3QgZmxhZ3M7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfbGVuZ3RoLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2xlbmd0aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2MTA4NTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2xlbmd0aC5oCkBAIC0wLDAgKzEsMTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0lQVF9MRU5HVEhfSAorI2RlZmluZSBfSVBUX0xFTkdUSF9ICisKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfbGVuZ3RoLmg+CisjZGVmaW5lIGlwdF9sZW5ndGhfaW5mbyB4dF9sZW5ndGhfaW5mbworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfbWFjLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X21hYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5Mzc4YTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X21hYy5oCkBAIC0wLDAgKzEsMTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0lQVF9NQUNfSAorI2RlZmluZSBfSVBUX01BQ19ICisKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfbWFjLmg+CisjZGVmaW5lIGlwdF9tYWNfaW5mbyB4dF9tYWNfaW5mbworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfb3duZXIuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfb3duZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Yjc0MmIxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9vd25lci5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0lQVF9PV05FUl9ICisjZGVmaW5lIF9JUFRfT1dORVJfSAorCisjZGVmaW5lIElQVF9PV05FUl9VSUQgMHgwMQorI2RlZmluZSBJUFRfT1dORVJfR0lEIDB4MDIKKyNkZWZpbmUgSVBUX09XTkVSX1BJRCAweDA0CisjZGVmaW5lIElQVF9PV05FUl9TSUQgMHgwOAorI2RlZmluZSBJUFRfT1dORVJfQ09NTSAweDEwCisKK3N0cnVjdCBpcHRfb3duZXJfaW5mbyB7CisgdWlkX3QgdWlkOworIGdpZF90IGdpZDsKKyBwaWRfdCBwaWQ7CisgcGlkX3Qgc2lkOworIGNoYXIgY29tbVsxNl07CisgdV9pbnQ4X3QgbWF0Y2gsIGludmVydDsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9waHlzZGV2LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X3BoeXNkZXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTFjZjAyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9waHlzZGV2LmgKQEAgLTAsMCArMSwyNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfSVBUX1BIWVNERVZfSAorI2RlZmluZSBfSVBUX1BIWVNERVZfSAorCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X3BoeXNkZXYuaD4KKworI2RlZmluZSBJUFRfUEhZU0RFVl9PUF9JTiBYVF9QSFlTREVWX09QX0lOCisjZGVmaW5lIElQVF9QSFlTREVWX09QX09VVCBYVF9QSFlTREVWX09QX09VVAorI2RlZmluZSBJUFRfUEhZU0RFVl9PUF9CUklER0VEIFhUX1BIWVNERVZfT1BfQlJJREdFRAorI2RlZmluZSBJUFRfUEhZU0RFVl9PUF9JU0lOIFhUX1BIWVNERVZfT1BfSVNJTgorI2RlZmluZSBJUFRfUEhZU0RFVl9PUF9JU09VVCBYVF9QSFlTREVWX09QX0lTT1VUCisjZGVmaW5lIElQVF9QSFlTREVWX09QX01BU0sgWFRfUEhZU0RFVl9PUF9NQVNLCisKKyNkZWZpbmUgaXB0X3BoeXNkZXZfaW5mbyB4dF9waHlzZGV2X2luZm8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X3BrdHR5cGUuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfcGt0dHlwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiYjIwYjEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X3BrdHR5cGUuaApAQCAtMCwwICsxLDE4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9JUFRfUEtUVFlQRV9ICisjZGVmaW5lIF9JUFRfUEtUVFlQRV9ICisKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfcGt0dHlwZS5oPgorI2RlZmluZSBpcHRfcGt0dHlwZV9pbmZvIHh0X3BrdHR5cGVfaW5mbworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfcmVhbG0uaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfcmVhbG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjgwZmFhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9yZWFsbS5oCkBAIC0wLDAgKzEsMTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0lQVF9SRUFMTV9ICisjZGVmaW5lIF9JUFRfUkVBTE1fSAorCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X3JlYWxtLmg+CisjZGVmaW5lIGlwdF9yZWFsbV9pbmZvIHh0X3JlYWxtX2luZm8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X3JlY2VudC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9yZWNlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTE3MmJkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9yZWNlbnQuaApAQCAtMCwwICsxLDM4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9JUFRfUkVDRU5UX0gKKyNkZWZpbmUgX0lQVF9SRUNFTlRfSAorCisjZGVmaW5lIFJFQ0VOVF9OQU1FICJpcHRfcmVjZW50IgorI2RlZmluZSBSRUNFTlRfVkVSICJ2MC4zLjEiCisKKyNkZWZpbmUgSVBUX1JFQ0VOVF9DSEVDSyAxCisjZGVmaW5lIElQVF9SRUNFTlRfU0VUIDIKKyNkZWZpbmUgSVBUX1JFQ0VOVF9VUERBVEUgNAorI2RlZmluZSBJUFRfUkVDRU5UX1JFTU9WRSA4CisjZGVmaW5lIElQVF9SRUNFTlRfVFRMIDE2CisKKyNkZWZpbmUgSVBUX1JFQ0VOVF9TT1VSQ0UgMAorI2RlZmluZSBJUFRfUkVDRU5UX0RFU1QgMQorCisjZGVmaW5lIElQVF9SRUNFTlRfTkFNRV9MRU4gMjAwCisKK3N0cnVjdCBpcHRfcmVjZW50X2luZm8geworIHVfaW50MzJfdCBzZWNvbmRzOworIHVfaW50MzJfdCBoaXRfY291bnQ7CisgdV9pbnQ4X3QgY2hlY2tfc2V0OworIHVfaW50OF90IGludmVydDsKKyBjaGFyIG5hbWVbSVBUX1JFQ0VOVF9OQU1FX0xFTl07CisgdV9pbnQ4X3Qgc2lkZTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9zY3RwLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X3NjdHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGYzMDFmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9zY3RwLmgKQEAgLTAsMCArMSw2NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfSVBUX1NDVFBfSF8KKyNkZWZpbmUgX0lQVF9TQ1RQX0hfCisKKyNkZWZpbmUgSVBUX1NDVFBfU1JDX1BPUlRTIDB4MDEKKyNkZWZpbmUgSVBUX1NDVFBfREVTVF9QT1JUUyAweDAyCisjZGVmaW5lIElQVF9TQ1RQX0NIVU5LX1RZUEVTIDB4MDQKKworI2RlZmluZSBJUFRfU0NUUF9WQUxJRF9GTEFHUyAweDA3CisKK3N0cnVjdCBpcHRfc2N0cF9mbGFnX2luZm8geworIHVfaW50OF90IGNodW5rdHlwZTsKKyB1X2ludDhfdCBmbGFnOworIHVfaW50OF90IGZsYWdfbWFzazsKK307CisKKyNkZWZpbmUgSVBUX05VTV9TQ1RQX0ZMQUdTIDQKKworc3RydWN0IGlwdF9zY3RwX2luZm8geworIHVfaW50MTZfdCBkcHRzWzJdOworIHVfaW50MTZfdCBzcHRzWzJdOworCisgdV9pbnQzMl90IGNodW5rbWFwWzI1NiAvIHNpemVvZiAodV9pbnQzMl90KV07CisKKyNkZWZpbmUgU0NUUF9DSFVOS19NQVRDSF9BTlkgMHgwMSAgCisjZGVmaW5lIFNDVFBfQ0hVTktfTUFUQ0hfQUxMIDB4MDIgIAorI2RlZmluZSBTQ1RQX0NIVU5LX01BVENIX09OTFkgMHgwNCAgCisKKyB1X2ludDMyX3QgY2h1bmtfbWF0Y2hfdHlwZTsKKyBzdHJ1Y3QgaXB0X3NjdHBfZmxhZ19pbmZvIGZsYWdfaW5mb1tJUFRfTlVNX1NDVFBfRkxBR1NdOworIGludCBmbGFnX2NvdW50OworCisgdV9pbnQzMl90IGZsYWdzOworIHVfaW50MzJfdCBpbnZmbGFnczsKK307CisKKyNkZWZpbmUgYnl0ZXModHlwZSkgKHNpemVvZih0eXBlKSAqIDgpCisKKyNkZWZpbmUgU0NUUF9DSFVOS01BUF9TRVQoY2h1bmttYXAsIHR5cGUpICAgZG8geyAgIGNodW5rbWFwW3R5cGUgLyBieXRlcyh1X2ludDMyX3QpXSB8PSAgIDEgPDwgKHR5cGUgJSBieXRlcyh1X2ludDMyX3QpKTsgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIFNDVFBfQ0hVTktNQVBfQ0xFQVIoY2h1bmttYXAsIHR5cGUpICAgZG8geyAgIGNodW5rbWFwW3R5cGUgLyBieXRlcyh1X2ludDMyX3QpXSAmPSAgIH4oMSA8PCAodHlwZSAlIGJ5dGVzKHVfaW50MzJfdCkpKTsgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIFNDVFBfQ0hVTktNQVBfSVNfU0VUKGNodW5rbWFwLCB0eXBlKSAgKHsgICAoY2h1bmttYXBbdHlwZSAvIGJ5dGVzICh1X2ludDMyX3QpXSAmICAgKDEgPDwgKHR5cGUgJSBieXRlcyAodV9pbnQzMl90KSkpKSA/IDE6IDA7ICB9KQorCisjZGVmaW5lIFNDVFBfQ0hVTktNQVBfUkVTRVQoY2h1bmttYXApICAgZG8geyAgIGludCBpOyAgIGZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNodW5rbWFwKTsgaSsrKSAgIGNodW5rbWFwW2ldID0gMDsgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIFNDVFBfQ0hVTktNQVBfU0VUX0FMTChjaHVua21hcCkgICBkbyB7ICAgaW50IGk7ICAgZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY2h1bmttYXApOyBpKyspICAgY2h1bmttYXBbaV0gPSB+MDsgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIFNDVFBfQ0hVTktNQVBfQ09QWShkZXN0bWFwLCBzcmNtYXApICAgZG8geyAgIGludCBpOyAgIGZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNodW5rbWFwKTsgaSsrKSAgIGRlc3RtYXBbaV0gPSBzcmNtYXBbaV07ICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBTQ1RQX0NIVU5LTUFQX0lTX0NMRUFSKGNodW5rbWFwKSAgKHsgICBpbnQgaTsgICBpbnQgZmxhZyA9IDE7ICAgZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY2h1bmttYXApOyBpKyspIHsgICBpZiAoY2h1bmttYXBbaV0pIHsgICBmbGFnID0gMDsgICBicmVhazsgICB9ICAgfSAgIGZsYWc7ICB9KQorCisjZGVmaW5lIFNDVFBfQ0hVTktNQVBfSVNfQUxMX1NFVChjaHVua21hcCkgICh7ICAgaW50IGk7ICAgaW50IGZsYWcgPSAxOyAgIGZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNodW5rbWFwKTsgaSsrKSB7ICAgaWYgKGNodW5rbWFwW2ldICE9IH4wKSB7ICAgZmxhZyA9IDA7ICAgYnJlYWs7ICAgfSAgIH0gICBmbGFnOyAgfSkKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfc3RhdGUuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfc3RhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDUxOTkwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9zdGF0ZS5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0lQVF9TVEFURV9ICisjZGVmaW5lIF9JUFRfU1RBVEVfSAorCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X3N0YXRlLmg+CisKKyNkZWZpbmUgSVBUX1NUQVRFX0JJVCBYVF9TVEFURV9CSVQKKyNkZWZpbmUgSVBUX1NUQVRFX0lOVkFMSUQgWFRfU1RBVEVfSU5WQUxJRAorCisjZGVmaW5lIElQVF9TVEFURV9VTlRSQUNLRUQgWFRfU1RBVEVfVU5UUkFDS0VECisKKyNkZWZpbmUgaXB0X3N0YXRlX2luZm8geHRfc3RhdGVfaW5mbworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfc3RyaW5nLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X3N0cmluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwOTIzZGQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X3N0cmluZy5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0lQVF9TVFJJTkdfSAorI2RlZmluZSBfSVBUX1NUUklOR19ICisKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfc3RyaW5nLmg+CisKKyNkZWZpbmUgSVBUX1NUUklOR19NQVhfUEFUVEVSTl9TSVpFIFhUX1NUUklOR19NQVhfUEFUVEVSTl9TSVpFCisjZGVmaW5lIElQVF9TVFJJTkdfTUFYX0FMR09fTkFNRV9TSVpFIFhUX1NUUklOR19NQVhfQUxHT19OQU1FX1NJWkUKKyNkZWZpbmUgaXB0X3N0cmluZ19pbmZvIHh0X3N0cmluZ19pbmZvCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF90b3NfLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X3Rvc18uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODljZTIyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF90b3NfLmgKQEAgLTAsMCArMSwyNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfSVBUX1RPU19ICisjZGVmaW5lIF9JUFRfVE9TX0gKKworc3RydWN0IGlwdF90b3NfaW5mbyB7CisgdV9pbnQ4X3QgdG9zOworIHVfaW50OF90IGludmVydDsKK307CisKKyNpZm5kZWYgSVBUT1NfTk9STUFMU1ZDCisjZGVmaW5lIElQVE9TX05PUk1BTFNWQyAwCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjYuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2Ni5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNjhjZDkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjYuaApAQCAtMCwwICsxLDY3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTElOVVhfSVA2X05FVEZJTFRFUl9ICisjZGVmaW5lIF9fTElOVVhfSVA2X05FVEZJTFRFUl9ICisKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KKworI2RlZmluZSBORkNfSVA2X1NSQyAweDAwMDEKKworI2RlZmluZSBORkNfSVA2X0RTVCAweDAwMDIKKworI2RlZmluZSBORkNfSVA2X0lGX0lOIDB4MDAwNAorCisjZGVmaW5lIE5GQ19JUDZfSUZfT1VUIDB4MDAwOAorCisjZGVmaW5lIE5GQ19JUDZfVE9TIDB4MDAxMAorCisjZGVmaW5lIE5GQ19JUDZfUFJPVE8gMHgwMDIwCisKKyNkZWZpbmUgTkZDX0lQNl9PUFRJT05TIDB4MDA0MAorCisjZGVmaW5lIE5GQ19JUDZfRlJBRyAweDAwODAKKworI2RlZmluZSBORkNfSVA2X1RDUEZMQUdTIDB4MDEwMAorCisjZGVmaW5lIE5GQ19JUDZfU1JDX1BUIDB4MDIwMAorCisjZGVmaW5lIE5GQ19JUDZfRFNUX1BUIDB4MDQwMAorCisjZGVmaW5lIE5GQ19JUDZfUFJPVE9fVU5LTk9XTiAweDIwMDAKKworI2RlZmluZSBORl9JUDZfUFJFX1JPVVRJTkcgMAorCisjZGVmaW5lIE5GX0lQNl9MT0NBTF9JTiAxCisKKyNkZWZpbmUgTkZfSVA2X0ZPUldBUkQgMgorCisjZGVmaW5lIE5GX0lQNl9MT0NBTF9PVVQgMworCisjZGVmaW5lIE5GX0lQNl9QT1NUX1JPVVRJTkcgNAorI2RlZmluZSBORl9JUDZfTlVNSE9PS1MgNQorCitlbnVtIG5mX2lwNl9ob29rX3ByaW9yaXRpZXMgeworIE5GX0lQNl9QUklfRklSU1QgPSBJTlRfTUlOLAorIE5GX0lQNl9QUklfQ09OTlRSQUNLX0RFRlJBRyA9IC00MDAsCisgTkZfSVA2X1BSSV9TRUxJTlVYX0ZJUlNUID0gLTIyNSwKKyBORl9JUDZfUFJJX0NPTk5UUkFDSyA9IC0yMDAsCisgTkZfSVA2X1BSSV9CUklER0VfU0FCT1RBR0VfRk9SV0FSRCA9IC0xNzUsCisgTkZfSVA2X1BSSV9NQU5HTEUgPSAtMTUwLAorIE5GX0lQNl9QUklfTkFUX0RTVCA9IC0xMDAsCisgTkZfSVA2X1BSSV9CUklER0VfU0FCT1RBR0VfTE9DQUxfT1VUID0gLTUwLAorIE5GX0lQNl9QUklfRklMVEVSID0gMCwKKyBORl9JUDZfUFJJX05BVF9TUkMgPSAxMDAsCisgTkZfSVA2X1BSSV9TRUxJTlVYX0xBU1QgPSAyMjUsCisgTkZfSVA2X1BSSV9MQVNUID0gSU5UX01BWCwKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNl90YWJsZXMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZfdGFibGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY4N2U0ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZfdGFibGVzLmgKQEAgLTAsMCArMSwxNzggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0lQNl9UQUJMRVNfSAorI2RlZmluZSBfSVA2X1RBQkxFU19ICisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY2Lmg+CisKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaD4KKworI2RlZmluZSBJUDZUX0ZVTkNUSU9OX01BWE5BTUVMRU4gWFRfRlVOQ1RJT05fTUFYTkFNRUxFTgorI2RlZmluZSBJUDZUX1RBQkxFX01BWE5BTUVMRU4gWFRfVEFCTEVfTUFYTkFNRUxFTgorCisjZGVmaW5lIGlwNnRfbWF0Y2ggeHRfbWF0Y2gKKyNkZWZpbmUgaXA2dF90YXJnZXQgeHRfdGFyZ2V0CisjZGVmaW5lIGlwNnRfdGFibGUgeHRfdGFibGUKKyNkZWZpbmUgaXA2dF9nZXRfcmV2aXNpb24geHRfZ2V0X3JldmlzaW9uCisKK3N0cnVjdCBpcDZ0X2lwNiB7CisKKyBzdHJ1Y3QgaW42X2FkZHIgc3JjLCBkc3Q7CisKKyBzdHJ1Y3QgaW42X2FkZHIgc21zaywgZG1zazsKKyBjaGFyIGluaWZhY2VbSUZOQU1TSVpdLCBvdXRpZmFjZVtJRk5BTVNJWl07CisgdW5zaWduZWQgY2hhciBpbmlmYWNlX21hc2tbSUZOQU1TSVpdLCBvdXRpZmFjZV9tYXNrW0lGTkFNU0laXTsKKworIHVfaW50MTZfdCBwcm90bzsKKworIHVfaW50OF90IHRvczsKKworIHVfaW50OF90IGZsYWdzOworCisgdV9pbnQ4X3QgaW52ZmxhZ3M7Cit9OworCisjZGVmaW5lIGlwNnRfZW50cnlfbWF0Y2ggeHRfZW50cnlfbWF0Y2gKKyNkZWZpbmUgaXA2dF9lbnRyeV90YXJnZXQgeHRfZW50cnlfdGFyZ2V0CisjZGVmaW5lIGlwNnRfc3RhbmRhcmRfdGFyZ2V0IHh0X3N0YW5kYXJkX3RhcmdldAorCisjZGVmaW5lIGlwNnRfY291bnRlcnMgeHRfY291bnRlcnMKKworI2RlZmluZSBJUDZUX0ZfUFJPVE8gMHgwMSAgCisjZGVmaW5lIElQNlRfRl9UT1MgMHgwMiAgCisjZGVmaW5lIElQNlRfRl9HT1RPIDB4MDQgIAorI2RlZmluZSBJUDZUX0ZfTUFTSyAweDA3ICAKKworI2RlZmluZSBJUDZUX0lOVl9WSUFfSU4gMHgwMSAgCisjZGVmaW5lIElQNlRfSU5WX1ZJQV9PVVQgMHgwMiAgCisjZGVmaW5lIElQNlRfSU5WX1RPUyAweDA0ICAKKyNkZWZpbmUgSVA2VF9JTlZfU1JDSVAgMHgwOCAgCisjZGVmaW5lIElQNlRfSU5WX0RTVElQIDB4MTAgIAorI2RlZmluZSBJUDZUX0lOVl9GUkFHIDB4MjAgIAorI2RlZmluZSBJUDZUX0lOVl9QUk9UTyBYVF9JTlZfUFJPVE8KKyNkZWZpbmUgSVA2VF9JTlZfTUFTSyAweDdGICAKKworc3RydWN0IGlwNnRfZW50cnkKK3sKKyBzdHJ1Y3QgaXA2dF9pcDYgaXB2NjsKKworIHVuc2lnbmVkIGludCBuZmNhY2hlOworCisgdV9pbnQxNl90IHRhcmdldF9vZmZzZXQ7CisKKyB1X2ludDE2X3QgbmV4dF9vZmZzZXQ7CisKKyB1bnNpZ25lZCBpbnQgY29tZWZyb207CisKKyBzdHJ1Y3QgeHRfY291bnRlcnMgY291bnRlcnM7CisKKyB1bnNpZ25lZCBjaGFyIGVsZW1zWzBdOworfTsKKworI2RlZmluZSBJUDZUX0JBU0VfQ1RMIFhUX0JBU0VfQ1RMCisKKyNkZWZpbmUgSVA2VF9TT19TRVRfUkVQTEFDRSBYVF9TT19TRVRfUkVQTEFDRQorI2RlZmluZSBJUDZUX1NPX1NFVF9BRERfQ09VTlRFUlMgWFRfU09fU0VUX0FERF9DT1VOVEVSUworI2RlZmluZSBJUDZUX1NPX1NFVF9NQVggWFRfU09fU0VUX01BWAorCisjZGVmaW5lIElQNlRfU09fR0VUX0lORk8gWFRfU09fR0VUX0lORk8KKyNkZWZpbmUgSVA2VF9TT19HRVRfRU5UUklFUyBYVF9TT19HRVRfRU5UUklFUworI2RlZmluZSBJUDZUX1NPX0dFVF9SRVZJU0lPTl9NQVRDSCBYVF9TT19HRVRfUkVWSVNJT05fTUFUQ0gKKyNkZWZpbmUgSVA2VF9TT19HRVRfUkVWSVNJT05fVEFSR0VUIFhUX1NPX0dFVF9SRVZJU0lPTl9UQVJHRVQKKyNkZWZpbmUgSVA2VF9TT19HRVRfTUFYIFhUX1NPX0dFVF9SRVZJU0lPTl9UQVJHRVQKKworI2RlZmluZSBJUDZUX0NPTlRJTlVFIFhUX0NPTlRJTlVFCisKKyNkZWZpbmUgSVA2VF9SRVRVUk4gWFRfUkVUVVJOCisKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfdGNwdWRwLmg+CisKKyNkZWZpbmUgaXA2dF90Y3AgeHRfdGNwCisjZGVmaW5lIGlwNnRfdWRwIHh0X3VkcAorCisjZGVmaW5lIElQNlRfVENQX0lOVl9TUkNQVCBYVF9UQ1BfSU5WX1NSQ1BUCisjZGVmaW5lIElQNlRfVENQX0lOVl9EU1RQVCBYVF9UQ1BfSU5WX0RTVFBUCisjZGVmaW5lIElQNlRfVENQX0lOVl9GTEFHUyBYVF9UQ1BfSU5WX0ZMQUdTCisjZGVmaW5lIElQNlRfVENQX0lOVl9PUFRJT04gWFRfVENQX0lOVl9PUFRJT04KKyNkZWZpbmUgSVA2VF9UQ1BfSU5WX01BU0sgWFRfVENQX0lOVl9NQVNLCisKKyNkZWZpbmUgSVA2VF9VRFBfSU5WX1NSQ1BUIFhUX1VEUF9JTlZfU1JDUFQKKyNkZWZpbmUgSVA2VF9VRFBfSU5WX0RTVFBUIFhUX1VEUF9JTlZfRFNUUFQKKyNkZWZpbmUgSVA2VF9VRFBfSU5WX01BU0sgWFRfVURQX0lOVl9NQVNLCisKK3N0cnVjdCBpcDZ0X2ljbXAKK3sKKyB1X2ludDhfdCB0eXBlOworIHVfaW50OF90IGNvZGVbMl07CisgdV9pbnQ4X3QgaW52ZmxhZ3M7Cit9OworCisjZGVmaW5lIElQNlRfSUNNUF9JTlYgMHgwMSAgCisKK3N0cnVjdCBpcDZ0X2dldGluZm8KK3sKKworIGNoYXIgbmFtZVtJUDZUX1RBQkxFX01BWE5BTUVMRU5dOworCisgdW5zaWduZWQgaW50IHZhbGlkX2hvb2tzOworCisgdW5zaWduZWQgaW50IGhvb2tfZW50cnlbTkZfSVA2X05VTUhPT0tTXTsKKworIHVuc2lnbmVkIGludCB1bmRlcmZsb3dbTkZfSVA2X05VTUhPT0tTXTsKKworIHVuc2lnbmVkIGludCBudW1fZW50cmllczsKKworIHVuc2lnbmVkIGludCBzaXplOworfTsKKworc3RydWN0IGlwNnRfcmVwbGFjZQoreworCisgY2hhciBuYW1lW0lQNlRfVEFCTEVfTUFYTkFNRUxFTl07CisKKyB1bnNpZ25lZCBpbnQgdmFsaWRfaG9va3M7CisKKyB1bnNpZ25lZCBpbnQgbnVtX2VudHJpZXM7CisKKyB1bnNpZ25lZCBpbnQgc2l6ZTsKKworIHVuc2lnbmVkIGludCBob29rX2VudHJ5W05GX0lQNl9OVU1IT09LU107CisKKyB1bnNpZ25lZCBpbnQgdW5kZXJmbG93W05GX0lQNl9OVU1IT09LU107CisKKyB1bnNpZ25lZCBpbnQgbnVtX2NvdW50ZXJzOworCisgc3RydWN0IHh0X2NvdW50ZXJzIF9fdXNlciAqY291bnRlcnM7CisKKyBzdHJ1Y3QgaXA2dF9lbnRyeSBlbnRyaWVzWzBdOworfTsKKworI2RlZmluZSBpcDZ0X2NvdW50ZXJzX2luZm8geHRfY291bnRlcnNfaW5mbworCitzdHJ1Y3QgaXA2dF9nZXRfZW50cmllcworeworCisgY2hhciBuYW1lW0lQNlRfVEFCTEVfTUFYTkFNRUxFTl07CisKKyB1bnNpZ25lZCBpbnQgc2l6ZTsKKworIHN0cnVjdCBpcDZ0X2VudHJ5IGVudHJ5dGFibGVbMF07Cit9OworCisjZGVmaW5lIElQNlRfU1RBTkRBUkRfVEFSR0VUIFhUX1NUQU5EQVJEX1RBUkdFVAorCisjZGVmaW5lIElQNlRfRVJST1JfVEFSR0VUIFhUX0VSUk9SX1RBUkdFVAorCisjZGVmaW5lIElQNlRfTUFUQ0hfSVRFUkFURShlLCBmbiwgYXJncy4uLikgICh7ICAgdW5zaWduZWQgaW50IF9faTsgICBpbnQgX19yZXQgPSAwOyAgIHN0cnVjdCBpcDZ0X2VudHJ5X21hdGNoICpfX207ICAgICBmb3IgKF9faSA9IHNpemVvZihzdHJ1Y3QgaXA2dF9lbnRyeSk7ICAgX19pIDwgKGUpLT50YXJnZXRfb2Zmc2V0OyAgIF9faSArPSBfX20tPnUubWF0Y2hfc2l6ZSkgeyAgIF9fbSA9ICh2b2lkICopKGUpICsgX19pOyAgICAgX19yZXQgPSBmbihfX20gLCAjIyBhcmdzKTsgICBpZiAoX19yZXQgIT0gMCkgICBicmVhazsgICB9ICAgX19yZXQ7ICB9KQorI2RlZmluZSBJUDZUX0VOVFJZX0lURVJBVEUoZW50cmllcywgc2l6ZSwgZm4sIGFyZ3MuLi4pICAoeyAgIHVuc2lnbmVkIGludCBfX2k7ICAgaW50IF9fcmV0ID0gMDsgICBzdHJ1Y3QgaXA2dF9lbnRyeSAqX19lOyAgICAgZm9yIChfX2kgPSAwOyBfX2kgPCAoc2l6ZSk7IF9faSArPSBfX2UtPm5leHRfb2Zmc2V0KSB7ICAgX19lID0gKHZvaWQgKikoZW50cmllcykgKyBfX2k7ICAgICBfX3JldCA9IGZuKF9fZSAsICMjIGFyZ3MpOyAgIGlmIChfX3JldCAhPSAwKSAgIGJyZWFrOyAgIH0gICBfX3JldDsgIH0pCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X0hMLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9ITC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwNzFmZjkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9ITC5oCkBAIC0wLDAgKzEsMjggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0lQNlRfSExfSAorI2RlZmluZSBfSVA2VF9ITF9ICisKK2VudW0geworIElQNlRfSExfU0VUID0gMCwKKyBJUDZUX0hMX0lOQywKKyBJUDZUX0hMX0RFQworfTsKKworI2RlZmluZSBJUDZUX0hMX01BWE1PREUgSVA2VF9ITF9ERUMKKworc3RydWN0IGlwNnRfSExfaW5mbyB7CisgdV9pbnQ4X3QgbW9kZTsKKyB1X2ludDhfdCBob3BfbGltaXQ7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X0xPRy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfTE9HLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ0YzEzMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X0xPRy5oCkBAIC0wLDAgKzEsMjggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0lQNlRfTE9HX0gKKyNkZWZpbmUgX0lQNlRfTE9HX0gKKworI2RlZmluZSBJUDZUX0xPR19UQ1BTRVEgMHgwMSAgCisjZGVmaW5lIElQNlRfTE9HX1RDUE9QVCAweDAyICAKKyNkZWZpbmUgSVA2VF9MT0dfSVBPUFQgMHgwNCAgCisjZGVmaW5lIElQNlRfTE9HX1VJRCAweDA4ICAKKyNkZWZpbmUgSVA2VF9MT0dfTkZMT0cgMHgxMCAgCisjZGVmaW5lIElQNlRfTE9HX01BU0sgMHgxZgorCitzdHJ1Y3QgaXA2dF9sb2dfaW5mbyB7CisgdW5zaWduZWQgY2hhciBsZXZlbDsKKyB1bnNpZ25lZCBjaGFyIGxvZ2ZsYWdzOworIGNoYXIgcHJlZml4WzMwXTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfUkVKRUNULmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9SRUpFQ1QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTAxYzg1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfUkVKRUNULmgKQEAgLTAsMCArMSwyOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfSVA2VF9SRUpFQ1RfSAorI2RlZmluZSBfSVA2VF9SRUpFQ1RfSAorCitlbnVtIGlwNnRfcmVqZWN0X3dpdGggeworIElQNlRfSUNNUDZfTk9fUk9VVEUsCisgSVA2VF9JQ01QNl9BRE1fUFJPSElCSVRFRCwKKyBJUDZUX0lDTVA2X05PVF9ORUlHSEJPVVIsCisgSVA2VF9JQ01QNl9BRERSX1VOUkVBQ0gsCisgSVA2VF9JQ01QNl9QT1JUX1VOUkVBQ0gsCisgSVA2VF9JQ01QNl9FQ0hPUkVQTFksCisgSVA2VF9UQ1BfUkVTRVQKK307CisKK3N0cnVjdCBpcDZ0X3JlamVjdF9pbmZvIHsKKyB1X2ludDMyX3Qgd2l0aDsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfYWguaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X2FoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzExMGRmNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X2FoLmgKQEAgLTAsMCArMSwzMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfSVA2VF9BSF9ICisjZGVmaW5lIF9JUDZUX0FIX0gKKworc3RydWN0IGlwNnRfYWgKK3sKKyB1X2ludDMyX3Qgc3Bpc1syXTsKKyB1X2ludDMyX3QgaGRybGVuOworIHVfaW50OF90IGhkcnJlczsKKyB1X2ludDhfdCBpbnZmbGFnczsKK307CisKKyNkZWZpbmUgSVA2VF9BSF9TUEkgMHgwMQorI2RlZmluZSBJUDZUX0FIX0xFTiAweDAyCisjZGVmaW5lIElQNlRfQUhfUkVTIDB4MDQKKworI2RlZmluZSBJUDZUX0FIX0lOVl9TUEkgMHgwMSAgCisjZGVmaW5lIElQNlRfQUhfSU5WX0xFTiAweDAyICAKKyNkZWZpbmUgSVA2VF9BSF9JTlZfTUFTSyAweDAzICAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9lc3AuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X2VzcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhYTc1NTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9lc3AuaApAQCAtMCwwICsxLDIxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9JUDZUX0VTUF9ICisjZGVmaW5lIF9JUDZUX0VTUF9ICisKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfZXNwLmg+CisKKyNkZWZpbmUgaXA2dF9lc3AgeHRfZXNwCisjZGVmaW5lIElQNlRfRVNQX0lOVl9TUEkgWFRfRVNQX0lOVl9TUEkKKyNkZWZpbmUgSVA2VF9FU1BfSU5WX01BU0sgWFRfRVNQX0lOVl9NQVNLCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfZnJhZy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfZnJhZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNGQ2YmIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9mcmFnLmgKQEAgLTAsMCArMSwzNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfSVA2VF9GUkFHX0gKKyNkZWZpbmUgX0lQNlRfRlJBR19ICisKK3N0cnVjdCBpcDZ0X2ZyYWcKK3sKKyB1X2ludDMyX3QgaWRzWzJdOworIHVfaW50MzJfdCBoZHJsZW47CisgdV9pbnQ4X3QgZmxhZ3M7CisgdV9pbnQ4X3QgaW52ZmxhZ3M7Cit9OworCisjZGVmaW5lIElQNlRfRlJBR19JRFMgMHgwMQorI2RlZmluZSBJUDZUX0ZSQUdfTEVOIDB4MDIKKyNkZWZpbmUgSVA2VF9GUkFHX1JFUyAweDA0CisjZGVmaW5lIElQNlRfRlJBR19GU1QgMHgwOAorI2RlZmluZSBJUDZUX0ZSQUdfTUYgMHgxMAorI2RlZmluZSBJUDZUX0ZSQUdfTk1GIDB4MjAKKworI2RlZmluZSBJUDZUX0ZSQUdfSU5WX0lEUyAweDAxICAKKyNkZWZpbmUgSVA2VF9GUkFHX0lOVl9MRU4gMHgwMiAgCisjZGVmaW5lIElQNlRfRlJBR19JTlZfTUFTSyAweDAzICAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9obC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfaGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDE0NGQyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfaGwuaApAQCAtMCwwICsxLDI3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9JUDZUX0hMX0gKKyNkZWZpbmUgX0lQNlRfSExfSAorCitlbnVtIHsKKyBJUDZUX0hMX0VRID0gMCwKKyBJUDZUX0hMX05FLAorIElQNlRfSExfTFQsCisgSVA2VF9ITF9HVCwKK307CisKK3N0cnVjdCBpcDZ0X2hsX2luZm8geworIHVfaW50OF90IG1vZGU7CisgdV9pbnQ4X3QgaG9wX2xpbWl0OworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9pcHY2aGVhZGVyLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9pcHY2aGVhZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U4M2ViYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X2lwdjZoZWFkZXIuaApAQCAtMCwwICsxLDMxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fSVBWNkhFQURFUl9ICisjZGVmaW5lIF9fSVBWNkhFQURFUl9ICisKK3N0cnVjdCBpcDZ0X2lwdjZoZWFkZXJfaW5mbworeworIHVfaW50OF90IG1hdGNoZmxhZ3M7CisgdV9pbnQ4X3QgaW52ZmxhZ3M7CisgdV9pbnQ4X3QgbW9kZWZsYWc7Cit9OworCisjZGVmaW5lIE1BU0tfSE9QT1BUUyAxMjgKKyNkZWZpbmUgTUFTS19EU1RPUFRTIDY0CisjZGVmaW5lIE1BU0tfUk9VVElORyAzMgorI2RlZmluZSBNQVNLX0ZSQUdNRU5UIDE2CisjZGVmaW5lIE1BU0tfQUggOAorI2RlZmluZSBNQVNLX0VTUCA0CisjZGVmaW5lIE1BU0tfTk9ORSAyCisjZGVmaW5lIE1BU0tfUFJPVE8gMQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X2xlbmd0aC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfbGVuZ3RoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRjNGM1ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X2xlbmd0aC5oCkBAIC0wLDAgKzEsMTkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0lQNlRfTEVOR1RIX0gKKyNkZWZpbmUgX0lQNlRfTEVOR1RIX0gKKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9sZW5ndGguaD4KKyNkZWZpbmUgaXA2dF9sZW5ndGhfaW5mbyB4dF9sZW5ndGhfaW5mbworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfbWFjLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9tYWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGU2MDIzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfbWFjLmgKQEAgLTAsMCArMSwxOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfSVA2VF9NQUNfSAorI2RlZmluZSBfSVA2VF9NQUNfSAorCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X21hYy5oPgorI2RlZmluZSBpcDZ0X21hY19pbmZvIHh0X21hY19pbmZvCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfb3B0cy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfb3B0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkOWRiOWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9vcHRzLmgKQEAgLTAsMCArMSwzMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfSVA2VF9PUFRTX0gKKyNkZWZpbmUgX0lQNlRfT1BUU19ICisKKyNkZWZpbmUgSVA2VF9PUFRTX09QVFNOUiAxNgorCitzdHJ1Y3QgaXA2dF9vcHRzCit7CisgdV9pbnQzMl90IGhkcmxlbjsKKyB1X2ludDhfdCBmbGFnczsKKyB1X2ludDhfdCBpbnZmbGFnczsKKyB1X2ludDE2X3Qgb3B0c1tJUDZUX09QVFNfT1BUU05SXTsKKyB1X2ludDhfdCBvcHRzbnI7Cit9OworCisjZGVmaW5lIElQNlRfT1BUU19MRU4gMHgwMQorI2RlZmluZSBJUDZUX09QVFNfT1BUUyAweDAyCisjZGVmaW5lIElQNlRfT1BUU19OU1RSSUNUIDB4MDQKKworI2RlZmluZSBJUDZUX09QVFNfSU5WX0xFTiAweDAxICAKKyNkZWZpbmUgSVA2VF9PUFRTX0lOVl9NQVNLIDB4MDEgIAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X293bmVyLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9vd25lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2MTI2YjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9vd25lci5oCkBAIC0wLDAgKzEsMjggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0lQNlRfT1dORVJfSAorI2RlZmluZSBfSVA2VF9PV05FUl9ICisKKyNkZWZpbmUgSVA2VF9PV05FUl9VSUQgMHgwMQorI2RlZmluZSBJUDZUX09XTkVSX0dJRCAweDAyCisjZGVmaW5lIElQNlRfT1dORVJfUElEIDB4MDQKKyNkZWZpbmUgSVA2VF9PV05FUl9TSUQgMHgwOAorCitzdHJ1Y3QgaXA2dF9vd25lcl9pbmZvIHsKKyB1aWRfdCB1aWQ7CisgZ2lkX3QgZ2lkOworIHBpZF90IHBpZDsKKyBwaWRfdCBzaWQ7CisgdV9pbnQ4X3QgbWF0Y2gsIGludmVydDsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfcGh5c2Rldi5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfcGh5c2Rldi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1N2UyZmIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9waHlzZGV2LmgKQEAgLTAsMCArMSwyNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfSVA2VF9QSFlTREVWX0gKKyNkZWZpbmUgX0lQNlRfUEhZU0RFVl9ICisKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfcGh5c2Rldi5oPgorCisjZGVmaW5lIElQNlRfUEhZU0RFVl9PUF9JTiBYVF9QSFlTREVWX09QX0lOCisjZGVmaW5lIElQNlRfUEhZU0RFVl9PUF9PVVQgWFRfUEhZU0RFVl9PUF9PVVQKKyNkZWZpbmUgSVA2VF9QSFlTREVWX09QX0JSSURHRUQgWFRfUEhZU0RFVl9PUF9CUklER0VECisjZGVmaW5lIElQNlRfUEhZU0RFVl9PUF9JU0lOIFhUX1BIWVNERVZfT1BfSVNJTgorI2RlZmluZSBJUDZUX1BIWVNERVZfT1BfSVNPVVQgWFRfUEhZU0RFVl9PUF9JU09VVAorI2RlZmluZSBJUDZUX1BIWVNERVZfT1BfTUFTSyBYVF9QSFlTREVWX09QX01BU0sKKworI2RlZmluZSBpcDZ0X3BoeXNkZXZfaW5mbyB4dF9waHlzZGV2X2luZm8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9ydC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzRhN2VlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfcnQuaApAQCAtMCwwICsxLDQxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9JUDZUX1JUX0gKKyNkZWZpbmUgX0lQNlRfUlRfSAorCisjZGVmaW5lIElQNlRfUlRfSE9QUyAxNgorCitzdHJ1Y3QgaXA2dF9ydAoreworIHVfaW50MzJfdCBydF90eXBlOworIHVfaW50MzJfdCBzZWdzbGVmdFsyXTsKKyB1X2ludDMyX3QgaGRybGVuOworIHVfaW50OF90IGZsYWdzOworIHVfaW50OF90IGludmZsYWdzOworIHN0cnVjdCBpbjZfYWRkciBhZGRyc1tJUDZUX1JUX0hPUFNdOworIHVfaW50OF90IGFkZHJucjsKK307CisKKyNkZWZpbmUgSVA2VF9SVF9UWVAgMHgwMQorI2RlZmluZSBJUDZUX1JUX1NHUyAweDAyCisjZGVmaW5lIElQNlRfUlRfTEVOIDB4MDQKKyNkZWZpbmUgSVA2VF9SVF9SRVMgMHgwOAorI2RlZmluZSBJUDZUX1JUX0ZTVF9NQVNLIDB4MzAKKyNkZWZpbmUgSVA2VF9SVF9GU1QgMHgxMAorI2RlZmluZSBJUDZUX1JUX0ZTVF9OU1RSSUNUIDB4MjAKKworI2RlZmluZSBJUDZUX1JUX0lOVl9UWVAgMHgwMSAgCisjZGVmaW5lIElQNlRfUlRfSU5WX1NHUyAweDAyICAKKyNkZWZpbmUgSVA2VF9SVF9JTlZfTEVOIDB4MDQgIAorI2RlZmluZSBJUDZUX1JUX0lOVl9NQVNLIDB4MDcgIAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRsaW5rLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0bGluay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2ZjFjMDYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0bGluay5oCkBAIC0wLDAgKzEsMTE5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTElOVVhfTkVUTElOS19ICisjZGVmaW5lIF9fTElOVVhfTkVUTElOS19ICisKKyNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4gIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNkZWZpbmUgTkVUTElOS19ST1VURSAwICAKKyNkZWZpbmUgTkVUTElOS19VTlVTRUQgMSAgCisjZGVmaW5lIE5FVExJTktfVVNFUlNPQ0sgMiAgCisjZGVmaW5lIE5FVExJTktfRklSRVdBTEwgMyAgCisjZGVmaW5lIE5FVExJTktfSU5FVF9ESUFHIDQgIAorI2RlZmluZSBORVRMSU5LX05GTE9HIDUgIAorI2RlZmluZSBORVRMSU5LX1hGUk0gNiAgCisjZGVmaW5lIE5FVExJTktfU0VMSU5VWCA3ICAKKyNkZWZpbmUgTkVUTElOS19JU0NTSSA4ICAKKyNkZWZpbmUgTkVUTElOS19BVURJVCA5ICAKKyNkZWZpbmUgTkVUTElOS19GSUJfTE9PS1VQIDEwIAorI2RlZmluZSBORVRMSU5LX0NPTk5FQ1RPUiAxMQorI2RlZmluZSBORVRMSU5LX05FVEZJTFRFUiAxMiAgCisjZGVmaW5lIE5FVExJTktfSVA2X0ZXIDEzCisjZGVmaW5lIE5FVExJTktfRE5SVE1TRyAxNCAgCisjZGVmaW5lIE5FVExJTktfS09CSkVDVF9VRVZFTlQgMTUgIAorI2RlZmluZSBORVRMSU5LX0dFTkVSSUMgMTYKKworI2RlZmluZSBNQVhfTElOS1MgMzIgCisKK3N0cnVjdCBzb2NrYWRkcl9ubAoreworIHNhX2ZhbWlseV90IG5sX2ZhbWlseTsKKyB1bnNpZ25lZCBzaG9ydCBubF9wYWQ7CisgX191MzIgbmxfcGlkOworIF9fdTMyIG5sX2dyb3VwczsKK307CisKK3N0cnVjdCBubG1zZ2hkcgoreworIF9fdTMyIG5sbXNnX2xlbjsKKyBfX3UxNiBubG1zZ190eXBlOworIF9fdTE2IG5sbXNnX2ZsYWdzOworIF9fdTMyIG5sbXNnX3NlcTsKKyBfX3UzMiBubG1zZ19waWQ7Cit9OworCisjZGVmaW5lIE5MTV9GX1JFUVVFU1QgMSAgCisjZGVmaW5lIE5MTV9GX01VTFRJIDIgIAorI2RlZmluZSBOTE1fRl9BQ0sgNCAgCisjZGVmaW5lIE5MTV9GX0VDSE8gOCAgCisKKyNkZWZpbmUgTkxNX0ZfUk9PVCAweDEwMCAgCisjZGVmaW5lIE5MTV9GX01BVENIIDB4MjAwICAKKyNkZWZpbmUgTkxNX0ZfQVRPTUlDIDB4NDAwICAKKyNkZWZpbmUgTkxNX0ZfRFVNUCAoTkxNX0ZfUk9PVHxOTE1fRl9NQVRDSCkKKworI2RlZmluZSBOTE1fRl9SRVBMQUNFIDB4MTAwICAKKyNkZWZpbmUgTkxNX0ZfRVhDTCAweDIwMCAgCisjZGVmaW5lIE5MTV9GX0NSRUFURSAweDQwMCAgCisjZGVmaW5lIE5MTV9GX0FQUEVORCAweDgwMCAgCisKKyNkZWZpbmUgTkxNU0dfQUxJR05UTyA0CisjZGVmaW5lIE5MTVNHX0FMSUdOKGxlbikgKCAoKGxlbikrTkxNU0dfQUxJR05UTy0xKSAmIH4oTkxNU0dfQUxJR05UTy0xKSApCisjZGVmaW5lIE5MTVNHX0hEUkxFTiAoKGludCkgTkxNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCBubG1zZ2hkcikpKQorI2RlZmluZSBOTE1TR19MRU5HVEgobGVuKSAoKGxlbikrTkxNU0dfQUxJR04oTkxNU0dfSERSTEVOKSkKKyNkZWZpbmUgTkxNU0dfU1BBQ0UobGVuKSBOTE1TR19BTElHTihOTE1TR19MRU5HVEgobGVuKSkKKyNkZWZpbmUgTkxNU0dfREFUQShubGgpICgodm9pZCopKCgoY2hhciopbmxoKSArIE5MTVNHX0xFTkdUSCgwKSkpCisjZGVmaW5lIE5MTVNHX05FWFQobmxoLGxlbikgKChsZW4pIC09IE5MTVNHX0FMSUdOKChubGgpLT5ubG1zZ19sZW4pLCAgIChzdHJ1Y3Qgbmxtc2doZHIqKSgoKGNoYXIqKShubGgpKSArIE5MTVNHX0FMSUdOKChubGgpLT5ubG1zZ19sZW4pKSkKKyNkZWZpbmUgTkxNU0dfT0sobmxoLGxlbikgKChsZW4pID49IChpbnQpc2l6ZW9mKHN0cnVjdCBubG1zZ2hkcikgJiYgICAobmxoKS0+bmxtc2dfbGVuID49IHNpemVvZihzdHJ1Y3Qgbmxtc2doZHIpICYmICAgKG5saCktPm5sbXNnX2xlbiA8PSAobGVuKSkKKyNkZWZpbmUgTkxNU0dfUEFZTE9BRChubGgsbGVuKSAoKG5saCktPm5sbXNnX2xlbiAtIE5MTVNHX1NQQUNFKChsZW4pKSkKKworI2RlZmluZSBOTE1TR19OT09QIDB4MSAgCisjZGVmaW5lIE5MTVNHX0VSUk9SIDB4MiAgCisjZGVmaW5lIE5MTVNHX0RPTkUgMHgzICAKKyNkZWZpbmUgTkxNU0dfT1ZFUlJVTiAweDQgIAorCisjZGVmaW5lIE5MTVNHX01JTl9UWVBFIDB4MTAgIAorCitzdHJ1Y3Qgbmxtc2dlcnIKK3sKKyBpbnQgZXJyb3I7Cisgc3RydWN0IG5sbXNnaGRyIG1zZzsKK307CisKKyNkZWZpbmUgTkVUTElOS19BRERfTUVNQkVSU0hJUCAxCisjZGVmaW5lIE5FVExJTktfRFJPUF9NRU1CRVJTSElQIDIKKyNkZWZpbmUgTkVUTElOS19QS1RJTkZPIDMKKworc3RydWN0IG5sX3BrdGluZm8KK3sKKyBfX3UzMiBncm91cDsKK307CisKKyNkZWZpbmUgTkVUX01BSk9SIDM2ICAKKworZW51bSB7CisgTkVUTElOS19VTkNPTk5FQ1RFRCA9IDAsCisgTkVUTElOS19DT05ORUNURUQsCit9OworCitzdHJ1Y3QgbmxhdHRyCit7CisgX191MTYgbmxhX2xlbjsKKyBfX3UxNiBubGFfdHlwZTsKK307CisKKyNkZWZpbmUgTkxBX0FMSUdOVE8gNAorI2RlZmluZSBOTEFfQUxJR04obGVuKSAoKChsZW4pICsgTkxBX0FMSUdOVE8gLSAxKSAmIH4oTkxBX0FMSUdOVE8gLSAxKSkKKyNkZWZpbmUgTkxBX0hEUkxFTiAoKGludCkgTkxBX0FMSUdOKHNpemVvZihzdHJ1Y3QgbmxhdHRyKSkpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25mcy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25mcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5NGRjOWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmZzLmgKQEAgLTAsMCArMSwxMjQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX05GU19ICisjZGVmaW5lIF9MSU5VWF9ORlNfSAorCisjZGVmaW5lIE5GU19QUk9HUkFNIDEwMDAwMworI2RlZmluZSBORlNfUE9SVCAyMDQ5CisjZGVmaW5lIE5GU19NQVhEQVRBIDgxOTIKKyNkZWZpbmUgTkZTX01BWFBBVEhMRU4gMTAyNAorI2RlZmluZSBORlNfTUFYTkFNTEVOIDI1NQorI2RlZmluZSBORlNfTUFYR1JPVVBTIDE2CisjZGVmaW5lIE5GU19GSFNJWkUgMzIKKyNkZWZpbmUgTkZTX0NPT0tJRVNJWkUgNAorI2RlZmluZSBORlNfRklGT19ERVYgKC0xKQorI2RlZmluZSBORlNNT0RFX0ZNVCAwMTcwMDAwCisjZGVmaW5lIE5GU01PREVfRElSIDAwNDAwMDAKKyNkZWZpbmUgTkZTTU9ERV9DSFIgMDAyMDAwMAorI2RlZmluZSBORlNNT0RFX0JMSyAwMDYwMDAwCisjZGVmaW5lIE5GU01PREVfUkVHIDAxMDAwMDAKKyNkZWZpbmUgTkZTTU9ERV9MTksgMDEyMDAwMAorI2RlZmluZSBORlNNT0RFX1NPQ0sgMDE0MDAwMAorI2RlZmluZSBORlNNT0RFX0ZJRk8gMDAxMDAwMAorCisjZGVmaW5lIE5GU19NTlRfUFJPR1JBTSAxMDAwMDUKKyNkZWZpbmUgTkZTX01OVF9QT1JUIDYyNworCisgZW51bSBuZnNfc3RhdCB7CisgTkZTX09LID0gMCwKKyBORlNFUlJfUEVSTSA9IDEsCisgTkZTRVJSX05PRU5UID0gMiwKKyBORlNFUlJfSU8gPSA1LAorIE5GU0VSUl9OWElPID0gNiwKKyBORlNFUlJfRUFHQUlOID0gMTEsCisgTkZTRVJSX0FDQ0VTID0gMTMsCisgTkZTRVJSX0VYSVNUID0gMTcsCisgTkZTRVJSX1hERVYgPSAxOCwKKyBORlNFUlJfTk9ERVYgPSAxOSwKKyBORlNFUlJfTk9URElSID0gMjAsCisgTkZTRVJSX0lTRElSID0gMjEsCisgTkZTRVJSX0lOVkFMID0gMjIsCisgTkZTRVJSX0ZCSUcgPSAyNywKKyBORlNFUlJfTk9TUEMgPSAyOCwKKyBORlNFUlJfUk9GUyA9IDMwLAorIE5GU0VSUl9NTElOSyA9IDMxLAorIE5GU0VSUl9PUE5PVFNVUFAgPSA0NSwKKyBORlNFUlJfTkFNRVRPT0xPTkcgPSA2MywKKyBORlNFUlJfTk9URU1QVFkgPSA2NiwKKyBORlNFUlJfRFFVT1QgPSA2OSwKKyBORlNFUlJfU1RBTEUgPSA3MCwKKyBORlNFUlJfUkVNT1RFID0gNzEsCisgTkZTRVJSX1dGTFVTSCA9IDk5LAorIE5GU0VSUl9CQURIQU5ETEUgPSAxMDAwMSwKKyBORlNFUlJfTk9UX1NZTkMgPSAxMDAwMiwKKyBORlNFUlJfQkFEX0NPT0tJRSA9IDEwMDAzLAorIE5GU0VSUl9OT1RTVVBQID0gMTAwMDQsCisgTkZTRVJSX1RPT1NNQUxMID0gMTAwMDUsCisgTkZTRVJSX1NFUlZFUkZBVUxUID0gMTAwMDYsCisgTkZTRVJSX0JBRFRZUEUgPSAxMDAwNywKKyBORlNFUlJfSlVLRUJPWCA9IDEwMDA4LAorIE5GU0VSUl9TQU1FID0gMTAwMDksCisgTkZTRVJSX0RFTklFRCA9IDEwMDEwLAorIE5GU0VSUl9FWFBJUkVEID0gMTAwMTEsCisgTkZTRVJSX0xPQ0tFRCA9IDEwMDEyLAorIE5GU0VSUl9HUkFDRSA9IDEwMDEzLAorIE5GU0VSUl9GSEVYUElSRUQgPSAxMDAxNCwKKyBORlNFUlJfU0hBUkVfREVOSUVEID0gMTAwMTUsCisgTkZTRVJSX1dST05HU0VDID0gMTAwMTYsCisgTkZTRVJSX0NMSURfSU5VU0UgPSAxMDAxNywKKyBORlNFUlJfUkVTT1VSQ0UgPSAxMDAxOCwKKyBORlNFUlJfTU9WRUQgPSAxMDAxOSwKKyBORlNFUlJfTk9GSUxFSEFORExFID0gMTAwMjAsCisgTkZTRVJSX01JTk9SX1ZFUlNfTUlTTUFUQ0ggPSAxMDAyMSwKKyBORlNFUlJfU1RBTEVfQ0xJRU5USUQgPSAxMDAyMiwKKyBORlNFUlJfU1RBTEVfU1RBVEVJRCA9IDEwMDIzLAorIE5GU0VSUl9PTERfU1RBVEVJRCA9IDEwMDI0LAorIE5GU0VSUl9CQURfU1RBVEVJRCA9IDEwMDI1LAorIE5GU0VSUl9CQURfU0VRSUQgPSAxMDAyNiwKKyBORlNFUlJfTk9UX1NBTUUgPSAxMDAyNywKKyBORlNFUlJfTE9DS19SQU5HRSA9IDEwMDI4LAorIE5GU0VSUl9TWU1MSU5LID0gMTAwMjksCisgTkZTRVJSX1JFU1RPUkVGSCA9IDEwMDMwLAorIE5GU0VSUl9MRUFTRV9NT1ZFRCA9IDEwMDMxLAorIE5GU0VSUl9BVFRSTk9UU1VQUCA9IDEwMDMyLAorIE5GU0VSUl9OT19HUkFDRSA9IDEwMDMzLAorIE5GU0VSUl9SRUNMQUlNX0JBRCA9IDEwMDM0LAorIE5GU0VSUl9SRUNMQUlNX0NPTkZMSUNUID0gMTAwMzUsCisgTkZTRVJSX0JBRF9YRFIgPSAxMDAzNiwKKyBORlNFUlJfTE9DS1NfSEVMRCA9IDEwMDM3LAorIE5GU0VSUl9PUEVOTU9ERSA9IDEwMDM4LAorIE5GU0VSUl9CQURPV05FUiA9IDEwMDM5LAorIE5GU0VSUl9CQURDSEFSID0gMTAwNDAsCisgTkZTRVJSX0JBRE5BTUUgPSAxMDA0MSwKKyBORlNFUlJfQkFEX1JBTkdFID0gMTAwNDIsCisgTkZTRVJSX0xPQ0tfTk9UU1VQUCA9IDEwMDQzLAorIE5GU0VSUl9PUF9JTExFR0FMID0gMTAwNDQsCisgTkZTRVJSX0RFQURMT0NLID0gMTAwNDUsCisgTkZTRVJSX0ZJTEVfT1BFTiA9IDEwMDQ2LAorIE5GU0VSUl9BRE1JTl9SRVZPS0VEID0gMTAwNDcsCisgTkZTRVJSX0NCX1BBVEhfRE9XTiA9IDEwMDQ4LAorIE5GU0VSUl9SRVBMQVlfTUUgPSAxMDA0OQorfTsKKworZW51bSBuZnNfZnR5cGUgeworIE5GTk9OID0gMCwKKyBORlJFRyA9IDEsCisgTkZESVIgPSAyLAorIE5GQkxLID0gMywKKyBORkNIUiA9IDQsCisgTkZMTksgPSA1LAorIE5GU09DSyA9IDYsCisgTkZCQUQgPSA3LAorIE5GRklGTyA9IDgKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25mczIuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZnMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJiNWRmMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZnMyLmgKQEAgLTAsMCArMSw3NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfTkZTMl9ICisjZGVmaW5lIF9MSU5VWF9ORlMyX0gKKworI2RlZmluZSBORlMyX1BPUlQgMjA0OQorI2RlZmluZSBORlMyX01BWERBVEEgODE5MgorI2RlZmluZSBORlMyX01BWFBBVEhMRU4gMTAyNAorI2RlZmluZSBORlMyX01BWE5BTUxFTiAyNTUKKyNkZWZpbmUgTkZTMl9NQVhHUk9VUFMgMTYKKyNkZWZpbmUgTkZTMl9GSFNJWkUgMzIKKyNkZWZpbmUgTkZTMl9DT09LSUVTSVpFIDQKKyNkZWZpbmUgTkZTMl9GSUZPX0RFViAoLTEpCisjZGVmaW5lIE5GUzJNT0RFX0ZNVCAwMTcwMDAwCisjZGVmaW5lIE5GUzJNT0RFX0RJUiAwMDQwMDAwCisjZGVmaW5lIE5GUzJNT0RFX0NIUiAwMDIwMDAwCisjZGVmaW5lIE5GUzJNT0RFX0JMSyAwMDYwMDAwCisjZGVmaW5lIE5GUzJNT0RFX1JFRyAwMTAwMDAwCisjZGVmaW5lIE5GUzJNT0RFX0xOSyAwMTIwMDAwCisjZGVmaW5lIE5GUzJNT0RFX1NPQ0sgMDE0MDAwMAorI2RlZmluZSBORlMyTU9ERV9GSUZPIDAwMTAwMDAKKworZW51bSBuZnMyX2Z0eXBlIHsKKyBORjJOT04gPSAwLAorIE5GMlJFRyA9IDEsCisgTkYyRElSID0gMiwKKyBORjJCTEsgPSAzLAorIE5GMkNIUiA9IDQsCisgTkYyTE5LID0gNSwKKyBORjJTT0NLID0gNiwKKyBORjJCQUQgPSA3LAorIE5GMkZJRk8gPSA4Cit9OworCitzdHJ1Y3QgbmZzMl9maCB7CisgY2hhciBkYXRhW05GUzJfRkhTSVpFXTsKK307CisKKyNkZWZpbmUgTkZTMl9WRVJTSU9OIDIKKyNkZWZpbmUgTkZTUFJPQ19OVUxMIDAKKyNkZWZpbmUgTkZTUFJPQ19HRVRBVFRSIDEKKyNkZWZpbmUgTkZTUFJPQ19TRVRBVFRSIDIKKyNkZWZpbmUgTkZTUFJPQ19ST09UIDMKKyNkZWZpbmUgTkZTUFJPQ19MT09LVVAgNAorI2RlZmluZSBORlNQUk9DX1JFQURMSU5LIDUKKyNkZWZpbmUgTkZTUFJPQ19SRUFEIDYKKyNkZWZpbmUgTkZTUFJPQ19XUklURUNBQ0hFIDcKKyNkZWZpbmUgTkZTUFJPQ19XUklURSA4CisjZGVmaW5lIE5GU1BST0NfQ1JFQVRFIDkKKyNkZWZpbmUgTkZTUFJPQ19SRU1PVkUgMTAKKyNkZWZpbmUgTkZTUFJPQ19SRU5BTUUgMTEKKyNkZWZpbmUgTkZTUFJPQ19MSU5LIDEyCisjZGVmaW5lIE5GU1BST0NfU1lNTElOSyAxMworI2RlZmluZSBORlNQUk9DX01LRElSIDE0CisjZGVmaW5lIE5GU1BST0NfUk1ESVIgMTUKKyNkZWZpbmUgTkZTUFJPQ19SRUFERElSIDE2CisjZGVmaW5lIE5GU1BST0NfU1RBVEZTIDE3CisKKyNkZWZpbmUgTkZTX01OVF9QUk9HUkFNIDEwMDAwNQorI2RlZmluZSBORlNfTU5UX1ZFUlNJT04gMQorI2RlZmluZSBNTlRQUk9DX05VTEwgMAorI2RlZmluZSBNTlRQUk9DX01OVCAxCisjZGVmaW5lIE1OVFBST0NfVU1OVCAzCisjZGVmaW5lIE1OVFBST0NfVU1OVEFMTCA0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25mczMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZnMzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMwMzQ1OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZnMzLmgKQEAgLTAsMCArMSwxMDggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX05GUzNfSAorI2RlZmluZSBfTElOVVhfTkZTM19ICisKKyNkZWZpbmUgTkZTM19QT1JUIDIwNDkKKyNkZWZpbmUgTkZTM19NQVhEQVRBIDMyNzY4CisjZGVmaW5lIE5GUzNfTUFYUEFUSExFTiBQQVRIX01BWAorI2RlZmluZSBORlMzX01BWE5BTUxFTiBOQU1FX01BWAorI2RlZmluZSBORlMzX01BWEdST1VQUyAxNgorI2RlZmluZSBORlMzX0ZIU0laRSA2NAorI2RlZmluZSBORlMzX0NPT0tJRVNJWkUgNAorI2RlZmluZSBORlMzX0ZJRk9fREVWICgtMSkKKyNkZWZpbmUgTkZTM01PREVfRk1UIDAxNzAwMDAKKyNkZWZpbmUgTkZTM01PREVfRElSIDAwNDAwMDAKKyNkZWZpbmUgTkZTM01PREVfQ0hSIDAwMjAwMDAKKyNkZWZpbmUgTkZTM01PREVfQkxLIDAwNjAwMDAKKyNkZWZpbmUgTkZTM01PREVfUkVHIDAxMDAwMDAKKyNkZWZpbmUgTkZTM01PREVfTE5LIDAxMjAwMDAKKyNkZWZpbmUgTkZTM01PREVfU09DSyAwMTQwMDAwCisjZGVmaW5lIE5GUzNNT0RFX0ZJRk8gMDAxMDAwMAorCisjZGVmaW5lIE5GUzNfQUNDRVNTX1JFQUQgMHgwMDAxCisjZGVmaW5lIE5GUzNfQUNDRVNTX0xPT0tVUCAweDAwMDIKKyNkZWZpbmUgTkZTM19BQ0NFU1NfTU9ESUZZIDB4MDAwNAorI2RlZmluZSBORlMzX0FDQ0VTU19FWFRFTkQgMHgwMDA4CisjZGVmaW5lIE5GUzNfQUNDRVNTX0RFTEVURSAweDAwMTAKKyNkZWZpbmUgTkZTM19BQ0NFU1NfRVhFQ1VURSAweDAwMjAKKyNkZWZpbmUgTkZTM19BQ0NFU1NfRlVMTCAweDAwM2YKKworZW51bSBuZnMzX2NyZWF0ZW1vZGUgeworIE5GUzNfQ1JFQVRFX1VOQ0hFQ0tFRCA9IDAsCisgTkZTM19DUkVBVEVfR1VBUkRFRCA9IDEsCisgTkZTM19DUkVBVEVfRVhDTFVTSVZFID0gMgorfTsKKworI2RlZmluZSBORlMzX0ZTRl9MSU5LIDB4MDAwMQorI2RlZmluZSBORlMzX0ZTRl9TWU1MSU5LIDB4MDAwMgorI2RlZmluZSBORlMzX0ZTRl9IT01PR0VORU9VUyAweDAwMDgKKyNkZWZpbmUgTkZTM19GU0ZfQ0FOU0VUVElNRSAweDAwMTAKKworI2RlZmluZSBORlMzX0ZTRl9ERUZBVUxUIDB4MDAxQgorI2RlZmluZSBORlMzX0ZTRl9CSUxMWUJPWSAweDAwMTgKKyNkZWZpbmUgTkZTM19GU0ZfUkVBRE9OTFkgMHgwMDA4CisKK2VudW0gbmZzM19mdHlwZSB7CisgTkYzTk9OID0gMCwKKyBORjNSRUcgPSAxLAorIE5GM0RJUiA9IDIsCisgTkYzQkxLID0gMywKKyBORjNDSFIgPSA0LAorIE5GM0xOSyA9IDUsCisgTkYzU09DSyA9IDYsCisgTkYzRklGTyA9IDcsCisgTkYzQkFEID0gOAorfTsKKworc3RydWN0IG5mczNfZmggeworIHVuc2lnbmVkIHNob3J0IHNpemU7CisgdW5zaWduZWQgY2hhciBkYXRhW05GUzNfRkhTSVpFXTsKK307CisKKyNkZWZpbmUgTkZTM19WRVJTSU9OIDMKKyNkZWZpbmUgTkZTM1BST0NfTlVMTCAwCisjZGVmaW5lIE5GUzNQUk9DX0dFVEFUVFIgMQorI2RlZmluZSBORlMzUFJPQ19TRVRBVFRSIDIKKyNkZWZpbmUgTkZTM1BST0NfTE9PS1VQIDMKKyNkZWZpbmUgTkZTM1BST0NfQUNDRVNTIDQKKyNkZWZpbmUgTkZTM1BST0NfUkVBRExJTksgNQorI2RlZmluZSBORlMzUFJPQ19SRUFEIDYKKyNkZWZpbmUgTkZTM1BST0NfV1JJVEUgNworI2RlZmluZSBORlMzUFJPQ19DUkVBVEUgOAorI2RlZmluZSBORlMzUFJPQ19NS0RJUiA5CisjZGVmaW5lIE5GUzNQUk9DX1NZTUxJTksgMTAKKyNkZWZpbmUgTkZTM1BST0NfTUtOT0QgMTEKKyNkZWZpbmUgTkZTM1BST0NfUkVNT1ZFIDEyCisjZGVmaW5lIE5GUzNQUk9DX1JNRElSIDEzCisjZGVmaW5lIE5GUzNQUk9DX1JFTkFNRSAxNAorI2RlZmluZSBORlMzUFJPQ19MSU5LIDE1CisjZGVmaW5lIE5GUzNQUk9DX1JFQURESVIgMTYKKyNkZWZpbmUgTkZTM1BST0NfUkVBRERJUlBMVVMgMTcKKyNkZWZpbmUgTkZTM1BST0NfRlNTVEFUIDE4CisjZGVmaW5lIE5GUzNQUk9DX0ZTSU5GTyAxOQorI2RlZmluZSBORlMzUFJPQ19QQVRIQ09ORiAyMAorI2RlZmluZSBORlMzUFJPQ19DT01NSVQgMjEKKworI2RlZmluZSBORlNfTU5UM19QUk9HUkFNIDEwMDAwNQorI2RlZmluZSBORlNfTU5UM19WRVJTSU9OIDMKKyNkZWZpbmUgTU9VTlRQUk9DM19OVUxMIDAKKyNkZWZpbmUgTU9VTlRQUk9DM19NTlQgMQorI2RlZmluZSBNT1VOVFBST0MzX1VNTlQgMworI2RlZmluZSBNT1VOVFBST0MzX1VNTlRBTEwgNAorCisjaWZkZWYgTkZTX05FRURfS0VSTkVMX1RZUEVTCisKKyNkZWZpbmUgTkZTM19QT1NUX09QX0FUVFJfV09SRFMgMjIKKworI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZnM0LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmZzNC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlOTVlNDUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmZzNC5oCkBAIC0wLDAgKzEsOTkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX05GUzRfSAorI2RlZmluZSBfTElOVVhfTkZTNF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjZGVmaW5lIE5GUzRfVkVSSUZJRVJfU0laRSA4CisjZGVmaW5lIE5GUzRfRkhTSVpFIDEyOAorI2RlZmluZSBORlM0X01BWFBBVEhMRU4gUEFUSF9NQVgKKyNkZWZpbmUgTkZTNF9NQVhOQU1MRU4gTkFNRV9NQVgKKworI2RlZmluZSBORlM0X0FDQ0VTU19SRUFEIDB4MDAwMQorI2RlZmluZSBORlM0X0FDQ0VTU19MT09LVVAgMHgwMDAyCisjZGVmaW5lIE5GUzRfQUNDRVNTX01PRElGWSAweDAwMDQKKyNkZWZpbmUgTkZTNF9BQ0NFU1NfRVhURU5EIDB4MDAwOAorI2RlZmluZSBORlM0X0FDQ0VTU19ERUxFVEUgMHgwMDEwCisjZGVmaW5lIE5GUzRfQUNDRVNTX0VYRUNVVEUgMHgwMDIwCisKKyNkZWZpbmUgTkZTNF9GSF9QRVJTSVNURU5UIDB4MDAwMAorI2RlZmluZSBORlM0X0ZIX05PRVhQSVJFX1dJVEhfT1BFTiAweDAwMDEKKyNkZWZpbmUgTkZTNF9GSF9WT0xBVElMRV9BTlkgMHgwMDAyCisjZGVmaW5lIE5GUzRfRkhfVk9MX01JR1JBVElPTiAweDAwMDQKKyNkZWZpbmUgTkZTNF9GSF9WT0xfUkVOQU1FIDB4MDAwOAorCisjZGVmaW5lIE5GUzRfT1BFTl9SRVNVTFRfQ09ORklSTSAweDAwMDIKKyNkZWZpbmUgTkZTNF9PUEVOX1JFU1VMVF9MT0NLVFlQRV9QT1NJWCAweDAwMDQKKworI2RlZmluZSBORlM0X1NIQVJFX0FDQ0VTU19SRUFEIDB4MDAwMQorI2RlZmluZSBORlM0X1NIQVJFX0FDQ0VTU19XUklURSAweDAwMDIKKyNkZWZpbmUgTkZTNF9TSEFSRV9BQ0NFU1NfQk9USCAweDAwMDMKKyNkZWZpbmUgTkZTNF9TSEFSRV9ERU5ZX1JFQUQgMHgwMDAxCisjZGVmaW5lIE5GUzRfU0hBUkVfREVOWV9XUklURSAweDAwMDIKKyNkZWZpbmUgTkZTNF9TSEFSRV9ERU5ZX0JPVEggMHgwMDAzCisKKyNkZWZpbmUgTkZTNF9TRVRfVE9fU0VSVkVSX1RJTUUgMAorI2RlZmluZSBORlM0X1NFVF9UT19DTElFTlRfVElNRSAxCisKKyNkZWZpbmUgTkZTNF9BQ0VfQUNDRVNTX0FMTE9XRURfQUNFX1RZUEUgMAorI2RlZmluZSBORlM0X0FDRV9BQ0NFU1NfREVOSUVEX0FDRV9UWVBFIDEKKyNkZWZpbmUgTkZTNF9BQ0VfU1lTVEVNX0FVRElUX0FDRV9UWVBFIDIKKyNkZWZpbmUgTkZTNF9BQ0VfU1lTVEVNX0FMQVJNX0FDRV9UWVBFIDMKKworI2RlZmluZSBBQ0w0X1NVUFBPUlRfQUxMT1dfQUNMIDB4MDEKKyNkZWZpbmUgQUNMNF9TVVBQT1JUX0RFTllfQUNMIDB4MDIKKyNkZWZpbmUgQUNMNF9TVVBQT1JUX0FVRElUX0FDTCAweDA0CisjZGVmaW5lIEFDTDRfU1VQUE9SVF9BTEFSTV9BQ0wgMHgwOAorCisjZGVmaW5lIE5GUzRfQUNFX0ZJTEVfSU5IRVJJVF9BQ0UgMHgwMDAwMDAwMQorI2RlZmluZSBORlM0X0FDRV9ESVJFQ1RPUllfSU5IRVJJVF9BQ0UgMHgwMDAwMDAwMgorI2RlZmluZSBORlM0X0FDRV9OT19QUk9QQUdBVEVfSU5IRVJJVF9BQ0UgMHgwMDAwMDAwNAorI2RlZmluZSBORlM0X0FDRV9JTkhFUklUX09OTFlfQUNFIDB4MDAwMDAwMDgKKyNkZWZpbmUgTkZTNF9BQ0VfU1VDQ0VTU0ZVTF9BQ0NFU1NfQUNFX0ZMQUcgMHgwMDAwMDAxMAorI2RlZmluZSBORlM0X0FDRV9GQUlMRURfQUNDRVNTX0FDRV9GTEFHIDB4MDAwMDAwMjAKKyNkZWZpbmUgTkZTNF9BQ0VfSURFTlRJRklFUl9HUk9VUCAweDAwMDAwMDQwCisjZGVmaW5lIE5GUzRfQUNFX09XTkVSIDB4MDAwMDAwODAKKyNkZWZpbmUgTkZTNF9BQ0VfR1JPVVAgMHgwMDAwMDEwMAorI2RlZmluZSBORlM0X0FDRV9FVkVSWU9ORSAweDAwMDAwMjAwCisKKyNkZWZpbmUgTkZTNF9BQ0VfUkVBRF9EQVRBIDB4MDAwMDAwMDEKKyNkZWZpbmUgTkZTNF9BQ0VfTElTVF9ESVJFQ1RPUlkgMHgwMDAwMDAwMQorI2RlZmluZSBORlM0X0FDRV9XUklURV9EQVRBIDB4MDAwMDAwMDIKKyNkZWZpbmUgTkZTNF9BQ0VfQUREX0ZJTEUgMHgwMDAwMDAwMgorI2RlZmluZSBORlM0X0FDRV9BUFBFTkRfREFUQSAweDAwMDAwMDA0CisjZGVmaW5lIE5GUzRfQUNFX0FERF9TVUJESVJFQ1RPUlkgMHgwMDAwMDAwNAorI2RlZmluZSBORlM0X0FDRV9SRUFEX05BTUVEX0FUVFJTIDB4MDAwMDAwMDgKKyNkZWZpbmUgTkZTNF9BQ0VfV1JJVEVfTkFNRURfQVRUUlMgMHgwMDAwMDAxMAorI2RlZmluZSBORlM0X0FDRV9FWEVDVVRFIDB4MDAwMDAwMjAKKyNkZWZpbmUgTkZTNF9BQ0VfREVMRVRFX0NISUxEIDB4MDAwMDAwNDAKKyNkZWZpbmUgTkZTNF9BQ0VfUkVBRF9BVFRSSUJVVEVTIDB4MDAwMDAwODAKKyNkZWZpbmUgTkZTNF9BQ0VfV1JJVEVfQVRUUklCVVRFUyAweDAwMDAwMTAwCisjZGVmaW5lIE5GUzRfQUNFX0RFTEVURSAweDAwMDEwMDAwCisjZGVmaW5lIE5GUzRfQUNFX1JFQURfQUNMIDB4MDAwMjAwMDAKKyNkZWZpbmUgTkZTNF9BQ0VfV1JJVEVfQUNMIDB4MDAwNDAwMDAKKyNkZWZpbmUgTkZTNF9BQ0VfV1JJVEVfT1dORVIgMHgwMDA4MDAwMAorI2RlZmluZSBORlM0X0FDRV9TWU5DSFJPTklaRSAweDAwMTAwMDAwCisjZGVmaW5lIE5GUzRfQUNFX0dFTkVSSUNfUkVBRCAweDAwMTIwMDgxCisjZGVmaW5lIE5GUzRfQUNFX0dFTkVSSUNfV1JJVEUgMHgwMDE2MDEwNgorI2RlZmluZSBORlM0X0FDRV9HRU5FUklDX0VYRUNVVEUgMHgwMDEyMDBBMAorI2RlZmluZSBORlM0X0FDRV9NQVNLX0FMTCAweDAwMUYwMUZGCisKK2VudW0gbmZzNF9hY2xfd2hvdHlwZSB7CisgTkZTNF9BQ0xfV0hPX05BTUVEID0gMCwKKyBORlM0X0FDTF9XSE9fT1dORVIsCisgTkZTNF9BQ0xfV0hPX0dST1VQLAorIE5GUzRfQUNMX1dIT19FVkVSWU9ORSwKK307CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmZzX3hkci5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25mc194ZHIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGZlMjYyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25mc194ZHIuaApAQCAtMCwwICsxLDU1NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfTkZTX1hEUl9ICisjZGVmaW5lIF9MSU5VWF9ORlNfWERSX0gKKworI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy94cHJ0Lmg+CisjaW5jbHVkZSA8bGludXgvbmZzYWNsLmg+CisKKyNkZWZpbmUgTkZTX01BWF9GSUxFX0lPX1NJWkUgKDEwNDg1NzZVKQorI2RlZmluZSBORlNfREVGX0ZJTEVfSU9fU0laRSAoNDA5NlUpCisjZGVmaW5lIE5GU19NSU5fRklMRV9JT19TSVpFICgxMDI0VSkKKworc3RydWN0IG5mc19mc2lkIHsKKyB1aW50NjRfdCBtYWpvcjsKKyB1aW50NjRfdCBtaW5vcjsKK307CisKKyNkZWZpbmUgTkZTX0FUVFJfV0NDIDB4MDAwMSAgCisjZGVmaW5lIE5GU19BVFRSX0ZBVFRSIDB4MDAwMiAgCisjZGVmaW5lIE5GU19BVFRSX0ZBVFRSX1YzIDB4MDAwNCAgCisjZGVmaW5lIE5GU19BVFRSX0ZBVFRSX1Y0IDB4MDAwOCAgCisjZGVmaW5lIE5GU19BVFRSX0ZBVFRSX1Y0X1JFRkVSUkFMIDB4MDAxMCAgCisKK3N0cnVjdCBuZnNfZnNpbmZvIHsKKyBzdHJ1Y3QgbmZzX2ZhdHRyICpmYXR0cjsKKyBfX3UzMiBydG1heDsKKyBfX3UzMiBydHByZWY7CisgX191MzIgcnRtdWx0OworIF9fdTMyIHd0bWF4OworIF9fdTMyIHd0cHJlZjsKKyBfX3UzMiB3dG11bHQ7CisgX191MzIgZHRwcmVmOworIF9fdTY0IG1heGZpbGVzaXplOworIF9fdTMyIGxlYXNlX3RpbWU7Cit9OworCitzdHJ1Y3QgbmZzX2Zzc3RhdCB7Cisgc3RydWN0IG5mc19mYXR0ciAqZmF0dHI7CisgX191NjQgdGJ5dGVzOworIF9fdTY0IGZieXRlczsKKyBfX3U2NCBhYnl0ZXM7CisgX191NjQgdGZpbGVzOworIF9fdTY0IGZmaWxlczsKKyBfX3U2NCBhZmlsZXM7Cit9OworCitzdHJ1Y3QgbmZzMl9mc3N0YXQgeworIF9fdTMyIHRzaXplOworIF9fdTMyIGJzaXplOworIF9fdTMyIGJsb2NrczsKKyBfX3UzMiBiZnJlZTsKKyBfX3UzMiBiYXZhaWw7Cit9OworCitzdHJ1Y3QgbmZzX3BhdGhjb25mIHsKKyBzdHJ1Y3QgbmZzX2ZhdHRyICpmYXR0cjsKKyBfX3UzMiBtYXhfbGluazsKKyBfX3UzMiBtYXhfbmFtZWxlbjsKK307CisKK3N0cnVjdCBuZnM0X2NoYW5nZV9pbmZvIHsKKyB1MzIgYXRvbWljOworIHU2NCBiZWZvcmU7CisgdTY0IGFmdGVyOworfTsKKworc3RydWN0IG5mc19zZXFpZDsKKworc3RydWN0IG5mc19vcGVuYXJncyB7CisgY29uc3Qgc3RydWN0IG5mc19maCAqIGZoOworIHN0cnVjdCBuZnNfc2VxaWQgKiBzZXFpZDsKKyBpbnQgb3Blbl9mbGFnczsKKyBfX3U2NCBjbGllbnRpZDsKKyBfX3UzMiBpZDsKKyB1bmlvbiB7Cisgc3RydWN0IGlhdHRyICogYXR0cnM7CisgbmZzNF92ZXJpZmllciB2ZXJpZmllcjsKKyBuZnM0X3N0YXRlaWQgZGVsZWdhdGlvbjsKKyBpbnQgZGVsZWdhdGlvbl90eXBlOworIH0gdTsKKyBjb25zdCBzdHJ1Y3QgcXN0ciAqIG5hbWU7CisgY29uc3Qgc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlcjsKKyBjb25zdCB1MzIgKiBiaXRtYXNrOworIF9fdTMyIGNsYWltOworfTsKKworc3RydWN0IG5mc19vcGVucmVzIHsKKyBuZnM0X3N0YXRlaWQgc3RhdGVpZDsKKyBzdHJ1Y3QgbmZzX2ZoIGZoOworIHN0cnVjdCBuZnM0X2NoYW5nZV9pbmZvIGNpbmZvOworIF9fdTMyIHJmbGFnczsKKyBzdHJ1Y3QgbmZzX2ZhdHRyICogZl9hdHRyOworIHN0cnVjdCBuZnNfZmF0dHIgKiBkaXJfYXR0cjsKKyBjb25zdCBzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyOworIGludCBkZWxlZ2F0aW9uX3R5cGU7CisgbmZzNF9zdGF0ZWlkIGRlbGVnYXRpb247CisgX191MzIgZG9fcmVjYWxsOworIF9fdTY0IG1heHNpemU7Cit9OworCitzdHJ1Y3QgbmZzX29wZW5fY29uZmlybWFyZ3MgeworIGNvbnN0IHN0cnVjdCBuZnNfZmggKiBmaDsKKyBuZnM0X3N0YXRlaWQgKiBzdGF0ZWlkOworIHN0cnVjdCBuZnNfc2VxaWQgKiBzZXFpZDsKK307CisKK3N0cnVjdCBuZnNfb3Blbl9jb25maXJtcmVzIHsKKyBuZnM0X3N0YXRlaWQgc3RhdGVpZDsKK307CisKK3N0cnVjdCBuZnNfY2xvc2VhcmdzIHsKKyBzdHJ1Y3QgbmZzX2ZoICogZmg7CisgbmZzNF9zdGF0ZWlkICogc3RhdGVpZDsKKyBzdHJ1Y3QgbmZzX3NlcWlkICogc2VxaWQ7CisgaW50IG9wZW5fZmxhZ3M7CisgY29uc3QgdTMyICogYml0bWFzazsKK307CisKK3N0cnVjdCBuZnNfY2xvc2VyZXMgeworIG5mczRfc3RhdGVpZCBzdGF0ZWlkOworIHN0cnVjdCBuZnNfZmF0dHIgKiBmYXR0cjsKKyBjb25zdCBzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyOworfTsKKworc3RydWN0IG5mc19sb3duZXIgeworIF9fdTY0IGNsaWVudGlkOworIHUzMiBpZDsKK307CisKK3N0cnVjdCBuZnNfbG9ja19hcmdzIHsKKyBzdHJ1Y3QgbmZzX2ZoICogZmg7Cisgc3RydWN0IGZpbGVfbG9jayAqIGZsOworIHN0cnVjdCBuZnNfc2VxaWQgKiBsb2NrX3NlcWlkOworIG5mczRfc3RhdGVpZCAqIGxvY2tfc3RhdGVpZDsKKyBzdHJ1Y3QgbmZzX3NlcWlkICogb3Blbl9zZXFpZDsKKyBuZnM0X3N0YXRlaWQgKiBvcGVuX3N0YXRlaWQ7Cisgc3RydWN0IG5mc19sb3duZXIgbG9ja19vd25lcjsKKyB1bnNpZ25lZCBjaGFyIGJsb2NrIDogMTsKKyB1bnNpZ25lZCBjaGFyIHJlY2xhaW0gOiAxOworIHVuc2lnbmVkIGNoYXIgbmV3X2xvY2tfb3duZXIgOiAxOworfTsKKworc3RydWN0IG5mc19sb2NrX3JlcyB7CisgbmZzNF9zdGF0ZWlkIHN0YXRlaWQ7Cit9OworCitzdHJ1Y3QgbmZzX2xvY2t1X2FyZ3MgeworIHN0cnVjdCBuZnNfZmggKiBmaDsKKyBzdHJ1Y3QgZmlsZV9sb2NrICogZmw7Cisgc3RydWN0IG5mc19zZXFpZCAqIHNlcWlkOworIG5mczRfc3RhdGVpZCAqIHN0YXRlaWQ7Cit9OworCitzdHJ1Y3QgbmZzX2xvY2t1X3JlcyB7CisgbmZzNF9zdGF0ZWlkIHN0YXRlaWQ7Cit9OworCitzdHJ1Y3QgbmZzX2xvY2t0X2FyZ3MgeworIHN0cnVjdCBuZnNfZmggKiBmaDsKKyBzdHJ1Y3QgZmlsZV9sb2NrICogZmw7Cisgc3RydWN0IG5mc19sb3duZXIgbG9ja19vd25lcjsKK307CisKK3N0cnVjdCBuZnNfbG9ja3RfcmVzIHsKKyBzdHJ1Y3QgZmlsZV9sb2NrICogZGVuaWVkOworfTsKKworc3RydWN0IG5mczRfZGVsZWdyZXR1cm5hcmdzIHsKKyBjb25zdCBzdHJ1Y3QgbmZzX2ZoICpmaGFuZGxlOworIGNvbnN0IG5mczRfc3RhdGVpZCAqc3RhdGVpZDsKKyBjb25zdCB1MzIgKiBiaXRtYXNrOworfTsKKworc3RydWN0IG5mczRfZGVsZWdyZXR1cm5yZXMgeworIHN0cnVjdCBuZnNfZmF0dHIgKiBmYXR0cjsKKyBjb25zdCBzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyOworfTsKKworc3RydWN0IG5mc19yZWFkYXJncyB7Cisgc3RydWN0IG5mc19maCAqIGZoOworIHN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjb250ZXh0OworIF9fdTY0IG9mZnNldDsKKyBfX3UzMiBjb3VudDsKKyB1bnNpZ25lZCBpbnQgcGdiYXNlOworIHN0cnVjdCBwYWdlICoqIHBhZ2VzOworfTsKKworc3RydWN0IG5mc19yZWFkcmVzIHsKKyBzdHJ1Y3QgbmZzX2ZhdHRyICogZmF0dHI7CisgX191MzIgY291bnQ7CisgaW50IGVvZjsKK307CisKK3N0cnVjdCBuZnNfd3JpdGVhcmdzIHsKKyBzdHJ1Y3QgbmZzX2ZoICogZmg7Cisgc3RydWN0IG5mc19vcGVuX2NvbnRleHQgKmNvbnRleHQ7CisgX191NjQgb2Zmc2V0OworIF9fdTMyIGNvdW50OworIGVudW0gbmZzM19zdGFibGVfaG93IHN0YWJsZTsKKyB1bnNpZ25lZCBpbnQgcGdiYXNlOworIHN0cnVjdCBwYWdlICoqIHBhZ2VzOworIGNvbnN0IHUzMiAqIGJpdG1hc2s7Cit9OworCitzdHJ1Y3QgbmZzX3dyaXRldmVyZiB7CisgZW51bSBuZnMzX3N0YWJsZV9ob3cgY29tbWl0dGVkOworIF9fdTMyIHZlcmlmaWVyWzJdOworfTsKKworc3RydWN0IG5mc193cml0ZXJlcyB7Cisgc3RydWN0IG5mc19mYXR0ciAqIGZhdHRyOworIHN0cnVjdCBuZnNfd3JpdGV2ZXJmICogdmVyZjsKKyBfX3UzMiBjb3VudDsKKyBjb25zdCBzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyOworfTsKKworc3RydWN0IG5mc19lbnRyeSB7CisgX191NjQgaW5vOworIF9fdTY0IGNvb2tpZSwKKyBwcmV2X2Nvb2tpZTsKKyBjb25zdCBjaGFyICogbmFtZTsKKyB1bnNpZ25lZCBpbnQgbGVuOworIGludCBlb2Y7Cisgc3RydWN0IG5mc19maCAqIGZoOworIHN0cnVjdCBuZnNfZmF0dHIgKiBmYXR0cjsKK307CisKK3N0cnVjdCBuZnNfc2F0dHJhcmdzIHsKKyBzdHJ1Y3QgbmZzX2ZoICogZmg7Cisgc3RydWN0IGlhdHRyICogc2F0dHI7Cit9OworCitzdHJ1Y3QgbmZzX2Rpcm9wYXJncyB7Cisgc3RydWN0IG5mc19maCAqIGZoOworIGNvbnN0IGNoYXIgKiBuYW1lOworIHVuc2lnbmVkIGludCBsZW47Cit9OworCitzdHJ1Y3QgbmZzX2NyZWF0ZWFyZ3MgeworIHN0cnVjdCBuZnNfZmggKiBmaDsKKyBjb25zdCBjaGFyICogbmFtZTsKKyB1bnNpZ25lZCBpbnQgbGVuOworIHN0cnVjdCBpYXR0ciAqIHNhdHRyOworfTsKKworc3RydWN0IG5mc19yZW5hbWVhcmdzIHsKKyBzdHJ1Y3QgbmZzX2ZoICogZnJvbWZoOworIGNvbnN0IGNoYXIgKiBmcm9tbmFtZTsKKyB1bnNpZ25lZCBpbnQgZnJvbWxlbjsKKyBzdHJ1Y3QgbmZzX2ZoICogdG9maDsKKyBjb25zdCBjaGFyICogdG9uYW1lOworIHVuc2lnbmVkIGludCB0b2xlbjsKK307CisKK3N0cnVjdCBuZnNfc2V0YXR0cmFyZ3MgeworIHN0cnVjdCBuZnNfZmggKiBmaDsKKyBuZnM0X3N0YXRlaWQgc3RhdGVpZDsKKyBzdHJ1Y3QgaWF0dHIgKiBpYXA7CisgY29uc3Qgc3RydWN0IG5mc19zZXJ2ZXIgKiBzZXJ2ZXI7CisgY29uc3QgdTMyICogYml0bWFzazsKK307CisKK3N0cnVjdCBuZnNfc2V0YWNsYXJncyB7Cisgc3RydWN0IG5mc19maCAqIGZoOworIHNpemVfdCBhY2xfbGVuOworIHVuc2lnbmVkIGludCBhY2xfcGdiYXNlOworIHN0cnVjdCBwYWdlICoqIGFjbF9wYWdlczsKK307CisKK3N0cnVjdCBuZnNfZ2V0YWNsYXJncyB7Cisgc3RydWN0IG5mc19maCAqIGZoOworIHNpemVfdCBhY2xfbGVuOworIHVuc2lnbmVkIGludCBhY2xfcGdiYXNlOworIHN0cnVjdCBwYWdlICoqIGFjbF9wYWdlczsKK307CisKK3N0cnVjdCBuZnNfc2V0YXR0cnJlcyB7Cisgc3RydWN0IG5mc19mYXR0ciAqIGZhdHRyOworIGNvbnN0IHN0cnVjdCBuZnNfc2VydmVyICogc2VydmVyOworfTsKKworc3RydWN0IG5mc19saW5rYXJncyB7Cisgc3RydWN0IG5mc19maCAqIGZyb21maDsKKyBzdHJ1Y3QgbmZzX2ZoICogdG9maDsKKyBjb25zdCBjaGFyICogdG9uYW1lOworIHVuc2lnbmVkIGludCB0b2xlbjsKK307CisKK3N0cnVjdCBuZnNfc3ltbGlua2FyZ3MgeworIHN0cnVjdCBuZnNfZmggKiBmcm9tZmg7CisgY29uc3QgY2hhciAqIGZyb21uYW1lOworIHVuc2lnbmVkIGludCBmcm9tbGVuOworIGNvbnN0IGNoYXIgKiB0b3BhdGg7CisgdW5zaWduZWQgaW50IHRvbGVuOworIHN0cnVjdCBpYXR0ciAqIHNhdHRyOworfTsKKworc3RydWN0IG5mc19yZWFkZGlyYXJncyB7Cisgc3RydWN0IG5mc19maCAqIGZoOworIF9fdTMyIGNvb2tpZTsKKyB1bnNpZ25lZCBpbnQgY291bnQ7Cisgc3RydWN0IHBhZ2UgKiogcGFnZXM7Cit9OworCitzdHJ1Y3QgbmZzM19nZXRhY2xhcmdzIHsKKyBzdHJ1Y3QgbmZzX2ZoICogZmg7CisgaW50IG1hc2s7Cisgc3RydWN0IHBhZ2UgKiogcGFnZXM7Cit9OworCitzdHJ1Y3QgbmZzM19zZXRhY2xhcmdzIHsKKyBzdHJ1Y3QgaW5vZGUgKiBpbm9kZTsKKyBpbnQgbWFzazsKKyBzdHJ1Y3QgcG9zaXhfYWNsICogYWNsX2FjY2VzczsKKyBzdHJ1Y3QgcG9zaXhfYWNsICogYWNsX2RlZmF1bHQ7Cisgc3RydWN0IHBhZ2UgKiogcGFnZXM7Cit9OworCitzdHJ1Y3QgbmZzX2Rpcm9wb2sgeworIHN0cnVjdCBuZnNfZmggKiBmaDsKKyBzdHJ1Y3QgbmZzX2ZhdHRyICogZmF0dHI7Cit9OworCitzdHJ1Y3QgbmZzX3JlYWRsaW5rYXJncyB7Cisgc3RydWN0IG5mc19maCAqIGZoOworIHVuc2lnbmVkIGludCBwZ2Jhc2U7CisgdW5zaWduZWQgaW50IHBnbGVuOworIHN0cnVjdCBwYWdlICoqIHBhZ2VzOworfTsKKworc3RydWN0IG5mczNfc2F0dHJhcmdzIHsKKyBzdHJ1Y3QgbmZzX2ZoICogZmg7Cisgc3RydWN0IGlhdHRyICogc2F0dHI7CisgdW5zaWduZWQgaW50IGd1YXJkOworIHN0cnVjdCB0aW1lc3BlYyBndWFyZHRpbWU7Cit9OworCitzdHJ1Y3QgbmZzM19kaXJvcGFyZ3MgeworIHN0cnVjdCBuZnNfZmggKiBmaDsKKyBjb25zdCBjaGFyICogbmFtZTsKKyB1bnNpZ25lZCBpbnQgbGVuOworfTsKKworc3RydWN0IG5mczNfYWNjZXNzYXJncyB7Cisgc3RydWN0IG5mc19maCAqIGZoOworIF9fdTMyIGFjY2VzczsKK307CisKK3N0cnVjdCBuZnMzX2NyZWF0ZWFyZ3MgeworIHN0cnVjdCBuZnNfZmggKiBmaDsKKyBjb25zdCBjaGFyICogbmFtZTsKKyB1bnNpZ25lZCBpbnQgbGVuOworIHN0cnVjdCBpYXR0ciAqIHNhdHRyOworIGVudW0gbmZzM19jcmVhdGVtb2RlIGNyZWF0ZW1vZGU7CisgX191MzIgdmVyaWZpZXJbMl07Cit9OworCitzdHJ1Y3QgbmZzM19ta2RpcmFyZ3MgeworIHN0cnVjdCBuZnNfZmggKiBmaDsKKyBjb25zdCBjaGFyICogbmFtZTsKKyB1bnNpZ25lZCBpbnQgbGVuOworIHN0cnVjdCBpYXR0ciAqIHNhdHRyOworfTsKKworc3RydWN0IG5mczNfc3ltbGlua2FyZ3MgeworIHN0cnVjdCBuZnNfZmggKiBmcm9tZmg7CisgY29uc3QgY2hhciAqIGZyb21uYW1lOworIHVuc2lnbmVkIGludCBmcm9tbGVuOworIGNvbnN0IGNoYXIgKiB0b3BhdGg7CisgdW5zaWduZWQgaW50IHRvbGVuOworIHN0cnVjdCBpYXR0ciAqIHNhdHRyOworfTsKKworc3RydWN0IG5mczNfbWtub2RhcmdzIHsKKyBzdHJ1Y3QgbmZzX2ZoICogZmg7CisgY29uc3QgY2hhciAqIG5hbWU7CisgdW5zaWduZWQgaW50IGxlbjsKKyBlbnVtIG5mczNfZnR5cGUgdHlwZTsKKyBzdHJ1Y3QgaWF0dHIgKiBzYXR0cjsKKyBkZXZfdCByZGV2OworfTsKKworc3RydWN0IG5mczNfcmVuYW1lYXJncyB7Cisgc3RydWN0IG5mc19maCAqIGZyb21maDsKKyBjb25zdCBjaGFyICogZnJvbW5hbWU7CisgdW5zaWduZWQgaW50IGZyb21sZW47Cisgc3RydWN0IG5mc19maCAqIHRvZmg7CisgY29uc3QgY2hhciAqIHRvbmFtZTsKKyB1bnNpZ25lZCBpbnQgdG9sZW47Cit9OworCitzdHJ1Y3QgbmZzM19saW5rYXJncyB7Cisgc3RydWN0IG5mc19maCAqIGZyb21maDsKKyBzdHJ1Y3QgbmZzX2ZoICogdG9maDsKKyBjb25zdCBjaGFyICogdG9uYW1lOworIHVuc2lnbmVkIGludCB0b2xlbjsKK307CisKK3N0cnVjdCBuZnMzX3JlYWRkaXJhcmdzIHsKKyBzdHJ1Y3QgbmZzX2ZoICogZmg7CisgX191NjQgY29va2llOworIF9fdTMyIHZlcmZbMl07CisgaW50IHBsdXM7CisgdW5zaWduZWQgaW50IGNvdW50OworIHN0cnVjdCBwYWdlICoqIHBhZ2VzOworfTsKKworc3RydWN0IG5mczNfZGlyb3ByZXMgeworIHN0cnVjdCBuZnNfZmF0dHIgKiBkaXJfYXR0cjsKKyBzdHJ1Y3QgbmZzX2ZoICogZmg7Cisgc3RydWN0IG5mc19mYXR0ciAqIGZhdHRyOworfTsKKworc3RydWN0IG5mczNfYWNjZXNzcmVzIHsKKyBzdHJ1Y3QgbmZzX2ZhdHRyICogZmF0dHI7CisgX191MzIgYWNjZXNzOworfTsKKworc3RydWN0IG5mczNfcmVhZGxpbmthcmdzIHsKKyBzdHJ1Y3QgbmZzX2ZoICogZmg7CisgdW5zaWduZWQgaW50IHBnYmFzZTsKKyB1bnNpZ25lZCBpbnQgcGdsZW47Cisgc3RydWN0IHBhZ2UgKiogcGFnZXM7Cit9OworCitzdHJ1Y3QgbmZzM19yZW5hbWVyZXMgeworIHN0cnVjdCBuZnNfZmF0dHIgKiBmcm9tYXR0cjsKKyBzdHJ1Y3QgbmZzX2ZhdHRyICogdG9hdHRyOworfTsKKworc3RydWN0IG5mczNfbGlua3JlcyB7Cisgc3RydWN0IG5mc19mYXR0ciAqIGRpcl9hdHRyOworIHN0cnVjdCBuZnNfZmF0dHIgKiBmYXR0cjsKK307CisKK3N0cnVjdCBuZnMzX3JlYWRkaXJyZXMgeworIHN0cnVjdCBuZnNfZmF0dHIgKiBkaXJfYXR0cjsKKyBfX3UzMiAqIHZlcmY7CisgaW50IHBsdXM7Cit9OworCitzdHJ1Y3QgbmZzM19nZXRhY2xyZXMgeworIHN0cnVjdCBuZnNfZmF0dHIgKiBmYXR0cjsKKyBpbnQgbWFzazsKKyB1bnNpZ25lZCBpbnQgYWNsX2FjY2Vzc19jb3VudDsKKyB1bnNpZ25lZCBpbnQgYWNsX2RlZmF1bHRfY291bnQ7Cisgc3RydWN0IHBvc2l4X2FjbCAqIGFjbF9hY2Nlc3M7Cisgc3RydWN0IHBvc2l4X2FjbCAqIGFjbF9kZWZhdWx0OworfTsKKworc3RydWN0IG5mc19wYWdlOworCisjZGVmaW5lIE5GU19QQUdFVkVDX1NJWkUgKDhVKQorCitzdHJ1Y3QgbmZzX3JlYWRfZGF0YSB7CisgaW50IGZsYWdzOworIHN0cnVjdCBycGNfdGFzayB0YXNrOworIHN0cnVjdCBpbm9kZSAqaW5vZGU7Cisgc3RydWN0IHJwY19jcmVkICpjcmVkOworIHN0cnVjdCBuZnNfZmF0dHIgZmF0dHI7Cisgc3RydWN0IGxpc3RfaGVhZCBwYWdlczsKKyBzdHJ1Y3QgbmZzX3BhZ2UgKnJlcTsKKyBzdHJ1Y3QgcGFnZSAqKnBhZ2V2ZWM7CisgdW5zaWduZWQgaW50IG5wYWdlczsKKyBzdHJ1Y3QgbmZzX3JlYWRhcmdzIGFyZ3M7Cisgc3RydWN0IG5mc19yZWFkcmVzIHJlczsKKyBzdHJ1Y3QgcGFnZSAqcGFnZV9hcnJheVtORlNfUEFHRVZFQ19TSVpFXTsKK307CisKK3N0cnVjdCBuZnNfd3JpdGVfZGF0YSB7CisgaW50IGZsYWdzOworIHN0cnVjdCBycGNfdGFzayB0YXNrOworIHN0cnVjdCBpbm9kZSAqaW5vZGU7Cisgc3RydWN0IHJwY19jcmVkICpjcmVkOworIHN0cnVjdCBuZnNfZmF0dHIgZmF0dHI7Cisgc3RydWN0IG5mc193cml0ZXZlcmYgdmVyZjsKKyBzdHJ1Y3QgbGlzdF9oZWFkIHBhZ2VzOworIHN0cnVjdCBuZnNfcGFnZSAqcmVxOworIHN0cnVjdCBwYWdlICoqcGFnZXZlYzsKKyB1bnNpZ25lZCBpbnQgbnBhZ2VzOworIHN0cnVjdCBuZnNfd3JpdGVhcmdzIGFyZ3M7Cisgc3RydWN0IG5mc193cml0ZXJlcyByZXM7Cisgc3RydWN0IHBhZ2UgKnBhZ2VfYXJyYXlbTkZTX1BBR0VWRUNfU0laRV07Cit9OworCitzdHJ1Y3QgbmZzX2FjY2Vzc19lbnRyeTsKKworc3RydWN0IG5mc19ycGNfb3BzIHsKKyBpbnQgdmVyc2lvbjsKKyBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgKmRlbnRyeV9vcHM7Cisgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgKmRpcl9pbm9kZV9vcHM7Cisgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgKmZpbGVfaW5vZGVfb3BzOworCisgaW50ICgqZ2V0cm9vdCkgKHN0cnVjdCBuZnNfc2VydmVyICosIHN0cnVjdCBuZnNfZmggKiwKKyBzdHJ1Y3QgbmZzX2ZzaW5mbyAqKTsKKyBpbnQgKCpnZXRhdHRyKSAoc3RydWN0IG5mc19zZXJ2ZXIgKiwgc3RydWN0IG5mc19maCAqLAorIHN0cnVjdCBuZnNfZmF0dHIgKik7CisgaW50ICgqc2V0YXR0cikgKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IG5mc19mYXR0ciAqLAorIHN0cnVjdCBpYXR0ciAqKTsKKyBpbnQgKCpsb29rdXApIChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHFzdHIgKiwKKyBzdHJ1Y3QgbmZzX2ZoICosIHN0cnVjdCBuZnNfZmF0dHIgKik7CisgaW50ICgqYWNjZXNzKSAoc3RydWN0IGlub2RlICosIHN0cnVjdCBuZnNfYWNjZXNzX2VudHJ5ICopOworIGludCAoKnJlYWRsaW5rKShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHBhZ2UgKiwgdW5zaWduZWQgaW50LAorIHVuc2lnbmVkIGludCk7CisgaW50ICgqcmVhZCkgKHN0cnVjdCBuZnNfcmVhZF9kYXRhICopOworIGludCAoKndyaXRlKSAoc3RydWN0IG5mc193cml0ZV9kYXRhICopOworIGludCAoKmNvbW1pdCkgKHN0cnVjdCBuZnNfd3JpdGVfZGF0YSAqKTsKKyBpbnQgKCpjcmVhdGUpIChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqLAorIHN0cnVjdCBpYXR0ciAqLCBpbnQsIHN0cnVjdCBuYW1laWRhdGEgKik7CisgaW50ICgqcmVtb3ZlKSAoc3RydWN0IGlub2RlICosIHN0cnVjdCBxc3RyICopOworIGludCAoKnVubGlua19zZXR1cCkgKHN0cnVjdCBycGNfbWVzc2FnZSAqLAorIHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IHFzdHIgKik7CisgaW50ICgqdW5saW5rX2RvbmUpIChzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBycGNfdGFzayAqKTsKKyBpbnQgKCpyZW5hbWUpIChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHFzdHIgKiwKKyBzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHFzdHIgKik7CisgaW50ICgqbGluaykgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHFzdHIgKik7CisgaW50ICgqc3ltbGluaykgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgcXN0ciAqLCBzdHJ1Y3QgcXN0ciAqLAorIHN0cnVjdCBpYXR0ciAqLCBzdHJ1Y3QgbmZzX2ZoICosCisgc3RydWN0IG5mc19mYXR0ciAqKTsKKyBpbnQgKCpta2RpcikgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpYXR0ciAqKTsKKyBpbnQgKCpybWRpcikgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgcXN0ciAqKTsKKyBpbnQgKCpyZWFkZGlyKSAoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgcnBjX2NyZWQgKiwKKyB1NjQsIHN0cnVjdCBwYWdlICosIHVuc2lnbmVkIGludCwgaW50KTsKKyBpbnQgKCpta25vZCkgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpYXR0ciAqLAorIGRldl90KTsKKyBpbnQgKCpzdGF0ZnMpIChzdHJ1Y3QgbmZzX3NlcnZlciAqLCBzdHJ1Y3QgbmZzX2ZoICosCisgc3RydWN0IG5mc19mc3N0YXQgKik7CisgaW50ICgqZnNpbmZvKSAoc3RydWN0IG5mc19zZXJ2ZXIgKiwgc3RydWN0IG5mc19maCAqLAorIHN0cnVjdCBuZnNfZnNpbmZvICopOworIGludCAoKnBhdGhjb25mKSAoc3RydWN0IG5mc19zZXJ2ZXIgKiwgc3RydWN0IG5mc19maCAqLAorIHN0cnVjdCBuZnNfcGF0aGNvbmYgKik7CisgdTMyICogKCpkZWNvZGVfZGlyZW50KSh1MzIgKiwgc3RydWN0IG5mc19lbnRyeSAqLCBpbnQgcGx1cyk7Cisgdm9pZCAoKnJlYWRfc2V0dXApIChzdHJ1Y3QgbmZzX3JlYWRfZGF0YSAqKTsKKyBpbnQgKCpyZWFkX2RvbmUpIChzdHJ1Y3QgcnBjX3Rhc2sgKiwgc3RydWN0IG5mc19yZWFkX2RhdGEgKik7Cisgdm9pZCAoKndyaXRlX3NldHVwKSAoc3RydWN0IG5mc193cml0ZV9kYXRhICosIGludCBob3cpOworIGludCAoKndyaXRlX2RvbmUpIChzdHJ1Y3QgcnBjX3Rhc2sgKiwgc3RydWN0IG5mc193cml0ZV9kYXRhICopOworIHZvaWQgKCpjb21taXRfc2V0dXApIChzdHJ1Y3QgbmZzX3dyaXRlX2RhdGEgKiwgaW50IGhvdyk7CisgaW50ICgqY29tbWl0X2RvbmUpIChzdHJ1Y3QgcnBjX3Rhc2sgKiwgc3RydWN0IG5mc193cml0ZV9kYXRhICopOworIGludCAoKmZpbGVfb3BlbikgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKKyBpbnQgKCpmaWxlX3JlbGVhc2UpIChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7CisgaW50ICgqbG9jaykoc3RydWN0IGZpbGUgKiwgaW50LCBzdHJ1Y3QgZmlsZV9sb2NrICopOworIHZvaWQgKCpjbGVhcl9hY2xfY2FjaGUpKHN0cnVjdCBpbm9kZSAqKTsKK307CisKKyNkZWZpbmUgTkZTX0NBTEwob3AsIGlub2RlLCBhcmdzKSBORlNfUFJPVE8oaW5vZGUpLT5vcCBhcmdzCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25mc2FjbC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25mc2FjbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkZDk1YWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmZzYWNsLmgKQEAgLTAsMCArMSwzMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0xJTlVYX05GU0FDTF9ICisjZGVmaW5lIF9fTElOVVhfTkZTQUNMX0gKKworI2RlZmluZSBORlNfQUNMX1BST0dSQU0gMTAwMjI3CisKKyNkZWZpbmUgQUNMUFJPQzJfR0VUQUNMIDEKKyNkZWZpbmUgQUNMUFJPQzJfU0VUQUNMIDIKKyNkZWZpbmUgQUNMUFJPQzJfR0VUQVRUUiAzCisjZGVmaW5lIEFDTFBST0MyX0FDQ0VTUyA0CisKKyNkZWZpbmUgQUNMUFJPQzNfR0VUQUNMIDEKKyNkZWZpbmUgQUNMUFJPQzNfU0VUQUNMIDIKKworI2RlZmluZSBORlNfQUNMIDB4MDAwMQorI2RlZmluZSBORlNfQUNMQ05UIDB4MDAwMgorI2RlZmluZSBORlNfREZBQ0wgMHgwMDA0CisjZGVmaW5lIE5GU19ERkFDTENOVCAweDAwMDgKKworI2RlZmluZSBORlNfQUNMX0RFRkFVTFQgMHgxMDAwCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25mc2QvYXV0aC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25mc2QvYXV0aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4NDBmMGUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmZzZC9hdXRoLmgKQEAgLTAsMCArMSwxNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBMSU5VWF9ORlNEX0FVVEhfSAorI2RlZmluZSBMSU5VWF9ORlNEX0FVVEhfSAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZnNkL2NvbnN0LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmZzZC9jb25zdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNDU1MDgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmZzZC9jb25zdC5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX05GU0RfQ09OU1RfSAorI2RlZmluZSBfTElOVVhfTkZTRF9DT05TVF9ICisKKyNpbmNsdWRlIDxsaW51eC9uZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9uZnMyLmg+CisjaW5jbHVkZSA8bGludXgvbmZzMy5oPgorI2luY2x1ZGUgPGxpbnV4L25mczQuaD4KKworI2RlZmluZSBORlNTVkNfTUFYVkVSUyAzCisKKyNkZWZpbmUgTkZTU1ZDX01BWEJMS1NJWkUgKDMyKjEwMjQpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25mc2QvZGVidWcuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZnNkL2RlYnVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI5MGYwNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZnNkL2RlYnVnLmgKQEAgLTAsMCArMSwzNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBMSU5VWF9ORlNEX0RFQlVHX0gKKyNkZWZpbmUgTElOVVhfTkZTRF9ERUJVR19ICisKKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMvZGVidWcuaD4KKworI2lmZGVmIFJQQ19ERUJVRworI2RlZmluZSBORlNEX0RFQlVHIDEKKyNlbmRpZgorCisjZGVmaW5lIE5GU0REQkdfU09DSyAweDAwMDEKKyNkZWZpbmUgTkZTRERCR19GSCAweDAwMDIKKyNkZWZpbmUgTkZTRERCR19FWFBPUlQgMHgwMDA0CisjZGVmaW5lIE5GU0REQkdfU1ZDIDB4MDAwOAorI2RlZmluZSBORlNEREJHX1BST0MgMHgwMDEwCisjZGVmaW5lIE5GU0REQkdfRklMRU9QIDB4MDAyMAorI2RlZmluZSBORlNEREJHX0FVVEggMHgwMDQwCisjZGVmaW5lIE5GU0REQkdfUkVQQ0FDSEUgMHgwMDgwCisjZGVmaW5lIE5GU0REQkdfWERSIDB4MDEwMAorI2RlZmluZSBORlNEREJHX0xPQ0tEIDB4MDIwMAorI2RlZmluZSBORlNEREJHX0FMTCAweDdGRkYKKyNkZWZpbmUgTkZTRERCR19OT0NIQU5HRSAweEZGRkYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmZzZC9leHBvcnQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZnNkL2V4cG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzMjI3NGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmZzZC9leHBvcnQuaApAQCAtMCwwICsxLDM4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIE5GU0RfRVhQT1JUX0gKKyNkZWZpbmUgTkZTRF9FWFBPUlRfSAorCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKKyNkZWZpbmUgTkZTQ0xOVF9JRE1BWCAxMDI0CisjZGVmaW5lIE5GU0NMTlRfQUREUk1BWCAxNgorI2RlZmluZSBORlNDTE5UX0tFWU1BWCAzMgorCisjZGVmaW5lIE5GU0VYUF9SRUFET05MWSAweDAwMDEKKyNkZWZpbmUgTkZTRVhQX0lOU0VDVVJFX1BPUlQgMHgwMDAyCisjZGVmaW5lIE5GU0VYUF9ST09UU1FVQVNIIDB4MDAwNAorI2RlZmluZSBORlNFWFBfQUxMU1FVQVNIIDB4MDAwOAorI2RlZmluZSBORlNFWFBfQVNZTkMgMHgwMDEwCisjZGVmaW5lIE5GU0VYUF9HQVRIRVJFRF9XUklURVMgMHgwMDIwCisKKyNkZWZpbmUgTkZTRVhQX05PSElERSAweDAyMDAKKyNkZWZpbmUgTkZTRVhQX05PU1VCVFJFRUNIRUNLIDB4MDQwMAorI2RlZmluZSBORlNFWFBfTk9BVVRITkxNIDB4MDgwMCAgCisjZGVmaW5lIE5GU0VYUF9NU05GUyAweDEwMDAgIAorI2RlZmluZSBORlNFWFBfRlNJRCAweDIwMDAKKyNkZWZpbmUgTkZTRVhQX0NST1NTTU9VTlQgMHg0MDAwCisjZGVmaW5lIE5GU0VYUF9OT0FDTCAweDgwMDAgIAorI2RlZmluZSBORlNFWFBfQUxMRkxBR1MgMHhGRTNGCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmZzZC9pbnRlcmZhY2UuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZnNkL2ludGVyZmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjMzk0NmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmZzZC9pbnRlcmZhY2UuaApAQCAtMCwwICsxLDE1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIExJTlVYX05GU0RfSU5URVJGQUNFX0gKKyNkZWZpbmUgTElOVVhfTkZTRF9JTlRFUkZBQ0VfSAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZnNkL25mc2ZoLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmZzZC9uZnNmaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNDUwZDIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmZzZC9uZnNmaC5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX05GU0RfRkhfSAorI2RlZmluZSBfTElOVVhfTkZTRF9GSF9ICisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9uZnNkL2NvbnN0Lmg+CisjaW5jbHVkZSA8bGludXgvbmZzZC9kZWJ1Zy5oPgorCitzdHJ1Y3QgbmZzX2ZoYmFzZV9vbGQgeworIF9fdTMyIGZiX2Rjb29raWU7CisgX191MzIgZmJfaW5vOworIF9fdTMyIGZiX2RpcmlubzsKKyBfX3UzMiBmYl9kZXY7CisgX191MzIgZmJfeGRldjsKKyBfX3UzMiBmYl94aW5vOworIF9fdTMyIGZiX2dlbmVyYXRpb247Cit9OworCitzdHJ1Y3QgbmZzX2ZoYmFzZV9uZXcgeworIF9fdTggZmJfdmVyc2lvbjsKKyBfX3U4IGZiX2F1dGhfdHlwZTsKKyBfX3U4IGZiX2ZzaWRfdHlwZTsKKyBfX3U4IGZiX2ZpbGVpZF90eXBlOworIF9fdTMyIGZiX2F1dGhbMV07CisKK307CisKK3N0cnVjdCBrbmZzZF9maCB7CisgdW5zaWduZWQgaW50IGZoX3NpemU7CisgdW5pb24geworIHN0cnVjdCBuZnNfZmhiYXNlX29sZCBmaF9vbGQ7CisgX191MzIgZmhfcGFkW05GUzRfRkhTSVpFLzRdOworIHN0cnVjdCBuZnNfZmhiYXNlX25ldyBmaF9uZXc7CisgfSBmaF9iYXNlOworfTsKKworI2RlZmluZSBvZmhfZGNvb2tpZSBmaF9iYXNlLmZoX29sZC5mYl9kY29va2llCisjZGVmaW5lIG9maF9pbm8gZmhfYmFzZS5maF9vbGQuZmJfaW5vCisjZGVmaW5lIG9maF9kaXJpbm8gZmhfYmFzZS5maF9vbGQuZmJfZGlyaW5vCisjZGVmaW5lIG9maF9kZXYgZmhfYmFzZS5maF9vbGQuZmJfZGV2CisjZGVmaW5lIG9maF94ZGV2IGZoX2Jhc2UuZmhfb2xkLmZiX3hkZXYKKyNkZWZpbmUgb2ZoX3hpbm8gZmhfYmFzZS5maF9vbGQuZmJfeGlubworI2RlZmluZSBvZmhfZ2VuZXJhdGlvbiBmaF9iYXNlLmZoX29sZC5mYl9nZW5lcmF0aW9uCisKKyNkZWZpbmUgZmhfdmVyc2lvbiBmaF9iYXNlLmZoX25ldy5mYl92ZXJzaW9uCisjZGVmaW5lIGZoX2ZzaWRfdHlwZSBmaF9iYXNlLmZoX25ldy5mYl9mc2lkX3R5cGUKKyNkZWZpbmUgZmhfYXV0aF90eXBlIGZoX2Jhc2UuZmhfbmV3LmZiX2F1dGhfdHlwZQorI2RlZmluZSBmaF9maWxlaWRfdHlwZSBmaF9iYXNlLmZoX25ldy5mYl9maWxlaWRfdHlwZQorI2RlZmluZSBmaF9hdXRoIGZoX2Jhc2UuZmhfbmV3LmZiX2F1dGgKKyNkZWZpbmUgZmhfZnNpZCBmaF9iYXNlLmZoX25ldy5mYl9hdXRoCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25mc2Qvc3RhdHMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZnNkL3N0YXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ3ZTY1YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZnNkL3N0YXRzLmgKQEAgLTAsMCArMSwzOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBMSU5VWF9ORlNEX1NUQVRTX0gKKyNkZWZpbmUgTElOVVhfTkZTRF9TVEFUU19ICisKKyNpbmNsdWRlIDxsaW51eC9uZnM0Lmg+CisKK3N0cnVjdCBuZnNkX3N0YXRzIHsKKyB1bnNpZ25lZCBpbnQgcmNoaXRzOworIHVuc2lnbmVkIGludCByY21pc3NlczsKKyB1bnNpZ25lZCBpbnQgcmNub2NhY2hlOworIHVuc2lnbmVkIGludCBmaF9zdGFsZTsKKyB1bnNpZ25lZCBpbnQgZmhfbG9va3VwOworIHVuc2lnbmVkIGludCBmaF9hbm9uOworIHVuc2lnbmVkIGludCBmaF9ub2NhY2hlX2RpcjsKKyB1bnNpZ25lZCBpbnQgZmhfbm9jYWNoZV9ub25kaXI7CisgdW5zaWduZWQgaW50IGlvX3JlYWQ7CisgdW5zaWduZWQgaW50IGlvX3dyaXRlOworIHVuc2lnbmVkIGludCB0aF9jbnQ7CisgdW5zaWduZWQgaW50IHRoX3VzYWdlWzEwXTsKKyB1bnNpZ25lZCBpbnQgdGhfZnVsbGNudDsKKyB1bnNpZ25lZCBpbnQgcmFfc2l6ZTsKKyB1bnNpZ25lZCBpbnQgcmFfZGVwdGhbMTFdOworCit9OworCisjZGVmaW5lIE5GU0RfVVNBR0VfV1JBUCAoSFoqMTAwMDAwMCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmZzZC94ZHIuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZnNkL3hkci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5NDk2MWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmZzZC94ZHIuaApAQCAtMCwwICsxLDE0MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBMSU5VWF9ORlNEX0gKKyNkZWZpbmUgTElOVVhfTkZTRF9ICisKKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3Zmcy5oPgorI2luY2x1ZGUgPGxpbnV4L25mcy5oPgorCitzdHJ1Y3QgbmZzZF9maGFuZGxlIHsKKyBzdHJ1Y3Qgc3ZjX2ZoIGZoOworfTsKKworc3RydWN0IG5mc2Rfc2F0dHJhcmdzIHsKKyBzdHJ1Y3Qgc3ZjX2ZoIGZoOworIHN0cnVjdCBpYXR0ciBhdHRyczsKK307CisKK3N0cnVjdCBuZnNkX2Rpcm9wYXJncyB7Cisgc3RydWN0IHN2Y19maCBmaDsKKyBjaGFyICogbmFtZTsKKyBpbnQgbGVuOworfTsKKworc3RydWN0IG5mc2RfcmVhZGFyZ3MgeworIHN0cnVjdCBzdmNfZmggZmg7CisgX191MzIgb2Zmc2V0OworIF9fdTMyIGNvdW50OworIHN0cnVjdCBrdmVjIHZlY1tSUENTVkNfTUFYUEFHRVNdOworIGludCB2bGVuOworfTsKKworc3RydWN0IG5mc2Rfd3JpdGVhcmdzIHsKKyBzdmNfZmggZmg7CisgX191MzIgb2Zmc2V0OworIGludCBsZW47Cisgc3RydWN0IGt2ZWMgdmVjW1JQQ1NWQ19NQVhQQUdFU107CisgaW50IHZsZW47Cit9OworCitzdHJ1Y3QgbmZzZF9jcmVhdGVhcmdzIHsKKyBzdHJ1Y3Qgc3ZjX2ZoIGZoOworIGNoYXIgKiBuYW1lOworIGludCBsZW47Cisgc3RydWN0IGlhdHRyIGF0dHJzOworfTsKKworc3RydWN0IG5mc2RfcmVuYW1lYXJncyB7Cisgc3RydWN0IHN2Y19maCBmZmg7CisgY2hhciAqIGZuYW1lOworIGludCBmbGVuOworIHN0cnVjdCBzdmNfZmggdGZoOworIGNoYXIgKiB0bmFtZTsKKyBpbnQgdGxlbjsKK307CisKK3N0cnVjdCBuZnNkX3JlYWRsaW5rYXJncyB7Cisgc3RydWN0IHN2Y19maCBmaDsKKyBjaGFyICogYnVmZmVyOworfTsKKworc3RydWN0IG5mc2RfbGlua2FyZ3MgeworIHN0cnVjdCBzdmNfZmggZmZoOworIHN0cnVjdCBzdmNfZmggdGZoOworIGNoYXIgKiB0bmFtZTsKKyBpbnQgdGxlbjsKK307CisKK3N0cnVjdCBuZnNkX3N5bWxpbmthcmdzIHsKKyBzdHJ1Y3Qgc3ZjX2ZoIGZmaDsKKyBjaGFyICogZm5hbWU7CisgaW50IGZsZW47CisgY2hhciAqIHRuYW1lOworIGludCB0bGVuOworIHN0cnVjdCBpYXR0ciBhdHRyczsKK307CisKK3N0cnVjdCBuZnNkX3JlYWRkaXJhcmdzIHsKKyBzdHJ1Y3Qgc3ZjX2ZoIGZoOworIF9fdTMyIGNvb2tpZTsKKyBfX3UzMiBjb3VudDsKKyB1MzIgKiBidWZmZXI7Cit9OworCitzdHJ1Y3QgbmZzZF9hdHRyc3RhdCB7Cisgc3RydWN0IHN2Y19maCBmaDsKKyBzdHJ1Y3Qga3N0YXQgc3RhdDsKK307CisKK3N0cnVjdCBuZnNkX2Rpcm9wcmVzIHsKKyBzdHJ1Y3Qgc3ZjX2ZoIGZoOworIHN0cnVjdCBrc3RhdCBzdGF0OworfTsKKworc3RydWN0IG5mc2RfcmVhZGxpbmtyZXMgeworIGludCBsZW47Cit9OworCitzdHJ1Y3QgbmZzZF9yZWFkcmVzIHsKKyBzdHJ1Y3Qgc3ZjX2ZoIGZoOworIHVuc2lnbmVkIGxvbmcgY291bnQ7Cisgc3RydWN0IGtzdGF0IHN0YXQ7Cit9OworCitzdHJ1Y3QgbmZzZF9yZWFkZGlycmVzIHsKKyBpbnQgY291bnQ7CisKKyBzdHJ1Y3QgcmVhZGRpcl9jZCBjb21tb247CisgdTMyICogYnVmZmVyOworIGludCBidWZsZW47CisgdTMyICogb2Zmc2V0OworfTsKKworc3RydWN0IG5mc2Rfc3RhdGZzcmVzIHsKKyBzdHJ1Y3Qga3N0YXRmcyBzdGF0czsKK307CisKK3VuaW9uIG5mc2RfeGRyc3RvcmUgeworIHN0cnVjdCBuZnNkX3NhdHRyYXJncyBzYXR0cjsKKyBzdHJ1Y3QgbmZzZF9kaXJvcGFyZ3MgZGlyb3A7Cisgc3RydWN0IG5mc2RfcmVhZGFyZ3MgcmVhZDsKKyBzdHJ1Y3QgbmZzZF93cml0ZWFyZ3Mgd3JpdGU7Cisgc3RydWN0IG5mc2RfY3JlYXRlYXJncyBjcmVhdGU7Cisgc3RydWN0IG5mc2RfcmVuYW1lYXJncyByZW5hbWU7Cisgc3RydWN0IG5mc2RfbGlua2FyZ3MgbGluazsKKyBzdHJ1Y3QgbmZzZF9zeW1saW5rYXJncyBzeW1saW5rOworIHN0cnVjdCBuZnNkX3JlYWRkaXJhcmdzIHJlYWRkaXI7Cit9OworCisjZGVmaW5lIE5GUzJfU1ZDX1hEUlNJWkUgc2l6ZW9mKHVuaW9uIG5mc2RfeGRyc3RvcmUpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25vZGUuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ub2RlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjMzYmZmYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ub2RlLmgKQEAgLTAsMCArMSwyMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfTk9ERV9IXworI2RlZmluZSBfTElOVVhfTk9ERV9IXworCisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorCitzdHJ1Y3Qgbm9kZSB7Cisgc3RydWN0IHN5c19kZXZpY2Ugc3lzZGV2OworfTsKKworI2RlZmluZSB0b19ub2RlKHN5c19kZXZpY2UpIGNvbnRhaW5lcl9vZihzeXNfZGV2aWNlLCBzdHJ1Y3Qgbm9kZSwgc3lzZGV2KQorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbm9kZW1hc2suaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ub2RlbWFzay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlYzg2MzIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbm9kZW1hc2suaApAQCAtMCwwICsxLDg5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTElOVVhfTk9ERU1BU0tfSAorI2RlZmluZSBfX0xJTlVYX05PREVNQVNLX0gKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9udW1hLmg+CisKK3R5cGVkZWYgc3RydWN0IHsgREVDTEFSRV9CSVRNQVAoYml0cywgTUFYX05VTU5PREVTKTsgfSBub2RlbWFza190OworCisjZGVmaW5lIG5vZGVfc2V0KG5vZGUsIGRzdCkgX19ub2RlX3NldCgobm9kZSksICYoZHN0KSkKKyNkZWZpbmUgbm9kZV9jbGVhcihub2RlLCBkc3QpIF9fbm9kZV9jbGVhcigobm9kZSksICYoZHN0KSkKKyNkZWZpbmUgbm9kZXNfc2V0YWxsKGRzdCkgX19ub2Rlc19zZXRhbGwoJihkc3QpLCBNQVhfTlVNTk9ERVMpCisjZGVmaW5lIG5vZGVzX2NsZWFyKGRzdCkgX19ub2Rlc19jbGVhcigmKGRzdCksIE1BWF9OVU1OT0RFUykKKyNkZWZpbmUgbm9kZV9pc3NldChub2RlLCBub2RlbWFzaykgdGVzdF9iaXQoKG5vZGUpLCAobm9kZW1hc2spLmJpdHMpCisjZGVmaW5lIG5vZGVfdGVzdF9hbmRfc2V0KG5vZGUsIG5vZGVtYXNrKSAgIF9fbm9kZV90ZXN0X2FuZF9zZXQoKG5vZGUpLCAmKG5vZGVtYXNrKSkKKyNkZWZpbmUgbm9kZXNfYW5kKGRzdCwgc3JjMSwgc3JjMikgICBfX25vZGVzX2FuZCgmKGRzdCksICYoc3JjMSksICYoc3JjMiksIE1BWF9OVU1OT0RFUykKKyNkZWZpbmUgbm9kZXNfb3IoZHN0LCBzcmMxLCBzcmMyKSAgIF9fbm9kZXNfb3IoJihkc3QpLCAmKHNyYzEpLCAmKHNyYzIpLCBNQVhfTlVNTk9ERVMpCisjZGVmaW5lIG5vZGVzX3hvcihkc3QsIHNyYzEsIHNyYzIpICAgX19ub2Rlc194b3IoJihkc3QpLCAmKHNyYzEpLCAmKHNyYzIpLCBNQVhfTlVNTk9ERVMpCisjZGVmaW5lIG5vZGVzX2FuZG5vdChkc3QsIHNyYzEsIHNyYzIpICAgX19ub2Rlc19hbmRub3QoJihkc3QpLCAmKHNyYzEpLCAmKHNyYzIpLCBNQVhfTlVNTk9ERVMpCisjZGVmaW5lIG5vZGVzX2NvbXBsZW1lbnQoZHN0LCBzcmMpICAgX19ub2Rlc19jb21wbGVtZW50KCYoZHN0KSwgJihzcmMpLCBNQVhfTlVNTk9ERVMpCisjZGVmaW5lIG5vZGVzX2VxdWFsKHNyYzEsIHNyYzIpICAgX19ub2Rlc19lcXVhbCgmKHNyYzEpLCAmKHNyYzIpLCBNQVhfTlVNTk9ERVMpCisjZGVmaW5lIG5vZGVzX2ludGVyc2VjdHMoc3JjMSwgc3JjMikgICBfX25vZGVzX2ludGVyc2VjdHMoJihzcmMxKSwgJihzcmMyKSwgTUFYX05VTU5PREVTKQorI2RlZmluZSBub2Rlc19zdWJzZXQoc3JjMSwgc3JjMikgICBfX25vZGVzX3N1YnNldCgmKHNyYzEpLCAmKHNyYzIpLCBNQVhfTlVNTk9ERVMpCisjZGVmaW5lIG5vZGVzX2VtcHR5KHNyYykgX19ub2Rlc19lbXB0eSgmKHNyYyksIE1BWF9OVU1OT0RFUykKKyNkZWZpbmUgbm9kZXNfZnVsbChub2RlbWFzaykgX19ub2Rlc19mdWxsKCYobm9kZW1hc2spLCBNQVhfTlVNTk9ERVMpCisjZGVmaW5lIG5vZGVzX3dlaWdodChub2RlbWFzaykgX19ub2Rlc193ZWlnaHQoJihub2RlbWFzayksIE1BWF9OVU1OT0RFUykKKyNkZWZpbmUgbm9kZXNfc2hpZnRfcmlnaHQoZHN0LCBzcmMsIG4pICAgX19ub2Rlc19zaGlmdF9yaWdodCgmKGRzdCksICYoc3JjKSwgKG4pLCBNQVhfTlVNTk9ERVMpCisjZGVmaW5lIG5vZGVzX3NoaWZ0X2xlZnQoZHN0LCBzcmMsIG4pICAgX19ub2Rlc19zaGlmdF9sZWZ0KCYoZHN0KSwgJihzcmMpLCAobiksIE1BWF9OVU1OT0RFUykKKyNkZWZpbmUgZmlyc3Rfbm9kZShzcmMpIF9fZmlyc3Rfbm9kZSgmKHNyYykpCisjZGVmaW5lIG5leHRfbm9kZShuLCBzcmMpIF9fbmV4dF9ub2RlKChuKSwgJihzcmMpKQorI2RlZmluZSBub2RlbWFza19vZl9ub2RlKG5vZGUpICAoeyAgIHR5cGVvZihfdW51c2VkX25vZGVtYXNrX2FyZ18pIG07ICAgaWYgKHNpemVvZihtKSA9PSBzaXplb2YodW5zaWduZWQgbG9uZykpIHsgICBtLmJpdHNbMF0gPSAxVUw8PChub2RlKTsgICB9IGVsc2UgeyAgIG5vZGVzX2NsZWFyKG0pOyAgIG5vZGVfc2V0KChub2RlKSwgbSk7ICAgfSAgIG07ICB9KQorI2RlZmluZSBmaXJzdF91bnNldF9ub2RlKG1hc2spIF9fZmlyc3RfdW5zZXRfbm9kZSgmKG1hc2spKQorI2RlZmluZSBOT0RFX01BU0tfTEFTVF9XT1JEIEJJVE1BUF9MQVNUX1dPUkRfTUFTSyhNQVhfTlVNTk9ERVMpCisjaWYgTUFYX05VTU5PREVTIDw9IEJJVFNfUEVSX0xPTkcKKyNkZWZpbmUgTk9ERV9NQVNLX0FMTCAgKChub2RlbWFza190KSB7IHsgICBbQklUU19UT19MT05HUyhNQVhfTlVNTk9ERVMpLTFdID0gTk9ERV9NQVNLX0xBU1RfV09SRCAgfSB9KQorI2Vsc2UKKyNkZWZpbmUgTk9ERV9NQVNLX0FMTCAgKChub2RlbWFza190KSB7IHsgICBbMCAuLi4gQklUU19UT19MT05HUyhNQVhfTlVNTk9ERVMpLTJdID0gfjBVTCwgICBbQklUU19UT19MT05HUyhNQVhfTlVNTk9ERVMpLTFdID0gTk9ERV9NQVNLX0xBU1RfV09SRCAgfSB9KQorI2VuZGlmCisjZGVmaW5lIE5PREVfTUFTS19OT05FICAoKG5vZGVtYXNrX3QpIHsgeyAgIFswIC4uLiBCSVRTX1RPX0xPTkdTKE1BWF9OVU1OT0RFUyktMV0gPSAwVUwgIH0gfSkKKyNkZWZpbmUgbm9kZXNfYWRkcihzcmMpICgoc3JjKS5iaXRzKQorI2RlZmluZSBub2RlbWFza19zY25wcmludGYoYnVmLCBsZW4sIHNyYykgICBfX25vZGVtYXNrX3NjbnByaW50ZigoYnVmKSwgKGxlbiksICYoc3JjKSwgTUFYX05VTU5PREVTKQorI2RlZmluZSBub2RlbWFza19wYXJzZSh1YnVmLCB1bGVuLCBkc3QpICAgX19ub2RlbWFza19wYXJzZSgodWJ1ZiksICh1bGVuKSwgJihkc3QpLCBNQVhfTlVNTk9ERVMpCisjZGVmaW5lIG5vZGVsaXN0X3NjbnByaW50ZihidWYsIGxlbiwgc3JjKSAgIF9fbm9kZWxpc3Rfc2NucHJpbnRmKChidWYpLCAobGVuKSwgJihzcmMpLCBNQVhfTlVNTk9ERVMpCisjZGVmaW5lIG5vZGVsaXN0X3BhcnNlKGJ1ZiwgZHN0KSBfX25vZGVsaXN0X3BhcnNlKChidWYpLCAmKGRzdCksIE1BWF9OVU1OT0RFUykKKyNkZWZpbmUgbm9kZV9yZW1hcChvbGRiaXQsIG9sZCwgbmV3KSAgIF9fbm9kZV9yZW1hcCgob2xkYml0KSwgJihvbGQpLCAmKG5ldyksIE1BWF9OVU1OT0RFUykKKyNkZWZpbmUgbm9kZXNfcmVtYXAoZHN0LCBzcmMsIG9sZCwgbmV3KSAgIF9fbm9kZXNfcmVtYXAoJihkc3QpLCAmKHNyYyksICYob2xkKSwgJihuZXcpLCBNQVhfTlVNTk9ERVMpCisjaWYgTUFYX05VTU5PREVTID4gMQorI2RlZmluZSBmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgbWFzaykgICBmb3IgKChub2RlKSA9IGZpcnN0X25vZGUobWFzayk7ICAgKG5vZGUpIDwgTUFYX05VTU5PREVTOyAgIChub2RlKSA9IG5leHRfbm9kZSgobm9kZSksIChtYXNrKSkpCisjZWxzZQorI2RlZmluZSBmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgbWFzaykgICBpZiAoIW5vZGVzX2VtcHR5KG1hc2spKSAgIGZvciAoKG5vZGUpID0gMDsgKG5vZGUpIDwgMTsgKG5vZGUpKyspCisjZW5kaWYKKworI2lmIE1BWF9OVU1OT0RFUyA+IDEKKyNkZWZpbmUgbnVtX29ubGluZV9ub2RlcygpIG5vZGVzX3dlaWdodChub2RlX29ubGluZV9tYXApCisjZGVmaW5lIG51bV9wb3NzaWJsZV9ub2RlcygpIG5vZGVzX3dlaWdodChub2RlX3Bvc3NpYmxlX21hcCkKKyNkZWZpbmUgbm9kZV9vbmxpbmUobm9kZSkgbm9kZV9pc3NldCgobm9kZSksIG5vZGVfb25saW5lX21hcCkKKyNkZWZpbmUgbm9kZV9wb3NzaWJsZShub2RlKSBub2RlX2lzc2V0KChub2RlKSwgbm9kZV9wb3NzaWJsZV9tYXApCisjZGVmaW5lIGZpcnN0X29ubGluZV9ub2RlIGZpcnN0X25vZGUobm9kZV9vbmxpbmVfbWFwKQorI2RlZmluZSBuZXh0X29ubGluZV9ub2RlKG5pZCkgbmV4dF9ub2RlKChuaWQpLCBub2RlX29ubGluZV9tYXApCisjZWxzZQorI2RlZmluZSBudW1fb25saW5lX25vZGVzKCkgMQorI2RlZmluZSBudW1fcG9zc2libGVfbm9kZXMoKSAxCisjZGVmaW5lIG5vZGVfb25saW5lKG5vZGUpICgobm9kZSkgPT0gMCkKKyNkZWZpbmUgbm9kZV9wb3NzaWJsZShub2RlKSAoKG5vZGUpID09IDApCisjZGVmaW5lIGZpcnN0X29ubGluZV9ub2RlIDAKKyNkZWZpbmUgbmV4dF9vbmxpbmVfbm9kZShuaWQpIChNQVhfTlVNTk9ERVMpCisjZW5kaWYKKworI2RlZmluZSBhbnlfb25saW5lX25vZGUobWFzaykgICh7ICAgaW50IG5vZGU7ICAgZm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsIChtYXNrKSkgICBpZiAobm9kZV9vbmxpbmUobm9kZSkpICAgYnJlYWs7ICAgbm9kZTsgIH0pCisKKyNkZWZpbmUgbm9kZV9zZXRfb25saW5lKG5vZGUpIHNldF9iaXQoKG5vZGUpLCBub2RlX29ubGluZV9tYXAuYml0cykKKyNkZWZpbmUgbm9kZV9zZXRfb2ZmbGluZShub2RlKSBjbGVhcl9iaXQoKG5vZGUpLCBub2RlX29ubGluZV9tYXAuYml0cykKKworI2RlZmluZSBmb3JfZWFjaF9ub2RlKG5vZGUpIGZvcl9lYWNoX25vZGVfbWFzaygobm9kZSksIG5vZGVfcG9zc2libGVfbWFwKQorI2RlZmluZSBmb3JfZWFjaF9vbmxpbmVfbm9kZShub2RlKSBmb3JfZWFjaF9ub2RlX21hc2soKG5vZGUpLCBub2RlX29ubGluZV9tYXApCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25vdGlmaWVyLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbm90aWZpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWZjNDYxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25vdGlmaWVyLmgKQEAgLTAsMCArMSw1MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfTk9USUZJRVJfSAorI2RlZmluZSBfTElOVVhfTk9USUZJRVJfSAorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgorCitzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgeworIGludCAoKm5vdGlmaWVyX2NhbGwpKHN0cnVjdCBub3RpZmllcl9ibG9jayAqLCB1bnNpZ25lZCBsb25nLCB2b2lkICopOworIHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmV4dDsKKyBpbnQgcHJpb3JpdHk7Cit9OworCitzdHJ1Y3QgYXRvbWljX25vdGlmaWVyX2hlYWQgeworIHNwaW5sb2NrX3QgbG9jazsKKyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKmhlYWQ7Cit9OworCitzdHJ1Y3QgYmxvY2tpbmdfbm90aWZpZXJfaGVhZCB7Cisgc3RydWN0IHJ3X3NlbWFwaG9yZSByd3NlbTsKKyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKmhlYWQ7Cit9OworCitzdHJ1Y3QgcmF3X25vdGlmaWVyX2hlYWQgeworIHN0cnVjdCBub3RpZmllcl9ibG9jayAqaGVhZDsKK307CisKKyNkZWZpbmUgQVRPTUlDX0lOSVRfTk9USUZJRVJfSEVBRChuYW1lKSBkbyB7ICAgc3Bpbl9sb2NrX2luaXQoJihuYW1lKS0+bG9jayk7ICAgKG5hbWUpLT5oZWFkID0gTlVMTDsgICB9IHdoaWxlICgwKQorI2RlZmluZSBCTE9DS0lOR19JTklUX05PVElGSUVSX0hFQUQobmFtZSkgZG8geyAgIGluaXRfcndzZW0oJihuYW1lKS0+cndzZW0pOyAgIChuYW1lKS0+aGVhZCA9IE5VTEw7ICAgfSB3aGlsZSAoMCkKKyNkZWZpbmUgUkFXX0lOSVRfTk9USUZJRVJfSEVBRChuYW1lKSBkbyB7ICAgKG5hbWUpLT5oZWFkID0gTlVMTDsgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIEFUT01JQ19OT1RJRklFUl9JTklUKG5hbWUpIHsgICAubG9jayA9IF9fU1BJTl9MT0NLX1VOTE9DS0VEKG5hbWUubG9jayksICAgLmhlYWQgPSBOVUxMIH0KKyNkZWZpbmUgQkxPQ0tJTkdfTk9USUZJRVJfSU5JVChuYW1lKSB7ICAgLnJ3c2VtID0gX19SV1NFTV9JTklUSUFMSVpFUigobmFtZSkucndzZW0pLCAgIC5oZWFkID0gTlVMTCB9CisjZGVmaW5lIFJBV19OT1RJRklFUl9JTklUKG5hbWUpIHsgICAuaGVhZCA9IE5VTEwgfQorCisjZGVmaW5lIEFUT01JQ19OT1RJRklFUl9IRUFEKG5hbWUpICAgc3RydWN0IGF0b21pY19ub3RpZmllcl9oZWFkIG5hbWUgPSAgIEFUT01JQ19OT1RJRklFUl9JTklUKG5hbWUpCisjZGVmaW5lIEJMT0NLSU5HX05PVElGSUVSX0hFQUQobmFtZSkgICBzdHJ1Y3QgYmxvY2tpbmdfbm90aWZpZXJfaGVhZCBuYW1lID0gICBCTE9DS0lOR19OT1RJRklFUl9JTklUKG5hbWUpCisjZGVmaW5lIFJBV19OT1RJRklFUl9IRUFEKG5hbWUpICAgc3RydWN0IHJhd19ub3RpZmllcl9oZWFkIG5hbWUgPSAgIFJBV19OT1RJRklFUl9JTklUKG5hbWUpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L251bWEuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9udW1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVkNjZmNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9udW1hLmgKQEAgLTAsMCArMSwxOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfTlVNQV9ICisjZGVmaW5lIF9MSU5VWF9OVU1BX0gKKworI2RlZmluZSBOT0RFU19TSElGVCAwCisKKyNkZWZpbmUgTUFYX05VTU5PREVTICgxIDw8IE5PREVTX1NISUZUKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9udnJhbS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L252cmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM1OGJkYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9udnJhbS5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX05WUkFNX0gKKyNkZWZpbmUgX0xJTlVYX05WUkFNX0gKKworI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisKKyNkZWZpbmUgTlZSQU1fSU5JVCBfSU8oJ3AnLCAweDQwKSAgCisjZGVmaW5lIE5WUkFNX1NFVENLUyBfSU8oJ3AnLCAweDQxKSAgCisKKyNkZWZpbmUgTlZSQU1fRklSU1RfQllURSAxNAorCisjZGVmaW5lIE5WUkFNX09GRlNFVCh4KSAoKHgpLU5WUkFNX0ZJUlNUX0JZVEUpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L29tYXBfY3NtaS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L29tYXBfY3NtaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMjhkM2QKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvb21hcF9jc21pLmgKQEAgLTAsMCArMSwyMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfT01BUF9DU01JX0hfCisjZGVmaW5lIF9PTUFQX0NTTUlfSF8KKworI2luY2x1ZGUgPGFzbS9pb2N0bC5oPgorCisjZGVmaW5lIE9NQVBfQ1NNSV9UVFlfRU5BQkxFX0FDSyBfSU8oJ2MnLCAwKQorI2RlZmluZSBPTUFQX0NTTUlfVFRZX0RJU0FCTEVfQUNLIF9JTygnYycsIDEpCisjZGVmaW5lIE9NQVBfQ1NNSV9UVFlfUkVBRF9VTkFDS0VEIF9JT1IoJ2MnLCAyLCBpbnQpCisjZGVmaW5lIE9NQVBfQ1NNSV9UVFlfQUNLIF9JT1coJ2MnLCAzLCBpbnQpCisjZGVmaW5lIE9NQVBfQ1NNSV9UVFlfV0FLRVVQX0FORF9BQ0sgX0lPVygnYycsIDQsIGludCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcGFnZW1hcC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BhZ2VtYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGQzOTdkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BhZ2VtYXAuaApAQCAtMCwwICsxLDMzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9QQUdFTUFQX0gKKyNkZWZpbmUgX0xJTlVYX1BBR0VNQVBfSAorCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgorCisjZGVmaW5lIEFTX0VJTyAoX19HRlBfQklUU19TSElGVCArIDApICAKKyNkZWZpbmUgQVNfRU5PU1BDIChfX0dGUF9CSVRTX1NISUZUICsgMSkgIAorCisjZGVmaW5lIFBBR0VfQ0FDSEVfU0hJRlQgUEFHRV9TSElGVAorI2RlZmluZSBQQUdFX0NBQ0hFX1NJWkUgUEFHRV9TSVpFCisjZGVmaW5lIFBBR0VfQ0FDSEVfTUFTSyBQQUdFX01BU0sKKyNkZWZpbmUgUEFHRV9DQUNIRV9BTElHTihhZGRyKSAoKChhZGRyKStQQUdFX0NBQ0hFX1NJWkUtMSkmUEFHRV9DQUNIRV9NQVNLKQorI2RlZmluZSBwYWdlX2NhY2hlX2dldChwYWdlKSBnZXRfcGFnZShwYWdlKQorI2RlZmluZSBwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSkgcHV0X3BhZ2UocGFnZSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcGFyYW0uaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NjY5NWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcGFyYW0uaApAQCAtMCwwICsxLDE3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9QQVJBTV9ICisjZGVmaW5lIF9MSU5VWF9QQVJBTV9ICisKKyNpbmNsdWRlIDxhc20vcGFyYW0uaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcGF0Y2hrZXkuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wYXRjaGtleS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkZjg2Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcGF0Y2hrZXkuaApAQCAtMCwwICsxLDMxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9QQVRDSEtFWV9IX0lORElSRUNUCisjZXJyb3IgInBhdGNoa2V5LmggaW5jbHVkZWQgZGlyZWN0bHkiCisjZW5kaWYKKworI2lmbmRlZiBfTElOVVhfUEFUQ0hLRVlfSAorI2RlZmluZSBfTElOVVhfUEFUQ0hLRVlfSAorCisjaW5jbHVkZSA8ZW5kaWFuLmg+CisKKyNpZmRlZiBfX0JZVEVfT1JERVIKKyNpZiBfX0JZVEVfT1JERVIgPT0gX19CSUdfRU5ESUFOCisjZGVmaW5lIF9QQVRDSEtFWShpZCkgKDB4ZmQwMHxpZCkKKyNlbGlmIF9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4KKyNkZWZpbmUgX1BBVENIS0VZKGlkKSAoKGlkPDw4KXwweDAwZmQpCisjZWxzZQorI2Vycm9yICJjb3VsZCBub3QgZGV0ZXJtaW5lIGJ5dGUgb3JkZXIiCisjZW5kaWYKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wY2kuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wY2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjVkZWI0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BjaS5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgTElOVVhfUENJX0gKKyNkZWZpbmUgTElOVVhfUENJX0gKKworI2luY2x1ZGUgPGxpbnV4L3BjaV9yZWdzLmg+CisKKyNpbmNsdWRlIDxsaW51eC9wY2lfaWRzLmg+CisKKyNkZWZpbmUgUENJX0RFVkZOKHNsb3QsZnVuYykgKCgoKHNsb3QpICYgMHgxZikgPDwgMykgfCAoKGZ1bmMpICYgMHgwNykpCisjZGVmaW5lIFBDSV9TTE9UKGRldmZuKSAoKChkZXZmbikgPj4gMykgJiAweDFmKQorI2RlZmluZSBQQ0lfRlVOQyhkZXZmbikgKChkZXZmbikgJiAweDA3KQorCisjZGVmaW5lIFBDSUlPQ19CQVNFICgnUCcgPDwgMjQgfCAnQycgPDwgMTYgfCAnSScgPDwgOCkKKyNkZWZpbmUgUENJSU9DX0NPTlRST0xMRVIgKFBDSUlPQ19CQVNFIHwgMHgwMCkgIAorI2RlZmluZSBQQ0lJT0NfTU1BUF9JU19JTyAoUENJSU9DX0JBU0UgfCAweDAxKSAgCisjZGVmaW5lIFBDSUlPQ19NTUFQX0lTX01FTSAoUENJSU9DX0JBU0UgfCAweDAyKSAgCisjZGVmaW5lIFBDSUlPQ19XUklURV9DT01CSU5FIChQQ0lJT0NfQkFTRSB8IDB4MDMpICAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcGNpX2lkcy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BjaV9pZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzVhZGZiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BjaV9pZHMuaApAQCAtMCwwICsxLDIyNzAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgUENJX0NMQVNTX05PVF9ERUZJTkVEIDB4MDAwMAorI2RlZmluZSBQQ0lfQ0xBU1NfTk9UX0RFRklORURfVkdBIDB4MDAwMQorCisjZGVmaW5lIFBDSV9CQVNFX0NMQVNTX1NUT1JBR0UgMHgwMQorI2RlZmluZSBQQ0lfQ0xBU1NfU1RPUkFHRV9TQ1NJIDB4MDEwMAorI2RlZmluZSBQQ0lfQ0xBU1NfU1RPUkFHRV9JREUgMHgwMTAxCisjZGVmaW5lIFBDSV9DTEFTU19TVE9SQUdFX0ZMT1BQWSAweDAxMDIKKyNkZWZpbmUgUENJX0NMQVNTX1NUT1JBR0VfSVBJIDB4MDEwMworI2RlZmluZSBQQ0lfQ0xBU1NfU1RPUkFHRV9SQUlEIDB4MDEwNAorI2RlZmluZSBQQ0lfQ0xBU1NfU1RPUkFHRV9TQVMgMHgwMTA3CisjZGVmaW5lIFBDSV9DTEFTU19TVE9SQUdFX09USEVSIDB4MDE4MAorCisjZGVmaW5lIFBDSV9CQVNFX0NMQVNTX05FVFdPUksgMHgwMgorI2RlZmluZSBQQ0lfQ0xBU1NfTkVUV09SS19FVEhFUk5FVCAweDAyMDAKKyNkZWZpbmUgUENJX0NMQVNTX05FVFdPUktfVE9LRU5fUklORyAweDAyMDEKKyNkZWZpbmUgUENJX0NMQVNTX05FVFdPUktfRkRESSAweDAyMDIKKyNkZWZpbmUgUENJX0NMQVNTX05FVFdPUktfQVRNIDB4MDIwMworI2RlZmluZSBQQ0lfQ0xBU1NfTkVUV09SS19PVEhFUiAweDAyODAKKworI2RlZmluZSBQQ0lfQkFTRV9DTEFTU19ESVNQTEFZIDB4MDMKKyNkZWZpbmUgUENJX0NMQVNTX0RJU1BMQVlfVkdBIDB4MDMwMAorI2RlZmluZSBQQ0lfQ0xBU1NfRElTUExBWV9YR0EgMHgwMzAxCisjZGVmaW5lIFBDSV9DTEFTU19ESVNQTEFZXzNEIDB4MDMwMgorI2RlZmluZSBQQ0lfQ0xBU1NfRElTUExBWV9PVEhFUiAweDAzODAKKworI2RlZmluZSBQQ0lfQkFTRV9DTEFTU19NVUxUSU1FRElBIDB4MDQKKyNkZWZpbmUgUENJX0NMQVNTX01VTFRJTUVESUFfVklERU8gMHgwNDAwCisjZGVmaW5lIFBDSV9DTEFTU19NVUxUSU1FRElBX0FVRElPIDB4MDQwMQorI2RlZmluZSBQQ0lfQ0xBU1NfTVVMVElNRURJQV9QSE9ORSAweDA0MDIKKyNkZWZpbmUgUENJX0NMQVNTX01VTFRJTUVESUFfT1RIRVIgMHgwNDgwCisKKyNkZWZpbmUgUENJX0JBU0VfQ0xBU1NfTUVNT1JZIDB4MDUKKyNkZWZpbmUgUENJX0NMQVNTX01FTU9SWV9SQU0gMHgwNTAwCisjZGVmaW5lIFBDSV9DTEFTU19NRU1PUllfRkxBU0ggMHgwNTAxCisjZGVmaW5lIFBDSV9DTEFTU19NRU1PUllfT1RIRVIgMHgwNTgwCisKKyNkZWZpbmUgUENJX0JBU0VfQ0xBU1NfQlJJREdFIDB4MDYKKyNkZWZpbmUgUENJX0NMQVNTX0JSSURHRV9IT1NUIDB4MDYwMAorI2RlZmluZSBQQ0lfQ0xBU1NfQlJJREdFX0lTQSAweDA2MDEKKyNkZWZpbmUgUENJX0NMQVNTX0JSSURHRV9FSVNBIDB4MDYwMgorI2RlZmluZSBQQ0lfQ0xBU1NfQlJJREdFX01DIDB4MDYwMworI2RlZmluZSBQQ0lfQ0xBU1NfQlJJREdFX1BDSSAweDA2MDQKKyNkZWZpbmUgUENJX0NMQVNTX0JSSURHRV9QQ01DSUEgMHgwNjA1CisjZGVmaW5lIFBDSV9DTEFTU19CUklER0VfTlVCVVMgMHgwNjA2CisjZGVmaW5lIFBDSV9DTEFTU19CUklER0VfQ0FSREJVUyAweDA2MDcKKyNkZWZpbmUgUENJX0NMQVNTX0JSSURHRV9SQUNFV0FZIDB4MDYwOAorI2RlZmluZSBQQ0lfQ0xBU1NfQlJJREdFX09USEVSIDB4MDY4MAorCisjZGVmaW5lIFBDSV9CQVNFX0NMQVNTX0NPTU1VTklDQVRJT04gMHgwNworI2RlZmluZSBQQ0lfQ0xBU1NfQ09NTVVOSUNBVElPTl9TRVJJQUwgMHgwNzAwCisjZGVmaW5lIFBDSV9DTEFTU19DT01NVU5JQ0FUSU9OX1BBUkFMTEVMIDB4MDcwMQorI2RlZmluZSBQQ0lfQ0xBU1NfQ09NTVVOSUNBVElPTl9NVUxUSVNFUklBTCAweDA3MDIKKyNkZWZpbmUgUENJX0NMQVNTX0NPTU1VTklDQVRJT05fTU9ERU0gMHgwNzAzCisjZGVmaW5lIFBDSV9DTEFTU19DT01NVU5JQ0FUSU9OX09USEVSIDB4MDc4MAorCisjZGVmaW5lIFBDSV9CQVNFX0NMQVNTX1NZU1RFTSAweDA4CisjZGVmaW5lIFBDSV9DTEFTU19TWVNURU1fUElDIDB4MDgwMAorI2RlZmluZSBQQ0lfQ0xBU1NfU1lTVEVNX1BJQ19JT0FQSUMgMHgwODAwMTAKKyNkZWZpbmUgUENJX0NMQVNTX1NZU1RFTV9QSUNfSU9YQVBJQyAweDA4MDAyMAorI2RlZmluZSBQQ0lfQ0xBU1NfU1lTVEVNX0RNQSAweDA4MDEKKyNkZWZpbmUgUENJX0NMQVNTX1NZU1RFTV9USU1FUiAweDA4MDIKKyNkZWZpbmUgUENJX0NMQVNTX1NZU1RFTV9SVEMgMHgwODAzCisjZGVmaW5lIFBDSV9DTEFTU19TWVNURU1fUENJX0hPVFBMVUcgMHgwODA0CisjZGVmaW5lIFBDSV9DTEFTU19TWVNURU1fU0RIQ0kgMHgwODA1CisjZGVmaW5lIFBDSV9DTEFTU19TWVNURU1fT1RIRVIgMHgwODgwCisKKyNkZWZpbmUgUENJX0JBU0VfQ0xBU1NfSU5QVVQgMHgwOQorI2RlZmluZSBQQ0lfQ0xBU1NfSU5QVVRfS0VZQk9BUkQgMHgwOTAwCisjZGVmaW5lIFBDSV9DTEFTU19JTlBVVF9QRU4gMHgwOTAxCisjZGVmaW5lIFBDSV9DTEFTU19JTlBVVF9NT1VTRSAweDA5MDIKKyNkZWZpbmUgUENJX0NMQVNTX0lOUFVUX1NDQU5ORVIgMHgwOTAzCisjZGVmaW5lIFBDSV9DTEFTU19JTlBVVF9HQU1FUE9SVCAweDA5MDQKKyNkZWZpbmUgUENJX0NMQVNTX0lOUFVUX09USEVSIDB4MDk4MAorCisjZGVmaW5lIFBDSV9CQVNFX0NMQVNTX0RPQ0tJTkcgMHgwYQorI2RlZmluZSBQQ0lfQ0xBU1NfRE9DS0lOR19HRU5FUklDIDB4MGEwMAorI2RlZmluZSBQQ0lfQ0xBU1NfRE9DS0lOR19PVEhFUiAweDBhODAKKworI2RlZmluZSBQQ0lfQkFTRV9DTEFTU19QUk9DRVNTT1IgMHgwYgorI2RlZmluZSBQQ0lfQ0xBU1NfUFJPQ0VTU09SXzM4NiAweDBiMDAKKyNkZWZpbmUgUENJX0NMQVNTX1BST0NFU1NPUl80ODYgMHgwYjAxCisjZGVmaW5lIFBDSV9DTEFTU19QUk9DRVNTT1JfUEVOVElVTSAweDBiMDIKKyNkZWZpbmUgUENJX0NMQVNTX1BST0NFU1NPUl9BTFBIQSAweDBiMTAKKyNkZWZpbmUgUENJX0NMQVNTX1BST0NFU1NPUl9QT1dFUlBDIDB4MGIyMAorI2RlZmluZSBQQ0lfQ0xBU1NfUFJPQ0VTU09SX01JUFMgMHgwYjMwCisjZGVmaW5lIFBDSV9DTEFTU19QUk9DRVNTT1JfQ08gMHgwYjQwCisKKyNkZWZpbmUgUENJX0JBU0VfQ0xBU1NfU0VSSUFMIDB4MGMKKyNkZWZpbmUgUENJX0NMQVNTX1NFUklBTF9GSVJFV0lSRSAweDBjMDAKKyNkZWZpbmUgUENJX0NMQVNTX1NFUklBTF9BQ0NFU1MgMHgwYzAxCisjZGVmaW5lIFBDSV9DTEFTU19TRVJJQUxfU1NBIDB4MGMwMgorI2RlZmluZSBQQ0lfQ0xBU1NfU0VSSUFMX1VTQiAweDBjMDMKKyNkZWZpbmUgUENJX0NMQVNTX1NFUklBTF9VU0JfVUhDSSAweDBjMDMwMAorI2RlZmluZSBQQ0lfQ0xBU1NfU0VSSUFMX1VTQl9PSENJIDB4MGMwMzEwCisjZGVmaW5lIFBDSV9DTEFTU19TRVJJQUxfVVNCX0VIQ0kgMHgwYzAzMjAKKyNkZWZpbmUgUENJX0NMQVNTX1NFUklBTF9GSUJFUiAweDBjMDQKKyNkZWZpbmUgUENJX0NMQVNTX1NFUklBTF9TTUJVUyAweDBjMDUKKworI2RlZmluZSBQQ0lfQkFTRV9DTEFTU19JTlRFTExJR0VOVCAweDBlCisjZGVmaW5lIFBDSV9DTEFTU19JTlRFTExJR0VOVF9JMk8gMHgwZTAwCisKKyNkZWZpbmUgUENJX0JBU0VfQ0xBU1NfU0FURUxMSVRFIDB4MGYKKyNkZWZpbmUgUENJX0NMQVNTX1NBVEVMTElURV9UViAweDBmMDAKKyNkZWZpbmUgUENJX0NMQVNTX1NBVEVMTElURV9BVURJTyAweDBmMDEKKyNkZWZpbmUgUENJX0NMQVNTX1NBVEVMTElURV9WT0lDRSAweDBmMDMKKyNkZWZpbmUgUENJX0NMQVNTX1NBVEVMTElURV9EQVRBIDB4MGYwNAorCisjZGVmaW5lIFBDSV9CQVNFX0NMQVNTX0NSWVBUIDB4MTAKKyNkZWZpbmUgUENJX0NMQVNTX0NSWVBUX05FVFdPUksgMHgxMDAwCisjZGVmaW5lIFBDSV9DTEFTU19DUllQVF9FTlRFUlRBSU5NRU5UIDB4MTAwMQorI2RlZmluZSBQQ0lfQ0xBU1NfQ1JZUFRfT1RIRVIgMHgxMDgwCisKKyNkZWZpbmUgUENJX0JBU0VfQ0xBU1NfU0lHTkFMX1BST0NFU1NJTkcgMHgxMQorI2RlZmluZSBQQ0lfQ0xBU1NfU1BfRFBJTyAweDExMDAKKyNkZWZpbmUgUENJX0NMQVNTX1NQX09USEVSIDB4MTE4MAorCisjZGVmaW5lIFBDSV9DTEFTU19PVEhFUlMgMHhmZgorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfRFlOQUxJTksgMHgwNjc1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRFlOQUxJTktfSVM2NFBIIDB4MTcwMgorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQkVSS09NIDB4MDg3MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0JFUktPTV9BMVQgMHhmZmExCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQkVSS09NX1RfQ09OQ0VQVCAweGZmYTIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9CRVJLT01fQTRUIDB4ZmZhNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0JFUktPTV9TQ0lURUxfUVVBRFJPIDB4ZmZhOAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQ09NUEFRIDB4MGUxMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NPTVBBUV9UT0tFTlJJTkcgMHgwNTA4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ09NUEFRX1RBQ0hZT04gMHhhMGZjCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ09NUEFRX1NNQVJUMlAgMHhhZTEwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ09NUEFRX05FVEVMMTAwIDB4YWUzMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NPTVBBUV9ORVRFTDEwIDB4YWUzNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NPTVBBUV9UUklGTEVYX0lERSAweGFlMzMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DT01QQVFfTkVURkxFWDNJIDB4YWUzNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NPTVBBUV9ORVRFTDEwMEQgMHhhZTQwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ09NUEFRX05FVEVMMTAwUEkgMHhhZTQzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ09NUEFRX05FVEVMMTAwSSAweGIwMTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DT01QQVFfQ0lTUyAweGIwNjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DT01QQVFfQ0lTU0IgMHhiMTc4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ09NUEFRX0NJU1NDIDB4NDYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DT01QQVFfVEhVTkRFUiAweGYxMzAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DT01QQVFfTkVURkxFWDNCIDB4ZjE1MAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfTkNSIDB4MTAwMAorI2RlZmluZSBQQ0lfVkVORE9SX0lEX0xTSV9MT0dJQyAweDEwMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OQ1JfNTNDODEwIDB4MDAwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05DUl81M0M4MjAgMHgwMDAyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkNSXzUzQzgyNSAweDAwMDMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OQ1JfNTNDODE1IDB4MDAwNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xTSV81M0M4MTBBUCAweDAwMDUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OQ1JfNTNDODYwIDB4MDAwNgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xTSV81M0MxNTEwIDB4MDAwYQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05DUl81M0M4OTYgMHgwMDBiCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkNSXzUzQzg5NSAweDAwMGMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OQ1JfNTNDODg1IDB4MDAwZAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05DUl81M0M4NzUgMHgwMDBmCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkNSXzUzQzE1MTAgMHgwMDEwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTFNJXzUzQzg5NUEgMHgwMDEyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTFNJXzUzQzg3NUEgMHgwMDEzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTFNJXzUzQzEwMTBfMzMgMHgwMDIwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTFNJXzUzQzEwMTBfNjYgMHgwMDIxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTFNJXzUzQzEwMzAgMHgwMDMwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTFNJXzEwMzBfNTNDMTAzNSAweDAwMzIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9MU0lfNTNDMTAzNSAweDAwNDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OQ1JfNTNDODc1SiAweDAwOGYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9MU0lfRkM5MDkgMHgwNjIxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTFNJX0ZDOTI5IDB4MDYyMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xTSV9GQzkyOV9MQU4gMHgwNjIzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTFNJX0ZDOTE5IDB4MDYyNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xTSV9GQzkxOV9MQU4gMHgwNjI1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTFNJX0ZDOTI5WCAweDA2MjYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9MU0lfRkM5MzlYIDB4MDY0MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xTSV9GQzk0OVggMHgwNjQwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTFNJX0ZDOTQ5RVMgMHgwNjQ2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTFNJX0ZDOTE5WCAweDA2MjgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OQ1JfWUVMTE9XRklOIDB4MDcwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xTSV82MUMxMDIgMHgwOTAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTFNJXzYzQzgxNSAweDEwMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9MU0lfU0FTMTA2NCAweDAwNTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9MU0lfU0FTMTA2NFIgMHgwNDExCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTFNJX1NBUzEwNjYgMHgwMDVFCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTFNJX1NBUzEwNjggMHgwMDU0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTFNJX1NBUzEwNjRBIDB4MDA1QworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xTSV9TQVMxMDY0RSAweDAwNTYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9MU0lfU0FTMTA2NkUgMHgwMDVBCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTFNJX1NBUzEwNjhFIDB4MDA1OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xTSV9TQVMxMDc4IDB4MDA2MAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQVRJIDB4MTAwMgorCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJXzY4ODAwIDB4NDE1OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV8yMTVDVDIyMiAweDQzNTQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfMjEwODg4Q1ggMHg0MzU4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJXzIxNUVUMjIyIDB4NDU1NAorCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJXzIxNUdCIDB4NDc0MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV8yMTVHRCAweDQ3NDQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfMjE1R0kgMHg0NzQ5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJXzIxNUdQIDB4NDc1MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV8yMTVHUSAweDQ3NTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfMjE1WEwgMHg0NzUyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJXzIxNUdUIDB4NDc1NAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV8yMTVHVEIgMHg0NzU1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJXzIxNV9JViAweDQ3NTYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfMjE1X0lXIDB4NDc1NworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV8yMTVfSVogMHg0NzVBCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJXzIxMDg4OEdYIDB4NDc1OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV8yMTVfTEIgMHg0YzQyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJXzIxNV9MRCAweDRjNDQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfMjE1X0xHIDB4NGM0NworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV8yMTVfTEkgMHg0YzQ5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJXzIxNV9MTSAweDRjNEQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfMjE1X0xOIDB4NGM0RQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV8yMTVfTFIgMHg0YzUyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJXzIxNV9MUyAweDRjNTMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfMjY0X0xUIDB4NGM1NAorCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJXzI2NFZUIDB4NTY1NAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV8yNjRWVSAweDU2NTUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfMjY0VlYgMHg1NjU2CisKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9SRSAweDUyNDUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9SRiAweDUyNDYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9SRyAweDUyNDcKKworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQUdFMTI4X1JLIDB4NTI0YgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQUdFMTI4X1JMIDB4NTI0YworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQUdFMTI4X1NFIDB4NTM0NQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQUdFMTI4X1NGIDB4NTM0NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQUdFMTI4X1NHIDB4NTM0NworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQUdFMTI4X1NIIDB4NTM0OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQUdFMTI4X1NLIDB4NTM0YgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQUdFMTI4X1NMIDB4NTM0YworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQUdFMTI4X1NNIDB4NTM0ZAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQUdFMTI4X1NOIDB4NTM0ZQorCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBR0UxMjhfVEYgMHg1NDQ2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBR0UxMjhfVEwgMHg1NDRjCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBR0UxMjhfVFIgMHg1NDUyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBR0UxMjhfVFMgMHg1NDUzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBR0UxMjhfVFQgMHg1NDU0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBR0UxMjhfVFUgMHg1NDU1CisKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9MRSAweDRjNDUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9MRiAweDRjNDYKKworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQUdFMTI4X01GIDB4NGQ0NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQUdFMTI4X01MIDB4NGQ0YworCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBR0UxMjhfUEEgMHg1MDQxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBR0UxMjhfUEIgMHg1MDQyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBR0UxMjhfUEMgMHg1MDQzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBR0UxMjhfUEQgMHg1MDQ0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBR0UxMjhfUEUgMHg1MDQ1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBR0UxMjhfUEYgMHg1MDQ2CisKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9QRyAweDUwNDcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9QSCAweDUwNDgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9QSSAweDUwNDkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9QSiAweDUwNEEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9QSyAweDUwNEIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9QTCAweDUwNEMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9QTSAweDUwNEQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9QTiAweDUwNEUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9QTyAweDUwNEYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9QUCAweDUwNTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9QUSAweDUwNTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9QUiAweDUwNTIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9QUyAweDUwNTMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9QVCAweDUwNTQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9QVSAweDUwNTUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9QViAweDUwNTYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9QVyAweDUwNTcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9QWCAweDUwNTgKKworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fUUQgMHg1MTQ0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9RRSAweDUxNDUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX1FGIDB4NTE0NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fUUcgMHg1MTQ3CisKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX1FZIDB4NTE1OQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fUVogMHg1MTVhCisKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX1FMIDB4NTE0YworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fUU4gMHg1MTRlCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9RTyAweDUxNGYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX1FsIDB4NTE2YworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fQkIgMHg0MjQyCisKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX1FNIDB4NTE0ZAorCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9RVyAweDUxNTcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX1FYIDB4NTE1OAorCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9JZCAweDQ5NjQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX0llIDB4NDk2NQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fSWYgMHg0OTY2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9JZyAweDQ5NjcKKworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fWWEgMHg1OTYxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9ZZCAweDU5NjQKKworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fTkQgMHg0ZTQ0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9ORSAweDRlNDUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX05GIDB4NGU0NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fTkcgMHg0ZTQ3CisKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX0xZIDB4NGM1OQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fTFogMHg0YzVhCisKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX0xXIDB4NGM1NworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fTFggMHg0YzU4CisKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX0xkIDB4NGM2NAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fTGUgMHg0YzY1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9MZiAweDRjNjYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX0xnIDB4NGM2NworCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JTMTAwIDB4Y2FiMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SUzIwMCAweGNhYjIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUlMyMDBfQiAweGNiYjIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUlMyNTAgMHhjYWIzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JTMzAwXzEwMCAweDU4MzAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUlMzMDBfMTMzIDB4NTgzMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SUzMwMF8xNjYgMHg1ODMyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JTMzAwXzIwMCAweDU4MzMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUlMzNTBfMTAwIDB4NzgzMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SUzM1MF8xMzMgMHg3ODMxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JTMzUwXzE2NiAweDc4MzIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUlMzNTBfMjAwIDB4NzgzMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SUzQwMF8xMDAgMHg1YTMwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JTNDAwXzEzMyAweDVhMzEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUlM0MDBfMTY2IDB4NWEzMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SUzQwMF8yMDAgMHg1YTMzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JTNDgwIDB4NTk1MAorCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDIwMF9JREUgMHg0MzQ5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDIwMF9TTUJVUyAweDQzNTMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfSVhQMzAwX1NNQlVTIDB4NDM2MworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9JWFAzMDBfSURFIDB4NDM2OQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9JWFAzMDBfU0FUQSAweDQzNmUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfSVhQNDAwX1NNQlVTIDB4NDM3MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9JWFA0MDBfSURFIDB4NDM3NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9JWFA0MDBfU0FUQSAweDQzNzkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfSVhQNDAwX1NBVEEyIDB4NDM3YQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9JWFA2MDBfU0FUQSAweDQzODAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfSVhQNjAwX1NSQUlEIDB4NDM4MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9JWFA2MDBfSURFIDB4NDM4YworCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfVkxTSSAweDEwMDQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WTFNJXzgyQzU5MiAweDAwMDUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WTFNJXzgyQzU5MyAweDAwMDYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WTFNJXzgyQzU5NCAweDAwMDcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WTFNJXzgyQzU5NyAweDAwMDkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WTFNJXzgyQzU0MSAweDAwMGMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WTFNJXzgyQzU0MyAweDAwMGQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WTFNJXzgyQzUzMiAweDAxMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WTFNJXzgyQzUzNCAweDAxMDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WTFNJXzgyQzUzNSAweDAxMDQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WTFNJXzgyQzE0NyAweDAxMDUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WTFNJX1ZBUzk2MDExIDB4MDcwMgorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQURMIDB4MTAwNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FETF8yMzAxIDB4MjMwMQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfTlMgMHgxMDBiCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlNfODc0MTUgMHgwMDAyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlNfODc1NjBfTElPIDB4MDAwZQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05TXzg3NTYwX1VTQiAweDAwMTIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OU184MzgxNSAweDAwMjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OU184MzgyMCAweDAwMjIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OU19DUzU1MzVfSVNBIDB4MDAyYgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05TX0NTNTUzNV9JREUgMHgwMDJkCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlNfQ1M1NTM1X0FVRElPIDB4MDAyZQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05TX0NTNTUzNV9VU0IgMHgwMDJmCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlNfQ1M1NTM1X1ZJREVPIDB4MDAzMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05TX1NBVFVSTiAweDAwMzUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OU19TQ3gyMDBfQlJJREdFIDB4MDUwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05TX1NDeDIwMF9TTUkgMHgwNTAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlNfU0N4MjAwX0lERSAweDA1MDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OU19TQ3gyMDBfQVVESU8gMHgwNTAzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlNfU0N4MjAwX1ZJREVPIDB4MDUwNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05TX1NDeDIwMF9YQlVTIDB4MDUwNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05TX1NDMTEwMF9CUklER0UgMHgwNTEwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlNfU0MxMTAwX1NNSSAweDA1MTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OU19TQzExMDBfWEJVUyAweDA1MTUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OU184NzQxMCAweGQwMDEKKworI2RlZmluZSBQQ0lfREVWSUNFX0lEX05TX0NTNTUzNV9IT1NUX0JSSURHRSAweDAwMjgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OU19DUzU1MzVfSVNBX0JSSURHRSAweDAwMmIKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1RTRU5HIDB4MTAwYworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RTRU5HX1czMlBfMiAweDMyMDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9UU0VOR19XMzJQX2IgMHgzMjA1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVFNFTkdfVzMyUF9jIDB4MzIwNgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RTRU5HX1czMlBfZCAweDMyMDcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9UU0VOR19FVDYwMDAgMHgzMjA4CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9XRUlURUsgMHgxMDBlCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfV0VJVEVLX1A5MDAwIDB4OTAwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1dFSVRFS19QOTEwMCAweDkxMDAKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0RFQyAweDEwMTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ERUNfQlJEIDB4MDAwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0RFQ19UVUxJUCAweDAwMDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ERUNfVEdBIDB4MDAwNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0RFQ19UVUxJUF9GQVNUIDB4MDAwOQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0RFQ19UR0EyIDB4MDAwRAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0RFQ19GRERJIDB4MDAwRgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0RFQ19UVUxJUF9QTFVTIDB4MDAxNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0RFQ18yMTE0MiAweDAwMTkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ERUNfMjEwNTIgMHgwMDIxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfREVDXzIxMTUwIDB4MDAyMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0RFQ18yMTE1MiAweDAwMjQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ERUNfMjExNTMgMHgwMDI1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfREVDXzIxMTU0IDB4MDAyNgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0RFQ18yMTI4NSAweDEwNjUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DT01QQVFfNDJYWCAweDAwNDYKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0NJUlJVUyAweDEwMTMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DSVJSVVNfNzU0OCAweDAwMzgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DSVJSVVNfNTQzMCAweDAwYTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DSVJSVVNfNTQzNF80IDB4MDBhNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NJUlJVU181NDM0XzggMHgwMGE4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ0lSUlVTXzU0MzYgMHgwMGFjCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ0lSUlVTXzU0NDYgMHgwMGI4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ0lSUlVTXzU0ODAgMHgwMGJjCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ0lSUlVTXzU0NjIgMHgwMGQwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ0lSUlVTXzU0NjQgMHgwMGQ0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ0lSUlVTXzU0NjUgMHgwMGQ2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ0lSUlVTXzY3MjkgMHgxMTAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ0lSUlVTXzY4MzIgMHgxMTEwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ0lSUlVTXzc1NDMgMHgxMjAyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ0lSUlVTXzQ2MTAgMHg2MDAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ0lSUlVTXzQ2MTIgMHg2MDAzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ0lSUlVTXzQ2MTUgMHg2MDA0CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9JQk0gMHgxMDE0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSUJNX1RSIDB4MDAxOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lCTV9UUl9XQUtFIDB4MDAzZQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lCTV9DUEM3MTBfUENJNjQgMHgwMGZjCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSUJNX1NOSVBFIDB4MDE4MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lCTV9DSVRSSU5FIDB4MDI4QworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lCTV9HRU1TVE9ORSAweEIxNjYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JQk1fT0JTSURJQU4gMHgwMkJECisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSUJNX0lDT01fREVWX0lEXzEgMHgwMDMxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSUJNX0lDT01fREVWX0lEXzIgMHgwMjE5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSUJNX0lDT01fVjJfVFdPX1BPUlRTX1JWWCAweDAyMUEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JQk1fSUNPTV9WMl9PTkVfUE9SVF9SVlhfT05FX1BPUlRfTURNIDB4MDI1MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lCTV9JQ09NX0ZPVVJfUE9SVF9NT0RFTCAweDI1MgorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQ09NUEVYMiAweDEwMWEgIAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NPTVBFWDJfMTAwVkcgMHgwMDA1CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9XRCAweDEwMWMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9XRF85MEMgMHhjMjRhCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BTUkgMHgxMDFlCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1JX01FR0FSQUlEMyAweDE5NjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTUlfTUVHQVJBSUQgMHg5MDEwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1JX01FR0FSQUlEMiAweDkwNjAKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0FNRCAweDEwMjIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfSzhfTkIgMHgxMTAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX0xBTkNFIDB4MjAwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9MQU5DRV9IT01FIDB4MjAwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9TQ1NJIDB4MjAyMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9TRVJFTkFERSAweDM2YzAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfRkVfR0FURV83MDA2IDB4NzAwNgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9GRV9HQVRFXzcwMDcgMHg3MDA3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX0ZFX0dBVEVfNzAwQyAweDcwMEMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfRkVfR0FURV83MDBFIDB4NzAwRQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9DT0JSQV83NDAxIDB4NzQwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9WSVBFUl83NDA5IDB4NzQwOQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9WSVBFUl83NDBCIDB4NzQwQgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9WSVBFUl83NDEwIDB4NzQxMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9WSVBFUl83NDExIDB4NzQxMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9WSVBFUl83NDEzIDB4NzQxMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9WSVBFUl83NDQwIDB4NzQ0MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9PUFVTXzc0NDEgMHg3NDQxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX09QVVNfNzQ0MyAweDc0NDMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfVklQRVJfNzQ0MyAweDc0NDMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfT1BVU183NDQ1IDB4NzQ0NQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF84MTExX0xQQyAweDc0NjgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfODExMV9JREUgMHg3NDY5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EXzgxMTFfU01CVVMyIDB4NzQ2YQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF84MTExX1NNQlVTIDB4NzQ2YgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF84MTExX0FVRElPIDB4NzQ2ZAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF84MTUxXzAgMHg3NDU0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EXzgxMzFfQlJJREdFIDB4NzQ1MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF84MTMxX0FQSUMgMHg3NDUxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX0NTNTUzNl9JU0EgMHgyMDkwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX0NTNTUzNl9GTEFTSCAweDIwOTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfQ1M1NTM2X0FVRElPIDB4MjA5MworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9DUzU1MzZfT0hDIDB4MjA5NAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9DUzU1MzZfRUhDIDB4MjA5NQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9DUzU1MzZfVURDIDB4MjA5NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9DUzU1MzZfVU9DIDB4MjA5NworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9DUzU1MzZfSURFIDB4MjA5QQorCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX0xYX1ZJREVPIDB4MjA4MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9MWF9BRVMgMHgyMDgyCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9UUklERU5UIDB4MTAyMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RSSURFTlRfNERXQVZFX0RYIDB4MjAwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RSSURFTlRfNERXQVZFX05YIDB4MjAwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RSSURFTlRfOTMyMCAweDkzMjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9UUklERU5UXzkzODggMHg5Mzg4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVFJJREVOVF85Mzk3IDB4OTM5NworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RSSURFTlRfOTM5QSAweDkzOUEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9UUklERU5UXzk1MjAgMHg5NTIwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVFJJREVOVF85NTI1IDB4OTUyNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RSSURFTlRfOTQyMCAweDk0MjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9UUklERU5UXzk0NDAgMHg5NDQwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVFJJREVOVF85NjYwIDB4OTY2MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RSSURFTlRfOTc1MCAweDk3NTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9UUklERU5UXzk4NTAgMHg5ODUwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVFJJREVOVF85ODgwIDB4OTg4MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RSSURFTlRfODQwMCAweDg0MDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9UUklERU5UXzg0MjAgMHg4NDIwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVFJJREVOVF84NTAwIDB4ODUwMAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQUkgMHgxMDI1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQUlfTTE0MzUgMHgxNDM1CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9ERUxMIDB4MTAyOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0RFTExfUkFDSUlJIDB4MDAwOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0RFTExfUkFDNCAweDAwMTIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ERUxMX1BFUkM1IDB4MDAxNQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfTUFUUk9YIDB4MTAyQgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01BVFJPWF9NR0FfMiAweDA1MTgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NQVRST1hfTUlMIDB4MDUxOQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01BVFJPWF9NWVMgMHgwNTFBCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUFUUk9YX01JTF8yIDB4MDUxYgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01BVFJPWF9NWVNfQUdQIDB4MDUxZQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01BVFJPWF9NSUxfMl9BR1AgMHgwNTFmCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUFUUk9YX01HQV9JTVAgMHgwZDEwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUFUUk9YX0cxMDBfTU0gMHgxMDAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUFUUk9YX0cxMDBfQUdQIDB4MTAwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01BVFJPWF9HMjAwX1BDSSAweDA1MjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NQVRST1hfRzIwMF9BR1AgMHgwNTIxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUFUUk9YX0c0MDAgMHgwNTI1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUFUUk9YX0c1NTAgMHgyNTI3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUFUUk9YX1ZJQSAweDQ1MzYKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0NUIDB4MTAyYworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NUXzY5MDAwIDB4MDBjMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NUXzY1NTQ1IDB4MDBkOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NUXzY1NTQ4IDB4MDBkYworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NUXzY1NTUwIDB4MDBlMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NUXzY1NTU0IDB4MDBlNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NUXzY1NTU1IDB4MDBlNQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfTUlSTyAweDEwMzEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NSVJPXzM2MDUwIDB4NTYwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01JUk9fREMxMFBMVVMgMHg3ZWZlCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUlST19EQzMwUExVUyAweGQ4MDEKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX05FQyAweDEwMzMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORUNfQ0JVU18xIDB4MDAwMSAgCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVDX0xPQ0FMIDB4MDAwMiAgCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVDX0FUTSAweDAwMDMgIAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FQ19SNDAwMCAweDAwMDQgIAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FQ180ODYgMHgwMDA1ICAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORUNfQUNDRUxfMSAweDAwMDYgIAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FQ19VWEJVUyAweDAwMDcgIAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FQ19BQ0NFTF8yIDB4MDAwOCAgCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVDX0dSQVBIIDB4MDAwOSAgCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVDX1ZMIDB4MDAxNiAgCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVDX1NUQVJBTFBIQTIgMHgwMDJjICAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORUNfQ0JVU18yIDB4MDAyZCAgCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVDX1VTQiAweDAwMzUgIAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FQ19DQlVTXzMgMHgwMDNiCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVDX05BUENDQVJEIDB4MDAzZQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FQ19QQ1gyIDB4MDA0NiAgCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVDX05JTEU0IDB4MDA1YQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FQ19WUkM1NDc2IDB4MDA5YgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FQ19WUkM0MTczIDB4MDBhNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FQ19WUkM1NDc3X0FDOTcgMHgwMGE2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVDX1BDOTgyMUNTMDEgMHg4MDBjICAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORUNfUEM5ODIxTlJCMDYgMHg4MDBkICAKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0ZEIDB4MTAzNgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0ZEXzM2QzcwIDB4MDAwMAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfU0kgMHgxMDM5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNTU5MV9BR1AgMHgwMDAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNjIwMiAweDAwMDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV81MDMgMHgwMDA4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfQUNQSSAweDAwMDkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV9TTUJVUyAweDAwMTYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV9MUEMgMHgwMDE4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNTU5N19WR0EgMHgwMjAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNjIwNSAweDAyMDUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV81MDEgMHgwNDA2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNDk2IDB4MDQ5NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzMwMCAweDAzMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV8zMTVIIDB4MDMxMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzMxNSAweDAzMTUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV8zMTVQUk8gMHgwMzI1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNTMwIDB4MDUzMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzU0MCAweDA1NDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV81NTAgMHgwNTUwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNTQwX1ZHQSAweDUzMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV81NTBfVkdBIDB4NTMxNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzYyMCAweDA2MjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV82MzAgMHgwNjMwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNjMzIDB4MDYzMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzYzNSAweDA2MzUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV82NDAgMHgwNjQwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNjQ1IDB4MDY0NQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzY0NiAweDA2NDYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV82NDggMHgwNjQ4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNjUwIDB4MDY1MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzY1MSAweDA2NTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV82NTUgMHgwNjU1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNjYxIDB4MDY2MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzczMCAweDA3MzAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV83MzMgMHgwNzMzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNjMwX1ZHQSAweDYzMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV83MzUgMHgwNzM1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNzQwIDB4MDc0MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzc0MSAweDA3NDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV83NDUgMHgwNzQ1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNzQ2IDB4MDc0NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzc1NSAweDA3NTUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV83NjAgMHgwNzYwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfOTAwIDB4MDkwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzk2MSAweDA5NjEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV85NjIgMHgwOTYyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfOTYzIDB4MDk2MworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzk2NSAweDA5NjUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV85NjYgMHgwOTY2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfOTY4IDB4MDk2OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzU1MTEgMHg1NTExCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNTUxMyAweDU1MTMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV81NTE3IDB4NTUxNworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzU1MTggMHg1NTE4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNTU3MSAweDU1NzEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV81NTgxIDB4NTU4MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzU1ODIgMHg1NTgyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNTU5MSAweDU1OTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV81NTk2IDB4NTU5NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzU1OTcgMHg1NTk3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNTU5OCAweDU1OTgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV81NjAwIDB4NTYwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzcwMTIgMHg3MDEyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNzAxMyAweDcwMTMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV83MDE2IDB4NzAxNgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzcwMTggMHg3MDE4CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9IUCAweDEwM2MKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9IUF9WSVNVQUxJWkVfRUcgMHgxMDA1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSFBfVklTVUFMSVpFX0ZYNiAweDEwMDYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9IUF9WSVNVQUxJWkVfRlg0IDB4MTAwOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hQX1ZJU1VBTElaRV9GWDIgMHgxMDBhCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSFBfVEFDSFlPTiAweDEwMjgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9IUF9UQUNITElURSAweDEwMjkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9IUF9KMjU4NUEgMHgxMDMwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSFBfSjI1ODVCIDB4MTAzMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hQX0oyOTczQSAweDEwNDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9IUF9KMjk3MEEgMHgxMDQyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSFBfRElWQSAweDEwNDgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9IUF9ESVZBX1RPU0NBMSAweDEwNDkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9IUF9ESVZBX1RPU0NBMiAweDEwNEEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9IUF9ESVZBX01BRVNUUk8gMHgxMDRCCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSFBfUkVPX0lPQyAweDEwZjEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9IUF9WSVNVQUxJWkVfRlhFIDB4MTA4YgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hQX0RJVkFfSEFMRkRPTUUgMHgxMjIzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSFBfRElWQV9LRVlTVE9ORSAweDEyMjYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9IUF9ESVZBX1BPV0VSQkFSIDB4MTIyNworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hQX1pYMV9JT0MgMHgxMjJhCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSFBfUENJWF9MQkEgMHgxMjJlCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSFBfU1gxMDAwX0lPQyAweDEyN2MKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9IUF9ESVZBX0VWRVJFU1QgMHgxMjgyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSFBfRElWQV9BVVggMHgxMjkwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSFBfRElWQV9STVAzIDB4MTMwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hQX0RJVkFfSFVSUklDQU5FIDB4MTMyYQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hQX0NJU1NBIDB4MzIyMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hQX0NJU1NDIDB4MzIzMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hQX0NJU1NEIDB4MzIzOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hQX1pYMl9JT0MgMHg0MDMxCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9QQ1RFQ0ggMHgxMDQyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUENURUNIX1JaMTAwMCAweDEwMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QQ1RFQ0hfUloxMDAxIDB4MTAwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BDVEVDSF9TQU1VUkFJX0lERSAweDMwMjAKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0FTVVNURUsgMHgxMDQzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVNVU1RFS18wNjc1IDB4MDY3NQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfRFBUIDB4MTA0NAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0RQVCAweGE0MDAKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX09QVEkgMHgxMDQ1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfT1BUSV84MkM1NTggMHhjNTU4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfT1BUSV84MkM2MjEgMHhjNjIxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfT1BUSV84MkM3MDAgMHhjNzAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfT1BUSV84MkM4MjUgMHhkNTY4CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9FTFNBIDB4MTA0OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0VMU0FfTUlDUk9MSU5LIDB4MTAwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0VMU0FfUVMzMDAwIDB4MzAwMAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQlVTTE9HSUMgMHgxMDRCCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQlVTTE9HSUNfTVVMVElNQVNURVJfTkMgMHgwMTQwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQlVTTE9HSUNfTVVMVElNQVNURVIgMHgxMDQwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQlVTTE9HSUNfRkxBU0hQT0lOVCAweDgxMzAKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1RJIDB4MTA0YworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJX1RWUDQwMjAgMHgzZDA3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfNDQ1MCAweDgwMTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USV9YWDIxX1hYMTEgMHg4MDMxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfWFgyMV9YWDExX1NEIDB4ODAzNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJX1g1MTUgMHg4MDM2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfWFgxMiAweDgwMzkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USV8xMTMwIDB4YWMxMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJXzEwMzEgMHhhYzEzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfMTEzMSAweGFjMTUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USV8xMjUwIDB4YWMxNgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJXzEyMjAgMHhhYzE3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfMTIyMSAweGFjMTkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USV8xMjEwIDB4YWMxYQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJXzE0NTAgMHhhYzFiCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfMTIyNSAweGFjMWMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USV8xMjUxQSAweGFjMWQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USV8xMjExIDB4YWMxZQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJXzEyNTFCIDB4YWMxZgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJXzQ0MTAgMHhhYzQxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfNDQ1MSAweGFjNDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USV80NTEwIDB4YWM0NAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJXzQ1MjAgMHhhYzQ2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfNzUxMCAweGFjNDcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USV83NjEwIDB4YWM0OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJXzc0MTAgMHhhYzQ5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfMTQxMCAweGFjNTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USV8xNDIwIDB4YWM1MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJXzE0NTFBIDB4YWM1MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJXzE2MjAgMHhhYzU0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfMTUyMCAweGFjNTUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USV8xNTEwIDB4YWM1NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJX1g2MjAgMHhhYzhkCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfWDQyMCAweGFjOGUKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1NPTlkgMHgxMDRkCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9XSU5CT05EMiAweDEwNTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9XSU5CT05EMl84OUM5NDBGIDB4NWE1YQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1dJTkJPTkQyXzY2OTIgMHg2NjkyCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BTklHTUEgMHgxMDUxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU5JR01BX01DMTQ1NTc1IDB4MDEwMAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfRUZBUiAweDEwNTUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9FRkFSX1NMQzkwRTY2XzEgMHg5MTMwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRUZBUl9TTEM5MEU2Nl8zIDB4OTQ2MworCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfTU9UT1JPTEEgMHgxMDU3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTU9UT1JPTEFfTVBDMTA1IDB4MDAwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01PVE9ST0xBX01QQzEwNiAweDAwMDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NT1RPUk9MQV9NUEMxMDcgMHgwMDA0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTU9UT1JPTEFfUkFWRU4gMHg0ODAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTU9UT1JPTEFfRkFMQ09OIDB4NDgwMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01PVE9ST0xBX0hBV0sgMHg0ODAzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTU9UT1JPTEFfSEFSUklFUiAweDQ4MGIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NT1RPUk9MQV9NUEM1MjAwIDB4NTgwMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX01PVE9ST0xBX01QQzUyMDBCIDB4NTgwOQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfUFJPTUlTRSAweDEwNWEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QUk9NSVNFXzIwMjY1IDB4MGQzMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BST01JU0VfMjAyNjcgMHg0ZDMwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUFJPTUlTRV8yMDI0NiAweDRkMzMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QUk9NSVNFXzIwMjYyIDB4NGQzOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BST01JU0VfMjAyNjMgMHgwRDM4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUFJPTUlTRV8yMDI2OCAweDRkNjgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QUk9NSVNFXzIwMjY5IDB4NGQ2OQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BST01JU0VfMjAyNzAgMHg2MjY4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUFJPTUlTRV8yMDI3MSAweDYyNjkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QUk9NSVNFXzIwMjc1IDB4MTI3NQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BST01JU0VfMjAyNzYgMHg1Mjc1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUFJPTUlTRV8yMDI3NyAweDcyNzUKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1VNQyAweDEwNjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9VTUNfVU04NjczRiAweDAxMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9VTUNfVU04ODg2QkYgMHg2NzNhCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVU1DX1VNODg4NkEgMHg4ODZhCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9NWUxFWCAweDEwNjkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NWUxFWF9EQUM5NjBfUCAweDAwMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NWUxFWF9EQUM5NjBfUEQgMHgwMDAyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTVlMRVhfREFDOTYwX1BHIDB4MDAxMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01ZTEVYX0RBQzk2MF9MQSAweDAwMjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NWUxFWF9EQUM5NjBfTFAgMHgwMDUwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTVlMRVhfREFDOTYwX0JBIDB4QkE1NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01ZTEVYX0RBQzk2MF9HRU0gMHhCMTY2CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BUFBMRSAweDEwNmIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BUFBMRV9CQU5ESVQgMHgwMDAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVBQTEVfSFlEUkEgMHgwMDBlCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVBQTEVfVU5JX05fRlcgMHgwMDE4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVBQTEVfVU5JX05fQUdQIDB4MDAyMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FQUExFX1VOSV9OX0dNQUMgMHgwMDIxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVBQTEVfVU5JX05fR01BQ1AgMHgwMDI0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVBQTEVfVU5JX05fQUdQX1AgMHgwMDI3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVBQTEVfVU5JX05fQUdQMTUgMHgwMDJkCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVBQTEVfVU5JX05fUENJMTUgMHgwMDJlCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVBQTEVfVU5JX05fR01BQzIgMHgwMDMyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVBQTEVfVU5JX05fQVRBIDB4MDAzMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FQUExFX1VOSV9OX0FHUDIgMHgwMDM0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVBQTEVfSVBJRF9BVEExMDAgMHgwMDNiCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVBQTEVfSzJfQVRBMTAwIDB4MDA0MworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FQUExFX1UzX0FHUCAweDAwNGIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BUFBMRV9LMl9HTUFDIDB4MDA0YworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FQUExFX1NIX0FUQSAweDAwNTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BUFBMRV9TSF9TVU5HRU0gMHgwMDUxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVBQTEVfVTNMX0FHUCAweDAwNTgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BUFBMRV9VM0hfQUdQIDB4MDA1OQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FQUExFX0lQSUQyX0FHUCAweDAwNjYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BUFBMRV9JUElEMl9BVEEgMHgwMDY5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVBQTEVfSVBJRDJfRlcgMHgwMDZhCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVBQTEVfSVBJRDJfR01BQyAweDAwNmIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BUFBMRV9USUdPTjMgMHgxNjQ1CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9ZQU1BSEEgMHgxMDczCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfWUFNQUhBXzcyNCAweDAwMDQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ZQU1BSEFfNzI0RiAweDAwMGQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ZQU1BSEFfNzQwIDB4MDAwYQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1lBTUFIQV83NDBDIDB4MDAwYworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1lBTUFIQV83NDQgMHgwMDEwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfWUFNQUhBXzc1NCAweDAwMTIKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1FMT0dJQyAweDEwNzcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9RTE9HSUNfSVNQMTAxNjAgMHgxMDE2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUUxPR0lDX0lTUDEwMjAgMHgxMDIwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUUxPR0lDX0lTUDEwODAgMHgxMDgwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUUxPR0lDX0lTUDEyMTYwIDB4MTIxNgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1AxMjQwIDB4MTI0MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1AxMjgwIDB4MTI4MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1AyMTAwIDB4MjEwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1AyMjAwIDB4MjIwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1AyMzAwIDB4MjMwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1AyMzEyIDB4MjMxMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1AyMzIyIDB4MjMyMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1A2MzEyIDB4NjMxMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1A2MzIyIDB4NjMyMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1AyNDIyIDB4MjQyMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1AyNDMyIDB4MjQzMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1AyNTEyIDB4MjUxMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1AyNTIyIDB4MjUyMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1A1NDIyIDB4NTQyMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1A1NDMyIDB4NTQzMgorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQ1lSSVggMHgxMDc4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ1lSSVhfNTUxMCAweDAwMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DWVJJWF9QQ0lfTUFTVEVSIDB4MDAwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NZUklYXzU1MjAgMHgwMDAyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ1lSSVhfNTUzMF9MRUdBQ1kgMHgwMTAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ1lSSVhfNTUzMF9JREUgMHgwMTAyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ1lSSVhfNTUzMF9BVURJTyAweDAxMDMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DWVJJWF81NTMwX1ZJREVPIDB4MDEwNAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQ09OVEFRIDB4MTA4MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NPTlRBUV84MkM2OTMgMHhjNjkzCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9PTElDT00gMHgxMDhkCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfT0xJQ09NX09DMjMyNSAweDAwMTIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9PTElDT01fT0MyMTgzIDB4MDAxMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX09MSUNPTV9PQzIzMjYgMHgwMDE0CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9TVU4gMHgxMDhlCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU1VOX0VCVVMgMHgxMDAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU1VOX0hBUFBZTUVBTCAweDEwMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TVU5fUklPX0VCVVMgMHgxMTAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU1VOX1JJT19HRU0gMHgxMTAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU1VOX1JJT18xMzk0IDB4MTEwMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NVTl9SSU9fVVNCIDB4MTEwMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NVTl9HRU0gMHgyYmFkCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU1VOX1NJTUJBIDB4NTAwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NVTl9QQk0gMHg4MDAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU1VOX1NDSElaTyAweDgwMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TVU5fU0FCUkUgMHhhMDAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU1VOX0hVTU1JTkdCSVJEIDB4YTAwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NVTl9UT01BVElMTE8gMHhhODAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU1VOX0NBU1NJTkkgMHhhYmJhCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9DTUQgMHgxMDk1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ01EXzY0MyAweDA2NDMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DTURfNjQ2IDB4MDY0NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NNRF82NDggMHgwNjQ4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ01EXzY0OSAweDA2NDkKKworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSV82ODAgMHgwNjgwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lJXzMxMTIgMHgzMTEyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lJXzEyMTBTQSAweDAyNDAKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0JST09LVFJFRSAweDEwOWUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9CUk9PS1RSRUVfODc4IDB4MDg3OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0JST09LVFJFRV84NzkgMHgwODc5CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9TR0kgMHgxMGE5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0dJX0lPQzMgMHgwMDAzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0dJX0lPQzQgMHgxMDBhCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfU0dJX0xJVEhJVU0gMHgxMDAyCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9XSU5CT05EIDB4MTBhZAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1dJTkJPTkRfODJDMTA1IDB4MDEwNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1dJTkJPTkRfODNDNTUzIDB4MDU2NQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfUExYIDB4MTBiNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BMWF9SNjg1IDB4MTAzMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BMWF9ST01VTFVTIDB4MTA2YQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BMWF9TUENPTTgwMCAweDEwNzYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QTFhfMTA3NyAweDEwNzcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QTFhfU1BDT00yMDAgMHgxMTAzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUExYX0RKSU5OX0lUT08gMHgxMTUxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUExYX1I3NTMgMHgxMTUyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUExYX09MSVRFQyAweDExODcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QTFhfUENJMjAwU1lOIDB4MzE5NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BMWF85MDUwIDB4OTA1MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BMWF85MDgwIDB4OTA4MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BMWF9HVEVLX1NFUklBTDIgMHhhMDAxCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9NQURHRSAweDEwYjYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NQURHRV9NSzIgMHgwMDAyCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF8zQ09NIDB4MTBiNworI2RlZmluZSBQQ0lfREVWSUNFX0lEXzNDT01fM0M5ODUgMHgwMDAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfM0NPTV8zQzk0MCAweDE3MDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF8zQ09NXzNDMzM5IDB4MzM5MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEXzNDT01fM0MzNTkgMHgzNTkwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfM0NPTV8zQzk0MEIgMHg4MGViCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfM0NPTV8zQ1I5OTAgMHg5OTAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfM0NPTV8zQ1I5OTBfVFhfOTUgMHg5OTAyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfM0NPTV8zQ1I5OTBfVFhfOTcgMHg5OTAzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfM0NPTV8zQ1I5OTBCIDB4OTkwNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEXzNDT01fM0NSOTkwX0ZYIDB4OTkwNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEXzNDT01fM0NSOTkwU1ZSOTUgMHg5OTA4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfM0NPTV8zQ1I5OTBTVlI5NyAweDk5MDkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF8zQ09NXzNDUjk5MFNWUiAweDk5MGEKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0FMIDB4MTBiOQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FMX00xNTMzIDB4MTUzMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FMX00xNTM1IDB4MTUzNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FMX00xNTQxIDB4MTU0MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FMX00xNTYzIDB4MTU2MworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FMX00xNjIxIDB4MTYyMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FMX00xNjMxIDB4MTYzMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FMX00xNjMyIDB4MTYzMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FMX00xNjQxIDB4MTY0MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FMX00xNjQ0IDB4MTY0NAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FMX00xNjQ3IDB4MTY0NworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FMX00xNjUxIDB4MTY1MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FMX00xNjcxIDB4MTY3MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FMX00xNjgxIDB4MTY4MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FMX00xNjgzIDB4MTY4MworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FMX00xNjg5IDB4MTY4OQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FMX001MjE5IDB4NTIxOQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FMX001MjI4IDB4NTIyOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FMX001MjI5IDB4NTIyOQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FMX001NDUxIDB4NTQ1MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FMX003MTAxIDB4NzEwMQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfTkVPTUFHSUMgMHgxMGM4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVPTUFHSUNfTk0yNTZBVl9BVURJTyAweDgwMDUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORU9NQUdJQ19OTTI1NlpYX0FVRElPIDB4ODAwNgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FT01BR0lDX05NMjU2WExfUExVU19BVURJTyAweDgwMTYKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1RDT05SQUQgMHgxMGRhCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVENPTlJBRF9UT0tFTlJJTkcgMHgwNTA4CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9OVklESUEgMHgxMGRlCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX1ROVCAweDAwMjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfVE5UMiAweDAwMjgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfVVROVDIgMHgwMDI5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX1ROVF9VTktOT1dOIDB4MDAyYQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9WVE5UMiAweDAwMkMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfVVZUTlQyIDB4MDAyRAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfTUNQMDRfU01CVVMgMHgwMDM0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRV9NQ1AwNF9JREUgMHgwMDM1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRV9NQ1AwNF9TQVRBIDB4MDAzNgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMTAgMHgwMDM3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8xMSAweDAwMzgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFX01DUDA0X1NBVEEyIDB4MDAzZQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFXzY4MDBfVUxUUkEgMHgwMDQwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfNjgwMCAweDAwNDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV82ODAwX0xFIDB4MDA0MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFXzY4MDBfR1QgMHgwMDQ1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX1FVQURST19GWF80MDAwIDB4MDA0RQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0U0X1NNQlVTIDB4MDA1MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfQ0s4MDRfSURFIDB4MDA1MworI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfQ0s4MDRfU0FUQSAweDAwNTQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFX0NLODA0X1NBVEEyIDB4MDA1NQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfOCAweDAwNTYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzkgMHgwMDU3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0NLODA0X0FVRElPIDB4MDA1OQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9DSzgwNF9QQ0lFIDB4MDA1ZAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0UyX1NNQlVTIDB4MDA2NAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0UyX0lERSAweDAwNjUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzIgMHgwMDY2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX01DUDJfTU9ERU0gMHgwMDY5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX01DUDJfQVVESU8gMHgwMDZhCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRTJTX1NNQlVTIDB4MDA4NAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0UyU19JREUgMHgwMDg1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF80IDB4MDA4NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9NQ1AyU19NT0RFTSAweDAwODkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfQ0s4X0FVRElPIDB4MDA4YQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfNSAweDAwOGMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFMlNfU0FUQSAweDAwOGUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV83ODAwX0dUIDB4MDA5MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFXzc4MDBfR1RYIDB4MDA5MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFX0dPXzc4MDAgMHgwMDk4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfR09fNzgwMF9HVFggMHgwMDk5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0lUTlQyIDB4MDBBMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0dFRk9SQ0VfNjgwMEEgMHgwMGMxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfR0VGT1JDRV82ODAwQV9MRSAweDAwYzIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9HRUZPUkNFX0dPXzY4MDAgMHgwMGM4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfR0VGT1JDRV9HT182ODAwX1VMVFJBIDB4MDBjOQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1FVQURST19GWF9HTzE0MDAgMHgwMGNjCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUVVBRFJPX0ZYXzE0MDAgMHgwMGNlCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRTMgMHgwMGQxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRTNfU01CVVMgMHgwMGQ0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRTNfSURFIDB4MDBkNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMyAweDAwZDYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTUNQM19NT0RFTSAweDAwZDkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTUNQM19BVURJTyAweDAwZGEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzcgMHgwMGRmCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRTNTIDB4MDBlMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0UzU19TQVRBIDB4MDBlMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0UzU19TTUJVUyAweDAwZTQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFM1NfSURFIDB4MDBlNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfNiAweDAwZTYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfQ0s4U19BVURJTyAweDAwZWEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFM1NfU0FUQTIgMHgwMGVlCisjZGVmaW5lIFBDSUVfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFXzY4MDBfQUxUMSAweDAwZjAKKyNkZWZpbmUgUENJRV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfNjYwMF9BTFQxIDB4MDBmMQorI2RlZmluZSBQQ0lFX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV82NjAwX0FMVDIgMHgwMGYyCisjZGVmaW5lIFBDSUVfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFXzYyMDBfQUxUMSAweDAwZjMKKyNkZWZpbmUgUENJRV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfNjgwMF9HVCAweDAwZjkKKyNkZWZpbmUgUENJRV9ERVZJQ0VfSURfTlZJRElBX1FVQURST19OVlMyODAgMHgwMGZkCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfU0RSIDB4MDEwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFX0REUiAweDAxMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfUVVBRFJPIDB4MDEwMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFMl9NWCAweDAxMTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRTJfTVgyIDB4MDExMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFMl9HTyAweDAxMTIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfUVVBRFJPMl9NWFIgMHgwMTEzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfNjYwMF9HVCAweDAxNDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV82NjAwIDB4MDE0MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFXzY2MTBfWEwgMHgwMTQ1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX1FVQURST19GWF81NDAgMHgwMTRFCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfNjIwMCAweDAxNEYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRTJfR1RTIDB4MDE1MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFMl9HVFMyIDB4MDE1MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFMl9VTFRSQSAweDAxNTIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfUVVBRFJPMl9QUk8gMHgwMTUzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfNjIwMF9UVVJCT0NBQ0hFIDB4MDE2MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFX0dPXzYyMDAgMHgwMTY0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfR09fNjI1MCAweDAxNjYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9HT182MjAwXzEgMHgwMTY3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfR09fNjI1MF8xIDB4MDE2OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFNF9NWF80NjAgMHgwMTcwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0U0X01YXzQ0MCAweDAxNzEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRTRfTVhfNDIwIDB4MDE3MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFNF9NWF80NDBfU0UgMHgwMTczCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0U0XzQ0MF9HTyAweDAxNzQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRTRfNDIwX0dPIDB4MDE3NQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFNF80MjBfR09fTTMyIDB4MDE3NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFNF80NjBfR08gMHgwMTc3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX1FVQURSTzRfNTAwWEdMIDB4MDE3OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFNF80NDBfR09fTTY0IDB4MDE3OQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9RVUFEUk80XzIwMCAweDAxN0EKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfUVVBRFJPNF81NTBYR0wgMHgwMTdCCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX1FVQURSTzRfNTAwX0dPR0wgMHgwMTdDCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0U0XzQxMF9HT19NMTYgMHgwMTdECisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0U0X01YXzQ0MF84WCAweDAxODEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRTRfTVhfNDQwU0VfOFggMHgwMTgyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0U0X01YXzQyMF84WCAweDAxODMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRTRfTVhfNDAwMCAweDAxODUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRTRfNDQ4X0dPIDB4MDE4NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFNF80ODhfR08gMHgwMTg3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX1FVQURSTzRfNTgwX1hHTCAweDAxODgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRTRfTVhfTUFDIDB4MDE4OQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9RVUFEUk80XzI4MF9OVlMgMHgwMThBCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX1FVQURSTzRfMzgwX1hHTCAweDAxOEIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfSUdFRk9SQ0UyIDB4MDFhMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0UgMHgwMWE0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX01DUDFfQVVESU8gMHgwMWIxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRV9TTUJVUyAweDAxYjQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFX0lERSAweDAxYmMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTUNQMV9NT0RFTSAweDAxYzEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzEgMHgwMWMzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRTIgMHgwMWUwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0UzIDB4MDIwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFM18xIDB4MDIwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFM18yIDB4MDIwMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9RVUFEUk9fRERDIDB4MDIwMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFXzY4MDBCIDB4MDIxMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFXzY4MDBCX0xFIDB4MDIxMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFXzY4MDBCX0dUIDB4MDIxNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFNF9USV80NjAwIDB4MDI1MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFNF9USV80NDAwIDB4MDI1MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFNF9USV80MjAwIDB4MDI1MworI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9RVUFEUk80XzkwMFhHTCAweDAyNTgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfUVVBRFJPNF83NTBYR0wgMHgwMjU5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX1FVQURSTzRfNzAwWEdMIDB4MDI1QgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfTUNQNTFfU01CVVMgMHgwMjY0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRV9NQ1A1MV9JREUgMHgwMjY1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRV9NQ1A1MV9TQVRBIDB4MDI2NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfTUNQNTFfU0FUQTIgMHgwMjY3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRV9NQ1A1NV9TTUJVUyAweDAzNjgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFX01DUDU1X0lERSAweDAzNkUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFX01DUDU1X1NBVEEgMHgwMzdFCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRV9NQ1A1NV9TQVRBMiAweDAzN0YKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzEyIDB4MDI2OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMTMgMHgwMjY5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0U0X1RJXzQ4MDAgMHgwMjgwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0U0X1RJXzQ4MDBfOFggMHgwMjgxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0U0X1RJXzQ4MDBTRSAweDAyODIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRTRfNDIwMF9HTyAweDAyODYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfUVVBRFJPNF85ODBfWEdMIDB4MDI4OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9RVUFEUk80Xzc4MF9YR0wgMHgwMjg5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX1FVQURSTzRfNzAwX0dPR0wgMHgwMjhDCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfRlhfNTgwMF9VTFRSQSAweDAzMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9GWF81ODAwIDB4MDMwMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9RVUFEUk9fRlhfMjAwMCAweDAzMDgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfUVVBRFJPX0ZYXzEwMDAgMHgwMzA5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfRlhfNTYwMF9VTFRSQSAweDAzMTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9GWF81NjAwIDB4MDMxMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFX0ZYXzU2MDBTRSAweDAzMTQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9GWF9HTzU2MDAgMHgwMzFBCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfRlhfR081NjUwIDB4MDMxQgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9RVUFEUk9fRlhfR083MDAgMHgwMzFDCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfRlhfNTIwMCAweDAzMjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9GWF81MjAwX1VMVFJBIDB4MDMyMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFX0ZYXzUyMDBfMSAweDAzMjIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9GWF81MjAwU0UgMHgwMzIzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfRlhfR081MjAwIDB4MDMyNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFX0ZYX0dPNTI1MCAweDAzMjUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9GWF81NTAwIDB4MDMyNgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFX0ZYXzUxMDAgMHgwMzI3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfRlhfR081MjUwXzMyIDB4MDMyOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFX0ZYX0dPXzUyMDAgMHgwMzI5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX1FVQURST19OVlNfMjgwX1BDSSAweDAzMkEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfUVVBRFJPX0ZYXzUwMCAweDAzMkIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9GWF9HTzUzMDAgMHgwMzJDCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfRlhfR081MTAwIDB4MDMyRAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFX0ZYXzU5MDBfVUxUUkEgMHgwMzMwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfRlhfNTkwMCAweDAzMzEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9GWF81OTAwWFQgMHgwMzMyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfRlhfNTk1MF9VTFRSQSAweDAzMzMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9GWF81OTAwWlQgMHgwMzM0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX1FVQURST19GWF8zMDAwIDB4MDMzOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9RVUFEUk9fRlhfNzAwIDB4MDMzRgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFX0ZYXzU3MDBfVUxUUkEgMHgwMzQxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfRlhfNTcwMCAweDAzNDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9GWF81NzAwTEUgMHgwMzQzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfRlhfNTcwMFZFIDB4MDM0NAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFX0ZYX0dPNTcwMF8xIDB4MDM0NworI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFX0ZYX0dPNTcwMF8yIDB4MDM0OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9RVUFEUk9fRlhfR08xMDAwIDB4MDM0QworI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9RVUFEUk9fRlhfMTEwMCAweDAzNEUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzE0IDB4MDM3MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMTUgMHgwMzczCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8xNiAweDAzRTUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzE3IDB4MDNFNgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfTUNQNjFfU0FUQSAweDAzRTcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFX01DUDYxX0lERSAweDAzRUMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzE4IDB4MDNFRQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMTkgMHgwM0VGCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRV9NQ1A2MV9TQVRBMiAweDAzRjYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFX01DUDYxX1NBVEEzIDB4MDNGNworI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfTUNQNjVfSURFIDB4MDQ0OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMjAgMHgwNDUwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8yMSAweDA0NTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzIyIDB4MDQ1MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMjMgMHgwNDUzCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9JTVMgMHgxMGUwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU1TX1RUMTI4IDB4OTEyOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lNU19UVDNEIDB4OTEzNQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfSU5URVJHIDB4MTBlYQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVSR18xNjgyIDB4MTY4MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVSR18yMDAwIDB4MjAwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVSR18yMDEwIDB4MjAxMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVSR181MDAwIDB4NTAwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVSR181MDUwIDB4NTA1MAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfUkVBTFRFSyAweDEwZWMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9SRUFMVEVLXzgxMzkgMHg4MTM5CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9YSUxJTlggMHgxMGVlCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUk1FX0RJR0k5NiAweDNmYzAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9STUVfRElHSTk2XzggMHgzZmMxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUk1FX0RJR0k5Nl84X1BSTyAweDNmYzIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9STUVfRElHSTk2XzhfUEFEX09SX1BTVCAweDNmYzMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9YSUxJTlhfSEFNTUVSRkFMTF9EU1AgMHgzZmM1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfWElMSU5YX0hBTU1FUkZBTExfRFNQX01BREkgMHgzZmM2CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9JTklUIDB4MTEwMQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQ1JFQVRJVkUgMHgxMTAyICAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DUkVBVElWRV9FTVUxMEsxIDB4MDAwMgorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfRUNUSVZBIDB4MTEwMiAgCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRUNUSVZBX0VWMTkzOCAweDg5MzgKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1RUSSAweDExMDMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9UVElfSFBUMzQzIDB4MDAwMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RUSV9IUFQzNjYgMHgwMDA0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVFRJX0hQVDM3MiAweDAwMDUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9UVElfSFBUMzAyIDB4MDAwNgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RUSV9IUFQzNzEgMHgwMDA3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVFRJX0hQVDM3NCAweDAwMDgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9UVElfSFBUMzcyTiAweDAwMDkgIAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfVklBIDB4MTEwNgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84NzYzXzAgMHgwMTk4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgzODBfMCAweDAyMDQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfMzIzOF8wIDB4MDIzOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV9QVDg4MCAweDAyNTgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfUFQ4ODBVTFRSQSAweDAzMDgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfUFg4WDBfMCAweDAyNTkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfMzI2OV8wIDB4MDI2OQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV9LOFQ4MDBQUk9fMCAweDAyODIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfMzI5Nl8wIDB4MDI5NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84MzYzXzAgMHgwMzA1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBX1A0TTgwMENFIDB4MDMxNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84MzcxXzAgMHgwMzkxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzg1MDFfMCAweDA1MDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODJDNTYxIDB4MDU2MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84MkM1ODZfMSAweDA1NzEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODJDNTc2IDB4MDU3NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV9TQVRBX0VJREUgMHgwNTgxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgyQzU4Nl8wIDB4MDU4NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84MkM1OTYgMHgwNTk2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgyQzU5N18wIDB4MDU5NworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84MkM1OThfMCAweDA1OTgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODYwMV8wIDB4MDYwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84NjA1XzAgMHgwNjA1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgyQzY4NiAweDA2ODYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODJDNjkxXzAgMHgwNjkxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgyQzU3Nl8xIDB4MTU3MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84MkM1ODZfMiAweDMwMzgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODJDNTg2XzMgMHgzMDQwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgyQzU5Nl8zIDB4MzA1MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84MkM1OTZCXzMgMHgzMDUxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgyQzY4Nl80IDB4MzA1NworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84MkM2ODZfNSAweDMwNTgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODIzM181IDB4MzA1OQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84MjMzXzAgMHgzMDc0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzg2MzNfMCAweDMwOTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODM2N18wIDB4MzA5OQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84NjUzXzAgMHgzMTAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzg2MjIgMHgzMTAyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgyMzVfVVNCXzIgMHgzMTA0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgyMzNDXzAgMHgzMTA5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgzNjEgMHgzMTEyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBX1hNMjY2IDB4MzExNgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV82MTJYIDB4MzExOQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84NjJYXzAgMHgzMTIzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzg3NTNfMCAweDMxMjgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODIzM0EgMHgzMTQ3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzg3MDNfNTFfMCAweDMxNDgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODIzN19TQVRBIDB4MzE0OQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV9YTjI2NiAweDMxNTYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfNjQxMCAweDMxNjQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODc1NENfMCAweDMxNjgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODIzNSAweDMxNzcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODM4NV8wIDB4MzE4OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84Mzc3XzAgMHgzMTg5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgzNzhfMCAweDMyMDUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODc4M18wIDB4MzIwOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84MjM3IDB4MzIyNworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84MjUxIDB4MzI4NworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84MjM3QSAweDMzMzcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODIzMSAweDgyMzEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODIzMV80IDB4ODIzNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84MzY1XzEgMHg4MzA1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBX0NYNzAwIDB4ODMyNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84MzcxXzEgMHg4MzkxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgyQzU5OF8xIDB4ODU5OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84MzhYXzEgMHhCMTg4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgzXzg3WFhfMSAweEIxOTgKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1NJRU1FTlMgMHgxMTBBCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lFTUVOU19EU0NDNCAweDIxMDIKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1ZPUlRFWCAweDExMTkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WT1JURVhfR0RUNjB4MCAweDAwMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WT1JURVhfR0RUNjAwMEIgMHgwMDAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVk9SVEVYX0dEVDZ4MTAgMHgwMDAyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVk9SVEVYX0dEVDZ4MjAgMHgwMDAzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVk9SVEVYX0dEVDY1MzAgMHgwMDA0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVk9SVEVYX0dEVDY1NTAgMHgwMDA1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVk9SVEVYX0dEVDZ4MTcgMHgwMDA2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVk9SVEVYX0dEVDZ4MjcgMHgwMDA3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVk9SVEVYX0dEVDY1MzcgMHgwMDA4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVk9SVEVYX0dEVDY1NTcgMHgwMDA5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVk9SVEVYX0dEVDZ4MTUgMHgwMDBhCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVk9SVEVYX0dEVDZ4MjUgMHgwMDBiCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVk9SVEVYX0dEVDY1MzUgMHgwMDBjCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVk9SVEVYX0dEVDY1NTUgMHgwMDBkCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVk9SVEVYX0dEVDZ4MTdSUCAweDAxMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WT1JURVhfR0RUNngyN1JQIDB4MDEwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZPUlRFWF9HRFQ2NTM3UlAgMHgwMTAyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVk9SVEVYX0dEVDY1NTdSUCAweDAxMDMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WT1JURVhfR0RUNngxMVJQIDB4MDEwNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZPUlRFWF9HRFQ2eDIxUlAgMHgwMTA1CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9FRiAweDExMWEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9FRl9BVE1fRlBHQSAweDAwMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9FRl9BVE1fQVNJQyAweDAwMDIKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9FRl9BVE1fTEFOQUkyIDB4MDAwMworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0VGX0FUTV9MQU5BSUhCIDB4MDAwNQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfSURUIDB4MTExZAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lEVF9JRFQ3NzIwMSAweDAwMDEKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0ZPUkUgMHgxMTI3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRk9SRV9QQ0EyMDBFIDB4MDMwMAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfUEhJTElQUyAweDExMzEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxNDYgMHg3MTQ2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE5NzMwIDB4OTczMAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfRUlDT04gMHgxMTMzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRUlDT05fRElWQTIwIDB4ZTAwMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0VJQ09OX0RJVkEyMF9VIDB4ZTAwNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0VJQ09OX0RJVkEyMDEgMHhlMDA1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRUlDT05fRElWQTIwMiAweGUwMGIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9FSUNPTl9NQUVTVFJBIDB4ZTAxMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0VJQ09OX01BRVNUUkFRIDB4ZTAxMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0VJQ09OX01BRVNUUkFRX1UgMHhlMDEzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRUlDT05fTUFFU1RSQVAgMHhlMDE0CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9aSUFURUNIIDB4MTEzOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1pJQVRFQ0hfNTU1MF9IQyAweDU1NTAKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1NZU0tPTk5FQ1QgMHgxMTQ4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU1lTS09OTkVDVF9UUiAweDQyMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TWVNLT05ORUNUX0dFIDB4NDMwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NZU0tPTk5FQ1RfWVUgMHg0MzIwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU1lTS09OTkVDVF85RFhYIDB4NDQwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NZU0tPTk5FQ1RfOU1YWCAweDQ1MDAKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0RJR0kgMHgxMTRmCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRElHSV9ERl9NX0lPTTJfRSAweDAwNzAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ESUdJX0RGX01fRSAweDAwNzEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ESUdJX0RGX01fSU9NMl9BIDB4MDA3MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0RJR0lfREZfTV9BIDB4MDA3MworI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FT18yREI5IDB4MDBDOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FT18yREI5UFJJIDB4MDBDOQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FT18yUko0NSAweDAwQ0EKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORU9fMlJKNDVQUkkgMHgwMENCCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9YSVJDT00gMHgxMTVkCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfWElSQ09NX1JCTTU2RyAweDAxMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9YSVJDT01fWDMyMDFfTURNIDB4MDEwMworCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfU0VSVkVSV09SS1MgMHgxMTY2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfSEUgMHgwMDA4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfTEUgMHgwMDA5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfR0NOQl9MRSAweDAwMTcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TRVJWRVJXT1JLU19FUEIgMHgwMTAzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfT1NCNCAweDAyMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TRVJWRVJXT1JLU19DU0I1IDB4MDIwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0NTQjYgMHgwMjAzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfSFQxMDAwU0IgMHgwMjA1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfT1NCNElERSAweDAyMTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TRVJWRVJXT1JLU19DU0I1SURFIDB4MDIxMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0NTQjZJREUgMHgwMjEzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfSFQxMDAwSURFIDB4MDIxNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0NTQjZJREUyIDB4MDIxNworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0NTQjZMUEMgMHgwMjI3CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9TQkUgMHgxMTc2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0JFX1dBTlhMMTAwIDB4MDMwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NCRV9XQU5YTDIwMCAweDAzMDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TQkVfV0FOWEw0MDAgMHgwMTA0CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9UT1NISUJBIDB4MTE3OQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RPU0hJQkFfUElDQ09MTyAweDAxMDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9UT1NISUJBX1BJQ0NPTE9fMSAweDAxMDMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9UT1NISUJBX1BJQ0NPTE9fMiAweDAxMDUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9UT1NISUJBX1RPUElDOTUgMHgwNjBhCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVE9TSElCQV9UT1BJQzk3IDB4MDYwZgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RPU0hJQkFfVE9QSUMxMDAgMHgwNjE3CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9UT1NISUJBXzIgMHgxMDJmCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVE9TSElCQV9UQzM1ODE1Q0YgMHgwMDMwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVE9TSElCQV9UQzg2QzAwMV9NSVNDIDB4MDEwOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RPU0hJQkFfU1BJREVSX05FVCAweDAxYjMKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1JJQ09IIDB4MTE4MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1JJQ09IX1JMNUM0NjUgMHgwNDY1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUklDT0hfUkw1QzQ2NiAweDA0NjYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9SSUNPSF9STDVDNDc1IDB4MDQ3NQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1JJQ09IX1JMNUM0NzYgMHgwNDc2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUklDT0hfUkw1QzQ3OCAweDA0NzgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9SSUNPSF9SNUM4MjIgMHgwODIyCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9ETElOSyAweDExODYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ETElOS19ER0U1MTBUIDB4NGMwMAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQVJUT1AgMHgxMTkxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVJUT1BfQVRQODUwVUYgMHgwMDA1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVJUT1BfQVRQODYwIDB4MDAwNgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FSVE9QX0FUUDg2MFIgMHgwMDA3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVJUT1BfQVRQODY1IDB4MDAwOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FSVE9QX0FUUDg2NVIgMHgwMDA5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVJUT1BfQUVDNzYxMCAweDgwMDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BUlRPUF9BRUM3NjEyVVcgMHg4MDEwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVJUT1BfQUVDNzYxMlUgMHg4MDIwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVJUT1BfQUVDNzYxMlMgMHg4MDMwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVJUT1BfQUVDNzYxMkQgMHg4MDQwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVJUT1BfQUVDNzYxMlNVVyAweDgwNTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BUlRPUF84MDYwIDB4ODA2MAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfWkVJVE5FVCAweDExOTMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9aRUlUTkVUXzEyMjEgMHgwMDAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfWkVJVE5FVF8xMjI1IDB4MDAwMgorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfRlVKSVRTVV9NRSAweDExOWUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9GVUpJVFNVX0ZTMTU1IDB4MDAwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0ZVSklUU1VfRlM1MCAweDAwMDMKKworI2RlZmluZSBQQ0lfU1VCVkVORE9SX0lEX0tFWVNQQU4gMHgxMWE5CisjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfS0VZU1BBTl9TWDIgMHg1MzM0CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9NQVJWRUxMIDB4MTFhYgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01BUlZFTExfR1Q2NDExMSAweDQxNDYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NQVJWRUxMX0dUNjQyNjAgMHg2NDMwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUFSVkVMTF9NVjY0MzYwIDB4NjQ2MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01BUlZFTExfTVY2NDQ2MCAweDY0ODAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NQVJWRUxMX0dUOTYxMDAgMHg5NjUyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUFSVkVMTF9HVDk2MTAwQSAweDk2NTMKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1YzIDB4MTFiMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1YzX1Y5NjAgMHgwMDAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVjNfVjM1MSAweDAwMDIKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0FUVCAweDExYzEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVFRfVkVOVVNfTU9ERU0gMHg0ODAKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1NQRUNJQUxJWCAweDExY2IKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TUEVDSUFMSVhfSU84IDB4MjAwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NQRUNJQUxJWF9SSU8gMHg4MDAwCisjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfU1BFQ0lBTElYX1NQRUVENCAweGEwMDQKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0FOQUxPR19ERVZJQ0VTIDB4MTFkNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FEMTg4OUpTIDB4MTg4OQorCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0VHQV9CQkEgMHgxMjM0CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9aT1JBTiAweDExZGUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9aT1JBTl8zNjA1NyAweDYwNTcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9aT1JBTl8zNjEyMCAweDYxMjAKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0NPTVBFWCAweDExZjYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DT01QRVhfRU5FVDEwMFZHNCAweDAxMTIKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1JQIDB4MTFmZQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1JQMzJJTlRGIDB4MDAwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1JQOElOVEYgMHgwMDAyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUlAxNklOVEYgMHgwMDAzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUlA0UVVBRCAweDAwMDQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9SUDhPQ1RBIDB4MDAwNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1JQOEogMHgwMDA2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUlA0SiAweDAwMDcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9SUDhTTkkgMHgwMDA4IAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1JQMTZTTkkgMHgwMDA5IAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1JQUDQgMHgwMDBBCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUlBQOCAweDAwMEIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9SUDRNIDB4MDAwRAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1JQMl8yMzIgMHgwMDBFCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUlAyXzQyMiAweDAwMEYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9VUlAzMklOVEYgMHgwODAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVVJQOElOVEYgMHgwODAyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVVJQMTZJTlRGIDB4MDgwMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1VSUDhPQ1RBIDB4MDgwNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1VQQ0lfUk0zXzhQT1JUIDB4MDgwQyAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9VUENJX1JNM180UE9SVCAweDA4MEQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DUlAxNklOVEYgMHgwOTAzIAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQ1lDTEFERVMgMHgxMjBlCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ1lDTE9NX1lfTG8gMHgwMTAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ1lDTE9NX1lfSGkgMHgwMTAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ1lDTE9NXzRZX0xvIDB4MDEwMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NZQ0xPTV80WV9IaSAweDAxMDMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DWUNMT01fOFlfTG8gMHgwMTA0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ1lDTE9NXzhZX0hpIDB4MDEwNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NZQ0xPTV9aX0xvIDB4MDIwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NZQ0xPTV9aX0hpIDB4MDIwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BDMzAwX1JYXzIgMHgwMzAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUEMzMDBfUlhfMSAweDAzMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QQzMwMF9URV8yIDB4MDMxMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BDMzAwX1RFXzEgMHgwMzExCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUEMzMDBfVEVfTV8yIDB4MDMyMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BDMzAwX1RFX01fMSAweDAzMjEKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0VTU0VOVElBTCAweDEyMGYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9FU1NFTlRJQUxfUk9BRFJVTk5FUiAweDAwMDEKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX08yIDB4MTIxNworI2RlZmluZSBQQ0lfREVWSUNFX0lEX08yXzY3MjkgMHg2NzI5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTzJfNjczMCAweDY3M2EKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9PMl82ODMyIDB4NjgzMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX08yXzY4MzYgMHg2ODM2CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF8zREZYIDB4MTIxYQorI2RlZmluZSBQQ0lfREVWSUNFX0lEXzNERlhfVk9PRE9PIDB4MDAwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEXzNERlhfVk9PRE9PMiAweDAwMDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF8zREZYX0JBTlNIRUUgMHgwMDAzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfM0RGWF9WT09ET08zIDB4MDAwNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEXzNERlhfVk9PRE9PNSAweDAwMDkKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0FWTSAweDEyNDQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVk1fQjEgMHgwNzAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVZNX0M0IDB4MDgwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FWTV9BMSAweDBhMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVk1fQTFfVjIgMHgwZTAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVZNX0MyIDB4MTEwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FWTV9UMSAweDEyMDAKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1NUQUxMSU9OIDB4MTI0ZAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQVQgMHgxMjU5CisjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfQVRfMjcwMEZYIDB4MjcwMQorI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX0FUXzI3MDFGWCAweDI3MDMKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0VTUyAweDEyNWQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9FU1NfRVNTMTk2OCAweDE5NjgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9FU1NfRVNTMTk3OCAweDE5NzgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9FU1NfQUxMRUdST18xIDB4MTk4OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0VTU19BTExFR1JPIDB4MTk4OQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0VTU19DQU5ZT04zRF8yTEUgMHgxOTkwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRVNTX0NBTllPTjNEXzIgMHgxOTkyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRVNTX01BRVNUUk8zIDB4MTk5OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0VTU19NQUVTVFJPM18xIDB4MTk5OQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0VTU19NQUVTVFJPM19IVyAweDE5OWEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9FU1NfTUFFU1RSTzNfMiAweDE5OWIKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1NBVFNBR0VNIDB4MTI2NworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NBVFNBR0VNX05JQ0NZIDB4MTAxNgorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfRU5TT05JUSAweDEyNzQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9FTlNPTklRX0NUNTg4MCAweDU4ODAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9FTlNPTklRX0VTMTM3MCAweDUwMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9FTlNPTklRX0VTMTM3MSAweDEzNzEKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1RSQU5TTUVUQSAweDEyNzkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9FRkZJQ0VPTiAweDAwNjAKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1JPQ0tXRUxMIDB4MTI3QQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfSVRFIDB4MTI4MworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lURV9JVDgxNzJHIDB4ODE3MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lURV9JVDgxNzJHX0FVRElPIDB4MDgwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lURV84MjExIDB4ODIxMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lURV84MjEyIDB4ODIxMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lURV84ODcyIDB4ODg3MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lURV9JVDgzMzBHXzAgMHhlODg2CisKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9FU1NfRVNTMDEwMCAweDAxMDAKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0FMVEVPTiAweDEyYWUKKworI2RlZmluZSBQQ0lfU1VCVkVORE9SX0lEX0NPTk5FQ1RfVEVDSCAweDEyYzQKKyNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9DT05ORUNUX1RFQ0hfQkg4XzIzMiAweDAwMDEKKyNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9DT05ORUNUX1RFQ0hfQkg0XzIzMiAweDAwMDIKKyNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9DT05ORUNUX1RFQ0hfQkgyXzIzMiAweDAwMDMKKyNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9DT05ORUNUX1RFQ0hfQkg4XzQ4NSAweDAwMDQKKyNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9DT05ORUNUX1RFQ0hfQkg4XzQ4NV80XzQgMHgwMDA1CisjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfQ09OTkVDVF9URUNIX0JINF80ODUgMHgwMDA2CisjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfQ09OTkVDVF9URUNIX0JINF80ODVfMl8yIDB4MDAwNworI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX0NPTk5FQ1RfVEVDSF9CSDJfNDg1IDB4MDAwOAorI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX0NPTk5FQ1RfVEVDSF9CSDhfNDg1XzJfNiAweDAwMDkKKyNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9DT05ORUNUX1RFQ0hfQkgwODExMDFWMSAweDAwMEEKKyNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9DT05ORUNUX1RFQ0hfQkgwNDExMDFWMSAweDAwMEIKKyNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9DT05ORUNUX1RFQ0hfQkgyXzIwTUhaIDB4MDAwQworI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX0NPTk5FQ1RfVEVDSF9CSDJfUFRNIDB4MDAwRAorI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX0NPTk5FQ1RfVEVDSF9OVDk2MFBDSSAweDAxMDAKKyNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9DT05ORUNUX1RFQ0hfVElUQU5fMiAweDAyMDEKKyNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9DT05ORUNUX1RFQ0hfVElUQU5fNCAweDAyMDIKKyNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9DT05ORUNUX1RFQ0hfUENJX1VBUlRfMl8yMzIgMHgwMzAwCisjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfQ09OTkVDVF9URUNIX1BDSV9VQVJUXzRfMjMyIDB4MDMwMQorI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX0NPTk5FQ1RfVEVDSF9QQ0lfVUFSVF84XzIzMiAweDAzMDIKKyNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9DT05ORUNUX1RFQ0hfUENJX1VBUlRfMV8xIDB4MDMxMAorI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX0NPTk5FQ1RfVEVDSF9QQ0lfVUFSVF8yXzIgMHgwMzExCisjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfQ09OTkVDVF9URUNIX1BDSV9VQVJUXzRfNCAweDAzMTIKKyNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9DT05ORUNUX1RFQ0hfUENJX1VBUlRfMiAweDAzMjAKKyNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9DT05ORUNUX1RFQ0hfUENJX1VBUlRfNCAweDAzMjEKKyNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9DT05ORUNUX1RFQ0hfUENJX1VBUlRfOCAweDAzMjIKKyNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9DT05ORUNUX1RFQ0hfUENJX1VBUlRfMl80ODUgMHgwMzMwCisjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfQ09OTkVDVF9URUNIX1BDSV9VQVJUXzRfNDg1IDB4MDMzMQorI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX0NPTk5FQ1RfVEVDSF9QQ0lfVUFSVF84XzQ4NSAweDAzMzIKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX05WSURJQV9TR1MgMHgxMmQyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX1NHU19SSVZBMTI4IDB4MDAxOAorCisjZGVmaW5lIFBDSV9TVUJWRU5ET1JfSURfQ0hBU0VfUENJRkFTVCAweDEyRTAKKyNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9DSEFTRV9QQ0lGQVNUNCAweDAwMzEKKyNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9DSEFTRV9QQ0lGQVNUOCAweDAwMjEKKyNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9DSEFTRV9QQ0lGQVNUMTYgMHgwMDExCisjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfQ0hBU0VfUENJRkFTVDE2Rk1DIDB4MDA0MQorI2RlZmluZSBQQ0lfU1VCVkVORE9SX0lEX0NIQVNFX1BDSVJBUyAweDEyNEQKKyNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9DSEFTRV9QQ0lSQVM0IDB4RjAwMQorI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX0NIQVNFX1BDSVJBUzggMHhGMDEwCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BVVJFQUwgMHgxMmViCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVVSRUFMX1ZPUlRFWF8xIDB4MDAwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FVUkVBTF9WT1JURVhfMiAweDAwMDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVVJFQUxfQURWQU5UQUdFIDB4MDAwMworCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfRUxFQ1RST05JQ0RFU0lHTkdNQkggMHgxMmY4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTE1MXzMzUjEwIDB4OGEwMgorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfU0lJRyAweDEzMWYKKyNkZWZpbmUgUENJX1NVQlZFTkRPUl9JRF9TSUlHIDB4MTMxZgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMVNfMTB4XzU1MCAweDEwMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUlHXzFTXzEweF82NTAgMHgxMDAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lJR18xU18xMHhfODUwIDB4MTAwMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMVMxUF8xMHhfNTUwIDB4MTAxMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMVMxUF8xMHhfNjUwIDB4MTAxMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMVMxUF8xMHhfODUwIDB4MTAxMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMVBfMTB4IDB4MTAyMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMlBfMTB4IDB4MTAyMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMlNfMTB4XzU1MCAweDEwMzAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUlHXzJTXzEweF82NTAgMHgxMDMxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lJR18yU18xMHhfODUwIDB4MTAzMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMlMxUF8xMHhfNTUwIDB4MTAzNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMlMxUF8xMHhfNjUwIDB4MTAzNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMlMxUF8xMHhfODUwIDB4MTAzNgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfNFNfMTB4XzU1MCAweDEwNTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUlHXzRTXzEweF82NTAgMHgxMDUxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lJR180U18xMHhfODUwIDB4MTA1MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMVNfMjB4XzU1MCAweDIwMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUlHXzFTXzIweF82NTAgMHgyMDAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lJR18xU18yMHhfODUwIDB4MjAwMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMVBfMjB4IDB4MjAyMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMlBfMjB4IDB4MjAyMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMlNfMjB4XzU1MCAweDIwMzAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUlHXzJTXzIweF82NTAgMHgyMDMxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lJR18yU18yMHhfODUwIDB4MjAzMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMlAxU18yMHhfNTUwIDB4MjA0MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMlAxU18yMHhfNjUwIDB4MjA0MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMlAxU18yMHhfODUwIDB4MjA0MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMVMxUF8yMHhfNTUwIDB4MjAxMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMVMxUF8yMHhfNjUwIDB4MjAxMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMVMxUF8yMHhfODUwIDB4MjAxMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfNFNfMjB4XzU1MCAweDIwNTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUlHXzRTXzIweF82NTAgMHgyMDUxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lJR180U18yMHhfODUwIDB4MjA1MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMlMxUF8yMHhfNTUwIDB4MjA2MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMlMxUF8yMHhfNjUwIDB4MjA2MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMlMxUF8yMHhfODUwIDB4MjA2MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfOFNfMjB4XzU1MCAweDIwODAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUlHXzhTXzIweF82NTAgMHgyMDgxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lJR184U18yMHhfODUwIDB4MjA4MgorI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX1NJSUdfUVVBUlRFVF9TRVJJQUwgMHgyMDUwCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9SQURJU1lTIDB4MTMzMQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfRE9NRVggMHgxMzRhCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRE9NRVhfRE1YMzE5MUQgMHgwMDAxCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9JTlRBU0hJRUxEIDB4MTM1YQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEFTSElFTERfSVMyMDAgMHgwZDgwCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9RVUFURUNIIDB4MTM1QworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1FVQVRFQ0hfUVNDMTAwIDB4MDAxMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1FVQVRFQ0hfRFNDMTAwIDB4MDAyMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1FVQVRFQ0hfRVNDMTAwRCAweDAwNTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9RVUFURUNIX0VTQzEwME0gMHgwMDYwCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9TRUFMRVZFTCAweDEzNWUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TRUFMRVZFTF9VNTMwIDB4NzEwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NFQUxFVkVMX1VDT01NMiAweDcyMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TRUFMRVZFTF9VQ09NTTQyMiAweDc0MDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TRUFMRVZFTF9VQ09NTTIzMiAweDcyMDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TRUFMRVZFTF9DT01NNCAweDc0MDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TRUFMRVZFTF9DT01NOCAweDc4MDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TRUFMRVZFTF9VQ09NTTggMHg3ODA0CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9IWVBFUkNPUEUgMHgxMzY1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSFlQRVJDT1BFX1BMWCAweDkwNTAKKyNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9IWVBFUkNPUEVfT0xEX0VSR08gMHgwMTA0CisjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfSFlQRVJDT1BFX0VSR08gMHgwMTA2CisjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfSFlQRVJDT1BFX01FVFJPIDB4MDEwNworI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX0hZUEVSQ09QRV9DSEFNUDIgMHgwMTA4CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9LQVdBU0FLSSAweDEzNmIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NQ0hJUF9LTDVBNzIwMDIgMHhmZjAxCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9DTkVUIDB4MTM3MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NORVRfR0lHQUNBUkQgMHg0MzRlCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9MTUMgMHgxMzc2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTE1DX0hTU0kgMHgwMDAzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTE1DX0RTMyAweDAwMDQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9MTUNfU1NJIDB4MDAwNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xNQ19UMSAweDAwMDYKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX05FVEdFQVIgMHgxMzg1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVUR0VBUl9HQTYyMCAweDYyMGEKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0FQUExJQ09NIDB4MTM4OQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FQUExJQ09NX1BDSUdFTkVSSUMgMHgwMDAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVBQTElDT01fUENJMjAwMElCU19DQU4gMHgwMDAyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVBQTElDT01fUENJMjAwMFBGQiAweDAwMDMKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX01PWEEgMHgxMzkzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTU9YQV9SQzcwMDAgMHgwMDAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTU9YQV9DUDEwMiAweDEwMjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NT1hBX0NQMTAyVUwgMHgxMDIxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTU9YQV9DUDEwMlUgMHgxMDIyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTU9YQV9DMTA0IDB4MTA0MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01PWEFfQ1AxMDRVIDB4MTA0MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01PWEFfQ1AxMDRKVSAweDEwNDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NT1hBX0NUMTE0IDB4MTE0MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01PWEFfQ1AxMTQgMHgxMTQxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTU9YQV9DUDExOFUgMHgxMTgwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTU9YQV9DUDEzMiAweDEzMjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NT1hBX0NQMTMyVSAweDEzMjEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NT1hBX0NQMTM0VSAweDEzNDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NT1hBX0MxNjggMHgxNjgwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTU9YQV9DUDE2OFUgMHgxNjgxCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9DQ0QgMHgxMzk3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ0NEXzJCRDAgMHgyYmQwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ0NEX0IwMDAgMHhiMDAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ0NEX0IwMDYgMHhiMDA2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ0NEX0IwMDcgMHhiMDA3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ0NEX0IwMDggMHhiMDA4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ0NEX0IwMDkgMHhiMDA5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ0NEX0IwMEEgMHhiMDBhCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ0NEX0IwMEIgMHhiMDBiCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ0NEX0IwMEMgMHhiMDBjCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ0NEX0IxMDAgMHhiMTAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ0NEX0I3MDAgMHhiNzAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ0NEX0I3MDEgMHhiNzAxCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9FWEFSIDB4MTNhOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0VYQVJfWFIxN0MxNTIgMHgwMTUyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRVhBUl9YUjE3QzE1NCAweDAxNTQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9FWEFSX1hSMTdDMTU4IDB4MDE1OAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfTUlDUk9HQVRFIDB4MTNjMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01JQ1JPR0FURV9VU0MgMHgwMDEwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUlDUk9HQVRFX1NDQSAweDAwMzAKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEXzNXQVJFIDB4MTNDMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEXzNXQVJFXzEwMDAgMHgxMDAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfM1dBUkVfNzAwMCAweDEwMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF8zV0FSRV85MDAwIDB4MTAwMgorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfSU9NRUdBIDB4MTNjYQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lPTUVHQV9CVVogMHg0MjMxCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BQk9DT00gMHgxM0QxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQUJPQ09NXzJCRDEgMHgyQkQxCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9DTUVESUEgMHgxM2Y2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ01FRElBX0NNODMzOEEgMHgwMTAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ01FRElBX0NNODMzOEIgMHgwMTAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ01FRElBX0NNODczOCAweDAxMTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DTUVESUFfQ004NzM4QiAweDAxMTIKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0xBVkEgMHgxNDA3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTEFWQV9EU0VSSUFMIDB4MDEwMCAgCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTEFWQV9RVUFUUk9fQSAweDAxMDEgIAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xBVkFfUVVBVFJPX0IgMHgwMTAyICAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9MQVZBX09DVE9fQSAweDAxODAgIAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xBVkFfT0NUT19CIDB4MDE4MSAgCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTEFWQV9QT1JUX1BMVVMgMHgwMjAwICAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9MQVZBX1FVQURfQSAweDAyMDEgIAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xBVkFfUVVBRF9CIDB4MDIwMiAgCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTEFWQV9TU0VSSUFMIDB4MDUwMCAgCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTEFWQV9QT1JUXzY1MCAweDA2MDAgIAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xBVkFfUEFSQUxMRUwgMHg4MDAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTEFWQV9EVUFMX1BBUl9BIDB4ODAwMiAgCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTEFWQV9EVUFMX1BBUl9CIDB4ODAwMyAgCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTEFWQV9CT0NBX0lPUFBBUiAweDg4MDAKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1RJTUVESUEgMHgxNDA5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElNRURJQV8xODg5IDB4NzE2OAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfSUNFIDB4MTQxMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lDRV8xNzEyIDB4MTcxMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZUMTcyNCAweDE3MjQKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX09YU0VNSSAweDE0MTUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9PWFNFTUlfMTJQQ0k4NDAgMHg4NDAzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfT1hTRU1JXzE2UENJOTU0IDB4OTUwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX09YU0VNSV8xNlBDSTk1TiAweDk1MTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9PWFNFTUlfMTZQQ0k5NTRQUCAweDk1MTMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9PWFNFTUlfMTZQQ0k5NTIgMHg5NTIxCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9TQU1TVU5HIDB4MTQ0ZAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfTVlSSUNPTSAweDE0YzEKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1RJVEFOIDB4MTREMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJVEFOXzAxMEwgMHg4MDAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElUQU5fMTAwTCAweDgwMTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USVRBTl8xMTBMIDB4ODAxMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJVEFOXzIwMEwgMHg4MDIwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElUQU5fMjEwTCAweDgwMjEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USVRBTl80MDBMIDB4ODA0MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJVEFOXzgwMEwgMHg4MDgwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElUQU5fMTAwIDB4QTAwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJVEFOXzIwMCAweEEwMDUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USVRBTl80MDAgMHhBMDAzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElUQU5fODAwQiAweEEwMDQKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1BBTkFDT00gMHgxNGQ0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUEFOQUNPTV9RVUFETU9ERU0gMHgwNDAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUEFOQUNPTV9EVUFMTU9ERU0gMHgwNDAyCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BRkFWTEFCIDB4MTRkYgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FGQVZMQUJfUDAyOCAweDIxODAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BRkFWTEFCX1AwMzAgMHgyMTgyCisjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfQUZBVkxBQl9QMDYxIDB4MjE1MAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQlJPQURDT00gMHgxNGU0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3NTIgMHgxNjAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3NTJNIDB4MTYwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzAwIDB4MTY0NAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzAxIDB4MTY0NQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzAyIDB4MTY0NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzAzIDB4MTY0NworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzA0IDB4MTY0OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzA0U18yIDB4MTY0OQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05YMl81NzA2IDB4MTY0YQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05YMl81NzA4IDB4MTY0YworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzAyRkUgMHgxNjRkCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3MDUgMHgxNjUzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3MDVfMiAweDE2NTQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTcyMCAweDE2NTgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTcyMSAweDE2NTkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTcwNU0gMHgxNjVkCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3MDVNXzIgMHgxNjVlCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3MTQgMHgxNjY4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3MTRTIDB4MTY2OQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzgwIDB4MTY2YQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzgwUyAweDE2NmIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTcwNUYgMHgxNjZlCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3NTRNIDB4MTY3MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzU1TSAweDE2NzMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTc1MCAweDE2NzYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTc1MSAweDE2NzcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTcxNSAweDE2NzgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTcxNVMgMHgxNjc5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3NTQgMHgxNjdhCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3NTUgMHgxNjdiCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3NTBNIDB4MTY3YworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzUxTSAweDE2N2QKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTc1MUYgMHgxNjdlCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3ODdNIDB4MTY5MworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzgyIDB4MTY5NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181Nzg2IDB4MTY5YQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181Nzg3IDB4MTY5YgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181Nzg4IDB4MTY5YworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181Nzg5IDB4MTY5ZAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzAyWCAweDE2YTYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTcwM1ggMHgxNmE3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3MDRTIDB4MTZhOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05YMl81NzA2UyAweDE2YWEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OWDJfNTcwOFMgMHgxNmFjCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3MDJBMyAweDE2YzYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTcwM0EzIDB4MTZjNworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzgxIDB4MTZkZAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzUzIDB4MTZmNworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzUzTSAweDE2ZmQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTc1M0YgMHgxNmZlCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU5MDEgMHgxNzBkCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQkNNNDQwMUIxIDB4MTcwYworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181OTAxXzIgMHgxNzBlCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQkNNNDQwMSAweDQ0MDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9CQ000NDAxQjAgMHg0NDAyCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9UT1BJQyAweDE1MWYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9UT1BJQ19UUDU2MCAweDAwMDAKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0VORSAweDE1MjQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9FTkVfMTIxMSAweDEyMTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9FTkVfMTIyNSAweDEyMjUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9FTkVfMTQxMCAweDE0MTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9FTkVfNzEwIDB4MTQxMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0VORV83MTIgMHgxNDEyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRU5FXzE0MjAgMHgxNDIwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRU5FXzcyMCAweDE0MjEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9FTkVfNzIyIDB4MTQyMgorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQ0hFTFNJTyAweDE0MjUKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1NZQkEgMHgxNTkyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU1lCQV8yUF9FUFAgMHgwNzgyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU1lCQV8xUF9FQ1AgMHgwNzgzCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9NT1JFVE9OIDB4MTVhYQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1JBU1RFTF8yUE9SVCAweDIwMDAKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1pPTFRSSVggMHgxNWIwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfWk9MVFJJWF8yQkQwIDB4MmJkMCAKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX01FTExBTk9YIDB4MTViMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FTExBTk9YX1RBVk9SIDB4NWE0NAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FTExBTk9YX1RBVk9SX0JSSURHRSAweDVhNDYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NRUxMQU5PWF9BUkJFTF9DT01QQVQgMHg2Mjc4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVMTEFOT1hfQVJCRUwgMHg2MjgyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVMTEFOT1hfU0lOQUlfT0xEIDB4NWU4YworI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FTExBTk9YX1NJTkFJIDB4NjI3NAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfUERDIDB4MTVlOQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfRkFSU0lURSAweDE2MTkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9GQVJTSVRFX1QyUCAweDA0MDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9GQVJTSVRFX1Q0UCAweDA0NDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9GQVJTSVRFX1QxVSAweDA2MTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9GQVJTSVRFX1QyVSAweDA2MjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9GQVJTSVRFX1Q0VSAweDA2NDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9GQVJTSVRFX1RFMSAweDE2MTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9GQVJTSVRFX1RFMUMgMHgxNjEyCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9TSUJZVEUgMHgxNjZkCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQkNNMTI1MF9IVCAweDAwMDIKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX05FVENFTEwgMHgxNjljCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUkVWT0xVVElPTiAweDAwNDQKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1ZJVEVTU0UgMHgxNzI1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklURVNTRV9WU0M3MTc0IDB4NzE3NAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfTElOS1NZUyAweDE3MzcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9MSU5LU1lTX0VHMTA2NCAweDEwNjQKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0FMVElNQSAweDE3M2IKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTFRJTUFfQUMxMDAwIDB4MDNlOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FMVElNQV9BQzEwMDEgMHgwM2U5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQUxUSU1BX0FDOTEwMCAweDAzZWEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTFRJTUFfQUMxMDAzIDB4MDNlYgorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfUzJJTyAweDE3ZDUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TMklPX1dJTiAweDU3MzEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TMklPX1VOSSAweDU4MzEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9IRVJDX1dJTiAweDU3MzIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9IRVJDX1VOSSAweDU4MzIKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1NJVEVDT00gMHgxODJkCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lURUNPTV9EQzEwNVYyIDB4MzA2OQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfVE9QU1BJTiAweDE4NjcKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1RESSAweDE5MkUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9URElfRUhDSSAweDAxMDEKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0pNSUNST04gMHgxOTdCCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSk1JQ1JPTl9KTUIzNjAgMHgyMzYwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSk1JQ1JPTl9KTUIzNjEgMHgyMzYxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSk1JQ1JPTl9KTUIzNjMgMHgyMzYzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSk1JQ1JPTl9KTUIzNjUgMHgyMzY1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSk1JQ1JPTl9KTUIzNjYgMHgyMzY2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSk1JQ1JPTl9KTUIzNjggMHgyMzY4CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9URUtSQU0gMHgxZGUxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVEVLUkFNX0RDMjkwIDB4ZGMyOQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfSElOVCAweDMzODgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ISU5UX1ZYUFJPSUlfSURFIDB4ODAxMworCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfM0RMQUJTIDB4M2QzZAorI2RlZmluZSBQQ0lfREVWSUNFX0lEXzNETEFCU19QRVJNRURJQTIgMHgwMDA3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfM0RMQUJTX1BFUk1FRElBMlYgMHgwMDA5CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BS1MgMHg0MTZjCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQUtTX0FMQURESU5DQVJEIDB4MDEwMAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfUzMgMHg1MzMzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUzNfVFJJTyAweDg4MTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TM184NjggMHg4ODgwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUzNfOTY4IDB4ODhmMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1MzX1NBVkFHRTQgMHg4YTI1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUzNfUFJPU0FWQUdFOCAweDhkMDQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TM19TT05JQ1ZJQkVTIDB4Y2EwMAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfRFVOT1JEIDB4NTU0NAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0RVTk9SRF9JMzAwMCAweDAwMDEKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0RDSSAweDY2NjYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9EQ0lfUENDT000IDB4MDAwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0RDSV9QQ0NPTTggMHgwMDAyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRENJX1BDQ09NMiAweDAwMDQKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0lOVEVMIDB4ODA4NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0VFU1NDIDB4MDAwOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX1BYSERfMCAweDAzMjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9QWEhEXzEgMHgwMzIxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfUFhIXzAgMHgwMzI5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfUFhIXzEgMHgwMzJBCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfUFhIViAweDAzMkMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjM3NSAweDA0ODIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjQyNCAweDA0ODMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjM3OCAweDA0ODQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JOTYwIDB4MDk2MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0k5NjBSTSAweDA5NjIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgxNV9NQyAweDExMzAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgxNV9DR0MgMHgxMTMyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODIwOTJBQV8wIDB4MTIyMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzc1MDVfMCAweDI1NTAgCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfNzIwNV8wIDB4MjU1ZAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNDM3IDB4MTIyZAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyMzcxRkJfMCAweDEyMmUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjM3MUZCXzEgMHgxMjMwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODIzNzFNWCAweDEyMzQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjQ0MSAweDEyMzcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjM4MEZCIDB4MTI0YgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNDM5IDB4MTI1MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgwOTYwX1JQIDB4MTk2MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODQwX0hCIDB4MWEyMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODQ1X0hCIDB4MWEzMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lPQVQgMHgxYTM4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFBQV8wIDB4MjQxMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQUFfMSAweDI0MTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUFBXzMgMHgyNDEzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFBQV81IDB4MjQxNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQUFfNiAweDI0MTYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUFBXzggMHgyNDE4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFBQl8wIDB4MjQyMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQUJfMSAweDI0MjEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUFCXzMgMHgyNDIzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFBQl81IDB4MjQyNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQUJfNiAweDI0MjYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUFCXzggMHgyNDI4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFCQV8wIDB4MjQ0MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQkFfMiAweDI0NDMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUJBXzQgMHgyNDQ1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFCQV82IDB4MjQ0OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQkFfOCAweDI0NGEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUJBXzkgMHgyNDRiCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFCQV8xMCAweDI0NGMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUJBXzExIDB4MjQ0ZQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxRV8wIDB4MjQ1MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxRV8xMSAweDI0NWIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUNBXzAgMHgyNDgwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFDQV8zIDB4MjQ4MworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQ0FfNSAweDI0ODUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUNBXzYgMHgyNDg2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFDQV8xMCAweDI0OGEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUNBXzExIDB4MjQ4YgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQ0FfMTIgMHgyNDhjCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFEQl8wIDB4MjRjMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxREJfMSAweDI0YzEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMURCXzMgMHgyNGMzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFEQl81IDB4MjRjNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxREJfNiAweDI0YzYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMURCXzkgMHgyNGM5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFEQl8xMCAweDI0Y2EKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMURCXzExIDB4MjRjYgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxREJfMTIgMHgyNGNjCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFFQl8wIDB4MjRkMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxRUJfMSAweDI0ZDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUVCXzMgMHgyNGQzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFFQl81IDB4MjRkNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxRUJfNiAweDI0ZDYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUVCXzExIDB4MjRkYgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxRUJfMTMgMHgyNGRkCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfRVNCXzEgMHgyNWExCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfRVNCXzIgMHgyNWEyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfRVNCXzQgMHgyNWE0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfRVNCXzUgMHgyNWE2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfRVNCXzkgMHgyNWFiCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MjBfSEIgMHgyNTAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MjBfVVBfSEIgMHgyNTAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4NTBfSEIgMHgyNTMwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4NjBfSEIgMHgyNTMxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfRTc1MDFfTUNIIDB4MjU0YworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODQ1R19IQiAweDI1NjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84Mjg0NUdfSUcgMHgyNTYyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4NjVfSEIgMHgyNTcwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4NjVfSUcgMHgyNTcyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4NzVfSEIgMHgyNTc4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI5MTVHX0hCIDB4MjU4MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyOTE1R19JRyAweDI1ODIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjkxNUdNX0hCIDB4MjU5MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyOTE1R01fSUcgMHgyNTkyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI5NDVHX0hCIDB4Mjc3MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyOTQ1R19JRyAweDI3NzIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84Mjk0NUdNX0hCIDB4MjdBMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyOTQ1R01fSUcgMHgyN0EyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNINl8wIDB4MjY0MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDZfMSAweDI2NDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g2XzIgMHgyNjQyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNINl8xNiAweDI2NmEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g2XzE3IDB4MjY2ZAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDZfMTggMHgyNjZlCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNINl8xOSAweDI2NmYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9FU0IyXzAgMHgyNjcwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfRVNCMl8xNCAweDI2OTgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9FU0IyXzE3IDB4MjY5YgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0VTQjJfMTggMHgyNjllCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIN18wIDB4MjdiOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDdfMSAweDI3YjkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g3XzMwIDB4MjdiMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDdfMzEgMHgyN2JkCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIN18xNyAweDI3ZGEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g3XzE5IDB4MjdkZAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDdfMjAgMHgyN2RlCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIN18yMSAweDI3ZGYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g4XzAgMHgyODEwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIOF8xIDB4MjgxMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDhfMiAweDI4MTIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g4XzMgMHgyODE0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIOF80IDB4MjgxNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDhfNSAweDI4M2UKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g4XzYgMHgyODUwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4NTVQTV9IQiAweDMzNDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgzMF9IQiAweDM1NzUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgzMF9DR0MgMHgzNTc3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4NTVHTV9IQiAweDM1ODAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84Mjg1NUdNX0lHIDB4MzU4MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0U3NTIwX01DSCAweDM1OTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9FNzMyMF9NQ0ggMHgzNTkyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfTUNIX1BBIDB4MzU5NQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX01DSF9QQTEgMHgzNTk2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfTUNIX1BCIDB4MzU5NworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX01DSF9QQjEgMHgzNTk4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfTUNIX1BDIDB4MzU5OQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX01DSF9QQzEgMHgzNTlhCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfRTc1MjVfTUNIIDB4MzU5ZQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyMzcxU0JfMCAweDcwMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjM3MVNCXzEgMHg3MDEwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODIzNzFTQl8yIDB4NzAyMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNDM3VlggMHg3MDMwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI0MzlUWCAweDcxMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjM3MUFCXzAgMHg3MTEwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODIzNzFBQiAweDcxMTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjM3MUFCXzIgMHg3MTEyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODIzNzFBQl8zIDB4NzExMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODEwX01DMSAweDcxMjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgxMF9JRzEgMHg3MTIxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MTBfTUMzIDB4NzEyMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODEwX0lHMyAweDcxMjMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgxMEVfTUMgMHg3MTI0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MTBFX0lHIDB4NzEyNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNDQzTFhfMCAweDcxODAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjQ0M0xYXzEgMHg3MTgxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI0NDNCWF8wIDB4NzE5MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNDQzQlhfMSAweDcxOTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjQ0M0JYXzIgMHg3MTkyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfNDQwTVggMHg3MTk1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfNDQwTVhfNiAweDcxOTYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjQ0M01YXzAgMHg3MTk4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI0NDNNWF8xIDB4NzE5OQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNDQzTVhfMyAweDcxOWIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjQ0M0dYXzAgMHg3MWEwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI0NDNHWF8yIDB4NzFhMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyMzcyRkJfMSAweDc2MDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjQ1NEdYIDB4ODRjNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNDUwR1ggMHg4NGM1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI0NTFOWCAweDg0Y2EKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjQ1NE5YIDB4ODRjYgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzg0NDYwR1ggMHg4NGVhCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSVhQNFhYIDB4ODUwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lYUDI4MDAgMHg5MDA0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfUzIxMTUyQkIgMHhiMTUyCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9TQ0FMRU1QIDB4ODY4NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NDQUxFTVBfVlNNUF9DVEwgMHgxMDEwCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9DT01QVVRPTkUgMHg4ZTBlCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ09NUFVUT05FX0lQMkVYIDB4MDI5MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NPTVBVVE9ORV9QRyAweDAzMDIKKyNkZWZpbmUgUENJX1NVQlZFTkRPUl9JRF9DT01QVVRPTkUgMHg4ZTBlCisjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfQ09NUFVUT05FX1BHNCAweDAwMDEKKyNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9DT01QVVRPTkVfUEc4IDB4MDAwMgorI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX0NPTVBVVE9ORV9QRzYgMHgwMDAzCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9LVEkgMHg4ZTJlCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BREFQVEVDIDB4OTAwNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FEQVBURUNfNzgxMCAweDEwNzgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDXzc4MjEgMHgyMTc4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQ18zODYwMiAweDM4NjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDXzc4NTAgMHg1MDc4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQ183ODU1IDB4NTU3OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FEQVBURUNfMzg2MCAweDYwMzgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDXzE0ODBBIDB4NjA3NQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FEQVBURUNfNzg2MCAweDYwNzgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDXzc4NjEgMHg2MTc4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQ183ODcwIDB4NzA3OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FEQVBURUNfNzg3MSAweDcxNzgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDXzc4NzIgMHg3Mjc4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQ183ODczIDB4NzM3OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FEQVBURUNfNzg3NCAweDc0NzgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDXzc4OTUgMHg3ODk1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQ183ODgwIDB4ODA3OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FEQVBURUNfNzg4MSAweDgxNzgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDXzc4ODIgMHg4Mjc4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQ183ODgzIDB4ODM3OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FEQVBURUNfNzg4NCAweDg0NzgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDXzc4ODUgMHg4NTc4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQ183ODg2IDB4ODY3OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FEQVBURUNfNzg4NyAweDg3NzgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDXzc4ODggMHg4ODc4CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BREFQVEVDMiAweDkwMDUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDMl8yOTQwVTIgMHgwMDEwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQzJfMjkzMFUyIDB4MDAxMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FEQVBURUMyXzc4OTBCIDB4MDAxMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FEQVBURUMyXzc4OTAgMHgwMDFmCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQzJfMzk0MFUyIDB4MDA1MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FEQVBURUMyXzM5NTBVMkQgMHgwMDUxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQzJfNzg5NiAweDAwNWYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDMl83ODkyQSAweDAwODAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDMl83ODkyQiAweDAwODEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDMl83ODkyRCAweDAwODMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDMl83ODkyUCAweDAwOGYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDMl83ODk5QSAweDAwYzAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDMl83ODk5QiAweDAwYzEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDMl83ODk5RCAweDAwYzMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDMl83ODk5UCAweDAwY2YKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDMl9PQlNJRElBTiAweDA1MDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDMl9TQ0FNUCAweDA1MDMKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0hPTFRFSyAweDk0MTIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9IT0xURUtfNjU2NSAweDY1NjUKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX05FVE1PUyAweDk3MTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORVRNT1NfOTcwNSAweDk3MDUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORVRNT1NfOTcxNSAweDk3MTUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORVRNT1NfOTczNSAweDk3MzUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORVRNT1NfOTc0NSAweDk3NDUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORVRNT1NfOTc1NSAweDk3NTUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORVRNT1NfOTgwNSAweDk4MDUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORVRNT1NfOTgxNSAweDk4MTUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORVRNT1NfOTgzNSAweDk4MzUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORVRNT1NfOTg0NSAweDk4NDUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORVRNT1NfOTg1NSAweDk4NTUKKworI2RlZmluZSBQQ0lfU1VCVkVORE9SX0lEX0VYU1lTIDB4ZDg0ZAorI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX0VYU1lTXzQwMTQgMHg0MDE0CisjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfRVhTWVNfNDA1NSAweDQwNTUKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1RJR0VSSkVUIDB4ZTE1OQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR0VSSkVUXzMwMCAweDAwMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdFUkpFVF8xMDAgMHgwMDAyCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9UVFRFQ0ggMHgwMzU3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVFRURUNIX01DMzIyIDB4MDAwQQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfWElMSU5YX1JNRSAweGVhNjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9STUVfRElHSTMyIDB4OTg5NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1JNRV9ESUdJMzJfUFJPIDB4OTg5NworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1JNRV9ESUdJMzJfOCAweDk4OTgKKwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BjaV9yZWdzLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcGNpX3JlZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2EyMWJlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BjaV9yZWdzLmgKQEAgLTAsMCArMSw0MjIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgTElOVVhfUENJX1JFR1NfSAorI2RlZmluZSBMSU5VWF9QQ0lfUkVHU19ICisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRCAweDAwICAKKyNkZWZpbmUgUENJX0RFVklDRV9JRCAweDAyICAKKyNkZWZpbmUgUENJX0NPTU1BTkQgMHgwNCAgCisjZGVmaW5lIFBDSV9DT01NQU5EX0lPIDB4MSAgCisjZGVmaW5lIFBDSV9DT01NQU5EX01FTU9SWSAweDIgIAorI2RlZmluZSBQQ0lfQ09NTUFORF9NQVNURVIgMHg0ICAKKyNkZWZpbmUgUENJX0NPTU1BTkRfU1BFQ0lBTCAweDggIAorI2RlZmluZSBQQ0lfQ09NTUFORF9JTlZBTElEQVRFIDB4MTAgIAorI2RlZmluZSBQQ0lfQ09NTUFORF9WR0FfUEFMRVRURSAweDIwICAKKyNkZWZpbmUgUENJX0NPTU1BTkRfUEFSSVRZIDB4NDAgIAorI2RlZmluZSBQQ0lfQ09NTUFORF9XQUlUIDB4ODAgIAorI2RlZmluZSBQQ0lfQ09NTUFORF9TRVJSIDB4MTAwICAKKyNkZWZpbmUgUENJX0NPTU1BTkRfRkFTVF9CQUNLIDB4MjAwICAKKyNkZWZpbmUgUENJX0NPTU1BTkRfSU5UWF9ESVNBQkxFIDB4NDAwICAKKworI2RlZmluZSBQQ0lfU1RBVFVTIDB4MDYgIAorI2RlZmluZSBQQ0lfU1RBVFVTX0NBUF9MSVNUIDB4MTAgIAorI2RlZmluZSBQQ0lfU1RBVFVTXzY2TUhaIDB4MjAgIAorI2RlZmluZSBQQ0lfU1RBVFVTX1VERiAweDQwICAKKyNkZWZpbmUgUENJX1NUQVRVU19GQVNUX0JBQ0sgMHg4MCAgCisjZGVmaW5lIFBDSV9TVEFUVVNfUEFSSVRZIDB4MTAwICAKKyNkZWZpbmUgUENJX1NUQVRVU19ERVZTRUxfTUFTSyAweDYwMCAgCisjZGVmaW5lIFBDSV9TVEFUVVNfREVWU0VMX0ZBU1QgMHgwMDAKKyNkZWZpbmUgUENJX1NUQVRVU19ERVZTRUxfTUVESVVNIDB4MjAwCisjZGVmaW5lIFBDSV9TVEFUVVNfREVWU0VMX1NMT1cgMHg0MDAKKyNkZWZpbmUgUENJX1NUQVRVU19TSUdfVEFSR0VUX0FCT1JUIDB4ODAwICAKKyNkZWZpbmUgUENJX1NUQVRVU19SRUNfVEFSR0VUX0FCT1JUIDB4MTAwMCAgCisjZGVmaW5lIFBDSV9TVEFUVVNfUkVDX01BU1RFUl9BQk9SVCAweDIwMDAgIAorI2RlZmluZSBQQ0lfU1RBVFVTX1NJR19TWVNURU1fRVJST1IgMHg0MDAwICAKKyNkZWZpbmUgUENJX1NUQVRVU19ERVRFQ1RFRF9QQVJJVFkgMHg4MDAwICAKKworI2RlZmluZSBQQ0lfQ0xBU1NfUkVWSVNJT04gMHgwOCAgCisjZGVmaW5lIFBDSV9SRVZJU0lPTl9JRCAweDA4ICAKKyNkZWZpbmUgUENJX0NMQVNTX1BST0cgMHgwOSAgCisjZGVmaW5lIFBDSV9DTEFTU19ERVZJQ0UgMHgwYSAgCisKKyNkZWZpbmUgUENJX0NBQ0hFX0xJTkVfU0laRSAweDBjICAKKyNkZWZpbmUgUENJX0xBVEVOQ1lfVElNRVIgMHgwZCAgCisjZGVmaW5lIFBDSV9IRUFERVJfVFlQRSAweDBlICAKKyNkZWZpbmUgUENJX0hFQURFUl9UWVBFX05PUk1BTCAwCisjZGVmaW5lIFBDSV9IRUFERVJfVFlQRV9CUklER0UgMQorI2RlZmluZSBQQ0lfSEVBREVSX1RZUEVfQ0FSREJVUyAyCisKKyNkZWZpbmUgUENJX0JJU1QgMHgwZiAgCisjZGVmaW5lIFBDSV9CSVNUX0NPREVfTUFTSyAweDBmICAKKyNkZWZpbmUgUENJX0JJU1RfU1RBUlQgMHg0MCAgCisjZGVmaW5lIFBDSV9CSVNUX0NBUEFCTEUgMHg4MCAgCisKKyNkZWZpbmUgUENJX0JBU0VfQUREUkVTU18wIDB4MTAgIAorI2RlZmluZSBQQ0lfQkFTRV9BRERSRVNTXzEgMHgxNCAgCisjZGVmaW5lIFBDSV9CQVNFX0FERFJFU1NfMiAweDE4ICAKKyNkZWZpbmUgUENJX0JBU0VfQUREUkVTU18zIDB4MWMgIAorI2RlZmluZSBQQ0lfQkFTRV9BRERSRVNTXzQgMHgyMCAgCisjZGVmaW5lIFBDSV9CQVNFX0FERFJFU1NfNSAweDI0ICAKKyNkZWZpbmUgUENJX0JBU0VfQUREUkVTU19TUEFDRSAweDAxICAKKyNkZWZpbmUgUENJX0JBU0VfQUREUkVTU19TUEFDRV9JTyAweDAxCisjZGVmaW5lIFBDSV9CQVNFX0FERFJFU1NfU1BBQ0VfTUVNT1JZIDB4MDAKKyNkZWZpbmUgUENJX0JBU0VfQUREUkVTU19NRU1fVFlQRV9NQVNLIDB4MDYKKyNkZWZpbmUgUENJX0JBU0VfQUREUkVTU19NRU1fVFlQRV8zMiAweDAwICAKKyNkZWZpbmUgUENJX0JBU0VfQUREUkVTU19NRU1fVFlQRV8xTSAweDAyICAKKyNkZWZpbmUgUENJX0JBU0VfQUREUkVTU19NRU1fVFlQRV82NCAweDA0ICAKKyNkZWZpbmUgUENJX0JBU0VfQUREUkVTU19NRU1fUFJFRkVUQ0ggMHgwOCAgCisjZGVmaW5lIFBDSV9CQVNFX0FERFJFU1NfTUVNX01BU0sgKH4weDBmVUwpCisjZGVmaW5lIFBDSV9CQVNFX0FERFJFU1NfSU9fTUFTSyAofjB4MDNVTCkKKworI2RlZmluZSBQQ0lfQ0FSREJVU19DSVMgMHgyOAorI2RlZmluZSBQQ0lfU1VCU1lTVEVNX1ZFTkRPUl9JRCAweDJjCisjZGVmaW5lIFBDSV9TVUJTWVNURU1fSUQgMHgyZQorI2RlZmluZSBQQ0lfUk9NX0FERFJFU1MgMHgzMCAgCisjZGVmaW5lIFBDSV9ST01fQUREUkVTU19FTkFCTEUgMHgwMQorI2RlZmluZSBQQ0lfUk9NX0FERFJFU1NfTUFTSyAofjB4N2ZmVUwpCisKKyNkZWZpbmUgUENJX0NBUEFCSUxJVFlfTElTVCAweDM0ICAKKworI2RlZmluZSBQQ0lfSU5URVJSVVBUX0xJTkUgMHgzYyAgCisjZGVmaW5lIFBDSV9JTlRFUlJVUFRfUElOIDB4M2QgIAorI2RlZmluZSBQQ0lfTUlOX0dOVCAweDNlICAKKyNkZWZpbmUgUENJX01BWF9MQVQgMHgzZiAgCisKKyNkZWZpbmUgUENJX1BSSU1BUllfQlVTIDB4MTggIAorI2RlZmluZSBQQ0lfU0VDT05EQVJZX0JVUyAweDE5ICAKKyNkZWZpbmUgUENJX1NVQk9SRElOQVRFX0JVUyAweDFhICAKKyNkZWZpbmUgUENJX1NFQ19MQVRFTkNZX1RJTUVSIDB4MWIgIAorI2RlZmluZSBQQ0lfSU9fQkFTRSAweDFjICAKKyNkZWZpbmUgUENJX0lPX0xJTUlUIDB4MWQKKyNkZWZpbmUgUENJX0lPX1JBTkdFX1RZUEVfTUFTSyAweDBmVUwgIAorI2RlZmluZSBQQ0lfSU9fUkFOR0VfVFlQRV8xNiAweDAwCisjZGVmaW5lIFBDSV9JT19SQU5HRV9UWVBFXzMyIDB4MDEKKyNkZWZpbmUgUENJX0lPX1JBTkdFX01BU0sgKH4weDBmVUwpCisjZGVmaW5lIFBDSV9TRUNfU1RBVFVTIDB4MWUgIAorI2RlZmluZSBQQ0lfTUVNT1JZX0JBU0UgMHgyMCAgCisjZGVmaW5lIFBDSV9NRU1PUllfTElNSVQgMHgyMgorI2RlZmluZSBQQ0lfTUVNT1JZX1JBTkdFX1RZUEVfTUFTSyAweDBmVUwKKyNkZWZpbmUgUENJX01FTU9SWV9SQU5HRV9NQVNLICh+MHgwZlVMKQorI2RlZmluZSBQQ0lfUFJFRl9NRU1PUllfQkFTRSAweDI0ICAKKyNkZWZpbmUgUENJX1BSRUZfTUVNT1JZX0xJTUlUIDB4MjYKKyNkZWZpbmUgUENJX1BSRUZfUkFOR0VfVFlQRV9NQVNLIDB4MGZVTAorI2RlZmluZSBQQ0lfUFJFRl9SQU5HRV9UWVBFXzMyIDB4MDAKKyNkZWZpbmUgUENJX1BSRUZfUkFOR0VfVFlQRV82NCAweDAxCisjZGVmaW5lIFBDSV9QUkVGX1JBTkdFX01BU0sgKH4weDBmVUwpCisjZGVmaW5lIFBDSV9QUkVGX0JBU0VfVVBQRVIzMiAweDI4ICAKKyNkZWZpbmUgUENJX1BSRUZfTElNSVRfVVBQRVIzMiAweDJjCisjZGVmaW5lIFBDSV9JT19CQVNFX1VQUEVSMTYgMHgzMCAgCisjZGVmaW5lIFBDSV9JT19MSU1JVF9VUFBFUjE2IDB4MzIKKworI2RlZmluZSBQQ0lfUk9NX0FERFJFU1MxIDB4MzggIAorCisjZGVmaW5lIFBDSV9CUklER0VfQ09OVFJPTCAweDNlCisjZGVmaW5lIFBDSV9CUklER0VfQ1RMX1BBUklUWSAweDAxICAKKyNkZWZpbmUgUENJX0JSSURHRV9DVExfU0VSUiAweDAyICAKKyNkZWZpbmUgUENJX0JSSURHRV9DVExfTk9fSVNBIDB4MDQgIAorI2RlZmluZSBQQ0lfQlJJREdFX0NUTF9WR0EgMHgwOCAgCisjZGVmaW5lIFBDSV9CUklER0VfQ1RMX01BU1RFUl9BQk9SVCAweDIwICAKKyNkZWZpbmUgUENJX0JSSURHRV9DVExfQlVTX1JFU0VUIDB4NDAgIAorI2RlZmluZSBQQ0lfQlJJREdFX0NUTF9GQVNUX0JBQ0sgMHg4MCAgCisKKyNkZWZpbmUgUENJX0NCX0NBUEFCSUxJVFlfTElTVCAweDE0CisKKyNkZWZpbmUgUENJX0NCX1NFQ19TVEFUVVMgMHgxNiAgCisjZGVmaW5lIFBDSV9DQl9QUklNQVJZX0JVUyAweDE4ICAKKyNkZWZpbmUgUENJX0NCX0NBUkRfQlVTIDB4MTkgIAorI2RlZmluZSBQQ0lfQ0JfU1VCT1JESU5BVEVfQlVTIDB4MWEgIAorI2RlZmluZSBQQ0lfQ0JfTEFURU5DWV9USU1FUiAweDFiICAKKyNkZWZpbmUgUENJX0NCX01FTU9SWV9CQVNFXzAgMHgxYworI2RlZmluZSBQQ0lfQ0JfTUVNT1JZX0xJTUlUXzAgMHgyMAorI2RlZmluZSBQQ0lfQ0JfTUVNT1JZX0JBU0VfMSAweDI0CisjZGVmaW5lIFBDSV9DQl9NRU1PUllfTElNSVRfMSAweDI4CisjZGVmaW5lIFBDSV9DQl9JT19CQVNFXzAgMHgyYworI2RlZmluZSBQQ0lfQ0JfSU9fQkFTRV8wX0hJIDB4MmUKKyNkZWZpbmUgUENJX0NCX0lPX0xJTUlUXzAgMHgzMAorI2RlZmluZSBQQ0lfQ0JfSU9fTElNSVRfMF9ISSAweDMyCisjZGVmaW5lIFBDSV9DQl9JT19CQVNFXzEgMHgzNAorI2RlZmluZSBQQ0lfQ0JfSU9fQkFTRV8xX0hJIDB4MzYKKyNkZWZpbmUgUENJX0NCX0lPX0xJTUlUXzEgMHgzOAorI2RlZmluZSBQQ0lfQ0JfSU9fTElNSVRfMV9ISSAweDNhCisjZGVmaW5lIFBDSV9DQl9JT19SQU5HRV9NQVNLICh+MHgwM1VMKQorCisjZGVmaW5lIFBDSV9DQl9CUklER0VfQ09OVFJPTCAweDNlCisjZGVmaW5lIFBDSV9DQl9CUklER0VfQ1RMX1BBUklUWSAweDAxICAKKyNkZWZpbmUgUENJX0NCX0JSSURHRV9DVExfU0VSUiAweDAyCisjZGVmaW5lIFBDSV9DQl9CUklER0VfQ1RMX0lTQSAweDA0CisjZGVmaW5lIFBDSV9DQl9CUklER0VfQ1RMX1ZHQSAweDA4CisjZGVmaW5lIFBDSV9DQl9CUklER0VfQ1RMX01BU1RFUl9BQk9SVCAweDIwCisjZGVmaW5lIFBDSV9DQl9CUklER0VfQ1RMX0NCX1JFU0VUIDB4NDAgIAorI2RlZmluZSBQQ0lfQ0JfQlJJREdFX0NUTF8xNkJJVF9JTlQgMHg4MCAgCisjZGVmaW5lIFBDSV9DQl9CUklER0VfQ1RMX1BSRUZFVENIX01FTTAgMHgxMDAgIAorI2RlZmluZSBQQ0lfQ0JfQlJJREdFX0NUTF9QUkVGRVRDSF9NRU0xIDB4MjAwCisjZGVmaW5lIFBDSV9DQl9CUklER0VfQ1RMX1BPU1RfV1JJVEVTIDB4NDAwCisjZGVmaW5lIFBDSV9DQl9TVUJTWVNURU1fVkVORE9SX0lEIDB4NDAKKyNkZWZpbmUgUENJX0NCX1NVQlNZU1RFTV9JRCAweDQyCisjZGVmaW5lIFBDSV9DQl9MRUdBQ1lfTU9ERV9CQVNFIDB4NDQgIAorCisjZGVmaW5lIFBDSV9DQVBfTElTVF9JRCAwICAKKyNkZWZpbmUgUENJX0NBUF9JRF9QTSAweDAxICAKKyNkZWZpbmUgUENJX0NBUF9JRF9BR1AgMHgwMiAgCisjZGVmaW5lIFBDSV9DQVBfSURfVlBEIDB4MDMgIAorI2RlZmluZSBQQ0lfQ0FQX0lEX1NMT1RJRCAweDA0ICAKKyNkZWZpbmUgUENJX0NBUF9JRF9NU0kgMHgwNSAgCisjZGVmaW5lIFBDSV9DQVBfSURfQ0hTV1AgMHgwNiAgCisjZGVmaW5lIFBDSV9DQVBfSURfUENJWCAweDA3ICAKKyNkZWZpbmUgUENJX0NBUF9JRF9IVF9JUlFDT05GIDB4MDggIAorI2RlZmluZSBQQ0lfQ0FQX0lEX1ZORFIgMHgwOSAgCisjZGVmaW5lIFBDSV9DQVBfSURfU0hQQyAweDBDICAKKyNkZWZpbmUgUENJX0NBUF9JRF9FWFAgMHgxMCAgCisjZGVmaW5lIFBDSV9DQVBfSURfTVNJWCAweDExICAKKyNkZWZpbmUgUENJX0NBUF9MSVNUX05FWFQgMSAgCisjZGVmaW5lIFBDSV9DQVBfRkxBR1MgMiAgCisjZGVmaW5lIFBDSV9DQVBfU0laRU9GIDQKKworI2RlZmluZSBQQ0lfUE1fUE1DIDIgIAorI2RlZmluZSBQQ0lfUE1fQ0FQX1ZFUl9NQVNLIDB4MDAwNyAgCisjZGVmaW5lIFBDSV9QTV9DQVBfUE1FX0NMT0NLIDB4MDAwOCAgCisjZGVmaW5lIFBDSV9QTV9DQVBfUkVTRVJWRUQgMHgwMDEwICAKKyNkZWZpbmUgUENJX1BNX0NBUF9EU0kgMHgwMDIwICAKKyNkZWZpbmUgUENJX1BNX0NBUF9BVVhfUE9XRVIgMHgwMUMwICAKKyNkZWZpbmUgUENJX1BNX0NBUF9EMSAweDAyMDAgIAorI2RlZmluZSBQQ0lfUE1fQ0FQX0QyIDB4MDQwMCAgCisjZGVmaW5lIFBDSV9QTV9DQVBfUE1FIDB4MDgwMCAgCisjZGVmaW5lIFBDSV9QTV9DQVBfUE1FX01BU0sgMHhGODAwICAKKyNkZWZpbmUgUENJX1BNX0NBUF9QTUVfRDAgMHgwODAwICAKKyNkZWZpbmUgUENJX1BNX0NBUF9QTUVfRDEgMHgxMDAwICAKKyNkZWZpbmUgUENJX1BNX0NBUF9QTUVfRDIgMHgyMDAwICAKKyNkZWZpbmUgUENJX1BNX0NBUF9QTUVfRDMgMHg0MDAwICAKKyNkZWZpbmUgUENJX1BNX0NBUF9QTUVfRDNjb2xkIDB4ODAwMCAgCisjZGVmaW5lIFBDSV9QTV9DVFJMIDQgIAorI2RlZmluZSBQQ0lfUE1fQ1RSTF9TVEFURV9NQVNLIDB4MDAwMyAgCisjZGVmaW5lIFBDSV9QTV9DVFJMX05PX1NPRlRfUkVTRVQgMHgwMDA0ICAKKyNkZWZpbmUgUENJX1BNX0NUUkxfUE1FX0VOQUJMRSAweDAxMDAgIAorI2RlZmluZSBQQ0lfUE1fQ1RSTF9EQVRBX1NFTF9NQVNLIDB4MWUwMCAgCisjZGVmaW5lIFBDSV9QTV9DVFJMX0RBVEFfU0NBTEVfTUFTSyAweDYwMDAgIAorI2RlZmluZSBQQ0lfUE1fQ1RSTF9QTUVfU1RBVFVTIDB4ODAwMCAgCisjZGVmaW5lIFBDSV9QTV9QUEJfRVhURU5TSU9OUyA2ICAKKyNkZWZpbmUgUENJX1BNX1BQQl9CMl9CMyAweDQwICAKKyNkZWZpbmUgUENJX1BNX0JQQ0NfRU5BQkxFIDB4ODAgIAorI2RlZmluZSBQQ0lfUE1fREFUQV9SRUdJU1RFUiA3ICAKKyNkZWZpbmUgUENJX1BNX1NJWkVPRiA4CisKKyNkZWZpbmUgUENJX0FHUF9WRVJTSU9OIDIgIAorI2RlZmluZSBQQ0lfQUdQX1JGVSAzICAKKyNkZWZpbmUgUENJX0FHUF9TVEFUVVMgNCAgCisjZGVmaW5lIFBDSV9BR1BfU1RBVFVTX1JRX01BU0sgMHhmZjAwMDAwMCAgCisjZGVmaW5lIFBDSV9BR1BfU1RBVFVTX1NCQSAweDAyMDAgIAorI2RlZmluZSBQQ0lfQUdQX1NUQVRVU182NEJJVCAweDAwMjAgIAorI2RlZmluZSBQQ0lfQUdQX1NUQVRVU19GVyAweDAwMTAgIAorI2RlZmluZSBQQ0lfQUdQX1NUQVRVU19SQVRFNCAweDAwMDQgIAorI2RlZmluZSBQQ0lfQUdQX1NUQVRVU19SQVRFMiAweDAwMDIgIAorI2RlZmluZSBQQ0lfQUdQX1NUQVRVU19SQVRFMSAweDAwMDEgIAorI2RlZmluZSBQQ0lfQUdQX0NPTU1BTkQgOCAgCisjZGVmaW5lIFBDSV9BR1BfQ09NTUFORF9SUV9NQVNLIDB4ZmYwMDAwMDAgIAorI2RlZmluZSBQQ0lfQUdQX0NPTU1BTkRfU0JBIDB4MDIwMCAgCisjZGVmaW5lIFBDSV9BR1BfQ09NTUFORF9BR1AgMHgwMTAwICAKKyNkZWZpbmUgUENJX0FHUF9DT01NQU5EXzY0QklUIDB4MDAyMCAgCisjZGVmaW5lIFBDSV9BR1BfQ09NTUFORF9GVyAweDAwMTAgIAorI2RlZmluZSBQQ0lfQUdQX0NPTU1BTkRfUkFURTQgMHgwMDA0ICAKKyNkZWZpbmUgUENJX0FHUF9DT01NQU5EX1JBVEUyIDB4MDAwMiAgCisjZGVmaW5lIFBDSV9BR1BfQ09NTUFORF9SQVRFMSAweDAwMDEgIAorI2RlZmluZSBQQ0lfQUdQX1NJWkVPRiAxMgorCisjZGVmaW5lIFBDSV9WUERfQUREUiAyICAKKyNkZWZpbmUgUENJX1ZQRF9BRERSX01BU0sgMHg3ZmZmICAKKyNkZWZpbmUgUENJX1ZQRF9BRERSX0YgMHg4MDAwICAKKyNkZWZpbmUgUENJX1ZQRF9EQVRBIDQgIAorCisjZGVmaW5lIFBDSV9TSURfRVNSIDIgIAorI2RlZmluZSBQQ0lfU0lEX0VTUl9OU0xPVFMgMHgxZiAgCisjZGVmaW5lIFBDSV9TSURfRVNSX0ZJQyAweDIwICAKKyNkZWZpbmUgUENJX1NJRF9DSEFTU0lTX05SIDMgIAorCisjZGVmaW5lIFBDSV9NU0lfRkxBR1MgMiAgCisjZGVmaW5lIFBDSV9NU0lfRkxBR1NfNjRCSVQgMHg4MCAgCisjZGVmaW5lIFBDSV9NU0lfRkxBR1NfUVNJWkUgMHg3MCAgCisjZGVmaW5lIFBDSV9NU0lfRkxBR1NfUU1BU0sgMHgwZSAgCisjZGVmaW5lIFBDSV9NU0lfRkxBR1NfRU5BQkxFIDB4MDEgIAorI2RlZmluZSBQQ0lfTVNJX0ZMQUdTX01BU0tCSVQgMHgxMDAgIAorI2RlZmluZSBQQ0lfTVNJX1JGVSAzICAKKyNkZWZpbmUgUENJX01TSV9BRERSRVNTX0xPIDQgIAorI2RlZmluZSBQQ0lfTVNJX0FERFJFU1NfSEkgOCAgCisjZGVmaW5lIFBDSV9NU0lfREFUQV8zMiA4ICAKKyNkZWZpbmUgUENJX01TSV9EQVRBXzY0IDEyICAKKyNkZWZpbmUgUENJX01TSV9NQVNLX0JJVCAxNiAgCisKKyNkZWZpbmUgUENJX0NIU1dQX0NTUiAyICAKKyNkZWZpbmUgUENJX0NIU1dQX0RIQSAweDAxICAKKyNkZWZpbmUgUENJX0NIU1dQX0VJTSAweDAyICAKKyNkZWZpbmUgUENJX0NIU1dQX1BJRSAweDA0ICAKKyNkZWZpbmUgUENJX0NIU1dQX0xPTyAweDA4ICAKKyNkZWZpbmUgUENJX0NIU1dQX1BJIDB4MzAgIAorI2RlZmluZSBQQ0lfQ0hTV1BfRVhUIDB4NDAgIAorI2RlZmluZSBQQ0lfQ0hTV1BfSU5TIDB4ODAgIAorCisjZGVmaW5lIFBDSV9YX0NNRCAyICAKKyNkZWZpbmUgUENJX1hfQ01EX0RQRVJSX0UgMHgwMDAxICAKKyNkZWZpbmUgUENJX1hfQ01EX0VSTyAweDAwMDIgIAorI2RlZmluZSBQQ0lfWF9DTURfTUFYX1JFQUQgMHgwMDBjICAKKyNkZWZpbmUgUENJX1hfQ01EX01BWF9TUExJVCAweDAwNzAgIAorI2RlZmluZSBQQ0lfWF9DTURfVkVSU0lPTih4KSAoKCh4KSA+PiAxMikgJiAzKSAgCisjZGVmaW5lIFBDSV9YX1NUQVRVUyA0ICAKKyNkZWZpbmUgUENJX1hfU1RBVFVTX0RFVkZOIDB4MDAwMDAwZmYgIAorI2RlZmluZSBQQ0lfWF9TVEFUVVNfQlVTIDB4MDAwMGZmMDAgIAorI2RlZmluZSBQQ0lfWF9TVEFUVVNfNjRCSVQgMHgwMDAxMDAwMCAgCisjZGVmaW5lIFBDSV9YX1NUQVRVU18xMzNNSFogMHgwMDAyMDAwMCAgCisjZGVmaW5lIFBDSV9YX1NUQVRVU19TUExfRElTQyAweDAwMDQwMDAwICAKKyNkZWZpbmUgUENJX1hfU1RBVFVTX1VOWF9TUEwgMHgwMDA4MDAwMCAgCisjZGVmaW5lIFBDSV9YX1NUQVRVU19DT01QTEVYIDB4MDAxMDAwMDAgIAorI2RlZmluZSBQQ0lfWF9TVEFUVVNfTUFYX1JFQUQgMHgwMDYwMDAwMCAgCisjZGVmaW5lIFBDSV9YX1NUQVRVU19NQVhfU1BMSVQgMHgwMzgwMDAwMCAgCisjZGVmaW5lIFBDSV9YX1NUQVRVU19NQVhfQ1VNIDB4MWMwMDAwMDAgIAorI2RlZmluZSBQQ0lfWF9TVEFUVVNfU1BMX0VSUiAweDIwMDAwMDAwICAKKyNkZWZpbmUgUENJX1hfU1RBVFVTXzI2Nk1IWiAweDQwMDAwMDAwICAKKyNkZWZpbmUgUENJX1hfU1RBVFVTXzUzM01IWiAweDgwMDAwMDAwICAKKworI2RlZmluZSBQQ0lfRVhQX0ZMQUdTIDIgIAorI2RlZmluZSBQQ0lfRVhQX0ZMQUdTX1ZFUlMgMHgwMDBmICAKKyNkZWZpbmUgUENJX0VYUF9GTEFHU19UWVBFIDB4MDBmMCAgCisjZGVmaW5lIFBDSV9FWFBfVFlQRV9FTkRQT0lOVCAweDAgIAorI2RlZmluZSBQQ0lfRVhQX1RZUEVfTEVHX0VORCAweDEgIAorI2RlZmluZSBQQ0lfRVhQX1RZUEVfUk9PVF9QT1JUIDB4NCAgCisjZGVmaW5lIFBDSV9FWFBfVFlQRV9VUFNUUkVBTSAweDUgIAorI2RlZmluZSBQQ0lfRVhQX1RZUEVfRE9XTlNUUkVBTSAweDYgIAorI2RlZmluZSBQQ0lfRVhQX1RZUEVfUENJX0JSSURHRSAweDcgIAorI2RlZmluZSBQQ0lfRVhQX0ZMQUdTX1NMT1QgMHgwMTAwICAKKyNkZWZpbmUgUENJX0VYUF9GTEFHU19JUlEgMHgzZTAwICAKKyNkZWZpbmUgUENJX0VYUF9ERVZDQVAgNCAgCisjZGVmaW5lIFBDSV9FWFBfREVWQ0FQX1BBWUxPQUQgMHgwNyAgCisjZGVmaW5lIFBDSV9FWFBfREVWQ0FQX1BIQU5UT00gMHgxOCAgCisjZGVmaW5lIFBDSV9FWFBfREVWQ0FQX0VYVF9UQUcgMHgyMCAgCisjZGVmaW5lIFBDSV9FWFBfREVWQ0FQX0wwUyAweDFjMCAgCisjZGVmaW5lIFBDSV9FWFBfREVWQ0FQX0wxIDB4ZTAwICAKKyNkZWZpbmUgUENJX0VYUF9ERVZDQVBfQVROX0JVVCAweDEwMDAgIAorI2RlZmluZSBQQ0lfRVhQX0RFVkNBUF9BVE5fSU5EIDB4MjAwMCAgCisjZGVmaW5lIFBDSV9FWFBfREVWQ0FQX1BXUl9JTkQgMHg0MDAwICAKKyNkZWZpbmUgUENJX0VYUF9ERVZDQVBfUFdSX1ZBTCAweDNmYzAwMDAgIAorI2RlZmluZSBQQ0lfRVhQX0RFVkNBUF9QV1JfU0NMIDB4YzAwMDAwMCAgCisjZGVmaW5lIFBDSV9FWFBfREVWQ1RMIDggIAorI2RlZmluZSBQQ0lfRVhQX0RFVkNUTF9DRVJFIDB4MDAwMSAgCisjZGVmaW5lIFBDSV9FWFBfREVWQ1RMX05GRVJFIDB4MDAwMiAgCisjZGVmaW5lIFBDSV9FWFBfREVWQ1RMX0ZFUkUgMHgwMDA0ICAKKyNkZWZpbmUgUENJX0VYUF9ERVZDVExfVVJSRSAweDAwMDggIAorI2RlZmluZSBQQ0lfRVhQX0RFVkNUTF9SRUxBWF9FTiAweDAwMTAgIAorI2RlZmluZSBQQ0lfRVhQX0RFVkNUTF9QQVlMT0FEIDB4MDBlMCAgCisjZGVmaW5lIFBDSV9FWFBfREVWQ1RMX0VYVF9UQUcgMHgwMTAwICAKKyNkZWZpbmUgUENJX0VYUF9ERVZDVExfUEhBTlRPTSAweDAyMDAgIAorI2RlZmluZSBQQ0lfRVhQX0RFVkNUTF9BVVhfUE1FIDB4MDQwMCAgCisjZGVmaW5lIFBDSV9FWFBfREVWQ1RMX05PU05PT1BfRU4gMHgwODAwICAKKyNkZWZpbmUgUENJX0VYUF9ERVZDVExfUkVBRFJRIDB4NzAwMCAgCisjZGVmaW5lIFBDSV9FWFBfREVWU1RBIDEwICAKKyNkZWZpbmUgUENJX0VYUF9ERVZTVEFfQ0VEIDB4MDEgIAorI2RlZmluZSBQQ0lfRVhQX0RFVlNUQV9ORkVEIDB4MDIgIAorI2RlZmluZSBQQ0lfRVhQX0RFVlNUQV9GRUQgMHgwNCAgCisjZGVmaW5lIFBDSV9FWFBfREVWU1RBX1VSRCAweDA4ICAKKyNkZWZpbmUgUENJX0VYUF9ERVZTVEFfQVVYUEQgMHgxMCAgCisjZGVmaW5lIFBDSV9FWFBfREVWU1RBX1RSUE5EIDB4MjAgIAorI2RlZmluZSBQQ0lfRVhQX0xOS0NBUCAxMiAgCisjZGVmaW5lIFBDSV9FWFBfTE5LQ1RMIDE2ICAKKyNkZWZpbmUgUENJX0VYUF9MTktTVEEgMTggIAorI2RlZmluZSBQQ0lfRVhQX1NMVENBUCAyMCAgCisjZGVmaW5lIFBDSV9FWFBfU0xUQ1RMIDI0ICAKKyNkZWZpbmUgUENJX0VYUF9TTFRTVEEgMjYgIAorI2RlZmluZSBQQ0lfRVhQX1JUQ1RMIDI4ICAKKyNkZWZpbmUgUENJX0VYUF9SVENUTF9TRUNFRSAweDAxICAKKyNkZWZpbmUgUENJX0VYUF9SVENUTF9TRU5GRUUgMHgwMiAgCisjZGVmaW5lIFBDSV9FWFBfUlRDVExfU0VGRUUgMHgwNCAgCisjZGVmaW5lIFBDSV9FWFBfUlRDVExfUE1FSUUgMHgwOCAgCisjZGVmaW5lIFBDSV9FWFBfUlRDVExfQ1JTU1ZFIDB4MTAgIAorI2RlZmluZSBQQ0lfRVhQX1JUQ0FQIDMwICAKKyNkZWZpbmUgUENJX0VYUF9SVFNUQSAzMiAgCisKKyNkZWZpbmUgUENJX0VYVF9DQVBfSUQoaGVhZGVyKSAoaGVhZGVyICYgMHgwMDAwZmZmZikKKyNkZWZpbmUgUENJX0VYVF9DQVBfVkVSKGhlYWRlcikgKChoZWFkZXIgPj4gMTYpICYgMHhmKQorI2RlZmluZSBQQ0lfRVhUX0NBUF9ORVhUKGhlYWRlcikgKChoZWFkZXIgPj4gMjApICYgMHhmZmMpCisKKyNkZWZpbmUgUENJX0VYVF9DQVBfSURfRVJSIDEKKyNkZWZpbmUgUENJX0VYVF9DQVBfSURfVkMgMgorI2RlZmluZSBQQ0lfRVhUX0NBUF9JRF9EU04gMworI2RlZmluZSBQQ0lfRVhUX0NBUF9JRF9QV1IgNAorCisjZGVmaW5lIFBDSV9FUlJfVU5DT1JfU1RBVFVTIDQgIAorI2RlZmluZSBQQ0lfRVJSX1VOQ19UUkFJTiAweDAwMDAwMDAxICAKKyNkZWZpbmUgUENJX0VSUl9VTkNfRExQIDB4MDAwMDAwMTAgIAorI2RlZmluZSBQQ0lfRVJSX1VOQ19QT0lTT05fVExQIDB4MDAwMDEwMDAgIAorI2RlZmluZSBQQ0lfRVJSX1VOQ19GQ1AgMHgwMDAwMjAwMCAgCisjZGVmaW5lIFBDSV9FUlJfVU5DX0NPTVBfVElNRSAweDAwMDA0MDAwICAKKyNkZWZpbmUgUENJX0VSUl9VTkNfQ09NUF9BQk9SVCAweDAwMDA4MDAwICAKKyNkZWZpbmUgUENJX0VSUl9VTkNfVU5YX0NPTVAgMHgwMDAxMDAwMCAgCisjZGVmaW5lIFBDSV9FUlJfVU5DX1JYX09WRVIgMHgwMDAyMDAwMCAgCisjZGVmaW5lIFBDSV9FUlJfVU5DX01BTEZfVExQIDB4MDAwNDAwMDAgIAorI2RlZmluZSBQQ0lfRVJSX1VOQ19FQ1JDIDB4MDAwODAwMDAgIAorI2RlZmluZSBQQ0lfRVJSX1VOQ19VTlNVUCAweDAwMTAwMDAwICAKKyNkZWZpbmUgUENJX0VSUl9VTkNPUl9NQVNLIDggIAorCisjZGVmaW5lIFBDSV9FUlJfVU5DT1JfU0VWRVIgMTIgIAorCisjZGVmaW5lIFBDSV9FUlJfQ09SX1NUQVRVUyAxNiAgCisjZGVmaW5lIFBDSV9FUlJfQ09SX1JDVlIgMHgwMDAwMDAwMSAgCisjZGVmaW5lIFBDSV9FUlJfQ09SX0JBRF9UTFAgMHgwMDAwMDA0MCAgCisjZGVmaW5lIFBDSV9FUlJfQ09SX0JBRF9ETExQIDB4MDAwMDAwODAgIAorI2RlZmluZSBQQ0lfRVJSX0NPUl9SRVBfUk9MTCAweDAwMDAwMTAwICAKKyNkZWZpbmUgUENJX0VSUl9DT1JfUkVQX1RJTUVSIDB4MDAwMDEwMDAgIAorI2RlZmluZSBQQ0lfRVJSX0NPUl9NQVNLIDIwICAKKworI2RlZmluZSBQQ0lfRVJSX0NBUCAyNCAgCisjZGVmaW5lIFBDSV9FUlJfQ0FQX0ZFUCh4KSAoKHgpICYgMzEpICAKKyNkZWZpbmUgUENJX0VSUl9DQVBfRUNSQ19HRU5DIDB4MDAwMDAwMjAgIAorI2RlZmluZSBQQ0lfRVJSX0NBUF9FQ1JDX0dFTkUgMHgwMDAwMDA0MCAgCisjZGVmaW5lIFBDSV9FUlJfQ0FQX0VDUkNfQ0hLQyAweDAwMDAwMDgwICAKKyNkZWZpbmUgUENJX0VSUl9DQVBfRUNSQ19DSEtFIDB4MDAwMDAxMDAgIAorI2RlZmluZSBQQ0lfRVJSX0hFQURFUl9MT0cgMjggIAorI2RlZmluZSBQQ0lfRVJSX1JPT1RfQ09NTUFORCA0NCAgCisKKyNkZWZpbmUgUENJX0VSUl9ST09UX0NNRF9DT1JfRU4gMHgwMDAwMDAwMQorCisjZGVmaW5lIFBDSV9FUlJfUk9PVF9DTURfTk9ORkFUQUxfRU4gMHgwMDAwMDAwMgorCisjZGVmaW5lIFBDSV9FUlJfUk9PVF9DTURfRkFUQUxfRU4gMHgwMDAwMDAwNAorI2RlZmluZSBQQ0lfRVJSX1JPT1RfU1RBVFVTIDQ4CisjZGVmaW5lIFBDSV9FUlJfUk9PVF9DT1JfUkNWIDB4MDAwMDAwMDEgIAorCisjZGVmaW5lIFBDSV9FUlJfUk9PVF9NVUxUSV9DT1JfUkNWIDB4MDAwMDAwMDIKKworI2RlZmluZSBQQ0lfRVJSX1JPT1RfVU5DT1JfUkNWIDB4MDAwMDAwMDQKKworI2RlZmluZSBQQ0lfRVJSX1JPT1RfTVVMVElfVU5DT1JfUkNWIDB4MDAwMDAwMDgKKyNkZWZpbmUgUENJX0VSUl9ST09UX0ZJUlNUX0ZBVEFMIDB4MDAwMDAwMTAgIAorI2RlZmluZSBQQ0lfRVJSX1JPT1RfTk9ORkFUQUxfUkNWIDB4MDAwMDAwMjAgIAorI2RlZmluZSBQQ0lfRVJSX1JPT1RfRkFUQUxfUkNWIDB4MDAwMDAwNDAgIAorI2RlZmluZSBQQ0lfRVJSX1JPT1RfQ09SX1NSQyA1MgorI2RlZmluZSBQQ0lfRVJSX1JPT1RfU1JDIDU0CisKKyNkZWZpbmUgUENJX1ZDX1BPUlRfUkVHMSA0CisjZGVmaW5lIFBDSV9WQ19QT1JUX1JFRzIgOAorI2RlZmluZSBQQ0lfVkNfUE9SVF9DVFJMIDEyCisjZGVmaW5lIFBDSV9WQ19QT1JUX1NUQVRVUyAxNAorI2RlZmluZSBQQ0lfVkNfUkVTX0NBUCAxNgorI2RlZmluZSBQQ0lfVkNfUkVTX0NUUkwgMjAKKyNkZWZpbmUgUENJX1ZDX1JFU19TVEFUVVMgMjYKKworI2RlZmluZSBQQ0lfUFdSX0RTUiA0ICAKKyNkZWZpbmUgUENJX1BXUl9EQVRBIDggIAorI2RlZmluZSBQQ0lfUFdSX0RBVEFfQkFTRSh4KSAoKHgpICYgMHhmZikgIAorI2RlZmluZSBQQ0lfUFdSX0RBVEFfU0NBTEUoeCkgKCgoeCkgPj4gOCkgJiAzKSAgCisjZGVmaW5lIFBDSV9QV1JfREFUQV9QTV9TVUIoeCkgKCgoeCkgPj4gMTApICYgNykgIAorI2RlZmluZSBQQ0lfUFdSX0RBVEFfUE1fU1RBVEUoeCkgKCgoeCkgPj4gMTMpICYgMykgIAorI2RlZmluZSBQQ0lfUFdSX0RBVEFfVFlQRSh4KSAoKCh4KSA+PiAxNSkgJiA3KSAgCisjZGVmaW5lIFBDSV9QV1JfREFUQV9SQUlMKHgpICgoKHgpID4+IDE4KSAmIDcpICAKKyNkZWZpbmUgUENJX1BXUl9DQVAgMTIgIAorI2RlZmluZSBQQ0lfUFdSX0NBUF9CVURHRVQoeCkgKCh4KSAmIDEpICAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcGVyY3B1LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcGVyY3B1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE5NTYxNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wZXJjcHUuaApAQCAtMCwwICsxLDMwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTElOVVhfUEVSQ1BVX0gKKyNkZWZpbmUgX19MSU5VWF9QRVJDUFVfSAorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+ICAKKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+ICAKKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4gIAorI2luY2x1ZGUgPGFzbS9wZXJjcHUuaD4KKworI2lmbmRlZiBQRVJDUFVfRU5PVUdIX1JPT00KKyNkZWZpbmUgUEVSQ1BVX0VOT1VHSF9ST09NIDMyNzY4CisjZW5kaWYKKworI2RlZmluZSBnZXRfY3B1X3Zhcih2YXIpICgqKHsgcHJlZW1wdF9kaXNhYmxlKCk7ICZfX2dldF9jcHVfdmFyKHZhcik7IH0pKQorI2RlZmluZSBwdXRfY3B1X3Zhcih2YXIpIHByZWVtcHRfZW5hYmxlKCkKKworI2RlZmluZSBwZXJfY3B1X3B0cihwdHIsIGNwdSkgKHsgKHZvaWQpKGNwdSk7IChwdHIpOyB9KQorCisjZGVmaW5lIGFsbG9jX3BlcmNwdSh0eXBlKSAoKHR5cGUgKikoX19hbGxvY19wZXJjcHUoc2l6ZW9mKHR5cGUpKSkpCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wZXJjcHVfY291bnRlci5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BlcmNwdV9jb3VudGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEyMzc1YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wZXJjcHVfY291bnRlci5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX1BFUkNQVV9DT1VOVEVSX0gKKyNkZWZpbmUgX0xJTlVYX1BFUkNQVV9DT1VOVEVSX0gKKworI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3N0cnVjdCBwZXJjcHVfY291bnRlciB7CisgczY0IGNvdW50OworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcGVyc29uYWxpdHkuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wZXJzb25hbGl0eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmODRiNGUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcGVyc29uYWxpdHkuaApAQCAtMCwwICsxLDgzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9QRVJTT05BTElUWV9ICisjZGVmaW5lIF9MSU5VWF9QRVJTT05BTElUWV9ICisKK3N0cnVjdCBleGVjX2RvbWFpbjsKK3N0cnVjdCBwdF9yZWdzOworCitlbnVtIHsKKyBBRERSX05PX1JBTkRPTUlaRSA9IDB4MDA0MDAwMCwKKyBGRFBJQ19GVU5DUFRSUyA9IDB4MDA4MDAwMCwKKyBNTUFQX1BBR0VfWkVSTyA9IDB4MDEwMDAwMCwKKyBBRERSX0NPTVBBVF9MQVlPVVQgPSAweDAyMDAwMDAsCisgUkVBRF9JTVBMSUVTX0VYRUMgPSAweDA0MDAwMDAsCisgQUREUl9MSU1JVF8zMkJJVCA9IDB4MDgwMDAwMCwKKyBTSE9SVF9JTk9ERSA9IDB4MTAwMDAwMCwKKyBXSE9MRV9TRUNPTkRTID0gMHgyMDAwMDAwLAorIFNUSUNLWV9USU1FT1VUUyA9IDB4NDAwMDAwMCwKKyBBRERSX0xJTUlUXzNHQiA9IDB4ODAwMDAwMCwKK307CisKKyNkZWZpbmUgUEVSX0NMRUFSX09OX1NFVElEIChSRUFEX0lNUExJRVNfRVhFQ3xBRERSX05PX1JBTkRPTUlaRSkKKworZW51bSB7CisgUEVSX0xJTlVYID0gMHgwMDAwLAorIFBFUl9MSU5VWF8zMkJJVCA9IDB4MDAwMCB8IEFERFJfTElNSVRfMzJCSVQsCisgUEVSX0xJTlVYX0ZEUElDID0gMHgwMDAwIHwgRkRQSUNfRlVOQ1BUUlMsCisgUEVSX1NWUjQgPSAweDAwMDEgfCBTVElDS1lfVElNRU9VVFMgfCBNTUFQX1BBR0VfWkVSTywKKyBQRVJfU1ZSMyA9IDB4MDAwMiB8IFNUSUNLWV9USU1FT1VUUyB8IFNIT1JUX0lOT0RFLAorIFBFUl9TQ09TVlIzID0gMHgwMDAzIHwgU1RJQ0tZX1RJTUVPVVRTIHwKKyBXSE9MRV9TRUNPTkRTIHwgU0hPUlRfSU5PREUsCisgUEVSX09TUjUgPSAweDAwMDMgfCBTVElDS1lfVElNRU9VVFMgfCBXSE9MRV9TRUNPTkRTLAorIFBFUl9XWVNFVjM4NiA9IDB4MDAwNCB8IFNUSUNLWV9USU1FT1VUUyB8IFNIT1JUX0lOT0RFLAorIFBFUl9JU0NSNCA9IDB4MDAwNSB8IFNUSUNLWV9USU1FT1VUUywKKyBQRVJfQlNEID0gMHgwMDA2LAorIFBFUl9TVU5PUyA9IDB4MDAwNiB8IFNUSUNLWV9USU1FT1VUUywKKyBQRVJfWEVOSVggPSAweDAwMDcgfCBTVElDS1lfVElNRU9VVFMgfCBTSE9SVF9JTk9ERSwKKyBQRVJfTElOVVgzMiA9IDB4MDAwOCwKKyBQRVJfTElOVVgzMl8zR0IgPSAweDAwMDggfCBBRERSX0xJTUlUXzNHQiwKKyBQRVJfSVJJWDMyID0gMHgwMDA5IHwgU1RJQ0tZX1RJTUVPVVRTLAorIFBFUl9JUklYTjMyID0gMHgwMDBhIHwgU1RJQ0tZX1RJTUVPVVRTLAorIFBFUl9JUklYNjQgPSAweDAwMGIgfCBTVElDS1lfVElNRU9VVFMsCisgUEVSX1JJU0NPUyA9IDB4MDAwYywKKyBQRVJfU09MQVJJUyA9IDB4MDAwZCB8IFNUSUNLWV9USU1FT1VUUywKKyBQRVJfVVc3ID0gMHgwMDBlIHwgU1RJQ0tZX1RJTUVPVVRTIHwgTU1BUF9QQUdFX1pFUk8sCisgUEVSX09TRjQgPSAweDAwMGYsCisgUEVSX0hQVVggPSAweDAwMTAsCisgUEVSX01BU0sgPSAweDAwZmYsCit9OworCit0eXBlZGVmIHZvaWQgKCpoYW5kbGVyX3QpKGludCwgc3RydWN0IHB0X3JlZ3MgKik7CisKK3N0cnVjdCBleGVjX2RvbWFpbiB7CisgY29uc3QgY2hhciAqbmFtZTsKKyBoYW5kbGVyX3QgaGFuZGxlcjsKKyB1bnNpZ25lZCBjaGFyIHBlcnNfbG93OworIHVuc2lnbmVkIGNoYXIgcGVyc19oaWdoOworIHVuc2lnbmVkIGxvbmcgKnNpZ25hbF9tYXA7CisgdW5zaWduZWQgbG9uZyAqc2lnbmFsX2ludm1hcDsKKyBzdHJ1Y3QgbWFwX3NlZ21lbnQgKmVycl9tYXA7Cisgc3RydWN0IG1hcF9zZWdtZW50ICpzb2NrdHlwZV9tYXA7Cisgc3RydWN0IG1hcF9zZWdtZW50ICpzb2Nrb3B0X21hcDsKKyBzdHJ1Y3QgbWFwX3NlZ21lbnQgKmFmX21hcDsKKyBzdHJ1Y3QgbW9kdWxlICptb2R1bGU7Cisgc3RydWN0IGV4ZWNfZG9tYWluICpuZXh0OworfTsKKworI2RlZmluZSBwZXJzb25hbGl0eShwZXJzKSAocGVycyAmIFBFUl9NQVNLKQorCisjZGVmaW5lIGdldF9wZXJzb25hbGl0eSAoY3VycmVudC0+cGVyc29uYWxpdHkpCisKKyNkZWZpbmUgc2V0X3BlcnNvbmFsaXR5KHBlcnMpICAgKChjdXJyZW50LT5wZXJzb25hbGl0eSA9PSBwZXJzKSA/IDAgOiBfX3NldF9wZXJzb25hbGl0eShwZXJzKSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcGZrZXl2Mi5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3Bma2V5djIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWM5NDg4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3Bma2V5djIuaApAQCAtMCwwICsxLDMwNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfUEZLRVkyX0gKKyNkZWZpbmUgX0xJTlVYX1BGS0VZMl9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjZGVmaW5lIFBGX0tFWV9WMiAyCisjZGVmaW5lIFBGS0VZVjJfUkVWSVNJT04gMTk5ODA2TAorCitzdHJ1Y3Qgc2FkYl9tc2cgeworIHVpbnQ4X3Qgc2FkYl9tc2dfdmVyc2lvbjsKKyB1aW50OF90IHNhZGJfbXNnX3R5cGU7CisgdWludDhfdCBzYWRiX21zZ19lcnJubzsKKyB1aW50OF90IHNhZGJfbXNnX3NhdHlwZTsKKyB1aW50MTZfdCBzYWRiX21zZ19sZW47CisgdWludDE2X3Qgc2FkYl9tc2dfcmVzZXJ2ZWQ7CisgdWludDMyX3Qgc2FkYl9tc2dfc2VxOworIHVpbnQzMl90IHNhZGJfbXNnX3BpZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBzYWRiX2V4dCB7CisgdWludDE2X3Qgc2FkYl9leHRfbGVuOworIHVpbnQxNl90IHNhZGJfZXh0X3R5cGU7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3Qgc2FkYl9zYSB7CisgdWludDE2X3Qgc2FkYl9zYV9sZW47CisgdWludDE2X3Qgc2FkYl9zYV9leHR0eXBlOworIHVpbnQzMl90IHNhZGJfc2Ffc3BpOworIHVpbnQ4X3Qgc2FkYl9zYV9yZXBsYXk7CisgdWludDhfdCBzYWRiX3NhX3N0YXRlOworIHVpbnQ4X3Qgc2FkYl9zYV9hdXRoOworIHVpbnQ4X3Qgc2FkYl9zYV9lbmNyeXB0OworIHVpbnQzMl90IHNhZGJfc2FfZmxhZ3M7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3Qgc2FkYl9saWZldGltZSB7CisgdWludDE2X3Qgc2FkYl9saWZldGltZV9sZW47CisgdWludDE2X3Qgc2FkYl9saWZldGltZV9leHR0eXBlOworIHVpbnQzMl90IHNhZGJfbGlmZXRpbWVfYWxsb2NhdGlvbnM7CisgdWludDY0X3Qgc2FkYl9saWZldGltZV9ieXRlczsKKyB1aW50NjRfdCBzYWRiX2xpZmV0aW1lX2FkZHRpbWU7CisgdWludDY0X3Qgc2FkYl9saWZldGltZV91c2V0aW1lOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IHNhZGJfYWRkcmVzcyB7CisgdWludDE2X3Qgc2FkYl9hZGRyZXNzX2xlbjsKKyB1aW50MTZfdCBzYWRiX2FkZHJlc3NfZXh0dHlwZTsKKyB1aW50OF90IHNhZGJfYWRkcmVzc19wcm90bzsKKyB1aW50OF90IHNhZGJfYWRkcmVzc19wcmVmaXhsZW47CisgdWludDE2X3Qgc2FkYl9hZGRyZXNzX3Jlc2VydmVkOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IHNhZGJfa2V5IHsKKyB1aW50MTZfdCBzYWRiX2tleV9sZW47CisgdWludDE2X3Qgc2FkYl9rZXlfZXh0dHlwZTsKKyB1aW50MTZfdCBzYWRiX2tleV9iaXRzOworIHVpbnQxNl90IHNhZGJfa2V5X3Jlc2VydmVkOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IHNhZGJfaWRlbnQgeworIHVpbnQxNl90IHNhZGJfaWRlbnRfbGVuOworIHVpbnQxNl90IHNhZGJfaWRlbnRfZXh0dHlwZTsKKyB1aW50MTZfdCBzYWRiX2lkZW50X3R5cGU7CisgdWludDE2X3Qgc2FkYl9pZGVudF9yZXNlcnZlZDsKKyB1aW50NjRfdCBzYWRiX2lkZW50X2lkOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IHNhZGJfc2VucyB7CisgdWludDE2X3Qgc2FkYl9zZW5zX2xlbjsKKyB1aW50MTZfdCBzYWRiX3NlbnNfZXh0dHlwZTsKKyB1aW50MzJfdCBzYWRiX3NlbnNfZHBkOworIHVpbnQ4X3Qgc2FkYl9zZW5zX3NlbnNfbGV2ZWw7CisgdWludDhfdCBzYWRiX3NlbnNfc2Vuc19sZW47CisgdWludDhfdCBzYWRiX3NlbnNfaW50ZWdfbGV2ZWw7CisgdWludDhfdCBzYWRiX3NlbnNfaW50ZWdfbGVuOworIHVpbnQzMl90IHNhZGJfc2Vuc19yZXNlcnZlZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBzYWRiX3Byb3AgeworIHVpbnQxNl90IHNhZGJfcHJvcF9sZW47CisgdWludDE2X3Qgc2FkYl9wcm9wX2V4dHR5cGU7CisgdWludDhfdCBzYWRiX3Byb3BfcmVwbGF5OworIHVpbnQ4X3Qgc2FkYl9wcm9wX3Jlc2VydmVkWzNdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IHNhZGJfY29tYiB7CisgdWludDhfdCBzYWRiX2NvbWJfYXV0aDsKKyB1aW50OF90IHNhZGJfY29tYl9lbmNyeXB0OworIHVpbnQxNl90IHNhZGJfY29tYl9mbGFnczsKKyB1aW50MTZfdCBzYWRiX2NvbWJfYXV0aF9taW5iaXRzOworIHVpbnQxNl90IHNhZGJfY29tYl9hdXRoX21heGJpdHM7CisgdWludDE2X3Qgc2FkYl9jb21iX2VuY3J5cHRfbWluYml0czsKKyB1aW50MTZfdCBzYWRiX2NvbWJfZW5jcnlwdF9tYXhiaXRzOworIHVpbnQzMl90IHNhZGJfY29tYl9yZXNlcnZlZDsKKyB1aW50MzJfdCBzYWRiX2NvbWJfc29mdF9hbGxvY2F0aW9uczsKKyB1aW50MzJfdCBzYWRiX2NvbWJfaGFyZF9hbGxvY2F0aW9uczsKKyB1aW50NjRfdCBzYWRiX2NvbWJfc29mdF9ieXRlczsKKyB1aW50NjRfdCBzYWRiX2NvbWJfaGFyZF9ieXRlczsKKyB1aW50NjRfdCBzYWRiX2NvbWJfc29mdF9hZGR0aW1lOworIHVpbnQ2NF90IHNhZGJfY29tYl9oYXJkX2FkZHRpbWU7CisgdWludDY0X3Qgc2FkYl9jb21iX3NvZnRfdXNldGltZTsKKyB1aW50NjRfdCBzYWRiX2NvbWJfaGFyZF91c2V0aW1lOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IHNhZGJfc3VwcG9ydGVkIHsKKyB1aW50MTZfdCBzYWRiX3N1cHBvcnRlZF9sZW47CisgdWludDE2X3Qgc2FkYl9zdXBwb3J0ZWRfZXh0dHlwZTsKKyB1aW50MzJfdCBzYWRiX3N1cHBvcnRlZF9yZXNlcnZlZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBzYWRiX2FsZyB7CisgdWludDhfdCBzYWRiX2FsZ19pZDsKKyB1aW50OF90IHNhZGJfYWxnX2l2bGVuOworIHVpbnQxNl90IHNhZGJfYWxnX21pbmJpdHM7CisgdWludDE2X3Qgc2FkYl9hbGdfbWF4Yml0czsKKyB1aW50MTZfdCBzYWRiX2FsZ19yZXNlcnZlZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBzYWRiX3NwaXJhbmdlIHsKKyB1aW50MTZfdCBzYWRiX3NwaXJhbmdlX2xlbjsKKyB1aW50MTZfdCBzYWRiX3NwaXJhbmdlX2V4dHR5cGU7CisgdWludDMyX3Qgc2FkYl9zcGlyYW5nZV9taW47CisgdWludDMyX3Qgc2FkYl9zcGlyYW5nZV9tYXg7CisgdWludDMyX3Qgc2FkYl9zcGlyYW5nZV9yZXNlcnZlZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBzYWRiX3hfa21wcml2YXRlIHsKKyB1aW50MTZfdCBzYWRiX3hfa21wcml2YXRlX2xlbjsKKyB1aW50MTZfdCBzYWRiX3hfa21wcml2YXRlX2V4dHR5cGU7CisgdWludDMyX3Qgc2FkYl94X2ttcHJpdmF0ZV9yZXNlcnZlZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBzYWRiX3hfc2EyIHsKKyB1aW50MTZfdCBzYWRiX3hfc2EyX2xlbjsKKyB1aW50MTZfdCBzYWRiX3hfc2EyX2V4dHR5cGU7CisgdWludDhfdCBzYWRiX3hfc2EyX21vZGU7CisgdWludDhfdCBzYWRiX3hfc2EyX3Jlc2VydmVkMTsKKyB1aW50MTZfdCBzYWRiX3hfc2EyX3Jlc2VydmVkMjsKKyB1aW50MzJfdCBzYWRiX3hfc2EyX3NlcXVlbmNlOworIHVpbnQzMl90IHNhZGJfeF9zYTJfcmVxaWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3Qgc2FkYl94X3BvbGljeSB7CisgdWludDE2X3Qgc2FkYl94X3BvbGljeV9sZW47CisgdWludDE2X3Qgc2FkYl94X3BvbGljeV9leHR0eXBlOworIHVpbnQxNl90IHNhZGJfeF9wb2xpY3lfdHlwZTsKKyB1aW50OF90IHNhZGJfeF9wb2xpY3lfZGlyOworIHVpbnQ4X3Qgc2FkYl94X3BvbGljeV9yZXNlcnZlZDsKKyB1aW50MzJfdCBzYWRiX3hfcG9saWN5X2lkOworIHVpbnQzMl90IHNhZGJfeF9wb2xpY3lfcHJpb3JpdHk7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3Qgc2FkYl94X2lwc2VjcmVxdWVzdCB7CisgdWludDE2X3Qgc2FkYl94X2lwc2VjcmVxdWVzdF9sZW47CisgdWludDE2X3Qgc2FkYl94X2lwc2VjcmVxdWVzdF9wcm90bzsKKyB1aW50OF90IHNhZGJfeF9pcHNlY3JlcXVlc3RfbW9kZTsKKyB1aW50OF90IHNhZGJfeF9pcHNlY3JlcXVlc3RfbGV2ZWw7CisgdWludDE2X3Qgc2FkYl94X2lwc2VjcmVxdWVzdF9yZXNlcnZlZDE7CisgdWludDMyX3Qgc2FkYl94X2lwc2VjcmVxdWVzdF9yZXFpZDsKKyB1aW50MzJfdCBzYWRiX3hfaXBzZWNyZXF1ZXN0X3Jlc2VydmVkMjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBzYWRiX3hfbmF0X3RfdHlwZSB7CisgdWludDE2X3Qgc2FkYl94X25hdF90X3R5cGVfbGVuOworIHVpbnQxNl90IHNhZGJfeF9uYXRfdF90eXBlX2V4dHR5cGU7CisgdWludDhfdCBzYWRiX3hfbmF0X3RfdHlwZV90eXBlOworIHVpbnQ4X3Qgc2FkYl94X25hdF90X3R5cGVfcmVzZXJ2ZWRbM107Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3Qgc2FkYl94X25hdF90X3BvcnQgeworIHVpbnQxNl90IHNhZGJfeF9uYXRfdF9wb3J0X2xlbjsKKyB1aW50MTZfdCBzYWRiX3hfbmF0X3RfcG9ydF9leHR0eXBlOworIHVpbnQxNl90IHNhZGJfeF9uYXRfdF9wb3J0X3BvcnQ7CisgdWludDE2X3Qgc2FkYl94X25hdF90X3BvcnRfcmVzZXJ2ZWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3Qgc2FkYl94X3NlY19jdHggeworIHVpbnQxNl90IHNhZGJfeF9zZWNfbGVuOworIHVpbnQxNl90IHNhZGJfeF9zZWNfZXh0dHlwZTsKKyB1aW50OF90IHNhZGJfeF9jdHhfYWxnOworIHVpbnQ4X3Qgc2FkYl94X2N0eF9kb2k7CisgdWludDE2X3Qgc2FkYl94X2N0eF9sZW47Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIFNBREJfUkVTRVJWRUQgMAorI2RlZmluZSBTQURCX0dFVFNQSSAxCisjZGVmaW5lIFNBREJfVVBEQVRFIDIKKyNkZWZpbmUgU0FEQl9BREQgMworI2RlZmluZSBTQURCX0RFTEVURSA0CisjZGVmaW5lIFNBREJfR0VUIDUKKyNkZWZpbmUgU0FEQl9BQ1FVSVJFIDYKKyNkZWZpbmUgU0FEQl9SRUdJU1RFUiA3CisjZGVmaW5lIFNBREJfRVhQSVJFIDgKKyNkZWZpbmUgU0FEQl9GTFVTSCA5CisjZGVmaW5lIFNBREJfRFVNUCAxMAorI2RlZmluZSBTQURCX1hfUFJPTUlTQyAxMQorI2RlZmluZSBTQURCX1hfUENIQU5HRSAxMgorI2RlZmluZSBTQURCX1hfU1BEVVBEQVRFIDEzCisjZGVmaW5lIFNBREJfWF9TUERBREQgMTQKKyNkZWZpbmUgU0FEQl9YX1NQRERFTEVURSAxNQorI2RlZmluZSBTQURCX1hfU1BER0VUIDE2CisjZGVmaW5lIFNBREJfWF9TUERBQ1FVSVJFIDE3CisjZGVmaW5lIFNBREJfWF9TUEREVU1QIDE4CisjZGVmaW5lIFNBREJfWF9TUERGTFVTSCAxOQorI2RlZmluZSBTQURCX1hfU1BEU0VUSURYIDIwCisjZGVmaW5lIFNBREJfWF9TUERFWFBJUkUgMjEKKyNkZWZpbmUgU0FEQl9YX1NQRERFTEVURTIgMjIKKyNkZWZpbmUgU0FEQl9YX05BVF9UX05FV19NQVBQSU5HIDIzCisjZGVmaW5lIFNBREJfTUFYIDIzCisKKyNkZWZpbmUgU0FEQl9TQUZMQUdTX1BGUyAxCisjZGVmaW5lIFNBREJfU0FGTEFHU19OT1BNVFVESVNDIDB4MjAwMDAwMDAKKyNkZWZpbmUgU0FEQl9TQUZMQUdTX0RFQ0FQX0RTQ1AgMHg0MDAwMDAwMAorI2RlZmluZSBTQURCX1NBRkxBR1NfTk9FQ04gMHg4MDAwMDAwMAorCisjZGVmaW5lIFNBREJfU0FTVEFURV9MQVJWQUwgMAorI2RlZmluZSBTQURCX1NBU1RBVEVfTUFUVVJFIDEKKyNkZWZpbmUgU0FEQl9TQVNUQVRFX0RZSU5HIDIKKyNkZWZpbmUgU0FEQl9TQVNUQVRFX0RFQUQgMworI2RlZmluZSBTQURCX1NBU1RBVEVfTUFYIDMKKworI2RlZmluZSBTQURCX1NBVFlQRV9VTlNQRUMgMAorI2RlZmluZSBTQURCX1NBVFlQRV9BSCAyCisjZGVmaW5lIFNBREJfU0FUWVBFX0VTUCAzCisjZGVmaW5lIFNBREJfU0FUWVBFX1JTVlAgNQorI2RlZmluZSBTQURCX1NBVFlQRV9PU1BGVjIgNgorI2RlZmluZSBTQURCX1NBVFlQRV9SSVBWMiA3CisjZGVmaW5lIFNBREJfU0FUWVBFX01JUCA4CisjZGVmaW5lIFNBREJfWF9TQVRZUEVfSVBDT01QIDkKKyNkZWZpbmUgU0FEQl9TQVRZUEVfTUFYIDkKKworI2RlZmluZSBTQURCX0FBTEdfTk9ORSAwCisjZGVmaW5lIFNBREJfQUFMR19NRDVITUFDIDIKKyNkZWZpbmUgU0FEQl9BQUxHX1NIQTFITUFDIDMKKyNkZWZpbmUgU0FEQl9YX0FBTEdfU0hBMl8yNTZITUFDIDUKKyNkZWZpbmUgU0FEQl9YX0FBTEdfU0hBMl8zODRITUFDIDYKKyNkZWZpbmUgU0FEQl9YX0FBTEdfU0hBMl81MTJITUFDIDcKKyNkZWZpbmUgU0FEQl9YX0FBTEdfUklQRU1EMTYwSE1BQyA4CisjZGVmaW5lIFNBREJfWF9BQUxHX05VTEwgMjUxICAKKyNkZWZpbmUgU0FEQl9BQUxHX01BWCAyNTEKKworI2RlZmluZSBTQURCX0VBTEdfTk9ORSAwCisjZGVmaW5lIFNBREJfRUFMR19ERVNDQkMgMgorI2RlZmluZSBTQURCX0VBTEdfM0RFU0NCQyAzCisjZGVmaW5lIFNBREJfWF9FQUxHX0NBU1RDQkMgNgorI2RlZmluZSBTQURCX1hfRUFMR19CTE9XRklTSENCQyA3CisjZGVmaW5lIFNBREJfRUFMR19OVUxMIDExCisjZGVmaW5lIFNBREJfWF9FQUxHX0FFU0NCQyAxMgorI2RlZmluZSBTQURCX0VBTEdfTUFYIDI1MyAgCisKKyNkZWZpbmUgU0FEQl9YX0VBTEdfU0VSUEVOVENCQyAyNTIgIAorI2RlZmluZSBTQURCX1hfRUFMR19UV09GSVNIQ0JDIDI1MyAgCisKKyNkZWZpbmUgU0FEQl9YX0NBTEdfTk9ORSAwCisjZGVmaW5lIFNBREJfWF9DQUxHX09VSSAxCisjZGVmaW5lIFNBREJfWF9DQUxHX0RFRkxBVEUgMgorI2RlZmluZSBTQURCX1hfQ0FMR19MWlMgMworI2RlZmluZSBTQURCX1hfQ0FMR19MWkpIIDQKKyNkZWZpbmUgU0FEQl9YX0NBTEdfTUFYIDQKKworI2RlZmluZSBTQURCX0VYVF9SRVNFUlZFRCAwCisjZGVmaW5lIFNBREJfRVhUX1NBIDEKKyNkZWZpbmUgU0FEQl9FWFRfTElGRVRJTUVfQ1VSUkVOVCAyCisjZGVmaW5lIFNBREJfRVhUX0xJRkVUSU1FX0hBUkQgMworI2RlZmluZSBTQURCX0VYVF9MSUZFVElNRV9TT0ZUIDQKKyNkZWZpbmUgU0FEQl9FWFRfQUREUkVTU19TUkMgNQorI2RlZmluZSBTQURCX0VYVF9BRERSRVNTX0RTVCA2CisjZGVmaW5lIFNBREJfRVhUX0FERFJFU1NfUFJPWFkgNworI2RlZmluZSBTQURCX0VYVF9LRVlfQVVUSCA4CisjZGVmaW5lIFNBREJfRVhUX0tFWV9FTkNSWVBUIDkKKyNkZWZpbmUgU0FEQl9FWFRfSURFTlRJVFlfU1JDIDEwCisjZGVmaW5lIFNBREJfRVhUX0lERU5USVRZX0RTVCAxMQorI2RlZmluZSBTQURCX0VYVF9TRU5TSVRJVklUWSAxMgorI2RlZmluZSBTQURCX0VYVF9QUk9QT1NBTCAxMworI2RlZmluZSBTQURCX0VYVF9TVVBQT1JURURfQVVUSCAxNAorI2RlZmluZSBTQURCX0VYVF9TVVBQT1JURURfRU5DUllQVCAxNQorI2RlZmluZSBTQURCX0VYVF9TUElSQU5HRSAxNgorI2RlZmluZSBTQURCX1hfRVhUX0tNUFJJVkFURSAxNworI2RlZmluZSBTQURCX1hfRVhUX1BPTElDWSAxOAorI2RlZmluZSBTQURCX1hfRVhUX1NBMiAxOQorCisjZGVmaW5lIFNBREJfWF9FWFRfTkFUX1RfVFlQRSAyMAorI2RlZmluZSBTQURCX1hfRVhUX05BVF9UX1NQT1JUIDIxCisjZGVmaW5lIFNBREJfWF9FWFRfTkFUX1RfRFBPUlQgMjIKKyNkZWZpbmUgU0FEQl9YX0VYVF9OQVRfVF9PQSAyMworI2RlZmluZSBTQURCX1hfRVhUX1NFQ19DVFggMjQKKyNkZWZpbmUgU0FEQl9FWFRfTUFYIDI0CisKKyNkZWZpbmUgU0FEQl9JREVOVFRZUEVfUkVTRVJWRUQgMAorI2RlZmluZSBTQURCX0lERU5UVFlQRV9QUkVGSVggMQorI2RlZmluZSBTQURCX0lERU5UVFlQRV9GUUROIDIKKyNkZWZpbmUgU0FEQl9JREVOVFRZUEVfVVNFUkZRRE4gMworI2RlZmluZSBTQURCX0lERU5UVFlQRV9NQVggMworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wa3RfY2xzLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcGt0X2Nscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwMWE2ODMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcGt0X2Nscy5oCkBAIC0wLDAgKzEsMzcyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTElOVVhfUEtUX0NMU19ICisjZGVmaW5lIF9fTElOVVhfUEtUX0NMU19ICisKKyNpbmNsdWRlIDxsaW51eC9wa3Rfc2NoZWQuaD4KKworI2RlZmluZSBfVENfTUFLRTMyKHgpICgoeCkpCisKKyNkZWZpbmUgX1RDX01BS0VNQVNLMShuKSAoX1RDX01BS0UzMigxKSA8PCBfVENfTUFLRTMyKG4pKQorI2RlZmluZSBfVENfTUFLRU1BU0sodixuKSAoX1RDX01BS0UzMigoX1RDX01BS0UzMigxKTw8KHYpKS0xKSA8PCBfVENfTUFLRTMyKG4pKQorI2RlZmluZSBfVENfTUFLRVZBTFVFKHYsbikgKF9UQ19NQUtFMzIodikgPDwgX1RDX01BS0UzMihuKSkKKyNkZWZpbmUgX1RDX0dFVFZBTFVFKHYsbixtKSAoKF9UQ19NQUtFMzIodikgJiBfVENfTUFLRTMyKG0pKSA+PiBfVENfTUFLRTMyKG4pKQorCisjZGVmaW5lIFRDX01VTkdFRCBfVENfTUFLRU1BU0sxKDApCisjZGVmaW5lIFNFVF9UQ19NVU5HRUQodikgKCBUQ19NVU5HRUQgfCAodiAmIH5UQ19NVU5HRUQpKQorI2RlZmluZSBDTFJfVENfTVVOR0VEKHYpICggdiAmIH5UQ19NVU5HRUQpCisKKyNkZWZpbmUgVENfT0syTVVOR0UgX1RDX01BS0VNQVNLMSgxKQorI2RlZmluZSBTRVRfVENfT0syTVVOR0UodikgKCBUQ19PSzJNVU5HRSB8ICh2ICYgflRDX09LMk1VTkdFKSkKKyNkZWZpbmUgQ0xSX1RDX09LMk1VTkdFKHYpICggdiAmIH5UQ19PSzJNVU5HRSkKKworI2RlZmluZSBTX1RDX1ZFUkQgX1RDX01BS0UzMigyKQorI2RlZmluZSBNX1RDX1ZFUkQgX1RDX01BS0VNQVNLKDQsU19UQ19WRVJEKQorI2RlZmluZSBHX1RDX1ZFUkQoeCkgX1RDX0dFVFZBTFVFKHgsU19UQ19WRVJELE1fVENfVkVSRCkKKyNkZWZpbmUgVl9UQ19WRVJEKHgpIF9UQ19NQUtFVkFMVUUoeCxTX1RDX1ZFUkQpCisjZGVmaW5lIFNFVF9UQ19WRVJEKHYsbikgKChWX1RDX1ZFUkQobikpIHwgKHYgJiB+TV9UQ19WRVJEKSkKKworI2RlZmluZSBTX1RDX0ZST00gX1RDX01BS0UzMig2KQorI2RlZmluZSBNX1RDX0ZST00gX1RDX01BS0VNQVNLKDIsU19UQ19GUk9NKQorI2RlZmluZSBHX1RDX0ZST00oeCkgX1RDX0dFVFZBTFVFKHgsU19UQ19GUk9NLE1fVENfRlJPTSkKKyNkZWZpbmUgVl9UQ19GUk9NKHgpIF9UQ19NQUtFVkFMVUUoeCxTX1RDX0ZST00pCisjZGVmaW5lIFNFVF9UQ19GUk9NKHYsbikgKChWX1RDX0ZST00obikpIHwgKHYgJiB+TV9UQ19GUk9NKSkKKyNkZWZpbmUgQVRfU1RBQ0sgMHgwCisjZGVmaW5lIEFUX0lOR1JFU1MgMHgxCisjZGVmaW5lIEFUX0VHUkVTUyAweDIKKworI2RlZmluZSBUQ19OQ0xTIF9UQ19NQUtFTUFTSzEoOCkKKyNkZWZpbmUgU0VUX1RDX05DTFModikgKCBUQ19OQ0xTIHwgKHYgJiB+VENfTkNMUykpCisjZGVmaW5lIENMUl9UQ19OQ0xTKHYpICggdiAmIH5UQ19OQ0xTKQorCisjZGVmaW5lIFNfVENfUlRUTCBfVENfTUFLRTMyKDkpCisjZGVmaW5lIE1fVENfUlRUTCBfVENfTUFLRU1BU0soMyxTX1RDX1JUVEwpCisjZGVmaW5lIEdfVENfUlRUTCh4KSBfVENfR0VUVkFMVUUoeCxTX1RDX1JUVEwsTV9UQ19SVFRMKQorI2RlZmluZSBWX1RDX1JUVEwoeCkgX1RDX01BS0VWQUxVRSh4LFNfVENfUlRUTCkKKyNkZWZpbmUgU0VUX1RDX1JUVEwodixuKSAoKFZfVENfUlRUTChuKSkgfCAodiAmIH5NX1RDX1JUVEwpKQorCisjZGVmaW5lIFNfVENfQVQgX1RDX01BS0UzMigxMikKKyNkZWZpbmUgTV9UQ19BVCBfVENfTUFLRU1BU0soMixTX1RDX0FUKQorI2RlZmluZSBHX1RDX0FUKHgpIF9UQ19HRVRWQUxVRSh4LFNfVENfQVQsTV9UQ19BVCkKKyNkZWZpbmUgVl9UQ19BVCh4KSBfVENfTUFLRVZBTFVFKHgsU19UQ19BVCkKKyNkZWZpbmUgU0VUX1RDX0FUKHYsbikgKChWX1RDX0FUKG4pKSB8ICh2ICYgfk1fVENfQVQpKQorCitlbnVtCit7CisgVENBX0FDVF9VTlNQRUMsCisgVENBX0FDVF9LSU5ELAorIFRDQV9BQ1RfT1BUSU9OUywKKyBUQ0FfQUNUX0lOREVYLAorIFRDQV9BQ1RfU1RBVFMsCisgX19UQ0FfQUNUX01BWAorfTsKKworI2RlZmluZSBUQ0FfQUNUX01BWCBfX1RDQV9BQ1RfTUFYCisjZGVmaW5lIFRDQV9PTERfQ09NUEFUIChUQ0FfQUNUX01BWCsxKQorI2RlZmluZSBUQ0FfQUNUX01BWF9QUklPIDMyCisjZGVmaW5lIFRDQV9BQ1RfQklORCAxCisjZGVmaW5lIFRDQV9BQ1RfTk9CSU5EIDAKKyNkZWZpbmUgVENBX0FDVF9VTkJJTkQgMQorI2RlZmluZSBUQ0FfQUNUX05PVU5CSU5EIDAKKyNkZWZpbmUgVENBX0FDVF9SRVBMQUNFIDEKKyNkZWZpbmUgVENBX0FDVF9OT1JFUExBQ0UgMAorI2RlZmluZSBNQVhfUkVDX0xPT1AgNAorI2RlZmluZSBNQVhfUkVEX0xPT1AgNAorCisjZGVmaW5lIFRDX0FDVF9VTlNQRUMgKC0xKQorI2RlZmluZSBUQ19BQ1RfT0sgMAorI2RlZmluZSBUQ19BQ1RfUkVDTEFTU0lGWSAxCisjZGVmaW5lIFRDX0FDVF9TSE9UIDIKKyNkZWZpbmUgVENfQUNUX1BJUEUgMworI2RlZmluZSBUQ19BQ1RfU1RPTEVOIDQKKyNkZWZpbmUgVENfQUNUX1FVRVVFRCA1CisjZGVmaW5lIFRDX0FDVF9SRVBFQVQgNgorI2RlZmluZSBUQ19BQ1RfSlVNUCAweDEwMDAwMDAwCisKK2VudW0KK3sKKyBUQ0FfSURfVU5TUEVDPTAsCisgVENBX0lEX1BPTElDRT0xLAorCisgX19UQ0FfSURfTUFYPTI1NQorfTsKKworI2RlZmluZSBUQ0FfSURfTUFYIF9fVENBX0lEX01BWAorCitzdHJ1Y3QgdGNfcG9saWNlCit7CisgX191MzIgaW5kZXg7CisgaW50IGFjdGlvbjsKKyNkZWZpbmUgVENfUE9MSUNFX1VOU1BFQyBUQ19BQ1RfVU5TUEVDCisjZGVmaW5lIFRDX1BPTElDRV9PSyBUQ19BQ1RfT0sKKyNkZWZpbmUgVENfUE9MSUNFX1JFQ0xBU1NJRlkgVENfQUNUX1JFQ0xBU1NJRlkKKyNkZWZpbmUgVENfUE9MSUNFX1NIT1QgVENfQUNUX1NIT1QKKyNkZWZpbmUgVENfUE9MSUNFX1BJUEUgVENfQUNUX1BJUEUKKworIF9fdTMyIGxpbWl0OworIF9fdTMyIGJ1cnN0OworIF9fdTMyIG10dTsKKyBzdHJ1Y3QgdGNfcmF0ZXNwZWMgcmF0ZTsKKyBzdHJ1Y3QgdGNfcmF0ZXNwZWMgcGVha3JhdGU7CisgaW50IHJlZmNudDsKKyBpbnQgYmluZGNudDsKKyBfX3UzMiBjYXBhYjsKK307CisKK3N0cnVjdCB0Y2ZfdAoreworIF9fdTY0IGluc3RhbGw7CisgX191NjQgbGFzdHVzZTsKKyBfX3U2NCBleHBpcmVzOworfTsKKworc3RydWN0IHRjX2NudAoreworIGludCByZWZjbnQ7CisgaW50IGJpbmRjbnQ7Cit9OworCisjZGVmaW5lIHRjX2dlbiAgIF9fdTMyIGluZGV4OyAgIF9fdTMyIGNhcGFiOyAgIGludCBhY3Rpb247ICAgaW50IHJlZmNudDsgICBpbnQgYmluZGNudAorCitlbnVtCit7CisgVENBX1BPTElDRV9VTlNQRUMsCisgVENBX1BPTElDRV9UQkYsCisgVENBX1BPTElDRV9SQVRFLAorIFRDQV9QT0xJQ0VfUEVBS1JBVEUsCisgVENBX1BPTElDRV9BVlJBVEUsCisgVENBX1BPTElDRV9SRVNVTFQsCisgX19UQ0FfUE9MSUNFX01BWAorI2RlZmluZSBUQ0FfUE9MSUNFX1JFU1VMVCBUQ0FfUE9MSUNFX1JFU1VMVAorfTsKKworI2RlZmluZSBUQ0FfUE9MSUNFX01BWCAoX19UQ0FfUE9MSUNFX01BWCAtIDEpCisKKyNkZWZpbmUgVENfVTMyX0hUSUQoaCkgKChoKSYweEZGRjAwMDAwKQorI2RlZmluZSBUQ19VMzJfVVNFUkhUSUQoaCkgKFRDX1UzMl9IVElEKGgpPj4yMCkKKyNkZWZpbmUgVENfVTMyX0hBU0goaCkgKCgoaCk+PjEyKSYweEZGKQorI2RlZmluZSBUQ19VMzJfTk9ERShoKSAoKGgpJjB4RkZGKQorI2RlZmluZSBUQ19VMzJfS0VZKGgpICgoaCkmMHhGRkZGRikKKyNkZWZpbmUgVENfVTMyX1VOU1BFQyAwCisjZGVmaW5lIFRDX1UzMl9ST09UICgweEZGRjAwMDAwKQorCitlbnVtCit7CisgVENBX1UzMl9VTlNQRUMsCisgVENBX1UzMl9DTEFTU0lELAorIFRDQV9VMzJfSEFTSCwKKyBUQ0FfVTMyX0xJTkssCisgVENBX1UzMl9ESVZJU09SLAorIFRDQV9VMzJfU0VMLAorIFRDQV9VMzJfUE9MSUNFLAorIFRDQV9VMzJfQUNULAorIFRDQV9VMzJfSU5ERVYsCisgVENBX1UzMl9QQ05ULAorIFRDQV9VMzJfTUFSSywKKyBfX1RDQV9VMzJfTUFYCit9OworCisjZGVmaW5lIFRDQV9VMzJfTUFYIChfX1RDQV9VMzJfTUFYIC0gMSkKKworc3RydWN0IHRjX3UzMl9rZXkKK3sKKyBfX3UzMiBtYXNrOworIF9fdTMyIHZhbDsKKyBpbnQgb2ZmOworIGludCBvZmZtYXNrOworfTsKKworc3RydWN0IHRjX3UzMl9zZWwKK3sKKyB1bnNpZ25lZCBjaGFyIGZsYWdzOworIHVuc2lnbmVkIGNoYXIgb2Zmc2hpZnQ7CisgdW5zaWduZWQgY2hhciBua2V5czsKKworIF9fdTE2IG9mZm1hc2s7CisgX191MTYgb2ZmOworIHNob3J0IG9mZm9mZjsKKworIHNob3J0IGhvZmY7CisgX191MzIgaG1hc2s7Cisgc3RydWN0IHRjX3UzMl9rZXkga2V5c1swXTsKK307CisKK3N0cnVjdCB0Y191MzJfbWFyaworeworIF9fdTMyIHZhbDsKKyBfX3UzMiBtYXNrOworIF9fdTMyIHN1Y2Nlc3M7Cit9OworCitzdHJ1Y3QgdGNfdTMyX3BjbnQKK3sKKyBfX3U2NCByY250OworIF9fdTY0IHJoaXQ7CisgX191NjQga2NudHNbMF07Cit9OworCisjZGVmaW5lIFRDX1UzMl9URVJNSU5BTCAxCisjZGVmaW5lIFRDX1UzMl9PRkZTRVQgMgorI2RlZmluZSBUQ19VMzJfVkFST0ZGU0VUIDQKKyNkZWZpbmUgVENfVTMyX0VBVCA4CisKKyNkZWZpbmUgVENfVTMyX01BWERFUFRIIDgKKworZW51bQoreworIFRDQV9SU1ZQX1VOU1BFQywKKyBUQ0FfUlNWUF9DTEFTU0lELAorIFRDQV9SU1ZQX0RTVCwKKyBUQ0FfUlNWUF9TUkMsCisgVENBX1JTVlBfUElORk8sCisgVENBX1JTVlBfUE9MSUNFLAorIFRDQV9SU1ZQX0FDVCwKKyBfX1RDQV9SU1ZQX01BWAorfTsKKworI2RlZmluZSBUQ0FfUlNWUF9NQVggKF9fVENBX1JTVlBfTUFYIC0gMSApCisKK3N0cnVjdCB0Y19yc3ZwX2dwaQoreworIF9fdTMyIGtleTsKKyBfX3UzMiBtYXNrOworIGludCBvZmZzZXQ7Cit9OworCitzdHJ1Y3QgdGNfcnN2cF9waW5mbworeworIHN0cnVjdCB0Y19yc3ZwX2dwaSBkcGk7Cisgc3RydWN0IHRjX3JzdnBfZ3BpIHNwaTsKKyBfX3U4IHByb3RvY29sOworIF9fdTggdHVubmVsaWQ7CisgX191OCB0dW5uZWxoZHI7CisgX191OCBwYWQ7Cit9OworCitlbnVtCit7CisgVENBX1JPVVRFNF9VTlNQRUMsCisgVENBX1JPVVRFNF9DTEFTU0lELAorIFRDQV9ST1VURTRfVE8sCisgVENBX1JPVVRFNF9GUk9NLAorIFRDQV9ST1VURTRfSUlGLAorIFRDQV9ST1VURTRfUE9MSUNFLAorIFRDQV9ST1VURTRfQUNULAorIF9fVENBX1JPVVRFNF9NQVgKK307CisKKyNkZWZpbmUgVENBX1JPVVRFNF9NQVggKF9fVENBX1JPVVRFNF9NQVggLSAxKQorCitlbnVtCit7CisgVENBX0ZXX1VOU1BFQywKKyBUQ0FfRldfQ0xBU1NJRCwKKyBUQ0FfRldfUE9MSUNFLAorIFRDQV9GV19JTkRFViwKKyBUQ0FfRldfQUNULAorIF9fVENBX0ZXX01BWAorfTsKKworI2RlZmluZSBUQ0FfRldfTUFYIChfX1RDQV9GV19NQVggLSAxKQorCitlbnVtCit7CisgVENBX1RDSU5ERVhfVU5TUEVDLAorIFRDQV9UQ0lOREVYX0hBU0gsCisgVENBX1RDSU5ERVhfTUFTSywKKyBUQ0FfVENJTkRFWF9TSElGVCwKKyBUQ0FfVENJTkRFWF9GQUxMX1RIUk9VR0gsCisgVENBX1RDSU5ERVhfQ0xBU1NJRCwKKyBUQ0FfVENJTkRFWF9QT0xJQ0UsCisgVENBX1RDSU5ERVhfQUNULAorIF9fVENBX1RDSU5ERVhfTUFYCit9OworCisjZGVmaW5lIFRDQV9UQ0lOREVYX01BWCAoX19UQ0FfVENJTkRFWF9NQVggLSAxKQorCitlbnVtCit7CisgVENBX0JBU0lDX1VOU1BFQywKKyBUQ0FfQkFTSUNfQ0xBU1NJRCwKKyBUQ0FfQkFTSUNfRU1BVENIRVMsCisgVENBX0JBU0lDX0FDVCwKKyBUQ0FfQkFTSUNfUE9MSUNFLAorIF9fVENBX0JBU0lDX01BWAorfTsKKworI2RlZmluZSBUQ0FfQkFTSUNfTUFYIChfX1RDQV9CQVNJQ19NQVggLSAxKQorCitzdHJ1Y3QgdGNmX2VtYXRjaF90cmVlX2hkcgoreworIF9fdTE2IG5tYXRjaGVzOworIF9fdTE2IHByb2dpZDsKK307CisKK2VudW0KK3sKKyBUQ0FfRU1BVENIX1RSRUVfVU5TUEVDLAorIFRDQV9FTUFUQ0hfVFJFRV9IRFIsCisgVENBX0VNQVRDSF9UUkVFX0xJU1QsCisgX19UQ0FfRU1BVENIX1RSRUVfTUFYCit9OworI2RlZmluZSBUQ0FfRU1BVENIX1RSRUVfTUFYIChfX1RDQV9FTUFUQ0hfVFJFRV9NQVggLSAxKQorCitzdHJ1Y3QgdGNmX2VtYXRjaF9oZHIKK3sKKyBfX3UxNiBtYXRjaGlkOworIF9fdTE2IGtpbmQ7CisgX191MTYgZmxhZ3M7CisgX191MTYgcGFkOworfTsKKworI2RlZmluZSBUQ0ZfRU1fUkVMX0VORCAwCisjZGVmaW5lIFRDRl9FTV9SRUxfQU5EICgxPDwwKQorI2RlZmluZSBUQ0ZfRU1fUkVMX09SICgxPDwxKQorI2RlZmluZSBUQ0ZfRU1fSU5WRVJUICgxPDwyKQorI2RlZmluZSBUQ0ZfRU1fU0lNUExFICgxPDwzKQorCisjZGVmaW5lIFRDRl9FTV9SRUxfTUFTSyAzCisjZGVmaW5lIFRDRl9FTV9SRUxfVkFMSUQodikgKCgodikgJiBUQ0ZfRU1fUkVMX01BU0spICE9IFRDRl9FTV9SRUxfTUFTSykKKworZW51bQoreworIFRDRl9MQVlFUl9MSU5LLAorIFRDRl9MQVlFUl9ORVRXT1JLLAorIFRDRl9MQVlFUl9UUkFOU1BPUlQsCisgX19UQ0ZfTEFZRVJfTUFYCit9OworI2RlZmluZSBUQ0ZfTEFZRVJfTUFYIChfX1RDRl9MQVlFUl9NQVggLSAxKQorCitlbnVtCit7CisgVENGX0VNX0NPTlRBSU5FUiwKKyBUQ0ZfRU1fQ01QLAorIFRDRl9FTV9OQllURSwKKyBUQ0ZfRU1fVTMyLAorIFRDRl9FTV9NRVRBLAorIFRDRl9FTV9URVhULAorIF9fVENGX0VNX01BWAorfTsKKworZW51bQoreworIFRDRl9FTV9QUk9HX1RDCit9OworCitlbnVtCit7CisgVENGX0VNX09QTkRfRVEsCisgVENGX0VNX09QTkRfR1QsCisgVENGX0VNX09QTkRfTFQKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BrdF9zY2hlZC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BrdF9zY2hlZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMTVkODMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcGt0X3NjaGVkLmgKQEAgLTAsMCArMSw0MDUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19MSU5VWF9QS1RfU0NIRURfSAorI2RlZmluZSBfX0xJTlVYX1BLVF9TQ0hFRF9ICisKKyNkZWZpbmUgVENfUFJJT19CRVNURUZGT1JUIDAKKyNkZWZpbmUgVENfUFJJT19GSUxMRVIgMQorI2RlZmluZSBUQ19QUklPX0JVTEsgMgorI2RlZmluZSBUQ19QUklPX0lOVEVSQUNUSVZFX0JVTEsgNAorI2RlZmluZSBUQ19QUklPX0lOVEVSQUNUSVZFIDYKKyNkZWZpbmUgVENfUFJJT19DT05UUk9MIDcKKworI2RlZmluZSBUQ19QUklPX01BWCAxNQorCitzdHJ1Y3QgdGNfc3RhdHMKK3sKKyBfX3U2NCBieXRlczsKKyBfX3UzMiBwYWNrZXRzOworIF9fdTMyIGRyb3BzOworIF9fdTMyIG92ZXJsaW1pdHM7CisgX191MzIgYnBzOworIF9fdTMyIHBwczsKKyBfX3UzMiBxbGVuOworIF9fdTMyIGJhY2tsb2c7Cit9OworCitzdHJ1Y3QgdGNfZXN0aW1hdG9yCit7Cisgc2lnbmVkIGNoYXIgaW50ZXJ2YWw7CisgdW5zaWduZWQgY2hhciBld21hX2xvZzsKK307CisKKyNkZWZpbmUgVENfSF9NQUpfTUFTSyAoMHhGRkZGMDAwMFUpCisjZGVmaW5lIFRDX0hfTUlOX01BU0sgKDB4MDAwMEZGRkZVKQorI2RlZmluZSBUQ19IX01BSihoKSAoKGgpJlRDX0hfTUFKX01BU0spCisjZGVmaW5lIFRDX0hfTUlOKGgpICgoaCkmVENfSF9NSU5fTUFTSykKKyNkZWZpbmUgVENfSF9NQUtFKG1haixtaW4pICgoKG1haikmVENfSF9NQUpfTUFTSyl8KChtaW4pJlRDX0hfTUlOX01BU0spKQorCisjZGVmaW5lIFRDX0hfVU5TUEVDICgwVSkKKyNkZWZpbmUgVENfSF9ST09UICgweEZGRkZGRkZGVSkKKyNkZWZpbmUgVENfSF9JTkdSRVNTICgweEZGRkZGRkYxVSkKKworc3RydWN0IHRjX3JhdGVzcGVjCit7CisgdW5zaWduZWQgY2hhciBjZWxsX2xvZzsKKyB1bnNpZ25lZCBjaGFyIF9fcmVzZXJ2ZWQ7CisgdW5zaWduZWQgc2hvcnQgZmVhdHVyZTsKKyBzaG9ydCBhZGRlbmQ7CisgdW5zaWduZWQgc2hvcnQgbXB1OworIF9fdTMyIHJhdGU7Cit9OworCitzdHJ1Y3QgdGNfZmlmb19xb3B0Cit7CisgX191MzIgbGltaXQ7Cit9OworCisjZGVmaW5lIFRDUV9QUklPX0JBTkRTIDE2CisjZGVmaW5lIFRDUV9NSU5fUFJJT19CQU5EUyAyCisKK3N0cnVjdCB0Y19wcmlvX3FvcHQKK3sKKyBpbnQgYmFuZHM7CisgX191OCBwcmlvbWFwW1RDX1BSSU9fTUFYKzFdOworfTsKKworc3RydWN0IHRjX3RiZl9xb3B0Cit7Cisgc3RydWN0IHRjX3JhdGVzcGVjIHJhdGU7Cisgc3RydWN0IHRjX3JhdGVzcGVjIHBlYWtyYXRlOworIF9fdTMyIGxpbWl0OworIF9fdTMyIGJ1ZmZlcjsKKyBfX3UzMiBtdHU7Cit9OworCitlbnVtCit7CisgVENBX1RCRl9VTlNQRUMsCisgVENBX1RCRl9QQVJNUywKKyBUQ0FfVEJGX1JUQUIsCisgVENBX1RCRl9QVEFCLAorIF9fVENBX1RCRl9NQVgsCit9OworCisjZGVmaW5lIFRDQV9UQkZfTUFYIChfX1RDQV9UQkZfTUFYIC0gMSkKKworc3RydWN0IHRjX3NmcV9xb3B0Cit7CisgdW5zaWduZWQgcXVhbnR1bTsKKyBpbnQgcGVydHVyYl9wZXJpb2Q7CisgX191MzIgbGltaXQ7CisgdW5zaWduZWQgZGl2aXNvcjsKKyB1bnNpZ25lZCBmbG93czsKK307CisKK2VudW0KK3sKKyBUQ0FfUkVEX1VOU1BFQywKKyBUQ0FfUkVEX1BBUk1TLAorIFRDQV9SRURfU1RBQiwKKyBfX1RDQV9SRURfTUFYLAorfTsKKworI2RlZmluZSBUQ0FfUkVEX01BWCAoX19UQ0FfUkVEX01BWCAtIDEpCisKK3N0cnVjdCB0Y19yZWRfcW9wdAoreworIF9fdTMyIGxpbWl0OworIF9fdTMyIHF0aF9taW47CisgX191MzIgcXRoX21heDsKKyB1bnNpZ25lZCBjaGFyIFdsb2c7CisgdW5zaWduZWQgY2hhciBQbG9nOworIHVuc2lnbmVkIGNoYXIgU2NlbGxfbG9nOworIHVuc2lnbmVkIGNoYXIgZmxhZ3M7CisjZGVmaW5lIFRDX1JFRF9FQ04gMQorI2RlZmluZSBUQ19SRURfSEFSRERST1AgMgorfTsKKworc3RydWN0IHRjX3JlZF94c3RhdHMKK3sKKyBfX3UzMiBlYXJseTsKKyBfX3UzMiBwZHJvcDsKKyBfX3UzMiBvdGhlcjsKKyBfX3UzMiBtYXJrZWQ7Cit9OworCisjZGVmaW5lIE1BWF9EUHMgMTYKKworZW51bQoreworIFRDQV9HUkVEX1VOU1BFQywKKyBUQ0FfR1JFRF9QQVJNUywKKyBUQ0FfR1JFRF9TVEFCLAorIFRDQV9HUkVEX0RQUywKKyBfX1RDQV9HUkVEX01BWCwKK307CisKKyNkZWZpbmUgVENBX0dSRURfTUFYIChfX1RDQV9HUkVEX01BWCAtIDEpCisKK3N0cnVjdCB0Y19ncmVkX3FvcHQKK3sKKyBfX3UzMiBsaW1pdDsKKyBfX3UzMiBxdGhfbWluOworIF9fdTMyIHF0aF9tYXg7CisgX191MzIgRFA7CisgX191MzIgYmFja2xvZzsKKyBfX3UzMiBxYXZlOworIF9fdTMyIGZvcmNlZDsKKyBfX3UzMiBlYXJseTsKKyBfX3UzMiBvdGhlcjsKKyBfX3UzMiBwZHJvcDsKKyBfX3U4IFdsb2c7CisgX191OCBQbG9nOworIF9fdTggU2NlbGxfbG9nOworIF9fdTggcHJpbzsKKyBfX3UzMiBwYWNrZXRzOworIF9fdTMyIGJ5dGVzaW47Cit9OworCitzdHJ1Y3QgdGNfZ3JlZF9zb3B0Cit7CisgX191MzIgRFBzOworIF9fdTMyIGRlZl9EUDsKKyBfX3U4IGdyaW87CisgX191OCBmbGFnczsKKyBfX3UxNiBwYWQxOworfTsKKworI2RlZmluZSBUQ19IVEJfTlVNUFJJTyA4CisjZGVmaW5lIFRDX0hUQl9NQVhERVBUSCA4CisjZGVmaW5lIFRDX0hUQl9QUk9UT1ZFUiAzICAKKworc3RydWN0IHRjX2h0Yl9vcHQKK3sKKyBzdHJ1Y3QgdGNfcmF0ZXNwZWMgcmF0ZTsKKyBzdHJ1Y3QgdGNfcmF0ZXNwZWMgY2VpbDsKKyBfX3UzMiBidWZmZXI7CisgX191MzIgY2J1ZmZlcjsKKyBfX3UzMiBxdWFudHVtOworIF9fdTMyIGxldmVsOworIF9fdTMyIHByaW87Cit9Oworc3RydWN0IHRjX2h0Yl9nbG9iCit7CisgX191MzIgdmVyc2lvbjsKKyBfX3UzMiByYXRlMnF1YW50dW07CisgX191MzIgZGVmY2xzOworIF9fdTMyIGRlYnVnOworCisgX191MzIgZGlyZWN0X3BrdHM7Cit9OworZW51bQoreworIFRDQV9IVEJfVU5TUEVDLAorIFRDQV9IVEJfUEFSTVMsCisgVENBX0hUQl9JTklULAorIFRDQV9IVEJfQ1RBQiwKKyBUQ0FfSFRCX1JUQUIsCisgX19UQ0FfSFRCX01BWCwKK307CisKKyNkZWZpbmUgVENBX0hUQl9NQVggKF9fVENBX0hUQl9NQVggLSAxKQorCitzdHJ1Y3QgdGNfaHRiX3hzdGF0cworeworIF9fdTMyIGxlbmRzOworIF9fdTMyIGJvcnJvd3M7CisgX191MzIgZ2lhbnRzOworIF9fdTMyIHRva2VuczsKKyBfX3UzMiBjdG9rZW5zOworfTsKKworc3RydWN0IHRjX2hmc2NfcW9wdAoreworIF9fdTE2IGRlZmNsczsKK307CisKK3N0cnVjdCB0Y19zZXJ2aWNlX2N1cnZlCit7CisgX191MzIgbTE7CisgX191MzIgZDsKKyBfX3UzMiBtMjsKK307CisKK3N0cnVjdCB0Y19oZnNjX3N0YXRzCit7CisgX191NjQgd29yazsKKyBfX3U2NCBydHdvcms7CisgX191MzIgcGVyaW9kOworIF9fdTMyIGxldmVsOworfTsKKworZW51bQoreworIFRDQV9IRlNDX1VOU1BFQywKKyBUQ0FfSEZTQ19SU0MsCisgVENBX0hGU0NfRlNDLAorIFRDQV9IRlNDX1VTQywKKyBfX1RDQV9IRlNDX01BWCwKK307CisKKyNkZWZpbmUgVENBX0hGU0NfTUFYIChfX1RDQV9IRlNDX01BWCAtIDEpCisKKyNkZWZpbmUgVENfQ0JRX01BWFBSSU8gOAorI2RlZmluZSBUQ19DQlFfTUFYTEVWRUwgOAorI2RlZmluZSBUQ19DQlFfREVGX0VXTUEgNQorCitzdHJ1Y3QgdGNfY2JxX2xzc29wdAoreworIHVuc2lnbmVkIGNoYXIgY2hhbmdlOworIHVuc2lnbmVkIGNoYXIgZmxhZ3M7CisjZGVmaW5lIFRDRl9DQlFfTFNTX0JPVU5ERUQgMQorI2RlZmluZSBUQ0ZfQ0JRX0xTU19JU09MQVRFRCAyCisgdW5zaWduZWQgY2hhciBld21hX2xvZzsKKyB1bnNpZ25lZCBjaGFyIGxldmVsOworI2RlZmluZSBUQ0ZfQ0JRX0xTU19GTEFHUyAxCisjZGVmaW5lIFRDRl9DQlFfTFNTX0VXTUEgMgorI2RlZmluZSBUQ0ZfQ0JRX0xTU19NQVhJRExFIDQKKyNkZWZpbmUgVENGX0NCUV9MU1NfTUlOSURMRSA4CisjZGVmaW5lIFRDRl9DQlFfTFNTX09GRlRJTUUgMHgxMAorI2RlZmluZSBUQ0ZfQ0JRX0xTU19BVlBLVCAweDIwCisgX191MzIgbWF4aWRsZTsKKyBfX3UzMiBtaW5pZGxlOworIF9fdTMyIG9mZnRpbWU7CisgX191MzIgYXZwa3Q7Cit9OworCitzdHJ1Y3QgdGNfY2JxX3dycm9wdAoreworIHVuc2lnbmVkIGNoYXIgZmxhZ3M7CisgdW5zaWduZWQgY2hhciBwcmlvcml0eTsKKyB1bnNpZ25lZCBjaGFyIGNwcmlvcml0eTsKKyB1bnNpZ25lZCBjaGFyIF9fcmVzZXJ2ZWQ7CisgX191MzIgYWxsb3Q7CisgX191MzIgd2VpZ2h0OworfTsKKworc3RydWN0IHRjX2NicV9vdmwKK3sKKyB1bnNpZ25lZCBjaGFyIHN0cmF0ZWd5OworI2RlZmluZSBUQ19DQlFfT1ZMX0NMQVNTSUMgMAorI2RlZmluZSBUQ19DQlFfT1ZMX0RFTEFZIDEKKyNkZWZpbmUgVENfQ0JRX09WTF9MT1dQUklPIDIKKyNkZWZpbmUgVENfQ0JRX09WTF9EUk9QIDMKKyNkZWZpbmUgVENfQ0JRX09WTF9SQ0xBU1NJQyA0CisgdW5zaWduZWQgY2hhciBwcmlvcml0eTI7CisgX191MTYgcGFkOworIF9fdTMyIHBlbmFsdHk7Cit9OworCitzdHJ1Y3QgdGNfY2JxX3BvbGljZQoreworIHVuc2lnbmVkIGNoYXIgcG9saWNlOworIHVuc2lnbmVkIGNoYXIgX19yZXMxOworIHVuc2lnbmVkIHNob3J0IF9fcmVzMjsKK307CisKK3N0cnVjdCB0Y19jYnFfZm9wdAoreworIF9fdTMyIHNwbGl0OworIF9fdTMyIGRlZm1hcDsKKyBfX3UzMiBkZWZjaGFuZ2U7Cit9OworCitzdHJ1Y3QgdGNfY2JxX3hzdGF0cworeworIF9fdTMyIGJvcnJvd3M7CisgX191MzIgb3ZlcmFjdGlvbnM7CisgX19zMzIgYXZnaWRsZTsKKyBfX3MzMiB1bmRlcnRpbWU7Cit9OworCitlbnVtCit7CisgVENBX0NCUV9VTlNQRUMsCisgVENBX0NCUV9MU1NPUFQsCisgVENBX0NCUV9XUlJPUFQsCisgVENBX0NCUV9GT1BULAorIFRDQV9DQlFfT1ZMX1NUUkFURUdZLAorIFRDQV9DQlFfUkFURSwKKyBUQ0FfQ0JRX1JUQUIsCisgVENBX0NCUV9QT0xJQ0UsCisgX19UQ0FfQ0JRX01BWCwKK307CisKKyNkZWZpbmUgVENBX0NCUV9NQVggKF9fVENBX0NCUV9NQVggLSAxKQorCitlbnVtIHsKKyBUQ0FfRFNNQVJLX1VOU1BFQywKKyBUQ0FfRFNNQVJLX0lORElDRVMsCisgVENBX0RTTUFSS19ERUZBVUxUX0lOREVYLAorIFRDQV9EU01BUktfU0VUX1RDX0lOREVYLAorIFRDQV9EU01BUktfTUFTSywKKyBUQ0FfRFNNQVJLX1ZBTFVFLAorIF9fVENBX0RTTUFSS19NQVgsCit9OworCisjZGVmaW5lIFRDQV9EU01BUktfTUFYIChfX1RDQV9EU01BUktfTUFYIC0gMSkKKworZW51bSB7CisgVENBX0FUTV9VTlNQRUMsCisgVENBX0FUTV9GRCwKKyBUQ0FfQVRNX1BUUiwKKyBUQ0FfQVRNX0hEUiwKKyBUQ0FfQVRNX0VYQ0VTUywKKyBUQ0FfQVRNX0FERFIsCisgVENBX0FUTV9TVEFURSwKKyBfX1RDQV9BVE1fTUFYLAorfTsKKworI2RlZmluZSBUQ0FfQVRNX01BWCAoX19UQ0FfQVRNX01BWCAtIDEpCisKK2VudW0KK3sKKyBUQ0FfTkVURU1fVU5TUEVDLAorIFRDQV9ORVRFTV9DT1JSLAorIFRDQV9ORVRFTV9ERUxBWV9ESVNULAorIFRDQV9ORVRFTV9SRU9SREVSLAorIFRDQV9ORVRFTV9DT1JSVVBULAorIF9fVENBX05FVEVNX01BWCwKK307CisKKyNkZWZpbmUgVENBX05FVEVNX01BWCAoX19UQ0FfTkVURU1fTUFYIC0gMSkKKworc3RydWN0IHRjX25ldGVtX3FvcHQKK3sKKyBfX3UzMiBsYXRlbmN5OworIF9fdTMyIGxpbWl0OworIF9fdTMyIGxvc3M7CisgX191MzIgZ2FwOworIF9fdTMyIGR1cGxpY2F0ZTsKKyBfX3UzMiBqaXR0ZXI7Cit9OworCitzdHJ1Y3QgdGNfbmV0ZW1fY29ycgoreworIF9fdTMyIGRlbGF5X2NvcnI7CisgX191MzIgbG9zc19jb3JyOworIF9fdTMyIGR1cF9jb3JyOworfTsKKworc3RydWN0IHRjX25ldGVtX3Jlb3JkZXIKK3sKKyBfX3UzMiBwcm9iYWJpbGl0eTsKKyBfX3UzMiBjb3JyZWxhdGlvbjsKK307CisKK3N0cnVjdCB0Y19uZXRlbV9jb3JydXB0Cit7CisgX191MzIgcHJvYmFiaWxpdHk7CisgX191MzIgY29ycmVsYXRpb247Cit9OworCisjZGVmaW5lIE5FVEVNX0RJU1RfU0NBTEUgODE5MgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wbGF0Zm9ybV9kZXZpY2UuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wbGF0Zm9ybV9kZXZpY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzYxYjViCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BsYXRmb3JtX2RldmljZS5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX1BMQVRGT1JNX0RFVklDRV9IXworI2RlZmluZSBfUExBVEZPUk1fREVWSUNFX0hfCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKworc3RydWN0IHBsYXRmb3JtX2RldmljZSB7CisgY29uc3QgY2hhciAqIG5hbWU7CisgdTMyIGlkOworIHN0cnVjdCBkZXZpY2UgZGV2OworIHUzMiBudW1fcmVzb3VyY2VzOworIHN0cnVjdCByZXNvdXJjZSAqIHJlc291cmNlOworfTsKKworI2RlZmluZSB0b19wbGF0Zm9ybV9kZXZpY2UoeCkgY29udGFpbmVyX29mKCh4KSwgc3RydWN0IHBsYXRmb3JtX2RldmljZSwgZGV2KQorCitzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHsKKyBpbnQgKCpwcm9iZSkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqKTsKKyBpbnQgKCpyZW1vdmUpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKik7Cisgdm9pZCAoKnNodXRkb3duKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICopOworIGludCAoKnN1c3BlbmQpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKiwgcG1fbWVzc2FnZV90IHN0YXRlKTsKKyBpbnQgKCpyZXN1bWUpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKik7Cisgc3RydWN0IGRldmljZV9kcml2ZXIgZHJpdmVyOworfTsKKworI2RlZmluZSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShfZGV2KSBkZXZfZ2V0X2RydmRhdGEoJihfZGV2KS0+ZGV2KQorI2RlZmluZSBwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShfZGV2LGRhdGEpIGRldl9zZXRfZHJ2ZGF0YSgmKF9kZXYpLT5kZXYsIChkYXRhKSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcGxpc3QuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wbGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkNjU3ODMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcGxpc3QuaApAQCAtMCwwICsxLDQ0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9QTElTVF9IXworI2RlZmluZSBfTElOVVhfUExJU1RfSF8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9ja190eXBlcy5oPgorCitzdHJ1Y3QgcGxpc3RfaGVhZCB7Cisgc3RydWN0IGxpc3RfaGVhZCBwcmlvX2xpc3Q7Cisgc3RydWN0IGxpc3RfaGVhZCBub2RlX2xpc3Q7Cit9OworCitzdHJ1Y3QgcGxpc3Rfbm9kZSB7CisgaW50IHByaW87Cisgc3RydWN0IHBsaXN0X2hlYWQgcGxpc3Q7Cit9OworCisjZGVmaW5lIFBMSVNUX0hFQURfTE9DS19JTklUKF9sb2NrKQorCisjZGVmaW5lIFBMSVNUX0hFQURfSU5JVChoZWFkLCBfbG9jaykgIHsgICAucHJpb19saXN0ID0gTElTVF9IRUFEX0lOSVQoKGhlYWQpLnByaW9fbGlzdCksICAgLm5vZGVfbGlzdCA9IExJU1RfSEVBRF9JTklUKChoZWFkKS5ub2RlX2xpc3QpLCAgIFBMSVNUX0hFQURfTE9DS19JTklUKCYoX2xvY2spKSAgfQorCisjZGVmaW5lIFBMSVNUX05PREVfSU5JVChub2RlLCBfX3ByaW8pICB7ICAgLnByaW8gPSAoX19wcmlvKSwgICAucGxpc3QgPSBQTElTVF9IRUFEX0lOSVQoKG5vZGUpLnBsaXN0LCBOVUxMKSwgIH0KKworI2RlZmluZSBwbGlzdF9mb3JfZWFjaChwb3MsIGhlYWQpICAgbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsICYoaGVhZCktPm5vZGVfbGlzdCwgcGxpc3Qubm9kZV9saXN0KQorCisjZGVmaW5lIHBsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCBuLCBoZWFkKSAgIGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3MsIG4sICYoaGVhZCktPm5vZGVfbGlzdCwgcGxpc3Qubm9kZV9saXN0KQorCisjZGVmaW5lIHBsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgaGVhZCwgbWVtKSAgIGxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCAmKGhlYWQpLT5ub2RlX2xpc3QsIG1lbS5wbGlzdC5ub2RlX2xpc3QpCisKKyNkZWZpbmUgcGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3MsIG4sIGhlYWQsIG0pICAgbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBvcywgbiwgJihoZWFkKS0+bm9kZV9saXN0LCBtLnBsaXN0Lm5vZGVfbGlzdCkKKworI2RlZmluZSBwbGlzdF9maXJzdF9lbnRyeShoZWFkLCB0eXBlLCBtZW1iZXIpICAgY29udGFpbmVyX29mKHBsaXN0X2ZpcnN0KGhlYWQpLCB0eXBlLCBtZW1iZXIpCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wbS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU0ODc5MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wbS5oCkBAIC0wLDAgKzEsMTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX1BNX0gKKyNkZWZpbmUgX0xJTlVYX1BNX0gKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcG5wLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcG5wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBiMGFmNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wbnAuaApAQCAtMCwwICsxLDE1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9QTlBfSAorI2RlZmluZSBfTElOVVhfUE5QX0gKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcG9sbC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BvbGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODIyNTA5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BvbGwuaApAQCAtMCwwICsxLDE3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9QT0xMX0gKKyNkZWZpbmUgX0xJTlVYX1BPTExfSAorCisjaW5jbHVkZSA8YXNtL3BvbGwuaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcG9zaXhfYWNsLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcG9zaXhfYWNsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRhZWU1YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wb3NpeF9hY2wuaApAQCAtMCwwICsxLDQ3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTElOVVhfUE9TSVhfQUNMX0gKKyNkZWZpbmUgX19MSU5VWF9QT1NJWF9BQ0xfSAorCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCisjZGVmaW5lIEFDTF9VTkRFRklORURfSUQgKC0xKQorCisjZGVmaW5lIEFDTF9UWVBFX0FDQ0VTUyAoMHg4MDAwKQorI2RlZmluZSBBQ0xfVFlQRV9ERUZBVUxUICgweDQwMDApCisKKyNkZWZpbmUgQUNMX1VTRVJfT0JKICgweDAxKQorI2RlZmluZSBBQ0xfVVNFUiAoMHgwMikKKyNkZWZpbmUgQUNMX0dST1VQX09CSiAoMHgwNCkKKyNkZWZpbmUgQUNMX0dST1VQICgweDA4KQorI2RlZmluZSBBQ0xfTUFTSyAoMHgxMCkKKyNkZWZpbmUgQUNMX09USEVSICgweDIwKQorCisjZGVmaW5lIEFDTF9SRUFEICgweDA0KQorI2RlZmluZSBBQ0xfV1JJVEUgKDB4MDIpCisjZGVmaW5lIEFDTF9FWEVDVVRFICgweDAxKQorCitzdHJ1Y3QgcG9zaXhfYWNsX2VudHJ5IHsKKyBzaG9ydCBlX3RhZzsKKyB1bnNpZ25lZCBzaG9ydCBlX3Blcm07CisgdW5zaWduZWQgaW50IGVfaWQ7Cit9OworCitzdHJ1Y3QgcG9zaXhfYWNsIHsKKyBhdG9taWNfdCBhX3JlZmNvdW50OworIHVuc2lnbmVkIGludCBhX2NvdW50OworIHN0cnVjdCBwb3NpeF9hY2xfZW50cnkgYV9lbnRyaWVzWzBdOworfTsKKworI2RlZmluZSBGT1JFQUNIX0FDTF9FTlRSWShwYSwgYWNsLCBwZSkgICBmb3IocGE9KGFjbCktPmFfZW50cmllcywgcGU9cGErKGFjbCktPmFfY291bnQ7IHBhPHBlOyBwYSsrKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wb3NpeF90eXBlcy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3Bvc2l4X3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdkMGFkMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wb3NpeF90eXBlcy5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX1BPU0lYX1RZUEVTX0gKKyNkZWZpbmUgX0xJTlVYX1BPU0lYX1RZUEVTX0gKKworI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorCisjdW5kZWYgX19ORkRCSVRTCisjZGVmaW5lIF9fTkZEQklUUyAoOCAqIHNpemVvZih1bnNpZ25lZCBsb25nKSkKKworI3VuZGVmIF9fRkRfU0VUU0laRQorI2RlZmluZSBfX0ZEX1NFVFNJWkUgMTAyNAorCisjdW5kZWYgX19GRFNFVF9MT05HUworI2RlZmluZSBfX0ZEU0VUX0xPTkdTIChfX0ZEX1NFVFNJWkUvX19ORkRCSVRTKQorCisjdW5kZWYgX19GREVMVAorI2RlZmluZSBfX0ZERUxUKGQpICgoZCkgLyBfX05GREJJVFMpCisKKyN1bmRlZiBfX0ZETUFTSworI2RlZmluZSBfX0ZETUFTSyhkKSAoMVVMIDw8ICgoZCkgJSBfX05GREJJVFMpKQorCit0eXBlZGVmIHN0cnVjdCB7CisgdW5zaWduZWQgbG9uZyBmZHNfYml0cyBbX19GRFNFVF9MT05HU107Cit9IF9fa2VybmVsX2ZkX3NldDsKKwordHlwZWRlZiB2b2lkICgqX19rZXJuZWxfc2lnaGFuZGxlcl90KShpbnQpOworCit0eXBlZGVmIGludCBfX2tlcm5lbF9rZXlfdDsKK3R5cGVkZWYgaW50IF9fa2VybmVsX21xZF90OworCisjaW5jbHVkZSA8YXNtL3Bvc2l4X3R5cGVzLmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BwZGV2LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcHBkZXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDNmOGI5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BwZGV2LmgKQEAgLTAsMCArMSw3MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBQUF9JT0NUTCAncCcKKworI2RlZmluZSBQUFNFVE1PREUgX0lPVyhQUF9JT0NUTCwgMHg4MCwgaW50KQorCisjZGVmaW5lIFBQUlNUQVRVUyBfSU9SKFBQX0lPQ1RMLCAweDgxLCB1bnNpZ25lZCBjaGFyKQorI2RlZmluZSBQUFdTVEFUVVMgT0JTT0xFVEVfX0lPVyhQUF9JT0NUTCwgMHg4MiwgdW5zaWduZWQgY2hhcikKKworI2RlZmluZSBQUFJDT05UUk9MIF9JT1IoUFBfSU9DVEwsIDB4ODMsIHVuc2lnbmVkIGNoYXIpCisjZGVmaW5lIFBQV0NPTlRST0wgX0lPVyhQUF9JT0NUTCwgMHg4NCwgdW5zaWduZWQgY2hhcikKKworc3RydWN0IHBwZGV2X2Zyb2Jfc3RydWN0IHsKKyB1bnNpZ25lZCBjaGFyIG1hc2s7CisgdW5zaWduZWQgY2hhciB2YWw7Cit9OworI2RlZmluZSBQUEZDT05UUk9MIF9JT1coUFBfSU9DVEwsIDB4OGUsIHN0cnVjdCBwcGRldl9mcm9iX3N0cnVjdCkKKworI2RlZmluZSBQUFJEQVRBIF9JT1IoUFBfSU9DVEwsIDB4ODUsIHVuc2lnbmVkIGNoYXIpCisjZGVmaW5lIFBQV0RBVEEgX0lPVyhQUF9JT0NUTCwgMHg4NiwgdW5zaWduZWQgY2hhcikKKworI2RlZmluZSBQUFJFQ09OVFJPTCBPQlNPTEVURV9fSU9SKFBQX0lPQ1RMLCAweDg3LCB1bnNpZ25lZCBjaGFyKQorI2RlZmluZSBQUFdFQ09OVFJPTCBPQlNPTEVURV9fSU9XKFBQX0lPQ1RMLCAweDg4LCB1bnNpZ25lZCBjaGFyKQorCisjZGVmaW5lIFBQUkZJRk8gT0JTT0xFVEVfX0lPUihQUF9JT0NUTCwgMHg4OSwgdW5zaWduZWQgY2hhcikKKyNkZWZpbmUgUFBXRklGTyBPQlNPTEVURV9fSU9XKFBQX0lPQ1RMLCAweDhhLCB1bnNpZ25lZCBjaGFyKQorCisjZGVmaW5lIFBQQ0xBSU0gX0lPKFBQX0lPQ1RMLCAweDhiKQorCisjZGVmaW5lIFBQUkVMRUFTRSBfSU8oUFBfSU9DVEwsIDB4OGMpCisKKyNkZWZpbmUgUFBZSUVMRCBfSU8oUFBfSU9DVEwsIDB4OGQpCisKKyNkZWZpbmUgUFBFWENMIF9JTyhQUF9JT0NUTCwgMHg4ZikKKworI2RlZmluZSBQUERBVEFESVIgX0lPVyhQUF9JT0NUTCwgMHg5MCwgaW50KQorCisjZGVmaW5lIFBQTkVHT1QgX0lPVyhQUF9JT0NUTCwgMHg5MSwgaW50KQorCisjZGVmaW5lIFBQV0NUTE9OSVJRIF9JT1coUFBfSU9DVEwsIDB4OTIsIHVuc2lnbmVkIGNoYXIpCisKKyNkZWZpbmUgUFBDTFJJUlEgX0lPUihQUF9JT0NUTCwgMHg5MywgaW50KQorCisjZGVmaW5lIFBQU0VUUEhBU0UgX0lPVyhQUF9JT0NUTCwgMHg5NCwgaW50KQorCisjZGVmaW5lIFBQR0VUVElNRSBfSU9SKFBQX0lPQ1RMLCAweDk1LCBzdHJ1Y3QgdGltZXZhbCkKKyNkZWZpbmUgUFBTRVRUSU1FIF9JT1coUFBfSU9DVEwsIDB4OTYsIHN0cnVjdCB0aW1ldmFsKQorCisjZGVmaW5lIFBQR0VUTU9ERVMgX0lPUihQUF9JT0NUTCwgMHg5NywgdW5zaWduZWQgaW50KQorCisjZGVmaW5lIFBQR0VUTU9ERSBfSU9SKFBQX0lPQ1RMLCAweDk4LCBpbnQpCisjZGVmaW5lIFBQR0VUUEhBU0UgX0lPUihQUF9JT0NUTCwgMHg5OSwgaW50KQorCisjZGVmaW5lIFBQR0VURkxBR1MgX0lPUihQUF9JT0NUTCwgMHg5YSwgaW50KQorI2RlZmluZSBQUFNFVEZMQUdTIF9JT1coUFBfSU9DVEwsIDB4OWIsIGludCkKKworI2RlZmluZSBQUF9GQVNUV1JJVEUgKDE8PDIpCisjZGVmaW5lIFBQX0ZBU1RSRUFEICgxPDwzKQorI2RlZmluZSBQUF9XOTEyODRQSUMgKDE8PDQpCisKKyNkZWZpbmUgUFBfRkxBR01BU0sgKFBQX0ZBU1RXUklURSB8IFBQX0ZBU1RSRUFEIHwgUFBfVzkxMjg0UElDKQorCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcHBwX2RlZnMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wcHBfZGVmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNTRhYzcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcHBwX2RlZnMuaApAQCAtMCwwICsxLDEyMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfUFBQX0RFRlNfSF8KKyNkZWZpbmUgX1BQUF9ERUZTX0hfCisKKyNkZWZpbmUgUFBQX0hEUkxFTiA0ICAKKyNkZWZpbmUgUFBQX0ZDU0xFTiAyICAKKyNkZWZpbmUgUFBQX01SVSAxNTAwICAKKworI2RlZmluZSBQUFBfQUREUkVTUyhwKSAoKChfX3U4ICopKHApKVswXSkKKyNkZWZpbmUgUFBQX0NPTlRST0wocCkgKCgoX191OCAqKShwKSlbMV0pCisjZGVmaW5lIFBQUF9QUk9UT0NPTChwKSAoKCgoX191OCAqKShwKSlbMl0gPDwgOCkgKyAoKF9fdTggKikocCkpWzNdKQorCisjZGVmaW5lIFBQUF9BTExTVEFUSU9OUyAweGZmICAKKyNkZWZpbmUgUFBQX1VJIDB4MDMgIAorI2RlZmluZSBQUFBfRkxBRyAweDdlICAKKyNkZWZpbmUgUFBQX0VTQ0FQRSAweDdkICAKKyNkZWZpbmUgUFBQX1RSQU5TIDB4MjAgIAorCisjZGVmaW5lIFBQUF9JUCAweDIxICAKKyNkZWZpbmUgUFBQX0FUIDB4MjkgIAorI2RlZmluZSBQUFBfSVBYIDB4MmIgIAorI2RlZmluZSBQUFBfVkpDX0NPTVAgMHgyZCAgCisjZGVmaW5lIFBQUF9WSkNfVU5DT01QIDB4MmYgIAorI2RlZmluZSBQUFBfTVAgMHgzZCAgCisjZGVmaW5lIFBQUF9JUFY2IDB4NTcgIAorI2RlZmluZSBQUFBfQ09NUEZSQUcgMHhmYiAgCisjZGVmaW5lIFBQUF9DT01QIDB4ZmQgIAorI2RlZmluZSBQUFBfTVBMU19VQyAweDAyODEgIAorI2RlZmluZSBQUFBfTVBMU19NQyAweDAyODMgIAorI2RlZmluZSBQUFBfSVBDUCAweDgwMjEgIAorI2RlZmluZSBQUFBfQVRDUCAweDgwMjkgIAorI2RlZmluZSBQUFBfSVBYQ1AgMHg4MDJiICAKKyNkZWZpbmUgUFBQX0lQVjZDUCAweDgwNTcgIAorI2RlZmluZSBQUFBfQ0NQRlJBRyAweDgwZmIgIAorI2RlZmluZSBQUFBfQ0NQIDB4ODBmZCAgCisjZGVmaW5lIFBQUF9NUExTQ1AgMHg4MGZkICAKKyNkZWZpbmUgUFBQX0xDUCAweGMwMjEgIAorI2RlZmluZSBQUFBfUEFQIDB4YzAyMyAgCisjZGVmaW5lIFBQUF9MUVIgMHhjMDI1ICAKKyNkZWZpbmUgUFBQX0NIQVAgMHhjMjIzICAKKyNkZWZpbmUgUFBQX0NCQ1AgMHhjMDI5ICAKKworI2RlZmluZSBQUFBfSU5JVEZDUyAweGZmZmYgIAorI2RlZmluZSBQUFBfR09PREZDUyAweGYwYjggIAorCit0eXBlZGVmIF9fdTMyIGV4dF9hY2NtWzhdOworCitlbnVtIE5QbW9kZSB7CisgTlBNT0RFX1BBU1MsCisgTlBNT0RFX0RST1AsCisgTlBNT0RFX0VSUk9SLAorIE5QTU9ERV9RVUVVRQorfTsKKworc3RydWN0IHBwcHN0YXQgeworIF9fdTMyIHBwcF9kaXNjYXJkczsKKworIF9fdTMyIHBwcF9pYnl0ZXM7CisgX191MzIgcHBwX2lvY3RlY3RzOworIF9fdTMyIHBwcF9pcGFja2V0czsKKyBfX3UzMiBwcHBfaWVycm9yczsKKyBfX3UzMiBwcHBfaWxxcnM7CisKKyBfX3UzMiBwcHBfb2J5dGVzOworIF9fdTMyIHBwcF9vb2N0ZWN0czsKKyBfX3UzMiBwcHBfb3BhY2tldHM7CisgX191MzIgcHBwX29lcnJvcnM7CisgX191MzIgcHBwX29scXJzOworfTsKKworc3RydWN0IHZqc3RhdCB7CisgX191MzIgdmpzX3BhY2tldHM7CisgX191MzIgdmpzX2NvbXByZXNzZWQ7CisgX191MzIgdmpzX3NlYXJjaGVzOworIF9fdTMyIHZqc19taXNzZXM7CisgX191MzIgdmpzX3VuY29tcHJlc3NlZGluOworIF9fdTMyIHZqc19jb21wcmVzc2VkaW47CisgX191MzIgdmpzX2Vycm9yaW47CisgX191MzIgdmpzX3Rvc3NlZDsKK307CisKK3N0cnVjdCBjb21wc3RhdCB7CisgX191MzIgdW5jX2J5dGVzOworIF9fdTMyIHVuY19wYWNrZXRzOworIF9fdTMyIGNvbXBfYnl0ZXM7CisgX191MzIgY29tcF9wYWNrZXRzOworIF9fdTMyIGluY19ieXRlczsKKyBfX3UzMiBpbmNfcGFja2V0czsKKworIF9fdTMyIGluX2NvdW50OworIF9fdTMyIGJ5dGVzX291dDsKKworIGRvdWJsZSByYXRpbzsKK307CisKK3N0cnVjdCBwcHBfc3RhdHMgeworIHN0cnVjdCBwcHBzdGF0IHA7Cisgc3RydWN0IHZqc3RhdCB2ajsKK307CisKK3N0cnVjdCBwcHBfY29tcF9zdGF0cyB7Cisgc3RydWN0IGNvbXBzdGF0IGM7Cisgc3RydWN0IGNvbXBzdGF0IGQ7Cit9OworCitzdHJ1Y3QgcHBwX2lkbGUgeworIHRpbWVfdCB4bWl0X2lkbGU7CisgdGltZV90IHJlY3ZfaWRsZTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3ByY3RsLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcHJjdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzYzMWEyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3ByY3RsLmgKQEAgLTAsMCArMSw2MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfUFJDVExfSAorI2RlZmluZSBfTElOVVhfUFJDVExfSAorCisjZGVmaW5lIFBSX1NFVF9QREVBVEhTSUcgMSAgCisjZGVmaW5lIFBSX0dFVF9QREVBVEhTSUcgMiAgCisKKyNkZWZpbmUgUFJfR0VUX0RVTVBBQkxFIDMKKyNkZWZpbmUgUFJfU0VUX0RVTVBBQkxFIDQKKworI2RlZmluZSBQUl9HRVRfVU5BTElHTiA1CisjZGVmaW5lIFBSX1NFVF9VTkFMSUdOIDYKKyNkZWZpbmUgUFJfVU5BTElHTl9OT1BSSU5UIDEgIAorI2RlZmluZSBQUl9VTkFMSUdOX1NJR0JVUyAyICAKKworI2RlZmluZSBQUl9HRVRfS0VFUENBUFMgNworI2RlZmluZSBQUl9TRVRfS0VFUENBUFMgOAorCisjZGVmaW5lIFBSX0dFVF9GUEVNVSA5CisjZGVmaW5lIFBSX1NFVF9GUEVNVSAxMAorI2RlZmluZSBQUl9GUEVNVV9OT1BSSU5UIDEgIAorI2RlZmluZSBQUl9GUEVNVV9TSUdGUEUgMiAgCisKKyNkZWZpbmUgUFJfR0VUX0ZQRVhDIDExCisjZGVmaW5lIFBSX1NFVF9GUEVYQyAxMgorI2RlZmluZSBQUl9GUF9FWENfU1dfRU5BQkxFIDB4ODAgIAorI2RlZmluZSBQUl9GUF9FWENfRElWIDB4MDEwMDAwICAKKyNkZWZpbmUgUFJfRlBfRVhDX09WRiAweDAyMDAwMCAgCisjZGVmaW5lIFBSX0ZQX0VYQ19VTkQgMHgwNDAwMDAgIAorI2RlZmluZSBQUl9GUF9FWENfUkVTIDB4MDgwMDAwICAKKyNkZWZpbmUgUFJfRlBfRVhDX0lOViAweDEwMDAwMCAgCisjZGVmaW5lIFBSX0ZQX0VYQ19ESVNBQkxFRCAwICAKKyNkZWZpbmUgUFJfRlBfRVhDX05PTlJFQ09WIDEgIAorI2RlZmluZSBQUl9GUF9FWENfQVNZTkMgMiAgCisjZGVmaW5lIFBSX0ZQX0VYQ19QUkVDSVNFIDMgIAorCisjZGVmaW5lIFBSX0dFVF9USU1JTkcgMTMKKyNkZWZpbmUgUFJfU0VUX1RJTUlORyAxNAorI2RlZmluZSBQUl9USU1JTkdfU1RBVElTVElDQUwgMCAgCisjZGVmaW5lIFBSX1RJTUlOR19USU1FU1RBTVAgMSAgCisKKyNkZWZpbmUgUFJfU0VUX05BTUUgMTUgIAorI2RlZmluZSBQUl9HRVRfTkFNRSAxNiAgCisKKyNkZWZpbmUgUFJfR0VUX0VORElBTiAxOQorI2RlZmluZSBQUl9TRVRfRU5ESUFOIDIwCisjZGVmaW5lIFBSX0VORElBTl9CSUcgMAorI2RlZmluZSBQUl9FTkRJQU5fTElUVExFIDEgIAorI2RlZmluZSBQUl9FTkRJQU5fUFBDX0xJVFRMRSAyICAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcHJlZW1wdC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3ByZWVtcHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzAzZGQzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3ByZWVtcHQuaApAQCAtMCwwICsxLDMxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTElOVVhfUFJFRU1QVF9ICisjZGVmaW5lIF9fTElOVVhfUFJFRU1QVF9ICisKKyNpbmNsdWRlIDxsaW51eC90aHJlYWRfaW5mby5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKworI2RlZmluZSBhZGRfcHJlZW1wdF9jb3VudCh2YWwpIGRvIHsgcHJlZW1wdF9jb3VudCgpICs9ICh2YWwpOyB9IHdoaWxlICgwKQorI2RlZmluZSBzdWJfcHJlZW1wdF9jb3VudCh2YWwpIGRvIHsgcHJlZW1wdF9jb3VudCgpIC09ICh2YWwpOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIGluY19wcmVlbXB0X2NvdW50KCkgYWRkX3ByZWVtcHRfY291bnQoMSkKKyNkZWZpbmUgZGVjX3ByZWVtcHRfY291bnQoKSBzdWJfcHJlZW1wdF9jb3VudCgxKQorCisjZGVmaW5lIHByZWVtcHRfY291bnQoKSAoY3VycmVudF90aHJlYWRfaW5mbygpLT5wcmVlbXB0X2NvdW50KQorCisjZGVmaW5lIHByZWVtcHRfZGlzYWJsZSgpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcHJlZW1wdF9lbmFibGUoKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHByZWVtcHRfY2hlY2tfcmVzY2hlZCgpIGRvIHsgfSB3aGlsZSAoMCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcHJvY19mcy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3Byb2NfZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2IyMmFjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3Byb2NfZnMuaApAQCAtMCwwICsxLDc3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9QUk9DX0ZTX0gKKyNkZWZpbmUgX0xJTlVYX1BST0NfRlNfSAorCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisKKyNkZWZpbmUgRklSU1RfUFJPQ0VTU19FTlRSWSAyNTYKKworZW51bSB7CisgUFJPQ19ST09UX0lOTyA9IDEsCit9OworCisjZGVmaW5lIFBST0NfU1VQRVJfTUFHSUMgMHg5ZmEwCisKK3R5cGVkZWYgaW50IChyZWFkX3Byb2NfdCkoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCisgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSk7Cit0eXBlZGVmIGludCAod3JpdGVfcHJvY190KShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKyB1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKTsKK3R5cGVkZWYgaW50IChnZXRfaW5mb190KShjaGFyICosIGNoYXIgKiosIG9mZl90LCBpbnQpOworCitzdHJ1Y3QgcHJvY19kaXJfZW50cnkgeworIHVuc2lnbmVkIGludCBsb3dfaW5vOworIHVuc2lnbmVkIHNob3J0IG5hbWVsZW47CisgY29uc3QgY2hhciAqbmFtZTsKKyBtb2RlX3QgbW9kZTsKKyBubGlua190IG5saW5rOworIHVpZF90IHVpZDsKKyBnaWRfdCBnaWQ7CisgbG9mZl90IHNpemU7Cisgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgKiBwcm9jX2lvcHM7CisgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqIHByb2NfZm9wczsKKyBnZXRfaW5mb190ICpnZXRfaW5mbzsKKyBzdHJ1Y3QgbW9kdWxlICpvd25lcjsKKyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKm5leHQsICpwYXJlbnQsICpzdWJkaXI7Cisgdm9pZCAqZGF0YTsKKyByZWFkX3Byb2NfdCAqcmVhZF9wcm9jOworIHdyaXRlX3Byb2NfdCAqd3JpdGVfcHJvYzsKKyBhdG9taWNfdCBjb3VudDsKKyBpbnQgZGVsZXRlZDsKKyB2b2lkICpzZXQ7Cit9OworCitzdHJ1Y3Qga2NvcmVfbGlzdCB7Cisgc3RydWN0IGtjb3JlX2xpc3QgKm5leHQ7CisgdW5zaWduZWQgbG9uZyBhZGRyOworIHNpemVfdCBzaXplOworfTsKKworc3RydWN0IHZtY29yZSB7Cisgc3RydWN0IGxpc3RfaGVhZCBsaXN0OworIHVuc2lnbmVkIGxvbmcgbG9uZyBwYWRkcjsKKyB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZTsKKyBsb2ZmX3Qgb2Zmc2V0OworfTsKKworI2RlZmluZSBwcm9jX3Jvb3RfZHJpdmVyIE5VTEwKKyNkZWZpbmUgcHJvY19uZXQgTlVMTAorI2RlZmluZSBwcm9jX2J1cyBOVUxMCisKKyNkZWZpbmUgcHJvY19uZXRfZm9wc19jcmVhdGUobmFtZSwgbW9kZSwgZm9wcykgKHsgKHZvaWQpKG1vZGUpLCBOVUxMOyB9KQorI2RlZmluZSBwcm9jX25ldF9jcmVhdGUobmFtZSwgbW9kZSwgaW5mbykgKHsgKHZvaWQpKG1vZGUpLCBOVUxMOyB9KQorI2RlZmluZSByZW1vdmVfcHJvY19lbnRyeShuYW1lLCBwYXJlbnQpIGRvIHt9IHdoaWxlICgwKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wdHJhY2UuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wdHJhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzljMGM4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3B0cmFjZS5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX1BUUkFDRV9ICisjZGVmaW5lIF9MSU5VWF9QVFJBQ0VfSAorCisjZGVmaW5lIFBUUkFDRV9UUkFDRU1FIDAKKyNkZWZpbmUgUFRSQUNFX1BFRUtURVhUIDEKKyNkZWZpbmUgUFRSQUNFX1BFRUtEQVRBIDIKKyNkZWZpbmUgUFRSQUNFX1BFRUtVU1IgMworI2RlZmluZSBQVFJBQ0VfUE9LRVRFWFQgNAorI2RlZmluZSBQVFJBQ0VfUE9LRURBVEEgNQorI2RlZmluZSBQVFJBQ0VfUE9LRVVTUiA2CisjZGVmaW5lIFBUUkFDRV9DT05UIDcKKyNkZWZpbmUgUFRSQUNFX0tJTEwgOAorI2RlZmluZSBQVFJBQ0VfU0lOR0xFU1RFUCA5CisKKyNkZWZpbmUgUFRSQUNFX0FUVEFDSCAweDEwCisjZGVmaW5lIFBUUkFDRV9ERVRBQ0ggMHgxMQorCisjZGVmaW5lIFBUUkFDRV9TWVNDQUxMIDI0CisKKyNkZWZpbmUgUFRSQUNFX1NFVE9QVElPTlMgMHg0MjAwCisjZGVmaW5lIFBUUkFDRV9HRVRFVkVOVE1TRyAweDQyMDEKKyNkZWZpbmUgUFRSQUNFX0dFVFNJR0lORk8gMHg0MjAyCisjZGVmaW5lIFBUUkFDRV9TRVRTSUdJTkZPIDB4NDIwMworCisjZGVmaW5lIFBUUkFDRV9PX1RSQUNFU1lTR09PRCAweDAwMDAwMDAxCisjZGVmaW5lIFBUUkFDRV9PX1RSQUNFRk9SSyAweDAwMDAwMDAyCisjZGVmaW5lIFBUUkFDRV9PX1RSQUNFVkZPUksgMHgwMDAwMDAwNAorI2RlZmluZSBQVFJBQ0VfT19UUkFDRUNMT05FIDB4MDAwMDAwMDgKKyNkZWZpbmUgUFRSQUNFX09fVFJBQ0VFWEVDIDB4MDAwMDAwMTAKKyNkZWZpbmUgUFRSQUNFX09fVFJBQ0VWRk9SS0RPTkUgMHgwMDAwMDAyMAorI2RlZmluZSBQVFJBQ0VfT19UUkFDRUVYSVQgMHgwMDAwMDA0MAorCisjZGVmaW5lIFBUUkFDRV9PX01BU0sgMHgwMDAwMDA3ZgorCisjZGVmaW5lIFBUUkFDRV9FVkVOVF9GT1JLIDEKKyNkZWZpbmUgUFRSQUNFX0VWRU5UX1ZGT1JLIDIKKyNkZWZpbmUgUFRSQUNFX0VWRU5UX0NMT05FIDMKKyNkZWZpbmUgUFRSQUNFX0VWRU5UX0VYRUMgNAorI2RlZmluZSBQVFJBQ0VfRVZFTlRfVkZPUktfRE9ORSA1CisjZGVmaW5lIFBUUkFDRV9FVkVOVF9FWElUIDYKKworI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcWljMTE3LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcWljMTE3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA3NzA5MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9xaWMxMTcuaApAQCAtMCwwICsxLDEyMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfUUlDMTE3X0gKKyNkZWZpbmUgX1FJQzExN19ICisKK3R5cGVkZWYgZW51bSB7CisgUUlDX05PX0NPTU1BTkQgPSAwLAorIFFJQ19SRVNFVCA9IDEsCisgUUlDX1JFUE9SVF9ORVhUX0JJVCA9IDIsCisgUUlDX1BBVVNFID0gMywKKyBRSUNfTUlDUk9fU1RFUF9QQVVTRSA9IDQsCisgUUlDX0FMVEVSTkFURV9USU1FT1VUID0gNSwKKyBRSUNfUkVQT1JUX0RSSVZFX1NUQVRVUyA9IDYsCisgUUlDX1JFUE9SVF9FUlJPUl9DT0RFID0gNywKKyBRSUNfUkVQT1JUX0RSSVZFX0NPTkZJR1VSQVRJT04gPSA4LAorIFFJQ19SRVBPUlRfUk9NX1ZFUlNJT04gPSA5LAorIFFJQ19MT0dJQ0FMX0ZPUldBUkQgPSAxMCwKKyBRSUNfUEhZU0lDQUxfUkVWRVJTRSA9IDExLAorIFFJQ19QSFlTSUNBTF9GT1JXQVJEID0gMTIsCisgUUlDX1NFRUtfSEVBRF9UT19UUkFDSyA9IDEzLAorIFFJQ19TRUVLX0xPQURfUE9JTlQgPSAxNCwKKyBRSUNfRU5URVJfRk9STUFUX01PREUgPSAxNSwKKyBRSUNfV1JJVEVfUkVGRVJFTkNFX0JVUlNUID0gMTYsCisgUUlDX0VOVEVSX1ZFUklGWV9NT0RFID0gMTcsCisgUUlDX1NUT1BfVEFQRSA9IDE4LAorCisgUUlDX01JQ1JPX1NURVBfSEVBRF9VUCA9IDIxLAorIFFJQ19NSUNST19TVEVQX0hFQURfRE9XTiA9IDIyLAorIFFJQ19TT0ZUX1NFTEVDVCA9IDIzLAorIFFJQ19TT0ZUX0RFU0VMRUNUID0gMjQsCisgUUlDX1NLSVBfUkVWRVJTRSA9IDI1LAorIFFJQ19TS0lQX0ZPUldBUkQgPSAyNiwKKyBRSUNfU0VMRUNUX1JBVEUgPSAyNywKKworIFFJQ19FTlRFUl9ESUFHTk9TVElDXzEgPSAyOCwKKyBRSUNfRU5URVJfRElBR05PU1RJQ18yID0gMjksCisgUUlDX0VOVEVSX1BSSU1BUllfTU9ERSA9IDMwLAorCisgUUlDX1JFUE9SVF9WRU5ET1JfSUQgPSAzMiwKKyBRSUNfUkVQT1JUX1RBUEVfU1RBVFVTID0gMzMsCisgUUlDX1NLSVBfRVhURU5ERURfUkVWRVJTRSA9IDM0LAorIFFJQ19TS0lQX0VYVEVOREVEX0ZPUldBUkQgPSAzNSwKKyBRSUNfQ0FMSUJSQVRFX1RBUEVfTEVOR1RIID0gMzYsCisgUUlDX1JFUE9SVF9GT1JNQVRfU0VHTUVOVFMgPSAzNywKKyBRSUNfU0VUX0ZPUk1BVF9TRUdNRU5UUyA9IDM4LAorCisgUUlDX1BIQU5UT01fU0VMRUNUID0gNDYsCisgUUlDX1BIQU5UT01fREVTRUxFQ1QgPSA0NworfSBxaWMxMTdfY21kX3Q7CisKK3R5cGVkZWYgZW51bSB7CisgZGlzY3JldGlvbmFsID0gMCwgcmVxdWlyZWQsIGNjczEsIGNjczIKK30gcWljX2NvbXBhdGliaWxpdHk7CisKK3R5cGVkZWYgZW51bSB7CisgdW51c2VkLCBtb2RlLCBtb3Rpb24sIHJlcG9ydAorfSBjb21tYW5kX3R5cGVzOworCitzdHJ1Y3QgcWljMTE3X2NvbW1hbmRfdGFibGUgeworIGNoYXIgKm5hbWU7CisgX191OCBtYXNrOworIF9fdTggc3RhdGU7CisgX191OCBjbWRfdHlwZTsKKyBfX3U4IG5vbl9pbnRyOworIF9fdTggbGV2ZWw7Cit9OworCisjZGVmaW5lIFFJQzExN19DT01NQU5EUyB7ICAgICAgICAge05VTEwsIDB4MDAsIDB4MDAsIG1vZGUsIDAsIGRpc2NyZXRpb25hbH0sICAgeyJzb2Z0IHJlc2V0IiwgMHgwMCwgMHgwMCwgbW90aW9uLCAxLCByZXF1aXJlZH0sICAgeyJyZXBvcnQgbmV4dCBiaXQiLCAweDAwLCAweDAwLCByZXBvcnQsIDAsIHJlcXVpcmVkfSwgICB7InBhdXNlIiwgMHgzNiwgMHgyNCwgbW90aW9uLCAxLCByZXF1aXJlZH0sICAgeyJtaWNybyBzdGVwIHBhdXNlIiwgMHgzNiwgMHgyNCwgbW90aW9uLCAxLCByZXF1aXJlZH0sICAgeyJhbHRlcm5hdGUgY29tbWFuZCB0aW1lb3V0IiwgMHgwMCwgMHgwMCwgbW9kZSwgMCwgcmVxdWlyZWR9LCAgIHsicmVwb3J0IGRyaXZlIHN0YXR1cyIsIDB4MDAsIDB4MDAsIHJlcG9ydCwgMCwgcmVxdWlyZWR9LCAgIHsicmVwb3J0IGVycm9yIGNvZGUiLCAweDAxLCAweDAxLCByZXBvcnQsIDAsIHJlcXVpcmVkfSwgICB7InJlcG9ydCBkcml2ZSBjb25maWd1cmF0aW9uIiwweDAwLCAweDAwLCByZXBvcnQsIDAsIHJlcXVpcmVkfSwgICB7InJlcG9ydCByb20gdmVyc2lvbiIsIDB4MDAsIDB4MDAsIHJlcG9ydCwgMCwgcmVxdWlyZWR9LCAgIHsibG9naWNhbCBmb3J3YXJkIiwgMHgzNywgMHgyNSwgbW90aW9uLCAwLCByZXF1aXJlZH0sICAgeyJwaHlzaWNhbCByZXZlcnNlIiwgMHgxNywgMHgwNSwgbW90aW9uLCAwLCByZXF1aXJlZH0sICAgeyJwaHlzaWNhbCBmb3J3YXJkIiwgMHgxNywgMHgwNSwgbW90aW9uLCAwLCByZXF1aXJlZH0sICAgeyJzZWVrIGhlYWQgdG8gdHJhY2siLCAweDM3LCAweDI1LCBtb3Rpb24sIDAsIHJlcXVpcmVkfSwgICB7InNlZWsgbG9hZCBwb2ludCIsIDB4MTcsIDB4MDUsIG1vdGlvbiwgMSwgcmVxdWlyZWR9LCAgIHsiZW50ZXIgZm9ybWF0IG1vZGUiLCAweDFmLCAweDA1LCBtb2RlLCAwLCByZXF1aXJlZH0sICAgeyJ3cml0ZSByZWZlcmVuY2UgYnVyc3QiLCAweDFmLCAweDA1LCBtb3Rpb24sIDEsIHJlcXVpcmVkfSwgICB7ImVudGVyIHZlcmlmeSBtb2RlIiwgMHgzNywgMHgyNSwgbW9kZSwgMCwgcmVxdWlyZWR9LCAgIHsic3RvcCB0YXBlIiwgMHgwMCwgMHgwMCwgbW90aW9uLCAxLCByZXF1aXJlZH0sICAgeyJyZXNlcnZlZCAoMTkpIiwgMHgwMCwgMHgwMCwgdW51c2VkLCAwLCBkaXNjcmV0aW9uYWx9LCAgIHsicmVzZXJ2ZWQgKDIwKSIsIDB4MDAsIDB4MDAsIHVudXNlZCwgMCwgZGlzY3JldGlvbmFsfSwgICB7Im1pY3JvIHN0ZXAgaGVhZCB1cCIsIDB4MDIsIDB4MDAsIG1vdGlvbiwgMCwgcmVxdWlyZWR9LCAgIHsibWljcm8gc3RlcCBoZWFkIGRvd24iLCAweDAyLCAweDAwLCBtb3Rpb24sIDAsIHJlcXVpcmVkfSwgICB7InNvZnQgc2VsZWN0IiwgMHgwMCwgMHgwMCwgbW9kZSwgMCwgZGlzY3JldGlvbmFsfSwgICB7InNvZnQgZGVzZWxlY3QiLCAweDAwLCAweDAwLCBtb2RlLCAwLCBkaXNjcmV0aW9uYWx9LCAgIHsic2tpcCBzZWdtZW50cyByZXZlcnNlIiwgMHgzNiwgMHgyNCwgbW90aW9uLCAxLCByZXF1aXJlZH0sICAgeyJza2lwIHNlZ21lbnRzIGZvcndhcmQiLCAweDM2LCAweDI0LCBtb3Rpb24sIDEsIHJlcXVpcmVkfSwgICB7InNlbGVjdCByYXRlIG9yIGZvcm1hdCIsIDB4MDMsIDB4MDEsIG1vZGUsIDAsIHJlcXVpcmVkICB9LCAgIHsiZW50ZXIgZGlhZyBtb2RlIDEiLCAweDAwLCAweDAwLCBtb2RlLCAwLCBkaXNjcmV0aW9uYWx9LCAgIHsiZW50ZXIgZGlhZyBtb2RlIDIiLCAweDAwLCAweDAwLCBtb2RlLCAwLCBkaXNjcmV0aW9uYWx9LCAgIHsiZW50ZXIgcHJpbWFyeSBtb2RlIiwgMHgwMCwgMHgwMCwgbW9kZSwgMCwgcmVxdWlyZWR9LCAgIHsidmVuZG9yIHVuaXF1ZSAoMzEpIiwgMHgwMCwgMHgwMCwgdW51c2VkLCAwLCBkaXNjcmV0aW9uYWx9LCAgIHsicmVwb3J0IHZlbmRvciBpZCIsIDB4MDAsIDB4MDAsIHJlcG9ydCwgMCwgcmVxdWlyZWR9LCAgIHsicmVwb3J0IHRhcGUgc3RhdHVzIiwgMHgwNCwgMHgwNCwgcmVwb3J0LCAwLCBjY3MxfSwgICB7InNraXAgZXh0ZW5kZWQgcmV2ZXJzZSIsIDB4MzYsIDB4MjQsIG1vdGlvbiwgMSwgY2NzMX0sICAgeyJza2lwIGV4dGVuZGVkIGZvcndhcmQiLCAweDM2LCAweDI0LCBtb3Rpb24sIDEsIGNjczF9LCAgIHsiY2FsaWJyYXRlIHRhcGUgbGVuZ3RoIiwgMHgxNywgMHgwNSwgbW90aW9uLCAxLCBjY3MyfSwgICB7InJlcG9ydCBmb3JtYXQgc2VnbWVudHMiLCAweDE3LCAweDA1LCByZXBvcnQsIDAsIGNjczJ9LCAgIHsic2V0IGZvcm1hdCBzZWdtZW50cyIsIDB4MTcsIDB4MDUsIG1vZGUsIDAsIGNjczJ9LCAgIHsicmVzZXJ2ZWQgKDM5KSIsIDB4MDAsIDB4MDAsIHVudXNlZCwgMCwgZGlzY3JldGlvbmFsfSwgICB7InZlbmRvciB1bmlxdWUgKDQwKSIsIDB4MDAsIDB4MDAsIHVudXNlZCwgMCwgZGlzY3JldGlvbmFsfSwgICB7InZlbmRvciB1bmlxdWUgKDQxKSIsIDB4MDAsIDB4MDAsIHVudXNlZCwgMCwgZGlzY3JldGlvbmFsfSwgICB7InZlbmRvciB1bmlxdWUgKDQyKSIsIDB4MDAsIDB4MDAsIHVudXNlZCwgMCwgZGlzY3JldGlvbmFsfSwgICB7InZlbmRvciB1bmlxdWUgKDQzKSIsIDB4MDAsIDB4MDAsIHVudXNlZCwgMCwgZGlzY3JldGlvbmFsfSwgICB7InZlbmRvciB1bmlxdWUgKDQ0KSIsIDB4MDAsIDB4MDAsIHVudXNlZCwgMCwgZGlzY3JldGlvbmFsfSwgICB7InZlbmRvciB1bmlxdWUgKDQ1KSIsIDB4MDAsIDB4MDAsIHVudXNlZCwgMCwgZGlzY3JldGlvbmFsfSwgICB7InBoYW50b20gc2VsZWN0IiwgMHgwMCwgMHgwMCwgbW9kZSwgMCwgZGlzY3JldGlvbmFsfSwgICB7InBoYW50b20gZGVzZWxlY3QiLCAweDAwLCAweDAwLCBtb2RlLCAwLCBkaXNjcmV0aW9uYWx9LCB9CisKKyNkZWZpbmUgUUlDX1NUQVRVU19SRUFEWSAweDAxICAKKyNkZWZpbmUgUUlDX1NUQVRVU19FUlJPUiAweDAyICAKKyNkZWZpbmUgUUlDX1NUQVRVU19DQVJUUklER0VfUFJFU0VOVCAweDA0ICAKKyNkZWZpbmUgUUlDX1NUQVRVU19XUklURV9QUk9URUNUIDB4MDggIAorI2RlZmluZSBRSUNfU1RBVFVTX05FV19DQVJUUklER0UgMHgxMCAgCisjZGVmaW5lIFFJQ19TVEFUVVNfUkVGRVJFTkNFRCAweDIwICAKKyNkZWZpbmUgUUlDX1NUQVRVU19BVF9CT1QgMHg0MCAgCisjZGVmaW5lIFFJQ19TVEFUVVNfQVRfRU9UIDB4ODAgIAorCisjZGVmaW5lIFFJQ19DT05GSUdfUkFURV9NQVNLIDB4MTgKKyNkZWZpbmUgUUlDX0NPTkZJR19SQVRFX1NISUZUIDMKKyNkZWZpbmUgUUlDX0NPTkZJR19SQVRFXzI1MCAwCisjZGVmaW5lIFFJQ19DT05GSUdfUkFURV81MDAgMgorI2RlZmluZSBRSUNfQ09ORklHX1JBVEVfMTAwMCAzCisjZGVmaW5lIFFJQ19DT05GSUdfUkFURV8yMDAwIDEKKyNkZWZpbmUgUUlDX0NPTkZJR19SQVRFXzQwMDAgMCAgCisKKyNkZWZpbmUgUUlDX0NPTkZJR19MT05HIDB4NDAgIAorI2RlZmluZSBRSUNfQ09ORklHXzgwIDB4ODAgIAorCisjZGVmaW5lIFFJQ19UQVBFX1NURF9NQVNLIDB4MGYKKyNkZWZpbmUgUUlDX1RBUEVfUUlDNDAgMHgwMQorI2RlZmluZSBRSUNfVEFQRV9RSUM4MCAweDAyCisjZGVmaW5lIFFJQ19UQVBFX1FJQzMwMjAgMHgwMworI2RlZmluZSBRSUNfVEFQRV9RSUMzMDEwIDB4MDQKKworI2RlZmluZSBRSUNfVEFQRV9MRU5fTUFTSyAweDcwCisjZGVmaW5lIFFJQ19UQVBFXzIwNUZUIDB4MTAKKyNkZWZpbmUgUUlDX1RBUEVfMzA3RlQgMHgyMAorI2RlZmluZSBRSUNfVEFQRV9WQVJJQUJMRSAweDMwCisjZGVmaW5lIFFJQ19UQVBFXzExMDBGVCAweDQwCisjZGVmaW5lIFFJQ19UQVBFX0ZMRVggMHg2MAorCisjZGVmaW5lIFFJQ19UQVBFX1dJREUgMHg4MAorCisjZGVmaW5lIFFJQ19UT1BfVEFQRV9MRU4gMTUwMAorCit0eXBlZGVmIHN0cnVjdCB7CisgY2hhciAqbWVzc2FnZTsKKyB1bnNpZ25lZCBpbnQgZmF0YWw6MTsKK30gZnRhcGVfZXJyb3I7CisKKyNkZWZpbmUgUUlDMTE3X0VSUk9SUyB7ICAgIHsgIk5vIGVycm9yIiwgMCwgfSwgICAgeyAiQ29tbWFuZCBSZWNlaXZlZCB3aGlsZSBEcml2ZSBOb3QgUmVhZHkiLCAwLCB9LCAgICB7ICJDYXJ0cmlkZ2UgTm90IFByZXNlbnQgb3IgUmVtb3ZlZCIsIDEsIH0sICAgIHsgIk1vdG9yIFNwZWVkIEVycm9yIChub3Qgd2l0aGluIDElKSIsIDEsIH0sICAgIHsgIk1vdG9yIFNwZWVkIEZhdWx0IChqYW1tZWQsIG9yIGdyb3NzIHNwZWVkIGVycm9yIiwgMSwgfSwgICAgeyAiQ2FydHJpZGdlIFdyaXRlIFByb3RlY3RlZCIsIDEsIH0sICAgIHsgIlVuZGVmaW5lZCBvciBSZXNlcnZlZCBDb21tYW5kIENvZGUiLCAxLCB9LCAgICB7ICJJbGxlZ2FsIFRyYWNrIEFkZHJlc3MgU3BlY2lmaWVkIGZvciBTZWVrIiwgMSwgfSwgICAgeyAiSWxsZWdhbCBDb21tYW5kIGluIFJlcG9ydCBTdWJjb250ZXh0IiwgMCwgfSwgICAgeyAiSWxsZWdhbCBFbnRyeSBpbnRvIGEgRGlhZ25vc3RpYyBNb2RlIiwgMSwgfSwgICAgeyAiQnJva2VuIFRhcGUgRGV0ZWN0ZWQgKGJhc2VkIG9uIGhvbGUgc2Vuc29yKSIsIDEsIH0sICAgIHsgIldhcm5pbmctLVJlYWQgR2FpbiBTZXR0aW5nIEVycm9yIiwgMSwgfSwgICAgeyAiQ29tbWFuZCBSZWNlaXZlZCBXaGlsZSBFcnJvciBTdGF0dXMgUGVuZGluZyAob2JzKSIsIDEsIH0sICAgIHsgIkNvbW1hbmQgUmVjZWl2ZWQgV2hpbGUgTmV3IENhcnRyaWRnZSBQZW5kaW5nIiwgMSwgfSwgICAgeyAiQ29tbWFuZCBJbGxlZ2FsIG9yIFVuZGVmaW5lZCBpbiBQcmltYXJ5IE1vZGUiLCAxLCB9LCAgICB7ICJDb21tYW5kIElsbGVnYWwgb3IgVW5kZWZpbmVkIGluIEZvcm1hdCBNb2RlIiwgMSwgfSwgICAgeyAiQ29tbWFuZCBJbGxlZ2FsIG9yIFVuZGVmaW5lZCBpbiBWZXJpZnkgTW9kZSIsIDEsIH0sICAgIHsgIkxvZ2ljYWwgRm9yd2FyZCBOb3QgYXQgTG9naWNhbCBCT1Qgb3Igbm8gRm9ybWF0IFNlZ21lbnRzIGluIEZvcm1hdCBNb2RlIiwgMSwgfSwgICAgeyAiTG9naWNhbCBFT1QgQmVmb3JlIEFsbCBTZWdtZW50cyBnZW5lcmF0ZWQiLCAxLCB9LCAgICB7ICJDb21tYW5kIElsbGVnYWwgV2hlbiBDYXJ0cmlkZ2UgTm90IFJlZmVyZW5jZWQiLCAxLCB9LCAgICB7ICJTZWxmLURpYWdub3N0aWMgRmFpbGVkIChjYW5ub3QgYmUgY2xlYXJlZCkiLCAxLCB9LCAgICB7ICJXYXJuaW5nIEVFUFJPTSBOb3QgSW5pdGlhbGl6ZWQsIERlZmF1bHRzIFNldCIsIDEsIH0sICAgIHsgIkVFUFJPTSBDb3JydXB0ZWQgb3IgSGFyZHdhcmUgRmFpbHVyZSIsIDEsIH0sICAgIHsgIk1vdGlvbiBUaW1lLW91dCBFcnJvciIsIDEsIH0sICAgIHsgIkRhdGEgU2VnbWVudCBUb28gTG9uZyAtLSBMb2dpY2FsIEZvcndhcmQgb3IgUGF1c2UiLCAxLCB9LCAgICB7ICJUcmFuc21pdCBPdmVycnVuIChvYnMpIiwgMSwgfSwgICAgeyAiUG93ZXIgT24gUmVzZXQgT2NjdXJyZWQiLCAwLCB9LCAgICB7ICJTb2Z0d2FyZSBSZXNldCBPY2N1cnJlZCIsIDAsIH0sICAgIHsgIkRpYWdub3N0aWMgTW9kZSAxIEVycm9yIiwgMSwgfSwgICAgeyAiRGlhZ25vc3RpYyBNb2RlIDIgRXJyb3IiLCAxLCB9LCAgICB7ICJDb21tYW5kIFJlY2VpdmVkIER1cmluZyBOb24tSW50ZXJydXB0aWJsZSBQcm9jZXNzIiwgMSwgfSwgICAgeyAiUmF0ZSBvciBGb3JtYXQgU2VsZWN0aW9uIEVycm9yIiwgMSwgfSwgICAgeyAiSWxsZWdhbCBDb21tYW5kIFdoaWxlIGluIEhpZ2ggU3BlZWQgTW9kZSIsIDEsIH0sICAgIHsgIklsbGVnYWwgU2VlayBTZWdtZW50IFZhbHVlIiwgMSwgfSwgICAgeyAiSW52YWxpZCBNZWRpYSIsIDEsIH0sICAgIHsgIkhlYWQgUG9zaXRpb25pbmcgRmFpbHVyZSIsIDEsIH0sICAgIHsgIldyaXRlIFJlZmVyZW5jZSBCdXJzdCBGYWlsdXJlIiwgMSwgfSwgICAgeyAiUHJvbSBDb2RlIE1pc3NpbmciLCAxLCB9LCAgICB7ICJJbnZhbGlkIEZvcm1hdCIsIDEsIH0sICAgIHsgIkVPVC9CT1QgU3lzdGVtIEZhaWx1cmUiLCAxLCB9LCAgICB7ICJQcm9tIEEgQ2hlY2tzdW0gRXJyb3IiLCAxLCB9LCAgICB7ICJEcml2ZSBXYWtldXAgUmVzZXQgT2NjdXJyZWQiLCAxLCB9LCAgICB7ICJQcm9tIEIgQ2hlY2tzdW0gRXJyb3IiLCAxLCB9LCAgICB7ICJJbGxlZ2FsIEVudHJ5IGludG8gRm9ybWF0IE1vZGUiLCAxLCB9LCB9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3FueHR5cGVzLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcW54dHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2NkMjBjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3FueHR5cGVzLmgKQEAgLTAsMCArMSwyOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfUU5YNFRZUEVTX0gKKyNkZWZpbmUgX1FOWDRUWVBFU19ICisKK3R5cGVkZWYgX19sZTE2IHFueDRfbnh0bnRfdDsKK3R5cGVkZWYgX191OCBxbng0X2Z0eXBlX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyBfX2xlMzIgeHRudF9ibGs7CisgX19sZTMyIHh0bnRfc2l6ZTsKK30gcW54NF94dG50X3Q7CisKK3R5cGVkZWYgX19sZTE2IHFueDRfbW9kZV90OwordHlwZWRlZiBfX2xlMTYgcW54NF9tdWlkX3Q7Cit0eXBlZGVmIF9fbGUxNiBxbng0X21naWRfdDsKK3R5cGVkZWYgX19sZTMyIHFueDRfb2ZmX3Q7Cit0eXBlZGVmIF9fbGUxNiBxbng0X25saW5rX3Q7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3F1b3RhLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcXVvdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTRhZjVhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3F1b3RhLmgKQEAgLTAsMCArMSw4NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfUVVPVEFfCisjZGVmaW5lIF9MSU5VWF9RVU9UQV8KKworI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2RlZmluZSBfX0RRVU9UX1ZFUlNJT05fXyAiZHF1b3RfNi41LjEiCisjZGVmaW5lIF9fRFFVT1RfTlVNX1ZFUlNJT05fXyA2KjEwMDAwKzUqMTAwKzEKKwordHlwZWRlZiBfX2tlcm5lbF91aWQzMl90IHFpZF90OwordHlwZWRlZiBfX3U2NCBxc2l6ZV90OworCisjZGVmaW5lIFFVT1RBQkxPQ0tfQklUUyAxMAorI2RlZmluZSBRVU9UQUJMT0NLX1NJWkUgKDEgPDwgUVVPVEFCTE9DS19CSVRTKQorCisjZGVmaW5lIHFiMmtiKHgpICgoeCkgPDwgKFFVT1RBQkxPQ0tfQklUUy0xMCkpCisjZGVmaW5lIGtiMnFiKHgpICgoeCkgPj4gKFFVT1RBQkxPQ0tfQklUUy0xMCkpCisjZGVmaW5lIHRvcWIoeCkgKCgoeCkgKyBRVU9UQUJMT0NLX1NJWkUgLSAxKSA+PiBRVU9UQUJMT0NLX0JJVFMpCisKKyNkZWZpbmUgTUFYUVVPVEFTIDIKKyNkZWZpbmUgVVNSUVVPVEEgMCAgCisjZGVmaW5lIEdSUFFVT1RBIDEgIAorCisjZGVmaW5lIElOSVRRRk5BTUVTIHsgICAidXNlciIsICAgICAiZ3JvdXAiLCAgICAgInVuZGVmaW5lZCIsICB9OworCisjZGVmaW5lIFNVQkNNRE1BU0sgMHgwMGZmCisjZGVmaW5lIFNVQkNNRFNISUZUIDgKKyNkZWZpbmUgUUNNRChjbWQsIHR5cGUpICgoKGNtZCkgPDwgU1VCQ01EU0hJRlQpIHwgKCh0eXBlKSAmIFNVQkNNRE1BU0spKQorCisjZGVmaW5lIFFfU1lOQyAweDgwMDAwMSAgCisjZGVmaW5lIFFfUVVPVEFPTiAweDgwMDAwMiAgCisjZGVmaW5lIFFfUVVPVEFPRkYgMHg4MDAwMDMgIAorI2RlZmluZSBRX0dFVEZNVCAweDgwMDAwNCAgCisjZGVmaW5lIFFfR0VUSU5GTyAweDgwMDAwNSAgCisjZGVmaW5lIFFfU0VUSU5GTyAweDgwMDAwNiAgCisjZGVmaW5lIFFfR0VUUVVPVEEgMHg4MDAwMDcgIAorI2RlZmluZSBRX1NFVFFVT1RBIDB4ODAwMDA4ICAKKworI2RlZmluZSBRSUZfQkxJTUlUUyAxCisjZGVmaW5lIFFJRl9TUEFDRSAyCisjZGVmaW5lIFFJRl9JTElNSVRTIDQKKyNkZWZpbmUgUUlGX0lOT0RFUyA4CisjZGVmaW5lIFFJRl9CVElNRSAxNgorI2RlZmluZSBRSUZfSVRJTUUgMzIKKyNkZWZpbmUgUUlGX0xJTUlUUyAoUUlGX0JMSU1JVFMgfCBRSUZfSUxJTUlUUykKKyNkZWZpbmUgUUlGX1VTQUdFIChRSUZfU1BBQ0UgfCBRSUZfSU5PREVTKQorI2RlZmluZSBRSUZfVElNRVMgKFFJRl9CVElNRSB8IFFJRl9JVElNRSkKKyNkZWZpbmUgUUlGX0FMTCAoUUlGX0xJTUlUUyB8IFFJRl9VU0FHRSB8IFFJRl9USU1FUykKKworc3RydWN0IGlmX2RxYmxrIHsKKyBfX3U2NCBkcWJfYmhhcmRsaW1pdDsKKyBfX3U2NCBkcWJfYnNvZnRsaW1pdDsKKyBfX3U2NCBkcWJfY3Vyc3BhY2U7CisgX191NjQgZHFiX2loYXJkbGltaXQ7CisgX191NjQgZHFiX2lzb2Z0bGltaXQ7CisgX191NjQgZHFiX2N1cmlub2RlczsKKyBfX3U2NCBkcWJfYnRpbWU7CisgX191NjQgZHFiX2l0aW1lOworIF9fdTMyIGRxYl92YWxpZDsKK307CisKKyNkZWZpbmUgSUlGX0JHUkFDRSAxCisjZGVmaW5lIElJRl9JR1JBQ0UgMgorI2RlZmluZSBJSUZfRkxBR1MgNAorI2RlZmluZSBJSUZfQUxMIChJSUZfQkdSQUNFIHwgSUlGX0lHUkFDRSB8IElJRl9GTEFHUykKKworc3RydWN0IGlmX2RxaW5mbyB7CisgX191NjQgZHFpX2JncmFjZTsKKyBfX3U2NCBkcWlfaWdyYWNlOworIF9fdTMyIGRxaV9mbGFnczsKKyBfX3UzMiBkcWlfdmFsaWQ7Cit9OworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3JhaWQvbWQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9yYWlkL21kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYwOWMwNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9yYWlkL21kLmgKQEAgLTAsMCArMSw0OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTURfSAorI2RlZmluZSBfTURfSAorCisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2hkcmVnLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPG5ldC9jaGVja3N1bS5oPgorI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgorI2luY2x1ZGUgPGxpbnV4L21lbXBvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L2Jsa3BnLmg+CisjaW5jbHVkZSA8bGludXgvYmlvLmg+CisKKyNpbmNsdWRlIDxsaW51eC9yYWlkL21kX3AuaD4KKyNpbmNsdWRlIDxsaW51eC9yYWlkL21kX3UuaD4KKyNpbmNsdWRlIDxsaW51eC9yYWlkL21kX2suaD4KKworI2RlZmluZSBNRF9NQUpPUl9WRVJTSU9OIDAKKyNkZWZpbmUgTURfTUlOT1JfVkVSU0lPTiA5MAorCisjZGVmaW5lIE1EX1BBVENITEVWRUxfVkVSU0lPTiAzCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcmFpZC9tZF9rLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcmFpZC9tZF9rLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhiODU4YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9yYWlkL21kX2suaApAQCAtMCwwICsxLDE4NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTURfS19ICisjZGVmaW5lIF9NRF9LX0gKKworI2luY2x1ZGUgIi4uLy4uLy4uL2RyaXZlcnMvbWQvZG0tYmlvLWxpc3QuaCIKKworI2RlZmluZSBMRVZFTF9NVUxUSVBBVEggKC00KQorI2RlZmluZSBMRVZFTF9MSU5FQVIgKC0xKQorI2RlZmluZSBMRVZFTF9GQVVMVFkgKC01KQorCisjZGVmaW5lIExFVkVMX05PTkUgKC0xMDAwMDAwKQorCisjZGVmaW5lIE1heFNlY3RvciAofihzZWN0b3JfdCkwKQorI2RlZmluZSBNRF9USFJFQURfTkFNRV9NQVggMTQKKwordHlwZWRlZiBzdHJ1Y3QgbWRkZXZfcyBtZGRldl90OwordHlwZWRlZiBzdHJ1Y3QgbWRrX3JkZXZfcyBtZGtfcmRldl90OworCisjZGVmaW5lIE1BWF9NRF9ERVZTIDI1NiAgCisKKyNkZWZpbmUgTUFYX0NIVU5LX1NJWkUgKDE8PDMwKQorCitzdHJ1Y3QgbWRrX3JkZXZfcworeworIHN0cnVjdCBsaXN0X2hlYWQgc2FtZV9zZXQ7CisKKyBzZWN0b3JfdCBzaXplOworIG1kZGV2X3QgKm1kZGV2OworIHVuc2lnbmVkIGxvbmcgbGFzdF9ldmVudHM7CisKKyBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2OworCisgc3RydWN0IHBhZ2UgKnNiX3BhZ2U7CisgaW50IHNiX2xvYWRlZDsKKyBfX3U2NCBzYl9ldmVudHM7Cisgc2VjdG9yX3QgZGF0YV9vZmZzZXQ7Cisgc2VjdG9yX3Qgc2Jfb2Zmc2V0OworIGludCBzYl9zaXplOworIGludCBwcmVmZXJyZWRfbWlub3I7CisKKyBzdHJ1Y3Qga29iamVjdCBrb2JqOworCisgdW5zaWduZWQgbG9uZyBmbGFnczsKKyNkZWZpbmUgRmF1bHR5IDEgIAorI2RlZmluZSBJbl9zeW5jIDIgIAorI2RlZmluZSBXcml0ZU1vc3RseSA0ICAKKyNkZWZpbmUgQmFycmllcnNOb3RzdXBwIDUgIAorCisgaW50IGRlc2NfbnI7CisgaW50IHJhaWRfZGlzazsKKyBpbnQgc2F2ZWRfcmFpZF9kaXNrOworIHNlY3Rvcl90IHJlY292ZXJ5X29mZnNldDsKKworIGF0b21pY190IG5yX3BlbmRpbmc7CisgYXRvbWljX3QgcmVhZF9lcnJvcnM7CisgYXRvbWljX3QgY29ycmVjdGVkX2Vycm9yczsKK307CisKK3N0cnVjdCBtZGRldl9zCit7Cisgdm9pZCAqcHJpdmF0ZTsKKyBzdHJ1Y3QgbWRrX3BlcnNvbmFsaXR5ICpwZXJzOworIGRldl90IHVuaXQ7CisgaW50IG1kX21pbm9yOworIHN0cnVjdCBsaXN0X2hlYWQgZGlza3M7CisgaW50IHNiX2RpcnR5OworIGludCBybzsKKworIHN0cnVjdCBnZW5kaXNrICpnZW5kaXNrOworCisgc3RydWN0IGtvYmplY3Qga29iajsKKworIGludCBtYWpvcl92ZXJzaW9uLAorIG1pbm9yX3ZlcnNpb24sCisgcGF0Y2hfdmVyc2lvbjsKKyBpbnQgcGVyc2lzdGVudDsKKyBpbnQgY2h1bmtfc2l6ZTsKKyB0aW1lX3QgY3RpbWUsIHV0aW1lOworIGludCBsZXZlbCwgbGF5b3V0OworIGNoYXIgY2xldmVsWzE2XTsKKyBpbnQgcmFpZF9kaXNrczsKKyBpbnQgbWF4X2Rpc2tzOworIHNlY3Rvcl90IHNpemU7Cisgc2VjdG9yX3QgYXJyYXlfc2l6ZTsKKyBfX3U2NCBldmVudHM7CisKKyBjaGFyIHV1aWRbMTZdOworCisgc2VjdG9yX3QgcmVzaGFwZV9wb3NpdGlvbjsKKyBpbnQgZGVsdGFfZGlza3MsIG5ld19sZXZlbCwgbmV3X2xheW91dCwgbmV3X2NodW5rOworCisgc3RydWN0IG1ka190aHJlYWRfcyAqdGhyZWFkOworIHN0cnVjdCBtZGtfdGhyZWFkX3MgKnN5bmNfdGhyZWFkOworIHNlY3Rvcl90IGN1cnJfcmVzeW5jOworIHVuc2lnbmVkIGxvbmcgcmVzeW5jX21hcms7Cisgc2VjdG9yX3QgcmVzeW5jX21hcmtfY250OworIHNlY3Rvcl90IGN1cnJfbWFya19jbnQ7CisKKyBzZWN0b3JfdCByZXN5bmNfbWF4X3NlY3RvcnM7CisKKyBzZWN0b3JfdCByZXN5bmNfbWlzbWF0Y2hlczsKKworIHNlY3Rvcl90IHN1c3BlbmRfbG87Cisgc2VjdG9yX3Qgc3VzcGVuZF9oaTsKKworIGludCBzeW5jX3NwZWVkX21pbjsKKyBpbnQgc3luY19zcGVlZF9tYXg7CisKKyBpbnQgb2tfc3RhcnRfZGVncmFkZWQ7CisKKyNkZWZpbmUgTURfUkVDT1ZFUllfUlVOTklORyAwCisjZGVmaW5lIE1EX1JFQ09WRVJZX1NZTkMgMQorI2RlZmluZSBNRF9SRUNPVkVSWV9FUlIgMgorI2RlZmluZSBNRF9SRUNPVkVSWV9JTlRSIDMKKyNkZWZpbmUgTURfUkVDT1ZFUllfRE9ORSA0CisjZGVmaW5lIE1EX1JFQ09WRVJZX05FRURFRCA1CisjZGVmaW5lIE1EX1JFQ09WRVJZX1JFUVVFU1RFRCA2CisjZGVmaW5lIE1EX1JFQ09WRVJZX0NIRUNLIDcKKyNkZWZpbmUgTURfUkVDT1ZFUllfUkVTSEFQRSA4CisjZGVmaW5lIE1EX1JFQ09WRVJZX0ZST1pFTiA5CisKKyB1bnNpZ25lZCBsb25nIHJlY292ZXJ5OworCisgaW50IGluX3N5bmM7Cisgc3RydWN0IG11dGV4IHJlY29uZmlnX211dGV4OworIGF0b21pY190IGFjdGl2ZTsKKworIGludCBjaGFuZ2VkOworIGludCBkZWdyYWRlZDsKKyBpbnQgYmFycmllcnNfd29yazsKKyBzdHJ1Y3QgYmlvICpiaW9saXN0OworCisgYXRvbWljX3QgcmVjb3ZlcnlfYWN0aXZlOworIHdhaXRfcXVldWVfaGVhZF90IHJlY292ZXJ5X3dhaXQ7Cisgc2VjdG9yX3QgcmVjb3ZlcnlfY3A7CisKKyBzcGlubG9ja190IHdyaXRlX2xvY2s7Cisgd2FpdF9xdWV1ZV9oZWFkX3Qgc2Jfd2FpdDsKKyBhdG9taWNfdCBwZW5kaW5nX3dyaXRlczsKKworIHVuc2lnbmVkIGludCBzYWZlbW9kZTsKKyB1bnNpZ25lZCBpbnQgc2FmZW1vZGVfZGVsYXk7Cisgc3RydWN0IHRpbWVyX2xpc3Qgc2FmZW1vZGVfdGltZXI7CisgYXRvbWljX3Qgd3JpdGVzX3BlbmRpbmc7CisgcmVxdWVzdF9xdWV1ZV90ICpxdWV1ZTsKKworIGF0b21pY190IHdyaXRlX2JlaGluZDsKKyB1bnNpZ25lZCBpbnQgbWF4X3dyaXRlX2JlaGluZDsKKworIHN0cnVjdCBiaXRtYXAgKmJpdG1hcDsKKyBzdHJ1Y3QgZmlsZSAqYml0bWFwX2ZpbGU7CisgbG9uZyBiaXRtYXBfb2Zmc2V0OworIGxvbmcgZGVmYXVsdF9iaXRtYXBfb2Zmc2V0OworCisgc3RydWN0IGxpc3RfaGVhZCBhbGxfbWRkZXZzOworfTsKKworc3RydWN0IG1kX3N5c2ZzX2VudHJ5IHsKKyBzdHJ1Y3QgYXR0cmlidXRlIGF0dHI7Cisgc3NpemVfdCAoKnNob3cpKG1kZGV2X3QgKiwgY2hhciAqKTsKKyBzc2l6ZV90ICgqc3RvcmUpKG1kZGV2X3QgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOworfTsKKworI2RlZmluZSBJVEVSQVRFX1JERVZfR0VORVJJQyhoZWFkLHJkZXYsdG1wKSAgICAgZm9yICgodG1wKSA9IChoZWFkKS5uZXh0OyAgIChyZGV2KSA9IChsaXN0X2VudHJ5KCh0bXApLCBtZGtfcmRldl90LCBzYW1lX3NldCkpLCAgICh0bXApID0gKHRtcCktPm5leHQsICh0bXApLT5wcmV2ICE9ICYoaGVhZCkgICA7ICkKKyNkZWZpbmUgSVRFUkFURV9SREVWKG1kZGV2LHJkZXYsdG1wKSAgIElURVJBVEVfUkRFVl9HRU5FUklDKChtZGRldiktPmRpc2tzLHJkZXYsdG1wKQorI2RlZmluZSBJVEVSQVRFX1JERVZfUEVORElORyhyZGV2LHRtcCkgICBJVEVSQVRFX1JERVZfR0VORVJJQyhwZW5kaW5nX3JhaWRfZGlza3MscmRldix0bXApCisKKyNkZWZpbmUgVEhSRUFEX1dBS0VVUCAwCisKKyNkZWZpbmUgX193YWl0X2V2ZW50X2xvY2tfaXJxKHdxLCBjb25kaXRpb24sIGxvY2ssIGNtZCkgIGRvIHsgICB3YWl0X3F1ZXVlX3QgX193YWl0OyAgIGluaXRfd2FpdHF1ZXVlX2VudHJ5KCZfX3dhaXQsIGN1cnJlbnQpOyAgICAgYWRkX3dhaXRfcXVldWUoJndxLCAmX193YWl0KTsgICBmb3IgKDs7KSB7ICAgc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOyAgIGlmIChjb25kaXRpb24pICAgYnJlYWs7ICAgc3Bpbl91bmxvY2tfaXJxKCZsb2NrKTsgICBjbWQ7ICAgc2NoZWR1bGUoKTsgICBzcGluX2xvY2tfaXJxKCZsb2NrKTsgICB9ICAgY3VycmVudC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7ICAgcmVtb3ZlX3dhaXRfcXVldWUoJndxLCAmX193YWl0KTsgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgd2FpdF9ldmVudF9sb2NrX2lycSh3cSwgY29uZGl0aW9uLCBsb2NrLCBjbWQpICBkbyB7ICAgaWYgKGNvbmRpdGlvbikgICBicmVhazsgICBfX3dhaXRfZXZlbnRfbG9ja19pcnEod3EsIGNvbmRpdGlvbiwgbG9jaywgY21kKTsgIH0gd2hpbGUgKDApCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3JhaWQvbWRfcC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3JhaWQvbWRfcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiODU2YTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcmFpZC9tZF9wLmgKQEAgLTAsMCArMSwxMzUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX01EX1BfSAorI2RlZmluZSBfTURfUF9ICisKKyNkZWZpbmUgTURfUkVTRVJWRURfQllURVMgKDY0ICogMTAyNCkKKyNkZWZpbmUgTURfUkVTRVJWRURfU0VDVE9SUyAoTURfUkVTRVJWRURfQllURVMgLyA1MTIpCisjZGVmaW5lIE1EX1JFU0VSVkVEX0JMT0NLUyAoTURfUkVTRVJWRURfQllURVMgLyBCTE9DS19TSVpFKQorCisjZGVmaW5lIE1EX05FV19TSVpFX1NFQ1RPUlMoeCkgKCh4ICYgfihNRF9SRVNFUlZFRF9TRUNUT1JTIC0gMSkpIC0gTURfUkVTRVJWRURfU0VDVE9SUykKKyNkZWZpbmUgTURfTkVXX1NJWkVfQkxPQ0tTKHgpICgoeCAmIH4oTURfUkVTRVJWRURfQkxPQ0tTIC0gMSkpIC0gTURfUkVTRVJWRURfQkxPQ0tTKQorCisjZGVmaW5lIE1EX1NCX0JZVEVTIDQwOTYKKyNkZWZpbmUgTURfU0JfV09SRFMgKE1EX1NCX0JZVEVTIC8gNCkKKyNkZWZpbmUgTURfU0JfQkxPQ0tTIChNRF9TQl9CWVRFUyAvIEJMT0NLX1NJWkUpCisjZGVmaW5lIE1EX1NCX1NFQ1RPUlMgKE1EX1NCX0JZVEVTIC8gNTEyKQorCisjZGVmaW5lIE1EX1NCX0dFTkVSSUNfT0ZGU0VUIDAKKyNkZWZpbmUgTURfU0JfUEVSU09OQUxJVFlfT0ZGU0VUIDY0CisjZGVmaW5lIE1EX1NCX0RJU0tTX09GRlNFVCAxMjgKKyNkZWZpbmUgTURfU0JfREVTQ1JJUFRPUl9PRkZTRVQgOTkyCisKKyNkZWZpbmUgTURfU0JfR0VORVJJQ19DT05TVEFOVF9XT1JEUyAzMgorI2RlZmluZSBNRF9TQl9HRU5FUklDX1NUQVRFX1dPUkRTIDMyCisjZGVmaW5lIE1EX1NCX0dFTkVSSUNfV09SRFMgKE1EX1NCX0dFTkVSSUNfQ09OU1RBTlRfV09SRFMgKyBNRF9TQl9HRU5FUklDX1NUQVRFX1dPUkRTKQorI2RlZmluZSBNRF9TQl9QRVJTT05BTElUWV9XT1JEUyA2NAorI2RlZmluZSBNRF9TQl9ERVNDUklQVE9SX1dPUkRTIDMyCisjZGVmaW5lIE1EX1NCX0RJU0tTIDI3CisjZGVmaW5lIE1EX1NCX0RJU0tTX1dPUkRTIChNRF9TQl9ESVNLUypNRF9TQl9ERVNDUklQVE9SX1dPUkRTKQorI2RlZmluZSBNRF9TQl9SRVNFUlZFRF9XT1JEUyAoMTAyNCAtIE1EX1NCX0dFTkVSSUNfV09SRFMgLSBNRF9TQl9QRVJTT05BTElUWV9XT1JEUyAtIE1EX1NCX0RJU0tTX1dPUkRTIC0gTURfU0JfREVTQ1JJUFRPUl9XT1JEUykKKyNkZWZpbmUgTURfU0JfRVFVQUxfV09SRFMgKE1EX1NCX0dFTkVSSUNfV09SRFMgKyBNRF9TQl9QRVJTT05BTElUWV9XT1JEUyArIE1EX1NCX0RJU0tTX1dPUkRTKQorCisjZGVmaW5lIE1EX0RJU0tfRkFVTFRZIDAgIAorI2RlZmluZSBNRF9ESVNLX0FDVElWRSAxICAKKyNkZWZpbmUgTURfRElTS19TWU5DIDIgIAorI2RlZmluZSBNRF9ESVNLX1JFTU9WRUQgMyAgCisKKyNkZWZpbmUgTURfRElTS19XUklURU1PU1RMWSA5ICAKKwordHlwZWRlZiBzdHJ1Y3QgbWRwX2RldmljZV9kZXNjcmlwdG9yX3MgeworIF9fdTMyIG51bWJlcjsKKyBfX3UzMiBtYWpvcjsKKyBfX3UzMiBtaW5vcjsKKyBfX3UzMiByYWlkX2Rpc2s7CisgX191MzIgc3RhdGU7CisgX191MzIgcmVzZXJ2ZWRbTURfU0JfREVTQ1JJUFRPUl9XT1JEUyAtIDVdOworfSBtZHBfZGlza190OworCisjZGVmaW5lIE1EX1NCX01BR0lDIDB4YTkyYjRlZmMKKworI2RlZmluZSBNRF9TQl9DTEVBTiAwCisjZGVmaW5lIE1EX1NCX0VSUk9SUyAxCisKKyNkZWZpbmUgTURfU0JfQklUTUFQX1BSRVNFTlQgOCAgCisKK3R5cGVkZWYgc3RydWN0IG1kcF9zdXBlcmJsb2NrX3MgeworCisgX191MzIgbWRfbWFnaWM7CisgX191MzIgbWFqb3JfdmVyc2lvbjsKKyBfX3UzMiBtaW5vcl92ZXJzaW9uOworIF9fdTMyIHBhdGNoX3ZlcnNpb247CisgX191MzIgZ3ZhbGlkX3dvcmRzOworIF9fdTMyIHNldF91dWlkMDsKKyBfX3UzMiBjdGltZTsKKyBfX3UzMiBsZXZlbDsKKyBfX3UzMiBzaXplOworIF9fdTMyIG5yX2Rpc2tzOworIF9fdTMyIHJhaWRfZGlza3M7CisgX191MzIgbWRfbWlub3I7CisgX191MzIgbm90X3BlcnNpc3RlbnQ7CisgX191MzIgc2V0X3V1aWQxOworIF9fdTMyIHNldF91dWlkMjsKKyBfX3UzMiBzZXRfdXVpZDM7CisgX191MzIgZ3N0YXRlX2NyZXNlcnZlZFtNRF9TQl9HRU5FUklDX0NPTlNUQU5UX1dPUkRTIC0gMTZdOworCisgX191MzIgdXRpbWU7CisgX191MzIgc3RhdGU7CisgX191MzIgYWN0aXZlX2Rpc2tzOworIF9fdTMyIHdvcmtpbmdfZGlza3M7CisgX191MzIgZmFpbGVkX2Rpc2tzOworIF9fdTMyIHNwYXJlX2Rpc2tzOworIF9fdTMyIHNiX2NzdW07CisjaWZkZWYgX19CSUdfRU5ESUFOCisgX191MzIgZXZlbnRzX2hpOworIF9fdTMyIGV2ZW50c19sbzsKKyBfX3UzMiBjcF9ldmVudHNfaGk7CisgX191MzIgY3BfZXZlbnRzX2xvOworI2Vsc2UKKyBfX3UzMiBldmVudHNfbG87CisgX191MzIgZXZlbnRzX2hpOworIF9fdTMyIGNwX2V2ZW50c19sbzsKKyBfX3UzMiBjcF9ldmVudHNfaGk7CisjZW5kaWYKKyBfX3UzMiByZWNvdmVyeV9jcDsKKworIF9fdTY0IHJlc2hhcGVfcG9zaXRpb247CisgX191MzIgbmV3X2xldmVsOworIF9fdTMyIGRlbHRhX2Rpc2tzOworIF9fdTMyIG5ld19sYXlvdXQ7CisgX191MzIgbmV3X2NodW5rOworIF9fdTMyIGdzdGF0ZV9zcmVzZXJ2ZWRbTURfU0JfR0VORVJJQ19TVEFURV9XT1JEUyAtIDE4XTsKKworIF9fdTMyIGxheW91dDsKKyBfX3UzMiBjaHVua19zaXplOworIF9fdTMyIHJvb3RfcHY7CisgX191MzIgcm9vdF9ibG9jazsKKyBfX3UzMiBwc3RhdGVfcmVzZXJ2ZWRbTURfU0JfUEVSU09OQUxJVFlfV09SRFMgLSA0XTsKKworIG1kcF9kaXNrX3QgZGlza3NbTURfU0JfRElTS1NdOworCisgX191MzIgcmVzZXJ2ZWRbTURfU0JfUkVTRVJWRURfV09SRFNdOworCisgbWRwX2Rpc2tfdCB0aGlzX2Rpc2s7CisKK30gbWRwX3N1cGVyX3Q7CisKKyNkZWZpbmUgV3JpdGVNb3N0bHkxIDEgIAorCisjZGVmaW5lIE1EX0ZFQVRVUkVfQklUTUFQX09GRlNFVCAxCisjZGVmaW5lIE1EX0ZFQVRVUkVfUkVDT1ZFUllfT0ZGU0VUIDIgIAorI2RlZmluZSBNRF9GRUFUVVJFX1JFU0hBUEVfQUNUSVZFIDQKKworI2RlZmluZSBNRF9GRUFUVVJFX0FMTCAoMXwyfDQpCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcmFpZC9tZF91LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcmFpZC9tZF91LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY3MTE4NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9yYWlkL21kX3UuaApAQCAtMCwwICsxLDEwNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTURfVV9ICisjZGVmaW5lIF9NRF9VX0gKKworI2RlZmluZSBSQUlEX1ZFUlNJT04gX0lPUiAoTURfTUFKT1IsIDB4MTAsIG1kdV92ZXJzaW9uX3QpCisjZGVmaW5lIEdFVF9BUlJBWV9JTkZPIF9JT1IgKE1EX01BSk9SLCAweDExLCBtZHVfYXJyYXlfaW5mb190KQorI2RlZmluZSBHRVRfRElTS19JTkZPIF9JT1IgKE1EX01BSk9SLCAweDEyLCBtZHVfZGlza19pbmZvX3QpCisjZGVmaW5lIFBSSU5UX1JBSURfREVCVUcgX0lPIChNRF9NQUpPUiwgMHgxMykKKyNkZWZpbmUgUkFJRF9BVVRPUlVOIF9JTyAoTURfTUFKT1IsIDB4MTQpCisjZGVmaW5lIEdFVF9CSVRNQVBfRklMRSBfSU9SIChNRF9NQUpPUiwgMHgxNSwgbWR1X2JpdG1hcF9maWxlX3QpCisKKyNkZWZpbmUgQ0xFQVJfQVJSQVkgX0lPIChNRF9NQUpPUiwgMHgyMCkKKyNkZWZpbmUgQUREX05FV19ESVNLIF9JT1cgKE1EX01BSk9SLCAweDIxLCBtZHVfZGlza19pbmZvX3QpCisjZGVmaW5lIEhPVF9SRU1PVkVfRElTSyBfSU8gKE1EX01BSk9SLCAweDIyKQorI2RlZmluZSBTRVRfQVJSQVlfSU5GTyBfSU9XIChNRF9NQUpPUiwgMHgyMywgbWR1X2FycmF5X2luZm9fdCkKKyNkZWZpbmUgU0VUX0RJU0tfSU5GTyBfSU8gKE1EX01BSk9SLCAweDI0KQorI2RlZmluZSBXUklURV9SQUlEX0lORk8gX0lPIChNRF9NQUpPUiwgMHgyNSkKKyNkZWZpbmUgVU5QUk9URUNUX0FSUkFZIF9JTyAoTURfTUFKT1IsIDB4MjYpCisjZGVmaW5lIFBST1RFQ1RfQVJSQVkgX0lPIChNRF9NQUpPUiwgMHgyNykKKyNkZWZpbmUgSE9UX0FERF9ESVNLIF9JTyAoTURfTUFKT1IsIDB4MjgpCisjZGVmaW5lIFNFVF9ESVNLX0ZBVUxUWSBfSU8gKE1EX01BSk9SLCAweDI5KQorI2RlZmluZSBIT1RfR0VORVJBVEVfRVJST1IgX0lPIChNRF9NQUpPUiwgMHgyYSkKKyNkZWZpbmUgU0VUX0JJVE1BUF9GSUxFIF9JT1cgKE1EX01BSk9SLCAweDJiLCBpbnQpCisKKyNkZWZpbmUgUlVOX0FSUkFZIF9JT1cgKE1EX01BSk9SLCAweDMwLCBtZHVfcGFyYW1fdCkKKyNkZWZpbmUgU1RBUlRfQVJSQVkgX0lPIChNRF9NQUpPUiwgMHgzMSkKKyNkZWZpbmUgU1RPUF9BUlJBWSBfSU8gKE1EX01BSk9SLCAweDMyKQorI2RlZmluZSBTVE9QX0FSUkFZX1JPIF9JTyAoTURfTUFKT1IsIDB4MzMpCisjZGVmaW5lIFJFU1RBUlRfQVJSQVlfUlcgX0lPIChNRF9NQUpPUiwgMHgzNCkKKwordHlwZWRlZiBzdHJ1Y3QgbWR1X3ZlcnNpb25fcyB7CisgaW50IG1ham9yOworIGludCBtaW5vcjsKKyBpbnQgcGF0Y2hsZXZlbDsKK30gbWR1X3ZlcnNpb25fdDsKKwordHlwZWRlZiBzdHJ1Y3QgbWR1X2FycmF5X2luZm9fcyB7CisKKyBpbnQgbWFqb3JfdmVyc2lvbjsKKyBpbnQgbWlub3JfdmVyc2lvbjsKKyBpbnQgcGF0Y2hfdmVyc2lvbjsKKyBpbnQgY3RpbWU7CisgaW50IGxldmVsOworIGludCBzaXplOworIGludCBucl9kaXNrczsKKyBpbnQgcmFpZF9kaXNrczsKKyBpbnQgbWRfbWlub3I7CisgaW50IG5vdF9wZXJzaXN0ZW50OworCisgaW50IHV0aW1lOworIGludCBzdGF0ZTsKKyBpbnQgYWN0aXZlX2Rpc2tzOworIGludCB3b3JraW5nX2Rpc2tzOworIGludCBmYWlsZWRfZGlza3M7CisgaW50IHNwYXJlX2Rpc2tzOworCisgaW50IGxheW91dDsKKyBpbnQgY2h1bmtfc2l6ZTsKKworfSBtZHVfYXJyYXlfaW5mb190OworCit0eXBlZGVmIHN0cnVjdCBtZHVfZGlza19pbmZvX3MgeworCisgaW50IG51bWJlcjsKKyBpbnQgbWFqb3I7CisgaW50IG1pbm9yOworIGludCByYWlkX2Rpc2s7CisgaW50IHN0YXRlOworCit9IG1kdV9kaXNrX2luZm9fdDsKKwordHlwZWRlZiBzdHJ1Y3QgbWR1X3N0YXJ0X2luZm9fcyB7CisKKyBpbnQgbWFqb3I7CisgaW50IG1pbm9yOworIGludCByYWlkX2Rpc2s7CisgaW50IHN0YXRlOworCit9IG1kdV9zdGFydF9pbmZvX3Q7CisKK3R5cGVkZWYgc3RydWN0IG1kdV9iaXRtYXBfZmlsZV9zCit7CisgY2hhciBwYXRobmFtZVs0MDk2XTsKK30gbWR1X2JpdG1hcF9maWxlX3Q7CisKK3R5cGVkZWYgc3RydWN0IG1kdV9wYXJhbV9zCit7CisgaW50IHBlcnNvbmFsaXR5OworIGludCBjaHVua19zaXplOworIGludCBtYXhfZmF1bHQ7Cit9IG1kdV9wYXJhbV90OworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3JhaWQveG9yLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcmFpZC94b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWU5ZjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3JhaWQveG9yLmgKQEAgLTAsMCArMSwzMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfWE9SX0gKKyNkZWZpbmUgX1hPUl9ICisKKyNpbmNsdWRlIDxsaW51eC9yYWlkL21kLmg+CisKKyNkZWZpbmUgTUFYX1hPUl9CTE9DS1MgNQorCitzdHJ1Y3QgeG9yX2Jsb2NrX3RlbXBsYXRlIHsKKyBzdHJ1Y3QgeG9yX2Jsb2NrX3RlbXBsYXRlICpuZXh0OworIGNvbnN0IGNoYXIgKm5hbWU7CisgaW50IHNwZWVkOworIHZvaWQgKCpkb18yKSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nICosIHVuc2lnbmVkIGxvbmcgKik7Cisgdm9pZCAoKmRvXzMpKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcgKiwgdW5zaWduZWQgbG9uZyAqLAorIHVuc2lnbmVkIGxvbmcgKik7Cisgdm9pZCAoKmRvXzQpKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcgKiwgdW5zaWduZWQgbG9uZyAqLAorIHVuc2lnbmVkIGxvbmcgKiwgdW5zaWduZWQgbG9uZyAqKTsKKyB2b2lkICgqZG9fNSkodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyAqLCB1bnNpZ25lZCBsb25nICosCisgdW5zaWduZWQgbG9uZyAqLCB1bnNpZ25lZCBsb25nICosIHVuc2lnbmVkIGxvbmcgKik7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9yYW5kb20uaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9yYW5kb20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmJlZjk3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3JhbmRvbS5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX1JBTkRPTV9ICisjZGVmaW5lIF9MSU5VWF9SQU5ET01fSAorCisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKworI2RlZmluZSBSTkRHRVRFTlRDTlQgX0lPUiggJ1InLCAweDAwLCBpbnQgKQorCisjZGVmaW5lIFJOREFERFRPRU5UQ05UIF9JT1coICdSJywgMHgwMSwgaW50ICkKKworI2RlZmluZSBSTkRHRVRQT09MIF9JT1IoICdSJywgMHgwMiwgaW50IFsyXSApCisKKyNkZWZpbmUgUk5EQURERU5UUk9QWSBfSU9XKCAnUicsIDB4MDMsIGludCBbMl0gKQorCisjZGVmaW5lIFJORFpBUEVOVENOVCBfSU8oICdSJywgMHgwNCApCisKKyNkZWZpbmUgUk5EQ0xFQVJQT09MIF9JTyggJ1InLCAweDA2ICkKKworc3RydWN0IHJhbmRfcG9vbF9pbmZvIHsKKyBpbnQgZW50cm9weV9jb3VudDsKKyBpbnQgYnVmX3NpemU7CisgX191MzIgYnVmWzBdOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcmJ0cmVlLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcmJ0cmVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE0ZmZlOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9yYnRyZWUuaApAQCAtMCwwICsxLDQ1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9SQlRSRUVfSAorI2RlZmluZSBfTElOVVhfUkJUUkVFX0gKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorCitzdHJ1Y3QgcmJfbm9kZQoreworIHVuc2lnbmVkIGxvbmcgcmJfcGFyZW50X2NvbG9yOworI2RlZmluZSBSQl9SRUQgMAorI2RlZmluZSBSQl9CTEFDSyAxCisgc3RydWN0IHJiX25vZGUgKnJiX3JpZ2h0OworIHN0cnVjdCByYl9ub2RlICpyYl9sZWZ0OworfSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKHNpemVvZihsb25nKSkpKTsKKworc3RydWN0IHJiX3Jvb3QKK3sKKyBzdHJ1Y3QgcmJfbm9kZSAqcmJfbm9kZTsKK307CisKKyNkZWZpbmUgcmJfcGFyZW50KHIpICgoc3RydWN0IHJiX25vZGUgKikoKHIpLT5yYl9wYXJlbnRfY29sb3IgJiB+MykpCisjZGVmaW5lIHJiX2NvbG9yKHIpICgociktPnJiX3BhcmVudF9jb2xvciAmIDEpCisjZGVmaW5lIHJiX2lzX3JlZChyKSAoIXJiX2NvbG9yKHIpKQorI2RlZmluZSByYl9pc19ibGFjayhyKSByYl9jb2xvcihyKQorI2RlZmluZSByYl9zZXRfcmVkKHIpIGRvIHsgKHIpLT5yYl9wYXJlbnRfY29sb3IgJj0gfjE7IH0gd2hpbGUgKDApCisjZGVmaW5lIHJiX3NldF9ibGFjayhyKSBkbyB7IChyKS0+cmJfcGFyZW50X2NvbG9yIHw9IDE7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgUkJfUk9PVCAoc3RydWN0IHJiX3Jvb3QpIHsgTlVMTCwgfQorI2RlZmluZSByYl9lbnRyeShwdHIsIHR5cGUsIG1lbWJlcikgY29udGFpbmVyX29mKHB0ciwgdHlwZSwgbWVtYmVyKQorI2RlZmluZSBSQl9FTVBUWV9ST09UKHJvb3QpICgocm9vdCktPnJiX25vZGUgPT0gTlVMTCkKKyNkZWZpbmUgUkJfRU1QVFlfTk9ERShub2RlKSAocmJfcGFyZW50KG5vZGUpICE9IG5vZGUpCisjZGVmaW5lIFJCX0NMRUFSX05PREUobm9kZSkgKHJiX3NldF9wYXJlbnQobm9kZSwgbm9kZSkpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3JjdXBkYXRlLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcmN1cGRhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTQ3YTRkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3JjdXBkYXRlLmgKQEAgLTAsMCArMSwxNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0xJTlVYX1JDVVBEQVRFX0gKKyNkZWZpbmUgX19MSU5VWF9SQ1VQREFURV9ICisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3JlYm9vdC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3JlYm9vdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxMGZmMTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcmVib290LmgKQEAgLTAsMCArMSwzMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfUkVCT09UX0gKKyNkZWZpbmUgX0xJTlVYX1JFQk9PVF9ICisKKyNkZWZpbmUgTElOVVhfUkVCT09UX01BR0lDMSAweGZlZTFkZWFkCisjZGVmaW5lIExJTlVYX1JFQk9PVF9NQUdJQzIgNjcyMjc0NzkzCisjZGVmaW5lIExJTlVYX1JFQk9PVF9NQUdJQzJBIDg1MDcyMjc4CisjZGVmaW5lIExJTlVYX1JFQk9PVF9NQUdJQzJCIDM2OTM2NzQ0OAorI2RlZmluZSBMSU5VWF9SRUJPT1RfTUFHSUMyQyA1Mzc5OTMyMTYKKworI2RlZmluZSBMSU5VWF9SRUJPT1RfQ01EX1JFU1RBUlQgMHgwMTIzNDU2NworI2RlZmluZSBMSU5VWF9SRUJPT1RfQ01EX0hBTFQgMHhDREVGMDEyMworI2RlZmluZSBMSU5VWF9SRUJPT1RfQ01EX0NBRF9PTiAweDg5QUJDREVGCisjZGVmaW5lIExJTlVYX1JFQk9PVF9DTURfQ0FEX09GRiAweDAwMDAwMDAwCisjZGVmaW5lIExJTlVYX1JFQk9PVF9DTURfUE9XRVJfT0ZGIDB4NDMyMUZFREMKKyNkZWZpbmUgTElOVVhfUkVCT09UX0NNRF9SRVNUQVJUMiAweEExQjJDM0Q0CisjZGVmaW5lIExJTlVYX1JFQk9PVF9DTURfU1dfU1VTUEVORCAweEQwMDBGQ0UyCisjZGVmaW5lIExJTlVYX1JFQk9PVF9DTURfS0VYRUMgMHg0NTU4NDU0MworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9yZWxheS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3JlbGF5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDlmNzIxOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9yZWxheS5oCkBAIC0wLDAgKzEsOTEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX1JFTEFZX0gKKyNkZWZpbmUgX0xJTlVYX1JFTEFZX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KKworI2RlZmluZSBGSVhfU0laRSh4KSAoKCgoeCkgLSAxKSAmIFBBR0VfTUFTSykgKyBQQUdFX1NJWkUpCisKKyNkZWZpbmUgUkVMQVlGU19DSEFOTkVMX1ZFUlNJT04gNgorCitzdHJ1Y3QgcmNoYW5fYnVmCit7Cisgdm9pZCAqc3RhcnQ7Cisgdm9pZCAqZGF0YTsKKyBzaXplX3Qgb2Zmc2V0OworIHNpemVfdCBzdWJidWZzX3Byb2R1Y2VkOworIHNpemVfdCBzdWJidWZzX2NvbnN1bWVkOworIHN0cnVjdCByY2hhbiAqY2hhbjsKKyB3YWl0X3F1ZXVlX2hlYWRfdCByZWFkX3dhaXQ7Cisgc3RydWN0IHdvcmtfc3RydWN0IHdha2VfcmVhZGVyczsKKyBzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7Cisgc3RydWN0IGtyZWYga3JlZjsKKyBzdHJ1Y3QgcGFnZSAqKnBhZ2VfYXJyYXk7CisgdW5zaWduZWQgaW50IHBhZ2VfY291bnQ7CisgdW5zaWduZWQgaW50IGZpbmFsaXplZDsKKyBzaXplX3QgKnBhZGRpbmc7Cisgc2l6ZV90IHByZXZfcGFkZGluZzsKKyBzaXplX3QgYnl0ZXNfY29uc3VtZWQ7CisgdW5zaWduZWQgaW50IGNwdTsKK30gX19fX2NhY2hlbGluZV9hbGlnbmVkOworCitzdHJ1Y3QgcmNoYW4KK3sKKyB1MzIgdmVyc2lvbjsKKyBzaXplX3Qgc3ViYnVmX3NpemU7Cisgc2l6ZV90IG5fc3ViYnVmczsKKyBzaXplX3QgYWxsb2Nfc2l6ZTsKKyBzdHJ1Y3QgcmNoYW5fY2FsbGJhY2tzICpjYjsKKyBzdHJ1Y3Qga3JlZiBrcmVmOworIHZvaWQgKnByaXZhdGVfZGF0YTsKKyBzaXplX3QgbGFzdF90b29iaWc7Cisgc3RydWN0IHJjaGFuX2J1ZiAqYnVmW05SX0NQVVNdOworfTsKKworc3RydWN0IHJjaGFuX2NhbGxiYWNrcworeworCisgaW50ICgqc3ViYnVmX3N0YXJ0KSAoc3RydWN0IHJjaGFuX2J1ZiAqYnVmLAorIHZvaWQgKnN1YmJ1ZiwKKyB2b2lkICpwcmV2X3N1YmJ1ZiwKKyBzaXplX3QgcHJldl9wYWRkaW5nKTsKKworIHZvaWQgKCpidWZfbWFwcGVkKShzdHJ1Y3QgcmNoYW5fYnVmICpidWYsCisgc3RydWN0IGZpbGUgKmZpbHApOworCisgdm9pZCAoKmJ1Zl91bm1hcHBlZCkoc3RydWN0IHJjaGFuX2J1ZiAqYnVmLAorIHN0cnVjdCBmaWxlICpmaWxwKTsKKworIHN0cnVjdCBkZW50cnkgKigqY3JlYXRlX2J1Zl9maWxlKShjb25zdCBjaGFyICpmaWxlbmFtZSwKKyBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsCisgaW50IG1vZGUsCisgc3RydWN0IHJjaGFuX2J1ZiAqYnVmLAorIGludCAqaXNfZ2xvYmFsKTsKKworIGludCAoKnJlbW92ZV9idWZfZmlsZSkoc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKK307CisKK3N0cnVjdCByY2hhbiAqcmVsYXlfb3Blbihjb25zdCBjaGFyICpiYXNlX2ZpbGVuYW1lLAorIHN0cnVjdCBkZW50cnkgKnBhcmVudCwKKyBzaXplX3Qgc3ViYnVmX3NpemUsCisgc2l6ZV90IG5fc3ViYnVmcywKKyBzdHJ1Y3QgcmNoYW5fY2FsbGJhY2tzICpjYik7CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcmVzb3VyY2UuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9yZXNvdXJjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0N2I1MjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcmVzb3VyY2UuaApAQCAtMCwwICsxLDYwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9SRVNPVVJDRV9ICisjZGVmaW5lIF9MSU5VWF9SRVNPVVJDRV9ICisKKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisKK3N0cnVjdCB0YXNrX3N0cnVjdDsKKworI2RlZmluZSBSVVNBR0VfU0VMRiAwCisjZGVmaW5lIFJVU0FHRV9DSElMRFJFTiAoLTEpCisjZGVmaW5lIFJVU0FHRV9CT1RIICgtMikgIAorCitzdHJ1Y3QgcnVzYWdlIHsKKyBzdHJ1Y3QgdGltZXZhbCBydV91dGltZTsKKyBzdHJ1Y3QgdGltZXZhbCBydV9zdGltZTsKKyBsb25nIHJ1X21heHJzczsKKyBsb25nIHJ1X2l4cnNzOworIGxvbmcgcnVfaWRyc3M7CisgbG9uZyBydV9pc3JzczsKKyBsb25nIHJ1X21pbmZsdDsKKyBsb25nIHJ1X21hamZsdDsKKyBsb25nIHJ1X25zd2FwOworIGxvbmcgcnVfaW5ibG9jazsKKyBsb25nIHJ1X291YmxvY2s7CisgbG9uZyBydV9tc2dzbmQ7CisgbG9uZyBydV9tc2dyY3Y7CisgbG9uZyBydV9uc2lnbmFsczsKKyBsb25nIHJ1X252Y3N3OworIGxvbmcgcnVfbml2Y3N3OworfTsKKworc3RydWN0IHJsaW1pdCB7CisgdW5zaWduZWQgbG9uZyBybGltX2N1cjsKKyB1bnNpZ25lZCBsb25nIHJsaW1fbWF4OworfTsKKworI2RlZmluZSBQUklPX01JTiAoLTIwKQorI2RlZmluZSBQUklPX01BWCAyMAorCisjZGVmaW5lIFBSSU9fUFJPQ0VTUyAwCisjZGVmaW5lIFBSSU9fUEdSUCAxCisjZGVmaW5lIFBSSU9fVVNFUiAyCisKKyNkZWZpbmUgX1NUS19MSU0gKDgqMTAyNCoxMDI0KQorCisjZGVmaW5lIE1MT0NLX0xJTUlUICg4ICogUEFHRV9TSVpFKQorCisjaW5jbHVkZSA8YXNtL3Jlc291cmNlLmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3JvdXRlLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcm91dGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGI4NzQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3JvdXRlLmgKQEAgLTAsMCArMSw0OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfUk9VVEVfSAorI2RlZmluZSBfTElOVVhfUk9VVEVfSAorCisjaW5jbHVkZSA8bGludXgvaWYuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorCitzdHJ1Y3QgcnRlbnRyeQoreworIHVuc2lnbmVkIGxvbmcgcnRfcGFkMTsKKyBzdHJ1Y3Qgc29ja2FkZHIgcnRfZHN0OworIHN0cnVjdCBzb2NrYWRkciBydF9nYXRld2F5OworIHN0cnVjdCBzb2NrYWRkciBydF9nZW5tYXNrOworIHVuc2lnbmVkIHNob3J0IHJ0X2ZsYWdzOworIHNob3J0IHJ0X3BhZDI7CisgdW5zaWduZWQgbG9uZyBydF9wYWQzOworIHZvaWQgKnJ0X3BhZDQ7Cisgc2hvcnQgcnRfbWV0cmljOworIGNoYXIgX191c2VyICpydF9kZXY7CisgdW5zaWduZWQgbG9uZyBydF9tdHU7CisjZGVmaW5lIHJ0X21zcyBydF9tdHUgIAorIHVuc2lnbmVkIGxvbmcgcnRfd2luZG93OworIHVuc2lnbmVkIHNob3J0IHJ0X2lydHQ7Cit9OworCisjZGVmaW5lIFJURl9VUCAweDAwMDEgIAorI2RlZmluZSBSVEZfR0FURVdBWSAweDAwMDIgIAorI2RlZmluZSBSVEZfSE9TVCAweDAwMDQgIAorI2RlZmluZSBSVEZfUkVJTlNUQVRFIDB4MDAwOCAgCisjZGVmaW5lIFJURl9EWU5BTUlDIDB4MDAxMCAgCisjZGVmaW5lIFJURl9NT0RJRklFRCAweDAwMjAgIAorI2RlZmluZSBSVEZfTVRVIDB4MDA0MCAgCisjZGVmaW5lIFJURl9NU1MgUlRGX01UVSAgCisjZGVmaW5lIFJURl9XSU5ET1cgMHgwMDgwICAKKyNkZWZpbmUgUlRGX0lSVFQgMHgwMTAwICAKKyNkZWZpbmUgUlRGX1JFSkVDVCAweDAyMDAgIAorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3J0Yy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3J0Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1MWJjNzEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcnRjLmgKQEAgLTAsMCArMSw3MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfUlRDX0hfCisjZGVmaW5lIF9MSU5VWF9SVENfSF8KKworc3RydWN0IHJ0Y190aW1lIHsKKyBpbnQgdG1fc2VjOworIGludCB0bV9taW47CisgaW50IHRtX2hvdXI7CisgaW50IHRtX21kYXk7CisgaW50IHRtX21vbjsKKyBpbnQgdG1feWVhcjsKKyBpbnQgdG1fd2RheTsKKyBpbnQgdG1feWRheTsKKyBpbnQgdG1faXNkc3Q7Cit9OworCitzdHJ1Y3QgcnRjX3drYWxybSB7CisgdW5zaWduZWQgY2hhciBlbmFibGVkOworIHVuc2lnbmVkIGNoYXIgcGVuZGluZzsKKyBzdHJ1Y3QgcnRjX3RpbWUgdGltZTsKK307CisKK3N0cnVjdCBydGNfcGxsX2luZm8geworIGludCBwbGxfY3RybDsKKyBpbnQgcGxsX3ZhbHVlOworIGludCBwbGxfbWF4OworIGludCBwbGxfbWluOworIGludCBwbGxfcG9zbXVsdDsKKyBpbnQgcGxsX25lZ211bHQ7CisgbG9uZyBwbGxfY2xvY2s7Cit9OworCisjZGVmaW5lIFJUQ19BSUVfT04gX0lPKCdwJywgMHgwMSkgIAorI2RlZmluZSBSVENfQUlFX09GRiBfSU8oJ3AnLCAweDAyKSAgCisjZGVmaW5lIFJUQ19VSUVfT04gX0lPKCdwJywgMHgwMykgIAorI2RlZmluZSBSVENfVUlFX09GRiBfSU8oJ3AnLCAweDA0KSAgCisjZGVmaW5lIFJUQ19QSUVfT04gX0lPKCdwJywgMHgwNSkgIAorI2RlZmluZSBSVENfUElFX09GRiBfSU8oJ3AnLCAweDA2KSAgCisjZGVmaW5lIFJUQ19XSUVfT04gX0lPKCdwJywgMHgwZikgIAorI2RlZmluZSBSVENfV0lFX09GRiBfSU8oJ3AnLCAweDEwKSAgCisKKyNkZWZpbmUgUlRDX0FMTV9TRVQgX0lPVygncCcsIDB4MDcsIHN0cnVjdCBydGNfdGltZSkgIAorI2RlZmluZSBSVENfQUxNX1JFQUQgX0lPUigncCcsIDB4MDgsIHN0cnVjdCBydGNfdGltZSkgIAorI2RlZmluZSBSVENfUkRfVElNRSBfSU9SKCdwJywgMHgwOSwgc3RydWN0IHJ0Y190aW1lKSAgCisjZGVmaW5lIFJUQ19TRVRfVElNRSBfSU9XKCdwJywgMHgwYSwgc3RydWN0IHJ0Y190aW1lKSAgCisjZGVmaW5lIFJUQ19JUlFQX1JFQUQgX0lPUigncCcsIDB4MGIsIHVuc2lnbmVkIGxvbmcpICAKKyNkZWZpbmUgUlRDX0lSUVBfU0VUIF9JT1coJ3AnLCAweDBjLCB1bnNpZ25lZCBsb25nKSAgCisjZGVmaW5lIFJUQ19FUE9DSF9SRUFEIF9JT1IoJ3AnLCAweDBkLCB1bnNpZ25lZCBsb25nKSAgCisjZGVmaW5lIFJUQ19FUE9DSF9TRVQgX0lPVygncCcsIDB4MGUsIHVuc2lnbmVkIGxvbmcpICAKKworI2RlZmluZSBSVENfV0tBTE1fU0VUIF9JT1coJ3AnLCAweDBmLCBzdHJ1Y3QgcnRjX3drYWxybSkgCisjZGVmaW5lIFJUQ19XS0FMTV9SRCBfSU9SKCdwJywgMHgxMCwgc3RydWN0IHJ0Y193a2Fscm0pIAorCisjZGVmaW5lIFJUQ19QTExfR0VUIF9JT1IoJ3AnLCAweDExLCBzdHJ1Y3QgcnRjX3BsbF9pbmZvKSAgCisjZGVmaW5lIFJUQ19QTExfU0VUIF9JT1coJ3AnLCAweDEyLCBzdHJ1Y3QgcnRjX3BsbF9pbmZvKSAgCisKKyNkZWZpbmUgUlRDX0lSUUYgMHg4MCAgCisjZGVmaW5lIFJUQ19QRiAweDQwCisjZGVmaW5lIFJUQ19BRiAweDIwCisjZGVmaW5lIFJUQ19VRiAweDEwCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3J0bmV0bGluay5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3J0bmV0bGluay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkY2ZmYWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcnRuZXRsaW5rLmgKQEAgLTAsMCArMSw3MjMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19MSU5VWF9SVE5FVExJTktfSAorI2RlZmluZSBfX0xJTlVYX1JUTkVUTElOS19ICisKKyNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+CisKK2VudW0geworIFJUTV9CQVNFID0gMTYsCisjZGVmaW5lIFJUTV9CQVNFIFJUTV9CQVNFCisKKyBSVE1fTkVXTElOSyA9IDE2LAorI2RlZmluZSBSVE1fTkVXTElOSyBSVE1fTkVXTElOSworIFJUTV9ERUxMSU5LLAorI2RlZmluZSBSVE1fREVMTElOSyBSVE1fREVMTElOSworIFJUTV9HRVRMSU5LLAorI2RlZmluZSBSVE1fR0VUTElOSyBSVE1fR0VUTElOSworIFJUTV9TRVRMSU5LLAorI2RlZmluZSBSVE1fU0VUTElOSyBSVE1fU0VUTElOSworCisgUlRNX05FV0FERFIgPSAyMCwKKyNkZWZpbmUgUlRNX05FV0FERFIgUlRNX05FV0FERFIKKyBSVE1fREVMQUREUiwKKyNkZWZpbmUgUlRNX0RFTEFERFIgUlRNX0RFTEFERFIKKyBSVE1fR0VUQUREUiwKKyNkZWZpbmUgUlRNX0dFVEFERFIgUlRNX0dFVEFERFIKKworIFJUTV9ORVdST1VURSA9IDI0LAorI2RlZmluZSBSVE1fTkVXUk9VVEUgUlRNX05FV1JPVVRFCisgUlRNX0RFTFJPVVRFLAorI2RlZmluZSBSVE1fREVMUk9VVEUgUlRNX0RFTFJPVVRFCisgUlRNX0dFVFJPVVRFLAorI2RlZmluZSBSVE1fR0VUUk9VVEUgUlRNX0dFVFJPVVRFCisKKyBSVE1fTkVXTkVJR0ggPSAyOCwKKyNkZWZpbmUgUlRNX05FV05FSUdIIFJUTV9ORVdORUlHSAorIFJUTV9ERUxORUlHSCwKKyNkZWZpbmUgUlRNX0RFTE5FSUdIIFJUTV9ERUxORUlHSAorIFJUTV9HRVRORUlHSCwKKyNkZWZpbmUgUlRNX0dFVE5FSUdIIFJUTV9HRVRORUlHSAorCisgUlRNX05FV1JVTEUgPSAzMiwKKyNkZWZpbmUgUlRNX05FV1JVTEUgUlRNX05FV1JVTEUKKyBSVE1fREVMUlVMRSwKKyNkZWZpbmUgUlRNX0RFTFJVTEUgUlRNX0RFTFJVTEUKKyBSVE1fR0VUUlVMRSwKKyNkZWZpbmUgUlRNX0dFVFJVTEUgUlRNX0dFVFJVTEUKKworIFJUTV9ORVdRRElTQyA9IDM2LAorI2RlZmluZSBSVE1fTkVXUURJU0MgUlRNX05FV1FESVNDCisgUlRNX0RFTFFESVNDLAorI2RlZmluZSBSVE1fREVMUURJU0MgUlRNX0RFTFFESVNDCisgUlRNX0dFVFFESVNDLAorI2RlZmluZSBSVE1fR0VUUURJU0MgUlRNX0dFVFFESVNDCisKKyBSVE1fTkVXVENMQVNTID0gNDAsCisjZGVmaW5lIFJUTV9ORVdUQ0xBU1MgUlRNX05FV1RDTEFTUworIFJUTV9ERUxUQ0xBU1MsCisjZGVmaW5lIFJUTV9ERUxUQ0xBU1MgUlRNX0RFTFRDTEFTUworIFJUTV9HRVRUQ0xBU1MsCisjZGVmaW5lIFJUTV9HRVRUQ0xBU1MgUlRNX0dFVFRDTEFTUworCisgUlRNX05FV1RGSUxURVIgPSA0NCwKKyNkZWZpbmUgUlRNX05FV1RGSUxURVIgUlRNX05FV1RGSUxURVIKKyBSVE1fREVMVEZJTFRFUiwKKyNkZWZpbmUgUlRNX0RFTFRGSUxURVIgUlRNX0RFTFRGSUxURVIKKyBSVE1fR0VUVEZJTFRFUiwKKyNkZWZpbmUgUlRNX0dFVFRGSUxURVIgUlRNX0dFVFRGSUxURVIKKworIFJUTV9ORVdBQ1RJT04gPSA0OCwKKyNkZWZpbmUgUlRNX05FV0FDVElPTiBSVE1fTkVXQUNUSU9OCisgUlRNX0RFTEFDVElPTiwKKyNkZWZpbmUgUlRNX0RFTEFDVElPTiBSVE1fREVMQUNUSU9OCisgUlRNX0dFVEFDVElPTiwKKyNkZWZpbmUgUlRNX0dFVEFDVElPTiBSVE1fR0VUQUNUSU9OCisKKyBSVE1fTkVXUFJFRklYID0gNTIsCisjZGVmaW5lIFJUTV9ORVdQUkVGSVggUlRNX05FV1BSRUZJWAorIFJUTV9HRVRQUkVGSVggPSA1NCwKKyNkZWZpbmUgUlRNX0dFVFBSRUZJWCBSVE1fR0VUUFJFRklYCisKKyBSVE1fR0VUTVVMVElDQVNUID0gNTgsCisjZGVmaW5lIFJUTV9HRVRNVUxUSUNBU1QgUlRNX0dFVE1VTFRJQ0FTVAorCisgUlRNX0dFVEFOWUNBU1QgPSA2MiwKKyNkZWZpbmUgUlRNX0dFVEFOWUNBU1QgUlRNX0dFVEFOWUNBU1QKKworIFJUTV9ORVdORUlHSFRCTCA9IDY0LAorI2RlZmluZSBSVE1fTkVXTkVJR0hUQkwgUlRNX05FV05FSUdIVEJMCisgUlRNX0dFVE5FSUdIVEJMID0gNjYsCisjZGVmaW5lIFJUTV9HRVRORUlHSFRCTCBSVE1fR0VUTkVJR0hUQkwKKyBSVE1fU0VUTkVJR0hUQkwsCisjZGVmaW5lIFJUTV9TRVRORUlHSFRCTCBSVE1fU0VUTkVJR0hUQkwKKworIF9fUlRNX01BWCwKKyNkZWZpbmUgUlRNX01BWCAoKChfX1JUTV9NQVggKyAzKSAmIH4zKSAtIDEpCit9OworCisjZGVmaW5lIFJUTV9OUl9NU0dUWVBFUyAoUlRNX01BWCArIDEgLSBSVE1fQkFTRSkKKyNkZWZpbmUgUlRNX05SX0ZBTUlMSUVTIChSVE1fTlJfTVNHVFlQRVMgPj4gMikKKyNkZWZpbmUgUlRNX0ZBTShjbWQpICgoKGNtZCkgLSBSVE1fQkFTRSkgPj4gMikKKworc3RydWN0IHJ0YXR0cgoreworIHVuc2lnbmVkIHNob3J0IHJ0YV9sZW47CisgdW5zaWduZWQgc2hvcnQgcnRhX3R5cGU7Cit9OworCisjZGVmaW5lIFJUQV9BTElHTlRPIDQKKyNkZWZpbmUgUlRBX0FMSUdOKGxlbikgKCAoKGxlbikrUlRBX0FMSUdOVE8tMSkgJiB+KFJUQV9BTElHTlRPLTEpICkKKyNkZWZpbmUgUlRBX09LKHJ0YSxsZW4pICgobGVuKSA+PSAoaW50KXNpemVvZihzdHJ1Y3QgcnRhdHRyKSAmJiAgIChydGEpLT5ydGFfbGVuID49IHNpemVvZihzdHJ1Y3QgcnRhdHRyKSAmJiAgIChydGEpLT5ydGFfbGVuIDw9IChsZW4pKQorI2RlZmluZSBSVEFfTkVYVChydGEsYXR0cmxlbikgKChhdHRybGVuKSAtPSBSVEFfQUxJR04oKHJ0YSktPnJ0YV9sZW4pLCAgIChzdHJ1Y3QgcnRhdHRyKikoKChjaGFyKikocnRhKSkgKyBSVEFfQUxJR04oKHJ0YSktPnJ0YV9sZW4pKSkKKyNkZWZpbmUgUlRBX0xFTkdUSChsZW4pIChSVEFfQUxJR04oc2l6ZW9mKHN0cnVjdCBydGF0dHIpKSArIChsZW4pKQorI2RlZmluZSBSVEFfU1BBQ0UobGVuKSBSVEFfQUxJR04oUlRBX0xFTkdUSChsZW4pKQorI2RlZmluZSBSVEFfREFUQShydGEpICgodm9pZCopKCgoY2hhciopKHJ0YSkpICsgUlRBX0xFTkdUSCgwKSkpCisjZGVmaW5lIFJUQV9QQVlMT0FEKHJ0YSkgKChpbnQpKChydGEpLT5ydGFfbGVuKSAtIFJUQV9MRU5HVEgoMCkpCisKK3N0cnVjdCBydG1zZworeworIHVuc2lnbmVkIGNoYXIgcnRtX2ZhbWlseTsKKyB1bnNpZ25lZCBjaGFyIHJ0bV9kc3RfbGVuOworIHVuc2lnbmVkIGNoYXIgcnRtX3NyY19sZW47CisgdW5zaWduZWQgY2hhciBydG1fdG9zOworCisgdW5zaWduZWQgY2hhciBydG1fdGFibGU7CisgdW5zaWduZWQgY2hhciBydG1fcHJvdG9jb2w7CisgdW5zaWduZWQgY2hhciBydG1fc2NvcGU7CisgdW5zaWduZWQgY2hhciBydG1fdHlwZTsKKworIHVuc2lnbmVkIHJ0bV9mbGFnczsKK307CisKK2VudW0KK3sKKyBSVE5fVU5TUEVDLAorIFJUTl9VTklDQVNULAorIFJUTl9MT0NBTCwKKyBSVE5fQlJPQURDQVNULAorIFJUTl9BTllDQVNULAorIFJUTl9NVUxUSUNBU1QsCisgUlROX0JMQUNLSE9MRSwKKyBSVE5fVU5SRUFDSEFCTEUsCisgUlROX1BST0hJQklULAorIFJUTl9USFJPVywKKyBSVE5fTkFULAorIFJUTl9YUkVTT0xWRSwKKyBfX1JUTl9NQVgKK307CisKKyNkZWZpbmUgUlROX01BWCAoX19SVE5fTUFYIC0gMSkKKworI2RlZmluZSBSVFBST1RfVU5TUEVDIDAKKyNkZWZpbmUgUlRQUk9UX1JFRElSRUNUIDEgIAorI2RlZmluZSBSVFBST1RfS0VSTkVMIDIgIAorI2RlZmluZSBSVFBST1RfQk9PVCAzICAKKyNkZWZpbmUgUlRQUk9UX1NUQVRJQyA0ICAKKworI2RlZmluZSBSVFBST1RfR0FURUQgOCAgCisjZGVmaW5lIFJUUFJPVF9SQSA5ICAKKyNkZWZpbmUgUlRQUk9UX01SVCAxMCAgCisjZGVmaW5lIFJUUFJPVF9aRUJSQSAxMSAgCisjZGVmaW5lIFJUUFJPVF9CSVJEIDEyICAKKyNkZWZpbmUgUlRQUk9UX0ROUk9VVEVEIDEzICAKKyNkZWZpbmUgUlRQUk9UX1hPUlAgMTQgIAorI2RlZmluZSBSVFBST1RfTlRLIDE1ICAKKworZW51bSBydF9zY29wZV90Cit7CisgUlRfU0NPUEVfVU5JVkVSU0U9MCwKKworIFJUX1NDT1BFX1NJVEU9MjAwLAorIFJUX1NDT1BFX0xJTks9MjUzLAorIFJUX1NDT1BFX0hPU1Q9MjU0LAorIFJUX1NDT1BFX05PV0hFUkU9MjU1Cit9OworCisjZGVmaW5lIFJUTV9GX05PVElGWSAweDEwMCAgCisjZGVmaW5lIFJUTV9GX0NMT05FRCAweDIwMCAgCisjZGVmaW5lIFJUTV9GX0VRVUFMSVpFIDB4NDAwICAKKyNkZWZpbmUgUlRNX0ZfUFJFRklYIDB4ODAwICAKKworZW51bSBydF9jbGFzc190Cit7CisgUlRfVEFCTEVfVU5TUEVDPTAsCisKKyBSVF9UQUJMRV9ERUZBVUxUPTI1MywKKyBSVF9UQUJMRV9NQUlOPTI1NCwKKyBSVF9UQUJMRV9MT0NBTD0yNTUsCisgX19SVF9UQUJMRV9NQVgKK307CisjZGVmaW5lIFJUX1RBQkxFX01BWCAoX19SVF9UQUJMRV9NQVggLSAxKQorCitlbnVtIHJ0YXR0cl90eXBlX3QKK3sKKyBSVEFfVU5TUEVDLAorIFJUQV9EU1QsCisgUlRBX1NSQywKKyBSVEFfSUlGLAorIFJUQV9PSUYsCisgUlRBX0dBVEVXQVksCisgUlRBX1BSSU9SSVRZLAorIFJUQV9QUkVGU1JDLAorIFJUQV9NRVRSSUNTLAorIFJUQV9NVUxUSVBBVEgsCisgUlRBX1BST1RPSU5GTywKKyBSVEFfRkxPVywKKyBSVEFfQ0FDSEVJTkZPLAorIFJUQV9TRVNTSU9OLAorIFJUQV9NUF9BTEdPLAorIF9fUlRBX01BWAorfTsKKworI2RlZmluZSBSVEFfTUFYIChfX1JUQV9NQVggLSAxKQorCisjZGVmaW5lIFJUTV9SVEEocikgKChzdHJ1Y3QgcnRhdHRyKikoKChjaGFyKikocikpICsgTkxNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCBydG1zZykpKSkKKyNkZWZpbmUgUlRNX1BBWUxPQUQobikgTkxNU0dfUEFZTE9BRChuLHNpemVvZihzdHJ1Y3QgcnRtc2cpKQorCitzdHJ1Y3QgcnRuZXh0aG9wCit7CisgdW5zaWduZWQgc2hvcnQgcnRuaF9sZW47CisgdW5zaWduZWQgY2hhciBydG5oX2ZsYWdzOworIHVuc2lnbmVkIGNoYXIgcnRuaF9ob3BzOworIGludCBydG5oX2lmaW5kZXg7Cit9OworCisjZGVmaW5lIFJUTkhfRl9ERUFEIDEgIAorI2RlZmluZSBSVE5IX0ZfUEVSVkFTSVZFIDIgIAorI2RlZmluZSBSVE5IX0ZfT05MSU5LIDQgIAorCisjZGVmaW5lIFJUTkhfQUxJR05UTyA0CisjZGVmaW5lIFJUTkhfQUxJR04obGVuKSAoICgobGVuKStSVE5IX0FMSUdOVE8tMSkgJiB+KFJUTkhfQUxJR05UTy0xKSApCisjZGVmaW5lIFJUTkhfT0socnRuaCxsZW4pICgocnRuaCktPnJ0bmhfbGVuID49IHNpemVvZihzdHJ1Y3QgcnRuZXh0aG9wKSAmJiAgICgoaW50KShydG5oKS0+cnRuaF9sZW4pIDw9IChsZW4pKQorI2RlZmluZSBSVE5IX05FWFQocnRuaCkgKChzdHJ1Y3QgcnRuZXh0aG9wKikoKChjaGFyKikocnRuaCkpICsgUlROSF9BTElHTigocnRuaCktPnJ0bmhfbGVuKSkpCisjZGVmaW5lIFJUTkhfTEVOR1RIKGxlbikgKFJUTkhfQUxJR04oc2l6ZW9mKHN0cnVjdCBydG5leHRob3ApKSArIChsZW4pKQorI2RlZmluZSBSVE5IX1NQQUNFKGxlbikgUlROSF9BTElHTihSVE5IX0xFTkdUSChsZW4pKQorI2RlZmluZSBSVE5IX0RBVEEocnRuaCkgKChzdHJ1Y3QgcnRhdHRyKikoKChjaGFyKikocnRuaCkpICsgUlROSF9MRU5HVEgoMCkpKQorCitzdHJ1Y3QgcnRhX2NhY2hlaW5mbworeworIF9fdTMyIHJ0YV9jbG50cmVmOworIF9fdTMyIHJ0YV9sYXN0dXNlOworIF9fczMyIHJ0YV9leHBpcmVzOworIF9fdTMyIHJ0YV9lcnJvcjsKKyBfX3UzMiBydGFfdXNlZDsKKworI2RlZmluZSBSVE5FVExJTktfSEFWRV9QRUVSSU5GTyAxCisgX191MzIgcnRhX2lkOworIF9fdTMyIHJ0YV90czsKKyBfX3UzMiBydGFfdHNhZ2U7Cit9OworCitlbnVtCit7CisgUlRBWF9VTlNQRUMsCisjZGVmaW5lIFJUQVhfVU5TUEVDIFJUQVhfVU5TUEVDCisgUlRBWF9MT0NLLAorI2RlZmluZSBSVEFYX0xPQ0sgUlRBWF9MT0NLCisgUlRBWF9NVFUsCisjZGVmaW5lIFJUQVhfTVRVIFJUQVhfTVRVCisgUlRBWF9XSU5ET1csCisjZGVmaW5lIFJUQVhfV0lORE9XIFJUQVhfV0lORE9XCisgUlRBWF9SVFQsCisjZGVmaW5lIFJUQVhfUlRUIFJUQVhfUlRUCisgUlRBWF9SVFRWQVIsCisjZGVmaW5lIFJUQVhfUlRUVkFSIFJUQVhfUlRUVkFSCisgUlRBWF9TU1RIUkVTSCwKKyNkZWZpbmUgUlRBWF9TU1RIUkVTSCBSVEFYX1NTVEhSRVNICisgUlRBWF9DV05ELAorI2RlZmluZSBSVEFYX0NXTkQgUlRBWF9DV05ECisgUlRBWF9BRFZNU1MsCisjZGVmaW5lIFJUQVhfQURWTVNTIFJUQVhfQURWTVNTCisgUlRBWF9SRU9SREVSSU5HLAorI2RlZmluZSBSVEFYX1JFT1JERVJJTkcgUlRBWF9SRU9SREVSSU5HCisgUlRBWF9IT1BMSU1JVCwKKyNkZWZpbmUgUlRBWF9IT1BMSU1JVCBSVEFYX0hPUExJTUlUCisgUlRBWF9JTklUQ1dORCwKKyNkZWZpbmUgUlRBWF9JTklUQ1dORCBSVEFYX0lOSVRDV05ECisgUlRBWF9GRUFUVVJFUywKKyNkZWZpbmUgUlRBWF9GRUFUVVJFUyBSVEFYX0ZFQVRVUkVTCisgX19SVEFYX01BWAorfTsKKworI2RlZmluZSBSVEFYX01BWCAoX19SVEFYX01BWCAtIDEpCisKKyNkZWZpbmUgUlRBWF9GRUFUVVJFX0VDTiAweDAwMDAwMDAxCisjZGVmaW5lIFJUQVhfRkVBVFVSRV9TQUNLIDB4MDAwMDAwMDIKKyNkZWZpbmUgUlRBWF9GRUFUVVJFX1RJTUVTVEFNUCAweDAwMDAwMDA0CisjZGVmaW5lIFJUQVhfRkVBVFVSRV9BTExGUkFHIDB4MDAwMDAwMDgKKworc3RydWN0IHJ0YV9zZXNzaW9uCit7CisgX191OCBwcm90bzsKKyBfX3U4IHBhZDE7CisgX191MTYgcGFkMjsKKworIHVuaW9uIHsKKyBzdHJ1Y3QgeworIF9fdTE2IHNwb3J0OworIF9fdTE2IGRwb3J0OworIH0gcG9ydHM7CisKKyBzdHJ1Y3QgeworIF9fdTggdHlwZTsKKyBfX3U4IGNvZGU7CisgX191MTYgaWRlbnQ7CisgfSBpY21wdDsKKworIF9fdTMyIHNwaTsKKyB9IHU7Cit9OworCitzdHJ1Y3QgaWZhZGRybXNnCit7CisgdW5zaWduZWQgY2hhciBpZmFfZmFtaWx5OworIHVuc2lnbmVkIGNoYXIgaWZhX3ByZWZpeGxlbjsKKyB1bnNpZ25lZCBjaGFyIGlmYV9mbGFnczsKKyB1bnNpZ25lZCBjaGFyIGlmYV9zY29wZTsKKyBpbnQgaWZhX2luZGV4OworfTsKKworZW51bQoreworIElGQV9VTlNQRUMsCisgSUZBX0FERFJFU1MsCisgSUZBX0xPQ0FMLAorIElGQV9MQUJFTCwKKyBJRkFfQlJPQURDQVNULAorIElGQV9BTllDQVNULAorIElGQV9DQUNIRUlORk8sCisgSUZBX01VTFRJQ0FTVCwKKyBfX0lGQV9NQVgKK307CisKKyNkZWZpbmUgSUZBX01BWCAoX19JRkFfTUFYIC0gMSkKKworI2RlZmluZSBJRkFfRl9TRUNPTkRBUlkgMHgwMQorI2RlZmluZSBJRkFfRl9URU1QT1JBUlkgSUZBX0ZfU0VDT05EQVJZCisKKyNkZWZpbmUgSUZBX0ZfREVQUkVDQVRFRCAweDIwCisjZGVmaW5lIElGQV9GX1RFTlRBVElWRSAweDQwCisjZGVmaW5lIElGQV9GX1BFUk1BTkVOVCAweDgwCisKK3N0cnVjdCBpZmFfY2FjaGVpbmZvCit7CisgX191MzIgaWZhX3ByZWZlcmVkOworIF9fdTMyIGlmYV92YWxpZDsKKyBfX3UzMiBjc3RhbXA7CisgX191MzIgdHN0YW1wOworfTsKKworI2RlZmluZSBJRkFfUlRBKHIpICgoc3RydWN0IHJ0YXR0ciopKCgoY2hhciopKHIpKSArIE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgaWZhZGRybXNnKSkpKQorI2RlZmluZSBJRkFfUEFZTE9BRChuKSBOTE1TR19QQVlMT0FEKG4sc2l6ZW9mKHN0cnVjdCBpZmFkZHJtc2cpKQorCitzdHJ1Y3QgbmRtc2cKK3sKKyB1bnNpZ25lZCBjaGFyIG5kbV9mYW1pbHk7CisgdW5zaWduZWQgY2hhciBuZG1fcGFkMTsKKyB1bnNpZ25lZCBzaG9ydCBuZG1fcGFkMjsKKyBpbnQgbmRtX2lmaW5kZXg7CisgX191MTYgbmRtX3N0YXRlOworIF9fdTggbmRtX2ZsYWdzOworIF9fdTggbmRtX3R5cGU7Cit9OworCitlbnVtCit7CisgTkRBX1VOU1BFQywKKyBOREFfRFNULAorIE5EQV9MTEFERFIsCisgTkRBX0NBQ0hFSU5GTywKKyBOREFfUFJPQkVTLAorIF9fTkRBX01BWAorfTsKKworI2RlZmluZSBOREFfTUFYIChfX05EQV9NQVggLSAxKQorCisjZGVmaW5lIE5EQV9SVEEocikgKChzdHJ1Y3QgcnRhdHRyKikoKChjaGFyKikocikpICsgTkxNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCBuZG1zZykpKSkKKyNkZWZpbmUgTkRBX1BBWUxPQUQobikgTkxNU0dfUEFZTE9BRChuLHNpemVvZihzdHJ1Y3QgbmRtc2cpKQorCisjZGVmaW5lIE5URl9QUk9YWSAweDA4ICAKKyNkZWZpbmUgTlRGX1JPVVRFUiAweDgwCisKKyNkZWZpbmUgTlVEX0lOQ09NUExFVEUgMHgwMQorI2RlZmluZSBOVURfUkVBQ0hBQkxFIDB4MDIKKyNkZWZpbmUgTlVEX1NUQUxFIDB4MDQKKyNkZWZpbmUgTlVEX0RFTEFZIDB4MDgKKyNkZWZpbmUgTlVEX1BST0JFIDB4MTAKKyNkZWZpbmUgTlVEX0ZBSUxFRCAweDIwCisKKyNkZWZpbmUgTlVEX05PQVJQIDB4NDAKKyNkZWZpbmUgTlVEX1BFUk1BTkVOVCAweDgwCisjZGVmaW5lIE5VRF9OT05FIDB4MDAKKworc3RydWN0IG5kYV9jYWNoZWluZm8KK3sKKyBfX3UzMiBuZG1fY29uZmlybWVkOworIF9fdTMyIG5kbV91c2VkOworIF9fdTMyIG5kbV91cGRhdGVkOworIF9fdTMyIG5kbV9yZWZjbnQ7Cit9OworCitzdHJ1Y3QgbmR0X3N0YXRzCit7CisgX191NjQgbmR0c19hbGxvY3M7CisgX191NjQgbmR0c19kZXN0cm95czsKKyBfX3U2NCBuZHRzX2hhc2hfZ3Jvd3M7CisgX191NjQgbmR0c19yZXNfZmFpbGVkOworIF9fdTY0IG5kdHNfbG9va3VwczsKKyBfX3U2NCBuZHRzX2hpdHM7CisgX191NjQgbmR0c19yY3ZfcHJvYmVzX21jYXN0OworIF9fdTY0IG5kdHNfcmN2X3Byb2Jlc191Y2FzdDsKKyBfX3U2NCBuZHRzX3BlcmlvZGljX2djX3J1bnM7CisgX191NjQgbmR0c19mb3JjZWRfZ2NfcnVuczsKK307CisKK2VudW0geworIE5EVFBBX1VOU1BFQywKKyBORFRQQV9JRklOREVYLAorIE5EVFBBX1JFRkNOVCwKKyBORFRQQV9SRUFDSEFCTEVfVElNRSwKKyBORFRQQV9CQVNFX1JFQUNIQUJMRV9USU1FLAorIE5EVFBBX1JFVFJBTlNfVElNRSwKKyBORFRQQV9HQ19TVEFMRVRJTUUsCisgTkRUUEFfREVMQVlfUFJPQkVfVElNRSwKKyBORFRQQV9RVUVVRV9MRU4sCisgTkRUUEFfQVBQX1BST0JFUywKKyBORFRQQV9VQ0FTVF9QUk9CRVMsCisgTkRUUEFfTUNBU1RfUFJPQkVTLAorIE5EVFBBX0FOWUNBU1RfREVMQVksCisgTkRUUEFfUFJPWFlfREVMQVksCisgTkRUUEFfUFJPWFlfUUxFTiwKKyBORFRQQV9MT0NLVElNRSwKKyBfX05EVFBBX01BWAorfTsKKyNkZWZpbmUgTkRUUEFfTUFYIChfX05EVFBBX01BWCAtIDEpCisKK3N0cnVjdCBuZHRtc2cKK3sKKyBfX3U4IG5kdG1fZmFtaWx5OworIF9fdTggbmR0bV9wYWQxOworIF9fdTE2IG5kdG1fcGFkMjsKK307CisKK3N0cnVjdCBuZHRfY29uZmlnCit7CisgX191MTYgbmR0Y19rZXlfbGVuOworIF9fdTE2IG5kdGNfZW50cnlfc2l6ZTsKKyBfX3UzMiBuZHRjX2VudHJpZXM7CisgX191MzIgbmR0Y19sYXN0X2ZsdXNoOworIF9fdTMyIG5kdGNfbGFzdF9yYW5kOworIF9fdTMyIG5kdGNfaGFzaF9ybmQ7CisgX191MzIgbmR0Y19oYXNoX21hc2s7CisgX191MzIgbmR0Y19oYXNoX2NoYWluX2djOworIF9fdTMyIG5kdGNfcHJveHlfcWxlbjsKK307CisKK2VudW0geworIE5EVEFfVU5TUEVDLAorIE5EVEFfTkFNRSwKKyBORFRBX1RIUkVTSDEsCisgTkRUQV9USFJFU0gyLAorIE5EVEFfVEhSRVNIMywKKyBORFRBX0NPTkZJRywKKyBORFRBX1BBUk1TLAorIE5EVEFfU1RBVFMsCisgTkRUQV9HQ19JTlRFUlZBTCwKKyBfX05EVEFfTUFYCit9OworI2RlZmluZSBORFRBX01BWCAoX19ORFRBX01BWCAtIDEpCisKKyNkZWZpbmUgTkRUQV9SVEEocikgKChzdHJ1Y3QgcnRhdHRyKikoKChjaGFyKikocikpICsgICBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IG5kdG1zZykpKSkKKyNkZWZpbmUgTkRUQV9QQVlMT0FEKG4pIE5MTVNHX1BBWUxPQUQobixzaXplb2Yoc3RydWN0IG5kdG1zZykpCisKK3N0cnVjdCBydGdlbm1zZworeworIHVuc2lnbmVkIGNoYXIgcnRnZW5fZmFtaWx5OworfTsKKworc3RydWN0IGlmaW5mb21zZworeworIHVuc2lnbmVkIGNoYXIgaWZpX2ZhbWlseTsKKyB1bnNpZ25lZCBjaGFyIF9faWZpX3BhZDsKKyB1bnNpZ25lZCBzaG9ydCBpZmlfdHlwZTsKKyBpbnQgaWZpX2luZGV4OworIHVuc2lnbmVkIGlmaV9mbGFnczsKKyB1bnNpZ25lZCBpZmlfY2hhbmdlOworfTsKKworc3RydWN0IHByZWZpeG1zZworeworIHVuc2lnbmVkIGNoYXIgcHJlZml4X2ZhbWlseTsKKyB1bnNpZ25lZCBjaGFyIHByZWZpeF9wYWQxOworIHVuc2lnbmVkIHNob3J0IHByZWZpeF9wYWQyOworIGludCBwcmVmaXhfaWZpbmRleDsKKyB1bnNpZ25lZCBjaGFyIHByZWZpeF90eXBlOworIHVuc2lnbmVkIGNoYXIgcHJlZml4X2xlbjsKKyB1bnNpZ25lZCBjaGFyIHByZWZpeF9mbGFnczsKKyB1bnNpZ25lZCBjaGFyIHByZWZpeF9wYWQzOworfTsKKworZW51bQoreworIFBSRUZJWF9VTlNQRUMsCisgUFJFRklYX0FERFJFU1MsCisgUFJFRklYX0NBQ0hFSU5GTywKKyBfX1BSRUZJWF9NQVgKK307CisKKyNkZWZpbmUgUFJFRklYX01BWCAoX19QUkVGSVhfTUFYIC0gMSkKKworc3RydWN0IHByZWZpeF9jYWNoZWluZm8KK3sKKyBfX3UzMiBwcmVmZXJyZWRfdGltZTsKKyBfX3UzMiB2YWxpZF90aW1lOworfTsKKworc3RydWN0IHJ0bmxfbGlua19zdGF0cworeworIF9fdTMyIHJ4X3BhY2tldHM7CisgX191MzIgdHhfcGFja2V0czsKKyBfX3UzMiByeF9ieXRlczsKKyBfX3UzMiB0eF9ieXRlczsKKyBfX3UzMiByeF9lcnJvcnM7CisgX191MzIgdHhfZXJyb3JzOworIF9fdTMyIHJ4X2Ryb3BwZWQ7CisgX191MzIgdHhfZHJvcHBlZDsKKyBfX3UzMiBtdWx0aWNhc3Q7CisgX191MzIgY29sbGlzaW9uczsKKworIF9fdTMyIHJ4X2xlbmd0aF9lcnJvcnM7CisgX191MzIgcnhfb3Zlcl9lcnJvcnM7CisgX191MzIgcnhfY3JjX2Vycm9yczsKKyBfX3UzMiByeF9mcmFtZV9lcnJvcnM7CisgX191MzIgcnhfZmlmb19lcnJvcnM7CisgX191MzIgcnhfbWlzc2VkX2Vycm9yczsKKworIF9fdTMyIHR4X2Fib3J0ZWRfZXJyb3JzOworIF9fdTMyIHR4X2NhcnJpZXJfZXJyb3JzOworIF9fdTMyIHR4X2ZpZm9fZXJyb3JzOworIF9fdTMyIHR4X2hlYXJ0YmVhdF9lcnJvcnM7CisgX191MzIgdHhfd2luZG93X2Vycm9yczsKKworIF9fdTMyIHJ4X2NvbXByZXNzZWQ7CisgX191MzIgdHhfY29tcHJlc3NlZDsKK307CisKK3N0cnVjdCBydG5sX2xpbmtfaWZtYXAKK3sKKyBfX3U2NCBtZW1fc3RhcnQ7CisgX191NjQgbWVtX2VuZDsKKyBfX3U2NCBiYXNlX2FkZHI7CisgX191MTYgaXJxOworIF9fdTggZG1hOworIF9fdTggcG9ydDsKK307CisKK2VudW0KK3sKKyBJRkxBX1VOU1BFQywKKyBJRkxBX0FERFJFU1MsCisgSUZMQV9CUk9BRENBU1QsCisgSUZMQV9JRk5BTUUsCisgSUZMQV9NVFUsCisgSUZMQV9MSU5LLAorIElGTEFfUURJU0MsCisgSUZMQV9TVEFUUywKKyBJRkxBX0NPU1QsCisjZGVmaW5lIElGTEFfQ09TVCBJRkxBX0NPU1QKKyBJRkxBX1BSSU9SSVRZLAorI2RlZmluZSBJRkxBX1BSSU9SSVRZIElGTEFfUFJJT1JJVFkKKyBJRkxBX01BU1RFUiwKKyNkZWZpbmUgSUZMQV9NQVNURVIgSUZMQV9NQVNURVIKKyBJRkxBX1dJUkVMRVNTLAorI2RlZmluZSBJRkxBX1dJUkVMRVNTIElGTEFfV0lSRUxFU1MKKyBJRkxBX1BST1RJTkZPLAorI2RlZmluZSBJRkxBX1BST1RJTkZPIElGTEFfUFJPVElORk8KKyBJRkxBX1RYUUxFTiwKKyNkZWZpbmUgSUZMQV9UWFFMRU4gSUZMQV9UWFFMRU4KKyBJRkxBX01BUCwKKyNkZWZpbmUgSUZMQV9NQVAgSUZMQV9NQVAKKyBJRkxBX1dFSUdIVCwKKyNkZWZpbmUgSUZMQV9XRUlHSFQgSUZMQV9XRUlHSFQKKyBJRkxBX09QRVJTVEFURSwKKyBJRkxBX0xJTktNT0RFLAorIF9fSUZMQV9NQVgKK307CisKKyNkZWZpbmUgSUZMQV9NQVggKF9fSUZMQV9NQVggLSAxKQorCisjZGVmaW5lIElGTEFfUlRBKHIpICgoc3RydWN0IHJ0YXR0ciopKCgoY2hhciopKHIpKSArIE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgaWZpbmZvbXNnKSkpKQorI2RlZmluZSBJRkxBX1BBWUxPQUQobikgTkxNU0dfUEFZTE9BRChuLHNpemVvZihzdHJ1Y3QgaWZpbmZvbXNnKSkKKworZW51bQoreworIElGTEFfSU5FVDZfVU5TUEVDLAorIElGTEFfSU5FVDZfRkxBR1MsCisgSUZMQV9JTkVUNl9DT05GLAorIElGTEFfSU5FVDZfU1RBVFMsCisgSUZMQV9JTkVUNl9NQ0FTVCwKKyBJRkxBX0lORVQ2X0NBQ0hFSU5GTywKKyBfX0lGTEFfSU5FVDZfTUFYCit9OworCisjZGVmaW5lIElGTEFfSU5FVDZfTUFYIChfX0lGTEFfSU5FVDZfTUFYIC0gMSkKKworc3RydWN0IGlmbGFfY2FjaGVpbmZvCit7CisgX191MzIgbWF4X3JlYXNtX2xlbjsKKyBfX3UzMiB0c3RhbXA7CisgX191MzIgcmVhY2hhYmxlX3RpbWU7CisgX191MzIgcmV0cmFuc190aW1lOworfTsKKworc3RydWN0IHRjbXNnCit7CisgdW5zaWduZWQgY2hhciB0Y21fZmFtaWx5OworIHVuc2lnbmVkIGNoYXIgdGNtX19wYWQxOworIHVuc2lnbmVkIHNob3J0IHRjbV9fcGFkMjsKKyBpbnQgdGNtX2lmaW5kZXg7CisgX191MzIgdGNtX2hhbmRsZTsKKyBfX3UzMiB0Y21fcGFyZW50OworIF9fdTMyIHRjbV9pbmZvOworfTsKKworZW51bQoreworIFRDQV9VTlNQRUMsCisgVENBX0tJTkQsCisgVENBX09QVElPTlMsCisgVENBX1NUQVRTLAorIFRDQV9YU1RBVFMsCisgVENBX1JBVEUsCisgVENBX0ZDTlQsCisgVENBX1NUQVRTMiwKKyBfX1RDQV9NQVgKK307CisKKyNkZWZpbmUgVENBX01BWCAoX19UQ0FfTUFYIC0gMSkKKworI2RlZmluZSBUQ0FfUlRBKHIpICgoc3RydWN0IHJ0YXR0ciopKCgoY2hhciopKHIpKSArIE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgdGNtc2cpKSkpCisjZGVmaW5lIFRDQV9QQVlMT0FEKG4pIE5MTVNHX1BBWUxPQUQobixzaXplb2Yoc3RydWN0IHRjbXNnKSkKKworI2RlZmluZSBSVE1HUlBfTElOSyAxCisjZGVmaW5lIFJUTUdSUF9OT1RJRlkgMgorI2RlZmluZSBSVE1HUlBfTkVJR0ggNAorI2RlZmluZSBSVE1HUlBfVEMgOAorCisjZGVmaW5lIFJUTUdSUF9JUFY0X0lGQUREUiAweDEwCisjZGVmaW5lIFJUTUdSUF9JUFY0X01ST1VURSAweDIwCisjZGVmaW5lIFJUTUdSUF9JUFY0X1JPVVRFIDB4NDAKKyNkZWZpbmUgUlRNR1JQX0lQVjRfUlVMRSAweDgwCisKKyNkZWZpbmUgUlRNR1JQX0lQVjZfSUZBRERSIDB4MTAwCisjZGVmaW5lIFJUTUdSUF9JUFY2X01ST1VURSAweDIwMAorI2RlZmluZSBSVE1HUlBfSVBWNl9ST1VURSAweDQwMAorI2RlZmluZSBSVE1HUlBfSVBWNl9JRklORk8gMHg4MDAKKworI2RlZmluZSBSVE1HUlBfREVDbmV0X0lGQUREUiAweDEwMDAKKyNkZWZpbmUgUlRNR1JQX0RFQ25ldF9ST1VURSAweDQwMDAKKworI2RlZmluZSBSVE1HUlBfSVBWNl9QUkVGSVggMHgyMDAwMAorCitlbnVtIHJ0bmV0bGlua19ncm91cHMgeworIFJUTkxHUlBfTk9ORSwKKyNkZWZpbmUgUlROTEdSUF9OT05FIFJUTkxHUlBfTk9ORQorIFJUTkxHUlBfTElOSywKKyNkZWZpbmUgUlROTEdSUF9MSU5LIFJUTkxHUlBfTElOSworIFJUTkxHUlBfTk9USUZZLAorI2RlZmluZSBSVE5MR1JQX05PVElGWSBSVE5MR1JQX05PVElGWQorIFJUTkxHUlBfTkVJR0gsCisjZGVmaW5lIFJUTkxHUlBfTkVJR0ggUlROTEdSUF9ORUlHSAorIFJUTkxHUlBfVEMsCisjZGVmaW5lIFJUTkxHUlBfVEMgUlROTEdSUF9UQworIFJUTkxHUlBfSVBWNF9JRkFERFIsCisjZGVmaW5lIFJUTkxHUlBfSVBWNF9JRkFERFIgUlROTEdSUF9JUFY0X0lGQUREUgorIFJUTkxHUlBfSVBWNF9NUk9VVEUsCisjZGVmaW5lIFJUTkxHUlBfSVBWNF9NUk9VVEUgUlROTEdSUF9JUFY0X01ST1VURQorIFJUTkxHUlBfSVBWNF9ST1VURSwKKyNkZWZpbmUgUlROTEdSUF9JUFY0X1JPVVRFIFJUTkxHUlBfSVBWNF9ST1VURQorIFJUTkxHUlBfSVBWNF9SVUxFLAorI2RlZmluZSBSVE5MR1JQX0lQVjRfUlVMRSBSVE5MR1JQX0lQVjRfUlVMRQorIFJUTkxHUlBfSVBWNl9JRkFERFIsCisjZGVmaW5lIFJUTkxHUlBfSVBWNl9JRkFERFIgUlROTEdSUF9JUFY2X0lGQUREUgorIFJUTkxHUlBfSVBWNl9NUk9VVEUsCisjZGVmaW5lIFJUTkxHUlBfSVBWNl9NUk9VVEUgUlROTEdSUF9JUFY2X01ST1VURQorIFJUTkxHUlBfSVBWNl9ST1VURSwKKyNkZWZpbmUgUlROTEdSUF9JUFY2X1JPVVRFIFJUTkxHUlBfSVBWNl9ST1VURQorIFJUTkxHUlBfSVBWNl9JRklORk8sCisjZGVmaW5lIFJUTkxHUlBfSVBWNl9JRklORk8gUlROTEdSUF9JUFY2X0lGSU5GTworIFJUTkxHUlBfREVDbmV0X0lGQUREUiwKKyNkZWZpbmUgUlROTEdSUF9ERUNuZXRfSUZBRERSIFJUTkxHUlBfREVDbmV0X0lGQUREUgorIFJUTkxHUlBfTk9QMiwKKyBSVE5MR1JQX0RFQ25ldF9ST1VURSwKKyNkZWZpbmUgUlROTEdSUF9ERUNuZXRfUk9VVEUgUlROTEdSUF9ERUNuZXRfUk9VVEUKKyBSVE5MR1JQX05PUDMsCisgUlROTEdSUF9OT1A0LAorIFJUTkxHUlBfSVBWNl9QUkVGSVgsCisjZGVmaW5lIFJUTkxHUlBfSVBWNl9QUkVGSVggUlROTEdSUF9JUFY2X1BSRUZJWAorIF9fUlROTEdSUF9NQVgKK307CisjZGVmaW5lIFJUTkxHUlBfTUFYIChfX1JUTkxHUlBfTUFYIC0gMSkKKworc3RydWN0IHRjYW1zZworeworIHVuc2lnbmVkIGNoYXIgdGNhX2ZhbWlseTsKKyB1bnNpZ25lZCBjaGFyIHRjYV9fcGFkMTsKKyB1bnNpZ25lZCBzaG9ydCB0Y2FfX3BhZDI7Cit9OworI2RlZmluZSBUQV9SVEEocikgKChzdHJ1Y3QgcnRhdHRyKikoKChjaGFyKikocikpICsgTkxNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCB0Y2Ftc2cpKSkpCisjZGVmaW5lIFRBX1BBWUxPQUQobikgTkxNU0dfUEFZTE9BRChuLHNpemVvZihzdHJ1Y3QgdGNhbXNnKSkKKyNkZWZpbmUgVENBX0FDVF9UQUIgMSAgIAorI2RlZmluZSBUQ0FBX01BWCAxCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3J3c2VtLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcndzZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjRjNGM4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3J3c2VtLmgKQEAgLTAsMCArMSwxNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfUldTRU1fSAorI2RlZmluZSBfTElOVVhfUldTRU1fSAorCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zY2hlZC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NjaGVkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI3ODFlYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zY2hlZC5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX1NDSEVEX0gKKyNkZWZpbmUgX0xJTlVYX1NDSEVEX0gKKworI2luY2x1ZGUgPGxpbnV4L2F1eHZlYy5oPiAgCisKKyNkZWZpbmUgQ1NJR05BTCAweDAwMDAwMGZmICAKKyNkZWZpbmUgQ0xPTkVfVk0gMHgwMDAwMDEwMCAgCisjZGVmaW5lIENMT05FX0ZTIDB4MDAwMDAyMDAgIAorI2RlZmluZSBDTE9ORV9GSUxFUyAweDAwMDAwNDAwICAKKyNkZWZpbmUgQ0xPTkVfU0lHSEFORCAweDAwMDAwODAwICAKKyNkZWZpbmUgQ0xPTkVfUFRSQUNFIDB4MDAwMDIwMDAgIAorI2RlZmluZSBDTE9ORV9WRk9SSyAweDAwMDA0MDAwICAKKyNkZWZpbmUgQ0xPTkVfUEFSRU5UIDB4MDAwMDgwMDAgIAorI2RlZmluZSBDTE9ORV9USFJFQUQgMHgwMDAxMDAwMCAgCisjZGVmaW5lIENMT05FX05FV05TIDB4MDAwMjAwMDAgIAorI2RlZmluZSBDTE9ORV9TWVNWU0VNIDB4MDAwNDAwMDAgIAorI2RlZmluZSBDTE9ORV9TRVRUTFMgMHgwMDA4MDAwMCAgCisjZGVmaW5lIENMT05FX1BBUkVOVF9TRVRUSUQgMHgwMDEwMDAwMCAgCisjZGVmaW5lIENMT05FX0NISUxEX0NMRUFSVElEIDB4MDAyMDAwMDAgIAorI2RlZmluZSBDTE9ORV9ERVRBQ0hFRCAweDAwNDAwMDAwICAKKyNkZWZpbmUgQ0xPTkVfVU5UUkFDRUQgMHgwMDgwMDAwMCAgCisjZGVmaW5lIENMT05FX0NISUxEX1NFVFRJRCAweDAxMDAwMDAwICAKKyNkZWZpbmUgQ0xPTkVfU1RPUFBFRCAweDAyMDAwMDAwICAKKworI2RlZmluZSBTQ0hFRF9OT1JNQUwgMAorI2RlZmluZSBTQ0hFRF9GSUZPIDEKKyNkZWZpbmUgU0NIRURfUlIgMgorI2RlZmluZSBTQ0hFRF9CQVRDSCAzCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NlbS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmYTUzMWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc2VtLmgKQEAgLTAsMCArMSw4MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfU0VNX0gKKyNkZWZpbmUgX0xJTlVYX1NFTV9ICisKKyNpbmNsdWRlIDxsaW51eC9pcGMuaD4KKworI2RlZmluZSBTRU1fVU5ETyAweDEwMDAgIAorCisjZGVmaW5lIEdFVFBJRCAxMSAgCisjZGVmaW5lIEdFVFZBTCAxMiAgCisjZGVmaW5lIEdFVEFMTCAxMyAgCisjZGVmaW5lIEdFVE5DTlQgMTQgIAorI2RlZmluZSBHRVRaQ05UIDE1ICAKKyNkZWZpbmUgU0VUVkFMIDE2ICAKKyNkZWZpbmUgU0VUQUxMIDE3ICAKKworI2RlZmluZSBTRU1fU1RBVCAxOAorI2RlZmluZSBTRU1fSU5GTyAxOQorCitzdHJ1Y3Qgc2VtaWRfZHMgeworIHN0cnVjdCBpcGNfcGVybSBzZW1fcGVybTsKKyBfX2tlcm5lbF90aW1lX3Qgc2VtX290aW1lOworIF9fa2VybmVsX3RpbWVfdCBzZW1fY3RpbWU7Cisgc3RydWN0IHNlbSAqc2VtX2Jhc2U7Cisgc3RydWN0IHNlbV9xdWV1ZSAqc2VtX3BlbmRpbmc7Cisgc3RydWN0IHNlbV9xdWV1ZSAqKnNlbV9wZW5kaW5nX2xhc3Q7Cisgc3RydWN0IHNlbV91bmRvICp1bmRvOworIHVuc2lnbmVkIHNob3J0IHNlbV9uc2VtczsKK307CisKKyNpbmNsdWRlIDxhc20vc2VtYnVmLmg+CisKK3N0cnVjdCBzZW1idWYgeworIHVuc2lnbmVkIHNob3J0IHNlbV9udW07Cisgc2hvcnQgc2VtX29wOworIHNob3J0IHNlbV9mbGc7Cit9OworCit1bmlvbiBzZW11biB7CisgaW50IHZhbDsKKyBzdHJ1Y3Qgc2VtaWRfZHMgX191c2VyICpidWY7CisgdW5zaWduZWQgc2hvcnQgX191c2VyICphcnJheTsKKyBzdHJ1Y3Qgc2VtaW5mbyBfX3VzZXIgKl9fYnVmOworIHZvaWQgX191c2VyICpfX3BhZDsKK307CisKK3N0cnVjdCBzZW1pbmZvIHsKKyBpbnQgc2VtbWFwOworIGludCBzZW1tbmk7CisgaW50IHNlbW1uczsKKyBpbnQgc2VtbW51OworIGludCBzZW1tc2w7CisgaW50IHNlbW9wbTsKKyBpbnQgc2VtdW1lOworIGludCBzZW11c3o7CisgaW50IHNlbXZteDsKKyBpbnQgc2VtYWVtOworfTsKKworI2RlZmluZSBTRU1NTkkgMTI4ICAKKyNkZWZpbmUgU0VNTVNMIDI1MCAgCisjZGVmaW5lIFNFTU1OUyAoU0VNTU5JKlNFTU1TTCkgIAorI2RlZmluZSBTRU1PUE0gMzIgIAorI2RlZmluZSBTRU1WTVggMzI3NjcgIAorI2RlZmluZSBTRU1BRU0gU0VNVk1YICAKKworI2RlZmluZSBTRU1VTUUgU0VNT1BNICAKKyNkZWZpbmUgU0VNTU5VIFNFTU1OUyAgCisjZGVmaW5lIFNFTU1BUCBTRU1NTlMgIAorI2RlZmluZSBTRU1VU1ogMjAgIAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zZXFfZmlsZS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NlcV9maWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFlMzE0ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zZXFfZmlsZS5oCkBAIC0wLDAgKzEsMTQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX1NFUV9GSUxFX0gKKyNkZWZpbmUgX0xJTlVYX1NFUV9GSUxFX0gKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NlcWxvY2suaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zZXFsb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFlMDVkNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zZXFsb2NrLmgKQEAgLTAsMCArMSw0MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0xJTlVYX1NFUUxPQ0tfSAorI2RlZmluZSBfX0xJTlVYX1NFUUxPQ0tfSAorCisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVlbXB0Lmg+CisKK3R5cGVkZWYgc3RydWN0IHsKKyB1bnNpZ25lZCBzZXF1ZW5jZTsKKyBzcGlubG9ja190IGxvY2s7Cit9IHNlcWxvY2tfdDsKKworI2RlZmluZSBfX1NFUUxPQ0tfVU5MT0NLRUQobG9ja25hbWUpICAgeyAwLCBfX1NQSU5fTE9DS19VTkxPQ0tFRChsb2NrbmFtZSkgfQorCisjZGVmaW5lIFNFUUxPQ0tfVU5MT0NLRUQgICBfX1NFUUxPQ0tfVU5MT0NLRUQob2xkX3N0eWxlX3NlcWxvY2tfaW5pdCkKKworI2RlZmluZSBzZXFsb2NrX2luaXQoeCkgICBkbyB7ICooeCkgPSAoc2VxbG9ja190KSBfX1NFUUxPQ0tfVU5MT0NLRUQoeCk7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgREVGSU5FX1NFUUxPQ0soeCkgICBzZXFsb2NrX3QgeCA9IF9fU0VRTE9DS19VTkxPQ0tFRCh4KQorCisjZGVmaW5lIFNFUUNOVF9aRVJPIHsgMCB9CisjZGVmaW5lIHNlcWNvdW50X2luaXQoeCkgZG8geyAqKHgpID0gKHNlcWNvdW50X3QpIFNFUUNOVF9aRVJPOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIHdyaXRlX3NlcWxvY2tfaXJxc2F2ZShsb2NrLCBmbGFncykgICBkbyB7IGxvY2FsX2lycV9zYXZlKGZsYWdzKTsgd3JpdGVfc2VxbG9jayhsb2NrKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgd3JpdGVfc2VxbG9ja19pcnEobG9jaykgICBkbyB7IGxvY2FsX2lycV9kaXNhYmxlKCk7IHdyaXRlX3NlcWxvY2sobG9jayk7IH0gd2hpbGUgKDApCisjZGVmaW5lIHdyaXRlX3NlcWxvY2tfYmgobG9jaykgICBkbyB7IGxvY2FsX2JoX2Rpc2FibGUoKTsgd3JpdGVfc2VxbG9jayhsb2NrKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgd3JpdGVfc2VxdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZ3MpICAgZG8geyB3cml0ZV9zZXF1bmxvY2sobG9jayk7IGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsgfSB3aGlsZSgwKQorI2RlZmluZSB3cml0ZV9zZXF1bmxvY2tfaXJxKGxvY2spICAgZG8geyB3cml0ZV9zZXF1bmxvY2sobG9jayk7IGxvY2FsX2lycV9lbmFibGUoKTsgfSB3aGlsZSgwKQorI2RlZmluZSB3cml0ZV9zZXF1bmxvY2tfYmgobG9jaykgICBkbyB7IHdyaXRlX3NlcXVubG9jayhsb2NrKTsgbG9jYWxfYmhfZW5hYmxlKCk7IH0gd2hpbGUoMCkKKyNkZWZpbmUgcmVhZF9zZXFiZWdpbl9pcnFzYXZlKGxvY2ssIGZsYWdzKSAgICh7IGxvY2FsX2lycV9zYXZlKGZsYWdzKTsgcmVhZF9zZXFiZWdpbihsb2NrKTsgfSkKKyNkZWZpbmUgcmVhZF9zZXFyZXRyeV9pcnFyZXN0b3JlKGxvY2ssIGl2LCBmbGFncykgICAoeyAgIGludCByZXQgPSByZWFkX3NlcXJldHJ5KGxvY2ssIGl2KTsgICBsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7ICAgcmV0OyAgIH0pCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zZXJpYWxfY29yZS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NlcmlhbF9jb3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzlmMDM3NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zZXJpYWxfY29yZS5oCkBAIC0wLDAgKzEsOTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgTElOVVhfU0VSSUFMX0NPUkVfSAorI2RlZmluZSBMSU5VWF9TRVJJQUxfQ09SRV9ICisKKyNkZWZpbmUgUE9SVF9VTktOT1dOIDAKKyNkZWZpbmUgUE9SVF84MjUwIDEKKyNkZWZpbmUgUE9SVF8xNjQ1MCAyCisjZGVmaW5lIFBPUlRfMTY1NTAgMworI2RlZmluZSBQT1JUXzE2NTUwQSA0CisjZGVmaW5lIFBPUlRfQ0lSUlVTIDUKKyNkZWZpbmUgUE9SVF8xNjY1MCA2CisjZGVmaW5lIFBPUlRfMTY2NTBWMiA3CisjZGVmaW5lIFBPUlRfMTY3NTAgOAorI2RlZmluZSBQT1JUX1NUQVJURUNIIDkKKyNkZWZpbmUgUE9SVF8xNkM5NTAgMTAKKyNkZWZpbmUgUE9SVF8xNjY1NCAxMQorI2RlZmluZSBQT1JUXzE2ODUwIDEyCisjZGVmaW5lIFBPUlRfUlNBIDEzCisjZGVmaW5lIFBPUlRfTlMxNjU1MEEgMTQKKyNkZWZpbmUgUE9SVF9YU0NBTEUgMTUKKyNkZWZpbmUgUE9SVF9NQVhfODI1MCAxNSAgCisKKyNkZWZpbmUgUE9SVF9QWEEgMzEKKyNkZWZpbmUgUE9SVF9BTUJBIDMyCisjZGVmaW5lIFBPUlRfQ0xQUzcxMVggMzMKKyNkZWZpbmUgUE9SVF9TQTExMDAgMzQKKyNkZWZpbmUgUE9SVF9VQVJUMDAgMzUKKyNkZWZpbmUgUE9SVF8yMTI4NSAzNworCisjZGVmaW5lIFBPUlRfU1VOWklMT0cgMzgKKyNkZWZpbmUgUE9SVF9TVU5TQUIgMzkKKworI2RlZmluZSBQT1JUX1Y4NTBFX1VBUlQgNDAKKworI2RlZmluZSBQT1JUX0RaIDQ3CisKKyNkZWZpbmUgUE9SVF9NVVggNDgKKworI2RlZmluZSBQT1JUX0FUOTEgNDkKKworI2RlZmluZSBQT1JUX01BQ19aSUxPRyA1MCAgCisjZGVmaW5lIFBPUlRfUE1BQ19aSUxPRyA1MQorCisjZGVmaW5lIFBPUlRfU0NJIDUyCisjZGVmaW5lIFBPUlRfU0NJRiA1MworI2RlZmluZSBQT1JUX0lSREEgNTQKKworI2RlZmluZSBQT1JUX1MzQzI0MTAgNTUKKworI2RlZmluZSBQT1JUX0lQMjJaSUxPRyA1NgorCisjZGVmaW5lIFBPUlRfTEg3QTQwWCA1NworCisjZGVmaW5lIFBPUlRfQ1BNIDU4CisKKyNkZWZpbmUgUE9SVF9NUEM1Mnh4IDU5CisKKyNkZWZpbmUgUE9SVF9JQ09NIDYwCisKKyNkZWZpbmUgUE9SVF9TM0MyNDQwIDYxCisKKyNkZWZpbmUgUE9SVF9JTVggNjIKKworI2RlZmluZSBQT1JUX01QU0MgNjMKKworI2RlZmluZSBQT1JUX1RYWDkgNjQKKworI2RlZmluZSBQT1JUX1ZSNDFYWF9TSVUgNjUKKyNkZWZpbmUgUE9SVF9WUjQxWFhfRFNJVSA2NgorCisjZGVmaW5lIFBPUlRfUzNDMjQwMCA2NworCisjZGVmaW5lIFBPUlRfTTMyUl9TSU8gNjgKKworI2RlZmluZSBQT1JUX0pTTSA2OQorCisjZGVmaW5lIFBPUlRfSVAzMTA2IDcwCisKKyNkZWZpbmUgUE9SVF9ORVRYIDcxCisKKyNkZWZpbmUgUE9SVF9TVU5IViA3MgorCisjZGVmaW5lIFBPUlRfUzNDMjQxMiA3MworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zZXJpYWxfcmVnLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc2VyaWFsX3JlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3YjE0OWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc2VyaWFsX3JlZy5oCkBAIC0wLDAgKzEsMjQ5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9TRVJJQUxfUkVHX0gKKyNkZWZpbmUgX0xJTlVYX1NFUklBTF9SRUdfSAorCisjZGVmaW5lIFVBUlRfUlggMCAgCisjZGVmaW5lIFVBUlRfVFggMCAgCisKKyNkZWZpbmUgVUFSVF9JRVIgMSAgCisjZGVmaW5lIFVBUlRfSUVSX01TSSAweDA4ICAKKyNkZWZpbmUgVUFSVF9JRVJfUkxTSSAweDA0ICAKKyNkZWZpbmUgVUFSVF9JRVJfVEhSSSAweDAyICAKKyNkZWZpbmUgVUFSVF9JRVJfUkRJIDB4MDEgIAorCisjZGVmaW5lIFVBUlRfSUVSWF9TTEVFUCAweDEwICAKKworI2RlZmluZSBVQVJUX0lJUiAyICAKKyNkZWZpbmUgVUFSVF9JSVJfTk9fSU5UIDB4MDEgIAorI2RlZmluZSBVQVJUX0lJUl9JRCAweDA2ICAKKyNkZWZpbmUgVUFSVF9JSVJfTVNJIDB4MDAgIAorI2RlZmluZSBVQVJUX0lJUl9USFJJIDB4MDIgIAorI2RlZmluZSBVQVJUX0lJUl9SREkgMHgwNCAgCisjZGVmaW5lIFVBUlRfSUlSX1JMU0kgMHgwNiAgCisKKyNkZWZpbmUgVUFSVF9GQ1IgMiAgCisjZGVmaW5lIFVBUlRfRkNSX0VOQUJMRV9GSUZPIDB4MDEgIAorI2RlZmluZSBVQVJUX0ZDUl9DTEVBUl9SQ1ZSIDB4MDIgIAorI2RlZmluZSBVQVJUX0ZDUl9DTEVBUl9YTUlUIDB4MDQgIAorI2RlZmluZSBVQVJUX0ZDUl9ETUFfU0VMRUNUIDB4MDggIAorCisjZGVmaW5lIFVBUlRfRkNSX1JfVFJJR18wMCAweDAwCisjZGVmaW5lIFVBUlRfRkNSX1JfVFJJR18wMSAweDQwCisjZGVmaW5lIFVBUlRfRkNSX1JfVFJJR18xMCAweDgwCisjZGVmaW5lIFVBUlRfRkNSX1JfVFJJR18xMSAweGMwCisjZGVmaW5lIFVBUlRfRkNSX1RfVFJJR18wMCAweDAwCisjZGVmaW5lIFVBUlRfRkNSX1RfVFJJR18wMSAweDEwCisjZGVmaW5lIFVBUlRfRkNSX1RfVFJJR18xMCAweDIwCisjZGVmaW5lIFVBUlRfRkNSX1RfVFJJR18xMSAweDMwCisKKyNkZWZpbmUgVUFSVF9GQ1JfVFJJR0dFUl9NQVNLIDB4QzAgIAorI2RlZmluZSBVQVJUX0ZDUl9UUklHR0VSXzEgMHgwMCAgCisjZGVmaW5lIFVBUlRfRkNSX1RSSUdHRVJfNCAweDQwICAKKyNkZWZpbmUgVUFSVF9GQ1JfVFJJR0dFUl84IDB4ODAgIAorI2RlZmluZSBVQVJUX0ZDUl9UUklHR0VSXzE0IDB4QzAgIAorCisjZGVmaW5lIFVBUlRfRkNSNl9SX1RSSUdHRVJfOCAweDAwICAKKyNkZWZpbmUgVUFSVF9GQ1I2X1JfVFJJR0dFUl8xNiAweDQwICAKKyNkZWZpbmUgVUFSVF9GQ1I2X1JfVFJJR0dFUl8yNCAweDgwICAKKyNkZWZpbmUgVUFSVF9GQ1I2X1JfVFJJR0dFUl8yOCAweEMwICAKKyNkZWZpbmUgVUFSVF9GQ1I2X1RfVFJJR0dFUl8xNiAweDAwICAKKyNkZWZpbmUgVUFSVF9GQ1I2X1RfVFJJR0dFUl84IDB4MTAgIAorI2RlZmluZSBVQVJUX0ZDUjZfVF9UUklHR0VSXzI0IDB4MjAgIAorI2RlZmluZSBVQVJUX0ZDUjZfVF9UUklHR0VSXzMwIDB4MzAgIAorI2RlZmluZSBVQVJUX0ZDUjdfNjRCWVRFIDB4MjAgIAorCisjZGVmaW5lIFVBUlRfTENSIDMgIAorCisjZGVmaW5lIFVBUlRfTENSX0RMQUIgMHg4MCAgCisjZGVmaW5lIFVBUlRfTENSX1NCQyAweDQwICAKKyNkZWZpbmUgVUFSVF9MQ1JfU1BBUiAweDIwICAKKyNkZWZpbmUgVUFSVF9MQ1JfRVBBUiAweDEwICAKKyNkZWZpbmUgVUFSVF9MQ1JfUEFSSVRZIDB4MDggIAorI2RlZmluZSBVQVJUX0xDUl9TVE9QIDB4MDQgIAorI2RlZmluZSBVQVJUX0xDUl9XTEVONSAweDAwICAKKyNkZWZpbmUgVUFSVF9MQ1JfV0xFTjYgMHgwMSAgCisjZGVmaW5lIFVBUlRfTENSX1dMRU43IDB4MDIgIAorI2RlZmluZSBVQVJUX0xDUl9XTEVOOCAweDAzICAKKworI2RlZmluZSBVQVJUX01DUiA0ICAKKyNkZWZpbmUgVUFSVF9NQ1JfQ0xLU0VMIDB4ODAgIAorI2RlZmluZSBVQVJUX01DUl9UQ1JUTFIgMHg0MCAgCisjZGVmaW5lIFVBUlRfTUNSX1hPTkFOWSAweDIwICAKKyNkZWZpbmUgVUFSVF9NQ1JfQUZFIDB4MjAgIAorI2RlZmluZSBVQVJUX01DUl9MT09QIDB4MTAgIAorI2RlZmluZSBVQVJUX01DUl9PVVQyIDB4MDggIAorI2RlZmluZSBVQVJUX01DUl9PVVQxIDB4MDQgIAorI2RlZmluZSBVQVJUX01DUl9SVFMgMHgwMiAgCisjZGVmaW5lIFVBUlRfTUNSX0RUUiAweDAxICAKKworI2RlZmluZSBVQVJUX0xTUiA1ICAKKyNkZWZpbmUgVUFSVF9MU1JfVEVNVCAweDQwICAKKyNkZWZpbmUgVUFSVF9MU1JfVEhSRSAweDIwICAKKyNkZWZpbmUgVUFSVF9MU1JfQkkgMHgxMCAgCisjZGVmaW5lIFVBUlRfTFNSX0ZFIDB4MDggIAorI2RlZmluZSBVQVJUX0xTUl9QRSAweDA0ICAKKyNkZWZpbmUgVUFSVF9MU1JfT0UgMHgwMiAgCisjZGVmaW5lIFVBUlRfTFNSX0RSIDB4MDEgIAorCisjZGVmaW5lIFVBUlRfTVNSIDYgIAorI2RlZmluZSBVQVJUX01TUl9EQ0QgMHg4MCAgCisjZGVmaW5lIFVBUlRfTVNSX1JJIDB4NDAgIAorI2RlZmluZSBVQVJUX01TUl9EU1IgMHgyMCAgCisjZGVmaW5lIFVBUlRfTVNSX0NUUyAweDEwICAKKyNkZWZpbmUgVUFSVF9NU1JfRERDRCAweDA4ICAKKyNkZWZpbmUgVUFSVF9NU1JfVEVSSSAweDA0ICAKKyNkZWZpbmUgVUFSVF9NU1JfRERTUiAweDAyICAKKyNkZWZpbmUgVUFSVF9NU1JfRENUUyAweDAxICAKKyNkZWZpbmUgVUFSVF9NU1JfQU5ZX0RFTFRBIDB4MEYgIAorCisjZGVmaW5lIFVBUlRfU0NSIDcgIAorCisjZGVmaW5lIFVBUlRfRExMIDAgIAorI2RlZmluZSBVQVJUX0RMTSAxICAKKworI2RlZmluZSBVQVJUX0VGUiAyICAKKyNkZWZpbmUgVUFSVF9FRlJfQ1RTIDB4ODAgIAorI2RlZmluZSBVQVJUX0VGUl9SVFMgMHg0MCAgCisjZGVmaW5lIFVBUlRfRUZSX1NDRCAweDIwICAKKyNkZWZpbmUgVUFSVF9FRlJfRUNCIDB4MTAgIAorCisjZGVmaW5lIFVBUlRfWE9OMSA0ICAKKyNkZWZpbmUgVUFSVF9YT04yIDUgIAorI2RlZmluZSBVQVJUX1hPRkYxIDYgIAorI2RlZmluZSBVQVJUX1hPRkYyIDcgIAorCisjZGVmaW5lIFVBUlRfVEk3NTJfVENSIDYgIAorI2RlZmluZSBVQVJUX1RJNzUyX1RMUiA3ICAKKworI2RlZmluZSBVQVJUX1RSRyAwICAKKworI2RlZmluZSBVQVJUX1RSR18xIDB4MDEKKyNkZWZpbmUgVUFSVF9UUkdfNCAweDA0CisjZGVmaW5lIFVBUlRfVFJHXzggMHgwOAorI2RlZmluZSBVQVJUX1RSR18xNiAweDEwCisjZGVmaW5lIFVBUlRfVFJHXzMyIDB4MjAKKyNkZWZpbmUgVUFSVF9UUkdfNjQgMHg0MAorI2RlZmluZSBVQVJUX1RSR185NiAweDYwCisjZGVmaW5lIFVBUlRfVFJHXzEyMCAweDc4CisjZGVmaW5lIFVBUlRfVFJHXzEyOCAweDgwCisKKyNkZWZpbmUgVUFSVF9GQ1RSIDEgIAorI2RlZmluZSBVQVJUX0ZDVFJfUlRTX05PREVMQVkgMHgwMCAgCisjZGVmaW5lIFVBUlRfRkNUUl9SVFNfNERFTEFZIDB4MDEKKyNkZWZpbmUgVUFSVF9GQ1RSX1JUU182REVMQVkgMHgwMgorI2RlZmluZSBVQVJUX0ZDVFJfUlRTXzhERUxBWSAweDAzCisjZGVmaW5lIFVBUlRfRkNUUl9JUkRBIDB4MDQgIAorI2RlZmluZSBVQVJUX0ZDVFJfVFhfSU5UIDB4MDggIAorI2RlZmluZSBVQVJUX0ZDVFJfVFJHQSAweDAwICAKKyNkZWZpbmUgVUFSVF9GQ1RSX1RSR0IgMHgxMCAgCisjZGVmaW5lIFVBUlRfRkNUUl9UUkdDIDB4MjAgIAorI2RlZmluZSBVQVJUX0ZDVFJfVFJHRCAweDMwICAKKyNkZWZpbmUgVUFSVF9GQ1RSX1NDUl9TV0FQIDB4NDAgIAorI2RlZmluZSBVQVJUX0ZDVFJfUlggMHgwMCAgCisjZGVmaW5lIFVBUlRfRkNUUl9UWCAweDgwICAKKworI2RlZmluZSBVQVJUX0VNU1IgNyAgCisjZGVmaW5lIFVBUlRfRU1TUl9GSUZPX0NPVU5UIDB4MDEgIAorI2RlZmluZSBVQVJUX0VNU1JfQUxUX0NPVU5UIDB4MDIgIAorCisjZGVmaW5lIFVBUlRfSUVSX0RNQUUgMHg4MCAgCisjZGVmaW5lIFVBUlRfSUVSX1VVRSAweDQwICAKKyNkZWZpbmUgVUFSVF9JRVJfTlJaRSAweDIwICAKKyNkZWZpbmUgVUFSVF9JRVJfUlRPSUUgMHgxMCAgCisKKyNkZWZpbmUgVUFSVF9JSVJfVE9EIDB4MDggIAorCisjZGVmaW5lIFVBUlRfRkNSX1BYQVIxIDB4MDAgIAorI2RlZmluZSBVQVJUX0ZDUl9QWEFSOCAweDQwICAKKyNkZWZpbmUgVUFSVF9GQ1JfUFhBUjE2IDB4ODAgIAorI2RlZmluZSBVQVJUX0ZDUl9QWEFSMzIgMHhjMCAgCisKKyNkZWZpbmUgVUFSVF9BU1IgMHgwMSAgCisjZGVmaW5lIFVBUlRfUkZMIDB4MDMgIAorI2RlZmluZSBVQVJUX1RGTCAweDA0ICAKKyNkZWZpbmUgVUFSVF9JQ1IgMHgwNSAgCisKKyNkZWZpbmUgVUFSVF9BQ1IgMHgwMCAgCisjZGVmaW5lIFVBUlRfQ1BSIDB4MDEgIAorI2RlZmluZSBVQVJUX1RDUiAweDAyICAKKyNkZWZpbmUgVUFSVF9DS1MgMHgwMyAgCisjZGVmaW5lIFVBUlRfVFRMIDB4MDQgIAorI2RlZmluZSBVQVJUX1JUTCAweDA1ICAKKyNkZWZpbmUgVUFSVF9GQ0wgMHgwNiAgCisjZGVmaW5lIFVBUlRfRkNIIDB4MDcgIAorI2RlZmluZSBVQVJUX0lEMSAweDA4ICAKKyNkZWZpbmUgVUFSVF9JRDIgMHgwOSAgCisjZGVmaW5lIFVBUlRfSUQzIDB4MEEgIAorI2RlZmluZSBVQVJUX1JFViAweDBCICAKKyNkZWZpbmUgVUFSVF9DU1IgMHgwQyAgCisjZGVmaW5lIFVBUlRfTk1SIDB4MEQgIAorI2RlZmluZSBVQVJUX0NUUiAweEZGCisKKyNkZWZpbmUgVUFSVF9BQ1JfUlhESVMgMHgwMSAgCisjZGVmaW5lIFVBUlRfQUNSX1RYRElTIDB4MDIgIAorI2RlZmluZSBVQVJUX0FDUl9EU1JGQyAweDA0ICAKKyNkZWZpbmUgVUFSVF9BQ1JfVExFTkIgMHgyMCAgCisjZGVmaW5lIFVBUlRfQUNSX0lDUlJEIDB4NDAgIAorI2RlZmluZSBVQVJUX0FDUl9BU1JFTiAweDgwICAKKworI2RlZmluZSBVQVJUX1JTQV9CQVNFICgtOCkKKworI2RlZmluZSBVQVJUX1JTQV9NU1IgKChVQVJUX1JTQV9CQVNFKSArIDApICAKKworI2RlZmluZSBVQVJUX1JTQV9NU1JfU1dBUCAoMSA8PCAwKSAgCisjZGVmaW5lIFVBUlRfUlNBX01TUl9GSUZPICgxIDw8IDIpICAKKyNkZWZpbmUgVUFSVF9SU0FfTVNSX0ZMT1cgKDEgPDwgMykgIAorI2RlZmluZSBVQVJUX1JTQV9NU1JfSVRZUCAoMSA8PCA0KSAgCisKKyNkZWZpbmUgVUFSVF9SU0FfSUVSICgoVUFSVF9SU0FfQkFTRSkgKyAxKSAgCisKKyNkZWZpbmUgVUFSVF9SU0FfSUVSX1J4X0ZJRk9fSCAoMSA8PCAwKSAgCisjZGVmaW5lIFVBUlRfUlNBX0lFUl9UeF9GSUZPX0ggKDEgPDwgMSkgIAorI2RlZmluZSBVQVJUX1JTQV9JRVJfVHhfRklGT19FICgxIDw8IDIpICAKKyNkZWZpbmUgVUFSVF9SU0FfSUVSX1J4X1RPVVQgKDEgPDwgMykgIAorI2RlZmluZSBVQVJUX1JTQV9JRVJfVElNRVIgKDEgPDwgNCkgIAorCisjZGVmaW5lIFVBUlRfUlNBX1NSUiAoKFVBUlRfUlNBX0JBU0UpICsgMikgIAorCisjZGVmaW5lIFVBUlRfUlNBX1NSUl9UeF9GSUZPX05FTVAgKDEgPDwgMCkgIAorI2RlZmluZSBVQVJUX1JTQV9TUlJfVHhfRklGT19OSEZMICgxIDw8IDEpICAKKyNkZWZpbmUgVUFSVF9SU0FfU1JSX1R4X0ZJRk9fTkZVTCAoMSA8PCAyKSAgCisjZGVmaW5lIFVBUlRfUlNBX1NSUl9SeF9GSUZPX05FTVAgKDEgPDwgMykgIAorI2RlZmluZSBVQVJUX1JTQV9TUlJfUnhfRklGT19OSEZMICgxIDw8IDQpICAKKyNkZWZpbmUgVUFSVF9SU0FfU1JSX1J4X0ZJRk9fTkZVTCAoMSA8PCA1KSAgCisjZGVmaW5lIFVBUlRfUlNBX1NSUl9SeF9UT1VUICgxIDw8IDYpICAKKyNkZWZpbmUgVUFSVF9SU0FfU1JSX1RJTUVSICgxIDw8IDcpICAKKworI2RlZmluZSBVQVJUX1JTQV9GUlIgKChVQVJUX1JTQV9CQVNFKSArIDIpICAKKworI2RlZmluZSBVQVJUX1JTQV9USVZTUiAoKFVBUlRfUlNBX0JBU0UpICsgMykgIAorCisjZGVmaW5lIFVBUlRfUlNBX1RDUiAoKFVBUlRfUlNBX0JBU0UpICsgNCkgIAorCisjZGVmaW5lIFVBUlRfUlNBX1RDUl9TV0lUQ0ggKDEgPDwgMCkgIAorCisjZGVmaW5lIFNFUklBTF9SU0FfQkFVRF9CQVNFICg5MjE2MDApCisjZGVmaW5lIFNFUklBTF9SU0FfQkFVRF9CQVNFX0xPIChTRVJJQUxfUlNBX0JBVURfQkFTRSAvIDgpCisKKyNkZWZpbmUgVUFSVF9PTUFQX01EUjEgMHgwOCAgCisjZGVmaW5lIFVBUlRfT01BUF9NRFIyIDB4MDkgIAorI2RlZmluZSBVQVJUX09NQVBfU0NSIDB4MTAgIAorI2RlZmluZSBVQVJUX09NQVBfU1NSIDB4MTEgIAorI2RlZmluZSBVQVJUX09NQVBfRUJMUiAweDEyICAKKyNkZWZpbmUgVUFSVF9PTUFQX09TQ18xMk1fU0VMIDB4MTMgIAorI2RlZmluZSBVQVJUX09NQVBfTVZFUiAweDE0ICAKKyNkZWZpbmUgVUFSVF9PTUFQX1NZU0MgMHgxNSAgCisjZGVmaW5lIFVBUlRfT01BUF9TWVNTIDB4MTYgIAorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NlcmlvLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc2VyaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjA0OTg3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NlcmlvLmgKQEAgLTAsMCArMSw2MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfU0VSSU9fSAorI2RlZmluZSBfU0VSSU9fSAorCisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKworI2RlZmluZSBTUElPQ1NUWVBFIF9JT1coJ3EnLCAweDAxLCB1bnNpZ25lZCBsb25nKQorCisjZGVmaW5lIFNFUklPX1RJTUVPVVQgMQorI2RlZmluZSBTRVJJT19QQVJJVFkgMgorI2RlZmluZSBTRVJJT19GUkFNRSA0CisKKyNkZWZpbmUgU0VSSU9fWFQgMHgwMAorI2RlZmluZSBTRVJJT184MDQyIDB4MDEKKyNkZWZpbmUgU0VSSU9fUlMyMzIgMHgwMgorI2RlZmluZSBTRVJJT19ISUxfTUxDIDB4MDMKKyNkZWZpbmUgU0VSSU9fUFNfUFNUSFJVIDB4MDUKKyNkZWZpbmUgU0VSSU9fODA0Ml9YTCAweDA2CisKKyNkZWZpbmUgU0VSSU9fVU5LTk9XTiAweDAwCisjZGVmaW5lIFNFUklPX01TQyAweDAxCisjZGVmaW5lIFNFUklPX1NVTiAweDAyCisjZGVmaW5lIFNFUklPX01TIDB4MDMKKyNkZWZpbmUgU0VSSU9fTVAgMHgwNAorI2RlZmluZSBTRVJJT19NWiAweDA1CisjZGVmaW5lIFNFUklPX01aUCAweDA2CisjZGVmaW5lIFNFUklPX01aUFAgMHgwNworI2RlZmluZSBTRVJJT19WU1hYWEFBIDB4MDgKKyNkZWZpbmUgU0VSSU9fU1VOS0JEIDB4MTAKKyNkZWZpbmUgU0VSSU9fV0FSUklPUiAweDE4CisjZGVmaW5lIFNFUklPX1NQQUNFT1JCIDB4MTkKKyNkZWZpbmUgU0VSSU9fTUFHRUxMQU4gMHgxYQorI2RlZmluZSBTRVJJT19TUEFDRUJBTEwgMHgxYgorI2RlZmluZSBTRVJJT19HVU5aRSAweDFjCisjZGVmaW5lIFNFUklPX0lGT1JDRSAweDFkCisjZGVmaW5lIFNFUklPX1NUSU5HRVIgMHgxZQorI2RlZmluZSBTRVJJT19ORVdUT04gMHgxZgorI2RlZmluZSBTRVJJT19TVE9XQVdBWSAweDIwCisjZGVmaW5lIFNFUklPX0gzNjAwIDB4MjEKKyNkZWZpbmUgU0VSSU9fUFMyU0VSIDB4MjIKKyNkZWZpbmUgU0VSSU9fVFdJREtCRCAweDIzCisjZGVmaW5lIFNFUklPX1RXSURKT1kgMHgyNAorI2RlZmluZSBTRVJJT19ISUwgMHgyNQorI2RlZmluZSBTRVJJT19TTkVTMjMyIDB4MjYKKyNkZWZpbmUgU0VSSU9fU0VNVEVDSCAweDI3CisjZGVmaW5lIFNFUklPX0xLS0JEIDB4MjgKKyNkZWZpbmUgU0VSSU9fRUxPIDB4MjkKKyNkZWZpbmUgU0VSSU9fTUlDUk9UT1VDSCAweDMwCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NobS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NobS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MDU2ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc2htLmgKQEAgLTAsMCArMSw3NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfU0hNX0hfCisjZGVmaW5lIF9MSU5VWF9TSE1fSF8KKworI2luY2x1ZGUgPGxpbnV4L2lwYy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworI2RlZmluZSBTSE1NQVggMHgyMDAwMDAwICAKKyNkZWZpbmUgU0hNTUlOIDEgIAorI2RlZmluZSBTSE1NTkkgNDA5NiAgCisjZGVmaW5lIFNITUFMTCAoU0hNTUFYL1BBR0VfU0laRSooU0hNTU5JLzE2KSkgIAorI2RlZmluZSBTSE1TRUcgU0hNTU5JICAKKworI2luY2x1ZGUgPGFzbS9zaG1wYXJhbS5oPgorCitzdHJ1Y3Qgc2htaWRfZHMgeworIHN0cnVjdCBpcGNfcGVybSBzaG1fcGVybTsKKyBpbnQgc2htX3NlZ3N6OworIF9fa2VybmVsX3RpbWVfdCBzaG1fYXRpbWU7CisgX19rZXJuZWxfdGltZV90IHNobV9kdGltZTsKKyBfX2tlcm5lbF90aW1lX3Qgc2htX2N0aW1lOworIF9fa2VybmVsX2lwY19waWRfdCBzaG1fY3BpZDsKKyBfX2tlcm5lbF9pcGNfcGlkX3Qgc2htX2xwaWQ7CisgdW5zaWduZWQgc2hvcnQgc2htX25hdHRjaDsKKyB1bnNpZ25lZCBzaG9ydCBzaG1fdW51c2VkOworIHZvaWQgKnNobV91bnVzZWQyOworIHZvaWQgKnNobV91bnVzZWQzOworfTsKKworI2luY2x1ZGUgPGFzbS9zaG1idWYuaD4KKworI2RlZmluZSBTSE1fUiAwNDAwICAKKyNkZWZpbmUgU0hNX1cgMDIwMCAgCisKKyNkZWZpbmUgU0hNX1JET05MWSAwMTAwMDAgIAorI2RlZmluZSBTSE1fUk5EIDAyMDAwMCAgCisjZGVmaW5lIFNITV9SRU1BUCAwNDAwMDAgIAorI2RlZmluZSBTSE1fRVhFQyAwMTAwMDAwICAKKworI2RlZmluZSBTSE1fTE9DSyAxMQorI2RlZmluZSBTSE1fVU5MT0NLIDEyCisKKyNkZWZpbmUgU0hNX1NUQVQgMTMKKyNkZWZpbmUgU0hNX0lORk8gMTQKKworc3RydWN0IHNobWluZm8geworIGludCBzaG1tYXg7CisgaW50IHNobW1pbjsKKyBpbnQgc2htbW5pOworIGludCBzaG1zZWc7CisgaW50IHNobWFsbDsKK307CisKK3N0cnVjdCBzaG1faW5mbyB7CisgaW50IHVzZWRfaWRzOworIHVuc2lnbmVkIGxvbmcgc2htX3RvdDsKKyB1bnNpZ25lZCBsb25nIHNobV9yc3M7CisgdW5zaWduZWQgbG9uZyBzaG1fc3dwOworIHVuc2lnbmVkIGxvbmcgc3dhcF9hdHRlbXB0czsKKyB1bnNpZ25lZCBsb25nIHN3YXBfc3VjY2Vzc2VzOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc2lnbmFsLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc2lnbmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU3N2U1NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zaWduYWwuaApAQCAtMCwwICsxLDE4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9TSUdOQUxfSAorI2RlZmluZSBfTElOVVhfU0lHTkFMX0gKKworI2luY2x1ZGUgPGFzbS9zaWduYWwuaD4KKyNpbmNsdWRlIDxhc20vc2lnaW5mby5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9za2J1ZmYuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9za2J1ZmYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjE0MGE2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NrYnVmZi5oCkBAIC0wLDAgKzEsMTY0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9TS0JVRkZfSAorI2RlZmluZSBfTElOVVhfU0tCVUZGX0gKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CisKKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvbmV0Lmg+CisjaW5jbHVkZSA8bGludXgvdGV4dHNlYXJjaC5oPgorI2luY2x1ZGUgPG5ldC9jaGVja3N1bS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYWVuZ2luZS5oPgorCisjZGVmaW5lIEhBVkVfQUxMT0NfU0tCICAKKyNkZWZpbmUgSEFWRV9BTElHTkFCTEVfU0tCICAKKworI2RlZmluZSBDSEVDS1NVTV9OT05FIDAKKyNkZWZpbmUgQ0hFQ0tTVU1fSFcgMQorI2RlZmluZSBDSEVDS1NVTV9VTk5FQ0VTU0FSWSAyCisKKyNkZWZpbmUgU0tCX0RBVEFfQUxJR04oWCkgKCgoWCkgKyAoU01QX0NBQ0hFX0JZVEVTIC0gMSkpICYgICB+KFNNUF9DQUNIRV9CWVRFUyAtIDEpKQorI2RlZmluZSBTS0JfTUFYX09SREVSKFgsIE9SREVSKSAoKChQQUdFX1NJWkUgPDwgKE9SREVSKSkgLSAoWCkgLSAgIHNpemVvZihzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvKSkgJiAgIH4oU01QX0NBQ0hFX0JZVEVTIC0gMSkpCisjZGVmaW5lIFNLQl9NQVhfSEVBRChYKSAoU0tCX01BWF9PUkRFUigoWCksIDApKQorI2RlZmluZSBTS0JfTUFYX0FMTE9DIChTS0JfTUFYX09SREVSKDAsIDIpKQorCitzdHJ1Y3QgbmV0X2RldmljZTsKKworc3RydWN0IHNrX2J1ZmZfaGVhZCB7CisKKyBzdHJ1Y3Qgc2tfYnVmZiAqbmV4dDsKKyBzdHJ1Y3Qgc2tfYnVmZiAqcHJldjsKKworIF9fdTMyIHFsZW47Cisgc3BpbmxvY2tfdCBsb2NrOworfTsKKworc3RydWN0IHNrX2J1ZmY7CisKKyNkZWZpbmUgTUFYX1NLQl9GUkFHUyAoNjU1MzYvUEFHRV9TSVpFICsgMikKKwordHlwZWRlZiBzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0IHNrYl9mcmFnX3Q7CisKK3N0cnVjdCBza2JfZnJhZ19zdHJ1Y3QgeworIHN0cnVjdCBwYWdlICpwYWdlOworIF9fdTE2IHBhZ2Vfb2Zmc2V0OworIF9fdTE2IHNpemU7Cit9OworCitzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvIHsKKyBhdG9taWNfdCBkYXRhcmVmOworIHVuc2lnbmVkIHNob3J0IG5yX2ZyYWdzOworIHVuc2lnbmVkIHNob3J0IGdzb19zaXplOworCisgdW5zaWduZWQgc2hvcnQgZ3NvX3NlZ3M7CisgdW5zaWduZWQgc2hvcnQgZ3NvX3R5cGU7CisgdW5zaWduZWQgaW50IGlwNl9mcmFnX2lkOworIHN0cnVjdCBza19idWZmICpmcmFnX2xpc3Q7Cisgc2tiX2ZyYWdfdCBmcmFnc1tNQVhfU0tCX0ZSQUdTXTsKK307CisKKyNkZWZpbmUgU0tCX0RBVEFSRUZfU0hJRlQgMTYKKyNkZWZpbmUgU0tCX0RBVEFSRUZfTUFTSyAoKDEgPDwgU0tCX0RBVEFSRUZfU0hJRlQpIC0gMSkKKworc3RydWN0IHNrYl90aW1ldmFsIHsKKyB1MzIgb2ZmX3NlYzsKKyB1MzIgb2ZmX3VzZWM7Cit9OworCitlbnVtIHsKKyBTS0JfRkNMT05FX1VOQVZBSUxBQkxFLAorIFNLQl9GQ0xPTkVfT1JJRywKKyBTS0JfRkNMT05FX0NMT05FLAorfTsKKworZW51bSB7CisgU0tCX0dTT19UQ1BWNCA9IDEgPDwgMCwKKyBTS0JfR1NPX1VEUCA9IDEgPDwgMSwKKworIFNLQl9HU09fRE9ER1kgPSAxIDw8IDIsCisKKyBTS0JfR1NPX1RDUF9FQ04gPSAxIDw8IDMsCisKKyBTS0JfR1NPX1RDUFY2ID0gMSA8PCA0LAorfTsKKworc3RydWN0IHNrX2J1ZmYgeworCisgc3RydWN0IHNrX2J1ZmYgKm5leHQ7Cisgc3RydWN0IHNrX2J1ZmYgKnByZXY7CisKKyBzdHJ1Y3Qgc29jayAqc2s7Cisgc3RydWN0IHNrYl90aW1ldmFsIHRzdGFtcDsKKyBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworIHN0cnVjdCBuZXRfZGV2aWNlICppbnB1dF9kZXY7CisKKyB1bmlvbiB7Cisgc3RydWN0IHRjcGhkciAqdGg7Cisgc3RydWN0IHVkcGhkciAqdWg7Cisgc3RydWN0IGljbXBoZHIgKmljbXBoOworIHN0cnVjdCBpZ21waGRyICppZ21waDsKKyBzdHJ1Y3QgaXBoZHIgKmlwaXBoOworIHN0cnVjdCBpcHY2aGRyICppcHY2aDsKKyB1bnNpZ25lZCBjaGFyICpyYXc7CisgfSBoOworCisgdW5pb24geworIHN0cnVjdCBpcGhkciAqaXBoOworIHN0cnVjdCBpcHY2aGRyICppcHY2aDsKKyBzdHJ1Y3QgYXJwaGRyICphcnBoOworIHVuc2lnbmVkIGNoYXIgKnJhdzsKKyB9IG5oOworCisgdW5pb24geworIHVuc2lnbmVkIGNoYXIgKnJhdzsKKyB9IG1hYzsKKworIHN0cnVjdCBkc3RfZW50cnkgKmRzdDsKKyBzdHJ1Y3Qgc2VjX3BhdGggKnNwOworCisgY2hhciBjYls0OF07CisKKyB1bnNpZ25lZCBpbnQgbGVuLAorIGRhdGFfbGVuLAorIG1hY19sZW4sCisgY3N1bTsKKyBfX3UzMiBwcmlvcml0eTsKKyBfX3U4IGxvY2FsX2RmOjEsCisgY2xvbmVkOjEsCisgaXBfc3VtbWVkOjIsCisgbm9oZHI6MSwKKyBuZmN0aW5mbzozOworIF9fdTggcGt0X3R5cGU6MywKKyBmY2xvbmU6MiwKKyBpcHZzX3Byb3BlcnR5OjE7CisgX19iZTE2IHByb3RvY29sOworCisgdm9pZCAoKmRlc3RydWN0b3IpKHN0cnVjdCBza19idWZmICpza2IpOworCisgdW5zaWduZWQgaW50IHRydWVzaXplOworIGF0b21pY190IHVzZXJzOworIHVuc2lnbmVkIGNoYXIgKmhlYWQsCisgKmRhdGEsCisgKnRhaWwsCisgKmVuZDsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NsYWIuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zbGFiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE2NWE5MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zbGFiLmgKQEAgLTAsMCArMSwxNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfU0xBQl9ICisjZGVmaW5lIF9MSU5VWF9TTEFCX0gKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc21iLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc21iLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJjODk2NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zbWIuaApAQCAtMCwwICsxLDYxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9TTUJfSAorI2RlZmluZSBfTElOVVhfU01CX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK2VudW0gc21iX3Byb3RvY29sIHsKKyBTTUJfUFJPVE9DT0xfTk9ORSwKKyBTTUJfUFJPVE9DT0xfQ09SRSwKKyBTTUJfUFJPVE9DT0xfQ09SRVBMVVMsCisgU01CX1BST1RPQ09MX0xBTk1BTjEsCisgU01CX1BST1RPQ09MX0xBTk1BTjIsCisgU01CX1BST1RPQ09MX05UMQorfTsKKworZW51bSBzbWJfY2FzZV9obmRsIHsKKyBTTUJfQ0FTRV9ERUZBVUxULAorIFNNQl9DQVNFX0xPV0VSLAorIFNNQl9DQVNFX1VQUEVSCit9OworCitzdHJ1Y3Qgc21iX2Rza2F0dHIgeworIF9fdTE2IHRvdGFsOworIF9fdTE2IGFsbG9jYmxvY2tzOworIF9fdTE2IGJsb2Nrc2l6ZTsKKyBfX3UxNiBmcmVlOworfTsKKworc3RydWN0IHNtYl9jb25uX29wdCB7CisKKyB1bnNpZ25lZCBpbnQgZmQ7CisKKyBlbnVtIHNtYl9wcm90b2NvbCBwcm90b2NvbDsKKyBlbnVtIHNtYl9jYXNlX2huZGwgY2FzZV9oYW5kbGluZzsKKworIF9fdTMyIG1heF94bWl0OworIF9fdTE2IHNlcnZlcl91aWQ7CisgX191MTYgdGlkOworCisgX191MTYgc2VjbW9kZTsKKyBfX3UxNiBtYXhtdXg7CisgX191MTYgbWF4dmNzOworIF9fdTE2IHJhd21vZGU7CisgX191MzIgc2Vzc2tleTsKKworIF9fdTMyIG1heHJhdzsKKyBfX3UzMiBjYXBhYmlsaXRpZXM7CisgX19zMTYgc2VydmVyem9uZTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NtcC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NtcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiNDk4MmQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc21wLmgKQEAgLTAsMCArMSwyNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0xJTlVYX1NNUF9ICisjZGVmaW5lIF9fTElOVVhfU01QX0gKKworI2RlZmluZSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpIDAKKyNkZWZpbmUgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCkgMAorI2RlZmluZSBzbXBfY2FsbF9mdW5jdGlvbihmdW5jLGluZm8scmV0cnksd2FpdCkgKHVwX3NtcF9jYWxsX2Z1bmN0aW9uKCkpCisjZGVmaW5lIG9uX2VhY2hfY3B1KGZ1bmMsaW5mbyxyZXRyeSx3YWl0KSAgICh7ICAgbG9jYWxfaXJxX2Rpc2FibGUoKTsgICBmdW5jKGluZm8pOyAgIGxvY2FsX2lycV9lbmFibGUoKTsgICAwOyAgIH0pCisjZGVmaW5lIG51bV9ib290aW5nX2NwdXMoKSAxCisjZGVmaW5lIHNtcF9wcmVwYXJlX2Jvb3RfY3B1KCkgZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIHNtcF9wcm9jZXNzb3JfaWQoKSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpCisjZGVmaW5lIGdldF9jcHUoKSAoeyBwcmVlbXB0X2Rpc2FibGUoKTsgc21wX3Byb2Nlc3Nvcl9pZCgpOyB9KQorI2RlZmluZSBwdXRfY3B1KCkgcHJlZW1wdF9lbmFibGUoKQorI2RlZmluZSBwdXRfY3B1X25vX3Jlc2NoZWQoKSBwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc21wX2xvY2suaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zbXBfbG9jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyM2E5NzAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc21wX2xvY2suaApAQCAtMCwwICsxLDIxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTElOVVhfU01QTE9DS19ICisjZGVmaW5lIF9fTElOVVhfU01QTE9DS19ICisKKyNkZWZpbmUgbG9ja19rZXJuZWwoKSBkbyB7IH0gd2hpbGUoMCkKKyNkZWZpbmUgdW5sb2NrX2tlcm5lbCgpIGRvIHsgfSB3aGlsZSgwKQorI2RlZmluZSByZWxlYXNlX2tlcm5lbF9sb2NrKHRhc2spIGRvIHsgfSB3aGlsZSgwKQorI2RlZmluZSByZWFjcXVpcmVfa2VybmVsX2xvY2sodGFzaykgMAorI2RlZmluZSBrZXJuZWxfbG9ja2VkKCkgMQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zb2NrZXQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zb2NrZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTc4ZGY5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NvY2tldC5oCkBAIC0wLDAgKzEsMjI3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9TT0NLRVRfSAorI2RlZmluZSBfTElOVVhfU09DS0VUX0gKKworI2RlZmluZSBfS19TU19NQVhTSVpFIDEyOCAgCisjZGVmaW5lIF9LX1NTX0FMSUdOU0laRSAoX19hbGlnbm9mX18gKHN0cnVjdCBzb2NrYWRkciAqKSkKKworc3RydWN0IF9fa2VybmVsX3NvY2thZGRyX3N0b3JhZ2UgeworIHVuc2lnbmVkIHNob3J0IHNzX2ZhbWlseTsKKworIGNoYXIgX19kYXRhW19LX1NTX01BWFNJWkUgLSBzaXplb2YodW5zaWduZWQgc2hvcnQpXTsKKworfSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZChfS19TU19BTElHTlNJWkUpKSk7CisKKyNpZiAhZGVmaW5lZChfX0dMSUJDX18pIHx8IF9fR0xJQkNfXyA8IDIKKworI2luY2x1ZGUgPGFzbS9zb2NrZXQuaD4gIAorI2luY2x1ZGUgPGxpbnV4L3NvY2tpb3MuaD4gIAorI2luY2x1ZGUgPGxpbnV4L3Vpby5oPiAgCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4gIAorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+ICAKKwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBzYV9mYW1pbHlfdDsKKworc3RydWN0IHNvY2thZGRyIHsKKyBzYV9mYW1pbHlfdCBzYV9mYW1pbHk7CisgY2hhciBzYV9kYXRhWzE0XTsKK307CisKK3N0cnVjdCBsaW5nZXIgeworIGludCBsX29ub2ZmOworIGludCBsX2xpbmdlcjsKK307CisKKyNkZWZpbmUgc29ja2FkZHJfc3RvcmFnZSBfX2tlcm5lbF9zb2NrYWRkcl9zdG9yYWdlCisKK3N0cnVjdCBtc2doZHIgeworIHZvaWQgKiBtc2dfbmFtZTsKKyBpbnQgbXNnX25hbWVsZW47Cisgc3RydWN0IGlvdmVjICogbXNnX2lvdjsKKyBfX2tlcm5lbF9zaXplX3QgbXNnX2lvdmxlbjsKKyB2b2lkICogbXNnX2NvbnRyb2w7CisgX19rZXJuZWxfc2l6ZV90IG1zZ19jb250cm9sbGVuOworIHVuc2lnbmVkIG1zZ19mbGFnczsKK307CisKK3N0cnVjdCBjbXNnaGRyIHsKKyBfX2tlcm5lbF9zaXplX3QgY21zZ19sZW47CisgaW50IGNtc2dfbGV2ZWw7CisgaW50IGNtc2dfdHlwZTsKK307CisKKyNkZWZpbmUgX19DTVNHX05YVEhEUihjdGwsIGxlbiwgY21zZykgX19jbXNnX254dGhkcigoY3RsKSwobGVuKSwoY21zZykpCisjZGVmaW5lIENNU0dfTlhUSERSKG1oZHIsIGNtc2cpIGNtc2dfbnh0aGRyKChtaGRyKSwgKGNtc2cpKQorCisjZGVmaW5lIENNU0dfQUxJR04obGVuKSAoICgobGVuKStzaXplb2YobG9uZyktMSkgJiB+KHNpemVvZihsb25nKS0xKSApCisKKyNkZWZpbmUgQ01TR19EQVRBKGNtc2cpICgodm9pZCAqKSgoY2hhciAqKShjbXNnKSArIENNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCBjbXNnaGRyKSkpKQorI2RlZmluZSBDTVNHX1NQQUNFKGxlbikgKENNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCBjbXNnaGRyKSkgKyBDTVNHX0FMSUdOKGxlbikpCisjZGVmaW5lIENNU0dfTEVOKGxlbikgKENNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCBjbXNnaGRyKSkgKyAobGVuKSkKKworI2RlZmluZSBfX0NNU0dfRklSU1RIRFIoY3RsLGxlbikgKChsZW4pID49IHNpemVvZihzdHJ1Y3QgY21zZ2hkcikgPyAgIChzdHJ1Y3QgY21zZ2hkciAqKShjdGwpIDogICAoc3RydWN0IGNtc2doZHIgKilOVUxMKQorI2RlZmluZSBDTVNHX0ZJUlNUSERSKG1zZykgX19DTVNHX0ZJUlNUSERSKChtc2cpLT5tc2dfY29udHJvbCwgKG1zZyktPm1zZ19jb250cm9sbGVuKQorI2RlZmluZSBDTVNHX09LKG1oZHIsIGNtc2cpICgoY21zZyktPmNtc2dfbGVuID49IHNpemVvZihzdHJ1Y3QgY21zZ2hkcikgJiYgICAoY21zZyktPmNtc2dfbGVuIDw9ICh1bnNpZ25lZCBsb25nKSAgICgobWhkciktPm1zZ19jb250cm9sbGVuIC0gICAoKGNoYXIgKikoY21zZykgLSAoY2hhciAqKShtaGRyKS0+bXNnX2NvbnRyb2wpKSkKKworI2lmZGVmIF9fR05VQ19fCisjZGVmaW5lIF9fS0lOTElORSBzdGF0aWMgX19pbmxpbmVfXworI2VsaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKKyNkZWZpbmUgX19LSU5MSU5FIHN0YXRpYyBpbmxpbmUKKyNlbHNlCisjZGVmaW5lIF9fS0lOTElORSBzdGF0aWMKKyNlbmRpZgorCitfX0tJTkxJTkUgc3RydWN0IGNtc2doZHIgKiBfX2Ntc2dfbnh0aGRyKHZvaWQgKl9fY3RsLCBfX2tlcm5lbF9zaXplX3QgX19zaXplLAorIHN0cnVjdCBjbXNnaGRyICpfX2Ntc2cpCit7Cisgc3RydWN0IGNtc2doZHIgKiBfX3B0cjsKKworIF9fcHRyID0gKHN0cnVjdCBjbXNnaGRyKikoKCh1bnNpZ25lZCBjaGFyICopIF9fY21zZykgKyBDTVNHX0FMSUdOKF9fY21zZy0+Y21zZ19sZW4pKTsKKyBpZiAoKHVuc2lnbmVkIGxvbmcpKChjaGFyKikoX19wdHIrMSkgLSAoY2hhciAqKSBfX2N0bCkgPiBfX3NpemUpCisgcmV0dXJuIChzdHJ1Y3QgY21zZ2hkciAqKTA7CisKKyByZXR1cm4gX19wdHI7Cit9CisKK19fS0lOTElORSBzdHJ1Y3QgY21zZ2hkciAqIGNtc2dfbnh0aGRyIChzdHJ1Y3QgbXNnaGRyICpfX21zZywgc3RydWN0IGNtc2doZHIgKl9fY21zZykKK3sKKyByZXR1cm4gX19jbXNnX254dGhkcihfX21zZy0+bXNnX2NvbnRyb2wsIF9fbXNnLT5tc2dfY29udHJvbGxlbiwgX19jbXNnKTsKK30KKworI2RlZmluZSBTQ01fUklHSFRTIDB4MDEgIAorI2RlZmluZSBTQ01fQ1JFREVOVElBTFMgMHgwMiAgCisjZGVmaW5lIFNDTV9TRUNVUklUWSAweDAzICAKKworc3RydWN0IHVjcmVkIHsKKyBfX3UzMiBwaWQ7CisgX191MzIgdWlkOworIF9fdTMyIGdpZDsKK307CisKKyNkZWZpbmUgQUZfVU5TUEVDIDAKKyNkZWZpbmUgQUZfVU5JWCAxICAKKyNkZWZpbmUgQUZfTE9DQUwgMSAgCisjZGVmaW5lIEFGX0lORVQgMiAgCisjZGVmaW5lIEFGX0FYMjUgMyAgCisjZGVmaW5lIEFGX0lQWCA0ICAKKyNkZWZpbmUgQUZfQVBQTEVUQUxLIDUgIAorI2RlZmluZSBBRl9ORVRST00gNiAgCisjZGVmaW5lIEFGX0JSSURHRSA3ICAKKyNkZWZpbmUgQUZfQVRNUFZDIDggIAorI2RlZmluZSBBRl9YMjUgOSAgCisjZGVmaW5lIEFGX0lORVQ2IDEwICAKKyNkZWZpbmUgQUZfUk9TRSAxMSAgCisjZGVmaW5lIEFGX0RFQ25ldCAxMiAgCisjZGVmaW5lIEFGX05FVEJFVUkgMTMgIAorI2RlZmluZSBBRl9TRUNVUklUWSAxNCAgCisjZGVmaW5lIEFGX0tFWSAxNSAgCisjZGVmaW5lIEFGX05FVExJTksgMTYKKyNkZWZpbmUgQUZfUk9VVEUgQUZfTkVUTElOSyAgCisjZGVmaW5lIEFGX1BBQ0tFVCAxNyAgCisjZGVmaW5lIEFGX0FTSCAxOCAgCisjZGVmaW5lIEFGX0VDT05FVCAxOSAgCisjZGVmaW5lIEFGX0FUTVNWQyAyMCAgCisjZGVmaW5lIEFGX1NOQSAyMiAgCisjZGVmaW5lIEFGX0lSREEgMjMgIAorI2RlZmluZSBBRl9QUFBPWCAyNCAgCisjZGVmaW5lIEFGX1dBTlBJUEUgMjUgIAorI2RlZmluZSBBRl9MTEMgMjYgIAorI2RlZmluZSBBRl9USVBDIDMwICAKKyNkZWZpbmUgQUZfQkxVRVRPT1RIIDMxICAKKyNkZWZpbmUgQUZfTUFYIDMyICAKKworI2RlZmluZSBQRl9VTlNQRUMgQUZfVU5TUEVDCisjZGVmaW5lIFBGX1VOSVggQUZfVU5JWAorI2RlZmluZSBQRl9MT0NBTCBBRl9MT0NBTAorI2RlZmluZSBQRl9JTkVUIEFGX0lORVQKKyNkZWZpbmUgUEZfQVgyNSBBRl9BWDI1CisjZGVmaW5lIFBGX0lQWCBBRl9JUFgKKyNkZWZpbmUgUEZfQVBQTEVUQUxLIEFGX0FQUExFVEFMSworI2RlZmluZSBQRl9ORVRST00gQUZfTkVUUk9NCisjZGVmaW5lIFBGX0JSSURHRSBBRl9CUklER0UKKyNkZWZpbmUgUEZfQVRNUFZDIEFGX0FUTVBWQworI2RlZmluZSBQRl9YMjUgQUZfWDI1CisjZGVmaW5lIFBGX0lORVQ2IEFGX0lORVQ2CisjZGVmaW5lIFBGX1JPU0UgQUZfUk9TRQorI2RlZmluZSBQRl9ERUNuZXQgQUZfREVDbmV0CisjZGVmaW5lIFBGX05FVEJFVUkgQUZfTkVUQkVVSQorI2RlZmluZSBQRl9TRUNVUklUWSBBRl9TRUNVUklUWQorI2RlZmluZSBQRl9LRVkgQUZfS0VZCisjZGVmaW5lIFBGX05FVExJTksgQUZfTkVUTElOSworI2RlZmluZSBQRl9ST1VURSBBRl9ST1VURQorI2RlZmluZSBQRl9QQUNLRVQgQUZfUEFDS0VUCisjZGVmaW5lIFBGX0FTSCBBRl9BU0gKKyNkZWZpbmUgUEZfRUNPTkVUIEFGX0VDT05FVAorI2RlZmluZSBQRl9BVE1TVkMgQUZfQVRNU1ZDCisjZGVmaW5lIFBGX1NOQSBBRl9TTkEKKyNkZWZpbmUgUEZfSVJEQSBBRl9JUkRBCisjZGVmaW5lIFBGX1BQUE9YIEFGX1BQUE9YCisjZGVmaW5lIFBGX1dBTlBJUEUgQUZfV0FOUElQRQorI2RlZmluZSBQRl9MTEMgQUZfTExDCisjZGVmaW5lIFBGX1RJUEMgQUZfVElQQworI2RlZmluZSBQRl9CTFVFVE9PVEggQUZfQkxVRVRPT1RICisjZGVmaW5lIFBGX01BWCBBRl9NQVgKKworI2RlZmluZSBTT01BWENPTk4gMTI4CisKKyNkZWZpbmUgTVNHX09PQiAxCisjZGVmaW5lIE1TR19QRUVLIDIKKyNkZWZpbmUgTVNHX0RPTlRST1VURSA0CisjZGVmaW5lIE1TR19UUllIQVJEIDQgIAorI2RlZmluZSBNU0dfQ1RSVU5DIDgKKyNkZWZpbmUgTVNHX1BST0JFIDB4MTAgIAorI2RlZmluZSBNU0dfVFJVTkMgMHgyMAorI2RlZmluZSBNU0dfRE9OVFdBSVQgMHg0MCAgCisjZGVmaW5lIE1TR19FT1IgMHg4MCAgCisjZGVmaW5lIE1TR19XQUlUQUxMIDB4MTAwICAKKyNkZWZpbmUgTVNHX0ZJTiAweDIwMAorI2RlZmluZSBNU0dfU1lOIDB4NDAwCisjZGVmaW5lIE1TR19DT05GSVJNIDB4ODAwICAKKyNkZWZpbmUgTVNHX1JTVCAweDEwMDAKKyNkZWZpbmUgTVNHX0VSUlFVRVVFIDB4MjAwMCAgCisjZGVmaW5lIE1TR19OT1NJR05BTCAweDQwMDAgIAorI2RlZmluZSBNU0dfTU9SRSAweDgwMDAgIAorCisjZGVmaW5lIE1TR19FT0YgTVNHX0ZJTgorCisjZGVmaW5lIE1TR19DTVNHX0NPTVBBVCAwICAKKworI2RlZmluZSBTT0xfSVAgMAorCisjZGVmaW5lIFNPTF9UQ1AgNgorI2RlZmluZSBTT0xfVURQIDE3CisjZGVmaW5lIFNPTF9JUFY2IDQxCisjZGVmaW5lIFNPTF9JQ01QVjYgNTgKKyNkZWZpbmUgU09MX1NDVFAgMTMyCisjZGVmaW5lIFNPTF9SQVcgMjU1CisjZGVmaW5lIFNPTF9JUFggMjU2CisjZGVmaW5lIFNPTF9BWDI1IDI1NworI2RlZmluZSBTT0xfQVRBTEsgMjU4CisjZGVmaW5lIFNPTF9ORVRST00gMjU5CisjZGVmaW5lIFNPTF9ST1NFIDI2MAorI2RlZmluZSBTT0xfREVDTkVUIDI2MQorI2RlZmluZSBTT0xfWDI1IDI2MgorI2RlZmluZSBTT0xfUEFDS0VUIDI2MworI2RlZmluZSBTT0xfQVRNIDI2NCAgCisjZGVmaW5lIFNPTF9BQUwgMjY1ICAKKyNkZWZpbmUgU09MX0lSREEgMjY2CisjZGVmaW5lIFNPTF9ORVRCRVVJIDI2NworI2RlZmluZSBTT0xfTExDIDI2OAorI2RlZmluZSBTT0xfRENDUCAyNjkKKyNkZWZpbmUgU09MX05FVExJTksgMjcwCisjZGVmaW5lIFNPTF9USVBDIDI3MQorCisjZGVmaW5lIElQWF9UWVBFIDEKKworI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zb2NraW9zLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc29ja2lvcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxMTEzNTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc29ja2lvcy5oCkBAIC0wLDAgKzEsMTA3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9TT0NLSU9TX0gKKyNkZWZpbmUgX0xJTlVYX1NPQ0tJT1NfSAorCisjaW5jbHVkZSA8YXNtL3NvY2tpb3MuaD4KKworI2RlZmluZSBTSU9DSU5RIEZJT05SRUFECisjZGVmaW5lIFNJT0NPVVRRIFRJT0NPVVRRCisKKyNkZWZpbmUgU0lPQ0FERFJUIDB4ODkwQiAgCisjZGVmaW5lIFNJT0NERUxSVCAweDg5MEMgIAorI2RlZmluZSBTSU9DUlRNU0cgMHg4OTBEICAKKworI2RlZmluZSBTSU9DR0lGTkFNRSAweDg5MTAgIAorI2RlZmluZSBTSU9DU0lGTElOSyAweDg5MTEgIAorI2RlZmluZSBTSU9DR0lGQ09ORiAweDg5MTIgIAorI2RlZmluZSBTSU9DR0lGRkxBR1MgMHg4OTEzICAKKyNkZWZpbmUgU0lPQ1NJRkZMQUdTIDB4ODkxNCAgCisjZGVmaW5lIFNJT0NHSUZBRERSIDB4ODkxNSAgCisjZGVmaW5lIFNJT0NTSUZBRERSIDB4ODkxNiAgCisjZGVmaW5lIFNJT0NHSUZEU1RBRERSIDB4ODkxNyAgCisjZGVmaW5lIFNJT0NTSUZEU1RBRERSIDB4ODkxOCAgCisjZGVmaW5lIFNJT0NHSUZCUkRBRERSIDB4ODkxOSAgCisjZGVmaW5lIFNJT0NTSUZCUkRBRERSIDB4ODkxYSAgCisjZGVmaW5lIFNJT0NHSUZORVRNQVNLIDB4ODkxYiAgCisjZGVmaW5lIFNJT0NTSUZORVRNQVNLIDB4ODkxYyAgCisjZGVmaW5lIFNJT0NHSUZNRVRSSUMgMHg4OTFkICAKKyNkZWZpbmUgU0lPQ1NJRk1FVFJJQyAweDg5MWUgIAorI2RlZmluZSBTSU9DR0lGTUVNIDB4ODkxZiAgCisjZGVmaW5lIFNJT0NTSUZNRU0gMHg4OTIwICAKKyNkZWZpbmUgU0lPQ0dJRk1UVSAweDg5MjEgIAorI2RlZmluZSBTSU9DU0lGTVRVIDB4ODkyMiAgCisjZGVmaW5lIFNJT0NTSUZOQU1FIDB4ODkyMyAgCisjZGVmaW5lIFNJT0NTSUZIV0FERFIgMHg4OTI0ICAKKyNkZWZpbmUgU0lPQ0dJRkVOQ0FQIDB4ODkyNSAgCisjZGVmaW5lIFNJT0NTSUZFTkNBUCAweDg5MjYgCisjZGVmaW5lIFNJT0NHSUZIV0FERFIgMHg4OTI3ICAKKyNkZWZpbmUgU0lPQ0dJRlNMQVZFIDB4ODkyOSAgCisjZGVmaW5lIFNJT0NTSUZTTEFWRSAweDg5MzAKKyNkZWZpbmUgU0lPQ0FERE1VTFRJIDB4ODkzMSAgCisjZGVmaW5lIFNJT0NERUxNVUxUSSAweDg5MzIKKyNkZWZpbmUgU0lPQ0dJRklOREVYIDB4ODkzMyAgCisjZGVmaW5lIFNJT0dJRklOREVYIFNJT0NHSUZJTkRFWCAgCisjZGVmaW5lIFNJT0NTSUZQRkxBR1MgMHg4OTM0ICAKKyNkZWZpbmUgU0lPQ0dJRlBGTEFHUyAweDg5MzUKKyNkZWZpbmUgU0lPQ0RJRkFERFIgMHg4OTM2ICAKKyNkZWZpbmUgU0lPQ1NJRkhXQlJPQURDQVNUIDB4ODkzNyAgCisjZGVmaW5lIFNJT0NHSUZDT1VOVCAweDg5MzggIAorI2RlZmluZSBTSU9DS0lMTEFERFIgMHg4OTM5ICAKKworI2RlZmluZSBTSU9DR0lGQlIgMHg4OTQwICAKKyNkZWZpbmUgU0lPQ1NJRkJSIDB4ODk0MSAgCisKKyNkZWZpbmUgU0lPQ0dJRlRYUUxFTiAweDg5NDIgIAorI2RlZmluZSBTSU9DU0lGVFhRTEVOIDB4ODk0MyAgCisKKyNkZWZpbmUgU0lPQ0VUSFRPT0wgMHg4OTQ2ICAKKworI2RlZmluZSBTSU9DR01JSVBIWSAweDg5NDcgIAorI2RlZmluZSBTSU9DR01JSVJFRyAweDg5NDggIAorI2RlZmluZSBTSU9DU01JSVJFRyAweDg5NDkgIAorCisjZGVmaW5lIFNJT0NXQU5ERVYgMHg4OTRBICAKKworI2RlZmluZSBTSU9DREFSUCAweDg5NTMgIAorI2RlZmluZSBTSU9DR0FSUCAweDg5NTQgIAorI2RlZmluZSBTSU9DU0FSUCAweDg5NTUgIAorCisjZGVmaW5lIFNJT0NEUkFSUCAweDg5NjAgIAorI2RlZmluZSBTSU9DR1JBUlAgMHg4OTYxICAKKyNkZWZpbmUgU0lPQ1NSQVJQIDB4ODk2MiAgCisKKyNkZWZpbmUgU0lPQ0dJRk1BUCAweDg5NzAgIAorI2RlZmluZSBTSU9DU0lGTUFQIDB4ODk3MSAgCisKKyNkZWZpbmUgU0lPQ0FERERMQ0kgMHg4OTgwICAKKyNkZWZpbmUgU0lPQ0RFTERMQ0kgMHg4OTgxICAKKworI2RlZmluZSBTSU9DR0lGVkxBTiAweDg5ODIgIAorI2RlZmluZSBTSU9DU0lGVkxBTiAweDg5ODMgIAorCisjZGVmaW5lIFNJT0NCT05ERU5TTEFWRSAweDg5OTAgIAorI2RlZmluZSBTSU9DQk9ORFJFTEVBU0UgMHg4OTkxICAKKyNkZWZpbmUgU0lPQ0JPTkRTRVRIV0FERFIgMHg4OTkyICAKKyNkZWZpbmUgU0lPQ0JPTkRTTEFWRUlORk9RVUVSWSAweDg5OTMgIAorI2RlZmluZSBTSU9DQk9ORElORk9RVUVSWSAweDg5OTQgIAorI2RlZmluZSBTSU9DQk9ORENIQU5HRUFDVElWRSAweDg5OTUgIAorCisjZGVmaW5lIFNJT0NCUkFEREJSIDB4ODlhMCAgCisjZGVmaW5lIFNJT0NCUkRFTEJSIDB4ODlhMSAgCisjZGVmaW5lIFNJT0NCUkFERElGIDB4ODlhMiAgCisjZGVmaW5lIFNJT0NCUkRFTElGIDB4ODlhMyAgCisKKyNkZWZpbmUgU0lPQ0RFVlBSSVZBVEUgMHg4OUYwICAKKworI2RlZmluZSBTSU9DUFJPVE9QUklWQVRFIDB4ODlFMCAgCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zb3VuZGNhcmQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zb3VuZGNhcmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzY5YzI4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NvdW5kY2FyZC5oCkBAIC0wLDAgKzEsODMxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIFNPVU5EQ0FSRF9ICisjZGVmaW5lIFNPVU5EQ0FSRF9ICisKKyNkZWZpbmUgU09VTkRfVkVSU0lPTiAweDAzMDgwMgorI2RlZmluZSBPUEVOX1NPVU5EX1NZU1RFTQorCisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKworI2luY2x1ZGUgPGVuZGlhbi5oPgorCisjZGVmaW5lIFNORENBUkRfQURMSUIgMQorI2RlZmluZSBTTkRDQVJEX1NCIDIKKyNkZWZpbmUgU05EQ0FSRF9QQVMgMworI2RlZmluZSBTTkRDQVJEX0dVUyA0CisjZGVmaW5lIFNORENBUkRfTVBVNDAxIDUKKyNkZWZpbmUgU05EQ0FSRF9TQjE2IDYKKyNkZWZpbmUgU05EQ0FSRF9TQjE2TUlESSA3CisjZGVmaW5lIFNORENBUkRfVUFSVDY4NTAgOAorI2RlZmluZSBTTkRDQVJEX0dVUzE2IDkKKyNkZWZpbmUgU05EQ0FSRF9NU1MgMTAKKyNkZWZpbmUgU05EQ0FSRF9QU1MgMTEKKyNkZWZpbmUgU05EQ0FSRF9TU0NBUEUgMTIKKyNkZWZpbmUgU05EQ0FSRF9QU1NfTVBVIDEzCisjZGVmaW5lIFNORENBUkRfUFNTX01TUyAxNAorI2RlZmluZSBTTkRDQVJEX1NTQ0FQRV9NU1MgMTUKKyNkZWZpbmUgU05EQ0FSRF9UUlhQUk8gMTYKKyNkZWZpbmUgU05EQ0FSRF9UUlhQUk9fU0IgMTcKKyNkZWZpbmUgU05EQ0FSRF9UUlhQUk9fTVBVIDE4CisjZGVmaW5lIFNORENBUkRfTUFEMTYgMTkKKyNkZWZpbmUgU05EQ0FSRF9NQUQxNl9NUFUgMjAKKyNkZWZpbmUgU05EQ0FSRF9DUzQyMzIgMjEKKyNkZWZpbmUgU05EQ0FSRF9DUzQyMzJfTVBVIDIyCisjZGVmaW5lIFNORENBUkRfTUFVSSAyMworI2RlZmluZSBTTkRDQVJEX1BTRVVET19NU1MgMjQKKyNkZWZpbmUgU05EQ0FSRF9HVVNQTlAgMjUKKyNkZWZpbmUgU05EQ0FSRF9VQVJUNDAxIDI2CisKKyNpZm5kZWYgX1NJT1dSCisjaWYgZGVmaW5lZChfSU9XUikgJiYgKGRlZmluZWQoX0FJWCkgfHwgIWRlZmluZWQoc3VuKSAmJiAhZGVmaW5lZChzcGFyYykgJiYgIWRlZmluZWQoX19zcGFyY19fKSAmJiAhZGVmaW5lZChfX0lOQ2lvY3RsaCkgJiYgIWRlZmluZWQoX19MeW54X18pKQorCisjZGVmaW5lIFNJT0NQQVJNX01BU0sgSU9DUEFSTV9NQVNLCisjZGVmaW5lIFNJT0NfVk9JRCBJT0NfVk9JRAorI2RlZmluZSBTSU9DX09VVCBJT0NfT1VUCisjZGVmaW5lIFNJT0NfSU4gSU9DX0lOCisjZGVmaW5lIFNJT0NfSU5PVVQgSU9DX0lOT1VUCisjZGVmaW5lIF9TSU9DX1NJWkUgX0lPQ19TSVpFCisjZGVmaW5lIF9TSU9DX0RJUiBfSU9DX0RJUgorI2RlZmluZSBfU0lPQ19OT05FIF9JT0NfTk9ORQorI2RlZmluZSBfU0lPQ19SRUFEIF9JT0NfUkVBRAorI2RlZmluZSBfU0lPQ19XUklURSBfSU9DX1dSSVRFCisjZGVmaW5lIF9TSU8gX0lPCisjZGVmaW5lIF9TSU9SIF9JT1IKKyNkZWZpbmUgX1NJT1cgX0lPVworI2RlZmluZSBfU0lPV1IgX0lPV1IKKyNlbHNlCisKKyNkZWZpbmUgU0lPQ1BBUk1fTUFTSyAweDFmZmYgIAorI2RlZmluZSBTSU9DX1ZPSUQgMHgwMDAwMDAwMCAgCisjZGVmaW5lIFNJT0NfT1VUIDB4MjAwMDAwMDAgIAorI2RlZmluZSBTSU9DX0lOIDB4NDAwMDAwMDAgIAorI2RlZmluZSBTSU9DX0lOT1VUIChTSU9DX0lOfFNJT0NfT1VUKQorCisjZGVmaW5lIF9TSU8oeCx5KSAoKGludCkoU0lPQ19WT0lEfCh4PDw4KXx5KSkKKyNkZWZpbmUgX1NJT1IoeCx5LHQpICgoaW50KShTSU9DX09VVHwoKHNpemVvZih0KSZTSU9DUEFSTV9NQVNLKTw8MTYpfCh4PDw4KXx5KSkKKyNkZWZpbmUgX1NJT1coeCx5LHQpICgoaW50KShTSU9DX0lOfCgoc2l6ZW9mKHQpJlNJT0NQQVJNX01BU0spPDwxNil8KHg8PDgpfHkpKQorCisjZGVmaW5lIF9TSU9XUih4LHksdCkgKChpbnQpKFNJT0NfSU5PVVR8KChzaXplb2YodCkmU0lPQ1BBUk1fTUFTSyk8PDE2KXwoeDw8OCl8eSkpCisjZGVmaW5lIF9TSU9DX1NJWkUoeCkgKCh4Pj4xNikmU0lPQ1BBUk1fTUFTSykgCisjZGVmaW5lIF9TSU9DX0RJUih4KSAoeCAmIDB4ZjAwMDAwMDApCisjZGVmaW5lIF9TSU9DX05PTkUgU0lPQ19WT0lECisjZGVmaW5lIF9TSU9DX1JFQUQgU0lPQ19PVVQKKyNkZWZpbmUgX1NJT0NfV1JJVEUgU0lPQ19JTgorI2VuZGlmCisjZW5kaWYKKworI2RlZmluZSBTTkRDVExfU0VRX1JFU0VUIF9TSU8gKCdRJywgMCkKKyNkZWZpbmUgU05EQ1RMX1NFUV9TWU5DIF9TSU8gKCdRJywgMSkKKyNkZWZpbmUgU05EQ1RMX1NZTlRIX0lORk8gX1NJT1dSKCdRJywgMiwgc3RydWN0IHN5bnRoX2luZm8pCisjZGVmaW5lIFNORENUTF9TRVFfQ1RSTFJBVEUgX1NJT1dSKCdRJywgMywgaW50KSAgCisjZGVmaW5lIFNORENUTF9TRVFfR0VUT1VUQ09VTlQgX1NJT1IgKCdRJywgNCwgaW50KQorI2RlZmluZSBTTkRDVExfU0VRX0dFVElOQ09VTlQgX1NJT1IgKCdRJywgNSwgaW50KQorI2RlZmluZSBTTkRDVExfU0VRX1BFUkNNT0RFIF9TSU9XICgnUScsIDYsIGludCkKKyNkZWZpbmUgU05EQ1RMX0ZNX0xPQURfSU5TVFIgX1NJT1cgKCdRJywgNywgc3RydWN0IHNiaV9pbnN0cnVtZW50KSAgCisjZGVmaW5lIFNORENUTF9TRVFfVEVTVE1JREkgX1NJT1cgKCdRJywgOCwgaW50KQorI2RlZmluZSBTTkRDVExfU0VRX1JFU0VUU0FNUExFUyBfU0lPVyAoJ1EnLCA5LCBpbnQpCisjZGVmaW5lIFNORENUTF9TRVFfTlJTWU5USFMgX1NJT1IgKCdRJywxMCwgaW50KQorI2RlZmluZSBTTkRDVExfU0VRX05STUlESVMgX1NJT1IgKCdRJywxMSwgaW50KQorI2RlZmluZSBTTkRDVExfTUlESV9JTkZPIF9TSU9XUignUScsMTIsIHN0cnVjdCBtaWRpX2luZm8pCisjZGVmaW5lIFNORENUTF9TRVFfVEhSRVNIT0xEIF9TSU9XICgnUScsMTMsIGludCkKKyNkZWZpbmUgU05EQ1RMX1NZTlRIX01FTUFWTCBfU0lPV1IoJ1EnLDE0LCBpbnQpICAKKyNkZWZpbmUgU05EQ1RMX0ZNXzRPUF9FTkFCTEUgX1NJT1cgKCdRJywxNSwgaW50KSAgCisjZGVmaW5lIFNORENUTF9TRVFfUEFOSUMgX1NJTyAoJ1EnLDE3KQorI2RlZmluZSBTTkRDVExfU0VRX09VVE9GQkFORCBfU0lPVyAoJ1EnLDE4LCBzdHJ1Y3Qgc2VxX2V2ZW50X3JlYykKKyNkZWZpbmUgU05EQ1RMX1NFUV9HRVRUSU1FIF9TSU9SICgnUScsMTksIGludCkKKyNkZWZpbmUgU05EQ1RMX1NZTlRIX0lEIF9TSU9XUignUScsMjAsIHN0cnVjdCBzeW50aF9pbmZvKQorI2RlZmluZSBTTkRDVExfU1lOVEhfQ09OVFJPTCBfU0lPV1IoJ1EnLDIxLCBzdHJ1Y3Qgc3ludGhfY29udHJvbCkKKyNkZWZpbmUgU05EQ1RMX1NZTlRIX1JFTU9WRVNBTVBMRSBfU0lPV1IoJ1EnLDIyLCBzdHJ1Y3QgcmVtb3ZlX3NhbXBsZSkKKwordHlwZWRlZiBzdHJ1Y3Qgc3ludGhfY29udHJvbAoreworIGludCBkZXZubzsKKyBjaGFyIGRhdGFbNDAwMF07Cit9c3ludGhfY29udHJvbDsKKwordHlwZWRlZiBzdHJ1Y3QgcmVtb3ZlX3NhbXBsZQoreworIGludCBkZXZubzsKKyBpbnQgYmFua25vOworIGludCBpbnN0cm5vOworfSByZW1vdmVfc2FtcGxlOworCit0eXBlZGVmIHN0cnVjdCBzZXFfZXZlbnRfcmVjIHsKKyB1bnNpZ25lZCBjaGFyIGFycls4XTsKK30gc2VxX2V2ZW50X3JlYzsKKworI2RlZmluZSBTTkRDVExfVE1SX1RJTUVCQVNFIF9TSU9XUignVCcsIDEsIGludCkKKyNkZWZpbmUgU05EQ1RMX1RNUl9TVEFSVCBfU0lPICgnVCcsIDIpCisjZGVmaW5lIFNORENUTF9UTVJfU1RPUCBfU0lPICgnVCcsIDMpCisjZGVmaW5lIFNORENUTF9UTVJfQ09OVElOVUUgX1NJTyAoJ1QnLCA0KQorI2RlZmluZSBTTkRDVExfVE1SX1RFTVBPIF9TSU9XUignVCcsIDUsIGludCkKKyNkZWZpbmUgU05EQ1RMX1RNUl9TT1VSQ0UgX1NJT1dSKCdUJywgNiwgaW50KQorI2RlZmluZSBUTVJfSU5URVJOQUwgMHgwMDAwMDAwMQorI2RlZmluZSBUTVJfRVhURVJOQUwgMHgwMDAwMDAwMgorI2RlZmluZSBUTVJfTU9ERV9NSURJIDB4MDAwMDAwMTAKKyNkZWZpbmUgVE1SX01PREVfRlNLIDB4MDAwMDAwMjAKKyNkZWZpbmUgVE1SX01PREVfQ0xTIDB4MDAwMDAwNDAKKyNkZWZpbmUgVE1SX01PREVfU01QVEUgMHgwMDAwMDA4MAorI2RlZmluZSBTTkRDVExfVE1SX01FVFJPTk9NRSBfU0lPVyAoJ1QnLCA3LCBpbnQpCisjZGVmaW5lIFNORENUTF9UTVJfU0VMRUNUIF9TSU9XICgnVCcsIDgsIGludCkKKworI2RlZmluZSBfTElOVVhfUEFUQ0hLRVlfSF9JTkRJUkVDVAorI2luY2x1ZGUgPGxpbnV4L3BhdGNoa2V5Lmg+CisjdW5kZWYgX0xJTlVYX1BBVENIS0VZX0hfSU5ESVJFQ1QKKworI2lmZGVmIF9fQllURV9PUkRFUgorI2lmIF9fQllURV9PUkRFUiA9PSBfX0JJR19FTkRJQU4KKyNkZWZpbmUgQUZNVF9TMTZfTkUgQUZNVF9TMTZfQkUKKyNlbGlmIF9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4KKyNkZWZpbmUgQUZNVF9TMTZfTkUgQUZNVF9TMTZfTEUKKyNlbHNlCisjZXJyb3IgImNvdWxkIG5vdCBkZXRlcm1pbmUgYnl0ZSBvcmRlciIKKyNlbmRpZgorI2VuZGlmCisKK3N0cnVjdCBwYXRjaF9pbmZvIHsKKyB1bnNpZ25lZCBzaG9ydCBrZXk7CisjZGVmaW5lIFdBVkVfUEFUQ0ggX1BBVENIS0VZKDB4MDQpCisjZGVmaW5lIEdVU19QQVRDSCBXQVZFX1BBVENICisjZGVmaW5lIFdBVkVGUk9OVF9QQVRDSCBfUEFUQ0hLRVkoMHgwNikKKworIHNob3J0IGRldmljZV9ubzsKKyBzaG9ydCBpbnN0cl9ubzsKKworIHVuc2lnbmVkIGludCBtb2RlOworCisjZGVmaW5lIFdBVkVfMTZfQklUUyAweDAxICAKKyNkZWZpbmUgV0FWRV9VTlNJR05FRCAweDAyICAKKyNkZWZpbmUgV0FWRV9MT09QSU5HIDB4MDQgIAorI2RlZmluZSBXQVZFX0JJRElSX0xPT1AgMHgwOCAgCisjZGVmaW5lIFdBVkVfTE9PUF9CQUNLIDB4MTAgIAorI2RlZmluZSBXQVZFX1NVU1RBSU5fT04gMHgyMCAgCisjZGVmaW5lIFdBVkVfRU5WRUxPUEVTIDB4NDAgIAorI2RlZmluZSBXQVZFX0ZBU1RfUkVMRUFTRSAweDgwICAKKworI2RlZmluZSBXQVZFX1ZJQlJBVE8gMHgwMDAxMDAwMCAgCisjZGVmaW5lIFdBVkVfVFJFTU9MTyAweDAwMDIwMDAwICAKKyNkZWZpbmUgV0FWRV9TQ0FMRSAweDAwMDQwMDAwICAKKyNkZWZpbmUgV0FWRV9GUkFDVElPTlMgMHgwMDA4MDAwMCAgCisKKyNkZWZpbmUgV0FWRV9ST00gMHg0MDAwMDAwMCAgCisjZGVmaW5lIFdBVkVfTVVMQVcgMHgyMDAwMDAwMCAgCisKKyBpbnQgbGVuOworIGludCBsb29wX3N0YXJ0LCBsb29wX2VuZDsKKworIHVuc2lnbmVkIGludCBiYXNlX2ZyZXE7CisgdW5zaWduZWQgaW50IGJhc2Vfbm90ZTsKKyB1bnNpZ25lZCBpbnQgaGlnaF9ub3RlOworIHVuc2lnbmVkIGludCBsb3dfbm90ZTsKKyBpbnQgcGFubmluZzsKKyBpbnQgZGV0dW5pbmc7CisKKyB1bnNpZ25lZCBjaGFyIGVudl9yYXRlWyA2IF07CisgdW5zaWduZWQgY2hhciBlbnZfb2Zmc2V0WyA2IF07CisKKyB1bnNpZ25lZCBjaGFyIHRyZW1vbG9fc3dlZXA7CisgdW5zaWduZWQgY2hhciB0cmVtb2xvX3JhdGU7CisgdW5zaWduZWQgY2hhciB0cmVtb2xvX2RlcHRoOworCisgdW5zaWduZWQgY2hhciB2aWJyYXRvX3N3ZWVwOworIHVuc2lnbmVkIGNoYXIgdmlicmF0b19yYXRlOworIHVuc2lnbmVkIGNoYXIgdmlicmF0b19kZXB0aDsKKworIGludCBzY2FsZV9mcmVxdWVuY3k7CisgdW5zaWduZWQgaW50IHNjYWxlX2ZhY3RvcjsKKworIGludCB2b2x1bWU7CisgaW50IGZyYWN0aW9uczsKKyBpbnQgcmVzZXJ2ZWQxOworIGludCBzcGFyZVsyXTsKKyBjaGFyIGRhdGFbMV07CisgfTsKKworc3RydWN0IHN5c2V4X2luZm8geworIHNob3J0IGtleTsKKyNkZWZpbmUgU1lTRVhfUEFUQ0ggX1BBVENIS0VZKDB4MDUpCisjZGVmaW5lIE1BVUlfUEFUQ0ggX1BBVENIS0VZKDB4MDYpCisgc2hvcnQgZGV2aWNlX25vOworIGludCBsZW47CisgdW5zaWduZWQgY2hhciBkYXRhWzFdOworIH07CisKKyNkZWZpbmUgU0VRX05PVEVPRkYgMAorI2RlZmluZSBTRVFfRk1OT1RFT0ZGIFNFUV9OT1RFT0ZGICAKKyNkZWZpbmUgU0VRX05PVEVPTiAxCisjZGVmaW5lIFNFUV9GTU5PVEVPTiBTRVFfTk9URU9OCisjZGVmaW5lIFNFUV9XQUlUIFRNUl9XQUlUX0FCUworI2RlZmluZSBTRVFfUEdNQ0hBTkdFIDMKKyNkZWZpbmUgU0VRX0ZNUEdNQ0hBTkdFIFNFUV9QR01DSEFOR0UKKyNkZWZpbmUgU0VRX1NZTkNUSU1FUiBUTVJfU1RBUlQKKyNkZWZpbmUgU0VRX01JRElQVVRDIDUKKyNkZWZpbmUgU0VRX0RSVU1PTiA2ICAKKyNkZWZpbmUgU0VRX0RSVU1PRkYgNyAgCisjZGVmaW5lIFNFUV9FQ0hPIFRNUl9FQ0hPICAKKyNkZWZpbmUgU0VRX0FGVEVSVE9VQ0ggOQorI2RlZmluZSBTRVFfQ09OVFJPTExFUiAxMAorCisjZGVmaW5lIENUTF9CQU5LX1NFTEVDVCAweDAwCisjZGVmaW5lIENUTF9NT0RXSEVFTCAweDAxCisjZGVmaW5lIENUTF9CUkVBVEggMHgwMgorCisjZGVmaW5lIENUTF9GT09UIDB4MDQKKyNkZWZpbmUgQ1RMX1BPUlRBTUVOVE9fVElNRSAweDA1CisjZGVmaW5lIENUTF9EQVRBX0VOVFJZIDB4MDYKKyNkZWZpbmUgQ1RMX01BSU5fVk9MVU1FIDB4MDcKKyNkZWZpbmUgQ1RMX0JBTEFOQ0UgMHgwOAorCisjZGVmaW5lIENUTF9QQU4gMHgwYQorI2RlZmluZSBDVExfRVhQUkVTU0lPTiAweDBiCisKKyNkZWZpbmUgQ1RMX0dFTkVSQUxfUFVSUE9TRTEgMHgxMAorI2RlZmluZSBDVExfR0VORVJBTF9QVVJQT1NFMiAweDExCisjZGVmaW5lIENUTF9HRU5FUkFMX1BVUlBPU0UzIDB4MTIKKyNkZWZpbmUgQ1RMX0dFTkVSQUxfUFVSUE9TRTQgMHgxMworCisjZGVmaW5lIENUTF9EQU1QRVJfUEVEQUwgMHg0MAorI2RlZmluZSBDVExfU1VTVEFJTiAweDQwICAKKyNkZWZpbmUgQ1RMX0hPTEQgMHg0MCAgCisjZGVmaW5lIENUTF9QT1JUQU1FTlRPIDB4NDEKKyNkZWZpbmUgQ1RMX1NPU1RFTlVUTyAweDQyCisjZGVmaW5lIENUTF9TT0ZUX1BFREFMIDB4NDMKKworI2RlZmluZSBDVExfSE9MRDIgMHg0NQorCisjZGVmaW5lIENUTF9HRU5FUkFMX1BVUlBPU0U1IDB4NTAKKyNkZWZpbmUgQ1RMX0dFTkVSQUxfUFVSUE9TRTYgMHg1MQorI2RlZmluZSBDVExfR0VORVJBTF9QVVJQT1NFNyAweDUyCisjZGVmaW5lIENUTF9HRU5FUkFMX1BVUlBPU0U4IDB4NTMKKworI2RlZmluZSBDVExfRVhUX0VGRl9ERVBUSCAweDViCisjZGVmaW5lIENUTF9UUkVNT0xPX0RFUFRIIDB4NWMKKyNkZWZpbmUgQ1RMX0NIT1JVU19ERVBUSCAweDVkCisjZGVmaW5lIENUTF9ERVRVTkVfREVQVEggMHg1ZQorI2RlZmluZSBDVExfQ0VMRVNURV9ERVBUSCAweDVlICAKKyNkZWZpbmUgQ1RMX1BIQVNFUl9ERVBUSCAweDVmCisjZGVmaW5lIENUTF9EQVRBX0lOQ1JFTUVOVCAweDYwCisjZGVmaW5lIENUTF9EQVRBX0RFQ1JFTUVOVCAweDYxCisjZGVmaW5lIENUTF9OT05SRUdfUEFSTV9OVU1fTFNCIDB4NjIKKyNkZWZpbmUgQ1RMX05PTlJFR19QQVJNX05VTV9NU0IgMHg2MworI2RlZmluZSBDVExfUkVHSVNUX1BBUk1fTlVNX0xTQiAweDY0CisjZGVmaW5lIENUTF9SRUdJU1RfUEFSTV9OVU1fTVNCIDB4NjUKKworI2RlZmluZSBDVFJMX1BJVENIX0JFTkRFUiAyNTUKKyNkZWZpbmUgQ1RSTF9QSVRDSF9CRU5ERVJfUkFOR0UgMjU0CisjZGVmaW5lIENUUkxfRVhQUkVTU0lPTiAyNTMgIAorI2RlZmluZSBDVFJMX01BSU5fVk9MVU1FIDI1MiAgCisjZGVmaW5lIFNFUV9CQUxBTkNFIDExCisjZGVmaW5lIFNFUV9WT0xNT0RFIDEyCisKKyNkZWZpbmUgVk9MX01FVEhPRF9BREFHSU8gMQorI2RlZmluZSBWT0xfTUVUSE9EX0xJTkVBUiAyCisKKyNkZWZpbmUgU0VRX0ZVTExTSVpFIDB4ZmQgIAorCisjZGVmaW5lIFNFUV9QUklWQVRFIDB4ZmUgIAorI2RlZmluZSBTRVFfRVhURU5ERUQgMHhmZiAgCisKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBzYmlfaW5zdHJfZGF0YVszMl07CisKK3N0cnVjdCBzYmlfaW5zdHJ1bWVudCB7CisgdW5zaWduZWQgc2hvcnQga2V5OworI2RlZmluZSBGTV9QQVRDSCBfUEFUQ0hLRVkoMHgwMSkKKyNkZWZpbmUgT1BMM19QQVRDSCBfUEFUQ0hLRVkoMHgwMykKKyBzaG9ydCBkZXZpY2U7CisgaW50IGNoYW5uZWw7Cisgc2JpX2luc3RyX2RhdGEgb3BlcmF0b3JzOworIH07CisKK3N0cnVjdCBzeW50aF9pbmZvIHsKKyBjaGFyIG5hbWVbMzBdOworIGludCBkZXZpY2U7CisgaW50IHN5bnRoX3R5cGU7CisjZGVmaW5lIFNZTlRIX1RZUEVfRk0gMAorI2RlZmluZSBTWU5USF9UWVBFX1NBTVBMRSAxCisjZGVmaW5lIFNZTlRIX1RZUEVfTUlESSAyICAKKworIGludCBzeW50aF9zdWJ0eXBlOworI2RlZmluZSBGTV9UWVBFX0FETElCIDB4MDAKKyNkZWZpbmUgRk1fVFlQRV9PUEwzIDB4MDEKKyNkZWZpbmUgTUlESV9UWVBFX01QVTQwMSAweDQwMQorCisjZGVmaW5lIFNBTVBMRV9UWVBFX0JBU0lDIDB4MTAKKyNkZWZpbmUgU0FNUExFX1RZUEVfR1VTIFNBTVBMRV9UWVBFX0JBU0lDCisjZGVmaW5lIFNBTVBMRV9UWVBFX1dBVkVGUk9OVCAweDExCisKKyBpbnQgcGVyY19tb2RlOworIGludCBucl92b2ljZXM7CisgaW50IG5yX2RydW1zOworIGludCBpbnN0cl9iYW5rX3NpemU7CisgdW5zaWduZWQgaW50IGNhcGFiaWxpdGllczsKKyNkZWZpbmUgU1lOVEhfQ0FQX1BFUkNNT0RFIDB4MDAwMDAwMDEgIAorI2RlZmluZSBTWU5USF9DQVBfT1BMMyAweDAwMDAwMDAyICAKKyNkZWZpbmUgU1lOVEhfQ0FQX0lOUFVUIDB4MDAwMDAwMDQgIAorIGludCBkdW1taWVzWzE5XTsKKyB9OworCitzdHJ1Y3Qgc291bmRfdGltZXJfaW5mbyB7CisgY2hhciBuYW1lWzMyXTsKKyBpbnQgY2FwczsKKyB9OworCisjZGVmaW5lIE1JRElfQ0FQX01QVTQwMSAxICAKKworc3RydWN0IG1pZGlfaW5mbyB7CisgY2hhciBuYW1lWzMwXTsKKyBpbnQgZGV2aWNlOworIHVuc2lnbmVkIGludCBjYXBhYmlsaXRpZXM7CisgaW50IGRldl90eXBlOworIGludCBkdW1taWVzWzE4XTsKKyB9OworCit0eXBlZGVmIHN0cnVjdCB7CisgdW5zaWduZWQgY2hhciBjbWQ7CisgY2hhciBucl9hcmdzLCBucl9yZXR1cm5zOworIHVuc2lnbmVkIGNoYXIgZGF0YVszMF07CisgfSBtcHVfY29tbWFuZF9yZWM7CisKKyNkZWZpbmUgU05EQ1RMX01JRElfUFJFVElNRSBfU0lPV1IoJ20nLCAwLCBpbnQpCisjZGVmaW5lIFNORENUTF9NSURJX01QVU1PREUgX1NJT1dSKCdtJywgMSwgaW50KQorI2RlZmluZSBTTkRDVExfTUlESV9NUFVDTUQgX1NJT1dSKCdtJywgMiwgbXB1X2NvbW1hbmRfcmVjKQorCisjZGVmaW5lIFNORENUTF9EU1BfUkVTRVQgX1NJTyAoJ1AnLCAwKQorI2RlZmluZSBTTkRDVExfRFNQX1NZTkMgX1NJTyAoJ1AnLCAxKQorI2RlZmluZSBTTkRDVExfRFNQX1NQRUVEIF9TSU9XUignUCcsIDIsIGludCkKKyNkZWZpbmUgU05EQ1RMX0RTUF9TVEVSRU8gX1NJT1dSKCdQJywgMywgaW50KQorI2RlZmluZSBTTkRDVExfRFNQX0dFVEJMS1NJWkUgX1NJT1dSKCdQJywgNCwgaW50KQorI2RlZmluZSBTTkRDVExfRFNQX1NBTVBMRVNJWkUgU05EQ1RMX0RTUF9TRVRGTVQKKyNkZWZpbmUgU05EQ1RMX0RTUF9DSEFOTkVMUyBfU0lPV1IoJ1AnLCA2LCBpbnQpCisjZGVmaW5lIFNPVU5EX1BDTV9XUklURV9DSEFOTkVMUyBTTkRDVExfRFNQX0NIQU5ORUxTCisjZGVmaW5lIFNPVU5EX1BDTV9XUklURV9GSUxURVIgX1NJT1dSKCdQJywgNywgaW50KQorI2RlZmluZSBTTkRDVExfRFNQX1BPU1QgX1NJTyAoJ1AnLCA4KQorI2RlZmluZSBTTkRDVExfRFNQX1NVQkRJVklERSBfU0lPV1IoJ1AnLCA5LCBpbnQpCisjZGVmaW5lIFNORENUTF9EU1BfU0VURlJBR01FTlQgX1NJT1dSKCdQJywxMCwgaW50KQorCisjZGVmaW5lIFNORENUTF9EU1BfR0VURk1UUyBfU0lPUiAoJ1AnLDExLCBpbnQpICAKKyNkZWZpbmUgU05EQ1RMX0RTUF9TRVRGTVQgX1NJT1dSKCdQJyw1LCBpbnQpICAKKyNkZWZpbmUgQUZNVF9RVUVSWSAweDAwMDAwMDAwICAKKyNkZWZpbmUgQUZNVF9NVV9MQVcgMHgwMDAwMDAwMQorI2RlZmluZSBBRk1UX0FfTEFXIDB4MDAwMDAwMDIKKyNkZWZpbmUgQUZNVF9JTUFfQURQQ00gMHgwMDAwMDAwNAorI2RlZmluZSBBRk1UX1U4IDB4MDAwMDAwMDgKKyNkZWZpbmUgQUZNVF9TMTZfTEUgMHgwMDAwMDAxMCAgCisjZGVmaW5lIEFGTVRfUzE2X0JFIDB4MDAwMDAwMjAgIAorI2RlZmluZSBBRk1UX1M4IDB4MDAwMDAwNDAKKyNkZWZpbmUgQUZNVF9VMTZfTEUgMHgwMDAwMDA4MCAgCisjZGVmaW5lIEFGTVRfVTE2X0JFIDB4MDAwMDAxMDAgIAorI2RlZmluZSBBRk1UX01QRUcgMHgwMDAwMDIwMCAgCisjZGVmaW5lIEFGTVRfQUMzIDB4MDAwMDA0MDAgIAorCit0eXBlZGVmIHN0cnVjdCBhdWRpb19idWZfaW5mbyB7CisgaW50IGZyYWdtZW50czsKKyBpbnQgZnJhZ3N0b3RhbDsKKyBpbnQgZnJhZ3NpemU7CisKKyBpbnQgYnl0ZXM7CisKKyB9IGF1ZGlvX2J1Zl9pbmZvOworCisjZGVmaW5lIFNORENUTF9EU1BfR0VUT1NQQUNFIF9TSU9SICgnUCcsMTIsIGF1ZGlvX2J1Zl9pbmZvKQorI2RlZmluZSBTTkRDVExfRFNQX0dFVElTUEFDRSBfU0lPUiAoJ1AnLDEzLCBhdWRpb19idWZfaW5mbykKKyNkZWZpbmUgU05EQ1RMX0RTUF9OT05CTE9DSyBfU0lPICgnUCcsMTQpCisjZGVmaW5lIFNORENUTF9EU1BfR0VUQ0FQUyBfU0lPUiAoJ1AnLDE1LCBpbnQpCisjZGVmaW5lIERTUF9DQVBfUkVWSVNJT04gMHgwMDAwMDBmZiAgCisjZGVmaW5lIERTUF9DQVBfRFVQTEVYIDB4MDAwMDAxMDAgIAorI2RlZmluZSBEU1BfQ0FQX1JFQUxUSU1FIDB4MDAwMDAyMDAgIAorI2RlZmluZSBEU1BfQ0FQX0JBVENIIDB4MDAwMDA0MDAgIAorCisjZGVmaW5lIERTUF9DQVBfQ09QUk9DIDB4MDAwMDA4MDAgIAorCisjZGVmaW5lIERTUF9DQVBfVFJJR0dFUiAweDAwMDAxMDAwICAKKyNkZWZpbmUgRFNQX0NBUF9NTUFQIDB4MDAwMDIwMDAgIAorI2RlZmluZSBEU1BfQ0FQX01VTFRJIDB4MDAwMDQwMDAgIAorI2RlZmluZSBEU1BfQ0FQX0JJTkQgMHgwMDAwODAwMCAgCisKKyNkZWZpbmUgU05EQ1RMX0RTUF9HRVRUUklHR0VSIF9TSU9SICgnUCcsMTYsIGludCkKKyNkZWZpbmUgU05EQ1RMX0RTUF9TRVRUUklHR0VSIF9TSU9XICgnUCcsMTYsIGludCkKKyNkZWZpbmUgUENNX0VOQUJMRV9JTlBVVCAweDAwMDAwMDAxCisjZGVmaW5lIFBDTV9FTkFCTEVfT1VUUFVUIDB4MDAwMDAwMDIKKwordHlwZWRlZiBzdHJ1Y3QgY291bnRfaW5mbyB7CisgaW50IGJ5dGVzOworIGludCBibG9ja3M7CisgaW50IHB0cjsKKyB9IGNvdW50X2luZm87CisKKyNkZWZpbmUgU05EQ1RMX0RTUF9HRVRJUFRSIF9TSU9SICgnUCcsMTcsIGNvdW50X2luZm8pCisjZGVmaW5lIFNORENUTF9EU1BfR0VUT1BUUiBfU0lPUiAoJ1AnLDE4LCBjb3VudF9pbmZvKQorCit0eXBlZGVmIHN0cnVjdCBidWZmbWVtX2Rlc2MgeworIHVuc2lnbmVkICpidWZmZXI7CisgaW50IHNpemU7CisgfSBidWZmbWVtX2Rlc2M7CisjZGVmaW5lIFNORENUTF9EU1BfTUFQSU5CVUYgX1NJT1IgKCdQJywgMTksIGJ1ZmZtZW1fZGVzYykKKyNkZWZpbmUgU05EQ1RMX0RTUF9NQVBPVVRCVUYgX1NJT1IgKCdQJywgMjAsIGJ1ZmZtZW1fZGVzYykKKyNkZWZpbmUgU05EQ1RMX0RTUF9TRVRTWU5DUk8gX1NJTyAoJ1AnLCAyMSkKKyNkZWZpbmUgU05EQ1RMX0RTUF9TRVREVVBMRVggX1NJTyAoJ1AnLCAyMikKKyNkZWZpbmUgU05EQ1RMX0RTUF9HRVRPREVMQVkgX1NJT1IgKCdQJywgMjMsIGludCkKKworI2RlZmluZSBTTkRDVExfRFNQX0dFVENIQU5ORUxNQVNLIF9TSU9XUignUCcsIDY0LCBpbnQpCisjZGVmaW5lIFNORENUTF9EU1BfQklORF9DSEFOTkVMIF9TSU9XUignUCcsIDY1LCBpbnQpCisjZGVmaW5lIERTUF9CSU5EX1FVRVJZIDB4MDAwMDAwMDAKKyNkZWZpbmUgRFNQX0JJTkRfRlJPTlQgMHgwMDAwMDAwMQorI2RlZmluZSBEU1BfQklORF9TVVJSIDB4MDAwMDAwMDIKKyNkZWZpbmUgRFNQX0JJTkRfQ0VOVEVSX0xGRSAweDAwMDAwMDA0CisjZGVmaW5lIERTUF9CSU5EX0hBTkRTRVQgMHgwMDAwMDAwOAorI2RlZmluZSBEU1BfQklORF9NSUMgMHgwMDAwMDAxMAorI2RlZmluZSBEU1BfQklORF9NT0RFTTEgMHgwMDAwMDAyMAorI2RlZmluZSBEU1BfQklORF9NT0RFTTIgMHgwMDAwMDA0MAorI2RlZmluZSBEU1BfQklORF9JMlMgMHgwMDAwMDA4MAorI2RlZmluZSBEU1BfQklORF9TUERJRiAweDAwMDAwMTAwCisKKyNkZWZpbmUgU05EQ1RMX0RTUF9TRVRTUERJRiBfU0lPVyAoJ1AnLCA2NiwgaW50KQorI2RlZmluZSBTTkRDVExfRFNQX0dFVFNQRElGIF9TSU9SICgnUCcsIDY3LCBpbnQpCisjZGVmaW5lIFNQRElGX1BSTyAweDAwMDEKKyNkZWZpbmUgU1BESUZfTl9BVUQgMHgwMDAyCisjZGVmaW5lIFNQRElGX0NPUFkgMHgwMDA0CisjZGVmaW5lIFNQRElGX1BSRSAweDAwMDgKKyNkZWZpbmUgU1BESUZfQ0MgMHgwN2YwCisjZGVmaW5lIFNQRElGX0wgMHgwODAwCisjZGVmaW5lIFNQRElGX0RSUyAweDQwMDAKKyNkZWZpbmUgU1BESUZfViAweDgwMDAKKworI2RlZmluZSBTTkRDVExfRFNQX1BST0ZJTEUgX1NJT1cgKCdQJywgMjMsIGludCkKKyNkZWZpbmUgQVBGX05PUk1BTCAwICAKKyNkZWZpbmUgQVBGX05FVFdPUksgMSAgCisjZGVmaW5lIEFQRl9DUFVJTlRFTlMgMiAgCisKKyNkZWZpbmUgU09VTkRfUENNX1JFQURfUkFURSBfU0lPUiAoJ1AnLCAyLCBpbnQpCisjZGVmaW5lIFNPVU5EX1BDTV9SRUFEX0NIQU5ORUxTIF9TSU9SICgnUCcsIDYsIGludCkKKyNkZWZpbmUgU09VTkRfUENNX1JFQURfQklUUyBfU0lPUiAoJ1AnLCA1LCBpbnQpCisjZGVmaW5lIFNPVU5EX1BDTV9SRUFEX0ZJTFRFUiBfU0lPUiAoJ1AnLCA3LCBpbnQpCisKKyNkZWZpbmUgU09VTkRfUENNX1dSSVRFX0JJVFMgU05EQ1RMX0RTUF9TRVRGTVQKKyNkZWZpbmUgU09VTkRfUENNX1dSSVRFX1JBVEUgU05EQ1RMX0RTUF9TUEVFRAorI2RlZmluZSBTT1VORF9QQ01fUE9TVCBTTkRDVExfRFNQX1BPU1QKKyNkZWZpbmUgU09VTkRfUENNX1JFU0VUIFNORENUTF9EU1BfUkVTRVQKKyNkZWZpbmUgU09VTkRfUENNX1NZTkMgU05EQ1RMX0RTUF9TWU5DCisjZGVmaW5lIFNPVU5EX1BDTV9TVUJESVZJREUgU05EQ1RMX0RTUF9TVUJESVZJREUKKyNkZWZpbmUgU09VTkRfUENNX1NFVEZSQUdNRU5UIFNORENUTF9EU1BfU0VURlJBR01FTlQKKyNkZWZpbmUgU09VTkRfUENNX0dFVEZNVFMgU05EQ1RMX0RTUF9HRVRGTVRTCisjZGVmaW5lIFNPVU5EX1BDTV9TRVRGTVQgU05EQ1RMX0RTUF9TRVRGTVQKKyNkZWZpbmUgU09VTkRfUENNX0dFVE9TUEFDRSBTTkRDVExfRFNQX0dFVE9TUEFDRQorI2RlZmluZSBTT1VORF9QQ01fR0VUSVNQQUNFIFNORENUTF9EU1BfR0VUSVNQQUNFCisjZGVmaW5lIFNPVU5EX1BDTV9OT05CTE9DSyBTTkRDVExfRFNQX05PTkJMT0NLCisjZGVmaW5lIFNPVU5EX1BDTV9HRVRDQVBTIFNORENUTF9EU1BfR0VUQ0FQUworI2RlZmluZSBTT1VORF9QQ01fR0VUVFJJR0dFUiBTTkRDVExfRFNQX0dFVFRSSUdHRVIKKyNkZWZpbmUgU09VTkRfUENNX1NFVFRSSUdHRVIgU05EQ1RMX0RTUF9TRVRUUklHR0VSCisjZGVmaW5lIFNPVU5EX1BDTV9TRVRTWU5DUk8gU05EQ1RMX0RTUF9TRVRTWU5DUk8KKyNkZWZpbmUgU09VTkRfUENNX0dFVElQVFIgU05EQ1RMX0RTUF9HRVRJUFRSCisjZGVmaW5lIFNPVU5EX1BDTV9HRVRPUFRSIFNORENUTF9EU1BfR0VUT1BUUgorI2RlZmluZSBTT1VORF9QQ01fTUFQSU5CVUYgU05EQ1RMX0RTUF9NQVBJTkJVRgorI2RlZmluZSBTT1VORF9QQ01fTUFQT1VUQlVGIFNORENUTF9EU1BfTUFQT1VUQlVGCisKK3R5cGVkZWYgc3RydWN0IGNvcHJfYnVmZmVyIHsKKyBpbnQgY29tbWFuZDsKKyBpbnQgZmxhZ3M7CisjZGVmaW5lIENQRl9OT05FIDB4MDAwMAorI2RlZmluZSBDUEZfRklSU1QgMHgwMDAxICAKKyNkZWZpbmUgQ1BGX0xBU1QgMHgwMDAyICAKKyBpbnQgbGVuOworIGludCBvZmZzOworCisgdW5zaWduZWQgY2hhciBkYXRhWzQwMDBdOworIH0gY29wcl9idWZmZXI7CisKK3R5cGVkZWYgc3RydWN0IGNvcHJfZGVidWdfYnVmIHsKKyBpbnQgY29tbWFuZDsKKyBpbnQgcGFybTE7CisgaW50IHBhcm0yOworIGludCBmbGFnczsKKyBpbnQgbGVuOworIH0gY29wcl9kZWJ1Z19idWY7CisKK3R5cGVkZWYgc3RydWN0IGNvcHJfbXNnIHsKKyBpbnQgbGVuOworIHVuc2lnbmVkIGNoYXIgZGF0YVs0MDAwXTsKKyB9IGNvcHJfbXNnOworCisjZGVmaW5lIFNORENUTF9DT1BSX1JFU0VUIF9TSU8gKCdDJywgMCkKKyNkZWZpbmUgU05EQ1RMX0NPUFJfTE9BRCBfU0lPV1IoJ0MnLCAxLCBjb3ByX2J1ZmZlcikKKyNkZWZpbmUgU05EQ1RMX0NPUFJfUkRBVEEgX1NJT1dSKCdDJywgMiwgY29wcl9kZWJ1Z19idWYpCisjZGVmaW5lIFNORENUTF9DT1BSX1JDT0RFIF9TSU9XUignQycsIDMsIGNvcHJfZGVidWdfYnVmKQorI2RlZmluZSBTTkRDVExfQ09QUl9XREFUQSBfU0lPVyAoJ0MnLCA0LCBjb3ByX2RlYnVnX2J1ZikKKyNkZWZpbmUgU05EQ1RMX0NPUFJfV0NPREUgX1NJT1cgKCdDJywgNSwgY29wcl9kZWJ1Z19idWYpCisjZGVmaW5lIFNORENUTF9DT1BSX1JVTiBfU0lPV1IoJ0MnLCA2LCBjb3ByX2RlYnVnX2J1ZikKKyNkZWZpbmUgU05EQ1RMX0NPUFJfSEFMVCBfU0lPV1IoJ0MnLCA3LCBjb3ByX2RlYnVnX2J1ZikKKyNkZWZpbmUgU05EQ1RMX0NPUFJfU0VORE1TRyBfU0lPV1IoJ0MnLCA4LCBjb3ByX21zZykKKyNkZWZpbmUgU05EQ1RMX0NPUFJfUkNWTVNHIF9TSU9SICgnQycsIDksIGNvcHJfbXNnKQorCisjZGVmaW5lIFNPVU5EX01JWEVSX05SREVWSUNFUyAyNQorI2RlZmluZSBTT1VORF9NSVhFUl9WT0xVTUUgMAorI2RlZmluZSBTT1VORF9NSVhFUl9CQVNTIDEKKyNkZWZpbmUgU09VTkRfTUlYRVJfVFJFQkxFIDIKKyNkZWZpbmUgU09VTkRfTUlYRVJfU1lOVEggMworI2RlZmluZSBTT1VORF9NSVhFUl9QQ00gNAorI2RlZmluZSBTT1VORF9NSVhFUl9TUEVBS0VSIDUKKyNkZWZpbmUgU09VTkRfTUlYRVJfTElORSA2CisjZGVmaW5lIFNPVU5EX01JWEVSX01JQyA3CisjZGVmaW5lIFNPVU5EX01JWEVSX0NEIDgKKyNkZWZpbmUgU09VTkRfTUlYRVJfSU1JWCA5ICAKKyNkZWZpbmUgU09VTkRfTUlYRVJfQUxUUENNIDEwCisjZGVmaW5lIFNPVU5EX01JWEVSX1JFQ0xFViAxMSAgCisjZGVmaW5lIFNPVU5EX01JWEVSX0lHQUlOIDEyICAKKyNkZWZpbmUgU09VTkRfTUlYRVJfT0dBSU4gMTMgIAorCisjZGVmaW5lIFNPVU5EX01JWEVSX0xJTkUxIDE0ICAKKyNkZWZpbmUgU09VTkRfTUlYRVJfTElORTIgMTUgIAorI2RlZmluZSBTT1VORF9NSVhFUl9MSU5FMyAxNiAgCisjZGVmaW5lIFNPVU5EX01JWEVSX0RJR0lUQUwxIDE3ICAKKyNkZWZpbmUgU09VTkRfTUlYRVJfRElHSVRBTDIgMTggIAorI2RlZmluZSBTT1VORF9NSVhFUl9ESUdJVEFMMyAxOSAgCisjZGVmaW5lIFNPVU5EX01JWEVSX1BIT05FSU4gMjAgIAorI2RlZmluZSBTT1VORF9NSVhFUl9QSE9ORU9VVCAyMSAgCisjZGVmaW5lIFNPVU5EX01JWEVSX1ZJREVPIDIyICAKKyNkZWZpbmUgU09VTkRfTUlYRVJfUkFESU8gMjMgIAorI2RlZmluZSBTT1VORF9NSVhFUl9NT05JVE9SIDI0ICAKKworI2RlZmluZSBTT1VORF9PTk9GRl9NSU4gMjgKKyNkZWZpbmUgU09VTkRfT05PRkZfTUFYIDMwCisKKyNkZWZpbmUgU09VTkRfTUlYRVJfTk9ORSAzMQorCisjZGVmaW5lIFNPVU5EX01JWEVSX0VOSEFOQ0UgU09VTkRfTUlYRVJfTk9ORQorI2RlZmluZSBTT1VORF9NSVhFUl9NVVRFIFNPVU5EX01JWEVSX05PTkUKKyNkZWZpbmUgU09VTkRfTUlYRVJfTE9VRCBTT1VORF9NSVhFUl9OT05FCisKKyNkZWZpbmUgU09VTkRfREVWSUNFX0xBQkVMUyB7IlZvbCAgIiwgIkJhc3MgIiwgIlRyZWJsIiwgIlN5bnRoIiwgIlBjbSAgIiwgIlNwa3IgIiwgIkxpbmUgIiwgICAiTWljICAiLCAiQ0QgICAiLCAiTWl4ICAiLCAiUGNtMiAiLCAiUmVjICAiLCAiSUdhaW4iLCAiT0dhaW4iLCAgICJMaW5lMSIsICJMaW5lMiIsICJMaW5lMyIsICJEaWdpdGFsMSIsICJEaWdpdGFsMiIsICJEaWdpdGFsMyIsICAgIlBob25lSW4iLCAiUGhvbmVPdXQiLCAiVmlkZW8iLCAiUmFkaW8iLCAiTW9uaXRvciJ9CisKKyNkZWZpbmUgU09VTkRfREVWSUNFX05BTUVTIHsidm9sIiwgImJhc3MiLCAidHJlYmxlIiwgInN5bnRoIiwgInBjbSIsICJzcGVha2VyIiwgImxpbmUiLCAgICJtaWMiLCAiY2QiLCAibWl4IiwgInBjbTIiLCAicmVjIiwgImlnYWluIiwgIm9nYWluIiwgICAibGluZTEiLCAibGluZTIiLCAibGluZTMiLCAiZGlnMSIsICJkaWcyIiwgImRpZzMiLCAgICJwaGluIiwgInBob3V0IiwgInZpZGVvIiwgInJhZGlvIiwgIm1vbml0b3IifQorCisjZGVmaW5lIFNPVU5EX01JWEVSX1JFQ1NSQyAweGZmICAKKyNkZWZpbmUgU09VTkRfTUlYRVJfREVWTUFTSyAweGZlICAKKyNkZWZpbmUgU09VTkRfTUlYRVJfUkVDTUFTSyAweGZkICAKKyNkZWZpbmUgU09VTkRfTUlYRVJfQ0FQUyAweGZjCisjZGVmaW5lIFNPVU5EX0NBUF9FWENMX0lOUFVUIDB4MDAwMDAwMDEgIAorI2RlZmluZSBTT1VORF9NSVhFUl9TVEVSRU9ERVZTIDB4ZmIgIAorI2RlZmluZSBTT1VORF9NSVhFUl9PVVRTUkMgMHhmYSAgCisjZGVmaW5lIFNPVU5EX01JWEVSX09VVE1BU0sgMHhmOSAgCisKKyNkZWZpbmUgU09VTkRfTUFTS19WT0xVTUUgKDEgPDwgU09VTkRfTUlYRVJfVk9MVU1FKQorI2RlZmluZSBTT1VORF9NQVNLX0JBU1MgKDEgPDwgU09VTkRfTUlYRVJfQkFTUykKKyNkZWZpbmUgU09VTkRfTUFTS19UUkVCTEUgKDEgPDwgU09VTkRfTUlYRVJfVFJFQkxFKQorI2RlZmluZSBTT1VORF9NQVNLX1NZTlRIICgxIDw8IFNPVU5EX01JWEVSX1NZTlRIKQorI2RlZmluZSBTT1VORF9NQVNLX1BDTSAoMSA8PCBTT1VORF9NSVhFUl9QQ00pCisjZGVmaW5lIFNPVU5EX01BU0tfU1BFQUtFUiAoMSA8PCBTT1VORF9NSVhFUl9TUEVBS0VSKQorI2RlZmluZSBTT1VORF9NQVNLX0xJTkUgKDEgPDwgU09VTkRfTUlYRVJfTElORSkKKyNkZWZpbmUgU09VTkRfTUFTS19NSUMgKDEgPDwgU09VTkRfTUlYRVJfTUlDKQorI2RlZmluZSBTT1VORF9NQVNLX0NEICgxIDw8IFNPVU5EX01JWEVSX0NEKQorI2RlZmluZSBTT1VORF9NQVNLX0lNSVggKDEgPDwgU09VTkRfTUlYRVJfSU1JWCkKKyNkZWZpbmUgU09VTkRfTUFTS19BTFRQQ00gKDEgPDwgU09VTkRfTUlYRVJfQUxUUENNKQorI2RlZmluZSBTT1VORF9NQVNLX1JFQ0xFViAoMSA8PCBTT1VORF9NSVhFUl9SRUNMRVYpCisjZGVmaW5lIFNPVU5EX01BU0tfSUdBSU4gKDEgPDwgU09VTkRfTUlYRVJfSUdBSU4pCisjZGVmaW5lIFNPVU5EX01BU0tfT0dBSU4gKDEgPDwgU09VTkRfTUlYRVJfT0dBSU4pCisjZGVmaW5lIFNPVU5EX01BU0tfTElORTEgKDEgPDwgU09VTkRfTUlYRVJfTElORTEpCisjZGVmaW5lIFNPVU5EX01BU0tfTElORTIgKDEgPDwgU09VTkRfTUlYRVJfTElORTIpCisjZGVmaW5lIFNPVU5EX01BU0tfTElORTMgKDEgPDwgU09VTkRfTUlYRVJfTElORTMpCisjZGVmaW5lIFNPVU5EX01BU0tfRElHSVRBTDEgKDEgPDwgU09VTkRfTUlYRVJfRElHSVRBTDEpCisjZGVmaW5lIFNPVU5EX01BU0tfRElHSVRBTDIgKDEgPDwgU09VTkRfTUlYRVJfRElHSVRBTDIpCisjZGVmaW5lIFNPVU5EX01BU0tfRElHSVRBTDMgKDEgPDwgU09VTkRfTUlYRVJfRElHSVRBTDMpCisjZGVmaW5lIFNPVU5EX01BU0tfUEhPTkVJTiAoMSA8PCBTT1VORF9NSVhFUl9QSE9ORUlOKQorI2RlZmluZSBTT1VORF9NQVNLX1BIT05FT1VUICgxIDw8IFNPVU5EX01JWEVSX1BIT05FT1VUKQorI2RlZmluZSBTT1VORF9NQVNLX1JBRElPICgxIDw8IFNPVU5EX01JWEVSX1JBRElPKQorI2RlZmluZSBTT1VORF9NQVNLX1ZJREVPICgxIDw8IFNPVU5EX01JWEVSX1ZJREVPKQorI2RlZmluZSBTT1VORF9NQVNLX01PTklUT1IgKDEgPDwgU09VTkRfTUlYRVJfTU9OSVRPUikKKworI2RlZmluZSBTT1VORF9NQVNLX01VVEUgKDEgPDwgU09VTkRfTUlYRVJfTVVURSkKKyNkZWZpbmUgU09VTkRfTUFTS19FTkhBTkNFICgxIDw8IFNPVU5EX01JWEVSX0VOSEFOQ0UpCisjZGVmaW5lIFNPVU5EX01BU0tfTE9VRCAoMSA8PCBTT1VORF9NSVhFUl9MT1VEKQorCisjZGVmaW5lIE1JWEVSX1JFQUQoZGV2KSBfU0lPUignTScsIGRldiwgaW50KQorI2RlZmluZSBTT1VORF9NSVhFUl9SRUFEX1ZPTFVNRSBNSVhFUl9SRUFEKFNPVU5EX01JWEVSX1ZPTFVNRSkKKyNkZWZpbmUgU09VTkRfTUlYRVJfUkVBRF9CQVNTIE1JWEVSX1JFQUQoU09VTkRfTUlYRVJfQkFTUykKKyNkZWZpbmUgU09VTkRfTUlYRVJfUkVBRF9UUkVCTEUgTUlYRVJfUkVBRChTT1VORF9NSVhFUl9UUkVCTEUpCisjZGVmaW5lIFNPVU5EX01JWEVSX1JFQURfU1lOVEggTUlYRVJfUkVBRChTT1VORF9NSVhFUl9TWU5USCkKKyNkZWZpbmUgU09VTkRfTUlYRVJfUkVBRF9QQ00gTUlYRVJfUkVBRChTT1VORF9NSVhFUl9QQ00pCisjZGVmaW5lIFNPVU5EX01JWEVSX1JFQURfU1BFQUtFUiBNSVhFUl9SRUFEKFNPVU5EX01JWEVSX1NQRUFLRVIpCisjZGVmaW5lIFNPVU5EX01JWEVSX1JFQURfTElORSBNSVhFUl9SRUFEKFNPVU5EX01JWEVSX0xJTkUpCisjZGVmaW5lIFNPVU5EX01JWEVSX1JFQURfTUlDIE1JWEVSX1JFQUQoU09VTkRfTUlYRVJfTUlDKQorI2RlZmluZSBTT1VORF9NSVhFUl9SRUFEX0NEIE1JWEVSX1JFQUQoU09VTkRfTUlYRVJfQ0QpCisjZGVmaW5lIFNPVU5EX01JWEVSX1JFQURfSU1JWCBNSVhFUl9SRUFEKFNPVU5EX01JWEVSX0lNSVgpCisjZGVmaW5lIFNPVU5EX01JWEVSX1JFQURfQUxUUENNIE1JWEVSX1JFQUQoU09VTkRfTUlYRVJfQUxUUENNKQorI2RlZmluZSBTT1VORF9NSVhFUl9SRUFEX1JFQ0xFViBNSVhFUl9SRUFEKFNPVU5EX01JWEVSX1JFQ0xFVikKKyNkZWZpbmUgU09VTkRfTUlYRVJfUkVBRF9JR0FJTiBNSVhFUl9SRUFEKFNPVU5EX01JWEVSX0lHQUlOKQorI2RlZmluZSBTT1VORF9NSVhFUl9SRUFEX09HQUlOIE1JWEVSX1JFQUQoU09VTkRfTUlYRVJfT0dBSU4pCisjZGVmaW5lIFNPVU5EX01JWEVSX1JFQURfTElORTEgTUlYRVJfUkVBRChTT1VORF9NSVhFUl9MSU5FMSkKKyNkZWZpbmUgU09VTkRfTUlYRVJfUkVBRF9MSU5FMiBNSVhFUl9SRUFEKFNPVU5EX01JWEVSX0xJTkUyKQorI2RlZmluZSBTT1VORF9NSVhFUl9SRUFEX0xJTkUzIE1JWEVSX1JFQUQoU09VTkRfTUlYRVJfTElORTMpCisKKyNkZWZpbmUgU09VTkRfTUlYRVJfUkVBRF9NVVRFIE1JWEVSX1JFQUQoU09VTkRfTUlYRVJfTVVURSkKKyNkZWZpbmUgU09VTkRfTUlYRVJfUkVBRF9FTkhBTkNFIE1JWEVSX1JFQUQoU09VTkRfTUlYRVJfRU5IQU5DRSkKKyNkZWZpbmUgU09VTkRfTUlYRVJfUkVBRF9MT1VEIE1JWEVSX1JFQUQoU09VTkRfTUlYRVJfTE9VRCkKKworI2RlZmluZSBTT1VORF9NSVhFUl9SRUFEX1JFQ1NSQyBNSVhFUl9SRUFEKFNPVU5EX01JWEVSX1JFQ1NSQykKKyNkZWZpbmUgU09VTkRfTUlYRVJfUkVBRF9ERVZNQVNLIE1JWEVSX1JFQUQoU09VTkRfTUlYRVJfREVWTUFTSykKKyNkZWZpbmUgU09VTkRfTUlYRVJfUkVBRF9SRUNNQVNLIE1JWEVSX1JFQUQoU09VTkRfTUlYRVJfUkVDTUFTSykKKyNkZWZpbmUgU09VTkRfTUlYRVJfUkVBRF9TVEVSRU9ERVZTIE1JWEVSX1JFQUQoU09VTkRfTUlYRVJfU1RFUkVPREVWUykKKyNkZWZpbmUgU09VTkRfTUlYRVJfUkVBRF9DQVBTIE1JWEVSX1JFQUQoU09VTkRfTUlYRVJfQ0FQUykKKworI2RlZmluZSBNSVhFUl9XUklURShkZXYpIF9TSU9XUignTScsIGRldiwgaW50KQorI2RlZmluZSBTT1VORF9NSVhFUl9XUklURV9WT0xVTUUgTUlYRVJfV1JJVEUoU09VTkRfTUlYRVJfVk9MVU1FKQorI2RlZmluZSBTT1VORF9NSVhFUl9XUklURV9CQVNTIE1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX0JBU1MpCisjZGVmaW5lIFNPVU5EX01JWEVSX1dSSVRFX1RSRUJMRSBNSVhFUl9XUklURShTT1VORF9NSVhFUl9UUkVCTEUpCisjZGVmaW5lIFNPVU5EX01JWEVSX1dSSVRFX1NZTlRIIE1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX1NZTlRIKQorI2RlZmluZSBTT1VORF9NSVhFUl9XUklURV9QQ00gTUlYRVJfV1JJVEUoU09VTkRfTUlYRVJfUENNKQorI2RlZmluZSBTT1VORF9NSVhFUl9XUklURV9TUEVBS0VSIE1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX1NQRUFLRVIpCisjZGVmaW5lIFNPVU5EX01JWEVSX1dSSVRFX0xJTkUgTUlYRVJfV1JJVEUoU09VTkRfTUlYRVJfTElORSkKKyNkZWZpbmUgU09VTkRfTUlYRVJfV1JJVEVfTUlDIE1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX01JQykKKyNkZWZpbmUgU09VTkRfTUlYRVJfV1JJVEVfQ0QgTUlYRVJfV1JJVEUoU09VTkRfTUlYRVJfQ0QpCisjZGVmaW5lIFNPVU5EX01JWEVSX1dSSVRFX0lNSVggTUlYRVJfV1JJVEUoU09VTkRfTUlYRVJfSU1JWCkKKyNkZWZpbmUgU09VTkRfTUlYRVJfV1JJVEVfQUxUUENNIE1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX0FMVFBDTSkKKyNkZWZpbmUgU09VTkRfTUlYRVJfV1JJVEVfUkVDTEVWIE1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX1JFQ0xFVikKKyNkZWZpbmUgU09VTkRfTUlYRVJfV1JJVEVfSUdBSU4gTUlYRVJfV1JJVEUoU09VTkRfTUlYRVJfSUdBSU4pCisjZGVmaW5lIFNPVU5EX01JWEVSX1dSSVRFX09HQUlOIE1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX09HQUlOKQorI2RlZmluZSBTT1VORF9NSVhFUl9XUklURV9MSU5FMSBNSVhFUl9XUklURShTT1VORF9NSVhFUl9MSU5FMSkKKyNkZWZpbmUgU09VTkRfTUlYRVJfV1JJVEVfTElORTIgTUlYRVJfV1JJVEUoU09VTkRfTUlYRVJfTElORTIpCisjZGVmaW5lIFNPVU5EX01JWEVSX1dSSVRFX0xJTkUzIE1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX0xJTkUzKQorCisjZGVmaW5lIFNPVU5EX01JWEVSX1dSSVRFX01VVEUgTUlYRVJfV1JJVEUoU09VTkRfTUlYRVJfTVVURSkKKyNkZWZpbmUgU09VTkRfTUlYRVJfV1JJVEVfRU5IQU5DRSBNSVhFUl9XUklURShTT1VORF9NSVhFUl9FTkhBTkNFKQorI2RlZmluZSBTT1VORF9NSVhFUl9XUklURV9MT1VEIE1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX0xPVUQpCisKKyNkZWZpbmUgU09VTkRfTUlYRVJfV1JJVEVfUkVDU1JDIE1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX1JFQ1NSQykKKwordHlwZWRlZiBzdHJ1Y3QgbWl4ZXJfaW5mbworeworIGNoYXIgaWRbMTZdOworIGNoYXIgbmFtZVszMl07CisgaW50IG1vZGlmeV9jb3VudGVyOworIGludCBmaWxsZXJzWzEwXTsKK30gbWl4ZXJfaW5mbzsKKwordHlwZWRlZiBzdHJ1Y3QgX29sZF9taXhlcl9pbmZvCit7CisgY2hhciBpZFsxNl07CisgY2hhciBuYW1lWzMyXTsKK30gX29sZF9taXhlcl9pbmZvOworCisjZGVmaW5lIFNPVU5EX01JWEVSX0lORk8gX1NJT1IgKCdNJywgMTAxLCBtaXhlcl9pbmZvKQorI2RlZmluZSBTT1VORF9PTERfTUlYRVJfSU5GTyBfU0lPUiAoJ00nLCAxMDEsIF9vbGRfbWl4ZXJfaW5mbykKKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIG1peGVyX3JlY29yZFsxMjhdOworCisjZGVmaW5lIFNPVU5EX01JWEVSX0FDQ0VTUyBfU0lPV1IoJ00nLCAxMDIsIG1peGVyX3JlY29yZCkKKworI2RlZmluZSBTT1VORF9NSVhFUl9BR0MgX1NJT1dSKCdNJywgMTAzLCBpbnQpCisjZGVmaW5lIFNPVU5EX01JWEVSXzNEU0UgX1NJT1dSKCdNJywgMTA0LCBpbnQpCisKKyNkZWZpbmUgU09VTkRfTUlYRVJfUFJJVkFURTEgX1NJT1dSKCdNJywgMTExLCBpbnQpCisjZGVmaW5lIFNPVU5EX01JWEVSX1BSSVZBVEUyIF9TSU9XUignTScsIDExMiwgaW50KQorI2RlZmluZSBTT1VORF9NSVhFUl9QUklWQVRFMyBfU0lPV1IoJ00nLCAxMTMsIGludCkKKyNkZWZpbmUgU09VTkRfTUlYRVJfUFJJVkFURTQgX1NJT1dSKCdNJywgMTE0LCBpbnQpCisjZGVmaW5lIFNPVU5EX01JWEVSX1BSSVZBVEU1IF9TSU9XUignTScsIDExNSwgaW50KQorCit0eXBlZGVmIHN0cnVjdCBtaXhlcl92b2xfdGFibGUgeworIGludCBudW07CisgY2hhciBuYW1lWzMyXTsKKyBpbnQgbGV2ZWxzWzMyXTsKK30gbWl4ZXJfdm9sX3RhYmxlOworCisjZGVmaW5lIFNPVU5EX01JWEVSX0dFVExFVkVMUyBfU0lPV1IoJ00nLCAxMTYsIG1peGVyX3ZvbF90YWJsZSkKKyNkZWZpbmUgU09VTkRfTUlYRVJfU0VUTEVWRUxTIF9TSU9XUignTScsIDExNywgbWl4ZXJfdm9sX3RhYmxlKQorCisjZGVmaW5lIE9TU19HRVRWRVJTSU9OIF9TSU9SICgnTScsIDExOCwgaW50KQorCisjZGVmaW5lIEVWX1NFUV9MT0NBTCAweDgwCisjZGVmaW5lIEVWX1RJTUlORyAweDgxCisjZGVmaW5lIEVWX0NITl9DT01NT04gMHg5MgorI2RlZmluZSBFVl9DSE5fVk9JQ0UgMHg5MworI2RlZmluZSBFVl9TWVNFWCAweDk0CisKKyNkZWZpbmUgTUlESV9OT1RFT0ZGIDB4ODAKKyNkZWZpbmUgTUlESV9OT1RFT04gMHg5MAorI2RlZmluZSBNSURJX0tFWV9QUkVTU1VSRSAweEEwCisKKyNkZWZpbmUgTUlESV9DVExfQ0hBTkdFIDB4QjAKKyNkZWZpbmUgTUlESV9QR01fQ0hBTkdFIDB4QzAKKyNkZWZpbmUgTUlESV9DSE5fUFJFU1NVUkUgMHhEMAorI2RlZmluZSBNSURJX1BJVENIX0JFTkQgMHhFMAorCisjZGVmaW5lIE1JRElfU1lTVEVNX1BSRUZJWCAweEYwCisKKyNkZWZpbmUgVE1SX1dBSVRfUkVMIDEgIAorI2RlZmluZSBUTVJfV0FJVF9BQlMgMiAgCisjZGVmaW5lIFRNUl9TVE9QIDMKKyNkZWZpbmUgVE1SX1NUQVJUIDQKKyNkZWZpbmUgVE1SX0NPTlRJTlVFIDUKKyNkZWZpbmUgVE1SX1RFTVBPIDYKKyNkZWZpbmUgVE1SX0VDSE8gOAorI2RlZmluZSBUTVJfQ0xPQ0sgOSAgCisjZGVmaW5lIFRNUl9TUFAgMTAgIAorI2RlZmluZSBUTVJfVElNRVNJRyAxMSAgCisKKyNkZWZpbmUgTE9DTF9TVEFSVEFVRElPIDEKKworI2lmICFkZWZpbmVkKF9fS0VSTkVMX18pICYmICFkZWZpbmVkKEtFUk5FTCkgJiYgIWRlZmluZWQoSU5LRVJORUwpICYmICFkZWZpbmVkKF9LRVJORUwpIHx8IGRlZmluZWQoVVNFX1NFUV9NQUNST1MpCisKKyNkZWZpbmUgU0VRX0RFQ0xBUkVCVUYoKSBTRVFfVVNFX0VYVEJVRigpCisKKyNkZWZpbmUgU0VRX1BNX0RFRklORVMgaW50IF9fZm9vX2Jhcl9fXworI2lmZGVmIE9TU0xJQgorI2RlZmluZSBTRVFfVVNFX0VYVEJVRigpICAgZXh0ZXJuIHVuc2lnbmVkIGNoYXIgKl9zZXFidWY7ICAgZXh0ZXJuIGludCBfc2VxYnVmbGVuO2V4dGVybiBpbnQgX3NlcWJ1ZnB0cgorI2RlZmluZSBTRVFfREVGSU5FQlVGKGxlbikgU0VRX1VTRV9FWFRCVUYoKTtzdGF0aWMgaW50IF9yZXF1ZXN0ZWRfc2VxYnVmbGVuPWxlbgorI2RlZmluZSBfU0VRX0FEVkJVRihsZW4pIE9TU19zZXFfYWR2YnVmKGxlbiwgc2VxZmQsIF9zZXFidWYsIF9zZXFidWZsZW4pCisjZGVmaW5lIF9TRVFfTkVFREJVRihsZW4pIE9TU19zZXFfbmVlZGJ1ZihsZW4sIHNlcWZkLCBfc2VxYnVmLCBfc2VxYnVmbGVuKQorI2RlZmluZSBTRVFfRFVNUEJVRigpIE9TU19zZXFidWZfZHVtcChzZXFmZCwgX3NlcWJ1ZiwgX3NlcWJ1ZmxlbikKKworI2RlZmluZSBTRVFfTE9BRF9HTUlOU1RSKGRldiwgaW5zdHIpICAgT1NTX3BhdGNoX2NhY2hpbmcoZGV2LCAtMSwgaW5zdHIsIHNlcWZkLCBfc2VxYnVmLCBfc2VxYnVmbGVuKQorI2RlZmluZSBTRVFfTE9BRF9HTURSVU0oZGV2LCBkcnVtKSAgIE9TU19kcnVtX2NhY2hpbmcoZGV2LCAtMSwgZHJ1bSwgc2VxZmQsIF9zZXFidWYsIF9zZXFidWZsZW4pCisjZWxzZQorCisjZGVmaW5lIFNFUV9MT0FEX0dNSU5TVFIoZGV2LCBpbnN0cikKKyNkZWZpbmUgU0VRX0xPQURfR01EUlVNKGRldiwgZHJ1bSkKKworI2RlZmluZSBTRVFfVVNFX0VYVEJVRigpICAgZXh0ZXJuIHVuc2lnbmVkIGNoYXIgX3NlcWJ1ZltdOyAgIGV4dGVybiBpbnQgX3NlcWJ1ZmxlbjtleHRlcm4gaW50IF9zZXFidWZwdHIKKworI2lmbmRlZiBVU0VfU0lNUExFX01BQ1JPUworCisjZGVmaW5lIFNFUV9ERUZJTkVCVUYobGVuKSB1bnNpZ25lZCBjaGFyIF9zZXFidWZbbGVuXTsgaW50IF9zZXFidWZsZW4gPSBsZW47aW50IF9zZXFidWZwdHIgPSAwCisjZGVmaW5lIF9TRVFfTkVFREJVRihsZW4pIGlmICgoX3NlcWJ1ZnB0cisobGVuKSkgPiBfc2VxYnVmbGVuKSBzZXFidWZfZHVtcCgpCisjZGVmaW5lIF9TRVFfQURWQlVGKGxlbikgX3NlcWJ1ZnB0ciArPSBsZW4KKyNkZWZpbmUgU0VRX0RVTVBCVUYgc2VxYnVmX2R1bXAKKyNlbHNlCisKKyNkZWZpbmUgX1NFUV9ORUVEQlVGKGxlbikgIAorI2VuZGlmCisjZW5kaWYKKworI2RlZmluZSBTRVFfVk9MVU1FX01PREUoZGV2LCBtb2RlKSB7X1NFUV9ORUVEQlVGKDgpOyAgX3NlcWJ1Zltfc2VxYnVmcHRyXSA9IFNFUV9FWFRFTkRFRDsgIF9zZXFidWZbX3NlcWJ1ZnB0cisxXSA9IFNFUV9WT0xNT0RFOyAgX3NlcWJ1Zltfc2VxYnVmcHRyKzJdID0gKGRldik7ICBfc2VxYnVmW19zZXFidWZwdHIrM10gPSAobW9kZSk7ICBfc2VxYnVmW19zZXFidWZwdHIrNF0gPSAwOyAgX3NlcWJ1Zltfc2VxYnVmcHRyKzVdID0gMDsgIF9zZXFidWZbX3NlcWJ1ZnB0cis2XSA9IDA7ICBfc2VxYnVmW19zZXFidWZwdHIrN10gPSAwOyAgX1NFUV9BRFZCVUYoOCk7fQorCisjZGVmaW5lIF9DSE5fVk9JQ0UoZGV2LCBldmVudCwgY2huLCBub3RlLCBwYXJtKSAgIHtfU0VRX05FRURCVUYoOCk7ICBfc2VxYnVmW19zZXFidWZwdHJdID0gRVZfQ0hOX1ZPSUNFOyAgX3NlcWJ1Zltfc2VxYnVmcHRyKzFdID0gKGRldik7ICBfc2VxYnVmW19zZXFidWZwdHIrMl0gPSAoZXZlbnQpOyAgX3NlcWJ1Zltfc2VxYnVmcHRyKzNdID0gKGNobik7ICBfc2VxYnVmW19zZXFidWZwdHIrNF0gPSAobm90ZSk7ICBfc2VxYnVmW19zZXFidWZwdHIrNV0gPSAocGFybSk7ICBfc2VxYnVmW19zZXFidWZwdHIrNl0gPSAoMCk7ICBfc2VxYnVmW19zZXFidWZwdHIrN10gPSAwOyAgX1NFUV9BRFZCVUYoOCk7fQorCisjZGVmaW5lIFNFUV9TVEFSVF9OT1RFKGRldiwgY2huLCBub3RlLCB2b2wpICAgX0NITl9WT0lDRShkZXYsIE1JRElfTk9URU9OLCBjaG4sIG5vdGUsIHZvbCkKKworI2RlZmluZSBTRVFfU1RPUF9OT1RFKGRldiwgY2huLCBub3RlLCB2b2wpICAgX0NITl9WT0lDRShkZXYsIE1JRElfTk9URU9GRiwgY2huLCBub3RlLCB2b2wpCisKKyNkZWZpbmUgU0VRX0tFWV9QUkVTU1VSRShkZXYsIGNobiwgbm90ZSwgcHJlc3N1cmUpICAgX0NITl9WT0lDRShkZXYsIE1JRElfS0VZX1BSRVNTVVJFLCBjaG4sIG5vdGUsIHByZXNzdXJlKQorCisjZGVmaW5lIF9DSE5fQ09NTU9OKGRldiwgZXZlbnQsIGNobiwgcDEsIHAyLCB3MTQpICAge19TRVFfTkVFREJVRig4KTsgIF9zZXFidWZbX3NlcWJ1ZnB0cl0gPSBFVl9DSE5fQ09NTU9OOyAgX3NlcWJ1Zltfc2VxYnVmcHRyKzFdID0gKGRldik7ICBfc2VxYnVmW19zZXFidWZwdHIrMl0gPSAoZXZlbnQpOyAgX3NlcWJ1Zltfc2VxYnVmcHRyKzNdID0gKGNobik7ICBfc2VxYnVmW19zZXFidWZwdHIrNF0gPSAocDEpOyAgX3NlcWJ1Zltfc2VxYnVmcHRyKzVdID0gKHAyKTsgICooc2hvcnQgKikmX3NlcWJ1Zltfc2VxYnVmcHRyKzZdID0gKHcxNCk7ICBfU0VRX0FEVkJVRig4KTt9CisKKyNkZWZpbmUgU0VRX1NZU0VYKGRldiwgYnVmLCBsZW4pICAge2ludCBpaSwgbGw9KGxlbik7ICAgdW5zaWduZWQgY2hhciAqYnVmcD1idWY7ICBpZiAobGw+NilsbD02OyAgX1NFUV9ORUVEQlVGKDgpOyAgX3NlcWJ1Zltfc2VxYnVmcHRyXSA9IEVWX1NZU0VYOyAgX3NlcWJ1Zltfc2VxYnVmcHRyKzFdID0gKGRldik7ICBmb3IoaWk9MDtpaTxsbDtpaSsrKSAgX3NlcWJ1Zltfc2VxYnVmcHRyK2lpKzJdID0gYnVmcFtpaV07ICBmb3IoaWk9bGw7aWk8NjtpaSsrKSAgX3NlcWJ1Zltfc2VxYnVmcHRyK2lpKzJdID0gMHhmZjsgIF9TRVFfQURWQlVGKDgpO30KKworI2RlZmluZSBTRVFfQ0hOX1BSRVNTVVJFKGRldiwgY2huLCBwcmVzc3VyZSkgICBfQ0hOX0NPTU1PTihkZXYsIE1JRElfQ0hOX1BSRVNTVVJFLCBjaG4sIHByZXNzdXJlLCAwLCAwKQorCisjZGVmaW5lIFNFUV9TRVRfUEFUQ0ggU0VRX1BHTV9DSEFOR0UKKyNpZmRlZiBPU1NMSUIKKyNkZWZpbmUgU0VRX1BHTV9DSEFOR0UoZGV2LCBjaG4sIHBhdGNoKSAgIHtPU1NfcGF0Y2hfY2FjaGluZyhkZXYsIGNobiwgcGF0Y2gsIHNlcWZkLCBfc2VxYnVmLCBfc2VxYnVmbGVuKTsgICBfQ0hOX0NPTU1PTihkZXYsIE1JRElfUEdNX0NIQU5HRSwgY2huLCBwYXRjaCwgMCwgMCk7fQorI2Vsc2UKKyNkZWZpbmUgU0VRX1BHTV9DSEFOR0UoZGV2LCBjaG4sIHBhdGNoKSAgIF9DSE5fQ09NTU9OKGRldiwgTUlESV9QR01fQ0hBTkdFLCBjaG4sIHBhdGNoLCAwLCAwKQorI2VuZGlmCisKKyNkZWZpbmUgU0VRX0NPTlRST0woZGV2LCBjaG4sIGNvbnRyb2xsZXIsIHZhbHVlKSAgIF9DSE5fQ09NTU9OKGRldiwgTUlESV9DVExfQ0hBTkdFLCBjaG4sIGNvbnRyb2xsZXIsIDAsIHZhbHVlKQorCisjZGVmaW5lIFNFUV9CRU5ERVIoZGV2LCBjaG4sIHZhbHVlKSAgIF9DSE5fQ09NTU9OKGRldiwgTUlESV9QSVRDSF9CRU5ELCBjaG4sIDAsIDAsIHZhbHVlKQorCisjZGVmaW5lIFNFUV9WMl9YX0NPTlRST0woZGV2LCB2b2ljZSwgY29udHJvbGxlciwgdmFsdWUpIHtfU0VRX05FRURCVUYoOCk7ICBfc2VxYnVmW19zZXFidWZwdHJdID0gU0VRX0VYVEVOREVEOyAgX3NlcWJ1Zltfc2VxYnVmcHRyKzFdID0gU0VRX0NPTlRST0xMRVI7ICBfc2VxYnVmW19zZXFidWZwdHIrMl0gPSAoZGV2KTsgIF9zZXFidWZbX3NlcWJ1ZnB0ciszXSA9ICh2b2ljZSk7ICBfc2VxYnVmW19zZXFidWZwdHIrNF0gPSAoY29udHJvbGxlcik7ICBfc2VxYnVmW19zZXFidWZwdHIrNV0gPSAoKHZhbHVlKSYweGZmKTsgIF9zZXFidWZbX3NlcWJ1ZnB0cis2XSA9ICgodmFsdWU+PjgpJjB4ZmYpOyAgX3NlcWJ1Zltfc2VxYnVmcHRyKzddID0gMDsgIF9TRVFfQURWQlVGKDgpO30KKworI2RlZmluZSBTRVFfUElUQ0hCRU5EKGRldiwgdm9pY2UsIHZhbHVlKSBTRVFfVjJfWF9DT05UUk9MKGRldiwgdm9pY2UsIENUUkxfUElUQ0hfQkVOREVSLCB2YWx1ZSkKKyNkZWZpbmUgU0VRX0JFTkRFUl9SQU5HRShkZXYsIHZvaWNlLCB2YWx1ZSkgU0VRX1YyX1hfQ09OVFJPTChkZXYsIHZvaWNlLCBDVFJMX1BJVENIX0JFTkRFUl9SQU5HRSwgdmFsdWUpCisjZGVmaW5lIFNFUV9FWFBSRVNTSU9OKGRldiwgdm9pY2UsIHZhbHVlKSBTRVFfQ09OVFJPTChkZXYsIHZvaWNlLCBDVExfRVhQUkVTU0lPTiwgdmFsdWUqMTI4KQorI2RlZmluZSBTRVFfTUFJTl9WT0xVTUUoZGV2LCB2b2ljZSwgdmFsdWUpIFNFUV9DT05UUk9MKGRldiwgdm9pY2UsIENUTF9NQUlOX1ZPTFVNRSwgKHZhbHVlKjE2MzgzKS8xMDApCisjZGVmaW5lIFNFUV9QQU5OSU5HKGRldiwgdm9pY2UsIHBvcykgU0VRX0NPTlRST0woZGV2LCB2b2ljZSwgQ1RMX1BBTiwgKHBvcysxMjgpIC8gMikKKworI2RlZmluZSBfVElNRVJfRVZFTlQoZXYsIHBhcm0pIHtfU0VRX05FRURCVUYoOCk7ICBfc2VxYnVmW19zZXFidWZwdHIrMF0gPSBFVl9USU1JTkc7ICAgX3NlcWJ1Zltfc2VxYnVmcHRyKzFdID0gKGV2KTsgICBfc2VxYnVmW19zZXFidWZwdHIrMl0gPSAwOyAgX3NlcWJ1Zltfc2VxYnVmcHRyKzNdID0gMDsgICoodW5zaWduZWQgaW50ICopJl9zZXFidWZbX3NlcWJ1ZnB0cis0XSA9IChwYXJtKTsgICBfU0VRX0FEVkJVRig4KTt9CisKKyNkZWZpbmUgU0VRX1NUQVJUX1RJTUVSKCkgX1RJTUVSX0VWRU5UKFRNUl9TVEFSVCwgMCkKKyNkZWZpbmUgU0VRX1NUT1BfVElNRVIoKSBfVElNRVJfRVZFTlQoVE1SX1NUT1AsIDApCisjZGVmaW5lIFNFUV9DT05USU5VRV9USU1FUigpIF9USU1FUl9FVkVOVChUTVJfQ09OVElOVUUsIDApCisjZGVmaW5lIFNFUV9XQUlUX1RJTUUodGlja3MpIF9USU1FUl9FVkVOVChUTVJfV0FJVF9BQlMsIHRpY2tzKQorI2RlZmluZSBTRVFfREVMVEFfVElNRSh0aWNrcykgX1RJTUVSX0VWRU5UKFRNUl9XQUlUX1JFTCwgdGlja3MpCisjZGVmaW5lIFNFUV9FQ0hPX0JBQ0soa2V5KSBfVElNRVJfRVZFTlQoVE1SX0VDSE8sIGtleSkKKyNkZWZpbmUgU0VRX1NFVF9URU1QTyh2YWx1ZSkgX1RJTUVSX0VWRU5UKFRNUl9URU1QTywgdmFsdWUpCisjZGVmaW5lIFNFUV9TT05HUE9TKHBvcykgX1RJTUVSX0VWRU5UKFRNUl9TUFAsIHBvcykKKyNkZWZpbmUgU0VRX1RJTUVfU0lHTkFUVVJFKHNpZykgX1RJTUVSX0VWRU5UKFRNUl9USU1FU0lHLCBzaWcpCisKKyNkZWZpbmUgX0xPQ0FMX0VWRU5UKGV2LCBwYXJtKSB7X1NFUV9ORUVEQlVGKDgpOyAgX3NlcWJ1Zltfc2VxYnVmcHRyKzBdID0gRVZfU0VRX0xPQ0FMOyAgIF9zZXFidWZbX3NlcWJ1ZnB0cisxXSA9IChldik7ICAgX3NlcWJ1Zltfc2VxYnVmcHRyKzJdID0gMDsgIF9zZXFidWZbX3NlcWJ1ZnB0ciszXSA9IDA7ICAqKHVuc2lnbmVkIGludCAqKSZfc2VxYnVmW19zZXFidWZwdHIrNF0gPSAocGFybSk7ICAgX1NFUV9BRFZCVUYoOCk7fQorCisjZGVmaW5lIFNFUV9QTEFZQVVESU8oZGV2bWFzaykgX0xPQ0FMX0VWRU5UKExPQ0xfU1RBUlRBVURJTywgZGV2bWFzaykKKworI2RlZmluZSBTRVFfTUlESU9VVChkZXZpY2UsIGJ5dGUpIHtfU0VRX05FRURCVUYoNCk7ICBfc2VxYnVmW19zZXFidWZwdHJdID0gU0VRX01JRElQVVRDOyAgX3NlcWJ1Zltfc2VxYnVmcHRyKzFdID0gKGJ5dGUpOyAgX3NlcWJ1Zltfc2VxYnVmcHRyKzJdID0gKGRldmljZSk7ICBfc2VxYnVmW19zZXFidWZwdHIrM10gPSAwOyAgX1NFUV9BRFZCVUYoNCk7fQorCisjaWZkZWYgT1NTTElCCisjZGVmaW5lIFNFUV9XUlBBVENIKHBhdGNoeCwgbGVuKSAgIE9TU193cml0ZV9wYXRjaChzZXFmZCwgKGNoYXIqKShwYXRjaHgpLCBsZW4pCisjZGVmaW5lIFNFUV9XUlBBVENIMihwYXRjaHgsIGxlbikgICBPU1Nfd3JpdGVfcGF0Y2gyKHNlcWZkLCAoY2hhciopKHBhdGNoeCksIGxlbikKKyNlbHNlCisjZGVmaW5lIFNFUV9XUlBBVENIKHBhdGNoeCwgbGVuKSAgIHtpZiAoX3NlcWJ1ZnB0cikgU0VRX0RVTVBCVUYoKTsgIGlmICh3cml0ZShzZXFmZCwgKGNoYXIqKShwYXRjaHgpLCBsZW4pPT0tMSkgICBwZXJyb3IoIldyaXRlIHBhdGNoOiAvZGV2L3NlcXVlbmNlciIpO30KKyNkZWZpbmUgU0VRX1dSUEFUQ0gyKHBhdGNoeCwgbGVuKSAgIChTRVFfRFVNUEJVRigpLCB3cml0ZShzZXFmZCwgKGNoYXIqKShwYXRjaHgpLCBsZW4pKQorI2VuZGlmCisKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3BpbmxvY2suaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zcGlubG9jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1MDRjOWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3BpbmxvY2suaApAQCAtMCwwICsxLDExMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0xJTlVYX1NQSU5MT0NLX0gKKyNkZWZpbmUgX19MSU5VWF9TUElOTE9DS19ICisKKyNpbmNsdWRlIDxsaW51eC9wcmVlbXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkX2luZm8uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KKworI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKworI2RlZmluZSBMT0NLX1NFQ1RJT05fTkFNRSAiLnRleHQubG9jay4iS0JVSUxEX0JBU0VOQU1FCisKKyNkZWZpbmUgTE9DS19TRUNUSU9OX1NUQVJUKGV4dHJhKSAgICIuc3Vic2VjdGlvbiAxXG5cdCIgICBleHRyYSAgICIuaWZuZGVmICIgTE9DS19TRUNUSU9OX05BTUUgIlxuXHQiICAgTE9DS19TRUNUSU9OX05BTUUgIjpcblx0IiAgICIuZW5kaWZcbiIKKworI2RlZmluZSBMT0NLX1NFQ1RJT05fRU5EICAgIi5wcmV2aW91c1xuXHQiCisKKyNkZWZpbmUgX19sb2NrZnVuYyBmYXN0Y2FsbCBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIuc3BpbmxvY2sudGV4dCIpKSkKKworI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrX3R5cGVzLmg+CisKKyNpbmNsdWRlIDxsaW51eC9zcGlubG9ja191cC5oPgorCisjZGVmaW5lIHNwaW5fbG9ja19pbml0KGxvY2spICAgZG8geyAqKGxvY2spID0gU1BJTl9MT0NLX1VOTE9DS0VEOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIHJ3bG9ja19pbml0KGxvY2spICAgZG8geyAqKGxvY2spID0gUldfTE9DS19VTkxPQ0tFRDsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBzcGluX2lzX2xvY2tlZChsb2NrKSBfX3Jhd19zcGluX2lzX2xvY2tlZCgmKGxvY2spLT5yYXdfbG9jaykKKworI2RlZmluZSBzcGluX3VubG9ja193YWl0KGxvY2spIF9fcmF3X3NwaW5fdW5sb2NrX3dhaXQoJihsb2NrKS0+cmF3X2xvY2spCisKKyNpbmNsdWRlIDxsaW51eC9zcGlubG9ja19hcGlfdXAuaD4KKworI2RlZmluZSBfcmF3X3NwaW5fbG9jayhsb2NrKSBfX3Jhd19zcGluX2xvY2soJihsb2NrKS0+cmF3X2xvY2spCisjZGVmaW5lIF9yYXdfc3Bpbl9sb2NrX2ZsYWdzKGxvY2ssIGZsYWdzKSAgIF9fcmF3X3NwaW5fbG9ja19mbGFncygmKGxvY2spLT5yYXdfbG9jaywgKihmbGFncykpCisjZGVmaW5lIF9yYXdfc3Bpbl90cnlsb2NrKGxvY2spIF9fcmF3X3NwaW5fdHJ5bG9jaygmKGxvY2spLT5yYXdfbG9jaykKKyNkZWZpbmUgX3Jhd19zcGluX3VubG9jayhsb2NrKSBfX3Jhd19zcGluX3VubG9jaygmKGxvY2spLT5yYXdfbG9jaykKKyNkZWZpbmUgX3Jhd19yZWFkX2xvY2socndsb2NrKSBfX3Jhd19yZWFkX2xvY2soJihyd2xvY2spLT5yYXdfbG9jaykKKyNkZWZpbmUgX3Jhd19yZWFkX3RyeWxvY2socndsb2NrKSBfX3Jhd19yZWFkX3RyeWxvY2soJihyd2xvY2spLT5yYXdfbG9jaykKKyNkZWZpbmUgX3Jhd19yZWFkX3VubG9jayhyd2xvY2spIF9fcmF3X3JlYWRfdW5sb2NrKCYocndsb2NrKS0+cmF3X2xvY2spCisjZGVmaW5lIF9yYXdfd3JpdGVfbG9jayhyd2xvY2spIF9fcmF3X3dyaXRlX2xvY2soJihyd2xvY2spLT5yYXdfbG9jaykKKyNkZWZpbmUgX3Jhd193cml0ZV90cnlsb2NrKHJ3bG9jaykgX19yYXdfd3JpdGVfdHJ5bG9jaygmKHJ3bG9jayktPnJhd19sb2NrKQorI2RlZmluZSBfcmF3X3dyaXRlX3VubG9jayhyd2xvY2spIF9fcmF3X3dyaXRlX3VubG9jaygmKHJ3bG9jayktPnJhd19sb2NrKQorCisjZGVmaW5lIHJlYWRfY2FuX2xvY2socndsb2NrKSBfX3Jhd19yZWFkX2Nhbl9sb2NrKCYocndsb2NrKS0+cmF3X2xvY2spCisjZGVmaW5lIHdyaXRlX2Nhbl9sb2NrKHJ3bG9jaykgX19yYXdfd3JpdGVfY2FuX2xvY2soJihyd2xvY2spLT5yYXdfbG9jaykKKworI2RlZmluZSBzcGluX3RyeWxvY2sobG9jaykgX19jb25kX2xvY2soX3NwaW5fdHJ5bG9jayhsb2NrKSkKKyNkZWZpbmUgcmVhZF90cnlsb2NrKGxvY2spIF9fY29uZF9sb2NrKF9yZWFkX3RyeWxvY2sobG9jaykpCisjZGVmaW5lIHdyaXRlX3RyeWxvY2sobG9jaykgX19jb25kX2xvY2soX3dyaXRlX3RyeWxvY2sobG9jaykpCisKKyNkZWZpbmUgc3Bpbl9sb2NrKGxvY2spIF9zcGluX2xvY2sobG9jaykKKworI2RlZmluZSBzcGluX2xvY2tfbmVzdGVkKGxvY2ssIHN1YmNsYXNzKSBfc3Bpbl9sb2NrKGxvY2spCisKKyNkZWZpbmUgd3JpdGVfbG9jayhsb2NrKSBfd3JpdGVfbG9jayhsb2NrKQorI2RlZmluZSByZWFkX2xvY2sobG9jaykgX3JlYWRfbG9jayhsb2NrKQorCisjZGVmaW5lIHNwaW5fbG9ja19pcnFzYXZlKGxvY2ssIGZsYWdzKSBfc3Bpbl9sb2NrX2lycXNhdmUobG9jaywgZmxhZ3MpCisjZGVmaW5lIHJlYWRfbG9ja19pcnFzYXZlKGxvY2ssIGZsYWdzKSBfcmVhZF9sb2NrX2lycXNhdmUobG9jaywgZmxhZ3MpCisjZGVmaW5lIHdyaXRlX2xvY2tfaXJxc2F2ZShsb2NrLCBmbGFncykgX3dyaXRlX2xvY2tfaXJxc2F2ZShsb2NrLCBmbGFncykKKworI2RlZmluZSBzcGluX2xvY2tfaXJxKGxvY2spIF9zcGluX2xvY2tfaXJxKGxvY2spCisjZGVmaW5lIHNwaW5fbG9ja19iaChsb2NrKSBfc3Bpbl9sb2NrX2JoKGxvY2spCisKKyNkZWZpbmUgcmVhZF9sb2NrX2lycShsb2NrKSBfcmVhZF9sb2NrX2lycShsb2NrKQorI2RlZmluZSByZWFkX2xvY2tfYmgobG9jaykgX3JlYWRfbG9ja19iaChsb2NrKQorCisjZGVmaW5lIHdyaXRlX2xvY2tfaXJxKGxvY2spIF93cml0ZV9sb2NrX2lycShsb2NrKQorI2RlZmluZSB3cml0ZV9sb2NrX2JoKGxvY2spIF93cml0ZV9sb2NrX2JoKGxvY2spCisKKyNkZWZpbmUgc3Bpbl91bmxvY2sobG9jaykgX3NwaW5fdW5sb2NrKGxvY2spCisjZGVmaW5lIHJlYWRfdW5sb2NrKGxvY2spIF9yZWFkX3VubG9jayhsb2NrKQorI2RlZmluZSB3cml0ZV91bmxvY2sobG9jaykgX3dyaXRlX3VubG9jayhsb2NrKQorI2RlZmluZSBzcGluX3VubG9ja19pcnEobG9jaykgX3NwaW5fdW5sb2NrX2lycShsb2NrKQorI2RlZmluZSByZWFkX3VubG9ja19pcnEobG9jaykgX3JlYWRfdW5sb2NrX2lycShsb2NrKQorI2RlZmluZSB3cml0ZV91bmxvY2tfaXJxKGxvY2spIF93cml0ZV91bmxvY2tfaXJxKGxvY2spCisKKyNkZWZpbmUgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShsb2NrLCBmbGFncykgICBfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShsb2NrLCBmbGFncykKKyNkZWZpbmUgc3Bpbl91bmxvY2tfYmgobG9jaykgX3NwaW5fdW5sb2NrX2JoKGxvY2spCisKKyNkZWZpbmUgcmVhZF91bmxvY2tfaXJxcmVzdG9yZShsb2NrLCBmbGFncykgICBfcmVhZF91bmxvY2tfaXJxcmVzdG9yZShsb2NrLCBmbGFncykKKyNkZWZpbmUgcmVhZF91bmxvY2tfYmgobG9jaykgX3JlYWRfdW5sb2NrX2JoKGxvY2spCisKKyNkZWZpbmUgd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZ3MpICAgX3dyaXRlX3VubG9ja19pcnFyZXN0b3JlKGxvY2ssIGZsYWdzKQorI2RlZmluZSB3cml0ZV91bmxvY2tfYmgobG9jaykgX3dyaXRlX3VubG9ja19iaChsb2NrKQorCisjZGVmaW5lIHNwaW5fdHJ5bG9ja19iaChsb2NrKSBfX2NvbmRfbG9jayhfc3Bpbl90cnlsb2NrX2JoKGxvY2spKQorCisjZGVmaW5lIHNwaW5fdHJ5bG9ja19pcnEobG9jaykgICh7ICAgbG9jYWxfaXJxX2Rpc2FibGUoKTsgICBfc3Bpbl90cnlsb2NrKGxvY2spID8gICAxIDogKHsgbG9jYWxfaXJxX2VuYWJsZSgpOyAwOyB9KTsgIH0pCisKKyNkZWZpbmUgc3Bpbl90cnlsb2NrX2lycXNhdmUobG9jaywgZmxhZ3MpICAoeyAgIGxvY2FsX2lycV9zYXZlKGZsYWdzKTsgICBfc3Bpbl90cnlsb2NrKGxvY2spID8gICAxIDogKHsgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOyAwOyB9KTsgIH0pCisKKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisKKyNkZWZpbmUgYXRvbWljX2RlY19hbmRfbG9jayhhdG9taWMsIGxvY2spICAgX19jb25kX2xvY2soX2F0b21pY19kZWNfYW5kX2xvY2soYXRvbWljLCBsb2NrKSkKKworI2RlZmluZSBzcGluX2Nhbl9sb2NrKGxvY2spICghc3Bpbl9pc19sb2NrZWQobG9jaykpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NwaW5sb2NrX2FwaV9zbXAuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zcGlubG9ja19hcGlfc21wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRkOGNjOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zcGlubG9ja19hcGlfc21wLmgKQEAgLTAsMCArMSwyMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0xJTlVYX1NQSU5MT0NLX0FQSV9TTVBfSAorI2RlZmluZSBfX0xJTlVYX1NQSU5MT0NLX0FQSV9TTVBfSAorCisjaWZuZGVmIF9fTElOVVhfU1BJTkxPQ0tfSAorI2Vycm9yICJwbGVhc2UgZG9uJ3QgaW5jbHVkZSB0aGlzIGZpbGUgZGlyZWN0bHkiCisjZW5kaWYKKworI2RlZmluZSBhc3NlcnRfc3Bpbl9sb2NrZWQoeCkgQlVHX09OKCFzcGluX2lzX2xvY2tlZCh4KSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3BpbmxvY2tfYXBpX3VwLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3BpbmxvY2tfYXBpX3VwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzlhNWMwMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zcGlubG9ja19hcGlfdXAuaApAQCAtMCwwICsxLDY5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTElOVVhfU1BJTkxPQ0tfQVBJX1VQX0gKKyNkZWZpbmUgX19MSU5VWF9TUElOTE9DS19BUElfVVBfSAorCisjaWZuZGVmIF9fTElOVVhfU1BJTkxPQ0tfSAorI2Vycm9yICJwbGVhc2UgZG9uJ3QgaW5jbHVkZSB0aGlzIGZpbGUgZGlyZWN0bHkiCisjZW5kaWYKKworI2RlZmluZSBpbl9sb2NrX2Z1bmN0aW9ucyhBRERSKSAwCisKKyNkZWZpbmUgYXNzZXJ0X3NwaW5fbG9ja2VkKGxvY2spIGRvIHsgKHZvaWQpKGxvY2spOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIF9fTE9DSyhsb2NrKSAgIGRvIHsgcHJlZW1wdF9kaXNhYmxlKCk7IF9fYWNxdWlyZShsb2NrKTsgKHZvaWQpKGxvY2spOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIF9fTE9DS19CSChsb2NrKSAgIGRvIHsgbG9jYWxfYmhfZGlzYWJsZSgpOyBfX0xPQ0sobG9jayk7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgX19MT0NLX0lSUShsb2NrKSAgIGRvIHsgbG9jYWxfaXJxX2Rpc2FibGUoKTsgX19MT0NLKGxvY2spOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIF9fTE9DS19JUlFTQVZFKGxvY2ssIGZsYWdzKSAgIGRvIHsgbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOyBfX0xPQ0sobG9jayk7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgX19VTkxPQ0sobG9jaykgICBkbyB7IHByZWVtcHRfZW5hYmxlKCk7IF9fcmVsZWFzZShsb2NrKTsgKHZvaWQpKGxvY2spOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIF9fVU5MT0NLX0JIKGxvY2spICAgZG8geyBwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7IGxvY2FsX2JoX2VuYWJsZSgpOyBfX3JlbGVhc2UobG9jayk7ICh2b2lkKShsb2NrKTsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBfX1VOTE9DS19JUlEobG9jaykgICBkbyB7IGxvY2FsX2lycV9lbmFibGUoKTsgX19VTkxPQ0sobG9jayk7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgX19VTkxPQ0tfSVJRUkVTVE9SRShsb2NrLCBmbGFncykgICBkbyB7IGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsgX19VTkxPQ0sobG9jayk7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgX3NwaW5fbG9jayhsb2NrKSBfX0xPQ0sobG9jaykKKyNkZWZpbmUgX3NwaW5fbG9ja19uZXN0ZWQobG9jaywgc3ViY2xhc3MpIF9fTE9DSyhsb2NrKQorI2RlZmluZSBfcmVhZF9sb2NrKGxvY2spIF9fTE9DSyhsb2NrKQorI2RlZmluZSBfd3JpdGVfbG9jayhsb2NrKSBfX0xPQ0sobG9jaykKKyNkZWZpbmUgX3NwaW5fbG9ja19iaChsb2NrKSBfX0xPQ0tfQkgobG9jaykKKyNkZWZpbmUgX3JlYWRfbG9ja19iaChsb2NrKSBfX0xPQ0tfQkgobG9jaykKKyNkZWZpbmUgX3dyaXRlX2xvY2tfYmgobG9jaykgX19MT0NLX0JIKGxvY2spCisjZGVmaW5lIF9zcGluX2xvY2tfaXJxKGxvY2spIF9fTE9DS19JUlEobG9jaykKKyNkZWZpbmUgX3JlYWRfbG9ja19pcnEobG9jaykgX19MT0NLX0lSUShsb2NrKQorI2RlZmluZSBfd3JpdGVfbG9ja19pcnEobG9jaykgX19MT0NLX0lSUShsb2NrKQorI2RlZmluZSBfc3Bpbl9sb2NrX2lycXNhdmUobG9jaywgZmxhZ3MpIF9fTE9DS19JUlFTQVZFKGxvY2ssIGZsYWdzKQorI2RlZmluZSBfcmVhZF9sb2NrX2lycXNhdmUobG9jaywgZmxhZ3MpIF9fTE9DS19JUlFTQVZFKGxvY2ssIGZsYWdzKQorI2RlZmluZSBfd3JpdGVfbG9ja19pcnFzYXZlKGxvY2ssIGZsYWdzKSBfX0xPQ0tfSVJRU0FWRShsb2NrLCBmbGFncykKKyNkZWZpbmUgX3NwaW5fdHJ5bG9jayhsb2NrKSAoeyBfX0xPQ0sobG9jayk7IDE7IH0pCisjZGVmaW5lIF9yZWFkX3RyeWxvY2sobG9jaykgKHsgX19MT0NLKGxvY2spOyAxOyB9KQorI2RlZmluZSBfd3JpdGVfdHJ5bG9jayhsb2NrKSAoeyBfX0xPQ0sobG9jayk7IDE7IH0pCisjZGVmaW5lIF9zcGluX3RyeWxvY2tfYmgobG9jaykgKHsgX19MT0NLX0JIKGxvY2spOyAxOyB9KQorI2RlZmluZSBfc3Bpbl91bmxvY2sobG9jaykgX19VTkxPQ0sobG9jaykKKyNkZWZpbmUgX3JlYWRfdW5sb2NrKGxvY2spIF9fVU5MT0NLKGxvY2spCisjZGVmaW5lIF93cml0ZV91bmxvY2sobG9jaykgX19VTkxPQ0sobG9jaykKKyNkZWZpbmUgX3NwaW5fdW5sb2NrX2JoKGxvY2spIF9fVU5MT0NLX0JIKGxvY2spCisjZGVmaW5lIF93cml0ZV91bmxvY2tfYmgobG9jaykgX19VTkxPQ0tfQkgobG9jaykKKyNkZWZpbmUgX3JlYWRfdW5sb2NrX2JoKGxvY2spIF9fVU5MT0NLX0JIKGxvY2spCisjZGVmaW5lIF9zcGluX3VubG9ja19pcnEobG9jaykgX19VTkxPQ0tfSVJRKGxvY2spCisjZGVmaW5lIF9yZWFkX3VubG9ja19pcnEobG9jaykgX19VTkxPQ0tfSVJRKGxvY2spCisjZGVmaW5lIF93cml0ZV91bmxvY2tfaXJxKGxvY2spIF9fVU5MT0NLX0lSUShsb2NrKQorI2RlZmluZSBfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShsb2NrLCBmbGFncykgX19VTkxPQ0tfSVJRUkVTVE9SRShsb2NrLCBmbGFncykKKyNkZWZpbmUgX3JlYWRfdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZ3MpIF9fVU5MT0NLX0lSUVJFU1RPUkUobG9jaywgZmxhZ3MpCisjZGVmaW5lIF93cml0ZV91bmxvY2tfaXJxcmVzdG9yZShsb2NrLCBmbGFncykgX19VTkxPQ0tfSVJRUkVTVE9SRShsb2NrLCBmbGFncykKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3BpbmxvY2tfdHlwZXMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zcGlubG9ja190eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5MzhiNTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3BpbmxvY2tfdHlwZXMuaApAQCAtMCwwICsxLDQ2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTElOVVhfU1BJTkxPQ0tfVFlQRVNfSAorI2RlZmluZSBfX0xJTlVYX1NQSU5MT0NLX1RZUEVTX0gKKworI2luY2x1ZGUgPGxpbnV4L2xvY2tkZXAuaD4KKworI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrX3R5cGVzX3VwLmg+CisKK3R5cGVkZWYgc3RydWN0IHsKKyByYXdfc3BpbmxvY2tfdCByYXdfbG9jazsKK30gc3BpbmxvY2tfdDsKKworI2RlZmluZSBTUElOTE9DS19NQUdJQyAweGRlYWQ0ZWFkCisKK3R5cGVkZWYgc3RydWN0IHsKKyByYXdfcndsb2NrX3QgcmF3X2xvY2s7Cit9IHJ3bG9ja190OworCisjZGVmaW5lIFJXTE9DS19NQUdJQyAweGRlYWYxZWVkCisKKyNkZWZpbmUgU1BJTkxPQ0tfT1dORVJfSU5JVCAoKHZvaWQgKiktMUwpCisKKyNkZWZpbmUgU1BJTl9ERVBfTUFQX0lOSVQobG9ja25hbWUpCisKKyNkZWZpbmUgUldfREVQX01BUF9JTklUKGxvY2tuYW1lKQorCisjZGVmaW5lIF9fU1BJTl9MT0NLX1VOTE9DS0VEKGxvY2tuYW1lKSAgIChzcGlubG9ja190KSB7IC5yYXdfbG9jayA9IF9fUkFXX1NQSU5fTE9DS19VTkxPQ0tFRCwgICBTUElOX0RFUF9NQVBfSU5JVChsb2NrbmFtZSkgfQorI2RlZmluZSBfX1JXX0xPQ0tfVU5MT0NLRUQobG9ja25hbWUpICAgKHJ3bG9ja190KSB7IC5yYXdfbG9jayA9IF9fUkFXX1JXX0xPQ0tfVU5MT0NLRUQsICAgUldfREVQX01BUF9JTklUKGxvY2tuYW1lKSB9CisKKyNkZWZpbmUgU1BJTl9MT0NLX1VOTE9DS0VEIF9fU1BJTl9MT0NLX1VOTE9DS0VEKG9sZF9zdHlsZV9zcGluX2luaXQpCisjZGVmaW5lIFJXX0xPQ0tfVU5MT0NLRUQgX19SV19MT0NLX1VOTE9DS0VEKG9sZF9zdHlsZV9yd19pbml0KQorCisjZGVmaW5lIERFRklORV9TUElOTE9DSyh4KSBzcGlubG9ja190IHggPSBfX1NQSU5fTE9DS19VTkxPQ0tFRCh4KQorI2RlZmluZSBERUZJTkVfUldMT0NLKHgpIHJ3bG9ja190IHggPSBfX1JXX0xPQ0tfVU5MT0NLRUQoeCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3BpbmxvY2tfdHlwZXNfdXAuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zcGlubG9ja190eXBlc191cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkYjMwMzcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3BpbmxvY2tfdHlwZXNfdXAuaApAQCAtMCwwICsxLDI5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTElOVVhfU1BJTkxPQ0tfVFlQRVNfVVBfSAorI2RlZmluZSBfX0xJTlVYX1NQSU5MT0NLX1RZUEVTX1VQX0gKKworI2lmbmRlZiBfX0xJTlVYX1NQSU5MT0NLX1RZUEVTX0gKKyNlcnJvciAicGxlYXNlIGRvbid0IGluY2x1ZGUgdGhpcyBmaWxlIGRpcmVjdGx5IgorI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IHsgfSByYXdfc3BpbmxvY2tfdDsKKworI2RlZmluZSBfX1JBV19TUElOX0xPQ0tfVU5MT0NLRUQgeyB9CisKK3R5cGVkZWYgc3RydWN0IHsKKworfSByYXdfcndsb2NrX3Q7CisKKyNkZWZpbmUgX19SQVdfUldfTE9DS19VTkxPQ0tFRCB7IH0KKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3BpbmxvY2tfdXAuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zcGlubG9ja191cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0OTU4ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3BpbmxvY2tfdXAuaApAQCAtMCwwICsxLDMwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTElOVVhfU1BJTkxPQ0tfVVBfSAorI2RlZmluZSBfX0xJTlVYX1NQSU5MT0NLX1VQX0gKKworI2lmbmRlZiBfX0xJTlVYX1NQSU5MT0NLX0gKKyNlcnJvciAicGxlYXNlIGRvbid0IGluY2x1ZGUgdGhpcyBmaWxlIGRpcmVjdGx5IgorI2VuZGlmCisKKyNkZWZpbmUgX19yYXdfc3Bpbl9pc19sb2NrZWQobG9jaykgKCh2b2lkKShsb2NrKSwgMCkKKworI2RlZmluZSBfX3Jhd19zcGluX2xvY2sobG9jaykgZG8geyAodm9pZCkobG9jayk7IH0gd2hpbGUgKDApCisjZGVmaW5lIF9fcmF3X3NwaW5fdW5sb2NrKGxvY2spIGRvIHsgKHZvaWQpKGxvY2spOyB9IHdoaWxlICgwKQorI2RlZmluZSBfX3Jhd19zcGluX3RyeWxvY2sobG9jaykgKHsgKHZvaWQpKGxvY2spOyAxOyB9KQorCisjZGVmaW5lIF9fcmF3X3JlYWRfY2FuX2xvY2sobG9jaykgKCgodm9pZCkobG9jayksIDEpKQorI2RlZmluZSBfX3Jhd193cml0ZV9jYW5fbG9jayhsb2NrKSAoKCh2b2lkKShsb2NrKSwgMSkpCisKKyNkZWZpbmUgX19yYXdfc3Bpbl91bmxvY2tfd2FpdChsb2NrKSAgIGRvIHsgY3B1X3JlbGF4KCk7IH0gd2hpbGUgKF9fcmF3X3NwaW5faXNfbG9ja2VkKGxvY2spKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zdGFja3RyYWNlLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3RhY2t0cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmN2VjYzgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3RhY2t0cmFjZS5oCkBAIC0wLDAgKzEsMTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19MSU5VWF9TVEFDS1RSQUNFX0gKKyNkZWZpbmUgX19MSU5VWF9TVEFDS1RSQUNFX0gKKworI2RlZmluZSBzYXZlX3N0YWNrX3RyYWNlKHRyYWNlLCB0YXNrLCBhbGwsIHNraXApIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcHJpbnRfc3RhY2tfdHJhY2UodHJhY2UpIGRvIHsgfSB3aGlsZSAoMCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3RhdC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N0YXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDc1N2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N0YXQuaApAQCAtMCwwICsxLDU0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9TVEFUX0gKKyNkZWZpbmUgX0xJTlVYX1NUQVRfSAorCisjaWYgIWRlZmluZWQoX19HTElCQ19fKSB8fCBfX0dMSUJDX18gPCAyCisKKyNkZWZpbmUgU19JRk1UIDAwMTcwMDAwCisjZGVmaW5lIFNfSUZTT0NLIDAxNDAwMDAKKyNkZWZpbmUgU19JRkxOSyAwMTIwMDAwCisjZGVmaW5lIFNfSUZSRUcgMDEwMDAwMAorI2RlZmluZSBTX0lGQkxLIDAwNjAwMDAKKyNkZWZpbmUgU19JRkRJUiAwMDQwMDAwCisjZGVmaW5lIFNfSUZDSFIgMDAyMDAwMAorI2RlZmluZSBTX0lGSUZPIDAwMTAwMDAKKyNkZWZpbmUgU19JU1VJRCAwMDA0MDAwCisjZGVmaW5lIFNfSVNHSUQgMDAwMjAwMAorI2RlZmluZSBTX0lTVlRYIDAwMDEwMDAKKworI2RlZmluZSBTX0lTTE5LKG0pICgoKG0pICYgU19JRk1UKSA9PSBTX0lGTE5LKQorI2RlZmluZSBTX0lTUkVHKG0pICgoKG0pICYgU19JRk1UKSA9PSBTX0lGUkVHKQorI2RlZmluZSBTX0lTRElSKG0pICgoKG0pICYgU19JRk1UKSA9PSBTX0lGRElSKQorI2RlZmluZSBTX0lTQ0hSKG0pICgoKG0pICYgU19JRk1UKSA9PSBTX0lGQ0hSKQorI2RlZmluZSBTX0lTQkxLKG0pICgoKG0pICYgU19JRk1UKSA9PSBTX0lGQkxLKQorI2RlZmluZSBTX0lTRklGTyhtKSAoKChtKSAmIFNfSUZNVCkgPT0gU19JRklGTykKKyNkZWZpbmUgU19JU1NPQ0sobSkgKCgobSkgJiBTX0lGTVQpID09IFNfSUZTT0NLKQorCisjZGVmaW5lIFNfSVJXWFUgMDA3MDAKKyNkZWZpbmUgU19JUlVTUiAwMDQwMAorI2RlZmluZSBTX0lXVVNSIDAwMjAwCisjZGVmaW5lIFNfSVhVU1IgMDAxMDAKKworI2RlZmluZSBTX0lSV1hHIDAwMDcwCisjZGVmaW5lIFNfSVJHUlAgMDAwNDAKKyNkZWZpbmUgU19JV0dSUCAwMDAyMAorI2RlZmluZSBTX0lYR1JQIDAwMDEwCisKKyNkZWZpbmUgU19JUldYTyAwMDAwNworI2RlZmluZSBTX0lST1RIIDAwMDA0CisjZGVmaW5lIFNfSVdPVEggMDAwMDIKKyNkZWZpbmUgU19JWE9USCAwMDAwMQorCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3RhdGZzLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3RhdGZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNhNWQ3MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zdGF0ZnMuaApAQCAtMCwwICsxLDMzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9TVEFURlNfSAorI2RlZmluZSBfTElOVVhfU1RBVEZTX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNpbmNsdWRlIDxhc20vc3RhdGZzLmg+CisKK3N0cnVjdCBrc3RhdGZzIHsKKyBsb25nIGZfdHlwZTsKKyBsb25nIGZfYnNpemU7CisgdTY0IGZfYmxvY2tzOworIHU2NCBmX2JmcmVlOworIHU2NCBmX2JhdmFpbDsKKyB1NjQgZl9maWxlczsKKyB1NjQgZl9mZnJlZTsKKyBfX2tlcm5lbF9mc2lkX3QgZl9mc2lkOworIGxvbmcgZl9uYW1lbGVuOworIGxvbmcgZl9mcnNpemU7CisgbG9uZyBmX3NwYXJlWzVdOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3RkZGVmLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3RkZGVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQxMmY0NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zdGRkZWYuaApAQCAtMCwwICsxLDMxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9TVERERUZfSAorI2RlZmluZSBfTElOVVhfU1REREVGX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisKKyN1bmRlZiBOVUxMCisjaWZkZWYgX19jcGx1c3BsdXMKKyNkZWZpbmUgTlVMTCAwCisjZWxzZQorI2RlZmluZSBOVUxMICgodm9pZCAqKTApCisjZW5kaWYKKworI3VuZGVmIG9mZnNldG9mCisjaWZkZWYgX19jb21waWxlcl9vZmZzZXRvZgorI2RlZmluZSBvZmZzZXRvZihUWVBFLE1FTUJFUikgX19jb21waWxlcl9vZmZzZXRvZihUWVBFLE1FTUJFUikKKyNlbHNlCisjZGVmaW5lIG9mZnNldG9mKFRZUEUsIE1FTUJFUikgKChzaXplX3QpICYoKFRZUEUgKikwKS0+TUVNQkVSKQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N0cmluZy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N0cmluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3NTkwNjgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3RyaW5nLmgKQEAgLTAsMCArMSwxNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfU1RSSU5HX0hfCisjZGVmaW5lIF9MSU5VWF9TVFJJTkdfSF8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3RyaW5naWZ5LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3RyaW5naWZ5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JiOWU1YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zdHJpbmdpZnkuaApAQCAtMCwwICsxLDE4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTElOVVhfU1RSSU5HSUZZX0gKKyNkZWZpbmUgX19MSU5VWF9TVFJJTkdJRllfSAorCisjZGVmaW5lIF9fc3RyaW5naWZ5XzEoeCkgI3gKKyNkZWZpbmUgX19zdHJpbmdpZnkoeCkgX19zdHJpbmdpZnlfMSh4KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zdW5ycGMvYXV0aC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N1bnJwYy9hdXRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUwYTNkMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zdW5ycGMvYXV0aC5oCkBAIC0wLDAgKzEsMTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX1NVTlJQQ19BVVRIX0gKKyNkZWZpbmUgX0xJTlVYX1NVTlJQQ19BVVRIX0gKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL2F1dGhfZ3NzLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL2F1dGhfZ3NzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY0ZjFmOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zdW5ycGMvYXV0aF9nc3MuaApAQCAtMCwwICsxLDE2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9TVU5SUENfQVVUSF9HU1NfSAorI2RlZmluZSBfTElOVVhfU1VOUlBDX0FVVEhfR1NTX0gKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zdW5ycGMvY2xudC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N1bnJwYy9jbG50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU2MmFkOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zdW5ycGMvY2xudC5oCkBAIC0wLDAgKzEsMTAzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9TVU5SUENfQ0xOVF9ICisjZGVmaW5lIF9MSU5VWF9TVU5SUENfQ0xOVF9ICisKKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMvbXNnX3Byb3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMveHBydC5oPgorI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9hdXRoLmg+CisjaW5jbHVkZSA8bGludXgvc3VucnBjL3N0YXRzLmg+CisjaW5jbHVkZSA8bGludXgvc3VucnBjL3hkci5oPgorI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy90aW1lci5oPgorI2luY2x1ZGUgPGFzbS9zaWduYWwuaD4KKworc3RydWN0IHJwY19wb3J0bWFwIHsKKyBfX3UzMiBwbV9wcm9nOworIF9fdTMyIHBtX3ZlcnM7CisgX191MzIgcG1fcHJvdDsKKyBfX3UxNiBwbV9wb3J0OworIHVuc2lnbmVkIGNoYXIgcG1fYmluZGluZyA6IDE7Cisgc3RydWN0IHJwY193YWl0X3F1ZXVlIHBtX2JpbmR3YWl0OworfTsKKworc3RydWN0IHJwY19pbm9kZTsKKworc3RydWN0IHJwY19jbG50IHsKKyBhdG9taWNfdCBjbF9jb3VudDsKKyBhdG9taWNfdCBjbF91c2VyczsKKyBzdHJ1Y3QgcnBjX3hwcnQgKiBjbF94cHJ0OworIHN0cnVjdCBycGNfcHJvY2luZm8gKiBjbF9wcm9jaW5mbzsKKyB1MzIgY2xfbWF4cHJvYzsKKworIGNoYXIgKiBjbF9zZXJ2ZXI7CisgY2hhciAqIGNsX3Byb3RuYW1lOworIHN0cnVjdCBycGNfYXV0aCAqIGNsX2F1dGg7Cisgc3RydWN0IHJwY19zdGF0ICogY2xfc3RhdHM7Cisgc3RydWN0IHJwY19pb3N0YXRzICogY2xfbWV0cmljczsKKworIHVuc2lnbmVkIGludCBjbF9zb2Z0cnRyeSA6IDEsCisgY2xfaW50ciA6IDEsCisgY2xfYXV0b2JpbmQgOiAxLAorIGNsX29uZXNob3QgOiAxLAorIGNsX2RlYWQgOiAxOworCisgc3RydWN0IHJwY19ydHQgKiBjbF9ydHQ7Cisgc3RydWN0IHJwY19wb3J0bWFwICogY2xfcG1hcDsKKworIGludCBjbF9ub2RlbGVuOworIGNoYXIgY2xfbm9kZW5hbWVbVU5YX01BWE5PREVOQU1FXTsKKyBjaGFyIGNsX3BhdGhuYW1lWzMwXTsKKyBzdHJ1Y3QgdmZzbW91bnQgKiBjbF92ZnNtbnQ7Cisgc3RydWN0IGRlbnRyeSAqIGNsX2RlbnRyeTsKKyBzdHJ1Y3QgcnBjX2NsbnQgKiBjbF9wYXJlbnQ7Cisgc3RydWN0IHJwY19ydHQgY2xfcnR0X2RlZmF1bHQ7Cisgc3RydWN0IHJwY19wb3J0bWFwIGNsX3BtYXBfZGVmYXVsdDsKKyBjaGFyIGNsX2lubGluZV9uYW1lWzMyXTsKK307CisjZGVmaW5lIGNsX3RpbWVvdXQgY2xfeHBydC0+dGltZW91dAorI2RlZmluZSBjbF9wcm9nIGNsX3BtYXAtPnBtX3Byb2cKKyNkZWZpbmUgY2xfdmVycyBjbF9wbWFwLT5wbV92ZXJzCisjZGVmaW5lIGNsX3BvcnQgY2xfcG1hcC0+cG1fcG9ydAorI2RlZmluZSBjbF9wcm90IGNsX3BtYXAtPnBtX3Byb3QKKworI2RlZmluZSBSUENfTUFYVkVSU0lPTiA0CitzdHJ1Y3QgcnBjX3Byb2dyYW0geworIGNoYXIgKiBuYW1lOworIHUzMiBudW1iZXI7CisgdW5zaWduZWQgaW50IG5ydmVyczsKKyBzdHJ1Y3QgcnBjX3ZlcnNpb24gKiogdmVyc2lvbjsKKyBzdHJ1Y3QgcnBjX3N0YXQgKiBzdGF0czsKKyBjaGFyICogcGlwZV9kaXJfbmFtZTsKK307CisKK3N0cnVjdCBycGNfdmVyc2lvbiB7CisgdTMyIG51bWJlcjsKKyB1bnNpZ25lZCBpbnQgbnJwcm9jczsKKyBzdHJ1Y3QgcnBjX3Byb2NpbmZvICogcHJvY3M7Cit9OworCitzdHJ1Y3QgcnBjX3Byb2NpbmZvIHsKKyB1MzIgcF9wcm9jOworIGt4ZHJwcm9jX3QgcF9lbmNvZGU7Cisga3hkcnByb2NfdCBwX2RlY29kZTsKKyB1bnNpZ25lZCBpbnQgcF9idWZzaXo7CisgdW5zaWduZWQgaW50IHBfY291bnQ7CisgdW5zaWduZWQgaW50IHBfdGltZXI7CisgdTMyIHBfc3RhdGlkeDsKKyBjaGFyICogcF9uYW1lOworfTsKKworI2RlZmluZSBSUENfQ09OR0VTVEVEKGNsbnQpIChSUENYUFJUX0NPTkdFU1RFRCgoY2xudCktPmNsX3hwcnQpKQorI2RlZmluZSBSUENfUEVFUkFERFIoY2xudCkgKCYoY2xudCktPmNsX3hwcnQtPmFkZHIpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N1bnJwYy9kZWJ1Zy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N1bnJwYy9kZWJ1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyNjg5ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL2RlYnVnLmgKQEAgLTAsMCArMSw0MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfU1VOUlBDX0RFQlVHX0hfCisjZGVmaW5lIF9MSU5VWF9TVU5SUENfREVCVUdfSF8KKworI2RlZmluZSBSUENEQkdfWFBSVCAweDAwMDEKKyNkZWZpbmUgUlBDREJHX0NBTEwgMHgwMDAyCisjZGVmaW5lIFJQQ0RCR19ERUJVRyAweDAwMDQKKyNkZWZpbmUgUlBDREJHX05GUyAweDAwMDgKKyNkZWZpbmUgUlBDREJHX0FVVEggMHgwMDEwCisjZGVmaW5lIFJQQ0RCR19QTUFQIDB4MDAyMAorI2RlZmluZSBSUENEQkdfU0NIRUQgMHgwMDQwCisjZGVmaW5lIFJQQ0RCR19UUkFOUyAweDAwODAKKyNkZWZpbmUgUlBDREJHX1NWQ1NPQ0sgMHgwMTAwCisjZGVmaW5lIFJQQ0RCR19TVkNEU1AgMHgwMjAwCisjZGVmaW5lIFJQQ0RCR19NSVNDIDB4MDQwMAorI2RlZmluZSBSUENEQkdfQ0FDSEUgMHgwODAwCisjZGVmaW5lIFJQQ0RCR19BTEwgMHg3ZmZmCisKKyNkZWZpbmUgQ1RMX1NVTlJQQyA3MjQ5ICAKKworZW51bSB7CisgQ1RMX1JQQ0RFQlVHID0gMSwKKyBDVExfTkZTREVCVUcsCisgQ1RMX05GU0RERUJVRywKKyBDVExfTkxNREVCVUcsCisgQ1RMX1NMT1RUQUJMRV9VRFAsCisgQ1RMX1NMT1RUQUJMRV9UQ1AsCisgQ1RMX01JTl9SRVNWUE9SVCwKKyBDVExfTUFYX1JFU1ZQT1JULAorfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL2dzc19hcGkuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zdW5ycGMvZ3NzX2FwaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiYzc3YzIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL2dzc19hcGkuaApAQCAtMCwwICsxLDE2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9TVU5SUENfR1NTX0FQSV9ICisjZGVmaW5lIF9MSU5VWF9TVU5SUENfR1NTX0FQSV9ICisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL2dzc19hc24xLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL2dzc19hc24xLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGYxOGJhMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zdW5ycGMvZ3NzX2FzbjEuaApAQCAtMCwwICsxLDM1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSA8bGludXgvc3VucnBjL2dzc19hcGkuaD4KKworI2RlZmluZSBTSVpFT0ZfSU5UIDQKKworI2RlZmluZSBHX0JBRF9TRVJWSUNFX05BTUUgKC0yMDQ1MDIyOTc2TCkKKyNkZWZpbmUgR19CQURfU1RSSU5HX1VJRCAoLTIwNDUwMjI5NzVMKQorI2RlZmluZSBHX05PVVNFUiAoLTIwNDUwMjI5NzRMKQorI2RlZmluZSBHX1ZBTElEQVRFX0ZBSUxFRCAoLTIwNDUwMjI5NzNMKQorI2RlZmluZSBHX0JVRkZFUl9BTExPQyAoLTIwNDUwMjI5NzJMKQorI2RlZmluZSBHX0JBRF9NU0dfQ1RYICgtMjA0NTAyMjk3MUwpCisjZGVmaW5lIEdfV1JPTkdfU0laRSAoLTIwNDUwMjI5NzBMKQorI2RlZmluZSBHX0JBRF9VU0FHRSAoLTIwNDUwMjI5NjlMKQorI2RlZmluZSBHX1VOS05PV05fUU9QICgtMjA0NTAyMjk2OEwpCisjZGVmaW5lIEdfTk9fSE9TVE5BTUUgKC0yMDQ1MDIyOTY3TCkKKyNkZWZpbmUgR19CQURfSE9TVE5BTUUgKC0yMDQ1MDIyOTY2TCkKKyNkZWZpbmUgR19XUk9OR19NRUNIICgtMjA0NTAyMjk2NUwpCisjZGVmaW5lIEdfQkFEX1RPS19IRUFERVIgKC0yMDQ1MDIyOTY0TCkKKyNkZWZpbmUgR19CQURfRElSRUNUSU9OICgtMjA0NTAyMjk2M0wpCisjZGVmaW5lIEdfVE9LX1RSVU5DICgtMjA0NTAyMjk2MkwpCisjZGVmaW5lIEdfUkVGTEVDVCAoLTIwNDUwMjI5NjFMKQorI2RlZmluZSBHX1dST05HX1RPS0lEICgtMjA0NTAyMjk2MEwpCisKKyNkZWZpbmUgZ19PSURfZXF1YWwobzEsbzIpICAgKCgobzEpLT5sZW4gPT0gKG8yKS0+bGVuKSAmJiAgIChtZW1jbXAoKG8xKS0+ZGF0YSwobzIpLT5kYXRhLChpbnQpIChvMSktPmxlbikgPT0gMCkpCisKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zdW5ycGMvZ3NzX2Vyci5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N1bnJwYy9nc3NfZXJyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFmYjFiNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zdW5ycGMvZ3NzX2Vyci5oCkBAIC0wLDAgKzEsMTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX1NVTlJQQ19HU1NfRVJSX0gKKyNkZWZpbmUgX0xJTlVYX1NVTlJQQ19HU1NfRVJSX0gKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL21zZ19wcm90LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL21zZ19wcm90LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJmNGU3NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zdW5ycGMvbXNnX3Byb3QuaApAQCAtMCwwICsxLDE1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9TVU5SUENfTVNHUFJPVF9IXworI2RlZmluZSBfTElOVVhfU1VOUlBDX01TR1BST1RfSF8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL3NjaGVkLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL3NjaGVkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU5YjJkOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zdW5ycGMvc2NoZWQuaApAQCAtMCwwICsxLDE4MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfU1VOUlBDX1NDSEVEX0hfCisjZGVmaW5lIF9MSU5VWF9TVU5SUENfU0NIRURfSF8KKworI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvc3VucnBjL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvc3VucnBjL3hkci5oPgorCitzdHJ1Y3QgcnBjX3Byb2NpbmZvOworc3RydWN0IHJwY19tZXNzYWdlIHsKKyBzdHJ1Y3QgcnBjX3Byb2NpbmZvICogcnBjX3Byb2M7Cisgdm9pZCAqIHJwY19hcmdwOworIHZvaWQgKiBycGNfcmVzcDsKKyBzdHJ1Y3QgcnBjX2NyZWQgKiBycGNfY3JlZDsKK307CisKK3N0cnVjdCBycGNfY2FsbF9vcHM7CitzdHJ1Y3QgcnBjX3dhaXRfcXVldWU7CitzdHJ1Y3QgcnBjX3dhaXQgeworIHN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKyBzdHJ1Y3QgbGlzdF9oZWFkIGxpbmtzOworIHN0cnVjdCBycGNfd2FpdF9xdWV1ZSAqIHJwY193YWl0cTsKK307CisKK3N0cnVjdCBycGNfdGFzayB7CisjaWZkZWYgUlBDX0RFQlVHCisgdW5zaWduZWQgbG9uZyB0a19tYWdpYzsKKyNlbmRpZgorIGF0b21pY190IHRrX2NvdW50OworIHN0cnVjdCBsaXN0X2hlYWQgdGtfdGFzazsKKyBzdHJ1Y3QgcnBjX2NsbnQgKiB0a19jbGllbnQ7Cisgc3RydWN0IHJwY19ycXN0ICogdGtfcnFzdHA7CisgaW50IHRrX3N0YXR1czsKKworIHN0cnVjdCBycGNfbWVzc2FnZSB0a19tc2c7CisgX191OCB0a19nYXJiX3JldHJ5OworIF9fdTggdGtfY3JlZF9yZXRyeTsKKworIHVuc2lnbmVkIGxvbmcgdGtfY29va2llOworCisgdm9pZCAoKnRrX3RpbWVvdXRfZm4pKHN0cnVjdCBycGNfdGFzayAqKTsKKyB2b2lkICgqdGtfY2FsbGJhY2spKHN0cnVjdCBycGNfdGFzayAqKTsKKyB2b2lkICgqdGtfYWN0aW9uKShzdHJ1Y3QgcnBjX3Rhc2sgKik7CisgY29uc3Qgc3RydWN0IHJwY19jYWxsX29wcyAqdGtfb3BzOworIHZvaWQgKiB0a19jYWxsZGF0YTsKKworIHN0cnVjdCB0aW1lcl9saXN0IHRrX3RpbWVyOworIHVuc2lnbmVkIGxvbmcgdGtfdGltZW91dDsKKyB1bnNpZ25lZCBzaG9ydCB0a19mbGFnczsKKyB1bnNpZ25lZCBjaGFyIHRrX3ByaW9yaXR5IDogMjsKKyB1bnNpZ25lZCBsb25nIHRrX3J1bnN0YXRlOworIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp0a193b3JrcXVldWU7CisgdW5pb24geworIHN0cnVjdCB3b3JrX3N0cnVjdCB0a193b3JrOworIHN0cnVjdCBycGNfd2FpdCB0a193YWl0OworIH0gdTsKKworIHVuc2lnbmVkIHNob3J0IHRrX3RpbWVvdXRzOworIHNpemVfdCB0a19ieXRlc19zZW50OworIHVuc2lnbmVkIGxvbmcgdGtfc3RhcnQ7CisgbG9uZyB0a19ydHQ7CisKKyNpZmRlZiBSUENfREVCVUcKKyB1bnNpZ25lZCBzaG9ydCB0a19waWQ7CisjZW5kaWYKK307CisjZGVmaW5lIHRrX2F1dGggdGtfY2xpZW50LT5jbF9hdXRoCisjZGVmaW5lIHRrX3hwcnQgdGtfY2xpZW50LT5jbF94cHJ0CisKKyNkZWZpbmUgdGFza19mb3JfZWFjaCh0YXNrLCBwb3MsIGhlYWQpICAgbGlzdF9mb3JfZWFjaChwb3MsIGhlYWQpICAgaWYgKCh0YXNrPWxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgcnBjX3Rhc2ssIHUudGtfd2FpdC5saXN0KSksMSkKKworI2RlZmluZSB0YXNrX2Zvcl9maXJzdCh0YXNrLCBoZWFkKSAgIGlmICghbGlzdF9lbXB0eShoZWFkKSAmJiAgICgodGFzaz1saXN0X2VudHJ5KChoZWFkKS0+bmV4dCwgc3RydWN0IHJwY190YXNrLCB1LnRrX3dhaXQubGlzdCkpLDEpKQorCisjZGVmaW5lIGFsbHRhc2tfZm9yX2VhY2godGFzaywgcG9zLCBoZWFkKSAgIGxpc3RfZm9yX2VhY2gocG9zLCBoZWFkKSAgIGlmICgodGFzaz1saXN0X2VudHJ5KHBvcywgc3RydWN0IHJwY190YXNrLCB0a190YXNrKSksMSkKKwordHlwZWRlZiB2b2lkICgqcnBjX2FjdGlvbikoc3RydWN0IHJwY190YXNrICopOworCitzdHJ1Y3QgcnBjX2NhbGxfb3BzIHsKKyB2b2lkICgqcnBjX2NhbGxfcHJlcGFyZSkoc3RydWN0IHJwY190YXNrICosIHZvaWQgKik7Cisgdm9pZCAoKnJwY19jYWxsX2RvbmUpKHN0cnVjdCBycGNfdGFzayAqLCB2b2lkICopOworIHZvaWQgKCpycGNfcmVsZWFzZSkodm9pZCAqKTsKK307CisKKyNkZWZpbmUgUlBDX1RBU0tfQVNZTkMgMHgwMDAxICAKKyNkZWZpbmUgUlBDX1RBU0tfU1dBUFBFUiAweDAwMDIgIAorI2RlZmluZSBSUENfVEFTS19DSElMRCAweDAwMDggIAorI2RlZmluZSBSUENfQ0FMTF9NQUpPUlNFRU4gMHgwMDIwICAKKyNkZWZpbmUgUlBDX1RBU0tfUk9PVENSRURTIDB4MDA0MCAgCisjZGVmaW5lIFJQQ19UQVNLX0RZTkFNSUMgMHgwMDgwICAKKyNkZWZpbmUgUlBDX1RBU0tfS0lMTEVEIDB4MDEwMCAgCisjZGVmaW5lIFJQQ19UQVNLX1NPRlQgMHgwMjAwICAKKyNkZWZpbmUgUlBDX1RBU0tfTk9JTlRSIDB4MDQwMCAgCisKKyNkZWZpbmUgUlBDX0lTX0FTWU5DKHQpICgodCktPnRrX2ZsYWdzICYgUlBDX1RBU0tfQVNZTkMpCisjZGVmaW5lIFJQQ19JU19DSElMRCh0KSAoKHQpLT50a19mbGFncyAmIFJQQ19UQVNLX0NISUxEKQorI2RlZmluZSBSUENfSVNfU1dBUFBFUih0KSAoKHQpLT50a19mbGFncyAmIFJQQ19UQVNLX1NXQVBQRVIpCisjZGVmaW5lIFJQQ19ET19ST09UT1ZFUlJJREUodCkgKCh0KS0+dGtfZmxhZ3MgJiBSUENfVEFTS19ST09UQ1JFRFMpCisjZGVmaW5lIFJQQ19BU1NBU1NJTkFURUQodCkgKCh0KS0+dGtfZmxhZ3MgJiBSUENfVEFTS19LSUxMRUQpCisjZGVmaW5lIFJQQ19ET19DQUxMQkFDSyh0KSAoKHQpLT50a19jYWxsYmFjayAhPSBOVUxMKQorI2RlZmluZSBSUENfSVNfU09GVCh0KSAoKHQpLT50a19mbGFncyAmIFJQQ19UQVNLX1NPRlQpCisjZGVmaW5lIFJQQ19UQVNLX1VOSU5URVJSVVBUSUJMRSh0KSAoKHQpLT50a19mbGFncyAmIFJQQ19UQVNLX05PSU5UUikKKworI2RlZmluZSBSUENfVEFTS19SVU5OSU5HIDAKKyNkZWZpbmUgUlBDX1RBU0tfUVVFVUVEIDEKKyNkZWZpbmUgUlBDX1RBU0tfV0FLRVVQIDIKKyNkZWZpbmUgUlBDX1RBU0tfSEFTX1RJTUVSIDMKKyNkZWZpbmUgUlBDX1RBU0tfQUNUSVZFIDQKKworI2RlZmluZSBSUENfSVNfUlVOTklORyh0KSAodGVzdF9iaXQoUlBDX1RBU0tfUlVOTklORywgJih0KS0+dGtfcnVuc3RhdGUpKQorI2RlZmluZSBycGNfc2V0X3J1bm5pbmcodCkgKHNldF9iaXQoUlBDX1RBU0tfUlVOTklORywgJih0KS0+dGtfcnVuc3RhdGUpKQorI2RlZmluZSBycGNfdGVzdF9hbmRfc2V0X3J1bm5pbmcodCkgICAodGVzdF9hbmRfc2V0X2JpdChSUENfVEFTS19SVU5OSU5HLCAmKHQpLT50a19ydW5zdGF0ZSkpCisjZGVmaW5lIHJwY19jbGVhcl9ydW5uaW5nKHQpICAgZG8geyAgIHNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOyAgIGNsZWFyX2JpdChSUENfVEFTS19SVU5OSU5HLCAmKHQpLT50a19ydW5zdGF0ZSk7ICAgc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIFJQQ19JU19RVUVVRUQodCkgKHRlc3RfYml0KFJQQ19UQVNLX1FVRVVFRCwgJih0KS0+dGtfcnVuc3RhdGUpKQorI2RlZmluZSBycGNfc2V0X3F1ZXVlZCh0KSAoc2V0X2JpdChSUENfVEFTS19RVUVVRUQsICYodCktPnRrX3J1bnN0YXRlKSkKKyNkZWZpbmUgcnBjX2NsZWFyX3F1ZXVlZCh0KSAgIGRvIHsgICBzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKTsgICBjbGVhcl9iaXQoUlBDX1RBU0tfUVVFVUVELCAmKHQpLT50a19ydW5zdGF0ZSk7ICAgc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIHJwY19zdGFydF93YWtldXAodCkgICAodGVzdF9hbmRfc2V0X2JpdChSUENfVEFTS19XQUtFVVAsICYodCktPnRrX3J1bnN0YXRlKSA9PSAwKQorI2RlZmluZSBycGNfZmluaXNoX3dha2V1cCh0KSAgIGRvIHsgICBzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKTsgICBjbGVhcl9iaXQoUlBDX1RBU0tfV0FLRVVQLCAmKHQpLT50a19ydW5zdGF0ZSk7ICAgc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIFJQQ19JU19BQ1RJVkFURUQodCkgKHRlc3RfYml0KFJQQ19UQVNLX0FDVElWRSwgJih0KS0+dGtfcnVuc3RhdGUpKQorI2RlZmluZSBycGNfc2V0X2FjdGl2ZSh0KSAoc2V0X2JpdChSUENfVEFTS19BQ1RJVkUsICYodCktPnRrX3J1bnN0YXRlKSkKKyNkZWZpbmUgcnBjX2NsZWFyX2FjdGl2ZSh0KSAgIGRvIHsgICBzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKTsgICBjbGVhcl9iaXQoUlBDX1RBU0tfQUNUSVZFLCAmKHQpLT50a19ydW5zdGF0ZSk7ICAgc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsgICB9IHdoaWxlKDApCisKKyNkZWZpbmUgUlBDX1BSSU9SSVRZX0xPVyAwCisjZGVmaW5lIFJQQ19QUklPUklUWV9OT1JNQUwgMQorI2RlZmluZSBSUENfUFJJT1JJVFlfSElHSCAyCisjZGVmaW5lIFJQQ19OUl9QUklPUklUWSAoUlBDX1BSSU9SSVRZX0hJR0grMSkKKworc3RydWN0IHJwY193YWl0X3F1ZXVlIHsKKyBzcGlubG9ja190IGxvY2s7Cisgc3RydWN0IGxpc3RfaGVhZCB0YXNrc1tSUENfTlJfUFJJT1JJVFldOworIHVuc2lnbmVkIGxvbmcgY29va2llOworIHVuc2lnbmVkIGNoYXIgbWF4cHJpb3JpdHk7CisgdW5zaWduZWQgY2hhciBwcmlvcml0eTsKKyB1bnNpZ25lZCBjaGFyIGNvdW50OworIHVuc2lnbmVkIGNoYXIgbnI7CisgdW5zaWduZWQgc2hvcnQgcWxlbjsKKyNpZmRlZiBSUENfREVCVUcKKyBjb25zdCBjaGFyICogbmFtZTsKKyNlbmRpZgorfTsKKworI2RlZmluZSBSUENfQkFUQ0hfQ09VTlQgMTYKKworI2lmbmRlZiBSUENfREVCVUcKKyNkZWZpbmUgUlBDX1dBSVRRX0lOSVQodmFyLHFuYW1lKSB7ICAgLmxvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQsICAgLnRhc2tzID0geyAgIFswXSA9IExJU1RfSEVBRF9JTklUKHZhci50YXNrc1swXSksICAgWzFdID0gTElTVF9IRUFEX0lOSVQodmFyLnRhc2tzWzFdKSwgICBbMl0gPSBMSVNUX0hFQURfSU5JVCh2YXIudGFza3NbMl0pLCAgIH0sICAgfQorI2Vsc2UKKyNkZWZpbmUgUlBDX1dBSVRRX0lOSVQodmFyLHFuYW1lKSB7ICAgLmxvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQsICAgLnRhc2tzID0geyAgIFswXSA9IExJU1RfSEVBRF9JTklUKHZhci50YXNrc1swXSksICAgWzFdID0gTElTVF9IRUFEX0lOSVQodmFyLnRhc2tzWzFdKSwgICBbMl0gPSBMSVNUX0hFQURfSU5JVCh2YXIudGFza3NbMl0pLCAgIH0sICAgLm5hbWUgPSBxbmFtZSwgICB9CisjZW5kaWYKKyNkZWZpbmUgUlBDX1dBSVRRKHZhcixxbmFtZSkgc3RydWN0IHJwY193YWl0X3F1ZXVlIHZhciA9IFJQQ19XQUlUUV9JTklUKHZhcixxbmFtZSkKKworI2RlZmluZSBSUENfSVNfUFJJT1JJVFkocSkgKChxKS0+bWF4cHJpb3JpdHkgPiAwKQorCitzdHJ1Y3QgcnBjX3Rhc2sgKnJwY19uZXdfdGFzayhzdHJ1Y3QgcnBjX2NsbnQgKiwgaW50IGZsYWdzLAorIGNvbnN0IHN0cnVjdCBycGNfY2FsbF9vcHMgKm9wcywgdm9pZCAqZGF0YSk7CitzdHJ1Y3QgcnBjX3Rhc2sgKnJwY19ydW5fdGFzayhzdHJ1Y3QgcnBjX2NsbnQgKmNsbnQsIGludCBmbGFncywKKyBjb25zdCBzdHJ1Y3QgcnBjX2NhbGxfb3BzICpvcHMsIHZvaWQgKmRhdGEpOworc3RydWN0IHJwY190YXNrICpycGNfbmV3X2NoaWxkKHN0cnVjdCBycGNfY2xudCAqLCBzdHJ1Y3QgcnBjX3Rhc2sgKnBhcmVudCk7CisKK3N0cnVjdCBycGNfdGFzayAqcnBjX3dha2VfdXBfbmV4dChzdHJ1Y3QgcnBjX3dhaXRfcXVldWUgKik7CisKKyNpZmRlZiBSUENfREVCVUcKKworI2VuZGlmCisKKyNpZmRlZiBSUENfREVCVUcKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL3N0YXRzLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL3N0YXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNlNzMzOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zdW5ycGMvc3RhdHMuaApAQCAtMCwwICsxLDQ5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9TVU5SUENfU1RBVFNfSAorI2RlZmluZSBfTElOVVhfU1VOUlBDX1NUQVRTX0gKKworI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKworc3RydWN0IHJwY19zdGF0IHsKKyBzdHJ1Y3QgcnBjX3Byb2dyYW0gKiBwcm9ncmFtOworCisgdW5zaWduZWQgaW50IG5ldGNudCwKKyBuZXR1ZHBjbnQsCisgbmV0dGNwY250LAorIG5ldHRjcGNvbm4sCisgbmV0cmVjb25uOworIHVuc2lnbmVkIGludCBycGNjbnQsCisgcnBjcmV0cmFucywKKyBycGNhdXRocmVmcmVzaCwKKyBycGNnYXJiYWdlOworfTsKKworc3RydWN0IHN2Y19zdGF0IHsKKyBzdHJ1Y3Qgc3ZjX3Byb2dyYW0gKiBwcm9ncmFtOworCisgdW5zaWduZWQgaW50IG5ldGNudCwKKyBuZXR1ZHBjbnQsCisgbmV0dGNwY250LAorIG5ldHRjcGNvbm47CisgdW5zaWduZWQgaW50IHJwY2NudCwKKyBycGNiYWRmbXQsCisgcnBjYmFkYXV0aCwKKyBycGNiYWRjbG50OworfTsKKworI2lmZGVmIE1PRFVMRQorCisjZW5kaWYKKworI2RlZmluZSBwcm9jX25ldF9ycGMgTlVMTAorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL3N2Yy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N1bnJwYy9zdmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTBjYzJkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N1bnJwYy9zdmMuaApAQCAtMCwwICsxLDgyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIFNVTlJQQ19TVkNfSAorI2RlZmluZSBTVU5SUENfU1ZDX0gKKworI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvc3VucnBjL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc3VucnBjL3hkci5oPgorI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9zdmNhdXRoLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisKK3N0cnVjdCBzdmNfc2VydiB7Cisgc3RydWN0IGxpc3RfaGVhZCBzdl90aHJlYWRzOworIHN0cnVjdCBsaXN0X2hlYWQgc3Zfc29ja2V0czsKKyBzdHJ1Y3Qgc3ZjX3Byb2dyYW0gKiBzdl9wcm9ncmFtOworIHN0cnVjdCBzdmNfc3RhdCAqIHN2X3N0YXRzOworIHNwaW5sb2NrX3Qgc3ZfbG9jazsKKyB1bnNpZ25lZCBpbnQgc3ZfbnJ0aHJlYWRzOworIHVuc2lnbmVkIGludCBzdl9idWZzejsKKyB1bnNpZ25lZCBpbnQgc3ZfeGRyc2l6ZTsKKworIHN0cnVjdCBsaXN0X2hlYWQgc3ZfcGVybXNvY2tzOworIHN0cnVjdCBsaXN0X2hlYWQgc3ZfdGVtcHNvY2tzOworIGludCBzdl90bXBjbnQ7CisKKyBjaGFyICogc3ZfbmFtZTsKK307CisKKyNkZWZpbmUgUlBDU1ZDX01BWFBBWUxPQUQgKDY0KjEwMjR1KQorCisjZGVmaW5lIFJQQ1NWQ19NQVhQQUdFUyAoKFJQQ1NWQ19NQVhQQVlMT0FEK1BBR0VfU0laRS0xKS9QQUdFX1NJWkUgKyAyKQorCitzdHJ1Y3Qgc3ZjX3Byb2dyYW0geworIHN0cnVjdCBzdmNfcHJvZ3JhbSAqIHBnX25leHQ7CisgdTMyIHBnX3Byb2c7CisgdW5zaWduZWQgaW50IHBnX2xvdmVyczsKKyB1bnNpZ25lZCBpbnQgcGdfaGl2ZXJzOworIHVuc2lnbmVkIGludCBwZ19udmVyczsKKyBzdHJ1Y3Qgc3ZjX3ZlcnNpb24gKiogcGdfdmVyczsKKyBjaGFyICogcGdfbmFtZTsKKyBjaGFyICogcGdfY2xhc3M7Cisgc3RydWN0IHN2Y19zdGF0ICogcGdfc3RhdHM7CisgaW50ICgqcGdfYXV0aGVudGljYXRlKShzdHJ1Y3Qgc3ZjX3Jxc3QgKik7Cit9OworCitzdHJ1Y3Qgc3ZjX3ZlcnNpb24geworIHUzMiB2c192ZXJzOworIHUzMiB2c19ucHJvYzsKKyBzdHJ1Y3Qgc3ZjX3Byb2NlZHVyZSAqIHZzX3Byb2M7CisgdTMyIHZzX3hkcnNpemU7CisKKyBpbnQgKCp2c19kaXNwYXRjaCkoc3RydWN0IHN2Y19ycXN0ICosIHUzMiAqKTsKK307CisKK3R5cGVkZWYgaW50ICgqc3ZjX3Byb2NmdW5jKShzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgdm9pZCAqYXJncCwgdm9pZCAqcmVzcCk7CitzdHJ1Y3Qgc3ZjX3Byb2NlZHVyZSB7Cisgc3ZjX3Byb2NmdW5jIHBjX2Z1bmM7Cisga3hkcnByb2NfdCBwY19kZWNvZGU7Cisga3hkcnByb2NfdCBwY19lbmNvZGU7Cisga3hkcnByb2NfdCBwY19yZWxlYXNlOworIHVuc2lnbmVkIGludCBwY19hcmdzaXplOworIHVuc2lnbmVkIGludCBwY19yZXNzaXplOworIHVuc2lnbmVkIGludCBwY19jb3VudDsKKyB1bnNpZ25lZCBpbnQgcGNfY2FjaGV0eXBlOworIHVuc2lnbmVkIGludCBwY194ZHJyZXNzaXplOworfTsKKwordHlwZWRlZiB2b2lkICgqc3ZjX3RocmVhZF9mbikoc3RydWN0IHN2Y19ycXN0ICopOworCitzdHJ1Y3Qgc3ZjX3NlcnYgKiBzdmNfY3JlYXRlKHN0cnVjdCBzdmNfcHJvZ3JhbSAqLCB1bnNpZ25lZCBpbnQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zdW5ycGMvc3ZjYXV0aC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N1bnJwYy9zdmNhdXRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI0MTRkNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zdW5ycGMvc3ZjYXV0aC5oCkBAIC0wLDAgKzEsMTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX1NVTlJQQ19TVkNBVVRIX0hfCisjZGVmaW5lIF9MSU5VWF9TVU5SUENfU1ZDQVVUSF9IXworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zdW5ycGMvdGltZXIuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zdW5ycGMvdGltZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmI3OGU1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N1bnJwYy90aW1lci5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX1NVTlJQQ19USU1FUl9ICisjZGVmaW5lIF9MSU5VWF9TVU5SUENfVElNRVJfSAorCisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorCitzdHJ1Y3QgcnBjX3J0dCB7CisgdW5zaWduZWQgbG9uZyB0aW1lbzsKKyB1bnNpZ25lZCBsb25nIHNydHRbNV07CisgdW5zaWduZWQgbG9uZyBzZHJ0dFs1XTsKKyBpbnQgbnRpbWVvdXRzWzVdOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL3R5cGVzLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U1MjA1MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zdW5ycGMvdHlwZXMuaApAQCAtMCwwICsxLDIyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9TVU5SUENfVFlQRVNfSF8KKyNkZWZpbmUgX0xJTlVYX1NVTlJQQ19UWVBFU19IXworCisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMvZGVidWcuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisKKyNkZWZpbmUgc2lnbmFsbGVkKCkgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zdW5ycGMveGRyLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL3hkci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MTM4NDMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL3hkci5oCkBAIC0wLDAgKzEsMTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX1NVTlJQQ19YRFJfSF8KKyNkZWZpbmUgX1NVTlJQQ19YRFJfSF8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL3hwcnQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zdW5ycGMveHBydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0NWEyNmQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL3hwcnQuaApAQCAtMCwwICsxLDE3MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfU1VOUlBDX1hQUlRfSAorI2RlZmluZSBfTElOVVhfU1VOUlBDX1hQUlRfSAorCisjaW5jbHVkZSA8bGludXgvdWlvLmg+CisjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMveGRyLmg+CisKKyNkZWZpbmUgUlBDX01JTl9TTE9UX1RBQkxFICgyVSkKKyNkZWZpbmUgUlBDX0RFRl9TTE9UX1RBQkxFICgxNlUpCisjZGVmaW5lIFJQQ19NQVhfU0xPVF9UQUJMRSAoMTI4VSkKKworI2RlZmluZSBSUENfQ0FMTEhEUlNJWkUgNgorI2RlZmluZSBSUENfUkVQSERSU0laRSA0CisKKyNkZWZpbmUgUlBDX01JTl9SRVNWUE9SVCAoMVUpCisjZGVmaW5lIFJQQ19NQVhfUkVTVlBPUlQgKDY1NTM1VSkKKyNkZWZpbmUgUlBDX0RFRl9NSU5fUkVTVlBPUlQgKDY2NVUpCisjZGVmaW5lIFJQQ19ERUZfTUFYX1JFU1ZQT1JUICgxMDIzVSkKKworc3RydWN0IHJwY190aW1lb3V0IHsKKyB1bnNpZ25lZCBsb25nIHRvX2luaXR2YWwsCisgdG9fbWF4dmFsLAorIHRvX2luY3JlbWVudDsKKyB1bnNpZ25lZCBpbnQgdG9fcmV0cmllczsKKyB1bnNpZ25lZCBjaGFyIHRvX2V4cG9uZW50aWFsOworfTsKKworc3RydWN0IHJwY190YXNrOworc3RydWN0IHJwY194cHJ0Oworc3RydWN0IHNlcV9maWxlOworCitzdHJ1Y3QgcnBjX3Jxc3QgeworCisgc3RydWN0IHJwY194cHJ0ICogcnFfeHBydDsKKyBzdHJ1Y3QgeGRyX2J1ZiBycV9zbmRfYnVmOworIHN0cnVjdCB4ZHJfYnVmIHJxX3Jjdl9idWY7CisKKyBzdHJ1Y3QgcnBjX3Rhc2sgKiBycV90YXNrOworIF9fdTMyIHJxX3hpZDsKKyBpbnQgcnFfY29uZzsKKyBpbnQgcnFfcmVjZWl2ZWQ7CisgdTMyIHJxX3NlcW5vOworIGludCBycV9lbmNfcGFnZXNfbnVtOworIHN0cnVjdCBwYWdlICoqcnFfZW5jX3BhZ2VzOworIHZvaWQgKCpycV9yZWxlYXNlX3NuZF9idWYpKHN0cnVjdCBycGNfcnFzdCAqKTsKKyBzdHJ1Y3QgbGlzdF9oZWFkIHJxX2xpc3Q7CisKKyBfX3UzMiAqIHJxX2J1ZmZlcjsKKyBzaXplX3QgcnFfYnVmc2l6ZTsKKworIHN0cnVjdCB4ZHJfYnVmIHJxX3ByaXZhdGVfYnVmOworIHVuc2lnbmVkIGxvbmcgcnFfbWFqb3J0aW1lbzsKKyB1bnNpZ25lZCBsb25nIHJxX3RpbWVvdXQ7CisgdW5zaWduZWQgaW50IHJxX3JldHJpZXM7CisKKyB1MzIgcnFfYnl0ZXNfc2VudDsKKworIHVuc2lnbmVkIGxvbmcgcnFfeHRpbWU7CisgaW50IHJxX250cmFuczsKK307CisjZGVmaW5lIHJxX3N2ZWMgcnFfc25kX2J1Zi5oZWFkCisjZGVmaW5lIHJxX3NsZW4gcnFfc25kX2J1Zi5sZW4KKworc3RydWN0IHJwY194cHJ0X29wcyB7Cisgdm9pZCAoKnNldF9idWZmZXJfc2l6ZSkoc3RydWN0IHJwY194cHJ0ICp4cHJ0LCBzaXplX3Qgc25kc2l6ZSwgc2l6ZV90IHJjdnNpemUpOworIGludCAoKnJlc2VydmVfeHBydCkoc3RydWN0IHJwY190YXNrICp0YXNrKTsKKyB2b2lkICgqcmVsZWFzZV94cHJ0KShzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQsIHN0cnVjdCBycGNfdGFzayAqdGFzayk7Cisgdm9pZCAoKnNldF9wb3J0KShzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQsIHVuc2lnbmVkIHNob3J0IHBvcnQpOworIHZvaWQgKCpjb25uZWN0KShzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2spOworIHZvaWQgKiAoKmJ1Zl9hbGxvYykoc3RydWN0IHJwY190YXNrICp0YXNrLCBzaXplX3Qgc2l6ZSk7Cisgdm9pZCAoKmJ1Zl9mcmVlKShzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2spOworIGludCAoKnNlbmRfcmVxdWVzdCkoc3RydWN0IHJwY190YXNrICp0YXNrKTsKKyB2b2lkICgqc2V0X3JldHJhbnNfdGltZW91dCkoc3RydWN0IHJwY190YXNrICp0YXNrKTsKKyB2b2lkICgqdGltZXIpKHN0cnVjdCBycGNfdGFzayAqdGFzayk7Cisgdm9pZCAoKnJlbGVhc2VfcmVxdWVzdCkoc3RydWN0IHJwY190YXNrICp0YXNrKTsKKyB2b2lkICgqY2xvc2UpKHN0cnVjdCBycGNfeHBydCAqeHBydCk7Cisgdm9pZCAoKmRlc3Ryb3kpKHN0cnVjdCBycGNfeHBydCAqeHBydCk7Cisgdm9pZCAoKnByaW50X3N0YXRzKShzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQsIHN0cnVjdCBzZXFfZmlsZSAqc2VxKTsKK307CisKK3N0cnVjdCBycGNfeHBydCB7Cisgc3RydWN0IHJwY194cHJ0X29wcyAqIG9wczsKKyBzdHJ1Y3Qgc29ja2V0ICogc29jazsKKyBzdHJ1Y3Qgc29jayAqIGluZXQ7CisKKyBzdHJ1Y3QgcnBjX3RpbWVvdXQgdGltZW91dDsKKyBzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjsKKyBpbnQgcHJvdDsKKworIHVuc2lnbmVkIGxvbmcgY29uZzsKKyB1bnNpZ25lZCBsb25nIGN3bmQ7CisKKyBzaXplX3QgcmN2c2l6ZSwKKyBzbmRzaXplOworCisgc2l6ZV90IG1heF9wYXlsb2FkOworIHVuc2lnbmVkIGludCB0c2hfc2l6ZTsKKworIHN0cnVjdCBycGNfd2FpdF9xdWV1ZSBzZW5kaW5nOworIHN0cnVjdCBycGNfd2FpdF9xdWV1ZSByZXNlbmQ7Cisgc3RydWN0IHJwY193YWl0X3F1ZXVlIHBlbmRpbmc7Cisgc3RydWN0IHJwY193YWl0X3F1ZXVlIGJhY2tsb2c7Cisgc3RydWN0IGxpc3RfaGVhZCBmcmVlOworIHN0cnVjdCBycGNfcnFzdCAqIHNsb3Q7CisgdW5zaWduZWQgaW50IG1heF9yZXFzOworIHVuc2lnbmVkIGxvbmcgc3RhdGU7CisgdW5zaWduZWQgY2hhciBzaHV0ZG93biA6IDEsCisgcmVzdnBvcnQgOiAxOworCisgX191MzIgeGlkOworCisgdTMyIHRjcF9yZWNtLAorIHRjcF94aWQsCisgdGNwX3JlY2xlbiwKKyB0Y3Bfb2Zmc2V0OworIHVuc2lnbmVkIGxvbmcgdGNwX2NvcGllZCwKKyB0Y3BfZmxhZ3M7CisKKyB1bnNpZ25lZCBsb25nIGNvbm5lY3RfdGltZW91dCwKKyBiaW5kX3RpbWVvdXQsCisgcmVlc3RhYmxpc2hfdGltZW91dDsKKyBzdHJ1Y3Qgd29ya19zdHJ1Y3QgY29ubmVjdF93b3JrZXI7CisgdW5zaWduZWQgc2hvcnQgcG9ydDsKKworIHN0cnVjdCB3b3JrX3N0cnVjdCB0YXNrX2NsZWFudXA7Cisgc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CisgdW5zaWduZWQgbG9uZyBsYXN0X3VzZWQsCisgaWRsZV90aW1lb3V0OworCisgc3BpbmxvY2tfdCB0cmFuc3BvcnRfbG9jazsKKyBzcGlubG9ja190IHJlc2VydmVfbG9jazsKKyBzdHJ1Y3QgcnBjX3Rhc2sgKiBzbmRfdGFzazsKKworIHN0cnVjdCBsaXN0X2hlYWQgcmVjdjsKKworIHN0cnVjdCB7CisgdW5zaWduZWQgbG9uZyBiaW5kX2NvdW50LAorIGNvbm5lY3RfY291bnQsCisgY29ubmVjdF9zdGFydCwKKyBjb25uZWN0X3RpbWUsCisgc2VuZHMsCisgcmVjdnMsCisgYmFkX3hpZHM7CisKKyB1bnNpZ25lZCBsb25nIGxvbmcgcmVxX3UsCisgYmtsb2dfdTsKKyB9IHN0YXQ7CisKKyB2b2lkICgqb2xkX2RhdGFfcmVhZHkpKHN0cnVjdCBzb2NrICosIGludCk7Cisgdm9pZCAoKm9sZF9zdGF0ZV9jaGFuZ2UpKHN0cnVjdCBzb2NrICopOworIHZvaWQgKCpvbGRfd3JpdGVfc3BhY2UpKHN0cnVjdCBzb2NrICopOworfTsKKworI2RlZmluZSBYUFJUX0xBU1RfRlJBRyAoMSA8PCAwKQorI2RlZmluZSBYUFJUX0NPUFlfUkVDTSAoMSA8PCAxKQorI2RlZmluZSBYUFJUX0NPUFlfWElEICgxIDw8IDIpCisjZGVmaW5lIFhQUlRfQ09QWV9EQVRBICgxIDw8IDMpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N3YXAuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zd2FwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNiYTU1NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zd2FwLmgKQEAgLTAsMCArMSwzOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfU1dBUF9ICisjZGVmaW5lIF9MSU5VWF9TV0FQX0gKKworI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L21tem9uZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorCisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisKKyNkZWZpbmUgU1dBUF9GTEFHX1BSRUZFUiAweDgwMDAgIAorI2RlZmluZSBTV0FQX0ZMQUdfUFJJT19NQVNLIDB4N2ZmZgorI2RlZmluZSBTV0FQX0ZMQUdfUFJJT19TSElGVCAwCisKKyNkZWZpbmUgTUFYX1NXQVBGSUxFU19TSElGVCA1CisjZGVmaW5lIE1BWF9TV0FQRklMRVMgKDEgPDwgTUFYX1NXQVBGSUxFU19TSElGVCkKKwordHlwZWRlZiBzdHJ1Y3QgeworIHVuc2lnbmVkIGxvbmcgdmFsOworfSBzd3BfZW50cnlfdDsKKworc3RydWN0IHJlY2xhaW1fc3RhdGUgeworIHVuc2lnbmVkIGxvbmcgcmVjbGFpbWVkX3NsYWI7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zeXNjdGwuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zeXNjdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjllNTYxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N5c2N0bC5oCkBAIC0wLDAgKzEsODI0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9TWVNDVExfSAorI2RlZmluZSBfTElOVVhfU1lTQ1RMX0gKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKworc3RydWN0IGZpbGU7CitzdHJ1Y3QgY29tcGxldGlvbjsKKworI2RlZmluZSBDVExfTUFYTkFNRSAxMCAgCisKK3N0cnVjdCBfX3N5c2N0bF9hcmdzIHsKKyBpbnQgX191c2VyICpuYW1lOworIGludCBubGVuOworIHZvaWQgX191c2VyICpvbGR2YWw7Cisgc2l6ZV90IF9fdXNlciAqb2xkbGVucDsKKyB2b2lkIF9fdXNlciAqbmV3dmFsOworIHNpemVfdCBuZXdsZW47CisgdW5zaWduZWQgbG9uZyBfX3VudXNlZFs0XTsKK307CisKK2VudW0KK3sKKyBDVExfS0VSTj0xLAorIENUTF9WTT0yLAorIENUTF9ORVQ9MywKKworIENUTF9GUz01LAorIENUTF9ERUJVRz02LAorIENUTF9ERVY9NywKKyBDVExfQlVTPTgsCisgQ1RMX0FCST05LAorIENUTF9DUFU9MTAKK307CisKK2VudW0KK3sKKyBDVExfQlVTX0lTQT0xCit9OworCitlbnVtCit7CisgSU5PVElGWV9NQVhfVVNFUl9JTlNUQU5DRVM9MSwKKyBJTk9USUZZX01BWF9VU0VSX1dBVENIRVM9MiwKKyBJTk9USUZZX01BWF9RVUVVRURfRVZFTlRTPTMKK307CisKK2VudW0KK3sKKyBLRVJOX09TVFlQRT0xLAorIEtFUk5fT1NSRUxFQVNFPTIsCisgS0VSTl9PU1JFVj0zLAorIEtFUk5fVkVSU0lPTj00LAorIEtFUk5fU0VDVVJFTUFTSz01LAorIEtFUk5fUFJPRj02LAorIEtFUk5fTk9ERU5BTUU9NywKKyBLRVJOX0RPTUFJTk5BTUU9OCwKKworIEtFUk5fQ0FQX0JTRVQ9MTQsCisgS0VSTl9QQU5JQz0xNSwKKyBLRVJOX1JFQUxST09UREVWPTE2LAorCisgS0VSTl9TUEFSQ19SRUJPT1Q9MjEsCisgS0VSTl9DVExBTFRERUw9MjIsCisgS0VSTl9QUklOVEs9MjMsCisgS0VSTl9OQU1FVFJBTlM9MjQsCisgS0VSTl9QUENfSFRBQlJFQ0xBSU09MjUsCisgS0VSTl9QUENfWkVST1BBR0VEPTI2LAorIEtFUk5fUFBDX1BPV0VSU0FWRV9OQVA9MjcsCisgS0VSTl9NT0RQUk9CRT0yOCwKKyBLRVJOX1NHX0JJR19CVUZGPTI5LAorIEtFUk5fQUNDVD0zMCwKKyBLRVJOX1BQQ19MMkNSPTMxLAorCisgS0VSTl9SVFNJR05SPTMyLAorIEtFUk5fUlRTSUdNQVg9MzMsCisKKyBLRVJOX1NITU1BWD0zNCwKKyBLRVJOX01TR01BWD0zNSwKKyBLRVJOX01TR01OQj0zNiwKKyBLRVJOX01TR1BPT0w9MzcsCisgS0VSTl9TWVNSUT0zOCwKKyBLRVJOX01BWF9USFJFQURTPTM5LAorIEtFUk5fUkFORE9NPTQwLAorIEtFUk5fU0hNQUxMPTQxLAorIEtFUk5fTVNHTU5JPTQyLAorIEtFUk5fU0VNPTQzLAorIEtFUk5fU1BBUkNfU1RPUF9BPTQ0LAorIEtFUk5fU0hNTU5JPTQ1LAorIEtFUk5fT1ZFUkZMT1dVSUQ9NDYsCisgS0VSTl9PVkVSRkxPV0dJRD00NywKKyBLRVJOX1NITVBBVEg9NDgsCisgS0VSTl9IT1RQTFVHPTQ5LAorIEtFUk5fSUVFRV9FTVVMQVRJT05fV0FSTklOR1M9NTAsCisgS0VSTl9TMzkwX1VTRVJfREVCVUdfTE9HR0lORz01MSwKKyBLRVJOX0NPUkVfVVNFU19QSUQ9NTIsCisgS0VSTl9UQUlOVEVEPTUzLAorIEtFUk5fQ0FEUElEPTU0LAorIEtFUk5fUElETUFYPTU1LAorIEtFUk5fQ09SRV9QQVRURVJOPTU2LAorIEtFUk5fUEFOSUNfT05fT09QUz01NywKKyBLRVJOX0hQUEFfUFdSU1c9NTgsCisgS0VSTl9IUFBBX1VOQUxJR05FRD01OSwKKyBLRVJOX1BSSU5US19SQVRFTElNSVQ9NjAsCisgS0VSTl9QUklOVEtfUkFURUxJTUlUX0JVUlNUPTYxLAorIEtFUk5fUFRZPTYyLAorIEtFUk5fTkdST1VQU19NQVg9NjMsCisgS0VSTl9TUEFSQ19TQ09OU19QV1JPRkY9NjQsCisgS0VSTl9IWl9USU1FUj02NSwKKyBLRVJOX1VOS05PV05fTk1JX1BBTklDPTY2LAorIEtFUk5fQk9PVExPQURFUl9UWVBFPTY3LAorIEtFUk5fUkFORE9NSVpFPTY4LAorIEtFUk5fU0VUVUlEX0RVTVBBQkxFPTY5LAorIEtFUk5fU1BJTl9SRVRSWT03MCwKKyBLRVJOX0FDUElfVklERU9fRkxBR1M9NzEsCisgS0VSTl9JQTY0X1VOQUxJR05FRD03MiwKKyBLRVJOX0NPTVBBVF9MT0c9NzMsCisgS0VSTl9NQVhfTE9DS19ERVBUSD03NCwKK307CisKK2VudW0KK3sKKyBWTV9VTlVTRUQxPTEsCisgVk1fVU5VU0VEMj0yLAorIFZNX1VOVVNFRDM9MywKKyBWTV9VTlVTRUQ0PTQsCisgVk1fT1ZFUkNPTU1JVF9NRU1PUlk9NSwKKyBWTV9VTlVTRUQ1PTYsCisgVk1fVU5VU0VENz03LAorIFZNX1VOVVNFRDg9OCwKKyBWTV9VTlVTRUQ5PTksCisgVk1fUEFHRV9DTFVTVEVSPTEwLAorIFZNX0RJUlRZX0JBQ0tHUk9VTkQ9MTEsCisgVk1fRElSVFlfUkFUSU89MTIsCisgVk1fRElSVFlfV0JfQ1M9MTMsCisgVk1fRElSVFlfRVhQSVJFX0NTPTE0LAorIFZNX05SX1BERkxVU0hfVEhSRUFEUz0xNSwKKyBWTV9PVkVSQ09NTUlUX1JBVElPPTE2LAorIFZNX1BBR0VCVUY9MTcsCisgVk1fSFVHRVRMQl9QQUdFUz0xOCwKKyBWTV9TV0FQUElORVNTPTE5LAorIFZNX0xPV01FTV9SRVNFUlZFX1JBVElPPTIwLAorIFZNX01JTl9GUkVFX0tCWVRFUz0yMSwKKyBWTV9NQVhfTUFQX0NPVU5UPTIyLAorIFZNX0xBUFRPUF9NT0RFPTIzLAorIFZNX0JMT0NLX0RVTVA9MjQsCisgVk1fSFVHRVRMQl9HUk9VUD0yNSwKKyBWTV9WRlNfQ0FDSEVfUFJFU1NVUkU9MjYsCisgVk1fTEVHQUNZX1ZBX0xBWU9VVD0yNywKKyBWTV9TV0FQX1RPS0VOX1RJTUVPVVQ9MjgsCisgVk1fRFJPUF9QQUdFQ0FDSEU9MjksCisgVk1fUEVSQ1BVX1BBR0VMSVNUX0ZSQUNUSU9OPTMwLAorIFZNX1pPTkVfUkVDTEFJTV9NT0RFPTMxLAorIFZNX01JTl9VTk1BUFBFRD0zMiwKKyBWTV9QQU5JQ19PTl9PT009MzMsCisgVk1fVkRTT19FTkFCTEVEPTM0LAorfTsKKworZW51bQoreworIE5FVF9DT1JFPTEsCisgTkVUX0VUSEVSPTIsCisgTkVUXzgwMj0zLAorIE5FVF9VTklYPTQsCisgTkVUX0lQVjQ9NSwKKyBORVRfSVBYPTYsCisgTkVUX0FUQUxLPTcsCisgTkVUX05FVFJPTT04LAorIE5FVF9BWDI1PTksCisgTkVUX0JSSURHRT0xMCwKKyBORVRfUk9TRT0xMSwKKyBORVRfSVBWNj0xMiwKKyBORVRfWDI1PTEzLAorIE5FVF9UUj0xNCwKKyBORVRfREVDTkVUPTE1LAorIE5FVF9FQ09ORVQ9MTYsCisgTkVUX1NDVFA9MTcsCisgTkVUX0xMQz0xOCwKKyBORVRfTkVURklMVEVSPTE5LAorIE5FVF9EQ0NQPTIwLAorfTsKKworZW51bQoreworIFJBTkRPTV9QT09MU0laRT0xLAorIFJBTkRPTV9FTlRST1BZX0NPVU5UPTIsCisgUkFORE9NX1JFQURfVEhSRVNIPTMsCisgUkFORE9NX1dSSVRFX1RIUkVTSD00LAorIFJBTkRPTV9CT09UX0lEPTUsCisgUkFORE9NX1VVSUQ9NgorfTsKKworZW51bQoreworIFBUWV9NQVg9MSwKKyBQVFlfTlI9MgorfTsKKworZW51bQoreworIEJVU19JU0FfTUVNX0JBU0U9MSwKKyBCVVNfSVNBX1BPUlRfQkFTRT0yLAorIEJVU19JU0FfUE9SVF9TSElGVD0zCit9OworCitlbnVtCit7CisgTkVUX0NPUkVfV01FTV9NQVg9MSwKKyBORVRfQ09SRV9STUVNX01BWD0yLAorIE5FVF9DT1JFX1dNRU1fREVGQVVMVD0zLAorIE5FVF9DT1JFX1JNRU1fREVGQVVMVD00LAorCisgTkVUX0NPUkVfTUFYX0JBQ0tMT0c9NiwKKyBORVRfQ09SRV9GQVNUUk9VVEU9NywKKyBORVRfQ09SRV9NU0dfQ09TVD04LAorIE5FVF9DT1JFX01TR19CVVJTVD05LAorIE5FVF9DT1JFX09QVE1FTV9NQVg9MTAsCisgTkVUX0NPUkVfSE9UX0xJU1RfTEVOR1RIPTExLAorIE5FVF9DT1JFX0RJVkVSVF9WRVJTSU9OPTEyLAorIE5FVF9DT1JFX05PX0NPTkdfVEhSRVNIPTEzLAorIE5FVF9DT1JFX05PX0NPTkc9MTQsCisgTkVUX0NPUkVfTE9fQ09ORz0xNSwKKyBORVRfQ09SRV9NT0RfQ09ORz0xNiwKKyBORVRfQ09SRV9ERVZfV0VJR0hUPTE3LAorIE5FVF9DT1JFX1NPTUFYQ09OTj0xOCwKKyBORVRfQ09SRV9CVURHRVQ9MTksCisgTkVUX0NPUkVfQUVWRU5UX0VUSU1FPTIwLAorIE5FVF9DT1JFX0FFVkVOVF9SU0VRVEg9MjEsCit9OworCitlbnVtCit7CisgTkVUX1VOSVhfREVTVFJPWV9ERUxBWT0xLAorIE5FVF9VTklYX0RFTEVURV9ERUxBWT0yLAorIE5FVF9VTklYX01BWF9ER1JBTV9RTEVOPTMsCit9OworCitlbnVtCit7CisgTkVUX05GX0NPTk5UUkFDS19NQVg9MSwKKyBORVRfTkZfQ09OTlRSQUNLX1RDUF9USU1FT1VUX1NZTl9TRU5UPTIsCisgTkVUX05GX0NPTk5UUkFDS19UQ1BfVElNRU9VVF9TWU5fUkVDVj0zLAorIE5FVF9ORl9DT05OVFJBQ0tfVENQX1RJTUVPVVRfRVNUQUJMSVNIRUQ9NCwKKyBORVRfTkZfQ09OTlRSQUNLX1RDUF9USU1FT1VUX0ZJTl9XQUlUPTUsCisgTkVUX05GX0NPTk5UUkFDS19UQ1BfVElNRU9VVF9DTE9TRV9XQUlUPTYsCisgTkVUX05GX0NPTk5UUkFDS19UQ1BfVElNRU9VVF9MQVNUX0FDSz03LAorIE5FVF9ORl9DT05OVFJBQ0tfVENQX1RJTUVPVVRfVElNRV9XQUlUPTgsCisgTkVUX05GX0NPTk5UUkFDS19UQ1BfVElNRU9VVF9DTE9TRT05LAorIE5FVF9ORl9DT05OVFJBQ0tfVURQX1RJTUVPVVQ9MTAsCisgTkVUX05GX0NPTk5UUkFDS19VRFBfVElNRU9VVF9TVFJFQU09MTEsCisgTkVUX05GX0NPTk5UUkFDS19JQ01QX1RJTUVPVVQ9MTIsCisgTkVUX05GX0NPTk5UUkFDS19HRU5FUklDX1RJTUVPVVQ9MTMsCisgTkVUX05GX0NPTk5UUkFDS19CVUNLRVRTPTE0LAorIE5FVF9ORl9DT05OVFJBQ0tfTE9HX0lOVkFMSUQ9MTUsCisgTkVUX05GX0NPTk5UUkFDS19UQ1BfVElNRU9VVF9NQVhfUkVUUkFOUz0xNiwKKyBORVRfTkZfQ09OTlRSQUNLX1RDUF9MT09TRT0xNywKKyBORVRfTkZfQ09OTlRSQUNLX1RDUF9CRV9MSUJFUkFMPTE4LAorIE5FVF9ORl9DT05OVFJBQ0tfVENQX01BWF9SRVRSQU5TPTE5LAorIE5FVF9ORl9DT05OVFJBQ0tfU0NUUF9USU1FT1VUX0NMT1NFRD0yMCwKKyBORVRfTkZfQ09OTlRSQUNLX1NDVFBfVElNRU9VVF9DT09LSUVfV0FJVD0yMSwKKyBORVRfTkZfQ09OTlRSQUNLX1NDVFBfVElNRU9VVF9DT09LSUVfRUNIT0VEPTIyLAorIE5FVF9ORl9DT05OVFJBQ0tfU0NUUF9USU1FT1VUX0VTVEFCTElTSEVEPTIzLAorIE5FVF9ORl9DT05OVFJBQ0tfU0NUUF9USU1FT1VUX1NIVVRET1dOX1NFTlQ9MjQsCisgTkVUX05GX0NPTk5UUkFDS19TQ1RQX1RJTUVPVVRfU0hVVERPV05fUkVDRD0yNSwKKyBORVRfTkZfQ09OTlRSQUNLX1NDVFBfVElNRU9VVF9TSFVURE9XTl9BQ0tfU0VOVD0yNiwKKyBORVRfTkZfQ09OTlRSQUNLX0NPVU5UPTI3LAorIE5FVF9ORl9DT05OVFJBQ0tfSUNNUFY2X1RJTUVPVVQ9MjgsCisgTkVUX05GX0NPTk5UUkFDS19GUkFHNl9USU1FT1VUPTI5LAorIE5FVF9ORl9DT05OVFJBQ0tfRlJBRzZfTE9XX1RIUkVTSD0zMCwKKyBORVRfTkZfQ09OTlRSQUNLX0ZSQUc2X0hJR0hfVEhSRVNIPTMxLAorIE5FVF9ORl9DT05OVFJBQ0tfQ0hFQ0tTVU09MzIsCit9OworCitlbnVtCit7CisKKyBORVRfSVBWNF9GT1JXQVJEPTgsCisgTkVUX0lQVjRfRFlOQUREUj05LAorCisgTkVUX0lQVjRfQ09ORj0xNiwKKyBORVRfSVBWNF9ORUlHSD0xNywKKyBORVRfSVBWNF9ST1VURT0xOCwKKyBORVRfSVBWNF9GSUJfSEFTSD0xOSwKKyBORVRfSVBWNF9ORVRGSUxURVI9MjAsCisKKyBORVRfSVBWNF9UQ1BfVElNRVNUQU1QUz0zMywKKyBORVRfSVBWNF9UQ1BfV0lORE9XX1NDQUxJTkc9MzQsCisgTkVUX0lQVjRfVENQX1NBQ0s9MzUsCisgTkVUX0lQVjRfVENQX1JFVFJBTlNfQ09MTEFQU0U9MzYsCisgTkVUX0lQVjRfREVGQVVMVF9UVEw9MzcsCisgTkVUX0lQVjRfQVVUT0NPTkZJRz0zOCwKKyBORVRfSVBWNF9OT19QTVRVX0RJU0M9MzksCisgTkVUX0lQVjRfVENQX1NZTl9SRVRSSUVTPTQwLAorIE5FVF9JUFY0X0lQRlJBR19ISUdIX1RIUkVTSD00MSwKKyBORVRfSVBWNF9JUEZSQUdfTE9XX1RIUkVTSD00MiwKKyBORVRfSVBWNF9JUEZSQUdfVElNRT00MywKKyBORVRfSVBWNF9UQ1BfTUFYX0tBX1BST0JFUz00NCwKKyBORVRfSVBWNF9UQ1BfS0VFUEFMSVZFX1RJTUU9NDUsCisgTkVUX0lQVjRfVENQX0tFRVBBTElWRV9QUk9CRVM9NDYsCisgTkVUX0lQVjRfVENQX1JFVFJJRVMxPTQ3LAorIE5FVF9JUFY0X1RDUF9SRVRSSUVTMj00OCwKKyBORVRfSVBWNF9UQ1BfRklOX1RJTUVPVVQ9NDksCisgTkVUX0lQVjRfSVBfTUFTUV9ERUJVRz01MCwKKyBORVRfVENQX1NZTkNPT0tJRVM9NTEsCisgTkVUX1RDUF9TVERVUkc9NTIsCisgTkVUX1RDUF9SRkMxMzM3PTUzLAorIE5FVF9UQ1BfU1lOX1RBSUxEUk9QPTU0LAorIE5FVF9UQ1BfTUFYX1NZTl9CQUNLTE9HPTU1LAorIE5FVF9JUFY0X0xPQ0FMX1BPUlRfUkFOR0U9NTYsCisgTkVUX0lQVjRfSUNNUF9FQ0hPX0lHTk9SRV9BTEw9NTcsCisgTkVUX0lQVjRfSUNNUF9FQ0hPX0lHTk9SRV9CUk9BRENBU1RTPTU4LAorIE5FVF9JUFY0X0lDTVBfU09VUkNFUVVFTkNIX1JBVEU9NTksCisgTkVUX0lQVjRfSUNNUF9ERVNUVU5SRUFDSF9SQVRFPTYwLAorIE5FVF9JUFY0X0lDTVBfVElNRUVYQ0VFRF9SQVRFPTYxLAorIE5FVF9JUFY0X0lDTVBfUEFSQU1QUk9CX1JBVEU9NjIsCisgTkVUX0lQVjRfSUNNUF9FQ0hPUkVQTFlfUkFURT02MywKKyBORVRfSVBWNF9JQ01QX0lHTk9SRV9CT0dVU19FUlJPUl9SRVNQT05TRVM9NjQsCisgTkVUX0lQVjRfSUdNUF9NQVhfTUVNQkVSU0hJUFM9NjUsCisgTkVUX1RDUF9UV19SRUNZQ0xFPTY2LAorIE5FVF9JUFY0X0FMV0FZU19ERUZSQUc9NjcsCisgTkVUX0lQVjRfVENQX0tFRVBBTElWRV9JTlRWTD02OCwKKyBORVRfSVBWNF9JTkVUX1BFRVJfVEhSRVNIT0xEPTY5LAorIE5FVF9JUFY0X0lORVRfUEVFUl9NSU5UVEw9NzAsCisgTkVUX0lQVjRfSU5FVF9QRUVSX01BWFRUTD03MSwKKyBORVRfSVBWNF9JTkVUX1BFRVJfR0NfTUlOVElNRT03MiwKKyBORVRfSVBWNF9JTkVUX1BFRVJfR0NfTUFYVElNRT03MywKKyBORVRfVENQX09SUEhBTl9SRVRSSUVTPTc0LAorIE5FVF9UQ1BfQUJPUlRfT05fT1ZFUkZMT1c9NzUsCisgTkVUX1RDUF9TWU5BQ0tfUkVUUklFUz03NiwKKyBORVRfVENQX01BWF9PUlBIQU5TPTc3LAorIE5FVF9UQ1BfTUFYX1RXX0JVQ0tFVFM9NzgsCisgTkVUX1RDUF9GQUNLPTc5LAorIE5FVF9UQ1BfUkVPUkRFUklORz04MCwKKyBORVRfVENQX0VDTj04MSwKKyBORVRfVENQX0RTQUNLPTgyLAorIE5FVF9UQ1BfTUVNPTgzLAorIE5FVF9UQ1BfV01FTT04NCwKKyBORVRfVENQX1JNRU09ODUsCisgTkVUX1RDUF9BUFBfV0lOPTg2LAorIE5FVF9UQ1BfQURWX1dJTl9TQ0FMRT04NywKKyBORVRfSVBWNF9OT05MT0NBTF9CSU5EPTg4LAorIE5FVF9JUFY0X0lDTVBfUkFURUxJTUlUPTg5LAorIE5FVF9JUFY0X0lDTVBfUkFURU1BU0s9OTAsCisgTkVUX1RDUF9UV19SRVVTRT05MSwKKyBORVRfVENQX0ZSVE89OTIsCisgTkVUX1RDUF9MT1dfTEFURU5DWT05MywKKyBORVRfSVBWNF9JUEZSQUdfU0VDUkVUX0lOVEVSVkFMPTk0LAorIE5FVF9JUFY0X0lHTVBfTUFYX01TRj05NiwKKyBORVRfVENQX05PX01FVFJJQ1NfU0FWRT05NywKKyBORVRfVENQX0RFRkFVTFRfV0lOX1NDQUxFPTEwNSwKKyBORVRfVENQX01PREVSQVRFX1JDVkJVRj0xMDYsCisgTkVUX1RDUF9UU09fV0lOX0RJVklTT1I9MTA3LAorIE5FVF9UQ1BfQklDX0JFVEE9MTA4LAorIE5FVF9JUFY0X0lDTVBfRVJST1JTX1VTRV9JTkJPVU5EX0lGQUREUj0xMDksCisgTkVUX1RDUF9DT05HX0NPTlRST0w9MTEwLAorIE5FVF9UQ1BfQUJDPTExMSwKKyBORVRfSVBWNF9JUEZSQUdfTUFYX0RJU1Q9MTEyLAorIE5FVF9UQ1BfTVRVX1BST0JJTkc9MTEzLAorIE5FVF9UQ1BfQkFTRV9NU1M9MTE0LAorIE5FVF9JUFY0X1RDUF9XT1JLQVJPVU5EX1NJR05FRF9XSU5ET1dTPTExNSwKKyBORVRfVENQX0RNQV9DT1BZQlJFQUs9MTE2LAorIE5FVF9UQ1BfU0xPV19TVEFSVF9BRlRFUl9JRExFPTExNywKK307CisKK2VudW0geworIE5FVF9JUFY0X1JPVVRFX0ZMVVNIPTEsCisgTkVUX0lQVjRfUk9VVEVfTUlOX0RFTEFZPTIsCisgTkVUX0lQVjRfUk9VVEVfTUFYX0RFTEFZPTMsCisgTkVUX0lQVjRfUk9VVEVfR0NfVEhSRVNIPTQsCisgTkVUX0lQVjRfUk9VVEVfTUFYX1NJWkU9NSwKKyBORVRfSVBWNF9ST1VURV9HQ19NSU5fSU5URVJWQUw9NiwKKyBORVRfSVBWNF9ST1VURV9HQ19USU1FT1VUPTcsCisgTkVUX0lQVjRfUk9VVEVfR0NfSU5URVJWQUw9OCwKKyBORVRfSVBWNF9ST1VURV9SRURJUkVDVF9MT0FEPTksCisgTkVUX0lQVjRfUk9VVEVfUkVESVJFQ1RfTlVNQkVSPTEwLAorIE5FVF9JUFY0X1JPVVRFX1JFRElSRUNUX1NJTEVOQ0U9MTEsCisgTkVUX0lQVjRfUk9VVEVfRVJST1JfQ09TVD0xMiwKKyBORVRfSVBWNF9ST1VURV9FUlJPUl9CVVJTVD0xMywKKyBORVRfSVBWNF9ST1VURV9HQ19FTEFTVElDSVRZPTE0LAorIE5FVF9JUFY0X1JPVVRFX01UVV9FWFBJUkVTPTE1LAorIE5FVF9JUFY0X1JPVVRFX01JTl9QTVRVPTE2LAorIE5FVF9JUFY0X1JPVVRFX01JTl9BRFZNU1M9MTcsCisgTkVUX0lQVjRfUk9VVEVfU0VDUkVUX0lOVEVSVkFMPTE4LAorIE5FVF9JUFY0X1JPVVRFX0dDX01JTl9JTlRFUlZBTF9NUz0xOSwKK307CisKK2VudW0KK3sKKyBORVRfUFJPVE9fQ09ORl9BTEw9LTIsCisgTkVUX1BST1RPX0NPTkZfREVGQVVMVD0tMworCit9OworCitlbnVtCit7CisgTkVUX0lQVjRfQ09ORl9GT1JXQVJESU5HPTEsCisgTkVUX0lQVjRfQ09ORl9NQ19GT1JXQVJESU5HPTIsCisgTkVUX0lQVjRfQ09ORl9QUk9YWV9BUlA9MywKKyBORVRfSVBWNF9DT05GX0FDQ0VQVF9SRURJUkVDVFM9NCwKKyBORVRfSVBWNF9DT05GX1NFQ1VSRV9SRURJUkVDVFM9NSwKKyBORVRfSVBWNF9DT05GX1NFTkRfUkVESVJFQ1RTPTYsCisgTkVUX0lQVjRfQ09ORl9TSEFSRURfTUVESUE9NywKKyBORVRfSVBWNF9DT05GX1JQX0ZJTFRFUj04LAorIE5FVF9JUFY0X0NPTkZfQUNDRVBUX1NPVVJDRV9ST1VURT05LAorIE5FVF9JUFY0X0NPTkZfQk9PVFBfUkVMQVk9MTAsCisgTkVUX0lQVjRfQ09ORl9MT0dfTUFSVElBTlM9MTEsCisgTkVUX0lQVjRfQ09ORl9UQUc9MTIsCisgTkVUX0lQVjRfQ09ORl9BUlBGSUxURVI9MTMsCisgTkVUX0lQVjRfQ09ORl9NRURJVU1fSUQ9MTQsCisgTkVUX0lQVjRfQ09ORl9OT1hGUk09MTUsCisgTkVUX0lQVjRfQ09ORl9OT1BPTElDWT0xNiwKKyBORVRfSVBWNF9DT05GX0ZPUkNFX0lHTVBfVkVSU0lPTj0xNywKKyBORVRfSVBWNF9DT05GX0FSUF9BTk5PVU5DRT0xOCwKKyBORVRfSVBWNF9DT05GX0FSUF9JR05PUkU9MTksCisgTkVUX0lQVjRfQ09ORl9QUk9NT1RFX1NFQ09OREFSSUVTPTIwLAorIE5FVF9JUFY0X0NPTkZfQVJQX0FDQ0VQVD0yMSwKKyBfX05FVF9JUFY0X0NPTkZfTUFYCit9OworCitlbnVtCit7CisgTkVUX0lQVjRfTkZfQ09OTlRSQUNLX01BWD0xLAorIE5FVF9JUFY0X05GX0NPTk5UUkFDS19UQ1BfVElNRU9VVF9TWU5fU0VOVD0yLAorIE5FVF9JUFY0X05GX0NPTk5UUkFDS19UQ1BfVElNRU9VVF9TWU5fUkVDVj0zLAorIE5FVF9JUFY0X05GX0NPTk5UUkFDS19UQ1BfVElNRU9VVF9FU1RBQkxJU0hFRD00LAorIE5FVF9JUFY0X05GX0NPTk5UUkFDS19UQ1BfVElNRU9VVF9GSU5fV0FJVD01LAorIE5FVF9JUFY0X05GX0NPTk5UUkFDS19UQ1BfVElNRU9VVF9DTE9TRV9XQUlUPTYsCisgTkVUX0lQVjRfTkZfQ09OTlRSQUNLX1RDUF9USU1FT1VUX0xBU1RfQUNLPTcsCisgTkVUX0lQVjRfTkZfQ09OTlRSQUNLX1RDUF9USU1FT1VUX1RJTUVfV0FJVD04LAorIE5FVF9JUFY0X05GX0NPTk5UUkFDS19UQ1BfVElNRU9VVF9DTE9TRT05LAorIE5FVF9JUFY0X05GX0NPTk5UUkFDS19VRFBfVElNRU9VVD0xMCwKKyBORVRfSVBWNF9ORl9DT05OVFJBQ0tfVURQX1RJTUVPVVRfU1RSRUFNPTExLAorIE5FVF9JUFY0X05GX0NPTk5UUkFDS19JQ01QX1RJTUVPVVQ9MTIsCisgTkVUX0lQVjRfTkZfQ09OTlRSQUNLX0dFTkVSSUNfVElNRU9VVD0xMywKKyBORVRfSVBWNF9ORl9DT05OVFJBQ0tfQlVDS0VUUz0xNCwKKyBORVRfSVBWNF9ORl9DT05OVFJBQ0tfTE9HX0lOVkFMSUQ9MTUsCisgTkVUX0lQVjRfTkZfQ09OTlRSQUNLX1RDUF9USU1FT1VUX01BWF9SRVRSQU5TPTE2LAorIE5FVF9JUFY0X05GX0NPTk5UUkFDS19UQ1BfTE9PU0U9MTcsCisgTkVUX0lQVjRfTkZfQ09OTlRSQUNLX1RDUF9CRV9MSUJFUkFMPTE4LAorIE5FVF9JUFY0X05GX0NPTk5UUkFDS19UQ1BfTUFYX1JFVFJBTlM9MTksCisgTkVUX0lQVjRfTkZfQ09OTlRSQUNLX1NDVFBfVElNRU9VVF9DTE9TRUQ9MjAsCisgTkVUX0lQVjRfTkZfQ09OTlRSQUNLX1NDVFBfVElNRU9VVF9DT09LSUVfV0FJVD0yMSwKKyBORVRfSVBWNF9ORl9DT05OVFJBQ0tfU0NUUF9USU1FT1VUX0NPT0tJRV9FQ0hPRUQ9MjIsCisgTkVUX0lQVjRfTkZfQ09OTlRSQUNLX1NDVFBfVElNRU9VVF9FU1RBQkxJU0hFRD0yMywKKyBORVRfSVBWNF9ORl9DT05OVFJBQ0tfU0NUUF9USU1FT1VUX1NIVVRET1dOX1NFTlQ9MjQsCisgTkVUX0lQVjRfTkZfQ09OTlRSQUNLX1NDVFBfVElNRU9VVF9TSFVURE9XTl9SRUNEPTI1LAorIE5FVF9JUFY0X05GX0NPTk5UUkFDS19TQ1RQX1RJTUVPVVRfU0hVVERPV05fQUNLX1NFTlQ9MjYsCisgTkVUX0lQVjRfTkZfQ09OTlRSQUNLX0NPVU5UPTI3LAorIE5FVF9JUFY0X05GX0NPTk5UUkFDS19DSEVDS1NVTT0yOCwKK307CisKK2VudW0geworIE5FVF9JUFY2X0NPTkY9MTYsCisgTkVUX0lQVjZfTkVJR0g9MTcsCisgTkVUX0lQVjZfUk9VVEU9MTgsCisgTkVUX0lQVjZfSUNNUD0xOSwKKyBORVRfSVBWNl9CSU5EVjZPTkxZPTIwLAorIE5FVF9JUFY2X0lQNkZSQUdfSElHSF9USFJFU0g9MjEsCisgTkVUX0lQVjZfSVA2RlJBR19MT1dfVEhSRVNIPTIyLAorIE5FVF9JUFY2X0lQNkZSQUdfVElNRT0yMywKKyBORVRfSVBWNl9JUDZGUkFHX1NFQ1JFVF9JTlRFUlZBTD0yNCwKKyBORVRfSVBWNl9NTERfTUFYX01TRj0yNSwKK307CisKK2VudW0geworIE5FVF9JUFY2X1JPVVRFX0ZMVVNIPTEsCisgTkVUX0lQVjZfUk9VVEVfR0NfVEhSRVNIPTIsCisgTkVUX0lQVjZfUk9VVEVfTUFYX1NJWkU9MywKKyBORVRfSVBWNl9ST1VURV9HQ19NSU5fSU5URVJWQUw9NCwKKyBORVRfSVBWNl9ST1VURV9HQ19USU1FT1VUPTUsCisgTkVUX0lQVjZfUk9VVEVfR0NfSU5URVJWQUw9NiwKKyBORVRfSVBWNl9ST1VURV9HQ19FTEFTVElDSVRZPTcsCisgTkVUX0lQVjZfUk9VVEVfTVRVX0VYUElSRVM9OCwKKyBORVRfSVBWNl9ST1VURV9NSU5fQURWTVNTPTksCisgTkVUX0lQVjZfUk9VVEVfR0NfTUlOX0lOVEVSVkFMX01TPTEwCit9OworCitlbnVtIHsKKyBORVRfSVBWNl9GT1JXQVJESU5HPTEsCisgTkVUX0lQVjZfSE9QX0xJTUlUPTIsCisgTkVUX0lQVjZfTVRVPTMsCisgTkVUX0lQVjZfQUNDRVBUX1JBPTQsCisgTkVUX0lQVjZfQUNDRVBUX1JFRElSRUNUUz01LAorIE5FVF9JUFY2X0FVVE9DT05GPTYsCisgTkVUX0lQVjZfREFEX1RSQU5TTUlUUz03LAorIE5FVF9JUFY2X1JUUl9TT0xJQ0lUUz04LAorIE5FVF9JUFY2X1JUUl9TT0xJQ0lUX0lOVEVSVkFMPTksCisgTkVUX0lQVjZfUlRSX1NPTElDSVRfREVMQVk9MTAsCisgTkVUX0lQVjZfVVNFX1RFTVBBRERSPTExLAorIE5FVF9JUFY2X1RFTVBfVkFMSURfTEZUPTEyLAorIE5FVF9JUFY2X1RFTVBfUFJFRkVSRURfTEZUPTEzLAorIE5FVF9JUFY2X1JFR0VOX01BWF9SRVRSWT0xNCwKKyBORVRfSVBWNl9NQVhfREVTWU5DX0ZBQ1RPUj0xNSwKKyBORVRfSVBWNl9NQVhfQUREUkVTU0VTPTE2LAorIE5FVF9JUFY2X0ZPUkNFX01MRF9WRVJTSU9OPTE3LAorIE5FVF9JUFY2X0FDQ0VQVF9SQV9ERUZSVFI9MTgsCisgTkVUX0lQVjZfQUNDRVBUX1JBX1BJTkZPPTE5LAorIE5FVF9JUFY2X0FDQ0VQVF9SQV9SVFJfUFJFRj0yMCwKKyBORVRfSVBWNl9SVFJfUFJPQkVfSU5URVJWQUw9MjEsCisgTkVUX0lQVjZfQUNDRVBUX1JBX1JUX0lORk9fTUFYX1BMRU49MjIsCisgX19ORVRfSVBWNl9NQVgKK307CisKK2VudW0geworIE5FVF9JUFY2X0lDTVBfUkFURUxJTUlUPTEKK307CisKK2VudW0geworIE5FVF9ORUlHSF9NQ0FTVF9TT0xJQ0lUPTEsCisgTkVUX05FSUdIX1VDQVNUX1NPTElDSVQ9MiwKKyBORVRfTkVJR0hfQVBQX1NPTElDSVQ9MywKKyBORVRfTkVJR0hfUkVUUkFOU19USU1FPTQsCisgTkVUX05FSUdIX1JFQUNIQUJMRV9USU1FPTUsCisgTkVUX05FSUdIX0RFTEFZX1BST0JFX1RJTUU9NiwKKyBORVRfTkVJR0hfR0NfU1RBTEVfVElNRT03LAorIE5FVF9ORUlHSF9VTlJFU19RTEVOPTgsCisgTkVUX05FSUdIX1BST1hZX1FMRU49OSwKKyBORVRfTkVJR0hfQU5ZQ0FTVF9ERUxBWT0xMCwKKyBORVRfTkVJR0hfUFJPWFlfREVMQVk9MTEsCisgTkVUX05FSUdIX0xPQ0tUSU1FPTEyLAorIE5FVF9ORUlHSF9HQ19JTlRFUlZBTD0xMywKKyBORVRfTkVJR0hfR0NfVEhSRVNIMT0xNCwKKyBORVRfTkVJR0hfR0NfVEhSRVNIMj0xNSwKKyBORVRfTkVJR0hfR0NfVEhSRVNIMz0xNiwKKyBORVRfTkVJR0hfUkVUUkFOU19USU1FX01TPTE3LAorIE5FVF9ORUlHSF9SRUFDSEFCTEVfVElNRV9NUz0xOCwKKyBfX05FVF9ORUlHSF9NQVgKK307CisKK2VudW0geworIE5FVF9EQ0NQX0RFRkFVTFQ9MSwKK307CisKK2VudW0geworIE5FVF9EQ0NQX0RFRkFVTFRfU0VRX1dJTkRPVyA9IDEsCisgTkVUX0RDQ1BfREVGQVVMVF9SWF9DQ0lEID0gMiwKKyBORVRfRENDUF9ERUZBVUxUX1RYX0NDSUQgPSAzLAorIE5FVF9EQ0NQX0RFRkFVTFRfQUNLX1JBVElPID0gNCwKKyBORVRfRENDUF9ERUZBVUxUX1NFTkRfQUNLVkVDID0gNSwKKyBORVRfRENDUF9ERUZBVUxUX1NFTkRfTkRQID0gNiwKK307CisKK2VudW0geworIE5FVF9JUFhfUFBST1BfQlJPQURDQVNUSU5HPTEsCisgTkVUX0lQWF9GT1JXQVJESU5HPTIKK307CisKK2VudW0geworIE5FVF9MTEMyPTEsCisgTkVUX0xMQ19TVEFUSU9OPTIsCit9OworCitlbnVtIHsKKyBORVRfTExDMl9USU1FT1VUPTEsCit9OworCitlbnVtIHsKKyBORVRfTExDX1NUQVRJT05fQUNLX1RJTUVPVVQ9MSwKK307CisKK2VudW0geworIE5FVF9MTEMyX0FDS19USU1FT1VUPTEsCisgTkVUX0xMQzJfUF9USU1FT1VUPTIsCisgTkVUX0xMQzJfUkVKX1RJTUVPVVQ9MywKKyBORVRfTExDMl9CVVNZX1RJTUVPVVQ9NCwKK307CisKK2VudW0geworIE5FVF9BVEFMS19BQVJQX0VYUElSWV9USU1FPTEsCisgTkVUX0FUQUxLX0FBUlBfVElDS19USU1FPTIsCisgTkVUX0FUQUxLX0FBUlBfUkVUUkFOU01JVF9MSU1JVD0zLAorIE5FVF9BVEFMS19BQVJQX1JFU09MVkVfVElNRT00Cit9OworCitlbnVtIHsKKyBORVRfTkVUUk9NX0RFRkFVTFRfUEFUSF9RVUFMSVRZPTEsCisgTkVUX05FVFJPTV9PQlNPTEVTQ0VOQ0VfQ09VTlRfSU5JVElBTElTRVI9MiwKKyBORVRfTkVUUk9NX05FVFdPUktfVFRMX0lOSVRJQUxJU0VSPTMsCisgTkVUX05FVFJPTV9UUkFOU1BPUlRfVElNRU9VVD00LAorIE5FVF9ORVRST01fVFJBTlNQT1JUX01BWElNVU1fVFJJRVM9NSwKKyBORVRfTkVUUk9NX1RSQU5TUE9SVF9BQ0tOT1dMRURHRV9ERUxBWT02LAorIE5FVF9ORVRST01fVFJBTlNQT1JUX0JVU1lfREVMQVk9NywKKyBORVRfTkVUUk9NX1RSQU5TUE9SVF9SRVFVRVNURURfV0lORE9XX1NJWkU9OCwKKyBORVRfTkVUUk9NX1RSQU5TUE9SVF9OT19BQ1RJVklUWV9USU1FT1VUPTksCisgTkVUX05FVFJPTV9ST1VUSU5HX0NPTlRST0w9MTAsCisgTkVUX05FVFJPTV9MSU5LX0ZBSUxTX0NPVU5UPTExLAorIE5FVF9ORVRST01fUkVTRVQ9MTIKK307CisKK2VudW0geworIE5FVF9BWDI1X0lQX0RFRkFVTFRfTU9ERT0xLAorIE5FVF9BWDI1X0RFRkFVTFRfTU9ERT0yLAorIE5FVF9BWDI1X0JBQ0tPRkZfVFlQRT0zLAorIE5FVF9BWDI1X0NPTk5FQ1RfTU9ERT00LAorIE5FVF9BWDI1X1NUQU5EQVJEX1dJTkRPVz01LAorIE5FVF9BWDI1X0VYVEVOREVEX1dJTkRPVz02LAorIE5FVF9BWDI1X1QxX1RJTUVPVVQ9NywKKyBORVRfQVgyNV9UMl9USU1FT1VUPTgsCisgTkVUX0FYMjVfVDNfVElNRU9VVD05LAorIE5FVF9BWDI1X0lETEVfVElNRU9VVD0xMCwKKyBORVRfQVgyNV9OMj0xMSwKKyBORVRfQVgyNV9QQUNMRU49MTIsCisgTkVUX0FYMjVfUFJPVE9DT0w9MTMsCisgTkVUX0FYMjVfREFNQV9TTEFWRV9USU1FT1VUPTE0Cit9OworCitlbnVtIHsKKyBORVRfUk9TRV9SRVNUQVJUX1JFUVVFU1RfVElNRU9VVD0xLAorIE5FVF9ST1NFX0NBTExfUkVRVUVTVF9USU1FT1VUPTIsCisgTkVUX1JPU0VfUkVTRVRfUkVRVUVTVF9USU1FT1VUPTMsCisgTkVUX1JPU0VfQ0xFQVJfUkVRVUVTVF9USU1FT1VUPTQsCisgTkVUX1JPU0VfQUNLX0hPTERfQkFDS19USU1FT1VUPTUsCisgTkVUX1JPU0VfUk9VVElOR19DT05UUk9MPTYsCisgTkVUX1JPU0VfTElOS19GQUlMX1RJTUVPVVQ9NywKKyBORVRfUk9TRV9NQVhfVkNTPTgsCisgTkVUX1JPU0VfV0lORE9XX1NJWkU9OSwKKyBORVRfUk9TRV9OT19BQ1RJVklUWV9USU1FT1VUPTEwCit9OworCitlbnVtIHsKKyBORVRfWDI1X1JFU1RBUlRfUkVRVUVTVF9USU1FT1VUPTEsCisgTkVUX1gyNV9DQUxMX1JFUVVFU1RfVElNRU9VVD0yLAorIE5FVF9YMjVfUkVTRVRfUkVRVUVTVF9USU1FT1VUPTMsCisgTkVUX1gyNV9DTEVBUl9SRVFVRVNUX1RJTUVPVVQ9NCwKKyBORVRfWDI1X0FDS19IT0xEX0JBQ0tfVElNRU9VVD01Cit9OworCitlbnVtCit7CisgTkVUX1RSX1JJRl9USU1FT1VUPTEKK307CisKK2VudW0geworIE5FVF9ERUNORVRfTk9ERV9UWVBFID0gMSwKKyBORVRfREVDTkVUX05PREVfQUREUkVTUyA9IDIsCisgTkVUX0RFQ05FVF9OT0RFX05BTUUgPSAzLAorIE5FVF9ERUNORVRfREVGQVVMVF9ERVZJQ0UgPSA0LAorIE5FVF9ERUNORVRfVElNRV9XQUlUID0gNSwKKyBORVRfREVDTkVUX0ROX0NPVU5UID0gNiwKKyBORVRfREVDTkVUX0RJX0NPVU5UID0gNywKKyBORVRfREVDTkVUX0RSX0NPVU5UID0gOCwKKyBORVRfREVDTkVUX0RTVF9HQ19JTlRFUlZBTCA9IDksCisgTkVUX0RFQ05FVF9DT05GID0gMTAsCisgTkVUX0RFQ05FVF9OT19GQ19NQVhfQ1dORCA9IDExLAorIE5FVF9ERUNORVRfTUVNID0gMTIsCisgTkVUX0RFQ05FVF9STUVNID0gMTMsCisgTkVUX0RFQ05FVF9XTUVNID0gMTQsCisgTkVUX0RFQ05FVF9ERUJVR19MRVZFTCA9IDI1NQorfTsKKworZW51bSB7CisgTkVUX0RFQ05FVF9DT05GX0xPT1BCQUNLID0gLTIsCisgTkVUX0RFQ05FVF9DT05GX0REQ01QID0gLTMsCisgTkVUX0RFQ05FVF9DT05GX1BQUCA9IC00LAorIE5FVF9ERUNORVRfQ09ORl9YMjUgPSAtNSwKKyBORVRfREVDTkVUX0NPTkZfR1JFID0gLTYsCisgTkVUX0RFQ05FVF9DT05GX0VUSEVSID0gLTcKKworfTsKKworZW51bSB7CisgTkVUX0RFQ05FVF9DT05GX0RFVl9QUklPUklUWSA9IDEsCisgTkVUX0RFQ05FVF9DT05GX0RFVl9UMSA9IDIsCisgTkVUX0RFQ05FVF9DT05GX0RFVl9UMiA9IDMsCisgTkVUX0RFQ05FVF9DT05GX0RFVl9UMyA9IDQsCisgTkVUX0RFQ05FVF9DT05GX0RFVl9GT1JXQVJESU5HID0gNSwKKyBORVRfREVDTkVUX0NPTkZfREVWX0JMS1NJWkUgPSA2LAorIE5FVF9ERUNORVRfQ09ORl9ERVZfU1RBVEUgPSA3Cit9OworCitlbnVtIHsKKyBORVRfU0NUUF9SVE9fSU5JVElBTCA9IDEsCisgTkVUX1NDVFBfUlRPX01JTiA9IDIsCisgTkVUX1NDVFBfUlRPX01BWCA9IDMsCisgTkVUX1NDVFBfUlRPX0FMUEhBID0gNCwKKyBORVRfU0NUUF9SVE9fQkVUQSA9IDUsCisgTkVUX1NDVFBfVkFMSURfQ09PS0lFX0xJRkUgPSA2LAorIE5FVF9TQ1RQX0FTU09DSUFUSU9OX01BWF9SRVRSQU5TID0gNywKKyBORVRfU0NUUF9QQVRIX01BWF9SRVRSQU5TID0gOCwKKyBORVRfU0NUUF9NQVhfSU5JVF9SRVRSQU5TTUlUUyA9IDksCisgTkVUX1NDVFBfSEJfSU5URVJWQUwgPSAxMCwKKyBORVRfU0NUUF9QUkVTRVJWRV9FTkFCTEUgPSAxMSwKKyBORVRfU0NUUF9NQVhfQlVSU1QgPSAxMiwKKyBORVRfU0NUUF9BRERJUF9FTkFCTEUgPSAxMywKKyBORVRfU0NUUF9QUlNDVFBfRU5BQkxFID0gMTQsCisgTkVUX1NDVFBfU05EQlVGX1BPTElDWSA9IDE1LAorIE5FVF9TQ1RQX1NBQ0tfVElNRU9VVCA9IDE2LAorIE5FVF9TQ1RQX1JDVkJVRl9QT0xJQ1kgPSAxNywKK307CisKK2VudW0geworIE5FVF9CUklER0VfTkZfQ0FMTF9BUlBUQUJMRVMgPSAxLAorIE5FVF9CUklER0VfTkZfQ0FMTF9JUFRBQkxFUyA9IDIsCisgTkVUX0JSSURHRV9ORl9DQUxMX0lQNlRBQkxFUyA9IDMsCisgTkVUX0JSSURHRV9ORl9GSUxURVJfVkxBTl9UQUdHRUQgPSA0LAorfTsKKworZW51bQoreworIEZTX05SSU5PREU9MSwKKyBGU19TVEFUSU5PREU9MiwKKyBGU19NQVhJTk9ERT0zLAorIEZTX05SRFFVT1Q9NCwKKyBGU19NQVhEUVVPVD01LAorIEZTX05SRklMRT02LAorIEZTX01BWEZJTEU9NywKKyBGU19ERU5UUlk9OCwKKyBGU19OUlNVUEVSPTksCisgRlNfTUFYU1VQRVI9MTAsCisgRlNfT1ZFUkZMT1dVSUQ9MTEsCisgRlNfT1ZFUkZMT1dHSUQ9MTIsCisgRlNfTEVBU0VTPTEzLAorIEZTX0RJUl9OT1RJRlk9MTQsCisgRlNfTEVBU0VfVElNRT0xNSwKKyBGU19EUVNUQVRTPTE2LAorIEZTX1hGUz0xNywKKyBGU19BSU9fTlI9MTgsCisgRlNfQUlPX01BWF9OUj0xOSwKKyBGU19JTk9USUZZPTIwLAorfTsKKworZW51bSB7CisgRlNfRFFfTE9PS1VQUyA9IDEsCisgRlNfRFFfRFJPUFMgPSAyLAorIEZTX0RRX1JFQURTID0gMywKKyBGU19EUV9XUklURVMgPSA0LAorIEZTX0RRX0NBQ0hFX0hJVFMgPSA1LAorIEZTX0RRX0FMTE9DQVRFRCA9IDYsCisgRlNfRFFfRlJFRSA9IDcsCisgRlNfRFFfU1lOQ1MgPSA4LAorIEZTX0RRX1dBUk5JTkdTID0gOSwKK307CisKK2VudW0geworIERFVl9DRFJPTT0xLAorIERFVl9IV01PTj0yLAorIERFVl9QQVJQT1JUPTMsCisgREVWX1JBSUQ9NCwKKyBERVZfTUFDX0hJRD01LAorIERFVl9TQ1NJPTYsCisgREVWX0lQTUk9NywKK307CisKK2VudW0geworIERFVl9DRFJPTV9JTkZPPTEsCisgREVWX0NEUk9NX0FVVE9DTE9TRT0yLAorIERFVl9DRFJPTV9BVVRPRUpFQ1Q9MywKKyBERVZfQ0RST01fREVCVUc9NCwKKyBERVZfQ0RST01fTE9DSz01LAorIERFVl9DRFJPTV9DSEVDS19NRURJQT02Cit9OworCitlbnVtIHsKKyBERVZfUEFSUE9SVF9ERUZBVUxUPS0zCit9OworCitlbnVtIHsKKyBERVZfUkFJRF9TUEVFRF9MSU1JVF9NSU49MSwKKyBERVZfUkFJRF9TUEVFRF9MSU1JVF9NQVg9MgorfTsKKworZW51bSB7CisgREVWX1BBUlBPUlRfREVGQVVMVF9USU1FU0xJQ0U9MSwKKyBERVZfUEFSUE9SVF9ERUZBVUxUX1NQSU5USU1FPTIKK307CisKK2VudW0geworIERFVl9QQVJQT1JUX1NQSU5USU1FPTEsCisgREVWX1BBUlBPUlRfQkFTRV9BRERSPTIsCisgREVWX1BBUlBPUlRfSVJRPTMsCisgREVWX1BBUlBPUlRfRE1BPTQsCisgREVWX1BBUlBPUlRfTU9ERVM9NSwKKyBERVZfUEFSUE9SVF9ERVZJQ0VTPTYsCisgREVWX1BBUlBPUlRfQVVUT1BST0JFPTE2Cit9OworCitlbnVtIHsKKyBERVZfUEFSUE9SVF9ERVZJQ0VTX0FDVElWRT0tMywKK307CisKK2VudW0geworIERFVl9QQVJQT1JUX0RFVklDRV9USU1FU0xJQ0U9MSwKK307CisKK2VudW0geworIERFVl9NQUNfSElEX0tFWUJPQVJEX1NFTkRTX0xJTlVYX0tFWUNPREVTPTEsCisgREVWX01BQ19ISURfS0VZQk9BUkRfTE9DS19LRVlDT0RFUz0yLAorIERFVl9NQUNfSElEX01PVVNFX0JVVFRPTl9FTVVMQVRJT049MywKKyBERVZfTUFDX0hJRF9NT1VTRV9CVVRUT04yX0tFWUNPREU9NCwKKyBERVZfTUFDX0hJRF9NT1VTRV9CVVRUT04zX0tFWUNPREU9NSwKKyBERVZfTUFDX0hJRF9BREJfTU9VU0VfU0VORFNfS0VZQ09ERVM9NgorfTsKKworZW51bSB7CisgREVWX1NDU0lfTE9HR0lOR19MRVZFTD0xLAorfTsKKworZW51bSB7CisgREVWX0lQTUlfUE9XRVJPRkZfUE9XRVJDWUNMRT0xLAorfTsKKworZW51bQoreworIEFCSV9ERUZIQU5ETEVSX0NPRkY9MSwKKyBBQklfREVGSEFORExFUl9FTEY9MiwKKyBBQklfREVGSEFORExFUl9MQ0FMTDc9MywKKyBBQklfREVGSEFORExFUl9MSUJDU089NCwKKyBBQklfVFJBQ0U9NSwKKyBBQklfRkFLRV9VVFNOQU1FPTYsCit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zeXNkZXYuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zeXNkZXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWUyYjI2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N5c2Rldi5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX1NZU0RFVl9IXworI2RlZmluZSBfU1lTREVWX0hfCisKKyNpbmNsdWRlIDxsaW51eC9rb2JqZWN0Lmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKworc3RydWN0IHN5c19kZXZpY2U7CisKK3N0cnVjdCBzeXNkZXZfY2xhc3MgeworIHN0cnVjdCBsaXN0X2hlYWQgZHJpdmVyczsKKworIGludCAoKnNodXRkb3duKShzdHJ1Y3Qgc3lzX2RldmljZSAqKTsKKyBpbnQgKCpzdXNwZW5kKShzdHJ1Y3Qgc3lzX2RldmljZSAqLCBwbV9tZXNzYWdlX3Qgc3RhdGUpOworIGludCAoKnJlc3VtZSkoc3RydWN0IHN5c19kZXZpY2UgKik7Cisgc3RydWN0IGtzZXQga3NldDsKK307CisKK3N0cnVjdCBzeXNkZXZfY2xhc3NfYXR0cmlidXRlIHsKKyBzdHJ1Y3QgYXR0cmlidXRlIGF0dHI7Cisgc3NpemVfdCAoKnNob3cpKHN0cnVjdCBzeXNkZXZfY2xhc3MgKiwgY2hhciAqKTsKKyBzc2l6ZV90ICgqc3RvcmUpKHN0cnVjdCBzeXNkZXZfY2xhc3MgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOworfTsKKworI2RlZmluZSBTWVNERVZfQ0xBU1NfQVRUUihfbmFtZSxfbW9kZSxfc2hvdyxfc3RvcmUpICBzdHJ1Y3Qgc3lzZGV2X2NsYXNzX2F0dHJpYnV0ZSBhdHRyXyMjX25hbWUgPSB7ICAgLmF0dHIgPSB7Lm5hbWUgPSBfX3N0cmluZ2lmeShfbmFtZSksIC5tb2RlID0gX21vZGUgfSwgICAuc2hvdyA9IF9zaG93LCAgIC5zdG9yZSA9IF9zdG9yZSwgIH07CisKK3N0cnVjdCBzeXNkZXZfZHJpdmVyIHsKKyBzdHJ1Y3QgbGlzdF9oZWFkIGVudHJ5OworIGludCAoKmFkZCkoc3RydWN0IHN5c19kZXZpY2UgKik7CisgaW50ICgqcmVtb3ZlKShzdHJ1Y3Qgc3lzX2RldmljZSAqKTsKKyBpbnQgKCpzaHV0ZG93bikoc3RydWN0IHN5c19kZXZpY2UgKik7CisgaW50ICgqc3VzcGVuZCkoc3RydWN0IHN5c19kZXZpY2UgKiwgcG1fbWVzc2FnZV90IHN0YXRlKTsKKyBpbnQgKCpyZXN1bWUpKHN0cnVjdCBzeXNfZGV2aWNlICopOworfTsKKworc3RydWN0IHN5c19kZXZpY2UgeworIHUzMiBpZDsKKyBzdHJ1Y3Qgc3lzZGV2X2NsYXNzICogY2xzOworIHN0cnVjdCBrb2JqZWN0IGtvYmo7Cit9OworCitzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSB7Cisgc3RydWN0IGF0dHJpYnV0ZSBhdHRyOworIHNzaXplX3QgKCpzaG93KShzdHJ1Y3Qgc3lzX2RldmljZSAqLCBjaGFyICopOworIHNzaXplX3QgKCpzdG9yZSkoc3RydWN0IHN5c19kZXZpY2UgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOworfTsKKworI2RlZmluZSBTWVNERVZfQVRUUihfbmFtZSxfbW9kZSxfc2hvdyxfc3RvcmUpICBzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSBhdHRyXyMjX25hbWUgPSB7ICAgLmF0dHIgPSB7Lm5hbWUgPSBfX3N0cmluZ2lmeShfbmFtZSksIC5tb2RlID0gX21vZGUgfSwgICAuc2hvdyA9IF9zaG93LCAgIC5zdG9yZSA9IF9zdG9yZSwgIH07CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N5c2ZzLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3lzZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGI1ZjVhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N5c2ZzLmgKQEAgLTAsMCArMSw3NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfU1lTRlNfSF8KKyNkZWZpbmUgX1NZU0ZTX0hfCisKKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisKK3N0cnVjdCBrb2JqZWN0Oworc3RydWN0IG1vZHVsZTsKKworc3RydWN0IGF0dHJpYnV0ZSB7CisgY29uc3QgY2hhciAqIG5hbWU7Cisgc3RydWN0IG1vZHVsZSAqIG93bmVyOworIG1vZGVfdCBtb2RlOworfTsKKworc3RydWN0IGF0dHJpYnV0ZV9ncm91cCB7CisgY29uc3QgY2hhciAqIG5hbWU7Cisgc3RydWN0IGF0dHJpYnV0ZSAqKiBhdHRyczsKK307CisKKyNkZWZpbmUgX19BVFRSKF9uYW1lLF9tb2RlLF9zaG93LF9zdG9yZSkgeyAgIC5hdHRyID0gey5uYW1lID0gX19zdHJpbmdpZnkoX25hbWUpLCAubW9kZSA9IF9tb2RlLCAub3duZXIgPSBUSElTX01PRFVMRSB9LCAgIC5zaG93ID0gX3Nob3csICAgLnN0b3JlID0gX3N0b3JlLCAgfQorCisjZGVmaW5lIF9fQVRUUl9STyhfbmFtZSkgeyAgIC5hdHRyID0geyAubmFtZSA9IF9fc3RyaW5naWZ5KF9uYW1lKSwgLm1vZGUgPSAwNDQ0LCAub3duZXIgPSBUSElTX01PRFVMRSB9LCAgIC5zaG93ID0gX25hbWUjI19zaG93LCAgfQorCisjZGVmaW5lIF9fQVRUUl9OVUxMIHsgLmF0dHIgPSB7IC5uYW1lID0gTlVMTCB9IH0KKworI2RlZmluZSBhdHRyX25hbWUoX2F0dHIpIChfYXR0cikuYXR0ci5uYW1lCisKK3N0cnVjdCB2bV9hcmVhX3N0cnVjdDsKKworc3RydWN0IGJpbl9hdHRyaWJ1dGUgeworIHN0cnVjdCBhdHRyaWJ1dGUgYXR0cjsKKyBzaXplX3Qgc2l6ZTsKKyB2b2lkICpwcml2YXRlOworIHNzaXplX3QgKCpyZWFkKShzdHJ1Y3Qga29iamVjdCAqLCBjaGFyICosIGxvZmZfdCwgc2l6ZV90KTsKKyBzc2l6ZV90ICgqd3JpdGUpKHN0cnVjdCBrb2JqZWN0ICosIGNoYXIgKiwgbG9mZl90LCBzaXplX3QpOworIGludCAoKm1tYXApKHN0cnVjdCBrb2JqZWN0ICosIHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyLAorIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKK307CisKK3N0cnVjdCBzeXNmc19vcHMgeworIHNzaXplX3QgKCpzaG93KShzdHJ1Y3Qga29iamVjdCAqLCBzdHJ1Y3QgYXR0cmlidXRlICosY2hhciAqKTsKKyBzc2l6ZV90ICgqc3RvcmUpKHN0cnVjdCBrb2JqZWN0ICosc3RydWN0IGF0dHJpYnV0ZSAqLGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKK307CisKK3N0cnVjdCBzeXNmc19kaXJlbnQgeworIGF0b21pY190IHNfY291bnQ7Cisgc3RydWN0IGxpc3RfaGVhZCBzX3NpYmxpbmc7Cisgc3RydWN0IGxpc3RfaGVhZCBzX2NoaWxkcmVuOworIHZvaWQgKiBzX2VsZW1lbnQ7CisgaW50IHNfdHlwZTsKKyB1bW9kZV90IHNfbW9kZTsKKyBzdHJ1Y3QgZGVudHJ5ICogc19kZW50cnk7Cisgc3RydWN0IGlhdHRyICogc19pYXR0cjsKKyBhdG9taWNfdCBzX2V2ZW50OworfTsKKworI2RlZmluZSBTWVNGU19ST09UIDB4MDAwMQorI2RlZmluZSBTWVNGU19ESVIgMHgwMDAyCisjZGVmaW5lIFNZU0ZTX0tPQkpfQVRUUiAweDAwMDQKKyNkZWZpbmUgU1lTRlNfS09CSl9CSU5fQVRUUiAweDAwMDgKKyNkZWZpbmUgU1lTRlNfS09CSl9ERVZJQ0UgMHgwMDEwCisjZGVmaW5lIFNZU0ZTX0tPQkpfTElOSyAweDAwMjAKKyNkZWZpbmUgU1lTRlNfTk9UX1BJTk5FRCAoU1lTRlNfS09CSl9BVFRSIHwgU1lTRlNfS09CSl9CSU5fQVRUUiB8IFNZU0ZTX0tPQkpfREVWSUNFIHwgU1lTRlNfS09CSl9MSU5LKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90YXNrc3RhdHMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90YXNrc3RhdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZThhZTRhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3Rhc2tzdGF0cy5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX1RBU0tTVEFUU19ICisjZGVmaW5lIF9MSU5VWF9UQVNLU1RBVFNfSAorCisjZGVmaW5lIFRBU0tTVEFUU19WRVJTSU9OIDEKKworc3RydWN0IHRhc2tzdGF0cyB7CisKKyBfX3UxNiB2ZXJzaW9uOworIF9fdTE2IHBhZGRpbmdbM107CisKKyBfX3U2NCBjcHVfY291bnQ7CisgX191NjQgY3B1X2RlbGF5X3RvdGFsOworCisgX191NjQgYmxraW9fY291bnQ7CisgX191NjQgYmxraW9fZGVsYXlfdG90YWw7CisKKyBfX3U2NCBzd2FwaW5fY291bnQ7CisgX191NjQgc3dhcGluX2RlbGF5X3RvdGFsOworCisgX191NjQgY3B1X3J1bl9yZWFsX3RvdGFsOworCisgX191NjQgY3B1X3J1bl92aXJ0dWFsX3RvdGFsOworCit9OworCitlbnVtIHsKKyBUQVNLU1RBVFNfQ01EX1VOU1BFQyA9IDAsCisgVEFTS1NUQVRTX0NNRF9HRVQsCisgVEFTS1NUQVRTX0NNRF9ORVcsCisgX19UQVNLU1RBVFNfQ01EX01BWCwKK307CisKKyNkZWZpbmUgVEFTS1NUQVRTX0NNRF9NQVggKF9fVEFTS1NUQVRTX0NNRF9NQVggLSAxKQorCitlbnVtIHsKKyBUQVNLU1RBVFNfVFlQRV9VTlNQRUMgPSAwLAorIFRBU0tTVEFUU19UWVBFX1BJRCwKKyBUQVNLU1RBVFNfVFlQRV9UR0lELAorIFRBU0tTVEFUU19UWVBFX1NUQVRTLAorIFRBU0tTVEFUU19UWVBFX0FHR1JfUElELAorIFRBU0tTVEFUU19UWVBFX0FHR1JfVEdJRCwKKyBfX1RBU0tTVEFUU19UWVBFX01BWCwKK307CisKKyNkZWZpbmUgVEFTS1NUQVRTX1RZUEVfTUFYIChfX1RBU0tTVEFUU19UWVBFX01BWCAtIDEpCisKK2VudW0geworIFRBU0tTVEFUU19DTURfQVRUUl9VTlNQRUMgPSAwLAorIFRBU0tTVEFUU19DTURfQVRUUl9QSUQsCisgVEFTS1NUQVRTX0NNRF9BVFRSX1RHSUQsCisgVEFTS1NUQVRTX0NNRF9BVFRSX1JFR0lTVEVSX0NQVU1BU0ssCisgVEFTS1NUQVRTX0NNRF9BVFRSX0RFUkVHSVNURVJfQ1BVTUFTSywKKyBfX1RBU0tTVEFUU19DTURfQVRUUl9NQVgsCit9OworCisjZGVmaW5lIFRBU0tTVEFUU19DTURfQVRUUl9NQVggKF9fVEFTS1NUQVRTX0NNRF9BVFRSX01BWCAtIDEpCisKKyNkZWZpbmUgVEFTS1NUQVRTX0dFTkxfTkFNRSAiVEFTS1NUQVRTIgorI2RlZmluZSBUQVNLU1RBVFNfR0VOTF9WRVJTSU9OIDB4MQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90YXNrc3RhdHNfa2Vybi5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3Rhc2tzdGF0c19rZXJuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk0ODQxMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90YXNrc3RhdHNfa2Vybi5oCkBAIC0wLDAgKzEsMTkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX1RBU0tTVEFUU19LRVJOX0gKKyNkZWZpbmUgX0xJTlVYX1RBU0tTVEFUU19LRVJOX0gKKworI2luY2x1ZGUgPGxpbnV4L3Rhc2tzdGF0cy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bmV0L2dlbmV0bGluay5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90Y3AuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90Y3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmE5NWY4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3RjcC5oCkBAIC0wLDAgKzEsMTQ3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9UQ1BfSAorI2RlZmluZSBfTElOVVhfVENQX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorCitzdHJ1Y3QgdGNwaGRyIHsKKyBfX3UxNiBzb3VyY2U7CisgX191MTYgZGVzdDsKKyBfX3UzMiBzZXE7CisgX191MzIgYWNrX3NlcTsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fQklURklFTEQKKyBfX3UxNiByZXMxOjQsCisgZG9mZjo0LAorIGZpbjoxLAorIHN5bjoxLAorIHJzdDoxLAorIHBzaDoxLAorIGFjazoxLAorIHVyZzoxLAorIGVjZToxLAorIGN3cjoxOworI2VsaWYgZGVmaW5lZChfX0JJR19FTkRJQU5fQklURklFTEQpCisgX191MTYgZG9mZjo0LAorIHJlczE6NCwKKyBjd3I6MSwKKyBlY2U6MSwKKyB1cmc6MSwKKyBhY2s6MSwKKyBwc2g6MSwKKyByc3Q6MSwKKyBzeW46MSwKKyBmaW46MTsKKyNlbHNlCisjZXJyb3IgIkFkanVzdCB5b3VyIDxhc20vYnl0ZW9yZGVyLmg+IGRlZmluZXMiCisjZW5kaWYKKyBfX3UxNiB3aW5kb3c7CisgX191MTYgY2hlY2s7CisgX191MTYgdXJnX3B0cjsKK307CisKK3VuaW9uIHRjcF93b3JkX2hkciB7Cisgc3RydWN0IHRjcGhkciBoZHI7CisgX191MzIgd29yZHNbNV07Cit9OworCisjZGVmaW5lIHRjcF9mbGFnX3dvcmQodHApICggKCh1bmlvbiB0Y3Bfd29yZF9oZHIgKikodHApKS0+d29yZHMgWzNdKSAKKworZW51bSB7CisgVENQX0ZMQUdfQ1dSID0gX19jb25zdGFudF9odG9ubCgweDAwODAwMDAwKSwKKyBUQ1BfRkxBR19FQ0UgPSBfX2NvbnN0YW50X2h0b25sKDB4MDA0MDAwMDApLAorIFRDUF9GTEFHX1VSRyA9IF9fY29uc3RhbnRfaHRvbmwoMHgwMDIwMDAwMCksCisgVENQX0ZMQUdfQUNLID0gX19jb25zdGFudF9odG9ubCgweDAwMTAwMDAwKSwKKyBUQ1BfRkxBR19QU0ggPSBfX2NvbnN0YW50X2h0b25sKDB4MDAwODAwMDApLAorIFRDUF9GTEFHX1JTVCA9IF9fY29uc3RhbnRfaHRvbmwoMHgwMDA0MDAwMCksCisgVENQX0ZMQUdfU1lOID0gX19jb25zdGFudF9odG9ubCgweDAwMDIwMDAwKSwKKyBUQ1BfRkxBR19GSU4gPSBfX2NvbnN0YW50X2h0b25sKDB4MDAwMTAwMDApLAorIFRDUF9SRVNFUlZFRF9CSVRTID0gX19jb25zdGFudF9odG9ubCgweDBGMDAwMDAwKSwKKyBUQ1BfREFUQV9PRkZTRVQgPSBfX2NvbnN0YW50X2h0b25sKDB4RjAwMDAwMDApCit9OworCisjZGVmaW5lIFRDUF9OT0RFTEFZIDEgIAorI2RlZmluZSBUQ1BfTUFYU0VHIDIgIAorI2RlZmluZSBUQ1BfQ09SSyAzICAKKyNkZWZpbmUgVENQX0tFRVBJRExFIDQgIAorI2RlZmluZSBUQ1BfS0VFUElOVFZMIDUgIAorI2RlZmluZSBUQ1BfS0VFUENOVCA2ICAKKyNkZWZpbmUgVENQX1NZTkNOVCA3ICAKKyNkZWZpbmUgVENQX0xJTkdFUjIgOCAgCisjZGVmaW5lIFRDUF9ERUZFUl9BQ0NFUFQgOSAgCisjZGVmaW5lIFRDUF9XSU5ET1dfQ0xBTVAgMTAgIAorI2RlZmluZSBUQ1BfSU5GTyAxMSAgCisjZGVmaW5lIFRDUF9RVUlDS0FDSyAxMiAgCisjZGVmaW5lIFRDUF9DT05HRVNUSU9OIDEzICAKKworI2RlZmluZSBUQ1BJX09QVF9USU1FU1RBTVBTIDEKKyNkZWZpbmUgVENQSV9PUFRfU0FDSyAyCisjZGVmaW5lIFRDUElfT1BUX1dTQ0FMRSA0CisjZGVmaW5lIFRDUElfT1BUX0VDTiA4CisKK2VudW0gdGNwX2NhX3N0YXRlCit7CisgVENQX0NBX09wZW4gPSAwLAorI2RlZmluZSBUQ1BGX0NBX09wZW4gKDE8PFRDUF9DQV9PcGVuKQorIFRDUF9DQV9EaXNvcmRlciA9IDEsCisjZGVmaW5lIFRDUEZfQ0FfRGlzb3JkZXIgKDE8PFRDUF9DQV9EaXNvcmRlcikKKyBUQ1BfQ0FfQ1dSID0gMiwKKyNkZWZpbmUgVENQRl9DQV9DV1IgKDE8PFRDUF9DQV9DV1IpCisgVENQX0NBX1JlY292ZXJ5ID0gMywKKyNkZWZpbmUgVENQRl9DQV9SZWNvdmVyeSAoMTw8VENQX0NBX1JlY292ZXJ5KQorIFRDUF9DQV9Mb3NzID0gNAorI2RlZmluZSBUQ1BGX0NBX0xvc3MgKDE8PFRDUF9DQV9Mb3NzKQorfTsKKworc3RydWN0IHRjcF9pbmZvCit7CisgX191OCB0Y3BpX3N0YXRlOworIF9fdTggdGNwaV9jYV9zdGF0ZTsKKyBfX3U4IHRjcGlfcmV0cmFuc21pdHM7CisgX191OCB0Y3BpX3Byb2JlczsKKyBfX3U4IHRjcGlfYmFja29mZjsKKyBfX3U4IHRjcGlfb3B0aW9uczsKKyBfX3U4IHRjcGlfc25kX3dzY2FsZSA6IDQsIHRjcGlfcmN2X3dzY2FsZSA6IDQ7CisKKyBfX3UzMiB0Y3BpX3J0bzsKKyBfX3UzMiB0Y3BpX2F0bzsKKyBfX3UzMiB0Y3BpX3NuZF9tc3M7CisgX191MzIgdGNwaV9yY3ZfbXNzOworCisgX191MzIgdGNwaV91bmFja2VkOworIF9fdTMyIHRjcGlfc2Fja2VkOworIF9fdTMyIHRjcGlfbG9zdDsKKyBfX3UzMiB0Y3BpX3JldHJhbnM7CisgX191MzIgdGNwaV9mYWNrZXRzOworCisgX191MzIgdGNwaV9sYXN0X2RhdGFfc2VudDsKKyBfX3UzMiB0Y3BpX2xhc3RfYWNrX3NlbnQ7CisgX191MzIgdGNwaV9sYXN0X2RhdGFfcmVjdjsKKyBfX3UzMiB0Y3BpX2xhc3RfYWNrX3JlY3Y7CisKKyBfX3UzMiB0Y3BpX3BtdHU7CisgX191MzIgdGNwaV9yY3Zfc3N0aHJlc2g7CisgX191MzIgdGNwaV9ydHQ7CisgX191MzIgdGNwaV9ydHR2YXI7CisgX191MzIgdGNwaV9zbmRfc3N0aHJlc2g7CisgX191MzIgdGNwaV9zbmRfY3duZDsKKyBfX3UzMiB0Y3BpX2Fkdm1zczsKKyBfX3UzMiB0Y3BpX3Jlb3JkZXJpbmc7CisKKyBfX3UzMiB0Y3BpX3Jjdl9ydHQ7CisgX191MzIgdGNwaV9yY3Zfc3BhY2U7CisKKyBfX3UzMiB0Y3BpX3RvdGFsX3JldHJhbnM7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90ZWxlcGhvbnkuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90ZWxlcGhvbnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzFkODNkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3RlbGVwaG9ueS5oCkBAIC0wLDAgKzEsMTcyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIFRFTEVQSE9OWV9ICisjZGVmaW5lIFRFTEVQSE9OWV9ICisKKyNkZWZpbmUgVEVMRVBIT05ZX1ZFUlNJT04gMzAxMworCisjZGVmaW5lIFBIT05FX1ZFTkRPUl9JWEogMQorI2RlZmluZSBQSE9ORV9WRU5ET1JfUVVJQ0tORVQgUEhPTkVfVkVORE9SX0lYSgorI2RlZmluZSBQSE9ORV9WRU5ET1JfVk9JQ0VUUk9OSVggMgorI2RlZmluZSBQSE9ORV9WRU5ET1JfQUNVTEFCIDMKKyNkZWZpbmUgUEhPTkVfVkVORE9SX0RJR0kgNAorI2RlZmluZSBQSE9ORV9WRU5ET1JfRlJBTktMSU4gNQorCisjZGVmaW5lIFFUSV9QSE9ORUpBQ0sgMTAwCisjZGVmaW5lIFFUSV9MSU5FSkFDSyAzMDAKKyNkZWZpbmUgUVRJX1BIT05FSkFDS19MSVRFIDQwMAorI2RlZmluZSBRVElfUEhPTkVKQUNLX1BDSSA1MDAKKyNkZWZpbmUgUVRJX1BIT05FQ0FSRCA2MDAKKwordHlwZWRlZiBlbnVtIHsKKyB2ZW5kb3IgPSAwLAorIGRldmljZSwKKyBwb3J0LAorIGNvZGVjLAorIGRzcAorfSBwaG9uZV9jYXA7CisKK3N0cnVjdCBwaG9uZV9jYXBhYmlsaXR5IHsKKyBjaGFyIGRlc2NbODBdOworIHBob25lX2NhcCBjYXB0eXBlOworIGludCBjYXA7CisgaW50IGhhbmRsZTsKK307CisKK3R5cGVkZWYgZW51bSB7CisgcG90cyA9IDAsCisgcHN0biwKKyBoYW5kc2V0LAorIHNwZWFrZXIKK30gcGhvbmVfcG9ydHM7CisKKyNkZWZpbmUgUEhPTkVfQ0FQQUJJTElUSUVTIF9JTyAoJ3EnLCAweDgwKQorI2RlZmluZSBQSE9ORV9DQVBBQklMSVRJRVNfTElTVCBfSU9SICgncScsIDB4ODEsIHN0cnVjdCBwaG9uZV9jYXBhYmlsaXR5ICopCisjZGVmaW5lIFBIT05FX0NBUEFCSUxJVElFU19DSEVDSyBfSU9XICgncScsIDB4ODIsIHN0cnVjdCBwaG9uZV9jYXBhYmlsaXR5ICopCisKK3R5cGVkZWYgc3RydWN0IHsKKyBjaGFyIG1vbnRoWzNdOworIGNoYXIgZGF5WzNdOworIGNoYXIgaG91clszXTsKKyBjaGFyIG1pblszXTsKKyBpbnQgbnVtbGVuOworIGNoYXIgbnVtYmVyWzExXTsKKyBpbnQgbmFtZWxlbjsKKyBjaGFyIG5hbWVbODBdOworfSBQSE9ORV9DSUQ7CisKKyNkZWZpbmUgUEhPTkVfUklORyBfSU8gKCdxJywgMHg4MykKKyNkZWZpbmUgUEhPTkVfSE9PS1NUQVRFIF9JTyAoJ3EnLCAweDg0KQorI2RlZmluZSBQSE9ORV9NQVhSSU5HUyBfSU9XICgncScsIDB4ODUsIGNoYXIpCisjZGVmaW5lIFBIT05FX1JJTkdfQ0FERU5DRSBfSU9XICgncScsIDB4ODYsIHNob3J0KQorI2RlZmluZSBPTERfUEhPTkVfUklOR19TVEFSVCBfSU8gKCdxJywgMHg4NykKKyNkZWZpbmUgUEhPTkVfUklOR19TVEFSVCBfSU9XICgncScsIDB4ODcsIFBIT05FX0NJRCAqKQorI2RlZmluZSBQSE9ORV9SSU5HX1NUT1AgX0lPICgncScsIDB4ODgpCisKKyNkZWZpbmUgVVNBX1JJTkdfQ0FERU5DRSAweEMwQzAKKworI2RlZmluZSBQSE9ORV9SRUNfQ09ERUMgX0lPVyAoJ3EnLCAweDg5LCBpbnQpCisjZGVmaW5lIFBIT05FX1JFQ19TVEFSVCBfSU8gKCdxJywgMHg4QSkKKyNkZWZpbmUgUEhPTkVfUkVDX1NUT1AgX0lPICgncScsIDB4OEIpCisjZGVmaW5lIFBIT05FX1JFQ19ERVBUSCBfSU9XICgncScsIDB4OEMsIGludCkKKyNkZWZpbmUgUEhPTkVfRlJBTUUgX0lPVyAoJ3EnLCAweDhELCBpbnQpCisjZGVmaW5lIFBIT05FX1JFQ19WT0xVTUUgX0lPVyAoJ3EnLCAweDhFLCBpbnQpCisjZGVmaW5lIFBIT05FX1JFQ19WT0xVTUVfTElORUFSIF9JT1cgKCdxJywgMHhEQiwgaW50KQorI2RlZmluZSBQSE9ORV9SRUNfTEVWRUwgX0lPICgncScsIDB4OEYpCisKKyNkZWZpbmUgUEhPTkVfUExBWV9DT0RFQyBfSU9XICgncScsIDB4OTAsIGludCkKKyNkZWZpbmUgUEhPTkVfUExBWV9TVEFSVCBfSU8gKCdxJywgMHg5MSkKKyNkZWZpbmUgUEhPTkVfUExBWV9TVE9QIF9JTyAoJ3EnLCAweDkyKQorI2RlZmluZSBQSE9ORV9QTEFZX0RFUFRIIF9JT1cgKCdxJywgMHg5MywgaW50KQorI2RlZmluZSBQSE9ORV9QTEFZX1ZPTFVNRSBfSU9XICgncScsIDB4OTQsIGludCkKKyNkZWZpbmUgUEhPTkVfUExBWV9WT0xVTUVfTElORUFSIF9JT1cgKCdxJywgMHhEQywgaW50KQorI2RlZmluZSBQSE9ORV9QTEFZX0xFVkVMIF9JTyAoJ3EnLCAweDk1KQorI2RlZmluZSBQSE9ORV9EVE1GX1JFQURZIF9JT1IgKCdxJywgMHg5NiwgaW50KQorI2RlZmluZSBQSE9ORV9HRVRfRFRNRiBfSU9SICgncScsIDB4OTcsIGludCkKKyNkZWZpbmUgUEhPTkVfR0VUX0RUTUZfQVNDSUkgX0lPUiAoJ3EnLCAweDk4LCBpbnQpCisjZGVmaW5lIFBIT05FX0RUTUZfT09CIF9JT1cgKCdxJywgMHg5OSwgaW50KQorI2RlZmluZSBQSE9ORV9FWENFUFRJT04gX0lPUiAoJ3EnLCAweDlBLCBpbnQpCisjZGVmaW5lIFBIT05FX1BMQVlfVE9ORSBfSU9XICgncScsIDB4OUIsIGNoYXIpCisjZGVmaW5lIFBIT05FX1NFVF9UT05FX09OX1RJTUUgX0lPVyAoJ3EnLCAweDlDLCBpbnQpCisjZGVmaW5lIFBIT05FX1NFVF9UT05FX09GRl9USU1FIF9JT1cgKCdxJywgMHg5RCwgaW50KQorI2RlZmluZSBQSE9ORV9HRVRfVE9ORV9PTl9USU1FIF9JTyAoJ3EnLCAweDlFKQorI2RlZmluZSBQSE9ORV9HRVRfVE9ORV9PRkZfVElNRSBfSU8gKCdxJywgMHg5RikKKyNkZWZpbmUgUEhPTkVfR0VUX1RPTkVfU1RBVEUgX0lPICgncScsIDB4QTApCisjZGVmaW5lIFBIT05FX0JVU1kgX0lPICgncScsIDB4QTEpCisjZGVmaW5lIFBIT05FX1JJTkdCQUNLIF9JTyAoJ3EnLCAweEEyKQorI2RlZmluZSBQSE9ORV9ESUFMVE9ORSBfSU8gKCdxJywgMHhBMykKKyNkZWZpbmUgUEhPTkVfQ1BUX1NUT1AgX0lPICgncScsIDB4QTQpCisKKyNkZWZpbmUgUEhPTkVfUFNUTl9TRVRfU1RBVEUgX0lPVyAoJ3EnLCAweEE0LCBpbnQpCisjZGVmaW5lIFBIT05FX1BTVE5fR0VUX1NUQVRFIF9JTyAoJ3EnLCAweEE1KQorCisjZGVmaW5lIFBTVE5fT05fSE9PSyAwCisjZGVmaW5lIFBTVE5fUklOR0lORyAxCisjZGVmaW5lIFBTVE5fT0ZGX0hPT0sgMgorI2RlZmluZSBQU1ROX1BVTFNFX0RJQUwgMworCisjZGVmaW5lIFBIT05FX1dJTktfRFVSQVRJT04gX0lPVyAoJ3EnLCAweEE2LCBpbnQpCisjZGVmaW5lIFBIT05FX1dJTksgX0lPVyAoJ3EnLCAweEFBLCBpbnQpCisKK3R5cGVkZWYgZW51bSB7CisgRzcyM182MyA9IDEsCisgRzcyM181MyA9IDIsCisgVFM4NSA9IDMsCisgVFM0OCA9IDQsCisgVFM0MSA9IDUsCisgRzcyOCA9IDYsCisgRzcyOSA9IDcsCisgVUxBVyA9IDgsCisgQUxBVyA9IDksCisgTElORUFSMTYgPSAxMCwKKyBMSU5FQVI4ID0gMTEsCisgV1NTID0gMTIsCisgRzcyOUIgPSAxMworfSBwaG9uZV9jb2RlYzsKKworc3RydWN0IHBob25lX2NvZGVjX2RhdGEKK3sKKyBwaG9uZV9jb2RlYyB0eXBlOworIHVuc2lnbmVkIHNob3J0IGJ1Zl9taW4sIGJ1Zl9vcHQsIGJ1Zl9tYXg7Cit9OworCisjZGVmaW5lIFBIT05FX1FVRVJZX0NPREVDIF9JT1dSICgncScsIDB4QTcsIHN0cnVjdCBwaG9uZV9jb2RlY19kYXRhICopCisjZGVmaW5lIFBIT05FX1BTVE5fTElORVRFU1QgX0lPICgncScsIDB4QTgpCisKKyNkZWZpbmUgUEhPTkVfVkFEIF9JT1cgKCdxJywgMHhBOSwgaW50KQorCitzdHJ1Y3QgcGhvbmVfZXhjZXB0Cit7CisgdW5zaWduZWQgaW50IGR0bWZfcmVhZHk6MTsKKyB1bnNpZ25lZCBpbnQgaG9va3N0YXRlOjE7CisgdW5zaWduZWQgaW50IHBzdG5fcmluZzoxOworIHVuc2lnbmVkIGludCBjYWxsZXJfaWQ6MTsKKyB1bnNpZ25lZCBpbnQgcHN0bl93aW5rOjE7CisgdW5zaWduZWQgaW50IGYwOjE7CisgdW5zaWduZWQgaW50IGYxOjE7CisgdW5zaWduZWQgaW50IGYyOjE7CisgdW5zaWduZWQgaW50IGYzOjE7CisgdW5zaWduZWQgaW50IGZsYXNoOjE7CisgdW5zaWduZWQgaW50IGZjMDoxOworIHVuc2lnbmVkIGludCBmYzE6MTsKKyB1bnNpZ25lZCBpbnQgZmMyOjE7CisgdW5zaWduZWQgaW50IGZjMzoxOworIHVuc2lnbmVkIGludCByZXNlcnZlZDoxODsKK307CisKK3VuaW9uIHRlbGVwaG9ueV9leGNlcHRpb24geworIHN0cnVjdCBwaG9uZV9leGNlcHQgYml0czsKKyB1bnNpZ25lZCBpbnQgYnl0ZXM7Cit9OworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3Rlcm1pb3MuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90ZXJtaW9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI4NDM5ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90ZXJtaW9zLmgKQEAgLTAsMCArMSwxOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfVEVSTUlPU19ICisjZGVmaW5lIF9MSU5VWF9URVJNSU9TX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3Rlcm1pb3MuaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdGV4dHNlYXJjaC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3RleHRzZWFyY2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTIxY2RkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3RleHRzZWFyY2guaApAQCAtMCwwICsxLDE1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTElOVVhfVEVYVFNFQVJDSF9ICisjZGVmaW5lIF9fTElOVVhfVEVYVFNFQVJDSF9ICisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3RocmVhZF9pbmZvLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdGhyZWFkX2luZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzRhMWY5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3RocmVhZF9pbmZvLmgKQEAgLTAsMCArMSwyMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfVEhSRUFEX0lORk9fSAorI2RlZmluZSBfTElOVVhfVEhSRUFEX0lORk9fSAorCitzdHJ1Y3QgcmVzdGFydF9ibG9jayB7CisgbG9uZyAoKmZuKShzdHJ1Y3QgcmVzdGFydF9ibG9jayAqKTsKKyB1bnNpZ25lZCBsb25nIGFyZzAsIGFyZzEsIGFyZzIsIGFyZzM7Cit9OworCisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3RocmVhZHMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90aHJlYWRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ4NTg3OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90aHJlYWRzLmgKQEAgLTAsMCArMSwyMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfVEhSRUFEU19ICisjZGVmaW5lIF9MSU5VWF9USFJFQURTX0gKKworI2RlZmluZSBOUl9DUFVTIDEKKworI2RlZmluZSBNSU5fVEhSRUFEU19MRUZUX0ZPUl9ST09UIDQKKworI2RlZmluZSBQSURfTUFYX0RFRkFVTFQgKENPTkZJR19CQVNFX1NNQUxMID8gMHgxMDAwIDogMHg4MDAwKQorCisjZGVmaW5lIFBJRF9NQVhfTElNSVQgKENPTkZJR19CQVNFX1NNQUxMID8gUEFHRV9TSVpFICogOCA6ICAgKHNpemVvZihsb25nKSA+IDQgPyA0ICogMTAyNCAqIDEwMjQgOiBQSURfTUFYX0RFRkFVTFQpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90aW1lLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdGltZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNmU0NDAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdGltZS5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX1RJTUVfSAorI2RlZmluZSBfTElOVVhfVElNRV9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaWZuZGVmIF9TVFJVQ1RfVElNRVNQRUMKKyNkZWZpbmUgX1NUUlVDVF9USU1FU1BFQworc3RydWN0IHRpbWVzcGVjIHsKKyB0aW1lX3QgdHZfc2VjOworIGxvbmcgdHZfbnNlYzsKK307CisjZW5kaWYKKworc3RydWN0IHRpbWV2YWwgeworIHRpbWVfdCB0dl9zZWM7Cisgc3VzZWNvbmRzX3QgdHZfdXNlYzsKK307CisKK3N0cnVjdCB0aW1lem9uZSB7CisgaW50IHR6X21pbnV0ZXN3ZXN0OworIGludCB0el9kc3R0aW1lOworfTsKKworI2RlZmluZSBORkRCSVRTIF9fTkZEQklUUworCisjZGVmaW5lIEZEX1NFVFNJWkUgX19GRF9TRVRTSVpFCisjZGVmaW5lIEZEX1NFVChmZCxmZHNldHApIF9fRkRfU0VUKGZkLGZkc2V0cCkKKyNkZWZpbmUgRkRfQ0xSKGZkLGZkc2V0cCkgX19GRF9DTFIoZmQsZmRzZXRwKQorI2RlZmluZSBGRF9JU1NFVChmZCxmZHNldHApIF9fRkRfSVNTRVQoZmQsZmRzZXRwKQorI2RlZmluZSBGRF9aRVJPKGZkc2V0cCkgX19GRF9aRVJPKGZkc2V0cCkKKworI2RlZmluZSBJVElNRVJfUkVBTCAwCisjZGVmaW5lIElUSU1FUl9WSVJUVUFMIDEKKyNkZWZpbmUgSVRJTUVSX1BST0YgMgorCitzdHJ1Y3QgaXRpbWVyc3BlYyB7Cisgc3RydWN0IHRpbWVzcGVjIGl0X2ludGVydmFsOworIHN0cnVjdCB0aW1lc3BlYyBpdF92YWx1ZTsKK307CisKK3N0cnVjdCBpdGltZXJ2YWwgeworIHN0cnVjdCB0aW1ldmFsIGl0X2ludGVydmFsOworIHN0cnVjdCB0aW1ldmFsIGl0X3ZhbHVlOworfTsKKworI2RlZmluZSBDTE9DS19SRUFMVElNRSAwCisjZGVmaW5lIENMT0NLX01PTk9UT05JQyAxCisjZGVmaW5lIENMT0NLX1BST0NFU1NfQ1BVVElNRV9JRCAyCisjZGVmaW5lIENMT0NLX1RIUkVBRF9DUFVUSU1FX0lEIDMKKworI2RlZmluZSBDTE9DS19TR0lfQ1lDTEUgMTAKKyNkZWZpbmUgTUFYX0NMT0NLUyAxNgorI2RlZmluZSBDTE9DS1NfTUFTSyAoQ0xPQ0tfUkVBTFRJTUUgfCBDTE9DS19NT05PVE9OSUMpCisjZGVmaW5lIENMT0NLU19NT05PIENMT0NLX01PTk9UT05JQworCisjZGVmaW5lIFRJTUVSX0FCU1RJTUUgMHgwMQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90aW1lci5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3RpbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDcxYTc1OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90aW1lci5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX1RJTUVSX0gKKyNkZWZpbmUgX0xJTlVYX1RJTUVSX0gKKworI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorCitzdHJ1Y3QgdHZlY190X2Jhc2VfczsKKworc3RydWN0IHRpbWVyX2xpc3QgeworIHN0cnVjdCBsaXN0X2hlYWQgZW50cnk7CisgdW5zaWduZWQgbG9uZyBleHBpcmVzOworCisgdm9pZCAoKmZ1bmN0aW9uKSh1bnNpZ25lZCBsb25nKTsKKyB1bnNpZ25lZCBsb25nIGRhdGE7CisKKyBzdHJ1Y3QgdHZlY190X2Jhc2VfcyAqYmFzZTsKK307CisKKyNkZWZpbmUgVElNRVJfSU5JVElBTElaRVIoX2Z1bmN0aW9uLCBfZXhwaXJlcywgX2RhdGEpIHsgICAuZnVuY3Rpb24gPSAoX2Z1bmN0aW9uKSwgICAuZXhwaXJlcyA9IChfZXhwaXJlcyksICAgLmRhdGEgPSAoX2RhdGEpLCAgIC5iYXNlID0gJmJvb3RfdHZlY19iYXNlcywgICB9CisKKyNkZWZpbmUgREVGSU5FX1RJTUVSKF9uYW1lLCBfZnVuY3Rpb24sIF9leHBpcmVzLCBfZGF0YSkgICBzdHJ1Y3QgdGltZXJfbGlzdCBfbmFtZSA9ICAgVElNRVJfSU5JVElBTElaRVIoX2Z1bmN0aW9uLCBfZXhwaXJlcywgX2RhdGEpCisKKyNkZWZpbmUgdHJ5X3RvX2RlbF90aW1lcl9zeW5jKHQpIGRlbF90aW1lcih0KQorI2RlZmluZSBkZWxfdGltZXJfc3luYyh0KSBkZWxfdGltZXIodCkKKyNkZWZpbmUgZGVsX3NpbmdsZXNob3RfdGltZXJfc3luYyh0KSBkZWxfdGltZXJfc3luYyh0KQorCitzdHJ1Y3QgaHJ0aW1lcjsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdGltZXMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90aW1lcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhZTQxNWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdGltZXMuaApAQCAtMCwwICsxLDI0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9USU1FU19ICisjZGVmaW5lIF9MSU5VWF9USU1FU19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3QgdG1zIHsKKyBjbG9ja190IHRtc191dGltZTsKKyBjbG9ja190IHRtc19zdGltZTsKKyBjbG9ja190IHRtc19jdXRpbWU7CisgY2xvY2tfdCB0bXNfY3N0aW1lOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdGltZXguaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90aW1leC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0MjQ3MGIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdGltZXguaApAQCAtMCwwICsxLDEwOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfVElNRVhfSAorI2RlZmluZSBfTElOVVhfVElNRVhfSAorCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisKKyNpbmNsdWRlIDxhc20vcGFyYW0uaD4KKworI2RlZmluZSBTSElGVF9LRyA2ICAKKyNkZWZpbmUgU0hJRlRfS0YgMTYgIAorI2RlZmluZSBTSElGVF9LSCAyICAKKyNkZWZpbmUgTUFYVEMgNiAgCisKKyNkZWZpbmUgU0hJRlRfU0NBTEUgMjIgIAorI2RlZmluZSBTSElGVF9VUERBVEUgKFNISUZUX0tHICsgTUFYVEMpICAKKyNkZWZpbmUgU0hJRlRfVVNFQyAxNiAgCisjZGVmaW5lIEZJTkVOU0VDICgxTCA8PCAoU0hJRlRfU0NBTEUgLSAxMCkpICAKKworI2RlZmluZSBNQVhQSEFTRSA1MTIwMDBMICAKKyNkZWZpbmUgTUFYRlJFUSAoNTEyTCA8PCBTSElGVF9VU0VDKSAgCisjZGVmaW5lIE1JTlNFQyAxNkwgIAorI2RlZmluZSBNQVhTRUMgMTIwMEwgIAorI2RlZmluZSBOVFBfUEhBU0VfTElNSVQgKE1BWFBIQVNFIDw8IDUpICAKKworc3RydWN0IHRpbWV4IHsKKyB1bnNpZ25lZCBpbnQgbW9kZXM7CisgbG9uZyBvZmZzZXQ7CisgbG9uZyBmcmVxOworIGxvbmcgbWF4ZXJyb3I7CisgbG9uZyBlc3RlcnJvcjsKKyBpbnQgc3RhdHVzOworIGxvbmcgY29uc3RhbnQ7CisgbG9uZyBwcmVjaXNpb247CisgbG9uZyB0b2xlcmFuY2U7Cisgc3RydWN0IHRpbWV2YWwgdGltZTsKKyBsb25nIHRpY2s7CisKKyBsb25nIHBwc2ZyZXE7CisgbG9uZyBqaXR0ZXI7CisgaW50IHNoaWZ0OworIGxvbmcgc3RhYmlsOworIGxvbmcgaml0Y250OworIGxvbmcgY2FsY250OworIGxvbmcgZXJyY250OworIGxvbmcgc3RiY250OworCisgaW50IDozMjsgaW50IDozMjsgaW50IDozMjsgaW50IDozMjsKKyBpbnQgOjMyOyBpbnQgOjMyOyBpbnQgOjMyOyBpbnQgOjMyOworIGludCA6MzI7IGludCA6MzI7IGludCA6MzI7IGludCA6MzI7Cit9OworCisjZGVmaW5lIEFESl9PRkZTRVQgMHgwMDAxICAKKyNkZWZpbmUgQURKX0ZSRVFVRU5DWSAweDAwMDIgIAorI2RlZmluZSBBREpfTUFYRVJST1IgMHgwMDA0ICAKKyNkZWZpbmUgQURKX0VTVEVSUk9SIDB4MDAwOCAgCisjZGVmaW5lIEFESl9TVEFUVVMgMHgwMDEwICAKKyNkZWZpbmUgQURKX1RJTUVDT05TVCAweDAwMjAgIAorI2RlZmluZSBBREpfVElDSyAweDQwMDAgIAorI2RlZmluZSBBREpfT0ZGU0VUX1NJTkdMRVNIT1QgMHg4MDAxICAKKworI2RlZmluZSBNT0RfT0ZGU0VUIEFESl9PRkZTRVQKKyNkZWZpbmUgTU9EX0ZSRVFVRU5DWSBBREpfRlJFUVVFTkNZCisjZGVmaW5lIE1PRF9NQVhFUlJPUiBBREpfTUFYRVJST1IKKyNkZWZpbmUgTU9EX0VTVEVSUk9SIEFESl9FU1RFUlJPUgorI2RlZmluZSBNT0RfU1RBVFVTIEFESl9TVEFUVVMKKyNkZWZpbmUgTU9EX1RJTUVDT05TVCBBREpfVElNRUNPTlNUCisjZGVmaW5lIE1PRF9DTEtCIEFESl9USUNLCisjZGVmaW5lIE1PRF9DTEtBIEFESl9PRkZTRVRfU0lOR0xFU0hPVCAgCisKKyNkZWZpbmUgU1RBX1BMTCAweDAwMDEgIAorI2RlZmluZSBTVEFfUFBTRlJFUSAweDAwMDIgIAorI2RlZmluZSBTVEFfUFBTVElNRSAweDAwMDQgIAorI2RlZmluZSBTVEFfRkxMIDB4MDAwOCAgCisKKyNkZWZpbmUgU1RBX0lOUyAweDAwMTAgIAorI2RlZmluZSBTVEFfREVMIDB4MDAyMCAgCisjZGVmaW5lIFNUQV9VTlNZTkMgMHgwMDQwICAKKyNkZWZpbmUgU1RBX0ZSRVFIT0xEIDB4MDA4MCAgCisKKyNkZWZpbmUgU1RBX1BQU1NJR05BTCAweDAxMDAgIAorI2RlZmluZSBTVEFfUFBTSklUVEVSIDB4MDIwMCAgCisjZGVmaW5lIFNUQV9QUFNXQU5ERVIgMHgwNDAwICAKKyNkZWZpbmUgU1RBX1BQU0VSUk9SIDB4MDgwMCAgCisKKyNkZWZpbmUgU1RBX0NMT0NLRVJSIDB4MTAwMCAgCisKKyNkZWZpbmUgU1RBX1JPTkxZIChTVEFfUFBTU0lHTkFMIHwgU1RBX1BQU0pJVFRFUiB8IFNUQV9QUFNXQU5ERVIgfCAgIFNUQV9QUFNFUlJPUiB8IFNUQV9DTE9DS0VSUikgIAorCisjZGVmaW5lIFRJTUVfT0sgMCAgCisjZGVmaW5lIFRJTUVfSU5TIDEgIAorI2RlZmluZSBUSU1FX0RFTCAyICAKKyNkZWZpbmUgVElNRV9PT1AgMyAgCisjZGVmaW5lIFRJTUVfV0FJVCA0ICAKKyNkZWZpbmUgVElNRV9FUlJPUiA1ICAKKyNkZWZpbmUgVElNRV9CQUQgVElNRV9FUlJPUiAgCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3Rpb2NsLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdGlvY2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjE1YThkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3Rpb2NsLmgKQEAgLTAsMCArMSw0NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfVElPQ0xfSAorI2RlZmluZSBfTElOVVhfVElPQ0xfSAorCisjZGVmaW5lIFRJT0NMX1NFVFNFTCAyICAKKyNkZWZpbmUgVElPQ0xfU0VMQ0hBUiAwICAKKyNkZWZpbmUgVElPQ0xfU0VMV09SRCAxICAKKyNkZWZpbmUgVElPQ0xfU0VMTElORSAyICAKKyNkZWZpbmUgVElPQ0xfU0VMUE9JTlRFUiAzICAKKyNkZWZpbmUgVElPQ0xfU0VMQ0xFQVIgNCAgCisjZGVmaW5lIFRJT0NMX1NFTE1PVVNFUkVQT1JUIDE2ICAKKyNkZWZpbmUgVElPQ0xfU0VMQlVUVE9OTUFTSyAxNSAgCisKK3N0cnVjdCB0aW9jbF9zZWxlY3Rpb24geworIHVuc2lnbmVkIHNob3J0IHhzOworIHVuc2lnbmVkIHNob3J0IHlzOworIHVuc2lnbmVkIHNob3J0IHhlOworIHVuc2lnbmVkIHNob3J0IHllOworIHVuc2lnbmVkIHNob3J0IHNlbF9tb2RlOworfTsKKworI2RlZmluZSBUSU9DTF9QQVNURVNFTCAzICAKKyNkZWZpbmUgVElPQ0xfVU5CTEFOS1NDUkVFTiA0ICAKKworI2RlZmluZSBUSU9DTF9TRUxMT0FETFVUIDUKKworI2RlZmluZSBUSU9DTF9HRVRTSElGVFNUQVRFIDYgIAorI2RlZmluZSBUSU9DTF9HRVRNT1VTRVJFUE9SVElORyA3ICAKKyNkZWZpbmUgVElPQ0xfU0VUVkVTQUJMQU5LIDEwICAKKyNkZWZpbmUgVElPQ0xfU0VUS01TR1JFRElSRUNUIDExICAKKyNkZWZpbmUgVElPQ0xfR0VURkdDT05TT0xFIDEyICAKKyNkZWZpbmUgVElPQ0xfU0NST0xMQ09OU09MRSAxMyAgCisjZGVmaW5lIFRJT0NMX0JMQU5LU0NSRUVOIDE0ICAKKyNkZWZpbmUgVElPQ0xfQkxBTktFRFNDUkVFTiAxNSAgCisjZGVmaW5lIFRJT0NMX0dFVEtNU0dSRURJUkVDVCAxNyAgCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3RyYW5zcG9ydF9jbGFzcy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3RyYW5zcG9ydF9jbGFzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxYWQwODQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdHJhbnNwb3J0X2NsYXNzLmgKQEAgLTAsMCArMSw0OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfVFJBTlNQT1JUX0NMQVNTX0hfCisjZGVmaW5lIF9UUkFOU1BPUlRfQ0xBU1NfSF8KKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2F0dHJpYnV0ZV9jb250YWluZXIuaD4KKworc3RydWN0IHRyYW5zcG9ydF9jb250YWluZXI7CisKK3N0cnVjdCB0cmFuc3BvcnRfY2xhc3MgeworIHN0cnVjdCBjbGFzcyBjbGFzczsKKyBpbnQgKCpzZXR1cCkoc3RydWN0IHRyYW5zcG9ydF9jb250YWluZXIgKiwgc3RydWN0IGRldmljZSAqLAorIHN0cnVjdCBjbGFzc19kZXZpY2UgKik7CisgaW50ICgqY29uZmlndXJlKShzdHJ1Y3QgdHJhbnNwb3J0X2NvbnRhaW5lciAqLCBzdHJ1Y3QgZGV2aWNlICosCisgc3RydWN0IGNsYXNzX2RldmljZSAqKTsKKyBpbnQgKCpyZW1vdmUpKHN0cnVjdCB0cmFuc3BvcnRfY29udGFpbmVyICosIHN0cnVjdCBkZXZpY2UgKiwKKyBzdHJ1Y3QgY2xhc3NfZGV2aWNlICopOworfTsKKworI2RlZmluZSBERUNMQVJFX1RSQU5TUE9SVF9DTEFTUyhjbHMsIG5tLCBzdSwgcm0sIGNmZykgIHN0cnVjdCB0cmFuc3BvcnRfY2xhc3MgY2xzID0geyAgIC5jbGFzcyA9IHsgICAubmFtZSA9IG5tLCAgIH0sICAgLnNldHVwID0gc3UsICAgLnJlbW92ZSA9IHJtLCAgIC5jb25maWd1cmUgPSBjZmcsICB9CisKK3N0cnVjdCBhbm9uX3RyYW5zcG9ydF9jbGFzcyB7Cisgc3RydWN0IHRyYW5zcG9ydF9jbGFzcyB0Y2xhc3M7Cisgc3RydWN0IGF0dHJpYnV0ZV9jb250YWluZXIgY29udGFpbmVyOworfTsKKworI2RlZmluZSBERUNMQVJFX0FOT05fVFJBTlNQT1JUX0NMQVNTKGNscywgbXRjaCwgY2ZnKSAgc3RydWN0IGFub25fdHJhbnNwb3J0X2NsYXNzIGNscyA9IHsgICAudGNsYXNzID0geyAgIC5jb25maWd1cmUgPSBjZmcsICAgfSwgICAuIGNvbnRhaW5lciA9IHsgICAubWF0Y2ggPSBtdGNoLCAgIH0sICB9CisKKyNkZWZpbmUgY2xhc3NfdG9fdHJhbnNwb3J0X2NsYXNzKHgpICAgY29udGFpbmVyX29mKHgsIHN0cnVjdCB0cmFuc3BvcnRfY2xhc3MsIGNsYXNzKQorCitzdHJ1Y3QgdHJhbnNwb3J0X2NvbnRhaW5lciB7Cisgc3RydWN0IGF0dHJpYnV0ZV9jb250YWluZXIgYWM7Cisgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqc3RhdGlzdGljczsKK307CisKKyNkZWZpbmUgYXR0cmlidXRlX2NvbnRhaW5lcl90b190cmFuc3BvcnRfY29udGFpbmVyKHgpICAgY29udGFpbmVyX29mKHgsIHN0cnVjdCB0cmFuc3BvcnRfY29udGFpbmVyLCBhYykKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdHR5LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdHR5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI4NzkxYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90dHkuaApAQCAtMCwwICsxLDE1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9UVFlfSAorI2RlZmluZSBfTElOVVhfVFRZX0gKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdHlwZXMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMThkYjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdHlwZXMuaApAQCAtMCwwICsxLDM3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9UWVBFU19ICisjZGVmaW5lIF9MSU5VWF9UWVBFU19ICisKKyNpbmNsdWRlIDxsaW51eC9wb3NpeF90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCisjZGVmaW5lIF9fYml0d2lzZV9fCisjZGVmaW5lIF9fYml0d2lzZQorCit0eXBlZGVmIF9fdTE2IF9fYml0d2lzZSBfX2xlMTY7Cit0eXBlZGVmIF9fdTE2IF9fYml0d2lzZSBfX2JlMTY7Cit0eXBlZGVmIF9fdTMyIF9fYml0d2lzZSBfX2xlMzI7Cit0eXBlZGVmIF9fdTMyIF9fYml0d2lzZSBfX2JlMzI7CisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoX19TVFJJQ1RfQU5TSV9fKQordHlwZWRlZiBfX3U2NCBfX2JpdHdpc2UgX19sZTY0OwordHlwZWRlZiBfX3U2NCBfX2JpdHdpc2UgX19iZTY0OworI2VuZGlmCisKK3N0cnVjdCB1c3RhdCB7CisgX19rZXJuZWxfZGFkZHJfdCBmX3RmcmVlOworIF9fa2VybmVsX2lub190IGZfdGlub2RlOworIGNoYXIgZl9mbmFtZVs2XTsKKyBjaGFyIGZfZnBhY2tbNl07Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC91ZHAuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC91ZHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGJmODY0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3VkcC5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX1VEUF9ICisjZGVmaW5lIF9MSU5VWF9VRFBfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IHVkcGhkciB7CisgX191MTYgc291cmNlOworIF9fdTE2IGRlc3Q7CisgX191MTYgbGVuOworIF9fdTE2IGNoZWNrOworfTsKKworI2RlZmluZSBVRFBfQ09SSyAxICAKKyNkZWZpbmUgVURQX0VOQ0FQIDEwMCAgCisKKyNkZWZpbmUgVURQX0VOQ0FQX0VTUElOVURQX05PTl9JS0UgMSAgCisjZGVmaW5lIFVEUF9FTkNBUF9FU1BJTlVEUCAyICAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdWZzX2ZzX2kuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC91ZnNfZnNfaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3MWFkYjYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdWZzX2ZzX2kuaApAQCAtMCwwICsxLDMzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9VRlNfRlNfSV9ICisjZGVmaW5lIF9MSU5VWF9VRlNfRlNfSV9ICisKK3N0cnVjdCB1ZnNfaW5vZGVfaW5mbyB7CisgdW5pb24geworIF9fZnMzMiBpX2RhdGFbMTVdOworIF9fdTggaV9zeW1saW5rWzQqMTVdOworIF9fZnM2NCB1Ml9pX2RhdGFbMTVdOworIH0gaV91MTsKKyBfX3UzMiBpX2ZsYWdzOworIF9fdTMyIGlfZ2VuOworIF9fdTMyIGlfc2hhZG93OworIF9fdTMyIGlfdW51c2VkMTsKKyBfX3UzMiBpX3VudXNlZDI7CisgX191MzIgaV9vZWZ0ZmxhZzsKKyBfX3UxNiBpX29zeW5jOworIF9fdTMyIGlfbGFzdGZyYWc7CisgX191MzIgaV9kaXJfc3RhcnRfbG9va3VwOworIHN0cnVjdCBpbm9kZSB2ZnNfaW5vZGU7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC91ZnNfZnNfc2IuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC91ZnNfZnNfc2IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzcyMjZkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3Vmc19mc19zYi5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19MSU5VWF9VRlNfRlNfU0JfSAorI2RlZmluZSBfX0xJTlVYX1VGU19GU19TQl9ICisKKyNkZWZpbmUgVUZTX01BWF9HUk9VUF9MT0FERUQgOAorI2RlZmluZSBVRlNfQ0dOT19FTVBUWSAoKHVuc2lnbmVkKS0xKQorCitzdHJ1Y3QgdWZzX3NiX3ByaXZhdGVfaW5mbzsKK3N0cnVjdCB1ZnNfY2dfcHJpdmF0ZV9pbmZvOworc3RydWN0IHVmc19jc3VtOworI2RlZmluZSBVRlNfTUFYQ1NCVUZTIDMxCisKK3N0cnVjdCB1ZnNfc2JfaW5mbyB7Cisgc3RydWN0IHVmc19zYl9wcml2YXRlX2luZm8gKiBzX3VzcGk7Cisgc3RydWN0IHVmc19jc3VtICogc19jc3A7CisgdW5zaWduZWQgc19ieXRlc2V4OworIHVuc2lnbmVkIHNfZmxhZ3M7Cisgc3RydWN0IGJ1ZmZlcl9oZWFkICoqIHNfdWNnOworIHN0cnVjdCB1ZnNfY2dfcHJpdmF0ZV9pbmZvICogc191Y3BpW1VGU19NQVhfR1JPVVBfTE9BREVEXTsKKyB1bnNpZ25lZCBzX2Nnbm9bVUZTX01BWF9HUk9VUF9MT0FERURdOworIHVuc2lnbmVkIHNob3J0IHNfY2dfbG9hZGVkOworIHVuc2lnbmVkIHNfbW91bnRfb3B0OworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdWlvLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdWlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA4OTVhZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC91aW8uaApAQCAtMCwwICsxLDI3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTElOVVhfVUlPX0gKKyNkZWZpbmUgX19MSU5VWF9VSU9fSAorCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3QgaW92ZWMKK3sKKyB2b2lkIF9fdXNlciAqaW92X2Jhc2U7CisgX19rZXJuZWxfc2l6ZV90IGlvdl9sZW47Cit9OworCisjZGVmaW5lIFVJT19GQVNUSU9WIDgKKyNkZWZpbmUgVUlPX01BWElPViAxMDI0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3VuLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjUxYjdjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3VuLmgKQEAgLTAsMCArMSwyMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfVU5fSAorI2RlZmluZSBfTElOVVhfVU5fSAorCisjZGVmaW5lIFVOSVhfUEFUSF9NQVggMTA4CisKK3N0cnVjdCBzb2NrYWRkcl91biB7Cisgc2FfZmFtaWx5X3Qgc3VuX2ZhbWlseTsKKyBjaGFyIHN1bl9wYXRoW1VOSVhfUEFUSF9NQVhdOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdW5pc3RkLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdW5pc3RkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmEzZWM0YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC91bmlzdGQuaApAQCAtMCwwICsxLDE3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9VTklTVERfSF8KKyNkZWZpbmUgX0xJTlVYX1VOSVNURF9IXworCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC91c2IuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC91c2IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWVlMTk0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3VzYi5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19MSU5VWF9VU0JfSAorI2RlZmluZSBfX0xJTlVYX1VTQl9ICisKKyNpbmNsdWRlIDxsaW51eC9tb2RfZGV2aWNldGFibGUuaD4KKyNpbmNsdWRlIDxsaW51eC91c2JfY2g5Lmg+CisKKyNkZWZpbmUgVVNCX01BSk9SIDE4MAorI2RlZmluZSBVU0JfREVWSUNFX01BSk9SIDE4OQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC91c2JfY2g5LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdXNiX2NoOS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0ZTMxZTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdXNiX2NoOS5oCkBAIC0wLDAgKzEsMzg4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTElOVVhfVVNCX0NIOV9ICisjZGVmaW5lIF9fTElOVVhfVVNCX0NIOV9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPiAgCisKKyNkZWZpbmUgVVNCX0RJUl9PVVQgMCAgCisjZGVmaW5lIFVTQl9ESVJfSU4gMHg4MCAgCisKKyNkZWZpbmUgVVNCX1RZUEVfTUFTSyAoMHgwMyA8PCA1KQorI2RlZmluZSBVU0JfVFlQRV9TVEFOREFSRCAoMHgwMCA8PCA1KQorI2RlZmluZSBVU0JfVFlQRV9DTEFTUyAoMHgwMSA8PCA1KQorI2RlZmluZSBVU0JfVFlQRV9WRU5ET1IgKDB4MDIgPDwgNSkKKyNkZWZpbmUgVVNCX1RZUEVfUkVTRVJWRUQgKDB4MDMgPDwgNSkKKworI2RlZmluZSBVU0JfUkVDSVBfTUFTSyAweDFmCisjZGVmaW5lIFVTQl9SRUNJUF9ERVZJQ0UgMHgwMAorI2RlZmluZSBVU0JfUkVDSVBfSU5URVJGQUNFIDB4MDEKKyNkZWZpbmUgVVNCX1JFQ0lQX0VORFBPSU5UIDB4MDIKKyNkZWZpbmUgVVNCX1JFQ0lQX09USEVSIDB4MDMKKworI2RlZmluZSBVU0JfUkVDSVBfUE9SVCAweDA0CisjZGVmaW5lIFVTQl9SRUNJUF9SUElQRSAweDA1CisKKyNkZWZpbmUgVVNCX1JFUV9HRVRfU1RBVFVTIDB4MDAKKyNkZWZpbmUgVVNCX1JFUV9DTEVBUl9GRUFUVVJFIDB4MDEKKyNkZWZpbmUgVVNCX1JFUV9TRVRfRkVBVFVSRSAweDAzCisjZGVmaW5lIFVTQl9SRVFfU0VUX0FERFJFU1MgMHgwNQorI2RlZmluZSBVU0JfUkVRX0dFVF9ERVNDUklQVE9SIDB4MDYKKyNkZWZpbmUgVVNCX1JFUV9TRVRfREVTQ1JJUFRPUiAweDA3CisjZGVmaW5lIFVTQl9SRVFfR0VUX0NPTkZJR1VSQVRJT04gMHgwOAorI2RlZmluZSBVU0JfUkVRX1NFVF9DT05GSUdVUkFUSU9OIDB4MDkKKyNkZWZpbmUgVVNCX1JFUV9HRVRfSU5URVJGQUNFIDB4MEEKKyNkZWZpbmUgVVNCX1JFUV9TRVRfSU5URVJGQUNFIDB4MEIKKyNkZWZpbmUgVVNCX1JFUV9TWU5DSF9GUkFNRSAweDBDCisKKyNkZWZpbmUgVVNCX1JFUV9TRVRfRU5DUllQVElPTiAweDBEICAKKyNkZWZpbmUgVVNCX1JFUV9HRVRfRU5DUllQVElPTiAweDBFCisjZGVmaW5lIFVTQl9SRVFfUlBJUEVfQUJPUlQgMHgwRQorI2RlZmluZSBVU0JfUkVRX1NFVF9IQU5EU0hBS0UgMHgwRgorI2RlZmluZSBVU0JfUkVRX1JQSVBFX1JFU0VUIDB4MEYKKyNkZWZpbmUgVVNCX1JFUV9HRVRfSEFORFNIQUtFIDB4MTAKKyNkZWZpbmUgVVNCX1JFUV9TRVRfQ09OTkVDVElPTiAweDExCisjZGVmaW5lIFVTQl9SRVFfU0VUX1NFQ1VSSVRZX0RBVEEgMHgxMgorI2RlZmluZSBVU0JfUkVRX0dFVF9TRUNVUklUWV9EQVRBIDB4MTMKKyNkZWZpbmUgVVNCX1JFUV9TRVRfV1VTQl9EQVRBIDB4MTQKKyNkZWZpbmUgVVNCX1JFUV9MT09QQkFDS19EQVRBX1dSSVRFIDB4MTUKKyNkZWZpbmUgVVNCX1JFUV9MT09QQkFDS19EQVRBX1JFQUQgMHgxNgorI2RlZmluZSBVU0JfUkVRX1NFVF9JTlRFUkZBQ0VfRFMgMHgxNworCisjZGVmaW5lIFVTQl9ERVZJQ0VfU0VMRl9QT1dFUkVEIDAgIAorI2RlZmluZSBVU0JfREVWSUNFX1JFTU9URV9XQUtFVVAgMSAgCisjZGVmaW5lIFVTQl9ERVZJQ0VfVEVTVF9NT0RFIDIgIAorI2RlZmluZSBVU0JfREVWSUNFX0JBVFRFUlkgMiAgCisjZGVmaW5lIFVTQl9ERVZJQ0VfQl9ITlBfRU5BQkxFIDMgIAorI2RlZmluZSBVU0JfREVWSUNFX1dVU0JfREVWSUNFIDMgIAorI2RlZmluZSBVU0JfREVWSUNFX0FfSE5QX1NVUFBPUlQgNCAgCisjZGVmaW5lIFVTQl9ERVZJQ0VfQV9BTFRfSE5QX1NVUFBPUlQgNSAgCisjZGVmaW5lIFVTQl9ERVZJQ0VfREVCVUdfTU9ERSA2ICAKKworI2RlZmluZSBVU0JfRU5EUE9JTlRfSEFMVCAwICAKKworc3RydWN0IHVzYl9jdHJscmVxdWVzdCB7CisgX191OCBiUmVxdWVzdFR5cGU7CisgX191OCBiUmVxdWVzdDsKKyBfX2xlMTYgd1ZhbHVlOworIF9fbGUxNiB3SW5kZXg7CisgX19sZTE2IHdMZW5ndGg7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2RlZmluZSBVU0JfRFRfREVWSUNFIDB4MDEKKyNkZWZpbmUgVVNCX0RUX0NPTkZJRyAweDAyCisjZGVmaW5lIFVTQl9EVF9TVFJJTkcgMHgwMworI2RlZmluZSBVU0JfRFRfSU5URVJGQUNFIDB4MDQKKyNkZWZpbmUgVVNCX0RUX0VORFBPSU5UIDB4MDUKKyNkZWZpbmUgVVNCX0RUX0RFVklDRV9RVUFMSUZJRVIgMHgwNgorI2RlZmluZSBVU0JfRFRfT1RIRVJfU1BFRURfQ09ORklHIDB4MDcKKyNkZWZpbmUgVVNCX0RUX0lOVEVSRkFDRV9QT1dFUiAweDA4CisKKyNkZWZpbmUgVVNCX0RUX09URyAweDA5CisjZGVmaW5lIFVTQl9EVF9ERUJVRyAweDBhCisjZGVmaW5lIFVTQl9EVF9JTlRFUkZBQ0VfQVNTT0NJQVRJT04gMHgwYgorCisjZGVmaW5lIFVTQl9EVF9TRUNVUklUWSAweDBjCisjZGVmaW5lIFVTQl9EVF9LRVkgMHgwZAorI2RlZmluZSBVU0JfRFRfRU5DUllQVElPTl9UWVBFIDB4MGUKKyNkZWZpbmUgVVNCX0RUX0JPUyAweDBmCisjZGVmaW5lIFVTQl9EVF9ERVZJQ0VfQ0FQQUJJTElUWSAweDEwCisjZGVmaW5lIFVTQl9EVF9XSVJFTEVTU19FTkRQT0lOVF9DT01QIDB4MTEKKyNkZWZpbmUgVVNCX0RUX1dJUkVfQURBUFRFUiAweDIxCisjZGVmaW5lIFVTQl9EVF9SUElQRSAweDIyCisKKyNkZWZpbmUgVVNCX0RUX0NTX0RFVklDRSAweDIxCisjZGVmaW5lIFVTQl9EVF9DU19DT05GSUcgMHgyMgorI2RlZmluZSBVU0JfRFRfQ1NfU1RSSU5HIDB4MjMKKyNkZWZpbmUgVVNCX0RUX0NTX0lOVEVSRkFDRSAweDI0CisjZGVmaW5lIFVTQl9EVF9DU19FTkRQT0lOVCAweDI1CisKK3N0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgeworIF9fdTggYkxlbmd0aDsKKyBfX3U4IGJEZXNjcmlwdG9yVHlwZTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgdXNiX2RldmljZV9kZXNjcmlwdG9yIHsKKyBfX3U4IGJMZW5ndGg7CisgX191OCBiRGVzY3JpcHRvclR5cGU7CisKKyBfX2xlMTYgYmNkVVNCOworIF9fdTggYkRldmljZUNsYXNzOworIF9fdTggYkRldmljZVN1YkNsYXNzOworIF9fdTggYkRldmljZVByb3RvY29sOworIF9fdTggYk1heFBhY2tldFNpemUwOworIF9fbGUxNiBpZFZlbmRvcjsKKyBfX2xlMTYgaWRQcm9kdWN0OworIF9fbGUxNiBiY2REZXZpY2U7CisgX191OCBpTWFudWZhY3R1cmVyOworIF9fdTggaVByb2R1Y3Q7CisgX191OCBpU2VyaWFsTnVtYmVyOworIF9fdTggYk51bUNvbmZpZ3VyYXRpb25zOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgVVNCX0RUX0RFVklDRV9TSVpFIDE4CisKKyNkZWZpbmUgVVNCX0NMQVNTX1BFUl9JTlRFUkZBQ0UgMCAgCisjZGVmaW5lIFVTQl9DTEFTU19BVURJTyAxCisjZGVmaW5lIFVTQl9DTEFTU19DT01NIDIKKyNkZWZpbmUgVVNCX0NMQVNTX0hJRCAzCisjZGVmaW5lIFVTQl9DTEFTU19QSFlTSUNBTCA1CisjZGVmaW5lIFVTQl9DTEFTU19TVElMTF9JTUFHRSA2CisjZGVmaW5lIFVTQl9DTEFTU19QUklOVEVSIDcKKyNkZWZpbmUgVVNCX0NMQVNTX01BU1NfU1RPUkFHRSA4CisjZGVmaW5lIFVTQl9DTEFTU19IVUIgOQorI2RlZmluZSBVU0JfQ0xBU1NfQ0RDX0RBVEEgMHgwYQorI2RlZmluZSBVU0JfQ0xBU1NfQ1NDSUQgMHgwYiAgCisjZGVmaW5lIFVTQl9DTEFTU19DT05URU5UX1NFQyAweDBkICAKKyNkZWZpbmUgVVNCX0NMQVNTX1ZJREVPIDB4MGUKKyNkZWZpbmUgVVNCX0NMQVNTX1dJUkVMRVNTX0NPTlRST0xMRVIgMHhlMAorI2RlZmluZSBVU0JfQ0xBU1NfQVBQX1NQRUMgMHhmZQorI2RlZmluZSBVU0JfQ0xBU1NfVkVORE9SX1NQRUMgMHhmZgorCitzdHJ1Y3QgdXNiX2NvbmZpZ19kZXNjcmlwdG9yIHsKKyBfX3U4IGJMZW5ndGg7CisgX191OCBiRGVzY3JpcHRvclR5cGU7CisKKyBfX2xlMTYgd1RvdGFsTGVuZ3RoOworIF9fdTggYk51bUludGVyZmFjZXM7CisgX191OCBiQ29uZmlndXJhdGlvblZhbHVlOworIF9fdTggaUNvbmZpZ3VyYXRpb247CisgX191OCBibUF0dHJpYnV0ZXM7CisgX191OCBiTWF4UG93ZXI7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2RlZmluZSBVU0JfRFRfQ09ORklHX1NJWkUgOQorCisjZGVmaW5lIFVTQl9DT05GSUdfQVRUX09ORSAoMSA8PCA3KSAgCisjZGVmaW5lIFVTQl9DT05GSUdfQVRUX1NFTEZQT1dFUiAoMSA8PCA2KSAgCisjZGVmaW5lIFVTQl9DT05GSUdfQVRUX1dBS0VVUCAoMSA8PCA1KSAgCisjZGVmaW5lIFVTQl9DT05GSUdfQVRUX0JBVFRFUlkgKDEgPDwgNCkgIAorCitzdHJ1Y3QgdXNiX3N0cmluZ19kZXNjcmlwdG9yIHsKKyBfX3U4IGJMZW5ndGg7CisgX191OCBiRGVzY3JpcHRvclR5cGU7CisKKyBfX2xlMTYgd0RhdGFbMV07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciB7CisgX191OCBiTGVuZ3RoOworIF9fdTggYkRlc2NyaXB0b3JUeXBlOworCisgX191OCBiSW50ZXJmYWNlTnVtYmVyOworIF9fdTggYkFsdGVybmF0ZVNldHRpbmc7CisgX191OCBiTnVtRW5kcG9pbnRzOworIF9fdTggYkludGVyZmFjZUNsYXNzOworIF9fdTggYkludGVyZmFjZVN1YkNsYXNzOworIF9fdTggYkludGVyZmFjZVByb3RvY29sOworIF9fdTggaUludGVyZmFjZTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIFVTQl9EVF9JTlRFUkZBQ0VfU0laRSA5CisKK3N0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciB7CisgX191OCBiTGVuZ3RoOworIF9fdTggYkRlc2NyaXB0b3JUeXBlOworCisgX191OCBiRW5kcG9pbnRBZGRyZXNzOworIF9fdTggYm1BdHRyaWJ1dGVzOworIF9fbGUxNiB3TWF4UGFja2V0U2l6ZTsKKyBfX3U4IGJJbnRlcnZhbDsKKworIF9fdTggYlJlZnJlc2g7CisgX191OCBiU3luY2hBZGRyZXNzOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgVVNCX0RUX0VORFBPSU5UX1NJWkUgNworI2RlZmluZSBVU0JfRFRfRU5EUE9JTlRfQVVESU9fU0laRSA5ICAKKworI2RlZmluZSBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0sgMHgwZiAgCisjZGVmaW5lIFVTQl9FTkRQT0lOVF9ESVJfTUFTSyAweDgwCisKKyNkZWZpbmUgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0sgMHgwMyAgCisjZGVmaW5lIFVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0wgMAorI2RlZmluZSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DIDEKKyNkZWZpbmUgVVNCX0VORFBPSU5UX1hGRVJfQlVMSyAyCisjZGVmaW5lIFVTQl9FTkRQT0lOVF9YRkVSX0lOVCAzCisjZGVmaW5lIFVTQl9FTkRQT0lOVF9NQVhfQURKVVNUQUJMRSAweDgwCisKK3N0cnVjdCB1c2JfcXVhbGlmaWVyX2Rlc2NyaXB0b3IgeworIF9fdTggYkxlbmd0aDsKKyBfX3U4IGJEZXNjcmlwdG9yVHlwZTsKKworIF9fbGUxNiBiY2RVU0I7CisgX191OCBiRGV2aWNlQ2xhc3M7CisgX191OCBiRGV2aWNlU3ViQ2xhc3M7CisgX191OCBiRGV2aWNlUHJvdG9jb2w7CisgX191OCBiTWF4UGFja2V0U2l6ZTA7CisgX191OCBiTnVtQ29uZmlndXJhdGlvbnM7CisgX191OCBiUkVTRVJWRUQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHVzYl9vdGdfZGVzY3JpcHRvciB7CisgX191OCBiTGVuZ3RoOworIF9fdTggYkRlc2NyaXB0b3JUeXBlOworCisgX191OCBibUF0dHJpYnV0ZXM7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2RlZmluZSBVU0JfT1RHX1NSUCAoMSA8PCAwKQorI2RlZmluZSBVU0JfT1RHX0hOUCAoMSA8PCAxKSAgCisKK3N0cnVjdCB1c2JfZGVidWdfZGVzY3JpcHRvciB7CisgX191OCBiTGVuZ3RoOworIF9fdTggYkRlc2NyaXB0b3JUeXBlOworCisgX191OCBiRGVidWdJbkVuZHBvaW50OworIF9fdTggYkRlYnVnT3V0RW5kcG9pbnQ7Cit9OworCitzdHJ1Y3QgdXNiX2ludGVyZmFjZV9hc3NvY19kZXNjcmlwdG9yIHsKKyBfX3U4IGJMZW5ndGg7CisgX191OCBiRGVzY3JpcHRvclR5cGU7CisKKyBfX3U4IGJGaXJzdEludGVyZmFjZTsKKyBfX3U4IGJJbnRlcmZhY2VDb3VudDsKKyBfX3U4IGJGdW5jdGlvbkNsYXNzOworIF9fdTggYkZ1bmN0aW9uU3ViQ2xhc3M7CisgX191OCBiRnVuY3Rpb25Qcm90b2NvbDsKKyBfX3U4IGlGdW5jdGlvbjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgdXNiX3NlY3VyaXR5X2Rlc2NyaXB0b3IgeworIF9fdTggYkxlbmd0aDsKKyBfX3U4IGJEZXNjcmlwdG9yVHlwZTsKKworIF9fbGUxNiB3VG90YWxMZW5ndGg7CisgX191OCBiTnVtRW5jcnlwdGlvblR5cGVzOworfTsKKworc3RydWN0IHVzYl9rZXlfZGVzY3JpcHRvciB7CisgX191OCBiTGVuZ3RoOworIF9fdTggYkRlc2NyaXB0b3JUeXBlOworCisgX191OCB0VEtJRFszXTsKKyBfX3U4IGJSZXNlcnZlZDsKKyBfX3U4IGJLZXlEYXRhWzBdOworfTsKKworc3RydWN0IHVzYl9lbmNyeXB0aW9uX2Rlc2NyaXB0b3IgeworIF9fdTggYkxlbmd0aDsKKyBfX3U4IGJEZXNjcmlwdG9yVHlwZTsKKworIF9fdTggYkVuY3J5cHRpb25UeXBlOworI2RlZmluZSBVU0JfRU5DX1RZUEVfVU5TRUNVUkUgMAorI2RlZmluZSBVU0JfRU5DX1RZUEVfV0lSRUQgMSAgCisjZGVmaW5lIFVTQl9FTkNfVFlQRV9DQ01fMSAyICAKKyNkZWZpbmUgVVNCX0VOQ19UWVBFX1JTQV8xIDMgIAorIF9fdTggYkVuY3J5cHRpb25WYWx1ZTsKKyBfX3U4IGJBdXRoS2V5SW5kZXg7Cit9OworCitzdHJ1Y3QgdXNiX2Jvc19kZXNjcmlwdG9yIHsKKyBfX3U4IGJMZW5ndGg7CisgX191OCBiRGVzY3JpcHRvclR5cGU7CisKKyBfX2xlMTYgd1RvdGFsTGVuZ3RoOworIF9fdTggYk51bURldmljZUNhcHM7Cit9OworCitzdHJ1Y3QgdXNiX2Rldl9jYXBfaGVhZGVyIHsKKyBfX3U4IGJMZW5ndGg7CisgX191OCBiRGVzY3JpcHRvclR5cGU7CisgX191OCBiRGV2Q2FwYWJpbGl0eVR5cGU7Cit9OworCisjZGVmaW5lIFVTQl9DQVBfVFlQRV9XSVJFTEVTU19VU0IgMQorCitzdHJ1Y3QgdXNiX3dpcmVsZXNzX2NhcF9kZXNjcmlwdG9yIHsKKyBfX3U4IGJMZW5ndGg7CisgX191OCBiRGVzY3JpcHRvclR5cGU7CisgX191OCBiRGV2Q2FwYWJpbGl0eVR5cGU7CisKKyBfX3U4IGJtQXR0cmlidXRlczsKKyNkZWZpbmUgVVNCX1dJUkVMRVNTX1AyUF9EUkQgKDEgPDwgMSkKKyNkZWZpbmUgVVNCX1dJUkVMRVNTX0JFQUNPTl9NQVNLICgzIDw8IDIpCisjZGVmaW5lIFVTQl9XSVJFTEVTU19CRUFDT05fU0VMRiAoMSA8PCAyKQorI2RlZmluZSBVU0JfV0lSRUxFU1NfQkVBQ09OX0RJUkVDVEVEICgyIDw8IDIpCisjZGVmaW5lIFVTQl9XSVJFTEVTU19CRUFDT05fTk9ORSAoMyA8PCAyKQorIF9fbGUxNiB3UEhZUmF0ZXM7CisjZGVmaW5lIFVTQl9XSVJFTEVTU19QSFlfNTMgKDEgPDwgMCkgIAorI2RlZmluZSBVU0JfV0lSRUxFU1NfUEhZXzgwICgxIDw8IDEpCisjZGVmaW5lIFVTQl9XSVJFTEVTU19QSFlfMTA3ICgxIDw8IDIpICAKKyNkZWZpbmUgVVNCX1dJUkVMRVNTX1BIWV8xNjAgKDEgPDwgMykKKyNkZWZpbmUgVVNCX1dJUkVMRVNTX1BIWV8yMDAgKDEgPDwgNCkgIAorI2RlZmluZSBVU0JfV0lSRUxFU1NfUEhZXzMyMCAoMSA8PCA1KQorI2RlZmluZSBVU0JfV0lSRUxFU1NfUEhZXzQwMCAoMSA8PCA2KQorI2RlZmluZSBVU0JfV0lSRUxFU1NfUEhZXzQ4MCAoMSA8PCA3KQorIF9fdTggYm1URklUWFBvd2VySW5mbzsKKyBfX3U4IGJtRkZJVFhQb3dlckluZm87CisgX19sZTE2IGJtQmFuZEdyb3VwOworIF9fdTggYlJlc2VydmVkOworfTsKKworc3RydWN0IHVzYl93aXJlbGVzc19lcF9jb21wX2Rlc2NyaXB0b3IgeworIF9fdTggYkxlbmd0aDsKKyBfX3U4IGJEZXNjcmlwdG9yVHlwZTsKKworIF9fdTggYk1heEJ1cnN0OworIF9fdTggYk1heFNlcXVlbmNlOworIF9fbGUxNiB3TWF4U3RyZWFtRGVsYXk7CisgX19sZTE2IHdPdmVyVGhlQWlyUGFja2V0U2l6ZTsKKyBfX3U4IGJPdmVyVGhlQWlySW50ZXJ2YWw7CisgX191OCBibUNvbXBBdHRyaWJ1dGVzOworI2RlZmluZSBVU0JfRU5EUE9JTlRfU1dJVENIX01BU0sgMHgwMyAgCisjZGVmaW5lIFVTQl9FTkRQT0lOVF9TV0lUQ0hfTk8gMAorI2RlZmluZSBVU0JfRU5EUE9JTlRfU1dJVENIX1NXSVRDSCAxCisjZGVmaW5lIFVTQl9FTkRQT0lOVF9TV0lUQ0hfU0NBTEUgMgorfTsKKworc3RydWN0IHVzYl9oYW5kc2hha2UgeworIF9fdTggYk1lc3NhZ2VOdW1iZXI7CisgX191OCBiU3RhdHVzOworIF9fdTggdFRLSURbM107CisgX191OCBiUmVzZXJ2ZWQ7CisgX191OCBDRElEWzE2XTsKKyBfX3U4IG5vbmNlWzE2XTsKKyBfX3U4IE1JQ1s4XTsKK307CisKK3N0cnVjdCB1c2JfY29ubmVjdGlvbl9jb250ZXh0IHsKKyBfX3U4IENISURbMTZdOworIF9fdTggQ0RJRFsxNl07CisgX191OCBDS1sxNl07Cit9OworCitlbnVtIHVzYl9kZXZpY2Vfc3BlZWQgeworIFVTQl9TUEVFRF9VTktOT1dOID0gMCwKKyBVU0JfU1BFRURfTE9XLCBVU0JfU1BFRURfRlVMTCwKKyBVU0JfU1BFRURfSElHSCwKKyBVU0JfU1BFRURfVkFSSUFCTEUsCit9OworCitlbnVtIHVzYl9kZXZpY2Vfc3RhdGUgeworCisgVVNCX1NUQVRFX05PVEFUVEFDSEVEID0gMCwKKworIFVTQl9TVEFURV9BVFRBQ0hFRCwKKyBVU0JfU1RBVEVfUE9XRVJFRCwKKyBVU0JfU1RBVEVfVU5BVVRIRU5USUNBVEVELAorIFVTQl9TVEFURV9SRUNPTk5FQ1RJTkcsCisgVVNCX1NUQVRFX0RFRkFVTFQsCisgVVNCX1NUQVRFX0FERFJFU1MsCisgVVNCX1NUQVRFX0NPTkZJR1VSRUQsCisKKyBVU0JfU1RBVEVfU1VTUEVOREVECisKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3VzYmRldmljZV9mcy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3VzYmRldmljZV9mcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNmVmZGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdXNiZGV2aWNlX2ZzLmgKQEAgLTAsMCArMSwxMjMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX1VTQkRFVklDRV9GU19ICisjZGVmaW5lIF9MSU5VWF9VU0JERVZJQ0VfRlNfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2RlZmluZSBVU0JERVZJQ0VfU1VQRVJfTUFHSUMgMHg5ZmEyCisKK3N0cnVjdCB1c2JkZXZmc19jdHJsdHJhbnNmZXIgeworIF9fdTggYlJlcXVlc3RUeXBlOworIF9fdTggYlJlcXVlc3Q7CisgX191MTYgd1ZhbHVlOworIF9fdTE2IHdJbmRleDsKKyBfX3UxNiB3TGVuZ3RoOworIF9fdTMyIHRpbWVvdXQ7Cisgdm9pZCBfX3VzZXIgKmRhdGE7Cit9OworCitzdHJ1Y3QgdXNiZGV2ZnNfYnVsa3RyYW5zZmVyIHsKKyB1bnNpZ25lZCBpbnQgZXA7CisgdW5zaWduZWQgaW50IGxlbjsKKyB1bnNpZ25lZCBpbnQgdGltZW91dDsKKyB2b2lkIF9fdXNlciAqZGF0YTsKK307CisKK3N0cnVjdCB1c2JkZXZmc19zZXRpbnRlcmZhY2UgeworIHVuc2lnbmVkIGludCBpbnRlcmZhY2U7CisgdW5zaWduZWQgaW50IGFsdHNldHRpbmc7Cit9OworCitzdHJ1Y3QgdXNiZGV2ZnNfZGlzY29ubmVjdHNpZ25hbCB7CisgdW5zaWduZWQgaW50IHNpZ25yOworIHZvaWQgX191c2VyICpjb250ZXh0OworfTsKKworI2RlZmluZSBVU0JERVZGU19NQVhEUklWRVJOQU1FIDI1NQorCitzdHJ1Y3QgdXNiZGV2ZnNfZ2V0ZHJpdmVyIHsKKyB1bnNpZ25lZCBpbnQgaW50ZXJmYWNlOworIGNoYXIgZHJpdmVyW1VTQkRFVkZTX01BWERSSVZFUk5BTUUgKyAxXTsKK307CisKK3N0cnVjdCB1c2JkZXZmc19jb25uZWN0aW5mbyB7CisgdW5zaWduZWQgaW50IGRldm51bTsKKyB1bnNpZ25lZCBjaGFyIHNsb3c7Cit9OworCisjZGVmaW5lIFVTQkRFVkZTX1VSQl9TSE9SVF9OT1RfT0sgMQorI2RlZmluZSBVU0JERVZGU19VUkJfSVNPX0FTQVAgMgorCisjZGVmaW5lIFVTQkRFVkZTX1VSQl9UWVBFX0lTTyAwCisjZGVmaW5lIFVTQkRFVkZTX1VSQl9UWVBFX0lOVEVSUlVQVCAxCisjZGVmaW5lIFVTQkRFVkZTX1VSQl9UWVBFX0NPTlRST0wgMgorI2RlZmluZSBVU0JERVZGU19VUkJfVFlQRV9CVUxLIDMKKworc3RydWN0IHVzYmRldmZzX2lzb19wYWNrZXRfZGVzYyB7CisgdW5zaWduZWQgaW50IGxlbmd0aDsKKyB1bnNpZ25lZCBpbnQgYWN0dWFsX2xlbmd0aDsKKyB1bnNpZ25lZCBpbnQgc3RhdHVzOworfTsKKworc3RydWN0IHVzYmRldmZzX3VyYiB7CisgdW5zaWduZWQgY2hhciB0eXBlOworIHVuc2lnbmVkIGNoYXIgZW5kcG9pbnQ7CisgaW50IHN0YXR1czsKKyB1bnNpZ25lZCBpbnQgZmxhZ3M7Cisgdm9pZCBfX3VzZXIgKmJ1ZmZlcjsKKyBpbnQgYnVmZmVyX2xlbmd0aDsKKyBpbnQgYWN0dWFsX2xlbmd0aDsKKyBpbnQgc3RhcnRfZnJhbWU7CisgaW50IG51bWJlcl9vZl9wYWNrZXRzOworIGludCBlcnJvcl9jb3VudDsKKyB1bnNpZ25lZCBpbnQgc2lnbnI7Cisgdm9pZCAqdXNlcmNvbnRleHQ7Cisgc3RydWN0IHVzYmRldmZzX2lzb19wYWNrZXRfZGVzYyBpc29fZnJhbWVfZGVzY1swXTsKK307CisKK3N0cnVjdCB1c2JkZXZmc19pb2N0bCB7CisgaW50IGlmbm87CisgaW50IGlvY3RsX2NvZGU7Cisgdm9pZCBfX3VzZXIgKmRhdGE7Cit9OworCitzdHJ1Y3QgdXNiZGV2ZnNfaHViX3BvcnRpbmZvIHsKKyBjaGFyIG5wb3J0czsKKyBjaGFyIHBvcnQgWzEyN107Cit9OworCisjZGVmaW5lIFVTQkRFVkZTX0NPTlRST0wgX0lPV1IoJ1UnLCAwLCBzdHJ1Y3QgdXNiZGV2ZnNfY3RybHRyYW5zZmVyKQorI2RlZmluZSBVU0JERVZGU19CVUxLIF9JT1dSKCdVJywgMiwgc3RydWN0IHVzYmRldmZzX2J1bGt0cmFuc2ZlcikKKyNkZWZpbmUgVVNCREVWRlNfUkVTRVRFUCBfSU9SKCdVJywgMywgdW5zaWduZWQgaW50KQorI2RlZmluZSBVU0JERVZGU19TRVRJTlRFUkZBQ0UgX0lPUignVScsIDQsIHN0cnVjdCB1c2JkZXZmc19zZXRpbnRlcmZhY2UpCisjZGVmaW5lIFVTQkRFVkZTX1NFVENPTkZJR1VSQVRJT04gX0lPUignVScsIDUsIHVuc2lnbmVkIGludCkKKyNkZWZpbmUgVVNCREVWRlNfR0VURFJJVkVSIF9JT1coJ1UnLCA4LCBzdHJ1Y3QgdXNiZGV2ZnNfZ2V0ZHJpdmVyKQorI2RlZmluZSBVU0JERVZGU19TVUJNSVRVUkIgX0lPUignVScsIDEwLCBzdHJ1Y3QgdXNiZGV2ZnNfdXJiKQorI2RlZmluZSBVU0JERVZGU19TVUJNSVRVUkIzMiBfSU9SKCdVJywgMTAsIHN0cnVjdCB1c2JkZXZmc191cmIzMikKKyNkZWZpbmUgVVNCREVWRlNfRElTQ0FSRFVSQiBfSU8oJ1UnLCAxMSkKKyNkZWZpbmUgVVNCREVWRlNfUkVBUFVSQiBfSU9XKCdVJywgMTIsIHZvaWQgKikKKyNkZWZpbmUgVVNCREVWRlNfUkVBUFVSQjMyIF9JT1coJ1UnLCAxMiwgdTMyKQorI2RlZmluZSBVU0JERVZGU19SRUFQVVJCTkRFTEFZIF9JT1coJ1UnLCAxMywgdm9pZCAqKQorI2RlZmluZSBVU0JERVZGU19SRUFQVVJCTkRFTEFZMzIgX0lPVygnVScsIDEzLCB1MzIpCisjZGVmaW5lIFVTQkRFVkZTX0RJU0NTSUdOQUwgX0lPUignVScsIDE0LCBzdHJ1Y3QgdXNiZGV2ZnNfZGlzY29ubmVjdHNpZ25hbCkKKyNkZWZpbmUgVVNCREVWRlNfQ0xBSU1JTlRFUkZBQ0UgX0lPUignVScsIDE1LCB1bnNpZ25lZCBpbnQpCisjZGVmaW5lIFVTQkRFVkZTX1JFTEVBU0VJTlRFUkZBQ0UgX0lPUignVScsIDE2LCB1bnNpZ25lZCBpbnQpCisjZGVmaW5lIFVTQkRFVkZTX0NPTk5FQ1RJTkZPIF9JT1coJ1UnLCAxNywgc3RydWN0IHVzYmRldmZzX2Nvbm5lY3RpbmZvKQorI2RlZmluZSBVU0JERVZGU19JT0NUTCBfSU9XUignVScsIDE4LCBzdHJ1Y3QgdXNiZGV2ZnNfaW9jdGwpCisjZGVmaW5lIFVTQkRFVkZTX0lPQ1RMMzIgX0lPV1IoJ1UnLCAxOCwgc3RydWN0IHVzYmRldmZzX2lvY3RsMzIpCisjZGVmaW5lIFVTQkRFVkZTX0hVQl9QT1JUSU5GTyBfSU9SKCdVJywgMTksIHN0cnVjdCB1c2JkZXZmc19odWJfcG9ydGluZm8pCisjZGVmaW5lIFVTQkRFVkZTX1JFU0VUIF9JTygnVScsIDIwKQorI2RlZmluZSBVU0JERVZGU19DTEVBUl9IQUxUIF9JT1IoJ1UnLCAyMSwgdW5zaWduZWQgaW50KQorI2RlZmluZSBVU0JERVZGU19ESVNDT05ORUNUIF9JTygnVScsIDIyKQorI2RlZmluZSBVU0JERVZGU19DT05ORUNUIF9JTygnVScsIDIzKQorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdXNlci5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3VzZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzBiOWNiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3VzZXIuaApAQCAtMCwwICsxLDEyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSA8YXNtL3VzZXIuaD4KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC91dGltZS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3V0aW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIxYmE5YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC91dGltZS5oCkBAIC0wLDAgKzEsMjAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX1VUSU1FX0gKKyNkZWZpbmUgX0xJTlVYX1VUSU1FX0gKKworc3RydWN0IHV0aW1idWYgeworIHRpbWVfdCBhY3RpbWU7CisgdGltZV90IG1vZHRpbWU7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC91dHNuYW1lLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdXRzbmFtZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNmVlODkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdXRzbmFtZS5oCkBAIC0wLDAgKzEsNDQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX1VUU05BTUVfSAorI2RlZmluZSBfTElOVVhfVVRTTkFNRV9ICisKKyNkZWZpbmUgX19PTERfVVRTX0xFTiA4CisKK3N0cnVjdCBvbGRvbGRfdXRzbmFtZSB7CisgY2hhciBzeXNuYW1lWzldOworIGNoYXIgbm9kZW5hbWVbOV07CisgY2hhciByZWxlYXNlWzldOworIGNoYXIgdmVyc2lvbls5XTsKKyBjaGFyIG1hY2hpbmVbOV07Cit9OworCisjZGVmaW5lIF9fTkVXX1VUU19MRU4gNjQKKworc3RydWN0IG9sZF91dHNuYW1lIHsKKyBjaGFyIHN5c25hbWVbNjVdOworIGNoYXIgbm9kZW5hbWVbNjVdOworIGNoYXIgcmVsZWFzZVs2NV07CisgY2hhciB2ZXJzaW9uWzY1XTsKKyBjaGFyIG1hY2hpbmVbNjVdOworfTsKKworc3RydWN0IG5ld191dHNuYW1lIHsKKyBjaGFyIHN5c25hbWVbNjVdOworIGNoYXIgbm9kZW5hbWVbNjVdOworIGNoYXIgcmVsZWFzZVs2NV07CisgY2hhciB2ZXJzaW9uWzY1XTsKKyBjaGFyIG1hY2hpbmVbNjVdOworIGNoYXIgZG9tYWlubmFtZVs2NV07Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC92ZXJzaW9uLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdmVyc2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZmYwZWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdmVyc2lvbi5oCkBAIC0wLDAgKzEsMTMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgTElOVVhfVkVSU0lPTl9DT0RFIDEzMjYyNgorI2RlZmluZSBLRVJORUxfVkVSU0lPTihhLGIsYykgKCgoYSkgPDwgMTYpICsgKChiKSA8PCA4KSArIChjKSkKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC92ZnMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC92ZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDYzNmU5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3Zmcy5oCkBAIC0wLDAgKzEsMTcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX1ZGU19ICisjZGVmaW5lIF9MSU5VWF9WRlNfSAorCisjaW5jbHVkZSA8bGludXgvc3RhdGZzLmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3ZpZGVvZGV2LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdmlkZW9kZXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjM3ZmRlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3ZpZGVvZGV2LmgKQEAgLTAsMCArMSwzMjcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19MSU5VWF9WSURFT0RFVl9ICisjZGVmaW5lIF9fTElOVVhfVklERU9ERVZfSAorCisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisKK3N0cnVjdCB2aWRlb19jYXBhYmlsaXR5Cit7CisgY2hhciBuYW1lWzMyXTsKKyBpbnQgdHlwZTsKKyBpbnQgY2hhbm5lbHM7CisgaW50IGF1ZGlvczsKKyBpbnQgbWF4d2lkdGg7CisgaW50IG1heGhlaWdodDsKKyBpbnQgbWlud2lkdGg7CisgaW50IG1pbmhlaWdodDsKK307CisKK3N0cnVjdCB2aWRlb19jaGFubmVsCit7CisgaW50IGNoYW5uZWw7CisgY2hhciBuYW1lWzMyXTsKKyBpbnQgdHVuZXJzOworIF9fdTMyIGZsYWdzOworI2RlZmluZSBWSURFT19WQ19UVU5FUiAxICAKKyNkZWZpbmUgVklERU9fVkNfQVVESU8gMiAgCisgX191MTYgdHlwZTsKKyNkZWZpbmUgVklERU9fVFlQRV9UViAxCisjZGVmaW5lIFZJREVPX1RZUEVfQ0FNRVJBIDIKKyBfX3UxNiBub3JtOworfTsKKworc3RydWN0IHZpZGVvX3R1bmVyCit7CisgaW50IHR1bmVyOworIGNoYXIgbmFtZVszMl07CisgdW5zaWduZWQgbG9uZyByYW5nZWxvdywgcmFuZ2VoaWdoOworIF9fdTMyIGZsYWdzOworI2RlZmluZSBWSURFT19UVU5FUl9QQUwgMQorI2RlZmluZSBWSURFT19UVU5FUl9OVFNDIDIKKyNkZWZpbmUgVklERU9fVFVORVJfU0VDQU0gNAorI2RlZmluZSBWSURFT19UVU5FUl9MT1cgOCAgCisjZGVmaW5lIFZJREVPX1RVTkVSX05PUk0gMTYgIAorI2RlZmluZSBWSURFT19UVU5FUl9TVEVSRU9fT04gMTI4ICAKKyNkZWZpbmUgVklERU9fVFVORVJfUkRTX09OIDI1NiAgCisjZGVmaW5lIFZJREVPX1RVTkVSX01CU19PTiA1MTIgIAorIF9fdTE2IG1vZGU7CisjZGVmaW5lIFZJREVPX01PREVfUEFMIDAKKyNkZWZpbmUgVklERU9fTU9ERV9OVFNDIDEKKyNkZWZpbmUgVklERU9fTU9ERV9TRUNBTSAyCisjZGVmaW5lIFZJREVPX01PREVfQVVUTyAzCisgX191MTYgc2lnbmFsOworfTsKKworc3RydWN0IHZpZGVvX3BpY3R1cmUKK3sKKyBfX3UxNiBicmlnaHRuZXNzOworIF9fdTE2IGh1ZTsKKyBfX3UxNiBjb2xvdXI7CisgX191MTYgY29udHJhc3Q7CisgX191MTYgd2hpdGVuZXNzOworIF9fdTE2IGRlcHRoOworIF9fdTE2IHBhbGV0dGU7CisjZGVmaW5lIFZJREVPX1BBTEVUVEVfR1JFWSAxICAKKyNkZWZpbmUgVklERU9fUEFMRVRURV9ISTI0MCAyICAKKyNkZWZpbmUgVklERU9fUEFMRVRURV9SR0I1NjUgMyAgCisjZGVmaW5lIFZJREVPX1BBTEVUVEVfUkdCMjQgNCAgCisjZGVmaW5lIFZJREVPX1BBTEVUVEVfUkdCMzIgNSAgCisjZGVmaW5lIFZJREVPX1BBTEVUVEVfUkdCNTU1IDYgIAorI2RlZmluZSBWSURFT19QQUxFVFRFX1lVVjQyMiA3ICAKKyNkZWZpbmUgVklERU9fUEFMRVRURV9ZVVlWIDgKKyNkZWZpbmUgVklERU9fUEFMRVRURV9VWVZZIDkgIAorI2RlZmluZSBWSURFT19QQUxFVFRFX1lVVjQyMCAxMAorI2RlZmluZSBWSURFT19QQUxFVFRFX1lVVjQxMSAxMSAgCisjZGVmaW5lIFZJREVPX1BBTEVUVEVfUkFXIDEyICAKKyNkZWZpbmUgVklERU9fUEFMRVRURV9ZVVY0MjJQIDEzICAKKyNkZWZpbmUgVklERU9fUEFMRVRURV9ZVVY0MTFQIDE0ICAKKyNkZWZpbmUgVklERU9fUEFMRVRURV9ZVVY0MjBQIDE1ICAKKyNkZWZpbmUgVklERU9fUEFMRVRURV9ZVVY0MTBQIDE2ICAKKyNkZWZpbmUgVklERU9fUEFMRVRURV9QTEFOQVIgMTMgIAorI2RlZmluZSBWSURFT19QQUxFVFRFX0NPTVBPTkVOVCA3ICAKK307CisKK3N0cnVjdCB2aWRlb19hdWRpbworeworIGludCBhdWRpbzsKKyBfX3UxNiB2b2x1bWU7CisgX191MTYgYmFzcywgdHJlYmxlOworIF9fdTMyIGZsYWdzOworI2RlZmluZSBWSURFT19BVURJT19NVVRFIDEKKyNkZWZpbmUgVklERU9fQVVESU9fTVVUQUJMRSAyCisjZGVmaW5lIFZJREVPX0FVRElPX1ZPTFVNRSA0CisjZGVmaW5lIFZJREVPX0FVRElPX0JBU1MgOAorI2RlZmluZSBWSURFT19BVURJT19UUkVCTEUgMTYKKyNkZWZpbmUgVklERU9fQVVESU9fQkFMQU5DRSAzMgorIGNoYXIgbmFtZVsxNl07CisjZGVmaW5lIFZJREVPX1NPVU5EX01PTk8gMQorI2RlZmluZSBWSURFT19TT1VORF9TVEVSRU8gMgorI2RlZmluZSBWSURFT19TT1VORF9MQU5HMSA0CisjZGVmaW5lIFZJREVPX1NPVU5EX0xBTkcyIDgKKyBfX3UxNiBtb2RlOworIF9fdTE2IGJhbGFuY2U7CisgX191MTYgc3RlcDsKK307CisKK3N0cnVjdCB2aWRlb19jbGlwCit7CisgX19zMzIgeCx5OworIF9fczMyIHdpZHRoLCBoZWlnaHQ7Cisgc3RydWN0IHZpZGVvX2NsaXAgKm5leHQ7Cit9OworCitzdHJ1Y3QgdmlkZW9fd2luZG93Cit7CisgX191MzIgeCx5OworIF9fdTMyIHdpZHRoLGhlaWdodDsKKyBfX3UzMiBjaHJvbWFrZXk7CisgX191MzIgZmxhZ3M7Cisgc3RydWN0IHZpZGVvX2NsaXAgX191c2VyICpjbGlwczsKKyBpbnQgY2xpcGNvdW50OworI2RlZmluZSBWSURFT19XSU5ET1dfSU5URVJMQUNFIDEKKyNkZWZpbmUgVklERU9fV0lORE9XX0NIUk9NQUtFWSAxNiAgCisjZGVmaW5lIFZJREVPX0NMSVBfQklUTUFQIC0xCisKKyNkZWZpbmUgVklERU9fQ0xJUE1BUF9TSVpFICgxMjggKiA2MjUpCit9OworCitzdHJ1Y3QgdmlkZW9fY2FwdHVyZQoreworIF9fdTMyIHgseTsKKyBfX3UzMiB3aWR0aCwgaGVpZ2h0OworIF9fdTE2IGRlY2ltYXRpb247CisgX191MTYgZmxhZ3M7CisjZGVmaW5lIFZJREVPX0NBUFRVUkVfT0REIDAgIAorI2RlZmluZSBWSURFT19DQVBUVVJFX0VWRU4gMQorfTsKKworc3RydWN0IHZpZGVvX2J1ZmZlcgoreworIHZvaWQgKmJhc2U7CisgaW50IGhlaWdodCx3aWR0aDsKKyBpbnQgZGVwdGg7CisgaW50IGJ5dGVzcGVybGluZTsKK307CisKK3N0cnVjdCB2aWRlb19tbWFwCit7CisgdW5zaWduZWQgaW50IGZyYW1lOworIGludCBoZWlnaHQsd2lkdGg7CisgdW5zaWduZWQgaW50IGZvcm1hdDsKK307CisKK3N0cnVjdCB2aWRlb19rZXkKK3sKKyBfX3U4IGtleVs4XTsKKyBfX3UzMiBmbGFnczsKK307CisKK3N0cnVjdCB2aWRlb19tYnVmCit7CisgaW50IHNpemU7CisgaW50IGZyYW1lczsKKyBpbnQgb2Zmc2V0c1tWSURFT19NQVhfRlJBTUVdOworfTsKKworI2RlZmluZSBWSURFT19OT19VTklUICgtMSkKKworc3RydWN0IHZpZGVvX3VuaXQKK3sKKyBpbnQgdmlkZW87CisgaW50IHZiaTsKKyBpbnQgcmFkaW87CisgaW50IGF1ZGlvOworIGludCB0ZWxldGV4dDsKK307CisKK3N0cnVjdCB2YmlfZm9ybWF0IHsKKyBfX3UzMiBzYW1wbGluZ19yYXRlOworIF9fdTMyIHNhbXBsZXNfcGVyX2xpbmU7CisgX191MzIgc2FtcGxlX2Zvcm1hdDsKKyBfX3MzMiBzdGFydFsyXTsKKyBfX3UzMiBjb3VudFsyXTsKKyBfX3UzMiBmbGFnczsKKyNkZWZpbmUgVkJJX1VOU1lOQyAxICAKKyNkZWZpbmUgVkJJX0lOVEVSTEFDRUQgMiAgCit9OworCitzdHJ1Y3QgdmlkZW9faW5mbworeworIF9fdTMyIGZyYW1lX2NvdW50OworIF9fdTMyIGhfc2l6ZTsKKyBfX3UzMiB2X3NpemU7CisgX191MzIgc21wdGVfdGltZWNvZGU7CisgX191MzIgcGljdHVyZV90eXBlOworIF9fdTMyIHRlbXBvcmFsX3JlZmVyZW5jZTsKKyBfX3U4IHVzZXJfZGF0YVsyNTZdOworCit9OworCitzdHJ1Y3QgdmlkZW9fcGxheV9tb2RlCit7CisgaW50IG1vZGU7CisgaW50IHAxOworIGludCBwMjsKK307CisKK3N0cnVjdCB2aWRlb19jb2RlCit7CisgY2hhciBsb2Fkd2hhdFsxNl07CisgaW50IGRhdGFzaXplOworIF9fdTggKmRhdGE7Cit9OworCisjZGVmaW5lIFZJRElPQ0dDQVAgX0lPUigndicsMSxzdHJ1Y3QgdmlkZW9fY2FwYWJpbGl0eSkgIAorI2RlZmluZSBWSURJT0NHQ0hBTiBfSU9XUigndicsMixzdHJ1Y3QgdmlkZW9fY2hhbm5lbCkgIAorI2RlZmluZSBWSURJT0NTQ0hBTiBfSU9XKCd2JywzLHN0cnVjdCB2aWRlb19jaGFubmVsKSAgCisjZGVmaW5lIFZJRElPQ0dUVU5FUiBfSU9XUigndicsNCxzdHJ1Y3QgdmlkZW9fdHVuZXIpICAKKyNkZWZpbmUgVklESU9DU1RVTkVSIF9JT1coJ3YnLDUsc3RydWN0IHZpZGVvX3R1bmVyKSAgCisjZGVmaW5lIFZJRElPQ0dQSUNUIF9JT1IoJ3YnLDYsc3RydWN0IHZpZGVvX3BpY3R1cmUpICAKKyNkZWZpbmUgVklESU9DU1BJQ1QgX0lPVygndicsNyxzdHJ1Y3QgdmlkZW9fcGljdHVyZSkgIAorI2RlZmluZSBWSURJT0NDQVBUVVJFIF9JT1coJ3YnLDgsaW50KSAgCisjZGVmaW5lIFZJRElPQ0dXSU4gX0lPUigndicsOSwgc3RydWN0IHZpZGVvX3dpbmRvdykgIAorI2RlZmluZSBWSURJT0NTV0lOIF9JT1coJ3YnLDEwLCBzdHJ1Y3QgdmlkZW9fd2luZG93KSAgCisjZGVmaW5lIFZJRElPQ0dGQlVGIF9JT1IoJ3YnLDExLCBzdHJ1Y3QgdmlkZW9fYnVmZmVyKSAgCisjZGVmaW5lIFZJRElPQ1NGQlVGIF9JT1coJ3YnLDEyLCBzdHJ1Y3QgdmlkZW9fYnVmZmVyKSAgCisjZGVmaW5lIFZJRElPQ0tFWSBfSU9SKCd2JywxMywgc3RydWN0IHZpZGVvX2tleSkgIAorI2RlZmluZSBWSURJT0NHRlJFUSBfSU9SKCd2JywxNCwgdW5zaWduZWQgbG9uZykgIAorI2RlZmluZSBWSURJT0NTRlJFUSBfSU9XKCd2JywxNSwgdW5zaWduZWQgbG9uZykgIAorI2RlZmluZSBWSURJT0NHQVVESU8gX0lPUigndicsMTYsIHN0cnVjdCB2aWRlb19hdWRpbykgIAorI2RlZmluZSBWSURJT0NTQVVESU8gX0lPVygndicsMTcsIHN0cnVjdCB2aWRlb19hdWRpbykgIAorI2RlZmluZSBWSURJT0NTWU5DIF9JT1coJ3YnLDE4LCBpbnQpICAKKyNkZWZpbmUgVklESU9DTUNBUFRVUkUgX0lPVygndicsMTksIHN0cnVjdCB2aWRlb19tbWFwKSAgCisjZGVmaW5lIFZJRElPQ0dNQlVGIF9JT1IoJ3YnLDIwLCBzdHJ1Y3QgdmlkZW9fbWJ1ZikgIAorI2RlZmluZSBWSURJT0NHVU5JVCBfSU9SKCd2JywyMSwgc3RydWN0IHZpZGVvX3VuaXQpICAKKyNkZWZpbmUgVklESU9DR0NBUFRVUkUgX0lPUigndicsMjIsIHN0cnVjdCB2aWRlb19jYXB0dXJlKSAgCisjZGVmaW5lIFZJRElPQ1NDQVBUVVJFIF9JT1coJ3YnLDIzLCBzdHJ1Y3QgdmlkZW9fY2FwdHVyZSkgIAorI2RlZmluZSBWSURJT0NTUExBWU1PREUgX0lPVygndicsMjQsIHN0cnVjdCB2aWRlb19wbGF5X21vZGUpICAKKyNkZWZpbmUgVklESU9DU1dSSVRFTU9ERSBfSU9XKCd2JywyNSwgaW50KSAgCisjZGVmaW5lIFZJRElPQ0dQTEFZSU5GTyBfSU9SKCd2JywyNiwgc3RydWN0IHZpZGVvX2luZm8pICAKKyNkZWZpbmUgVklESU9DU01JQ1JPQ09ERSBfSU9XKCd2JywyNywgc3RydWN0IHZpZGVvX2NvZGUpICAKKyNkZWZpbmUgVklESU9DR1ZCSUZNVCBfSU9SKCd2JywyOCwgc3RydWN0IHZiaV9mb3JtYXQpICAKKyNkZWZpbmUgVklESU9DU1ZCSUZNVCBfSU9XKCd2JywyOSwgc3RydWN0IHZiaV9mb3JtYXQpICAKKworI2RlZmluZSBCQVNFX1ZJRElPQ1BSSVZBVEUgMTkyICAKKworI2RlZmluZSBWSURfV1JJVEVfTVBFR19BVUQgMAorI2RlZmluZSBWSURfV1JJVEVfTVBFR19WSUQgMQorI2RlZmluZSBWSURfV1JJVEVfT1NEIDIKKyNkZWZpbmUgVklEX1dSSVRFX1RUWCAzCisjZGVmaW5lIFZJRF9XUklURV9DQyA0CisjZGVmaW5lIFZJRF9XUklURV9NSlBFRyA1CisKKyNkZWZpbmUgVklEX1BMQVlfVklEX09VVF9NT0RFIDAKKworI2RlZmluZSBWSURfUExBWV9HRU5MT0NLIDEKKworI2RlZmluZSBWSURfUExBWV9OT1JNQUwgMgorI2RlZmluZSBWSURfUExBWV9QQVVTRSAzCisjZGVmaW5lIFZJRF9QTEFZX1NJTkdMRV9GUkFNRSA0CisjZGVmaW5lIFZJRF9QTEFZX0ZBU1RfRk9SV0FSRCA1CisjZGVmaW5lIFZJRF9QTEFZX1NMT1dfTU9USU9OIDYKKyNkZWZpbmUgVklEX1BMQVlfSU1NRURJQVRFX05PUk1BTCA3CisjZGVmaW5lIFZJRF9QTEFZX1NXSVRDSF9DSEFOTkVMUyA4CisjZGVmaW5lIFZJRF9QTEFZX0ZSRUVaRV9GUkFNRSA5CisjZGVmaW5lIFZJRF9QTEFZX1NUSUxMX01PREUgMTAKKyNkZWZpbmUgVklEX1BMQVlfTUFTVEVSX01PREUgMTEKKworI2RlZmluZSBWSURfUExBWV9NQVNURVJfTk9ORSAxCisjZGVmaW5lIFZJRF9QTEFZX01BU1RFUl9WSURFTyAyCisjZGVmaW5lIFZJRF9QTEFZX01BU1RFUl9BVURJTyAzCisjZGVmaW5lIFZJRF9QTEFZX0FDVElWRV9TQ0FOTElORVMgMTIKKworI2RlZmluZSBWSURfUExBWV9SRVNFVCAxMworI2RlZmluZSBWSURfUExBWV9FTkRfTUFSSyAxNAorCisjZGVmaW5lIFZJRF9IQVJEV0FSRV9CVDg0OCAxCisjZGVmaW5lIFZJRF9IQVJEV0FSRV9RQ0FNX0JXIDIKKyNkZWZpbmUgVklEX0hBUkRXQVJFX1BNUyAzCisjZGVmaW5lIFZJRF9IQVJEV0FSRV9RQ0FNX0MgNAorI2RlZmluZSBWSURfSEFSRFdBUkVfUFNFVURPIDUKKyNkZWZpbmUgVklEX0hBUkRXQVJFX1NBQTUyNDkgNgorI2RlZmluZSBWSURfSEFSRFdBUkVfQVpURUNIIDcKKyNkZWZpbmUgVklEX0hBUkRXQVJFX1NGMTZNSSA4CisjZGVmaW5lIFZJRF9IQVJEV0FSRV9SVFJBQ0sgOQorI2RlZmluZSBWSURfSEFSRFdBUkVfWk9MVFJJWCAxMAorI2RlZmluZSBWSURfSEFSRFdBUkVfU0FBNzE0NiAxMQorI2RlZmluZSBWSURfSEFSRFdBUkVfVklERVVNIDEyICAKKyNkZWZpbmUgVklEX0hBUkRXQVJFX1JUUkFDSzIgMTMKKyNkZWZpbmUgVklEX0hBUkRXQVJFX1BFUk1FRElBMiAxNCAgCisjZGVmaW5lIFZJRF9IQVJEV0FSRV9SSVZBMTI4IDE1ICAKKyNkZWZpbmUgVklEX0hBUkRXQVJFX1BMQU5CIDE2ICAKKyNkZWZpbmUgVklEX0hBUkRXQVJFX0JST0FEV0FZIDE3ICAKKyNkZWZpbmUgVklEX0hBUkRXQVJFX0dFTVRFSyAxOAorI2RlZmluZSBWSURfSEFSRFdBUkVfVFlQSE9PTiAxOQorI2RlZmluZSBWSURfSEFSRFdBUkVfVklOTyAyMCAgCisjZGVmaW5lIFZJRF9IQVJEV0FSRV9DQURFVCAyMSAgCisjZGVmaW5lIFZJRF9IQVJEV0FSRV9UUlVTVCAyMiAgCisjZGVmaW5lIFZJRF9IQVJEV0FSRV9URVJSQVRFQyAyMyAgCisjZGVmaW5lIFZJRF9IQVJEV0FSRV9DUElBIDI0CisjZGVmaW5lIFZJRF9IQVJEV0FSRV9aUjM2MTIwIDI1ICAKKyNkZWZpbmUgVklEX0hBUkRXQVJFX1pSMzYwNjcgMjYgIAorI2RlZmluZSBWSURfSEFSRFdBUkVfT1Y1MTEgMjcKKyNkZWZpbmUgVklEX0hBUkRXQVJFX1pSMzU2NzAwIDI4ICAKKyNkZWZpbmUgVklEX0hBUkRXQVJFX1c5OTY2IDI5CisjZGVmaW5lIFZJRF9IQVJEV0FSRV9TRTQwMSAzMCAgCisjZGVmaW5lIFZJRF9IQVJEV0FSRV9QV0MgMzEgIAorI2RlZmluZSBWSURfSEFSRFdBUkVfTUVZRSAzMiAgCisjZGVmaW5lIFZJRF9IQVJEV0FSRV9DUElBMiAzMworI2RlZmluZSBWSURfSEFSRFdBUkVfVklDQU0gMzQKKyNkZWZpbmUgVklEX0hBUkRXQVJFX1NGMTZGTVIyIDM1CisjZGVmaW5lIFZJRF9IQVJEV0FSRV9XOTk2OENGIDM2CisjZGVmaW5lIFZJRF9IQVJEV0FSRV9TQUE3MTE0SCAzNworI2RlZmluZSBWSURfSEFSRFdBUkVfU045QzEwMiAzOAorI2RlZmluZSBWSURfSEFSRFdBUkVfQVJWIDM5CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdmlkZW9kZXYyLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdmlkZW9kZXYyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFlNGU5MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC92aWRlb2RldjIuaApAQCAtMCwwICsxLDk2MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0xJTlVYX1ZJREVPREVWMl9ICisjZGVmaW5lIF9fTElOVVhfVklERU9ERVYyX0gKKyNkZWZpbmUgX191c2VyCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2RlZmluZSBWSURFT19NQVhfRlJBTUUgMzIKKworI2RlZmluZSBWSURfVFlQRV9DQVBUVVJFIDEgIAorI2RlZmluZSBWSURfVFlQRV9UVU5FUiAyICAKKyNkZWZpbmUgVklEX1RZUEVfVEVMRVRFWFQgNCAgCisjZGVmaW5lIFZJRF9UWVBFX09WRVJMQVkgOCAgCisjZGVmaW5lIFZJRF9UWVBFX0NIUk9NQUtFWSAxNiAgCisjZGVmaW5lIFZJRF9UWVBFX0NMSVBQSU5HIDMyICAKKyNkZWZpbmUgVklEX1RZUEVfRlJBTUVSQU0gNjQgIAorI2RlZmluZSBWSURfVFlQRV9TQ0FMRVMgMTI4ICAKKyNkZWZpbmUgVklEX1RZUEVfTU9OT0NIUk9NRSAyNTYgIAorI2RlZmluZSBWSURfVFlQRV9TVUJDQVBUVVJFIDUxMiAgCisjZGVmaW5lIFZJRF9UWVBFX01QRUdfREVDT0RFUiAxMDI0ICAKKyNkZWZpbmUgVklEX1RZUEVfTVBFR19FTkNPREVSIDIwNDggIAorI2RlZmluZSBWSURfVFlQRV9NSlBFR19ERUNPREVSIDQwOTYgIAorI2RlZmluZSBWSURfVFlQRV9NSlBFR19FTkNPREVSIDgxOTIgIAorCisjZGVmaW5lIHY0bDJfZm91cmNjKGEsYixjLGQpICAoKChfX3UzMikoYSk8PDApfCgoX191MzIpKGIpPDw4KXwoKF9fdTMyKShjKTw8MTYpfCgoX191MzIpKGQpPDwyNCkpCisKK2VudW0gdjRsMl9maWVsZCB7CisgVjRMMl9GSUVMRF9BTlkgPSAwLAorIFY0TDJfRklFTERfTk9ORSA9IDEsCisgVjRMMl9GSUVMRF9UT1AgPSAyLAorIFY0TDJfRklFTERfQk9UVE9NID0gMywKKyBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQgPSA0LAorIFY0TDJfRklFTERfU0VRX1RCID0gNSwKKyBWNEwyX0ZJRUxEX1NFUV9CVCA9IDYsCisgVjRMMl9GSUVMRF9BTFRFUk5BVEUgPSA3LAorfTsKKyNkZWZpbmUgVjRMMl9GSUVMRF9IQVNfVE9QKGZpZWxkKSAgICgoZmllbGQpID09IFY0TDJfRklFTERfVE9QIHx8ICAoZmllbGQpID09IFY0TDJfRklFTERfSU5URVJMQUNFRCB8fCAgKGZpZWxkKSA9PSBWNEwyX0ZJRUxEX1NFUV9UQiB8fCAgKGZpZWxkKSA9PSBWNEwyX0ZJRUxEX1NFUV9CVCkKKyNkZWZpbmUgVjRMMl9GSUVMRF9IQVNfQk9UVE9NKGZpZWxkKSAgICgoZmllbGQpID09IFY0TDJfRklFTERfQk9UVE9NIHx8ICAoZmllbGQpID09IFY0TDJfRklFTERfSU5URVJMQUNFRCB8fCAgKGZpZWxkKSA9PSBWNEwyX0ZJRUxEX1NFUV9UQiB8fCAgKGZpZWxkKSA9PSBWNEwyX0ZJRUxEX1NFUV9CVCkKKyNkZWZpbmUgVjRMMl9GSUVMRF9IQVNfQk9USChmaWVsZCkgICAoKGZpZWxkKSA9PSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQgfHwgIChmaWVsZCkgPT0gVjRMMl9GSUVMRF9TRVFfVEIgfHwgIChmaWVsZCkgPT0gVjRMMl9GSUVMRF9TRVFfQlQpCisKK2VudW0gdjRsMl9idWZfdHlwZSB7CisgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFID0gMSwKKyBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVCA9IDIsCisgVjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZID0gMywKKyBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFID0gNCwKKyBWNEwyX0JVRl9UWVBFX1ZCSV9PVVRQVVQgPSA1LAorCisgVjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX0NBUFRVUkUgPSA2LAorIFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9PVVRQVVQgPSA3LAorIFY0TDJfQlVGX1RZUEVfUFJJVkFURSA9IDB4ODAsCit9OworCitlbnVtIHY0bDJfY3RybF90eXBlIHsKKyBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSID0gMSwKKyBWNEwyX0NUUkxfVFlQRV9CT09MRUFOID0gMiwKKyBWNEwyX0NUUkxfVFlQRV9NRU5VID0gMywKKyBWNEwyX0NUUkxfVFlQRV9CVVRUT04gPSA0LAorIFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVI2NCA9IDUsCisgVjRMMl9DVFJMX1RZUEVfQ1RSTF9DTEFTUyA9IDYsCit9OworCitlbnVtIHY0bDJfdHVuZXJfdHlwZSB7CisgVjRMMl9UVU5FUl9SQURJTyA9IDEsCisgVjRMMl9UVU5FUl9BTkFMT0dfVFYgPSAyLAorIFY0TDJfVFVORVJfRElHSVRBTF9UViA9IDMsCit9OworCitlbnVtIHY0bDJfbWVtb3J5IHsKKyBWNEwyX01FTU9SWV9NTUFQID0gMSwKKyBWNEwyX01FTU9SWV9VU0VSUFRSID0gMiwKKyBWNEwyX01FTU9SWV9PVkVSTEFZID0gMywKK307CisKK2VudW0gdjRsMl9jb2xvcnNwYWNlIHsKKworIFY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME0gPSAxLAorCisgVjRMMl9DT0xPUlNQQUNFX1NNUFRFMjQwTSA9IDIsCisKKyBWNEwyX0NPTE9SU1BBQ0VfUkVDNzA5ID0gMywKKworIFY0TDJfQ09MT1JTUEFDRV9CVDg3OCA9IDQsCisKKyBWNEwyX0NPTE9SU1BBQ0VfNDcwX1NZU1RFTV9NID0gNSwKKyBWNEwyX0NPTE9SU1BBQ0VfNDcwX1NZU1RFTV9CRyA9IDYsCisKKyBWNEwyX0NPTE9SU1BBQ0VfSlBFRyA9IDcsCisKKyBWNEwyX0NPTE9SU1BBQ0VfU1JHQiA9IDgsCit9OworCitlbnVtIHY0bDJfcHJpb3JpdHkgeworIFY0TDJfUFJJT1JJVFlfVU5TRVQgPSAwLAorIFY0TDJfUFJJT1JJVFlfQkFDS0dST1VORCA9IDEsCisgVjRMMl9QUklPUklUWV9JTlRFUkFDVElWRSA9IDIsCisgVjRMMl9QUklPUklUWV9SRUNPUkQgPSAzLAorIFY0TDJfUFJJT1JJVFlfREVGQVVMVCA9IFY0TDJfUFJJT1JJVFlfSU5URVJBQ1RJVkUsCit9OworCitzdHJ1Y3QgdjRsMl9yZWN0IHsKKyBfX3MzMiBsZWZ0OworIF9fczMyIHRvcDsKKyBfX3MzMiB3aWR0aDsKKyBfX3MzMiBoZWlnaHQ7Cit9OworCitzdHJ1Y3QgdjRsMl9mcmFjdCB7CisgX191MzIgbnVtZXJhdG9yOworIF9fdTMyIGRlbm9taW5hdG9yOworfTsKKworc3RydWN0IHY0bDJfY2FwYWJpbGl0eQoreworIF9fdTggZHJpdmVyWzE2XTsKKyBfX3U4IGNhcmRbMzJdOworIF9fdTggYnVzX2luZm9bMzJdOworIF9fdTMyIHZlcnNpb247CisgX191MzIgY2FwYWJpbGl0aWVzOworIF9fdTMyIHJlc2VydmVkWzRdOworfTsKKworI2RlZmluZSBWNEwyX0NBUF9WSURFT19DQVBUVVJFIDB4MDAwMDAwMDEgIAorI2RlZmluZSBWNEwyX0NBUF9WSURFT19PVVRQVVQgMHgwMDAwMDAwMiAgCisjZGVmaW5lIFY0TDJfQ0FQX1ZJREVPX09WRVJMQVkgMHgwMDAwMDAwNCAgCisjZGVmaW5lIFY0TDJfQ0FQX1ZCSV9DQVBUVVJFIDB4MDAwMDAwMTAgIAorI2RlZmluZSBWNEwyX0NBUF9WQklfT1VUUFVUIDB4MDAwMDAwMjAgIAorI2RlZmluZSBWNEwyX0NBUF9TTElDRURfVkJJX0NBUFRVUkUgMHgwMDAwMDA0MCAgCisjZGVmaW5lIFY0TDJfQ0FQX1NMSUNFRF9WQklfT1VUUFVUIDB4MDAwMDAwODAgIAorI2RlZmluZSBWNEwyX0NBUF9SRFNfQ0FQVFVSRSAweDAwMDAwMTAwICAKKworI2RlZmluZSBWNEwyX0NBUF9UVU5FUiAweDAwMDEwMDAwICAKKyNkZWZpbmUgVjRMMl9DQVBfQVVESU8gMHgwMDAyMDAwMCAgCisjZGVmaW5lIFY0TDJfQ0FQX1JBRElPIDB4MDAwNDAwMDAgIAorCisjZGVmaW5lIFY0TDJfQ0FQX1JFQURXUklURSAweDAxMDAwMDAwICAKKyNkZWZpbmUgVjRMMl9DQVBfQVNZTkNJTyAweDAyMDAwMDAwICAKKyNkZWZpbmUgVjRMMl9DQVBfU1RSRUFNSU5HIDB4MDQwMDAwMDAgIAorCitzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0Cit7CisgX191MzIgd2lkdGg7CisgX191MzIgaGVpZ2h0OworIF9fdTMyIHBpeGVsZm9ybWF0OworIGVudW0gdjRsMl9maWVsZCBmaWVsZDsKKyBfX3UzMiBieXRlc3BlcmxpbmU7CisgX191MzIgc2l6ZWltYWdlOworIGVudW0gdjRsMl9jb2xvcnNwYWNlIGNvbG9yc3BhY2U7CisgX191MzIgcHJpdjsKK307CisKKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1JHQjMzMiB2NGwyX2ZvdXJjYygnUicsJ0cnLCdCJywnMScpICAKKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1JHQjU1NSB2NGwyX2ZvdXJjYygnUicsJ0cnLCdCJywnTycpICAKKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1JHQjU2NSB2NGwyX2ZvdXJjYygnUicsJ0cnLCdCJywnUCcpICAKKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1JHQjU1NVggdjRsMl9mb3VyY2MoJ1InLCdHJywnQicsJ1EnKSAgCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9SR0I1NjVYIHY0bDJfZm91cmNjKCdSJywnRycsJ0InLCdSJykgIAorI2RlZmluZSBWNEwyX1BJWF9GTVRfQkdSMjQgdjRsMl9mb3VyY2MoJ0InLCdHJywnUicsJzMnKSAgCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9SR0IyNCB2NGwyX2ZvdXJjYygnUicsJ0cnLCdCJywnMycpICAKKyNkZWZpbmUgVjRMMl9QSVhfRk1UX0JHUjMyIHY0bDJfZm91cmNjKCdCJywnRycsJ1InLCc0JykgIAorI2RlZmluZSBWNEwyX1BJWF9GTVRfUkdCMzIgdjRsMl9mb3VyY2MoJ1InLCdHJywnQicsJzQnKSAgCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9HUkVZIHY0bDJfZm91cmNjKCdHJywnUicsJ0UnLCdZJykgIAorI2RlZmluZSBWNEwyX1BJWF9GTVRfWVZVNDEwIHY0bDJfZm91cmNjKCdZJywnVicsJ1UnLCc5JykgIAorI2RlZmluZSBWNEwyX1BJWF9GTVRfWVZVNDIwIHY0bDJfZm91cmNjKCdZJywnVicsJzEnLCcyJykgIAorI2RlZmluZSBWNEwyX1BJWF9GTVRfWVVZViB2NGwyX2ZvdXJjYygnWScsJ1UnLCdZJywnVicpICAKKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1VZVlkgdjRsMl9mb3VyY2MoJ1UnLCdZJywnVicsJ1knKSAgCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9ZVVY0MjJQIHY0bDJfZm91cmNjKCc0JywnMicsJzInLCdQJykgIAorI2RlZmluZSBWNEwyX1BJWF9GTVRfWVVWNDExUCB2NGwyX2ZvdXJjYygnNCcsJzEnLCcxJywnUCcpICAKKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1k0MVAgdjRsMl9mb3VyY2MoJ1knLCc0JywnMScsJ1AnKSAgCisKKyNkZWZpbmUgVjRMMl9QSVhfRk1UX05WMTIgdjRsMl9mb3VyY2MoJ04nLCdWJywnMScsJzInKSAgCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9OVjIxIHY0bDJfZm91cmNjKCdOJywnVicsJzInLCcxJykgIAorCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9ZVVY0MTAgdjRsMl9mb3VyY2MoJ1knLCdVJywnVicsJzknKSAgCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9ZVVY0MjAgdjRsMl9mb3VyY2MoJ1knLCdVJywnMScsJzInKSAgCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9ZWVVWIHY0bDJfZm91cmNjKCdZJywnWScsJ1UnLCdWJykgIAorI2RlZmluZSBWNEwyX1BJWF9GTVRfSEkyNDAgdjRsMl9mb3VyY2MoJ0gnLCdJJywnMicsJzQnKSAgCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9ITTEyIHY0bDJfZm91cmNjKCdIJywnTScsJzEnLCcyJykgIAorCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9TQkdHUjggdjRsMl9mb3VyY2MoJ0InLCdBJywnOCcsJzEnKSAgCisKKyNkZWZpbmUgVjRMMl9QSVhfRk1UX01KUEVHIHY0bDJfZm91cmNjKCdNJywnSicsJ1AnLCdHJykgIAorI2RlZmluZSBWNEwyX1BJWF9GTVRfSlBFRyB2NGwyX2ZvdXJjYygnSicsJ1AnLCdFJywnRycpICAKKyNkZWZpbmUgVjRMMl9QSVhfRk1UX0RWIHY0bDJfZm91cmNjKCdkJywndicsJ3MnLCdkJykgIAorI2RlZmluZSBWNEwyX1BJWF9GTVRfTVBFRyB2NGwyX2ZvdXJjYygnTScsJ1AnLCdFJywnRycpICAKKworI2RlZmluZSBWNEwyX1BJWF9GTVRfV05WQSB2NGwyX2ZvdXJjYygnVycsJ04nLCdWJywnQScpICAKKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1NOOUMxMFggdjRsMl9mb3VyY2MoJ1MnLCc5JywnMScsJzAnKSAgCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9QV0MxIHY0bDJfZm91cmNjKCdQJywnVycsJ0MnLCcxJykgIAorI2RlZmluZSBWNEwyX1BJWF9GTVRfUFdDMiB2NGwyX2ZvdXJjYygnUCcsJ1cnLCdDJywnMicpICAKKyNkZWZpbmUgVjRMMl9QSVhfRk1UX0VUNjFYMjUxIHY0bDJfZm91cmNjKCdFJywnNicsJzInLCc1JykgIAorCitzdHJ1Y3QgdjRsMl9mbXRkZXNjCit7CisgX191MzIgaW5kZXg7CisgZW51bSB2NGwyX2J1Zl90eXBlIHR5cGU7CisgX191MzIgZmxhZ3M7CisgX191OCBkZXNjcmlwdGlvblszMl07CisgX191MzIgcGl4ZWxmb3JtYXQ7CisgX191MzIgcmVzZXJ2ZWRbNF07Cit9OworCisjZGVmaW5lIFY0TDJfRk1UX0ZMQUdfQ09NUFJFU1NFRCAweDAwMDEKKworc3RydWN0IHY0bDJfdGltZWNvZGUKK3sKKyBfX3UzMiB0eXBlOworIF9fdTMyIGZsYWdzOworIF9fdTggZnJhbWVzOworIF9fdTggc2Vjb25kczsKKyBfX3U4IG1pbnV0ZXM7CisgX191OCBob3VyczsKKyBfX3U4IHVzZXJiaXRzWzRdOworfTsKKworI2RlZmluZSBWNEwyX1RDX1RZUEVfMjRGUFMgMQorI2RlZmluZSBWNEwyX1RDX1RZUEVfMjVGUFMgMgorI2RlZmluZSBWNEwyX1RDX1RZUEVfMzBGUFMgMworI2RlZmluZSBWNEwyX1RDX1RZUEVfNTBGUFMgNAorI2RlZmluZSBWNEwyX1RDX1RZUEVfNjBGUFMgNQorCisjZGVmaW5lIFY0TDJfVENfRkxBR19EUk9QRlJBTUUgMHgwMDAxICAKKyNkZWZpbmUgVjRMMl9UQ19GTEFHX0NPTE9SRlJBTUUgMHgwMDAyCisjZGVmaW5lIFY0TDJfVENfVVNFUkJJVFNfZmllbGQgMHgwMDBDCisjZGVmaW5lIFY0TDJfVENfVVNFUkJJVFNfVVNFUkRFRklORUQgMHgwMDAwCisjZGVmaW5lIFY0TDJfVENfVVNFUkJJVFNfOEJJVENIQVJTIDB4MDAwOAorCitzdHJ1Y3QgdjRsMl9qcGVnY29tcHJlc3Npb24KK3sKKyBpbnQgcXVhbGl0eTsKKworIGludCBBUFBuOworIGludCBBUFBfbGVuOworIGNoYXIgQVBQX2RhdGFbNjBdOworCisgaW50IENPTV9sZW47CisgY2hhciBDT01fZGF0YVs2MF07CisKKyBfX3UzMiBqcGVnX21hcmtlcnM7CisKKyNkZWZpbmUgVjRMMl9KUEVHX01BUktFUl9ESFQgKDE8PDMpICAKKyNkZWZpbmUgVjRMMl9KUEVHX01BUktFUl9EUVQgKDE8PDQpICAKKyNkZWZpbmUgVjRMMl9KUEVHX01BUktFUl9EUkkgKDE8PDUpICAKKyNkZWZpbmUgVjRMMl9KUEVHX01BUktFUl9DT00gKDE8PDYpICAKKyNkZWZpbmUgVjRMMl9KUEVHX01BUktFUl9BUFAgKDE8PDcpICAKK307CisKK3N0cnVjdCB2NGwyX3JlcXVlc3RidWZmZXJzCit7CisgX191MzIgY291bnQ7CisgZW51bSB2NGwyX2J1Zl90eXBlIHR5cGU7CisgZW51bSB2NGwyX21lbW9yeSBtZW1vcnk7CisgX191MzIgcmVzZXJ2ZWRbMl07Cit9OworCitzdHJ1Y3QgdjRsMl9idWZmZXIKK3sKKyBfX3UzMiBpbmRleDsKKyBlbnVtIHY0bDJfYnVmX3R5cGUgdHlwZTsKKyBfX3UzMiBieXRlc3VzZWQ7CisgX191MzIgZmxhZ3M7CisgZW51bSB2NGwyX2ZpZWxkIGZpZWxkOworIHN0cnVjdCB0aW1ldmFsIHRpbWVzdGFtcDsKKyBzdHJ1Y3QgdjRsMl90aW1lY29kZSB0aW1lY29kZTsKKyBfX3UzMiBzZXF1ZW5jZTsKKworIGVudW0gdjRsMl9tZW1vcnkgbWVtb3J5OworIHVuaW9uIHsKKyBfX3UzMiBvZmZzZXQ7CisgdW5zaWduZWQgbG9uZyB1c2VycHRyOworIH0gbTsKKyBfX3UzMiBsZW5ndGg7CisgX191MzIgaW5wdXQ7CisgX191MzIgcmVzZXJ2ZWQ7Cit9OworCisjZGVmaW5lIFY0TDJfQlVGX0ZMQUdfTUFQUEVEIDB4MDAwMSAgCisjZGVmaW5lIFY0TDJfQlVGX0ZMQUdfUVVFVUVEIDB4MDAwMiAgCisjZGVmaW5lIFY0TDJfQlVGX0ZMQUdfRE9ORSAweDAwMDQgIAorI2RlZmluZSBWNEwyX0JVRl9GTEFHX0tFWUZSQU1FIDB4MDAwOCAgCisjZGVmaW5lIFY0TDJfQlVGX0ZMQUdfUEZSQU1FIDB4MDAxMCAgCisjZGVmaW5lIFY0TDJfQlVGX0ZMQUdfQkZSQU1FIDB4MDAyMCAgCisjZGVmaW5lIFY0TDJfQlVGX0ZMQUdfVElNRUNPREUgMHgwMTAwICAKKyNkZWZpbmUgVjRMMl9CVUZfRkxBR19JTlBVVCAweDAyMDAgIAorCitzdHJ1Y3QgdjRsMl9mcmFtZWJ1ZmZlcgoreworIF9fdTMyIGNhcGFiaWxpdHk7CisgX191MzIgZmxhZ3M7CisKKyB2b2lkKiBiYXNlOworIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgZm10OworfTsKKworI2RlZmluZSBWNEwyX0ZCVUZfQ0FQX0VYVEVSTk9WRVJMQVkgMHgwMDAxCisjZGVmaW5lIFY0TDJfRkJVRl9DQVBfQ0hST01BS0VZIDB4MDAwMgorI2RlZmluZSBWNEwyX0ZCVUZfQ0FQX0xJU1RfQ0xJUFBJTkcgMHgwMDA0CisjZGVmaW5lIFY0TDJfRkJVRl9DQVBfQklUTUFQX0NMSVBQSU5HIDB4MDAwOAorCisjZGVmaW5lIFY0TDJfRkJVRl9GTEFHX1BSSU1BUlkgMHgwMDAxCisjZGVmaW5lIFY0TDJfRkJVRl9GTEFHX09WRVJMQVkgMHgwMDAyCisjZGVmaW5lIFY0TDJfRkJVRl9GTEFHX0NIUk9NQUtFWSAweDAwMDQKKworc3RydWN0IHY0bDJfY2xpcAoreworIHN0cnVjdCB2NGwyX3JlY3QgYzsKKyBzdHJ1Y3QgdjRsMl9jbGlwIF9fdXNlciAqbmV4dDsKK307CisKK3N0cnVjdCB2NGwyX3dpbmRvdworeworIHN0cnVjdCB2NGwyX3JlY3QgdzsKKyBlbnVtIHY0bDJfZmllbGQgZmllbGQ7CisgX191MzIgY2hyb21ha2V5OworIHN0cnVjdCB2NGwyX2NsaXAgX191c2VyICpjbGlwczsKKyBfX3UzMiBjbGlwY291bnQ7Cisgdm9pZCBfX3VzZXIgKmJpdG1hcDsKK307CisKK3N0cnVjdCB2NGwyX2NhcHR1cmVwYXJtCit7CisgX191MzIgY2FwYWJpbGl0eTsKKyBfX3UzMiBjYXB0dXJlbW9kZTsKKyBzdHJ1Y3QgdjRsMl9mcmFjdCB0aW1lcGVyZnJhbWU7CisgX191MzIgZXh0ZW5kZWRtb2RlOworIF9fdTMyIHJlYWRidWZmZXJzOworIF9fdTMyIHJlc2VydmVkWzRdOworfTsKKworI2RlZmluZSBWNEwyX01PREVfSElHSFFVQUxJVFkgMHgwMDAxICAKKyNkZWZpbmUgVjRMMl9DQVBfVElNRVBFUkZSQU1FIDB4MTAwMCAgCisKK3N0cnVjdCB2NGwyX291dHB1dHBhcm0KK3sKKyBfX3UzMiBjYXBhYmlsaXR5OworIF9fdTMyIG91dHB1dG1vZGU7Cisgc3RydWN0IHY0bDJfZnJhY3QgdGltZXBlcmZyYW1lOworIF9fdTMyIGV4dGVuZGVkbW9kZTsKKyBfX3UzMiB3cml0ZWJ1ZmZlcnM7CisgX191MzIgcmVzZXJ2ZWRbNF07Cit9OworCitzdHJ1Y3QgdjRsMl9jcm9wY2FwIHsKKyBlbnVtIHY0bDJfYnVmX3R5cGUgdHlwZTsKKyBzdHJ1Y3QgdjRsMl9yZWN0IGJvdW5kczsKKyBzdHJ1Y3QgdjRsMl9yZWN0IGRlZnJlY3Q7Cisgc3RydWN0IHY0bDJfZnJhY3QgcGl4ZWxhc3BlY3Q7Cit9OworCitzdHJ1Y3QgdjRsMl9jcm9wIHsKKyBlbnVtIHY0bDJfYnVmX3R5cGUgdHlwZTsKKyBzdHJ1Y3QgdjRsMl9yZWN0IGM7Cit9OworCit0eXBlZGVmIF9fdTY0IHY0bDJfc3RkX2lkOworCisjZGVmaW5lIFY0TDJfU1REX1BBTF9CICgodjRsMl9zdGRfaWQpMHgwMDAwMDAwMSkKKyNkZWZpbmUgVjRMMl9TVERfUEFMX0IxICgodjRsMl9zdGRfaWQpMHgwMDAwMDAwMikKKyNkZWZpbmUgVjRMMl9TVERfUEFMX0cgKCh2NGwyX3N0ZF9pZCkweDAwMDAwMDA0KQorI2RlZmluZSBWNEwyX1NURF9QQUxfSCAoKHY0bDJfc3RkX2lkKTB4MDAwMDAwMDgpCisjZGVmaW5lIFY0TDJfU1REX1BBTF9JICgodjRsMl9zdGRfaWQpMHgwMDAwMDAxMCkKKyNkZWZpbmUgVjRMMl9TVERfUEFMX0QgKCh2NGwyX3N0ZF9pZCkweDAwMDAwMDIwKQorI2RlZmluZSBWNEwyX1NURF9QQUxfRDEgKCh2NGwyX3N0ZF9pZCkweDAwMDAwMDQwKQorI2RlZmluZSBWNEwyX1NURF9QQUxfSyAoKHY0bDJfc3RkX2lkKTB4MDAwMDAwODApCisKKyNkZWZpbmUgVjRMMl9TVERfUEFMX00gKCh2NGwyX3N0ZF9pZCkweDAwMDAwMTAwKQorI2RlZmluZSBWNEwyX1NURF9QQUxfTiAoKHY0bDJfc3RkX2lkKTB4MDAwMDAyMDApCisjZGVmaW5lIFY0TDJfU1REX1BBTF9OYyAoKHY0bDJfc3RkX2lkKTB4MDAwMDA0MDApCisjZGVmaW5lIFY0TDJfU1REX1BBTF82MCAoKHY0bDJfc3RkX2lkKTB4MDAwMDA4MDApCisKKyNkZWZpbmUgVjRMMl9TVERfTlRTQ19NICgodjRsMl9zdGRfaWQpMHgwMDAwMTAwMCkKKyNkZWZpbmUgVjRMMl9TVERfTlRTQ19NX0pQICgodjRsMl9zdGRfaWQpMHgwMDAwMjAwMCkKKyNkZWZpbmUgVjRMMl9TVERfTlRTQ180NDMgKCh2NGwyX3N0ZF9pZCkweDAwMDA0MDAwKQorI2RlZmluZSBWNEwyX1NURF9OVFNDX01fS1IgKCh2NGwyX3N0ZF9pZCkweDAwMDA4MDAwKQorCisjZGVmaW5lIFY0TDJfU1REX1NFQ0FNX0IgKCh2NGwyX3N0ZF9pZCkweDAwMDEwMDAwKQorI2RlZmluZSBWNEwyX1NURF9TRUNBTV9EICgodjRsMl9zdGRfaWQpMHgwMDAyMDAwMCkKKyNkZWZpbmUgVjRMMl9TVERfU0VDQU1fRyAoKHY0bDJfc3RkX2lkKTB4MDAwNDAwMDApCisjZGVmaW5lIFY0TDJfU1REX1NFQ0FNX0ggKCh2NGwyX3N0ZF9pZCkweDAwMDgwMDAwKQorI2RlZmluZSBWNEwyX1NURF9TRUNBTV9LICgodjRsMl9zdGRfaWQpMHgwMDEwMDAwMCkKKyNkZWZpbmUgVjRMMl9TVERfU0VDQU1fSzEgKCh2NGwyX3N0ZF9pZCkweDAwMjAwMDAwKQorI2RlZmluZSBWNEwyX1NURF9TRUNBTV9MICgodjRsMl9zdGRfaWQpMHgwMDQwMDAwMCkKKyNkZWZpbmUgVjRMMl9TVERfU0VDQU1fTEMgKCh2NGwyX3N0ZF9pZCkweDAwODAwMDAwKQorCisjZGVmaW5lIFY0TDJfU1REX0FUU0NfOF9WU0IgKCh2NGwyX3N0ZF9pZCkweDAxMDAwMDAwKQorI2RlZmluZSBWNEwyX1NURF9BVFNDXzE2X1ZTQiAoKHY0bDJfc3RkX2lkKTB4MDIwMDAwMDApCisKKyNkZWZpbmUgVjRMMl9TVERfTU4gKFY0TDJfU1REX1BBTF9NfFY0TDJfU1REX1BBTF9OfFY0TDJfU1REX1BBTF9OY3xWNEwyX1NURF9OVFNDKQorI2RlZmluZSBWNEwyX1NURF9CIChWNEwyX1NURF9QQUxfQnxWNEwyX1NURF9QQUxfQjF8VjRMMl9TVERfU0VDQU1fQikKKyNkZWZpbmUgVjRMMl9TVERfR0ggKFY0TDJfU1REX1BBTF9HfFY0TDJfU1REX1BBTF9IfFY0TDJfU1REX1NFQ0FNX0d8VjRMMl9TVERfU0VDQU1fSCkKKyNkZWZpbmUgVjRMMl9TVERfREsgKFY0TDJfU1REX1BBTF9ES3xWNEwyX1NURF9TRUNBTV9ESykKKworI2RlZmluZSBWNEwyX1NURF9QQUxfQkcgKFY0TDJfU1REX1BBTF9CIHwgIFY0TDJfU1REX1BBTF9CMSB8ICBWNEwyX1NURF9QQUxfRykKKyNkZWZpbmUgVjRMMl9TVERfUEFMX0RLIChWNEwyX1NURF9QQUxfRCB8ICBWNEwyX1NURF9QQUxfRDEgfCAgVjRMMl9TVERfUEFMX0spCisjZGVmaW5lIFY0TDJfU1REX1BBTCAoVjRMMl9TVERfUEFMX0JHIHwgIFY0TDJfU1REX1BBTF9ESyB8ICBWNEwyX1NURF9QQUxfSCB8ICBWNEwyX1NURF9QQUxfSSkKKyNkZWZpbmUgVjRMMl9TVERfTlRTQyAoVjRMMl9TVERfTlRTQ19NIHwgIFY0TDJfU1REX05UU0NfTV9KUCB8ICBWNEwyX1NURF9OVFNDX01fS1IpCisjZGVmaW5lIFY0TDJfU1REX1NFQ0FNX0RLIChWNEwyX1NURF9TRUNBTV9EIHwgIFY0TDJfU1REX1NFQ0FNX0sgfCAgVjRMMl9TVERfU0VDQU1fSzEpCisjZGVmaW5lIFY0TDJfU1REX1NFQ0FNIChWNEwyX1NURF9TRUNBTV9CIHwgIFY0TDJfU1REX1NFQ0FNX0cgfCAgVjRMMl9TVERfU0VDQU1fSCB8ICBWNEwyX1NURF9TRUNBTV9ESyB8ICBWNEwyX1NURF9TRUNBTV9MIHwgIFY0TDJfU1REX1NFQ0FNX0xDKQorCisjZGVmaW5lIFY0TDJfU1REXzUyNV82MCAoVjRMMl9TVERfUEFMX00gfCAgVjRMMl9TVERfUEFMXzYwIHwgIFY0TDJfU1REX05UU0MgfCAgVjRMMl9TVERfTlRTQ180NDMpCisjZGVmaW5lIFY0TDJfU1REXzYyNV81MCAoVjRMMl9TVERfUEFMIHwgIFY0TDJfU1REX1BBTF9OIHwgIFY0TDJfU1REX1BBTF9OYyB8ICBWNEwyX1NURF9TRUNBTSkKKyNkZWZpbmUgVjRMMl9TVERfQVRTQyAoVjRMMl9TVERfQVRTQ184X1ZTQiB8ICBWNEwyX1NURF9BVFNDXzE2X1ZTQikKKworI2RlZmluZSBWNEwyX1NURF9VTktOT1dOIDAKKyNkZWZpbmUgVjRMMl9TVERfQUxMIChWNEwyX1NURF81MjVfNjAgfCAgVjRMMl9TVERfNjI1XzUwKQorCitzdHJ1Y3QgdjRsMl9zdGFuZGFyZAoreworIF9fdTMyIGluZGV4OworIHY0bDJfc3RkX2lkIGlkOworIF9fdTggbmFtZVsyNF07Cisgc3RydWN0IHY0bDJfZnJhY3QgZnJhbWVwZXJpb2Q7CisgX191MzIgZnJhbWVsaW5lczsKKyBfX3UzMiByZXNlcnZlZFs0XTsKK307CisKK3N0cnVjdCB2NGwyX2lucHV0Cit7CisgX191MzIgaW5kZXg7CisgX191OCBuYW1lWzMyXTsKKyBfX3UzMiB0eXBlOworIF9fdTMyIGF1ZGlvc2V0OworIF9fdTMyIHR1bmVyOworIHY0bDJfc3RkX2lkIHN0ZDsKKyBfX3UzMiBzdGF0dXM7CisgX191MzIgcmVzZXJ2ZWRbNF07Cit9OworCisjZGVmaW5lIFY0TDJfSU5QVVRfVFlQRV9UVU5FUiAxCisjZGVmaW5lIFY0TDJfSU5QVVRfVFlQRV9DQU1FUkEgMgorCisjZGVmaW5lIFY0TDJfSU5fU1RfTk9fUE9XRVIgMHgwMDAwMDAwMSAgCisjZGVmaW5lIFY0TDJfSU5fU1RfTk9fU0lHTkFMIDB4MDAwMDAwMDIKKyNkZWZpbmUgVjRMMl9JTl9TVF9OT19DT0xPUiAweDAwMDAwMDA0CisKKyNkZWZpbmUgVjRMMl9JTl9TVF9OT19IX0xPQ0sgMHgwMDAwMDEwMCAgCisjZGVmaW5lIFY0TDJfSU5fU1RfQ09MT1JfS0lMTCAweDAwMDAwMjAwICAKKworI2RlZmluZSBWNEwyX0lOX1NUX05PX1NZTkMgMHgwMDAxMDAwMCAgCisjZGVmaW5lIFY0TDJfSU5fU1RfTk9fRVFVIDB4MDAwMjAwMDAgIAorI2RlZmluZSBWNEwyX0lOX1NUX05PX0NBUlJJRVIgMHgwMDA0MDAwMCAgCisKKyNkZWZpbmUgVjRMMl9JTl9TVF9NQUNST1ZJU0lPTiAweDAxMDAwMDAwICAKKyNkZWZpbmUgVjRMMl9JTl9TVF9OT19BQ0NFU1MgMHgwMjAwMDAwMCAgCisjZGVmaW5lIFY0TDJfSU5fU1RfVlRSIDB4MDQwMDAwMDAgIAorCitzdHJ1Y3QgdjRsMl9vdXRwdXQKK3sKKyBfX3UzMiBpbmRleDsKKyBfX3U4IG5hbWVbMzJdOworIF9fdTMyIHR5cGU7CisgX191MzIgYXVkaW9zZXQ7CisgX191MzIgbW9kdWxhdG9yOworIHY0bDJfc3RkX2lkIHN0ZDsKKyBfX3UzMiByZXNlcnZlZFs0XTsKK307CisKKyNkZWZpbmUgVjRMMl9PVVRQVVRfVFlQRV9NT0RVTEFUT1IgMQorI2RlZmluZSBWNEwyX09VVFBVVF9UWVBFX0FOQUxPRyAyCisjZGVmaW5lIFY0TDJfT1VUUFVUX1RZUEVfQU5BTE9HVkdBT1ZFUkxBWSAzCisKK3N0cnVjdCB2NGwyX2NvbnRyb2wKK3sKKyBfX3UzMiBpZDsKKyBfX3MzMiB2YWx1ZTsKK307CisKK3N0cnVjdCB2NGwyX2V4dF9jb250cm9sCit7CisgX191MzIgaWQ7CisgX191MzIgcmVzZXJ2ZWQyWzJdOworIHVuaW9uIHsKKyBfX3MzMiB2YWx1ZTsKKyBfX3M2NCB2YWx1ZTY0OworIHZvaWQgKnJlc2VydmVkOworIH07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzCit7CisgX191MzIgY3RybF9jbGFzczsKKyBfX3UzMiBjb3VudDsKKyBfX3UzMiBlcnJvcl9pZHg7CisgX191MzIgcmVzZXJ2ZWRbMl07Cisgc3RydWN0IHY0bDJfZXh0X2NvbnRyb2wgKmNvbnRyb2xzOworfTsKKworI2RlZmluZSBWNEwyX0NUUkxfQ0xBU1NfVVNFUiAweDAwOTgwMDAwICAKKyNkZWZpbmUgVjRMMl9DVFJMX0NMQVNTX01QRUcgMHgwMDk5MDAwMCAgCisKKyNkZWZpbmUgVjRMMl9DVFJMX0lEX01BU0sgKDB4MGZmZmZmZmYpCisjZGVmaW5lIFY0TDJfQ1RSTF9JRDJDTEFTUyhpZCkgKChpZCkgJiAweDBmZmYwMDAwVUwpCisjZGVmaW5lIFY0TDJfQ1RSTF9EUklWRVJfUFJJVihpZCkgKCgoaWQpICYgMHhmZmZmKSA+PSAweDEwMDApCisKK3N0cnVjdCB2NGwyX3F1ZXJ5Y3RybAoreworIF9fdTMyIGlkOworIGVudW0gdjRsMl9jdHJsX3R5cGUgdHlwZTsKKyBfX3U4IG5hbWVbMzJdOworIF9fczMyIG1pbmltdW07CisgX19zMzIgbWF4aW11bTsKKyBfX3MzMiBzdGVwOworIF9fczMyIGRlZmF1bHRfdmFsdWU7CisgX191MzIgZmxhZ3M7CisgX191MzIgcmVzZXJ2ZWRbMl07Cit9OworCitzdHJ1Y3QgdjRsMl9xdWVyeW1lbnUKK3sKKyBfX3UzMiBpZDsKKyBfX3UzMiBpbmRleDsKKyBfX3U4IG5hbWVbMzJdOworIF9fdTMyIHJlc2VydmVkOworfTsKKworI2RlZmluZSBWNEwyX0NUUkxfRkxBR19ESVNBQkxFRCAweDAwMDEKKyNkZWZpbmUgVjRMMl9DVFJMX0ZMQUdfR1JBQkJFRCAweDAwMDIKKyNkZWZpbmUgVjRMMl9DVFJMX0ZMQUdfUkVBRF9PTkxZIDB4MDAwNAorI2RlZmluZSBWNEwyX0NUUkxfRkxBR19VUERBVEUgMHgwMDA4CisjZGVmaW5lIFY0TDJfQ1RSTF9GTEFHX0lOQUNUSVZFIDB4MDAxMAorI2RlZmluZSBWNEwyX0NUUkxfRkxBR19TTElERVIgMHgwMDIwCisKKyNkZWZpbmUgVjRMMl9DVFJMX0ZMQUdfTkVYVF9DVFJMIDB4ODAwMDAwMDAKKworI2RlZmluZSBWNEwyX0NJRF9CQVNFIChWNEwyX0NUUkxfQ0xBU1NfVVNFUiB8IDB4OTAwKQorI2RlZmluZSBWNEwyX0NJRF9VU0VSX0JBU0UgVjRMMl9DSURfQkFTRQorCisjZGVmaW5lIFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSAweDA4MDAwMDAwCisKKyNkZWZpbmUgVjRMMl9DSURfVVNFUl9DTEFTUyAoVjRMMl9DVFJMX0NMQVNTX1VTRVIgfCAxKQorI2RlZmluZSBWNEwyX0NJRF9CUklHSFRORVNTIChWNEwyX0NJRF9CQVNFKzApCisjZGVmaW5lIFY0TDJfQ0lEX0NPTlRSQVNUIChWNEwyX0NJRF9CQVNFKzEpCisjZGVmaW5lIFY0TDJfQ0lEX1NBVFVSQVRJT04gKFY0TDJfQ0lEX0JBU0UrMikKKyNkZWZpbmUgVjRMMl9DSURfSFVFIChWNEwyX0NJRF9CQVNFKzMpCisjZGVmaW5lIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRSAoVjRMMl9DSURfQkFTRSs1KQorI2RlZmluZSBWNEwyX0NJRF9BVURJT19CQUxBTkNFIChWNEwyX0NJRF9CQVNFKzYpCisjZGVmaW5lIFY0TDJfQ0lEX0FVRElPX0JBU1MgKFY0TDJfQ0lEX0JBU0UrNykKKyNkZWZpbmUgVjRMMl9DSURfQVVESU9fVFJFQkxFIChWNEwyX0NJRF9CQVNFKzgpCisjZGVmaW5lIFY0TDJfQ0lEX0FVRElPX01VVEUgKFY0TDJfQ0lEX0JBU0UrOSkKKyNkZWZpbmUgVjRMMl9DSURfQVVESU9fTE9VRE5FU1MgKFY0TDJfQ0lEX0JBU0UrMTApCisjZGVmaW5lIFY0TDJfQ0lEX0JMQUNLX0xFVkVMIChWNEwyX0NJRF9CQVNFKzExKQorI2RlZmluZSBWNEwyX0NJRF9BVVRPX1dISVRFX0JBTEFOQ0UgKFY0TDJfQ0lEX0JBU0UrMTIpCisjZGVmaW5lIFY0TDJfQ0lEX0RPX1dISVRFX0JBTEFOQ0UgKFY0TDJfQ0lEX0JBU0UrMTMpCisjZGVmaW5lIFY0TDJfQ0lEX1JFRF9CQUxBTkNFIChWNEwyX0NJRF9CQVNFKzE0KQorI2RlZmluZSBWNEwyX0NJRF9CTFVFX0JBTEFOQ0UgKFY0TDJfQ0lEX0JBU0UrMTUpCisjZGVmaW5lIFY0TDJfQ0lEX0dBTU1BIChWNEwyX0NJRF9CQVNFKzE2KQorI2RlZmluZSBWNEwyX0NJRF9XSElURU5FU1MgKFY0TDJfQ0lEX0dBTU1BKSAgCisjZGVmaW5lIFY0TDJfQ0lEX0VYUE9TVVJFIChWNEwyX0NJRF9CQVNFKzE3KQorI2RlZmluZSBWNEwyX0NJRF9BVVRPR0FJTiAoVjRMMl9DSURfQkFTRSsxOCkKKyNkZWZpbmUgVjRMMl9DSURfR0FJTiAoVjRMMl9DSURfQkFTRSsxOSkKKyNkZWZpbmUgVjRMMl9DSURfSEZMSVAgKFY0TDJfQ0lEX0JBU0UrMjApCisjZGVmaW5lIFY0TDJfQ0lEX1ZGTElQIChWNEwyX0NJRF9CQVNFKzIxKQorI2RlZmluZSBWNEwyX0NJRF9IQ0VOVEVSIChWNEwyX0NJRF9CQVNFKzIyKQorI2RlZmluZSBWNEwyX0NJRF9WQ0VOVEVSIChWNEwyX0NJRF9CQVNFKzIzKQorI2RlZmluZSBWNEwyX0NJRF9MQVNUUDEgKFY0TDJfQ0lEX0JBU0UrMjQpICAKKworI2RlZmluZSBWNEwyX0NJRF9NUEVHX0JBU0UgKFY0TDJfQ1RSTF9DTEFTU19NUEVHIHwgMHg5MDApCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQ0xBU1MgKFY0TDJfQ1RSTF9DTEFTU19NUEVHIHwgMSkKKworI2RlZmluZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9UWVBFIChWNEwyX0NJRF9NUEVHX0JBU0UrMCkKK2VudW0gdjRsMl9tcGVnX3N0cmVhbV90eXBlIHsKKyBWNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzJfUFMgPSAwLAorIFY0TDJfTVBFR19TVFJFQU1fVFlQRV9NUEVHMl9UUyA9IDEsCisgVjRMMl9NUEVHX1NUUkVBTV9UWVBFX01QRUcxX1NTID0gMiwKKyBWNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzJfRFZEID0gMywKKyBWNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzFfVkNEID0gNCwKKyBWNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzJfU1ZDRCA9IDUsCit9OworI2RlZmluZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QSURfUE1UIChWNEwyX0NJRF9NUEVHX0JBU0UrMSkKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19TVFJFQU1fUElEX0FVRElPIChWNEwyX0NJRF9NUEVHX0JBU0UrMikKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19TVFJFQU1fUElEX1ZJREVPIChWNEwyX0NJRF9NUEVHX0JBU0UrMykKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19TVFJFQU1fUElEX1BDUiAoVjRMMl9DSURfTVBFR19CQVNFKzQpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1BFU19JRF9BVURJTyAoVjRMMl9DSURfTVBFR19CQVNFKzUpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1BFU19JRF9WSURFTyAoVjRMMl9DSURfTVBFR19CQVNFKzYpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1ZCSV9GTVQgKFY0TDJfQ0lEX01QRUdfQkFTRSs3KQorZW51bSB2NGwyX21wZWdfc3RyZWFtX3ZiaV9mbXQgeworIFY0TDJfTVBFR19TVFJFQU1fVkJJX0ZNVF9OT05FID0gMCwKKyBWNEwyX01QRUdfU1RSRUFNX1ZCSV9GTVRfSVZUViA9IDEsCit9OworCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUSAoVjRMMl9DSURfTVBFR19CQVNFKzEwMCkKK2VudW0gdjRsMl9tcGVnX2F1ZGlvX3NhbXBsaW5nX2ZyZXEgeworIFY0TDJfTVBFR19BVURJT19TQU1QTElOR19GUkVRXzQ0MTAwID0gMCwKKyBWNEwyX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUV80ODAwMCA9IDEsCisgVjRMMl9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVFfMzIwMDAgPSAyLAorfTsKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19BVURJT19FTkNPRElORyAoVjRMMl9DSURfTVBFR19CQVNFKzEwMSkKK2VudW0gdjRsMl9tcGVnX2F1ZGlvX2VuY29kaW5nIHsKKyBWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfTEFZRVJfMSA9IDAsCisgVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0xBWUVSXzIgPSAxLAorIFY0TDJfTVBFR19BVURJT19FTkNPRElOR19MQVlFUl8zID0gMiwKK307CisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQVVESU9fTDFfQklUUkFURSAoVjRMMl9DSURfTVBFR19CQVNFKzEwMikKK2VudW0gdjRsMl9tcGVnX2F1ZGlvX2wxX2JpdHJhdGUgeworIFY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzMySyA9IDAsCisgVjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfNjRLID0gMSwKKyBWNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV85NksgPSAyLAorIFY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzEyOEsgPSAzLAorIFY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzE2MEsgPSA0LAorIFY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzE5MksgPSA1LAorIFY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzIyNEsgPSA2LAorIFY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzI1NksgPSA3LAorIFY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzI4OEsgPSA4LAorIFY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzMyMEsgPSA5LAorIFY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzM1MksgPSAxMCwKKyBWNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV8zODRLID0gMTEsCisgVjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfNDE2SyA9IDEyLAorIFY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzQ0OEsgPSAxMywKK307CisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQVVESU9fTDJfQklUUkFURSAoVjRMMl9DSURfTVBFR19CQVNFKzEwMykKK2VudW0gdjRsMl9tcGVnX2F1ZGlvX2wyX2JpdHJhdGUgeworIFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzMySyA9IDAsCisgVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfNDhLID0gMSwKKyBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV81NksgPSAyLAorIFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzY0SyA9IDMsCisgVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfODBLID0gNCwKKyBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV85NksgPSA1LAorIFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzExMksgPSA2LAorIFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzEyOEsgPSA3LAorIFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzE2MEsgPSA4LAorIFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzE5MksgPSA5LAorIFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzIyNEsgPSAxMCwKKyBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8yNTZLID0gMTEsCisgVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfMzIwSyA9IDEyLAorIFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzM4NEsgPSAxMywKK307CisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQVVESU9fTDNfQklUUkFURSAoVjRMMl9DSURfTVBFR19CQVNFKzEwNCkKK2VudW0gdjRsMl9tcGVnX2F1ZGlvX2wzX2JpdHJhdGUgeworIFY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzMySyA9IDAsCisgVjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfNDBLID0gMSwKKyBWNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV80OEsgPSAyLAorIFY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzU2SyA9IDMsCisgVjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfNjRLID0gNCwKKyBWNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV84MEsgPSA1LAorIFY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzk2SyA9IDYsCisgVjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfMTEySyA9IDcsCisgVjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfMTI4SyA9IDgsCisgVjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfMTYwSyA9IDksCisgVjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfMTkySyA9IDEwLAorIFY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzIyNEsgPSAxMSwKKyBWNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV8yNTZLID0gMTIsCisgVjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfMzIwSyA9IDEzLAorfTsKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19BVURJT19NT0RFIChWNEwyX0NJRF9NUEVHX0JBU0UrMTA1KQorZW51bSB2NGwyX21wZWdfYXVkaW9fbW9kZSB7CisgVjRMMl9NUEVHX0FVRElPX01PREVfU1RFUkVPID0gMCwKKyBWNEwyX01QRUdfQVVESU9fTU9ERV9KT0lOVF9TVEVSRU8gPSAxLAorIFY0TDJfTVBFR19BVURJT19NT0RFX0RVQUwgPSAyLAorIFY0TDJfTVBFR19BVURJT19NT0RFX01PTk8gPSAzLAorfTsKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19BVURJT19NT0RFX0VYVEVOU0lPTiAoVjRMMl9DSURfTVBFR19CQVNFKzEwNikKK2VudW0gdjRsMl9tcGVnX2F1ZGlvX21vZGVfZXh0ZW5zaW9uIHsKKyBWNEwyX01QRUdfQVVESU9fTU9ERV9FWFRFTlNJT05fQk9VTkRfNCA9IDAsCisgVjRMMl9NUEVHX0FVRElPX01PREVfRVhURU5TSU9OX0JPVU5EXzggPSAxLAorIFY0TDJfTVBFR19BVURJT19NT0RFX0VYVEVOU0lPTl9CT1VORF8xMiA9IDIsCisgVjRMMl9NUEVHX0FVRElPX01PREVfRVhURU5TSU9OX0JPVU5EXzE2ID0gMywKK307CisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQVVESU9fRU1QSEFTSVMgKFY0TDJfQ0lEX01QRUdfQkFTRSsxMDcpCitlbnVtIHY0bDJfbXBlZ19hdWRpb19lbXBoYXNpcyB7CisgVjRMMl9NUEVHX0FVRElPX0VNUEhBU0lTX05PTkUgPSAwLAorIFY0TDJfTVBFR19BVURJT19FTVBIQVNJU181MF9ESVZfMTVfdVMgPSAxLAorIFY0TDJfTVBFR19BVURJT19FTVBIQVNJU19DQ0lUVF9KMTcgPSAyLAorfTsKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19BVURJT19DUkMgKFY0TDJfQ0lEX01QRUdfQkFTRSsxMDgpCitlbnVtIHY0bDJfbXBlZ19hdWRpb19jcmMgeworIFY0TDJfTVBFR19BVURJT19DUkNfTk9ORSA9IDAsCisgVjRMMl9NUEVHX0FVRElPX0NSQ19DUkMxNiA9IDEsCit9OworCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fRU5DT0RJTkcgKFY0TDJfQ0lEX01QRUdfQkFTRSsyMDApCitlbnVtIHY0bDJfbXBlZ192aWRlb19lbmNvZGluZyB7CisgVjRMMl9NUEVHX1ZJREVPX0VOQ09ESU5HX01QRUdfMSA9IDAsCisgVjRMMl9NUEVHX1ZJREVPX0VOQ09ESU5HX01QRUdfMiA9IDEsCit9OworI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0FTUEVDVCAoVjRMMl9DSURfTVBFR19CQVNFKzIwMSkKK2VudW0gdjRsMl9tcGVnX3ZpZGVvX2FzcGVjdCB7CisgVjRMMl9NUEVHX1ZJREVPX0FTUEVDVF8xeDEgPSAwLAorIFY0TDJfTVBFR19WSURFT19BU1BFQ1RfNHgzID0gMSwKKyBWNEwyX01QRUdfVklERU9fQVNQRUNUXzE2eDkgPSAyLAorIFY0TDJfTVBFR19WSURFT19BU1BFQ1RfMjIxeDEwMCA9IDMsCit9OworI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JfRlJBTUVTIChWNEwyX0NJRF9NUEVHX0JBU0UrMjAyKQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0dPUF9TSVpFIChWNEwyX0NJRF9NUEVHX0JBU0UrMjAzKQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0dPUF9DTE9TVVJFIChWNEwyX0NJRF9NUEVHX0JBU0UrMjA0KQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX1BVTExET1dOIChWNEwyX0NJRF9NUEVHX0JBU0UrMjA1KQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERSAoVjRMMl9DSURfTVBFR19CQVNFKzIwNikKK2VudW0gdjRsMl9tcGVnX3ZpZGVvX2JpdHJhdGVfbW9kZSB7CisgVjRMMl9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERV9WQlIgPSAwLAorIFY0TDJfTVBFR19WSURFT19CSVRSQVRFX01PREVfQ0JSID0gMSwKK307CisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURSAoVjRMMl9DSURfTVBFR19CQVNFKzIwNykKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFX1BFQUsgKFY0TDJfQ0lEX01QRUdfQkFTRSsyMDgpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fVEVNUE9SQUxfREVDSU1BVElPTiAoVjRMMl9DSURfTVBFR19CQVNFKzIwOSkKKworI2RlZmluZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfQkFTRSAoVjRMMl9DVFJMX0NMQVNTX01QRUcgfCAweDEwMDApCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19TUEFUSUFMX0ZJTFRFUl9NT0RFIChWNEwyX0NJRF9NUEVHX0NYMjM0MVhfQkFTRSswKQorZW51bSB2NGwyX21wZWdfY3gyMzQxeF92aWRlb19zcGF0aWFsX2ZpbHRlcl9tb2RlIHsKKyBWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19TUEFUSUFMX0ZJTFRFUl9NT0RFX01BTlVBTCA9IDAsCisgVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fU1BBVElBTF9GSUxURVJfTU9ERV9BVVRPID0gMSwKK307CisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19TUEFUSUFMX0ZJTFRFUiAoVjRMMl9DSURfTVBFR19DWDIzNDFYX0JBU0UrMSkKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX0xVTUFfU1BBVElBTF9GSUxURVJfVFlQRSAoVjRMMl9DSURfTVBFR19DWDIzNDFYX0JBU0UrMikKK2VudW0gdjRsMl9tcGVnX2N4MjM0MXhfdmlkZW9fbHVtYV9zcGF0aWFsX2ZpbHRlcl90eXBlIHsKKyBWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19MVU1BX1NQQVRJQUxfRklMVEVSX1RZUEVfT0ZGID0gMCwKKyBWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19MVU1BX1NQQVRJQUxfRklMVEVSX1RZUEVfMURfSE9SID0gMSwKKyBWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19MVU1BX1NQQVRJQUxfRklMVEVSX1RZUEVfMURfVkVSVCA9IDIsCisgVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fTFVNQV9TUEFUSUFMX0ZJTFRFUl9UWVBFXzJEX0hWX1NFUEFSQUJMRSA9IDMsCisgVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fTFVNQV9TUEFUSUFMX0ZJTFRFUl9UWVBFXzJEX1NZTV9OT05fU0VQQVJBQkxFID0gNCwKK307CisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19DSFJPTUFfU1BBVElBTF9GSUxURVJfVFlQRSAoVjRMMl9DSURfTVBFR19DWDIzNDFYX0JBU0UrMykKK2VudW0gdjRsMl9tcGVnX2N4MjM0MXhfdmlkZW9fY2hyb21hX3NwYXRpYWxfZmlsdGVyX3R5cGUgeworIFY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX0NIUk9NQV9TUEFUSUFMX0ZJTFRFUl9UWVBFX09GRiA9IDAsCisgVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fQ0hST01BX1NQQVRJQUxfRklMVEVSX1RZUEVfMURfSE9SID0gMSwKK307CisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19URU1QT1JBTF9GSUxURVJfTU9ERSAoVjRMMl9DSURfTVBFR19DWDIzNDFYX0JBU0UrNCkKK2VudW0gdjRsMl9tcGVnX2N4MjM0MXhfdmlkZW9fdGVtcG9yYWxfZmlsdGVyX21vZGUgeworIFY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX1RFTVBPUkFMX0ZJTFRFUl9NT0RFX01BTlVBTCA9IDAsCisgVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fVEVNUE9SQUxfRklMVEVSX01PREVfQVVUTyA9IDEsCit9OworI2RlZmluZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fVEVNUE9SQUxfRklMVEVSIChWNEwyX0NJRF9NUEVHX0NYMjM0MVhfQkFTRSs1KQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fTUVESUFOX0ZJTFRFUl9UWVBFIChWNEwyX0NJRF9NUEVHX0NYMjM0MVhfQkFTRSs2KQorZW51bSB2NGwyX21wZWdfY3gyMzQxeF92aWRlb19tZWRpYW5fZmlsdGVyX3R5cGUgeworIFY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX01FRElBTl9GSUxURVJfVFlQRV9PRkYgPSAwLAorIFY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX01FRElBTl9GSUxURVJfVFlQRV9IT1IgPSAxLAorIFY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX01FRElBTl9GSUxURVJfVFlQRV9WRVJUID0gMiwKKyBWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19NRURJQU5fRklMVEVSX1RZUEVfSE9SX1ZFUlQgPSAzLAorIFY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX01FRElBTl9GSUxURVJfVFlQRV9ESUFHID0gNCwKK307CisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19MVU1BX01FRElBTl9GSUxURVJfQk9UVE9NIChWNEwyX0NJRF9NUEVHX0NYMjM0MVhfQkFTRSs3KQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fTFVNQV9NRURJQU5fRklMVEVSX1RPUCAoVjRMMl9DSURfTVBFR19DWDIzNDFYX0JBU0UrOCkKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX0NIUk9NQV9NRURJQU5fRklMVEVSX0JPVFRPTSAoVjRMMl9DSURfTVBFR19DWDIzNDFYX0JBU0UrOSkKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX0NIUk9NQV9NRURJQU5fRklMVEVSX1RPUCAoVjRMMl9DSURfTVBFR19DWDIzNDFYX0JBU0UrMTApCisKK3N0cnVjdCB2NGwyX3R1bmVyCit7CisgX191MzIgaW5kZXg7CisgX191OCBuYW1lWzMyXTsKKyBlbnVtIHY0bDJfdHVuZXJfdHlwZSB0eXBlOworIF9fdTMyIGNhcGFiaWxpdHk7CisgX191MzIgcmFuZ2Vsb3c7CisgX191MzIgcmFuZ2VoaWdoOworIF9fdTMyIHJ4c3ViY2hhbnM7CisgX191MzIgYXVkbW9kZTsKKyBfX3MzMiBzaWduYWw7CisgX19zMzIgYWZjOworIF9fdTMyIHJlc2VydmVkWzRdOworfTsKKworc3RydWN0IHY0bDJfbW9kdWxhdG9yCit7CisgX191MzIgaW5kZXg7CisgX191OCBuYW1lWzMyXTsKKyBfX3UzMiBjYXBhYmlsaXR5OworIF9fdTMyIHJhbmdlbG93OworIF9fdTMyIHJhbmdlaGlnaDsKKyBfX3UzMiB0eHN1YmNoYW5zOworIF9fdTMyIHJlc2VydmVkWzRdOworfTsKKworI2RlZmluZSBWNEwyX1RVTkVSX0NBUF9MT1cgMHgwMDAxCisjZGVmaW5lIFY0TDJfVFVORVJfQ0FQX05PUk0gMHgwMDAyCisjZGVmaW5lIFY0TDJfVFVORVJfQ0FQX1NURVJFTyAweDAwMTAKKyNkZWZpbmUgVjRMMl9UVU5FUl9DQVBfTEFORzIgMHgwMDIwCisjZGVmaW5lIFY0TDJfVFVORVJfQ0FQX1NBUCAweDAwMjAKKyNkZWZpbmUgVjRMMl9UVU5FUl9DQVBfTEFORzEgMHgwMDQwCisKKyNkZWZpbmUgVjRMMl9UVU5FUl9TVUJfTU9OTyAweDAwMDEKKyNkZWZpbmUgVjRMMl9UVU5FUl9TVUJfU1RFUkVPIDB4MDAwMgorI2RlZmluZSBWNEwyX1RVTkVSX1NVQl9MQU5HMiAweDAwMDQKKyNkZWZpbmUgVjRMMl9UVU5FUl9TVUJfU0FQIDB4MDAwNAorI2RlZmluZSBWNEwyX1RVTkVSX1NVQl9MQU5HMSAweDAwMDgKKworI2RlZmluZSBWNEwyX1RVTkVSX01PREVfTU9OTyAweDAwMDAKKyNkZWZpbmUgVjRMMl9UVU5FUl9NT0RFX1NURVJFTyAweDAwMDEKKyNkZWZpbmUgVjRMMl9UVU5FUl9NT0RFX0xBTkcyIDB4MDAwMgorI2RlZmluZSBWNEwyX1RVTkVSX01PREVfU0FQIDB4MDAwMgorI2RlZmluZSBWNEwyX1RVTkVSX01PREVfTEFORzEgMHgwMDAzCisjZGVmaW5lIFY0TDJfVFVORVJfTU9ERV9MQU5HMV9MQU5HMiAweDAwMDQKKworc3RydWN0IHY0bDJfZnJlcXVlbmN5Cit7CisgX191MzIgdHVuZXI7CisgZW51bSB2NGwyX3R1bmVyX3R5cGUgdHlwZTsKKyBfX3UzMiBmcmVxdWVuY3k7CisgX191MzIgcmVzZXJ2ZWRbOF07Cit9OworCitzdHJ1Y3QgdjRsMl9hdWRpbworeworIF9fdTMyIGluZGV4OworIF9fdTggbmFtZVszMl07CisgX191MzIgY2FwYWJpbGl0eTsKKyBfX3UzMiBtb2RlOworIF9fdTMyIHJlc2VydmVkWzJdOworfTsKKworI2RlZmluZSBWNEwyX0FVRENBUF9TVEVSRU8gMHgwMDAwMQorI2RlZmluZSBWNEwyX0FVRENBUF9BVkwgMHgwMDAwMgorCisjZGVmaW5lIFY0TDJfQVVETU9ERV9BVkwgMHgwMDAwMQorCitzdHJ1Y3QgdjRsMl9hdWRpb291dAoreworIF9fdTMyIGluZGV4OworIF9fdTggbmFtZVszMl07CisgX191MzIgY2FwYWJpbGl0eTsKKyBfX3UzMiBtb2RlOworIF9fdTMyIHJlc2VydmVkWzJdOworfTsKKworc3RydWN0IHY0bDJfdmJpX2Zvcm1hdAoreworIF9fdTMyIHNhbXBsaW5nX3JhdGU7CisgX191MzIgb2Zmc2V0OworIF9fdTMyIHNhbXBsZXNfcGVyX2xpbmU7CisgX191MzIgc2FtcGxlX2Zvcm1hdDsKKyBfX3MzMiBzdGFydFsyXTsKKyBfX3UzMiBjb3VudFsyXTsKKyBfX3UzMiBmbGFnczsKKyBfX3UzMiByZXNlcnZlZFsyXTsKK307CisKKyNkZWZpbmUgVjRMMl9WQklfVU5TWU5DICgxPDwgMCkKKyNkZWZpbmUgVjRMMl9WQklfSU5URVJMQUNFRCAoMTw8IDEpCisKK3N0cnVjdCB2NGwyX3NsaWNlZF92YmlfZm9ybWF0Cit7CisgX191MTYgc2VydmljZV9zZXQ7CisKKyBfX3UxNiBzZXJ2aWNlX2xpbmVzWzJdWzI0XTsKKyBfX3UzMiBpb19zaXplOworIF9fdTMyIHJlc2VydmVkWzJdOworfTsKKworI2RlZmluZSBWNEwyX1NMSUNFRF9URUxFVEVYVF9CICgweDAwMDEpCisKKyNkZWZpbmUgVjRMMl9TTElDRURfVlBTICgweDA0MDApCisKKyNkZWZpbmUgVjRMMl9TTElDRURfQ0FQVElPTl81MjUgKDB4MTAwMCkKKworI2RlZmluZSBWNEwyX1NMSUNFRF9XU1NfNjI1ICgweDQwMDApCisKKyNkZWZpbmUgVjRMMl9TTElDRURfVkJJXzUyNSAoVjRMMl9TTElDRURfQ0FQVElPTl81MjUpCisjZGVmaW5lIFY0TDJfU0xJQ0VEX1ZCSV82MjUgKFY0TDJfU0xJQ0VEX1RFTEVURVhUX0IgfCBWNEwyX1NMSUNFRF9WUFMgfCBWNEwyX1NMSUNFRF9XU1NfNjI1KQorCitzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2NhcAoreworIF9fdTE2IHNlcnZpY2Vfc2V0OworCisgX191MTYgc2VydmljZV9saW5lc1syXVsyNF07CisgX191MzIgcmVzZXJ2ZWRbNF07Cit9OworCitzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2RhdGEKK3sKKyBfX3UzMiBpZDsKKyBfX3UzMiBmaWVsZDsKKyBfX3UzMiBsaW5lOworIF9fdTMyIHJlc2VydmVkOworIF9fdTggZGF0YVs0OF07Cit9OworCitzdHJ1Y3QgdjRsMl9mb3JtYXQKK3sKKyBlbnVtIHY0bDJfYnVmX3R5cGUgdHlwZTsKKyB1bmlvbgorIHsKKyBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHBpeDsKKyBzdHJ1Y3QgdjRsMl93aW5kb3cgd2luOworIHN0cnVjdCB2NGwyX3ZiaV9mb3JtYXQgdmJpOworIHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZm9ybWF0IHNsaWNlZDsKKyBfX3U4IHJhd19kYXRhWzIwMF07CisgfSBmbXQ7Cit9OworCitzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtCit7CisgZW51bSB2NGwyX2J1Zl90eXBlIHR5cGU7CisgdW5pb24KKyB7Cisgc3RydWN0IHY0bDJfY2FwdHVyZXBhcm0gY2FwdHVyZTsKKyBzdHJ1Y3QgdjRsMl9vdXRwdXRwYXJtIG91dHB1dDsKKyBfX3U4IHJhd19kYXRhWzIwMF07CisgfSBwYXJtOworfTsKKworI2RlZmluZSBWSURJT0NfUVVFUllDQVAgX0lPUiAoJ1YnLCAwLCBzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5KQorI2RlZmluZSBWSURJT0NfUkVTRVJWRUQgX0lPICgnVicsIDEpCisjZGVmaW5lIFZJRElPQ19FTlVNX0ZNVCBfSU9XUiAoJ1YnLCAyLCBzdHJ1Y3QgdjRsMl9mbXRkZXNjKQorI2RlZmluZSBWSURJT0NfR19GTVQgX0lPV1IgKCdWJywgNCwgc3RydWN0IHY0bDJfZm9ybWF0KQorI2RlZmluZSBWSURJT0NfU19GTVQgX0lPV1IgKCdWJywgNSwgc3RydWN0IHY0bDJfZm9ybWF0KQorI2RlZmluZSBWSURJT0NfUkVRQlVGUyBfSU9XUiAoJ1YnLCA4LCBzdHJ1Y3QgdjRsMl9yZXF1ZXN0YnVmZmVycykKKyNkZWZpbmUgVklESU9DX1FVRVJZQlVGIF9JT1dSICgnVicsIDksIHN0cnVjdCB2NGwyX2J1ZmZlcikKKyNkZWZpbmUgVklESU9DX0dfRkJVRiBfSU9SICgnVicsIDEwLCBzdHJ1Y3QgdjRsMl9mcmFtZWJ1ZmZlcikKKyNkZWZpbmUgVklESU9DX1NfRkJVRiBfSU9XICgnVicsIDExLCBzdHJ1Y3QgdjRsMl9mcmFtZWJ1ZmZlcikKKyNkZWZpbmUgVklESU9DX09WRVJMQVkgX0lPVyAoJ1YnLCAxNCwgaW50KQorI2RlZmluZSBWSURJT0NfUUJVRiBfSU9XUiAoJ1YnLCAxNSwgc3RydWN0IHY0bDJfYnVmZmVyKQorI2RlZmluZSBWSURJT0NfRFFCVUYgX0lPV1IgKCdWJywgMTcsIHN0cnVjdCB2NGwyX2J1ZmZlcikKKyNkZWZpbmUgVklESU9DX1NUUkVBTU9OIF9JT1cgKCdWJywgMTgsIGludCkKKyNkZWZpbmUgVklESU9DX1NUUkVBTU9GRiBfSU9XICgnVicsIDE5LCBpbnQpCisjZGVmaW5lIFZJRElPQ19HX1BBUk0gX0lPV1IgKCdWJywgMjEsIHN0cnVjdCB2NGwyX3N0cmVhbXBhcm0pCisjZGVmaW5lIFZJRElPQ19TX1BBUk0gX0lPV1IgKCdWJywgMjIsIHN0cnVjdCB2NGwyX3N0cmVhbXBhcm0pCisjZGVmaW5lIFZJRElPQ19HX1NURCBfSU9SICgnVicsIDIzLCB2NGwyX3N0ZF9pZCkKKyNkZWZpbmUgVklESU9DX1NfU1REIF9JT1cgKCdWJywgMjQsIHY0bDJfc3RkX2lkKQorI2RlZmluZSBWSURJT0NfRU5VTVNURCBfSU9XUiAoJ1YnLCAyNSwgc3RydWN0IHY0bDJfc3RhbmRhcmQpCisjZGVmaW5lIFZJRElPQ19FTlVNSU5QVVQgX0lPV1IgKCdWJywgMjYsIHN0cnVjdCB2NGwyX2lucHV0KQorI2RlZmluZSBWSURJT0NfR19DVFJMIF9JT1dSICgnVicsIDI3LCBzdHJ1Y3QgdjRsMl9jb250cm9sKQorI2RlZmluZSBWSURJT0NfU19DVFJMIF9JT1dSICgnVicsIDI4LCBzdHJ1Y3QgdjRsMl9jb250cm9sKQorI2RlZmluZSBWSURJT0NfR19UVU5FUiBfSU9XUiAoJ1YnLCAyOSwgc3RydWN0IHY0bDJfdHVuZXIpCisjZGVmaW5lIFZJRElPQ19TX1RVTkVSIF9JT1cgKCdWJywgMzAsIHN0cnVjdCB2NGwyX3R1bmVyKQorI2RlZmluZSBWSURJT0NfR19BVURJTyBfSU9SICgnVicsIDMzLCBzdHJ1Y3QgdjRsMl9hdWRpbykKKyNkZWZpbmUgVklESU9DX1NfQVVESU8gX0lPVyAoJ1YnLCAzNCwgc3RydWN0IHY0bDJfYXVkaW8pCisjZGVmaW5lIFZJRElPQ19RVUVSWUNUUkwgX0lPV1IgKCdWJywgMzYsIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCkKKyNkZWZpbmUgVklESU9DX1FVRVJZTUVOVSBfSU9XUiAoJ1YnLCAzNywgc3RydWN0IHY0bDJfcXVlcnltZW51KQorI2RlZmluZSBWSURJT0NfR19JTlBVVCBfSU9SICgnVicsIDM4LCBpbnQpCisjZGVmaW5lIFZJRElPQ19TX0lOUFVUIF9JT1dSICgnVicsIDM5LCBpbnQpCisjZGVmaW5lIFZJRElPQ19HX09VVFBVVCBfSU9SICgnVicsIDQ2LCBpbnQpCisjZGVmaW5lIFZJRElPQ19TX09VVFBVVCBfSU9XUiAoJ1YnLCA0NywgaW50KQorI2RlZmluZSBWSURJT0NfRU5VTU9VVFBVVCBfSU9XUiAoJ1YnLCA0OCwgc3RydWN0IHY0bDJfb3V0cHV0KQorI2RlZmluZSBWSURJT0NfR19BVURPVVQgX0lPUiAoJ1YnLCA0OSwgc3RydWN0IHY0bDJfYXVkaW9vdXQpCisjZGVmaW5lIFZJRElPQ19TX0FVRE9VVCBfSU9XICgnVicsIDUwLCBzdHJ1Y3QgdjRsMl9hdWRpb291dCkKKyNkZWZpbmUgVklESU9DX0dfTU9EVUxBVE9SIF9JT1dSICgnVicsIDU0LCBzdHJ1Y3QgdjRsMl9tb2R1bGF0b3IpCisjZGVmaW5lIFZJRElPQ19TX01PRFVMQVRPUiBfSU9XICgnVicsIDU1LCBzdHJ1Y3QgdjRsMl9tb2R1bGF0b3IpCisjZGVmaW5lIFZJRElPQ19HX0ZSRVFVRU5DWSBfSU9XUiAoJ1YnLCA1Niwgc3RydWN0IHY0bDJfZnJlcXVlbmN5KQorI2RlZmluZSBWSURJT0NfU19GUkVRVUVOQ1kgX0lPVyAoJ1YnLCA1Nywgc3RydWN0IHY0bDJfZnJlcXVlbmN5KQorI2RlZmluZSBWSURJT0NfQ1JPUENBUCBfSU9XUiAoJ1YnLCA1OCwgc3RydWN0IHY0bDJfY3JvcGNhcCkKKyNkZWZpbmUgVklESU9DX0dfQ1JPUCBfSU9XUiAoJ1YnLCA1OSwgc3RydWN0IHY0bDJfY3JvcCkKKyNkZWZpbmUgVklESU9DX1NfQ1JPUCBfSU9XICgnVicsIDYwLCBzdHJ1Y3QgdjRsMl9jcm9wKQorI2RlZmluZSBWSURJT0NfR19KUEVHQ09NUCBfSU9SICgnVicsIDYxLCBzdHJ1Y3QgdjRsMl9qcGVnY29tcHJlc3Npb24pCisjZGVmaW5lIFZJRElPQ19TX0pQRUdDT01QIF9JT1cgKCdWJywgNjIsIHN0cnVjdCB2NGwyX2pwZWdjb21wcmVzc2lvbikKKyNkZWZpbmUgVklESU9DX1FVRVJZU1REIF9JT1IgKCdWJywgNjMsIHY0bDJfc3RkX2lkKQorI2RlZmluZSBWSURJT0NfVFJZX0ZNVCBfSU9XUiAoJ1YnLCA2NCwgc3RydWN0IHY0bDJfZm9ybWF0KQorI2RlZmluZSBWSURJT0NfRU5VTUFVRElPIF9JT1dSICgnVicsIDY1LCBzdHJ1Y3QgdjRsMl9hdWRpbykKKyNkZWZpbmUgVklESU9DX0VOVU1BVURPVVQgX0lPV1IgKCdWJywgNjYsIHN0cnVjdCB2NGwyX2F1ZGlvb3V0KQorI2RlZmluZSBWSURJT0NfR19QUklPUklUWSBfSU9SICgnVicsIDY3LCBlbnVtIHY0bDJfcHJpb3JpdHkpCisjZGVmaW5lIFZJRElPQ19TX1BSSU9SSVRZIF9JT1cgKCdWJywgNjgsIGVudW0gdjRsMl9wcmlvcml0eSkKKyNkZWZpbmUgVklESU9DX0dfU0xJQ0VEX1ZCSV9DQVAgX0lPUiAoJ1YnLCA2OSwgc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9jYXApCisjZGVmaW5lIFZJRElPQ19MT0dfU1RBVFVTIF9JTyAoJ1YnLCA3MCkKKyNkZWZpbmUgVklESU9DX0dfRVhUX0NUUkxTIF9JT1dSICgnVicsIDcxLCBzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMpCisjZGVmaW5lIFZJRElPQ19TX0VYVF9DVFJMUyBfSU9XUiAoJ1YnLCA3Miwgc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzKQorI2RlZmluZSBWSURJT0NfVFJZX0VYVF9DVFJMUyBfSU9XUiAoJ1YnLCA3Mywgc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzKQorCisjaWZkZWYgX19PTERfVklESU9DXworCisjZGVmaW5lIFZJRElPQ19PVkVSTEFZX09MRCBfSU9XUiAoJ1YnLCAxNCwgaW50KQorI2RlZmluZSBWSURJT0NfU19QQVJNX09MRCBfSU9XICgnVicsIDIyLCBzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtKQorI2RlZmluZSBWSURJT0NfU19DVFJMX09MRCBfSU9XICgnVicsIDI4LCBzdHJ1Y3QgdjRsMl9jb250cm9sKQorI2RlZmluZSBWSURJT0NfR19BVURJT19PTEQgX0lPV1IgKCdWJywgMzMsIHN0cnVjdCB2NGwyX2F1ZGlvKQorI2RlZmluZSBWSURJT0NfR19BVURPVVRfT0xEIF9JT1dSICgnVicsIDQ5LCBzdHJ1Y3QgdjRsMl9hdWRpb291dCkKKyNkZWZpbmUgVklESU9DX0NST1BDQVBfT0xEIF9JT1IgKCdWJywgNTgsIHN0cnVjdCB2NGwyX2Nyb3BjYXApCisjZW5kaWYKKworI2RlZmluZSBCQVNFX1ZJRElPQ19QUklWQVRFIDE5MiAgCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdm1hbGxvYy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3ZtYWxsb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2ZkMTAzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3ZtYWxsb2MuaApAQCAtMCwwICsxLDQwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9WTUFMTE9DX0gKKyNkZWZpbmUgX0xJTlVYX1ZNQUxMT0NfSAorCisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPiAgCisKK3N0cnVjdCB2bV9hcmVhX3N0cnVjdDsKKworI2RlZmluZSBWTV9JT1JFTUFQIDB4MDAwMDAwMDEgIAorI2RlZmluZSBWTV9BTExPQyAweDAwMDAwMDAyICAKKyNkZWZpbmUgVk1fTUFQIDB4MDAwMDAwMDQgIAorI2RlZmluZSBWTV9VU0VSTUFQIDB4MDAwMDAwMDggIAorI2RlZmluZSBWTV9WUEFHRVMgMHgwMDAwMDAxMCAgCisKKyNpZm5kZWYgSU9SRU1BUF9NQVhfT1JERVIKKyNkZWZpbmUgSU9SRU1BUF9NQVhfT1JERVIgKDcgKyBQQUdFX1NISUZUKSAgCisjZW5kaWYKKworc3RydWN0IHZtX3N0cnVjdCB7Cisgdm9pZCAqYWRkcjsKKyB1bnNpZ25lZCBsb25nIHNpemU7CisgdW5zaWduZWQgbG9uZyBmbGFnczsKKyBzdHJ1Y3QgcGFnZSAqKnBhZ2VzOworIHVuc2lnbmVkIGludCBucl9wYWdlczsKKyB1bnNpZ25lZCBsb25nIHBoeXNfYWRkcjsKKyBzdHJ1Y3Qgdm1fc3RydWN0ICpuZXh0OworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdnQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC92dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5OTJiM2EKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdnQuaApAQCAtMCwwICsxLDY4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9WVF9ICisjZGVmaW5lIF9MSU5VWF9WVF9ICisKKyNkZWZpbmUgTUlOX05SX0NPTlNPTEVTIDEgIAorI2RlZmluZSBNQVhfTlJfQ09OU09MRVMgNjMgIAorI2RlZmluZSBNQVhfTlJfVVNFUl9DT05TT0xFUyA2MyAgCisKKyNkZWZpbmUgVlRfT1BFTlFSWSAweDU2MDAgIAorCitzdHJ1Y3QgdnRfbW9kZSB7CisgY2hhciBtb2RlOworIGNoYXIgd2FpdHY7Cisgc2hvcnQgcmVsc2lnOworIHNob3J0IGFjcXNpZzsKKyBzaG9ydCBmcnNpZzsKK307CisjZGVmaW5lIFZUX0dFVE1PREUgMHg1NjAxICAKKyNkZWZpbmUgVlRfU0VUTU9ERSAweDU2MDIgIAorI2RlZmluZSBWVF9BVVRPIDB4MDAgIAorI2RlZmluZSBWVF9QUk9DRVNTIDB4MDEgIAorI2RlZmluZSBWVF9BQ0tBQ1EgMHgwMiAgCisKK3N0cnVjdCB2dF9zdGF0IHsKKyB1bnNpZ25lZCBzaG9ydCB2X2FjdGl2ZTsKKyB1bnNpZ25lZCBzaG9ydCB2X3NpZ25hbDsKKyB1bnNpZ25lZCBzaG9ydCB2X3N0YXRlOworfTsKKyNkZWZpbmUgVlRfR0VUU1RBVEUgMHg1NjAzICAKKyNkZWZpbmUgVlRfU0VORFNJRyAweDU2MDQgIAorCisjZGVmaW5lIFZUX1JFTERJU1AgMHg1NjA1ICAKKworI2RlZmluZSBWVF9BQ1RJVkFURSAweDU2MDYgIAorI2RlZmluZSBWVF9XQUlUQUNUSVZFIDB4NTYwNyAgCisjZGVmaW5lIFZUX0RJU0FMTE9DQVRFIDB4NTYwOCAgCisKK3N0cnVjdCB2dF9zaXplcyB7CisgdW5zaWduZWQgc2hvcnQgdl9yb3dzOworIHVuc2lnbmVkIHNob3J0IHZfY29sczsKKyB1bnNpZ25lZCBzaG9ydCB2X3Njcm9sbHNpemU7Cit9OworI2RlZmluZSBWVF9SRVNJWkUgMHg1NjA5ICAKKworc3RydWN0IHZ0X2NvbnNpemUgeworIHVuc2lnbmVkIHNob3J0IHZfcm93czsKKyB1bnNpZ25lZCBzaG9ydCB2X2NvbHM7CisgdW5zaWduZWQgc2hvcnQgdl92bGluOworIHVuc2lnbmVkIHNob3J0IHZfY2xpbjsKKyB1bnNpZ25lZCBzaG9ydCB2X3Zjb2w7CisgdW5zaWduZWQgc2hvcnQgdl9jY29sOworfTsKKyNkZWZpbmUgVlRfUkVTSVpFWCAweDU2MEEgIAorI2RlZmluZSBWVF9MT0NLU1dJVENIIDB4NTYwQiAgCisjZGVmaW5lIFZUX1VOTE9DS1NXSVRDSCAweDU2MEMgIAorI2RlZmluZSBWVF9HRVRISUZPTlRNQVNLIDB4NTYwRCAgCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3Z0X2J1ZmZlci5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3Z0X2J1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2Y2U3OWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdnRfYnVmZmVyLmgKQEAgLTAsMCArMSwzMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfVlRfQlVGRkVSX0hfCisjZGVmaW5lIF9MSU5VWF9WVF9CVUZGRVJfSF8KKworI2lmbmRlZiBWVF9CVUZfSEFWRV9SVworI2RlZmluZSBzY3Jfd3JpdGV3KHZhbCwgYWRkcikgKCooYWRkcikgPSAodmFsKSkKKyNkZWZpbmUgc2NyX3JlYWR3KGFkZHIpICgqKGFkZHIpKQorI2RlZmluZSBzY3JfbWVtY3B5dyhkLCBzLCBjKSBtZW1jcHkoZCwgcywgYykKKyNkZWZpbmUgc2NyX21lbW1vdmV3KGQsIHMsIGMpIG1lbW1vdmUoZCwgcywgYykKKyNkZWZpbmUgVlRfQlVGX0hBVkVfTUVNQ1BZVworI2RlZmluZSBWVF9CVUZfSEFWRV9NRU1NT1ZFVworI2VuZGlmCisKKyNpZm5kZWYgVlRfQlVGX0hBVkVfTUVNU0VUVworI2VuZGlmCisjaWZuZGVmIFZUX0JVRl9IQVZFX01FTUNQWVcKKyNlbmRpZgorI2lmbmRlZiBWVF9CVUZfSEFWRV9NRU1NT1ZFVworI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC93YWl0LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvd2FpdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkOWFhNjgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvd2FpdC5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX1dBSVRfSAorI2RlZmluZSBfTElOVVhfV0FJVF9ICisKKyNkZWZpbmUgV05PSEFORyAweDAwMDAwMDAxCisjZGVmaW5lIFdVTlRSQUNFRCAweDAwMDAwMDAyCisjZGVmaW5lIFdTVE9QUEVEIFdVTlRSQUNFRAorI2RlZmluZSBXRVhJVEVEIDB4MDAwMDAwMDQKKyNkZWZpbmUgV0NPTlRJTlVFRCAweDAwMDAwMDA4CisjZGVmaW5lIFdOT1dBSVQgMHgwMTAwMDAwMCAgCisKKyNkZWZpbmUgX19XTk9USFJFQUQgMHgyMDAwMDAwMCAgCisjZGVmaW5lIF9fV0FMTCAweDQwMDAwMDAwICAKKyNkZWZpbmUgX19XQ0xPTkUgMHg4MDAwMDAwMCAgCisKKyNkZWZpbmUgUF9BTEwgMAorI2RlZmluZSBQX1BJRCAxCisjZGVmaW5lIFBfUEdJRCAyCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3dhbnJvdXRlci5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3dhbnJvdXRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMjVhODYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvd2Fucm91dGVyLmgKQEAgLTAsMCArMSwzNTYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX1JPVVRFUl9ICisjZGVmaW5lIF9ST1VURVJfSAorCisjZGVmaW5lIFJPVVRFUl9OQU1FICJ3YW5yb3V0ZXIiICAKKyNkZWZpbmUgUk9VVEVSX1ZFUlNJT04gMSAgCisjZGVmaW5lIFJPVVRFUl9SRUxFQVNFIDEgIAorI2RlZmluZSBST1VURVJfSU9DVEwgJ1cnICAKKyNkZWZpbmUgUk9VVEVSX01BR0lDIDB4NTI0RDQxNTdMICAKKworZW51bSByb3V0ZXJfaW9jdGxzCit7CisgUk9VVEVSX1NFVFVQID0gUk9VVEVSX0lPQ1RMPDw4LAorIFJPVVRFUl9ET1dOLAorIFJPVVRFUl9TVEFULAorIFJPVVRFUl9JRk5FVywKKyBST1VURVJfSUZERUwsCisgUk9VVEVSX0lGU1RBVCwKKyBST1VURVJfVVNFUiA9IChST1VURVJfSU9DVEw8PDgpKzE2LAorIFJPVVRFUl9VU0VSX01BWCA9IChST1VURVJfSU9DVEw8PDgpKzMxCit9OworCisjZGVmaW5lIFBST0NfREFUQV9QT1JUXzAgMHg4MDAwICAKKyNkZWZpbmUgUFJPQ19EQVRBX1BPUlRfMSAweDgwMDEgIAorCisjZGVmaW5lIE5MUElEX0lQIDB4Q0MgIAorI2RlZmluZSBOTFBJRF9TTkFQIDB4ODAgIAorI2RlZmluZSBOTFBJRF9DTE5QIDB4ODEgIAorI2RlZmluZSBOTFBJRF9FU0lTIDB4ODIgIAorI2RlZmluZSBOTFBJRF9JU0lTIDB4ODMgIAorI2RlZmluZSBOTFBJRF9ROTMzIDB4MDggIAorCisjZGVmaW5lIFdBTl9JRk5BTUVfU1ogMTUgIAorI2RlZmluZSBXQU5fRFJWTkFNRV9TWiAxNSAgCisjZGVmaW5lIFdBTl9BRERSRVNTX1NaIDMxICAKKyNkZWZpbmUgVVNFRF9CWV9GSUVMRCA4ICAKKworI2RlZmluZSBVRFBfUFRQSVBFX1RZUEUgMHgwMQorI2RlZmluZSBVRFBfRlBJUEVfVFlQRSAweDAyCisjZGVmaW5lIFVEUF9DUElQRV9UWVBFIDB4MDMKKyNkZWZpbmUgVURQX0RSVlNUQVRTX1RZUEUgMHgwNAorI2RlZmluZSBVRFBfSU5WQUxJRF9UWVBFIDB4MDUKKworI2RlZmluZSBDTURfT0sgMCAgCisjZGVmaW5lIENNRF9USU1FT1VUIDB4RkYgIAorCisjZGVmaW5lIFVEUF9QS1RfRlJNX1NUQUNLIDB4MDAKKyNkZWZpbmUgVURQX1BLVF9GUk1fTkVUV09SSyAweDAxCisKKyNkZWZpbmUgTUFYX0lOVFJfVEVTVF9DT1VOVEVSIDEwMAorCisjZGVmaW5lIENSSVRJQ0FMX0lOX0lTUiAweEExCisjZGVmaW5lIENSSVRJQ0FMX0lOVFJfSEFORExFRCAweEIxCisKK3R5cGVkZWYgc3RydWN0IHdhbl94MjVfY29uZgoreworIHVuc2lnbmVkIGxvX3B2YzsKKyB1bnNpZ25lZCBoaV9wdmM7CisgdW5zaWduZWQgbG9fc3ZjOworIHVuc2lnbmVkIGhpX3N2YzsKKyB1bnNpZ25lZCBoZGxjX3dpbmRvdzsKKyB1bnNpZ25lZCBwa3Rfd2luZG93OworIHVuc2lnbmVkIHQxOworIHVuc2lnbmVkIHQyOworIHVuc2lnbmVkIHQ0OworIHVuc2lnbmVkIG4yOworIHVuc2lnbmVkIHQxMF90MjA7CisgdW5zaWduZWQgdDExX3QyMTsKKyB1bnNpZ25lZCB0MTJfdDIyOworIHVuc2lnbmVkIHQxM190MjM7CisgdW5zaWduZWQgdDE2X3QyNjsKKyB1bnNpZ25lZCB0Mjg7CisgdW5zaWduZWQgcjEwX3IyMDsKKyB1bnNpZ25lZCByMTJfcjIyOworIHVuc2lnbmVkIHIxM19yMjM7CisgdW5zaWduZWQgY2NpdHRfY29tcGF0OworIHVuc2lnbmVkIHgyNV9jb25mX29wdDsKKyB1bnNpZ25lZCBjaGFyIExBUEJfaGRsY19vbmx5OworIHVuc2lnbmVkIGNoYXIgbG9nZ2luZzsKKyB1bnNpZ25lZCBjaGFyIG9vYl9vbl9tb2RlbTsKK30gd2FuX3gyNV9jb25mX3Q7CisKK3R5cGVkZWYgc3RydWN0IHdhbl9mcl9jb25mCit7CisgdW5zaWduZWQgc2lnbmFsbGluZzsKKyB1bnNpZ25lZCB0MzkxOworIHVuc2lnbmVkIHQzOTI7CisgdW5zaWduZWQgbjM5MTsKKyB1bnNpZ25lZCBuMzkyOworIHVuc2lnbmVkIG4zOTM7CisgdW5zaWduZWQgZGxjaV9udW07CisgdW5zaWduZWQgZGxjaVsxMDBdOworfSB3YW5fZnJfY29uZl90OworCit0eXBlZGVmIHN0cnVjdCB3YW5fcHBwX2NvbmYKK3sKKyB1bnNpZ25lZCByZXN0YXJ0X3RtcjsKKyB1bnNpZ25lZCBhdXRoX3JzcnRfdG1yOworIHVuc2lnbmVkIGF1dGhfd2FpdF90bXI7CisgdW5zaWduZWQgbWRtX2ZhaWxfdG1yOworIHVuc2lnbmVkIGR0cl9kcm9wX3RtcjsKKyB1bnNpZ25lZCBjb25uZWN0X3Rtb3V0OworIHVuc2lnbmVkIGNvbmZfcmV0cnk7CisgdW5zaWduZWQgdGVybV9yZXRyeTsKKyB1bnNpZ25lZCBmYWlsX3JldHJ5OworIHVuc2lnbmVkIGF1dGhfcmV0cnk7CisgdW5zaWduZWQgYXV0aF9vcHRpb25zOworIHVuc2lnbmVkIGlwX29wdGlvbnM7CisgY2hhciBhdXRoZW50aWNhdG9yOworIGNoYXIgaXBfbW9kZTsKK30gd2FuX3BwcF9jb25mX3Q7CisKK3R5cGVkZWYgc3RydWN0IHdhbl9jaGRsY19jb25mCit7CisgdW5zaWduZWQgY2hhciBpZ25vcmVfZGNkOworIHVuc2lnbmVkIGNoYXIgaWdub3JlX2N0czsKKyB1bnNpZ25lZCBjaGFyIGlnbm9yZV9rZWVwYWxpdmU7CisgdW5zaWduZWQgY2hhciBoZGxjX3N0cmVhbWluZzsKKyB1bnNpZ25lZCBjaGFyIHJlY2VpdmVfb25seTsKKyB1bnNpZ25lZCBrZWVwYWxpdmVfdHhfdG1yOworIHVuc2lnbmVkIGtlZXBhbGl2ZV9yeF90bXI7CisgdW5zaWduZWQga2VlcGFsaXZlX2Vycl9tYXJnaW47CisgdW5zaWduZWQgc2xhcnBfdGltZXI7Cit9IHdhbl9jaGRsY19jb25mX3Q7CisKK3R5cGVkZWYgc3RydWN0IHdhbmRldl9jb25mCit7CisgdW5zaWduZWQgbWFnaWM7CisgdW5zaWduZWQgY29uZmlnX2lkOworCisgdW5zaWduZWQgaW9wb3J0OworIHVuc2lnbmVkIGxvbmcgbWFkZHI7CisgdW5zaWduZWQgbXNpemU7CisgaW50IGlycTsKKyBpbnQgZG1hOworIGNoYXIgUzUxNF9DUFVfbm9bMV07CisgdW5zaWduZWQgUENJX3Nsb3Rfbm87CisgY2hhciBhdXRvX3BjaV9jZmc7CisgY2hhciBjb21tX3BvcnQ7CisgdW5zaWduZWQgYnBzOworIHVuc2lnbmVkIG10dTsKKyB1bnNpZ25lZCB1ZHBfcG9ydDsKKyB1bnNpZ25lZCBjaGFyIHR0bDsKKyB1bnNpZ25lZCBjaGFyIGZ0MTsKKyBjaGFyIGludGVyZmFjZTsKKyBjaGFyIGNsb2NraW5nOworIGNoYXIgbGluZV9jb2Rpbmc7CisgY2hhciBzdGF0aW9uOworIGNoYXIgY29ubmVjdGlvbjsKKyBjaGFyIHJlYWRfbW9kZTsKKyBjaGFyIHJlY2VpdmVfb25seTsKKyBjaGFyIHR0eTsKKyB1bnNpZ25lZCB0dHlfbWFqb3I7CisgdW5zaWduZWQgdHR5X21pbm9yOworIHVuc2lnbmVkIHR0eV9tb2RlOworIGNoYXIgYmFja3VwOworIHVuc2lnbmVkIGh3X29wdFs0XTsKKyB1bnNpZ25lZCByZXNlcnZlZFs0XTsKKworIHVuc2lnbmVkIGRhdGFfc2l6ZTsKKyB2b2lkKiBkYXRhOworIHVuaW9uCisgeworIHdhbl94MjVfY29uZl90IHgyNTsKKyB3YW5fcHBwX2NvbmZfdCBwcHA7Cisgd2FuX2ZyX2NvbmZfdCBmcjsKKyB3YW5fY2hkbGNfY29uZl90IGNoZGxjOworIH0gdTsKK30gd2FuZGV2X2NvbmZfdDsKKworI2RlZmluZSBXQU5DT05GSUdfWDI1IDEwMSAgCisjZGVmaW5lIFdBTkNPTkZJR19GUiAxMDIgIAorI2RlZmluZSBXQU5DT05GSUdfUFBQIDEwMyAgCisjZGVmaW5lIFdBTkNPTkZJR19DSERMQyAxMDQgIAorI2RlZmluZSBXQU5DT05GSUdfQlNDIDEwNSAgCisjZGVmaW5lIFdBTkNPTkZJR19IRExDIDEwNiAgCisjZGVmaW5lIFdBTkNPTkZJR19NUFBQIDEwNyAgCisKKyNkZWZpbmUgV0FOT1BUX09GRiAwCisjZGVmaW5lIFdBTk9QVF9PTiAxCisjZGVmaW5lIFdBTk9QVF9OTyAwCisjZGVmaW5lIFdBTk9QVF9ZRVMgMQorCisjZGVmaW5lIFdBTk9QVF9SUzIzMiAwCisjZGVmaW5lIFdBTk9QVF9WMzUgMQorCisjZGVmaW5lIFdBTk9QVF9OUlogMAorI2RlZmluZSBXQU5PUFRfTlJaSSAxCisjZGVmaW5lIFdBTk9QVF9GTTAgMgorI2RlZmluZSBXQU5PUFRfRk0xIDMKKworI2RlZmluZSBXQU5PUFRfUE9JTlRUT1BPSU5UIDAgIAorI2RlZmluZSBXQU5PUFRfTVVMVElEUk9QIDEgIAorCisjZGVmaW5lIFdBTk9QVF9FWFRFUk5BTCAwCisjZGVmaW5lIFdBTk9QVF9JTlRFUk5BTCAxCisKKyNkZWZpbmUgV0FOT1BUX0RURSAwCisjZGVmaW5lIFdBTk9QVF9EQ0UgMQorI2RlZmluZSBXQU5PUFRfQ1BFIDAKKyNkZWZpbmUgV0FOT1BUX05PREUgMQorI2RlZmluZSBXQU5PUFRfU0VDT05EQVJZIDAKKyNkZWZpbmUgV0FOT1BUX1BSSU1BUlkgMQorCisjZGVmaW5lIFdBTk9QVF9QRVJNQU5FTlQgMCAgCisjZGVmaW5lIFdBTk9QVF9TV0lUQ0hFRCAxICAKKyNkZWZpbmUgV0FOT1BUX09OREVNQU5EIDIgIAorCisjZGVmaW5lIFdBTk9QVF9GUl9BTlNJIDEgIAorI2RlZmluZSBXQU5PUFRfRlJfUTkzMyAyICAKKyNkZWZpbmUgV0FOT1BUX0ZSX0xNSSAzICAKKworI2RlZmluZSBXQU5PUFRfUFBQX1NUQVRJQyAwCisjZGVmaW5lIFdBTk9QVF9QUFBfSE9TVCAxCisjZGVmaW5lIFdBTk9QVF9QUFBfUEVFUiAyCisKKyNkZWZpbmUgV0FOT1BUX09ORSAxCisjZGVmaW5lIFdBTk9QVF9UV08gMgorI2RlZmluZSBXQU5PUFRfT05FX0FORF9IQUxGIDMKKworI2RlZmluZSBXQU5PUFRfTk9ORSAwCisjZGVmaW5lIFdBTk9QVF9PREQgMQorI2RlZmluZSBXQU5PUFRfRVZFTiAyCisKKyNkZWZpbmUgV0FOT1BUX1BSSSAwCisjZGVmaW5lIFdBTk9QVF9TRUMgMQorCisjZGVmaW5lIFdBTk9QVF9JTlRSIDAKKyNkZWZpbmUgV0FOT1BUX1BPTEwgMQorCisjZGVmaW5lIFdBTk9QVF9UVFlfU1lOQyAwCisjZGVmaW5lIFdBTk9QVF9UVFlfQVNZTkMgMQorCit0eXBlZGVmIHN0cnVjdCB3YW5kZXZfc3RhdAoreworIHVuc2lnbmVkIHN0YXRlOworIHVuc2lnbmVkIG5kZXY7CisKKyB1bnNpZ25lZCBjb25uZWN0aW9uOworIHVuc2lnbmVkIG1lZGlhX3R5cGU7CisgdW5zaWduZWQgbXR1OworCisgdW5zaWduZWQgbW9kZW1fc3RhdHVzOworIHVuc2lnbmVkIHJ4X2ZyYW1lczsKKyB1bnNpZ25lZCByeF9vdmVycnVuczsKKyB1bnNpZ25lZCByeF9jcmNfZXJyOworIHVuc2lnbmVkIHJ4X2Fib3J0czsKKyB1bnNpZ25lZCByeF9iYWRfbGVuZ3RoOworIHVuc2lnbmVkIHJ4X2Ryb3BwZWQ7CisgdW5zaWduZWQgdHhfZnJhbWVzOworIHVuc2lnbmVkIHR4X3VuZGVycnVuczsKKyB1bnNpZ25lZCB0eF90aW1lb3V0czsKKyB1bnNpZ25lZCB0eF9yZWplY3RzOworCisgdW5zaWduZWQgcnhfYmFkX2Zvcm1hdDsKKyB1bnNpZ25lZCByeF9iYWRfYWRkcjsKKyB1bnNpZ25lZCB0eF9yZXRyaWVzOworIHVuc2lnbmVkIHJlc2VydmVkWzE2XTsKK30gd2FuZGV2X3N0YXRfdDsKKworZW51bSB3YW5fc3RhdGVzCit7CisgV0FOX1VOQ09ORklHVVJFRCwKKyBXQU5fRElTQ09OTkVDVEVELAorIFdBTl9DT05ORUNUSU5HLAorIFdBTl9DT05ORUNURUQsCisgV0FOX0xJTUlULAorIFdBTl9EVUFMUE9SVCwKKyBXQU5fRElTQ09OTkVDVElORywKKyBXQU5fRlQxX1JFQURZCit9OworCitlbnVtIHsKKyBXQU5fTE9DQUxfSVAsCisgV0FOX1BPSU5UT1BPSU5UX0lQLAorIFdBTl9ORVRNQVNLX0lQLAorIFdBTl9CUk9BRENBU1RfSVAKK307CisKKyNkZWZpbmUgV0FOX01PREVNX0NUUyAweDAwMDEgIAorI2RlZmluZSBXQU5fTU9ERU1fRENEIDB4MDAwMiAgCisjZGVmaW5lIFdBTl9NT0RFTV9EVFIgMHgwMDEwICAKKyNkZWZpbmUgV0FOX01PREVNX1JUUyAweDAwMjAgIAorCit0eXBlZGVmIHN0cnVjdCB3YW5pZl9jb25mCit7CisgdW5zaWduZWQgbWFnaWM7CisgdW5zaWduZWQgY29uZmlnX2lkOworIGNoYXIgbmFtZVtXQU5fSUZOQU1FX1NaKzFdOworIGNoYXIgYWRkcltXQU5fQUREUkVTU19TWisxXTsKKyBjaGFyIHVzZWRieVtVU0VEX0JZX0ZJRUxEXTsKKyB1bnNpZ25lZCBpZGxlX3RpbWVvdXQ7CisgdW5zaWduZWQgaG9sZF90aW1lb3V0OworIHVuc2lnbmVkIGNpcjsKKyB1bnNpZ25lZCBiYzsKKyB1bnNpZ25lZCBiZTsKKyB1bnNpZ25lZCBjaGFyIGVuYWJsZV9JUFg7CisgdW5zaWduZWQgY2hhciBpbmFycDsKKyB1bnNpZ25lZCBpbmFycF9pbnRlcnZhbDsKKyB1bnNpZ25lZCBsb25nIG5ldHdvcmtfbnVtYmVyOworIGNoYXIgbWM7CisgY2hhciBsb2NhbF9hZGRyW1dBTl9BRERSRVNTX1NaKzFdOworIHVuc2lnbmVkIGNoYXIgcG9ydDsKKyB1bnNpZ25lZCBjaGFyIHByb3RvY29sOworIGNoYXIgcGFwOworIGNoYXIgY2hhcDsKKyB1bnNpZ25lZCBjaGFyIHVzZXJpZFs1MTFdOworIHVuc2lnbmVkIGNoYXIgcGFzc3dkWzUxMV07CisgdW5zaWduZWQgY2hhciBzeXNuYW1lWzMxXTsKKyB1bnNpZ25lZCBjaGFyIGlnbm9yZV9kY2Q7CisgdW5zaWduZWQgY2hhciBpZ25vcmVfY3RzOworIHVuc2lnbmVkIGNoYXIgaWdub3JlX2tlZXBhbGl2ZTsKKyB1bnNpZ25lZCBjaGFyIGhkbGNfc3RyZWFtaW5nOworIHVuc2lnbmVkIGtlZXBhbGl2ZV90eF90bXI7CisgdW5zaWduZWQga2VlcGFsaXZlX3J4X3RtcjsKKyB1bnNpZ25lZCBrZWVwYWxpdmVfZXJyX21hcmdpbjsKKyB1bnNpZ25lZCBzbGFycF90aW1lcjsKKyB1bnNpZ25lZCBjaGFyIHR0bDsKKyBjaGFyIGludGVyZmFjZTsKKyBjaGFyIGNsb2NraW5nOworIHVuc2lnbmVkIGJwczsKKyB1bnNpZ25lZCBtdHU7CisgdW5zaWduZWQgY2hhciBpZl9kb3duOworIHVuc2lnbmVkIGNoYXIgZ2F0ZXdheTsKKyB1bnNpZ25lZCBjaGFyIHRydWVfaWZfZW5jb2Rpbmc7CisKKyB1bnNpZ25lZCBjaGFyIGFzeV9kYXRhX3RyYW5zOworIHVuc2lnbmVkIGNoYXIgcnRzX2hzX2Zvcl9yZWNlaXZlOworIHVuc2lnbmVkIGNoYXIgeG9uX3hvZmZfaHNfZm9yX3JlY2VpdmU7CisgdW5zaWduZWQgY2hhciB4b25feG9mZl9oc19mb3JfdHJhbnNtaXQ7CisgdW5zaWduZWQgY2hhciBkY2RfaHNfZm9yX3RyYW5zbWl0OworIHVuc2lnbmVkIGNoYXIgY3RzX2hzX2Zvcl90cmFuc21pdDsKKyB1bnNpZ25lZCBjaGFyIGFzeW5jX21vZGU7CisgdW5zaWduZWQgdHhfYml0c19wZXJfY2hhcjsKKyB1bnNpZ25lZCByeF9iaXRzX3Blcl9jaGFyOworIHVuc2lnbmVkIHN0b3BfYml0czsKKyB1bnNpZ25lZCBjaGFyIHBhcml0eTsKKyB1bnNpZ25lZCBicmVha190aW1lcjsKKyB1bnNpZ25lZCBpbnRlcl9jaGFyX3RpbWVyOworIHVuc2lnbmVkIHJ4X2NvbXBsZXRlX2xlbmd0aDsKKyB1bnNpZ25lZCB4b25fY2hhcjsKKyB1bnNpZ25lZCB4b2ZmX2NoYXI7CisgdW5zaWduZWQgY2hhciByZWNlaXZlX29ubHk7Cit9IHdhbmlmX2NvbmZfdDsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvd2lyZWxlc3MuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC93aXJlbGVzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxY2ViNzUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvd2lyZWxlc3MuaApAQCAtMCwwICsxLDU0MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfV0lSRUxFU1NfSAorI2RlZmluZSBfTElOVVhfV0lSRUxFU1NfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4gIAorI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPiAgCisjaW5jbHVkZSA8bGludXgvaWYuaD4gIAorCisjZGVmaW5lIFdJUkVMRVNTX0VYVCAyMAorCisjZGVmaW5lIFNJT0NTSVdDT01NSVQgMHg4QjAwICAKKyNkZWZpbmUgU0lPQ0dJV05BTUUgMHg4QjAxICAKKworI2RlZmluZSBTSU9DU0lXTldJRCAweDhCMDIgIAorI2RlZmluZSBTSU9DR0lXTldJRCAweDhCMDMgIAorI2RlZmluZSBTSU9DU0lXRlJFUSAweDhCMDQgIAorI2RlZmluZSBTSU9DR0lXRlJFUSAweDhCMDUgIAorI2RlZmluZSBTSU9DU0lXTU9ERSAweDhCMDYgIAorI2RlZmluZSBTSU9DR0lXTU9ERSAweDhCMDcgIAorI2RlZmluZSBTSU9DU0lXU0VOUyAweDhCMDggIAorI2RlZmluZSBTSU9DR0lXU0VOUyAweDhCMDkgIAorCisjZGVmaW5lIFNJT0NTSVdSQU5HRSAweDhCMEEgIAorI2RlZmluZSBTSU9DR0lXUkFOR0UgMHg4QjBCICAKKyNkZWZpbmUgU0lPQ1NJV1BSSVYgMHg4QjBDICAKKyNkZWZpbmUgU0lPQ0dJV1BSSVYgMHg4QjBEICAKKyNkZWZpbmUgU0lPQ1NJV1NUQVRTIDB4OEIwRSAgCisjZGVmaW5lIFNJT0NHSVdTVEFUUyAweDhCMEYgIAorCisjZGVmaW5lIFNJT0NTSVdTUFkgMHg4QjEwICAKKyNkZWZpbmUgU0lPQ0dJV1NQWSAweDhCMTEgIAorI2RlZmluZSBTSU9DU0lXVEhSU1BZIDB4OEIxMiAgCisjZGVmaW5lIFNJT0NHSVdUSFJTUFkgMHg4QjEzICAKKworI2RlZmluZSBTSU9DU0lXQVAgMHg4QjE0ICAKKyNkZWZpbmUgU0lPQ0dJV0FQIDB4OEIxNSAgCisjZGVmaW5lIFNJT0NHSVdBUExJU1QgMHg4QjE3ICAKKyNkZWZpbmUgU0lPQ1NJV1NDQU4gMHg4QjE4ICAKKyNkZWZpbmUgU0lPQ0dJV1NDQU4gMHg4QjE5ICAKKworI2RlZmluZSBTSU9DU0lXRVNTSUQgMHg4QjFBICAKKyNkZWZpbmUgU0lPQ0dJV0VTU0lEIDB4OEIxQiAgCisjZGVmaW5lIFNJT0NTSVdOSUNLTiAweDhCMUMgIAorI2RlZmluZSBTSU9DR0lXTklDS04gMHg4QjFEICAKKworI2RlZmluZSBTSU9DU0lXUkFURSAweDhCMjAgIAorI2RlZmluZSBTSU9DR0lXUkFURSAweDhCMjEgIAorI2RlZmluZSBTSU9DU0lXUlRTIDB4OEIyMiAgCisjZGVmaW5lIFNJT0NHSVdSVFMgMHg4QjIzICAKKyNkZWZpbmUgU0lPQ1NJV0ZSQUcgMHg4QjI0ICAKKyNkZWZpbmUgU0lPQ0dJV0ZSQUcgMHg4QjI1ICAKKyNkZWZpbmUgU0lPQ1NJV1RYUE9XIDB4OEIyNiAgCisjZGVmaW5lIFNJT0NHSVdUWFBPVyAweDhCMjcgIAorI2RlZmluZSBTSU9DU0lXUkVUUlkgMHg4QjI4ICAKKyNkZWZpbmUgU0lPQ0dJV1JFVFJZIDB4OEIyOSAgCisKKyNkZWZpbmUgU0lPQ1NJV0VOQ09ERSAweDhCMkEgIAorI2RlZmluZSBTSU9DR0lXRU5DT0RFIDB4OEIyQiAgCisKKyNkZWZpbmUgU0lPQ1NJV1BPV0VSIDB4OEIyQyAgCisjZGVmaW5lIFNJT0NHSVdQT1dFUiAweDhCMkQgIAorCisjZGVmaW5lIFNJT0NTSVdHRU5JRSAweDhCMzAgIAorI2RlZmluZSBTSU9DR0lXR0VOSUUgMHg4QjMxICAKKworI2RlZmluZSBTSU9DU0lXTUxNRSAweDhCMTYgIAorCisjZGVmaW5lIFNJT0NTSVdBVVRIIDB4OEIzMiAgCisjZGVmaW5lIFNJT0NHSVdBVVRIIDB4OEIzMyAgCisKKyNkZWZpbmUgU0lPQ1NJV0VOQ09ERUVYVCAweDhCMzQgIAorI2RlZmluZSBTSU9DR0lXRU5DT0RFRVhUIDB4OEIzNSAgCisKKyNkZWZpbmUgU0lPQ1NJV1BNS1NBIDB4OEIzNiAgCisKKyNkZWZpbmUgU0lPQ0lXRklSU1RQUklWIDB4OEJFMAorI2RlZmluZSBTSU9DSVdMQVNUUFJJViAweDhCRkYKKworI2RlZmluZSBTSU9DSVdGSVJTVCAweDhCMDAKKyNkZWZpbmUgU0lPQ0lXTEFTVCBTSU9DSVdMQVNUUFJJViAgCisjZGVmaW5lIElXX0lPQ1RMX0lEWChjbWQpICgoY21kKSAtIFNJT0NJV0ZJUlNUKQorCisjZGVmaW5lIElXX0lTX1NFVChjbWQpICghKChjbWQpICYgMHgxKSkKKyNkZWZpbmUgSVdfSVNfR0VUKGNtZCkgKChjbWQpICYgMHgxKQorCisjZGVmaW5lIElXRVZUWERST1AgMHg4QzAwICAKKyNkZWZpbmUgSVdFVlFVQUwgMHg4QzAxICAKKyNkZWZpbmUgSVdFVkNVU1RPTSAweDhDMDIgIAorI2RlZmluZSBJV0VWUkVHSVNURVJFRCAweDhDMDMgIAorI2RlZmluZSBJV0VWRVhQSVJFRCAweDhDMDQgIAorI2RlZmluZSBJV0VWR0VOSUUgMHg4QzA1ICAKKyNkZWZpbmUgSVdFVk1JQ0hBRUxNSUNGQUlMVVJFIDB4OEMwNiAgCisjZGVmaW5lIElXRVZBU1NPQ1JFUUlFIDB4OEMwNyAgCisjZGVmaW5lIElXRVZBU1NPQ1JFU1BJRSAweDhDMDggIAorI2RlZmluZSBJV0VWUE1LSURDQU5EIDB4OEMwOSAgCisKKyNkZWZpbmUgSVdFVkZJUlNUIDB4OEMwMAorI2RlZmluZSBJV19FVkVOVF9JRFgoY21kKSAoKGNtZCkgLSBJV0VWRklSU1QpCisKKyNkZWZpbmUgSVdfUFJJVl9UWVBFX01BU0sgMHg3MDAwICAKKyNkZWZpbmUgSVdfUFJJVl9UWVBFX05PTkUgMHgwMDAwCisjZGVmaW5lIElXX1BSSVZfVFlQRV9CWVRFIDB4MTAwMCAgCisjZGVmaW5lIElXX1BSSVZfVFlQRV9DSEFSIDB4MjAwMCAgCisjZGVmaW5lIElXX1BSSVZfVFlQRV9JTlQgMHg0MDAwICAKKyNkZWZpbmUgSVdfUFJJVl9UWVBFX0ZMT0FUIDB4NTAwMCAgCisjZGVmaW5lIElXX1BSSVZfVFlQRV9BRERSIDB4NjAwMCAgCisKKyNkZWZpbmUgSVdfUFJJVl9TSVpFX0ZJWEVEIDB4MDgwMCAgCisKKyNkZWZpbmUgSVdfUFJJVl9TSVpFX01BU0sgMHgwN0ZGICAKKworI2RlZmluZSBJV19NQVhfRlJFUVVFTkNJRVMgMzIKKworI2RlZmluZSBJV19NQVhfQklUUkFURVMgMzIKKworI2RlZmluZSBJV19NQVhfVFhQT1dFUiA4CisKKyNkZWZpbmUgSVdfTUFYX1NQWSA4CisKKyNkZWZpbmUgSVdfTUFYX0FQIDY0CisKKyNkZWZpbmUgSVdfRVNTSURfTUFYX1NJWkUgMzIKKworI2RlZmluZSBJV19NT0RFX0FVVE8gMCAgCisjZGVmaW5lIElXX01PREVfQURIT0MgMSAgCisjZGVmaW5lIElXX01PREVfSU5GUkEgMiAgCisjZGVmaW5lIElXX01PREVfTUFTVEVSIDMgIAorI2RlZmluZSBJV19NT0RFX1JFUEVBVCA0ICAKKyNkZWZpbmUgSVdfTU9ERV9TRUNPTkQgNSAgCisjZGVmaW5lIElXX01PREVfTU9OSVRPUiA2ICAKKworI2RlZmluZSBJV19RVUFMX1FVQUxfVVBEQVRFRCAweDAxICAKKyNkZWZpbmUgSVdfUVVBTF9MRVZFTF9VUERBVEVEIDB4MDIKKyNkZWZpbmUgSVdfUVVBTF9OT0lTRV9VUERBVEVEIDB4MDQKKyNkZWZpbmUgSVdfUVVBTF9BTExfVVBEQVRFRCAweDA3CisjZGVmaW5lIElXX1FVQUxfREJNIDB4MDggIAorI2RlZmluZSBJV19RVUFMX1FVQUxfSU5WQUxJRCAweDEwICAKKyNkZWZpbmUgSVdfUVVBTF9MRVZFTF9JTlZBTElEIDB4MjAKKyNkZWZpbmUgSVdfUVVBTF9OT0lTRV9JTlZBTElEIDB4NDAKKyNkZWZpbmUgSVdfUVVBTF9BTExfSU5WQUxJRCAweDcwCisKKyNkZWZpbmUgSVdfRlJFUV9BVVRPIDB4MDAgIAorI2RlZmluZSBJV19GUkVRX0ZJWEVEIDB4MDEgIAorCisjZGVmaW5lIElXX01BWF9FTkNPRElOR19TSVpFUyA4CisKKyNkZWZpbmUgSVdfRU5DT0RJTkdfVE9LRU5fTUFYIDY0ICAKKworI2RlZmluZSBJV19FTkNPREVfSU5ERVggMHgwMEZGICAKKyNkZWZpbmUgSVdfRU5DT0RFX0ZMQUdTIDB4RkYwMCAgCisjZGVmaW5lIElXX0VOQ09ERV9NT0RFIDB4RjAwMCAgCisjZGVmaW5lIElXX0VOQ09ERV9ESVNBQkxFRCAweDgwMDAgIAorI2RlZmluZSBJV19FTkNPREVfRU5BQkxFRCAweDAwMDAgIAorI2RlZmluZSBJV19FTkNPREVfUkVTVFJJQ1RFRCAweDQwMDAgIAorI2RlZmluZSBJV19FTkNPREVfT1BFTiAweDIwMDAgIAorI2RlZmluZSBJV19FTkNPREVfTk9LRVkgMHgwODAwICAKKyNkZWZpbmUgSVdfRU5DT0RFX1RFTVAgMHgwNDAwICAKKworI2RlZmluZSBJV19QT1dFUl9PTiAweDAwMDAgIAorI2RlZmluZSBJV19QT1dFUl9UWVBFIDB4RjAwMCAgCisjZGVmaW5lIElXX1BPV0VSX1BFUklPRCAweDEwMDAgIAorI2RlZmluZSBJV19QT1dFUl9USU1FT1VUIDB4MjAwMCAgCisjZGVmaW5lIElXX1BPV0VSX01PREUgMHgwRjAwICAKKyNkZWZpbmUgSVdfUE9XRVJfVU5JQ0FTVF9SIDB4MDEwMCAgCisjZGVmaW5lIElXX1BPV0VSX01VTFRJQ0FTVF9SIDB4MDIwMCAgCisjZGVmaW5lIElXX1BPV0VSX0FMTF9SIDB4MDMwMCAgCisjZGVmaW5lIElXX1BPV0VSX0ZPUkNFX1MgMHgwNDAwICAKKyNkZWZpbmUgSVdfUE9XRVJfUkVQRUFURVIgMHgwODAwICAKKyNkZWZpbmUgSVdfUE9XRVJfTU9ESUZJRVIgMHgwMDBGICAKKyNkZWZpbmUgSVdfUE9XRVJfTUlOIDB4MDAwMSAgCisjZGVmaW5lIElXX1BPV0VSX01BWCAweDAwMDIgIAorI2RlZmluZSBJV19QT1dFUl9SRUxBVElWRSAweDAwMDQgIAorCisjZGVmaW5lIElXX1RYUE9XX1RZUEUgMHgwMEZGICAKKyNkZWZpbmUgSVdfVFhQT1dfREJNIDB4MDAwMCAgCisjZGVmaW5lIElXX1RYUE9XX01XQVRUIDB4MDAwMSAgCisjZGVmaW5lIElXX1RYUE9XX1JFTEFUSVZFIDB4MDAwMiAgCisjZGVmaW5lIElXX1RYUE9XX1JBTkdFIDB4MTAwMCAgCisKKyNkZWZpbmUgSVdfUkVUUllfT04gMHgwMDAwICAKKyNkZWZpbmUgSVdfUkVUUllfVFlQRSAweEYwMDAgIAorI2RlZmluZSBJV19SRVRSWV9MSU1JVCAweDEwMDAgIAorI2RlZmluZSBJV19SRVRSWV9MSUZFVElNRSAweDIwMDAgIAorI2RlZmluZSBJV19SRVRSWV9NT0RJRklFUiAweDAwMEYgIAorI2RlZmluZSBJV19SRVRSWV9NSU4gMHgwMDAxICAKKyNkZWZpbmUgSVdfUkVUUllfTUFYIDB4MDAwMiAgCisjZGVmaW5lIElXX1JFVFJZX1JFTEFUSVZFIDB4MDAwNCAgCisKKyNkZWZpbmUgSVdfU0NBTl9ERUZBVUxUIDB4MDAwMCAgCisjZGVmaW5lIElXX1NDQU5fQUxMX0VTU0lEIDB4MDAwMSAgCisjZGVmaW5lIElXX1NDQU5fVEhJU19FU1NJRCAweDAwMDIgIAorI2RlZmluZSBJV19TQ0FOX0FMTF9GUkVRIDB4MDAwNCAgCisjZGVmaW5lIElXX1NDQU5fVEhJU19GUkVRIDB4MDAwOCAgCisjZGVmaW5lIElXX1NDQU5fQUxMX01PREUgMHgwMDEwICAKKyNkZWZpbmUgSVdfU0NBTl9USElTX01PREUgMHgwMDIwICAKKyNkZWZpbmUgSVdfU0NBTl9BTExfUkFURSAweDAwNDAgIAorI2RlZmluZSBJV19TQ0FOX1RISVNfUkFURSAweDAwODAgIAorCisjZGVmaW5lIElXX1NDQU5fVFlQRV9BQ1RJVkUgMAorI2RlZmluZSBJV19TQ0FOX1RZUEVfUEFTU0lWRSAxCisKKyNkZWZpbmUgSVdfU0NBTl9NQVhfREFUQSA0MDk2ICAKKworI2RlZmluZSBJV19DVVNUT01fTUFYIDI1NiAgCisKKyNkZWZpbmUgSVdfR0VORVJJQ19JRV9NQVggMTAyNAorCisjZGVmaW5lIElXX01MTUVfREVBVVRIIDAKKyNkZWZpbmUgSVdfTUxNRV9ESVNBU1NPQyAxCisKKyNkZWZpbmUgSVdfQVVUSF9JTkRFWCAweDBGRkYKKyNkZWZpbmUgSVdfQVVUSF9GTEFHUyAweEYwMDAKKworI2RlZmluZSBJV19BVVRIX1dQQV9WRVJTSU9OIDAKKyNkZWZpbmUgSVdfQVVUSF9DSVBIRVJfUEFJUldJU0UgMQorI2RlZmluZSBJV19BVVRIX0NJUEhFUl9HUk9VUCAyCisjZGVmaW5lIElXX0FVVEhfS0VZX01HTVQgMworI2RlZmluZSBJV19BVVRIX1RLSVBfQ09VTlRFUk1FQVNVUkVTIDQKKyNkZWZpbmUgSVdfQVVUSF9EUk9QX1VORU5DUllQVEVEIDUKKyNkZWZpbmUgSVdfQVVUSF84MDIxMV9BVVRIX0FMRyA2CisjZGVmaW5lIElXX0FVVEhfV1BBX0VOQUJMRUQgNworI2RlZmluZSBJV19BVVRIX1JYX1VORU5DUllQVEVEX0VBUE9MIDgKKyNkZWZpbmUgSVdfQVVUSF9ST0FNSU5HX0NPTlRST0wgOQorI2RlZmluZSBJV19BVVRIX1BSSVZBQ1lfSU5WT0tFRCAxMAorCisjZGVmaW5lIElXX0FVVEhfV1BBX1ZFUlNJT05fRElTQUJMRUQgMHgwMDAwMDAwMQorI2RlZmluZSBJV19BVVRIX1dQQV9WRVJTSU9OX1dQQSAweDAwMDAwMDAyCisjZGVmaW5lIElXX0FVVEhfV1BBX1ZFUlNJT05fV1BBMiAweDAwMDAwMDA0CisKKyNkZWZpbmUgSVdfQVVUSF9DSVBIRVJfTk9ORSAweDAwMDAwMDAxCisjZGVmaW5lIElXX0FVVEhfQ0lQSEVSX1dFUDQwIDB4MDAwMDAwMDIKKyNkZWZpbmUgSVdfQVVUSF9DSVBIRVJfVEtJUCAweDAwMDAwMDA0CisjZGVmaW5lIElXX0FVVEhfQ0lQSEVSX0NDTVAgMHgwMDAwMDAwOAorI2RlZmluZSBJV19BVVRIX0NJUEhFUl9XRVAxMDQgMHgwMDAwMDAxMAorCisjZGVmaW5lIElXX0FVVEhfS0VZX01HTVRfODAyXzFYIDEKKyNkZWZpbmUgSVdfQVVUSF9LRVlfTUdNVF9QU0sgMgorCisjZGVmaW5lIElXX0FVVEhfQUxHX09QRU5fU1lTVEVNIDB4MDAwMDAwMDEKKyNkZWZpbmUgSVdfQVVUSF9BTEdfU0hBUkVEX0tFWSAweDAwMDAwMDAyCisjZGVmaW5lIElXX0FVVEhfQUxHX0xFQVAgMHgwMDAwMDAwNAorCisjZGVmaW5lIElXX0FVVEhfUk9BTUlOR19FTkFCTEUgMCAgCisjZGVmaW5lIElXX0FVVEhfUk9BTUlOR19ESVNBQkxFIDEgIAorCisjZGVmaW5lIElXX0VOQ09ERV9TRVFfTUFYX1NJWkUgOAorCisjZGVmaW5lIElXX0VOQ09ERV9BTEdfTk9ORSAwCisjZGVmaW5lIElXX0VOQ09ERV9BTEdfV0VQIDEKKyNkZWZpbmUgSVdfRU5DT0RFX0FMR19US0lQIDIKKyNkZWZpbmUgSVdfRU5DT0RFX0FMR19DQ01QIDMKKworI2RlZmluZSBJV19FTkNPREVfRVhUX1RYX1NFUV9WQUxJRCAweDAwMDAwMDAxCisjZGVmaW5lIElXX0VOQ09ERV9FWFRfUlhfU0VRX1ZBTElEIDB4MDAwMDAwMDIKKyNkZWZpbmUgSVdfRU5DT0RFX0VYVF9HUk9VUF9LRVkgMHgwMDAwMDAwNAorI2RlZmluZSBJV19FTkNPREVfRVhUX1NFVF9UWF9LRVkgMHgwMDAwMDAwOAorCisjZGVmaW5lIElXX01JQ0ZBSUxVUkVfS0VZX0lEIDB4MDAwMDAwMDMgIAorI2RlZmluZSBJV19NSUNGQUlMVVJFX0dST1VQIDB4MDAwMDAwMDQKKyNkZWZpbmUgSVdfTUlDRkFJTFVSRV9QQUlSV0lTRSAweDAwMDAwMDA4CisjZGVmaW5lIElXX01JQ0ZBSUxVUkVfU1RBS0VZIDB4MDAwMDAwMTAKKyNkZWZpbmUgSVdfTUlDRkFJTFVSRV9DT1VOVCAweDAwMDAwMDYwICAKKworI2RlZmluZSBJV19FTkNfQ0FQQV9XUEEgMHgwMDAwMDAwMQorI2RlZmluZSBJV19FTkNfQ0FQQV9XUEEyIDB4MDAwMDAwMDIKKyNkZWZpbmUgSVdfRU5DX0NBUEFfQ0lQSEVSX1RLSVAgMHgwMDAwMDAwNAorI2RlZmluZSBJV19FTkNfQ0FQQV9DSVBIRVJfQ0NNUCAweDAwMDAwMDA4CisKKyNkZWZpbmUgSVdfRVZFTlRfQ0FQQV9CQVNFKGNtZCkgKChjbWQgPj0gU0lPQ0lXRklSU1RQUklWKSA/ICAgKGNtZCAtIFNJT0NJV0ZJUlNUUFJJViArIDB4NjApIDogICAoY21kIC0gU0lPQ1NJV0NPTU1JVCkpCisjZGVmaW5lIElXX0VWRU5UX0NBUEFfSU5ERVgoY21kKSAoSVdfRVZFTlRfQ0FQQV9CQVNFKGNtZCkgPj4gNSkKKyNkZWZpbmUgSVdfRVZFTlRfQ0FQQV9NQVNLKGNtZCkgKDEgPDwgKElXX0VWRU5UX0NBUEFfQkFTRShjbWQpICYgMHgxRikpCisKKyNkZWZpbmUgSVdfRVZFTlRfQ0FQQV9LXzAgKElXX0VWRU5UX0NBUEFfTUFTSygweDhCMDQpIHwgICBJV19FVkVOVF9DQVBBX01BU0soMHg4QjA2KSB8ICAgSVdfRVZFTlRfQ0FQQV9NQVNLKDB4OEIxQSkpCisjZGVmaW5lIElXX0VWRU5UX0NBUEFfS18xIChJV19FVkVOVF9DQVBBX01BU0soMHg4QjJBKSkKKworI2RlZmluZSBJV19FVkVOVF9DQVBBX1NFVChldmVudF9jYXBhLCBjbWQpIChldmVudF9jYXBhW0lXX0VWRU5UX0NBUEFfSU5ERVgoY21kKV0gfD0gSVdfRVZFTlRfQ0FQQV9NQVNLKGNtZCkpCisjZGVmaW5lIElXX0VWRU5UX0NBUEFfU0VUX0tFUk5FTChldmVudF9jYXBhKSB7ZXZlbnRfY2FwYVswXSB8PSBJV19FVkVOVF9DQVBBX0tfMDsgZXZlbnRfY2FwYVsxXSB8PSBJV19FVkVOVF9DQVBBX0tfMTsgfQorCitzdHJ1Y3QgaXdfcGFyYW0KK3sKKyBfX3MzMiB2YWx1ZTsKKyBfX3U4IGZpeGVkOworIF9fdTggZGlzYWJsZWQ7CisgX191MTYgZmxhZ3M7Cit9OworCitzdHJ1Y3QgaXdfcG9pbnQKK3sKKyB2b2lkIF9fdXNlciAqcG9pbnRlcjsKKyBfX3UxNiBsZW5ndGg7CisgX191MTYgZmxhZ3M7Cit9OworCitzdHJ1Y3QgaXdfZnJlcQoreworIF9fczMyIG07CisgX19zMTYgZTsKKyBfX3U4IGk7CisgX191OCBmbGFnczsKK307CisKK3N0cnVjdCBpd19xdWFsaXR5Cit7CisgX191OCBxdWFsOworIF9fdTggbGV2ZWw7CisgX191OCBub2lzZTsKKyBfX3U4IHVwZGF0ZWQ7Cit9OworCitzdHJ1Y3QgaXdfZGlzY2FyZGVkCit7CisgX191MzIgbndpZDsKKyBfX3UzMiBjb2RlOworIF9fdTMyIGZyYWdtZW50OworIF9fdTMyIHJldHJpZXM7CisgX191MzIgbWlzYzsKK307CisKK3N0cnVjdCBpd19taXNzZWQKK3sKKyBfX3UzMiBiZWFjb247Cit9OworCitzdHJ1Y3QgaXdfdGhyc3B5Cit7Cisgc3RydWN0IHNvY2thZGRyIGFkZHI7Cisgc3RydWN0IGl3X3F1YWxpdHkgcXVhbDsKKyBzdHJ1Y3QgaXdfcXVhbGl0eSBsb3c7Cisgc3RydWN0IGl3X3F1YWxpdHkgaGlnaDsKK307CisKK3N0cnVjdCBpd19zY2FuX3JlcQoreworIF9fdTggc2Nhbl90eXBlOworIF9fdTggZXNzaWRfbGVuOworIF9fdTggbnVtX2NoYW5uZWxzOworIF9fdTggZmxhZ3M7Cisgc3RydWN0IHNvY2thZGRyIGJzc2lkOworCisgX191OCBlc3NpZFtJV19FU1NJRF9NQVhfU0laRV07CisKKyBfX3UzMiBtaW5fY2hhbm5lbF90aW1lOworIF9fdTMyIG1heF9jaGFubmVsX3RpbWU7CisKKyBzdHJ1Y3QgaXdfZnJlcSBjaGFubmVsX2xpc3RbSVdfTUFYX0ZSRVFVRU5DSUVTXTsKK307CisKK3N0cnVjdCBpd19lbmNvZGVfZXh0Cit7CisgX191MzIgZXh0X2ZsYWdzOworIF9fdTggdHhfc2VxW0lXX0VOQ09ERV9TRVFfTUFYX1NJWkVdOworIF9fdTggcnhfc2VxW0lXX0VOQ09ERV9TRVFfTUFYX1NJWkVdOworIHN0cnVjdCBzb2NrYWRkciBhZGRyOworIF9fdTE2IGFsZzsKKyBfX3UxNiBrZXlfbGVuOworIF9fdTgga2V5WzBdOworfTsKKworc3RydWN0IGl3X21sbWUKK3sKKyBfX3UxNiBjbWQ7CisgX191MTYgcmVhc29uX2NvZGU7Cisgc3RydWN0IHNvY2thZGRyIGFkZHI7Cit9OworCisjZGVmaW5lIElXX1BNS1NBX0FERCAxCisjZGVmaW5lIElXX1BNS1NBX1JFTU9WRSAyCisjZGVmaW5lIElXX1BNS1NBX0ZMVVNIIDMKKworI2RlZmluZSBJV19QTUtJRF9MRU4gMTYKKworc3RydWN0IGl3X3Bta3NhCit7CisgX191MzIgY21kOworIHN0cnVjdCBzb2NrYWRkciBic3NpZDsKKyBfX3U4IHBta2lkW0lXX1BNS0lEX0xFTl07Cit9OworCitzdHJ1Y3QgaXdfbWljaGFlbG1pY2ZhaWx1cmUKK3sKKyBfX3UzMiBmbGFnczsKKyBzdHJ1Y3Qgc29ja2FkZHIgc3JjX2FkZHI7CisgX191OCB0c2NbSVdfRU5DT0RFX1NFUV9NQVhfU0laRV07Cit9OworCisjZGVmaW5lIElXX1BNS0lEX0NBTkRfUFJFQVVUSCAweDAwMDAwMDAxICAKK3N0cnVjdCBpd19wbWtpZF9jYW5kCit7CisgX191MzIgZmxhZ3M7CisgX191MzIgaW5kZXg7Cisgc3RydWN0IHNvY2thZGRyIGJzc2lkOworfTsKKworc3RydWN0IGl3X3N0YXRpc3RpY3MKK3sKKyBfX3UxNiBzdGF0dXM7CisKKyBzdHJ1Y3QgaXdfcXVhbGl0eSBxdWFsOworIHN0cnVjdCBpd19kaXNjYXJkZWQgZGlzY2FyZDsKKyBzdHJ1Y3QgaXdfbWlzc2VkIG1pc3M7Cit9OworCit1bmlvbiBpd3JlcV9kYXRhCit7CisKKyBjaGFyIG5hbWVbSUZOQU1TSVpdOworCisgc3RydWN0IGl3X3BvaW50IGVzc2lkOworIHN0cnVjdCBpd19wYXJhbSBud2lkOworIHN0cnVjdCBpd19mcmVxIGZyZXE7CisKKyBzdHJ1Y3QgaXdfcGFyYW0gc2VuczsKKyBzdHJ1Y3QgaXdfcGFyYW0gYml0cmF0ZTsKKyBzdHJ1Y3QgaXdfcGFyYW0gdHhwb3dlcjsKKyBzdHJ1Y3QgaXdfcGFyYW0gcnRzOworIHN0cnVjdCBpd19wYXJhbSBmcmFnOworIF9fdTMyIG1vZGU7Cisgc3RydWN0IGl3X3BhcmFtIHJldHJ5OworCisgc3RydWN0IGl3X3BvaW50IGVuY29kaW5nOworIHN0cnVjdCBpd19wYXJhbSBwb3dlcjsKKyBzdHJ1Y3QgaXdfcXVhbGl0eSBxdWFsOworCisgc3RydWN0IHNvY2thZGRyIGFwX2FkZHI7Cisgc3RydWN0IHNvY2thZGRyIGFkZHI7CisKKyBzdHJ1Y3QgaXdfcGFyYW0gcGFyYW07Cisgc3RydWN0IGl3X3BvaW50IGRhdGE7Cit9OworCitzdHJ1Y3QgaXdyZXEKK3sKKyB1bmlvbgorIHsKKyBjaGFyIGlmcm5fbmFtZVtJRk5BTVNJWl07CisgfSBpZnJfaWZybjsKKworIHVuaW9uIGl3cmVxX2RhdGEgdTsKK307CisKK3N0cnVjdCBpd19yYW5nZQoreworCisgX191MzIgdGhyb3VnaHB1dDsKKworIF9fdTMyIG1pbl9ud2lkOworIF9fdTMyIG1heF9ud2lkOworCisgX191MTYgb2xkX251bV9jaGFubmVsczsKKyBfX3U4IG9sZF9udW1fZnJlcXVlbmN5OworCisgX191MzIgZXZlbnRfY2FwYVs2XTsKKworIF9fczMyIHNlbnNpdGl2aXR5OworCisgc3RydWN0IGl3X3F1YWxpdHkgbWF4X3F1YWw7CisKKyBzdHJ1Y3QgaXdfcXVhbGl0eSBhdmdfcXVhbDsKKworIF9fdTggbnVtX2JpdHJhdGVzOworIF9fczMyIGJpdHJhdGVbSVdfTUFYX0JJVFJBVEVTXTsKKworIF9fczMyIG1pbl9ydHM7CisgX19zMzIgbWF4X3J0czsKKworIF9fczMyIG1pbl9mcmFnOworIF9fczMyIG1heF9mcmFnOworCisgX19zMzIgbWluX3BtcDsKKyBfX3MzMiBtYXhfcG1wOworIF9fczMyIG1pbl9wbXQ7CisgX19zMzIgbWF4X3BtdDsKKyBfX3UxNiBwbXBfZmxhZ3M7CisgX191MTYgcG10X2ZsYWdzOworIF9fdTE2IHBtX2NhcGE7CisKKyBfX3UxNiBlbmNvZGluZ19zaXplW0lXX01BWF9FTkNPRElOR19TSVpFU107CisgX191OCBudW1fZW5jb2Rpbmdfc2l6ZXM7CisgX191OCBtYXhfZW5jb2RpbmdfdG9rZW5zOworCisgX191OCBlbmNvZGluZ19sb2dpbl9pbmRleDsKKworIF9fdTE2IHR4cG93ZXJfY2FwYTsKKyBfX3U4IG51bV90eHBvd2VyOworIF9fczMyIHR4cG93ZXJbSVdfTUFYX1RYUE9XRVJdOworCisgX191OCB3ZV92ZXJzaW9uX2NvbXBpbGVkOworIF9fdTggd2VfdmVyc2lvbl9zb3VyY2U7CisKKyBfX3UxNiByZXRyeV9jYXBhOworIF9fdTE2IHJldHJ5X2ZsYWdzOworIF9fdTE2IHJfdGltZV9mbGFnczsKKyBfX3MzMiBtaW5fcmV0cnk7CisgX19zMzIgbWF4X3JldHJ5OworIF9fczMyIG1pbl9yX3RpbWU7CisgX19zMzIgbWF4X3JfdGltZTsKKworIF9fdTE2IG51bV9jaGFubmVsczsKKyBfX3U4IG51bV9mcmVxdWVuY3k7Cisgc3RydWN0IGl3X2ZyZXEgZnJlcVtJV19NQVhfRlJFUVVFTkNJRVNdOworCisgX191MzIgZW5jX2NhcGE7Cit9OworCitzdHJ1Y3QgaXdfcHJpdl9hcmdzCit7CisgX191MzIgY21kOworIF9fdTE2IHNldF9hcmdzOworIF9fdTE2IGdldF9hcmdzOworIGNoYXIgbmFtZVtJRk5BTVNJWl07Cit9OworCitzdHJ1Y3QgaXdfZXZlbnQKK3sKKyBfX3UxNiBsZW47CisgX191MTYgY21kOworIHVuaW9uIGl3cmVxX2RhdGEgdTsKK307CisKKyNkZWZpbmUgSVdfRVZfTENQX0xFTiAoc2l6ZW9mKHN0cnVjdCBpd19ldmVudCkgLSBzaXplb2YodW5pb24gaXdyZXFfZGF0YSkpCisKKyNkZWZpbmUgSVdfRVZfQ0hBUl9MRU4gKElXX0VWX0xDUF9MRU4gKyBJRk5BTVNJWikKKyNkZWZpbmUgSVdfRVZfVUlOVF9MRU4gKElXX0VWX0xDUF9MRU4gKyBzaXplb2YoX191MzIpKQorI2RlZmluZSBJV19FVl9GUkVRX0xFTiAoSVdfRVZfTENQX0xFTiArIHNpemVvZihzdHJ1Y3QgaXdfZnJlcSkpCisjZGVmaW5lIElXX0VWX1BBUkFNX0xFTiAoSVdfRVZfTENQX0xFTiArIHNpemVvZihzdHJ1Y3QgaXdfcGFyYW0pKQorI2RlZmluZSBJV19FVl9BRERSX0xFTiAoSVdfRVZfTENQX0xFTiArIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpKQorI2RlZmluZSBJV19FVl9RVUFMX0xFTiAoSVdfRVZfTENQX0xFTiArIHNpemVvZihzdHJ1Y3QgaXdfcXVhbGl0eSkpCisKKyNkZWZpbmUgSVdfRVZfUE9JTlRfT0ZGICgoKGNoYXIgKikgJigoKHN0cnVjdCBpd19wb2ludCAqKSBOVUxMKS0+bGVuZ3RoKSkgLSAgIChjaGFyICopIE5VTEwpCisjZGVmaW5lIElXX0VWX1BPSU5UX0xFTiAoSVdfRVZfTENQX0xFTiArIHNpemVvZihzdHJ1Y3QgaXdfcG9pbnQpIC0gICBJV19FVl9QT0lOVF9PRkYpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3dvcmtxdWV1ZS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3dvcmtxdWV1ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyZmFiMmMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvd29ya3F1ZXVlLmgKQEAgLTAsMCArMSw0NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfV09SS1FVRVVFX0gKKyNkZWZpbmUgX0xJTlVYX1dPUktRVUVVRV9ICisKKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKworc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3Q7CisKK3N0cnVjdCB3b3JrX3N0cnVjdCB7CisgdW5zaWduZWQgbG9uZyBwZW5kaW5nOworIHN0cnVjdCBsaXN0X2hlYWQgZW50cnk7Cisgdm9pZCAoKmZ1bmMpKHZvaWQgKik7Cisgdm9pZCAqZGF0YTsKKyB2b2lkICp3cV9kYXRhOworIHN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOworfTsKKworc3RydWN0IGV4ZWN1dGVfd29yayB7Cisgc3RydWN0IHdvcmtfc3RydWN0IHdvcms7Cit9OworCisjZGVmaW5lIF9fV09SS19JTklUSUFMSVpFUihuLCBmLCBkKSB7ICAgLmVudHJ5ID0geyAmKG4pLmVudHJ5LCAmKG4pLmVudHJ5IH0sICAgLmZ1bmMgPSAoZiksICAgLmRhdGEgPSAoZCksICAgLnRpbWVyID0gVElNRVJfSU5JVElBTElaRVIoTlVMTCwgMCwgMCksICAgfQorCisjZGVmaW5lIERFQ0xBUkVfV09SSyhuLCBmLCBkKSAgIHN0cnVjdCB3b3JrX3N0cnVjdCBuID0gX19XT1JLX0lOSVRJQUxJWkVSKG4sIGYsIGQpCisKKyNkZWZpbmUgUFJFUEFSRV9XT1JLKF93b3JrLCBfZnVuYywgX2RhdGEpICAgZG8geyAgIChfd29yayktPmZ1bmMgPSBfZnVuYzsgICAoX3dvcmspLT5kYXRhID0gX2RhdGE7ICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBJTklUX1dPUksoX3dvcmssIF9mdW5jLCBfZGF0YSkgICBkbyB7ICAgSU5JVF9MSVNUX0hFQUQoJihfd29yayktPmVudHJ5KTsgICAoX3dvcmspLT5wZW5kaW5nID0gMDsgICBQUkVQQVJFX1dPUksoKF93b3JrKSwgKF9mdW5jKSwgKF9kYXRhKSk7ICAgaW5pdF90aW1lcigmKF93b3JrKS0+dGltZXIpOyAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgY3JlYXRlX3dvcmtxdWV1ZShuYW1lKSBfX2NyZWF0ZV93b3JrcXVldWUoKG5hbWUpLCAwKQorI2RlZmluZSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZShuYW1lKSBfX2NyZWF0ZV93b3JrcXVldWUoKG5hbWUpLCAxKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC94YXR0ci5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3hhdHRyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVmNjQwZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC94YXR0ci5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX1hBVFRSX0gKKyNkZWZpbmUgX0xJTlVYX1hBVFRSX0gKKworI2RlZmluZSBYQVRUUl9DUkVBVEUgMHgxICAKKyNkZWZpbmUgWEFUVFJfUkVQTEFDRSAweDIgIAorCisjZGVmaW5lIFhBVFRSX09TMl9QUkVGSVggIm9zMi4iCisjZGVmaW5lIFhBVFRSX09TMl9QUkVGSVhfTEVOIChzaXplb2YgKFhBVFRSX09TMl9QUkVGSVgpIC0gMSkKKworI2RlZmluZSBYQVRUUl9TRUNVUklUWV9QUkVGSVggInNlY3VyaXR5LiIKKyNkZWZpbmUgWEFUVFJfU0VDVVJJVFlfUFJFRklYX0xFTiAoc2l6ZW9mIChYQVRUUl9TRUNVUklUWV9QUkVGSVgpIC0gMSkKKworI2RlZmluZSBYQVRUUl9TWVNURU1fUFJFRklYICJzeXN0ZW0uIgorI2RlZmluZSBYQVRUUl9TWVNURU1fUFJFRklYX0xFTiAoc2l6ZW9mIChYQVRUUl9TWVNURU1fUFJFRklYKSAtIDEpCisKKyNkZWZpbmUgWEFUVFJfVFJVU1RFRF9QUkVGSVggInRydXN0ZWQuIgorI2RlZmluZSBYQVRUUl9UUlVTVEVEX1BSRUZJWF9MRU4gKHNpemVvZiAoWEFUVFJfVFJVU1RFRF9QUkVGSVgpIC0gMSkKKworI2RlZmluZSBYQVRUUl9VU0VSX1BSRUZJWCAidXNlci4iCisjZGVmaW5lIFhBVFRSX1VTRVJfUFJFRklYX0xFTiAoc2l6ZW9mIChYQVRUUl9VU0VSX1BSRUZJWCkgLSAxKQorCitzdHJ1Y3QgeGF0dHJfaGFuZGxlciB7CisgY2hhciAqcHJlZml4OworIHNpemVfdCAoKmxpc3QpKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNoYXIgKmxpc3QsIHNpemVfdCBsaXN0X3NpemUsCisgY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVfbGVuKTsKKyBpbnQgKCpnZXQpKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmJ1ZmZlciwKKyBzaXplX3Qgc2l6ZSk7CisgaW50ICgqc2V0KShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICpidWZmZXIsCisgc2l6ZV90IHNpemUsIGludCBmbGFncyk7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC96Y29uZi5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3pjb25mLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThlYTc4YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC96Y29uZi5oCkBAIC0wLDAgKzEsMzggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX1pDT05GX0gKKyNkZWZpbmUgX1pDT05GX0gKKworI2lmbmRlZiBNQVhfTUVNX0xFVkVMCisjZGVmaW5lIE1BWF9NRU1fTEVWRUwgOAorI2VuZGlmCisKKyNpZm5kZWYgTUFYX1dCSVRTCisjZGVmaW5lIE1BWF9XQklUUyAxNSAgCisjZW5kaWYKKworI2lmbmRlZiBERUZfV0JJVFMKKyNkZWZpbmUgREVGX1dCSVRTIE1BWF9XQklUUworI2VuZGlmCisKKyNpZiBNQVhfTUVNX0xFVkVMID49IDgKKyNkZWZpbmUgREVGX01FTV9MRVZFTCA4CisjZWxzZQorI2RlZmluZSBERUZfTUVNX0xFVkVMIE1BWF9NRU1fTEVWRUwKKyNlbmRpZgorCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgQnl0ZTsKK3R5cGVkZWYgdW5zaWduZWQgaW50IHVJbnQ7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdUxvbmc7Cit0eXBlZGVmIHZvaWQgKnZvaWRwOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC96bGliLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvemxpYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1MmFkZmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvemxpYi5oCkBAIC0wLDAgKzEsODAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX1pMSUJfSAorI2RlZmluZSBfWkxJQl9ICisKKyNpbmNsdWRlIDxsaW51eC96Y29uZi5oPgorCitzdHJ1Y3QgaW50ZXJuYWxfc3RhdGU7CisKK3R5cGVkZWYgc3RydWN0IHpfc3RyZWFtX3MgeworIEJ5dGUgKm5leHRfaW47CisgdUludCBhdmFpbF9pbjsKKyB1TG9uZyB0b3RhbF9pbjsKKworIEJ5dGUgKm5leHRfb3V0OworIHVJbnQgYXZhaWxfb3V0OworIHVMb25nIHRvdGFsX291dDsKKworIGNoYXIgKm1zZzsKKyBzdHJ1Y3QgaW50ZXJuYWxfc3RhdGUgKnN0YXRlOworCisgdm9pZCAqd29ya3NwYWNlOworCisgaW50IGRhdGFfdHlwZTsKKyB1TG9uZyBhZGxlcjsKKyB1TG9uZyByZXNlcnZlZDsKK30gel9zdHJlYW07CisKK3R5cGVkZWYgel9zdHJlYW0gKnpfc3RyZWFtcDsKKworI2RlZmluZSBaX05PX0ZMVVNIIDAKKyNkZWZpbmUgWl9QQVJUSUFMX0ZMVVNIIDEgIAorI2RlZmluZSBaX1BBQ0tFVF9GTFVTSCAyCisjZGVmaW5lIFpfU1lOQ19GTFVTSCAzCisjZGVmaW5lIFpfRlVMTF9GTFVTSCA0CisjZGVmaW5lIFpfRklOSVNIIDUKKyNkZWZpbmUgWl9CTE9DSyA2ICAKKworI2RlZmluZSBaX09LIDAKKyNkZWZpbmUgWl9TVFJFQU1fRU5EIDEKKyNkZWZpbmUgWl9ORUVEX0RJQ1QgMgorI2RlZmluZSBaX0VSUk5PICgtMSkKKyNkZWZpbmUgWl9TVFJFQU1fRVJST1IgKC0yKQorI2RlZmluZSBaX0RBVEFfRVJST1IgKC0zKQorI2RlZmluZSBaX01FTV9FUlJPUiAoLTQpCisjZGVmaW5lIFpfQlVGX0VSUk9SICgtNSkKKyNkZWZpbmUgWl9WRVJTSU9OX0VSUk9SICgtNikKKworI2RlZmluZSBaX05PX0NPTVBSRVNTSU9OIDAKKyNkZWZpbmUgWl9CRVNUX1NQRUVEIDEKKyNkZWZpbmUgWl9CRVNUX0NPTVBSRVNTSU9OIDkKKyNkZWZpbmUgWl9ERUZBVUxUX0NPTVBSRVNTSU9OICgtMSkKKworI2RlZmluZSBaX0ZJTFRFUkVEIDEKKyNkZWZpbmUgWl9IVUZGTUFOX09OTFkgMgorI2RlZmluZSBaX0RFRkFVTFRfU1RSQVRFR1kgMAorCisjZGVmaW5lIFpfQklOQVJZIDAKKyNkZWZpbmUgWl9BU0NJSSAxCisjZGVmaW5lIFpfVU5LTk9XTiAyCisKKyNkZWZpbmUgWl9ERUZMQVRFRCA4CisKKyNkZWZpbmUgemxpYl9kZWZsYXRlSW5pdChzdHJtLCBsZXZlbCkgICB6bGliX2RlZmxhdGVJbml0Migoc3RybSksIChsZXZlbCksIFpfREVGTEFURUQsIE1BWF9XQklUUywgICBERUZfTUVNX0xFVkVMLCBaX0RFRkFVTFRfU1RSQVRFR1kpCisjZGVmaW5lIHpsaWJfaW5mbGF0ZUluaXQoc3RybSkgICB6bGliX2luZmxhdGVJbml0Migoc3RybSksIERFRl9XQklUUykKKworI2lmICFkZWZpbmVkKF9aX1VUSUxfSCkgJiYgIWRlZmluZWQoTk9fRFVNTVlfREVDTCkKKyBzdHJ1Y3QgaW50ZXJuYWxfc3RhdGUge2ludCBkdW1teTt9OworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3pvcnJvX2lkcy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3pvcnJvX2lkcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2YjFkNDgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvem9ycm9faWRzLmgKQEAgLTAsMCArMSw1NDkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgWk9SUk9fTUFOVUZfUEFDSUZJQ19QRVJJUEhFUkFMUyAweDAwRDMKKyNkZWZpbmUgWk9SUk9fUFJPRF9QQUNJRklDX1BFUklQSEVSQUxTX1NFXzIwMDBfQTUwMCBaT1JST19JRChQQUNJRklDX1BFUklQSEVSQUxTLCAweDAwLCAwKQorI2RlZmluZSBaT1JST19QUk9EX1BBQ0lGSUNfUEVSSVBIRVJBTFNfU0NTSSBaT1JST19JRChQQUNJRklDX1BFUklQSEVSQUxTLCAweDBBLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX01BQ1JPU1lTVEVNU19VU0FfMiAweDAxMDAKKyNkZWZpbmUgWk9SUk9fUFJPRF9NQUNST1NZU1RFTVNfV0FSUF9FTkdJTkUgWk9SUk9fSUQoTUFDUk9TWVNURU1TX1VTQV8yLCAweDEzLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0tVUEtFXzEgMHgwMERECisjZGVmaW5lIFpPUlJPX1BST0RfS1VQS0VfR09MRU1fUkFNX0JPWF8yTUIgWk9SUk9fSUQoS1VQS0VfMSwgMHgwMCwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9NRU1QSElTIDB4MDEwMAorI2RlZmluZSBaT1JST19QUk9EX01FTVBISVNfU1RPUk1CUklOR0VSIFpPUlJPX0lEKE1FTVBISVMsIDB4MDAsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfM19TVEFURSAweDAyMDAKKyNkZWZpbmUgWk9SUk9fUFJPRF8zX1NUQVRFX01FR0FNSVhfMjAwMCBaT1JST19JRCgzX1NUQVRFLCAweDAyLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0NPTU1PRE9SRV9CUkFVTlNDSFdFSUcgMHgwMjAxCisjZGVmaW5lIFpPUlJPX1BST0RfQ0JNX0EyMDg4X0EyMjg2IFpPUlJPX0lEKENPTU1PRE9SRV9CUkFVTlNDSFdFSUcsIDB4MDEsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfQ0JNX0EyMjg2IFpPUlJPX0lEKENPTU1PRE9SRV9CUkFVTlNDSFdFSUcsIDB4MDIsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfQ0JNX0E0MDkxXzEgWk9SUk9fSUQoQ09NTU9ET1JFX0JSQVVOU0NIV0VJRywgMHg1NCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9DQk1fQTIzODZTWF8xIFpPUlJPX0lEKENPTU1PRE9SRV9CUkFVTlNDSFdFSUcsIDB4NjcsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfQ09NTU9ET1JFX1dFU1RfQ0hFU1RFUl8xIDB4MDIwMgorI2RlZmluZSBaT1JST19QUk9EX0NCTV9BMjA5MEEgWk9SUk9fSUQoQ09NTU9ET1JFX1dFU1RfQ0hFU1RFUl8xLCAweDAxLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0NCTV9BNTkwX0EyMDkxXzEgWk9SUk9fSUQoQ09NTU9ET1JFX1dFU1RfQ0hFU1RFUl8xLCAweDAyLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0NCTV9BNTkwX0EyMDkxXzIgWk9SUk9fSUQoQ09NTU9ET1JFX1dFU1RfQ0hFU1RFUl8xLCAweDAzLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0NCTV9BMjA5MEIgWk9SUk9fSUQoQ09NTU9ET1JFX1dFU1RfQ0hFU1RFUl8xLCAweDA0LCAwKQorI2RlZmluZSBaT1JST19QUk9EX0NCTV9BMjA2MCBaT1JST19JRChDT01NT0RPUkVfV0VTVF9DSEVTVEVSXzEsIDB4MDksIDApCisjZGVmaW5lIFpPUlJPX1BST0RfQ0JNX0E1OTBfQTIwNTJfQTIwNThfQTIwOTEgWk9SUk9fSUQoQ09NTU9ET1JFX1dFU1RfQ0hFU1RFUl8xLCAweDBBLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0NCTV9BNTYwX1JBTSBaT1JST19JRChDT01NT0RPUkVfV0VTVF9DSEVTVEVSXzEsIDB4MjAsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfQ0JNX0EyMjMyX1BST1RPVFlQRSBaT1JST19JRChDT01NT0RPUkVfV0VTVF9DSEVTVEVSXzEsIDB4NDUsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfQ0JNX0EyMjMyIFpPUlJPX0lEKENPTU1PRE9SRV9XRVNUX0NIRVNURVJfMSwgMHg0NiwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9DQk1fQTI2MjAgWk9SUk9fSUQoQ09NTU9ET1JFX1dFU1RfQ0hFU1RFUl8xLCAweDUwLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0NCTV9BMjYzMCBaT1JST19JRChDT01NT0RPUkVfV0VTVF9DSEVTVEVSXzEsIDB4NTEsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfQ0JNX0E0MDkxXzIgWk9SUk9fSUQoQ09NTU9ET1JFX1dFU1RfQ0hFU1RFUl8xLCAweDU0LCAwKQorI2RlZmluZSBaT1JST19QUk9EX0NCTV9BMjA2NV8xIFpPUlJPX0lEKENPTU1PRE9SRV9XRVNUX0NIRVNURVJfMSwgMHg1QSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9DQk1fUk9NVUxBVE9SIFpPUlJPX0lEKENPTU1PRE9SRV9XRVNUX0NIRVNURVJfMSwgMHg2MCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9DQk1fQTMwMDBfVEVTVF9GSVhUVVJFIFpPUlJPX0lEKENPTU1PRE9SRV9XRVNUX0NIRVNURVJfMSwgMHg2MSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9DQk1fQTIzODZTWF8yIFpPUlJPX0lEKENPTU1PRE9SRV9XRVNUX0NIRVNURVJfMSwgMHg2NywgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9DQk1fQTIwNjVfMiBaT1JST19JRChDT01NT0RPUkVfV0VTVF9DSEVTVEVSXzEsIDB4NzAsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfQ09NTU9ET1JFX1dFU1RfQ0hFU1RFUl8yIDB4MDIwMworI2RlZmluZSBaT1JST19QUk9EX0NCTV9BMjA5MEFfQ00gWk9SUk9fSUQoQ09NTU9ET1JFX1dFU1RfQ0hFU1RFUl8yLCAweDAzLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX1BST0dSRVNTSVZFX1BFUklQSEVSQUxTX0FORF9TWVNURU1TXzIgMHgwMkY0CisjZGVmaW5lIFpPUlJPX1BST0RfUFBTX0VYUDgwMDAgWk9SUk9fSUQoUFJPR1JFU1NJVkVfUEVSSVBIRVJBTFNfQU5EX1NZU1RFTVNfMiwgMHgwMiwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9LT0xGRl9DT01QVVRFUl9TVVBQTElFUyAweDAyRkYKKyNkZWZpbmUgWk9SUk9fUFJPRF9LQ1NfUE9XRVJfUENfQk9BUkQgWk9SUk9fSUQoS09MRkZfQ09NUFVURVJfU1VQUExJRVMsIDB4MDAsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfQ0FSRENPXzEgMHgwM0VDCisjZGVmaW5lIFpPUlJPX1BST0RfQ0FSRENPX0tST05PU18yMDAwXzEgWk9SUk9fSUQoQ0FSRENPXzEsIDB4MDQsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfQ0FSRENPX0ExMDAwXzEgWk9SUk9fSUQoQ0FSRENPXzEsIDB4MEMsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfQ0FSRENPX0VTQ09SVCBaT1JST19JRChDQVJEQ09fMSwgMHgwRSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9DQVJEQ09fQTI0MTAgWk9SUk9fSUQoQ0FSRENPXzEsIDB4RjUsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfQV9TUVVBUkVEIDB4MDNFRAorI2RlZmluZSBaT1JST19QUk9EX0FfU1FVQVJFRF9MSVZFXzIwMDAgWk9SUk9fSUQoQV9TUVVBUkVELCAweDAxLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0NPTVNQRUNfQ09NTVVOSUNBVElPTlMgMHgwM0VFCisjZGVmaW5lIFpPUlJPX1BST0RfQ09NU1BFQ19DT01NVU5JQ0FUSU9OU19BWDIwMDAgWk9SUk9fSUQoQ09NU1BFQ19DT01NVU5JQ0FUSU9OUywgMHgwMSwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9BTkFLSU5fUkVTRUFSQ0ggMHgwM0YxCisjZGVmaW5lIFpPUlJPX1BST0RfQU5BS0lOX1JFU0VBUkNIX0VBU1lMIFpPUlJPX0lEKEFOQUtJTl9SRVNFQVJDSCwgMHgwMSwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9NSUNST0JPVElDUyAweDAzRjIKKyNkZWZpbmUgWk9SUk9fUFJPRF9NSUNST0JPVElDU19TVEFSQk9BUkRfSUkgWk9SUk9fSUQoTUlDUk9CT1RJQ1MsIDB4MDAsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfTUlDUk9CT1RJQ1NfU1RBUkRSSVZFIFpPUlJPX0lEKE1JQ1JPQk9USUNTLCAweDAyLCAwKQorI2RlZmluZSBaT1JST19QUk9EX01JQ1JPQk9USUNTXzhfVVBfQSBaT1JST19JRChNSUNST0JPVElDUywgMHgwMywgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9NSUNST0JPVElDU184X1VQX1ogWk9SUk9fSUQoTUlDUk9CT1RJQ1MsIDB4MDQsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfTUlDUk9CT1RJQ1NfREVMVEFfUkFNIFpPUlJPX0lEKE1JQ1JPQk9USUNTLCAweDIwLCAwKQorI2RlZmluZSBaT1JST19QUk9EX01JQ1JPQk9USUNTXzhfU1RBUl9SQU0gWk9SUk9fSUQoTUlDUk9CT1RJQ1MsIDB4NDAsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfTUlDUk9CT1RJQ1NfOF9TVEFSIFpPUlJPX0lEKE1JQ1JPQk9USUNTLCAweDQxLCAwKQorI2RlZmluZSBaT1JST19QUk9EX01JQ1JPQk9USUNTX1ZYTF9SQU1fMzIgWk9SUk9fSUQoTUlDUk9CT1RJQ1MsIDB4NDQsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfTUlDUk9CT1RJQ1NfVlhMXzY4MDMwIFpPUlJPX0lEKE1JQ1JPQk9USUNTLCAweDQ1LCAwKQorI2RlZmluZSBaT1JST19QUk9EX01JQ1JPQk9USUNTX0RFTFRBIFpPUlJPX0lEKE1JQ1JPQk9USUNTLCAweDYwLCAwKQorI2RlZmluZSBaT1JST19QUk9EX01JQ1JPQk9USUNTX01CWF8xMjAwXzEyMDBaX1JBTSBaT1JST19JRChNSUNST0JPVElDUywgMHg4MSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9NSUNST0JPVElDU19IQVJERlJBTUVfMjAwMF8xIFpPUlJPX0lEKE1JQ1JPQk9USUNTLCAweDk2LCAwKQorI2RlZmluZSBaT1JST19QUk9EX01JQ1JPQk9USUNTX0hBUkRGUkFNRV8yMDAwXzIgWk9SUk9fSUQoTUlDUk9CT1RJQ1MsIDB4OUUsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfTUlDUk9CT1RJQ1NfTUJYXzEyMDBfMTIwMFogWk9SUk9fSUQoTUlDUk9CT1RJQ1MsIDB4QzEsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfQUNDRVNTX0FTU09DSUFURVNfQUxFR1JBIDB4MDNGNAorCisjZGVmaW5lIFpPUlJPX01BTlVGX0VYUEFOU0lPTl9URUNITk9MT0dJRVMgMHgwM0Y2CisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfQVNERyAweDAzRkYKKyNkZWZpbmUgWk9SUk9fUFJPRF9BU0RHX01FTU9SWV8xIFpPUlJPX0lEKEFTREcsIDB4MDEsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfQVNER19NRU1PUllfMiBaT1JST19JRChBU0RHLCAweDAyLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0FTREdfRUI5MjBfTEFOX1JPVkVSIFpPUlJPX0lEKEFTREcsIDB4RkUsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfQVNER19HUElCX0RVQUxJRUVFNDg4X1RXSU5fWCBaT1JST19JRChBU0RHLCAweEZGLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0lNVFJPTklDU18xIDB4MDQwNAorI2RlZmluZSBaT1JST19QUk9EX0lNVFJPTklDU19IVVJSSUNBTkVfMjgwMF8xIFpPUlJPX0lEKElNVFJPTklDU18xLCAweDM5LCAwKQorI2RlZmluZSBaT1JST19QUk9EX0lNVFJPTklDU19IVVJSSUNBTkVfMjgwMF8yIFpPUlJPX0lEKElNVFJPTklDU18xLCAweDU3LCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0NCTV9VTklWRVJTSVRZX09GX0xPV0VMTCAweDA0MDYKKyNkZWZpbmUgWk9SUk9fUFJPRF9DQk1fQTI0MTAgWk9SUk9fSUQoQ0JNX1VOSVZFUlNJVFlfT0ZfTE9XRUxMLCAweDAwLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0FNRVJJU1RBUiAweDA0MUQKKyNkZWZpbmUgWk9SUk9fUFJPRF9BTUVSSVNUQVJfQTIwNjUgWk9SUk9fSUQoQU1FUklTVEFSLCAweDAxLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0FNRVJJU1RBUl9BNTYwIFpPUlJPX0lEKEFNRVJJU1RBUiwgMHgwOSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9BTUVSSVNUQVJfQTQwNjYgWk9SUk9fSUQoQU1FUklTVEFSLCAweDBBLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX1NVUFJBIDB4MDQyMAorI2RlZmluZSBaT1JST19QUk9EX1NVUFJBX1NVUFJBRFJJVkVfNHg0IFpPUlJPX0lEKFNVUFJBLCAweDAxLCAwKQorI2RlZmluZSBaT1JST19QUk9EX1NVUFJBXzEwMDBfUkFNIFpPUlJPX0lEKFNVUFJBLCAweDAyLCAwKQorI2RlZmluZSBaT1JST19QUk9EX1NVUFJBXzIwMDBfRE1BIFpPUlJPX0lEKFNVUFJBLCAweDAzLCAwKQorI2RlZmluZSBaT1JST19QUk9EX1NVUFJBXzUwMCBaT1JST19JRChTVVBSQSwgMHgwNSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9TVVBSQV81MDBfU0NTSSBaT1JST19JRChTVVBSQSwgMHgwOCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9TVVBSQV81MDBYUF8yMDAwX1JBTSBaT1JST19JRChTVVBSQSwgMHgwOSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9TVVBSQV81MDBSWF8yMDAwX1JBTSBaT1JST19JRChTVVBSQSwgMHgwQSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9TVVBSQV8yNDAwWkkgWk9SUk9fSUQoU1VQUkEsIDB4MEIsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfU1VQUkFfNTAwWFBfU1VQUkFEUklWRV9XT1JEU1lOQyBaT1JST19JRChTVVBSQSwgMHgwQywgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9TVVBSQV9TVVBSQURSSVZFX1dPUkRTWU5DX0lJIFpPUlJPX0lEKFNVUFJBLCAweDBELCAwKQorI2RlZmluZSBaT1JST19QUk9EX1NVUFJBXzI0MDBaSVBMVVMgWk9SUk9fSUQoU1VQUkEsIDB4MTAsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfQ09NUFVURVJfU1lTVEVNU19BU1NPQ0lBVEVTIDB4MDQyMgorI2RlZmluZSBaT1JST19QUk9EX0NTQV9NQUdOVU0gWk9SUk9fSUQoQ09NUFVURVJfU1lTVEVNU19BU1NPQ0lBVEVTLCAweDExLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0NTQV8xMl9HQVVHRSBaT1JST19JRChDT01QVVRFUl9TWVNURU1TX0FTU09DSUFURVMsIDB4MTUsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfTUFSQ19NSUNIQUVMX0dST1RIIDB4MDQzOQorCisjZGVmaW5lIFpPUlJPX01BTlVGX01fVEVDSCAweDA1MDIKKyNkZWZpbmUgWk9SUk9fUFJPRF9NVEVDX0FUNTAwXzEgWk9SUk9fSUQoTV9URUNILCAweDAzLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0dSRUFUX1ZBTExFWV9QUk9EVUNUU18xIDB4MDZFMQorI2RlZmluZSBaT1JST19QUk9EX0dWUF9JTVBBQ1RfU0VSSUVTX0kgWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzEsIDB4MDgsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfQllURUJPWCAweDA3REEKKyNkZWZpbmUgWk9SUk9fUFJPRF9CWVRFQk9YX0E1MDAgWk9SUk9fSUQoQllURUJPWCwgMHgwMCwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9ES0JfUE9XRVJfQ09NUFVUSU5HIDB4MDdEQworI2RlZmluZSBaT1JST19QUk9EX0RLQl9QT1dFUl9DT01QVVRJTkdfU0VDVVJFS0VZIFpPUlJPX0lEKERLQl9QT1dFUl9DT01QVVRJTkcsIDB4MDksIDApCisjZGVmaW5lIFpPUlJPX1BST0RfREtCX1BPV0VSX0NPTVBVVElOR19ES01fMzEyOCBaT1JST19JRChES0JfUE9XRVJfQ09NUFVUSU5HLCAweDBFLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0RLQl9QT1dFUl9DT01QVVRJTkdfUkFQSURfRklSRSBaT1JST19JRChES0JfUE9XRVJfQ09NUFVUSU5HLCAweDBGLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0RLQl9QT1dFUl9DT01QVVRJTkdfREtNXzEyMDIgWk9SUk9fSUQoREtCX1BPV0VSX0NPTVBVVElORywgMHgxMCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9ES0JfUE9XRVJfQ09NUFVUSU5HX0NPQlJBX1ZJUEVSX0lJXzY4RUMwMzAgWk9SUk9fSUQoREtCX1BPV0VSX0NPTVBVVElORywgMHgxMiwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9ES0JfUE9XRVJfQ09NUFVUSU5HX1dJTERGSVJFXzA2MF8xIFpPUlJPX0lEKERLQl9QT1dFUl9DT01QVVRJTkcsIDB4MTcsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfREtCX1BPV0VSX0NPTVBVVElOR19XSUxERklSRV8wNjBfMiBaT1JST19JRChES0JfUE9XRVJfQ09NUFVUSU5HLCAweEZGLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0dSRUFUX1ZBTExFWV9QUk9EVUNUU18yIDB4MDdFMQorI2RlZmluZSBaT1JST19QUk9EX0dWUF9JTVBBQ1RfU0VSSUVTX0lfNEsgWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzIsIDB4MDEsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfR1ZQX0lNUEFDVF9TRVJJRVNfSV8xNktfMiBaT1JST19JRChHUkVBVF9WQUxMRVlfUFJPRFVDVFNfMiwgMHgwMiwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9HVlBfSU1QQUNUX1NFUklFU19JXzE2S18zIFpPUlJPX0lEKEdSRUFUX1ZBTExFWV9QUk9EVUNUU18yLCAweDAzLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0dWUF9JTVBBQ1RfMzAwMV9JREVfMSBaT1JST19JRChHUkVBVF9WQUxMRVlfUFJPRFVDVFNfMiwgMHgwOCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9HVlBfSU1QQUNUXzMwMDFfUkFNIFpPUlJPX0lEKEdSRUFUX1ZBTExFWV9QUk9EVUNUU18yLCAweDA5LCAwKQorI2RlZmluZSBaT1JST19QUk9EX0dWUF9JTVBBQ1RfU0VSSUVTX0lJX1JBTV8xIFpPUlJPX0lEKEdSRUFUX1ZBTExFWV9QUk9EVUNUU18yLCAweDBBLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0dWUF9FUENfQkFTRSBaT1JST19JRChHUkVBVF9WQUxMRVlfUFJPRFVDVFNfMiwgMHgwQiwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9HVlBfR0ZPUkNFXzA0MF8xIFpPUlJPX0lEKEdSRUFUX1ZBTExFWV9QUk9EVUNUU18yLCAweDBCLCAweDIwKQorI2RlZmluZSBaT1JST19QUk9EX0dWUF9HRk9SQ0VfMDQwX1NDU0lfMSBaT1JST19JRChHUkVBVF9WQUxMRVlfUFJPRFVDVFNfMiwgMHgwQiwgMHgzMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9HVlBfQTEyOTEgWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzIsIDB4MEIsIDB4NDApCisjZGVmaW5lIFpPUlJPX1BST0RfR1ZQX0NPTUJPXzAzMF9SNCBaT1JST19JRChHUkVBVF9WQUxMRVlfUFJPRFVDVFNfMiwgMHgwQiwgMHg2MCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9HVlBfQ09NQk9fMDMwX1I0X1NDU0kgWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzIsIDB4MEIsIDB4NzApCisjZGVmaW5lIFpPUlJPX1BST0RfR1ZQX1BIT05FUEFLIFpPUlJPX0lEKEdSRUFUX1ZBTExFWV9QUk9EVUNUU18yLCAweDBCLCAweDc4KQorI2RlZmluZSBaT1JST19QUk9EX0dWUF9JT19FWFRFTkRFUiBaT1JST19JRChHUkVBVF9WQUxMRVlfUFJPRFVDVFNfMiwgMHgwQiwgMHg5OCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9HVlBfR0ZPUkNFXzAzMCBaT1JST19JRChHUkVBVF9WQUxMRVlfUFJPRFVDVFNfMiwgMHgwQiwgMHhhMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9HVlBfR0ZPUkNFXzAzMF9TQ1NJIFpPUlJPX0lEKEdSRUFUX1ZBTExFWV9QUk9EVUNUU18yLCAweDBCLCAweGIwKQorI2RlZmluZSBaT1JST19QUk9EX0dWUF9BNTMwIFpPUlJPX0lEKEdSRUFUX1ZBTExFWV9QUk9EVUNUU18yLCAweDBCLCAweGMwKQorI2RlZmluZSBaT1JST19QUk9EX0dWUF9BNTMwX1NDU0kgWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzIsIDB4MEIsIDB4ZDApCisjZGVmaW5lIFpPUlJPX1BST0RfR1ZQX0NPTUJPXzAzMF9SMyBaT1JST19JRChHUkVBVF9WQUxMRVlfUFJPRFVDVFNfMiwgMHgwQiwgMHhlMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9HVlBfQ09NQk9fMDMwX1IzX1NDU0kgWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzIsIDB4MEIsIDB4ZjApCisjZGVmaW5lIFpPUlJPX1BST0RfR1ZQX1NFUklFU19JSSBaT1JST19JRChHUkVBVF9WQUxMRVlfUFJPRFVDVFNfMiwgMHgwQiwgMHhmOCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9HVlBfSU1QQUNUXzMwMDFfSURFXzIgWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzIsIDB4MEQsIDApCisKKyNkZWZpbmUgWk9SUk9fUFJPRF9HVlBfR0ZPUkNFXzA0MF8wNjAgWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzIsIDB4MTYsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfR1ZQX0lNUEFDVF9WSVNJT05fMjQgWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzIsIDB4MjAsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfR1ZQX0dGT1JDRV8wNDBfMiBaT1JST19JRChHUkVBVF9WQUxMRVlfUFJPRFVDVFNfMiwgMHhGRiwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9DQUxJRk9STklBX0FDQ0VTU19TWU5FUkdZIDB4MDdFNQorI2RlZmluZSBaT1JST19QUk9EX0NBTElGT1JOSUFfQUNDRVNTX1NZTkVSR1lfTUFMSUJVIFpPUlJPX0lEKENBTElGT1JOSUFfQUNDRVNTX1NZTkVSR1ksIDB4MDEsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfWEVURUMgMHgwN0U2CisjZGVmaW5lIFpPUlJPX1BST0RfWEVURUNfRkFTVENBUkQgWk9SUk9fSUQoWEVURUMsIDB4MDEsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfWEVURUNfRkFTVENBUkRfUkFNIFpPUlJPX0lEKFhFVEVDLCAweDAyLCAwKQorI2RlZmluZSBaT1JST19QUk9EX1hFVEVDX0ZBU1RDQVJEX1BMVVMgWk9SUk9fSUQoWEVURUMsIDB4MDMsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfUFJPR1JFU1NJVkVfUEVSSVBIRVJBTFNfQU5EX1NZU1RFTVMgMHgwN0VBCisjZGVmaW5lIFpPUlJPX1BST0RfUFBTX01FUkNVUlkgWk9SUk9fSUQoUFJPR1JFU1NJVkVfUEVSSVBIRVJBTFNfQU5EX1NZU1RFTVMsIDB4MDAsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfUFBTX0EzMDAwXzY4MDQwIFpPUlJPX0lEKFBST0dSRVNTSVZFX1BFUklQSEVSQUxTX0FORF9TWVNURU1TLCAweDAxLCAwKQorI2RlZmluZSBaT1JST19QUk9EX1BQU19BMjAwMF82ODA0MCBaT1JST19JRChQUk9HUkVTU0lWRV9QRVJJUEhFUkFMU19BTkRfU1lTVEVNUywgMHg2OSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9QUFNfWkVVUyBaT1JST19JRChQUk9HUkVTU0lWRV9QRVJJUEhFUkFMU19BTkRfU1lTVEVNUywgMHg5NiwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9QUFNfQTUwMF82ODA0MCBaT1JST19JRChQUk9HUkVTU0lWRV9QRVJJUEhFUkFMU19BTkRfU1lTVEVNUywgMHhCQiwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9YRUJFQyAweDA3RUMKKworI2RlZmluZSBaT1JST19NQU5VRl9TUElSSVRfVEVDSE5PTE9HWSAweDA3RjIKKyNkZWZpbmUgWk9SUk9fUFJPRF9TUElSSVRfVEVDSE5PTE9HWV9JTlNJREVSX0lOMTAwMCBaT1JST19JRChTUElSSVRfVEVDSE5PTE9HWSwgMHgwMSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9TUElSSVRfVEVDSE5PTE9HWV9JTlNJREVSX0lONTAwIFpPUlJPX0lEKFNQSVJJVF9URUNITk9MT0dZLCAweDAyLCAwKQorI2RlZmluZSBaT1JST19QUk9EX1NQSVJJVF9URUNITk9MT0dZX1NJTjUwMCBaT1JST19JRChTUElSSVRfVEVDSE5PTE9HWSwgMHgwMywgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9TUElSSVRfVEVDSE5PTE9HWV9IREFfNTA2IFpPUlJPX0lEKFNQSVJJVF9URUNITk9MT0dZLCAweDA0LCAwKQorI2RlZmluZSBaT1JST19QUk9EX1NQSVJJVF9URUNITk9MT0dZX0FYX1MgWk9SUk9fSUQoU1BJUklUX1RFQ0hOT0xPR1ksIDB4MDUsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfU1BJUklUX1RFQ0hOT0xPR1lfT0NUQUJZVEUgWk9SUk9fSUQoU1BJUklUX1RFQ0hOT0xPR1ksIDB4MDYsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfU1BJUklUX1RFQ0hOT0xPR1lfSU5NQVRFIFpPUlJPX0lEKFNQSVJJVF9URUNITk9MT0dZLCAweDA4LCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX1NQSVJJVF9URUNITk9MT0dZXzIgMHgwN0YzCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfQlNDX0FMRkFEQVRBXzEgMHgwN0ZFCisjZGVmaW5lIFpPUlJPX1BST0RfQlNDX0FMRl8zXzEgWk9SUk9fSUQoQlNDX0FMRkFEQVRBXzEsIDB4MDMsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfQlNDX0FMRkFEQVRBXzIgMHgwODAxCisjZGVmaW5lIFpPUlJPX1BST0RfQlNDX0FMRl8yXzEgWk9SUk9fSUQoQlNDX0FMRkFEQVRBXzIsIDB4MDEsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfQlNDX0FMRl8yXzIgWk9SUk9fSUQoQlNDX0FMRkFEQVRBXzIsIDB4MDIsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfQlNDX0FMRl8zXzIgWk9SUk9fSUQoQlNDX0FMRkFEQVRBXzIsIDB4MDMsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfQ0FSRENPXzIgMHgwODAyCisjZGVmaW5lIFpPUlJPX1BST0RfQ0FSRENPX0tST05PU18yMDAwXzIgWk9SUk9fSUQoQ0FSRENPXzIsIDB4MDQsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfQ0FSRENPX0ExMDAwXzIgWk9SUk9fSUQoQ0FSRENPXzIsIDB4MEMsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfSk9DSEhFSU0gMHgwODA0CisjZGVmaW5lIFpPUlJPX1BST0RfSk9DSEhFSU1fUkFNIFpPUlJPX0lEKEpPQ0hIRUlNLCAweDAxLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0NIRUNLUE9JTlRfVEVDSE5PTE9HSUVTIDB4MDgwNworI2RlZmluZSBaT1JST19QUk9EX0NIRUNLUE9JTlRfVEVDSE5PTE9HSUVTX1NFUklBTF9TT0xVVElPTiBaT1JST19JRChDSEVDS1BPSU5UX1RFQ0hOT0xPR0lFUywgMHgwMCwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9FRE9UUk9OSUsgMHgwODEwCisjZGVmaW5lIFpPUlJPX1BST0RfRURPVFJPTklLX0lFRUVfNDg4IFpPUlJPX0lEKEVET1RST05JSywgMHgwMSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9FRE9UUk9OSUtfODAzMiBaT1JST19JRChFRE9UUk9OSUssIDB4MDIsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfRURPVFJPTklLX01VTFRJU0VSSUFMIFpPUlJPX0lEKEVET1RST05JSywgMHgwMywgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9FRE9UUk9OSUtfVklERU9ESUdJVElaRVIgWk9SUk9fSUQoRURPVFJPTklLLCAweDA0LCAwKQorI2RlZmluZSBaT1JST19QUk9EX0VET1RST05JS19QQVJBTExFTF9JTyBaT1JST19JRChFRE9UUk9OSUssIDB4MDUsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfRURPVFJPTklLX1BJQ19QUk9UT1lQSU5HIFpPUlJPX0lEKEVET1RST05JSywgMHgwNiwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9FRE9UUk9OSUtfQURDIFpPUlJPX0lEKEVET1RST05JSywgMHgwNywgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9FRE9UUk9OSUtfVk1FIFpPUlJPX0lEKEVET1RST05JSywgMHgwOCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9FRE9UUk9OSUtfRFNQOTYwMDAgWk9SUk9fSUQoRURPVFJPTklLLCAweDA5LCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX05FU19JTkMgMHgwODEzCisjZGVmaW5lIFpPUlJPX1BST0RfTkVTX0lOQ19SQU0gWk9SUk9fSUQoTkVTX0lOQywgMHgwMCwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9JQ0QgMHgwODE3CisjZGVmaW5lIFpPUlJPX1BST0RfSUNEX0FEVkFOVEFHRV8yMDAwX1NDU0kgWk9SUk9fSUQoSUNELCAweDAxLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0lDRF9BRFZBTlRBR0VfSURFIFpPUlJPX0lEKElDRCwgMHgwMywgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9JQ0RfQURWQU5UQUdFXzIwODBfUkFNIFpPUlJPX0lEKElDRCwgMHgwNCwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9LVVBLRV8yIDB4MDgxOQorI2RlZmluZSBaT1JST19QUk9EX0tVUEtFX09NVEkgWk9SUk9fSUQoS1VQS0VfMiwgMHgwMSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9LVVBLRV9TQ1NJX0lJIFpPUlJPX0lEKEtVUEtFXzIsIDB4MDIsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfS1VQS0VfR09MRU1fQk9YIFpPUlJPX0lEKEtVUEtFXzIsIDB4MDMsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfS1VQS0VfMDMwXzg4MiBaT1JST19JRChLVVBLRV8yLCAweDA0LCAwKQorI2RlZmluZSBaT1JST19QUk9EX0tVUEtFX1NDU0lfQVQgWk9SUk9fSUQoS1VQS0VfMiwgMHgwNSwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9HUkVBVF9WQUxMRVlfUFJPRFVDVFNfMyAweDA4MUQKKyNkZWZpbmUgWk9SUk9fUFJPRF9HVlBfQTIwMDBfUkFNOCBaT1JST19JRChHUkVBVF9WQUxMRVlfUFJPRFVDVFNfMywgMHgwOSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9HVlBfSU1QQUNUX1NFUklFU19JSV9SQU1fMiBaT1JST19JRChHUkVBVF9WQUxMRVlfUFJPRFVDVFNfMywgMHgwQSwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9JTlRFUldPUktTX05FVFdPUksgMHgwODFFCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfSEFSRElUQUxfU1lOVEhFU0lTIDB4MDgyMAorI2RlZmluZSBaT1JST19QUk9EX0hBUkRJVEFMX1NZTlRIRVNJU19UUU1fNjgwMzBfNjg4ODIgWk9SUk9fSUQoSEFSRElUQUxfU1lOVEhFU0lTLCAweDE0LCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0FQUExJRURfRU5HSU5FRVJJTkcgMHgwODI4CisjZGVmaW5lIFpPUlJPX1BST0RfQVBQTElFRF9FTkdJTkVFUklOR19ETDIwMDAgWk9SUk9fSUQoQVBQTElFRF9FTkdJTkVFUklORywgMHgxMCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9BUFBMSUVEX0VOR0lORUVSSU5HX1JBTV9XT1JLUyBaT1JST19JRChBUFBMSUVEX0VOR0lORUVSSU5HLCAweEUwLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0JTQ19BTEZBREFUQV8zIDB4MDgyQworI2RlZmluZSBaT1JST19QUk9EX0JTQ19PS1RBR09OXzIwMDggWk9SUk9fSUQoQlNDX0FMRkFEQVRBXzMsIDB4MDUsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfQlNDX1RBTkRFTV9BVF8yMDA4XzUwOCBaT1JST19JRChCU0NfQUxGQURBVEFfMywgMHgwNiwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9CU0NfQUxGQV9SQU1fMTIwMCBaT1JST19JRChCU0NfQUxGQURBVEFfMywgMHgwNywgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9CU0NfT0tUQUdPTl8yMDA4X1JBTSBaT1JST19JRChCU0NfQUxGQURBVEFfMywgMHgwOCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9CU0NfTVVMVElGQUNFX0kgWk9SUk9fSUQoQlNDX0FMRkFEQVRBXzMsIDB4MTAsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfQlNDX01VTFRJRkFDRV9JSSBaT1JST19JRChCU0NfQUxGQURBVEFfMywgMHgxMSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9CU0NfTVVMVElGQUNFX0lJSSBaT1JST19JRChCU0NfQUxGQURBVEFfMywgMHgxMiwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9CU0NfRlJBTUVNQVNURVJfSUkgWk9SUk9fSUQoQlNDX0FMRkFEQVRBXzMsIDB4MjAsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfQlNDX0dSQUZGSVRJX1JBTSBaT1JST19JRChCU0NfQUxGQURBVEFfMywgMHgyMSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9CU0NfR1JBRkZJVElfUkVHIFpPUlJPX0lEKEJTQ19BTEZBREFUQV8zLCAweDIyLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0JTQ19JU0ROX01BU1RFUkNBUkQgWk9SUk9fSUQoQlNDX0FMRkFEQVRBXzMsIDB4NDAsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfQlNDX0lTRE5fTUFTVEVSQ0FSRF9JSSBaT1JST19JRChCU0NfQUxGQURBVEFfMywgMHg0MSwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9QSE9FTklYIDB4MDgzNQorI2RlZmluZSBaT1JST19QUk9EX1BIT0VOSVhfU1Q1MDYgWk9SUk9fSUQoUEhPRU5JWCwgMHgyMSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9QSE9FTklYX1NDU0kgWk9SUk9fSUQoUEhPRU5JWCwgMHgyMiwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9QSE9FTklYX1JBTSBaT1JST19JRChQSE9FTklYLCAweEJFLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0FEVkFOQ0VEX1NUT1JBR0VfU1lTVEVNUyAweDA4MzYKKyNkZWZpbmUgWk9SUk9fUFJPRF9BRFZBTkNFRF9TVE9SQUdFX1NZU1RFTVNfTkVYVVMgWk9SUk9fSUQoQURWQU5DRURfU1RPUkFHRV9TWVNURU1TLCAweDAxLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0FEVkFOQ0VEX1NUT1JBR0VfU1lTVEVNU19ORVhVU19SQU0gWk9SUk9fSUQoQURWQU5DRURfU1RPUkFHRV9TWVNURU1TLCAweDA4LCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0lNUFVMU0UgMHgwODM4CisjZGVmaW5lIFpPUlJPX1BST0RfSU1QVUxTRV9GSVJFQ1JBQ0tFUl8yNCBaT1JST19JRChJTVBVTFNFLCAweDAwLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0lWUyAweDA4NDAKKyNkZWZpbmUgWk9SUk9fUFJPRF9JVlNfR1JBTkRTTEFNX1BJQ18yIFpPUlJPX0lEKElWUywgMHgwMiwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9JVlNfR1JBTkRTTEFNX1BJQ18xIFpPUlJPX0lEKElWUywgMHgwNCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9JVlNfT1ZFUkRSSVZFIFpPUlJPX0lEKElWUywgMHgxMCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9JVlNfVFJVTVBDQVJEX0NMQVNTSUMgWk9SUk9fSUQoSVZTLCAweDMwLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0lWU19UUlVNUENBUkRfUFJPX0dSQU5EU0xBTSBaT1JST19JRChJVlMsIDB4MzQsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfSVZTX01FVEFfNCBaT1JST19JRChJVlMsIDB4NDAsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfSVZTX1dBVkVUT09MUyBaT1JST19JRChJVlMsIDB4QkYsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfSVZTX1ZFQ1RPUl8xIFpPUlJPX0lEKElWUywgMHhGMywgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9JVlNfVkVDVE9SXzIgWk9SUk9fSUQoSVZTLCAweEY0LCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX1ZFQ1RPUl8xIDB4MDg0MQorI2RlZmluZSBaT1JST19QUk9EX1ZFQ1RPUl9DT05ORUNUSU9OXzEgWk9SUk9fSUQoVkVDVE9SXzEsIDB4RTMsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfWFBFUlRfUFJPREVWIDB4MDg0NQorI2RlZmluZSBaT1JST19QUk9EX1hQRVJUX1BST0RFVl9WSVNJT05BX1JBTSBaT1JST19JRChYUEVSVF9QUk9ERVYsIDB4MDEsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfWFBFUlRfUFJPREVWX1ZJU0lPTkFfUkVHIFpPUlJPX0lEKFhQRVJUX1BST0RFViwgMHgwMiwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9YUEVSVF9QUk9ERVZfTUVSTElOX1JBTSBaT1JST19JRChYUEVSVF9QUk9ERVYsIDB4MDMsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfWFBFUlRfUFJPREVWX01FUkxJTl9SRUdfMSBaT1JST19JRChYUEVSVF9QUk9ERVYsIDB4MDQsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfWFBFUlRfUFJPREVWX01FUkxJTl9SRUdfMiBaT1JST19JRChYUEVSVF9QUk9ERVYsIDB4QzksIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfSFlEUkFfU1lTVEVNUyAweDA4NDkKKyNkZWZpbmUgWk9SUk9fUFJPRF9IWURSQV9TWVNURU1TX0FNSUdBTkVUIFpPUlJPX0lEKEhZRFJBX1NZU1RFTVMsIDB4MDEsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfU1VOUklaRV9JTkRVU1RSSUVTIDB4MDg0RgorI2RlZmluZSBaT1JST19QUk9EX1NVTlJJWkVfSU5EVVNUUklFU19BRDEwMTIgWk9SUk9fSUQoU1VOUklaRV9JTkRVU1RSSUVTLCAweDAxLCAwKQorI2RlZmluZSBaT1JST19QUk9EX1NVTlJJWkVfSU5EVVNUUklFU19BRDUxNiBaT1JST19JRChTVU5SSVpFX0lORFVTVFJJRVMsIDB4MDIsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfU1VOUklaRV9JTkRVU1RSSUVTX0RENTEyIFpPUlJPX0lEKFNVTlJJWkVfSU5EVVNUUklFUywgMHgwMywgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9UUklDRVJBVE9QUyAweDA4NTAKKyNkZWZpbmUgWk9SUk9fUFJPRF9UUklDRVJBVE9QU19NVUxUSV9JTyBaT1JST19JRChUUklDRVJBVE9QUywgMHgwMSwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9BUFBMSUVEX01BR0lDIDB4MDg1MQorI2RlZmluZSBaT1JST19QUk9EX0FQUExJRURfTUFHSUNfRE1JX1JFU09MVkVSIFpPUlJPX0lEKEFQUExJRURfTUFHSUMsIDB4MDEsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfQVBQTElFRF9NQUdJQ19ESUdJVEFMX0JST0FEQ0FTVEVSIFpPUlJPX0lEKEFQUExJRURfTUFHSUMsIDB4MDYsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfR0ZYX0JBU0UgMHgwODVFCisjZGVmaW5lIFpPUlJPX1BST0RfR0ZYX0JBU0VfR0RBXzFfVlJBTSBaT1JST19JRChHRlhfQkFTRSwgMHgwMCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9HRlhfQkFTRV9HREFfMSBaT1JST19JRChHRlhfQkFTRSwgMHgwMSwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9ST0NURUMgMHgwODYwCisjZGVmaW5lIFpPUlJPX1BST0RfUk9DVEVDX1JIXzgwMEMgWk9SUk9fSUQoUk9DVEVDLCAweDAxLCAwKQorI2RlZmluZSBaT1JST19QUk9EX1JPQ1RFQ19SSF84MDBDX1JBTSBaT1JST19JRChST0NURUMsIDB4MDEsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfS0FUTyAweDA4NjEKKyNkZWZpbmUgWk9SUk9fUFJPRF9LQVRPX01FTE9EWSBaT1JST19JRChLQVRPLCAweDgwLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0hFTEZSSUNIXzEgMHgwODYxCisjZGVmaW5lIFpPUlJPX1BST0RfSEVMRlJJQ0hfUkFJTkJPV19JSSBaT1JST19JRChIRUxGUklDSF8xLCAweDIwLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0hFTEZSSUNIX1JBSU5CT1dfSUlJIFpPUlJPX0lEKEhFTEZSSUNIXzEsIDB4MjEsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfQVRMQU5USVMgMHgwODYyCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfUFJPVEFSIDB4MDg2NAorCisjZGVmaW5lIFpPUlJPX01BTlVGX0FDUyAweDA4NjUKKworI2RlZmluZSBaT1JST19NQU5VRl9TT0ZUV0FSRV9SRVNVTFRTX0VOVEVSUFJJU0VTIDB4MDg2NgorI2RlZmluZSBaT1JST19QUk9EX1NPRlRXQVJFX1JFU1VMVFNfRU5URVJQUklTRVNfR09MREVOX0dBVEVfMl9CVVNfUExVUyBaT1JST19JRChTT0ZUV0FSRV9SRVNVTFRTX0VOVEVSUFJJU0VTLCAweDAxLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX01BU09CT1NISSAweDA4NkQKKyNkZWZpbmUgWk9SUk9fUFJPRF9NQVNPQk9TSElfTUFTVEVSX0NBUkRfU0MyMDEgWk9SUk9fSUQoTUFTT0JPU0hJLCAweDAzLCAwKQorI2RlZmluZSBaT1JST19QUk9EX01BU09CT1NISV9NQVNURVJfQ0FSRF9NQzcwMiBaT1JST19JRChNQVNPQk9TSEksIDB4MDQsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfTUFTT0JPU0hJX01WRF84MTkgWk9SUk9fSUQoTUFTT0JPU0hJLCAweDA3LCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX01BSU5IQVRUQU5fREFUQSAweDA4NkYKKyNkZWZpbmUgWk9SUk9fUFJPRF9NQUlOSEFUVEFOX0RBVEFfSURFIFpPUlJPX0lEKE1BSU5IQVRUQU5fREFUQSwgMHgwMSwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9WSUxMQUdFX1RST05JQyAweDA4NzcKKyNkZWZpbmUgWk9SUk9fUFJPRF9WSUxMQUdFX1RST05JQ19ET01JTk9fUkFNIFpPUlJPX0lEKFZJTExBR0VfVFJPTklDLCAweDAxLCAwKQorI2RlZmluZSBaT1JST19QUk9EX1ZJTExBR0VfVFJPTklDX0RPTUlOT19SRUcgWk9SUk9fSUQoVklMTEFHRV9UUk9OSUMsIDB4MDIsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfVklMTEFHRV9UUk9OSUNfRE9NSU5PXzE2TV9QUk9UT1RZUEUgWk9SUk9fSUQoVklMTEFHRV9UUk9OSUMsIDB4MDMsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfVklMTEFHRV9UUk9OSUNfUElDQVNTT19JSV9JSV9QTFVTX1JBTSBaT1JST19JRChWSUxMQUdFX1RST05JQywgMHgwQiwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9WSUxMQUdFX1RST05JQ19QSUNBU1NPX0lJX0lJX1BMVVNfUkVHIFpPUlJPX0lEKFZJTExBR0VfVFJPTklDLCAweDBDLCAwKQorI2RlZmluZSBaT1JST19QUk9EX1ZJTExBR0VfVFJPTklDX1BJQ0FTU09fSUlfSUlfUExVU19TRUdNRU5URURfTU9ERSBaT1JST19JRChWSUxMQUdFX1RST05JQywgMHgwRCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9WSUxMQUdFX1RST05JQ19QSUNBU1NPX0lWX1oyX01FTTEgWk9SUk9fSUQoVklMTEFHRV9UUk9OSUMsIDB4MTUsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfVklMTEFHRV9UUk9OSUNfUElDQVNTT19JVl9aMl9NRU0yIFpPUlJPX0lEKFZJTExBR0VfVFJPTklDLCAweDE2LCAwKQorI2RlZmluZSBaT1JST19QUk9EX1ZJTExBR0VfVFJPTklDX1BJQ0FTU09fSVZfWjJfUkVHIFpPUlJPX0lEKFZJTExBR0VfVFJPTklDLCAweDE3LCAwKQorI2RlZmluZSBaT1JST19QUk9EX1ZJTExBR0VfVFJPTklDX1BJQ0FTU09fSVZfWjMgWk9SUk9fSUQoVklMTEFHRV9UUk9OSUMsIDB4MTgsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfVklMTEFHRV9UUk9OSUNfQVJJQURORSBaT1JST19JRChWSUxMQUdFX1RST05JQywgMHhDOSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9WSUxMQUdFX1RST05JQ19BUklBRE5FMiBaT1JST19JRChWSUxMQUdFX1RST05JQywgMHhDQSwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9VVElMSVRJRVNfVU5MSU1JVEVEIDB4MDg3QgorI2RlZmluZSBaT1JST19QUk9EX1VUSUxJVElFU19VTkxJTUlURURfRU1QTEFOVF9ERUxVWEUgWk9SUk9fSUQoVVRJTElUSUVTX1VOTElNSVRFRCwgMHgxNSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9VVElMSVRJRVNfVU5MSU1JVEVEX0VNUExBTlRfREVMVVhFMiBaT1JST19JRChVVElMSVRJRVNfVU5MSU1JVEVELCAweDIwLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0FNSVRSSVggMHgwODgwCisjZGVmaW5lIFpPUlJPX1BST0RfQU1JVFJJWF9NVUxUSV9JTyBaT1JST19JRChBTUlUUklYLCAweDAxLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0FNSVRSSVhfQ0RfUkFNIFpPUlJPX0lEKEFNSVRSSVgsIDB4MDIsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfQVJNQVggMHgwODg1CisjZGVmaW5lIFpPUlJPX1BST0RfQVJNQVhfT01OSUJVUyBaT1JST19JRChBUk1BWCwgMHgwMCwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9aRVVTIDB4MDg4RAorI2RlZmluZSBaT1JST19QUk9EX1pFVVNfU1BJREVSIFpPUlJPX0lEKFpFVVMsIDB4MDQsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfTkVXVEVLIDB4MDg4RgorI2RlZmluZSBaT1JST19QUk9EX05FV1RFS19WSURFT1RPQVNURVIgWk9SUk9fSUQoTkVXVEVLLCAweDAwLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX01fVEVDSF9HRVJNQU5ZIDB4MDg5MAorI2RlZmluZSBaT1JST19QUk9EX01URUNfQVQ1MDBfMiBaT1JST19JRChNX1RFQ0hfR0VSTUFOWSwgMHgwMSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9NVEVDXzY4MDMwIFpPUlJPX0lEKE1fVEVDSF9HRVJNQU5ZLCAweDAzLCAwKQorI2RlZmluZSBaT1JST19QUk9EX01URUNfNjgwMjBJIFpPUlJPX0lEKE1fVEVDSF9HRVJNQU5ZLCAweDA2LCAwKQorI2RlZmluZSBaT1JST19QUk9EX01URUNfQTEyMDBfVDY4MDMwX1JUQyBaT1JST19JRChNX1RFQ0hfR0VSTUFOWSwgMHgyMCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9NVEVDX1ZJUEVSX01LX1ZfRV9NQVRSSVhfNTMwIFpPUlJPX0lEKE1fVEVDSF9HRVJNQU5ZLCAweDIxLCAwKQorI2RlZmluZSBaT1JST19QUk9EX01URUNfOF9NQl9SQU0gWk9SUk9fSUQoTV9URUNIX0dFUk1BTlksIDB4MjIsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfTVRFQ19WSVBFUl9NS19WX0VfTUFUUklYXzUzMF9TQ1NJX0lERSBaT1JST19JRChNX1RFQ0hfR0VSTUFOWSwgMHgyNCwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9HUkVBVF9WQUxMRVlfUFJPRFVDVFNfNCAweDA4OTEKKyNkZWZpbmUgWk9SUk9fUFJPRF9HVlBfRUdTXzI4XzI0X1NQRUNUUlVNX1JBTSBaT1JST19JRChHUkVBVF9WQUxMRVlfUFJPRFVDVFNfNCwgMHgwMSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9HVlBfRUdTXzI4XzI0X1NQRUNUUlVNX1JFRyBaT1JST19JRChHUkVBVF9WQUxMRVlfUFJPRFVDVFNfNCwgMHgwMiwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9BUE9MTE9fMSAweDA4OTIKKyNkZWZpbmUgWk9SUk9fUFJPRF9BUE9MTE9fQTEyMDAgWk9SUk9fSUQoQVBPTExPXzEsIDB4MDEsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfSEVMRlJJQ0hfMiAweDA4OTMKKyNkZWZpbmUgWk9SUk9fUFJPRF9IRUxGUklDSF9QSUNDT0xPX1JBTSBaT1JST19JRChIRUxGUklDSF8yLCAweDA1LCAwKQorI2RlZmluZSBaT1JST19QUk9EX0hFTEZSSUNIX1BJQ0NPTE9fUkVHIFpPUlJPX0lEKEhFTEZSSUNIXzIsIDB4MDYsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfSEVMRlJJQ0hfUEVHR1lfUExVU19NUEVHIFpPUlJPX0lEKEhFTEZSSUNIXzIsIDB4MDcsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfSEVMRlJJQ0hfVklERU9DUlVOQ0hFUiBaT1JST19JRChIRUxGUklDSF8yLCAweDA4LCAwKQorI2RlZmluZSBaT1JST19QUk9EX0hFTEZSSUNIX1NENjRfUkFNIFpPUlJPX0lEKEhFTEZSSUNIXzIsIDB4MEEsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfSEVMRlJJQ0hfU0Q2NF9SRUcgWk9SUk9fSUQoSEVMRlJJQ0hfMiwgMHgwQiwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9NQUNST1NZU1RFTVNfVVNBIDB4MDg5QgorI2RlZmluZSBaT1JST19QUk9EX01BQ1JPU1lTVEVNU19XQVJQX0VOR0lORV80MHh4IFpPUlJPX0lEKE1BQ1JPU1lTVEVNU19VU0EsIDB4MTMsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfRUxCT1hfQ09NUFVURVIgMHgwODlFCisjZGVmaW5lIFpPUlJPX1BST0RfRUxCT1hfQ09NUFVURVJfMTIwMF80IFpPUlJPX0lEKEVMQk9YX0NPTVBVVEVSLCAweDA2LCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0hBUk1TX1BST0ZFU1NJT05BTCAweDBBMDAKKyNkZWZpbmUgWk9SUk9fUFJPRF9IQVJNU19QUk9GRVNTSU9OQUxfMDMwX1BMVVMgWk9SUk9fSUQoSEFSTVNfUFJPRkVTU0lPTkFMLCAweDEwLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0hBUk1TX1BST0ZFU1NJT05BTF8zNTAwIFpPUlJPX0lEKEhBUk1TX1BST0ZFU1NJT05BTCwgMHhEMCwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9NSUNST05JSyAweDBBNTAKKyNkZWZpbmUgWk9SUk9fUFJPRF9NSUNST05JS19SQ0FfMTIwIFpPUlJPX0lEKE1JQ1JPTklLLCAweDBBLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX01JQ1JPTklLMiAweDBGMEYKKyNkZWZpbmUgWk9SUk9fUFJPRF9NSUNST05JSzJfWjNJIFpPUlJPX0lEKE1JQ1JPTklLMiwgMHgwMSwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9NRUdBTUlDUk8gMHgxMDAwCisjZGVmaW5lIFpPUlJPX1BST0RfTUVHQU1JQ1JPX1NDUkFNXzUwMCBaT1JST19JRChNRUdBTUlDUk8sIDB4MDMsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfTUVHQU1JQ1JPX1NDUkFNXzUwMF9SQU0gWk9SUk9fSUQoTUVHQU1JQ1JPLCAweDA0LCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0lNVFJPTklDU18yIDB4MTAyOAorI2RlZmluZSBaT1JST19QUk9EX0lNVFJPTklDU19IVVJSSUNBTkVfMjgwMF8zIFpPUlJPX0lEKElNVFJPTklDU18yLCAweDM5LCAwKQorI2RlZmluZSBaT1JST19QUk9EX0lNVFJPTklDU19IVVJSSUNBTkVfMjgwMF80IFpPUlJPX0lEKElNVFJPTklDU18yLCAweDU3LCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0lORElWSURVQUxfQ09NUFVURVJTIDB4MTIxMgorI2RlZmluZSBaT1JST19QUk9EX0lORElWSURVQUxfQ09NUFVURVJTX0JVRERIQSBaT1JST19JRChJTkRJVklEVUFMX0NPTVBVVEVSUywgMHgwMCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9JTkRJVklEVUFMX0NPTVBVVEVSU19YX1NVUkYgWk9SUk9fSUQoSU5ESVZJRFVBTF9DT01QVVRFUlMsIDB4MTcsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfSU5ESVZJRFVBTF9DT01QVVRFUlNfQ0FUV0VBU0VMIFpPUlJPX0lEKElORElWSURVQUxfQ09NUFVURVJTLCAweDJBLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0tVUEtFXzMgMHgxMjQ4CisjZGVmaW5lIFpPUlJPX1BST0RfS1VQS0VfR09MRU1fSERfMzAwMCBaT1JST19JRChLVVBLRV8zLCAweDAxLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0lUSCAweDEzODgKKyNkZWZpbmUgWk9SUk9fUFJPRF9JVEhfSVNETl9NQVNURVJfSUkgWk9SUk9fSUQoSVRILCAweDAxLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX1ZNQyAweDEzODkKKyNkZWZpbmUgWk9SUk9fUFJPRF9WTUNfSVNETl9CTEFTVEVSX1oyIFpPUlJPX0lEKFZNQywgMHgwMSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9WTUNfSFlQRVJDT01fNCBaT1JST19JRChWTUMsIDB4MDIsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfSU5GT1JNQVRJT04gMHgxNTdDCisjZGVmaW5lIFpPUlJPX1BST0RfSU5GT1JNQVRJT05fSVNETl9FTkdJTkVfSSBaT1JST19JRChJTkZPUk1BVElPTiwgMHg2NCwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9WT1JURVggMHgyMDE3CisjZGVmaW5lIFpPUlJPX1BST0RfVk9SVEVYX0dPTERFTl9HQVRFXzgwMzg2U1ggWk9SUk9fSUQoVk9SVEVYLCAweDA3LCAwKQorI2RlZmluZSBaT1JST19QUk9EX1ZPUlRFWF9HT0xERU5fR0FURV9SQU0gWk9SUk9fSUQoVk9SVEVYLCAweDA4LCAwKQorI2RlZmluZSBaT1JST19QUk9EX1ZPUlRFWF9HT0xERU5fR0FURV84MDQ4NiBaT1JST19JRChWT1JURVgsIDB4MDksIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfRVhQQU5TSU9OX1NZU1RFTVMgMHgyMDYyCisjZGVmaW5lIFpPUlJPX1BST0RfRVhQQU5TSU9OX1NZU1RFTVNfREFUQUZMWUVSXzQwMDBTWCBaT1JST19JRChFWFBBTlNJT05fU1lTVEVNUywgMHgwMSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9FWFBBTlNJT05fU1lTVEVNU19EQVRBRkxZRVJfNDAwMFNYX1JBTSBaT1JST19JRChFWFBBTlNJT05fU1lTVEVNUywgMHgwMiwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9SRUFEWVNPRlQgMHgyMTAwCisjZGVmaW5lIFpPUlJPX1BST0RfUkVBRFlTT0ZUX0FNQVhfSUlfSVYgWk9SUk9fSUQoUkVBRFlTT0ZULCAweDAxLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX1BIQVNFNSAweDIxNDAKKyNkZWZpbmUgWk9SUk9fUFJPRF9QSEFTRTVfQkxJWlpBUkRfUkFNIFpPUlJPX0lEKFBIQVNFNSwgMHgwMSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9QSEFTRTVfQkxJWlpBUkQgWk9SUk9fSUQoUEhBU0U1LCAweDAyLCAwKQorI2RlZmluZSBaT1JST19QUk9EX1BIQVNFNV9CTElaWkFSRF8xMjIwX0lWIFpPUlJPX0lEKFBIQVNFNSwgMHgwNiwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9QSEFTRTVfRkFTVExBTkVfWjNfUkFNIFpPUlJPX0lEKFBIQVNFNSwgMHgwQSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9QSEFTRTVfQkxJWlpBUkRfMTIzMF9JSV9GQVNUTEFORV9aM19DWUJFUlNDU0lfQ1lCRVJTVE9STTA2MCBaT1JST19JRChQSEFTRTUsIDB4MEIsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfUEhBU0U1X0JMSVpaQVJEXzEyMjBfQ1lCRVJTVE9STSBaT1JST19JRChQSEFTRTUsIDB4MEMsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfUEhBU0U1X0JMSVpaQVJEXzEyMzAgWk9SUk9fSUQoUEhBU0U1LCAweDBELCAwKQorI2RlZmluZSBaT1JST19QUk9EX1BIQVNFNV9CTElaWkFSRF8xMjMwX0lWXzEyNjAgWk9SUk9fSUQoUEhBU0U1LCAweDExLCAwKQorI2RlZmluZSBaT1JST19QUk9EX1BIQVNFNV9CTElaWkFSRF8yMDYwIFpPUlJPX0lEKFBIQVNFNSwgMHgxOCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9QSEFTRTVfQ1lCRVJTVE9STV9NS19JSSBaT1JST19JRChQSEFTRTUsIDB4MTksIDApCisjZGVmaW5lIFpPUlJPX1BST0RfUEhBU0U1X0NZQkVSVklTSU9ONjQgWk9SUk9fSUQoUEhBU0U1LCAweDIyLCAwKQorI2RlZmluZSBaT1JST19QUk9EX1BIQVNFNV9DWUJFUlZJU0lPTjY0XzNEX1BST1RPVFlQRSBaT1JST19JRChQSEFTRTUsIDB4MzIsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfUEhBU0U1X0NZQkVSVklTSU9ONjRfM0QgWk9SUk9fSUQoUEhBU0U1LCAweDQzLCAwKQorI2RlZmluZSBaT1JST19QUk9EX1BIQVNFNV9DWUJFUlNUT1JNX01LX0lJSSBaT1JST19JRChQSEFTRTUsIDB4NjQsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfUEhBU0U1X0JMSVpaQVJEXzYwM0VfUExVUyBaT1JST19JRChQSEFTRTUsIDB4NmUsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfRFBTIDB4MjE2OQorI2RlZmluZSBaT1JST19QUk9EX0RQU19QRVJTT05BTF9BTklNQVRJT05fUkVDT1JERVIgWk9SUk9fSUQoRFBTLCAweDAxLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0FQT0xMT18yIDB4MjIwMAorI2RlZmluZSBaT1JST19QUk9EX0FQT0xMT19BNjIwXzY4MDIwXzEgWk9SUk9fSUQoQVBPTExPXzIsIDB4MDAsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfQVBPTExPX0E2MjBfNjgwMjBfMiBaT1JST19JRChBUE9MTE9fMiwgMHgwMSwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9BUE9MTE9fMyAweDIyMjIKKyNkZWZpbmUgWk9SUk9fUFJPRF9BUE9MTE9fQVRfQVBPTExPIFpPUlJPX0lEKEFQT0xMT18zLCAweDIyLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0FQT0xMT18xMjMwXzEyNDBfMTI2MF8yMDMwXzQwNDBfNDA2MCBaT1JST19JRChBUE9MTE9fMywgMHgyMywgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9QRVRTT0ZGX0xQIDB4MzhBNQorI2RlZmluZSBaT1JST19QUk9EX1BFVFNPRkZfTFBfREVMRklOQSBaT1JST19JRChQRVRTT0ZGX0xQLCAweDAwLCAwKQorI2RlZmluZSBaT1JST19QUk9EX1BFVFNPRkZfTFBfREVMRklOQV9MSVRFIFpPUlJPX0lEKFBFVFNPRkZfTFAsIDB4MDEsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfVVdFX0dFUkxBQ0ggMHgzRkY3CisjZGVmaW5lIFpPUlJPX1BST0RfVVdFX0dFUkxBQ0hfUkFNX1JPTSBaT1JST19JRChVV0VfR0VSTEFDSCwgMHhkNCwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9BQ1QgMHg0MjMxCisjZGVmaW5lIFpPUlJPX1BST0RfQUNUX1BSRUxVREUgWk9SUk9fSUQoQUNULCAweDAxLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX01BQ1JPU1lTVEVNU19HRVJNQU5ZIDB4NDc1NAorI2RlZmluZSBaT1JST19QUk9EX01BQ1JPU1lTVEVNU19NQUVTVFJPIFpPUlJPX0lEKE1BQ1JPU1lTVEVNU19HRVJNQU5ZLCAweDAzLCAwKQorI2RlZmluZSBaT1JST19QUk9EX01BQ1JPU1lTVEVNU19WTEFCIFpPUlJPX0lEKE1BQ1JPU1lTVEVNU19HRVJNQU5ZLCAweDA0LCAwKQorI2RlZmluZSBaT1JST19QUk9EX01BQ1JPU1lTVEVNU19NQUVTVFJPX1BSTyBaT1JST19JRChNQUNST1NZU1RFTVNfR0VSTUFOWSwgMHgwNSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9NQUNST1NZU1RFTVNfUkVUSU5BIFpPUlJPX0lEKE1BQ1JPU1lTVEVNU19HRVJNQU5ZLCAweDA2LCAwKQorI2RlZmluZSBaT1JST19QUk9EX01BQ1JPU1lTVEVNU19NVUxUSV9FVk9MVVRJT04gWk9SUk9fSUQoTUFDUk9TWVNURU1TX0dFUk1BTlksIDB4MDgsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfTUFDUk9TWVNURU1TX1RPQ0NBVEEgWk9SUk9fSUQoTUFDUk9TWVNURU1TX0dFUk1BTlksIDB4MEMsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfTUFDUk9TWVNURU1TX1JFVElOQV9aMyBaT1JST19JRChNQUNST1NZU1RFTVNfR0VSTUFOWSwgMHgxMCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9NQUNST1NZU1RFTVNfVkxBQl9NT1RJT04gWk9SUk9fSUQoTUFDUk9TWVNURU1TX0dFUk1BTlksIDB4MTIsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfTUFDUk9TWVNURU1TX0FMVEFJUyBaT1JST19JRChNQUNST1NZU1RFTVNfR0VSTUFOWSwgMHgxMywgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9NQUNST1NZU1RFTVNfRkFMQ09OXzA0MCBaT1JST19JRChNQUNST1NZU1RFTVNfR0VSTUFOWSwgMHhGRCwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9DT01CSVRFQyAweDY3NjYKKworI2RlZmluZSBaT1JST19NQU5VRl9TS0lfUEVSSVBIRVJBTFMgMHg4MDAwCisjZGVmaW5lIFpPUlJPX1BST0RfU0tJX1BFUklQSEVSQUxTX01BU1RfRklSRUJBTEwgWk9SUk9fSUQoU0tJX1BFUklQSEVSQUxTLCAweDA4LCAwKQorI2RlZmluZSBaT1JST19QUk9EX1NLSV9QRVJJUEhFUkFMU19TQ1NJX0RVQUxfU0VSSUFMIFpPUlJPX0lEKFNLSV9QRVJJUEhFUkFMUywgMHg4MCwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9SRUlTX1dBUkVfMiAweEE5QUQKKyNkZWZpbmUgWk9SUk9fUFJPRF9SRUlTX1dBUkVfU0NBTl9LSU5HIFpPUlJPX0lEKFJFSVNfV0FSRV8yLCAweDExLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0NBTUVST04gMHhBQTAxCisjZGVmaW5lIFpPUlJPX1BST0RfQ0FNRVJPTl9QRVJTT05BTF9BNCBaT1JST19JRChDQU1FUk9OLCAweDEwLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX1JFSVNfV0FSRSAweEFBMTEKKyNkZWZpbmUgWk9SUk9fUFJPRF9SRUlTX1dBUkVfSEFORFlTQ0FOTkVSIFpPUlJPX0lEKFJFSVNfV0FSRSwgMHgxMSwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9QSE9FTklYXzIgMHhCNUE4CisjZGVmaW5lIFpPUlJPX1BST0RfUEhPRU5JWF9TVDUwNl8yIFpPUlJPX0lEKFBIT0VOSVhfMiwgMHgyMSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9QSE9FTklYX1NDU0lfMiBaT1JST19JRChQSE9FTklYXzIsIDB4MjIsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfUEhPRU5JWF9SQU1fMiBaT1JST19JRChQSE9FTklYXzIsIDB4QkUsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfQ09NQklURUNfMiAweEMwMDgKKyNkZWZpbmUgWk9SUk9fUFJPRF9DT01CSVRFQ19IRCBaT1JST19JRChDT01CSVRFQ18yLCAweDJBLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0NPTUJJVEVDX1NSQU0gWk9SUk9fSUQoQ09NQklURUNfMiwgMHgyQiwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9IQUNLRVIgMHgwN0RCCisjZGVmaW5lIFpPUlJPX1BST0RfR0VORVJBTF9QUk9UT1RZUEUgWk9SUk9fSUQoSEFDS0VSLCAweDAwLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0hBQ0tFUl9TQ1NJIFpPUlJPX0lEKEhBQ0tFUiwgMHgwMSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9SRVNPVVJDRV9NQU5BR0VNRU5UX0ZPUkNFX1FVSUNLTkVUX1FOMjAwMCBaT1JST19JRChIQUNLRVIsIDB4MDIsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfVkVDVE9SX0NPTk5FQ1RJT05fMiBaT1JST19JRChIQUNLRVIsIDB4RTAsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfVkVDVE9SX0NPTk5FQ1RJT05fMyBaT1JST19JRChIQUNLRVIsIDB4RTEsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfVkVDVE9SX0NPTk5FQ1RJT05fNCBaT1JST19JRChIQUNLRVIsIDB4RTIsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfVkVDVE9SX0NPTk5FQ1RJT05fNSBaT1JST19JRChIQUNLRVIsIDB4RTMsIDApCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbXRkL210ZC1hYmkuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9tdGQvbXRkLWFiaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhZTIyNjMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbXRkL210ZC1hYmkuaApAQCAtMCwwICsxLDEzMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX01URF9BQklfSF9fCisjZGVmaW5lIF9fTVREX0FCSV9IX18KKworc3RydWN0IGVyYXNlX2luZm9fdXNlciB7CisgdWludDMyX3Qgc3RhcnQ7CisgdWludDMyX3QgbGVuZ3RoOworfTsKKworc3RydWN0IG10ZF9vb2JfYnVmIHsKKyB1aW50MzJfdCBzdGFydDsKKyB1aW50MzJfdCBsZW5ndGg7CisgdW5zaWduZWQgY2hhciBfX3VzZXIgKnB0cjsKK307CisKKyNkZWZpbmUgTVREX0FCU0VOVCAwCisjZGVmaW5lIE1URF9SQU0gMQorI2RlZmluZSBNVERfUk9NIDIKKyNkZWZpbmUgTVREX05PUkZMQVNIIDMKKyNkZWZpbmUgTVREX05BTkRGTEFTSCA0CisjZGVmaW5lIE1URF9EQVRBRkxBU0ggNgorCisjZGVmaW5lIE1URF9XUklURUFCTEUgMHg0MDAgIAorI2RlZmluZSBNVERfQklUX1dSSVRFQUJMRSAweDgwMCAgCisjZGVmaW5lIE1URF9OT19FUkFTRSAweDEwMDAgIAorI2RlZmluZSBNVERfU1RVUElEX0xPQ0sgMHgyMDAwICAKKworI2RlZmluZSBNVERfQ0FQX1JPTSAwCisjZGVmaW5lIE1URF9DQVBfUkFNIChNVERfV1JJVEVBQkxFIHwgTVREX0JJVF9XUklURUFCTEUgfCBNVERfTk9fRVJBU0UpCisjZGVmaW5lIE1URF9DQVBfTk9SRkxBU0ggKE1URF9XUklURUFCTEUgfCBNVERfQklUX1dSSVRFQUJMRSkKKyNkZWZpbmUgTVREX0NBUF9OQU5ERkxBU0ggKE1URF9XUklURUFCTEUpCisKKyNkZWZpbmUgTVREX05BTkRFQ0NfT0ZGIDAgCisjZGVmaW5lIE1URF9OQU5ERUNDX1BMQUNFIDEgCisjZGVmaW5lIE1URF9OQU5ERUNDX0FVVE9QTEFDRSAyIAorI2RlZmluZSBNVERfTkFOREVDQ19QTEFDRU9OTFkgMyAKKyNkZWZpbmUgTVREX05BTkRFQ0NfQVVUT1BMX1VTUiA0IAorCisjZGVmaW5lIE1URF9PVFBfT0ZGIDAKKyNkZWZpbmUgTVREX09UUF9GQUNUT1JZIDEKKyNkZWZpbmUgTVREX09UUF9VU0VSIDIKKworc3RydWN0IG10ZF9pbmZvX3VzZXIgeworIHVpbnQ4X3QgdHlwZTsKKyB1aW50MzJfdCBmbGFnczsKKyB1aW50MzJfdCBzaXplOworIHVpbnQzMl90IGVyYXNlc2l6ZTsKKyB1aW50MzJfdCB3cml0ZXNpemU7CisgdWludDMyX3Qgb29ic2l6ZTsKKworIHVpbnQzMl90IGVjY3R5cGU7CisgdWludDMyX3QgZWNjc2l6ZTsKK307CisKK3N0cnVjdCByZWdpb25faW5mb191c2VyIHsKKyB1aW50MzJfdCBvZmZzZXQ7CisgdWludDMyX3QgZXJhc2VzaXplOworIHVpbnQzMl90IG51bWJsb2NrczsKKyB1aW50MzJfdCByZWdpb25pbmRleDsKK307CisKK3N0cnVjdCBvdHBfaW5mbyB7CisgdWludDMyX3Qgc3RhcnQ7CisgdWludDMyX3QgbGVuZ3RoOworIHVpbnQzMl90IGxvY2tlZDsKK307CisKKyNkZWZpbmUgTUVNR0VUSU5GTyBfSU9SKCdNJywgMSwgc3RydWN0IG10ZF9pbmZvX3VzZXIpCisjZGVmaW5lIE1FTUVSQVNFIF9JT1coJ00nLCAyLCBzdHJ1Y3QgZXJhc2VfaW5mb191c2VyKQorI2RlZmluZSBNRU1XUklURU9PQiBfSU9XUignTScsIDMsIHN0cnVjdCBtdGRfb29iX2J1ZikKKyNkZWZpbmUgTUVNUkVBRE9PQiBfSU9XUignTScsIDQsIHN0cnVjdCBtdGRfb29iX2J1ZikKKyNkZWZpbmUgTUVNTE9DSyBfSU9XKCdNJywgNSwgc3RydWN0IGVyYXNlX2luZm9fdXNlcikKKyNkZWZpbmUgTUVNVU5MT0NLIF9JT1coJ00nLCA2LCBzdHJ1Y3QgZXJhc2VfaW5mb191c2VyKQorI2RlZmluZSBNRU1HRVRSRUdJT05DT1VOVCBfSU9SKCdNJywgNywgaW50KQorI2RlZmluZSBNRU1HRVRSRUdJT05JTkZPIF9JT1dSKCdNJywgOCwgc3RydWN0IHJlZ2lvbl9pbmZvX3VzZXIpCisjZGVmaW5lIE1FTVNFVE9PQlNFTCBfSU9XKCdNJywgOSwgc3RydWN0IG5hbmRfb29iaW5mbykKKyNkZWZpbmUgTUVNR0VUT09CU0VMIF9JT1IoJ00nLCAxMCwgc3RydWN0IG5hbmRfb29iaW5mbykKKyNkZWZpbmUgTUVNR0VUQkFEQkxPQ0sgX0lPVygnTScsIDExLCBsb2ZmX3QpCisjZGVmaW5lIE1FTVNFVEJBREJMT0NLIF9JT1coJ00nLCAxMiwgbG9mZl90KQorI2RlZmluZSBPVFBTRUxFQ1QgX0lPUignTScsIDEzLCBpbnQpCisjZGVmaW5lIE9UUEdFVFJFR0lPTkNPVU5UIF9JT1coJ00nLCAxNCwgaW50KQorI2RlZmluZSBPVFBHRVRSRUdJT05JTkZPIF9JT1coJ00nLCAxNSwgc3RydWN0IG90cF9pbmZvKQorI2RlZmluZSBPVFBMT0NLIF9JT1IoJ00nLCAxNiwgc3RydWN0IG90cF9pbmZvKQorI2RlZmluZSBFQ0NHRVRMQVlPVVQgX0lPUignTScsIDE3LCBzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQpCisjZGVmaW5lIEVDQ0dFVFNUQVRTIF9JT1IoJ00nLCAxOCwgc3RydWN0IG10ZF9lY2Nfc3RhdHMpCisjZGVmaW5lIE1UREZJTEVNT0RFIF9JTygnTScsIDE5KQorCitzdHJ1Y3QgbmFuZF9vb2JpbmZvIHsKKyB1aW50MzJfdCB1c2VlY2M7CisgdWludDMyX3QgZWNjYnl0ZXM7CisgdWludDMyX3Qgb29iZnJlZVs4XVsyXTsKKyB1aW50MzJfdCBlY2Nwb3NbMzJdOworfTsKKworc3RydWN0IG5hbmRfb29iZnJlZSB7CisgdWludDMyX3Qgb2Zmc2V0OworIHVpbnQzMl90IGxlbmd0aDsKK307CisKKyNkZWZpbmUgTVREX01BWF9PT0JGUkVFX0VOVFJJRVMgOAorCitzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQgeworIHVpbnQzMl90IGVjY2J5dGVzOworIHVpbnQzMl90IGVjY3Bvc1s2NF07CisgdWludDMyX3Qgb29iYXZhaWw7Cisgc3RydWN0IG5hbmRfb29iZnJlZSBvb2JmcmVlW01URF9NQVhfT09CRlJFRV9FTlRSSUVTXTsKK307CisKK3N0cnVjdCBtdGRfZWNjX3N0YXRzIHsKKyB1aW50MzJfdCBjb3JyZWN0ZWQ7CisgdWludDMyX3QgZmFpbGVkOworIHVpbnQzMl90IGJhZGJsb2NrczsKKyB1aW50MzJfdCBiYnRibG9ja3M7Cit9OworCitlbnVtIG10ZF9maWxlX21vZGVzIHsKKyBNVERfTU9ERV9OT1JNQUwgPSBNVERfT1RQX09GRiwKKyBNVERfTU9ERV9PVFBfRkFDVE9SWSA9IE1URF9PVFBfRkFDVE9SWSwKKyBNVERfTU9ERV9PVFBfVVNFUiA9IE1URF9PVFBfVVNFUiwKKyBNVERfTU9ERV9SQVcsCit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9tdGQvbXRkLXVzZXIuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9tdGQvbXRkLXVzZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDM3ZGMxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL210ZC9tdGQtdXNlci5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19NVERfVVNFUl9IX18KKyNkZWZpbmUgX19NVERfVVNFUl9IX18KKworI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaW5jbHVkZSA8bXRkL210ZC1hYmkuaD4KKwordHlwZWRlZiBzdHJ1Y3QgbXRkX2luZm9fdXNlciBtdGRfaW5mb190OwordHlwZWRlZiBzdHJ1Y3QgZXJhc2VfaW5mb191c2VyIGVyYXNlX2luZm9fdDsKK3R5cGVkZWYgc3RydWN0IHJlZ2lvbl9pbmZvX3VzZXIgcmVnaW9uX2luZm9fdDsKK3R5cGVkZWYgc3RydWN0IG5hbmRfb29iaW5mbyBuYW5kX29vYmluZm9fdDsKK3R5cGVkZWYgc3RydWN0IG5hbmRfZWNjbGF5b3V0IG5hbmRfZWNjbGF5b3V0X3Q7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdG9vbHMvY2xlYW5faGVhZGVyLnB5IGIvbGliYy9rZXJuZWwvdG9vbHMvY2xlYW5faGVhZGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRlNGJmODUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC90b29scy9jbGVhbl9oZWFkZXIucHkKQEAgLTAsMCArMSwxNDggQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworCitpbXBvcnQgc3lzLCBjcHAsIGtlcm5lbCwgZ2xvYiwgb3MsIHJlLCBnZXRvcHQKK2Zyb20gZGVmYXVsdHMgaW1wb3J0ICoKK2Zyb20gdXRpbHMgaW1wb3J0ICoKKworbm9VcGRhdGUgPSAxCisKK2RlZiAgY2xlYW51cEZpbGUoIHBhdGggKToKKyAgICAiIiJyZWFkcyBhbiBvcmlnaW5hbCBoZWFkZXIgYW5kIHBlcmZvcm0gdGhlIGNsZWFudXAgb3BlcmF0aW9uIG9uIGl0CisgICAgICAgdGhpcyBmdW5jdGlvbnMgcmV0dXJucyB0aGUgZGVzdGluYXRpb24gcGF0aCBhbmQgdGhlIGNsZWFuIGhlYWRlcgorICAgICAgIGFzIGEgc2luZ2xlIHN0cmluZyIiIgorICAgICMgY2hlY2sgdGhlIGhlYWRlciBwYXRoCisgICAgc3JjX3BhdGggICAgPSBwYXRoCisKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc3JjX3BhdGgpOgorICAgICAgICBpZiBub1VwZGF0ZToKKyAgICAgICAgICAgIHBhbmljKCAiZmlsZSBkb2VzIG5vdCBleGlzdDogJyVzJ1xuIiAlIHBhdGggKQorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCAid2FybmluZzogZmlsZSBkb2VzIG5vdCBleGl0OiAlc1xuIiAlIHBhdGggKQorICAgICAgICByZXR1cm4gTm9uZSwgTm9uZQorCisgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKHNyY19wYXRoKToKKyAgICAgICAgaWYgbm9VcGRhdGU6CisgICAgICAgICAgICBwYW5pYyggInBhdGggaXMgbm90IGEgZmlsZTogJyVzJ1xuIiAlIHBhdGggKQorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCAid2FybmluZzogbm90IGEgZmlsZTogJXNcbiIgJSBwYXRoICkKKyAgICAgICAgcmV0dXJuIE5vbmUsIE5vbmUKKworICAgIG9yaWdpbmFsX3BhdGggPSBrZXJuZWxfb3JpZ2luYWxfcGF0aAorICAgIGlmIG9zLnBhdGguY29tbW9ucHJlZml4KCBbIHNyY19wYXRoLCBvcmlnaW5hbF9wYXRoIF0gKSAhPSBvcmlnaW5hbF9wYXRoOgorICAgICAgICBpZiBub1VwZGF0ZToKKyAgICAgICAgICAgIHBhbmljKCAiZmlsZSBpcyBub3QgaW4gJ29yaWdpbmFsJyBkaXJlY3Rvcnk6ICVzXG4iICUgcGF0aCApOworICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCAid2FybmluZzogZmlsZSBub3QgaW4gJ29yaWdpbmFsJyBpZ25vcmVkOiAlc1xuIiAlIHBhdGggKQorICAgICAgICByZXR1cm4gTm9uZSwgTm9uZQorCisgICAgc3JjX3BhdGggPSBzcmNfcGF0aFtsZW4ob3JpZ2luYWxfcGF0aCk6XQorICAgIGlmIGxlbihzcmNfcGF0aCkgPiAwIGFuZCBzcmNfcGF0aFswXSA9PSAnLyc6CisgICAgICAgIHNyY19wYXRoID0gc3JjX3BhdGhbMTpdCisKKyAgICBpZiBsZW4oc3JjX3BhdGgpID09IDA6CisgICAgICAgIHBhbmljKCAib29wcywgaW50ZXJuYWwgZXJyb3IsIGNhbid0IGV4dHJhY3QgY29ycmVjdCByZWxhdGl2ZSBwYXRoIiApCisKKyAgICAjIGNvbnZlcnQgaW50byBkZXN0aW5hdGlvbiBwYXRoLCBleHRyYWN0aW5nIGFyY2hpdGVjdHVyZSBpZiBuZWVkZWQKKyAgICAjIGFuZCB0aGUgY29ycmVzcG9uZGluZyBsaXN0IG9mIGtub3duIHN0YXRpYyBmdW5jdGlvbnMKKyAgICAjCisgICAgYXJjaCA9IE5vbmUKKyAgICByZV9hc21fYXJjaCA9IHJlLmNvbXBpbGUoIHIiYXNtLShbXHdcZF9cK1wuXC1dKykoLy4qKSIgKQorICAgIG0gPSByZV9hc21fYXJjaC5tYXRjaChzcmNfcGF0aCkKKyAgICBzdGF0aWNzID0ga2VybmVsX2tub3duX2dlbmVyaWNfc3RhdGljcworICAgIGlmIG0gYW5kIG0uZ3JvdXAoMSkgIT0gJ2dlbmVyaWMnOgorICAgICAgICBkc3RfcGF0aCA9ICJhcmNoLSVzL2FzbS8lcyIgJSBtLmdyb3VwcygpCisgICAgICAgIGFyY2ggICAgID0gbS5ncm91cCgxKQorICAgICAgICBzdGF0aWNzICA9IHN0YXRpY3MudW5pb24oIGtlcm5lbF9rbm93bl9zdGF0aWNzLmdldCggYXJjaCwgc2V0KCkgKSApCisgICAgZWxzZToKKyAgICAgICAgZHN0X3BhdGggPSAiY29tbW9uLyIgKyBzcmNfcGF0aAorCisgICAgZHN0X3BhdGggPSBvcy5wYXRoLm5vcm1wYXRoKCBvcmlnaW5hbF9wYXRoICsgIi8uLi8iICsgZHN0X3BhdGggKQorCisgICAgIyBub3csIGxldCdzIHBhcnNlIHRoZSBmaWxlCisgICAgIworICAgIGxpc3QgPSBjcHAuQmxvY2tQYXJzZXIoKS5wYXJzZUZpbGUocGF0aCkKKyAgICBpZiBub3QgbGlzdDoKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSggImVycm9yOiBjYW4ndCBwYXJzZSAnJXMnIiAlIHBhdGggKQorICAgICAgICBzeXMuZXhpdCgxKQorCisKKyAgICBsaXN0Lm9wdGltaXplTWFjcm9zKCBrZXJuZWxfa25vd25fbWFjcm9zICkKKyAgICBsaXN0Lm9wdGltaXplSWYwMSgpCisgICAgbGlzdC5yZW1vdmVWYXJzQW5kRnVuY3MoIHN0YXRpY3MgKQorICAgIGxpc3QucmVtb3ZlQ29tbWVudHMoKQorICAgIGxpc3QucmVtb3ZlRW1wdHlMaW5lcygpCisgICAgbGlzdC5yZW1vdmVNYWNyb0RlZmluZXMoIGtlcm5lbF9pZ25vcmVkX21hY3JvcyApCisgICAgbGlzdC5pbnNlcnREaXNjbGFpbWVyKCBrZXJuZWwua2VybmVsX2Rpc2NsYWltZXIgKQorCisgICAgb3V0ID0gU3RyaW5nT3V0cHV0KCkKKyAgICBsaXN0LndyaXRlKG91dCkKKyAgICByZXR1cm4gZHN0X3BhdGgsIG91dC5nZXQoKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisKKyAgICBkZWYgdXNhZ2UoKToKKyAgICAgICAgcHJpbnQgIiIiXAorICAgIHVzYWdlOiAgJXMgW29wdGlvbnNdIDxoZWFkZXJfcGF0aD4KKworICAgICAgICBvcHRpb25zOgorICAgICAgICAgICAgLXYgICAgZW5hYmxlIHZlcmJvc2UgbW9kZQorCisgICAgICAgICAgICAtdSAgICBlbmFibGVkIHVwZGF0ZSBtb2RlCisgICAgICAgICAgICAgICAgdGhpcyB3aWxsIHRyeSB0byB1cGRhdGUgdGhlIGNvcnJlc3BvbmRpbmcgJ2NsZWFuIGhlYWRlcicKKyAgICAgICAgICAgICAgICBpZiB0aGUgY29udGVudCBoYXMgY2hhbmdlZC4gd2l0aCB0aGlzLCB5b3UgY2FuIHBhc3MgbW9yZQorICAgICAgICAgICAgICAgIHRoYW4gb25lIGZpbGUgb24gdGhlIGNvbW1hbmQtbGluZQorCisgICAgICAgIDxoZWFkZXJfcGF0aD4gbXVzdCBiZSBpbiBhIHN1YmRpcmVjdG9yeSBvZiAnb3JpZ2luYWwnCisgICAgIiIiICUgb3MucGF0aC5iYXNlbmFtZShzeXMuYXJndlswXSkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIHRyeToKKyAgICAgICAgb3B0bGlzdCwgYXJncyA9IGdldG9wdC5nZXRvcHQoIHN5cy5hcmd2WzE6XSwgJ3V2JyApCisgICAgZXhjZXB0OgorICAgICAgICAjIHVucmVjb2duaXplZCBvcHRpb24KKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSggImVycm9yOiB1bnJlY29nbml6ZWQgb3B0aW9uXG4iICkKKyAgICAgICAgdXNhZ2UoKQorCisgICAgZm9yIG9wdCwgYXJnIGluIG9wdGxpc3Q6CisgICAgICAgIGlmIG9wdCA9PSAnLXUnOgorICAgICAgICAgICAgbm9VcGRhdGUgPSAwCisgICAgICAgIGVsaWYgb3B0ID09ICctdic6CisgICAgICAgICAgICB2ZXJib3NlID0gMQorICAgICAgICAgICAgRF9zZXRsZXZlbCgxKQorCisgICAgaWYgbGVuKGFyZ3MpID09IDA6CisgICAgICAgIHVzYWdlKCkKKworICAgIGlmIG5vVXBkYXRlOgorICAgICAgICBmb3IgcGF0aCBpbiBhcmdzOgorICAgICAgICAgICAgZHN0X3BhdGgsIG5ld2RhdGEgPSBjbGVhbnVwRmlsZShwYXRoKQorICAgICAgICAgICAgcHJpbnQgbmV3ZGF0YQorCisgICAgICAgIHN5cy5leGl0KDApCisKKyAgICAjIG5vdyBsZXQncyB1cGRhdGUgb3VyIGZpbGVzLgorCisgICAgYiA9IEJhdGNoRmlsZVVwZGF0ZXIoKQorCisgICAgZm9yIHBhdGggaW4gYXJnczoKKyAgICAgICAgZHN0X3BhdGgsIG5ld2RhdGEgPSBjbGVhbnVwRmlsZShwYXRoKQorICAgICAgICBpZiBub3QgZHN0X3BhdGg6CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIGIucmVhZEZpbGUoIGRzdF9wYXRoICkKKyAgICAgICAgciA9IGIuZWRpdEZpbGUoIGRzdF9wYXRoLCBuZXdkYXRhICkKKyAgICAgICAgaWYgciA9PSAwOgorICAgICAgICAgICAgciA9ICJ1bmNoYW5nZWQiCisgICAgICAgIGVsaWYgciA9PSAxOgorICAgICAgICAgICAgciA9ICJlZGl0ZWQiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByID0gImFkZGVkIgorCisgICAgICAgIHByaW50ICJjbGVhbmluZzogJS0qcyAtPiAlLSpzICglcykiICUgKCAzNSwgcGF0aCwgMzUsIGRzdF9wYXRoLCByICkKKworCisgICAgaWYgb3MuZW52aXJvbi5oYXNfa2V5KCJBTkRST0lEX1BST0RVQ1RfT1VUIik6CisgICAgICAgIGIudXBkYXRlUDRGaWxlcygpCisgICAgZWxzZToKKyAgICAgICAgYi51cGRhdGVGaWxlcygpCisKKyAgICBzeXMuZXhpdCgwKQpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdG9vbHMvY3BwLnB5IGIvbGliYy9rZXJuZWwvdG9vbHMvY3BwLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiNGJkMzgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC90b29scy9jcHAucHkKQEAgLTAsMCArMSwyMTgwIEBACisjIGEgZ2xvcmlmaWVkIEMgcHJlLXByb2Nlc3NvciBwYXJzZXIKKworaW1wb3J0IHN5cywgcmUsIHN0cmluZworZnJvbSB1dGlscyBpbXBvcnQgKgorZnJvbSBkZWZhdWx0cyBpbXBvcnQgKgorCitkZWJ1Z1Rva2VucyAgICAgICAgICAgICA9IEZhbHNlCitkZWJ1Z0RpcmVjdGl2ZVRva2VuaXplciA9IEZhbHNlCitkZWJ1Z0xpbmVQYXJzaW5nICAgICAgICA9IEZhbHNlCitkZWJ1Z0NwcEV4cHIgICAgICAgICAgICA9IEZhbHNlCitkZWJ1Z09wdGltSWYwMSAgICAgICAgICA9IEZhbHNlCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMKKyMjIyMjICAgICAgICAgICBDIFAgUCAgIFQgTyBLIEUgTiBTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMKKyMjIyMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgQy1wcmVwcm9jZXNzb3IgdG9rZW5zCisjIHBsdXMgYSBjb3VwbGUgb2YgQyB0b2tlbnMgYXMgd2VsbAordG9rRU9GICAgICAgID0gIlwwIgordG9rTE4gICAgICAgID0gIlxuIgordG9rU1RSSU5HSUZZID0gIiMiCit0b2tDT05DQVQgICAgPSAiIyMiCit0b2tMT0dJQ0FORCAgPSAiJiYiCit0b2tMT0dJQ09SICAgPSAifHwiCit0b2tTSEwgICAgICAgPSAiPDwiCit0b2tTSFIgICAgICAgPSAiPj4iCit0b2tFUVVBTCAgICAgPSAiPT0iCit0b2tORVFVQUwgICAgPSAiIT0iCit0b2tMVCAgICAgICAgPSAiPCIKK3Rva0xURSAgICAgICA9ICI8PSIKK3Rva0dUICAgICAgICA9ICI+IgordG9rR1RFICAgICAgID0gIj49IgordG9rRUxMSVBTSVMgID0gIi4uLiIKK3Rva1NQQUNFICAgICA9ICIgIgordG9rREVGSU5FRCAgID0gImRlZmluZWQiCit0b2tMUEFSRU4gICAgPSAiKCIKK3Rva1JQQVJFTiAgICA9ICIpIgordG9rTk9UICAgICAgID0gIiEiCit0b2tQTFVTICAgICAgPSAiKyIKK3Rva01JTlVTICAgICA9ICItIgordG9rTVVMVElQTFkgID0gIioiCit0b2tESVZJREUgICAgPSAiLyIKK3Rva01PRFVMVVMgICA9ICIlIgordG9rQklOQU5EICAgID0gIiYiCit0b2tCSU5PUiAgICAgPSAifCIKK3Rva0JJTlhPUiAgICA9ICJeIgordG9rQ09NTUEgICAgID0gIiwiCit0b2tMQlJBQ0UgICAgPSAieyIKK3Rva1JCUkFDRSAgICA9ICJ9IgordG9rQVJST1cgICAgID0gIi0+IgordG9rSU5DUkVNRU5UID0gIisrIgordG9rREVDUkVNRU5UID0gIi0tIgordG9rTlVNQkVSICAgID0gIjxudW1iZXI+IgordG9rSURFTlQgICAgID0gIjxpZGVudD4iCit0b2tTVFJJTkcgICAgPSAiPHN0cmluZz4iCisKK2NsYXNzIFRva2VuOgorICAgICIiImEgc2ltcGxlIGNsYXNzIHRvIGhvbGQgaW5mb3JtYXRpb24gYWJvdXQgYSBnaXZlbiB0b2tlbi4KKyAgICAgICBlYWNoIHRva2VuIGhhcyBhIHBvc2l0aW9uIGluIHRoZSBzb3VyY2UgY29kZSwgYXMgd2VsbCBhcworICAgICAgIGFuICdpZCcgYW5kIGEgJ3ZhbHVlJy4gdGhlIGlkIGlzIGEgc3RyaW5nIHRoYXQgaWRlbnRpZmllcworICAgICAgIHRoZSB0b2tlbidzIGNsYXNzLCB3aGlsZSB0aGUgdmFsdWUgaXMgdGhlIHN0cmluZyBvZiB0aGUKKyAgICAgICBvcmlnaW5hbCB0b2tlbiBpdHNlbGYuCisKKyAgICAgICBmb3IgZXhhbXBsZSwgdGhlIHRva2VuaXplciBjb25jYXRlbmF0ZXMgYSBzZXJpZXMgb2Ygc3BhY2VzCisgICAgICAgYW5kIHRhYnMgYXMgYSBzaW5nbGUgdG9rU1BBQ0UgaWQsIHdob3NlIHZhbHVlIGlmIHRoZSBvcmlnaW5hbAorICAgICAgIHNwYWNlcyt0YWJzIHNlcXVlbmNlLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmlkICAgICA9IE5vbmUKKyAgICAgICAgc2VsZi52YWx1ZSAgPSBOb25lCisgICAgICAgIHNlbGYubGluZW5vID0gMAorICAgICAgICBzZWxmLmNvbG5vICA9IDAKKworICAgIGRlZiBzZXQoc2VsZixpZCx2YWw9Tm9uZSk6CisgICAgICAgIHNlbGYuaWQgPSBpZAorICAgICAgICBpZiB2YWw6CisgICAgICAgICAgICBzZWxmLnZhbHVlID0gdmFsCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnZhbHVlID0gaWQKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBjb3B5RnJvbShzZWxmLHNyYyk6CisgICAgICAgIHNlbGYuaWQgICAgID0gc3JjLmlkCisgICAgICAgIHNlbGYudmFsdWUgID0gc3JjLnZhbHVlCisgICAgICAgIHNlbGYubGluZW5vID0gc3JjLmxpbmVubworICAgICAgICBzZWxmLmNvbG5vICA9IHNyYy5jb2xubworCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmlkID09IHRva0lERU5UOgorICAgICAgICAgICAgcmV0dXJuICIoaWRlbnQgJXMpIiAlIHNlbGYudmFsdWUKKyAgICAgICAgaWYgc2VsZi5pZCA9PSB0b2tOVU1CRVI6CisgICAgICAgICAgICByZXR1cm4gIihudW1iZXIgJXMpIiAlIHNlbGYudmFsdWUKKyAgICAgICAgaWYgc2VsZi5pZCA9PSB0b2tTVFJJTkc6CisgICAgICAgICAgICByZXR1cm4gIihzdHJpbmcgJyVzJykiICUgc2VsZi52YWx1ZQorICAgICAgICBpZiBzZWxmLmlkID09IHRva0xOOgorICAgICAgICAgICAgcmV0dXJuICI8TE4+IgorICAgICAgICBpZiBzZWxmLmlkID09IHRva0VPRjoKKyAgICAgICAgICAgIHJldHVybiAiPEVPRj4iCisgICAgICAgIGlmIHNlbGYuaWQgPT0gdG9rU1BBQ0UgYW5kIHNlbGYudmFsdWUgPT0gIlxcIjoKKyAgICAgICAgICAgICMgdGhpcyBjb3JyZXNwb25kcyB0byBhIHRyYWlsaW5nIFwgdGhhdCB3YXMgdHJhbnNmb3JtZWQgaW50byBhIHRva1NQQUNFCisgICAgICAgICAgICByZXR1cm4gIjxcXD4iCisKKyAgICAgICAgcmV0dXJuIHNlbGYuaWQKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmlkID09IHRva0lERU5UOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUKKyAgICAgICAgaWYgc2VsZi5pZCA9PSB0b2tOVU1CRVI6CisgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZQorICAgICAgICBpZiBzZWxmLmlkID09IHRva1NUUklORzoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlCisgICAgICAgIGlmIHNlbGYuaWQgPT0gdG9rRU9GOgorICAgICAgICAgICAgcmV0dXJuICI8RU9GPiIKKyAgICAgICAgaWYgc2VsZi5pZCA9PSB0b2tTUEFDRToKKyAgICAgICAgICAgIGlmIHNlbGYudmFsdWUgPT0gIlxcIjogICMgdHJhaWxpbmcgXAorICAgICAgICAgICAgICAgIHJldHVybiAiXFxcbiIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUKKworICAgICAgICByZXR1cm4gc2VsZi5pZAorCitjbGFzcyBCYWRFeHBlY3RlZFRva2VuKEV4Y2VwdGlvbik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsbXNnKToKKyAgICAgICAgcHJpbnQgbXNnCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMKKyMjIyMjICAgICAgICAgIEMgUCBQICAgVCBPIEsgRSBOICAgQyBVIFIgUyBPIFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMKKyMjIyMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworY2xhc3MgVG9rZW5DdXJzb3I6CisgICAgIiIiYSBzbWFsbCBjbGFzcyB0byBpdGVyYXRlIG92ZXIgYSBsaXN0IG9mIFRva2VuIG9iamVjdHMiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZix0b2tlbnMpOgorICAgICAgICBzZWxmLnRva2VucyA9IHRva2VucworICAgICAgICBzZWxmLm4gICAgICA9IDAKKyAgICAgICAgc2VsZi5jb3VudCAgPSBsZW4odG9rZW5zKQorCisgICAgZGVmIHNldChzZWxmLG4pOgorICAgICAgICAiIiJzZXQgdGhlIGN1cnJlbnQgcG9zaXRpb24iIiIKKyAgICAgICAgaWYgbiA8IDA6CisgICAgICAgICAgICBuID0gMAorICAgICAgICBpZiBuID4gc2VsZi5jb3VudDoKKyAgICAgICAgICAgIG4gPSBzZWxmLmNvdW50CisgICAgICAgIHNlbGYubiA9IG4KKworICAgIGRlZiBwZWVrSWQoc2VsZik6CisgICAgICAgICIiInJldHJpZXZlIHRoZSBpZCBvZiB0aGUgY3VycmVudCB0b2tlbiIiIgorICAgICAgICBpZiAoc2VsZi5uID49IHNlbGYuY291bnQpOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIHNlbGYudG9rZW5zW3NlbGYubl0uaWQKKworICAgIGRlZiBwZWVrKHNlbGYpOgorICAgICAgICAiIiJyZXRyaWV2ZSB0aGUgY3VycmVudCB0b2tlbi4gZG9lcyBub3QgY2hhbmdlIHBvc2l0aW9uIiIiCisgICAgICAgIGlmIChzZWxmLm4gPj0gc2VsZi5jb3VudCk6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4gc2VsZi50b2tlbnNbc2VsZi5uXQorCisgICAgZGVmIHNraXAoc2VsZik6CisgICAgICAgICIiImluY3JlYXNlIGN1cnJlbnQgdG9rZW4gcG9zaXRpb24iIiIKKyAgICAgICAgaWYgKHNlbGYubiA8IHNlbGYuY291bnQpOgorICAgICAgICAgICAgc2VsZi5uICs9IDEKKworICAgIGRlZiBza2lwU3BhY2VzKHNlbGYpOgorICAgICAgICAiIiJza2lwIG92ZXIgYWxsIHNwYWNlIHRva2VucywgdGhpcyBpbmNsdWRlcyB0b2tTUEFDRSBhbmQgdG9rTE4iIiIKKyAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgIHRvayA9IHNlbGYucGVla0lkKCkKKyAgICAgICAgICAgIGlmIHRvayAhPSB0b2tTUEFDRSBhbmQgdG9rICE9IHRva0xOOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBzZWxmLnNraXAoKQorCisgICAgZGVmIHNraXBJZklkKHNlbGYsaWQpOgorICAgICAgICAiIiJza2lwIGFuIG9wdGlvbmFsIHRva2VuIiIiCisgICAgICAgIGlmIHNlbGYucGVla0lkKCkgPT0gaWQ6CisgICAgICAgICAgICBzZWxmLnNraXAoKQorCisgICAgZGVmIGV4cGVjdElkKHNlbGYsaWQpOgorICAgICAgICAiIiJyYWlzZSBhbiBleGNlcHRpb24gaWYgdGhlIGN1cnJlbnQgdG9rZW4gaGFzbid0IGEgZ2l2ZW4gaWQuCisgICAgICAgICAgIG90aGVyd2lzZSBza2lwIG92ZXIgaXQiIiIKKyAgICAgICAgdG9rID0gc2VsZi5wZWVrKCkKKyAgICAgICAgaWYgdG9rLmlkICE9IGlkOgorICAgICAgICAgICAgcmFpc2UgQmFkRXhwZWN0ZWRUb2tlbiwgIiVkOiVkOiAnJXMnIGV4cGVjdGVkLCByZWNlaXZlZCAnJXMnIiAlICh0b2subGluZW5vLCB0b2suY29sbm8sIGlkLCB0b2suaWQpCisgICAgICAgIHNlbGYuc2tpcCgpCisKKyAgICBkZWYgcmVtYWluKHNlbGYpOgorICAgICAgICAiIiJyZXR1cm4gdGhlIGxpc3Qgb2YgcmVtYWluaW5nIHRva2VucyIiIgorICAgICAgICByZXR1cm4gc2VsZi50b2tlbnNbc2VsZi5uOl0KKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIyMjCisjIyMjIyAgICAgICAgICAgQyBQIFAgICBUIE8gSyBFIE4gSSBaIEUgUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIyMjCisjIyMjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgbGlzdCBvZiBsb25nIHN5bWJvbHMsIGkuZS4gdGhvc2UgdGhhdCB0YWtlIG1vcmUgdGhhbiBvbmUgY2hhcmFjdGVycworY3BwTG9uZ1N5bWJvbHMgPSBbIHRva0NPTkNBVCwgdG9rTE9HSUNBTkQsIHRva0xPR0lDT1IsIHRva1NITCwgdG9rU0hSLCB0b2tFTExJUFNJUywgdG9rRVFVQUwsXAorICAgICAgICAgICAgICAgICAgIHRva05FUVVBTCwgdG9rTFRFLCB0b2tHVEUsIHRva0FSUk9XLCB0b2tJTkNSRU1FTlQsIHRva0RFQ1JFTUVOVCBdCisKK2NsYXNzIENwcFRva2VuaXplcjoKKyAgICAiIiJhbiBhYnN0cmFjdCBjbGFzcyB1c2VkIHRvIGNvbnZlcnQgc29tZSBpbnB1dCB0ZXh0IGludG8gYSBsaXN0CisgICAgICAgb2YgdG9rZW5zLiByZWFsIGltcGxlbWVudGF0aW9ucyBmb2xsb3cgYW5kIGRpZmZlciBpbiB0aGUgZm9ybWF0CisgICAgICAgb2YgdGhlIGlucHV0IHRleHQgb25seSIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAiIiJpbml0aWFsaXplIGEgbmV3IENwcFRva2VuaXplciBvYmplY3QiIiIKKyAgICAgICAgc2VsZi5lb2YgID0gRmFsc2UgICMgZW5kIG9mIGZpbGUgcmVhY2hlZCA/CisgICAgICAgIHNlbGYudGV4dCA9IE5vbmUgICAjIGNvbnRlbnQgb2YgY3VycmVudCBsaW5lLCB3aXRoIGZpbmFsIFxuIHN0cmlwcGVkCisgICAgICAgIHNlbGYubGluZSA9IDAgICAgICAjIG51bWJlciBvZiBjdXJyZW50IGxpbmUKKyAgICAgICAgc2VsZi5wb3MgID0gMCAgICAgICMgY3VycmVudCBjaGFyYWN0ZXIgcG9zaXRpb24gaW4gY3VycmVudCBsaW5lCisgICAgICAgIHNlbGYubGVuICA9IDAgICAgICAjIGxlbmd0aCBvZiBjdXJyZW50IGxpbmUgdGV4dAorICAgICAgICBzZWxmLmhlbGQgPSBUb2tlbigpCisKKyAgICBkZWYgc2V0TGluZVRleHQoc2VsZixsaW5lKToKKyAgICAgICAgIiIic2V0IHRoZSBjb250ZW50IG9mIHRoZSAobmV4dCkgY3VycmVudCBsaW5lLiBzaG91bGQgYmUgY2FsbGVkCisgICAgICAgICAgIGJ5IGZpbGxMaW5lVGV4dCgpIGluIGRlcml2ZWQgY2xhc3NlcyIiIgorICAgICAgICBzZWxmLnRleHQgPSBsaW5lCisgICAgICAgIHNlbGYubGVuICA9IGxlbihsaW5lKQorICAgICAgICBzZWxmLnBvcyAgPSAwCisKKyAgICBkZWYgZmlsbExpbmVUZXh0KHNlbGYpOgorICAgICAgICAiIiJyZWZyZXNoIHRoZSBjb250ZW50IG9mICdsaW5lJyB3aXRoIGEgbmV3IGxpbmUgb2YgaW5wdXQiIiIKKyAgICAgICAgIyB0byBiZSBvdmVycmlkZW4KKyAgICAgICAgc2VsZi5lb2YgPSBUcnVlCisKKyAgICBkZWYgbWFya1BvcyhzZWxmLHRvayk6CisgICAgICAgICIiIm1hcmsgdGhlIHBvc2l0aW9uIG9mIHRoZSBjdXJyZW50IHRva2VuIGluIHRoZSBzb3VyY2UgZmlsZSIiIgorICAgICAgICBpZiBzZWxmLmVvZiBvciBzZWxmLnBvcyA+IHNlbGYubGVuOgorICAgICAgICAgICAgdG9rLmxpbmVubyA9IHNlbGYubGluZSArIDEKKyAgICAgICAgICAgIHRvay5jb2xubyAgPSAwCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0b2subGluZW5vID0gc2VsZi5saW5lCisgICAgICAgICAgICB0b2suY29sbm8gID0gc2VsZi5wb3MKKworICAgIGRlZiBwZWVrQ2hhcihzZWxmKToKKyAgICAgICAgIiIicmV0dXJuIHRoZSBjdXJyZW50IHRva2VuIHVuZGVyIHRoZSBjdXJzb3Igd2l0aG91dCBtb3ZpbmcgaXQiIiIKKyAgICAgICAgaWYgc2VsZi5lb2Y6CisgICAgICAgICAgICByZXR1cm4gdG9rRU9GCisKKyAgICAgICAgaWYgc2VsZi5wb3MgPiBzZWxmLmxlbjoKKyAgICAgICAgICAgIHNlbGYucG9zICAgPSAwCisgICAgICAgICAgICBzZWxmLmxpbmUgKz0gMQorICAgICAgICAgICAgc2VsZi5maWxsTGluZVRleHQoKQorICAgICAgICAgICAgaWYgc2VsZi5lb2Y6CisgICAgICAgICAgICAgICAgcmV0dXJuIHRva0VPRgorCisgICAgICAgIGlmIHNlbGYucG9zID09IHNlbGYubGVuOgorICAgICAgICAgICAgcmV0dXJuIHRva0xOCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi50ZXh0W3NlbGYucG9zXQorCisgICAgZGVmIHBlZWtOQ2hhcihzZWxmLG4pOgorICAgICAgICAiIiJ0cnkgdG8gcGVlayB0aGUgbmV4dCBuIGNoYXJzIG9uIHRoZSBzYW1lIGxpbmUiIiIKKyAgICAgICAgaWYgc2VsZi5wb3MgKyBuID4gc2VsZi5sZW46CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4gc2VsZi50ZXh0W3NlbGYucG9zOnNlbGYucG9zK25dCisKKyAgICBkZWYgc2tpcENoYXIoc2VsZik6CisgICAgICAgICIiImluY3JlbWVudCB0aGUgdG9rZW4gY3Vyc29yIHBvc2l0aW9uIiIiCisgICAgICAgIGlmIG5vdCBzZWxmLmVvZjoKKyAgICAgICAgICAgIHNlbGYucG9zICs9IDEKKworICAgIGRlZiBza2lwTkNoYXJzKHNlbGYsbik6CisgICAgICAgIGlmIHNlbGYucG9zICsgbiA8PSBzZWxmLmxlbjoKKyAgICAgICAgICAgIHNlbGYucG9zICs9IG4KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHdoaWxlIG4gPiAwOgorICAgICAgICAgICAgICAgIHNlbGYuc2tpcENoYXIoKQorICAgICAgICAgICAgICAgIG4gLT0gMQorCisgICAgZGVmIG5leHRDaGFyKHNlbGYpOgorICAgICAgICAiIiJyZXRyaWV2ZSB0aGUgdG9rZW4gYXQgdGhlIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uLCB0aGVuIHNraXAgaXQiIiIKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5wZWVrQ2hhcigpCisgICAgICAgIHNlbGYuc2tpcENoYXIoKQorICAgICAgICByZXR1cm4gIHJlc3VsdAorCisgICAgZGVmIGdldEVzY2FwZShzZWxmKToKKyAgICAgICAgIyB0cnkgdG8gZ2V0IGFsbCBjaGFyYWN0ZXJzIGFmdGVyIGEgYmFja3NsYXNoIChcKQorICAgICAgICByZXN1bHQgPSBzZWxmLm5leHRDaGFyKCkKKyAgICAgICAgaWYgcmVzdWx0ID09ICIwIjoKKyAgICAgICAgICAgICMgb2N0YWwgbnVtYmVyID8KKyAgICAgICAgICAgIG51bSA9IHNlbGYucGVla05DaGFyKDMpCisgICAgICAgICAgICBpZiBudW0gIT0gTm9uZToKKyAgICAgICAgICAgICAgICBpc09jdGFsID0gVHJ1ZQorICAgICAgICAgICAgICAgIGZvciBkIGluIG51bToKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGQgaW4gIjAxMjM0NTY3IjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzT2N0YWwgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBpZiBpc09jdGFsOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gbnVtCisgICAgICAgICAgICAgICAgICAgIHNlbGYuc2tpcE5DaGFycygzKQorICAgICAgICBlbGlmIHJlc3VsdCA9PSAieCIgb3IgcmVzdWx0ID09ICJYIjoKKyAgICAgICAgICAgICMgaGV4IG51bWJlciA/CisgICAgICAgICAgICBudW0gPSBzZWxmLnBlZWtOQ2hhcigyKQorICAgICAgICAgICAgaWYgbnVtICE9IE5vbmU6CisgICAgICAgICAgICAgICAgaXNIZXggPSBUcnVlCisgICAgICAgICAgICAgICAgZm9yIGQgaW4gbnVtOgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgZCBpbiAiMDEyMzQ1Njc4YWJjZGVmQUJDREVGIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzSGV4ID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgaWYgaXNIZXg6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBudW0KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5za2lwTkNoYXJzKDIpCisgICAgICAgIGVsaWYgcmVzdWx0ID09ICJ1IiBvciByZXN1bHQgPT0gIlUiOgorICAgICAgICAgICAgIyB1bmljb2RlIGNoYXIgPworICAgICAgICAgICAgbnVtID0gc2VsZi5wZWVrTkNoYXIoNCkKKyAgICAgICAgICAgIGlmIG51bSAhPSBOb25lOgorICAgICAgICAgICAgICAgIGlzSGV4ID0gVHJ1ZQorICAgICAgICAgICAgICAgIGZvciBkIGluIG51bToKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGQgaW4gIjAxMjM0NTY3OGFiY2RlZkFCQ0RFRiI6CisgICAgICAgICAgICAgICAgICAgICAgICBpc0hleCA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGlmIGlzSGV4OgorICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gbnVtCisgICAgICAgICAgICAgICAgICAgIHNlbGYuc2tpcE5DaGFycyg0KQorCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBuZXh0UmVhbFRva2VuKHNlbGYsdG9rKToKKyAgICAgICAgIiIicmV0dXJuIG5leHQgQ1BQIHRva2VuLCB1c2VkIGludGVybmFsbHkgYnkgbmV4dFRva2VuKCkiIiIKKyAgICAgICAgYyA9IHNlbGYubmV4dENoYXIoKQorICAgICAgICBpZiBjID09IHRva0VPRiBvciBjID09IHRva0xOOgorICAgICAgICAgICAgcmV0dXJuIHRvay5zZXQoYykKKworICAgICAgICBpZiBjID09ICcvJzoKKyAgICAgICAgICAgIGMgPSBzZWxmLnBlZWtDaGFyKCkKKyAgICAgICAgICAgIGlmIGMgPT0gJy8nOiAgICMgQysrIGNvbW1lbnQgbGluZQorICAgICAgICAgICAgICAgIHNlbGYuc2tpcENoYXIoKQorICAgICAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgICAgIGMgPSBzZWxmLm5leHRDaGFyKCkKKyAgICAgICAgICAgICAgICAgICAgaWYgYyA9PSB0b2tFT0Ygb3IgYyA9PSB0b2tMTjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgcmV0dXJuIHRvay5zZXQodG9rTE4pCisgICAgICAgICAgICBpZiBjID09ICcqJzogICAjIEMgY29tbWVudCBzdGFydAorICAgICAgICAgICAgICAgIHNlbGYuc2tpcENoYXIoKQorICAgICAgICAgICAgICAgIHZhbHVlID0gIi8qIgorICAgICAgICAgICAgICAgIHByZXZfYyA9IE5vbmUKKyAgICAgICAgICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgICAgICAgICBjID0gc2VsZi5uZXh0Q2hhcigpCisgICAgICAgICAgICAgICAgICAgIGlmIGMgPT0gdG9rRU9GOgorICAgICAgICAgICAgICAgICAgICAgICAgI3ByaW50ICIjIyBFT0YgYWZ0ZXIgJyVzJyIgJSB2YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvay5zZXQodG9rRU9GLHZhbHVlKQorICAgICAgICAgICAgICAgICAgICBpZiBjID09ICcvJyBhbmQgcHJldl9jID09ICcqJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIHByZXZfYyA9IGMKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gYworCisgICAgICAgICAgICAgICAgdmFsdWUgKz0gIi8iCisgICAgICAgICAgICAgICAgI3ByaW50ICIjIyBDT01NRU5UOiAnJXMnIiAlIHZhbHVlCisgICAgICAgICAgICAgICAgcmV0dXJuIHRvay5zZXQodG9rU1BBQ0UsdmFsdWUpCisgICAgICAgICAgICBjID0gJy8nCisKKyAgICAgICAgaWYgYy5pc3NwYWNlKCk6CisgICAgICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgICAgIGMyID0gc2VsZi5wZWVrQ2hhcigpCisgICAgICAgICAgICAgICAgaWYgYzIgPT0gdG9rTE4gb3Igbm90IGMyLmlzc3BhY2UoKToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBjICs9IGMyCisgICAgICAgICAgICAgICAgc2VsZi5za2lwQ2hhcigpCisgICAgICAgICAgICByZXR1cm4gdG9rLnNldCh0b2tTUEFDRSxjKQorCisgICAgICAgIGlmIGMgPT0gJ1xcJzoKKyAgICAgICAgICAgIGlmIGRlYnVnVG9rZW5zOgorICAgICAgICAgICAgICAgIHByaW50ICJuZXh0UmVhbFRva2VuOiBcXCBmb3VuZCwgbmV4dCB0b2tlbiBpcyAnJXMnIiAlIHJlcHIoc2VsZi5wZWVrQ2hhcigpKQorICAgICAgICAgICAgaWYgc2VsZi5wZWVrQ2hhcigpID09IHRva0xOOiAgICMgdHJhaWxpbmcgXAorICAgICAgICAgICAgICAgICMgZWF0IHRoZSB0b2tMTgorICAgICAgICAgICAgICAgIHNlbGYuc2tpcENoYXIoKQorICAgICAgICAgICAgICAgICMgd2UgcmVwbGFjZSBhIHRyYWlsaW5nIFwgYnkgYSB0b2tTUEFDRSB3aG9zZSB2YWx1ZSBpcworICAgICAgICAgICAgICAgICMgc2ltcGx5ICJcXCIuIHRoaXMgYWxsb3dzIHVzIHRvIGRldGVjdCB0aGVtIGxhdGVyIHdoZW4KKyAgICAgICAgICAgICAgICAjIG5lZWRlZC4KKyAgICAgICAgICAgICAgICByZXR1cm4gdG9rLnNldCh0b2tTUEFDRSwiXFwiKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIHRyZWF0IGFzIGEgc2luZ2xlIHRva2VuIGhlcmUgPworICAgICAgICAgICAgICAgIGMgKz1zZWxmLmdldEVzY2FwZSgpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRvay5zZXQoYykKKworICAgICAgICBpZiBjID09ICInIjogICMgY2hhcnMKKyAgICAgICAgICAgIGMyID0gc2VsZi5uZXh0Q2hhcigpCisgICAgICAgICAgICBjICs9IGMyCisgICAgICAgICAgICBpZiBjMiA9PSAnXFwnOgorICAgICAgICAgICAgICAgIGMgKz0gc2VsZi5nZXRFc2NhcGUoKQorCisgICAgICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgICAgIGMyID0gc2VsZi5uZXh0Q2hhcigpCisgICAgICAgICAgICAgICAgaWYgYzIgPT0gdG9rRU9GOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGMgKz0gYzIKKyAgICAgICAgICAgICAgICBpZiBjMiA9PSAiJyI6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgIHJldHVybiB0b2suc2V0KHRva1NUUklORywgYykKKworICAgICAgICBpZiBjID09ICciJzogICMgc3RyaW5ncworICAgICAgICAgICAgcXVvdGUgPSAwCisgICAgICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgICAgIGMyICA9IHNlbGYubmV4dENoYXIoKQorICAgICAgICAgICAgICAgIGlmIGMyID09IHRva0VPRjoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvay5zZXQodG9rU1RSSU5HLGMpCisKKyAgICAgICAgICAgICAgICBjICs9IGMyCisgICAgICAgICAgICAgICAgaWYgbm90IHF1b3RlOgorICAgICAgICAgICAgICAgICAgICBpZiBjMiA9PSAnIic6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rLnNldCh0b2tTVFJJTkcsYykKKyAgICAgICAgICAgICAgICAgICAgaWYgYzIgPT0gIlxcIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHF1b3RlID0gMQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHF1b3RlID0gMAorCisgICAgICAgIGlmIGMgPj0gIjAiIGFuZCBjIDw9ICI5IjogICMgaW50ZWdlcnMgPworICAgICAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgICAgICBjMiA9IHNlbGYucGVla0NoYXIoKQorICAgICAgICAgICAgICAgIGlmIGMyID09IHRva0xOIG9yIChub3QgYzIuaXNhbG51bSgpIGFuZCBjMiAhPSAiXyIpOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGMgKz0gYzIKKyAgICAgICAgICAgICAgICBzZWxmLnNraXBDaGFyKCkKKyAgICAgICAgICAgIHJldHVybiB0b2suc2V0KHRva05VTUJFUixjKQorCisgICAgICAgIGlmIGMuaXNhbG51bSgpIG9yIGMgPT0gIl8iOiAgIyBpZGVudGlmaWVycyA/CisgICAgICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgICAgIGMyID0gc2VsZi5wZWVrQ2hhcigpCisgICAgICAgICAgICAgICAgaWYgYzIgPT0gdG9rTE4gb3IgKG5vdCBjMi5pc2FsbnVtKCkgYW5kIGMyICE9ICJfIik6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgYyArPSBjMgorICAgICAgICAgICAgICAgIHNlbGYuc2tpcENoYXIoKQorICAgICAgICAgICAgaWYgYyA9PSB0b2tERUZJTkVEOgorICAgICAgICAgICAgICAgIHJldHVybiB0b2suc2V0KHRva0RFRklORUQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiB0b2suc2V0KHRva0lERU5ULGMpCisKKyAgICAgICAgIyBjaGVjayBzcGVjaWFsIHN5bWJvbHMKKyAgICAgICAgZm9yIHNrIGluIGNwcExvbmdTeW1ib2xzOgorICAgICAgICAgICAgaWYgYyA9PSBza1swXToKKyAgICAgICAgICAgICAgICBza2xlbiA9IGxlbihza1sxOl0pCisgICAgICAgICAgICAgICAgaWYgc2VsZi5wb3MgKyBza2xlbiA8PSBzZWxmLmxlbiBhbmQgXAorICAgICAgICAgICAgICAgICAgIHNlbGYudGV4dFtzZWxmLnBvczpzZWxmLnBvcytza2xlbl0gPT0gc2tbMTpdOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnBvcyArPSBza2xlbgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rLnNldChzaykKKworICAgICAgICByZXR1cm4gdG9rLnNldChjKQorCisgICAgZGVmIG5leHRUb2tlbihzZWxmLHRvayk6CisgICAgICAgICIiInJldHVybiB0aGUgbmV4dCB0b2tlbiBmcm9tIHRoZSBpbnB1dCB0ZXh0LiB0aGlzIGZ1bmN0aW9uCisgICAgICAgICAgIHJlYWxseSB1cGRhdGVzICd0b2snLCBhbmQgZG9lcyBub3QgcmV0dXJuIGEgbmV3IG9uZSIiIgorICAgICAgICBzZWxmLm1hcmtQb3ModG9rKQorICAgICAgICBzZWxmLm5leHRSZWFsVG9rZW4odG9rKQorCisgICAgZGVmIGdldFRva2VuKHNlbGYpOgorICAgICAgICB0b2sgPSBUb2tlbigpCisgICAgICAgIHNlbGYubmV4dFRva2VuKHRvaykKKyAgICAgICAgaWYgZGVidWdUb2tlbnM6CisgICAgICAgICAgICBwcmludCAiZ2V0VG9rZW5zOiAlcyIgJSByZXByKHRvaykKKyAgICAgICAgcmV0dXJuIHRvaworCisgICAgZGVmIHRvVG9rZW5MaXN0KHNlbGYpOgorICAgICAgICAiIiJjb252ZXJ0IHRoZSBpbnB1dCB0ZXh0IG9mIGEgQ3BwVG9rZW5pemVyIGludG8gYSBkaXJlY3QKKyAgICAgICAgICAgbGlzdCBvZiB0b2tlbiBvYmplY3RzLiB0b2tFT0YgaXMgc3RyaXBwZWQgZnJvbSB0aGUgcmVzdWx0IiIiCisgICAgICAgIHJlc3VsdCA9IFtdCisgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICB0b2sgPSBUb2tlbigpCisgICAgICAgICAgICBzZWxmLm5leHRUb2tlbih0b2spCisgICAgICAgICAgICBpZiB0b2suaWQgPT0gdG9rRU9GOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHRvaykKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCitjbGFzcyBDcHBMaW5lVG9rZW5pemVyKENwcFRva2VuaXplcik6CisgICAgIiIiYSBDcHBUb2tlbml6ZXIgZGVyaXZlZCBjbGFzcyB0aGF0IGFjY2VwdHMgYSBzaW5nbGUgbGluZSBvZiB0ZXh0IGFzIGlucHV0IiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsbGluZSxsaW5lbm89MSk6CisgICAgICAgIENwcFRva2VuaXplci5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLmxpbmUgPSBsaW5lbm8KKyAgICAgICAgc2VsZi5zZXRMaW5lVGV4dChsaW5lKQorCisKK2NsYXNzIENwcExpbmVzVG9rZW5pemVyKENwcFRva2VuaXplcik6CisgICAgIiIiYSBDcHBUb2tlbml6ZXIgZGVyaXZlZCBjbGFzcyB0aGF0IGFjY2VwdHMgYSBsaXN0IG9mIHRleGR0IGxpbmVzIGFzIGlucHV0LgorICAgICAgIHRoZSBsaW5lcyBtdXN0IG5vdCBoYXZlIGEgdHJhaWxpbmcgXG4iIiIKKyAgICBkZWYgX19pbml0X18oc2VsZixsaW5lcz1bXSxsaW5lbm89MSk6CisgICAgICAgICIiImluaXRpYWxpemUgYSBDcHBMaW5lc1Rva2VuaXplci4geW91IGNhbiBsYXRlciBhZGQgbGluZXMgdXNpbmcgYWRkTGluZXMoKSIiIgorICAgICAgICBDcHBUb2tlbml6ZXIuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5saW5lICA9IGxpbmVubworICAgICAgICBzZWxmLmxpbmVzID0gbGluZXMKKyAgICAgICAgc2VsZi5pbmRleCA9IDAKKyAgICAgICAgc2VsZi5jb3VudCA9IGxlbihsaW5lcykKKworICAgICAgICBpZiBzZWxmLmNvdW50ID4gMDoKKyAgICAgICAgICAgIHNlbGYuZmlsbExpbmVUZXh0KCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZW9mID0gVHJ1ZQorCisgICAgZGVmIGFkZExpbmUoc2VsZixsaW5lKToKKyAgICAgICAgIiIiYWRkIGEgbGluZSB0byBhIENwcExpbmVzVG9rZW5pemVyLiB0aGlzIGNhbiBiZSBkb25lIGFmdGVyIHRva2VuaXphdGlvbgorICAgICAgICAgICBoYXBwZW5zIiIiCisgICAgICAgIGlmIHNlbGYuY291bnQgPT0gMDoKKyAgICAgICAgICAgIHNlbGYuc2V0TGluZVRleHQobGluZSkKKyAgICAgICAgICAgIHNlbGYuaW5kZXggPSAxCisgICAgICAgIHNlbGYubGluZXMuYXBwZW5kKGxpbmUpCisgICAgICAgIHNlbGYuY291bnQgKz0gMQorICAgICAgICBzZWxmLmVvZiAgICA9IEZhbHNlCisKKyAgICBkZWYgZmlsbExpbmVUZXh0KHNlbGYpOgorICAgICAgICBpZiBzZWxmLmluZGV4IDwgc2VsZi5jb3VudDoKKyAgICAgICAgICAgIHNlbGYuc2V0TGluZVRleHQoc2VsZi5saW5lc1tzZWxmLmluZGV4XSkKKyAgICAgICAgICAgIHNlbGYuaW5kZXggKz0gMQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5lb2YgPSBUcnVlCisKKworY2xhc3MgQ3BwRmlsZVRva2VuaXplcihDcHBUb2tlbml6ZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLGZpbGUsbGluZW5vPTEpOgorICAgICAgICBDcHBUb2tlbml6ZXIuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5maWxlID0gZmlsZQorICAgICAgICBzZWxmLmxpbmUgPSBsaW5lbm8KKworICAgIGRlZiBmaWxsTGluZVRleHQoc2VsZik6CisgICAgICAgIGxpbmUgPSBzZWxmLmZpbGUucmVhZGxpbmUoKQorICAgICAgICBpZiBsZW4obGluZSkgPiAwOgorICAgICAgICAgICAgaWYgbGluZVstMV0gPT0gJ1xuJzoKKyAgICAgICAgICAgICAgICBsaW5lID0gbGluZVs6LTFdCisgICAgICAgICAgICBpZiBsZW4obGluZSkgPiAwIGFuZCBsaW5lWy0xXSA9PSAiXHIiOgorICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lWzotMV0KKyAgICAgICAgICAgIHNlbGYuc2V0TGluZVRleHQobGluZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZW9mID0gVHJ1ZQorCisjIFVuaXQgdGVzdGluZworIworY2xhc3MgQ3BwVG9rZW5pemVyVGVzdGVyOgorICAgICIiImEgY2xhc3MgdXNlZCB0byB0ZXN0IENwcFRva2VuaXplciBjbGFzc2VzIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsdG9rZW5pemVyPU5vbmUpOgorICAgICAgICBzZWxmLnRva2VuaXplciA9IHRva2VuaXplcgorICAgICAgICBzZWxmLnRva2VuICAgICA9IFRva2VuKCkKKworICAgIGRlZiBzZXRUb2tlbml6ZXIoc2VsZix0b2tlbml6ZXIpOgorICAgICAgICBzZWxmLnRva2VuaXplciA9IHRva2VuaXplcgorCisgICAgZGVmIGV4cGVjdChzZWxmLGlkKToKKyAgICAgICAgc2VsZi50b2tlbml6ZXIubmV4dFRva2VuKHNlbGYudG9rZW4pCisgICAgICAgIHRva2lkID0gc2VsZi50b2tlbi5pZAorICAgICAgICBpZiB0b2tpZCA9PSBpZDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBzZWxmLnRva2VuLnZhbHVlID09IGlkIGFuZCAodG9raWQgPT0gdG9rSURFTlQgb3IgdG9raWQgPT0gdG9rTlVNQkVSKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICByYWlzZSBCYWRFeHBlY3RlZFRva2VuLCAiIyMjICBCQUQgVE9LRU46ICclcycgZXhwZWN0aW5nICclcyciICUgKHNlbGYudG9rZW4uaWQsaWQpCisKKyAgICBkZWYgZXhwZWN0VG9rZW4oc2VsZixpZCxsaW5lLGNvbCk6CisgICAgICAgIHNlbGYuZXhwZWN0KGlkKQorICAgICAgICBpZiBzZWxmLnRva2VuLmxpbmVubyAhPSBsaW5lOgorICAgICAgICAgICAgcmFpc2UgQmFkRXhwZWN0ZWRUb2tlbiwgIiMjIyAgQkFEIExJTkVOTzogdG9rZW4gJyVzJyBnb3QgJyVkJyBleHBlY3RpbmcgJyVkJyIgJSAoaWQsc2VsZi50b2tlbi5saW5lbm8sbGluZSkKKyAgICAgICAgaWYgc2VsZi50b2tlbi5jb2xubyAhPSBjb2w6CisgICAgICAgICAgICByYWlzZSBCYWRFeHBlY3RlZFRva2VuLCAiIyMjICBCQUQgQ09MTk86ICclZCcgZXhwZWN0aW5nICclZCciICUgKHNlbGYudG9rZW4uY29sbm8sY29sKQorCisgICAgZGVmIGV4cGVjdFRva2VuVmFsKHNlbGYsaWQsdmFsdWUsbGluZSxjb2wpOgorICAgICAgICBzZWxmLmV4cGVjdFRva2VuKGlkLGxpbmUsY29sKQorICAgICAgICBpZiBzZWxmLnRva2VuLnZhbHVlICE9IHZhbHVlOgorICAgICAgICAgICAgcmFpc2UgQmFkRXhwZWN0ZWRUb2tlbiwgIiMjIyAgQkFEIFZBTFVFOiAnJXMnIGV4cGVjdGluZyAnJXMnIiAlIChzZWxmLnRva2VuLnZhbHVlLHZhbHVlKQorCisgICAgZGVmIGV4cGVjdExpc3Qoc2VsZixsaXN0KToKKyAgICAgICAgZm9yIGl0ZW0gaW4gbGlzdDoKKyAgICAgICAgICAgIHNlbGYuZXhwZWN0KGl0ZW0pCisKK2RlZiB0ZXN0X0NwcFRva2VuaXplcigpOgorICAgIHByaW50ICJydW5uaW5nIENwcFRva2VuaXplciB0ZXN0cyIKKyAgICB0ZXN0ZXIgPSBDcHBUb2tlbml6ZXJUZXN0ZXIoKQorCisgICAgdGVzdGVyLnNldFRva2VuaXplciggQ3BwTGluZVRva2VuaXplcigiI2FuL2V4YW1wbGUgICYmICgwMTkyM194eSkiKSApCisgICAgdGVzdGVyLmV4cGVjdExpc3QoIFsiIyIsICJhbiIsICIvIiwgImV4YW1wbGUiLCB0b2tTUEFDRSwgdG9rTE9HSUNBTkQsIHRva1NQQUNFLCB0b2tMUEFSRU4sICIwMTkyM194eSIsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgdG9rUlBBUkVOLCB0b2tMTiwgdG9rRU9GXSApCisKKyAgICB0ZXN0ZXIuc2V0VG9rZW5pemVyKCBDcHBMaW5lVG9rZW5pemVyKCJGT08oQkFSKSAmJiBkZWZpbmVkKEJBWikiKSApCisgICAgdGVzdGVyLmV4cGVjdExpc3QoIFsiRk9PIiwgdG9rTFBBUkVOLCAiQkFSIiwgdG9rUlBBUkVOLCB0b2tTUEFDRSwgdG9rTE9HSUNBTkQsIHRva1NQQUNFLAorICAgICAgICAgICAgICAgICAgICAgICAgdG9rREVGSU5FRCwgdG9rTFBBUkVOLCAiQkFaIiwgdG9rUlBBUkVOLCB0b2tMTiwgdG9rRU9GXSApCisKKyAgICB0ZXN0ZXIuc2V0VG9rZW5pemVyKCBDcHBMaW5lc1Rva2VuaXplciggWyIvKiIsICIjIiwgIiovIl0gKSApCisgICAgdGVzdGVyLmV4cGVjdExpc3QoIFsgdG9rU1BBQ0UsIHRva0xOLCB0b2tFT0YgXSApCisKKyAgICB0ZXN0ZXIuc2V0VG9rZW5pemVyKCBDcHBMaW5lc1Rva2VuaXplciggWyJmaXJzdCIsICJzZWNvbmQiXSApICkKKyAgICB0ZXN0ZXIuZXhwZWN0TGlzdCggWyAiZmlyc3QiLCB0b2tMTiwgInNlY29uZCIsIHRva0xOLCB0b2tFT0YgXSApCisKKyAgICB0ZXN0ZXIuc2V0VG9rZW5pemVyKCBDcHBMaW5lc1Rva2VuaXplciggWyJmaXJzdCBzZWNvbmQiLCAiICB0aGlyZCJdICkgKQorICAgIHRlc3Rlci5leHBlY3RUb2tlbiggImZpcnN0IiwgMSwgMCApCisgICAgdGVzdGVyLmV4cGVjdFRva2VuKCB0b2tTUEFDRSwgMSwgNSApCisgICAgdGVzdGVyLmV4cGVjdFRva2VuKCAic2Vjb25kIiwgMSwgNiApCisgICAgdGVzdGVyLmV4cGVjdFRva2VuKCB0b2tMTiwgMSwgMTIgKQorICAgIHRlc3Rlci5leHBlY3RUb2tlbiggdG9rU1BBQ0UsIDIsIDAgKQorICAgIHRlc3Rlci5leHBlY3RUb2tlbiggInRoaXJkIiwgMiwgMiApCisKKyAgICB0ZXN0ZXIuc2V0VG9rZW5pemVyKCBDcHBMaW5lc1Rva2VuaXplciggWyAiYm9vIC8qIHdoYXQgdGhlIiwgImhlbGwgKi8iIF0gKSApCisgICAgdGVzdGVyLmV4cGVjdExpc3QoIFsgImJvbyIsIHRva1NQQUNFIF0gKQorICAgIHRlc3Rlci5leHBlY3RUb2tlblZhbCggdG9rU1BBQ0UsICIvKiB3aGF0IHRoZVxuaGVsbCAqLyIsIDEsIDQgKQorICAgIHRlc3Rlci5leHBlY3RMaXN0KCBbIHRva0xOLCB0b2tFT0YgXSApCisKKyAgICB0ZXN0ZXIuc2V0VG9rZW5pemVyKCBDcHBMaW5lc1Rva2VuaXplciggWyAiYW4gXFwiLCAiIGV4YW1wbGUiIF0gKSApCisgICAgdGVzdGVyLmV4cGVjdFRva2VuKCAiYW4iLCAxLCAwICkKKyAgICB0ZXN0ZXIuZXhwZWN0VG9rZW4oIHRva1NQQUNFLCAxLCAyICkKKyAgICB0ZXN0ZXIuZXhwZWN0VG9rZW5WYWwoIHRva1NQQUNFLCAiXFwiLCAxLCAzICkKKyAgICB0ZXN0ZXIuZXhwZWN0VG9rZW4oIHRva1NQQUNFLCAyLCAwICkKKyAgICB0ZXN0ZXIuZXhwZWN0VG9rZW4oICJleGFtcGxlIiwgMiwgMSApCisgICAgdGVzdGVyLmV4cGVjdFRva2VuKCB0b2tMTiwgMiwgOCApCisKKyAgICByZXR1cm4gVHJ1ZQorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMKKyMjIyMjICAgICAgICAgICBDIFAgUCAgIEUgWCBQIFIgRSBTIFMgSSBPIE4gUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMKKyMjIyMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBDcHAgZXhwcmVzc2lvbnMgYXJlIG1vZGVsZWQgYnkgdHVwbGVzIG9mIHRoZSBmb3JtIChvcCxhcmcpIG9yIChvcCxhcmcxLGFyZzIpLCBldGMuLgorIyBvcCBpcyBhbiAib3BlcmF0b3IiIHN0cmluZworCitjbGFzcyBFeHByOgorICAgICIiImEgY2xhc3MgdXNlZCB0byBtb2RlbCBhIENQUCBleHByZXNzaW9uIiIiCisgICAgb3BJbnRlZ2VyICAgPSAiaW50IgorICAgIG9wSWRlbnQgICAgID0gImlkZW50IgorICAgIG9wQ2FsbCAgICAgID0gImNhbGwiCisgICAgb3BEZWZpbmVkICAgPSAiZGVmaW5lZCIKKyAgICBvcFRlc3QgICAgICA9ICI/IgorICAgIG9wTG9naWNOb3QgID0gIiEiCisgICAgb3BOb3QgICAgICAgPSAifiIKKyAgICBvcE5lZyAgICAgICA9ICJbLV0iCisgICAgb3BVbmFyeVBsdXMgPSAiWytdIgorICAgIG9wQWRkID0gIisiCisgICAgb3BTdWIgPSAiLSIKKyAgICBvcE11bCA9ICIqIgorICAgIG9wRGl2ID0gIi8iCisgICAgb3BNb2QgPSAiJSIKKyAgICBvcEFuZCA9ICImIgorICAgIG9wT3IgID0gInwiCisgICAgb3BYb3IgPSAiXiIKKyAgICBvcExvZ2ljQW5kID0gIiYmIgorICAgIG9wTG9naWNPciAgPSAifHwiCisgICAgb3BFcXVhbCA9ICI9PSIKKyAgICBvcE5vdEVxdWFsID0gIiE9IgorICAgIG9wTGVzcyA9ICI8IgorICAgIG9wTGVzc0VxID0gIjw9IgorICAgIG9wR3JlYXRlciA9ICI+IgorICAgIG9wR3JlYXRlckVxID0gIj49IgorICAgIG9wU2hsID0gIjw8IgorICAgIG9wU2hyID0gIj4+IgorCisgICAgdW5hcmllcyAgPSBbIG9wTG9naWNOb3QsIG9wTm90LCBvcE5lZywgb3BVbmFyeVBsdXMgXQorICAgIGJpbmFyaWVzID0gWyBvcEFkZCwgb3BTdWIsIG9wTXVsLCBvcERpdiwgb3BNb2QsIG9wQW5kLCBvcE9yLCBvcFhvciwgb3BMb2dpY0FuZCwgb3BMb2dpY09yLAorICAgICAgICAgICAgICAgICBvcEVxdWFsLCBvcE5vdEVxdWFsLCBvcExlc3MsIG9wTGVzc0VxLCBvcEdyZWF0ZXIsIG9wR3JlYXRlckVxIF0KKworICAgIHByZWNlZGVuY2VzID0geworICAgICAgICAgICAgICAgICAgICBvcFRlc3Q6IDAsCisgICAgICAgICAgICAgICAgICAgIG9wTG9naWNPcjogIDEsCisgICAgICAgICAgICAgICAgICAgIG9wTG9naWNOb3Q6IDIsCisgICAgICAgICAgICAgICAgICAgIG9wT3IgOiAzLAorICAgICAgICAgICAgICAgICAgICBvcFhvcjogNCwKKyAgICAgICAgICAgICAgICAgICAgb3BBbmQ6IDUsCisgICAgICAgICAgICAgICAgICAgIG9wRXF1YWw6IDYsIG9wTm90RXF1YWw6IDYsCisgICAgICAgICAgICAgICAgICAgIG9wTGVzczo3LCBvcExlc3NFcTo3LCBvcEdyZWF0ZXI6Nywgb3BHcmVhdGVyRXE6NywKKyAgICAgICAgICAgICAgICAgICAgb3BTaGw6OCwgb3BTaHI6OCwKKyAgICAgICAgICAgICAgICAgICAgb3BBZGQ6OSwgb3BTdWI6OSwKKyAgICAgICAgICAgICAgICAgICAgb3BNdWw6MTAsIG9wRGl2OjEwLCBvcE1vZDoxMCwKKyAgICAgICAgICAgICAgICAgICAgb3BMb2dpY05vdDoxMSwKKyAgICAgICAgICAgICAgICAgICAgb3BOb3Q6IDEyLAorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICBkZWYgX19pbml0X18oc2VsZixvcCk6CisgICAgICAgIHNlbGYub3AgPSBvcAorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIiglcykiICUgc2VsZi5vcAorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAib3BlcmF0b3IoJXMpIiAlIHNlbGYub3AKKworICAgIGRlZiBwcmVjZWRlbmNlKHNlbGYpOgorICAgICAgICAiIiJyZXR1cm4gdGhlIHByZWNlZGVuY2Ugb2YgYSBnaXZlbiBvcGVyYXRvciIiIgorICAgICAgICByZXR1cm4gRXhwci5wcmVjZWRlbmNlcy5nZXQoc2VsZi5vcCwgMTAwMCkKKworICAgIGRlZiBpc1VuYXJ5KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5vcCBpbiBFeHByLnVuYXJpZXMKKworICAgIGRlZiBpc0JpbmFyeShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYub3AgaW4gRXhwci5iaW5hcmllcworCisgICAgZGVmIGlzRGVmaW5lZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYub3AgaXMgb3BEZWZpbmVkCisKKyAgICBkZWYgdG9JbnQoc2VsZik6CisgICAgICAgICIiInJldHVybiB0aGUgaW50ZWdlciB2YWx1ZSBvZiBhIGdpdmVuIGV4cHJlc3Npb24uIG9ubHkgdmFsaWQgZm9yIGludGVnZXIgZXhwcmVzc2lvbnMKKyAgICAgICAgICAgd2lsbCByZXR1cm4gTm9uZSBvdGhlcndpc2UiIiIKKyAgICAgICAgcmV0dXJuIE5vbmUKKworY2xhc3MgSW50RXhwcihFeHByKToKKyAgICBkZWYgX19pbml0X18oc2VsZix2YWx1ZSk6CisgICAgICAgIEV4cHIuX19pbml0X18oc2VsZixvcEludGVnZXIpCisgICAgICAgIHNlbGYuYXJnICAgPSB2YWx1ZQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIihpbnQgJXMpIiAlIHNlbGYuYXJnCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuYXJnCisKKyAgICBkZWYgdG9JbnQoc2VsZik6CisgICAgICAgIHMgPSBzZWxmLmFyZyAgIyBzdHJpbmcgdmFsdWUKKyAgICAgICAgIyBnZXQgcmlkIG9mIFUgb3IgTCBzdWZmaXhlcworICAgICAgICB3aGlsZSBsZW4ocykgPiAwIGFuZCBzWy0xXSBpbiAiTFVsdSI6CisgICAgICAgICAgICBzID0gc1s6LTFdCisgICAgICAgIHJldHVybiBzdHJpbmcuYXRvaShzKQorCitjbGFzcyBJZGVudEV4cHIoRXhwcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsbmFtZSk6CisgICAgICAgIEV4cHIuX19pbml0X18oc2VsZixvcElkZW50KQorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiKGlkZW50ICVzKSIgJSBzZWxmLm5hbWUKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5uYW1lCisKK2NsYXNzIENhbGxFeHByKEV4cHIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLGZ1bmNuYW1lLHBhcmFtcyk6CisgICAgICAgIEV4cHIuX19pbml0X18oc2VsZixvcENhbGwpCisgICAgICAgIHNlbGYuZnVuY25hbWUgPSBmdW5jbmFtZQorICAgICAgICBzZWxmLnBhcmFtcyAgID0gcGFyYW1zCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJlc3VsdCA9ICIoY2FsbCAlcyBbIiAlIHNlbGYuZnVuY25hbWUKKyAgICAgICAgY29tbWEgID0gIiIKKyAgICAgICAgZm9yIHBhcmFtIGluIHNlbGYucGFyYW1zOgorICAgICAgICAgICAgcmVzdWx0ICs9ICIlcyVzIiAlIChjb21tYSwgcmVwcihwYXJhbSkpCisgICAgICAgICAgICBjb21tYSAgID0gIiwiCisgICAgICAgIHJlc3VsdCArPSAiXSkiCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXN1bHQgPSAiJXMoIiAlIHNlbGYuZnVuY25hbWUKKyAgICAgICAgY29tbWEgPSAiIgorICAgICAgICBmb3IgcGFyYW0gaW4gc2VsZi5wYXJhbXM6CisgICAgICAgICAgICByZXN1bHQgKz0gIiVzJXMiICUgKGNvbW1hLCBzdHIocGFyYW0pKQorICAgICAgICAgICAgY29tbWEgPSAiLCIKKworICAgICAgICByZXN1bHQgKz0gIikiCisgICAgICAgIHJldHVybiByZXN1bHQKKworY2xhc3MgVGVzdEV4cHIoRXhwcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsY29uZCxpZnRydWUsaWZmYWxzZSk6CisgICAgICAgIEV4cHIuX19pbml0X18oc2VsZixvcFRlc3QpCisgICAgICAgIHNlbGYuY29uZCAgICA9IGNvbmQKKyAgICAgICAgc2VsZi5pZnRydWUgID0gaWZ0cnVlCisgICAgICAgIHNlbGYuaWZmYWxzZSA9IGlmZmFsc2UKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICIoPzogJXMgJXMgJXMpIiAlIChyZXByKHNlbGYuY29uZCkscmVwcihzZWxmLmlmdHJ1ZSkscmVwcihzZWxmLmlmZmFsc2UpKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAiKCVzKSA/ICglcykgOiAoJXMpIiAlIChzZWxmLmNvbmQsIHNlbGYuaWZ0cnVlLCBzZWxmLmlmZmFsc2UpCisKK2NsYXNzIFNpbmdsZUFyZ0V4cHIoRXhwcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsb3AsYXJnKToKKyAgICAgICAgRXhwci5fX2luaXRfXyhzZWxmLG9wKQorICAgICAgICBzZWxmLmFyZyA9IGFyZworCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIiglcyAlcykiICUgKHNlbGYub3AsIHJlcHIoc2VsZi5hcmcpKQorCitjbGFzcyBEZWZpbmVkRXhwcihTaW5nbGVBcmdFeHByKToKKyAgICBkZWYgX19pbml0X18oc2VsZixvcCxtYWNyb25hbWUpOgorICAgICAgICBTaW5nbGVBcmdFeHByLl9faW5pdF9fKHNlbGYub3BEZWZpbmVkLG1hY3JvbmFtZSkKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gImRlZmluZWQoJXMpIiAlIHNlbGYuYXJnCisKKworY2xhc3MgVW5hcnlFeHByKFNpbmdsZUFyZ0V4cHIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLG9wLGFyZyxvcHN0cj1Ob25lKToKKyAgICAgICAgU2luZ2xlQXJnRXhwci5fX2luaXRfXyhzZWxmLG9wLGFyZykKKyAgICAgICAgaWYgbm90IG9wc3RyOgorICAgICAgICAgICAgb3BzdHIgPSBvcAorICAgICAgICBzZWxmLm9wc3RyID0gb3BzdHIKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICBhcmdfcyAgICAgPSBzdHIoc2VsZi5hcmcpCisgICAgICAgIGFyZ19wcmVjICA9IHNlbGYuYXJnLnByZWNlZGVuY2UoKQorICAgICAgICBzZWxmX3ByZWMgPSBzZWxmLnByZWNlZGVuY2UoKQorICAgICAgICBpZiBhcmdfcHJlYyA8IHNlbGZfcHJlYzoKKyAgICAgICAgICAgIHJldHVybiAiJXMoJXMpIiAlIChzZWxmLm9wc3RyLGFyZ19zKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICIlcyVzIiAlIChzZWxmLm9wc3RyLCBhcmdfcykKKworY2xhc3MgVHdvQXJnRXhwcihFeHByKToKKyAgICBkZWYgX19pbml0X18oc2VsZixvcCxhcmcxLGFyZzIpOgorICAgICAgICBFeHByLl9faW5pdF9fKHNlbGYsb3ApCisgICAgICAgIHNlbGYuYXJnMSA9IGFyZzEKKyAgICAgICAgc2VsZi5hcmcyID0gYXJnMgorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIiglcyAlcyAlcykiICUgKHNlbGYub3AsIHJlcHIoc2VsZi5hcmcxKSwgcmVwcihzZWxmLmFyZzIpKQorCitjbGFzcyBCaW5hcnlFeHByKFR3b0FyZ0V4cHIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLG9wLGFyZzEsYXJnMixvcHN0cj1Ob25lKToKKyAgICAgICAgVHdvQXJnRXhwci5fX2luaXRfXyhzZWxmLG9wLGFyZzEsYXJnMikKKyAgICAgICAgaWYgbm90IG9wc3RyOgorICAgICAgICAgICAgb3BzdHIgPSBvcAorICAgICAgICBzZWxmLm9wc3RyID0gb3BzdHIKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICBhcmcxX3MgICAgPSBzdHIoc2VsZi5hcmcxKQorICAgICAgICBhcmcyX3MgICAgPSBzdHIoc2VsZi5hcmcyKQorICAgICAgICBhcmcxX3ByZWMgPSBzZWxmLmFyZzEucHJlY2VkZW5jZSgpCisgICAgICAgIGFyZzJfcHJlYyA9IHNlbGYuYXJnMi5wcmVjZWRlbmNlKCkKKyAgICAgICAgc2VsZl9wcmVjID0gc2VsZi5wcmVjZWRlbmNlKCkKKworICAgICAgICByZXN1bHQgPSAiIgorICAgICAgICBpZiBhcmcxX3ByZWMgPCBzZWxmX3ByZWM6CisgICAgICAgICAgICByZXN1bHQgKz0gIiglcykiICUgYXJnMV9zCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXN1bHQgKz0gYXJnMV9zCisKKyAgICAgICAgcmVzdWx0ICs9ICIgJXMgIiAlIHNlbGYub3BzdHIKKworICAgICAgICBpZiBhcmcyX3ByZWMgPCBzZWxmX3ByZWM6CisgICAgICAgICAgICByZXN1bHQgKz0gIiglcykiICUgYXJnMl9zCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXN1bHQgKz0gYXJnMl9zCisKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIyMjCisjIyMjIyAgICAgICAgICAgQyBQIFAgICBFIFggUCBSIEUgUyBTIEkgTyBOICAgUCBBIFIgUyBFIFIgICAgICAgICAgICAgICAgICAgICAgICMjIyMjCisjIyMjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKworY2xhc3MgRXhwclBhcnNlcjoKKyAgICAiIiJhIGNsYXNzIHVzZWQgdG8gY29udmVydCBhIGxpc3Qgb2YgdG9rZW5zIGludG8gYSBjcHAgRXhwciBvYmplY3QiIiIKKworICAgIHJlX29jdGFsICAgPSByZS5jb21waWxlKHIiXHMqXCgwWzAtN10rXCkuKiIpCisgICAgcmVfZGVjaW1hbCA9IHJlLmNvbXBpbGUociJccypcKFxkK1t1bFVMXSpcKS4qIikKKyAgICByZV9oZXhhZGVjaW1hbCA9IHJlLmNvbXBpbGUociJccypcKDBbeFhdWzAtOWEtZkEtRl0qXCkuKiIpCisKKyAgICBkZWYgX19pbml0X18oc2VsZix0b2tlbnMpOgorICAgICAgICBzZWxmLnRvayA9IHRva2VucworICAgICAgICBzZWxmLm4gICA9IGxlbihzZWxmLnRvaykKKyAgICAgICAgc2VsZi5pICAgPSAwCisKKyAgICBkZWYgbWFyayhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuaQorCisgICAgZGVmIHJlbGVhc2Uoc2VsZixwb3MpOgorICAgICAgICBzZWxmLmkgPSBwb3MKKworICAgIGRlZiBwZWVrSWQoc2VsZik6CisgICAgICAgIGlmIHNlbGYuaSA8IHNlbGYubjoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnRva1tzZWxmLmldLmlkCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgcGVlayhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5pIDwgc2VsZi5uOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYudG9rW3NlbGYuaV0KKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBza2lwKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmkgPCBzZWxmLm46CisgICAgICAgICAgICBzZWxmLmkgKz0gMQorCisgICAgZGVmIHNraXBPcHRpb25hbChzZWxmLGlkKToKKyAgICAgICAgaWYgc2VsZi5pIDwgc2VsZi5uIGFuZCBzZWxmLnRva1tzZWxmLmldLmlkID09IGlkOgorICAgICAgICAgICAgc2VsZi5pICs9IDEKKworICAgIGRlZiBza2lwU3BhY2VzKHNlbGYpOgorICAgICAgICBpICAgPSBzZWxmLmkKKyAgICAgICAgbiAgID0gc2VsZi5uCisgICAgICAgIHRvayA9IHNlbGYudG9rCisgICAgICAgIHdoaWxlIGkgPCBuIGFuZCAodG9rW2ldID09IHRva1NQQUNFIG9yIHRva1tpXSA9PSB0b2tMTik6CisgICAgICAgICAgICBpICs9IDEKKyAgICAgICAgc2VsZi5pID0gaQorCisgICAgIyBhbGwgdGhlIGlzWFhYIGZ1bmN0aW9ucyByZXR1cm5zIGEgKGV4cHIsbmV4dHBvcykgcGFpciBpZiBhIG1hdGNoIGlzIGZvdW5kCisgICAgIyBvciBOb25lIGlmIG5vdAorCisgICAgZGVmIGlzX2ludGVnZXIoc2VsZik6CisgICAgICAgIGlkID0gc2VsZi50b2tbc2VsZi5pXS5pZAorICAgICAgICBjICA9IGlkWzBdCisgICAgICAgIGlmIGMgPCAnMCcgb3IgYyA+ICc5JzoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgbSA9IEV4cHJQYXJzZXIucmVfb2N0YWwubWF0Y2goaWQpCisgICAgICAgIGlmIG06CisgICAgICAgICAgICByZXR1cm4gKEludEV4cHIoaWQpLCBtLmVuZCgxKSkKKworICAgICAgICBtID0gRXhwclBhcnNlci5yZV9kZWNpbWFsLm1hdGNoKGlkKQorICAgICAgICBpZiBtOgorICAgICAgICAgICAgcmV0dXJuIChJbnRFeHByKGlkKSwgbS5lbmQoMSkpCisKKyAgICAgICAgbSA9IEV4cHJQYXJzZXIucmVfaGV4YWRlY2ltYWwoaWQpCisgICAgICAgIGlmIG06CisgICAgICAgICAgICByZXR1cm4gKEludEV4cHIoaWQpLCBtLmVuZCgxKSkKKworICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIGlzX2RlZmluZWQoc2VsZik6CisgICAgICAgIGlkID0gc2VsZi50b2tbc2VsZi5pXS5pZAorICAgICAgICBpZiBpZCAhPSAiZGVmaW5lZCI6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIHBvcyA9IHNlbGYubWFyaygpCisKKyAgICAgICAgdXNlX3BhcmVuID0gMAorICAgICAgICBpZiBzZWxmLnBlZWtJZCgpID09IHRva0xQQVJFTjoKKyAgICAgICAgICAgIHNlbGYuc2tpcCgpCisgICAgICAgICAgICB1c2VfcGFyZW4gPSAxCisKKyAgICAgICAgaWYgc2VsZi5wZWVrSWQoKSAhPSB0b2tJREVOVDoKKyAgICAgICAgICAgIHNlbGYudGhyb3coIEJhZEV4cGVjdGVkVG9rZW4sICJpZGVudGlmaWVyIGV4cGVjdGVkIikKKworICAgICAgICBtYWNyb25hbWUgPSBzZWxmLnBlZWsoKS52YWx1ZQorICAgICAgICBzZWxmLnNraXAoKQorICAgICAgICBpZiB1c2VfcGFyZW46CisgICAgICAgICAgICBzZWxmLnNraXBTcGFjZXMoKQorICAgICAgICAgICAgaWYgc2VsZi5wZWVrSWQoKSAhPSB0b2tSUEFSRU46CisgICAgICAgICAgICAgICAgc2VsZi50aHJvdyggQmFkRXhwZWN0ZWRUb2tlbiwgIm1pc3NpbmcgcmlnaHQtcGFyZW4gYWZ0ZXIgJ2RlZmluZWQnIGRpcmVjdGl2ZSIpCisgICAgICAgICAgICBzZWxmLnNraXAoKQorCisgICAgICAgIGkgPSBzZWxmLmkKKyAgICAgICAgcmV0dXJuIChEZWZpbmVkRXhwcihtYWNyb25hbWUpLGkrMSkKKworICAgIGRlZiBpc19jYWxsX29yX2lkZW50KHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgaSk6CisgICAgICAgIHJldHVybiBOb25lCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMKKyMjIyMjICAgICAgICAgICBDIFAgUCAgIEUgWCBQIFIgRSBTIFMgSSBPIE4gUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMKKyMjIyMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworY2xhc3MgQ3BwSW52YWxpZEV4cHJlc3Npb24oRXhjZXB0aW9uKToKKyAgICAiIiJhbiBleGNlcHRpb24gcmFpc2VkIHdoZW4gYW4gaW52YWxpZC91bnN1cHBvcnRlZCBjcHAgZXhwcmVzc2lvbiBpcyBkZXRlY3RlZCIiIgorICAgIHBhc3MKKworY2xhc3MgQ3BwRXhwcjoKKyAgICAiIiJhIGNsYXNzIHRoYXQgbW9kZWxzIHRoZSBjb25kaXRpb24gb2YgI2lmIGRpcmVjdGl2ZXMgaW50bworICAgICAgICBhbiBleHByZXNzaW9uIHRyZWUuIGVhY2ggbm9kZSBpbiB0aGUgdHJlZSBpcyBvZiB0aGUgZm9ybSAob3AsYXJnKSBvciAob3AsYXJnMSxhcmcyKQorICAgICAgICB3aGVyZSAib3AiIGlzIGEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIG9wZXJhdGlvbiIiIgorCisgICAgdW5hcmllcyAgPSBbICIhIiwgIn4iIF0KKyAgICBiaW5hcmllcyA9IFsgIisiLCAiLSIsICI8IiwgIjw9IiwgIj49IiwgIj4iLCAiJiYiLCAifHwiLCAiKiIsICIvIiwgIiUiLCAiJiIsICJ8IiwgIl4iLCAiPDwiLCAiPj4iLCAiPT0iLCAiIT0iIF0KKyAgICBwcmVjZWRlbmNlcyA9IHsgInx8IjogMSwKKyAgICAgICAgICAgICAgICAgICAgIiYmIjogMiwKKyAgICAgICAgICAgICAgICAgICAgICJ8IjogMywKKyAgICAgICAgICAgICAgICAgICAgICJeIjogNCwKKyAgICAgICAgICAgICAgICAgICAgICImIjogNSwKKyAgICAgICAgICAgICAgICAgICAgICI9PSI6NiwgIiE9Ijo2LAorICAgICAgICAgICAgICAgICAgICAgIjwiOjcsICI8PSI6NywgIj4iOjcsICI+PSI6NywKKyAgICAgICAgICAgICAgICAgICAgICI8PCI6OCwgIj4+Ijo4LAorICAgICAgICAgICAgICAgICAgICAgIisiOjksICItIjo5LAorICAgICAgICAgICAgICAgICAgICAgIioiOjEwLCAiLyI6MTAsICIlIjoxMCwKKyAgICAgICAgICAgICAgICAgICAgICIhIjoxMSwgIn4iOjEyCisgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdG9rZW5zKToKKyAgICAgICAgIiIiaW5pdGlhbGl6ZSBhIENwcEV4cHIuICd0b2tlbnMnIG11c3QgYmUgYSBDcHBUb2tlbiBsaXN0IiIiCisgICAgICAgIHNlbGYudG9rICA9IHRva2VucworICAgICAgICBzZWxmLm4gICAgPSBsZW4odG9rZW5zKQorICAgICAgICBpZiBkZWJ1Z0NwcEV4cHI6CisgICAgICAgICAgICBwcmludCAiQ3BwRXhwcjogdHJ5aW5nIHRvIHBhcnNlICVzIiAlIHJlcHIodG9rZW5zKQorICAgICAgICBleHByICAgICAgPSBzZWxmLmlzX2V4cHIoMCkKKyAgICAgICAgaWYgZGVidWdDcHBFeHByOgorICAgICAgICAgICAgcHJpbnQgIkNwcEV4cHI6IGdvdCAiICsgcmVwcihleHByKQorICAgICAgICBzZWxmLmV4cHIgPSBleHByWzBdCisKKyAgICByZV9jcHBfY29uc3RhbnQgPSByZS5jb21waWxlKHIiKChcZHxcd3xfKSspIikKKworICAgIGRlZiB0aHJvdyhzZWxmLGV4Y2VwdGlvbixpLG1zZyk6CisgICAgICAgIGlmIGkgPCBzZWxmLm46CisgICAgICAgICAgICB0b2sgPSBzZWxmLnRva1tpXQorICAgICAgICAgICAgcHJpbnQgIiVkOiVkOiAlcyIgJSAodG9rLmxpbmVubyx0b2suY29sbm8sbXNnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQgIkVPRjogJXMiICUgbXNnCisgICAgICAgIHJhaXNlIGV4Y2VwdGlvbgorCisgICAgZGVmIHNraXBfc3BhY2VzKHNlbGYsaSk6CisgICAgICAgICIiInNraXAgc3BhY2VzIGluIGlucHV0IHRva2VuIGxpc3QiIiIKKyAgICAgICAgd2hpbGUgaSA8IHNlbGYubjoKKyAgICAgICAgICAgIHQgPSBzZWxmLnRva1tpXQorICAgICAgICAgICAgaWYgdC5pZCAhPSB0b2tTUEFDRSBhbmQgdC5pZCAhPSB0b2tMTjoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaSArPSAxCisgICAgICAgIHJldHVybiBpCisKKyAgICBkZWYgZXhwZWN0SWQoc2VsZixpLGlkKToKKyAgICAgICAgIiIiY2hlY2sgdGhhdCBhIGdpdmVuIHRva2VuIGlkIGlzIGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uLCB0aGVuIHNraXAgb3ZlciBpdCIiIgorICAgICAgICBpID0gc2VsZi5za2lwX3NwYWNlcyhpKQorICAgICAgICBpZiBpID49IHNlbGYubiBvciBzZWxmLnRva1tpXS5pZCAhPSBpZDoKKyAgICAgICAgICAgIHNlbGYudGhyb3coQmFkRXhwZWN0ZWRUb2tlbixpLCIjIyMgZXhwZWN0aW5nICclcycgaW4gZXhwcmVzc2lvbiwgZ290ICclcyciICUgKGlkLCBzZWxmLnRva1tpXS5pZCkpCisgICAgICAgIHJldHVybiBpKzEKKworICAgIGRlZiBleHBlY3RJZGVudChzZWxmLGkpOgorICAgICAgICBpID0gc2VsZi5za2lwX3NwYWNlcyhpKQorICAgICAgICBpZiBpID49IHNlbGYubiBvciBzZWxmLnRva1tpXS5pZCAhPSB0b2tJREVOVDoKKyAgICAgICAgICAgIHNlbGYudGhyb3coQmFkRXhwZWN0ZWRUb2tlbixpLCIjIyMgZXhwZWN0aW5nIGlkZW50aWZpZXIgaW4gZXhwcmVzc2lvbiwgZ290ICclcyciICUgKGlkLCBzZWxmLnRva1tpXS5pZCkpCisgICAgICAgIHJldHVybiBpKzEKKworICAgICMgdGhlIGlzX3h4eHh4IGZ1bmN0aW9uIHJldHVybnMgZWl0aGVyIE5vbmUgb3IgYSBwYWlyIChlLG5leHRwb3MpCisgICAgIyB3aGVyZSAnZScgaXMgYW4gZXhwcmVzc2lvbiB0dXBsZSAoZS5nLiAob3AsYXJnKSkgYW5kICduZXh0cG9zJyBpcworICAgICMgdGhlIGNvcnJlc3BvbmRpbmcgbmV4dCBwb3NpdGlvbiBpbiB0aGUgaW5wdXQgdG9rZW4gbGlzdAorICAgICMKKworICAgIGRlZiBpc19kZWNpbWFsKHNlbGYsaSk6CisgICAgICAgIHYgPSBzZWxmLnRva1tpXS52YWx1ZVs6XQorICAgICAgICB3aGlsZSBsZW4odikgPiAwIGFuZCB2Wy0xXSBpbiAiVUx1bCI6CisgICAgICAgICAgICB2ID0gdls6LTFdCisgICAgICAgIGZvciBkaWdpdCBpbiB2OgorICAgICAgICAgICAgaWYgbm90IGRpZ2l0LmlzZGlnaXQoKToKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgICMgZm9yIGFuIGludGVnZXIgZXhwcmVzc2lvbiB0dXBsZSwgdGhlIGFyZ3VtZW50CisgICAgICAgICMgaXMgc2ltcGx5IHRoZSB2YWx1ZSBhcyBhbiBpbnRlZ2VyCisgICAgICAgIHZhbCA9IHN0cmluZy5hdG9pKHYpCisgICAgICAgIHJldHVybiAoImludCIsIHZhbCksIGkrMQorCisgICAgZGVmIGlzX2hleGFkZWNpbWFsKHNlbGYsaSk6CisgICAgICAgIHYgPSBzZWxmLnRva1tpXS52YWx1ZVs6XQorICAgICAgICB3aGlsZSBsZW4odikgPiAwIGFuZCB2Wy0xXSBpbiAiVUx1bCI6CisgICAgICAgICAgICB2ID0gdls6LTFdCisgICAgICAgIGlmIGxlbih2KSA+IDIgYW5kICh2WzA6Ml0gPT0gIjB4IiBvciB2WzA6Ml0gPT0gIjBYIik6CisgICAgICAgICAgICBmb3IgZGlnaXQgaW4gdlsyOl06CisgICAgICAgICAgICAgICAgaWYgbm90IGRpZ2l0IGluICIwMTIzNDU2Nzg5YWJjZGVmQUJDREVGIjoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICAgICAgIyBmb3IgYW4gaGV4IGV4cHJlc3Npb24gdHVwbGUsIHRoZSBhcmd1bWVudAorICAgICAgICAgICAgIyBpcyB0aGUgdmFsdWUgYXMgYW4gaW50ZWdlcgorICAgICAgICAgICAgdmFsID0gaW50KHZbMjpdLCAxNikKKyAgICAgICAgICAgIHJldHVybiAoImhleCIsIHZhbCksIGkrMQorCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgaXNfaW50ZWdlcihzZWxmLGkpOgorICAgICAgICBpZiBzZWxmLnRva1tpXS5pZCAhPSB0b2tOVU1CRVI6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGMgPSBzZWxmLmlzX2RlY2ltYWwoaSkKKyAgICAgICAgaWYgYzogcmV0dXJuIGMKKworICAgICAgICBjID0gc2VsZi5pc19oZXhhZGVjaW1hbChpKQorICAgICAgICBpZiBjOiByZXR1cm4gYworCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgaXNfbnVtYmVyKHNlbGYsaSk6CisgICAgICAgIHQgPSBzZWxmLnRva1tpXQorICAgICAgICBpZiB0LmlkID09IHRva01JTlVTIGFuZCBpKzEgPCBzZWxmLm46CisgICAgICAgICAgICBjID0gc2VsZi5pc19pbnRlZ2VyKGkrMSkKKyAgICAgICAgICAgIGlmIGM6CisgICAgICAgICAgICAgICAgZSwgaTIgPSBjCisgICAgICAgICAgICAgICAgb3AsIHZhbCAgPSBlCisgICAgICAgICAgICAgICAgcmV0dXJuIChvcCwgLXZhbCksIGkyCisgICAgICAgIGlmIHQuaWQgPT0gdG9rUExVUyBhbmQgaSsxIDwgc2VsZi5uOgorICAgICAgICAgICAgYyA9IHNlbGYuaXNfaW50ZWdlcihpKzEpCisgICAgICAgICAgICBpZiBjOiByZXR1cm4gYworCisgICAgICAgIHJldHVybiBzZWxmLmlzX2ludGVnZXIoaSkKKworCisgICAgZGVmIGlzX2FsbnVtKHNlbGYsaSk6CisgICAgICAgICIiInRlc3Qgd2V0aGVyIGEgZ2l2ZW4gdG9rZW4gaXMgYWxwaGEtbnVtZXJpYyIiIgorICAgICAgICBpID0gc2VsZi5za2lwX3NwYWNlcyhpKQorICAgICAgICBpZiBpID49IHNlbGYubjoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHQgPSBzZWxmLnRva1tpXQorICAgICAgICBtID0gQ3BwRXhwci5yZV9jcHBfY29uc3RhbnQubWF0Y2godC5pZCkKKyAgICAgICAgaWYgbToKKyAgICAgICAgICAgICNwcmludCAiLi4uIGFsbnVtICclcyciICUgbS5ncm91cCgxKQorICAgICAgICAgICAgciA9IG0uZ3JvdXAoMSkKKyAgICAgICAgICAgIHJldHVybiAoImlkZW50IiwgciksIGkrMQorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIGlzX2RlZmluZWQoc2VsZixpKToKKyAgICAgICAgdCA9IHNlbGYudG9rW2ldCisgICAgICAgIGlmIHQuaWQgIT0gdG9rREVGSU5FRDoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgIyB3ZSBoYXZlIHRoZSBkZWZpbmVkIGtleXdvcmQsIGNoZWNrIHRoZSByZXN0CisgICAgICAgIGkgPSBzZWxmLnNraXBfc3BhY2VzKGkrMSkKKyAgICAgICAgdXNlX3BhcmVucyA9IDAKKyAgICAgICAgaWYgaSA8IHNlbGYubiBhbmQgc2VsZi50b2tbaV0uaWQgPT0gdG9rTFBBUkVOOgorICAgICAgICAgICAgdXNlX3BhcmVucyA9IDEKKyAgICAgICAgICAgIGkgPSBzZWxmLnNraXBfc3BhY2VzKGkrMSkKKworICAgICAgICBpZiBpID49IHNlbGYubjoKKyAgICAgICAgICAgIHNlbGYudGhyb3coQ3BwQ29uc3RhbnRFeHBlY3RlZCxpLCIjIyMgJ2RlZmluZWQnIG11c3QgYmUgZm9sbG93ZWQgIGJ5IG1hY3JvIG5hbWUgb3IgbGVmdCBwYXJlbiIpCisKKyAgICAgICAgdCA9IHNlbGYudG9rW2ldCisgICAgICAgIGlmIHQuaWQgIT0gdG9rSURFTlQ6CisgICAgICAgICAgICBzZWxmLnRocm93KENwcENvbnN0YW50RXhwZWN0ZWQsaSwiIyMjICdkZWZpbmVkJyBtdXN0IGJlIGZvbGxvd2VkIGJ5IG1hY3JvIG5hbWUiKQorCisgICAgICAgIGkgKz0gMQorICAgICAgICBpZiB1c2VfcGFyZW5zOgorICAgICAgICAgICAgaSA9IHNlbGYuZXhwZWN0SWQoaSx0b2tSUEFSRU4pCisKKyAgICAgICAgcmV0dXJuICgiZGVmaW5lZCIsdC52YWx1ZSksIGkKKworCisgICAgZGVmIGlzX2NhbGxfb3JfaWRlbnQoc2VsZixpKToKKyAgICAgICAgaSA9IHNlbGYuc2tpcF9zcGFjZXMoaSkKKyAgICAgICAgaWYgaSA+PSBzZWxmLm46CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIHQgPSBzZWxmLnRva1tpXQorICAgICAgICBpZiB0LmlkICE9IHRva0lERU5UOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBuYW1lID0gdC52YWx1ZQorCisgICAgICAgIGkgPSBzZWxmLnNraXBfc3BhY2VzKGkrMSkKKyAgICAgICAgaWYgaSA+PSBzZWxmLm4gb3Igc2VsZi50b2tbaV0uaWQgIT0gdG9rTFBBUkVOOgorICAgICAgICAgICAgcmV0dXJuICgiaWRlbnQiLCBuYW1lKSwgaQorCisgICAgICAgIHBhcmFtcyAgICA9IFtdCisgICAgICAgIGRlcHRoICAgICA9IDEKKyAgICAgICAgaSArPSAxCisgICAgICAgIGogID0gaQorICAgICAgICB3aGlsZSBpIDwgc2VsZi5uOgorICAgICAgICAgICAgaWQgPSBzZWxmLnRva1tpXS5pZAorICAgICAgICAgICAgaWYgaWQgPT0gdG9rTFBBUkVOOgorICAgICAgICAgICAgICAgIGRlcHRoICs9IDEKKyAgICAgICAgICAgIGVsaWYgZGVwdGggPT0gMSBhbmQgKGlkID09IHRva0NPTU1BIG9yIGlkID09IHRva1JQQVJFTik6CisgICAgICAgICAgICAgICAgd2hpbGUgaiA8IGkgYW5kIHNlbGYudG9rW2pdLmlkID09IHRva1NQQUNFOgorICAgICAgICAgICAgICAgICAgICBqICs9IDEKKyAgICAgICAgICAgICAgICBrID0gaQorICAgICAgICAgICAgICAgIHdoaWxlIGsgPiBqIGFuZCBzZWxmLnRva1trLTFdLmlkID09IHRva1NQQUNFOgorICAgICAgICAgICAgICAgICAgICBrIC09IDEKKyAgICAgICAgICAgICAgICBwYXJhbSA9IHNlbGYudG9rW2o6a10KKyAgICAgICAgICAgICAgICBwYXJhbXMuYXBwZW5kKCBwYXJhbSApCisgICAgICAgICAgICAgICAgaWYgaWQgPT0gdG9rUlBBUkVOOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGogPSBpKzEKKyAgICAgICAgICAgIGVsaWYgaWQgPT0gdG9rUlBBUkVOOgorICAgICAgICAgICAgICAgIGRlcHRoIC09IDEKKyAgICAgICAgICAgIGkgKz0gMQorCisgICAgICAgIGlmIGkgPj0gc2VsZi5uOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICByZXR1cm4gKCJjYWxsIiwgKG5hbWUsIHBhcmFtcykpLCBpKzEKKworICAgIGRlZiBpc190b2tlbihzZWxmLGksdG9rZW4pOgorICAgICAgICBpID0gc2VsZi5za2lwX3NwYWNlcyhpKQorICAgICAgICBpZiBpID49IHNlbGYubiBvciBzZWxmLnRva1tpXS5pZCAhPSB0b2tlbjoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHJldHVybiB0b2tlbiwgaSsxCisKKworICAgIGRlZiBpc192YWx1ZShzZWxmLGkpOgorICAgICAgICB0ID0gc2VsZi50b2tbaV0KKyAgICAgICAgaWYgdC5pZCA9PSB0b2tTVFJJTkc6CisgICAgICAgICAgICByZXR1cm4gKCJzdHJpbmciLCB0LnZhbHVlKSwgaSsxCisKKyAgICAgICAgYyA9IHNlbGYuaXNfbnVtYmVyKGkpCisgICAgICAgIGlmIGM6IHJldHVybiBjCisKKyAgICAgICAgYyA9IHNlbGYuaXNfZGVmaW5lZChpKQorICAgICAgICBpZiBjOiByZXR1cm4gYworCisgICAgICAgIGMgPSBzZWxmLmlzX2NhbGxfb3JfaWRlbnQoaSkKKyAgICAgICAgaWYgYzogcmV0dXJuIGMKKworICAgICAgICBpID0gc2VsZi5za2lwX3NwYWNlcyhpKQorICAgICAgICBpZiBpID49IHNlbGYubiBvciBzZWxmLnRva1tpXS5pZCAhPSB0b2tMUEFSRU46CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIHBvcGNvdW50ID0gMQorICAgICAgICBpMiAgICAgICA9IGkrMQorICAgICAgICB3aGlsZSBpMiA8IHNlbGYubjoKKyAgICAgICAgICAgIHQgPSBzZWxmLnRva1tpMl0KKyAgICAgICAgICAgIGlmIHQuaWQgPT0gdG9rTFBBUkVOOgorICAgICAgICAgICAgICAgIHBvcGNvdW50ICs9IDEKKyAgICAgICAgICAgIGVsaWYgdC5pZCA9PSB0b2tSUEFSRU46CisgICAgICAgICAgICAgICAgcG9wY291bnQgLT0gMQorICAgICAgICAgICAgICAgIGlmIHBvcGNvdW50ID09IDA6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpMiArPSAxCisKKyAgICAgICAgaWYgcG9wY291bnQgIT0gMDoKKyAgICAgICAgICAgIHNlbGYudGhyb3coQ3BwSW52YWxpZEV4cHJlc3Npb24sIGksICJleHByZXNzaW9uIG1pc3NpbmcgY2xvc2luZyBwYXJlbnRoZXNpcyIpCisKKyAgICAgICAgaWYgZGVidWdDcHBFeHByOgorICAgICAgICAgICAgcHJpbnQgIkNwcEV4cHI6IHRyeWluZyB0byBwYXJzZSBzdWItZXhwcmVzc2lvbiAlcyIgJSByZXByKHNlbGYudG9rW2krMTppMl0pCisgICAgICAgIG9sZGNvdW50ICAgPSBzZWxmLm4KKyAgICAgICAgc2VsZi5uICAgICA9IGkyCisgICAgICAgIGMgICAgICAgICAgPSBzZWxmLmlzX2V4cHIoaSsxKQorICAgICAgICBzZWxmLm4gICAgID0gb2xkY291bnQKKyAgICAgICAgaWYgbm90IGM6CisgICAgICAgICAgICBzZWxmLnRocm93KENwcEludmFsaWRFeHByZXNzaW9uLCBpLCAiaW52YWxpZCBleHByZXNzaW9uIHdpdGhpbiBwYXJlbnRoZXNpcyIpCisKKyAgICAgICAgZSwgaSA9IGMKKyAgICAgICAgcmV0dXJuIGUsIGkyKzEKKworICAgIGRlZiBpc191bmFyeShzZWxmLGkpOgorICAgICAgICBpID0gc2VsZi5za2lwX3NwYWNlcyhpKQorICAgICAgICBpZiBpID49IHNlbGYubjoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgdCA9IHNlbGYudG9rW2ldCisgICAgICAgIGlmIHQuaWQgaW4gQ3BwRXhwci51bmFyaWVzOgorICAgICAgICAgICAgYyA9IHNlbGYuaXNfdW5hcnkoaSsxKQorICAgICAgICAgICAgaWYgbm90IGM6CisgICAgICAgICAgICAgICAgc2VsZi50aHJvdyhDcHBJbnZhbGlkRXhwcmVzc2lvbiwgaSwgIiVzIG9wZXJhdG9yIG11c3QgYmUgZm9sbG93ZWQgYnkgdmFsdWUiICUgdC5pZCkKKyAgICAgICAgICAgIGUsIGkgPSBjCisgICAgICAgICAgICByZXR1cm4gKHQuaWQsIGUpLCBpCisKKyAgICAgICAgcmV0dXJuIHNlbGYuaXNfdmFsdWUoaSkKKworICAgIGRlZiBpc19iaW5hcnkoc2VsZixpKToKKyAgICAgICAgaSA9IHNlbGYuc2tpcF9zcGFjZXMoaSkKKyAgICAgICAgaWYgaSA+PSBzZWxmLm46CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGMgPSBzZWxmLmlzX3VuYXJ5KGkpCisgICAgICAgIGlmIG5vdCBjOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBlMSwgaTIgPSBjCisgICAgICAgIGkyID0gc2VsZi5za2lwX3NwYWNlcyhpMikKKyAgICAgICAgaWYgaTIgPj0gc2VsZi5uOgorICAgICAgICAgICAgcmV0dXJuIGMKKworICAgICAgICB0ID0gc2VsZi50b2tbaTJdCisgICAgICAgIGlmIHQuaWQgaW4gQ3BwRXhwci5iaW5hcmllczoKKyAgICAgICAgICAgIGMgPSBzZWxmLmlzX2JpbmFyeShpMisxKQorICAgICAgICAgICAgaWYgbm90IGM6CisgICAgICAgICAgICAgICAgc2VsZi50aHJvdyhDcHBJbnZhbGlkRXhwcmVzc2lvbiwgaSwiIyMjICVzIG9wZXJhdG9yIG11c3QgYmUgZm9sbG93ZWQgYnkgdmFsdWUiICUgdC5pZCApCisgICAgICAgICAgICBlMiwgaTMgPSBjCisgICAgICAgICAgICByZXR1cm4gKHQuaWQsIGUxLCBlMiksIGkzCisKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBpc19leHByKHNlbGYsaSk6CisgICAgICAgIHJldHVybiBzZWxmLmlzX2JpbmFyeShpKQorCisgICAgZGVmIGR1bXBfbm9kZShzZWxmLGUpOgorICAgICAgICBvcCA9IGVbMF0KKyAgICAgICAgbGluZSA9ICIoIiArIG9wCisgICAgICAgIGlmIG9wID09ICJpbnQiOgorICAgICAgICAgICAgbGluZSArPSAiICVkKSIgJSBlWzFdCisgICAgICAgIGVsaWYgb3AgPT0gImhleCI6CisgICAgICAgICAgICBsaW5lICs9ICIgMHgleCkiICUgZVsxXQorICAgICAgICBlbGlmIG9wID09ICJpZGVudCI6CisgICAgICAgICAgICBsaW5lICs9ICIgJXMpIiAlIGVbMV0KKyAgICAgICAgZWxpZiBvcCA9PSAiZGVmaW5lZCI6CisgICAgICAgICAgICBsaW5lICs9ICIgJXMpIiAlIGVbMV0KKyAgICAgICAgZWxpZiBvcCA9PSAiY2FsbCI6CisgICAgICAgICAgICBhcmcgPSBlWzFdCisgICAgICAgICAgICBsaW5lICs9ICIgJXMgWyIgJSBhcmdbMF0KKyAgICAgICAgICAgIHByZWZpeCA9ICIiCisgICAgICAgICAgICBmb3IgcGFyYW0gaW4gYXJnWzFdOgorICAgICAgICAgICAgICAgIHBhciA9ICIiCisgICAgICAgICAgICAgICAgZm9yIHRvayBpbiBwYXJhbToKKyAgICAgICAgICAgICAgICAgICAgcGFyICs9IHN0cih0b2spCisgICAgICAgICAgICAgICAgbGluZSArPSAiJXMlcyIgJSAocHJlZml4LCBwYXIpCisgICAgICAgICAgICAgICAgcHJlZml4ID0gIiwiCisgICAgICAgICAgICBsaW5lICs9ICJdKSIKKyAgICAgICAgZWxpZiBvcCBpbiBDcHBFeHByLnVuYXJpZXM6CisgICAgICAgICAgICBsaW5lICs9ICIgJXMpIiAlIHNlbGYuZHVtcF9ub2RlKGVbMV0pCisgICAgICAgIGVsaWYgb3AgaW4gQ3BwRXhwci5iaW5hcmllczoKKyAgICAgICAgICAgIGxpbmUgKz0gIiAlcyAlcykiICUgKHNlbGYuZHVtcF9ub2RlKGVbMV0pLCBzZWxmLmR1bXBfbm9kZShlWzJdKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxpbmUgKz0gIiA/JXMpIiAlIHJlcHIoZVsxXSkKKworICAgICAgICByZXR1cm4gbGluZQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5kdW1wX25vZGUoc2VsZi5leHByKQorCisgICAgZGVmIHNvdXJjZV9ub2RlKHNlbGYsZSk6CisgICAgICAgIG9wID0gZVswXQorICAgICAgICBpZiBvcCA9PSAiaW50IjoKKyAgICAgICAgICAgIHJldHVybiAiJWQiICUgZVsxXQorICAgICAgICBpZiBvcCA9PSAiaGV4IjoKKyAgICAgICAgICAgIHJldHVybiAiMHgleCIgJSBlWzFdCisgICAgICAgIGlmIG9wID09ICJpZGVudCI6CisgICAgICAgICAgICAjIFhYWDogc2hvdWxkIHRyeSB0byBleHBhbmQKKyAgICAgICAgICAgIHJldHVybiBlWzFdCisgICAgICAgIGlmIG9wID09ICJkZWZpbmVkIjoKKyAgICAgICAgICAgIHJldHVybiAiZGVmaW5lZCglcykiICUgZVsxXQorCisgICAgICAgIHByZWMgPSBDcHBFeHByLnByZWNlZGVuY2VzLmdldChvcCwxMDAwKQorICAgICAgICBhcmcgID0gZVsxXQorICAgICAgICBpZiBvcCBpbiBDcHBFeHByLnVuYXJpZXM6CisgICAgICAgICAgICBhcmdfc3JjID0gc2VsZi5zb3VyY2Vfbm9kZShhcmcpCisgICAgICAgICAgICBhcmdfb3AgID0gYXJnWzBdCisgICAgICAgICAgICBhcmdfcHJlYyA9IENwcEV4cHIucHJlY2VkZW5jZXMuZ2V0KGFyZ1swXSwxMDAwKQorICAgICAgICAgICAgaWYgYXJnX3ByZWMgPCBwcmVjOgorICAgICAgICAgICAgICAgIHJldHVybiAiISgiICsgYXJnX3NyYyArICIpIgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gIiEiICsgYXJnX3NyYworICAgICAgICBpZiBvcCBpbiBDcHBFeHByLmJpbmFyaWVzOgorICAgICAgICAgICAgYXJnMiAgICAgPSBlWzJdCisgICAgICAgICAgICBhcmcxX29wICA9IGFyZ1swXQorICAgICAgICAgICAgYXJnMl9vcCAgPSBhcmcyWzBdCisgICAgICAgICAgICBhcmcxX3NyYyA9IHNlbGYuc291cmNlX25vZGUoYXJnKQorICAgICAgICAgICAgYXJnMl9zcmMgPSBzZWxmLnNvdXJjZV9ub2RlKGFyZzIpCisgICAgICAgICAgICBpZiBDcHBFeHByLnByZWNlZGVuY2VzLmdldChhcmcxX29wLDEwMDApIDwgcHJlYzoKKyAgICAgICAgICAgICAgICBhcmcxX3NyYyA9ICIoJXMpIiAlIGFyZzFfc3JjCisgICAgICAgICAgICBpZiBDcHBFeHByLnByZWNlZGVuY2VzLmdldChhcmcyX29wLDEwMDApIDwgcHJlYzoKKyAgICAgICAgICAgICAgICBhcmcyX3NyYyA9ICIoJXMpIiAlIGFyZzJfc3JjCisKKyAgICAgICAgICAgIHJldHVybiAiJXMgJXMgJXMiICUgKGFyZzFfc3JjLCBvcCwgYXJnMl9zcmMpCisgICAgICAgIHJldHVybiAiPz8/IgorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnNvdXJjZV9ub2RlKHNlbGYuZXhwcikKKworICAgIGRlZiBpbnRfbm9kZShzZWxmLGUpOgorICAgICAgICBpZiBlWzBdID09ICJpbnQiOgorICAgICAgICAgICAgcmV0dXJuIGVbMV0KKyAgICAgICAgZWxpZiBlWzFdID09ICJoZXgiOgorICAgICAgICAgICAgcmV0dXJuIGludChlWzFdLDE2KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiB0b0ludChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuaW50X25vZGUoc2VsZi5leHByKQorCisgICAgZGVmIG9wdGltaXplX25vZGUoc2VsZixlLG1hY3Jvcz17fSk6CisgICAgICAgIG9wID0gZVswXQorICAgICAgICBpZiBvcCA9PSAiZGVmaW5lZCI6CisgICAgICAgICAgICBuYW1lID0gZVsxXQorICAgICAgICAgICAgaWYgbWFjcm9zLmhhc19rZXkobmFtZSk6CisgICAgICAgICAgICAgICAgaWYgbWFjcm9zW25hbWVdID09IGtDcHBVbmRlZmluZWRNYWNybzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgiaW50IiwgMCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCJpbnQiLCAxKQorCisgICAgICAgICAgICBpZiBrZXJuZWxfcmVtb3ZlX2NvbmZpZ19tYWNyb3MgYW5kIG5hbWUuc3RhcnRzd2l0aCgiQ09ORklHXyIpOgorICAgICAgICAgICAgICAgIHJldHVybiAoImludCIsIDApCisKKyAgICAgICAgZWxpZiBvcCA9PSAiISI6CisgICAgICAgICAgICBvcCwgdiA9IGUKKyAgICAgICAgICAgIHYgPSBzZWxmLm9wdGltaXplX25vZGUodiwgbWFjcm9zKQorICAgICAgICAgICAgaWYgdlswXSA9PSAiaW50IjoKKyAgICAgICAgICAgICAgICBpZiB2WzFdID09IDA6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAoImludCIsIDEpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgiaW50IiwgMCkKKworICAgICAgICBlbGlmIG9wID09ICImJiI6CisgICAgICAgICAgICBvcCwgbCwgciA9IGUKKyAgICAgICAgICAgIGwgID0gc2VsZi5vcHRpbWl6ZV9ub2RlKGwsIG1hY3JvcykKKyAgICAgICAgICAgIHIgID0gc2VsZi5vcHRpbWl6ZV9ub2RlKHIsIG1hY3JvcykKKyAgICAgICAgICAgIGxpID0gc2VsZi5pbnRfbm9kZShsKQorICAgICAgICAgICAgcmkgPSBzZWxmLmludF9ub2RlKHIpCisgICAgICAgICAgICBpZiBsaSAhPSBOb25lOgorICAgICAgICAgICAgICAgIGlmIGxpID09IDA6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAoImludCIsIDApCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHIKKworICAgICAgICBlbGlmIG9wID09ICJ8fCI6CisgICAgICAgICAgICBvcCwgbCwgciA9IGUKKyAgICAgICAgICAgIGwgID0gc2VsZi5vcHRpbWl6ZV9ub2RlKGwsIG1hY3JvcykKKyAgICAgICAgICAgIHIgID0gc2VsZi5vcHRpbWl6ZV9ub2RlKHIsIG1hY3JvcykKKyAgICAgICAgICAgIGxpID0gc2VsZi5pbnRfbm9kZShsKQorICAgICAgICAgICAgcmkgPSBzZWxmLmludF9ub2RlKHIpCisgICAgICAgICAgICBpZiBsaSAhPSBOb25lOgorICAgICAgICAgICAgICAgIGlmIGxpID09IDA6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgiaW50IiwgMSkKKyAgICAgICAgICAgIGVsaWYgcmkgIT0gTm9uZToKKyAgICAgICAgICAgICAgICBpZiByaSA9PSAwOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAoImludCIsIDEpCisgICAgICAgIHJldHVybiBlCisKKyAgICBkZWYgb3B0aW1pemUoc2VsZixtYWNyb3M9e30pOgorICAgICAgICBzZWxmLmV4cHIgPSBzZWxmLm9wdGltaXplX25vZGUoc2VsZi5leHByLG1hY3JvcykKKworICAgIGRlZiByZW1vdmVQcmVmaXhlZE5vZGUoc2VsZixlLHByZWZpeCxuYW1lcyk6CisgICAgICAgIG9wID0gZVswXQorICAgICAgICBpZiBvcCA9PSAiZGVmaW5lZCI6CisgICAgICAgICAgICBuYW1lID0gZVsxXQorICAgICAgICAgICAgaWYgbmFtZS5zdGFydHN3aXRoKHByZWZpeCk6CisgICAgICAgICAgICAgICAgaWYgbmFtZXMuaGFzX2tleVtuYW1lXSBhbmQgbmFtZXNbbmFtZV0gPT0gInkiOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCJpbnQiLCAxKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAoImludCIsIDApCisKKyAgICAgICAgZWxpZiBvcCBpbiBDcHBFeHByLnVuYXJpZXM6CisgICAgICAgICAgICBvcCwgdiA9IGUKKyAgICAgICAgICAgIHYgPSBzZWxmLnJlbW92ZVByZWZpeGVkTm9kZSh2LHByZWZpeCxuYW1lcykKKyAgICAgICAgICAgIHJldHVybiAob3AsIHYpCisgICAgICAgIGVsaWYgb3AgaW4gQ3BwRXhwci5iaW5hcmllczoKKyAgICAgICAgICAgIG9wLCB2MSwgdjIgPSBlCisgICAgICAgICAgICB2MSA9IHNlbGYucmVtb3ZlUHJlZml4ZWROb2RlKHYxLHByZWZpeCxuYW1lcykKKyAgICAgICAgICAgIHYyID0gc2VsZi5yZW1vdmVQcmVmaXhlZE5vZGUodjIscHJlZml4LG5hbWVzKQorICAgICAgICAgICAgcmV0dXJuIChvcCwgdjEsIHYyKQorICAgICAgICBlbGlmIG9wID09ICJjYWxsIjoKKyAgICAgICAgICAgIGZ1bmMsIHBhcmFtcyA9IGVbMV0KKyAgICAgICAgICAgIHBhcmFtczIgPSBbXQorICAgICAgICAgICAgZm9yIHBhcmFtIGluIHBhcmFtczoKKyAgICAgICAgICAgICAgICBwYXJhbXMyLmFwcGVuZCggc2VsZi5yZW1vdmVQcmVmaXhlZE5vZGUocGFyYW0scHJlZml4LG5hbWVzKSApCisgICAgICAgICAgICByZXR1cm4gKG9wLCAoZnVuYywgcGFyYW1zMikpCisKKyAgICAgICAgcmV0dXJuIGUKKworICAgIGRlZiByZW1vdmVQcmVmaXhlZChzZWxmLHByZWZpeCxuYW1lcz17fSk6CisgICAgICAgIHNlbGYuZXhwciA9IHNlbGYucmVtb3ZlUHJlZml4ZWROb2RlKHNlbGYuZXhwcixwcmVmaXgsbmFtZXMpCisKKyAgICBkZWYgaXNfZXF1YWxfbm9kZShzZWxmLGUxLGUyKToKKyAgICAgICAgaWYgZTFbMF0gIT0gZTJbMF0gb3IgbGVuKGUxKSAhPSBsZW4oZTIpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgb3AgPSBlMVswXQorICAgICAgICBpZiBvcCA9PSAiaW50IiBvciBvcCA9PSAiaGV4IiBvciBvcCA9PSAiISIgb3Igb3AgPT0gImRlZmluZWQiOgorICAgICAgICAgICAgcmV0dXJuIGUxWzBdID09IGUyWzBdCisKKyAgICAgICAgcmV0dXJuIHNlbGYuaXNfZXF1YWxfbm9kZShlMVsxXSxlMlsxXSkgYW5kIHNlbGYuaXNfZXF1YWxfbm9kZShlMVsyXSxlMlsyXSkKKworICAgIGRlZiBpc19lcXVhbChzZWxmLG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYuaXNfZXF1YWxfbm9kZShzZWxmLmV4cHIsb3RoZXIuZXhwcikKKworZGVmIHRlc3RfY3BwX2V4cHIoZXhwciwgZXhwZWN0ZWQpOgorICAgIGUgPSBDcHBFeHByKCBDcHBMaW5lVG9rZW5pemVyKCBleHByICkudG9Ub2tlbkxpc3QoKSApCisgICAgI3ByaW50IHJlcHIoZS5leHByKQorICAgIHMxID0gcmVwcihlKQorICAgIGlmIHMxICE9IGV4cGVjdGVkOgorICAgICAgICBwcmludCAiS086IGV4cHJlc3Npb24gJyVzJyBnZW5lcmF0ZXMgJyVzJywgc2hvdWxkIGJlICclcyciICUgKGV4cHIsIHMxLCBleHBlY3RlZCkKKyAgICBlbHNlOgorICAgICAgICAjcHJpbnQgIk9LOiBleHByZXNzaW9uICclcyciICUgZXhwcgorICAgICAgICBwYXNzCisKK2RlZiB0ZXN0X2NwcF9leHByX29wdGltKGV4cHIsIGV4cGVjdGVkLCBtYWNyb3M9e30pOgorICAgIGUgPSBDcHBFeHByKCBDcHBMaW5lVG9rZW5pemVyKCBleHByICkudG9Ub2tlbkxpc3QoKSApCisgICAgZS5vcHRpbWl6ZShtYWNyb3MpCisKKyAgICBzMSA9IHJlcHIoZSkKKyAgICBpZiBzMSAhPSBleHBlY3RlZDoKKyAgICAgICAgcHJpbnQgIktPOiBvcHRpbWl6ZWQgZXhwcmVzc2lvbiAnJXMnIGdlbmVyYXRlcyAnJXMnLCBzaG91bGQgYmUgJyVzJyIgJSAoZXhwciwgczEsIGV4cGVjdGVkKQorICAgIGVsc2U6CisgICAgICAgICNwcmludCAiT0s6IG9wdG1pemVkIGV4cHJlc3Npb24gJyVzJyIgJSBleHByCisgICAgICAgIHBhc3MKKworZGVmIHRlc3RfY3BwX2V4cHJfc291cmNlKGV4cHIsIGV4cGVjdGVkKToKKyAgICBlID0gQ3BwRXhwciggQ3BwTGluZVRva2VuaXplciggZXhwciApLnRvVG9rZW5MaXN0KCkgKQorICAgIHMxID0gc3RyKGUpCisgICAgaWYgczEgIT0gZXhwZWN0ZWQ6CisgICAgICAgIHByaW50ICJLTzogc291cmNlIGV4cHJlc3Npb24gJyVzJyBnZW5lcmF0ZXMgJyVzJywgc2hvdWxkIGJlICclcyciICUgKGV4cHIsIHMxLCBleHBlY3RlZCkKKyAgICBlbHNlOgorICAgICAgICAjcHJpbnQgIk9LOiBzb3VyY2UgZXhwcmVzc2lvbiAnJXMnIiAlIGV4cHIKKyAgICAgICAgcGFzcworCitkZWYgdGVzdF9DcHBFeHByKCk6CisgICAgcHJpbnQgInRlc3RpbmcgQ3BwRXhwciIKKyAgICB0ZXN0X2NwcF9leHByKCAiMCIsICIoaW50IDApIiApCisgICAgdGVzdF9jcHBfZXhwciggIjEiLCAiKGludCAxKSIgKQorICAgIHRlc3RfY3BwX2V4cHIoICIxICYmIDEiLCAiKCYmIChpbnQgMSkgKGludCAxKSkiICkKKyAgICB0ZXN0X2NwcF9leHByKCAiMSAmJiAwIiwgIigmJiAoaW50IDEpIChpbnQgMCkpIiApCisgICAgdGVzdF9jcHBfZXhwciggIkVYQU1QTEUiLCAiKGlkZW50IEVYQU1QTEUpIiApCisgICAgdGVzdF9jcHBfZXhwciggIkVYQU1QTEUgLSAzIiwgIigtIChpZGVudCBFWEFNUExFKSAoaW50IDMpKSIgKQorICAgIHRlc3RfY3BwX2V4cHIoICJkZWZpbmVkKEVYQU1QTEUpIiwgIihkZWZpbmVkIEVYQU1QTEUpIiApCisgICAgdGVzdF9jcHBfZXhwciggIiFkZWZpbmVkKEVYQU1QTEUpIiwgIighIChkZWZpbmVkIEVYQU1QTEUpKSIgKQorICAgIHRlc3RfY3BwX2V4cHIoICJkZWZpbmVkKEFCQykgfHwgZGVmaW5lZChCSU5HTykiLCAiKHx8IChkZWZpbmVkIEFCQykgKGRlZmluZWQgQklOR08pKSIgKQorICAgIHRlc3RfY3BwX2V4cHIoICJGT08oQkFSKSIsICIoY2FsbCBGT08gW0JBUl0pIiApCisKKyAgICB0ZXN0X2NwcF9leHByX29wdGltKCAiMCIsICIoaW50IDApIiApCisgICAgdGVzdF9jcHBfZXhwcl9vcHRpbSggIjEiLCAiKGludCAxKSIgKQorICAgIHRlc3RfY3BwX2V4cHJfb3B0aW0oICIxICYmIDEiLCAiKGludCAxKSIgKQorICAgIHRlc3RfY3BwX2V4cHJfb3B0aW0oICIxICYmIDAiLCAiKGludCAwKSIgKQorICAgIHRlc3RfY3BwX2V4cHJfb3B0aW0oICIwICYmIDEiLCAiKGludCAwKSIgKQorICAgIHRlc3RfY3BwX2V4cHJfb3B0aW0oICIwICYmIDAiLCAiKGludCAwKSIgKQorICAgIHRlc3RfY3BwX2V4cHJfb3B0aW0oICIxIHx8IDEiLCAiKGludCAxKSIgKQorICAgIHRlc3RfY3BwX2V4cHJfb3B0aW0oICIxIHx8IDAiLCAiKGludCAxKSIgKQorICAgIHRlc3RfY3BwX2V4cHJfb3B0aW0oICIwIHx8IDEiLCAiKGludCAxKSIgKQorICAgIHRlc3RfY3BwX2V4cHJfb3B0aW0oICIwIHx8IDAiLCAiKGludCAwKSIgKQorICAgIHRlc3RfY3BwX2V4cHJfb3B0aW0oICJFWEFNUExFIiwgIihpZGVudCBFWEFNUExFKSIgKQorICAgIHRlc3RfY3BwX2V4cHJfb3B0aW0oICJFWEFNUExFIC0gMyIsICIoLSAoaWRlbnQgRVhBTVBMRSkgKGludCAzKSkiICkKKyAgICB0ZXN0X2NwcF9leHByX29wdGltKCAiZGVmaW5lZChFWEFNUExFKSIsICIoZGVmaW5lZCBFWEFNUExFKSIgKQorICAgIHRlc3RfY3BwX2V4cHJfb3B0aW0oICJkZWZpbmVkKEVYQU1QTEUpIiwgIihpbnQgMSkiLCB7ICJFWEFNUExFIjogIlhPV09FIiB9ICkKKyAgICB0ZXN0X2NwcF9leHByX29wdGltKCAiZGVmaW5lZChFWEFNUExFKSIsICIoaW50IDApIiwgeyAiRVhBTVBMRSI6IGtDcHBVbmRlZmluZWRNYWNyb30gKQorICAgIHRlc3RfY3BwX2V4cHJfb3B0aW0oICIhZGVmaW5lZChFWEFNUExFKSIsICIoISAoZGVmaW5lZCBFWEFNUExFKSkiICkKKyAgICB0ZXN0X2NwcF9leHByX29wdGltKCAiIWRlZmluZWQoRVhBTVBMRSkiLCAiKGludCAwKSIsIHsgIkVYQU1QTEUiIDogIlhPV09FIiB9ICkKKyAgICB0ZXN0X2NwcF9leHByX29wdGltKCAiIWRlZmluZWQoRVhBTVBMRSkiLCAiKGludCAxKSIsIHsgIkVYQU1QTEUiIDoga0NwcFVuZGVmaW5lZE1hY3JvIH0gKQorICAgIHRlc3RfY3BwX2V4cHJfb3B0aW0oICJkZWZpbmVkKEFCQykgfHwgZGVmaW5lZChCSU5HTykiLCAiKHx8IChkZWZpbmVkIEFCQykgKGRlZmluZWQgQklOR08pKSIgKQorICAgIHRlc3RfY3BwX2V4cHJfb3B0aW0oICJkZWZpbmVkKEFCQykgfHwgZGVmaW5lZChCSU5HTykiLCAiKGludCAxKSIsIHsgIkFCQyIgOiAiMSIgfSApCisgICAgdGVzdF9jcHBfZXhwcl9vcHRpbSggImRlZmluZWQoQUJDKSB8fCBkZWZpbmVkKEJJTkdPKSIsICIoaW50IDEpIiwgeyAiQklOR08iIDogIjEiIH0gKQorICAgIHRlc3RfY3BwX2V4cHJfb3B0aW0oICJkZWZpbmVkKEFCQykgfHwgZGVmaW5lZChCSU5HTykiLCAiKGRlZmluZWQgQUJDKSIsIHsgIkJJTkdPIiA6IGtDcHBVbmRlZmluZWRNYWNybyB9ICkKKyAgICB0ZXN0X2NwcF9leHByX29wdGltKCAiZGVmaW5lZChBQkMpIHx8IGRlZmluZWQoQklOR08pIiwgIihpbnQgMCkiLCB7ICJBQkMiIDoga0NwcFVuZGVmaW5lZE1hY3JvLCAiQklOR08iIDoga0NwcFVuZGVmaW5lZE1hY3JvIH0gKQorCisgICAgdGVzdF9jcHBfZXhwcl9zb3VyY2UoICIwIiwgIjAiICkKKyAgICB0ZXN0X2NwcF9leHByX3NvdXJjZSggIjEiLCAiMSIgKQorICAgIHRlc3RfY3BwX2V4cHJfc291cmNlKCAiMSAmJiAxIiwgIjEgJiYgMSIgKQorICAgIHRlc3RfY3BwX2V4cHJfc291cmNlKCAiMSAmJiAwIiwgIjEgJiYgMCIgKQorICAgIHRlc3RfY3BwX2V4cHJfc291cmNlKCAiMCAmJiAxIiwgIjAgJiYgMSIgKQorICAgIHRlc3RfY3BwX2V4cHJfc291cmNlKCAiMCAmJiAwIiwgIjAgJiYgMCIgKQorICAgIHRlc3RfY3BwX2V4cHJfc291cmNlKCAiMSB8fCAxIiwgIjEgfHwgMSIgKQorICAgIHRlc3RfY3BwX2V4cHJfc291cmNlKCAiMSB8fCAwIiwgIjEgfHwgMCIgKQorICAgIHRlc3RfY3BwX2V4cHJfc291cmNlKCAiMCB8fCAxIiwgIjAgfHwgMSIgKQorICAgIHRlc3RfY3BwX2V4cHJfc291cmNlKCAiMCB8fCAwIiwgIjAgfHwgMCIgKQorICAgIHRlc3RfY3BwX2V4cHJfc291cmNlKCAiRVhBTVBMRSIsICJFWEFNUExFIiApCisgICAgdGVzdF9jcHBfZXhwcl9zb3VyY2UoICJFWEFNUExFIC0gMyIsICJFWEFNUExFIC0gMyIgKQorICAgIHRlc3RfY3BwX2V4cHJfc291cmNlKCAiZGVmaW5lZChFWEFNUExFKSIsICJkZWZpbmVkKEVYQU1QTEUpIiApCisgICAgdGVzdF9jcHBfZXhwcl9zb3VyY2UoICJkZWZpbmVkIEVYQU1QTEUiLCAiZGVmaW5lZChFWEFNUExFKSIgKQorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMKKyMjIyMjICAgICAgICAgIEMgUCBQICAgQiBMIE8gQyBLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMKKyMjIyMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworY2xhc3MgQmxvY2s6CisgICAgIiIiYSBjbGFzcyB1c2VkIHRvIG1vZGVsIGEgYmxvY2sgb2YgaW5wdXQgc291cmNlIHRleHQuIHRoZXJlIGFyZSB0d28gYmxvY2sgdHlwZXM6CisgICAgICAgIC0gZGlyZWNpdmUgYmxvY2tzOiBjb250YWluIHRoZSB0b2tlbnMgb2YgYSBzaW5nbGUgcHJlLXByb2Nlc3NvciBkaXJlY3RpdmUgKGUuZy4gI2lmKQorICAgICAgICAtIHRleHQgYmxvY2tzLCBjb250YWluIHRoZSB0b2tlbnMgb2Ygbm9uLWRpcmVjdGl2ZSBibG9ja3MKKworICAgICAgIHRoZSBjcHAgcGFyc2VyIGNsYXNzIGJlbG93IHdpbGwgdHJhbnNmb3JtIGFuIGlucHV0IHNvdXJjZSBmaWxlIGludG8gYSBsaXN0IG9mIEJsb2NrCisgICAgICAgb2JqZWN0cyAoZ3JvdXBlZCBpbiBhIEJsb2NrTGlzdCBvYmplY3QgZm9yIGNvbnZlbmllbmNlKSIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsdG9rZW5zLGRpcmVjdGl2ZT1Ob25lLGxpbmVubz0wKToKKyAgICAgICAgIiIiaW5pdGlhbGl6ZSBhIG5ldyBibG9jaywgaWYgJ2RpcmVjdGl2ZScgaXMgTm9uZSwgdGhpcyBpcyBhIHRleHQgYmxvY2sKKyAgICAgICAgICAgTk9URTogdGhpcyBhdXRvbWF0aWNhbGx5IGNvbnZlcnRzICcjaWZkZWYgTUFDUk8nIGludG8gJyNpZiBkZWZpbmVkKE1BQ1JPKScKKyAgICAgICAgICAgICAgICAgYW5kICcjaWZuZGVmIE1BQ1JPJyBpbnRvICcjaWYgIWRlZmluZWQoTUFDUk8pJyIiIgorICAgICAgICBpZiBkaXJlY3RpdmUgPT0gImlmZGVmIjoKKyAgICAgICAgICAgIHRvayA9IFRva2VuKCkKKyAgICAgICAgICAgIHRvay5zZXQodG9rREVGSU5FRCkKKyAgICAgICAgICAgIHRva2VucyA9IFsgdG9rIF0gKyB0b2tlbnMKKyAgICAgICAgICAgIGRpcmVjdGl2ZSA9ICJpZiIKKworICAgICAgICBlbGlmIGRpcmVjdGl2ZSA9PSAiaWZuZGVmIjoKKyAgICAgICAgICAgIHRvazEgPSBUb2tlbigpCisgICAgICAgICAgICB0b2syID0gVG9rZW4oKQorICAgICAgICAgICAgdG9rMS5zZXQodG9rTk9UKQorICAgICAgICAgICAgdG9rMi5zZXQodG9rREVGSU5FRCkKKyAgICAgICAgICAgIHRva2VucyA9IFsgdG9rMSwgdG9rMiBdICsgdG9rZW5zCisgICAgICAgICAgICBkaXJlY3RpdmUgPSAiaWYiCisKKyAgICAgICAgc2VsZi50b2tlbnMgICAgPSB0b2tlbnMKKyAgICAgICAgc2VsZi5kaXJlY3RpdmUgPSBkaXJlY3RpdmUKKyAgICAgICAgaWYgbGluZW5vID4gMDoKKyAgICAgICAgICAgIHNlbGYubGluZW5vID0gbGluZW5vCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmxpbmVubyA9IHNlbGYudG9rZW5zWzBdLmxpbmVubworCisgICAgICAgIGlmIHNlbGYuaXNJZigpOgorICAgICAgICAgICAgc2VsZi5leHByID0gQ3BwRXhwciggc2VsZi50b2tlbnMgKQorCisgICAgZGVmIGlzRGlyZWN0aXZlKHNlbGYpOgorICAgICAgICAiIiJyZXR1cm5zIFRydWUgaWZmIHRoaXMgaXMgYSBkaXJlY3RpdmUgYmxvY2siIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuZGlyZWN0aXZlICE9IE5vbmUKKworICAgIGRlZiBpc0NvbmRpdGlvbmFsKHNlbGYpOgorICAgICAgICAiIiJyZXR1cm5zIFRydWUgaWZmIHRoaXMgaXMgYSBjb25kaXRpb25hbCBkaXJlY3RpdmUgYmxvY2siIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuZGlyZWN0aXZlIGluIFsiaWYiLCJpZmRlZiIsImlmbmRlZiIsImVsc2UiLCJlbGlmIiwiZW5kaWYiXQorCisgICAgZGVmIGlzRGVmaW5lKHNlbGYpOgorICAgICAgICAiIiJyZXR1cm5zIHRoZSBtYWNybyBuYW1lIGluIGEgI2RlZmluZSBkaXJlY3RpdmUsIG9yIE5vbmUgb3RoZXJ3aXNlIiIiCisgICAgICAgIGlmIHNlbGYuZGlyZWN0aXZlICE9ICJkZWZpbmUiOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICByZXR1cm4gc2VsZi50b2tlbnNbMF0udmFsdWUKKworICAgIGRlZiBpc0lmKHNlbGYpOgorICAgICAgICAiIiJyZXR1cm5zIFRydWUgaWZmIHRoaXMgaXMgYW4gI2lmLWxpa2UgZGlyZWN0aXZlIGJsb2NrIiIiCisgICAgICAgIHJldHVybiBzZWxmLmRpcmVjdGl2ZSBpbiBbImlmIiwiaWZkZWYiLCJpZm5kZWYiLCJlbGlmIl0KKworICAgIGRlZiBpc0luY2x1ZGUoc2VsZik6CisgICAgICAgICIiImNoZWNrcyB3ZXRoZXIgdGhpcyBpcyBhICNpbmNsdWRlIGRpcmVjdGl2ZS4gaWYgdHJ1ZSwgdGhlbiByZXR1cm5zIHRoZQorICAgICAgICAgICBjb3JyZXNwb25kaW5nIGZpbGUgbmFtZSAod2l0aCBicmFja2V0cyBvciBkb3VibGUtcW91dGVzKS4gTm9uZSBvdGhlcndpc2UiIiIKKyAgICAgICAgaWYgc2VsZi5kaXJlY3RpdmUgIT0gImluY2x1ZGUiOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICAjcHJpbnQgImlpaSAiICsgcmVwcihzZWxmLnRva2VucykKKyAgICAgICAgaWYgc2VsZi50b2tlbnNbMF0uaWQgPT0gdG9rU1RSSU5HOgorICAgICAgICAgICAgIyBhIGRvdWJsZS1xdW90ZSBpbmNsdWRlLCB0aGF0J3MgZWFzeQorICAgICAgICAgICAgcmV0dXJuIHNlbGYudG9rZW5zWzBdLnZhbHVlCisKKyAgICAgICAgIyB3ZSBvbmx5IHdhbnQgdGhlIGJyYWNrZXQgcGFydCwgbm90IGFueSBjb21tZW50cyBvciBqdW5rIGFmdGVyIGl0CisgICAgICAgIGlmIHNlbGYudG9rZW5zWzBdLmlkID09ICI8IjoKKyAgICAgICAgICAgIGkgICA9IDAKKyAgICAgICAgICAgIHRvayA9IHNlbGYudG9rZW5zCisgICAgICAgICAgICBuICAgPSBsZW4odG9rKQorICAgICAgICAgICAgd2hpbGUgaSA8IG4gYW5kIHRva1tpXS5pZCAhPSAiPiI6CisgICAgICAgICAgICAgICAgaSArPSAxCisKKyAgICAgICAgICAgIGlmIGkgPj0gbjoKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgICAgICByZXR1cm4gc3RyaW5nLmpvaW4oWyBzdHIoeCkgZm9yIHggaW4gdG9rWzppKzFdIF0sIiIpCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICIiImdlbmVyYXRlIHRoZSByZXByZXNlbnRhdGlvbiBvZiBhIGdpdmVuIGJsb2NrIiIiCisgICAgICAgIGlmIHNlbGYuZGlyZWN0aXZlOgorICAgICAgICAgICAgcmVzdWx0ID0gIiMlcyAiICUgc2VsZi5kaXJlY3RpdmUKKyAgICAgICAgICAgIGlmIHNlbGYuaXNJZigpOgorICAgICAgICAgICAgICAgIHJlc3VsdCArPSByZXByKHNlbGYuZXhwcikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZm9yIHRvayBpbiBzZWxmLnRva2VuczoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHJlcHIodG9rKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVzdWx0ID0gIiIKKyAgICAgICAgICAgIGZvciB0b2sgaW4gc2VsZi50b2tlbnM6CisgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHJlcHIodG9rKQorCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAiIiJnZW5lcmF0ZSB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgZ2l2ZW4gYmxvY2siIiIKKyAgICAgICAgaWYgc2VsZi5kaXJlY3RpdmU6CisgICAgICAgICAgICBpZiBzZWxmLmRpcmVjdGl2ZSA9PSAiaWYiOgorICAgICAgICAgICAgICAgICMgc21hbGwgb3B0aW1pemF0aW9uIHRvIHJlLWdlbmVyYXRlICNpZmRlZiBhbmQgI2lmbmRlZgorICAgICAgICAgICAgICAgIGUgPSBzZWxmLmV4cHIuZXhwcgorICAgICAgICAgICAgICAgIG9wID0gZVswXQorICAgICAgICAgICAgICAgIGlmIG9wID09ICJkZWZpbmVkIjoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gIiNpZmRlZiAlcyIgJSBlWzFdCisgICAgICAgICAgICAgICAgZWxpZiBvcCA9PSAiISIgYW5kIGVbMV1bMF0gPT0gImRlZmluZWQiOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSAiI2lmbmRlZiAlcyIgJSBlWzFdWzFdCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gIiNpZiAiICsgc3RyKHNlbGYuZXhwcikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gIiMlcyIgJSBzZWxmLmRpcmVjdGl2ZQorICAgICAgICAgICAgICAgIGlmIGxlbihzZWxmLnRva2Vucyk6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAiICIKKyAgICAgICAgICAgICAgICBmb3IgdG9rIGluIHNlbGYudG9rZW5zOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gc3RyKHRvaykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlc3VsdCA9ICIiCisgICAgICAgICAgICBmb3IgdG9rIGluIHNlbGYudG9rZW5zOgorICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzdHIodG9rKQorCisgICAgICAgIHJldHVybiByZXN1bHQKKworCitjbGFzcyBCbG9ja0xpc3Q6CisgICAgIiIiYSBjb252ZW5pZW5jZSBjbGFzcyB1c2VkIHRvIGhvbGQgYW5kIHByb2Nlc3MgYSBsaXN0IG9mIGJsb2NrcyByZXR1cm5lZCBieQorICAgICAgIHRoZSBjcHAgcGFyc2VyIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsYmxvY2tzKToKKyAgICAgICAgc2VsZi5ibG9ja3MgPSBibG9ja3MKKworICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gbGVuKHNlbGYuYmxvY2tzKQorCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsbik6CisgICAgICAgIHJldHVybiBzZWxmLmJsb2Nrc1tuXQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gcmVwcihzZWxmLmJsb2NrcykKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXN1bHQgPSAiIgorICAgICAgICBmb3IgYiBpbiBzZWxmLmJsb2NrczoKKyAgICAgICAgICAgIHJlc3VsdCArPSBzdHIoYikKKyAgICAgICAgICAgIGlmIGIuaXNEaXJlY3RpdmUoKToKKyAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ1xuJworICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgIG9wdGltaXplSWYwMShzZWxmKToKKyAgICAgICAgIiIicmVtb3ZlIHRoZSBjb2RlIGJldHdlZW4gI2lmIDAgLi4gI2VuZGlmIGluIGEgQmxvY2tMaXN0IiIiCisgICAgICAgIHNlbGYuYmxvY2tzID0gb3B0aW1pemVfaWYwMShzZWxmLmJsb2NrcykKKworICAgIGRlZiBvcHRpbWl6ZU1hY3JvcyhzZWxmLCBtYWNyb3MpOgorICAgICAgICAiIiJyZW1vdmUga25vd24gZGVmaW5lZCBhbmQgdW5kZWZpbmVkIG1hY3JvcyBmcm9tIGEgQmxvY2tMaXN0IiIiCisgICAgICAgIGZvciBiIGluIHNlbGYuYmxvY2tzOgorICAgICAgICAgICAgaWYgYi5pc0lmKCk6CisgICAgICAgICAgICAgICAgYi5leHByLm9wdGltaXplKG1hY3JvcykKKworICAgIGRlZiByZW1vdmVNYWNyb0RlZmluZXMoc2VsZixtYWNyb3MpOgorICAgICAgICAiIiJyZW1vdmUga25vd24gbWFjcm8gZGVmaW5pdGlvbnMgZnJvbSBhIEJsb2NrTGlzdCIiIgorICAgICAgICBzZWxmLmJsb2NrcyA9IHJlbW92ZV9tYWNyb19kZWZpbmVzKHNlbGYuYmxvY2tzLG1hY3JvcykKKworICAgIGRlZiByZW1vdmVQcmVmaXhlZChzZWxmLHByZWZpeCxuYW1lcyk6CisgICAgICAgIGZvciBiIGluIHNlbGYuYmxvY2tzOgorICAgICAgICAgICAgaWYgYi5pc0lmKCk6CisgICAgICAgICAgICAgICAgYi5leHByLnJlbW92ZVByZWZpeGVkKHByZWZpeCxuYW1lcykKKworICAgIGRlZiBvcHRpbWl6ZUFsbChzZWxmLG1hY3Jvcyk6CisgICAgICAgIHNlbGYub3B0aW1pemVNYWNyb3MobWFjcm9zKQorICAgICAgICBzZWxmLm9wdGltaXplSWYwMSgpCisgICAgICAgIHJldHVybgorCisgICAgZGVmIGZpbmRJbmNsdWRlcyhzZWxmKToKKyAgICAgICAgIiIicmV0dXJuIHRoZSBsaXN0IG9mIGluY2x1ZGVkIGZpbGVzIGluIGEgQmxvY2tMaXN0IiIiCisgICAgICAgIHJlc3VsdCA9IFtdCisgICAgICAgIGZvciBiIGluIHNlbGYuYmxvY2tzOgorICAgICAgICAgICAgaSA9IGIuaXNJbmNsdWRlKCkKKyAgICAgICAgICAgIGlmIGk6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChpKQorCisgICAgICAgIHJldHVybiByZXN1bHQKKworCisgICAgZGVmIHdyaXRlKHNlbGYsb3V0KToKKyAgICAgICAgb3V0LndyaXRlKHN0cihzZWxmKSkKKworICAgIGRlZiByZW1vdmVDb21tZW50cyhzZWxmKToKKyAgICAgICAgZm9yIGIgaW4gc2VsZi5ibG9ja3M6CisgICAgICAgICAgICBmb3IgdG9rIGluIGIudG9rZW5zOgorICAgICAgICAgICAgICAgIGlmIHRvay5pZCA9PSB0b2tTUEFDRToKKyAgICAgICAgICAgICAgICAgICAgdG9rLnZhbHVlID0gIiAiCisKKyAgICBkZWYgcmVtb3ZlRW1wdHlMaW5lcyhzZWxmKToKKyAgICAgICAgIyBzdGF0ZSA9IDEgPT4gcHJldmlvdXMgbGluZSB3YXMgdG9rTE4KKyAgICAgICAgIyBzdGF0ZSA9IDAgPT4gcHJldmlvdXMgbGluZSB3YXMgZGlyZWN0aXZlCisgICAgICAgIHN0YXRlICA9IDEKKyAgICAgICAgZm9yIGIgaW4gc2VsZi5ibG9ja3M6CisgICAgICAgICAgICBpZiBiLmlzRGlyZWN0aXZlKCk6CisgICAgICAgICAgICAgICAgI3ByaW50ICIkJCQgZGlyZWN0aXZlICVzIiAlIHN0cihiKQorICAgICAgICAgICAgICAgIHN0YXRlID0gMAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIGEgdG9rTE4gZm9sbG93ZWQgYnkgc3BhY2VzIGlzIHJlcGxhY2VkIGJ5IGEgc2luZ2xlIHRva0xOCisgICAgICAgICAgICAgICAgIyBzZXZlcmFsIHN1Y2Nlc3NpdmUgdG9rTE4gYXJlIHJlcGxhY2VkIGJ5IGEgc2luZ2xlIG9uZQorICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICBkc3QgICA9IFtdCisgICAgICAgICAgICAgICAgc3JjICAgPSBiLnRva2VucworICAgICAgICAgICAgICAgIG4gICAgID0gbGVuKHNyYykKKyAgICAgICAgICAgICAgICBpICAgICA9IDAKKyAgICAgICAgICAgICAgICAjcHJpbnQgIiQkJCBwYXJzaW5nICVzIiAlIHJlcHIoc3JjKQorICAgICAgICAgICAgICAgIHdoaWxlIGkgPCBuOgorICAgICAgICAgICAgICAgICAgICAjIGZpbmQgZmluYWwgdG9rTE4KKyAgICAgICAgICAgICAgICAgICAgaiA9IGkKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgaiA8IG4gYW5kIHNyY1tqXS5pZCAhPSB0b2tMTjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGogKz0gMQorCisgICAgICAgICAgICAgICAgICAgIGlmIGogPj0gbjoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgdWhoaAorICAgICAgICAgICAgICAgICAgICAgICAgZHN0ICs9IHNyY1tpOl0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgICAgICAgICAgaWYgc3JjW2ldLmlkID09IHRva1NQQUNFOgorICAgICAgICAgICAgICAgICAgICAgICAgayA9IGkrMQorICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgc3JjW2tdLmlkID09IHRva1NQQUNFOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgKz0gMQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBrID09IGo6ICMgZW1wdHkgbGluZXMgd2l0aCBzcGFjZXMgaW4gaXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gaiAgIyByZW1vdmUgdGhlIHNwYWNlcworCisgICAgICAgICAgICAgICAgICAgIGlmIGkgPT0gajoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgYW4gZW1wdHkgbGluZQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc3RhdGUgPT0gMToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpICs9IDEgICAjIHJlbW92ZSBpdAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3QuYXBwZW5kKHNyY1tpXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpICAgKz0gMQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgIyB0aGlzIGxpbmUgaXMgbm90IGVtcHR5LCByZW1vdmUgdHJhaWxpbmcgc3BhY2VzCisgICAgICAgICAgICAgICAgICAgICAgICBrID0gagorICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgayA+IGkgYW5kIHNyY1trLTFdLmlkID09IHRva1NQQUNFOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgLT0gMQorCisgICAgICAgICAgICAgICAgICAgICAgICBubiA9IGkKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIG5uIDwgazoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3QuYXBwZW5kKHNyY1tubl0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm4gKz0gMQorICAgICAgICAgICAgICAgICAgICAgICAgZHN0LmFwcGVuZChzcmNbal0pCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IDAKKyAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBqKzEKKworICAgICAgICAgICAgICAgIGIudG9rZW5zID0gZHN0CisKKyAgICBkZWYgcmVtb3ZlVmFyc0FuZEZ1bmNzKHNlbGYsa25vd25TdGF0aWNzPXNldCgpKToKKyAgICAgICAgIiIicmVtb3ZlIGFsbCBleHRlcm4gYW5kIHN0YXRpYyBkZWNsYXJhdGlvbnMgY29ycmVzcG9uZGluZworICAgICAgICAgICB0byB2YXJpYWJsZSBhbmQgZnVuY3Rpb24gZGVjbGFyYXRpb25zLiB3ZSBvbmx5IGFjY2VwdCB0eXBlZGVmcworICAgICAgICAgICBhbmQgZW51bS9zdHJ1Y3RzL3VuaW9uIGRlY2xhcmF0aW9ucy4KKworICAgICAgICAgICBob3dldmVyLCB3ZSBrZWVwIHRoZSBkZWZpbml0aW9ucyBjb3JyZXNwb25kaW5nIHRvIHRoZSBzZXQKKyAgICAgICAgICAgb2Yga25vd24gc3RhdGljIGlubGluZSBmdW5jdGlvbnMgaW4gdGhlIHNldCAna25vd25TdGF0aWNzJywKKyAgICAgICAgICAgd2hpY2ggaXMgdXNlZnVsIGZvciBvcHRpbWl6ZWQgYnl0ZW9yZGVyIHN3YXAgZnVuY3Rpb25zIGFuZAorICAgICAgICAgICBzdHVmZiBsaWtlIHRoYXQuCisgICAgICAgICAgICIiIgorICAgICAgICAjIHN0YXRlID0gMSA9PiB0eXBlZGVmL3N0cnVjdCBlbmNvdW50ZXJlZAorICAgICAgICAjIHN0YXRlID0gMiA9PiB2YXJzIG9yIGZ1bmMgZGVjbGFyYXRpb24gZW5jb3VudGVyZWQsIHNraXBwaW5nIHVudGlsICI7IgorICAgICAgICAjIHN0YXRlID0gMCA9PiBub3JtYWwgKGkuZS4gTE4gKyBzcGFjZXMpCisgICAgICAgIHN0YXRlICAgICAgPSAwCisgICAgICAgIGRlcHRoICAgICAgPSAwCisgICAgICAgIGJsb2NrczIgICAgPSBbXQorICAgICAgICBmb3IgYiBpbiBzZWxmLmJsb2NrczoKKyAgICAgICAgICAgIGlmIGIuaXNEaXJlY3RpdmUoKToKKyAgICAgICAgICAgICAgICBibG9ja3MyLmFwcGVuZChiKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBuICAgICA9IGxlbihiLnRva2VucykKKyAgICAgICAgICAgICAgICBpICAgICA9IDAKKyAgICAgICAgICAgICAgICBmaXJzdCA9IDAKKyAgICAgICAgICAgICAgICBpZiBzdGF0ZSA9PSAyOgorICAgICAgICAgICAgICAgICAgICBmaXJzdCA9IG4KKyAgICAgICAgICAgICAgICB3aGlsZSBpIDwgbjoKKyAgICAgICAgICAgICAgICAgICAgdG9rID0gYi50b2tlbnNbaV0KKyAgICAgICAgICAgICAgICAgICAgaWYgc3RhdGUgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJhZCA9IDAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRvay5pZCBpbiBbdG9rTE4sIHRva1NQQUNFXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgICAgICAgICBlbGlmIHRvay52YWx1ZSBpbiBbICdzdHJ1Y3QnLCAndHlwZWRlZicsICdlbnVtJywgJ3VuaW9uJywgJ19fZXh0ZW5zaW9uX18nIF06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAxCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRvay52YWx1ZSBpbiBbICdzdGF0aWMnLCAnZXh0ZXJuJywgJ19fS0lOTElORScgXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiA9IGkrMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZGVudCA9ICIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIGogPCBuIGFuZCBub3QgKGIudG9rZW5zW2pdLmlkIGluIFsgJygnLCAnOycgXSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBiLnRva2Vuc1tqXS5pZCA9PSB0b2tJREVOVDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZGVudCA9IGIudG9rZW5zW2pdLnZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqICs9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaiA8IG4gYW5kIGlkZW50IGluIGtub3duU3RhdGljczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdGhpcyBpcyBhIGtub3duIHN0YXRpYywgd2UncmUgZ29pbmcgdG8ga2VlcCBpdHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZGVmaW5pdGlvbiBpbiB0aGUgZmluYWwgb3V0cHV0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNwcmludCAiIyMjIHNraXAgc3RhdGljICclcyciICUgaWRlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHN0YXRlID09IDA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGkgPiBmaXJzdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNwcmludCAiIyMjIGludGVybWVkaWF0ZSBmcm9tICclcyc6ICclcyciICUgKHRvay52YWx1ZSwgcmVwcihiLnRva2Vuc1tmaXJzdDppXSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja3MyLmFwcGVuZCggQmxvY2soYi50b2tlbnNbZmlyc3Q6aV0pICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0ID0gbgorCisgICAgICAgICAgICAgICAgICAgIGVsc2U6ICAjIHN0YXRlID4gMAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdG9rLmlkID09ICd7JzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXB0aCArPSAxCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgdG9rLmlkID09ICd9JzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBkZXB0aCA+IDA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHRoIC09IDEKKworICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiBkZXB0aCA9PSAwIGFuZCB0b2suaWQgPT0gJzsnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHN0YXRlID09IDI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0ID0gaSsxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAwCisKKyAgICAgICAgICAgICAgICAgICAgaSArPSAxCisKKyAgICAgICAgICAgICAgICBpZiBpID4gZmlyc3Q6CisgICAgICAgICAgICAgICAgICAgICNwcmludCAiIyMjIGZpbmFsICclcyciICUgcmVwcihiLnRva2Vuc1tmaXJzdDppXSkKKyAgICAgICAgICAgICAgICAgICAgYmxvY2tzMi5hcHBlbmQoIEJsb2NrKGIudG9rZW5zW2ZpcnN0OmldKSApCisKKyAgICAgICAgc2VsZi5ibG9ja3MgPSBibG9ja3MyCisKKyAgICBkZWYgaW5zZXJ0RGlzY2xhaW1lcihzZWxmLGRpc2NsYWltZXI9Ii8qIGF1dG8tZ2VuZXJhdGVkIGZpbGUsIERPIE5PVCBFRElUICovIik6CisgICAgICAgICIiImluc2VydCB5b3VyIHN0YW5kYXJkIGlzc3VlIGRpc2NsYWltZXIgdGhhdCB0aGlzIGlzIGFuCisgICAgICAgICAgIGF1dG8tZ2VuZXJhdGVkIGZpbGUsIGV0Yy4uIiIiCisgICAgICAgIHRva2VucyA9IENwcExpbmVUb2tlbml6ZXIoIGRpc2NsYWltZXIgKS50b1Rva2VuTGlzdCgpCisgICAgICAgIHRva2VucyA9IHRva2Vuc1s6LTFdICAjIHJlbW92ZSB0cmFpbGluZyB0b2tMTgorICAgICAgICBzZWxmLmJsb2NrcyA9IFsgQmxvY2sodG9rZW5zKSBdICsgc2VsZi5ibG9ja3MKKworY2xhc3MgQmxvY2tQYXJzZXI6CisgICAgIiIiYSBjbGFzcyB1c2VkIHRvIGNvbnZlcnQgYW4gaW5wdXQgc291cmNlIGZpbGUgaW50byBhIEJsb2NrTGlzdCBvYmplY3QiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLHRva3plcj1Ob25lKToKKyAgICAgICAgIiIiaW5pdGlhbGl6ZSBhIGJsb2NrIHBhcnNlci4gdGhlIGlucHV0IHNvdXJjZSBpcyBwcm92aWRlZCB0aHJvdWdoIGEgVG9rZW5pemVyCisgICAgICAgICAgIG9iamVjdCIiIgorICAgICAgICBzZWxmLnJlc2V0KHRva3plcikKKworICAgIGRlZiByZXNldChzZWxmLHRva3plcik6CisgICAgICAgIHNlbGYuc3RhdGUgID0gMQorICAgICAgICBzZWxmLnRva3plciA9IHRva3plcgorCisgICAgZGVmIGdldEJsb2NrcyhzZWxmLHRva3plcj1Ob25lKToKKyAgICAgICAgIiIidG9rZW5pemUgYW5kIHBhcnNlIHRoZSBpbnB1dCBzb3VyY2UsIHJldHVybiBhIEJsb2NrTGlzdCBvYmplY3QKKyAgICAgICAgICAgTk9URTogZW1wdHkgYW5kIGxpbmUtbnVtYmVyaW5nIGRpcmVjdGl2ZXMgYXJlIGlnbm9yZWQgYW5kIHJlbW92ZWQKKyAgICAgICAgICAgICAgICAgZnJvbSB0aGUgcmVzdWx0LiBhcyBhIGNvbnNlcXVlbmNlLCBpdCBpcyBwb3NzaWJsZSB0byBoYXZlCisgICAgICAgICAgICAgICAgIHR3byBzdWNjZXNzaXZlIHRleHQgYmxvY2tzIGluIHRoZSByZXN1bHQiIiIKKyAgICAgICAgIyBzdGF0ZSAwID0+IGluIHNvdXJjZSBjb2RlCisgICAgICAgICMgc3RhdGUgMSA9PiBpbiBzb3VyY2UgY29kZSwgYWZ0ZXIgYSBMTgorICAgICAgICAjIHN0YXRlIDIgPT4gaW4gc291cmNlIGNvZGUsIGFmdGVyIExOIHRoZW4gc29tZSBzcGFjZQorICAgICAgICBzdGF0ZSAgID0gMQorICAgICAgICBsYXN0TE4gID0gMAorICAgICAgICBjdXJyZW50ID0gW10KKyAgICAgICAgYmxvY2tzICA9IFtdCisKKyAgICAgICAgaWYgdG9remVyID09IE5vbmU6CisgICAgICAgICAgICB0b2t6ZXIgPSBzZWxmLnRva3plcgorCisgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICB0b2sgPSB0b2t6ZXIuZ2V0VG9rZW4oKQorICAgICAgICAgICAgaWYgdG9rLmlkID09IHRva0VPRjoKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICBpZiB0b2suaWQgPT0gdG9rTE46CisgICAgICAgICAgICAgICAgc3RhdGUgICAgPSAxCisgICAgICAgICAgICAgICAgY3VycmVudC5hcHBlbmQodG9rKQorICAgICAgICAgICAgICAgIGxhc3RMTiAgID0gbGVuKGN1cnJlbnQpCisKKyAgICAgICAgICAgIGVsaWYgdG9rLmlkID09IHRva1NQQUNFOgorICAgICAgICAgICAgICAgIGlmIHN0YXRlID09IDE6CisgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gMgorICAgICAgICAgICAgICAgIGN1cnJlbnQuYXBwZW5kKHRvaykKKworICAgICAgICAgICAgZWxpZiB0b2suaWQgPT0gIiMiOgorICAgICAgICAgICAgICAgIGlmIHN0YXRlID4gMDoKKyAgICAgICAgICAgICAgICAgICAgIyB0aGlzIGlzIHRoZSBzdGFydCBvZiBhIGRpcmVjdGl2ZQorCisgICAgICAgICAgICAgICAgICAgIGlmIGxhc3RMTiA+IDA6CisgICAgICAgICAgICAgICAgICAgICAgICAjIHJlY29yZCBwcmV2aW91cyB0b2tlbnMgYXMgdGV4dCBibG9jaworICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2sgICA9IEJsb2NrKGN1cnJlbnRbOmxhc3RMTl0pCisgICAgICAgICAgICAgICAgICAgICAgICBibG9ja3MuYXBwZW5kKGJsb2NrKQorICAgICAgICAgICAgICAgICAgICAgICAgbGFzdExOICA9IDAKKworICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gW10KKworICAgICAgICAgICAgICAgICAgICAjIHNraXAgc3BhY2VzIGFmdGVyIHRoZSAjCisgICAgICAgICAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgICAgICAgICB0b2sgPSB0b2t6ZXIuZ2V0VG9rZW4oKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdG9rLmlkICE9IHRva1NQQUNFOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgICAgICAgICAgaWYgdG9rLmlkICE9IHRva0lERU5UOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBlbXB0eSBvciBsaW5lLW51bWJlcmluZywgaWdub3JlIGl0CisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0b2suaWQgIT0gdG9rTE4gYW5kIHRvay5pZCAhPSB0b2tFT0Y6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rID0gdG9remVyLmdldFRva2VuKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdG9rLmlkID09IHRva0xOIG9yIHRvay5pZCA9PSB0b2tFT0Y6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmUgPSB0b2sudmFsdWUKKyAgICAgICAgICAgICAgICAgICAgbGluZW5vICAgID0gdG9rLmxpbmVubworCisgICAgICAgICAgICAgICAgICAgICMgc2tpcCBzcGFjZXMKKyAgICAgICAgICAgICAgICAgICAgdG9rID0gdG9remVyLmdldFRva2VuKCkKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgdG9rLmlkID09IHRva1NQQUNFOgorICAgICAgICAgICAgICAgICAgICAgICAgdG9rID0gdG9remVyLmdldFRva2VuKCkKKworICAgICAgICAgICAgICAgICAgICAjIHRoZW4gcmVjb3JkIHRva2VucyB1bnRpbCBMTgorICAgICAgICAgICAgICAgICAgICBkaXJ0b2tlbnMgPSBbXQorICAgICAgICAgICAgICAgICAgICB3aGlsZSB0b2suaWQgIT0gdG9rTE4gYW5kIHRvay5pZCAhPSB0b2tFT0Y6CisgICAgICAgICAgICAgICAgICAgICAgICBkaXJ0b2tlbnMuYXBwZW5kKHRvaykKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvayA9IHRva3plci5nZXRUb2tlbigpCisKKyAgICAgICAgICAgICAgICAgICAgYmxvY2sgPSBCbG9jayhkaXJ0b2tlbnMsZGlyZWN0aXZlLGxpbmVubykKKyAgICAgICAgICAgICAgICAgICAgYmxvY2tzLmFwcGVuZChibG9jaykKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUgICA9IDEKKworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IDAKKyAgICAgICAgICAgICAgICBjdXJyZW50LmFwcGVuZCh0b2spCisKKyAgICAgICAgaWYgbGVuKGN1cnJlbnQpID4gMDoKKyAgICAgICAgICAgIGJsb2NrID0gQmxvY2soY3VycmVudCkKKyAgICAgICAgICAgIGJsb2Nrcy5hcHBlbmQoYmxvY2spCisKKyAgICAgICAgcmV0dXJuIEJsb2NrTGlzdChibG9ja3MpCisKKyAgICBkZWYgcGFyc2Uoc2VsZix0b2t6ZXIpOgorICAgICAgICByZXR1cm4gc2VsZi5nZXRCbG9ja3MoIHRva3plciApCisKKyAgICBkZWYgcGFyc2VMaW5lcyhzZWxmLGxpbmVzKToKKyAgICAgICAgIiIicGFyc2UgYSBsaXN0IG9mIHRleHQgbGluZXMgaW50byBhIEJsb2NrTGlzdCBvYmplY3QiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuZ2V0QmxvY2tzKCBDcHBMaW5lc1Rva2VuaXplcihsaW5lcykgKQorCisgICAgZGVmIHBhcnNlRmlsZShzZWxmLHBhdGgpOgorICAgICAgICAiIiJwYXJzZSBhIGZpbGUgaW50byBhIEJsb2NrTGlzdCBvYmplY3QiIiIKKyAgICAgICAgZmlsZSA9IG9wZW4ocGF0aCwgInJ0IikKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5nZXRCbG9ja3MoIENwcEZpbGVUb2tlbml6ZXIoZmlsZSkgKQorICAgICAgICBmaWxlLmNsb3NlKCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisKK2RlZiB0ZXN0X2Jsb2NrX3BhcnNpbmcobGluZXMsZXhwZWN0ZWQpOgorICAgIGJsb2NrcyA9IEJsb2NrUGFyc2VyKCkucGFyc2UoIENwcExpbmVzVG9rZW5pemVyKGxpbmVzKSApCisgICAgaWYgbGVuKGJsb2NrcykgIT0gbGVuKGV4cGVjdGVkKToKKyAgICAgICAgcmFpc2UgQmFkRXhwZWN0ZWRUb2tlbiwgInBhcnNlci5idWlsZEJsb2NrcyByZXR1cm5lZCAnJXMnIGV4cGVjdGluZyAnJXMnIiBcCisgICAgICAgICAgICAgICUgKHN0cihibG9ja3MpLCByZXByKGV4cGVjdGVkKSkKKyAgICBmb3IgbiBpbiByYW5nZShsZW4oYmxvY2tzKSk6CisgICAgICAgIGlmIHN0cihibG9ja3Nbbl0pICE9IGV4cGVjdGVkW25dOgorICAgICAgICAgICAgcmFpc2UgQmFkRXhwZWN0ZWRUb2tlbiwgInBhcnNlci5idWlsZEJsb2NrcygpWyVkXSBpcyAnJXMnLCBleHBlY3RpbmcgJyVzJyIgXAorICAgICAgICAgICAgICAgICAgJSAobiwgc3RyKGJsb2Nrc1tuXSksIGV4cGVjdGVkW25dKQorICAgICNmb3IgYmxvY2sgaW4gYmxvY2tzOgorICAgICMgICAgcHJpbnQgYmxvY2sKKworZGVmIHRlc3RfQmxvY2tQYXJzZXIoKToKKyAgICB0ZXN0X2Jsb2NrX3BhcnNpbmcoWyIjZXJyb3IgaGVsbG8iXSxbIiNlcnJvciBoZWxsbyJdKQorICAgIHRlc3RfYmxvY2tfcGFyc2luZyhbICJmb28iLCAiIiwgImJhciIgXSwgWyAiZm9vXG5cbmJhclxuIiBdKQorICAgIHRlc3RfYmxvY2tfcGFyc2luZyhbICJmb28iLCAiICAjICAiLCAiYmFyIiBdLCBbICJmb29cbiIsImJhclxuIiBdKQorICAgIHRlc3RfYmxvY2tfcGFyc2luZyhcCisgICAgICAgIFsgImZvbyIsICIgICAjICAiLCAiICAjICAvKiBhaGFoICovIGlmIGRlZmluZWQoX19LRVJORUxfXykgIiwgImJhciIsICIjZW5kaWYiIF0sCisgICAgICAgIFsgImZvb1xuIiwgIiNpZmRlZiBfX0tFUk5FTF9fIiwgImJhclxuIiwgIiNlbmRpZiIgXSApCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIyMjIworIyMjIyMgICAgICAgIEIgTCBPIEMgSyAgIEwgSSBTIFQgICBPIFAgVCBJIE0gSSBaIEEgVCBJIE8gTiAgICAgICAgICAgICAgICAgICAgICAjIyMjIworIyMjIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitkZWYgIHJlbW92ZV9tYWNyb19kZWZpbmVzKCBibG9ja3MsIGV4Y2x1ZGVkTWFjcm9zPXNldCgpICk6CisgICAgIiIicmVtb3ZlIG1hY3JvIGRlZmluaXRpb25zIGxpa2UgI2RlZmluZSA8bWFjcm9OYW1lPiAgLi4uLiIiIgorICAgIHJlc3VsdCA9IFtdCisgICAgZm9yIGIgaW4gYmxvY2tzOgorICAgICAgICBtYWNyb05hbWUgPSBiLmlzRGVmaW5lKCkKKyAgICAgICAgaWYgbWFjcm9OYW1lID09IE5vbmUgb3Igbm90IG1hY3JvTmFtZSBpbiBleGNsdWRlZE1hY3JvczoKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoYikKKworICAgIHJldHVybiByZXN1bHQKKworZGVmICBmaW5kX21hdGNoaW5nX2VuZGlmKCBibG9ja3MsIGkgKToKKyAgICBuICAgICA9IGxlbihibG9ja3MpCisgICAgZGVwdGggPSAxCisgICAgd2hpbGUgaSA8IG46CisgICAgICAgIGlmIGJsb2Nrc1tpXS5pc0RpcmVjdGl2ZSgpOgorICAgICAgICAgICAgZGlyID0gYmxvY2tzW2ldLmRpcmVjdGl2ZQorICAgICAgICAgICAgaWYgZGlyIGluIFsgImlmIiwgImlmbmRlZiIsICJpZmRlZiIgXToKKyAgICAgICAgICAgICAgICBkZXB0aCArPSAxCisgICAgICAgICAgICBlbGlmIGRlcHRoID09IDEgYW5kIGRpciBpbiBbICJlbHNlIiwgImVsaWYiIF06CisgICAgICAgICAgICAgICAgcmV0dXJuIGkKKyAgICAgICAgICAgIGVsaWYgZGlyID09ICJlbmRpZiI6CisgICAgICAgICAgICAgICAgZGVwdGggLT0gMQorICAgICAgICAgICAgICAgIGlmIGRlcHRoID09IDA6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBpCisgICAgICAgIGkgKz0gMQorICAgIHJldHVybiBpCisKK2RlZiAgb3B0aW1pemVfaWYwMSggYmxvY2tzICk6CisgICAgIiIicmVtb3ZlIHRoZSBjb2RlIGJldHdlZW4gI2lmIDAgLi4gI2VuZGlmIGluIGEgbGlzdCBvZiBDcHBCbG9ja3MiIiIKKyAgICBpID0gMAorICAgIG4gPSBsZW4oYmxvY2tzKQorICAgIHJlc3VsdCA9IFtdCisgICAgd2hpbGUgaSA8IG46CisgICAgICAgIGogPSBpCisgICAgICAgIHdoaWxlIGogPCBuIGFuZCBub3QgYmxvY2tzW2pdLmlzSWYoKToKKyAgICAgICAgICAgIGogKz0gMQorICAgICAgICBpZiBqID4gaToKKyAgICAgICAgICAgIEQyKCJhcHBlbmRpbmcgbGluZXMgJWQgdG8gJWQiICUgKGJsb2Nrc1tpXS5saW5lbm8sIGJsb2Nrc1tqLTFdLmxpbmVubykpCisgICAgICAgICAgICByZXN1bHQgKz0gYmxvY2tzW2k6al0KKyAgICAgICAgaWYgaiA+PSBuOgorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZXhwciA9IGJsb2Nrc1tqXS5leHByCisgICAgICAgIHIgICAgPSBleHByLnRvSW50KCkKKyAgICAgICAgaWYgciA9PSBOb25lOgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChibG9ja3Nbal0pCisgICAgICAgICAgICBpID0gaiArIDEKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgaWYgciA9PSAwOgorICAgICAgICAgICAgIyBpZiAwID0+IHNraXAgZXZlcnl0aGluZyB1bnRpbCB0aGUgY29ycmVzcG9uZGluZyAjZW5kaWYKKyAgICAgICAgICAgIGogPSBmaW5kX21hdGNoaW5nX2VuZGlmKCBibG9ja3MsIGorMSApCisgICAgICAgICAgICBpZiBqID49IG46CisgICAgICAgICAgICAgICAgIyB1bnRlcm1pbmF0ZWQgI2lmIDAsIGZpbmlzaCBoZXJlCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGRpciA9IGJsb2Nrc1tqXS5kaXJlY3RpdmUKKyAgICAgICAgICAgIGlmIGRpciA9PSAiZW5kaWYiOgorICAgICAgICAgICAgICAgIEQyKCJyZW1vdmUgJ2lmIDAnIC4uICdlbmRpZicgKGxpbmVzICVkIHRvICVkKSIgJSAoYmxvY2tzW2ldLmxpbmVubywgYmxvY2tzW2pdLmxpbmVubykpCisgICAgICAgICAgICAgICAgaSA9IGogKyAxCisgICAgICAgICAgICBlbGlmIGRpciA9PSAiZWxzZSI6CisgICAgICAgICAgICAgICAgIyBjb252ZXJ0ICdlbHNlJyBpbnRvICdpZiAxJworICAgICAgICAgICAgICAgIEQyKCJjb252ZXJ0ICdpZiAwJyAuLiAnZWxzZScgaW50byAnaWYgMScgKGxpbmVzICVkIHRvICVkKSIgJSAoYmxvY2tzW2ldLmxpbmVubywgYmxvY2tzW2otMV0ubGluZW5vKSkKKyAgICAgICAgICAgICAgICBibG9ja3Nbal0uZGlyZWN0aXZlID0gImlmIgorICAgICAgICAgICAgICAgIGJsb2Nrc1tqXS5leHByICAgICAgPSBDcHBFeHByKCBDcHBMaW5lVG9rZW5pemVyKCIxIikudG9Ub2tlbkxpc3QoKSApCisgICAgICAgICAgICAgICAgaSA9IGoKKyAgICAgICAgICAgIGVsaWYgZGlyID09ICJlbGlmIjoKKyAgICAgICAgICAgICAgICAjIGNvbnZlcnQgJ2VsaWYnIGludG8gJ2lmJworICAgICAgICAgICAgICAgIEQyKCJjb252ZXJ0ICdpZiAwJyAuLiAnZWxpZicgaW50byAnaWYnIikKKyAgICAgICAgICAgICAgICBibG9ja3Nbal0uZGlyZWN0aXZlID0gImlmIgorICAgICAgICAgICAgICAgIGkgPSBqCisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICMgaWYgMSA9PiBmaW5kIGNvcnJlc3BvbmRpbmcgZW5kaWYgYW5kIHJlbW92ZS90cmFuc2Zvcm0gdGhlbQorICAgICAgICBrID0gZmluZF9tYXRjaGluZ19lbmRpZiggYmxvY2tzLCBqKzEgKQorICAgICAgICBpZiBrID49IG46CisgICAgICAgICAgICAjIHVudGVybWluYXRlZCAjaWYgMSwgZmluaXNoIGhlcmUKKyAgICAgICAgICAgIEQyKCJ1bnRlcm1pbmF0ZWQgJ2lmIDEnIikKKyAgICAgICAgICAgIHJlc3VsdCArPSBibG9ja3NbaisxOmtdCisgICAgICAgICAgICBicmVhaworCisgICAgICAgIGRpciA9IGJsb2Nrc1trXS5kaXJlY3RpdmUKKyAgICAgICAgaWYgZGlyID09ICJlbmRpZiI6CisgICAgICAgICAgICBEMigiY29udmVydCAnaWYgMScgLi4gJ2VuZGlmJyAobGluZXMgJWQgdG8gJWQpIiAgJSAoYmxvY2tzW2pdLmxpbmVubywgYmxvY2tzW2tdLmxpbmVubykpCisgICAgICAgICAgICByZXN1bHQgKz0gb3B0aW1pemVfaWYwMShibG9ja3NbaisxOmtdKQorICAgICAgICAgICAgaSAgICAgICA9IGsrMQorICAgICAgICBlbGlmIGRpciA9PSAiZWxzZSI6CisgICAgICAgICAgICAjIGNvbnZlcnQgJ2Vsc2UnIGludG8gJ2lmIDAnCisgICAgICAgICAgICBEMigiY29udmVydCAnaWYgMScgLi4gJ2Vsc2UnIChsaW5lcyAlZCB0byAlZCkiICAlIChibG9ja3Nbal0ubGluZW5vLCBibG9ja3Nba10ubGluZW5vKSkKKyAgICAgICAgICAgIHJlc3VsdCArPSBvcHRpbWl6ZV9pZjAxKGJsb2Nrc1tqKzE6a10pCisgICAgICAgICAgICBibG9ja3Nba10uZGlyZWN0aXZlID0gImlmIgorICAgICAgICAgICAgYmxvY2tzW2tdLmV4cHIgICAgICA9IENwcEV4cHIoIENwcExpbmVUb2tlbml6ZXIoIjAiKS50b1Rva2VuTGlzdCgpICkKKyAgICAgICAgICAgIGkgPSBrCisgICAgICAgIGVsaWYgZGlyID09ICJlbGlmIjoKKyAgICAgICAgICAgICMgY29udmVydCAnZWxpZicgaW50byAnaWYgMCcKKyAgICAgICAgICAgIEQyKCJjb252ZXJ0ICdpZiAxJyAuLiAnZWxpZicgKGxpbmVzICVkIHRvICVkKSIgJSAoYmxvY2tzW2pdLmxpbmVubywgYmxvY2tzW2tdLmxpbmVubykpCisgICAgICAgICAgICByZXN1bHQgKz0gb3B0aW1pemVfaWYwMShibG9ja3NbaisxOmtdKQorICAgICAgICAgICAgYmxvY2tzW2tdLmV4cHIgICAgICA9IENwcEV4cHIoIENwcExpbmVUb2tlbml6ZXIoIjAiKS50b1Rva2VuTGlzdCgpICkKKyAgICAgICAgICAgIGkgPSBrCisgICAgcmV0dXJuIHJlc3VsdAorCitkZWYgIHRlc3Rfb3B0aW1pemVBbGwoKToKKyAgICB0ZXh0ID0gIiIiXAorI2lmIDEKKyNkZWZpbmUgIEdPT0RfMQorI2VuZGlmCisjaWYgMAorI2RlZmluZSAgQkFEXzIKKyNkZWZpbmUgIEJBRF8zCisjZW5kaWYKKworI2lmIDEKKyNkZWZpbmUgIEdPT0RfMgorI2Vsc2UKKyNkZWZpbmUgIEJBRF80CisjZW5kaWYKKworI2lmIDAKKyNkZWZpbmUgIEJBRF81CisjZWxzZQorI2RlZmluZSAgR09PRF8zCisjZW5kaWYKKworI2lmIDAKKyNpZiAxCisjZGVmaW5lICBCQURfNgorI2VuZGlmCisjZW5kaWZcCisiIiIKKworICAgIGV4cGVjdGVkID0gIiIiXAorI2RlZmluZSBHT09EXzEKKworI2RlZmluZSBHT09EXzIKKworI2RlZmluZSBHT09EXzMKKworIiIiCisKKyAgICBwcmludCAicnVubmluZyB0ZXN0X0Jsb2NrTGlzdC5vcHRpbWl6ZUFsbCIKKyAgICBvdXQgPSBTdHJpbmdPdXRwdXQoKQorICAgIGxpbmVzID0gc3RyaW5nLnNwbGl0KHRleHQsICdcbicpCisgICAgbGlzdCA9IEJsb2NrUGFyc2VyKCkucGFyc2UoIENwcExpbmVzVG9rZW5pemVyKGxpbmVzKSApCisgICAgI0Rfc2V0bGV2ZWwoMikKKyAgICBsaXN0Lm9wdGltaXplQWxsKCB7Il9fS0VSTkVMX18iOmtDcHBVbmRlZmluZWRNYWNyb30gKQorICAgICNwcmludCByZXByKGxpc3QpCisgICAgbGlzdC53cml0ZShvdXQpCisgICAgaWYgb3V0LmdldCgpICE9IGV4cGVjdGVkOgorICAgICAgICBwcmludCAiS086IG1hY3JvIG9wdGltaXphdGlvbiBmYWlsZWRcbiIKKyAgICAgICAgcHJpbnQgIjw8PDwgZXhwZWN0aW5nICciLAorICAgICAgICBwcmludCBleHBlY3RlZCwKKyAgICAgICAgcHJpbnQgIidcbj4+Pj4gcmVzdWx0ICciCisgICAgICAgIHByaW50IG91dC5nZXQoKSwKKyAgICAgICAgcHJpbnQgIidcbi0tLS0iCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIyMjIworIyMjIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIyMjIworIyMjIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitkZWYgcnVuVW5pdFRlc3RzKCk6CisgICAgIiIicnVuIGFsbCB1bml0IHRlc3RzIGZvciB0aGlzIHByb2dyYW0iIiIKKyAgICBwcmludCAicnVubmluZyB1bml0IHRlc3RzIgorICAgIHRlc3RfQ3BwVG9rZW5pemVyKCkKKyAgICB0ZXN0X0NwcEV4cHIoKQorICAgIHRlc3Rfb3B0aW1pemVBbGwoKQorICAgIHRlc3RfQmxvY2tQYXJzZXIoKQorICAgIHByaW50ICJPSyIKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBydW5Vbml0VGVzdHMoKQpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdG9vbHMvZGVmYXVsdHMucHkgYi9saWJjL2tlcm5lbC90b29scy9kZWZhdWx0cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWQwMDkyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvdG9vbHMvZGVmYXVsdHMucHkKQEAgLTAsMCArMSwxMDEgQEAKKyMgdGhpcyBtb2R1bGUgY29udGFpbnMgYWxsIHRoZSBkZWZhdWx0cyB1c2VkIGJ5IHRoZSBnZW5lcmF0aW9uIG9mIGNsZWFuZWQtdXAgaGVhZGVycworIyBmb3IgdGhlIEJpb25pYyBDIGxpYnJhcnkKKyMKKworaW1wb3J0IHRpbWUsIG9zLCBzeXMKK2Zyb20gdXRpbHMgaW1wb3J0ICoKKworIyB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgYXJjaGl0ZWN0dXJlcworIwora2VybmVsX2FyY2hzID0gWyAnYXJtJywgJ3g4NicgXQorCisjIHRoZSBsaXN0IG9mIGluY2x1ZGUgZGlyZWN0b3JpZXMgdGhhdCBiZWxvbmcgdG8gdGhlIGtlcm5lbAorIyB0cmVlLiB1c2VkIHdoZW4gbG9va2luZyBmb3Igc291cmNlcy4uLgorIwora2VybmVsX2RpcnMgPSBbICJsaW51eCIsICJhc20iLCAiYXNtLWdlbmVyaWMiLCAibXRkIiBdCisKKyMgcGF0aCB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIG9yaWdpbmFsIGtlcm5lbCBoZWFkZXJzCisjCitrZXJuZWxfb3JpZ2luYWxfcGF0aCA9IG9zLnBhdGgubm9ybXBhdGgoIGZpbmRfcHJvZ3JhbV9kaXIoKSArICcvLi4vb3JpZ2luYWwnICkKKworIyBhIHNwZWNpYWwgdmFsdWUgdGhhdCBpcyB1c2VkIHRvIGluZGljYXRlIHRoYXQgYSBnaXZlbiBtYWNybyBpcyBrbm93biB0byBiZQorIyB1bmRlZmluZWQgZHVyaW5nIG9wdGltaXphdGlvbgora0NwcFVuZGVmaW5lZE1hY3JvID0gIjw8PHVuZGVmaW5lZD4+PiIKKworIyB0aGlzIGlzIHRoZSBzZXQgb2Yga25vd24gbWFjcm9zIHdlIHdhbnQgdG8gdG90YWxseSBvcHRpbWl6ZSBvdXQgZnJvbSB0aGUKKyMgZmluYWwgaGVhZGVycwora2VybmVsX2tub3duX21hY3JvcyA9IHsKKyAgICAiX19LRVJORUxfXyI6IGtDcHBVbmRlZmluZWRNYWNybywKKyAgICAiX19LRVJORUxfU1RSSUNUX05BTUVTIjoiMSIsCisgICAgIl9fQ0hFQ0tFUl9fIjoga0NwcFVuZGVmaW5lZE1hY3JvLAorICAgICJfX0NIRUNLX0VORElBTl9fIjoga0NwcFVuZGVmaW5lZE1hY3JvLAorICAgIH0KKworIyBkZWZpbmUgdG8gdHJ1ZSBpZiB5b3Ugd2FudCB0byByZW1vdmUgYWxsIGRlZmluZWQoQ09ORklHX0ZPTykgdGVzdHMKKyMgZnJvbSB0aGUgY2xlYW4gaGVhZGVycy4gdGVzdGluZyBzaG93cyB0aGF0IHRoaXMgaXMgbm90IHN0cmljdGx5IG5lY2Vzc2FyeQorIyBidXQganVzdCBnZW5lcmF0ZXMgY2xlYW5lciByZXN1bHRzCitrZXJuZWxfcmVtb3ZlX2NvbmZpZ19tYWNyb3MgPSBUcnVlCisKKyMgbWFwcyBhbiBhcmNoaXRlY3R1cmUgdG8gYSBzZXQgb2YgZGVmYXVsdCBtYWNyb3MgdGhhdCB3b3VsZCBiZSBwcm92aWRlZCBieQorIyB0b29sY2hhaW4gcHJlcHJvY2Vzc29yCitrZXJuZWxfZGVmYXVsdF9hcmNoX21hY3JvcyA9IHsKKyAgICAiYXJtIjoge30sCisgICAgIng4NiI6IHsiX19pMzg2X18iOiAiMSJ9LAorICAgIH0KKworIyB0aGlzIGlzIHRoZSBzZXQgb2Yga25vd24gc3RhdGljIGlubGluZSBmdW5jdGlvbnMgdGhhdCB3ZSB3YW50IHRvIGtlZXAKKyMgaW4gdGhlIGZpbmFsIEFSTSBoZWFkZXJzLiB0aGlzIGlzIG9ubHkgdXNlZCB0byBrZWVwIG9wdGltaXplZCBieXRlc3dhcHBpbmcKKyMgc3RhdGljIGZ1bmN0aW9ucyBhbmQgc3R1ZmYgbGlrZSB0aGF0Lgora2VybmVsX2tub3duX2FybV9zdGF0aWNzID0gc2V0KAorICAgICAgIFsgIl9fX2FyY2hfX3N3YWIzMiIsICAgICMgYXNtLWFybS9ieXRlb3JkZXIuaAorICAgICAgIF0KKyAgICApCisKK2tlcm5lbF9rbm93bl94ODZfc3RhdGljcyA9IHNldCgKKyAgICAgICAgWyAiX19fYXJjaF9fc3dhYjMyIiwgICMgYXNtLXg4Ni9ieXRlb3JkZXIuaAorICAgICAgICAgICJfX19hcmNoX19zd2FiNjQiLCAgIyBhc20teDg2L2J5dGVvcmRlci5oCisgICAgICAgIF0KKyAgICApCisKK2tlcm5lbF9rbm93bl9nZW5lcmljX3N0YXRpY3MgPSBzZXQoCisgICAgICAgIFsgIl9faW52YWxpZF9zaXplX2FyZ3VtZW50X2Zvcl9JT0MiLCAgIyBhc20tZ2VuZXJpYy9pb2N0bC5oCisgICAgICAgICAgIl9fY21zZ19ueHRoZHIiLCAgICAgICAgICAgICAgICAgICAgIyBsaW51eC9zb2NrZXQuaAorICAgICAgICAgICJjbXNnX254dGhkciIsICAgICAgICAgICAgICAgICAgICAgICMgbGludXgvc29ja2V0LmgKKyAgICAgICAgICAiaXB0X2dldF90YXJnZXQiLAorICAgICAgICBdCisgICAgKQorCisjIHRoaXMgbWFwcyBhbiBhcmNoaXRlY3R1cmUgdG8gdGhlIHNldCBvZiBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyB0aGF0CisjIHdlIHdhbnQgdG8ga2VlcCBpbiB0aGUgZmluYWwgaGVhZGVycworIwora2VybmVsX2tub3duX3N0YXRpY3MgPSB7CisgICAgICAgICJhcm0iIDoga2VybmVsX2tub3duX2FybV9zdGF0aWNzLAorICAgICAgICAieDg2IiA6IGtlcm5lbF9rbm93bl94ODZfc3RhdGljcworICAgIH0KKworIyB0aGlzIGlzIGEgbGlzdCBvZiBtYWNyb3Mgd2hpY2ggd2Ugd2FudCB0byBzcGVjaWZpY2FsbHkgZXhjbHVkZSBmcm9tCisjIHRoZSBnZW5lcmF0ZWQgZmlsZXMuCisjCitrZXJuZWxfaWdub3JlZF9tYWNyb3MgPSBzZXQoCisgICAgICAgIFsgIk1BWEhPU1ROQU1FTEVOIiwgICMgZm9yIHNvbWUgcmVhc29uLCBMaW51eCBkZWZpbmVzIGl0IHRvIDY0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgd2hpbGUgbW9zdCBvZiB0aGUgQlNEIGNvZGUgZXhwZWN0cyB0aGlzIHRvIGJlIDI1NgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHNvIGlnbm9yZSB0aGUga2VybmVsLXByb3ZpZGVkIGRlZmluaXRpb24gYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZGVmaW5lIGl0IGluIHRoZSBCaW9uaWMgaGVhZGVycyBpbnN0ZWFkCisgICAgICAgIF0KKyAgICApCisKKyMgdGhpcyBpcyB0aGUgc3RhbmRhcmQgZGlzY2xhaW1lcgorIwora2VybmVsX2Rpc2NsYWltZXIgPSAiIiJcCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisiIiIKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3Rvb2xzL2ZpbmRfaGVhZGVycy5weSBiL2xpYmMva2VybmVsL3Rvb2xzL2ZpbmRfaGVhZGVycy5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44ZTcyYmI2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvdG9vbHMvZmluZF9oZWFkZXJzLnB5CkBAIC0wLDAgKzEsMTc1IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgdGhpcyBwcm9ncmFtIGlzIHVzZWQgdG8gZmluZCBzb3VyY2UgY29kZSB0aGF0IGluY2x1ZGVzIGxpbnV4IGtlcm5lbCBoZWFkZXJzIGRpcmVjdGx5CisjIChlLmcuIHdpdGggI2luY2x1ZGUgPGxpbnV4Ly4uLj4gb3IgI2luY2x1ZGUgPGFzbS8uLi4+KQorIworIyB0aGVuIGl0IGxpc3RzCisKK2ltcG9ydCBzeXMsIGNwcCwgZ2xvYiwgb3MsIHJlLCBnZXRvcHQsIGtlcm5lbAorZnJvbSB1dGlscyBpbXBvcnQgKgorZnJvbSBkZWZhdWx0cyBpbXBvcnQgKgorCitwcm9ncmFtX2RpciA9IGZpbmRfcHJvZ3JhbV9kaXIoKQorCit3YW50ZWRfYXJjaHMgICA9IGtlcm5lbF9hcmNocword2FudGVkX2luY2x1ZGUgPSBvcy5wYXRoLm5vcm1wYXRoKHByb2dyYW1fZGlyICsgJy8uLi9vcmlnaW5hbCcpCit3YW50ZWRfY29uZmlnICA9IG9zLnBhdGgubm9ybXBhdGgocHJvZ3JhbV9kaXIgKyAnLy4uL29yaWdpbmFsL2NvbmZpZycpCisKK2RlZiB1c2FnZSgpOgorICAgIHByaW50ICIiIlwKKyAgdXNhZ2U6ICBmaW5kX2hlYWRlcnMucHkgW29wdGlvbnNdIChmaWxlfGRpcmVjdG9yeXxAbGlzdGZpbGUpKworCisgICAgIG9wdGlvbnM6CisgICAgICAgIC1kIDxpbmNsdWRlLWRpcj4gICBzcGVjaWZ5IGFsdGVybmF0ZSBrZXJuZWwgaGVhZGVycworICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luY2x1ZGUnIGRpcmVjdG9yeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKCclcycgYnkgZGVmYXVsdCkKKworICAgICAgICAtYyA8ZmlsZT4gICAgICAgICAgc3BlY2lmeSBhbHRlcm5hdGUgLmNvbmZpZyBmaWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoJyVzJyBieSBkZWZhdWx0KQorCisgICAgICAgIC1hIDxhcmNocz4gICAgICAgICB1c2VkIHRvIHNwZWNpZnkgYW4gYWx0ZXJuYXRpdmUgbGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgYXJjaGl0ZWN0dXJlcyB0byBzdXBwb3J0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAoJyVzJyBieSBkZWZhdWx0KQorCisgICAgICAgIC12ICAgICAgICAgICAgICAgICBlbmFibGUgdmVyYm9zZSBtb2RlCisKKyAgICB0aGlzIHByb2dyYW0gaXMgdXNlZCB0byBmaW5kIGFsbCB0aGUga2VybmVsIGhlYWRlcnMgdGhhdCBhcmUgdXNlZAorICAgIGJ5IGEgc2V0IG9mIHNvdXJjZSBmaWxlcyBvciBkaXJlY3RvcmllcyBjb250YWluaW5nIHRoZW0uIHRoZSBzZWFyY2gKKyAgICBpcyByZWN1cnNpdmUgdG8gZmluZCAqYWxsKiByZXF1aXJlZCBmaWxlcy4KKworIiIiICUgKCB3YW50ZWRfaW5jbHVkZSwgd2FudGVkX2NvbmZpZywgc3RyaW5nLmpvaW4oa2VybmVsX2FyY2hzLCIsIikgKQorICAgIHN5cy5leGl0KDEpCisKKwordHJ5OgorICAgIG9wdGxpc3QsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KCBzeXMuYXJndlsxOl0sICd2YzpkOmE6JyApCitleGNlcHQ6CisgICAgIyB1bnJlY29nbml6ZWQgb3B0aW9uCisgICAgcHJpbnQgImVycm9yOiB1bnJlY29nbml6ZWQgb3B0aW9uIgorICAgIHVzYWdlKCkKKworZm9yIG9wdCwgYXJnIGluIG9wdGxpc3Q6CisgICAgaWYgb3B0ID09ICctYSc6CisgICAgICAgIHdhbnRlZF9hcmNocyA9IHN0cmluZy5zcGxpdChhcmcsJywnKQorICAgIGVsaWYgb3B0ID09ICctZCc6CisgICAgICAgIHdhbnRlZF9pbmNsdWRlID0gYXJnCisgICAgZWxpZiBvcHQgPT0gJy1jJzoKKyAgICAgICAgd2FudGVkX2NvbmZpZyA9IGFyZworICAgIGVsaWYgb3B0ID09ICctdic6CisgICAgICAgIGtlcm5lbC52ZXJib3NlU2VhcmNoID0gMQorICAgICAgICBrZXJuZWwudmVyYm9zZUZpbmQgICA9IDEKKyAgICAgICAgdmVyYm9zZSA9IDEKKyAgICBlbHNlOgorICAgICAgICB1c2FnZSgpCisKK2lmIGxlbihhcmdzKSA8IDE6CisgICAgdXNhZ2UoKQorCitrZXJuZWxfcm9vdCA9IHdhbnRlZF9pbmNsdWRlCitpZiBub3Qgb3MucGF0aC5leGlzdHMoa2VybmVsX3Jvb3QpOgorICAgIHN5cy5zdGRlcnIud3JpdGUoICJlcnJvcjogZGlyZWN0b3J5ICclcycgZG9lcyBub3QgZXhpc3RcbiIgJSBrZXJuZWxfcm9vdCApCisgICAgc3lzLmV4aXQoMSkKKworaWYgbm90IG9zLnBhdGguaXNkaXIoa2VybmVsX3Jvb3QpOgorICAgIHN5cy5zdGRlcnIud3JpdGUoICJlcnJvcjogJyVzJyBpcyBub3QgYSBkaXJlY3RvcnlcbiIgJSBrZXJuZWxfcm9vdCApCisgICAgc3lzLmV4aXQoMSkKKworaWYgbm90IG9zLnBhdGguaXNkaXIoa2VybmVsX3Jvb3QrIi9saW51eCIpOgorICAgIHN5cy5zdGRlcnIud3JpdGUoICJlcnJvcjogJyVzJyBkb2VzIG5vdCBoYXZlIGEgJ2xpbnV4JyBkaXJlY3RvcnlcbiIgJSBrZXJuZWxfcm9vdCApCisgICAgc3lzLmV4aXQoMSkKKworaWYgbm90IG9zLnBhdGguZXhpc3RzKHdhbnRlZF9jb25maWcpOgorICAgIHN5cy5zdGRlcnIud3JpdGUoICJlcnJvcjogZmlsZSAnJXMnIGRvZXMgbm90IGV4aXN0XG4iICUgd2FudGVkX2NvbmZpZyApCisgICAgc3lzLmV4aXQoMSkKKworaWYgbm90IG9zLnBhdGguaXNmaWxlKHdhbnRlZF9jb25maWcpOgorICAgIHN5cy5zdGRlcnIud3JpdGUoICJlcnJvcjogJyVzJyBpcyBub3QgYSBmaWxlXG4iICUgd2FudGVkX2NvbmZpZyApCisgICAgc3lzLmV4aXQoMSkKKworIyBmaW5kIGFsbCBhcmNoaXRlY3R1cmVzIGluIHRoZSBrZXJuZWwgdHJlZQorcmVfYXNtXyA9IHJlLmNvbXBpbGUociJhc20tKFx3KykiKQorYXJjaHMgICA9IFtdCitmb3IgZGlyIGluIG9zLmxpc3RkaXIoa2VybmVsX3Jvb3QpOgorICAgIG0gPSByZV9hc21fLm1hdGNoKGRpcikKKyAgICBpZiBtOgorICAgICAgICBpZiB2ZXJib3NlOiBwcmludCAiPj4gZm91bmQga2VybmVsIGFyY2ggJyVzJyIgJSBtLmdyb3VwKDEpCisgICAgICAgIGFyY2hzLmFwcGVuZChtLmdyb3VwKDEpKQorCisjIGlmIHdlJ3JlIHVzaW5nIHRoZSAna2VybmVsX2hlYWRlcnMnIGRpcmVjdG9yeSwgdGhlcmUgaXMgb25seSBhc20vCisjIGFuZCBubyBvdGhlciBhc20tPGFyY2g+IGRpcmVjdG9yaWVzIChhcm0gaXMgYXNzdW1lZCwgd2hpY2ggc3Vja3MpCisjCitpbl9rZXJuZWxfaGVhZGVycyA9IEZhbHNlCitpZiBsZW4oYXJjaHMpID09IDA6CisgICAgIyB0aGlzIGNhbiBoYXBwZW4gd2hlbiB3ZSdyZSB1c2luZyB0aGUgJ2tlcm5lbF9oZWFkZXJzJyBkaXJlY3RvcnkKKyAgICBpZiBvcy5wYXRoLmlzZGlyKGtlcm5lbF9yb290KyIvYXNtIik6CisgICAgICAgIGluX2tlcm5lbF9oZWFkZXJzID0gVHJ1ZQorICAgICAgICBhcmNocyA9IFsgImFybSIgXQorCisjIGlmIHRoZSB1c2VyIGhhcyBzcGVjaWZpZWQgc29tZSBhcmNoaXRlY3R1cmVzIHdpdGggLWEgPGFyY2hzPiBlbnN1cmUgdGhhdAorIyBhbGwgdGhvc2UgaGUgd2FudHMgYXJlIGF2YWlsYWJsZSBmcm9tIHRoZSBrZXJuZWwgaW5jbHVkZSB0cmVlCitpZiB3YW50ZWRfYXJjaHMgIT0gTm9uZToKKyAgICBpZiBpbl9rZXJuZWxfaGVhZGVycyBhbmQgd2FudGVkX2FyY2hzICE9IFsgImFybSIgXToKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSggImVycm9yOiB3aGVuIHBhcnNpbmcga2VybmVsX2hlYWRlcnMsICdhcm0nIGFyY2hpdGVjdHVyZSBvbmx5IGlzIHN1cHBvcnRlZCBhdCB0aGUgbW9tZW50XG4iICkKKyAgICAgICAgc3lzLmV4aXQoMSkKKyAgICBtaXNzaW5nID0gW10KKyAgICBmb3IgYXJjaCBpbiB3YW50ZWRfYXJjaHM6CisgICAgICAgIGlmIGFyY2ggbm90IGluIGFyY2hzOgorICAgICAgICAgICAgbWlzc2luZy5hcHBlbmQoYXJjaCkKKyAgICBpZiBsZW4obWlzc2luZykgPiAwOgorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCAiZXJyb3I6IHRoZSBmb2xsb3dpbmcgcmVxdWVzdGVkIGFyY2hpdGVjdHVyZXMgYXJlIG5vdCBpbiB0aGUga2VybmVsIHRyZWU6ICIgKQorICAgICAgICBmb3IgYSBpbiBtaXNzaW5nOgorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSggIiAlcyIgJSBhICkKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSggIlxuIiApCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICBhcmNocyA9IHdhbnRlZF9hcmNocworCisjIGhlbHBlciBmdW5jdGlvbiB1c2VkIHRvIHdhbGsgdGhlIHVzZXIgZmlsZXMKK2RlZiBwYXJzZV9maWxlKHBhdGgsIHBhcnNlcik6CisgICAgcGFyc2VyLnBhcnNlRmlsZShwYXRoKQorCisKKyMgcmVtb3ZlIHByZXZpb3VzIGRlc3RpbmF0aW9uIGRpcmVjdG9yeQorI2Rlc3RkaXIgPSAiL3RtcC9iaW9uaWMta2VybmVsLWhlYWRlcnMvIgorI2NsZWFudXBfZGlyKGRlc3RkaXIpCisKKyMgdHJ5IHRvIHJlYWQgdGhlIGNvbmZpZyBmaWxlCit0cnk6CisgICAgY3BhcnNlciA9IGtlcm5lbC5Db25maWdQYXJzZXIoKQorICAgIGNwYXJzZXIucGFyc2VGaWxlKCB3YW50ZWRfY29uZmlnICkKK2V4Y2VwdDoKKyAgICBzeXMuc3RkZXJyLndyaXRlKCAiZXJyb3I6IGNhbid0IHBhcnNlICclcyciICUgd2FudGVkX2NvbmZpZyApCisgICAgc3lzLmV4aXQoMSkKKwora2VybmVsX2NvbmZpZyA9IGNwYXJzZXIuZ2V0RGVmaW5pdGlvbnMoKQorCisjIGZpcnN0LCBvYnRhaW4gdGhlIGxpc3Qgb2Yga2VybmVsIGZpbGVzIHVzZWQgYnkgb3VyIGNsaWVudHMKK2ZwYXJzZXIgPSBrZXJuZWwuSGVhZGVyU2Nhbm5lcigpCit3YWxrX3NvdXJjZV9maWxlcyggYXJncywgcGFyc2VfZmlsZSwgZnBhcnNlciwgZXhjbHVkZXM9WyJrZXJuZWxfaGVhZGVycyJdICkKK2hlYWRlcnMgPSBmcGFyc2VyLmdldEhlYWRlcnMoKQorZmlsZXMgICA9IGZwYXJzZXIuZ2V0RmlsZXMoKQorCisjIG5vdyByZWN1cnNpdmVseSBzY2FuIHRoZSBrZXJuZWwgaGVhZGVycyBmb3IgYWRkaXRpb25uYWwgc3ViLWluY2x1ZGVkIGhlYWRlcnMKK2hwYXJzZXIgPSBrZXJuZWwuS2VybmVsSGVhZGVyRmluZGVyKGhlYWRlcnMsYXJjaHMsa2VybmVsX3Jvb3Qsa2VybmVsX2NvbmZpZykKK2hlYWRlcnMgPSBocGFyc2VyLnNjYW5Gb3JBbGxBcmNocygpCisKK2lmIDA6ICAgICMganVzdCBmb3IgZGVidWdnaW5nCisgICAgZHVtcEhlYWRlclVzZXJzID0gRmFsc2UKKworICAgIHByaW50ICJ0aGUgZm9sbG93aW5nICVkIGhlYWRlcnM6IiAlIGxlbihoZWFkZXJzKQorICAgIGZvciBoIGluIHNvcnRlZChoZWFkZXJzKToKKyAgICAgICAgaWYgZHVtcEhlYWRlclVzZXJzOgorICAgICAgICAgICAgcHJpbnQgIiAgJXMgKCVzKSIgJSAoaCwgcmVwcihocGFyc2VyLmdldEhlYWRlclVzZXJzKGgpKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50ICIgICVzIiAlIGgKKworICAgIHByaW50ICJhcmUgdXNlZCBieSB0aGUgZm9sbG93aW5nICVkIGZpbGVzOiIgJSBsZW4oZmlsZXMpCisgICAgZm9yIGYgaW4gc29ydGVkKGZpbGVzKToKKyAgICAgICAgcHJpbnQgIiAgJXMiICUgZgorCisgICAgc3lzLmV4aXQoMCkKKworZm9yIGggaW4gc29ydGVkKGhlYWRlcnMpOgorICAgIHByaW50IGgKKworc3lzLmV4aXQoMCkKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3Rvb2xzL2ZpbmRfdXNlcnMucHkgYi9saWJjL2tlcm5lbC90b29scy9maW5kX3VzZXJzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjVlZTMwOGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC90b29scy9maW5kX3VzZXJzLnB5CkBAIC0wLDAgKzEsNjMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyB0aGlzIHByb2dyYW0gaXMgdXNlZCB0byBmaW5kIHNvdXJjZSBjb2RlIHRoYXQgaW5jbHVkZXMgbGludXgga2VybmVsIGhlYWRlcnMgZGlyZWN0bHkKKyMgKGUuZy4gd2l0aCAjaW5jbHVkZSA8bGludXgvLi4uPiBvciAjaW5jbHVkZSA8YXNtLy4uLj4pCisjCisjIHRoZW4gaXQgbGlzdHMKKworaW1wb3J0IHN5cywgY3BwLCBnbG9iLCBvcywgcmUsIGdldG9wdAoraW1wb3J0IGtlcm5lbAorZnJvbSB1dGlscyBpbXBvcnQgKgorZnJvbSBkZWZhdWx0cyBpbXBvcnQgKgorCisKK2RlZiB1c2FnZSgpOgorICAgIHByaW50ICIiIlwKKyAgdXNhZ2U6ICBmaW5kX3VzZXJzLnB5IFstdl0gKGZpbGV8ZGlyZWN0b3J5fEBsaXN0ZmlsZSkrCisKKyAgICB0aGlzIHByb2dyYW0gaXMgdXNlZCB0byBzY2FuIGEgbGlzdCBvZiBmaWxlcyBvciBkaXJlY3RvcmllcyBmb3IKKyAgICBzb3VyY2VzIHRoYXQgaW5jbHVkZSBrZXJuZWwgaGVhZGVycyBkaXJlY3RseS4gdGhlIHByb2dyYW0gcHJpbnRzCisgICAgdGhlIGxpc3Qgb2Ygc2FpZCBzb3VyY2UgZmlsZXMgd2hlbiBpdCdzIGRvbmUuCisKKyAgICB3aGVuIHNjYW5uaW5nIGRpcmVjdG9yaWVzLCBvbmx5IGZpbGVzIG1hdGNoaW5nIHRoZSBmb2xsb3dpbmcKKyAgICBleHRlbnNpb24gd2lsbCBiZSBzZWFyY2hlZDogLmMgLmNwcCAuUyAuaAorCisgICAgdXNlIC12IHRvIGVuYWJsZSB2ZXJib3NlIG91dHB1dAorIiIiCisgICAgc3lzLmV4aXQoMSkKKworCit0cnk6CisgICAgb3B0bGlzdCwgYXJncyA9IGdldG9wdC5nZXRvcHQoIHN5cy5hcmd2WzE6XSwgJ3YnICkKK2V4Y2VwdDoKKyAgICAjIHVucmVjb2duaXplZCBvcHRpb24KKyAgICBwcmludCAiZXJyb3I6IHVucmVjb2duaXplZCBvcHRpb24iCisgICAgdXNhZ2UoKQorCitmb3Igb3B0LCBhcmcgaW4gb3B0bGlzdDoKKyAgICBpZiBvcHQgPT0gJy12JzoKKyAgICAgICAga2VybmVsLnZlcmJvc2VTZWFyY2ggPSAxCisgICAgICAgIGtlcm5lbC52ZXJib3NlRmluZCAgID0gMQorICAgIGVsc2U6CisgICAgICAgIHVzYWdlKCkKKworaWYgbGVuKGFyZ3MpIDwgMToKKyAgICB1c2FnZSgpCisKKyMgaGVscGVyIGZ1bmN0aW9uIHVzZWQgdG8gd2FsayB0aGUgdXNlciBmaWxlcworZGVmIHBhcnNlX2ZpbGUocGF0aCwgcGFyc2VyKToKKyAgICBwYXJzZXIucGFyc2VGaWxlKHBhdGgpCisKKworIyBmaXJzdCwgb2J0YWluIHRoZSBsaXN0IG9mIGtlcm5lbCBmaWxlcyB1c2VkIGJ5IG91ciBjbGllbnRzCisjIGF2b2lkIHBhcnNpbmcgdGhlICdrZXJuZWxfaGVhZGVycycgZGlyZWN0b3J5IGl0c2VsZiBzaW5jZSB3ZQorIyB1c2UgdGhpcyBwcm9ncmFtIHdpdGggdGhlIEFuZHJvaWQgc291cmNlIHRyZWUgYnkgZGVmYXVsdC4KKyMKK2ZwYXJzZXIgPSBrZXJuZWwuSGVhZGVyU2Nhbm5lcigpCit3YWxrX3NvdXJjZV9maWxlcyggYXJncywgcGFyc2VfZmlsZSwgZnBhcnNlciwgZXhjbHVkZXM9WyJrZXJuZWxfaGVhZGVycyIsIm9yaWdpbmFsIl0gKQorZmlsZXMgICA9IGZwYXJzZXIuZ2V0RmlsZXMoKQorCitmb3IgZiBpbiBzb3J0ZWQoZmlsZXMpOgorICAgIHByaW50IGYKKworc3lzLmV4aXQoMCkKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3Rvb2xzL2tlcm5lbC5weSBiL2xpYmMva2VybmVsL3Rvb2xzL2tlcm5lbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDliNWYwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvdG9vbHMva2VybmVsLnB5CkBAIC0wLDAgKzEsMzM4IEBACisjIHRoaXMgZmlsZSBjb250YWlucyBkZWZpbml0aW9ucyByZWxhdGVkIHRvIHRoZSBMaW51eCBrZXJuZWwgaXRzZWxmCisjCisKKyMgbGlzdCBoZXJlIHRoZSBtYWNyb3MgdGhhdCB5b3Uga25vdyBhcmUgYWx3YXlzIGRlZmluZWQvdW5kZWZpbmVkIHdoZW4gaW5jbHVkaW5nCisjIHRoZSBrZXJuZWwgaGVhZGVycworIworaW1wb3J0IHN5cywgY3BwLCByZSwgb3MucGF0aCwgc3RyaW5nLCB0aW1lCitmcm9tIGRlZmF1bHRzIGltcG9ydCAqCisKK3ZlcmJvc2VTZWFyY2ggPSAwCit2ZXJib3NlRmluZCAgID0gMAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIyMjCisjIyMjIyAgICAgICAgICAgSCBFIEEgRCBFIFIgICBTIEMgQSBOIE4gRSBSICAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMKKyMjIyMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCitjbGFzcyBIZWFkZXJTY2FubmVyOgorICAgICIiImEgY2xhc3MgdXNlZCB0byBub24tcmVjdXJzaXZlbHkgZGV0ZWN0IHdoaWNoIExpbnV4IGtlcm5lbCBoZWFkZXJzIGFyZQorICAgICAgIHVzZWQgYnkgYSBnaXZlbiBzZXQgb2YgaW5wdXQgc291cmNlIGZpbGVzIiIiCisKKyAgICAjIHRvIHVzZSB0aGUgSGVhZGVyU2Nhbm5lciwgZG8gdGhlIGZvbGxvd2luZzoKKyAgICAjCisgICAgIyAgICBzY2FubmVyID0gSGVhZGVyU2Nhbm5lcigpCisgICAgIyAgICBmb3IgcGF0aCBpbiA8eW91ciBsaXN0IG9mIGZpbGVzPjoKKyAgICAjICAgICAgICBzY2FubmVyLnBhcnNlRmlsZShwYXRoKQorICAgICMKKyAgICAjICAgICMgZ2V0IHRoZSBzZXQgb2YgTGludXggaGVhZGVycyBpbmNsdWRlZCBieSB5b3VyIGZpbGVzCisgICAgIyAgICBoZWFkZXJzID0gc2Nhbm5lci5nZXRIZWFkZXJzKCkKKyAgICAjCisgICAgIyAgICAjIGdldCB0aGUgc2V0IG9mIG9mIGlucHV0IGZpbGVzIHRoYXQgZG8gaW5jbHVkZSBMaW51eCBoZWFkZXJzCisgICAgIyAgICBmaWxlcyAgID0gc2Nhbm5lci5nZXRGaWxlcygpCisgICAgIworICAgICMgICAgbm90ZSB0aGF0IHRoZSByZXN1bHQgb2YgZ2V0SGVhZGVycygpIGlzIGEgc2V0IG9mIHN0cmluZ3MsIGVhY2ggb25lCisgICAgIyAgICBjb3JyZXNwb25kaW5nIHRvIGEgbm9uLWJyYWNrZXRlZCBwYXRoIG5hbWUsIGUuZy46CisgICAgIworICAgICMgICAgICAgIHNldCgibGludXgvdHlwZXMiLCJhc20vdHlwZXMuaCIpCisgICAgIworCisgICAgIyB0aGUgZGVmYXVsdCBhbGdvcml0aG0gaXMgcHJldHR5IHNtYXJ0IGFuZCB3aWxsIGFuYWx5emUgdGhlIGlucHV0CisgICAgIyBmaWxlcyB3aXRoIGEgY3VzdG9tIEMgcHJlLXByb2Nlc3NvciBpbiBvcmRlciB0byBvcHRpbWl6ZSBvdXQgbWFjcm9zLAorICAgICMgZ2V0IHJpZCBvZiBjb21tZW50cywgZW1wdHkgbGluZXMsIGV0Yy4uCisgICAgIworICAgICMgdGhpcyBhdm9pZHMgbWFueSBhbm5veWluZyBmYWxzZSBwb3NpdGl2ZXMuLi4gISEKKyAgICAjCisKKyAgICAjIHRoaXMgcmVndWxhciBleHByZXNzaW9uIGlzIHVzZWQgdG8gZGV0ZWN0IGluY2x1ZGUgcGF0aHMgdGhhdCByZWxhdGUgdG8KKyAgICAjIHRoZSBrZXJuZWwsIGJ5IGRlZmF1bHQsIGl0IHNlbGVjdHMgb25lIG9mOgorICAgICMgICAgPGxpbnV4Lyo+CisgICAgIyAgICA8YXNtLyo+CisgICAgIyAgICA8YXNtLWdlbmVyaWMvKj4KKyAgICAjICAgIDxtdGQvKj4KKyAgICAjCisgICAgcmVfY29tYmluZWQgPVwKKyAgICAgICByZS5jb21waWxlKHIiXi4qPCgoJXMpL1tcZFx3X1wrXC5cLS9dKik+LiokIiAlIHN0cmluZy5qb2luKGtlcm5lbF9kaXJzLCJ8IikgKQorICAgICMgc29tZSBrZXJuZWwgZmlsZXMgY2hvb3NlIHRvIGluY2x1ZGUgZmlsZXMgd2l0aCByZWxhdGl2ZSBwYXRocyAoeDg2IDMyLzY0CisgICAgIyBkaXNwYXRjaCBmb3IgaW5zdGFuY2UpCisgICAgcmVfcmVsX2RpciA9IHJlLmNvbXBpbGUocideLioiKFtcZFx3X1wrXC5cLS9dKykiLiokJykKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLGNvbmZpZz17fSk6CisgICAgICAgICIiImluaXRpYWxpemUgYSBIZWFkZXJTY2FubmVyIiIiCisgICAgICAgIHNlbGYucmVzZXQoKQorICAgICAgICBzZWxmLmNvbmZpZyA9IGNvbmZpZworCisgICAgZGVmIHJlc2V0KHNlbGYsY29uZmlnPXt9KToKKyAgICAgICAgc2VsZi5maWxlcyAgICA9IHNldCgpICAjIHNldCBvZiBmaWxlcyBiZWluZyBwYXJzZWQgZm9yIGhlYWRlcnMKKyAgICAgICAgc2VsZi5oZWFkZXJzICA9IHt9ICAgICAjIG1hcHMgaGVhZGVycyB0byBzZXQgb2YgdXNlcnMKKyAgICAgICAgc2VsZi5jb25maWcgICA9IGNvbmZpZworCisgICAgZGVmIGNoZWNrSW5jbHVkZShzZWxmLCBsaW5lLCBmcm9tX2ZpbGUsIGtlcm5lbF9yb290PU5vbmUpOgorICAgICAgICByZWxhdGl2ZSA9IEZhbHNlCisgICAgICAgIG0gPSBIZWFkZXJTY2FubmVyLnJlX2NvbWJpbmVkLm1hdGNoKGxpbmUpCisgICAgICAgIGlmIGtlcm5lbF9yb290IGFuZCBub3QgbToKKyAgICAgICAgICAgIG0gPSBIZWFkZXJTY2FubmVyLnJlX3JlbF9kaXIubWF0Y2gobGluZSkKKyAgICAgICAgICAgIHJlbGF0aXZlID0gVHJ1ZQorICAgICAgICBpZiBub3QgbTogcmV0dXJuCisKKyAgICAgICAgaGVhZGVyID0gbS5ncm91cCgxKQorICAgICAgICBpZiBmcm9tX2ZpbGU6CisgICAgICAgICAgICBzZWxmLmZpbGVzLmFkZChmcm9tX2ZpbGUpCisgICAgICAgICAgICBpZiBrZXJuZWxfcm9vdCBhbmQgcmVsYXRpdmU6CisgICAgICAgICAgICAgICAgaGRyX2RpciA9IG9zLnBhdGgucmVhbHBhdGgob3MucGF0aC5kaXJuYW1lKGZyb21fZmlsZSkpCisgICAgICAgICAgICAgICAgaGRyX2RpciA9IGhkcl9kaXIucmVwbGFjZSgiJXMvIiAlIG9zLnBhdGgucmVhbHBhdGgoa2VybmVsX3Jvb3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIpCisgICAgICAgICAgICAgICAgaWYgaGRyX2RpcjoKKyAgICAgICAgICAgICAgICAgICAgX3ByZWZpeCA9ICIlcy8iICUgaGRyX2RpcgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIF9wcmVmaXggPSAiIgorICAgICAgICAgICAgICAgIGhlYWRlciA9ICIlcyVzIiAlIChfcHJlZml4LCBoZWFkZXIpCisKKyAgICAgICAgaWYgbm90IGhlYWRlciBpbiBzZWxmLmhlYWRlcnM6CisgICAgICAgICAgICBzZWxmLmhlYWRlcnNbaGVhZGVyXSA9IHNldCgpCisKKyAgICAgICAgaWYgZnJvbV9maWxlOgorICAgICAgICAgICAgaWYgdmVyYm9zZUZpbmQ6CisgICAgICAgICAgICAgICAgcHJpbnQgIj09PSAlcyB1c2VzICVzIiAlIChmcm9tX2ZpbGUsIGhlYWRlcikKKyAgICAgICAgICAgIHNlbGYuaGVhZGVyc1toZWFkZXJdLmFkZChmcm9tX2ZpbGUpCisKKyAgICBkZWYgcGFyc2VGaWxlKHNlbGYsIHBhdGgsIGFyY2g9Tm9uZSwga2VybmVsX3Jvb3Q9Tm9uZSk6CisgICAgICAgICIiInBhcnNlIGEgZ2l2ZW4gZmlsZSBmb3IgTGludXggaGVhZGVycyIiIgorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocGF0aCk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIHNpbmNlIHRva2VuaXppbmcgdGhlIGZpbGUgaXMgdmVyeSBzbG93LCB3ZSBmaXJzdCB0cnkgYSBxdWljayBncmVwCisgICAgICAgICMgdG8gc2VlIGlmIHRoaXMgcmV0dXJucyBhbnkgbWVhbmluZ2Z1bCByZXN1bHRzLiBvbmx5IGlmIHRoaXMgaXMgdHJ1ZQorICAgICAgICAjIGRvIHdlIGRvIHRoZSB0b2tlbml6YXRpb24iIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZiA9IG9wZW4ocGF0aCwgInJ0IikKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcHJpbnQgIiEhISBjYW4ndCByZWFkICclcyciICUgcGF0aAorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaGFzSW5jbHVkZXMgPSBGYWxzZQorICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgaWYgKEhlYWRlclNjYW5uZXIucmVfY29tYmluZWQubWF0Y2gobGluZSkgb3IKKyAgICAgICAgICAgICAgICAoa2VybmVsX3Jvb3QgYW5kIEhlYWRlclNjYW5uZXIucmVfcmVsX2Rpci5tYXRjaChsaW5lKSkpOgorICAgICAgICAgICAgICAgIGhhc0luY2x1ZGVzID0gVHJ1ZQorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgaWYgbm90IGhhc0luY2x1ZGVzOgorICAgICAgICAgICAgaWYgdmVyYm9zZVNlYXJjaDogcHJpbnQgIjo6OiAiICsgcGF0aAorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgdmVyYm9zZVNlYXJjaDogcHJpbnQgIioqKiAiICsgcGF0aAorCisgICAgICAgIGxpc3QgPSBjcHAuQmxvY2tQYXJzZXIoKS5wYXJzZUZpbGUocGF0aCkKKyAgICAgICAgaWYgbGlzdDoKKyAgICAgICAgICAgICNsaXN0LnJlbW92ZVByZWZpeGVkKCJDT05GSUdfIixzZWxmLmNvbmZpZykKKyAgICAgICAgICAgIG1hY3JvcyA9IGtlcm5lbF9rbm93bl9tYWNyb3MuY29weSgpCisgICAgICAgICAgICBpZiBrZXJuZWxfcm9vdDoKKyAgICAgICAgICAgICAgICBtYWNyb3MudXBkYXRlKHNlbGYuY29uZmlnKQorICAgICAgICAgICAgICAgIGlmIGFyY2ggYW5kIGFyY2ggaW4ga2VybmVsX2RlZmF1bHRfYXJjaF9tYWNyb3M6CisgICAgICAgICAgICAgICAgICAgIG1hY3Jvcy51cGRhdGUoa2VybmVsX2RlZmF1bHRfYXJjaF9tYWNyb3NbYXJjaF0pCisgICAgICAgICAgICBsaXN0Lm9wdGltaXplTWFjcm9zKG1hY3JvcykKKyAgICAgICAgICAgIGxpc3Qub3B0aW1pemVJZjAxKCkKKyAgICAgICAgICAgIGluY2x1ZGVzID0gbGlzdC5maW5kSW5jbHVkZXMoKQorICAgICAgICAgICAgZm9yIGluYyBpbiBpbmNsdWRlczoKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrSW5jbHVkZShpbmMsIHBhdGgsIGtlcm5lbF9yb290KQorCisgICAgZGVmIGdldEhlYWRlcnMoc2VsZik6CisgICAgICAgICIiInJldHVybiB0aGUgc2V0IG9mIGFsbCBuZWVkZWQga2VybmVsIGhlYWRlcnMiIiIKKyAgICAgICAgcmV0dXJuIHNldChzZWxmLmhlYWRlcnMua2V5cygpKQorCisgICAgZGVmIGdldEhlYWRlclVzZXJzKHNlbGYsaGVhZGVyKToKKyAgICAgICAgIiIicmV0dXJuIHRoZSBzZXQgb2YgYWxsIHVzZXJzIGZvciBhIGdpdmVuIGhlYWRlciIiIgorICAgICAgICByZXR1cm4gc2V0KHNlbGYuaGVhZGVycy5nZXQoaGVhZGVyKSkKKworICAgIGRlZiBnZXRBbGxVc2VycyhzZWxmKToKKyAgICAgICAgIiIicmV0dXJuIGEgZGljdGlvbmFyeSBtYXBwaW5nIGhlYWFkZXJzIHRvIHRoZWlyIHVzZXIgc2V0IiIiCisgICAgICAgIHJldHVybiBzZWxmLmhlYWRlcnMuY29weSgpCisKKyAgICBkZWYgZ2V0RmlsZXMoc2VsZik6CisgICAgICAgICIiInJldHVybnMgdGhlIHNldCBvZiBmaWxlcyB0aGF0IGRvIGluY2x1ZGUga2VybmVsIGhlYWRlcnMiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuZmlsZXMuY29weSgpCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIyMjIworIyMjIyMgICAgICAgICAgIEggRSBBIEQgRSBSICAgRiBJIE4gRCBFIFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMKKyMjIyMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCitjbGFzcyBLZXJuZWxIZWFkZXJGaW5kZXI6CisgICAgIiIiYSBjbGFzcyB1c2VkIHRvIHNjYW4gdGhlIGtlcm5lbCBoZWFkZXJzIHRoZW1zZWx2ZXMuIiIiCisKKyAgICAjIHRoaXMgaXMgZGlmZmVyZW50CisgICAgIyAgZnJvbSBhIEhlYWRlclNjYW5uZXIgYmVjYXVzZSB3ZSBuZWVkIHRvIHRyYW5zbGF0ZSB0aGUgcGF0aCByZXR1cm5lZCBieQorICAgICMgIEhlYWRlclNjYW5uZXIuZ2V0SGVhZGVycygpIGludG8gcG9zc2libHkgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG9uZXMuCisgICAgIworICAgICMgZm9yIGV4YW1wbGUsIDxhc20vWFhYWC5oPiBuZWVkcyB0byBiZSB0cmFuc2xhdGVkIGluIDxhc20tQVJDSC9YWFhYLmg+CisgICAgIyB3aGVyZSBBUkNIIGlzIGFwcHJvcHJpYXRlbHkgY2hvc2VuCisKKyAgICAjIGhlcmUncyBob3cgdG8gdXNlIHRoaXM6CisgICAgIworICAgICMgICAgc2Nhbm5lciA9IEhlYWRlclNjYW5uZXIoKQorICAgICMgICAgZm9yIHBhdGggaW4gPHlvdXIgbGlzdCBvZiB1c2VyIHNvdXJjZXM+OgorICAgICMgICAgICAgIHNjYW5uZXIucGFyc2VGaWxlKHBhdGgpCisgICAgIworICAgICMgICAgdXNlZF9oZWFkZXJzID0gc2Nhbm5lci5nZXRIZWFkZXJzKCkKKyAgICAjICAgIGZpbmRlciAgICAgICA9IEtlcm5lbEhlYWRlckZpbmRlcih1c2VkX2hlYWRlcnMsIFsgImFybSIsICJ4ODYiIF0sCisgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxrZXJuZWxfaW5jbHVkZV9wYXRoPiIpCisgICAgIyAgICBhbGxfaGVhZGVycyAgPSBmaW5kZXIuc2NhbkZvckFsbEFyY2hzKCkKKyAgICAjCisgICAgIyAgIG5vdCB0aGF0IHRoZSByZXN1bHQgb2Ygc2NhbkZvckFsbEFyY2hzKCkgaXMgYSBsaXN0IG9mIHJlbGF0aXZlCisgICAgIyAgIGhlYWRlciBwYXRocyB0aGF0IGFyZSBub3QgYnJhY2tldGVkCisgICAgIworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsaGVhZGVycyxhcmNocyxrZXJuZWxfcm9vdCxrZXJuZWxfY29uZmlnKToKKyAgICAgICAgIiIiaW5pdCBhIEtlcm5lbEhlYWRlclNjYW5uZXIsCisKKyAgICAgICAgICAgICdoZWFkZXJzJyBpcyBhIGxpc3Qgb3Igc2V0IG9mIGhlYWRlcnMsCisgICAgICAgICAgICAnYXJjaHMnIGlzIGEgbGlzdCBvZiBhcmNoaXRlY3R1cmVzCisgICAgICAgICAgICAna2VybmVsX3Jvb3QnIGlzIHRoZSBwYXRoIHRvIHRoZSAnaW5jbHVkZScgZGlyZWN0b3J5CisgICAgICAgICAgICAgb2YgeW91ciBvcmlnaW5hbCBrZXJuZWwgc291cmNlcworICAgICAgICAiIiIKKworICAgICAgICBpZiBsZW4oa2VybmVsX3Jvb3QpID4gMCBhbmQga2VybmVsX3Jvb3RbLTFdICE9ICIvIjoKKyAgICAgICAgICAgIGtlcm5lbF9yb290ICs9ICIvIgorICAgICAgICAjcHJpbnQgInVzaW5nIGtlcm5lbF9yb290ICVzIiAlIGtlcm5lbF9yb290CisgICAgICAgIHNlbGYuYXJjaHMgICAgICAgICA9IGFyY2hzCisgICAgICAgIHNlbGYuc2VhcmNoZWQgICAgICA9IHNldChoZWFkZXJzKQorICAgICAgICBzZWxmLmtlcm5lbF9yb290ICAgPSBrZXJuZWxfcm9vdAorICAgICAgICBzZWxmLmtlcm5lbF9jb25maWcgPSBrZXJuZWxfY29uZmlnCisgICAgICAgIHNlbGYubmVlZGVkICAgICAgICA9IHt9CisgICAgICAgIHNlbGYuc2V0QXJjaChhcmNoPU5vbmUpCisKKyAgICBkZWYgc2V0QXJjaChzZWxmLGFyY2g9Tm9uZSk6CisgICAgICAgIHNlbGYuY3Vycl9hcmNoID0gYXJjaAorICAgICAgICBzZWxmLmFyY2hfaGVhZGVycyA9IHNldCgpCisgICAgICAgIGlmIGFyY2g6CisgICAgICAgICAgICBzZWxmLnByZWZpeCA9ICJhc20tJXMvIiAlIGFyY2gKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYucHJlZml4ID0gTm9uZQorCisgICAgZGVmIHBhdGhGcm9tSGVhZGVyKHNlbGYsaGVhZGVyKToKKyAgICAgICAgcGF0aCA9IGhlYWRlcgorICAgICAgICBpZiBzZWxmLnByZWZpeCBhbmQgcGF0aC5zdGFydHN3aXRoKCJhc20vIik6CisgICAgICAgICAgICBwYXRoID0gIiVzJXMiICUgKHNlbGYucHJlZml4LCBwYXRoWzQ6XSkKKyAgICAgICAgcmV0dXJuIHBhdGgKKworICAgIGRlZiBwYXRoVG9IZWFkZXIoc2VsZixwYXRoKToKKyAgICAgICAgaWYgc2VsZi5wcmVmaXggYW5kIHBhdGguc3RhcnRzd2l0aChzZWxmLnByZWZpeCk6CisgICAgICAgICAgICBwYXRoID0gImFzbS8lcyIgJSBwYXRoW2xlbihzZWxmLnByZWZpeCk6XQorICAgICAgICByZXR1cm4gIiVzIiAlIHBhdGgKKworICAgIGRlZiBzZXRTZWFyY2hlZEhlYWRlcnMoc2VsZixoZWFkZXJzKToKKyAgICAgICAgc2VsZi5zZWFyY2hlZCA9IHNldChoZWFkZXJzKQorCisgICAgZGVmIHNjYW5Gb3JBcmNoKHNlbGYpOgorICAgICAgICBmcGFyc2VyICAgPSBIZWFkZXJTY2FubmVyKGNvbmZpZz1zZWxmLmtlcm5lbF9jb25maWcpCisgICAgICAgIHdvcmtxdWV1ZSA9IFtdCisgICAgICAgIG5lZWRlZCAgICA9IHt9CisgICAgICAgIGZvciBoIGluIHNlbGYuc2VhcmNoZWQ6CisgICAgICAgICAgICBwYXRoID0gc2VsZi5wYXRoRnJvbUhlYWRlcihoKQorICAgICAgICAgICAgaWYgbm90IHBhdGggaW4gbmVlZGVkOgorICAgICAgICAgICAgICAgIG5lZWRlZFtwYXRoXSA9IHNldCgpCisgICAgICAgICAgICB3b3JrcXVldWUuYXBwZW5kKHBhdGgpCisKKyAgICAgICAgaSA9IDAKKyAgICAgICAgd2hpbGUgaSA8IGxlbih3b3JrcXVldWUpOgorICAgICAgICAgICAgcGF0aCA9IHdvcmtxdWV1ZVtpXQorICAgICAgICAgICAgaSAgICs9IDEKKyAgICAgICAgICAgIGZwYXJzZXIucGFyc2VGaWxlKHNlbGYua2VybmVsX3Jvb3QgKyBwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJjaD1zZWxmLmN1cnJfYXJjaCwga2VybmVsX3Jvb3Q9c2VsZi5rZXJuZWxfcm9vdCkKKyAgICAgICAgICAgIGZvciB1c2VkIGluIGZwYXJzZXIuZ2V0SGVhZGVycygpOgorICAgICAgICAgICAgICAgIHBhdGggID0gc2VsZi5wYXRoRnJvbUhlYWRlcih1c2VkKQorICAgICAgICAgICAgICAgIGlmIG5vdCBwYXRoIGluIG5lZWRlZDoKKyAgICAgICAgICAgICAgICAgICAgbmVlZGVkW3BhdGhdID0gc2V0KCkKKyAgICAgICAgICAgICAgICAgICAgd29ya3F1ZXVlLmFwcGVuZChwYXRoKQorICAgICAgICAgICAgICAgIGZvciB1c2VyIGluIGZwYXJzZXIuZ2V0SGVhZGVyVXNlcnModXNlZCk6CisgICAgICAgICAgICAgICAgICAgIG5lZWRlZFtwYXRoXS5hZGQodXNlcikKKworICAgICAgICAjIG5vdyBjb3B5IHRoZSBhcmNoLXNwZWNpZmljIGhlYWRlcnMgaW50byB0aGUgZ2xvYmFsIGxpc3QKKyAgICAgICAgZm9yIGhlYWRlciBpbiBuZWVkZWQua2V5cygpOgorICAgICAgICAgICAgdXNlcnMgPSBuZWVkZWRbaGVhZGVyXQorICAgICAgICAgICAgaWYgbm90IGhlYWRlciBpbiBzZWxmLm5lZWRlZDoKKyAgICAgICAgICAgICAgICBzZWxmLm5lZWRlZFtoZWFkZXJdID0gc2V0KCkKKworICAgICAgICAgICAgZm9yIHVzZXIgaW4gdXNlcnM6CisgICAgICAgICAgICAgICAgc2VsZi5uZWVkZWRbaGVhZGVyXS5hZGQodXNlcikKKworICAgIGRlZiBzY2FuRm9yQWxsQXJjaHMoc2VsZik6CisgICAgICAgICIiInNjYW4gZm9yIGFsbCBhcmNoaXRlY3R1cmVzIGFuZCByZXR1cm4gdGhlIHNldCBvZiBhbGwgbmVlZGVkIGtlcm5lbCBoZWFkZXJzIiIiCisgICAgICAgIGZvciBhcmNoIGluIHNlbGYuYXJjaHM6CisgICAgICAgICAgICBzZWxmLnNldEFyY2goYXJjaCkKKyAgICAgICAgICAgIHNlbGYuc2NhbkZvckFyY2goKQorCisgICAgICAgIHJldHVybiBzZXQoc2VsZi5uZWVkZWQua2V5cygpKQorCisgICAgZGVmIGdldEhlYWRlclVzZXJzKHNlbGYsaGVhZGVyKToKKyAgICAgICAgIiIicmV0dXJuIHRoZSBzZXQgb2YgYWxsIHVzZXJzIGZvciBhIGdpdmVuIGhlYWRlciIiIgorICAgICAgICByZXR1cm4gc2V0KHNlbGYubmVlZGVkW2hlYWRlcl0pCisKKyAgICBkZWYgZ2V0QXJjaEhlYWRlcnMoc2VsZixhcmNoKToKKyAgICAgICAgIiIicmV0dXJuIHRoZSBzZXQgb2YgYWxsIDxhc20vLi4uPiBoZWFkZXJzIHJlcXVpcmVkIGJ5IGEgZ2l2ZW4gYXJjaGl0ZWN0dXJlIiIiCisgICAgICAgIHJldHVybiBzZXQoKSAgIyBYWFg6IFRPRE8KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIyMjIworIyMjIyMgICAgICAgICAgIEMgTyBOIEYgSSBHICAgUCBBIFIgUyBFIFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIyMjIworIyMjIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitjbGFzcyBDb25maWdQYXJzZXI6CisgICAgIiIiYSBjbGFzcyB1c2VkIHRvIHBhcnNlIHRoZSBMaW51eCBrZXJuZWwgLmNvbmZpZyBmaWxlIiIiCisgICAgcmVfQ09ORklHXyA9IHJlLmNvbXBpbGUociJeKENPTkZJR19cdyspPSguKikkIikKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5pdGVtcyA9IHt9CisgICAgICAgIHNlbGYuZHVwbGljYXRlcyA9IEZhbHNlCisKKyAgICBkZWYgcGFyc2VMaW5lKHNlbGYsbGluZSk6CisgICAgICAgIGxpbmUgPSBzdHJpbmcuc3RyaXAobGluZSkKKworICAgICAgICAjIHNraXAgZW1wdHkgYW5kIGNvbW1lbnQgbGluZXMKKyAgICAgICAgaWYgbGVuKGxpbmUpID09IDAgb3IgbGluZVswXSA9PSAiIyI6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBtID0gQ29uZmlnUGFyc2VyLnJlX0NPTkZJR18ubWF0Y2gobGluZSkKKyAgICAgICAgaWYgbm90IG06IHJldHVybgorCisgICAgICAgIG5hbWUgID0gbS5ncm91cCgxKQorICAgICAgICB2YWx1ZSA9IG0uZ3JvdXAoMikKKworICAgICAgICBpZiBuYW1lIGluIHNlbGYuaXRlbXM6ICAjIGFhcmcsIGR1cGxpY2F0ZSB2YWx1ZQorICAgICAgICAgICAgc2VsZi5kdXBsaWNhdGVzID0gVHJ1ZQorCisgICAgICAgIHNlbGYuaXRlbXNbbmFtZV0gPSB2YWx1ZQorCisgICAgZGVmIHBhcnNlRmlsZShzZWxmLHBhdGgpOgorICAgICAgICBmID0gZmlsZShwYXRoLCAiciIpCisgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICBpZiBsZW4obGluZSkgPiAwOgorICAgICAgICAgICAgICAgIGlmIGxpbmVbLTFdID09ICJcbiI6CisgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lWzotMV0KKyAgICAgICAgICAgICAgICAgICAgaWYgbGVuKGxpbmUpID4gMCBhbmQgbGluZVstMV0gPT0gIlxyIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lWzotMV0KKyAgICAgICAgICAgICAgICBzZWxmLnBhcnNlTGluZShsaW5lKQorICAgICAgICBmLmNsb3NlKCkKKworICAgIGRlZiBnZXREZWZpbml0aW9ucyhzZWxmKToKKyAgICAgICAgIiIicmV0cmlldmUgYSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgZGVmaW5pdGlvbnMgZm9yIENPTkZJR19YWFgiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuaXRlbXMuY29weSgpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiByZXByKHNlbGYuaXRlbXMpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHN0cihzZWxmLml0ZW1zKQpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weSBiL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjI3MmZjZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKQEAgLTAsMCArMSw4MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCitpbXBvcnQgc3lzLCBjcHAsIGtlcm5lbCwgZ2xvYiwgb3MsIHJlLCBnZXRvcHQsIGNsZWFuX2hlYWRlcgorZnJvbSBkZWZhdWx0cyBpbXBvcnQgKgorZnJvbSB1dGlscyBpbXBvcnQgKgorCitkZWYgdXNhZ2UoKToKKyAgICBwcmludCAiIiJcCisgIHVzYWdlOiAlKHByb2duYW1lKXMKKworICAgIHRoaXMgcHJvZ3JhbSBpcyB1c2VkIHRvIHVwZGF0ZSBhbGwgdGhlIGF1dG8tZ2VuZXJhdGVkIGNsZWFuIGhlYWRlcnMKKyAgICB1c2VkIGJ5IHRoZSBCaW9uaWMgQyBsaWJyYXJ5LiBpdCBhc3N1bWVzIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgIC0gYSBzZXQgb2Ygc291cmNlIGtlcm5lbCBoZWFkZXJzIGlzIGxvY2F0ZWQgaW4gJy4uL29yaWdpbmFsJywKKyAgICAgICAgcmVsYXRpdmUgdG8gdGhlIHByb2dyYW0ncyBkaXJlY3RvcnkKKworICAgICAgLSB0aGUgY2xlYW4gaGVhZGVycyB3aWxsIGJlIHBsYWNlZCBpbiAnLi4vYXJjaC08YXJjaD4vYXNtJywKKyAgICAgICAgJy4uL2NvbW1vbi9saW51eCcsICcuLi9jb21tb24vYXNtLWdlbmVyaWMnLCBldGMuLgorCisgICAgICAtIGlmIEFORFJPSURfUFJPRFVDVF9PVVQgaXMgZGVmaW5lZCBpbiB5b3VyIGVudmlyb25tZW50LCB5b3UncmUKKyAgICAgICAgdXNpbmcgdGhlIEFuZHJvaWQgYnVpbGQgc3lzdGVtLCBhbmQgdGhlIHByb2dyYW0gd2lsbCBpc3N1ZQorICAgICAgICBwNCBhZGQgLyBlZGl0IC8gZGVsZXRlIGNvbW1hbmRzIHRvIHVwZGF0ZSB0aGUgZGVwb3QgZm9yIHlvdS4KKyAgICAgICAgKHlvdSdsbCBuZWVkIHRvIHA0IHN1Ym1pdCBtYW51YWxseSB0aG91Z2gpCisiIiIgJSB7ICJwcm9nbmFtZSIgOiBvcy5wYXRoLmJhc2VuYW1lKHN5cy5hcmd2WzBdKSB9CisgICAgc3lzLmV4aXQoMCkKKwordHJ5OgorICAgIG9wdGxpc3QsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KCBzeXMuYXJndlsxOl0sICcnICkKK2V4Y2VwdDoKKyAgICAjIHVucmVjb2duaXplZCBvcHRpb24KKyAgICBzeXMuc3RkZXJyLndyaXRlKCAiZXJyb3I6IHVucmVjb2duaXplZCBvcHRpb25cbiIgKQorICAgIHVzYWdlKCkKKworaWYgbGVuKG9wdGxpc3QpID4gMCBvciBsZW4oYXJncykgPiAwOgorICAgIHVzYWdlKCkKKworcHJvZ2RpciA9IGZpbmRfcHJvZ3JhbV9kaXIoKQorb3JpZ2luYWxfZGlyID0gb3MucGF0aC5ub3JtcGF0aCggcHJvZ2RpciArICIvLi4vb3JpZ2luYWwiICkKK2lmIG5vdCBvcy5wYXRoLmlzZGlyKCBvcmlnaW5hbF9kaXIgKToKKyAgICBwYW5pYyggInJlcXVpcmVkIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdHM6ICVzXG4iICUgb3JpZ2luYWxfZGlyICkKKworIyBmaW5kIGFsbCBzb3VyY2UgZmlsZXMgaW4gJ29yaWdpbmFsJworIworc291cmNlcyA9IFtdCitmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2Fsayggb3JpZ2luYWxfZGlyICk6CisgICAgZm9yIGZpbGUgaW4gZmlsZXM6CisgICAgICAgIGJhc2UsIGV4dCA9IG9zLnBhdGguc3BsaXRleHQoZmlsZSkKKyAgICAgICAgaWYgZXh0ID09ICIuaCI6CisgICAgICAgICAgICBzb3VyY2VzLmFwcGVuZCggIiVzLyVzIiAlIChyb290LGZpbGUpICkKKworYiA9IEJhdGNoRmlsZVVwZGF0ZXIoKQorCitmb3IgYXJjaCBpbiBrZXJuZWxfYXJjaHM6CisgICAgYi5yZWFkRGlyKCBvcy5wYXRoLm5vcm1wYXRoKCBwcm9nZGlyICsgIi8uLi9hcmNoLSVzIiAlIGFyY2ggKSApCisKK2IucmVhZERpciggb3MucGF0aC5ub3JtcGF0aCggcHJvZ2RpciArICIvLi4vY29tbW9uIiApICkKKworI3ByaW50ICJPTEQgIiArIHJlcHIoYi5vbGRfZmlsZXMpCisKK2ZvciBwYXRoIGluIHNvdXJjZXM6CisgICAgZHN0X3BhdGgsIG5ld2RhdGEgPSBjbGVhbl9oZWFkZXIuY2xlYW51cEZpbGUocGF0aCkKKyAgICBpZiBub3QgZHN0X3BhdGg6CisgICAgICAgIGNvbnRpbnVlCisKKyAgICBiLnJlYWRGaWxlKCBkc3RfcGF0aCApCisgICAgciA9IGIuZWRpdEZpbGUoIGRzdF9wYXRoLCBuZXdkYXRhICkKKyAgICBpZiByID09IDA6CisgICAgICAgIHIgPSAidW5jaGFuZ2VkIgorICAgIGVsaWYgciA9PSAxOgorICAgICAgICByID0gImVkaXRlZCIKKyAgICBlbHNlOgorICAgICAgICByID0gImFkZGVkIgorCisgICAgcHJpbnQgImNsZWFuaW5nOiAlLSpzIC0+ICUtKnMgKCVzKSIgJSAoIDM1LCBwYXRoLCAzNSwgZHN0X3BhdGgsIHIgKQorCit1c2VQZXJmb3JjZSA9IG9zLmVudmlyb24uaGFzX2tleSgiQU5EUk9JRF9QUk9EVUNUX09VVCIpCisKK2lmIHVzZVBlcmZvcmNlOgorICAgIGIudXBkYXRlUDRGaWxlcygpCitlbHNlOgorICAgIGIudXBkYXRlRmlsZXMoKQorCitzeXMuZXhpdCgwKQpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdG9vbHMvdXRpbHMucHkgYi9saWJjL2tlcm5lbC90b29scy91dGlscy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjNjN2QyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvdG9vbHMvdXRpbHMucHkKQEAgLTAsMCArMSwzOTcgQEAKKyMgY29tbW9uIHB5dGhvbiB1dGlsaXR5IHJvdXRpbmVzIGZvciB0aGUgQmlvbmljIHRvb2wgc2NyaXB0cworCitpbXBvcnQgc3lzLCBvcywgY29tbWFuZHMsIHN0cmluZywgY29tbWFuZHMKKworIyBiYXNpYyBkZWJ1Z2dpbmcgdHJhY2Ugc3VwcG9ydAorIyBjYWxsIERfc2V0bGV2ZWwgdG8gc2V0IHRoZSB2ZXJib3NpdHkgbGV2ZWwKKyMgYW5kIEQoKSwgRDIoKSwgRDMoKSwgRDQoKSB0byBhZGQgdHJhY2VzCisjCit2ZXJib3NlID0gMAorCitkZWYgcGFuaWMobXNnKToKKyAgICBzeXMuc3RkZXJyLndyaXRlKCBmaW5kX3Byb2dyYW1fbmFtZSgpICsgIjogZXJyb3I6ICIgKQorICAgIHN5cy5zdGRlcnIud3JpdGUoIG1zZyApCisgICAgc3lzLmV4aXQoMSkKKworZGVmIEQobXNnKToKKyAgICBnbG9iYWwgdmVyYm9zZQorICAgIGlmIHZlcmJvc2UgPiAwOgorICAgICAgICBwcmludCBtc2cKKworZGVmIEQyKG1zZyk6CisgICAgZ2xvYmFsIHZlcmJvc2UKKyAgICBpZiB2ZXJib3NlID49IDI6CisgICAgICAgIHByaW50IG1zZworCitkZWYgRDMobXNnKToKKyAgICBnbG9iYWwgdmVyYm9zZQorICAgIGlmIHZlcmJvc2UgPj0gMzoKKyAgICAgICAgcHJpbnQgbXNnCisKK2RlZiBENChtc2cpOgorICAgIGdsb2JhbCB2ZXJib3NlCisgICAgaWYgdmVyYm9zZSA+PSA0OgorICAgICAgICBwcmludCBtc2cKKworZGVmIERfc2V0bGV2ZWwobGV2ZWwpOgorICAgIGdsb2JhbCB2ZXJib3NlCisgICAgdmVyYm9zZSA9IGxldmVsCisKKworIyAgb3RoZXIgc3R1ZmYKKyMKKyMKK2RlZiBmaW5kX3Byb2dyYW1fbmFtZSgpOgorICAgIHJldHVybiBvcy5wYXRoLmJhc2VuYW1lKHN5cy5hcmd2WzBdKQorCitkZWYgZmluZF9wcm9ncmFtX2RpcigpOgorICAgIHJldHVybiBvcy5wYXRoLmRpcm5hbWUoc3lzLmFyZ3ZbMF0pCisKK2RlZiBmaW5kX2ZpbGVfZnJvbV91cHdhcmRzKGZyb21fcGF0aCx0YXJnZXRfZmlsZSk6CisgICAgIiIiZmluZCBhIGZpbGUgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IG9yIGl0cyBwYXJlbnRzLiBpZiAnZnJvbV9wYXRoJyBpcyBOb25lLAorICAgICAgIHNlYWNoIGZyb20gdGhlIGN1cnJlbnQgcHJvZ3JhbSdzIGRpcmVjdG9yeSIiIgorICAgIHBhdGggPSBmcm9tX3BhdGgKKyAgICBpZiBwYXRoID09IE5vbmU6CisgICAgICAgIHBhdGggPSBvcy5wYXRoLnJlYWxwYXRoKHN5cy5hcmd2WzBdKQorICAgICAgICBwYXRoID0gb3MucGF0aC5kaXJuYW1lKHBhdGgpCisgICAgICAgIEQoInRoaXMgc2NyaXB0IHNlZW1zIHRvIGJlIGxvY2F0ZWQgaW46ICVzIiAlIHBhdGgpCisKKyAgICB3aGlsZSAxOgorICAgICAgICBEKCJwcm9iaW5nICIrcGF0aCkKKyAgICAgICAgaWYgcGF0aCA9PSAiIjoKKyAgICAgICAgICAgIGZpbGUgPSB0YXJnZXRfZmlsZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZmlsZSA9IHBhdGggKyAiLyIgKyB0YXJnZXRfZmlsZQorCisgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGZpbGUpOgorICAgICAgICAgICAgRCgiZm91bmQgJXMgaW4gJXMiICUgKHRhcmdldF9maWxlLCBwYXRoKSkKKyAgICAgICAgICAgIHJldHVybiBmaWxlCisKKyAgICAgICAgaWYgcGF0aCA9PSAiIjoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgcGF0aCA9IG9zLnBhdGguZGlybmFtZShwYXRoKQorCitkZWYgZmluZF9iaW9uaWNfcm9vdCgpOgorICAgIGZpbGUgPSBmaW5kX2ZpbGVfZnJvbV91cHdhcmRzKE5vbmUsICJTWVNDQUxMUy5UWFQiKQorICAgIGlmIGZpbGU6CisgICAgICAgIHJldHVybiBvcy5wYXRoLmRpcm5hbWUoZmlsZSkKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gTm9uZQorCitkZWYgZmluZF9rZXJuZWxfaGVhZGVycygpOgorICAgICIiInRyeSB0byBmaW5kIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUga2VybmVsIGhlYWRlcnMgZm9yIHRoaXMgbWFjaGluZSIiIgorICAgIHN0YXR1cywgdmVyc2lvbiA9IGNvbW1hbmRzLmdldHN0YXR1c291dHB1dCggInVuYW1lIC1yIiApICAjIGdldCBMaW51eCBrZXJuZWwgdmVyc2lvbgorICAgIGlmIHN0YXR1cyAhPSAwOgorICAgICAgICBEKCJjb3VsZCBub3QgZXhlY3V0ZSAndW5hbWUgLXInIGNvbW1hbmQgcHJvcGVybHkiKQorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgIyBnZXQgcmlkIG9mIHRoZSAiLXhlblUiIHN1ZmZpeCB0aGF0IGlzIGZvdW5kIGluIFhlbiB2aXJ0dWFsIG1hY2hpbmVzCisgICAgaWYgbGVuKHZlcnNpb24pID4gNSBhbmQgdmVyc2lvblstNTpdID09ICIteGVuVSI6CisgICAgICAgIHZlcnNpb24gPSB2ZXJzaW9uWzotNV0KKworICAgIHBhdGggPSAiL3Vzci9zcmMvbGludXgtaGVhZGVycy0iICsgdmVyc2lvbgorICAgIEQoInByb2JpbmcgJXMgZm9yIGtlcm5lbCBoZWFkZXJzIiAlIChwYXRoKyIvaW5jbHVkZSIpKQorICAgIHJldCA9IG9zLnBhdGguaXNkaXIoIHBhdGggKQorICAgIGlmIHJldDoKKyAgICAgICAgRCgiZm91bmQga2VybmVsIGhlYWRlcnMgaW46ICVzIiAlIChwYXRoICsgIi9pbmNsdWRlIikpCisgICAgICAgIHJldHVybiBwYXRoCisgICAgcmV0dXJuIE5vbmUKKworCisjIHBhcnNlciBmb3IgdGhlIFNZU0NBTExTLlRYVCBmaWxlCisjCitjbGFzcyBTeXNDYWxsc1R4dFBhcnNlcjoKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuc3lzY2FsbHMgPSBbXQorICAgICAgICBzZWxmLmxpbmVubyAgID0gMAorCisgICAgZGVmIEUobXNnKToKKyAgICAgICAgcHJpbnQgIiVkOiAlcyIgJSAoc2VsZi5saW5lbm8sIG1zZykKKworICAgIGRlZiBwYXJzZV9saW5lKHNlbGYsIGxpbmUpOgorICAgICAgICBwb3NfbHBhcmVuID0gbGluZS5maW5kKCcoJykKKyAgICAgICAgRSAgICAgICAgICA9IHNlbGYuRQorICAgICAgICBpZiBwb3NfbHBhcmVuIDwgMDoKKyAgICAgICAgICAgIEUoIm1pc3NpbmcgbGVmdCBwYXJlbnRoZXNpcyBpbiAnJXMnIiAlIGxpbmUpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBwb3NfcnBhcmVuID0gbGluZS5yZmluZCgnKScpCisgICAgICAgIGlmIHBvc19ycGFyZW4gPCAwIG9yIHBvc19ycGFyZW4gPD0gcG9zX2xwYXJlbjoKKyAgICAgICAgICAgIEUoIm1pc3Npbmcgb3IgbWlzcGxhY2VkIHJpZ2h0IHBhcmVudGhlc2lzIGluICclcyciICUgbGluZSkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHJldHVybl90eXBlID0gbGluZVs6cG9zX2xwYXJlbl0uc3RyaXAoKS5zcGxpdCgpCisgICAgICAgIGlmIGxlbihyZXR1cm5fdHlwZSkgPCAyOgorICAgICAgICAgICAgRSgibWlzc2luZyByZXR1cm4gdHlwZSBpbiAnJXMnIiAlIGxpbmUpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzeXNjYWxsX2Z1bmMgPSByZXR1cm5fdHlwZVstMV0KKyAgICAgICAgcmV0dXJuX3R5cGUgID0gc3RyaW5nLmpvaW4ocmV0dXJuX3R5cGVbOi0xXSwnICcpCisKKyAgICAgICAgcG9zX2NvbG9uID0gc3lzY2FsbF9mdW5jLmZpbmQoJzonKQorICAgICAgICBpZiBwb3NfY29sb24gPCAwOgorICAgICAgICAgICAgc3lzY2FsbF9uYW1lID0gc3lzY2FsbF9mdW5jCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBwb3NfY29sb24gPT0gMCBvciBwb3NfY29sb24rMSA+PSBsZW4oc3lzY2FsbF9mdW5jKToKKyAgICAgICAgICAgICAgICBFKCJtaXNwbGFjZWQgY29sb24gaW4gJyVzJyIgJSBsaW5lKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgc3lzY2FsbF9uYW1lID0gc3lzY2FsbF9mdW5jW3Bvc19jb2xvbisxOl0KKyAgICAgICAgICAgIHN5c2NhbGxfZnVuYyA9IHN5c2NhbGxfZnVuY1s6cG9zX2NvbG9uXQorCisgICAgICAgIGlmIHBvc19ycGFyZW4gPiBwb3NfbHBhcmVuKzE6CisgICAgICAgICAgICBzeXNjYWxsX3BhcmFtcyA9IGxpbmVbcG9zX2xwYXJlbisxOnBvc19ycGFyZW5dLnNwbGl0KCcsJykKKyAgICAgICAgICAgIHBhcmFtcyAgICAgICAgID0gc3RyaW5nLmpvaW4oc3lzY2FsbF9wYXJhbXMsJywnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3lzY2FsbF9wYXJhbXMgPSBbXQorICAgICAgICAgICAgcGFyYW1zICAgICAgICAgPSAidm9pZCIKKworICAgICAgICBudW1iZXIgPSBsaW5lW3Bvc19ycGFyZW4rMTpdLnN0cmlwKCkKKyAgICAgICAgaWYgbnVtYmVyID09ICJzdHViIjoKKyAgICAgICAgICAgIHN5c2NhbGxfaWQgID0gLTEKKyAgICAgICAgICAgIHN5c2NhbGxfaWQyID0gLTEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBudW1iZXJbMF0gPT0gJyMnOgorICAgICAgICAgICAgICAgICAgICBudW1iZXIgPSBudW1iZXJbMTpdLnN0cmlwKCkKKyAgICAgICAgICAgICAgICBudW1iZXJzID0gc3RyaW5nLnNwbGl0KG51bWJlciwnLCcpCisgICAgICAgICAgICAgICAgc3lzY2FsbF9pZCAgPSBpbnQobnVtYmVyc1swXSkKKyAgICAgICAgICAgICAgICBzeXNjYWxsX2lkMiA9IHN5c2NhbGxfaWQKKyAgICAgICAgICAgICAgICBpZiBsZW4obnVtYmVycykgPiAxOgorICAgICAgICAgICAgICAgICAgICBzeXNjYWxsX2lkMiA9IGludChudW1iZXJzWzFdKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIEUoImludmFsaWQgc3lzY2FsbCBudW1iZXIgaW4gJyVzJyIgJSBsaW5lKQorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHQgPSB7ICJpZCIgICAgIDogc3lzY2FsbF9pZCwKKyAgICAgICAgICAgICAgImlkMiIgICAgOiBzeXNjYWxsX2lkMiwKKyAgICAgICAgICAgICAgIm5hbWUiICAgOiBzeXNjYWxsX25hbWUsCisgICAgICAgICAgICAgICJmdW5jIiAgIDogc3lzY2FsbF9mdW5jLAorICAgICAgICAgICAgICAicGFyYW1zIiA6IHN5c2NhbGxfcGFyYW1zLAorICAgICAgICAgICAgICAiZGVjbCIgICA6ICIlLTE1cyAgJXMgKCVzKTsiICUgKHJldHVybl90eXBlLCBzeXNjYWxsX2Z1bmMsIHBhcmFtcykgfQorCisgICAgICAgIHNlbGYuc3lzY2FsbHMuYXBwZW5kKHQpCisKKyAgICBkZWYgcGFyc2VfZmlsZShzZWxmLCBmaWxlX3BhdGgpOgorICAgICAgICBmcCA9IG9wZW4oZmlsZV9wYXRoKQorICAgICAgICBmb3IgbGluZSBpbiBmcC54cmVhZGxpbmVzKCk6CisgICAgICAgICAgICBzZWxmLmxpbmVubyArPSAxCisgICAgICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCisgICAgICAgICAgICBpZiBub3QgbGluZTogY29udGludWUKKyAgICAgICAgICAgIGlmIGxpbmVbMF0gPT0gJyMnOiBjb250aW51ZQorICAgICAgICAgICAgc2VsZi5wYXJzZV9saW5lKGxpbmUpCisKKyAgICAgICAgZnAuY2xvc2UoKQorCisKK2NsYXNzIE91dHB1dDoKKyAgICBkZWYgIF9faW5pdF9fKHNlbGYsb3V0PXN5cy5zdGRvdXQpOgorICAgICAgICBzZWxmLm91dCA9IG91dAorCisgICAgZGVmIHdyaXRlKHNlbGYsbXNnKToKKyAgICAgICAgc2VsZi5vdXQud3JpdGUobXNnKQorCisgICAgZGVmIHdyaXRlbG4oc2VsZixtc2cpOgorICAgICAgICBzZWxmLm91dC53cml0ZShtc2cpCisgICAgICAgIHNlbGYub3V0LndyaXRlKCJcbiIpCisKK2NsYXNzIFN0cmluZ091dHB1dDoKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYubGluZSA9ICIiCisKKyAgICBkZWYgd3JpdGUoc2VsZixtc2cpOgorICAgICAgICBzZWxmLmxpbmUgKz0gbXNnCisgICAgICAgIEQyKCJ3cml0ZSAnJXMnIiAlIG1zZykKKworICAgIGRlZiB3cml0ZWxuKHNlbGYsbXNnKToKKyAgICAgICAgc2VsZi5saW5lICs9IG1zZyArICdcbicKKyAgICAgICAgRDIoIndyaXRlICclc1xcbiciJSBtc2cpCisKKyAgICBkZWYgZ2V0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5saW5lCisKKworZGVmIGNyZWF0ZV9maWxlX3BhdGgocGF0aCk6CisgICAgZGlycyA9IFtdCisgICAgd2hpbGUgMToKKyAgICAgICAgcGFyZW50ID0gb3MucGF0aC5kaXJuYW1lKHBhdGgpCisgICAgICAgICNwcmludCAicGFyZW50OiAlcyA8LSAlcyIgJSAocGFyZW50LCBwYXRoKQorICAgICAgICBpZiBwYXJlbnQgPT0gIi8iIG9yIHBhcmVudCA9PSAiIjoKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGRpcnMuYXBwZW5kKHBhcmVudCkKKyAgICAgICAgcGF0aCA9IHBhcmVudAorCisgICAgZGlycy5yZXZlcnNlKCkKKyAgICBmb3IgZGlyIGluIGRpcnM6CisgICAgICAgICNwcmludCAiZGlyICVzIiAlIGRpcgorICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGRpcik6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBvcy5ta2RpcihkaXIpCisKK2RlZiB3YWxrX3NvdXJjZV9maWxlcyhwYXRocyxjYWxsYmFjayxhcmdzLGV4Y2x1ZGVzPVtdKToKKyAgICAiIiJyZWN1cnNpdmVseSB3YWxrIGEgbGlzdCBvZiBwYXRocyBhbmQgZmlsZXMsIG9ubHkga2VlcGluZyB0aGUgc291cmNlIGZpbGVzIGluIGRpcmVjdG9yaWVzIiIiCisgICAgZm9yIHBhdGggaW4gcGF0aHM6CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHBhdGgpOgorICAgICAgICAgICAgY2FsbGJhY2socGF0aCxhcmdzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsocGF0aCk6CisgICAgICAgICAgICAgICAgI3ByaW50ICJ3LS0gJXMgKGV4OiAlcykiICUgKHJlcHIoKHJvb3QsZGlycykpLCByZXByKGV4Y2x1ZGVzKSkKKyAgICAgICAgICAgICAgICBpZiBsZW4oZXhjbHVkZXMpOgorICAgICAgICAgICAgICAgICAgICBmb3IgZCBpbiBkaXJzWzpdOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZCBpbiBleGNsdWRlczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJzLnJlbW92ZShkKQorICAgICAgICAgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgICAgICAgICByLCBleHQgPSBvcy5wYXRoLnNwbGl0ZXh0KGYpCisgICAgICAgICAgICAgICAgICAgIGlmIGV4dCBpbiBbICIuaCIsICIuYyIsICIuY3BwIiwgIi5TIiBdOgorICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soICIlcy8lcyIgJSAocm9vdCxmKSwgYXJncyApCisKK2RlZiBjbGVhbnVwX2RpcihwYXRoKToKKyAgICAiIiJjcmVhdGUgYSBkaXJlY3RvcnkgaWYgbmVlZGVkLCBhbmQgZW5zdXJlIHRoYXQgaXQgaXMgdG90YWxseSBlbXB0eQorICAgICAgIGJ5IHJlbW92aW5nIGFueSBleGlzdGluZyBjb250ZW50IGluIGl0IiIiCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHBhdGgpOgorICAgICAgICBvcy5ta2RpcihwYXRoKQorICAgIGVsc2U6CisgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHBhdGgsIHRvcGRvd249RmFsc2UpOgorICAgICAgICAgICAgaWYgcm9vdC5lbmRzd2l0aCgia2VybmVsX2hlYWRlcnMvIik6CisgICAgICAgICAgICAgICAgIyBza2lwICdrZXJuZWxfaGVhZGVycycKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZm9yIG5hbWUgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgb3MucmVtb3ZlKG9zLnBhdGguam9pbihyb290LCBuYW1lKSkKKyAgICAgICAgICAgIGZvciBuYW1lIGluIGRpcnM6CisgICAgICAgICAgICAgICAgb3Mucm1kaXIob3MucGF0aC5qb2luKHJvb3QsIG5hbWUpKQorCitkZWYgdXBkYXRlX2ZpbGUoIHBhdGgsIG5ld2RhdGEgKToKKyAgICAiIiJ1cGRhdGUgYSBmaWxlIG9uIGRpc2ssIG9ubHkgaWYgaXRzIGNvbnRlbnQgaGFzIGNoYW5nZWQiIiIKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyggcGF0aCApOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmID0gb3BlbiggcGF0aCwgInIiICkKKyAgICAgICAgICAgIG9sZGRhdGEgPSBmLnJlYWQoKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIEQoInVwZGF0ZV9maWxlOiBjYW5ub3QgcmVhZCBleGlzdGluZyBmaWxlICclcyciICUgcGF0aCkKKyAgICAgICAgICAgIHJldHVybiAwCisKKyAgICAgICAgaWYgb2xkYXRhID09IG5ld2RhdGE6CisgICAgICAgICAgICBEMigidXBkYXRlX2ZpbGU6IG5vIGNoYW5nZSB0byBmaWxlICclcyciICUgcGF0aCApCisgICAgICAgICAgICByZXR1cm4gMAorCisgICAgICAgIHVwZGF0ZSA9IDEKKyAgICBlbHNlOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBjcmVhdGVfZmlsZV9wYXRoKHBhdGgpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIEQoInVwZGF0ZV9maWxlOiBjYW5ub3QgY3JlYXRlIHBhdGggdG8gJyVzJyIgJSBwYXRoKQorICAgICAgICAgICAgcmV0dXJuIDAKKworICAgIGYgPSBvcGVuKCBwYXRoLCAidyIgKQorICAgIGYud3JpdGUoIG5ld2RhdGEgKQorICAgIGYuY2xvc2UoKQorCisgICAgcmV0dXJuIDEKKworCitjbGFzcyBCYXRjaEZpbGVVcGRhdGVyOgorICAgICIiImEgY2xhc3MgdXNlZCB0byBlZGl0IHNldmVyYWwgZmlsZXMgYXQgb25jZSIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5vbGRfZmlsZXMgPSBzZXQoKQorICAgICAgICBzZWxmLm5ld19maWxlcyA9IHNldCgpCisgICAgICAgIHNlbGYubmV3X2RhdGEgID0ge30KKworICAgIGRlZiByZWFkRmlsZShzZWxmLHBhdGgpOgorICAgICAgICAjcGF0aCA9IG9zLnBhdGgucmVhbHBhdGgocGF0aCkKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocGF0aCk6CisgICAgICAgICAgICBzZWxmLm9sZF9maWxlcy5hZGQocGF0aCkKKworICAgIGRlZiByZWFkRGlyKHNlbGYscGF0aCk6CisgICAgICAgICNwYXRoID0gb3MucGF0aC5yZWFscGF0aChwYXRoKQorICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhwYXRoKToKKyAgICAgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIGRzdCA9ICIlcy8lcyIgJSAocm9vdCxmKQorICAgICAgICAgICAgICAgIHNlbGYub2xkX2ZpbGVzLmFkZChkc3QpCisKKyAgICBkZWYgZWRpdEZpbGUoc2VsZixkc3QsZGF0YSk6CisgICAgICAgICIiImVkaXQgYSBkZXN0aW5hdGlvbiBmaWxlLiBpZiB0aGUgZmlsZSBpcyBub3QgbWFwcGVkIGZyb20gYSBzb3VyY2UsCisgICAgICAgICAgIGl0IHdpbGwgYmUgYWRkZWQuIHJldHVybiAwIGlmIHRoZSBmaWxlIGNvbnRlbnQgd2Fzbid0IGNoYW5nZWQsCisgICAgICAgICAgIDEgaWYgaXQgd2FzIGVkaXRlZCwgb3IgMiBpZiB0aGUgZmlsZSBpcyBuZXciIiIKKyAgICAgICAgI2RzdCA9IG9zLnBhdGgucmVhbHBhdGgoZHN0KQorICAgICAgICByZXN1bHQgPSAxCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGRzdCk6CisgICAgICAgICAgICBmID0gb3Blbihkc3QsICJyIikKKyAgICAgICAgICAgIG9sZGRhdGEgPSBmLnJlYWQoKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBpZiBvbGRkYXRhID09IGRhdGE6CisgICAgICAgICAgICAgICAgc2VsZi5vbGRfZmlsZXMucmVtb3ZlKGRzdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVzdWx0ID0gMgorCisgICAgICAgIHNlbGYubmV3X2RhdGFbZHN0XSA9IGRhdGEKKyAgICAgICAgc2VsZi5uZXdfZmlsZXMuYWRkKGRzdCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIGdldENoYW5nZXMoc2VsZik6CisgICAgICAgICIiImRldGVybWluZSBjaGFuZ2VzLCByZXR1cm5zIChhZGRzLCBkZWxldGVzLCBlZGl0cykiIiIKKyAgICAgICAgYWRkcyAgICA9IHNldCgpCisgICAgICAgIGVkaXRzICAgPSBzZXQoKQorICAgICAgICBkZWxldGVzID0gc2V0KCkKKworICAgICAgICBmb3IgZHN0IGluIHNlbGYubmV3X2ZpbGVzOgorICAgICAgICAgICAgaWYgbm90IChkc3QgaW4gc2VsZi5vbGRfZmlsZXMpOgorICAgICAgICAgICAgICAgIGFkZHMuYWRkKGRzdCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZWRpdHMuYWRkKGRzdCkKKworICAgICAgICBmb3IgZHN0IGluIHNlbGYub2xkX2ZpbGVzOgorICAgICAgICAgICAgaWYgbm90IGRzdCBpbiBzZWxmLm5ld19maWxlczoKKyAgICAgICAgICAgICAgICBkZWxldGVzLmFkZChkc3QpCisKKyAgICAgICAgcmV0dXJuIChhZGRzLCBkZWxldGVzLCBlZGl0cykKKworICAgIGRlZiBfd3JpdGVGaWxlKHNlbGYsZHN0LGRhdGE9Tm9uZSk6CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmRpcm5hbWUoZHN0KSk6CisgICAgICAgICAgICBjcmVhdGVfZmlsZV9wYXRoKGRzdCkKKyAgICAgICAgaWYgZGF0YSA9PSBOb25lOgorICAgICAgICAgICAgZGF0YSA9IHNlbGYubmV3X2RhdGFbZHN0XQorICAgICAgICBmID0gb3Blbihkc3QsICJ3IikKKyAgICAgICAgZi53cml0ZShzZWxmLm5ld19kYXRhW2RzdF0pCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgZGVmIHVwZGF0ZUZpbGVzKHNlbGYpOgorICAgICAgICBhZGRzLCBkZWxldGVzLCBlZGl0cyA9IHNlbGYuZ2V0Q2hhbmdlcygpCisKKyAgICAgICAgZm9yIGRzdCBpbiBzb3J0ZWQoYWRkcyk6CisgICAgICAgICAgICBzZWxmLl93cml0ZUZpbGUoZHN0KQorCisgICAgICAgIGZvciBkc3QgaW4gc29ydGVkKGVkaXRzKToKKyAgICAgICAgICAgIHNlbGYuX3dyaXRlRmlsZShkc3QpCisKKyAgICAgICAgZm9yIGRzdCBpbiBzb3J0ZWQoZGVsZXRlcyk6CisgICAgICAgICAgICBvcy5yZW1vdmUoZHN0KQorCisgICAgZGVmIHVwZGF0ZVA0RmlsZXMoc2VsZik6CisgICAgICAgIGFkZHMsIGRlbGV0ZXMsIGVkaXRzID0gc2VsZi5nZXRDaGFuZ2VzKCkKKworICAgICAgICBpZiBsZW4oYWRkcyk6CisgICAgICAgICAgICBmaWxlcyA9IHN0cmluZy5qb2luKHNvcnRlZChhZGRzKSwiICIpCisgICAgICAgICAgICBEKCAiJWQgbmV3IGZpbGVzIHdpbGwgYmUgcDQgYWRkLWVkIiAlIGxlbihhZGRzKSApCisgICAgICAgICAgICBmb3IgZHN0IGluIGFkZHM6CisgICAgICAgICAgICAgICAgc2VsZi5fd3JpdGVGaWxlKGRzdCkKKyAgICAgICAgICAgIEQyKCJQNCBBRERTOiAlcyIgJSBmaWxlcykKKyAgICAgICAgICAgIG8gPSBjb21tYW5kcy5nZXRvdXRwdXQoICJwNCBhZGQgIiArIGZpbGVzICkKKyAgICAgICAgICAgIEQyKCBvICkKKworICAgICAgICBpZiBsZW4oZWRpdHMpOgorICAgICAgICAgICAgZmlsZXMgPSBzdHJpbmcuam9pbihzb3J0ZWQoZWRpdHMpLCIgIikKKyAgICAgICAgICAgIEQoICIlZCBmaWxlcyB3aWxsIGJlIHA0IGVkaXQtZWQiICUgbGVuKGVkaXRzKSApCisgICAgICAgICAgICBEMigiUDQgRURJVFM6ICVzIiAlIGZpbGVzKQorICAgICAgICAgICAgbyA9IGNvbW1hbmRzLmdldG91dHB1dCggInA0IGVkaXQgIiArIGZpbGVzICkKKyAgICAgICAgICAgIEQyKCBvICkKKyAgICAgICAgICAgIGZvciBkc3QgaW4gZWRpdHM6CisgICAgICAgICAgICAgICAgc2VsZi5fd3JpdGVGaWxlKGRzdCkKKworICAgICAgICBpZiBsZW4oZGVsZXRlcyk6CisgICAgICAgICAgICBmaWxlcyA9IHN0cmluZy5qb2luKHNvcnRlZChkZWxldGVzKSwiICIpCisgICAgICAgICAgICBEKCAiJWQgZmlsZXMgd2lsbCBiZSBwNCBkZWxldGUtZCIgJSBsZW4oZGVsZXRlcykgKQorICAgICAgICAgICAgRDIoIlA0IERFTEVURVM6ICVzIiAlIGZpbGVzKQorICAgICAgICAgICAgbyA9IGNvbW1hbmRzLmdldG91dHB1dCggInA0IGRlbGV0ZSAiICsgZmlsZXMgKQorICAgICAgICAgICAgRDIoIG8gKQpkaWZmIC0tZ2l0IGEvbGliYy9uZXRic2QvZ2V0aG5hbWFkZHIuYyBiL2xpYmMvbmV0YnNkL2dldGhuYW1hZGRyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMyMTliMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvbmV0YnNkL2dldGhuYW1hZGRyLmMKQEAgLTAsMCArMSwxMjEwIEBACisvKgkkTmV0QlNEOiBnZXRobmFtYWRkci5jLHYgMS43MCAyMDA2LzAzLzIyIDAwOjAzOjUxIGNocmlzdG9zIEV4cCAkCSovCisKKy8qCisgKiArK0NvcHlyaWdodCsrIDE5ODUsIDE5ODgsIDE5OTMKKyAqIC0KKyAqIENvcHlyaWdodCAoYykgMTk4NSwgMTk4OCwgMTk5MworICogICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICogLQorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTkzIGJ5IERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQKKyAqIHRoZSBuYW1lIG9mIERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yCisgKiBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIGRvY3VtZW50IG9yIHNvZnR3YXJlIHdpdGhvdXQKKyAqIHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIERJR0lUQUwgRVFVSVBNRU5UIENPUlAuIERJU0NMQUlNUyBBTEwKKyAqIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gICBJTiBOTyBFVkVOVCBTSEFMTCBESUdJVEFMIEVRVUlQTUVOVAorICogQ09SUE9SQVRJT04gQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SCisgKiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUworICogQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTCisgKiBTT0ZUV0FSRS4KKyAqIC0KKyAqIC0tQ29weXJpZ2h0LS0KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2luY2x1ZGUgImFycGFfbmFtZXNlci5oIgorI2luY2x1ZGUgInJlc29sdl9wcml2YXRlLmgiCisjaW5jbHVkZSAicmVzb2x2X2NhY2hlLmgiCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzeXNsb2cuaD4KKworI2lmbmRlZiBMT0dfQVVUSAorIyBkZWZpbmUgTE9HX0FVVEggMAorI2VuZGlmCisKKyNkZWZpbmUgTVVMVElfUFRSU19BUkVfQUxJQVNFUyAxCS8qIFhYWCAtIGV4cGVyaW1lbnRhbCAqLworCisjaW5jbHVkZSAibnNzd2l0Y2guaCIKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworc3RhdGljIGNvbnN0IGNoYXIgY29uc3QgQXNrZWRGb3JHb3RbXSA9CisJCQkgICJnZXRob3N0YnkqLmdldGFuc3dlcjogYXNrZWQgZm9yIFwiJXNcIiwgZ290IFwiJXNcIiI7CisKKyNkZWZpbmUJTUFYUEFDS0VUCSg2NCoxMDI0KQorCit0eXBlZGVmIHVuaW9uIHsKKyAgICBIRUFERVIgaGRyOworICAgIHVfY2hhciBidWZbTUFYUEFDS0VUXTsKK30gcXVlcnlidWY7CisKK3R5cGVkZWYgdW5pb24geworICAgIGludDMyX3QgYWw7CisgICAgY2hhciBhYzsKK30gYWxpZ247CisKKyNpZmRlZiBERUJVRworc3RhdGljIHZvaWQgZHByaW50Zihjb25zdCBjaGFyICosIHJlc19zdGF0ZSwgLi4uKQorCV9fYXR0cmlidXRlX18oKF9fZm9ybWF0X18oX19wcmludGZfXywgMSwgMykpKTsKKyNlbmRpZgorc3RhdGljIHN0cnVjdCBob3N0ZW50ICpnZXRhbnN3ZXIoY29uc3QgcXVlcnlidWYgKiwgaW50LCBjb25zdCBjaGFyICosIGludCwKKyAgICByZXNfc3RhdGUpOworc3RhdGljIHZvaWQgbWFwX3Y0djZfYWRkcmVzcyhjb25zdCBjaGFyICosIGNoYXIgKik7CitzdGF0aWMgdm9pZCBtYXBfdjR2Nl9ob3N0ZW50KHN0cnVjdCBob3N0ZW50ICosIGNoYXIgKiosIGNoYXIgKik7CitzdGF0aWMgdm9pZCBhZGRyc29ydChjaGFyICoqLCBpbnQsIHJlc19zdGF0ZSk7CisKK3ZvaWQgX3NldGh0ZW50KGludCk7Cit2b2lkIF9lbmRodGVudCh2b2lkKTsKK3N0cnVjdCBob3N0ZW50ICpfZ2V0aHRlbnQodm9pZCk7Cit2b2lkIGh0X3NldGhvc3RlbnQoaW50KTsKK3ZvaWQgaHRfZW5kaG9zdGVudCh2b2lkKTsKK3N0cnVjdCBob3N0ZW50ICpodF9nZXRob3N0YnluYW1lKGNoYXIgKik7CitzdHJ1Y3QgaG9zdGVudCAqaHRfZ2V0aG9zdGJ5YWRkcihjb25zdCBjaGFyICosIGludCwgaW50KTsKK3ZvaWQgZG5zX3NlcnZpY2Uodm9pZCk7CisjdW5kZWYgZG5fc2tpcG5hbWUKK2ludCBkbl9za2lwbmFtZShjb25zdCB1X2NoYXIgKiwgY29uc3QgdV9jaGFyICopOworaW50IF9nZXRodGJ5YWRkcih2b2lkICosIHZvaWQgKiwgdmFfbGlzdCk7CitpbnQgX2dldGh0YnluYW1lKHZvaWQgKiwgdm9pZCAqLCB2YV9saXN0KTsKK3N0cnVjdCBob3N0ZW50ICpfZ2V0aHRieW5hbWUyKGNvbnN0IGNoYXIgKiwgaW50KTsKK2ludCBfZG5zX2dldGh0YnlhZGRyKHZvaWQgKiwgdm9pZCAqLCB2YV9saXN0KTsKK2ludCBfZG5zX2dldGh0YnluYW1lKHZvaWQgKiwgdm9pZCAqLCB2YV9saXN0KTsKKworc3RhdGljIHN0cnVjdCBob3N0ZW50ICpnZXRob3N0YnluYW1lX2ludGVybmFsKGNvbnN0IGNoYXIgKiwgaW50LCByZXNfc3RhdGUpOworCitzdGF0aWMgY29uc3QgbnNfc3JjIGRlZmF1bHRfZG5zX2ZpbGVzW10gPSB7CisJeyBOU1NSQ19GSUxFUywgCU5TX1NVQ0NFU1MgfSwKKwl7IE5TU1JDX0ROUywgCU5TX1NVQ0NFU1MgfSwKKwl7IDAsIDAgfQorfTsKKworCisjaWZkZWYgREVCVUcKK3N0YXRpYyB2b2lkCitkcHJpbnRmKGNvbnN0IGNoYXIgKm1zZywgcmVzX3N0YXRlIHJlcywgLi4uKQoreworCWFzc2VydChtc2cgIT0gTlVMTCk7CisKKwlpZiAocmVzLT5vcHRpb25zICYgUkVTX0RFQlVHKSB7CisJCWludCBzYXZlID0gZXJybm87CisJCXZhX2xpc3QgYXA7CisKKwkJdmFfc3RhcnQgKGFwLCByZXMpOworCQl2cHJpbnRmKG1zZywgYXApOworCQl2YV9lbmQgKGFwKTsKKworCQllcnJubyA9IHNhdmU7CisJfQorfQorI2Vsc2UKKyMgZGVmaW5lIGRwcmludGYobXNnLCByZXMsIG51bSkgKCh2b2lkKTApIC8qbmFkYSovCisjZW5kaWYKKworI2RlZmluZSBCT1VOREVEX0lOQ1IoeCkgXAorCWRvIHsgXAorCQljcCArPSAoeCk7IFwKKwkJaWYgKGNwID4gZW9tKSB7IFwKKwkJCWhfZXJybm8gPSBOT19SRUNPVkVSWTsgXAorCQkJcmV0dXJuIE5VTEw7IFwKKwkJfSBcCisJfSB3aGlsZSAoLypDT05TVENPTkQqLzApCisKKyNkZWZpbmUgQk9VTkRTX0NIRUNLKHB0ciwgY291bnQpIFwKKwlkbyB7IFwKKwkJaWYgKChwdHIpICsgKGNvdW50KSA+IGVvbSkgeyBcCisJCQloX2Vycm5vID0gTk9fUkVDT1ZFUlk7IFwKKwkJCXJldHVybiBOVUxMOyBcCisJCX0gXAorCX0gd2hpbGUgKC8qQ09OU1RDT05EKi8wKQorCitzdGF0aWMgc3RydWN0IGhvc3RlbnQgKgorZ2V0YW5zd2VyKGNvbnN0IHF1ZXJ5YnVmICphbnN3ZXIsIGludCBhbnNsZW4sIGNvbnN0IGNoYXIgKnFuYW1lLCBpbnQgcXR5cGUsCisgICAgcmVzX3N0YXRlIHJlcykKK3sKKwljb25zdCBIRUFERVIgKmhwOworCWNvbnN0IHVfY2hhciAqY3A7CisJaW50IG47CisJY29uc3QgdV9jaGFyICplb20sICplcmRhdGE7CisJY2hhciAqYnAsICoqYXAsICoqaGFwLCAqZXA7CisJaW50IHR5cGUsIGNsYXNzLCBhbmNvdW50LCBxZGNvdW50OworCWludCBoYXZlYW5zd2VyLCBoYWRfZXJyb3I7CisJaW50IHRvb2JpZyA9IDA7CisJY2hhciB0YnVmW01BWEROQU1FXTsKKwljb25zdCBjaGFyICp0bmFtZTsKKwlpbnQgKCpuYW1lX29rKShjb25zdCBjaGFyICopOworCXJlc19zdGF0aWMgIHJzID0gX19yZXNfZ2V0X3N0YXRpYygpOworCisJYXNzZXJ0KGFuc3dlciAhPSBOVUxMKTsKKwlhc3NlcnQocW5hbWUgIT0gTlVMTCk7CisKKwl0bmFtZSA9IHFuYW1lOworCXJzLT5ob3N0LmhfbmFtZSA9IE5VTEw7CisJZW9tID0gYW5zd2VyLT5idWYgKyBhbnNsZW47CisJc3dpdGNoIChxdHlwZSkgeworCWNhc2UgVF9BOgorCWNhc2UgVF9BQUFBOgorCQluYW1lX29rID0gcmVzX2hub2s7CisJCWJyZWFrOworCWNhc2UgVF9QVFI6CisJCW5hbWVfb2sgPSByZXNfZG5vazsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIE5VTEw7CS8qIFhYWCBzaG91bGQgYmUgYWJvcnQoKTsgKi8KKwl9CisJLyoKKwkgKiBmaW5kIGZpcnN0IHNhdGlzZmFjdG9yeSBhbnN3ZXIKKwkgKi8KKwlocCA9ICZhbnN3ZXItPmhkcjsKKwlhbmNvdW50ID0gbnRvaHMoaHAtPmFuY291bnQpOworCXFkY291bnQgPSBudG9ocyhocC0+cWRjb3VudCk7CisJYnAgPSBycy0+aG9zdGJ1ZjsKKwllcCA9IHJzLT5ob3N0YnVmICsgc2l6ZW9mIHJzLT5ob3N0YnVmOworCWNwID0gYW5zd2VyLT5idWY7CisJQk9VTkRFRF9JTkNSKEhGSVhFRFNaKTsKKwlpZiAocWRjb3VudCAhPSAxKSB7CisJCWhfZXJybm8gPSBOT19SRUNPVkVSWTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCW4gPSBkbl9leHBhbmQoYW5zd2VyLT5idWYsIGVvbSwgY3AsIGJwLCBlcCAtIGJwKTsKKwlpZiAoKG4gPCAwKSB8fCAhKCpuYW1lX29rKShicCkpIHsKKwkJaF9lcnJubyA9IE5PX1JFQ09WRVJZOworCQlyZXR1cm4gTlVMTDsKKwl9CisJQk9VTkRFRF9JTkNSKG4gKyBRRklYRURTWik7CisJaWYgKHF0eXBlID09IFRfQSB8fCBxdHlwZSA9PSBUX0FBQUEpIHsKKwkJLyogcmVzX3NlbmQoKSBoYXMgYWxyZWFkeSB2ZXJpZmllZCB0aGF0IHRoZSBxdWVyeSBuYW1lIGlzIHRoZQorCQkgKiBzYW1lIGFzIHRoZSBvbmUgd2Ugc2VudDsgdGhpcyBqdXN0IGdldHMgdGhlIGV4cGFuZGVkIG5hbWUKKwkJICogKGkuZS4sIHdpdGggdGhlIHN1Y2NlZWRpbmcgc2VhcmNoLWRvbWFpbiB0YWNrZWQgb24pLgorCQkgKi8KKwkJbiA9IHN0cmxlbihicCkgKyAxOwkJLyogZm9yIHRoZSBcMCAqLworCQlpZiAobiA+PSBNQVhIT1NUTkFNRUxFTikgeworCQkJaF9lcnJubyA9IE5PX1JFQ09WRVJZOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJcnMtPmhvc3QuaF9uYW1lID0gYnA7CisJCWJwICs9IG47CisJCS8qIFRoZSBxbmFtZSBjYW4gYmUgYWJicmV2aWF0ZWQsIGJ1dCBoX25hbWUgaXMgbm93IGFic29sdXRlLiAqLworCQlxbmFtZSA9IHJzLT5ob3N0LmhfbmFtZTsKKwl9CisJYXAgPSBycy0+aG9zdF9hbGlhc2VzOworCSphcCA9IE5VTEw7CisJcnMtPmhvc3QuaF9hbGlhc2VzID0gcnMtPmhvc3RfYWxpYXNlczsKKwloYXAgPSBycy0+aF9hZGRyX3B0cnM7CisJKmhhcCA9IE5VTEw7CisJcnMtPmhvc3QuaF9hZGRyX2xpc3QgPSBycy0+aF9hZGRyX3B0cnM7CisJaGF2ZWFuc3dlciA9IDA7CisJaGFkX2Vycm9yID0gMDsKKwl3aGlsZSAoYW5jb3VudC0tID4gMCAmJiBjcCA8IGVvbSAmJiAhaGFkX2Vycm9yKSB7CisJCW4gPSBkbl9leHBhbmQoYW5zd2VyLT5idWYsIGVvbSwgY3AsIGJwLCBlcCAtIGJwKTsKKwkJaWYgKChuIDwgMCkgfHwgISgqbmFtZV9vaykoYnApKSB7CisJCQloYWRfZXJyb3IrKzsKKwkJCWNvbnRpbnVlOworCQl9CisJCWNwICs9IG47CQkJLyogbmFtZSAqLworCQlCT1VORFNfQ0hFQ0soY3AsIDMgKiBJTlQxNlNaICsgSU5UMzJTWik7CisJCXR5cGUgPSBfZ2V0c2hvcnQoY3ApOworIAkJY3AgKz0gSU5UMTZTWjsJCQkvKiB0eXBlICovCisJCWNsYXNzID0gX2dldHNob3J0KGNwKTsKKyAJCWNwICs9IElOVDE2U1ogKyBJTlQzMlNaOwkvKiBjbGFzcywgVFRMICovCisJCW4gPSBfZ2V0c2hvcnQoY3ApOworCQljcCArPSBJTlQxNlNaOwkJCS8qIGxlbiAqLworCQlCT1VORFNfQ0hFQ0soY3AsIG4pOworCQllcmRhdGEgPSBjcCArIG47CisJCWlmIChjbGFzcyAhPSBDX0lOKSB7CisJCQkvKiBYWFggLSBkZWJ1Zz8gc3lzbG9nPyAqLworCQkJY3AgKz0gbjsKKwkJCWNvbnRpbnVlOwkJLyogWFhYIC0gaGFkX2Vycm9yKysgPyAqLworCQl9CisJCWlmICgocXR5cGUgPT0gVF9BIHx8IHF0eXBlID09IFRfQUFBQSkgJiYgdHlwZSA9PSBUX0NOQU1FKSB7CisJCQlpZiAoYXAgPj0gJnJzLT5ob3N0X2FsaWFzZXNbTUFYQUxJQVNFUy0xXSkKKwkJCQljb250aW51ZTsKKwkJCW4gPSBkbl9leHBhbmQoYW5zd2VyLT5idWYsIGVvbSwgY3AsIHRidWYsIHNpemVvZiB0YnVmKTsKKwkJCWlmICgobiA8IDApIHx8ICEoKm5hbWVfb2spKHRidWYpKSB7CisJCQkJaGFkX2Vycm9yKys7CisJCQkJY29udGludWU7CisJCQl9CisJCQljcCArPSBuOworCQkJaWYgKGNwICE9IGVyZGF0YSkgeworCQkJCWhfZXJybm8gPSBOT19SRUNPVkVSWTsKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCX0KKwkJCS8qIFN0b3JlIGFsaWFzLiAqLworCQkJKmFwKysgPSBicDsKKwkJCW4gPSBzdHJsZW4oYnApICsgMTsJLyogZm9yIHRoZSBcMCAqLworCQkJaWYgKG4gPj0gTUFYSE9TVE5BTUVMRU4pIHsKKwkJCQloYWRfZXJyb3IrKzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWJwICs9IG47CisJCQkvKiBHZXQgY2Fub25pY2FsIG5hbWUuICovCisJCQluID0gc3RybGVuKHRidWYpICsgMTsJLyogZm9yIHRoZSBcMCAqLworCQkJaWYgKG4gPiBlcCAtIGJwIHx8IG4gPj0gTUFYSE9TVE5BTUVMRU4pIHsKKwkJCQloYWRfZXJyb3IrKzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCXN0cmxjcHkoYnAsIHRidWYsIChzaXplX3QpKGVwIC0gYnApKTsKKwkJCXJzLT5ob3N0LmhfbmFtZSA9IGJwOworCQkJYnAgKz0gbjsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChxdHlwZSA9PSBUX1BUUiAmJiB0eXBlID09IFRfQ05BTUUpIHsKKwkJCW4gPSBkbl9leHBhbmQoYW5zd2VyLT5idWYsIGVvbSwgY3AsIHRidWYsIHNpemVvZiB0YnVmKTsKKwkJCWlmIChuIDwgMCB8fCAhcmVzX2Rub2sodGJ1ZikpIHsKKwkJCQloYWRfZXJyb3IrKzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWNwICs9IG47CisJCQlpZiAoY3AgIT0gZXJkYXRhKSB7CisJCQkJaF9lcnJubyA9IE5PX1JFQ09WRVJZOworCQkJCXJldHVybiBOVUxMOworCQkJfQorCQkJLyogR2V0IGNhbm9uaWNhbCBuYW1lLiAqLworCQkJbiA9IHN0cmxlbih0YnVmKSArIDE7CS8qIGZvciB0aGUgXDAgKi8KKwkJCWlmIChuID4gZXAgLSBicCB8fCBuID49IE1BWEhPU1ROQU1FTEVOKSB7CisJCQkJaGFkX2Vycm9yKys7CisJCQkJY29udGludWU7CisJCQl9CisJCQlzdHJsY3B5KGJwLCB0YnVmLCAoc2l6ZV90KShlcCAtIGJwKSk7CisJCQl0bmFtZSA9IGJwOworCQkJYnAgKz0gbjsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICh0eXBlICE9IHF0eXBlKSB7CisJCQlpZiAodHlwZSAhPSBUX0tFWSAmJiB0eXBlICE9IFRfU0lHKQorCQkJCXN5c2xvZyhMT0dfTk9USUNFfExPR19BVVRILAorCSAgICAgICAiZ2V0aG9zdGJ5Ki5nZXRhbnN3ZXI6IGFza2VkIGZvciBcIiVzICVzICVzXCIsIGdvdCB0eXBlIFwiJXNcIiIsCisJCQkJICAgICAgIHFuYW1lLCBwX2NsYXNzKENfSU4pLCBwX3R5cGUocXR5cGUpLAorCQkJCSAgICAgICBwX3R5cGUodHlwZSkpOworCQkJY3AgKz0gbjsKKwkJCWNvbnRpbnVlOwkJLyogWFhYIC0gaGFkX2Vycm9yKysgPyAqLworCQl9CisJCXN3aXRjaCAodHlwZSkgeworCQljYXNlIFRfUFRSOgorCQkJaWYgKHN0cmNhc2VjbXAodG5hbWUsIGJwKSAhPSAwKSB7CisJCQkJc3lzbG9nKExPR19OT1RJQ0V8TE9HX0FVVEgsCisJCQkJICAgICAgIEFza2VkRm9yR290LCBxbmFtZSwgYnApOworCQkJCWNwICs9IG47CisJCQkJY29udGludWU7CS8qIFhYWCAtIGhhZF9lcnJvcisrID8gKi8KKwkJCX0KKwkJCW4gPSBkbl9leHBhbmQoYW5zd2VyLT5idWYsIGVvbSwgY3AsIGJwLCBlcCAtIGJwKTsKKwkJCWlmICgobiA8IDApIHx8ICFyZXNfaG5vayhicCkpIHsKKwkJCQloYWRfZXJyb3IrKzsKKwkJCQlicmVhazsKKwkJCX0KKyNpZiBNVUxUSV9QVFJTX0FSRV9BTElBU0VTCisJCQljcCArPSBuOworCQkJaWYgKGNwICE9IGVyZGF0YSkgeworCQkJCWhfZXJybm8gPSBOT19SRUNPVkVSWTsKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCX0KKwkJCWlmICghaGF2ZWFuc3dlcikKKwkJCQlycy0+aG9zdC5oX25hbWUgPSBicDsKKwkJCWVsc2UgaWYgKGFwIDwgJnJzLT5ob3N0X2FsaWFzZXNbTUFYQUxJQVNFUy0xXSkKKwkJCQkqYXArKyA9IGJwOworCQkJZWxzZQorCQkJCW4gPSAtMTsKKwkJCWlmIChuICE9IC0xKSB7CisJCQkJbiA9IHN0cmxlbihicCkgKyAxOwkvKiBmb3IgdGhlIFwwICovCisJCQkJaWYgKG4gPj0gTUFYSE9TVE5BTUVMRU4pIHsKKwkJCQkJaGFkX2Vycm9yKys7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlicCArPSBuOworCQkJfQorCQkJYnJlYWs7CisjZWxzZQorCQkJcnMtPmhvc3QuaF9uYW1lID0gYnA7CisJCQlpZiAocmVzLT5vcHRpb25zICYgUkVTX1VTRV9JTkVUNikgeworCQkJCW4gPSBzdHJsZW4oYnApICsgMTsJLyogZm9yIHRoZSBcMCAqLworCQkJCWlmIChuID49IE1BWEhPU1ROQU1FTEVOKSB7CisJCQkJCWhhZF9lcnJvcisrOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJYnAgKz0gbjsKKwkJCQltYXBfdjR2Nl9ob3N0ZW50KCZycy0+aG9zdCwgJmJwLCBlcCk7CisJCQl9CisJCQloX2Vycm5vID0gTkVUREJfU1VDQ0VTUzsKKwkJCXJldHVybiAmcnMtPmhvc3Q7CisjZW5kaWYKKwkJY2FzZSBUX0E6CisJCWNhc2UgVF9BQUFBOgorCQkJaWYgKHN0cmNhc2VjbXAocnMtPmhvc3QuaF9uYW1lLCBicCkgIT0gMCkgeworCQkJCXN5c2xvZyhMT0dfTk9USUNFfExPR19BVVRILAorCQkJCSAgICAgICBBc2tlZEZvckdvdCwgcnMtPmhvc3QuaF9uYW1lLCBicCk7CisJCQkJY3AgKz0gbjsKKwkJCQljb250aW51ZTsJLyogWFhYIC0gaGFkX2Vycm9yKysgPyAqLworCQkJfQorCQkJaWYgKG4gIT0gcnMtPmhvc3QuaF9sZW5ndGgpIHsKKwkJCQljcCArPSBuOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKHR5cGUgPT0gVF9BQUFBKSB7CisJCQkJc3RydWN0IGluNl9hZGRyIGluNjsKKwkJCQltZW1jcHkoJmluNiwgY3AsIElONkFERFJTWik7CisJCQkJaWYgKElONl9JU19BRERSX1Y0TUFQUEVEKCZpbjYpKSB7CisJCQkJCWNwICs9IG47CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCX0KKwkJCWlmICghaGF2ZWFuc3dlcikgeworCQkJCWludCBubjsKKworCQkJCXJzLT5ob3N0LmhfbmFtZSA9IGJwOworCQkJCW5uID0gc3RybGVuKGJwKSArIDE7CS8qIGZvciB0aGUgXDAgKi8KKwkJCQlicCArPSBubjsKKwkJCX0KKworCQkJYnAgKz0gc2l6ZW9mKGFsaWduKSAtCisJCQkgICAgKHNpemVfdCkoKHVfbG9uZylicCAlIHNpemVvZihhbGlnbikpOworCisJCQlpZiAoYnAgKyBuID49ICZycy0+aG9zdGJ1ZltzaXplb2YgcnMtPmhvc3RidWZdKSB7CisJCQkJZHByaW50Zigic2l6ZSAoJWQpIHRvbyBiaWdcbiIsIHJlcywgbik7CisJCQkJaGFkX2Vycm9yKys7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoaGFwID49ICZycy0+aF9hZGRyX3B0cnNbTUFYQUREUlMtMV0pIHsKKwkJCQlpZiAoIXRvb2JpZysrKQorCQkJCQlkcHJpbnRmKCJUb28gbWFueSBhZGRyZXNzZXMgKCVkKVxuIiwKKwkJCQkJCXJlcywgTUFYQUREUlMpOworCQkJCWNwICs9IG47CisJCQkJY29udGludWU7CisJCQl9CisJCQkodm9pZCltZW1jcHkoKmhhcCsrID0gYnAsIGNwLCAoc2l6ZV90KW4pOworCQkJYnAgKz0gbjsKKwkJCWNwICs9IG47CisJCQlpZiAoY3AgIT0gZXJkYXRhKSB7CisJCQkJaF9lcnJubyA9IE5PX1JFQ09WRVJZOworCQkJCXJldHVybiBOVUxMOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlhYm9ydCgpOworCQl9CisJCWlmICghaGFkX2Vycm9yKQorCQkJaGF2ZWFuc3dlcisrOworCX0KKwlpZiAoaGF2ZWFuc3dlcikgeworCQkqYXAgPSBOVUxMOworCQkqaGFwID0gTlVMTDsKKwkJLyoKKwkJICogTm90ZTogd2Ugc29ydCBldmVuIGlmIGhvc3QgY2FuIHRha2Ugb25seSBvbmUgYWRkcmVzcworCQkgKiBpbiBpdHMgcmV0dXJuIHN0cnVjdHVyZXMgLSBzaG91bGQgZ2l2ZSBpdCB0aGUgImJlc3QiCisJCSAqIGFkZHJlc3MgaW4gdGhhdCBjYXNlLCBub3Qgc29tZSByYW5kb20gb25lCisJCSAqLworCQlpZiAocmVzLT5uc29ydCAmJiBoYXZlYW5zd2VyID4gMSAmJiBxdHlwZSA9PSBUX0EpCisJCQlhZGRyc29ydChycy0+aF9hZGRyX3B0cnMsIGhhdmVhbnN3ZXIsIHJlcyk7CisJCWlmICghcnMtPmhvc3QuaF9uYW1lKSB7CisJCQluID0gc3RybGVuKHFuYW1lKSArIDE7CS8qIGZvciB0aGUgXDAgKi8KKwkJCWlmIChuID4gZXAgLSBicCB8fCBuID49IE1BWEhPU1ROQU1FTEVOKQorCQkJCWdvdG8gbm9fcmVjb3Zlcnk7CisJCQlzdHJsY3B5KGJwLCBxbmFtZSwgKHNpemVfdCkoZXAgLSBicCkpOworCQkJcnMtPmhvc3QuaF9uYW1lID0gYnA7CisJCQlicCArPSBuOworCQl9CisJCWlmIChyZXMtPm9wdGlvbnMgJiBSRVNfVVNFX0lORVQ2KQorCQkJbWFwX3Y0djZfaG9zdGVudCgmcnMtPmhvc3QsICZicCwgZXApOworCQloX2Vycm5vID0gTkVUREJfU1VDQ0VTUzsKKwkJcmV0dXJuICZycy0+aG9zdDsKKwl9Cisgbm9fcmVjb3Zlcnk6CisJaF9lcnJubyA9IE5PX1JFQ09WRVJZOworCXJldHVybiBOVUxMOworfQorCitpbnQKK2dldGhvc3RieW5hbWVfcihjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgaG9zdGVudCAqaHAsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbiwKKyAgICBzdHJ1Y3QgaG9zdGVudCoqcmVzdWx0LCBpbnQgKmVycm9ycCkKK3sKKyAgICAgICAgc3RydWN0IGhvc3RlbnQgKnJlczsKKworICAgICAgICByZXMgPSBnZXRob3N0YnluYW1lKG5hbWUpOworICAgICAgICAqZXJyb3JwID0gaF9lcnJubzsKKyAgICAgICAgaWYgKHJlcyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgKnJlc3VsdCA9IE5VTEw7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIG1lbWNweShocCwgcmVzLCBzaXplb2YgKmhwKTsKKyAgICAgICAgKnJlc3VsdCA9IGhwOworICAgICAgICByZXR1cm4gMDsKK30KKworc3RydWN0IGhvc3RlbnQgKgorZ2V0aG9zdGJ5bmFtZShjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBob3N0ZW50ICpocDsKKwlyZXNfc3RhdGUgcmVzID0gX19yZXNfZ2V0X3N0YXRlKCk7CisKKwlpZiAocmVzID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJYXNzZXJ0KG5hbWUgIT0gTlVMTCk7CisKKwlpZiAocmVzLT5vcHRpb25zICYgUkVTX1VTRV9JTkVUNikgeworCQlocCA9IGdldGhvc3RieW5hbWVfaW50ZXJuYWwobmFtZSwgQUZfSU5FVDYsIHJlcyk7CisJCWlmIChocCkgeworCQkJX19yZXNfcHV0X3N0YXRlKHJlcyk7CisJCQlyZXR1cm4gaHA7CisJCX0KKwl9CisJaHAgPSBnZXRob3N0YnluYW1lX2ludGVybmFsKG5hbWUsIEFGX0lORVQsIHJlcyk7CisJX19yZXNfcHV0X3N0YXRlKHJlcyk7CisJcmV0dXJuIGhwOworfQorCitzdHJ1Y3QgaG9zdGVudCAqCitnZXRob3N0YnluYW1lMihjb25zdCBjaGFyICpuYW1lLCBpbnQgYWYpCit7CisJc3RydWN0IGhvc3RlbnQgKmhwOworCXJlc19zdGF0ZSByZXMgPSBfX3Jlc19nZXRfc3RhdGUoKTsKKworCWlmIChyZXMgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisJaHAgPSBnZXRob3N0YnluYW1lX2ludGVybmFsKG5hbWUsIGFmLCByZXMpOworCV9fcmVzX3B1dF9zdGF0ZShyZXMpOworCXJldHVybiBocDsKK30KKworc3RhdGljIHN0cnVjdCBob3N0ZW50ICoKK2dldGhvc3RieW5hbWVfaW50ZXJuYWwoY29uc3QgY2hhciAqbmFtZSwgaW50IGFmLCByZXNfc3RhdGUgcmVzKQoreworCWNvbnN0IGNoYXIgKmNwOworCWNoYXIgKmJwLCAqZXA7CisJaW50IHNpemU7CisJc3RydWN0IGhvc3RlbnQgKmhwOworICAgICAgICBzdHJ1Y3QgcmVzb2x2X2NhY2hlKiAgY2FjaGU7CisgICAgICAgIHJlc19zdGF0aWMgIHJzID0gX19yZXNfZ2V0X3N0YXRpYygpOworCisJc3RhdGljIGNvbnN0IG5zX2R0YWIgZHRhYltdID0geworCQlOU19GSUxFU19DQihfZ2V0aHRieW5hbWUsIE5VTEwpCisJCXsgTlNTUkNfRE5TLCBfZG5zX2dldGh0YnluYW1lLCBOVUxMIH0sCS8qIGZvcmNlIC1ESEVTSU9EICovCisJCXsgMCwgMCwgMCB9CisJfTsKKworCWFzc2VydChuYW1lICE9IE5VTEwpOworCisJc3dpdGNoIChhZikgeworCWNhc2UgQUZfSU5FVDoKKwkJc2l6ZSA9IElOQUREUlNaOworCQlicmVhazsKKwljYXNlIEFGX0lORVQ2OgorCQlzaXplID0gSU42QUREUlNaOworCQlicmVhazsKKwlkZWZhdWx0OgorCQloX2Vycm5vID0gTkVUREJfSU5URVJOQUw7CisJCWVycm5vID0gRUFGTk9TVVBQT1JUOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlycy0+aG9zdC5oX2FkZHJ0eXBlID0gYWY7CisJcnMtPmhvc3QuaF9sZW5ndGggPSBzaXplOworCisJLyoKKwkgKiBpZiB0aGVyZSBhcmVuJ3QgYW55IGRvdHMsIGl0IGNvdWxkIGJlIGEgdXNlci1sZXZlbCBhbGlhcy4KKwkgKiB0aGlzIGlzIGFsc28gZG9uZSBpbiByZXNfbnF1ZXJ5KCkgc2luY2Ugd2UgYXJlIG5vdCB0aGUgb25seQorCSAqIGZ1bmN0aW9uIHRoYXQgbG9va3MgdXAgaG9zdCBuYW1lcy4KKwkgKi8KKwlpZiAoIXN0cmNocihuYW1lLCAnLicpICYmIChjcCA9IF9faG9zdGFsaWFzKG5hbWUpKSkKKwkJbmFtZSA9IGNwOworCisJLyoKKwkgKiBkaXNhbGxvdyBuYW1lcyBjb25zaXN0aW5nIG9ubHkgb2YgZGlnaXRzL2RvdHMsIHVubGVzcworCSAqIHRoZXkgZW5kIGluIGEgZG90LgorCSAqLworCWlmIChpc2RpZ2l0KCh1X2NoYXIpIG5hbWVbMF0pKQorCQlmb3IgKGNwID0gbmFtZTs7ICsrY3ApIHsKKwkJCWlmICghKmNwKSB7CisJCQkJaWYgKCotLWNwID09ICcuJykKKwkJCQkJYnJlYWs7CisJCQkJLyoKKwkJCQkgKiBBbGwtbnVtZXJpYywgbm8gZG90IGF0IHRoZSBlbmQuCisJCQkJICogRmFrZSB1cCBhIGhvc3RlbnQgYXMgaWYgd2UnZCBhY3R1YWxseQorCQkJCSAqIGRvbmUgYSBsb29rdXAuCisJCQkJICovCisJCQkJaWYgKGluZXRfcHRvbihhZiwgbmFtZSwKKwkJCQkgICAgKGNoYXIgKikodm9pZCAqKXJzLT5ob3N0X2FkZHIpIDw9IDApIHsKKwkJCQkJaF9lcnJubyA9IEhPU1RfTk9UX0ZPVU5EOworCQkJCQlyZXR1cm4gTlVMTDsKKwkJCQl9CisJCQkJc3RybmNweShycy0+aG9zdGJ1ZiwgbmFtZSwgTUFYRE5BTUUpOworCQkJCXJzLT5ob3N0YnVmW01BWEROQU1FXSA9ICdcMCc7CisJCQkJYnAgPSBycy0+aG9zdGJ1ZiArIE1BWEROQU1FOworCQkJCWVwID0gcnMtPmhvc3RidWYgKyBzaXplb2YgcnMtPmhvc3RidWY7CisJCQkJcnMtPmhvc3QuaF9uYW1lID0gcnMtPmhvc3RidWY7CisJCQkJcnMtPmhvc3QuaF9hbGlhc2VzID0gcnMtPmhvc3RfYWxpYXNlczsKKwkJCQlycy0+aG9zdF9hbGlhc2VzWzBdID0gTlVMTDsKKwkJCQlycy0+aF9hZGRyX3B0cnNbMF0gPSAoY2hhciAqKSh2b2lkICopcnMtPmhvc3RfYWRkcjsKKwkJCQlycy0+aF9hZGRyX3B0cnNbMV0gPSBOVUxMOworCQkJCXJzLT5ob3N0LmhfYWRkcl9saXN0ID0gcnMtPmhfYWRkcl9wdHJzOworCQkJCWlmIChyZXMtPm9wdGlvbnMgJiBSRVNfVVNFX0lORVQ2KQorCQkJCQltYXBfdjR2Nl9ob3N0ZW50KCZycy0+aG9zdCwgJmJwLCBlcCk7CisJCQkJaF9lcnJubyA9IE5FVERCX1NVQ0NFU1M7CisJCQkJcmV0dXJuICZycy0+aG9zdDsKKwkJCX0KKwkJCWlmICghaXNkaWdpdCgodV9jaGFyKSAqY3ApICYmICpjcCAhPSAnLicpCisJCQkJYnJlYWs7CisJCX0KKwlpZiAoKGlzeGRpZ2l0KCh1X2NoYXIpIG5hbWVbMF0pICYmIHN0cmNocihuYW1lLCAnOicpICE9IE5VTEwpIHx8CisJICAgIG5hbWVbMF0gPT0gJzonKQorCQlmb3IgKGNwID0gbmFtZTs7ICsrY3ApIHsKKwkJCWlmICghKmNwKSB7CisJCQkJaWYgKCotLWNwID09ICcuJykKKwkJCQkJYnJlYWs7CisJCQkJLyoKKwkJCQkgKiBBbGwtSVB2Ni1sZWdhbCwgbm8gZG90IGF0IHRoZSBlbmQuCisJCQkJICogRmFrZSB1cCBhIGhvc3RlbnQgYXMgaWYgd2UnZCBhY3R1YWxseQorCQkJCSAqIGRvbmUgYSBsb29rdXAuCisJCQkJICovCisJCQkJaWYgKGluZXRfcHRvbihhZiwgbmFtZSwKKwkJCQkgICAgKGNoYXIgKikodm9pZCAqKXJzLT5ob3N0X2FkZHIpIDw9IDApIHsKKwkJCQkJaF9lcnJubyA9IEhPU1RfTk9UX0ZPVU5EOworCQkJCQlyZXR1cm4gTlVMTDsKKwkJCQl9CisJCQkJc3RybmNweShycy0+aG9zdGJ1ZiwgbmFtZSwgTUFYRE5BTUUpOworCQkJCXJzLT5ob3N0YnVmW01BWEROQU1FXSA9ICdcMCc7CisJCQkJYnAgPSBycy0+aG9zdGJ1ZiArIE1BWEROQU1FOworCQkJCWVwID0gcnMtPmhvc3RidWYgKyBzaXplb2YgcnMtPmhvc3RidWY7CisJCQkJcnMtPmhvc3QuaF9uYW1lID0gcnMtPmhvc3RidWY7CisJCQkJcnMtPmhvc3QuaF9hbGlhc2VzID0gcnMtPmhvc3RfYWxpYXNlczsKKwkJCQlycy0+aG9zdF9hbGlhc2VzWzBdID0gTlVMTDsKKwkJCQlycy0+aF9hZGRyX3B0cnNbMF0gPSAoY2hhciAqKSh2b2lkICopcnMtPmhvc3RfYWRkcjsKKwkJCQlycy0+aF9hZGRyX3B0cnNbMV0gPSBOVUxMOworCQkJCXJzLT5ob3N0LmhfYWRkcl9saXN0ID0gcnMtPmhfYWRkcl9wdHJzOworCQkJCWhfZXJybm8gPSBORVREQl9TVUNDRVNTOworCQkJCXJldHVybiAmcnMtPmhvc3Q7CisJCQl9CisJCQlpZiAoIWlzeGRpZ2l0KCh1X2NoYXIpICpjcCkgJiYgKmNwICE9ICc6JyAmJiAqY3AgIT0gJy4nKQorCQkJCWJyZWFrOworCQl9CisKKwlocCA9IE5VTEw7CisJaF9lcnJubyA9IE5FVERCX0lOVEVSTkFMOworCWlmIChuc2Rpc3BhdGNoKCZocCwgZHRhYiwgTlNEQl9IT1NUUywgImdldGhvc3RieW5hbWUiLAorCSAgICBkZWZhdWx0X2Ruc19maWxlcywgbmFtZSwgc3RybGVuKG5hbWUpLCBhZikgIT0gTlNfU1VDQ0VTUykgeworCQlyZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCWhfZXJybm8gPSBORVREQl9TVUNDRVNTOworCXJldHVybiBocDsKK30KKworc3RydWN0IGhvc3RlbnQgKgorZ2V0aG9zdGJ5YWRkcihjb25zdCBjaGFyICphZGRyLAkvKiBYWFggc2hvdWxkIGhhdmUgYmVlbiBkZWYnZCBhcyB1X2NoYXIhICovCisgICAgc29ja2xlbl90IGxlbiwgaW50IGFmKQoreworCWNvbnN0IHVfY2hhciAqdWFkZHIgPSAoY29uc3QgdV9jaGFyICopYWRkcjsKKwlzb2NrbGVuX3Qgc2l6ZTsKKwlzdHJ1Y3QgaG9zdGVudCAqaHA7CisJc3RhdGljIGNvbnN0IG5zX2R0YWIgZHRhYltdID0geworCQlOU19GSUxFU19DQihfZ2V0aHRieWFkZHIsIE5VTEwpCisJCXsgTlNTUkNfRE5TLCBfZG5zX2dldGh0YnlhZGRyLCBOVUxMIH0sCS8qIGZvcmNlIC1ESEVTSU9EICovCisJCXsgMCwgMCwgMCB9CisJfTsKKworCWFzc2VydChhZGRyICE9IE5VTEwpOworCisJaWYgKGFmID09IEFGX0lORVQ2ICYmIGxlbiA9PSBJTjZBRERSU1ogJiYKKwkgICAgKElONl9JU19BRERSX0xJTktMT0NBTCgoY29uc3Qgc3RydWN0IGluNl9hZGRyICopKGNvbnN0IHZvaWQgKil1YWRkcikgfHwKKwkgICAgIElONl9JU19BRERSX1NJVEVMT0NBTCgoY29uc3Qgc3RydWN0IGluNl9hZGRyICopKGNvbnN0IHZvaWQgKil1YWRkcikpKSB7CisJCWhfZXJybm8gPSBIT1NUX05PVF9GT1VORDsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWlmIChhZiA9PSBBRl9JTkVUNiAmJiBsZW4gPT0gSU42QUREUlNaICYmCisJICAgIChJTjZfSVNfQUREUl9WNE1BUFBFRCgoY29uc3Qgc3RydWN0IGluNl9hZGRyICopKGNvbnN0IHZvaWQgKil1YWRkcikgfHwKKwkgICAgIElONl9JU19BRERSX1Y0Q09NUEFUKChjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKikoY29uc3Qgdm9pZCAqKXVhZGRyKSkpIHsKKwkJLyogVW5tYXAuICovCisJCWFkZHIgKz0gSU42QUREUlNaIC0gSU5BRERSU1o7CisJCXVhZGRyICs9IElONkFERFJTWiAtIElOQUREUlNaOworCQlhZiA9IEFGX0lORVQ7CisJCWxlbiA9IElOQUREUlNaOworCX0KKwlzd2l0Y2ggKGFmKSB7CisJY2FzZSBBRl9JTkVUOgorCQlzaXplID0gSU5BRERSU1o7CisJCWJyZWFrOworCWNhc2UgQUZfSU5FVDY6CisJCXNpemUgPSBJTjZBRERSU1o7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVycm5vID0gRUFGTk9TVVBQT1JUOworCQloX2Vycm5vID0gTkVUREJfSU5URVJOQUw7CisJCXJldHVybiBOVUxMOworCX0KKwlpZiAoc2l6ZSAhPSBsZW4pIHsKKwkJZXJybm8gPSBFSU5WQUw7CisJCWhfZXJybm8gPSBORVREQl9JTlRFUk5BTDsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWhwID0gTlVMTDsKKwloX2Vycm5vID0gTkVUREJfSU5URVJOQUw7CisJaWYgKG5zZGlzcGF0Y2goJmhwLCBkdGFiLCBOU0RCX0hPU1RTLCAiZ2V0aG9zdGJ5YWRkciIsCisJICAgIGRlZmF1bHRfZG5zX2ZpbGVzLCB1YWRkciwgbGVuLCBhZikgIT0gTlNfU1VDQ0VTUykKKwkJcmV0dXJuIE5VTEw7CisJaF9lcnJubyA9IE5FVERCX1NVQ0NFU1M7CisJcmV0dXJuIGhwOworfQorCit2b2lkCitfc2V0aHRlbnQoaW50IGYpCit7CisgICAgcmVzX3N0YXRpYyAgcnMgPSBfX3Jlc19nZXRfc3RhdGljKCk7CisgICAgaWYgKHJzID09IE5VTEwpIHJldHVybjsKKwlpZiAoIXJzLT5ob3N0ZikKKwkJcnMtPmhvc3RmID0gZm9wZW4oX1BBVEhfSE9TVFMsICJyIiApOworCWVsc2UKKwkJcmV3aW5kKHJzLT5ob3N0Zik7CisJcnMtPnN0YXlvcGVuID0gZjsKK30KKwordm9pZAorX2VuZGh0ZW50KHZvaWQpCit7CisgICAgcmVzX3N0YXRpYyAgcnMgPSBfX3Jlc19nZXRfc3RhdGljKCk7CisgICAgaWYgKHJzID09IE5VTEwpIHJldHVybjsKKworCWlmIChycy0+aG9zdGYgJiYgIXJzLT5zdGF5b3BlbikgeworCQkodm9pZCkgZmNsb3NlKHJzLT5ob3N0Zik7CisJCXJzLT5ob3N0ZiA9IE5VTEw7CisJfQorfQorCitzdHJ1Y3QgaG9zdGVudCAqCitfZ2V0aHRlbnQodm9pZCkKK3sKKwljaGFyICpwOworCWNoYXIgKmNwLCAqKnE7CisJaW50IGFmLCBsZW47CisJcmVzX3N0YXRpYyAgcnMgPSBfX3Jlc19nZXRfc3RhdGljKCk7CisKKwlpZiAoIXJzLT5ob3N0ZiAmJiAhKHJzLT5ob3N0ZiA9IGZvcGVuKF9QQVRIX0hPU1RTLCAiciIgKSkpIHsKKwkJaF9lcnJubyA9IE5FVERCX0lOVEVSTkFMOworCQlyZXR1cm4gTlVMTDsKKwl9CisgYWdhaW46CisJaWYgKCEocCA9IGZnZXRzKHJzLT5ob3N0YnVmLCBzaXplb2YgcnMtPmhvc3RidWYsIHJzLT5ob3N0ZikpKSB7CisJCWhfZXJybm8gPSBIT1NUX05PVF9GT1VORDsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWlmICgqcCA9PSAnIycpCisJCWdvdG8gYWdhaW47CisJaWYgKCEoY3AgPSBzdHJwYnJrKHAsICIjXG4iKSkpCisJCWdvdG8gYWdhaW47CisJKmNwID0gJ1wwJzsKKwlpZiAoIShjcCA9IHN0cnBicmsocCwgIiBcdCIpKSkKKwkJZ290byBhZ2FpbjsKKwkqY3ArKyA9ICdcMCc7CisJaWYgKGluZXRfcHRvbihBRl9JTkVUNiwgcCwgKGNoYXIgKikodm9pZCAqKXJzLT5ob3N0X2FkZHIpID4gMCkgeworCQlhZiA9IEFGX0lORVQ2OworCQlsZW4gPSBJTjZBRERSU1o7CisJfSBlbHNlIGlmIChpbmV0X3B0b24oQUZfSU5FVCwgcCwgKGNoYXIgKikodm9pZCAqKXJzLT5ob3N0X2FkZHIpID4gMCkgeworCQlyZXNfc3RhdGUgcmVzID0gX19yZXNfZ2V0X3N0YXRlKCk7CisJCWlmIChyZXMgPT0gTlVMTCkKKwkJCXJldHVybiBOVUxMOworCQlpZiAocmVzLT5vcHRpb25zICYgUkVTX1VTRV9JTkVUNikgeworCQkJbWFwX3Y0djZfYWRkcmVzcygoY2hhciAqKSh2b2lkICopcnMtPmhvc3RfYWRkciwKKwkJCSAgICAoY2hhciAqKSh2b2lkICopcnMtPmhvc3RfYWRkcik7CisJCQlhZiA9IEFGX0lORVQ2OworCQkJbGVuID0gSU42QUREUlNaOworCQl9IGVsc2UgeworCQkJYWYgPSBBRl9JTkVUOworCQkJbGVuID0gSU5BRERSU1o7CisJCX0KKwkJX19yZXNfcHV0X3N0YXRlKHJlcyk7CisJfSBlbHNlIHsKKwkJZ290byBhZ2FpbjsKKwl9CisJLyogaWYgdGhpcyBpcyBub3Qgc29tZXRoaW5nIHdlJ3JlIGxvb2tpbmcgZm9yLCBza2lwIGl0LiAqLworCWlmIChycy0+aG9zdC5oX2FkZHJ0eXBlICE9IDAgJiYgcnMtPmhvc3QuaF9hZGRydHlwZSAhPSBhZikKKwkJZ290byBhZ2FpbjsKKwlpZiAocnMtPmhvc3QuaF9sZW5ndGggIT0gMCAmJiBycy0+aG9zdC5oX2xlbmd0aCAhPSBsZW4pCisJCWdvdG8gYWdhaW47CisJcnMtPmhfYWRkcl9wdHJzWzBdID0gKGNoYXIgKikodm9pZCAqKXJzLT5ob3N0X2FkZHI7CisJcnMtPmhfYWRkcl9wdHJzWzFdID0gTlVMTDsKKwlycy0+aG9zdC5oX2FkZHJfbGlzdCA9IHJzLT5oX2FkZHJfcHRyczsKKwlycy0+aG9zdC5oX2xlbmd0aCA9IGxlbjsKKwlycy0+aG9zdC5oX2FkZHJ0eXBlID0gYWY7CisJd2hpbGUgKCpjcCA9PSAnICcgfHwgKmNwID09ICdcdCcpCisJCWNwKys7CisJcnMtPmhvc3QuaF9uYW1lID0gY3A7CisJcSA9IHJzLT5ob3N0LmhfYWxpYXNlcyA9IHJzLT5ob3N0X2FsaWFzZXM7CisJaWYgKChjcCA9IHN0cnBicmsoY3AsICIgXHQiKSkgIT0gTlVMTCkKKwkJKmNwKysgPSAnXDAnOworCXdoaWxlIChjcCAmJiAqY3ApIHsKKwkJaWYgKCpjcCA9PSAnICcgfHwgKmNwID09ICdcdCcpIHsKKwkJCWNwKys7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAocSA8ICZycy0+aG9zdF9hbGlhc2VzW01BWEFMSUFTRVMgLSAxXSkKKwkJCSpxKysgPSBjcDsKKwkJaWYgKChjcCA9IHN0cnBicmsoY3AsICIgXHQiKSkgIT0gTlVMTCkKKwkJCSpjcCsrID0gJ1wwJzsKKwl9CisJKnEgPSBOVUxMOworCWhfZXJybm8gPSBORVREQl9TVUNDRVNTOworCXJldHVybiAmcnMtPmhvc3Q7Cit9CisKKy8qQVJHU1VTRUQqLworaW50CitfZ2V0aHRieW5hbWUodm9pZCAqcnYsIHZvaWQgKmNiX2RhdGEsIHZhX2xpc3QgYXApCit7CisJc3RydWN0IGhvc3RlbnQgKmhwOworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW50IGFmOworCisJYXNzZXJ0KHJ2ICE9IE5VTEwpOworCisJbmFtZSA9IHZhX2FyZyhhcCwgY2hhciAqKTsKKwkvKiBOT1NUUklDVCBza2lwIGxlbiAqLyh2b2lkKXZhX2FyZyhhcCwgaW50KTsKKwlhZiA9IHZhX2FyZyhhcCwgaW50KTsKKworCWhwID0gTlVMTDsKKyNpZiAwCisJeworCQlyZXNfc3RhdGUgcmVzID0gX19yZXNfZ2V0X3N0YXRlKCk7CisJCWlmIChyZXMgPT0gTlVMTCkKKwkJCXJldHVybiBOU19OT1RGT1VORDsKKwkJaWYgKHJlcy0+b3B0aW9ucyAmIFJFU19VU0VfSU5FVDYpCisJCQlocCA9IF9nZXRodGJ5bmFtZTIobmFtZSwgQUZfSU5FVDYpOworCQlpZiAoaHA9PU5VTEwpCisJCQlocCA9IF9nZXRodGJ5bmFtZTIobmFtZSwgQUZfSU5FVCk7CisJCV9fcmVzX3B1dF9zdGF0ZShyZXMpOworCX0KKyNlbHNlCisJaHAgPSBfZ2V0aHRieW5hbWUyKG5hbWUsIGFmKTsKKyNlbmRpZgorCSooKHN0cnVjdCBob3N0ZW50ICoqKXJ2KSA9IGhwOworCWlmIChocCA9PSBOVUxMKSB7CisJCWhfZXJybm8gPSBIT1NUX05PVF9GT1VORDsKKwkJcmV0dXJuIE5TX05PVEZPVU5EOworCX0KKwlyZXR1cm4gTlNfU1VDQ0VTUzsKK30KKworc3RydWN0IGhvc3RlbnQgKgorX2dldGh0YnluYW1lMihjb25zdCBjaGFyICpuYW1lLCBpbnQgYWYpCit7CisJc3RydWN0IGhvc3RlbnQgKnA7CisJY2hhciAqdG1wYnVmLCAqcHRyLCAqKmNwOworCWludCBudW07CisJc2l6ZV90IGxlbjsKKwlyZXNfc3RhdGljIHJzID0gX19yZXNfZ2V0X3N0YXRpYygpOworCisJYXNzZXJ0KG5hbWUgIT0gTlVMTCk7CisKKwlfc2V0aHRlbnQocnMtPnN0YXlvcGVuKTsKKwlwdHIgPSB0bXBidWYgPSBOVUxMOworCW51bSA9IDA7CisJd2hpbGUgKChwID0gX2dldGh0ZW50KCkpICE9IE5VTEwgJiYgbnVtIDwgTUFYQUREUlMpIHsKKwkJaWYgKHAtPmhfYWRkcnR5cGUgIT0gYWYpCisJCQljb250aW51ZTsKKwkJaWYgKHN0cmNhc2VjbXAocC0+aF9uYW1lLCBuYW1lKSAhPSAwKSB7CisJCQlmb3IgKGNwID0gcC0+aF9hbGlhc2VzOyAqY3AgIT0gTlVMTDsgY3ArKykKKwkJCQlpZiAoc3RyY2FzZWNtcCgqY3AsIG5hbWUpID09IDApCisJCQkJCWJyZWFrOworCQkJaWYgKCpjcCA9PSBOVUxMKSBjb250aW51ZTsKKwkJfQorCisJCWlmIChudW0gPT0gMCkgeworCQkJc2l6ZV90IGJ1ZnNpemU7CisJCQljaGFyICpzcmM7CisKKwkJCWJ1ZnNpemUgPSBzdHJsZW4ocC0+aF9uYW1lKSArIDIgKworCQkJCSAgTUFYQUREUlMgKiBwLT5oX2xlbmd0aCArCisJCQkJICBBTElHTkJZVEVTOworCQkJZm9yIChjcCA9IHAtPmhfYWxpYXNlczsgKmNwICE9IE5VTEw7IGNwKyspCisJCQkJYnVmc2l6ZSArPSBzdHJsZW4oKmNwKSArIDE7CisKKwkJCWlmICgodG1wYnVmID0gbWFsbG9jKGJ1ZnNpemUpKSA9PSBOVUxMKSB7CisJCQkJaF9lcnJubyA9IE5FVERCX0lOVEVSTkFMOworCQkJCXJldHVybiBOVUxMOworCQkJfQorCisJCQlwdHIgPSB0bXBidWY7CisJCQlzcmMgPSBwLT5oX25hbWU7CisJCQl3aGlsZSAoKCpwdHIrKyA9ICpzcmMrKykgIT0gJ1wwJyk7CisJCQlmb3IgKGNwID0gcC0+aF9hbGlhc2VzOyAqY3AgIT0gTlVMTDsgY3ArKykgeworCQkJCXNyYyA9ICpjcDsKKwkJCQl3aGlsZSAoKCpwdHIrKyA9ICpzcmMrKykgIT0gJ1wwJyk7CisJCQl9CisJCQkqcHRyKysgPSAnXDAnOworCisJCQlwdHIgPSAoY2hhciAqKSh2b2lkICopQUxJR04ocHRyKTsKKwkJfQorCisJCSh2b2lkKW1lbWNweShwdHIsIHAtPmhfYWRkcl9saXN0WzBdLCAoc2l6ZV90KXAtPmhfbGVuZ3RoKTsKKwkJcHRyICs9IHAtPmhfbGVuZ3RoOworCQludW0rKzsKKwl9CisJX2VuZGh0ZW50KCk7CisJaWYgKG51bSA9PSAwKSByZXR1cm4gTlVMTDsKKworCWxlbiA9IHB0ciAtIHRtcGJ1ZjsKKwlpZiAobGVuID4gKHNpemVvZihycy0+aG9zdGJ1ZikgLSBBTElHTkJZVEVTKSkgeworCQlmcmVlKHRtcGJ1Zik7CisJCWVycm5vID0gRU5PU1BDOworCQloX2Vycm5vID0gTkVUREJfSU5URVJOQUw7CisJCXJldHVybiBOVUxMOworCX0KKwlwdHIgPSBtZW1jcHkoKHZvaWQgKilBTElHTihycy0+aG9zdGJ1ZiksIHRtcGJ1ZiwgbGVuKTsKKwlmcmVlKHRtcGJ1Zik7CisKKwlycy0+aG9zdC5oX25hbWUgPSBwdHI7CisJd2hpbGUgKCpwdHIrKyk7CisKKwljcCA9IHJzLT5ob3N0X2FsaWFzZXM7CisJd2hpbGUgKCpwdHIpIHsKKwkJKmNwKysgPSBwdHI7CisJCXdoaWxlICgqcHRyKyspOworCX0KKwlwdHIrKzsKKwkqY3AgPSBOVUxMOworCisJcHRyID0gKGNoYXIgKikodm9pZCAqKUFMSUdOKHB0cik7CisJY3AgPSBycy0+aF9hZGRyX3B0cnM7CisJd2hpbGUgKG51bS0tKSB7CisJCSpjcCsrID0gcHRyOworCQlwdHIgKz0gcnMtPmhvc3QuaF9sZW5ndGg7CisJfQorCSpjcCA9IE5VTEw7CisKKwlyZXR1cm4gJnJzLT5ob3N0OworfQorCisvKkFSR1NVU0VEKi8KK2ludAorX2dldGh0YnlhZGRyKHZvaWQgKnJ2LCB2b2lkICpjYl9kYXRhLCB2YV9saXN0IGFwKQoreworCXN0cnVjdCBob3N0ZW50ICpwOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHI7CisJaW50IGxlbiwgYWY7CisJcmVzX3N0YXRpYyAgcnMgPSBfX3Jlc19nZXRfc3RhdGljKCk7CisKKwlhc3NlcnQocnYgIT0gTlVMTCk7CisKKwlhZGRyID0gdmFfYXJnKGFwLCB1bnNpZ25lZCBjaGFyICopOworCWxlbiA9IHZhX2FyZyhhcCwgaW50KTsKKwlhZiA9IHZhX2FyZyhhcCwgaW50KTsKKworCXJzLT5ob3N0LmhfbGVuZ3RoID0gbGVuOworCXJzLT5ob3N0LmhfYWRkcnR5cGUgPSBhZjsKKworCV9zZXRodGVudChycy0+c3RheW9wZW4pOworCXdoaWxlICgocCA9IF9nZXRodGVudCgpKSAhPSBOVUxMKQorCQlpZiAocC0+aF9hZGRydHlwZSA9PSBhZiAmJiAhbWVtY21wKHAtPmhfYWRkciwgYWRkciwKKwkJICAgIChzaXplX3QpbGVuKSkKKwkJCWJyZWFrOworCV9lbmRodGVudCgpOworCSooKHN0cnVjdCBob3N0ZW50ICoqKXJ2KSA9IHA7CisJaWYgKHA9PU5VTEwpIHsKKwkJaF9lcnJubyA9IEhPU1RfTk9UX0ZPVU5EOworCQlyZXR1cm4gTlNfTk9URk9VTkQ7CisJfQorCXJldHVybiBOU19TVUNDRVNTOworfQorCitzdGF0aWMgdm9pZAorbWFwX3Y0djZfYWRkcmVzcyhjb25zdCBjaGFyICpzcmMsIGNoYXIgKmRzdCkKK3sKKwl1X2NoYXIgKnAgPSAodV9jaGFyICopZHN0OworCWNoYXIgdG1wW0lOQUREUlNaXTsKKwlpbnQgaTsKKworCWFzc2VydChzcmMgIT0gTlVMTCk7CisJYXNzZXJ0KGRzdCAhPSBOVUxMKTsKKworCS8qIFN0YXNoIGEgdGVtcG9yYXJ5IGNvcHkgc28gb3VyIGNhbGxlciBjYW4gdXBkYXRlIGluIHBsYWNlLiAqLworCSh2b2lkKW1lbWNweSh0bXAsIHNyYywgSU5BRERSU1opOworCS8qIE1hcmsgdGhpcyBpcHY2IGFkZHIgYXMgYSBtYXBwZWQgaXB2NC4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykKKwkJKnArKyA9IDB4MDA7CisJKnArKyA9IDB4ZmY7CisJKnArKyA9IDB4ZmY7CisJLyogUmV0cmlldmUgdGhlIHNhdmVkIGNvcHkgYW5kIHdlJ3JlIGRvbmUuICovCisJKHZvaWQpbWVtY3B5KCh2b2lkICopcCwgdG1wLCBJTkFERFJTWik7Cit9CisKK3N0YXRpYyB2b2lkCittYXBfdjR2Nl9ob3N0ZW50KHN0cnVjdCBob3N0ZW50ICpocCwgY2hhciAqKmJwcCwgY2hhciAqZXApCit7CisJY2hhciAqKmFwOworCisJYXNzZXJ0KGhwICE9IE5VTEwpOworCWFzc2VydChicHAgIT0gTlVMTCk7CisJYXNzZXJ0KGVwICE9IE5VTEwpOworCisJaWYgKGhwLT5oX2FkZHJ0eXBlICE9IEFGX0lORVQgfHwgaHAtPmhfbGVuZ3RoICE9IElOQUREUlNaKQorCQlyZXR1cm47CisJaHAtPmhfYWRkcnR5cGUgPSBBRl9JTkVUNjsKKwlocC0+aF9sZW5ndGggPSBJTjZBRERSU1o7CisJZm9yIChhcCA9IGhwLT5oX2FkZHJfbGlzdDsgKmFwOyBhcCsrKSB7CisJCWludCBpID0gc2l6ZW9mKGFsaWduKSAtIChzaXplX3QpKCh1X2xvbmcpKmJwcCAlIHNpemVvZihhbGlnbikpOworCisJCWlmIChlcCAtICpicHAgPCAoaSArIElONkFERFJTWikpIHsKKwkJCS8qIE91dCBvZiBtZW1vcnkuICBUcnVuY2F0ZSBhZGRyZXNzIGxpc3QgaGVyZS4gIFhYWCAqLworCQkJKmFwID0gTlVMTDsKKwkJCXJldHVybjsKKwkJfQorCQkqYnBwICs9IGk7CisJCW1hcF92NHY2X2FkZHJlc3MoKmFwLCAqYnBwKTsKKwkJKmFwID0gKmJwcDsKKwkJKmJwcCArPSBJTjZBRERSU1o7CisJfQorfQorCitzdGF0aWMgdm9pZAorYWRkcnNvcnQoY2hhciAqKmFwLCBpbnQgbnVtLCByZXNfc3RhdGUgcmVzKQoreworCWludCBpLCBqOworCWNoYXIgKipwOworCXNob3J0IGF2YWxbTUFYQUREUlNdOworCWludCBuZWVkc29ydCA9IDA7CisKKwlhc3NlcnQoYXAgIT0gTlVMTCk7CisKKwlwID0gYXA7CisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrLCBwKyspIHsKKwkgICAgZm9yIChqID0gMCA7ICh1bnNpZ25lZClqIDwgcmVzLT5uc29ydDsgaisrKQorCQlpZiAocmVzLT5zb3J0X2xpc3Rbal0uYWRkci5zX2FkZHIgPT0KKwkJICAgICgoKHN0cnVjdCBpbl9hZGRyICopKHZvaWQgKikoKnApKS0+c19hZGRyICYKKwkJICAgIHJlcy0+c29ydF9saXN0W2pdLm1hc2spKQorCQkJYnJlYWs7CisJICAgIGF2YWxbaV0gPSBqOworCSAgICBpZiAobmVlZHNvcnQgPT0gMCAmJiBpID4gMCAmJiBqIDwgYXZhbFtpLTFdKQorCQluZWVkc29ydCA9IGk7CisJfQorCWlmICghbmVlZHNvcnQpCisJICAgIHJldHVybjsKKworCXdoaWxlIChuZWVkc29ydCA8IG51bSkgeworCSAgICBmb3IgKGogPSBuZWVkc29ydCAtIDE7IGogPj0gMDsgai0tKSB7CisJCWlmIChhdmFsW2pdID4gYXZhbFtqKzFdKSB7CisJCSAgICBjaGFyICpocDsKKworCQkgICAgaSA9IGF2YWxbal07CisJCSAgICBhdmFsW2pdID0gYXZhbFtqKzFdOworCQkgICAgYXZhbFtqKzFdID0gaTsKKworCQkgICAgaHAgPSBhcFtqXTsKKwkJICAgIGFwW2pdID0gYXBbaisxXTsKKwkJICAgIGFwW2orMV0gPSBocDsKKwkJfSBlbHNlCisJCSAgICBicmVhazsKKwkgICAgfQorCSAgICBuZWVkc29ydCsrOworCX0KK30KKworc3RydWN0IGhvc3RlbnQgKgorZ2V0aG9zdGVudCh2b2lkKQoreworICAgIHJlc19zdGF0aWMgIHJzID0gX19yZXNfZ2V0X3N0YXRpYygpOworCXJzLT5ob3N0LmhfYWRkcnR5cGUgPSAwOworCXJzLT5ob3N0LmhfbGVuZ3RoID0gMDsKKwlyZXR1cm4gX2dldGh0ZW50KCk7Cit9CisKKy8qQVJHU1VTRUQqLworaW50CitfZG5zX2dldGh0YnluYW1lKHZvaWQgKnJ2LCB2b2lkICpjYl9kYXRhLCB2YV9saXN0IGFwKQoreworCXF1ZXJ5YnVmICpidWY7CisJaW50IG4sIHR5cGU7CisJc3RydWN0IGhvc3RlbnQgKmhwOworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW50IGFmOworCXJlc19zdGF0ZSByZXM7CisKKwlhc3NlcnQocnYgIT0gTlVMTCk7CisKKwluYW1lID0gdmFfYXJnKGFwLCBjaGFyICopOworCS8qIE5PU1RSSUNUIHNraXAgbGVuICovKHZvaWQpdmFfYXJnKGFwLCBpbnQpOworCWFmID0gdmFfYXJnKGFwLCBpbnQpOworCisJc3dpdGNoIChhZikgeworCWNhc2UgQUZfSU5FVDoKKwkJdHlwZSA9IFRfQTsKKwkJYnJlYWs7CisJY2FzZSBBRl9JTkVUNjoKKwkJdHlwZSA9IFRfQUFBQTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIE5TX1VOQVZBSUw7CisJfQorCWJ1ZiA9IG1hbGxvYyhzaXplb2YoKmJ1ZikpOworCWlmIChidWYgPT0gTlVMTCkgeworCQloX2Vycm5vID0gTkVUREJfSU5URVJOQUw7CisJCXJldHVybiBOU19OT1RGT1VORDsKKwl9CisJcmVzID0gX19yZXNfZ2V0X3N0YXRlKCk7CisJaWYgKHJlcyA9PSBOVUxMKSB7CisJCWZyZWUoYnVmKTsKKwkJcmV0dXJuIE5TX05PVEZPVU5EOworCX0KKwluID0gcmVzX25zZWFyY2gocmVzLCBuYW1lLCBDX0lOLCB0eXBlLCBidWYtPmJ1Ziwgc2l6ZW9mKGJ1Zi0+YnVmKSk7CisJaWYgKG4gPCAwKSB7CisJCWZyZWUoYnVmKTsKKwkJZHByaW50ZigicmVzX25zZWFyY2ggZmFpbGVkICglZClcbiIsIHJlcywgbik7CisJCV9fcmVzX3B1dF9zdGF0ZShyZXMpOworCQlyZXR1cm4gTlNfTk9URk9VTkQ7CisJfQorCWhwID0gZ2V0YW5zd2VyKGJ1ZiwgbiwgbmFtZSwgdHlwZSwgcmVzKTsKKwlmcmVlKGJ1Zik7CisJX19yZXNfcHV0X3N0YXRlKHJlcyk7CisJaWYgKGhwID09IE5VTEwpCisJCXN3aXRjaCAoaF9lcnJubykgeworCQljYXNlIEhPU1RfTk9UX0ZPVU5EOgorCQkJcmV0dXJuIE5TX05PVEZPVU5EOworCQljYXNlIFRSWV9BR0FJTjoKKwkJCXJldHVybiBOU19UUllBR0FJTjsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiBOU19VTkFWQUlMOworCQl9CisJKigoc3RydWN0IGhvc3RlbnQgKiopcnYpID0gaHA7CisJcmV0dXJuIE5TX1NVQ0NFU1M7Cit9CisKKy8qQVJHU1VTRUQqLworaW50CitfZG5zX2dldGh0YnlhZGRyKHZvaWQgKnJ2LCB2b2lkCSpjYl9kYXRhLCB2YV9saXN0IGFwKQoreworCWNoYXIgcWJ1ZltNQVhETkFNRSArIDFdLCAqcXAsICplcDsKKwlpbnQgbjsKKwlxdWVyeWJ1ZiAqYnVmOworCXN0cnVjdCBob3N0ZW50ICpocDsKKwljb25zdCB1bnNpZ25lZCBjaGFyICp1YWRkcjsKKwlpbnQgbGVuLCBhZiwgYWR2YW5jZTsKKwlyZXNfc3RhdGUgcmVzOworCXJlc19zdGF0aWMgcnMgPSBfX3Jlc19nZXRfc3RhdGljKCk7CisKKwlhc3NlcnQocnYgIT0gTlVMTCk7CisKKwl1YWRkciA9IHZhX2FyZyhhcCwgdW5zaWduZWQgY2hhciAqKTsKKwlsZW4gPSB2YV9hcmcoYXAsIGludCk7CisJYWYgPSB2YV9hcmcoYXAsIGludCk7CisKKwlzd2l0Y2ggKGFmKSB7CisJY2FzZSBBRl9JTkVUOgorCQkodm9pZClzbnByaW50ZihxYnVmLCBzaXplb2YocWJ1ZiksICIldS4ldS4ldS4ldS5pbi1hZGRyLmFycGEiLAorCQkgICAgKHVhZGRyWzNdICYgMHhmZiksICh1YWRkclsyXSAmIDB4ZmYpLAorCQkgICAgKHVhZGRyWzFdICYgMHhmZiksICh1YWRkclswXSAmIDB4ZmYpKTsKKwkJYnJlYWs7CisKKwljYXNlIEFGX0lORVQ2OgorCQlxcCA9IHFidWY7CisJCWVwID0gcWJ1ZiArIHNpemVvZihxYnVmKSAtIDE7CisJCWZvciAobiA9IElONkFERFJTWiAtIDE7IG4gPj0gMDsgbi0tKSB7CisJCQlhZHZhbmNlID0gc25wcmludGYocXAsIChzaXplX3QpKGVwIC0gcXApLCAiJXguJXguIiwKKwkJCSAgICB1YWRkcltuXSAmIDB4ZiwKKwkJCSAgICAoKHVuc2lnbmVkIGludCl1YWRkcltuXSA+PiA0KSAmIDB4Zik7CisJCQlpZiAoYWR2YW5jZSA+IDAgJiYgcXAgKyBhZHZhbmNlIDwgZXApCisJCQkJcXAgKz0gYWR2YW5jZTsKKwkJCWVsc2UgeworCQkJCWhfZXJybm8gPSBORVREQl9JTlRFUk5BTDsKKwkJCQlyZXR1cm4gTlNfTk9URk9VTkQ7CisJCQl9CisJCX0KKwkJaWYgKHN0cmxjYXQocWJ1ZiwgImlwNi5hcnBhIiwgc2l6ZW9mKHFidWYpKSA+PSBzaXplb2YocWJ1ZikpIHsKKwkJCWhfZXJybm8gPSBORVREQl9JTlRFUk5BTDsKKwkJCXJldHVybiBOU19OT1RGT1VORDsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlhYm9ydCgpOworCX0KKworCWJ1ZiA9IG1hbGxvYyhzaXplb2YoKmJ1ZikpOworCWlmIChidWYgPT0gTlVMTCkgeworCQloX2Vycm5vID0gTkVUREJfSU5URVJOQUw7CisJCXJldHVybiBOU19OT1RGT1VORDsKKwl9CisJcmVzID0gX19yZXNfZ2V0X3N0YXRlKCk7CisJaWYgKHJlcyA9PSBOVUxMKSB7CisJCWZyZWUoYnVmKTsKKwkJcmV0dXJuIE5TX05PVEZPVU5EOworCX0KKwluID0gcmVzX25xdWVyeShyZXMsIHFidWYsIENfSU4sIFRfUFRSLCBidWYtPmJ1Ziwgc2l6ZW9mKGJ1Zi0+YnVmKSk7CisJaWYgKG4gPCAwKSB7CisJCWZyZWUoYnVmKTsKKwkJZHByaW50ZigicmVzX25xdWVyeSBmYWlsZWQgKCVkKVxuIiwgcmVzLCBuKTsKKwkJX19yZXNfcHV0X3N0YXRlKHJlcyk7CisJCXJldHVybiBOU19OT1RGT1VORDsKKwl9CisJaHAgPSBnZXRhbnN3ZXIoYnVmLCBuLCBxYnVmLCBUX1BUUiwgcmVzKTsKKwlmcmVlKGJ1Zik7CisJaWYgKGhwID09IE5VTEwpIHsKKwkJX19yZXNfcHV0X3N0YXRlKHJlcyk7CisJCXN3aXRjaCAoaF9lcnJubykgeworCQljYXNlIEhPU1RfTk9UX0ZPVU5EOgorCQkJcmV0dXJuIE5TX05PVEZPVU5EOworCQljYXNlIFRSWV9BR0FJTjoKKwkJCXJldHVybiBOU19UUllBR0FJTjsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiBOU19VTkFWQUlMOworCQl9CisJfQorCWhwLT5oX2FkZHJ0eXBlID0gYWY7CisJaHAtPmhfbGVuZ3RoID0gbGVuOworCSh2b2lkKW1lbWNweShycy0+aG9zdF9hZGRyLCB1YWRkciwgKHNpemVfdClsZW4pOworCXJzLT5oX2FkZHJfcHRyc1swXSA9IChjaGFyICopKHZvaWQgKilycy0+aG9zdF9hZGRyOworCXJzLT5oX2FkZHJfcHRyc1sxXSA9IE5VTEw7CisJaWYgKGFmID09IEFGX0lORVQgJiYgKHJlcy0+b3B0aW9ucyAmIFJFU19VU0VfSU5FVDYpKSB7CisJCW1hcF92NHY2X2FkZHJlc3MoKGNoYXIgKikodm9pZCAqKXJzLT5ob3N0X2FkZHIsCisJCSAgICAoY2hhciAqKSh2b2lkICopcnMtPmhvc3RfYWRkcik7CisJCWhwLT5oX2FkZHJ0eXBlID0gQUZfSU5FVDY7CisJCWhwLT5oX2xlbmd0aCA9IElONkFERFJTWjsKKwl9CisKKwlfX3Jlc19wdXRfc3RhdGUocmVzKTsKKwkqKChzdHJ1Y3QgaG9zdGVudCAqKilydikgPSBocDsKKwloX2Vycm5vID0gTkVUREJfU1VDQ0VTUzsKKwlyZXR1cm4gTlNfU1VDQ0VTUzsKK30KZGlmZiAtLWdpdCBhL2xpYmMvbmV0YnNkL2luZXQvbnNhcF9hZGRyLmMgYi9saWJjL25ldGJzZC9pbmV0L25zYXBfYWRkci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxOGJkMzMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL25ldGJzZC9pbmV0L25zYXBfYWRkci5jCkBAIC0wLDAgKzEsMTIxIEBACisvKgkkTmV0QlNEOiBuc2FwX2FkZHIuYyx2IDEuMiAyMDA0LzA1LzIwIDIzOjEyOjMzIGNocmlzdG9zIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKKyAqIENvcHlyaWdodCAoYykgMTk5Ni0xOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAorICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCisjaWYgMAorc3RhdGljIGNvbnN0IGNoYXIgcmNzaWRbXSA9ICJJZDogbnNhcF9hZGRyLmMsdiAxLjIuMjA2LjEgMjAwNC8wMy8wOSAwODozMzozMyBtYXJrYSBFeHAiOworI2Vsc2UKK19fUkNTSUQoIiROZXRCU0Q6IG5zYXBfYWRkci5jLHYgMS4yIDIwMDQvMDUvMjAgMjM6MTI6MzMgY2hyaXN0b3MgRXhwICQiKTsKKyNlbmRpZgorI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKworI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlICJhcnBhX25hbWVzZXIuaCIKKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaWZkZWYgQU5EUk9JRF9DSEFOR0VTCisjaW5jbHVkZSAicmVzb2x2X3ByaXZhdGUuaCIKKyNlbHNlCisjaW5jbHVkZSA8cmVzb2x2Lmg+CisjZW5kaWYKKworc3RhdGljIGNoYXIKK3h0b2IoaW50IGMpIHsKKwlyZXR1cm4gKGMgLSAoKChjID49ICcwJykgJiYgKGMgPD0gJzknKSkgPyAnMCcgOiAnNycpKTsKK30KKwordV9pbnQKK2luZXRfbnNhcF9hZGRyKGNvbnN0IGNoYXIgKmFzY2lpLCB1X2NoYXIgKmJpbmFyeSwgaW50IG1heGxlbikgeworCXVfY2hhciBjLCBuaWI7CisJdV9pbnQgbGVuID0gMDsKKworCWFzc2VydChhc2NpaSAhPSBOVUxMKTsKKwlhc3NlcnQoYmluYXJ5ICE9IE5VTEwpOworCisJaWYgKGFzY2lpWzBdICE9ICcwJyB8fCAoYXNjaWlbMV0gIT0gJ3gnICYmIGFzY2lpWzFdICE9ICdYJykpCisJCXJldHVybiAoMCk7CisJYXNjaWkgKz0gMjsKKworCXdoaWxlICgoYyA9ICphc2NpaSsrKSAhPSAnXDAnICYmIGxlbiA8ICh1X2ludCltYXhsZW4pIHsKKwkJaWYgKGMgPT0gJy4nIHx8IGMgPT0gJysnIHx8IGMgPT0gJy8nKQorCQkJY29udGludWU7CisJCWlmICghaXNhc2NpaShjKSkKKwkJCXJldHVybiAoMCk7CisJCWlmIChpc2xvd2VyKGMpKQorCQkJYyA9IHRvdXBwZXIoYyk7CisJCWlmIChpc3hkaWdpdChjKSkgeworCQkJbmliID0geHRvYihjKTsKKwkJCWMgPSAqYXNjaWkrKzsKKwkJCWlmIChjICE9ICdcMCcpIHsKKwkJCQljID0gdG91cHBlcihjKTsKKwkJCQlpZiAoaXN4ZGlnaXQoYykpIHsKKwkJCQkJKmJpbmFyeSsrID0gKG5pYiA8PCA0KSB8IHh0b2IoYyk7CisJCQkJCWxlbisrOworCQkJCX0gZWxzZQorCQkJCQlyZXR1cm4gKDApOworCQkJfQorCQkJZWxzZQorCQkJCXJldHVybiAoMCk7CisJCX0KKwkJZWxzZQorCQkJcmV0dXJuICgwKTsKKwl9CisJcmV0dXJuIChsZW4pOworfQorCitjaGFyICoKK2luZXRfbnNhcF9udG9hKGludCBiaW5sZW4sIGNvbnN0IHVfY2hhciAqYmluYXJ5LCBjaGFyICphc2NpaSkgeworCWludCBuaWI7CisJaW50IGk7CisJc3RhdGljIGNoYXIgdG1wYnVmWzIrMjU1KjNdOworCWNoYXIgKnN0YXJ0OworCisJYXNzZXJ0KGJpbmFyeSAhPSBOVUxMKTsKKworCWlmIChhc2NpaSkKKwkJc3RhcnQgPSBhc2NpaTsKKwllbHNlIHsKKwkJYXNjaWkgPSB0bXBidWY7CisJCXN0YXJ0ID0gdG1wYnVmOworCX0KKworCSphc2NpaSsrID0gJzAnOworCSphc2NpaSsrID0gJ3gnOworCisJaWYgKGJpbmxlbiA+IDI1NSkKKwkJYmlubGVuID0gMjU1OworCisJZm9yIChpID0gMDsgaSA8IGJpbmxlbjsgaSsrKSB7CisJCW5pYiA9ICh1X2ludDMyX3QpKmJpbmFyeSA+PiA0OworCQkqYXNjaWkrKyA9IG5pYiArIChuaWIgPCAxMCA/ICcwJyA6ICc3Jyk7CisJCW5pYiA9ICpiaW5hcnkrKyAmIDB4MGY7CisJCSphc2NpaSsrID0gbmliICsgKG5pYiA8IDEwID8gJzAnIDogJzcnKTsKKwkJaWYgKCgoaSAlIDIpID09IDAgJiYgKGkgKyAxKSA8IGJpbmxlbikpCisJCQkqYXNjaWkrKyA9ICcuJzsKKwl9CisJKmFzY2lpID0gJ1wwJzsKKwlyZXR1cm4gKHN0YXJ0KTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvbmV0YnNkL2lzYy9ldl9zdHJlYW1zLmMgYi9saWJjL25ldGJzZC9pc2MvZXZfc3RyZWFtcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlZWNjM2UKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL25ldGJzZC9pc2MvZXZfc3RyZWFtcy5jCkBAIC0wLDAgKzEsMzExIEBACisvKgkkTmV0QlNEOiBldl9zdHJlYW1zLmMsdiAxLjIgMjAwNC8wNS8yMCAxOTo1MjozMSBjaHJpc3RvcyBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAyMDA0IGJ5IEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCisgKiBDb3B5cmlnaHQgKGMpIDE5OTYtMTk5OSBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAorICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisvKiBldl9zdHJlYW1zLmMgLSBpbXBsZW1lbnQgYXN5bmNoIHN0cmVhbSBmaWxlIElPIGZvciB0aGUgZXZlbnRsaWIKKyAqIHZpeCAwNG1hcjk2IFtpbml0aWFsXQorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpZiAhZGVmaW5lZChMSU5UKSAmJiAhZGVmaW5lZChDT0RFQ0VOVEVSKSAmJiAhZGVmaW5lZChsaW50KQorI2lmZGVmIG5vdGRlZgorc3RhdGljIGNvbnN0IGNoYXIgcmNzaWRbXSA9ICJJZDogZXZfc3RyZWFtcy5jLHYgMS4yLjIwNi4yIDIwMDQvMDMvMTcgMDA6Mjk6NTEgbWFya2EgRXhwIjsKKyNlbHNlCitfX1JDU0lEKCIkTmV0QlNEOiBldl9zdHJlYW1zLmMsdiAxLjIgMjAwNC8wNS8yMCAxOTo1MjozMSBjaHJpc3RvcyBFeHAgJCIpOworI2VuZGlmCisjZW5kaWYKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy91aW8uaD4KKworI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlIDxpc2MvZXZlbnRsaWIuaD4KKyNpbmNsdWRlICJldmVudGxpYl9wLmgiCisKKyNpZm5kZWYgX0xJQkMKK3N0YXRpYyBpbnQJY29weXZlYyhldlN0cmVhbSAqc3RyLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwgaW50IGlvY250KTsKK3N0YXRpYyB2b2lkCWNvbnN1bWUoZXZTdHJlYW0gKnN0ciwgc2l6ZV90IGJ5dGVzKTsKK3N0YXRpYyB2b2lkCWRvbmUoZXZDb250ZXh0IG9wYXF1ZUN0eCwgZXZTdHJlYW0gKnN0cik7CitzdGF0aWMgdm9pZAl3cml0YWJsZShldkNvbnRleHQgb3BhcXVlQ3R4LCB2b2lkICp1YXAsIGludCBmZCwgaW50IGV2bWFzayk7CitzdGF0aWMgdm9pZAlyZWFkYWJsZShldkNvbnRleHQgb3BhcXVlQ3R4LCB2b2lkICp1YXAsIGludCBmZCwgaW50IGV2bWFzayk7CisjZW5kaWYKKworc3RydWN0IGlvdmVjCitldkNvbnNJb3ZlYyh2b2lkICpidWYsIHNpemVfdCBjbnQpIHsKKwlzdHJ1Y3QgaW92ZWMgcmV0OworCisJbWVtc2V0KCZyZXQsIDB4ZjUsIHNpemVvZiByZXQpOworCXJldC5pb3ZfYmFzZSA9IGJ1ZjsKKwlyZXQuaW92X2xlbiA9IGNudDsKKwlyZXR1cm4gKHJldCk7Cit9CisKKyNpZm5kZWYgX0xJQkMKK2ludAorZXZXcml0ZShldkNvbnRleHQgb3BhcXVlQ3R4LCBpbnQgZmQsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LCBpbnQgaW9jbnQsCisJZXZTdHJlYW1GdW5jIGZ1bmMsIHZvaWQgKnVhcCwgZXZTdHJlYW1JRCAqaWQpCit7CisJZXZDb250ZXh0X3AgKmN0eCA9IG9wYXF1ZUN0eC5vcGFxdWU7CisJZXZTdHJlYW0gKm5ldzsKKwlpbnQgc2F2ZTsKKworCU9LTkVXKG5ldyk7CisJbmV3LT5mdW5jID0gZnVuYzsKKwluZXctPnVhcCA9IHVhcDsKKwluZXctPmZkID0gZmQ7CisJbmV3LT5mbGFncyA9IDA7CisJaWYgKGV2U2VsZWN0RkQob3BhcXVlQ3R4LCBmZCwgRVZfV1JJVEUsIHdyaXRhYmxlLCBuZXcsICZuZXctPmZpbGUpIDwgMCkKKwkJZ290byBmcmVlOworCWlmIChjb3B5dmVjKG5ldywgaW92LCBpb2NudCkgPCAwKQorCQlnb3RvIGZyZWU7CisJbmV3LT5wcmV2RG9uZSA9IE5VTEw7CisJbmV3LT5uZXh0RG9uZSA9IE5VTEw7CisJaWYgKGN0eC0+c3RyZWFtcyAhPSBOVUxMKQorCQljdHgtPnN0cmVhbXMtPnByZXYgPSBuZXc7CisJbmV3LT5wcmV2ID0gTlVMTDsKKwluZXctPm5leHQgPSBjdHgtPnN0cmVhbXM7CisJY3R4LT5zdHJlYW1zID0gbmV3OworCWlmIChpZCAhPSBOVUxMKQorCQlpZC0+b3BhcXVlID0gbmV3OworCXJldHVybiAoMCk7CisgZnJlZToKKwlzYXZlID0gZXJybm87CisJRlJFRShuZXcpOworCWVycm5vID0gc2F2ZTsKKwlyZXR1cm4gKC0xKTsKK30KKworaW50CitldlJlYWQoZXZDb250ZXh0IG9wYXF1ZUN0eCwgaW50IGZkLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwgaW50IGlvY250LAorICAgICAgIGV2U3RyZWFtRnVuYyBmdW5jLCB2b2lkICp1YXAsIGV2U3RyZWFtSUQgKmlkKQoreworCWV2Q29udGV4dF9wICpjdHggPSBvcGFxdWVDdHgub3BhcXVlOworCWV2U3RyZWFtICpuZXc7CisJaW50IHNhdmU7CisKKwlPS05FVyhuZXcpOworCW5ldy0+ZnVuYyA9IGZ1bmM7CisJbmV3LT51YXAgPSB1YXA7CisJbmV3LT5mZCA9IGZkOworCW5ldy0+ZmxhZ3MgPSAwOworCWlmIChldlNlbGVjdEZEKG9wYXF1ZUN0eCwgZmQsIEVWX1JFQUQsIHJlYWRhYmxlLCBuZXcsICZuZXctPmZpbGUpIDwgMCkKKwkJZ290byBmcmVlOworCWlmIChjb3B5dmVjKG5ldywgaW92LCBpb2NudCkgPCAwKQorCQlnb3RvIGZyZWU7CisJbmV3LT5wcmV2RG9uZSA9IE5VTEw7CisJbmV3LT5uZXh0RG9uZSA9IE5VTEw7CisJaWYgKGN0eC0+c3RyZWFtcyAhPSBOVUxMKQorCQljdHgtPnN0cmVhbXMtPnByZXYgPSBuZXc7CisJbmV3LT5wcmV2ID0gTlVMTDsKKwluZXctPm5leHQgPSBjdHgtPnN0cmVhbXM7CisJY3R4LT5zdHJlYW1zID0gbmV3OworCWlmIChpZCkKKwkJaWQtPm9wYXF1ZSA9IG5ldzsKKwlyZXR1cm4gKDApOworIGZyZWU6CisJc2F2ZSA9IGVycm5vOworCUZSRUUobmV3KTsKKwllcnJubyA9IHNhdmU7CisJcmV0dXJuICgtMSk7Cit9CisKK2ludAorZXZUaW1lUlcoZXZDb250ZXh0IG9wYXF1ZUN0eCwgZXZTdHJlYW1JRCBpZCwgZXZUaW1lcklEIHRpbWVyKSAvKkFSR1NVU0VEKi8geworCWV2U3RyZWFtICpzdHIgPSBpZC5vcGFxdWU7CisKKwlVTlVTRUQob3BhcXVlQ3R4KTsKKworCXN0ci0+dGltZXIgPSB0aW1lcjsKKwlzdHItPmZsYWdzIHw9IEVWX1NUUl9USU1FUk9LOworCXJldHVybiAoMCk7Cit9CisKK2ludAorZXZVbnRpbWVSVyhldkNvbnRleHQgb3BhcXVlQ3R4LCBldlN0cmVhbUlEIGlkKSAvKkFSR1NVU0VEKi8geworCWV2U3RyZWFtICpzdHIgPSBpZC5vcGFxdWU7CisKKwlVTlVTRUQob3BhcXVlQ3R4KTsKKworCXN0ci0+ZmxhZ3MgJj0gfkVWX1NUUl9USU1FUk9LOworCXJldHVybiAoMCk7Cit9CisKK2ludAorZXZDYW5jZWxSVyhldkNvbnRleHQgb3BhcXVlQ3R4LCBldlN0cmVhbUlEIGlkKSB7CisJZXZDb250ZXh0X3AgKmN0eCA9IG9wYXF1ZUN0eC5vcGFxdWU7CisJZXZTdHJlYW0gKm9sZCA9IGlkLm9wYXF1ZTsKKworCS8qCisJICogVGhlIHN0cmVhbXMgbGlzdCBpcyBkb3VibHkgdGhyZWFkZWQuICBGaXJzdCwgdGhlcmUncyBjdHgtPnN0cmVhbXMKKwkgKiB0aGF0J3MgdXNlZCBieSBldkRlc3Ryb3koKSB0byBmaW5kIGFuZCBjYW5jZWwgYWxsIHN0cmVhbXMuICBTZWNvbmQsCisJICogdGhlcmUncyBjdHgtPnN0ckRvbmUgKGhlYWQpIGFuZCBjdHgtPnN0ckxhc3QgKHRhaWwpIHdoaWNoIHRocmVhZAorCSAqIHRocm91Z2ggdGhlIHBvdGVudGlhbGx5IHNtYWxsZXIgbnVtYmVyIG9mICJJTyBjb21wbGV0ZWQiIHN0cmVhbXMsCisJICogdXNlZCBpbiBldkdldE5leHQoKSB0byBhdm9pZCBzY2FubmluZyB0aGUgZW50aXJlIGxpc3QuCisJICovCisKKwkvKiBVbmxpbmsgZnJvbSBjdHgtPnN0cmVhbXMuICovCisJaWYgKG9sZC0+cHJldiAhPSBOVUxMKQorCQlvbGQtPnByZXYtPm5leHQgPSBvbGQtPm5leHQ7CisJZWxzZQorCQljdHgtPnN0cmVhbXMgPSBvbGQtPm5leHQ7CisJaWYgKG9sZC0+bmV4dCAhPSBOVUxMKQorCQlvbGQtPm5leHQtPnByZXYgPSBvbGQtPnByZXY7CisKKwkvKgorCSAqIElmICdvbGQnIGlzIG9uIHRoZSBjdHgtPnN0ckRvbmUgbGlzdCwgcmVtb3ZlIGl0LiAgVXBkYXRlCisJICogY3R4LT5zdHJMYXN0IGlmIG5lY2Vzc2FyeS4KKwkgKi8KKwlpZiAob2xkLT5wcmV2RG9uZSA9PSBOVUxMICYmIG9sZC0+bmV4dERvbmUgPT0gTlVMTCkgeworCQkvKgorCQkgKiBFaXRoZXIgJ29sZCcgaXMgdGhlIG9ubHkgaXRlbSBvbiB0aGUgZG9uZSBsaXN0LCBvciBpdCdzCisJCSAqIG5vdCBvbiB0aGUgZG9uZSBsaXN0LiAgSWYgdGhlIGZvcm1lciwgdGhlbiB3ZSB1bmxpbmsgaXQKKwkJICogZnJvbSB0aGUgbGlzdC4gIElmIHRoZSBsYXR0ZXIsIHdlIGxlYXZlIHRoZSBsaXN0IGFsb25lLgorCQkgKi8KKwkJaWYgKGN0eC0+c3RyRG9uZSA9PSBvbGQpIHsKKwkJCWN0eC0+c3RyRG9uZSA9IE5VTEw7CisJCQljdHgtPnN0ckxhc3QgPSBOVUxMOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKG9sZC0+cHJldkRvbmUgIT0gTlVMTCkKKwkJCW9sZC0+cHJldkRvbmUtPm5leHREb25lID0gb2xkLT5uZXh0RG9uZTsKKwkJZWxzZQorCQkJY3R4LT5zdHJEb25lID0gb2xkLT5uZXh0RG9uZTsKKwkJaWYgKG9sZC0+bmV4dERvbmUgIT0gTlVMTCkKKwkJCW9sZC0+bmV4dERvbmUtPnByZXZEb25lID0gb2xkLT5wcmV2RG9uZTsKKwkJZWxzZQorCQkJY3R4LT5zdHJMYXN0ID0gb2xkLT5wcmV2RG9uZTsKKwl9CisKKwkvKiBEZWFsbG9jYXRlIHRoZSBzdHJlYW0uICovCisJaWYgKG9sZC0+ZmlsZS5vcGFxdWUpCisJCWV2RGVzZWxlY3RGRChvcGFxdWVDdHgsIG9sZC0+ZmlsZSk7CisJbWVtcHV0KG9sZC0+aW92T3JpZywgc2l6ZW9mIChzdHJ1Y3QgaW92ZWMpICogb2xkLT5pb3ZPcmlnQ291bnQpOworCUZSRUUob2xkKTsKKwlyZXR1cm4gKDApOworfQorCisvKiBDb3B5IGEgc2NhdHRlci9nYXRoZXIgdmVjdG9yIGFuZCBpbml0aWFsaXplIGEgc3RyZWFtIGhhbmRsZXIncyBJTy4gKi8KK3N0YXRpYyBpbnQKK2NvcHl2ZWMoZXZTdHJlYW0gKnN0ciwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsIGludCBpb2NudCkgeworCWludCBpOworCisJc3RyLT5pb3ZPcmlnID0gKHN0cnVjdCBpb3ZlYyAqKW1lbWdldChzaXplb2Yoc3RydWN0IGlvdmVjKSAqIGlvY250KTsKKwlpZiAoc3RyLT5pb3ZPcmlnID09IE5VTEwpIHsKKwkJZXJybm8gPSBFTk9NRU07CisJCXJldHVybiAoLTEpOworCX0KKwlzdHItPmlvVG90YWwgPSAwOworCWZvciAoaSA9IDA7IGkgPCBpb2NudDsgaSsrKSB7CisJCXN0ci0+aW92T3JpZ1tpXSA9IGlvdltpXTsKKwkJc3RyLT5pb1RvdGFsICs9IGlvdltpXS5pb3ZfbGVuOworCX0KKwlzdHItPmlvdk9yaWdDb3VudCA9IGlvY250OworCXN0ci0+aW92Q3VyID0gc3RyLT5pb3ZPcmlnOworCXN0ci0+aW92Q3VyQ291bnQgPSBzdHItPmlvdk9yaWdDb3VudDsKKwlzdHItPmlvRG9uZSA9IDA7CisJcmV0dXJuICgwKTsKK30KKworLyogUHVsbCBvZmYgb3IgdHJ1bmNhdGUgbGVhZCBpb3ZlYyhzKS4gKi8KK3N0YXRpYyB2b2lkCitjb25zdW1lKGV2U3RyZWFtICpzdHIsIHNpemVfdCBieXRlcykgeworCXdoaWxlIChieXRlcyA+IDBVKSB7CisJCWlmIChieXRlcyA8IChzaXplX3Qpc3RyLT5pb3ZDdXItPmlvdl9sZW4pIHsKKwkJCXN0ci0+aW92Q3VyLT5pb3ZfbGVuIC09IGJ5dGVzOworCQkJc3RyLT5pb3ZDdXItPmlvdl9iYXNlID0gKHZvaWQgKikKKwkJCQkoKHVfY2hhciAqKXN0ci0+aW92Q3VyLT5pb3ZfYmFzZSArIGJ5dGVzKTsKKwkJCXN0ci0+aW9Eb25lICs9IGJ5dGVzOworCQkJYnl0ZXMgPSAwOworCQl9IGVsc2UgeworCQkJYnl0ZXMgLT0gc3RyLT5pb3ZDdXItPmlvdl9sZW47CisJCQlzdHItPmlvRG9uZSArPSBzdHItPmlvdkN1ci0+aW92X2xlbjsKKwkJCXN0ci0+aW92Q3VyKys7CisJCQlzdHItPmlvdkN1ckNvdW50LS07CisJCX0KKwl9Cit9CisKKy8qIEFkZCBhIHN0cmVhbSB0byBEb25lIGxpc3QgYW5kIGRlc2VsZWN0IHRoZSBGRC4gKi8KK3N0YXRpYyB2b2lkCitkb25lKGV2Q29udGV4dCBvcGFxdWVDdHgsIGV2U3RyZWFtICpzdHIpIHsKKwlldkNvbnRleHRfcCAqY3R4ID0gb3BhcXVlQ3R4Lm9wYXF1ZTsKKworCWlmIChjdHgtPnN0ckxhc3QgIT0gTlVMTCkgeworCQlzdHItPnByZXZEb25lID0gY3R4LT5zdHJMYXN0OworCQljdHgtPnN0ckxhc3QtPm5leHREb25lID0gc3RyOworCQljdHgtPnN0ckxhc3QgPSBzdHI7CisJfSBlbHNlIHsKKwkJSU5TSVNUKGN0eC0+c3RyRG9uZSA9PSBOVUxMKTsKKwkJY3R4LT5zdHJEb25lID0gY3R4LT5zdHJMYXN0ID0gc3RyOworCX0KKwlldkRlc2VsZWN0RkQob3BhcXVlQ3R4LCBzdHItPmZpbGUpOworCXN0ci0+ZmlsZS5vcGFxdWUgPSBOVUxMOworCS8qIGV2RHJvcCgpIHdpbGwgY2FsbCBldkNhbmNlbFJXKCkgb24gdXMuICovCit9CisKKy8qIERyaWJibGUgb3V0IHNvbWUgYnl0ZXMgb24gdGhlIHN0cmVhbS4gIChDYWxsZWQgYnkgZXZEaXNwYXRjaCgpLikgKi8KK3N0YXRpYyB2b2lkCit3cml0YWJsZShldkNvbnRleHQgb3BhcXVlQ3R4LCB2b2lkICp1YXAsIGludCBmZCwgaW50IGV2bWFzaykgeworCWV2U3RyZWFtICpzdHIgPSB1YXA7CisJaW50IGJ5dGVzOworCisJVU5VU0VEKGV2bWFzayk7CisKKwlieXRlcyA9IHdyaXRldihmZCwgc3RyLT5pb3ZDdXIsIHN0ci0+aW92Q3VyQ291bnQpOworCWlmIChieXRlcyA+IDApIHsKKwkJaWYgKChzdHItPmZsYWdzICYgRVZfU1RSX1RJTUVST0spICE9IDApCisJCQlldlRvdWNoSWRsZVRpbWVyKG9wYXF1ZUN0eCwgc3RyLT50aW1lcik7CisJCWNvbnN1bWUoc3RyLCBieXRlcyk7CisJfSBlbHNlIHsKKwkJaWYgKGJ5dGVzIDwgMCAmJiBlcnJubyAhPSBFSU5UUikgeworCQkJc3RyLT5pb0RvbmUgPSAtMTsKKwkJCXN0ci0+aW9FcnJubyA9IGVycm5vOworCQl9CisJfQorCWlmIChzdHItPmlvRG9uZSA9PSAtMSB8fCBzdHItPmlvRG9uZSA9PSBzdHItPmlvVG90YWwpCisJCWRvbmUob3BhcXVlQ3R4LCBzdHIpOworfQorCisvKiBTY29vcCB1cCBzb21lIGJ5dGVzIGZyb20gdGhlIHN0cmVhbS4gIChDYWxsZWQgYnkgZXZEaXNwYXRjaCgpLikgKi8KK3N0YXRpYyB2b2lkCityZWFkYWJsZShldkNvbnRleHQgb3BhcXVlQ3R4LCB2b2lkICp1YXAsIGludCBmZCwgaW50IGV2bWFzaykgeworCWV2U3RyZWFtICpzdHIgPSB1YXA7CisJaW50IGJ5dGVzOworCisJVU5VU0VEKGV2bWFzayk7CisKKwlieXRlcyA9IHJlYWR2KGZkLCBzdHItPmlvdkN1ciwgc3RyLT5pb3ZDdXJDb3VudCk7CisJaWYgKGJ5dGVzID4gMCkgeworCQlpZiAoKHN0ci0+ZmxhZ3MgJiBFVl9TVFJfVElNRVJPSykgIT0gMCkKKwkJCWV2VG91Y2hJZGxlVGltZXIob3BhcXVlQ3R4LCBzdHItPnRpbWVyKTsKKwkJY29uc3VtZShzdHIsIGJ5dGVzKTsKKwl9IGVsc2UgeworCQlpZiAoYnl0ZXMgPT0gMCkKKwkJCXN0ci0+aW9Eb25lID0gMDsKKwkJZWxzZSB7CisJCQlpZiAoZXJybm8gIT0gRUlOVFIpIHsKKwkJCQlzdHItPmlvRG9uZSA9IC0xOworCQkJCXN0ci0+aW9FcnJubyA9IGVycm5vOworCQkJfQorCQl9CisJfQorCWlmIChzdHItPmlvRG9uZSA8PSAwIHx8IHN0ci0+aW9Eb25lID09IHN0ci0+aW9Ub3RhbCkKKwkJZG9uZShvcGFxdWVDdHgsIHN0cik7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvbmV0YnNkL2lzYy9ldl90aW1lcnMuYyBiL2xpYmMvbmV0YnNkL2lzYy9ldl90aW1lcnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Njc0Njg3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9uZXRic2QvaXNjL2V2X3RpbWVycy5jCkBAIC0wLDAgKzEsNTA0IEBACisvKgkkTmV0QlNEOiBldl90aW1lcnMuYyx2IDEuMiAyMDA0LzA1LzIwIDE5OjUyOjMxIGNocmlzdG9zIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKKyAqIENvcHlyaWdodCAoYykgMTk5NS0xOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElTQyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIElTQyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCisgKiBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKy8qIGV2X3RpbWVycy5jIC0gaW1wbGVtZW50IHRpbWVycyBmb3IgdGhlIGV2ZW50bGliCisgKiB2aXggMDlzZXA5NSBbaW5pdGlhbF0KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaWYgIWRlZmluZWQoTElOVCkgJiYgIWRlZmluZWQoQ09ERUNFTlRFUikgJiYgIWRlZmluZWQobGludCkKKyNpZmRlZiBub3RkZWYKK3N0YXRpYyBjb25zdCBjaGFyIHJjc2lkW10gPSAiSWQ6IGV2X3RpbWVycy5jLHYgMS4yLjIuMS40LjUgMjAwNC8wMy8xNyAwMjozOToxMyBtYXJrYSBFeHAiOworI2Vsc2UKK19fUkNTSUQoIiROZXRCU0Q6IGV2X3RpbWVycy5jLHYgMS4yIDIwMDQvMDUvMjAgMTk6NTI6MzEgY2hyaXN0b3MgRXhwICQiKTsKKyNlbmRpZgorI2VuZGlmCisKKy8qIEltcG9ydC4gKi8KKworI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlIDxpc2MvYXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPGlzYy9ldmVudGxpYi5oPgorI2luY2x1ZGUgImV2ZW50bGliX3AuaCIKKworLyogQ29uc3RhbnRzLiAqLworCisjZGVmaW5lCU1JTExJT04gMTAwMDAwMAorI2RlZmluZSBCSUxMSU9OIDEwMDAwMDAwMDAKKworLyogRm9yd2FyZC4gKi8KKworI2lmbmRlZiBfTElCQworc3RhdGljIGludCBkdWVfc29vbmVyKHZvaWQgKiwgdm9pZCAqKTsKK3N0YXRpYyB2b2lkIHNldF9pbmRleCh2b2lkICosIGludCk7CitzdGF0aWMgdm9pZCBmcmVlX3RpbWVyKHZvaWQgKiwgdm9pZCAqKTsKK3N0YXRpYyB2b2lkIHByaW50X3RpbWVyKHZvaWQgKiwgdm9pZCAqKTsKK3N0YXRpYyB2b2lkIGlkbGVfdGltZW91dChldkNvbnRleHQsIHZvaWQgKiwgc3RydWN0IHRpbWVzcGVjLCBzdHJ1Y3QgdGltZXNwZWMpOworCisvKiBQcml2YXRlIHR5cGUuICovCisKK3R5cGVkZWYgc3RydWN0IHsKKwlldlRpbWVyRnVuYwlmdW5jOworCXZvaWQgKgkJdWFwOworCXN0cnVjdCB0aW1lc3BlYwlsYXN0VG91Y2hlZDsKKwlzdHJ1Y3QgdGltZXNwZWMJbWF4X2lkbGU7CisJZXZUaW1lciAqCXRpbWVyOworfSBpZGxlX3RpbWVyOworI2VuZGlmCisKKy8qIFB1YmxpYy4gKi8KKworc3RydWN0IHRpbWVzcGVjCitldkNvbnNUaW1lKHRpbWVfdCBzZWMsIGxvbmcgbnNlYykgeworCXN0cnVjdCB0aW1lc3BlYyB4OworCisJeC50dl9zZWMgPSBzZWM7CisJeC50dl9uc2VjID0gbnNlYzsKKwlyZXR1cm4gKHgpOworfQorCitzdHJ1Y3QgdGltZXNwZWMKK2V2QWRkVGltZShzdHJ1Y3QgdGltZXNwZWMgYWRkZW5kMSwgc3RydWN0IHRpbWVzcGVjIGFkZGVuZDIpIHsKKwlzdHJ1Y3QgdGltZXNwZWMgeDsKKworCXgudHZfc2VjID0gYWRkZW5kMS50dl9zZWMgKyBhZGRlbmQyLnR2X3NlYzsKKwl4LnR2X25zZWMgPSBhZGRlbmQxLnR2X25zZWMgKyBhZGRlbmQyLnR2X25zZWM7CisJaWYgKHgudHZfbnNlYyA+PSBCSUxMSU9OKSB7CisJCXgudHZfc2VjKys7CisJCXgudHZfbnNlYyAtPSBCSUxMSU9OOworCX0KKwlyZXR1cm4gKHgpOworfQorCitzdHJ1Y3QgdGltZXNwZWMKK2V2U3ViVGltZShzdHJ1Y3QgdGltZXNwZWMgbWludWVuZCwgc3RydWN0IHRpbWVzcGVjIHN1YnRyYWhlbmQpIHsKKwlzdHJ1Y3QgdGltZXNwZWMgeDsKKworCXgudHZfc2VjID0gbWludWVuZC50dl9zZWMgLSBzdWJ0cmFoZW5kLnR2X3NlYzsKKwlpZiAobWludWVuZC50dl9uc2VjID49IHN1YnRyYWhlbmQudHZfbnNlYykKKwkJeC50dl9uc2VjID0gbWludWVuZC50dl9uc2VjIC0gc3VidHJhaGVuZC50dl9uc2VjOworCWVsc2UgeworCQl4LnR2X25zZWMgPSBCSUxMSU9OIC0gc3VidHJhaGVuZC50dl9uc2VjICsgbWludWVuZC50dl9uc2VjOworCQl4LnR2X3NlYy0tOworCX0KKwlyZXR1cm4gKHgpOworfQorCitpbnQKK2V2Q21wVGltZShzdHJ1Y3QgdGltZXNwZWMgYSwgc3RydWN0IHRpbWVzcGVjIGIpIHsKKwlsb25nIHggPSBhLnR2X3NlYyAtIGIudHZfc2VjOworCisJaWYgKHggPT0gMEwpCisJCXggPSBhLnR2X25zZWMgLSBiLnR2X25zZWM7CisJcmV0dXJuICh4IDwgMEwgPyAoLTEpIDogeCA+IDBMID8gKDEpIDogKDApKTsKK30KKworc3RydWN0IHRpbWVzcGVjCitldk5vd1RpbWUoKSB7CisJc3RydWN0IHRpbWV2YWwgbm93OworI2lmZGVmIENMT0NLX1JFQUxUSU1FCisJc3RydWN0IHRpbWVzcGVjIHRzbm93OworCWludCBtID0gQ0xPQ0tfUkVBTFRJTUU7CisKKyNpZmRlZiBDTE9DS19NT05PVE9OSUMKKwlpZiAoX19ldk9wdE1vbm9UaW1lKQorCQltID0gQ0xPQ0tfTU9OT1RPTklDOworI2VuZGlmCisJaWYgKGNsb2NrX2dldHRpbWUobSwgJnRzbm93KSA9PSAwKQorCQlyZXR1cm4gKHRzbm93KTsKKyNlbmRpZgorCWlmIChnZXR0aW1lb2ZkYXkoJm5vdywgTlVMTCkgPCAwKQorCQlyZXR1cm4gKGV2Q29uc1RpbWUoMEwsIDBMKSk7CisJcmV0dXJuIChldlRpbWVTcGVjKG5vdykpOworfQorCitzdHJ1Y3QgdGltZXNwZWMKK2V2VVRDVGltZSh2b2lkKSB7CisJc3RydWN0IHRpbWV2YWwgbm93OworI2lmZGVmIENMT0NLX1JFQUxUSU1FCisJc3RydWN0IHRpbWVzcGVjIHRzbm93OworCWlmIChjbG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1FLCAmdHNub3cpID09IDApCisJCXJldHVybiAodHNub3cpOworI2VuZGlmCisJaWYgKGdldHRpbWVvZmRheSgmbm93LCBOVUxMKSA8IDApCisJCXJldHVybiAoZXZDb25zVGltZSgwTCwgMEwpKTsKKwlyZXR1cm4gKGV2VGltZVNwZWMobm93KSk7Cit9CisKKyNpZm5kZWYgX0xJQkMKK3N0cnVjdCB0aW1lc3BlYworZXZMYXN0RXZlbnRUaW1lKGV2Q29udGV4dCBvcGFxdWVDdHgpIHsKKwlldkNvbnRleHRfcCAqY3R4ID0gb3BhcXVlQ3R4Lm9wYXF1ZTsKKworCXJldHVybiAoY3R4LT5sYXN0RXZlbnRUaW1lKTsKK30KKyNlbmRpZgorCitzdHJ1Y3QgdGltZXNwZWMKK2V2VGltZVNwZWMoc3RydWN0IHRpbWV2YWwgdHYpIHsKKwlzdHJ1Y3QgdGltZXNwZWMgdHM7CisKKwl0cy50dl9zZWMgPSB0di50dl9zZWM7CisJdHMudHZfbnNlYyA9IHR2LnR2X3VzZWMgKiAxMDAwOworCXJldHVybiAodHMpOworfQorCitzdHJ1Y3QgdGltZXZhbAorZXZUaW1lVmFsKHN0cnVjdCB0aW1lc3BlYyB0cykgeworCXN0cnVjdCB0aW1ldmFsIHR2OworCisJdHYudHZfc2VjID0gdHMudHZfc2VjOworCXR2LnR2X3VzZWMgPSB0cy50dl9uc2VjIC8gMTAwMDsKKwlyZXR1cm4gKHR2KTsKK30KKworI2lmbmRlZiBfTElCQworaW50CitldlNldFRpbWVyKGV2Q29udGV4dCBvcGFxdWVDdHgsCisJICAgZXZUaW1lckZ1bmMgZnVuYywKKwkgICB2b2lkICp1YXAsCisJICAgc3RydWN0IHRpbWVzcGVjIGR1ZSwKKwkgICBzdHJ1Y3QgdGltZXNwZWMgaW50ZXIsCisJICAgZXZUaW1lcklEICpvcGFxdWVJRAorKSB7CisJZXZDb250ZXh0X3AgKmN0eCA9IG9wYXF1ZUN0eC5vcGFxdWU7CisJZXZUaW1lciAqaWQ7CisKKwlwcmludGYoImV2U2V0VGltZXIoY3R4ICVwLCBmdW5jICVwLCB1YXAgJXAsIGR1ZSAlbGQuJTA5bGQsIGludGVyICVsZC4lMDlsZClcbiIsCisJCSBjdHgsIGZ1bmMsIHVhcCwKKwkJIChsb25nKWR1ZS50dl9zZWMsIGR1ZS50dl9uc2VjLAorCQkgKGxvbmcpaW50ZXIudHZfc2VjLCBpbnRlci50dl9uc2VjKTsKKworI2lmZGVmIF9faHB1eAorCS8qCisJICogdHZfc2VjIGFuZCB0dl9uc2VjIGFyZSB1bnNpZ25lZC4KKwkgKi8KKwlpZiAoZHVlLnR2X25zZWMgPj0gQklMTElPTikKKwkJRVZfRVJSKEVJTlZBTCk7CisKKwlpZiAoaW50ZXIudHZfbnNlYyA+PSBCSUxMSU9OKQorCQlFVl9FUlIoRUlOVkFMKTsKKyNlbHNlCisJaWYgKGR1ZS50dl9zZWMgPCAwIHx8IGR1ZS50dl9uc2VjIDwgMCB8fCBkdWUudHZfbnNlYyA+PSBCSUxMSU9OKQorCQlFVl9FUlIoRUlOVkFMKTsKKworCWlmIChpbnRlci50dl9zZWMgPCAwIHx8IGludGVyLnR2X25zZWMgPCAwIHx8IGludGVyLnR2X25zZWMgPj0gQklMTElPTikKKwkJRVZfRVJSKEVJTlZBTCk7CisjZW5kaWYKKworCS8qIGR1ZT17MCwwfSBpcyBhIG1hZ2ljIGNvb2tpZSBtZWFuaW5nICJub3cuIiAqLworCWlmIChkdWUudHZfc2VjID09ICh0aW1lX3QpMCAmJiBkdWUudHZfbnNlYyA9PSAwTCkKKwkJZHVlID0gZXZOb3dUaW1lKCk7CisKKwkvKiBBbGxvY2F0ZSBhbmQgZmlsbC4gKi8KKwlPS05FVyhpZCk7CisJaWQtPmZ1bmMgPSBmdW5jOworCWlkLT51YXAgPSB1YXA7CisJaWQtPmR1ZSA9IGR1ZTsKKwlpZC0+aW50ZXIgPSBpbnRlcjsKKworCWlmIChoZWFwX2luc2VydChjdHgtPnRpbWVycywgaWQpIDwgMCkKKwkJcmV0dXJuICgtMSk7CisKKwkvKiBSZW1lbWJlciB0aGUgSUQgaWYgdGhlIGNhbGxlciBwcm92aWRlZCB1cyBhIHBsYWNlIGZvciBpdC4gKi8KKwlpZiAob3BhcXVlSUQpCisJCW9wYXF1ZUlELT5vcGFxdWUgPSBpZDsKKworCWlmIChjdHgtPmRlYnVnID4gNykgeworCQlwcmludGYoInRpbWVycyBhZnRlciBldlNldFRpbWVyOlxuIik7CisJCSh2b2lkKSBoZWFwX2Zvcl9lYWNoKGN0eC0+dGltZXJzLCBwcmludF90aW1lciwgKHZvaWQgKiljdHgpOworCX0KKworCXJldHVybiAoMCk7Cit9CisKK2ludAorZXZDbGVhclRpbWVyKGV2Q29udGV4dCBvcGFxdWVDdHgsIGV2VGltZXJJRCBpZCkgeworCWV2Q29udGV4dF9wICpjdHggPSBvcGFxdWVDdHgub3BhcXVlOworCWV2VGltZXIgKmRlbCA9IGlkLm9wYXF1ZTsKKworCWlmIChjdHgtPmN1ciAhPSBOVUxMICYmCisJICAgIGN0eC0+Y3VyLT50eXBlID09IFRpbWVyICYmCisJICAgIGN0eC0+Y3VyLT51LnRpbWVyLnRoaXMgPT0gZGVsKSB7CisJCXByaW50ZigiZGVmZXJyaW5nIGRlbGV0ZSBvZiB0aW1lciAoZXhlY3V0aW5nKVxuIik7CisJCS8qCisJCSAqIFNldHRpbmcgdGhlIGludGVydmFsIHRvIHplcm8gZW5zdXJlcyB0aGF0IGV2RHJvcCgpIHdpbGwKKwkJICogY2xlYW4gdXAgdGhlIHRpbWVyLgorCQkgKi8KKwkJZGVsLT5pbnRlciA9IGV2Q29uc1RpbWUoMCwgMCk7CisJCXJldHVybiAoMCk7CisJfQorCisJaWYgKGhlYXBfZWxlbWVudChjdHgtPnRpbWVycywgZGVsLT5pbmRleCkgIT0gZGVsKQorCQlFVl9FUlIoRU5PRU5UKTsKKworCWlmIChoZWFwX2RlbGV0ZShjdHgtPnRpbWVycywgZGVsLT5pbmRleCkgPCAwKQorCQlyZXR1cm4gKC0xKTsKKwlGUkVFKGRlbCk7CisKKwlpZiAoY3R4LT5kZWJ1ZyA+IDcpIHsKKwkJcHJpbnRmKCJ0aW1lcnMgYWZ0ZXIgZXZDbGVhclRpbWVyOlxuIik7CisJCSh2b2lkKSBoZWFwX2Zvcl9lYWNoKGN0eC0+dGltZXJzLCBwcmludF90aW1lciwgKHZvaWQgKiljdHgpOworCX0KKworCXJldHVybiAoMCk7Cit9CisKK2ludAorZXZDb25maWdUaW1lcihldkNvbnRleHQgb3BhcXVlQ3R4LAorCSAgICAgZXZUaW1lcklEIGlkLAorCSAgICAgY29uc3QgY2hhciAqcGFyYW0sCisJICAgICBpbnQgdmFsdWUKKykgeworCWV2Q29udGV4dF9wICpjdHggPSBvcGFxdWVDdHgub3BhcXVlOworCWV2VGltZXIgKnRpbWVyID0gaWQub3BhcXVlOworCWludCByZXN1bHQ9MDsKKworCVVOVVNFRCh2YWx1ZSk7CisKKwlpZiAoaGVhcF9lbGVtZW50KGN0eC0+dGltZXJzLCB0aW1lci0+aW5kZXgpICE9IHRpbWVyKQorCQlFVl9FUlIoRU5PRU5UKTsKKworCWlmIChzdHJjbXAocGFyYW0sICJyYXRlIikgPT0gMCkKKwkJdGltZXItPm1vZGUgfD0gRVZfVE1SX1JBVEU7CisJZWxzZSBpZiAoc3RyY21wKHBhcmFtLCAiaW50ZXJ2YWwiKSA9PSAwKQorCQl0aW1lci0+bW9kZSAmPSB+RVZfVE1SX1JBVEU7CisJZWxzZQorCQlFVl9FUlIoRUlOVkFMKTsKKworCXJldHVybiAocmVzdWx0KTsKK30KKworaW50CitldlJlc2V0VGltZXIoZXZDb250ZXh0IG9wYXF1ZUN0eCwKKwkgICAgIGV2VGltZXJJRCBpZCwKKwkgICAgIGV2VGltZXJGdW5jIGZ1bmMsCisJICAgICB2b2lkICp1YXAsCisJICAgICBzdHJ1Y3QgdGltZXNwZWMgZHVlLAorCSAgICAgc3RydWN0IHRpbWVzcGVjIGludGVyCispIHsKKwlldkNvbnRleHRfcCAqY3R4ID0gb3BhcXVlQ3R4Lm9wYXF1ZTsKKwlldlRpbWVyICp0aW1lciA9IGlkLm9wYXF1ZTsKKwlzdHJ1Y3QgdGltZXNwZWMgb2xkX2R1ZTsKKwlpbnQgcmVzdWx0PTA7CisKKwlpZiAoaGVhcF9lbGVtZW50KGN0eC0+dGltZXJzLCB0aW1lci0+aW5kZXgpICE9IHRpbWVyKQorCQlFVl9FUlIoRU5PRU5UKTsKKworI2lmZGVmIF9faHB1eAorCS8qCisJICogdHZfc2VjIGFuZCB0dl9uc2VjIGFyZSB1bnNpZ25lZC4KKwkgKi8KKwlpZiAoZHVlLnR2X25zZWMgPj0gQklMTElPTikKKwkJRVZfRVJSKEVJTlZBTCk7CisKKwlpZiAoaW50ZXIudHZfbnNlYyA+PSBCSUxMSU9OKQorCQlFVl9FUlIoRUlOVkFMKTsKKyNlbHNlCisJaWYgKGR1ZS50dl9zZWMgPCAwIHx8IGR1ZS50dl9uc2VjIDwgMCB8fCBkdWUudHZfbnNlYyA+PSBCSUxMSU9OKQorCQlFVl9FUlIoRUlOVkFMKTsKKworCWlmIChpbnRlci50dl9zZWMgPCAwIHx8IGludGVyLnR2X25zZWMgPCAwIHx8IGludGVyLnR2X25zZWMgPj0gQklMTElPTikKKwkJRVZfRVJSKEVJTlZBTCk7CisjZW5kaWYKKworCW9sZF9kdWUgPSB0aW1lci0+ZHVlOworCisJdGltZXItPmZ1bmMgPSBmdW5jOworCXRpbWVyLT51YXAgPSB1YXA7CisJdGltZXItPmR1ZSA9IGR1ZTsKKwl0aW1lci0+aW50ZXIgPSBpbnRlcjsKKworCXN3aXRjaCAoZXZDbXBUaW1lKGR1ZSwgb2xkX2R1ZSkpIHsKKwljYXNlIC0xOgorCQlyZXN1bHQgPSBoZWFwX2luY3JlYXNlZChjdHgtPnRpbWVycywgdGltZXItPmluZGV4KTsKKwkJYnJlYWs7CisJY2FzZSAwOgorCQlyZXN1bHQgPSAwOworCQlicmVhazsKKwljYXNlIDE6CisJCXJlc3VsdCA9IGhlYXBfZGVjcmVhc2VkKGN0eC0+dGltZXJzLCB0aW1lci0+aW5kZXgpOworCQlicmVhazsKKwl9CisKKwlpZiAoY3R4LT5kZWJ1ZyA+IDcpIHsKKwkJcHJpbnRmKCJ0aW1lcnMgYWZ0ZXIgZXZSZXNldFRpbWVyOlxuIik7CisJCSh2b2lkKSBoZWFwX2Zvcl9lYWNoKGN0eC0+dGltZXJzLCBwcmludF90aW1lciwgKHZvaWQgKiljdHgpOworCX0KKworCXJldHVybiAocmVzdWx0KTsKK30KKworaW50CitldlNldElkbGVUaW1lcihldkNvbnRleHQgb3BhcXVlQ3R4LAorCQlldlRpbWVyRnVuYyBmdW5jLAorCQl2b2lkICp1YXAsCisJCXN0cnVjdCB0aW1lc3BlYyBtYXhfaWRsZSwKKwkJZXZUaW1lcklEICpvcGFxdWVJRAorKSB7CisJZXZDb250ZXh0X3AgKmN0eCA9IG9wYXF1ZUN0eC5vcGFxdWU7CisJaWRsZV90aW1lciAqdHQ7CisKKwkvKiBBbGxvY2F0ZSBhbmQgZmlsbC4gKi8KKwlPS05FVyh0dCk7CisJdHQtPmZ1bmMgPSBmdW5jOworCXR0LT51YXAgPSB1YXA7CisJdHQtPmxhc3RUb3VjaGVkID0gY3R4LT5sYXN0RXZlbnRUaW1lOworCXR0LT5tYXhfaWRsZSA9IG1heF9pZGxlOworCisJaWYgKGV2U2V0VGltZXIob3BhcXVlQ3R4LCBpZGxlX3RpbWVvdXQsIHR0LAorCQkgICAgICAgZXZBZGRUaW1lKGN0eC0+bGFzdEV2ZW50VGltZSwgbWF4X2lkbGUpLAorCQkgICAgICAgbWF4X2lkbGUsIG9wYXF1ZUlEKSA8IDApIHsKKwkJRlJFRSh0dCk7CisJCXJldHVybiAoLTEpOworCX0KKworCXR0LT50aW1lciA9IG9wYXF1ZUlELT5vcGFxdWU7CisKKwlyZXR1cm4gKDApOworfQorCitpbnQKK2V2Q2xlYXJJZGxlVGltZXIoZXZDb250ZXh0IG9wYXF1ZUN0eCwgZXZUaW1lcklEIGlkKSB7CisJZXZUaW1lciAqZGVsID0gaWQub3BhcXVlOworCWlkbGVfdGltZXIgKnR0ID0gZGVsLT51YXA7CisKKwlGUkVFKHR0KTsKKwlyZXR1cm4gKGV2Q2xlYXJUaW1lcihvcGFxdWVDdHgsIGlkKSk7Cit9CisKK2ludAorZXZSZXNldElkbGVUaW1lcihldkNvbnRleHQgb3BhcXVlQ3R4LAorCQkgZXZUaW1lcklEIG9wYXF1ZUlELAorCQkgZXZUaW1lckZ1bmMgZnVuYywKKwkJIHZvaWQgKnVhcCwKKwkJIHN0cnVjdCB0aW1lc3BlYyBtYXhfaWRsZQorKSB7CisJZXZDb250ZXh0X3AgKmN0eCA9IG9wYXF1ZUN0eC5vcGFxdWU7CisJZXZUaW1lciAqdGltZXIgPSBvcGFxdWVJRC5vcGFxdWU7CisJaWRsZV90aW1lciAqdHQgPSB0aW1lci0+dWFwOworCisJdHQtPmZ1bmMgPSBmdW5jOworCXR0LT51YXAgPSB1YXA7CisJdHQtPmxhc3RUb3VjaGVkID0gY3R4LT5sYXN0RXZlbnRUaW1lOworCXR0LT5tYXhfaWRsZSA9IG1heF9pZGxlOworCisJcmV0dXJuIChldlJlc2V0VGltZXIob3BhcXVlQ3R4LCBvcGFxdWVJRCwgaWRsZV90aW1lb3V0LCB0dCwKKwkJCSAgICAgZXZBZGRUaW1lKGN0eC0+bGFzdEV2ZW50VGltZSwgbWF4X2lkbGUpLAorCQkJICAgICBtYXhfaWRsZSkpOworfQorCitpbnQKK2V2VG91Y2hJZGxlVGltZXIoZXZDb250ZXh0IG9wYXF1ZUN0eCwgZXZUaW1lcklEIGlkKSB7CisJZXZDb250ZXh0X3AgKmN0eCA9IG9wYXF1ZUN0eC5vcGFxdWU7CisJZXZUaW1lciAqdCA9IGlkLm9wYXF1ZTsKKwlpZGxlX3RpbWVyICp0dCA9IHQtPnVhcDsKKworCXR0LT5sYXN0VG91Y2hlZCA9IGN0eC0+bGFzdEV2ZW50VGltZTsKKworCXJldHVybiAoMCk7Cit9CisKKy8qIFB1YmxpYyB0byB0aGUgcmVzdCBvZiBldmVudGxpYi4gKi8KKworaGVhcF9jb250ZXh0CitldkNyZWF0ZVRpbWVycyhjb25zdCBldkNvbnRleHRfcCAqY3R4KSB7CisKKwlVTlVTRUQoY3R4KTsKKworCXJldHVybiAoaGVhcF9uZXcoZHVlX3Nvb25lciwgc2V0X2luZGV4LCAyMDQ4KSk7Cit9CisKK3ZvaWQKK2V2RGVzdHJveVRpbWVycyhjb25zdCBldkNvbnRleHRfcCAqY3R4KSB7CisJKHZvaWQpIGhlYXBfZm9yX2VhY2goY3R4LT50aW1lcnMsIGZyZWVfdGltZXIsIE5VTEwpOworCSh2b2lkKSBoZWFwX2ZyZWUoY3R4LT50aW1lcnMpOworfQorCisvKiBQcml2YXRlLiAqLworCitzdGF0aWMgaW50CitkdWVfc29vbmVyKHZvaWQgKmEsIHZvaWQgKmIpIHsKKwlldlRpbWVyICphX3RpbWVyLCAqYl90aW1lcjsKKworCWFfdGltZXIgPSBhOworCWJfdGltZXIgPSBiOworCXJldHVybiAoZXZDbXBUaW1lKGFfdGltZXItPmR1ZSwgYl90aW1lci0+ZHVlKSA8IDApOworfQorCitzdGF0aWMgdm9pZAorc2V0X2luZGV4KHZvaWQgKndoYXQsIGludCBpZHgpIHsKKwlldlRpbWVyICp0aW1lcjsKKworCXRpbWVyID0gd2hhdDsKKwl0aW1lci0+aW5kZXggPSBpZHg7Cit9CisKK3N0YXRpYyB2b2lkCitmcmVlX3RpbWVyKHZvaWQgKndoYXQsIHZvaWQgKnVhcCkgeworCWV2VGltZXIgKnQgPSB3aGF0OworCisJVU5VU0VEKHVhcCk7CisKKwlGUkVFKHQpOworfQorCitzdGF0aWMgdm9pZAorcHJpbnRfdGltZXIodm9pZCAqd2hhdCwgdm9pZCAqdWFwKSB7CisJZXZUaW1lciAqY3VyID0gd2hhdDsKKwlldkNvbnRleHRfcCAqY3R4ID0gdWFwOworCisJY3VyID0gd2hhdDsKKwlldlByaW50ZihjdHgsIDcsCisJICAgICIgIGZ1bmMgJXAsIHVhcCAlcCwgZHVlICVsZC4lMDlsZCwgaW50ZXIgJWxkLiUwOWxkXG4iLAorCQkgY3VyLT5mdW5jLCBjdXItPnVhcCwKKwkJIChsb25nKWN1ci0+ZHVlLnR2X3NlYywgY3VyLT5kdWUudHZfbnNlYywKKwkJIChsb25nKWN1ci0+aW50ZXIudHZfc2VjLCBjdXItPmludGVyLnR2X25zZWMpOworfQorCitzdGF0aWMgdm9pZAoraWRsZV90aW1lb3V0KGV2Q29udGV4dCBvcGFxdWVDdHgsCisJICAgICB2b2lkICp1YXAsCisJICAgICBzdHJ1Y3QgdGltZXNwZWMgZHVlLAorCSAgICAgc3RydWN0IHRpbWVzcGVjIGludGVyCispIHsKKwlldkNvbnRleHRfcCAqY3R4ID0gb3BhcXVlQ3R4Lm9wYXF1ZTsKKwlpZGxlX3RpbWVyICp0aGlzID0gdWFwOworCXN0cnVjdCB0aW1lc3BlYyBpZGxlOworCisJVU5VU0VEKGR1ZSk7CisJVU5VU0VEKGludGVyKTsKKwkKKwlpZGxlID0gZXZTdWJUaW1lKGN0eC0+bGFzdEV2ZW50VGltZSwgdGhpcy0+bGFzdFRvdWNoZWQpOworCWlmIChldkNtcFRpbWUoaWRsZSwgdGhpcy0+bWF4X2lkbGUpID49IDApIHsKKwkJKHRoaXMtPmZ1bmMpKG9wYXF1ZUN0eCwgdGhpcy0+dWFwLCB0aGlzLT50aW1lci0+ZHVlLAorCQkJICAgICB0aGlzLT5tYXhfaWRsZSk7CisJCS8qCisJCSAqIFNldHRpbmcgdGhlIGludGVydmFsIHRvIHplcm8gd2lsbCBjYXVzZSB0aGUgdGltZXIgdG8KKwkJICogYmUgY2xlYW5lZCB1cCBpbiBldkRyb3AoKS4KKwkJICovCisJCXRoaXMtPnRpbWVyLT5pbnRlciA9IGV2Q29uc1RpbWUoMEwsIDBMKTsKKwkJRlJFRSh0aGlzKTsKKwl9IGVsc2UgeworCQkvKiBldkRyb3AoKSB3aWxsIHJlc2NoZWR1bGUgdGhlIHRpbWVyLiAqLworCQl0aGlzLT50aW1lci0+aW50ZXIgPSBldlN1YlRpbWUodGhpcy0+bWF4X2lkbGUsIGlkbGUpOworCX0KK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9uZXRic2QvaXNjL2V2ZW50bGliX3AuaCBiL2xpYmMvbmV0YnNkL2lzYy9ldmVudGxpYl9wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VkYzVhMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvbmV0YnNkL2lzYy9ldmVudGxpYl9wLmgKQEAgLTAsMCArMSwyMzMgQEAKKy8qCSROZXRCU0Q6IGV2ZW50bGliX3AuaCx2IDEuMS4xLjEgMjAwNC8wNS8yMCAxOTozNDozMiBjaHJpc3RvcyBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAyMDA0IGJ5IEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCisgKiBDb3B5cmlnaHQgKGMpIDE5OTUtMTk5OSBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAorICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisvKiBldmVudGxpYl9wLmggLSBwcml2YXRlIGludGVyZmFjZXMgZm9yIGV2ZW50bGliCisgKiB2aXggMDlzZXA5NSBbaW5pdGlhbF0KKyAqCisgKiBJZDogZXZlbnRsaWJfcC5oLHYgMS4zLjIuMS40LjEgMjAwNC8wMy8wOSAwODozMzo0MyBtYXJrYSBFeHAKKyAqLworCisjaWZuZGVmIF9FVkVOVExJQl9QX0gKKyNkZWZpbmUgX0VWRU5UTElCX1BfSAorCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxzeXMvdW4uaD4KKworI2RlZmluZSBFVkVOVExJQl9ERUJVRyAxCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgPGlzYy9oZWFwLmg+CisjaW5jbHVkZSA8aXNjL2xpc3QuaD4KKyNpbmNsdWRlIDxpc2MvbWVtY2x1c3Rlci5oPgorCisKKyNkZWZpbmUJRVZfTUFTS19BTEwJKEVWX1JFQUQgfCBFVl9XUklURSB8IEVWX0VYQ0VQVCkKKyNkZWZpbmUgRVZfRVJSKGUpCQlyZXR1cm4gKGVycm5vID0gKGUpLCAtMSkKKyNkZWZpbmUgT0soeCkJCWlmICgoeCkgPCAwKSBFVl9FUlIoZXJybm8pOyBlbHNlICh2b2lkKU5VTEwKKworCisjaWYgSEFWRV9NRU1fR0VUX1NFVAorI2RlZmluZQlORVcocCkJCWlmICgoKHApID0gbWVtZ2V0KHNpemVvZiAqKHApKSkgIT0gTlVMTCkgXAorCQkJCUZJTEwocCk7IFwKKwkJCWVsc2UgXAorCQkJCSh2b2lkKU5VTEw7CisjZGVmaW5lIE9LTkVXKHApCWlmICghKChwKSA9IG1lbWdldChzaXplb2YgKihwKSkpKSB7IFwKKwkJCQllcnJubyA9IEVOT01FTTsgXAorCQkJCXJldHVybiAoLTEpOyBcCisJCQl9IGVsc2UgXAorCQkJCUZJTEwocCkKKyNkZWZpbmUgRlJFRShwKQkJbWVtcHV0KChwKSwgc2l6ZW9mICoocCkpCisKKyNpZiBFVkVOVExJQl9ERUJVRworI2RlZmluZSBGSUxMKHApCQltZW1zZXQoKHApLCAweEY1LCBzaXplb2YgKihwKSkKKyNlbHNlCisjZGVmaW5lIEZJTEwocCkKKyNlbmRpZgorCisjZWxzZQorCisjZGVmaW5lCU5FVyhwKSAJcCA9IG1hbGxvYyhzaXplb2YgKihwKSk7CisjZGVmaW5lIE9LTkVXKHApIGlmICghKChwKSA9IG1hbGxvYyhzaXplb2YgKihwKSkpKSB7IGVycm5vID0gRU5PTUVNOyByZXR1cm4gKC0xKTsgfQorI2RlZmluZSBGUkVFKHApCWZyZWUocCkKKyNkZWZpbmUgRklMTChwKQorCisjZW5kaWYKKworCit0eXBlZGVmIHN0cnVjdCBldkNvbm4geworCWV2Q29ubkZ1bmMJZnVuYzsKKwl2b2lkICoJCXVhcDsKKwlpbnQJCWZkOworCWludAkJZmxhZ3M7CisjZGVmaW5lIEVWX0NPTk5fTElTVEVOCQkweDAwMDEJCS8qIENvbm5lY3Rpb24gaXMgYSBsaXN0ZW5lci4gKi8KKyNkZWZpbmUgRVZfQ09OTl9TRUxFQ1RFRAkweDAwMDIJCS8qIGV2U2VsZWN0RkQoY29ubi0+ZmlsZSkuICovCisjZGVmaW5lIEVWX0NPTk5fQkxPQ0sJCTB4MDAwNAkJLyogTGlzdGVuZXIgZmQgd2FzIGJsb2NraW5nLiAqLworCWV2RmlsZUlECWZpbGU7CisJc3RydWN0IGV2Q29ubiAqCXByZXY7CisJc3RydWN0IGV2Q29ubiAqCW5leHQ7Cit9IGV2Q29ubjsKKwordHlwZWRlZiBzdHJ1Y3QgZXZBY2NlcHQgeworCWludAkJZmQ7CisJdW5pb24geworCQlzdHJ1Y3Qgc29ja2FkZHIJCXNhOworCQlzdHJ1Y3Qgc29ja2FkZHJfaW4JaW47CisjaWZuZGVmIE5PX1NPQ0tBRERSX1VOCisJCXN0cnVjdCBzb2NrYWRkcl91bgl1bjsKKyNlbmRpZgorCX0JCWxhOworCXNvY2tsZW5fdAlsYWxlbjsKKwl1bmlvbiB7CisJCXN0cnVjdCBzb2NrYWRkcgkJc2E7CisJCXN0cnVjdCBzb2NrYWRkcl9pbglpbjsKKyNpZm5kZWYgTk9fU09DS0FERFJfVU4KKwkJc3RydWN0IHNvY2thZGRyX3VuCXVuOworI2VuZGlmCisJfQkJcmE7CisJc29ja2xlbl90CXJhbGVuOworCWludAkJaW9FcnJubzsKKwlldkNvbm4gKgljb25uOworCUxJTksoc3RydWN0IGV2QWNjZXB0KSBsaW5rOworfSBldkFjY2VwdDsKKwordHlwZWRlZiBzdHJ1Y3QgZXZGaWxlIHsKKwlldkZpbGVGdW5jCWZ1bmM7CisJdm9pZCAqCQl1YXA7CisJaW50CQlmZDsKKwlpbnQJCWV2ZW50bWFzazsKKwlpbnQJCXByZWVtcHRpdmU7CisJc3RydWN0IGV2RmlsZSAqCXByZXY7CisJc3RydWN0IGV2RmlsZSAqCW5leHQ7CisJc3RydWN0IGV2RmlsZSAqCWZkcHJldjsKKwlzdHJ1Y3QgZXZGaWxlICoJZmRuZXh0OworfSBldkZpbGU7CisKK3R5cGVkZWYgc3RydWN0IGV2U3RyZWFtIHsKKwlldlN0cmVhbUZ1bmMJZnVuYzsKKwl2b2lkICoJCXVhcDsKKwlldkZpbGVJRAlmaWxlOworCWV2VGltZXJJRAl0aW1lcjsKKwlpbnQJCWZsYWdzOworI2RlZmluZSBFVl9TVFJfVElNRVJPSwkweDAwMDEJLyogSUZGIHRpbWVyIHZhbGlkLiAqLworCWludAkJZmQ7CisJc3RydWN0IGlvdmVjICoJaW92T3JpZzsKKwlpbnQJCWlvdk9yaWdDb3VudDsKKwlzdHJ1Y3QgaW92ZWMgKglpb3ZDdXI7CisJaW50CQlpb3ZDdXJDb3VudDsKKwlpbnQJCWlvVG90YWw7CisJaW50CQlpb0RvbmU7CisJaW50CQlpb0Vycm5vOworCXN0cnVjdCBldlN0cmVhbQkqcHJldkRvbmUsICpuZXh0RG9uZTsKKwlzdHJ1Y3QgZXZTdHJlYW0JKnByZXYsICpuZXh0OworfSBldlN0cmVhbTsKKwordHlwZWRlZiBzdHJ1Y3QgZXZUaW1lciB7CisJZXZUaW1lckZ1bmMJZnVuYzsKKwl2b2lkICoJCXVhcDsKKwlzdHJ1Y3QgdGltZXNwZWMJZHVlLCBpbnRlcjsKKwlpbnQJCWluZGV4OworCWludAkJbW9kZTsKKyNkZWZpbmUgRVZfVE1SX1JBVEUJMQorfSBldlRpbWVyOworCit0eXBlZGVmIHN0cnVjdCBldldhaXQgeworCWV2V2FpdEZ1bmMJZnVuYzsKKwl2b2lkICoJCXVhcDsKKwljb25zdCB2b2lkICoJdGFnOworCXN0cnVjdCBldldhaXQgKgluZXh0OworfSBldldhaXQ7CisKK3R5cGVkZWYgc3RydWN0IGV2V2FpdExpc3QgeworCWV2V2FpdCAqCQlmaXJzdDsKKwlldldhaXQgKgkJbGFzdDsKKwlzdHJ1Y3QgZXZXYWl0TGlzdCAqCXByZXY7CisJc3RydWN0IGV2V2FpdExpc3QgKgluZXh0OworfSBldldhaXRMaXN0OworCit0eXBlZGVmIHN0cnVjdCBldkV2ZW50X3AgeworCWVudW0geyAgQWNjZXB0LCBGaWxlLCBTdHJlYW0sIFRpbWVyLCBXYWl0LCBGcmVlLCBOdWxsICB9IHR5cGU7CisJdW5pb24geworCQlzdHJ1Y3QgeyAgZXZBY2NlcHQgKnRoaXM7ICB9CQkJYWNjZXB0OworCQlzdHJ1Y3QgeyAgZXZGaWxlICp0aGlzOyBpbnQgZXZlbnRtYXNrOyAgfQlmaWxlOworCQlzdHJ1Y3QgeyAgZXZTdHJlYW0gKnRoaXM7ICB9CQkJc3RyZWFtOworCQlzdHJ1Y3QgeyAgZXZUaW1lciAqdGhpczsgIH0JCQl0aW1lcjsKKwkJc3RydWN0IHsgIGV2V2FpdCAqdGhpczsgIH0JCQl3YWl0OworCQlzdHJ1Y3QgeyAgc3RydWN0IGV2RXZlbnRfcCAqbmV4dDsgIH0JCWZyZWU7CisJCXN0cnVjdCB7ICBjb25zdCB2b2lkICpwbGFjZWhvbGRlcjsgIH0JCW51bGw7CisJfSB1OworfSBldkV2ZW50X3A7CisKK3R5cGVkZWYgc3RydWN0IHsKKwkvKiBHbG9iYWwuICovCisJY29uc3QgZXZFdmVudF9wCSpjdXI7CisJLyogRGVidWdnaW5nLiAqLworCWludAkJZGVidWc7CisJRklMRQkJKm91dHB1dDsKKwkvKiBDb25uZWN0aW9ucy4gKi8KKwlldkNvbm4JCSpjb25uczsKKwlMSVNUKGV2QWNjZXB0KQlhY2NlcHRzOworCS8qIEZpbGVzLiAqLworCWV2RmlsZQkJKmZpbGVzLCAqZmROZXh0OworCWZkX3NldAkJcmRMYXN0LCByZE5leHQ7CisJZmRfc2V0CQl3ckxhc3QsIHdyTmV4dDsKKwlmZF9zZXQJCWV4TGFzdCwgZXhOZXh0OworCWZkX3NldAkJbm9uYmxvY2tCZWZvcmU7CisJaW50CQlmZE1heCwgZmRDb3VudCwgaGlnaGVzdEZEOworCWV2RmlsZQkJKmZkVGFibGVbRkRfU0VUU0laRV07CisjaWZkZWYgRVZFTlRMSUJfVElNRV9DSEVDS1MKKwlzdHJ1Y3QgdGltZXNwZWMJbGFzdFNlbGVjdFRpbWU7CisJaW50CQlsYXN0RmRDb3VudDsKKyNlbmRpZgorCS8qIFN0cmVhbXMuICovCisJZXZTdHJlYW0JKnN0cmVhbXM7CisJZXZTdHJlYW0JKnN0ckRvbmUsICpzdHJMYXN0OworCS8qIFRpbWVycy4gKi8KKwlzdHJ1Y3QgdGltZXNwZWMJbGFzdEV2ZW50VGltZTsKKwloZWFwX2NvbnRleHQJdGltZXJzOworCS8qIFdhaXRzLiAqLworCWV2V2FpdExpc3QJKndhaXRMaXN0czsKKwlldldhaXRMaXN0CXdhaXREb25lOworfSBldkNvbnRleHRfcDsKKworLyogZXZlbnRsaWIuYyAqLworI2RlZmluZSBldlByaW50ZiBfX2V2UHJpbnRmCit2b2lkIGV2UHJpbnRmKGNvbnN0IGV2Q29udGV4dF9wICpjdHgsIGludCBsZXZlbCwgY29uc3QgY2hhciAqZm10LCAuLi4pOworCisvKiBldl90aW1lcnMuYyAqLworI2RlZmluZSBldkNyZWF0ZVRpbWVycyBfX2V2Q3JlYXRlVGltZXJzCitoZWFwX2NvbnRleHQgZXZDcmVhdGVUaW1lcnMoY29uc3QgZXZDb250ZXh0X3AgKik7CisjZGVmaW5lIGV2RGVzdHJveVRpbWVycyBfX2V2RGVzdHJveVRpbWVycwordm9pZCBldkRlc3Ryb3lUaW1lcnMoY29uc3QgZXZDb250ZXh0X3AgKik7CisKKy8qIGV2X3dhaXRzLmMgKi8KKyNkZWZpbmUgZXZGcmVlV2FpdCBfX2V2RnJlZVdhaXQKK2V2V2FpdCAqZXZGcmVlV2FpdChldkNvbnRleHRfcCAqY3R4LCBldldhaXQgKm9sZCk7CisKKy8qIEdsb2JhbCBvcHRpb25zICovCitpbnQJCV9fZXZPcHRNb25vVGltZTsKKworI2VuZGlmIC8qX0VWRU5UTElCX1BfSCovCmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9uYW1lc2VyL25zX25hbWUuYyBiL2xpYmMvbmV0YnNkL25hbWVzZXIvbnNfbmFtZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1ZDJmNjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL25ldGJzZC9uYW1lc2VyL25zX25hbWUuYwpAQCAtMCwwICsxLDk3MCBAQAorLyoJJE5ldEJTRDogbnNfbmFtZS5jLHYgMS4zIDIwMDQvMTEvMDcgMDI6MTk6NDkgY2hyaXN0b3MgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNCBieSBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0sIEluYy4gKCJJU0MiKQorICogQ29weXJpZ2h0IChjKSAxOTk2LDE5OTkgYnkgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElTQyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIElTQyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCisgKiBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpZm5kZWYgbGludAorI2lmZGVmIG5vdGRlZgorc3RhdGljIGNvbnN0IGNoYXIgcmNzaWRbXSA9ICJJZDogbnNfbmFtZS5jLHYgMS4zLjIuNC40LjIgMjAwNC8wNS8wNCAwMzoyNzo0NyBtYXJrYSBFeHAiOworI2Vsc2UKK19fUkNTSUQoIiROZXRCU0Q6IG5zX25hbWUuYyx2IDEuMyAyMDA0LzExLzA3IDAyOjE5OjQ5IGNocmlzdG9zIEV4cCAkIik7CisjZW5kaWYKKyNlbmRpZgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSAiYXJwYV9uYW1lc2VyLmgiCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2lmZGVmIEFORFJPSURfQ0hBTkdFUworI2luY2x1ZGUgInJlc29sdl9wcml2YXRlLmgiCisjZWxzZQorI2luY2x1ZGUgPHJlc29sdi5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKworI2lmZGVmIFNQUklOVEZfQ0hBUgorIyBkZWZpbmUgU1BSSU5URih4KSBzdHJsZW4oc3ByaW50Zi8qKi94KQorI2Vsc2UKKyMgZGVmaW5lIFNQUklOVEYoeCkgKChzaXplX3Qpc3ByaW50ZiB4KQorI2VuZGlmCisKKyNkZWZpbmUgTlNfVFlQRV9FTFQJCQkweDQwIC8qIEVETlMwIGV4dGVuZGVkIGxhYmVsIHR5cGUgKi8KKyNkZWZpbmUgRE5TX0xBQkVMVFlQRV9CSVRTVFJJTkcJCTB4NDEKKworLyogRGF0YS4gKi8KKworc3RhdGljIGNvbnN0IGNoYXIJZGlnaXRzW10gPSAiMDEyMzQ1Njc4OSI7CisKK3N0YXRpYyBjb25zdCBjaGFyIGRpZ2l0dmFsdWVbMjU2XSA9IHsKKwktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJLyoxNiovCisJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC8qMzIqLworCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAvKjQ4Ki8KKwkgMCwgIDEsICAyLCAgMywgIDQsICA1LCAgNiwgIDcsICA4LCAgOSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLyo2NCovCisJLTEsIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC8qODAqLworCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAvKjk2Ki8KKwktMSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLyoxMTIqLworCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAvKjEyOCovCisJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC8qMjU2Ki8KK307CisKKy8qIEZvcndhcmQuICovCisKK3N0YXRpYyBpbnQJCXNwZWNpYWwoaW50KTsKK3N0YXRpYyBpbnQJCXByaW50YWJsZShpbnQpOworc3RhdGljIGludAkJZG5fZmluZChjb25zdCB1X2NoYXIgKiwgY29uc3QgdV9jaGFyICosCisJCQkJY29uc3QgdV9jaGFyICogY29uc3QgKiwKKwkJCQljb25zdCB1X2NoYXIgKiBjb25zdCAqKTsKK3N0YXRpYyBpbnQJCWVuY29kZV9iaXRzcmluZyhjb25zdCBjaGFyICoqLCBjb25zdCBjaGFyICosCisJCQkJCXVuc2lnbmVkIGNoYXIgKiosIHVuc2lnbmVkIGNoYXIgKiosCisJCQkJCXVuc2lnbmVkIGNvbnN0IGNoYXIgKik7CitzdGF0aWMgaW50CQlsYWJlbGxlbihjb25zdCB1X2NoYXIgKik7CitzdGF0aWMgaW50CQlkZWNvZGVfYml0c3RyaW5nKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiosCisJCQkJCSBjaGFyICosIGNvbnN0IGNoYXIgKik7CisKKy8qIFB1YmxpYy4gKi8KKworLyoKKyAqIG5zX25hbWVfbnRvcChzcmMsIGRzdCwgZHN0c2l6KQorICoJQ29udmVydCBhbiBlbmNvZGVkIGRvbWFpbiBuYW1lIHRvIHByaW50YWJsZSBhc2NpaSBhcyBwZXIgUkZDMTAzNS4KKyAqIHJldHVybjoKKyAqCU51bWJlciBvZiBieXRlcyB3cml0dGVuIHRvIGJ1ZmZlciwgb3IgLTEgKHdpdGggZXJybm8gc2V0KQorICogbm90ZXM6CisgKglUaGUgcm9vdCBpcyByZXR1cm5lZCBhcyAiLiIKKyAqCUFsbCBvdGhlciBkb21haW5zIGFyZSByZXR1cm5lZCBpbiBub24gYWJzb2x1dGUgZm9ybQorICovCitpbnQKK25zX25hbWVfbnRvcChjb25zdCB1X2NoYXIgKnNyYywgY2hhciAqZHN0LCBzaXplX3QgZHN0c2l6KQoreworCWNvbnN0IHVfY2hhciAqY3A7CisJY2hhciAqZG4sICplb207CisJdV9jaGFyIGM7CisJdV9pbnQgbjsKKwlpbnQgbDsKKworCWNwID0gc3JjOworCWRuID0gZHN0OworCWVvbSA9IGRzdCArIGRzdHNpejsKKworCXdoaWxlICgobiA9ICpjcCsrKSAhPSAwKSB7CisJCWlmICgobiAmIE5TX0NNUFJTRkxHUykgPT0gTlNfQ01QUlNGTEdTKSB7CisJCQkvKiBTb21lIGtpbmQgb2YgY29tcHJlc3Npb24gcG9pbnRlci4gKi8KKwkJCWVycm5vID0gRU1TR1NJWkU7CisJCQlyZXR1cm4gKC0xKTsKKwkJfQorCQlpZiAoZG4gIT0gZHN0KSB7CisJCQlpZiAoZG4gPj0gZW9tKSB7CisJCQkJZXJybm8gPSBFTVNHU0laRTsKKwkJCQlyZXR1cm4gKC0xKTsKKwkJCX0KKwkJCSpkbisrID0gJy4nOworCQl9CisJCWlmICgobCA9IGxhYmVsbGVuKGNwIC0gMSkpIDwgMCkgeworCQkJZXJybm8gPSBFTVNHU0laRTsgLyogWFhYICovCisJCQlyZXR1cm4oLTEpOworCQl9CisJCWlmIChkbiArIGwgPj0gZW9tKSB7CisJCQllcnJubyA9IEVNU0dTSVpFOworCQkJcmV0dXJuICgtMSk7CisJCX0KKwkJaWYgKChuICYgTlNfQ01QUlNGTEdTKSA9PSBOU19UWVBFX0VMVCkgeworCQkJaW50IG07CisKKwkJCWlmIChuICE9IEROU19MQUJFTFRZUEVfQklUU1RSSU5HKSB7CisJCQkJLyogWFhYOiBsYWJlbGxlbiBzaG91bGQgcmVqZWN0IHRoaXMgY2FzZSAqLworCQkJCWVycm5vID0gRUlOVkFMOworCQkJCXJldHVybigtMSk7CisJCQl9CisJCQlpZiAoKG0gPSBkZWNvZGVfYml0c3RyaW5nKCZjcCwgZG4sIGVvbSkpIDwgMCkKKwkJCXsKKwkJCQllcnJubyA9IEVNU0dTSVpFOworCQkJCXJldHVybigtMSk7CisJCQl9CisJCQlkbiArPSBtOworCQkJY29udGludWU7CisJCX0KKwkJZm9yICg7IGwgPiAwOyBsLS0pIHsKKwkJCWMgPSAqY3ArKzsKKwkJCWlmIChzcGVjaWFsKGMpKSB7CisJCQkJaWYgKGRuICsgMSA+PSBlb20pIHsKKwkJCQkJZXJybm8gPSBFTVNHU0laRTsKKwkJCQkJcmV0dXJuICgtMSk7CisJCQkJfQorCQkJCSpkbisrID0gJ1xcJzsKKwkJCQkqZG4rKyA9IChjaGFyKWM7CisJCQl9IGVsc2UgaWYgKCFwcmludGFibGUoYykpIHsKKwkJCQlpZiAoZG4gKyAzID49IGVvbSkgeworCQkJCQllcnJubyA9IEVNU0dTSVpFOworCQkJCQlyZXR1cm4gKC0xKTsKKwkJCQl9CisJCQkJKmRuKysgPSAnXFwnOworCQkJCSpkbisrID0gZGlnaXRzW2MgLyAxMDBdOworCQkJCSpkbisrID0gZGlnaXRzWyhjICUgMTAwKSAvIDEwXTsKKwkJCQkqZG4rKyA9IGRpZ2l0c1tjICUgMTBdOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoZG4gPj0gZW9tKSB7CisJCQkJCWVycm5vID0gRU1TR1NJWkU7CisJCQkJCXJldHVybiAoLTEpOworCQkJCX0KKwkJCQkqZG4rKyA9IChjaGFyKWM7CisJCQl9CisJCX0KKwl9CisJaWYgKGRuID09IGRzdCkgeworCQlpZiAoZG4gPj0gZW9tKSB7CisJCQllcnJubyA9IEVNU0dTSVpFOworCQkJcmV0dXJuICgtMSk7CisJCX0KKwkJKmRuKysgPSAnLic7CisJfQorCWlmIChkbiA+PSBlb20pIHsKKwkJZXJybm8gPSBFTVNHU0laRTsKKwkJcmV0dXJuICgtMSk7CisJfQorCSpkbisrID0gJ1wwJzsKKwlyZXR1cm4gKGRuIC0gZHN0KTsKK30KKworLyoKKyAqIG5zX25hbWVfcHRvbihzcmMsIGRzdCwgZHN0c2l6KQorICoJQ29udmVydCBhIGFzY2lpIHN0cmluZyBpbnRvIGFuIGVuY29kZWQgZG9tYWluIG5hbWUgYXMgcGVyIFJGQzEwMzUuCisgKiByZXR1cm46CisgKgktMSBpZiBpdCBmYWlscworICoJMSBpZiBzdHJpbmcgd2FzIGZ1bGx5IHF1YWxpZmllZAorICoJMCBpcyBzdHJpbmcgd2FzIG5vdCBmdWxseSBxdWFsaWZpZWQKKyAqIG5vdGVzOgorICoJRW5mb3JjZXMgbGFiZWwgYW5kIGRvbWFpbiBsZW5ndGggbGltaXRzLgorICovCisKK2ludAorbnNfbmFtZV9wdG9uKGNvbnN0IGNoYXIgKnNyYywgdV9jaGFyICpkc3QsIHNpemVfdCBkc3RzaXopCit7CisJdV9jaGFyICpsYWJlbCwgKmJwLCAqZW9tOworCWludCBjLCBuLCBlc2NhcGVkLCBlID0gMDsKKwljaGFyICpjcDsKKworCWVzY2FwZWQgPSAwOworCWJwID0gZHN0OworCWVvbSA9IGRzdCArIGRzdHNpejsKKwlsYWJlbCA9IGJwKys7CisKKwl3aGlsZSAoKGMgPSAqc3JjKyspICE9IDApIHsKKwkJaWYgKGVzY2FwZWQpIHsKKwkJCWlmIChjID09ICdbJykgeyAvKiBzdGFydCBhIGJpdCBzdHJpbmcgbGFiZWwgKi8KKwkJCQlpZiAoKGNwID0gc3RyY2hyKHNyYywgJ10nKSkgPT0gTlVMTCkgeworCQkJCQllcnJubyA9IEVJTlZBTDsgLyogPz8/ICovCisJCQkJCXJldHVybigtMSk7CisJCQkJfQorCQkJCWlmICgoZSA9IGVuY29kZV9iaXRzcmluZygmc3JjLCBjcCArIDIsCisJCQkJCQkJICZsYWJlbCwgJmJwLCBlb20pKQorCQkJCSAgICAhPSAwKSB7CisJCQkJCWVycm5vID0gZTsKKwkJCQkJcmV0dXJuKC0xKTsKKwkJCQl9CisJCQkJZXNjYXBlZCA9IDA7CisJCQkJbGFiZWwgPSBicCsrOworCQkJCWlmICgoYyA9ICpzcmMrKykgPT0gMCkKKwkJCQkJZ290byBkb25lOworCQkJCWVsc2UgaWYgKGMgIT0gJy4nKSB7CisJCQkJCWVycm5vID0gRUlOVkFMOworCQkJCQlyZXR1cm4oLTEpOworCQkJCX0KKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWVsc2UgaWYgKChjcCA9IHN0cmNocihkaWdpdHMsIGMpKSAhPSBOVUxMKSB7CisJCQkJbiA9IChjcCAtIGRpZ2l0cykgKiAxMDA7CisJCQkJaWYgKChjID0gKnNyYysrKSA9PSAwIHx8CisJCQkJICAgIChjcCA9IHN0cmNocihkaWdpdHMsIGMpKSA9PSBOVUxMKSB7CisJCQkJCWVycm5vID0gRU1TR1NJWkU7CisJCQkJCXJldHVybiAoLTEpOworCQkJCX0KKwkJCQluICs9IChjcCAtIGRpZ2l0cykgKiAxMDsKKwkJCQlpZiAoKGMgPSAqc3JjKyspID09IDAgfHwKKwkJCQkgICAgKGNwID0gc3RyY2hyKGRpZ2l0cywgYykpID09IE5VTEwpIHsKKwkJCQkJZXJybm8gPSBFTVNHU0laRTsKKwkJCQkJcmV0dXJuICgtMSk7CisJCQkJfQorCQkJCW4gKz0gKGNwIC0gZGlnaXRzKTsKKwkJCQlpZiAobiA+IDI1NSkgeworCQkJCQllcnJubyA9IEVNU0dTSVpFOworCQkJCQlyZXR1cm4gKC0xKTsKKwkJCQl9CisJCQkJYyA9IG47CisJCQl9CisJCQllc2NhcGVkID0gMDsKKwkJfSBlbHNlIGlmIChjID09ICdcXCcpIHsKKwkJCWVzY2FwZWQgPSAxOworCQkJY29udGludWU7CisJCX0gZWxzZSBpZiAoYyA9PSAnLicpIHsKKwkJCWMgPSAoYnAgLSBsYWJlbCAtIDEpOworCQkJaWYgKChjICYgTlNfQ01QUlNGTEdTKSAhPSAwKSB7CS8qIExhYmVsIHRvbyBiaWcuICovCisJCQkJZXJybm8gPSBFTVNHU0laRTsKKwkJCQlyZXR1cm4gKC0xKTsKKwkJCX0KKwkJCWlmIChsYWJlbCA+PSBlb20pIHsKKwkJCQllcnJubyA9IEVNU0dTSVpFOworCQkJCXJldHVybiAoLTEpOworCQkJfQorCQkJKmxhYmVsID0gYzsKKwkJCS8qIEZ1bGx5IHF1YWxpZmllZCA/ICovCisJCQlpZiAoKnNyYyA9PSAnXDAnKSB7CisJCQkJaWYgKGMgIT0gMCkgeworCQkJCQlpZiAoYnAgPj0gZW9tKSB7CisJCQkJCQllcnJubyA9IEVNU0dTSVpFOworCQkJCQkJcmV0dXJuICgtMSk7CisJCQkJCX0KKwkJCQkJKmJwKysgPSAnXDAnOworCQkJCX0KKwkJCQlpZiAoKGJwIC0gZHN0KSA+IE1BWENETkFNRSkgeworCQkJCQllcnJubyA9IEVNU0dTSVpFOworCQkJCQlyZXR1cm4gKC0xKTsKKwkJCQl9CisJCQkJcmV0dXJuICgxKTsKKwkJCX0KKwkJCWlmIChjID09IDAgfHwgKnNyYyA9PSAnLicpIHsKKwkJCQllcnJubyA9IEVNU0dTSVpFOworCQkJCXJldHVybiAoLTEpOworCQkJfQorCQkJbGFiZWwgPSBicCsrOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGJwID49IGVvbSkgeworCQkJZXJybm8gPSBFTVNHU0laRTsKKwkJCXJldHVybiAoLTEpOworCQl9CisJCSpicCsrID0gKHVfY2hhciljOworCX0KKwljID0gKGJwIC0gbGFiZWwgLSAxKTsKKwlpZiAoKGMgJiBOU19DTVBSU0ZMR1MpICE9IDApIHsJCS8qIExhYmVsIHRvbyBiaWcuICovCisJCWVycm5vID0gRU1TR1NJWkU7CisJCXJldHVybiAoLTEpOworCX0KKyAgZG9uZToKKwlpZiAobGFiZWwgPj0gZW9tKSB7CisJCWVycm5vID0gRU1TR1NJWkU7CisJCXJldHVybiAoLTEpOworCX0KKwkqbGFiZWwgPSBjOworCWlmIChjICE9IDApIHsKKwkJaWYgKGJwID49IGVvbSkgeworCQkJZXJybm8gPSBFTVNHU0laRTsKKwkJCXJldHVybiAoLTEpOworCQl9CisJCSpicCsrID0gMDsKKwl9CisJaWYgKChicCAtIGRzdCkgPiBNQVhDRE5BTUUpIHsJLyogc3JjIHRvbyBiaWcgKi8KKwkJZXJybm8gPSBFTVNHU0laRTsKKwkJcmV0dXJuICgtMSk7CisJfQorCXJldHVybiAoMCk7Cit9CisKKy8qCisgKiBuc19uYW1lX250b2woc3JjLCBkc3QsIGRzdHNpeikKKyAqCUNvbnZlcnQgYSBuZXR3b3JrIHN0cmluZ3MgbGFiZWxzIGludG8gYWxsIGxvd2VyY2FzZS4KKyAqIHJldHVybjoKKyAqCU51bWJlciBvZiBieXRlcyB3cml0dGVuIHRvIGJ1ZmZlciwgb3IgLTEgKHdpdGggZXJybm8gc2V0KQorICogbm90ZXM6CisgKglFbmZvcmNlcyBsYWJlbCBhbmQgZG9tYWluIGxlbmd0aCBsaW1pdHMuCisgKi8KKworaW50Cituc19uYW1lX250b2woY29uc3QgdV9jaGFyICpzcmMsIHVfY2hhciAqZHN0LCBzaXplX3QgZHN0c2l6KQoreworCWNvbnN0IHVfY2hhciAqY3A7CisJdV9jaGFyICpkbiwgKmVvbTsKKwl1X2NoYXIgYzsKKwl1X2ludCBuOworCWludCBsOworCisJY3AgPSBzcmM7CisJZG4gPSBkc3Q7CisJZW9tID0gZHN0ICsgZHN0c2l6OworCisJaWYgKGRuID49IGVvbSkgeworCQllcnJubyA9IEVNU0dTSVpFOworCQlyZXR1cm4gKC0xKTsKKwl9CisJd2hpbGUgKChuID0gKmNwKyspICE9IDApIHsKKwkJaWYgKChuICYgTlNfQ01QUlNGTEdTKSA9PSBOU19DTVBSU0ZMR1MpIHsKKwkJCS8qIFNvbWUga2luZCBvZiBjb21wcmVzc2lvbiBwb2ludGVyLiAqLworCQkJZXJybm8gPSBFTVNHU0laRTsKKwkJCXJldHVybiAoLTEpOworCQl9CisJCSpkbisrID0gbjsKKwkJaWYgKChsID0gbGFiZWxsZW4oY3AgLSAxKSkgPCAwKSB7CisJCQllcnJubyA9IEVNU0dTSVpFOworCQkJcmV0dXJuICgtMSk7CisJCX0KKwkJaWYgKGRuICsgbCA+PSBlb20pIHsKKwkJCWVycm5vID0gRU1TR1NJWkU7CisJCQlyZXR1cm4gKC0xKTsKKwkJfQorCQlmb3IgKDsgbCA+IDA7IGwtLSkgeworCQkJYyA9ICpjcCsrOworCQkJaWYgKGlzdXBwZXIoYykpCisJCQkJKmRuKysgPSB0b2xvd2VyKGMpOworCQkJZWxzZQorCQkJCSpkbisrID0gYzsKKwkJfQorCX0KKwkqZG4rKyA9ICdcMCc7CisJcmV0dXJuIChkbiAtIGRzdCk7Cit9CisKKy8qCisgKiBuc19uYW1lX3VucGFjayhtc2csIGVvbSwgc3JjLCBkc3QsIGRzdHNpeikKKyAqCVVucGFjayBhIGRvbWFpbiBuYW1lIGZyb20gYSBtZXNzYWdlLCBzb3VyY2UgbWF5IGJlIGNvbXByZXNzZWQuCisgKiByZXR1cm46CisgKgktMSBpZiBpdCBmYWlscywgb3IgY29uc3VtZWQgb2N0ZXRzIGlmIGl0IHN1Y2NlZWRzLgorICovCitpbnQKK25zX25hbWVfdW5wYWNrKGNvbnN0IHVfY2hhciAqbXNnLCBjb25zdCB1X2NoYXIgKmVvbSwgY29uc3QgdV9jaGFyICpzcmMsCisJICAgICAgIHVfY2hhciAqZHN0LCBzaXplX3QgZHN0c2l6KQoreworCWNvbnN0IHVfY2hhciAqc3JjcCwgKmRzdGxpbTsKKwl1X2NoYXIgKmRzdHA7CisJaW50IG4sIGxlbiwgY2hlY2tlZCwgbDsKKworCWxlbiA9IC0xOworCWNoZWNrZWQgPSAwOworCWRzdHAgPSBkc3Q7CisJc3JjcCA9IHNyYzsKKwlkc3RsaW0gPSBkc3QgKyBkc3RzaXo7CisJaWYgKHNyY3AgPCBtc2cgfHwgc3JjcCA+PSBlb20pIHsKKwkJZXJybm8gPSBFTVNHU0laRTsKKwkJcmV0dXJuICgtMSk7CisJfQorCS8qIEZldGNoIG5leHQgbGFiZWwgaW4gZG9tYWluIG5hbWUuICovCisJd2hpbGUgKChuID0gKnNyY3ArKykgIT0gMCkgeworCQkvKiBDaGVjayBmb3IgaW5kaXJlY3Rpb24uICovCisJCXN3aXRjaCAobiAmIE5TX0NNUFJTRkxHUykgeworCQljYXNlIDA6CisJCWNhc2UgTlNfVFlQRV9FTFQ6CisJCQkvKiBMaW1pdCBjaGVja3MuICovCisJCQlpZiAoKGwgPSBsYWJlbGxlbihzcmNwIC0gMSkpIDwgMCkgeworCQkJCWVycm5vID0gRU1TR1NJWkU7CisJCQkJcmV0dXJuKC0xKTsKKwkJCX0KKwkJCWlmIChkc3RwICsgbCArIDEgPj0gZHN0bGltIHx8IHNyY3AgKyBsID49IGVvbSkgeworCQkJCWVycm5vID0gRU1TR1NJWkU7CisJCQkJcmV0dXJuICgtMSk7CisJCQl9CisJCQljaGVja2VkICs9IGwgKyAxOworCQkJKmRzdHArKyA9IG47CisJCQltZW1jcHkoZHN0cCwgc3JjcCwgKHNpemVfdClsKTsKKwkJCWRzdHAgKz0gbDsKKwkJCXNyY3AgKz0gbDsKKwkJCWJyZWFrOworCisJCWNhc2UgTlNfQ01QUlNGTEdTOgorCQkJaWYgKHNyY3AgPj0gZW9tKSB7CisJCQkJZXJybm8gPSBFTVNHU0laRTsKKwkJCQlyZXR1cm4gKC0xKTsKKwkJCX0KKwkJCWlmIChsZW4gPCAwKQorCQkJCWxlbiA9IHNyY3AgLSBzcmMgKyAxOworCQkJc3JjcCA9IG1zZyArICgoKG4gJiAweDNmKSA8PCA4KSB8ICgqc3JjcCAmIDB4ZmYpKTsKKwkJCWlmIChzcmNwIDwgbXNnIHx8IHNyY3AgPj0gZW9tKSB7ICAvKiBPdXQgb2YgcmFuZ2UuICovCisJCQkJZXJybm8gPSBFTVNHU0laRTsKKwkJCQlyZXR1cm4gKC0xKTsKKwkJCX0KKwkJCWNoZWNrZWQgKz0gMjsKKwkJCS8qCisJCQkgKiBDaGVjayBmb3IgbG9vcHMgaW4gdGhlIGNvbXByZXNzZWQgbmFtZTsKKwkJCSAqIGlmIHdlJ3ZlIGxvb2tlZCBhdCB0aGUgd2hvbGUgbWVzc2FnZSwKKwkJCSAqIHRoZXJlIG11c3QgYmUgYSBsb29wLgorCQkJICovCisJCQlpZiAoY2hlY2tlZCA+PSBlb20gLSBtc2cpIHsKKwkJCQllcnJubyA9IEVNU0dTSVpFOworCQkJCXJldHVybiAoLTEpOworCQkJfQorCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWVycm5vID0gRU1TR1NJWkU7CisJCQlyZXR1cm4gKC0xKTsJCQkvKiBmbGFnIGVycm9yICovCisJCX0KKwl9CisJKmRzdHAgPSAnXDAnOworCWlmIChsZW4gPCAwKQorCQlsZW4gPSBzcmNwIC0gc3JjOworCXJldHVybiAobGVuKTsKK30KKworLyoKKyAqIG5zX25hbWVfcGFjayhzcmMsIGRzdCwgZHN0c2l6LCBkbnB0cnMsIGxhc3RkbnB0cikKKyAqCVBhY2sgZG9tYWluIG5hbWUgJ2RvbWFpbicgaW50byAnY29tcF9kbicuCisgKiByZXR1cm46CisgKglTaXplIG9mIHRoZSBjb21wcmVzc2VkIG5hbWUsIG9yIC0xLgorICogbm90ZXM6CisgKgknZG5wdHJzJyBpcyBhbiBhcnJheSBvZiBwb2ludGVycyB0byBwcmV2aW91cyBjb21wcmVzc2VkIG5hbWVzLgorICoJZG5wdHJzWzBdIGlzIGEgcG9pbnRlciB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBtZXNzYWdlLiBUaGUgYXJyYXkKKyAqCWVuZHMgd2l0aCBOVUxMLgorICoJJ2xhc3RkbnB0cicgaXMgYSBwb2ludGVyIHRvIHRoZSBlbmQgb2YgdGhlIGFycmF5IHBvaW50ZWQgdG8KKyAqCWJ5ICdkbnB0cnMnLgorICogU2lkZSBlZmZlY3RzOgorICoJVGhlIGxpc3Qgb2YgcG9pbnRlcnMgaW4gZG5wdHJzIGlzIHVwZGF0ZWQgZm9yIGxhYmVscyBpbnNlcnRlZCBpbnRvCisgKgl0aGUgbWVzc2FnZSBhcyB3ZSBjb21wcmVzcyB0aGUgbmFtZS4gIElmICdkbnB0cicgaXMgTlVMTCwgd2UgZG9uJ3QKKyAqCXRyeSB0byBjb21wcmVzcyBuYW1lcy4gSWYgJ2xhc3RkbnB0cicgaXMgTlVMTCwgd2UgZG9uJ3QgdXBkYXRlIHRoZQorICoJbGlzdC4KKyAqLworaW50Cituc19uYW1lX3BhY2soY29uc3QgdV9jaGFyICpzcmMsIHVfY2hhciAqZHN0LCBpbnQgZHN0c2l6LAorCSAgICAgY29uc3QgdV9jaGFyICoqZG5wdHJzLCBjb25zdCB1X2NoYXIgKipsYXN0ZG5wdHIpCit7CisJdV9jaGFyICpkc3RwOworCWNvbnN0IHVfY2hhciAqKmNwcCwgKipscHAsICplb2IsICptc2c7CisJY29uc3QgdV9jaGFyICpzcmNwOworCWludCBuLCBsLCBmaXJzdCA9IDE7CisKKwlzcmNwID0gc3JjOworCWRzdHAgPSBkc3Q7CisJZW9iID0gZHN0cCArIGRzdHNpejsKKwlscHAgPSBjcHAgPSBOVUxMOworCWlmIChkbnB0cnMgIT0gTlVMTCkgeworCQlpZiAoKG1zZyA9ICpkbnB0cnMrKykgIT0gTlVMTCkgeworCQkJZm9yIChjcHAgPSBkbnB0cnM7ICpjcHAgIT0gTlVMTDsgY3BwKyspCisJCQkJOworCQkJbHBwID0gY3BwOwkvKiBlbmQgb2YgbGlzdCB0byBzZWFyY2ggKi8KKwkJfQorCX0gZWxzZQorCQltc2cgPSBOVUxMOworCisJLyogbWFrZSBzdXJlIHRoZSBkb21haW4gd2UgYXJlIGFib3V0IHRvIGFkZCBpcyBsZWdhbCAqLworCWwgPSAwOworCWRvIHsKKwkJaW50IGwwOworCisJCW4gPSAqc3JjcDsKKwkJaWYgKChuICYgTlNfQ01QUlNGTEdTKSA9PSBOU19DTVBSU0ZMR1MpIHsKKwkJCWVycm5vID0gRU1TR1NJWkU7CisJCQlyZXR1cm4gKC0xKTsKKwkJfQorCQlpZiAoKGwwID0gbGFiZWxsZW4oc3JjcCkpIDwgMCkgeworCQkJZXJybm8gPSBFSU5WQUw7CisJCQlyZXR1cm4oLTEpOworCQl9CisJCWwgKz0gbDAgKyAxOworCQlpZiAobCA+IE1BWENETkFNRSkgeworCQkJZXJybm8gPSBFTVNHU0laRTsKKwkJCXJldHVybiAoLTEpOworCQl9CisJCXNyY3AgKz0gbDAgKyAxOworCX0gd2hpbGUgKG4gIT0gMCk7CisKKwkvKiBmcm9tIGhlcmUgb24gd2UgbmVlZCB0byByZXNldCBjb21wcmVzc2lvbiBwb2ludGVyIGFycmF5IG9uIGVycm9yICovCisJc3JjcCA9IHNyYzsKKwlkbyB7CisJCS8qIExvb2sgdG8gc2VlIGlmIHdlIGNhbiB1c2UgcG9pbnRlcnMuICovCisJCW4gPSAqc3JjcDsKKwkJaWYgKG4gIT0gMCAmJiBtc2cgIT0gTlVMTCkgeworCQkJbCA9IGRuX2ZpbmQoc3JjcCwgbXNnLCAoY29uc3QgdV9jaGFyICogY29uc3QgKilkbnB0cnMsCisJCQkJICAgIChjb25zdCB1X2NoYXIgKiBjb25zdCAqKWxwcCk7CisJCQlpZiAobCA+PSAwKSB7CisJCQkJaWYgKGRzdHAgKyAxID49IGVvYikgeworCQkJCQlnb3RvIGNsZWFudXA7CisJCQkJfQorCQkJCSpkc3RwKysgPSAoKHVfaW50MzJfdClsID4+IDgpIHwgTlNfQ01QUlNGTEdTOworCQkJCSpkc3RwKysgPSBsICUgMjU2OworCQkJCXJldHVybiAoZHN0cCAtIGRzdCk7CisJCQl9CisJCQkvKiBOb3QgZm91bmQsIHNhdmUgaXQuICovCisJCQlpZiAobGFzdGRucHRyICE9IE5VTEwgJiYgY3BwIDwgbGFzdGRucHRyIC0gMSAmJgorCQkJICAgIChkc3RwIC0gbXNnKSA8IDB4NDAwMCAmJiBmaXJzdCkgeworCQkJCSpjcHArKyA9IGRzdHA7CisJCQkJKmNwcCA9IE5VTEw7CisJCQkJZmlyc3QgPSAwOworCQkJfQorCQl9CisJCS8qIGNvcHkgbGFiZWwgdG8gYnVmZmVyICovCisJCWlmICgobiAmIE5TX0NNUFJTRkxHUykgPT0gTlNfQ01QUlNGTEdTKSB7CisJCQkvKiBTaG91bGQgbm90IGhhcHBlbi4gKi8KKwkJCWdvdG8gY2xlYW51cDsKKwkJfQorCQluID0gbGFiZWxsZW4oc3JjcCk7CisJCWlmIChkc3RwICsgMSArIG4gPj0gZW9iKSB7CisJCQlnb3RvIGNsZWFudXA7CisJCX0KKwkJbWVtY3B5KGRzdHAsIHNyY3AsIChzaXplX3QpKG4gKyAxKSk7CisJCXNyY3AgKz0gbiArIDE7CisJCWRzdHAgKz0gbiArIDE7CisJfSB3aGlsZSAobiAhPSAwKTsKKworCWlmIChkc3RwID4gZW9iKSB7CitjbGVhbnVwOgorCQlpZiAobXNnICE9IE5VTEwpCisJCQkqbHBwID0gTlVMTDsKKwkJZXJybm8gPSBFTVNHU0laRTsKKwkJcmV0dXJuICgtMSk7CisJfQorCXJldHVybiAoZHN0cCAtIGRzdCk7Cit9CisKKy8qCisgKiBuc19uYW1lX3VuY29tcHJlc3MobXNnLCBlb20sIHNyYywgZHN0LCBkc3RzaXopCisgKglFeHBhbmQgY29tcHJlc3NlZCBkb21haW4gbmFtZSB0byBwcmVzZW50YXRpb24gZm9ybWF0LgorICogcmV0dXJuOgorICoJTnVtYmVyIG9mIGJ5dGVzIHJlYWQgb3V0IG9mIGBzcmMnLCBvciAtMSAod2l0aCBlcnJubyBzZXQpLgorICogbm90ZToKKyAqCVJvb3QgZG9tYWluIHJldHVybnMgYXMgIi4iIG5vdCAiIi4KKyAqLworaW50Cituc19uYW1lX3VuY29tcHJlc3MoY29uc3QgdV9jaGFyICptc2csIGNvbnN0IHVfY2hhciAqZW9tLCBjb25zdCB1X2NoYXIgKnNyYywKKwkJICAgY2hhciAqZHN0LCBzaXplX3QgZHN0c2l6KQoreworCXVfY2hhciB0bXBbTlNfTUFYQ0ROQU1FXTsKKwlpbnQgbjsKKworCWlmICgobiA9IG5zX25hbWVfdW5wYWNrKG1zZywgZW9tLCBzcmMsIHRtcCwgc2l6ZW9mIHRtcCkpID09IC0xKQorCQlyZXR1cm4gKC0xKTsKKwlpZiAobnNfbmFtZV9udG9wKHRtcCwgZHN0LCBkc3RzaXopID09IC0xKQorCQlyZXR1cm4gKC0xKTsKKwlyZXR1cm4gKG4pOworfQorCisvKgorICogbnNfbmFtZV9jb21wcmVzcyhzcmMsIGRzdCwgZHN0c2l6LCBkbnB0cnMsIGxhc3RkbnB0cikKKyAqCUNvbXByZXNzIGEgZG9tYWluIG5hbWUgaW50byB3aXJlIGZvcm1hdCwgdXNpbmcgY29tcHJlc3Npb24gcG9pbnRlcnMuCisgKiByZXR1cm46CisgKglOdW1iZXIgb2YgYnl0ZXMgY29uc3VtZWQgaW4gYGRzdCcgb3IgLTEgKHdpdGggZXJybm8gc2V0KS4KKyAqIG5vdGVzOgorICoJJ2RucHRycycgaXMgYW4gYXJyYXkgb2YgcG9pbnRlcnMgdG8gcHJldmlvdXMgY29tcHJlc3NlZCBuYW1lcy4KKyAqCWRucHRyc1swXSBpcyBhIHBvaW50ZXIgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbWVzc2FnZS4KKyAqCVRoZSBsaXN0IGVuZHMgd2l0aCBOVUxMLiAgJ2xhc3RkbnB0cicgaXMgYSBwb2ludGVyIHRvIHRoZSBlbmQgb2YgdGhlCisgKglhcnJheSBwb2ludGVkIHRvIGJ5ICdkbnB0cnMnLiBTaWRlIGVmZmVjdCBpcyB0byB1cGRhdGUgdGhlIGxpc3Qgb2YKKyAqCXBvaW50ZXJzIGZvciBsYWJlbHMgaW5zZXJ0ZWQgaW50byB0aGUgbWVzc2FnZSBhcyB3ZSBjb21wcmVzcyB0aGUgbmFtZS4KKyAqCUlmICdkbnB0cicgaXMgTlVMTCwgd2UgZG9uJ3QgdHJ5IHRvIGNvbXByZXNzIG5hbWVzLiBJZiAnbGFzdGRucHRyJworICoJaXMgTlVMTCwgd2UgZG9uJ3QgdXBkYXRlIHRoZSBsaXN0LgorICovCitpbnQKK25zX25hbWVfY29tcHJlc3MoY29uc3QgY2hhciAqc3JjLCB1X2NoYXIgKmRzdCwgc2l6ZV90IGRzdHNpeiwKKwkJIGNvbnN0IHVfY2hhciAqKmRucHRycywgY29uc3QgdV9jaGFyICoqbGFzdGRucHRyKQoreworCXVfY2hhciB0bXBbTlNfTUFYQ0ROQU1FXTsKKworCWlmIChuc19uYW1lX3B0b24oc3JjLCB0bXAsIHNpemVvZiB0bXApID09IC0xKQorCQlyZXR1cm4gKC0xKTsKKwlyZXR1cm4gKG5zX25hbWVfcGFjayh0bXAsIGRzdCwgKGludClkc3RzaXosIGRucHRycywgbGFzdGRucHRyKSk7Cit9CisKKy8qCisgKiBSZXNldCBkbnB0cnMgc28gdGhhdCB0aGVyZSBhcmUgbm8gYWN0aXZlIHJlZmVyZW5jZXMgdG8gcG9pbnRlcnMgYXQgb3IKKyAqIGFmdGVyIHNyYy4KKyAqLwordm9pZAorbnNfbmFtZV9yb2xsYmFjayhjb25zdCB1X2NoYXIgKnNyYywgY29uc3QgdV9jaGFyICoqZG5wdHJzLAorCQkgY29uc3QgdV9jaGFyICoqbGFzdGRucHRyKQoreworCXdoaWxlIChkbnB0cnMgPCBsYXN0ZG5wdHIgJiYgKmRucHRycyAhPSBOVUxMKSB7CisJCWlmICgqZG5wdHJzID49IHNyYykgeworCQkJKmRucHRycyA9IE5VTEw7CisJCQlicmVhazsKKwkJfQorCQlkbnB0cnMrKzsKKwl9Cit9CisKKy8qCisgKiBuc19uYW1lX3NraXAocHRycHRyLCBlb20pCisgKglBZHZhbmNlICpwdHJwdHIgdG8gc2tpcCBvdmVyIHRoZSBjb21wcmVzc2VkIG5hbWUgaXQgcG9pbnRzIGF0LgorICogcmV0dXJuOgorICoJMCBvbiBzdWNjZXNzLCAtMSAod2l0aCBlcnJubyBzZXQpIG9uIGZhaWx1cmUuCisgKi8KK2ludAorbnNfbmFtZV9za2lwKGNvbnN0IHVfY2hhciAqKnB0cnB0ciwgY29uc3QgdV9jaGFyICplb20pCit7CisJY29uc3QgdV9jaGFyICpjcDsKKwl1X2ludCBuOworCWludCBsOworCisJY3AgPSAqcHRycHRyOworCXdoaWxlIChjcCA8IGVvbSAmJiAobiA9ICpjcCsrKSAhPSAwKSB7CisJCS8qIENoZWNrIGZvciBpbmRpcmVjdGlvbi4gKi8KKwkJc3dpdGNoIChuICYgTlNfQ01QUlNGTEdTKSB7CisJCWNhc2UgMDoJCQkvKiBub3JtYWwgY2FzZSwgbiA9PSBsZW4gKi8KKwkJCWNwICs9IG47CisJCQljb250aW51ZTsKKwkJY2FzZSBOU19UWVBFX0VMVDogLyogRUROUzAgZXh0ZW5kZWQgbGFiZWwgKi8KKwkJCWlmICgobCA9IGxhYmVsbGVuKGNwIC0gMSkpIDwgMCkgeworCQkJCWVycm5vID0gRU1TR1NJWkU7IC8qIFhYWCAqLworCQkJCXJldHVybigtMSk7CisJCQl9CisJCQljcCArPSBsOworCQkJY29udGludWU7CisJCWNhc2UgTlNfQ01QUlNGTEdTOgkvKiBpbmRpcmVjdGlvbiAqLworCQkJY3ArKzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgkJLyogaWxsZWdhbCB0eXBlICovCisJCQllcnJubyA9IEVNU0dTSVpFOworCQkJcmV0dXJuICgtMSk7CisJCX0KKwkJYnJlYWs7CisJfQorCWlmIChjcCA+IGVvbSkgeworCQllcnJubyA9IEVNU0dTSVpFOworCQlyZXR1cm4gKC0xKTsKKwl9CisJKnB0cnB0ciA9IGNwOworCXJldHVybiAoMCk7Cit9CisKKy8qIFByaXZhdGUuICovCisKKy8qCisgKiBzcGVjaWFsKGNoKQorICoJVGhpbmtpbmcgaW4gbm9uaW50ZXJuYXRpb25hbGl6ZWQgVVNBU0NJSSAocGVyIHRoZSBETlMgc3BlYyksCisgKglpcyB0aGlzIGNoYXJhY3RlZCBzcGVjaWFsICgiaW4gbmVlZCBvZiBxdW90aW5nIikgPworICogcmV0dXJuOgorICoJYm9vbGVhbi4KKyAqLworc3RhdGljIGludAorc3BlY2lhbChpbnQgY2gpIHsKKwlzd2l0Y2ggKGNoKSB7CisJY2FzZSAweDIyOiAvKiAnIicgKi8KKwljYXNlIDB4MkU6IC8qICcuJyAqLworCWNhc2UgMHgzQjogLyogJzsnICovCisJY2FzZSAweDVDOiAvKiAnXFwnICovCisJY2FzZSAweDI4OiAvKiAnKCcgKi8KKwljYXNlIDB4Mjk6IC8qICcpJyAqLworCS8qIFNwZWNpYWwgbW9kaWZpZXJzIGluIHpvbmUgZmlsZXMuICovCisJY2FzZSAweDQwOiAvKiAnQCcgKi8KKwljYXNlIDB4MjQ6IC8qICckJyAqLworCQlyZXR1cm4gKDEpOworCWRlZmF1bHQ6CisJCXJldHVybiAoMCk7CisJfQorfQorCisvKgorICogcHJpbnRhYmxlKGNoKQorICoJVGhpbmtpbmcgaW4gbm9uaW50ZXJuYXRpb25hbGl6ZWQgVVNBU0NJSSAocGVyIHRoZSBETlMgc3BlYyksCisgKglpcyB0aGlzIGNoYXJhY3RlciB2aXNpYmxlIGFuZCBub3QgYSBzcGFjZSB3aGVuIHByaW50ZWQgPworICogcmV0dXJuOgorICoJYm9vbGVhbi4KKyAqLworc3RhdGljIGludAorcHJpbnRhYmxlKGludCBjaCkgeworCXJldHVybiAoY2ggPiAweDIwICYmIGNoIDwgMHg3Zik7Cit9CisKKy8qCisgKglUaGlua2luZyBpbiBub25pbnRlcm5hdGlvbmFsaXplZCBVU0FTQ0lJIChwZXIgdGhlIEROUyBzcGVjKSwKKyAqCWNvbnZlcnQgdGhpcyBjaGFyYWN0ZXIgdG8gbG93ZXIgY2FzZSBpZiBpdCdzIHVwcGVyIGNhc2UuCisgKi8KK3N0YXRpYyBpbnQKK21rbG93ZXIoaW50IGNoKSB7CisJaWYgKGNoID49IDB4NDEgJiYgY2ggPD0gMHg1QSkKKwkJcmV0dXJuIChjaCArIDB4MjApOworCXJldHVybiAoY2gpOworfQorCisvKgorICogZG5fZmluZChkb21haW4sIG1zZywgZG5wdHJzLCBsYXN0ZG5wdHIpCisgKglTZWFyY2ggZm9yIHRoZSBjb3VudGVkLWxhYmVsIG5hbWUgaW4gYW4gYXJyYXkgb2YgY29tcHJlc3NlZCBuYW1lcy4KKyAqIHJldHVybjoKKyAqCW9mZnNldCBmcm9tIG1zZyBpZiBmb3VuZCwgb3IgLTEuCisgKiBub3RlczoKKyAqCWRucHRycyBpcyB0aGUgcG9pbnRlciB0byB0aGUgZmlyc3QgbmFtZSBvbiB0aGUgbGlzdCwKKyAqCW5vdCB0aGUgcG9pbnRlciB0byB0aGUgc3RhcnQgb2YgdGhlIG1lc3NhZ2UuCisgKi8KK3N0YXRpYyBpbnQKK2RuX2ZpbmQoY29uc3QgdV9jaGFyICpkb21haW4sIGNvbnN0IHVfY2hhciAqbXNnLAorCWNvbnN0IHVfY2hhciAqIGNvbnN0ICpkbnB0cnMsCisJY29uc3QgdV9jaGFyICogY29uc3QgKmxhc3RkbnB0cikKK3sKKwljb25zdCB1X2NoYXIgKmRuLCAqY3AsICpzcDsKKwljb25zdCB1X2NoYXIgKiBjb25zdCAqY3BwOworCXVfaW50IG47CisKKwlmb3IgKGNwcCA9IGRucHRyczsgY3BwIDwgbGFzdGRucHRyOyBjcHArKykgeworCQlzcCA9ICpjcHA7CisJCS8qCisJCSAqIHRlcm1pbmF0ZSBzZWFyY2ggb246CisJCSAqIHJvb3QgbGFiZWwKKwkJICogY29tcHJlc3Npb24gcG9pbnRlcgorCQkgKiB1bnVzYWJsZSBvZmZzZXQKKwkJICovCisJCXdoaWxlICgqc3AgIT0gMCAmJiAoKnNwICYgTlNfQ01QUlNGTEdTKSA9PSAwICYmCisJCSAgICAgICAoc3AgLSBtc2cpIDwgMHg0MDAwKSB7CisJCQlkbiA9IGRvbWFpbjsKKwkJCWNwID0gc3A7CisJCQl3aGlsZSAoKG4gPSAqY3ArKykgIT0gMCkgeworCQkJCS8qCisJCQkJICogY2hlY2sgZm9yIGluZGlyZWN0aW9uCisJCQkJICovCisJCQkJc3dpdGNoIChuICYgTlNfQ01QUlNGTEdTKSB7CisJCQkJY2FzZSAwOgkJLyogbm9ybWFsIGNhc2UsIG4gPT0gbGVuICovCisJCQkJCW4gPSBsYWJlbGxlbihjcCAtIDEpOyAvKiBYWFggKi8KKworCQkJCQlpZiAobiAhPSAqZG4rKykKKwkJCQkJCWdvdG8gbmV4dDsKKworCQkJCQlmb3IgKDsgbiA+IDA7IG4tLSkKKwkJCQkJCWlmIChta2xvd2VyKCpkbisrKSAhPQorCQkJCQkJICAgIG1rbG93ZXIoKmNwKyspKQorCQkJCQkJCWdvdG8gbmV4dDsKKwkJCQkJLyogSXMgbmV4dCByb290IGZvciBib3RoID8gKi8KKwkJCQkJaWYgKCpkbiA9PSAnXDAnICYmICpjcCA9PSAnXDAnKQorCQkJCQkJcmV0dXJuIChzcCAtIG1zZyk7CisJCQkJCWlmICgqZG4pCisJCQkJCQljb250aW51ZTsKKwkJCQkJZ290byBuZXh0OworCQkJCWNhc2UgTlNfQ01QUlNGTEdTOgkvKiBpbmRpcmVjdGlvbiAqLworCQkJCQljcCA9IG1zZyArICgoKG4gJiAweDNmKSA8PCA4KSB8ICpjcCk7CisJCQkJCWJyZWFrOworCisJCQkJZGVmYXVsdDoJLyogaWxsZWdhbCB0eXBlICovCisJCQkJCWVycm5vID0gRU1TR1NJWkU7CisJCQkJCXJldHVybiAoLTEpOworCQkJCX0KKwkJCX0KKyBuZXh0OiA7CisJCQlzcCArPSAqc3AgKyAxOworCQl9CisJfQorCWVycm5vID0gRU5PRU5UOworCXJldHVybiAoLTEpOworfQorCitzdGF0aWMgaW50CitkZWNvZGVfYml0c3RyaW5nKGNvbnN0IHVuc2lnbmVkIGNoYXIgKipjcHAsIGNoYXIgKmRuLCBjb25zdCBjaGFyICplb20pCit7CisJY29uc3QgdW5zaWduZWQgY2hhciAqY3AgPSAqY3BwOworCWNoYXIgKmJlZyA9IGRuLCB0YzsKKwlpbnQgYiwgYmxlbiwgcGxlbiwgaTsKKworCWlmICgoYmxlbiA9ICgqY3AgJiAweGZmKSkgPT0gMCkKKwkJYmxlbiA9IDI1NjsKKwlwbGVuID0gKGJsZW4gKyAzKSAvIDQ7CisJcGxlbiArPSBzaXplb2YoIlxcW3gvXSIpICsgKGJsZW4gPiA5OSA/IDMgOiAoYmxlbiA+IDkpID8gMiA6IDEpOworCWlmIChkbiArIHBsZW4gPj0gZW9tKQorCQlyZXR1cm4oLTEpOworCisJY3ArKzsKKwlpID0gU1BSSU5URigoZG4sICJcXFt4IikpOworCWlmIChpIDwgMCkKKwkJcmV0dXJuICgtMSk7CisJZG4gKz0gaTsKKwlmb3IgKGIgPSBibGVuOyBiID4gNzsgYiAtPSA4LCBjcCsrKSB7CisJCWkgPSBTUFJJTlRGKChkbiwgIiUwMngiLCAqY3AgJiAweGZmKSk7CisJCWlmIChpIDwgMCkKKwkJCXJldHVybiAoLTEpOworCQlkbiArPSBpOworCX0KKwlpZiAoYiA+IDQpIHsKKwkJdGMgPSAqY3ArKzsKKwkJaSA9IFNQUklOVEYoKGRuLCAiJTAyeCIsIHRjICYgKDB4ZmYgPDwgKDggLSBiKSkpKTsKKwkJaWYgKGkgPCAwKQorCQkJcmV0dXJuICgtMSk7CisJCWRuICs9IGk7CisJfSBlbHNlIGlmIChiID4gMCkgeworCQl0YyA9ICpjcCsrOworCQlpID0gU1BSSU5URigoZG4sICIlMXgiLAorCQkJICAgICAgICgoKHVfaW50MzJfdCl0YyA+PiA0KSAmIDB4MGYpICYgKDB4MGYgPDwgKDQgLSBiKSkpKTsKKwkJaWYgKGkgPCAwKQorCQkJcmV0dXJuICgtMSk7CisJCWRuICs9IGk7CisJfQorCWkgPSBTUFJJTlRGKChkbiwgIi8lZF0iLCBibGVuKSk7CisJaWYgKGkgPCAwKQorCQlyZXR1cm4gKC0xKTsKKwlkbiArPSBpOworCisJKmNwcCA9IGNwOworCXJldHVybihkbiAtIGJlZyk7Cit9CisKK3N0YXRpYyBpbnQKK2VuY29kZV9iaXRzcmluZyhjb25zdCBjaGFyICoqYnAsIGNvbnN0IGNoYXIgKmVuZCwgdW5zaWduZWQgY2hhciAqKmxhYmVscCwKKwkgICAgICAgIHVuc2lnbmVkIGNoYXIgKiogZHN0LCB1bnNpZ25lZCBjb25zdCBjaGFyICplb20pCit7CisJaW50IGFmdGVyc2xhc2ggPSAwOworCWNvbnN0IGNoYXIgKmNwID0gKmJwOworCXVuc2lnbmVkIGNoYXIgKnRwOworCWNoYXIgYzsKKwljb25zdCBjaGFyICpiZWdfYmxlbjsKKwljaGFyICplbmRfYmxlbiA9IE5VTEw7CisJaW50IHZhbHVlID0gMCwgY291bnQgPSAwLCB0YmNvdW50ID0gMCwgYmxlbiA9IDA7CisKKwliZWdfYmxlbiA9IGVuZF9ibGVuID0gTlVMTDsKKworCS8qIGEgYml0c3RyaW5nIG11c3QgY29udGFpbiBhdCBsZWFzdCAyIGNoYXJhY3RlcnMgKi8KKwlpZiAoZW5kIC0gY3AgPCAyKQorCQlyZXR1cm4oRUlOVkFMKTsKKworCS8qIFhYWDogY3VycmVudGx5LCBvbmx5IGhleCBzdHJpbmdzIGFyZSBzdXBwb3J0ZWQgKi8KKwlpZiAoKmNwKysgIT0gJ3gnKQorCQlyZXR1cm4oRUlOVkFMKTsKKwlpZiAoIWlzeGRpZ2l0KCgqY3ApICYgMHhmZikpIC8qIHJlamVjdCAnXFt4L0JMRU5dJyAqLworCQlyZXR1cm4oRUlOVkFMKTsKKworCWZvciAodHAgPSAqZHN0ICsgMTsgY3AgPCBlbmQgJiYgdHAgPCBlb207IGNwKyspIHsKKwkJc3dpdGNoKChjID0gKmNwKSkgeworCQljYXNlICddJzoJLyogZW5kIG9mIHRoZSBiaXRzdHJpbmcgKi8KKwkJCWlmIChhZnRlcnNsYXNoKSB7CisJCQkJaWYgKGJlZ19ibGVuID09IE5VTEwpCisJCQkJCXJldHVybihFSU5WQUwpOworCQkJCWJsZW4gPSAoaW50KXN0cnRvbChiZWdfYmxlbiwgJmVuZF9ibGVuLCAxMCk7CisJCQkJaWYgKCplbmRfYmxlbiAhPSAnXScpCisJCQkJCXJldHVybihFSU5WQUwpOworCQkJfQorCQkJaWYgKGNvdW50KQorCQkJCSp0cCsrID0gKCh2YWx1ZSA8PCA0KSAmIDB4ZmYpOworCQkJY3ArKzsJLyogc2tpcCAnXScgKi8KKwkJCWdvdG8gZG9uZTsKKwkJY2FzZSAnLyc6CisJCQlhZnRlcnNsYXNoID0gMTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJaWYgKGFmdGVyc2xhc2gpIHsKKwkJCQlpZiAoIWlzZGlnaXQoYyYweGZmKSkKKwkJCQkJcmV0dXJuKEVJTlZBTCk7CisJCQkJaWYgKGJlZ19ibGVuID09IE5VTEwpIHsKKworCQkJCQlpZiAoYyA9PSAnMCcpIHsKKwkJCQkJCS8qIGJsZW4gbmV2ZXIgYmVnaW5ncyB3aXRoIDAgKi8KKwkJCQkJCXJldHVybihFSU5WQUwpOworCQkJCQl9CisJCQkJCWJlZ19ibGVuID0gY3A7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlpZiAoIWlzeGRpZ2l0KGMmMHhmZikpCisJCQkJCXJldHVybihFSU5WQUwpOworCQkJCXZhbHVlIDw8PSA0OworCQkJCXZhbHVlICs9IGRpZ2l0dmFsdWVbKGludCljXTsKKwkJCQljb3VudCArPSA0OworCQkJCXRiY291bnQgKz0gNDsKKwkJCQlpZiAodGJjb3VudCA+IDI1NikKKwkJCQkJcmV0dXJuKEVJTlZBTCk7CisJCQkJaWYgKGNvdW50ID09IDgpIHsKKwkJCQkJKnRwKysgPSB2YWx1ZTsKKwkJCQkJY291bnQgPSAwOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCQl9CisJfQorICBkb25lOgorCWlmIChjcCA+PSBlbmQgfHwgdHAgPj0gZW9tKQorCQlyZXR1cm4oRU1TR1NJWkUpOworCisJLyoKKwkgKiBiaXQgbGVuZ3RoIHZhbGlkYXRpb246CisJICogSWYgYSA8bGVuZ3RoPiBpcyBwcmVzZW50LCB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBpbiB0aGUgPGJpdC1kYXRhPgorCSAqIE1VU1QgYmUganVzdCBzdWZmaWNpZW50IHRvIGNvbnRhaW4gdGhlIG51bWJlciBvZiBiaXRzIHNwZWNpZmllZAorCSAqIGJ5IHRoZSA8bGVuZ3RoPi4gSWYgdGhlcmUgYXJlIGluc2lnbmlmaWNhbnQgYml0cyBpbiBhIGZpbmFsCisJICogaGV4YWRlY2ltYWwgb3Igb2N0YWwgZGlnaXQsIHRoZXkgTVVTVCBiZSB6ZXJvLgorCSAqIFJGQyAyNjczLCBTZWN0aW9uIDMuMi4KKwkgKi8KKwlpZiAoYmxlbiA+IDApIHsKKwkJaW50IHRyYWlsbGVuOworCisJCWlmICgoKGJsZW4gKyAzKSAmIH4zKSAhPSB0YmNvdW50KQorCQkJcmV0dXJuKEVJTlZBTCk7CisJCXRyYWlsbGVuID0gdGJjb3VudCAtIGJsZW47IC8qIGJldHdlZW4gMCBhbmQgMyAqLworCQlpZiAoKCh2YWx1ZSA8PCAoOCAtIHRyYWlsbGVuKSkgJiAweGZmKSAhPSAwKQorCQkJcmV0dXJuKEVJTlZBTCk7CisJfQorCWVsc2UKKwkJYmxlbiA9IHRiY291bnQ7CisJaWYgKGJsZW4gPT0gMjU2KQorCQlibGVuID0gMDsKKworCS8qIGVuY29kZSB0aGUgdHlwZSBhbmQgdGhlIHNpZ25pZmljYW50IGJpdCBmaWVsZHMgKi8KKwkqKmxhYmVscCA9IEROU19MQUJFTFRZUEVfQklUU1RSSU5HOworCSoqZHN0ID0gYmxlbjsKKworCSpicCA9IGNwOworCSpkc3QgPSB0cDsKKworCXJldHVybigwKTsKK30KKworc3RhdGljIGludAorbGFiZWxsZW4oY29uc3QgdV9jaGFyICpscCkKK3sKKwlpbnQgYml0bGVuOworCXVfY2hhciBsID0gKmxwOworCisJaWYgKChsICYgTlNfQ01QUlNGTEdTKSA9PSBOU19DTVBSU0ZMR1MpIHsKKwkJLyogc2hvdWxkIGJlIGF2b2lkZWQgYnkgdGhlIGNhbGxlciAqLworCQlyZXR1cm4oLTEpOworCX0KKworCWlmICgobCAmIE5TX0NNUFJTRkxHUykgPT0gTlNfVFlQRV9FTFQpIHsKKwkJaWYgKGwgPT0gRE5TX0xBQkVMVFlQRV9CSVRTVFJJTkcpIHsKKwkJCWlmICgoYml0bGVuID0gKihscCArIDEpKSA9PSAwKQorCQkJCWJpdGxlbiA9IDI1NjsKKwkJCXJldHVybigoYml0bGVuICsgNyApIC8gOCArIDEpOworCQl9CisJCXJldHVybigtMSk7CS8qIHVua253b24gRUxUICovCisJfQorCXJldHVybihsKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvbmV0YnNkL25hbWVzZXIvbnNfbmV0aW50LmMgYi9saWJjL25ldGJzZC9uYW1lc2VyL25zX25ldGludC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMjk2NGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL25ldGJzZC9uYW1lc2VyL25zX25ldGludC5jCkBAIC0wLDAgKzEsNTkgQEAKKy8qCSROZXRCU0Q6IG5zX25ldGludC5jLHYgMS4yIDIwMDQvMDUvMjAgMjA6MTk6MDAgY2hyaXN0b3MgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNCBieSBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0sIEluYy4gKCJJU0MiKQorICogQ29weXJpZ2h0IChjKSAxOTk2LDE5OTkgYnkgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElTQyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIElTQyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCisgKiBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpZm5kZWYgbGludAorI2lmZGVmIG5vdGRlZgorc3RhdGljIGNvbnN0IGNoYXIgcmNzaWRbXSA9ICJJZDogbnNfbmV0aW50LmMsdiAxLjEuMjA2LjEgMjAwNC8wMy8wOSAwODozMzo0NCBtYXJrYSBFeHAiOworI2Vsc2UKK19fUkNTSUQoIiROZXRCU0Q6IG5zX25ldGludC5jLHYgMS4yIDIwMDQvMDUvMjAgMjA6MTk6MDAgY2hyaXN0b3MgRXhwICQiKTsKKyNlbmRpZgorI2VuZGlmCisKKy8qIEltcG9ydC4gKi8KKworI2luY2x1ZGUgImFycGFfbmFtZXNlci5oIgorCisvKiBQdWJsaWMuICovCisKK3VfaW50MTZfdAorbnNfZ2V0MTYoY29uc3QgdV9jaGFyICpzcmMpIHsKKwl1X2ludCBkc3Q7CisKKwlOU19HRVQxNihkc3QsIHNyYyk7CisJcmV0dXJuIChkc3QpOworfQorCit1X2ludDMyX3QKK25zX2dldDMyKGNvbnN0IHVfY2hhciAqc3JjKSB7CisJdV9sb25nIGRzdDsKKworCU5TX0dFVDMyKGRzdCwgc3JjKTsKKwlyZXR1cm4gKGRzdCk7Cit9CisKK3ZvaWQKK25zX3B1dDE2KHVfaW50MTZfdCBzcmMsIHVfY2hhciAqZHN0KSB7CisJTlNfUFVUMTYoc3JjLCBkc3QpOworfQorCit2b2lkCituc19wdXQzMih1X2ludDMyX3Qgc3JjLCB1X2NoYXIgKmRzdCkgeworCU5TX1BVVDMyKHNyYywgZHN0KTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvbmV0YnNkL25hbWVzZXIvbnNfcGFyc2UuYyBiL2xpYmMvbmV0YnNkL25hbWVzZXIvbnNfcGFyc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDk0ODYwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9uZXRic2QvbmFtZXNlci9uc19wYXJzZS5jCkBAIC0wLDAgKzEsMjA5IEBACisvKgkkTmV0QlNEOiBuc19wYXJzZS5jLHYgMS4yIDIwMDQvMDUvMjAgMjA6MzU6MDUgY2hyaXN0b3MgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNCBieSBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0sIEluYy4gKCJJU0MiKQorICogQ29weXJpZ2h0IChjKSAxOTk2LDE5OTkgYnkgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElTQyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIElTQyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCisgKiBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpZm5kZWYgbGludAorI2lmZGVmIG5vdGRlZgorc3RhdGljIGNvbnN0IGNoYXIgcmNzaWRbXSA9ICJJZDogbnNfcGFyc2UuYyx2IDEuMy4yLjEuNC4xIDIwMDQvMDMvMDkgMDg6MzM6NDQgbWFya2EgRXhwIjsKKyNlbHNlCitfX1JDU0lEKCIkTmV0QlNEOiBuc19wYXJzZS5jLHYgMS4yIDIwMDQvMDUvMjAgMjA6MzU6MDUgY2hyaXN0b3MgRXhwICQiKTsKKyNlbmRpZgorI2VuZGlmCisKKy8qIEltcG9ydC4gKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgImFycGFfbmFtZXNlci5oIgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpZmRlZiBBTkRST0lEX0NIQU5HRVMKKyNpbmNsdWRlICJyZXNvbHZfcHJpdmF0ZS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxyZXNvbHYuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisvKiBGb3J3YXJkLiAqLworCitzdGF0aWMgdm9pZAlzZXRzZWN0aW9uKG5zX21zZyAqbXNnLCBuc19zZWN0IHNlY3QpOworCisvKiBNYWNyb3MuICovCisKKyNkZWZpbmUgUkVURVJSKGVycikgZG8geyBlcnJubyA9IChlcnIpOyByZXR1cm4gKC0xKTsgfSB3aGlsZSAoLypOT1RSRUFDSEVEKi8vKkNPTlNUQ09ORCovMCkKKworLyogUHVibGljLiAqLworCisvKiBUaGVzZSBuZWVkIHRvIGJlIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZSBucmVzLmg6bnNfZmxhZyBlbnVtLiAqLworY29uc3Qgc3RydWN0IF9uc19mbGFnZGF0YSBfbnNfZmxhZ2RhdGFbMTZdID0geworCXsgMHg4MDAwLCAxNSB9LAkJLyogcXIuICovCisJeyAweDc4MDAsIDExIH0sCQkvKiBvcGNvZGUuICovCisJeyAweDA0MDAsIDEwIH0sCQkvKiBhYS4gKi8KKwl7IDB4MDIwMCwgOSB9LAkJLyogdGMuICovCisJeyAweDAxMDAsIDggfSwJCS8qIHJkLiAqLworCXsgMHgwMDgwLCA3IH0sCQkvKiByYS4gKi8KKwl7IDB4MDA0MCwgNiB9LAkJLyogei4gKi8KKwl7IDB4MDAyMCwgNSB9LAkJLyogYWQuICovCisJeyAweDAwMTAsIDQgfSwJCS8qIGNkLiAqLworCXsgMHgwMDBmLCAwIH0sCQkvKiByY29kZS4gKi8KKwl7IDB4MDAwMCwgMCB9LAkJLyogZXhwYW5zaW9uICgxLzYpLiAqLworCXsgMHgwMDAwLCAwIH0sCQkvKiBleHBhbnNpb24gKDIvNikuICovCisJeyAweDAwMDAsIDAgfSwJCS8qIGV4cGFuc2lvbiAoMy82KS4gKi8KKwl7IDB4MDAwMCwgMCB9LAkJLyogZXhwYW5zaW9uICg0LzYpLiAqLworCXsgMHgwMDAwLCAwIH0sCQkvKiBleHBhbnNpb24gKDUvNikuICovCisJeyAweDAwMDAsIDAgfSwJCS8qIGV4cGFuc2lvbiAoNi82KS4gKi8KK307CisKK2ludCBuc19tc2dfZ2V0ZmxhZyhuc19tc2cgaGFuZGxlLCBpbnQgZmxhZykgeworCXJldHVybigodV9pbnQzMl90KSgoaGFuZGxlKS5fZmxhZ3MgJiBfbnNfZmxhZ2RhdGFbZmxhZ10ubWFzaykgPj4gX25zX2ZsYWdkYXRhW2ZsYWddLnNoaWZ0KTsKK30KKworaW50Cituc19za2lwcnIoY29uc3QgdV9jaGFyICpwdHIsIGNvbnN0IHVfY2hhciAqZW9tLCBuc19zZWN0IHNlY3Rpb24sIGludCBjb3VudCkgeworCWNvbnN0IHVfY2hhciAqb3B0ciA9IHB0cjsKKworCWZvciAoOyBjb3VudCA+IDA7IGNvdW50LS0pIHsKKwkJaW50IGIsIHJkbGVuZ3RoOworCisJCWIgPSBkbl9za2lwbmFtZShwdHIsIGVvbSk7CisJCWlmIChiIDwgMCkKKwkJCVJFVEVSUihFTVNHU0laRSk7CisJCXB0ciArPSBiLypOYW1lKi8gKyBOU19JTlQxNlNaLypUeXBlKi8gKyBOU19JTlQxNlNaLypDbGFzcyovOworCQlpZiAoc2VjdGlvbiAhPSBuc19zX3FkKSB7CisJCQlpZiAocHRyICsgTlNfSU5UMzJTWiArIE5TX0lOVDE2U1ogPiBlb20pCisJCQkJUkVURVJSKEVNU0dTSVpFKTsKKwkJCXB0ciArPSBOU19JTlQzMlNaLypUVEwqLzsKKwkJCU5TX0dFVDE2KHJkbGVuZ3RoLCBwdHIpOworCQkJcHRyICs9IHJkbGVuZ3RoLypSRGF0YSovOworCQl9CisJfQorCWlmIChwdHIgPiBlb20pCisJCVJFVEVSUihFTVNHU0laRSk7CisJcmV0dXJuIChwdHIgLSBvcHRyKTsKK30KKworaW50Cituc19pbml0cGFyc2UoY29uc3QgdV9jaGFyICptc2csIGludCBtc2dsZW4sIG5zX21zZyAqaGFuZGxlKSB7CisJY29uc3QgdV9jaGFyICplb20gPSBtc2cgKyBtc2dsZW47CisJaW50IGk7CisKKwltZW1zZXQoaGFuZGxlLCAweDVlLCBzaXplb2YgKmhhbmRsZSk7CisJaGFuZGxlLT5fbXNnID0gbXNnOworCWhhbmRsZS0+X2VvbSA9IGVvbTsKKwlpZiAobXNnICsgTlNfSU5UMTZTWiA+IGVvbSkKKwkJUkVURVJSKEVNU0dTSVpFKTsKKwlOU19HRVQxNihoYW5kbGUtPl9pZCwgbXNnKTsKKwlpZiAobXNnICsgTlNfSU5UMTZTWiA+IGVvbSkKKwkJUkVURVJSKEVNU0dTSVpFKTsKKwlOU19HRVQxNihoYW5kbGUtPl9mbGFncywgbXNnKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnNfc19tYXg7IGkrKykgeworCQlpZiAobXNnICsgTlNfSU5UMTZTWiA+IGVvbSkKKwkJCVJFVEVSUihFTVNHU0laRSk7CisJCU5TX0dFVDE2KGhhbmRsZS0+X2NvdW50c1tpXSwgbXNnKTsKKwl9CisJZm9yIChpID0gMDsgaSA8IG5zX3NfbWF4OyBpKyspCisJCWlmIChoYW5kbGUtPl9jb3VudHNbaV0gPT0gMCkKKwkJCWhhbmRsZS0+X3NlY3Rpb25zW2ldID0gTlVMTDsKKwkJZWxzZSB7CisJCQlpbnQgYiA9IG5zX3NraXBycihtc2csIGVvbSwgKG5zX3NlY3QpaSwKKwkJCQkJICBoYW5kbGUtPl9jb3VudHNbaV0pOworCisJCQlpZiAoYiA8IDApCisJCQkJcmV0dXJuICgtMSk7CisJCQloYW5kbGUtPl9zZWN0aW9uc1tpXSA9IG1zZzsKKwkJCW1zZyArPSBiOworCQl9CisJaWYgKG1zZyAhPSBlb20pCisJCVJFVEVSUihFTVNHU0laRSk7CisJc2V0c2VjdGlvbihoYW5kbGUsIG5zX3NfbWF4KTsKKwlyZXR1cm4gKDApOworfQorCitpbnQKK25zX3BhcnNlcnIobnNfbXNnICpoYW5kbGUsIG5zX3NlY3Qgc2VjdGlvbiwgaW50IHJybnVtLCBuc19yciAqcnIpIHsKKwlpbnQgYjsKKworCS8qIE1ha2Ugc2VjdGlvbiByaWdodC4gKi8KKwlpZiAoKHVuc2lnbmVkKXNlY3Rpb24gPj0gKHVuc2lnbmVkKW5zX3NfbWF4KQorCQlSRVRFUlIoRU5PREVWKTsKKwlpZiAoc2VjdGlvbiAhPSBoYW5kbGUtPl9zZWN0KQorCQlzZXRzZWN0aW9uKGhhbmRsZSwgc2VjdGlvbik7CisKKwkvKiBNYWtlIHJybnVtIHJpZ2h0LiAqLworCWlmIChycm51bSA9PSAtMSkKKwkJcnJudW0gPSBoYW5kbGUtPl9ycm51bTsKKwlpZiAocnJudW0gPCAwIHx8IHJybnVtID49IGhhbmRsZS0+X2NvdW50c1soaW50KXNlY3Rpb25dKQorCQlSRVRFUlIoRU5PREVWKTsKKwlpZiAocnJudW0gPCBoYW5kbGUtPl9ycm51bSkKKwkJc2V0c2VjdGlvbihoYW5kbGUsIHNlY3Rpb24pOworCWlmIChycm51bSA+IGhhbmRsZS0+X3JybnVtKSB7CisJCWIgPSBuc19za2lwcnIoaGFuZGxlLT5fbXNnX3B0ciwgaGFuZGxlLT5fZW9tLCBzZWN0aW9uLAorCQkJICAgICAgcnJudW0gLSBoYW5kbGUtPl9ycm51bSk7CisKKwkJaWYgKGIgPCAwKQorCQkJcmV0dXJuICgtMSk7CisJCWhhbmRsZS0+X21zZ19wdHIgKz0gYjsKKwkJaGFuZGxlLT5fcnJudW0gPSBycm51bTsKKwl9CisKKwkvKiBEbyB0aGUgcGFyc2UuICovCisJYiA9IGRuX2V4cGFuZChoYW5kbGUtPl9tc2csIGhhbmRsZS0+X2VvbSwKKwkJICAgICAgaGFuZGxlLT5fbXNnX3B0ciwgcnItPm5hbWUsIE5TX01BWEROQU1FKTsKKwlpZiAoYiA8IDApCisJCXJldHVybiAoLTEpOworCWhhbmRsZS0+X21zZ19wdHIgKz0gYjsKKwlpZiAoaGFuZGxlLT5fbXNnX3B0ciArIE5TX0lOVDE2U1ogKyBOU19JTlQxNlNaID4gaGFuZGxlLT5fZW9tKQorCQlSRVRFUlIoRU1TR1NJWkUpOworCU5TX0dFVDE2KHJyLT50eXBlLCBoYW5kbGUtPl9tc2dfcHRyKTsKKwlOU19HRVQxNihyci0+cnJfY2xhc3MsIGhhbmRsZS0+X21zZ19wdHIpOworCWlmIChzZWN0aW9uID09IG5zX3NfcWQpIHsKKwkJcnItPnR0bCA9IDA7CisJCXJyLT5yZGxlbmd0aCA9IDA7CisJCXJyLT5yZGF0YSA9IE5VTEw7CisJfSBlbHNlIHsKKwkJaWYgKGhhbmRsZS0+X21zZ19wdHIgKyBOU19JTlQzMlNaICsgTlNfSU5UMTZTWiA+IGhhbmRsZS0+X2VvbSkKKwkJCVJFVEVSUihFTVNHU0laRSk7CisJCU5TX0dFVDMyKHJyLT50dGwsIGhhbmRsZS0+X21zZ19wdHIpOworCQlOU19HRVQxNihyci0+cmRsZW5ndGgsIGhhbmRsZS0+X21zZ19wdHIpOworCQlpZiAoaGFuZGxlLT5fbXNnX3B0ciArIHJyLT5yZGxlbmd0aCA+IGhhbmRsZS0+X2VvbSkKKwkJCVJFVEVSUihFTVNHU0laRSk7CisJCXJyLT5yZGF0YSA9IGhhbmRsZS0+X21zZ19wdHI7CisJCWhhbmRsZS0+X21zZ19wdHIgKz0gcnItPnJkbGVuZ3RoOworCX0KKwlpZiAoKytoYW5kbGUtPl9ycm51bSA+IGhhbmRsZS0+X2NvdW50c1soaW50KXNlY3Rpb25dKQorCQlzZXRzZWN0aW9uKGhhbmRsZSwgKG5zX3NlY3QpKChpbnQpc2VjdGlvbiArIDEpKTsKKworCS8qIEFsbCBkb25lLiAqLworCXJldHVybiAoMCk7Cit9CisKKy8qIFByaXZhdGUuICovCisKK3N0YXRpYyB2b2lkCitzZXRzZWN0aW9uKG5zX21zZyAqbXNnLCBuc19zZWN0IHNlY3QpIHsKKwltc2ctPl9zZWN0ID0gc2VjdDsKKwlpZiAoc2VjdCA9PSBuc19zX21heCkgeworCQltc2ctPl9ycm51bSA9IC0xOworCQltc2ctPl9tc2dfcHRyID0gTlVMTDsKKwl9IGVsc2UgeworCQltc2ctPl9ycm51bSA9IDA7CisJCW1zZy0+X21zZ19wdHIgPSBtc2ctPl9zZWN0aW9uc1soaW50KXNlY3RdOworCX0KK30KZGlmZiAtLWdpdCBhL2xpYmMvbmV0YnNkL25hbWVzZXIvbnNfcHJpbnQuYyBiL2xpYmMvbmV0YnNkL25hbWVzZXIvbnNfcHJpbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDY1ZTYyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9uZXRic2QvbmFtZXNlci9uc19wcmludC5jCkBAIC0wLDAgKzEsOTE1IEBACisvKgkkTmV0QlNEOiBuc19wcmludC5jLHYgMS41IDIwMDQvMTEvMDcgMDI6MTk6NDkgY2hyaXN0b3MgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNCBieSBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0sIEluYy4gKCJJU0MiKQorICogQ29weXJpZ2h0IChjKSAxOTk2LTE5OTkgYnkgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElTQyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIElTQyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCisgKiBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpZm5kZWYgbGludAorI2lmZGVmIG5vdGRlZgorc3RhdGljIGNvbnN0IGNoYXIgcmNzaWRbXSA9ICJJZDogbnNfcHJpbnQuYyx2IDEuMy4yLjEuNC41IDIwMDQvMDcvMjggMjA6MTY6NDUgbWFya2EgRXhwIjsKKyNlbHNlCitfX1JDU0lEKCIkTmV0QlNEOiBuc19wcmludC5jLHYgMS41IDIwMDQvMTEvMDcgMDI6MTk6NDkgY2hyaXN0b3MgRXhwICQiKTsKKyNlbmRpZgorI2VuZGlmCisKKy8qIEltcG9ydC4gKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKworI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlICJhcnBhX25hbWVzZXIuaCIKKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKworI2luY2x1ZGUgPGlzYy9hc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8aXNjL2RzdC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaWZkZWYgQU5EUk9JRF9DSEFOR0VTCisjaW5jbHVkZSAicmVzb2x2X3ByaXZhdGUuaCIKKyNlbHNlCisjaW5jbHVkZSA8cmVzb2x2Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorCisjaWZkZWYgU1BSSU5URl9DSEFSCisjIGRlZmluZSBTUFJJTlRGKHgpIHN0cmxlbihzcHJpbnRmLyoqL3gpCisjZWxzZQorIyBkZWZpbmUgU1BSSU5URih4KSAoKHNpemVfdClzcHJpbnRmIHgpCisjZW5kaWYKKworI2lmbmRlZiBNSU4KKyNkZWZpbmUJTUlOKHgseSkJKCh4KTwoeSk/KHgpOih5KSkKKyNlbmRpZgorCisvKiBGb3J3YXJkLiAqLworCitzdGF0aWMgc2l6ZV90CXBydW5lX29yaWdpbihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpvcmlnaW4pOworc3RhdGljIGludAljaGFyc3RyKGNvbnN0IHVfY2hhciAqcmRhdGEsIGNvbnN0IHVfY2hhciAqZWRhdGEsCisJCQljaGFyICoqYnVmLCBzaXplX3QgKmJ1Zmxlbik7CitzdGF0aWMgaW50CWFkZG5hbWUoY29uc3QgdV9jaGFyICptc2csIHNpemVfdCBtc2dsZW4sCisJCQljb25zdCB1X2NoYXIgKipwLCBjb25zdCBjaGFyICpvcmlnaW4sCisJCQljaGFyICoqYnVmLCBzaXplX3QgKmJ1Zmxlbik7CitzdGF0aWMgdm9pZAlhZGRsZW4oc2l6ZV90IGxlbiwgY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZsZW4pOworc3RhdGljIGludAlhZGRzdHIoY29uc3QgY2hhciAqc3JjLCBzaXplX3QgbGVuLAorCQkgICAgICAgY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZsZW4pOworc3RhdGljIGludAlhZGR0YWIoc2l6ZV90IGxlbiwgc2l6ZV90IHRhcmdldCwgaW50IHNwYWNlZCwKKwkJICAgICAgIGNoYXIgKipidWYsIHNpemVfdCAqYnVmbGVuKTsKKworLyogTWFjcm9zLiAqLworCisjZGVmaW5lCVQoeCkgXAorCWRvIHsgXAorCQlpZiAoKHgpIDwgMCkgXAorCQkJcmV0dXJuICgtMSk7IFwKKwl9IHdoaWxlICgvKkNPTlNUQ09ORCovMCkKKworLyogUHVibGljLiAqLworCisvKgorICogaW50CisgKiBuc19zcHJpbnRycihoYW5kbGUsIHJyLCBuYW1lX2N0eCwgb3JpZ2luLCBidWYsIGJ1ZmxlbikKKyAqCUNvbnZlcnQgYW4gUlIgdG8gcHJlc2VudGF0aW9uIGZvcm1hdC4KKyAqIHJldHVybjoKKyAqCU51bWJlciBvZiBjaGFyYWN0ZXJzIHdyaXR0ZW4gdG8gYnVmLCBvciAtMSAoY2hlY2sgZXJybm8pLgorICovCitpbnQKK25zX3NwcmludHJyKGNvbnN0IG5zX21zZyAqaGFuZGxlLCBjb25zdCBuc19yciAqcnIsCisJICAgIGNvbnN0IGNoYXIgKm5hbWVfY3R4LCBjb25zdCBjaGFyICpvcmlnaW4sCisJICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbikKK3sKKwlpbnQgbjsKKworCW4gPSBuc19zcHJpbnRycmYobnNfbXNnX2Jhc2UoKmhhbmRsZSksIG5zX21zZ19zaXplKCpoYW5kbGUpLAorCQkJIG5zX3JyX25hbWUoKnJyKSwgbnNfcnJfY2xhc3MoKnJyKSwgbnNfcnJfdHlwZSgqcnIpLAorCQkJIG5zX3JyX3R0bCgqcnIpLCBuc19ycl9yZGF0YSgqcnIpLCBuc19ycl9yZGxlbigqcnIpLAorCQkJIG5hbWVfY3R4LCBvcmlnaW4sIGJ1ZiwgYnVmbGVuKTsKKwlyZXR1cm4gKG4pOworfQorCisvKgorICogaW50CisgKiBuc19zcHJpbnRycmYobXNnLCBtc2dsZW4sIG5hbWUsIGNsYXNzLCB0eXBlLCB0dGwsIHJkYXRhLCByZGxlbiwKKyAqCSAgICAgICBuYW1lX2N0eCwgb3JpZ2luLCBidWYsIGJ1ZmxlbikKKyAqCUNvbnZlcnQgdGhlIGZpZWxkcyBvZiBhbiBSUiBpbnRvIHByZXNlbnRhdGlvbiBmb3JtYXQuCisgKiByZXR1cm46CisgKglOdW1iZXIgb2YgY2hhcmFjdGVycyB3cml0dGVuIHRvIGJ1Ziwgb3IgLTEgKGNoZWNrIGVycm5vKS4KKyAqLworaW50Cituc19zcHJpbnRycmYoY29uc3QgdV9jaGFyICptc2csIHNpemVfdCBtc2dsZW4sCisJICAgIGNvbnN0IGNoYXIgKm5hbWUsIG5zX2NsYXNzIGNsYXNzLCBuc190eXBlIHR5cGUsCisJICAgIHVfbG9uZyB0dGwsIGNvbnN0IHVfY2hhciAqcmRhdGEsIHNpemVfdCByZGxlbiwKKwkgICAgY29uc3QgY2hhciAqbmFtZV9jdHgsIGNvbnN0IGNoYXIgKm9yaWdpbiwKKwkgICAgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKQoreworCWNvbnN0IGNoYXIgKm9idWYgPSBidWY7CisJY29uc3QgdV9jaGFyICplZGF0YSA9IHJkYXRhICsgcmRsZW47CisJaW50IHNwYWNlZCA9IDA7CisKKwljb25zdCBjaGFyICpjb21tZW50OworCWNoYXIgdG1wWzEwMF07CisJaW50IGxlbiwgeDsKKworCS8qCisJICogT3duZXIuCisJICovCisJaWYgKG5hbWVfY3R4ICE9IE5VTEwgJiYgbnNfc2FtZW5hbWUobmFtZV9jdHgsIG5hbWUpID09IDEpIHsKKwkJVChhZGRzdHIoIlx0XHRcdCIsIChzaXplX3QpMywgJmJ1ZiwgJmJ1ZmxlbikpOworCX0gZWxzZSB7CisJCWxlbiA9IHBydW5lX29yaWdpbihuYW1lLCBvcmlnaW4pOworCQlpZiAoKm5hbWUgPT0gJ1wwJykgeworCQkJZ290byByb290OworCQl9IGVsc2UgaWYgKGxlbiA9PSAwKSB7CisJCQlUKGFkZHN0cigiQFx0XHRcdCIsIChzaXplX3QpNCwgJmJ1ZiwgJmJ1ZmxlbikpOworCQl9IGVsc2UgeworCQkJVChhZGRzdHIobmFtZSwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKKwkJCS8qIE9yaWdpbiBub3QgdXNlZCBvciBub3Qgcm9vdCwgYW5kIG5vIHRyYWlsaW5nIGRvdD8gKi8KKwkJCWlmICgoKG9yaWdpbiA9PSBOVUxMIHx8IG9yaWdpblswXSA9PSAnXDAnKSB8fAorCQkJICAgIChvcmlnaW5bMF0gIT0gJy4nICYmIG9yaWdpblsxXSAhPSAnXDAnICYmCisJCQkgICAgbmFtZVtsZW5dID09ICdcMCcpKSAmJiBuYW1lW2xlbiAtIDFdICE9ICcuJykgeworIHJvb3Q6CisJCQkJVChhZGRzdHIoIi4iLCAoc2l6ZV90KTEsICZidWYsICZidWZsZW4pKTsKKwkJCQlsZW4rKzsKKwkJCX0KKwkJCVQoc3BhY2VkID0gYWRkdGFiKChzaXplX3QpbGVuLCAyNCwgc3BhY2VkLCAmYnVmLCAmYnVmbGVuKSk7CisJCX0KKwl9CisKKwkvKgorCSAqIFRUTCwgQ2xhc3MsIFR5cGUuCisJICovCisJVCh4ID0gbnNfZm9ybWF0X3R0bCh0dGwsIGJ1ZiwgYnVmbGVuKSk7CisJYWRkbGVuKChzaXplX3QpeCwgJmJ1ZiwgJmJ1Zmxlbik7CisJbGVuID0gU1BSSU5URigodG1wLCAiICVzICVzIiwgcF9jbGFzcyhjbGFzcyksIHBfdHlwZSh0eXBlKSkpOworCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKKwlUKHNwYWNlZCA9IGFkZHRhYigoc2l6ZV90KSh4ICsgbGVuKSwgKHNpemVfdCkxNiwgc3BhY2VkLCAmYnVmLCAmYnVmbGVuKSk7CisKKwkvKgorCSAqIFJEYXRhLgorCSAqLworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgbnNfdF9hOgorCQlpZiAocmRsZW4gIT0gKHNpemVfdClOU19JTkFERFJTWikKKwkJCWdvdG8gZm9ybWVycjsKKwkJKHZvaWQpIGluZXRfbnRvcChBRl9JTkVULCByZGF0YSwgYnVmLCBidWZsZW4pOworCQlhZGRsZW4oc3RybGVuKGJ1ZiksICZidWYsICZidWZsZW4pOworCQlicmVhazsKKworCWNhc2UgbnNfdF9jbmFtZToKKwljYXNlIG5zX3RfbWI6CisJY2FzZSBuc190X21nOgorCWNhc2UgbnNfdF9tcjoKKwljYXNlIG5zX3RfbnM6CisJY2FzZSBuc190X3B0cjoKKwljYXNlIG5zX3RfZG5hbWU6CisJCVQoYWRkbmFtZShtc2csIG1zZ2xlbiwgJnJkYXRhLCBvcmlnaW4sICZidWYsICZidWZsZW4pKTsKKwkJYnJlYWs7CisKKwljYXNlIG5zX3RfaGluZm86CisJY2FzZSBuc190X2lzZG46CisJCS8qIEZpcnN0IHdvcmQuICovCisJCVQobGVuID0gY2hhcnN0cihyZGF0YSwgZWRhdGEsICZidWYsICZidWZsZW4pKTsKKwkJaWYgKGxlbiA9PSAwKQorCQkJZ290byBmb3JtZXJyOworCQlyZGF0YSArPSBsZW47CisJCVQoYWRkc3RyKCIgIiwgKHNpemVfdCkxLCAmYnVmLCAmYnVmbGVuKSk7CisKKworCQkvKiBTZWNvbmQgd29yZCwgb3B0aW9uYWwgaW4gSVNETiByZWNvcmRzLiAqLworCQlpZiAodHlwZSA9PSBuc190X2lzZG4gJiYgcmRhdGEgPT0gZWRhdGEpCisJCQlicmVhazsKKworCQlUKGxlbiA9IGNoYXJzdHIocmRhdGEsIGVkYXRhLCAmYnVmLCAmYnVmbGVuKSk7CisJCWlmIChsZW4gPT0gMCkKKwkJCWdvdG8gZm9ybWVycjsKKwkJcmRhdGEgKz0gbGVuOworCQlicmVhazsKKworCWNhc2UgbnNfdF9zb2E6IHsKKwkJdV9sb25nIHQ7CisKKwkJLyogU2VydmVyIG5hbWUuICovCisJCVQoYWRkbmFtZShtc2csIG1zZ2xlbiwgJnJkYXRhLCBvcmlnaW4sICZidWYsICZidWZsZW4pKTsKKwkJVChhZGRzdHIoIiAiLCAoc2l6ZV90KTEsICZidWYsICZidWZsZW4pKTsKKworCQkvKiBBZG1pbmlzdHJhdG9yIG5hbWUuICovCisJCVQoYWRkbmFtZShtc2csIG1zZ2xlbiwgJnJkYXRhLCBvcmlnaW4sICZidWYsICZidWZsZW4pKTsKKwkJVChhZGRzdHIoIiAoXG4iLCAoc2l6ZV90KTMsICZidWYsICZidWZsZW4pKTsKKwkJc3BhY2VkID0gMDsKKworCQlpZiAoKGVkYXRhIC0gcmRhdGEpICE9IDUqTlNfSU5UMzJTWikKKwkJCWdvdG8gZm9ybWVycjsKKworCQkvKiBTZXJpYWwgbnVtYmVyLiAqLworCQl0ID0gbnNfZ2V0MzIocmRhdGEpOyAgcmRhdGEgKz0gTlNfSU5UMzJTWjsKKwkJVChhZGRzdHIoIlx0XHRcdFx0XHQiLCAoc2l6ZV90KTUsICZidWYsICZidWZsZW4pKTsKKwkJbGVuID0gU1BSSU5URigodG1wLCAiJWx1IiwgdCkpOworCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CisJCVQoc3BhY2VkID0gYWRkdGFiKChzaXplX3QpbGVuLCAoc2l6ZV90KTE2LCBzcGFjZWQsICZidWYsICZidWZsZW4pKTsKKwkJVChhZGRzdHIoIjsgc2VyaWFsXG4iLCAoc2l6ZV90KTksICZidWYsICZidWZsZW4pKTsKKwkJc3BhY2VkID0gMDsKKworCQkvKiBSZWZyZXNoIGludGVydmFsLiAqLworCQl0ID0gbnNfZ2V0MzIocmRhdGEpOyAgcmRhdGEgKz0gTlNfSU5UMzJTWjsKKwkJVChhZGRzdHIoIlx0XHRcdFx0XHQiLCAoc2l6ZV90KTUsICZidWYsICZidWZsZW4pKTsKKwkJVChsZW4gPSBuc19mb3JtYXRfdHRsKHQsIGJ1ZiwgYnVmbGVuKSk7CisJCWFkZGxlbigoc2l6ZV90KWxlbiwgJmJ1ZiwgJmJ1Zmxlbik7CisJCVQoc3BhY2VkID0gYWRkdGFiKChzaXplX3QpbGVuLCAoc2l6ZV90KTE2LCBzcGFjZWQsICZidWYsICZidWZsZW4pKTsKKwkJVChhZGRzdHIoIjsgcmVmcmVzaFxuIiwgKHNpemVfdCkxMCwgJmJ1ZiwgJmJ1ZmxlbikpOworCQlzcGFjZWQgPSAwOworCisJCS8qIFJldHJ5IGludGVydmFsLiAqLworCQl0ID0gbnNfZ2V0MzIocmRhdGEpOyAgcmRhdGEgKz0gTlNfSU5UMzJTWjsKKwkJVChhZGRzdHIoIlx0XHRcdFx0XHQiLCAoc2l6ZV90KTUsICZidWYsICZidWZsZW4pKTsKKwkJVChsZW4gPSBuc19mb3JtYXRfdHRsKHQsIGJ1ZiwgYnVmbGVuKSk7CisJCWFkZGxlbigoc2l6ZV90KWxlbiwgJmJ1ZiwgJmJ1Zmxlbik7CisJCVQoc3BhY2VkID0gYWRkdGFiKChzaXplX3QpbGVuLCAoc2l6ZV90KTE2LCBzcGFjZWQsICZidWYsICZidWZsZW4pKTsKKwkJVChhZGRzdHIoIjsgcmV0cnlcbiIsIChzaXplX3QpOCwgJmJ1ZiwgJmJ1ZmxlbikpOworCQlzcGFjZWQgPSAwOworCisJCS8qIEV4cGlyeS4gKi8KKwkJdCA9IG5zX2dldDMyKHJkYXRhKTsgIHJkYXRhICs9IE5TX0lOVDMyU1o7CisJCVQoYWRkc3RyKCJcdFx0XHRcdFx0IiwgKHNpemVfdCk1LCAmYnVmLCAmYnVmbGVuKSk7CisJCVQobGVuID0gbnNfZm9ybWF0X3R0bCh0LCBidWYsIGJ1ZmxlbikpOworCQlhZGRsZW4oKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pOworCQlUKHNwYWNlZCA9IGFkZHRhYigoc2l6ZV90KWxlbiwgKHNpemVfdCkxNiwgc3BhY2VkLCAmYnVmLCAmYnVmbGVuKSk7CisJCVQoYWRkc3RyKCI7IGV4cGlyeVxuIiwgKHNpemVfdCk5LCAmYnVmLCAmYnVmbGVuKSk7CisJCXNwYWNlZCA9IDA7CisKKwkJLyogTWluaW11bSBUVEwuICovCisJCXQgPSBuc19nZXQzMihyZGF0YSk7ICByZGF0YSArPSBOU19JTlQzMlNaOworCQlUKGFkZHN0cigiXHRcdFx0XHRcdCIsIChzaXplX3QpNSwgJmJ1ZiwgJmJ1ZmxlbikpOworCQlUKGxlbiA9IG5zX2Zvcm1hdF90dGwodCwgYnVmLCBidWZsZW4pKTsKKwkJYWRkbGVuKChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKTsKKwkJVChhZGRzdHIoIiApIiwgKHNpemVfdCkyLCAmYnVmLCAmYnVmbGVuKSk7CisJCVQoc3BhY2VkID0gYWRkdGFiKChzaXplX3QpbGVuLCAoc2l6ZV90KTE2LCBzcGFjZWQsICZidWYsICZidWZsZW4pKTsKKwkJVChhZGRzdHIoIjsgbWluaW11bVxuIiwgKHNpemVfdCkxMCwgJmJ1ZiwgJmJ1ZmxlbikpOworCisJCWJyZWFrOworCSAgICB9CisKKwljYXNlIG5zX3RfbXg6CisJY2FzZSBuc190X2Fmc2RiOgorCWNhc2UgbnNfdF9ydDogeworCQl1X2ludCB0OworCisJCWlmIChyZGxlbiA8IChzaXplX3QpTlNfSU5UMTZTWikKKwkJCWdvdG8gZm9ybWVycjsKKworCQkvKiBQcmlvcml0eS4gKi8KKwkJdCA9IG5zX2dldDE2KHJkYXRhKTsKKwkJcmRhdGEgKz0gTlNfSU5UMTZTWjsKKwkJbGVuID0gU1BSSU5URigodG1wLCAiJXUgIiwgdCkpOworCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CisKKwkJLyogVGFyZ2V0LiAqLworCQlUKGFkZG5hbWUobXNnLCBtc2dsZW4sICZyZGF0YSwgb3JpZ2luLCAmYnVmLCAmYnVmbGVuKSk7CisKKwkJYnJlYWs7CisJICAgIH0KKworCWNhc2UgbnNfdF9weDogeworCQl1X2ludCB0OworCisJCWlmIChyZGxlbiA8IChzaXplX3QpTlNfSU5UMTZTWikKKwkJCWdvdG8gZm9ybWVycjsKKworCQkvKiBQcmlvcml0eS4gKi8KKwkJdCA9IG5zX2dldDE2KHJkYXRhKTsKKwkJcmRhdGEgKz0gTlNfSU5UMTZTWjsKKwkJbGVuID0gU1BSSU5URigodG1wLCAiJXUgIiwgdCkpOworCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CisKKwkJLyogTmFtZTEuICovCisJCVQoYWRkbmFtZShtc2csIG1zZ2xlbiwgJnJkYXRhLCBvcmlnaW4sICZidWYsICZidWZsZW4pKTsKKwkJVChhZGRzdHIoIiAiLCAoc2l6ZV90KTEsICZidWYsICZidWZsZW4pKTsKKworCQkvKiBOYW1lMi4gKi8KKwkJVChhZGRuYW1lKG1zZywgbXNnbGVuLCAmcmRhdGEsIG9yaWdpbiwgJmJ1ZiwgJmJ1ZmxlbikpOworCisJCWJyZWFrOworCSAgICB9CisKKwljYXNlIG5zX3RfeDI1OgorCQlUKGxlbiA9IGNoYXJzdHIocmRhdGEsIGVkYXRhLCAmYnVmLCAmYnVmbGVuKSk7CisJCWlmIChsZW4gPT0gMCkKKwkJCWdvdG8gZm9ybWVycjsKKwkJcmRhdGEgKz0gbGVuOworCQlicmVhazsKKworCWNhc2UgbnNfdF90eHQ6CisJCXdoaWxlIChyZGF0YSA8IGVkYXRhKSB7CisJCQlUKGxlbiA9IGNoYXJzdHIocmRhdGEsIGVkYXRhLCAmYnVmLCAmYnVmbGVuKSk7CisJCQlpZiAobGVuID09IDApCisJCQkJZ290byBmb3JtZXJyOworCQkJcmRhdGEgKz0gbGVuOworCQkJaWYgKHJkYXRhIDwgZWRhdGEpCisJCQkJVChhZGRzdHIoIiAiLCAoc2l6ZV90KTEsICZidWYsICZidWZsZW4pKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgbnNfdF9uc2FwOiB7CisJCWNoYXIgdFsyKzI1NSozXTsKKworCQkodm9pZCkgaW5ldF9uc2FwX250b2EoKGludClyZGxlbiwgcmRhdGEsIHQpOworCQlUKGFkZHN0cih0LCBzdHJsZW4odCksICZidWYsICZidWZsZW4pKTsKKwkJYnJlYWs7CisJICAgIH0KKworCWNhc2UgbnNfdF9hYWFhOgorCQlpZiAocmRsZW4gIT0gKHNpemVfdClOU19JTjZBRERSU1opCisJCQlnb3RvIGZvcm1lcnI7CisJCSh2b2lkKSBpbmV0X250b3AoQUZfSU5FVDYsIHJkYXRhLCBidWYsIGJ1Zmxlbik7CisJCWFkZGxlbihzdHJsZW4oYnVmKSwgJmJ1ZiwgJmJ1Zmxlbik7CisJCWJyZWFrOworCisJY2FzZSBuc190X2xvYzogeworCQljaGFyIHRbMjU1XTsKKworCQkvKiBYWFggcHJvdG9jb2wgZm9ybWF0IGNoZWNraW5nPyAqLworCQkodm9pZCkgbG9jX250b2EocmRhdGEsIHQpOworCQlUKGFkZHN0cih0LCBzdHJsZW4odCksICZidWYsICZidWZsZW4pKTsKKwkJYnJlYWs7CisJICAgIH0KKworCWNhc2UgbnNfdF9uYXB0cjogeworCQl1X2ludCBvcmRlciwgcHJlZmVyZW5jZTsKKwkJY2hhciB0WzUwXTsKKworCQlpZiAocmRsZW4gPCAyVSpOU19JTlQxNlNaKQorCQkJZ290byBmb3JtZXJyOworCisJCS8qIE9yZGVyLCBQcmVjZWRlbmNlLiAqLworCQlvcmRlciA9IG5zX2dldDE2KHJkYXRhKTsJcmRhdGEgKz0gTlNfSU5UMTZTWjsKKwkJcHJlZmVyZW5jZSA9IG5zX2dldDE2KHJkYXRhKTsJcmRhdGEgKz0gTlNfSU5UMTZTWjsKKwkJbGVuID0gU1BSSU5URigodCwgIiV1ICV1ICIsIG9yZGVyLCBwcmVmZXJlbmNlKSk7CisJCVQoYWRkc3RyKHQsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CisKKwkJLyogRmxhZ3MuICovCisJCVQobGVuID0gY2hhcnN0cihyZGF0YSwgZWRhdGEsICZidWYsICZidWZsZW4pKTsKKwkJaWYgKGxlbiA9PSAwKQorCQkJZ290byBmb3JtZXJyOworCQlyZGF0YSArPSBsZW47CisJCVQoYWRkc3RyKCIgIiwgKHNpemVfdCkxLCAmYnVmLCAmYnVmbGVuKSk7CisKKwkJLyogU2VydmljZS4gKi8KKwkJVChsZW4gPSBjaGFyc3RyKHJkYXRhLCBlZGF0YSwgJmJ1ZiwgJmJ1ZmxlbikpOworCQlpZiAobGVuID09IDApCisJCQlnb3RvIGZvcm1lcnI7CisJCXJkYXRhICs9IGxlbjsKKwkJVChhZGRzdHIoIiAiLCAoc2l6ZV90KTEsICZidWYsICZidWZsZW4pKTsKKworCQkvKiBSZWdleHAuICovCisJCVQobGVuID0gY2hhcnN0cihyZGF0YSwgZWRhdGEsICZidWYsICZidWZsZW4pKTsKKwkJaWYgKGxlbiA8IDApCisJCQlyZXR1cm4gKC0xKTsKKwkJaWYgKGxlbiA9PSAwKQorCQkJZ290byBmb3JtZXJyOworCQlyZGF0YSArPSBsZW47CisJCVQoYWRkc3RyKCIgIiwgKHNpemVfdCkxLCAmYnVmLCAmYnVmbGVuKSk7CisKKwkJLyogU2VydmVyLiAqLworCQlUKGFkZG5hbWUobXNnLCBtc2dsZW4sICZyZGF0YSwgb3JpZ2luLCAmYnVmLCAmYnVmbGVuKSk7CisJCWJyZWFrOworCSAgICB9CisKKwljYXNlIG5zX3Rfc3J2OiB7CisJCXVfaW50IHByaW9yaXR5LCB3ZWlnaHQsIHBvcnQ7CisJCWNoYXIgdFs1MF07CisKKwkJaWYgKHJkbGVuIDwgM1UqTlNfSU5UMTZTWikKKwkJCWdvdG8gZm9ybWVycjsKKworCQkvKiBQcmlvcml0eSwgV2VpZ2h0LCBQb3J0LiAqLworCQlwcmlvcml0eSA9IG5zX2dldDE2KHJkYXRhKTsgIHJkYXRhICs9IE5TX0lOVDE2U1o7CisJCXdlaWdodCAgID0gbnNfZ2V0MTYocmRhdGEpOyAgcmRhdGEgKz0gTlNfSU5UMTZTWjsKKwkJcG9ydCAgICAgPSBuc19nZXQxNihyZGF0YSk7ICByZGF0YSArPSBOU19JTlQxNlNaOworCQlsZW4gPSBTUFJJTlRGKCh0LCAiJXUgJXUgJXUgIiwgcHJpb3JpdHksIHdlaWdodCwgcG9ydCkpOworCQlUKGFkZHN0cih0LCAoc2l6ZV90KWxlbiwgJmJ1ZiwgJmJ1ZmxlbikpOworCisJCS8qIFNlcnZlci4gKi8KKwkJVChhZGRuYW1lKG1zZywgbXNnbGVuLCAmcmRhdGEsIG9yaWdpbiwgJmJ1ZiwgJmJ1ZmxlbikpOworCQlicmVhazsKKwkgICAgfQorCisJY2FzZSBuc190X21pbmZvOgorCWNhc2UgbnNfdF9ycDoKKwkJLyogTmFtZTEuICovCisJCVQoYWRkbmFtZShtc2csIG1zZ2xlbiwgJnJkYXRhLCBvcmlnaW4sICZidWYsICZidWZsZW4pKTsKKwkJVChhZGRzdHIoIiAiLCAoc2l6ZV90KTEsICZidWYsICZidWZsZW4pKTsKKworCQkvKiBOYW1lMi4gKi8KKwkJVChhZGRuYW1lKG1zZywgbXNnbGVuLCAmcmRhdGEsIG9yaWdpbiwgJmJ1ZiwgJmJ1ZmxlbikpOworCisJCWJyZWFrOworCisJY2FzZSBuc190X3drczogeworCQlpbnQgbiwgbGNudDsKKworCQlpZiAocmRsZW4gPCAxVSArIE5TX0lOVDMyU1opCisJCQlnb3RvIGZvcm1lcnI7CisKKwkJLyogQWRkcmVzcy4gKi8KKwkJKHZvaWQpIGluZXRfbnRvcChBRl9JTkVULCByZGF0YSwgYnVmLCBidWZsZW4pOworCQlhZGRsZW4oc3RybGVuKGJ1ZiksICZidWYsICZidWZsZW4pOworCQlyZGF0YSArPSBOU19JTkFERFJTWjsKKworCQkvKiBQcm90b2NvbC4gKi8KKwkJbGVuID0gU1BSSU5URigodG1wLCAiICV1ICggIiwgKnJkYXRhKSk7CisJCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKKwkJcmRhdGEgKz0gTlNfSU5UOFNaOworCisJCS8qIEJpdCBtYXAuICovCisJCW4gPSAwOworCQlsY250ID0gMDsKKwkJd2hpbGUgKHJkYXRhIDwgZWRhdGEpIHsKKwkJCXVfaW50IGMgPSAqcmRhdGErKzsKKwkJCWRvIHsKKwkJCQlpZiAoYyAmIDAyMDApIHsKKwkJCQkJaWYgKGxjbnQgPT0gMCkgeworCQkJCQkJVChhZGRzdHIoIlxuXHRcdFx0XHQiLCAoc2l6ZV90KTUsCisJCQkJCQkJICZidWYsICZidWZsZW4pKTsKKwkJCQkJCWxjbnQgPSAxMDsKKwkJCQkJCXNwYWNlZCA9IDA7CisJCQkJCX0KKwkJCQkJbGVuID0gU1BSSU5URigodG1wLCAiJWQgIiwgbikpOworCQkJCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CisJCQkJCWxjbnQtLTsKKwkJCQl9CisJCQkJYyA8PD0gMTsKKwkJCX0gd2hpbGUgKCsrbiAmIDA3KTsKKwkJfQorCQlUKGFkZHN0cigiKSIsIChzaXplX3QpMSwgJmJ1ZiwgJmJ1ZmxlbikpOworCisJCWJyZWFrOworCSAgICB9CisKKwljYXNlIG5zX3Rfa2V5OiB7CisJCWNoYXIgYmFzZTY0X2tleVtOU19NRDVSU0FfTUFYX0JBU0U2NF07CisJCXVfaW50IGtleWZsYWdzLCBwcm90b2NvbCwgYWxnb3JpdGhtLCBrZXlfaWQ7CisJCWNvbnN0IGNoYXIgKmxlYWRlcjsKKwkJaW50IG47CisKKwkJaWYgKHJkbGVuIDwgMFUgKyBOU19JTlQxNlNaICsgTlNfSU5UOFNaICsgTlNfSU5UOFNaKQorCQkJZ290byBmb3JtZXJyOworCisJCS8qIEtleSBmbGFncywgUHJvdG9jb2wsIEFsZ29yaXRobS4gKi8KKyNpZm5kZWYgX0xJQkMKKwkJa2V5X2lkID0gZHN0X3NfZG5zX2tleV9pZChyZGF0YSwgZWRhdGEtcmRhdGEpOworI2Vsc2UKKwkJa2V5X2lkID0gMDsKKyNlbmRpZgorCQlrZXlmbGFncyA9IG5zX2dldDE2KHJkYXRhKTsgIHJkYXRhICs9IE5TX0lOVDE2U1o7CisJCXByb3RvY29sID0gKnJkYXRhKys7CisJCWFsZ29yaXRobSA9ICpyZGF0YSsrOworCQlsZW4gPSBTUFJJTlRGKCh0bXAsICIweCUwNHggJXUgJXUiLAorCQkJICAgICAgIGtleWZsYWdzLCBwcm90b2NvbCwgYWxnb3JpdGhtKSk7CisJCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKKworCQkvKiBQdWJsaWMga2V5IGRhdGEuICovCisJCWxlbiA9IGI2NF9udG9wKHJkYXRhLCAoc2l6ZV90KShlZGF0YSAtIHJkYXRhKSwKKwkJCSAgICAgICBiYXNlNjRfa2V5LCBzaXplb2YgYmFzZTY0X2tleSk7CisJCWlmIChsZW4gPCAwKQorCQkJZ290byBmb3JtZXJyOworCQlpZiAobGVuID4gMTUpIHsKKwkJCVQoYWRkc3RyKCIgKCIsIChzaXplX3QpMiwgJmJ1ZiwgJmJ1ZmxlbikpOworCQkJbGVhZGVyID0gIlxuXHRcdCI7CisJCQlzcGFjZWQgPSAwOworCQl9IGVsc2UKKwkJCWxlYWRlciA9ICIgIjsKKwkJZm9yIChuID0gMDsgbiA8IGxlbjsgbiArPSA0OCkgeworCQkJVChhZGRzdHIobGVhZGVyLCBzdHJsZW4obGVhZGVyKSwgJmJ1ZiwgJmJ1ZmxlbikpOworCQkJVChhZGRzdHIoYmFzZTY0X2tleSArIG4sIChzaXplX3QpTUlOKGxlbiAtIG4sIDQ4KSwKKwkJCQkgJmJ1ZiwgJmJ1ZmxlbikpOworCQl9CisJCWlmIChsZW4gPiAxNSkKKwkJCVQoYWRkc3RyKCIgKSIsIChzaXplX3QpMiwgJmJ1ZiwgJmJ1ZmxlbikpOworCQluID0gU1BSSU5URigodG1wLCAiIDsga2V5X3RhZz0gJXUiLCBrZXlfaWQpKTsKKwkJVChhZGRzdHIodG1wLCAoc2l6ZV90KW4sICZidWYsICZidWZsZW4pKTsKKworCQlicmVhazsKKwkgICAgfQorCisJY2FzZSBuc190X3NpZzogeworCQljaGFyIGJhc2U2NF9rZXlbTlNfTUQ1UlNBX01BWF9CQVNFNjRdOworCQl1X2ludCB0eXAsIGFsZ29yaXRobSwgbGFiZWxzLCBmb290cHJpbnQ7CisJCWNvbnN0IGNoYXIgKmxlYWRlcjsKKwkJdV9sb25nIHQ7CisJCWludCBuOworCisJCWlmIChyZGxlbiA8IDIyVSkKKwkJCWdvdG8gZm9ybWVycjsKKworCQkvKiBUeXBlIGNvdmVyZWQsIEFsZ29yaXRobSwgTGFiZWwgY291bnQsIE9yaWdpbmFsIFRUTC4gKi8KKwkgICAgICAgIHR5cCA9IG5zX2dldDE2KHJkYXRhKTsgIHJkYXRhICs9IE5TX0lOVDE2U1o7CisJCWFsZ29yaXRobSA9ICpyZGF0YSsrOworCQlsYWJlbHMgPSAqcmRhdGErKzsKKwkJdCA9IG5zX2dldDMyKHJkYXRhKTsgIHJkYXRhICs9IE5TX0lOVDMyU1o7CisJCWxlbiA9IFNQUklOVEYoKHRtcCwgIiVzICVkICVkICVsdSAiLAorCQkJICAgICAgIHBfdHlwZSgoaW50KXR5cCksIGFsZ29yaXRobSwgbGFiZWxzLCB0KSk7CisJCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKKwkJaWYgKGxhYmVscyA+ICh1X2ludClkbl9jb3VudF9sYWJlbHMobmFtZSkpCisJCQlnb3RvIGZvcm1lcnI7CisKKwkJLyogU2lnbmF0dXJlIGV4cGlyeS4gKi8KKwkJdCA9IG5zX2dldDMyKHJkYXRhKTsgIHJkYXRhICs9IE5TX0lOVDMyU1o7CisJCWxlbiA9IFNQUklOVEYoKHRtcCwgIiVzICIsIHBfc2Vjc3RvZGF0ZSh0KSkpOworCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CisKKwkJLyogVGltZSBzaWduZWQuICovCisJCXQgPSBuc19nZXQzMihyZGF0YSk7ICByZGF0YSArPSBOU19JTlQzMlNaOworCQlsZW4gPSBTUFJJTlRGKCh0bXAsICIlcyAiLCBwX3NlY3N0b2RhdGUodCkpKTsKKwkJVChhZGRzdHIodG1wLCAoc2l6ZV90KWxlbiwgJmJ1ZiwgJmJ1ZmxlbikpOworCisJCS8qIFNpZ25hdHVyZSBGb290cHJpbnQuICovCisJCWZvb3RwcmludCA9IG5zX2dldDE2KHJkYXRhKTsgIHJkYXRhICs9IE5TX0lOVDE2U1o7CisJCWxlbiA9IFNQUklOVEYoKHRtcCwgIiV1ICIsIGZvb3RwcmludCkpOworCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CisKKwkJLyogU2lnbmVyJ3MgbmFtZS4gKi8KKwkJVChhZGRuYW1lKG1zZywgbXNnbGVuLCAmcmRhdGEsIG9yaWdpbiwgJmJ1ZiwgJmJ1ZmxlbikpOworCisJCS8qIFNpZ25hdHVyZS4gKi8KKwkJbGVuID0gYjY0X250b3AocmRhdGEsIChzaXplX3QpKGVkYXRhIC0gcmRhdGEpLAorCQkJICAgICAgIGJhc2U2NF9rZXksIHNpemVvZiBiYXNlNjRfa2V5KTsKKwkJaWYgKGxlbiA+IDE1KSB7CisJCQlUKGFkZHN0cigiICgiLCAoc2l6ZV90KTIsICZidWYsICZidWZsZW4pKTsKKwkJCWxlYWRlciA9ICJcblx0XHQiOworCQkJc3BhY2VkID0gMDsKKwkJfSBlbHNlCisJCQlsZWFkZXIgPSAiICI7CisJCWlmIChsZW4gPCAwKQorCQkJZ290byBmb3JtZXJyOworCQlmb3IgKG4gPSAwOyBuIDwgbGVuOyBuICs9IDQ4KSB7CisJCQlUKGFkZHN0cihsZWFkZXIsIHN0cmxlbihsZWFkZXIpLCAmYnVmLCAmYnVmbGVuKSk7CisJCQlUKGFkZHN0cihiYXNlNjRfa2V5ICsgbiwgKHNpemVfdClNSU4obGVuIC0gbiwgNDgpLAorCQkJCSAmYnVmLCAmYnVmbGVuKSk7CisJCX0KKwkJaWYgKGxlbiA+IDE1KQorCQkJVChhZGRzdHIoIiApIiwgKHNpemVfdCkyLCAmYnVmLCAmYnVmbGVuKSk7CisJCWJyZWFrOworCSAgICB9CisKKwljYXNlIG5zX3Rfbnh0OiB7CisJCWludCBuLCBjOworCisJCS8qIE5leHQgZG9tYWluIG5hbWUuICovCisJCVQoYWRkbmFtZShtc2csIG1zZ2xlbiwgJnJkYXRhLCBvcmlnaW4sICZidWYsICZidWZsZW4pKTsKKworCQkvKiBUeXBlIGJpdCBtYXAuICovCisJCW4gPSBlZGF0YSAtIHJkYXRhOworCQlmb3IgKGMgPSAwOyBjIDwgbio4OyBjKyspCisJCQlpZiAoTlNfTlhUX0JJVF9JU1NFVChjLCByZGF0YSkpIHsKKwkJCQlsZW4gPSBTUFJJTlRGKCh0bXAsICIgJXMiLCBwX3R5cGUoYykpKTsKKwkJCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CisJCQl9CisJCWJyZWFrOworCSAgICB9CisKKwljYXNlIG5zX3RfY2VydDogeworCQl1X2ludCBjX3R5cGUsIGtleV90YWcsIGFsZzsKKwkJaW50IG47CisJCXVuc2lnbmVkIGludCBzaXo7CisJCWNoYXIgYmFzZTY0X2NlcnRbODE5Ml0sIHRtcDFbNDBdOworCQljb25zdCBjaGFyICpsZWFkZXI7CisKKwkJY190eXBlICA9IG5zX2dldDE2KHJkYXRhKTsgcmRhdGEgKz0gTlNfSU5UMTZTWjsKKwkJa2V5X3RhZyA9IG5zX2dldDE2KHJkYXRhKTsgcmRhdGEgKz0gTlNfSU5UMTZTWjsKKwkJYWxnID0gKHVfaW50KSAqcmRhdGErKzsKKworCQlsZW4gPSBTUFJJTlRGKCh0bXAxLCAiJWQgJWQgJWQgIiwgY190eXBlLCBrZXlfdGFnLCBhbGcpKTsKKwkJVChhZGRzdHIodG1wMSwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKKwkJc2l6ID0gKGVkYXRhLXJkYXRhKSo0LzMgKyA0OyAvKiAiKzQiIGFjY291bnRzIGZvciB0cmFpbGluZyBcMCAqLworCQlpZiAoc2l6ID4gc2l6ZW9mKGJhc2U2NF9jZXJ0KSAqIDMvNCkgeworCQkJY29uc3QgY2hhciAqc3RyID0gInJlY29yZCB0b28gbG9uZyB0byBwcmludCI7CisJCQlUKGFkZHN0cihzdHIsIHN0cmxlbihzdHIpLCAmYnVmLCAmYnVmbGVuKSk7CisJCX0KKwkJZWxzZSB7CisJCQlsZW4gPSBiNjRfbnRvcChyZGF0YSwgKHNpemVfdCkoZWRhdGEtcmRhdGEpLAorCQkJICAgIGJhc2U2NF9jZXJ0LCBzaXopOworCisJCQlpZiAobGVuIDwgMCkKKwkJCQlnb3RvIGZvcm1lcnI7CisJCQllbHNlIGlmIChsZW4gPiAxNSkgeworCQkJCVQoYWRkc3RyKCIgKCIsIChzaXplX3QpMiwgJmJ1ZiwgJmJ1ZmxlbikpOworCQkJCWxlYWRlciA9ICJcblx0XHQiOworCQkJCXNwYWNlZCA9IDA7CisJCQl9CisJCQllbHNlCisJCQkJbGVhZGVyID0gIiAiOworCisJCQlmb3IgKG4gPSAwOyBuIDwgbGVuOyBuICs9IDQ4KSB7CisJCQkJVChhZGRzdHIobGVhZGVyLCBzdHJsZW4obGVhZGVyKSwKKwkJCQkJICZidWYsICZidWZsZW4pKTsKKwkJCQlUKGFkZHN0cihiYXNlNjRfY2VydCArIG4sIChzaXplX3QpTUlOKGxlbiAtIG4sIDQ4KSwKKwkJCQkJICZidWYsICZidWZsZW4pKTsKKwkJCX0KKwkJCWlmIChsZW4gPiAxNSkKKwkJCQlUKGFkZHN0cigiICkiLCAoc2l6ZV90KTIsICZidWYsICZidWZsZW4pKTsKKwkJfQorCQlicmVhazsKKwkgICAgfQorCisJY2FzZSBuc190X3RrZXk6IHsKKwkJLyogS0pEIC0gbmVlZCB0byBjb21wbGV0ZSB0aGlzICovCisJCXVfbG9uZyB0OworCQlpbnQgbW9kZSwgZXJyLCBrZXlzaXplOworCisJCS8qIEFsZ29yaXRobSBuYW1lLiAqLworCQlUKGFkZG5hbWUobXNnLCBtc2dsZW4sICZyZGF0YSwgb3JpZ2luLCAmYnVmLCAmYnVmbGVuKSk7CisJCVQoYWRkc3RyKCIgIiwgKHNpemVfdCkxLCAmYnVmLCAmYnVmbGVuKSk7CisKKwkJLyogSW5jZXB0aW9uLiAqLworCQl0ID0gbnNfZ2V0MzIocmRhdGEpOyAgcmRhdGEgKz0gTlNfSU5UMzJTWjsKKwkJbGVuID0gU1BSSU5URigodG1wLCAiJXMgIiwgcF9zZWNzdG9kYXRlKHQpKSk7CisJCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKKworCQkvKiBFeHBlcmF0aW9uLiAqLworCQl0ID0gbnNfZ2V0MzIocmRhdGEpOyAgcmRhdGEgKz0gTlNfSU5UMzJTWjsKKwkJbGVuID0gU1BSSU5URigodG1wLCAiJXMgIiwgcF9zZWNzdG9kYXRlKHQpKSk7CisJCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKKworCQkvKiBNb2RlICwgRXJyb3IsIEtleSBTaXplLiAqLworCQkvKiBQcmlvcml0eSwgV2VpZ2h0LCBQb3J0LiAqLworCQltb2RlID0gbnNfZ2V0MTYocmRhdGEpOyAgcmRhdGEgKz0gTlNfSU5UMTZTWjsKKwkJZXJyICA9IG5zX2dldDE2KHJkYXRhKTsgIHJkYXRhICs9IE5TX0lOVDE2U1o7CisJCWtleXNpemUgID0gbnNfZ2V0MTYocmRhdGEpOyAgcmRhdGEgKz0gTlNfSU5UMTZTWjsKKwkJbGVuID0gU1BSSU5URigodG1wLCAiJXUgJXUgJXUgIiwgbW9kZSwgZXJyLCBrZXlzaXplKSk7CisJCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKKworCQkvKiBYWFggbmVlZCB0byBkdW1wIGtleSwgcHJpbnQgb3RoZXJkYXRhIGxlbmd0aCAmIG90aGVyIGRhdGEgKi8KKwkJYnJlYWs7CisJICAgIH0KKworCWNhc2UgbnNfdF90c2lnOiB7CisJCS8qIEJFVyAtIG5lZWQgdG8gY29tcGxldGUgdGhpcyAqLworCQlpbnQgbjsKKworCQlUKGxlbiA9IGFkZG5hbWUobXNnLCBtc2dsZW4sICZyZGF0YSwgb3JpZ2luLCAmYnVmLCAmYnVmbGVuKSk7CisJCVQoYWRkc3RyKCIgIiwgKHNpemVfdCkxLCAmYnVmLCAmYnVmbGVuKSk7CisJCXJkYXRhICs9IDg7IC8qIHRpbWUgKi8KKwkJbiA9IG5zX2dldDE2KHJkYXRhKTsgcmRhdGEgKz0gSU5UMTZTWjsKKwkJcmRhdGEgKz0gbjsgLyogc2lnICovCisJCW4gPSBuc19nZXQxNihyZGF0YSk7IHJkYXRhICs9IElOVDE2U1o7IC8qIG9yaWdpbmFsIGlkICovCisJCXNwcmludGYoYnVmLCAiJWQiLCBuc19nZXQxNihyZGF0YSkpOworCQlyZGF0YSArPSBJTlQxNlNaOworCQlhZGRsZW4oc3RybGVuKGJ1ZiksICZidWYsICZidWZsZW4pOworCQlicmVhazsKKwkgICAgfQorCisJY2FzZSBuc190X2E2OiB7CisJCXN0cnVjdCBpbjZfYWRkciBhOworCQlpbnQgcGJ5dGUsIHBiaXQ7CisKKwkJLyogcHJlZml4IGxlbmd0aCAqLworCQlpZiAocmRsZW4gPT0gMFUpIGdvdG8gZm9ybWVycjsKKwkJbGVuID0gU1BSSU5URigodG1wLCAiJWQgIiwgKnJkYXRhKSk7CisJCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKKwkJcGJpdCA9ICpyZGF0YTsKKwkJaWYgKHBiaXQgPiAxMjgpIGdvdG8gZm9ybWVycjsKKwkJcGJ5dGUgPSAocGJpdCAmIH43KSAvIDg7CisJCXJkYXRhKys7CisKKwkJLyogYWRkcmVzcyBzdWZmaXg6IHByb3ZpZGVkIG9ubHkgd2hlbiBwcmVmaXggbGVuICE9IDEyOCAqLworCQlpZiAocGJpdCA8IDEyOCkgeworCQkJaWYgKHJkYXRhICsgcGJ5dGUgPj0gZWRhdGEpIGdvdG8gZm9ybWVycjsKKwkJCW1lbXNldCgmYSwgMCwgc2l6ZW9mKGEpKTsKKwkJCW1lbWNweSgmYS5zNl9hZGRyW3BieXRlXSwgcmRhdGEsIHNpemVvZihhKSAtIHBieXRlKTsKKwkJCSh2b2lkKSBpbmV0X250b3AoQUZfSU5FVDYsICZhLCBidWYsIGJ1Zmxlbik7CisJCQlhZGRsZW4oc3RybGVuKGJ1ZiksICZidWYsICZidWZsZW4pOworCQkJcmRhdGEgKz0gc2l6ZW9mKGEpIC0gcGJ5dGU7CisJCX0KKworCQkvKiBwcmVmaXggbmFtZTogcHJvdmlkZWQgb25seSB3aGVuIHByZWZpeCBsZW4gPiAwICovCisJCWlmIChwYml0ID09IDApCisJCQlicmVhazsKKwkJaWYgKHJkYXRhID49IGVkYXRhKSBnb3RvIGZvcm1lcnI7CisJCVQoYWRkc3RyKCIgIiwgKHNpemVfdCkxLCAmYnVmLCAmYnVmbGVuKSk7CisJCVQoYWRkbmFtZShtc2csIG1zZ2xlbiwgJnJkYXRhLCBvcmlnaW4sICZidWYsICZidWZsZW4pKTsKKworCQlicmVhazsKKwkgICAgfQorCisJY2FzZSBuc190X29wdDogeworCQlsZW4gPSBTUFJJTlRGKCh0bXAsICIldSBieXRlcyIsIGNsYXNzKSk7CisJCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKKwkJYnJlYWs7CisJICAgIH0KKworCWRlZmF1bHQ6CisJCWNvbW1lbnQgPSAidW5rbm93biBSUiB0eXBlIjsKKwkJZ290byBoZXhpZnk7CisJfQorCXJldHVybiAoYnVmIC0gb2J1Zik7CisgZm9ybWVycjoKKwljb21tZW50ID0gIlJSIGZvcm1hdCBlcnJvciI7CisgaGV4aWZ5OiB7CisJaW50IG4sIG07CisJY2hhciAqcDsKKworCWxlbiA9IFNQUklOVEYoKHRtcCwgIlxcIyAldHUlc1x0OyAlcyIsIGVkYXRhIC0gcmRhdGEsCisJCSAgICAgICByZGxlbiAhPSAwID8gIiAoIiA6ICIiLCBjb21tZW50KSk7CisJVChhZGRzdHIodG1wLCAoc2l6ZV90KWxlbiwgJmJ1ZiwgJmJ1ZmxlbikpOworCXdoaWxlIChyZGF0YSA8IGVkYXRhKSB7CisJCXAgPSB0bXA7CisJCXAgKz0gU1BSSU5URigocCwgIlxuXHQiKSk7CisJCXNwYWNlZCA9IDA7CisJCW4gPSBNSU4oMTYsIGVkYXRhIC0gcmRhdGEpOworCQlmb3IgKG0gPSAwOyBtIDwgbjsgbSsrKQorCQkJcCArPSBTUFJJTlRGKChwLCAiJTAyeCAiLCByZGF0YVttXSkpOworCQlUKGFkZHN0cih0bXAsIChzaXplX3QpKHAgLSB0bXApLCAmYnVmLCAmYnVmbGVuKSk7CisJCWlmIChuIDwgMTYpIHsKKwkJCVQoYWRkc3RyKCIpIiwgKHNpemVfdCkxLCAmYnVmLCAmYnVmbGVuKSk7CisJCQlUKGFkZHRhYigoc2l6ZV90KShwIC0gdG1wICsgMSksIChzaXplX3QpNDgsIHNwYWNlZCwgJmJ1ZiwgJmJ1ZmxlbikpOworCQl9CisJCXAgPSB0bXA7CisJCXAgKz0gU1BSSU5URigocCwgIjsgIikpOworCQlmb3IgKG0gPSAwOyBtIDwgbjsgbSsrKQorCQkJKnArKyA9IChpc2FzY2lpKHJkYXRhW21dKSAmJiBpc3ByaW50KHJkYXRhW21dKSkKKwkJCQk/IHJkYXRhW21dCisJCQkJOiAnLic7CisJCVQoYWRkc3RyKHRtcCwgKHNpemVfdCkocCAtIHRtcCksICZidWYsICZidWZsZW4pKTsKKwkJcmRhdGEgKz0gbjsKKwl9CisJcmV0dXJuIChidWYgLSBvYnVmKTsKKyAgICB9Cit9CisKKy8qIFByaXZhdGUuICovCisKKy8qCisgKiBzaXplX3QKKyAqIHBydW5lX29yaWdpbihuYW1lLCBvcmlnaW4pCisgKglGaW5kIG91dCBpZiB0aGUgbmFtZSBpcyBhdCBvciB1bmRlciB0aGUgY3VycmVudCBvcmlnaW4uCisgKiByZXR1cm46CisgKglOdW1iZXIgb2YgY2hhcmFjdGVycyBpbiBuYW1lIGJlZm9yZSBzdGFydCBvZiBvcmlnaW4sCisgKglvciBsZW5ndGggb2YgbmFtZSBpZiBvcmlnaW4gZG9lcyBub3QgbWF0Y2guCisgKiBub3RlczoKKyAqCVRoaXMgZnVuY3Rpb24gc2hvdWxkIHNoYXJlIGNvZGUgd2l0aCBzYW1lZG9tYWluKCkuCisgKi8KK3N0YXRpYyBzaXplX3QKK3BydW5lX29yaWdpbihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpvcmlnaW4pIHsKKwljb25zdCBjaGFyICpvbmFtZSA9IG5hbWU7CisKKwl3aGlsZSAoKm5hbWUgIT0gJ1wwJykgeworCQlpZiAob3JpZ2luICE9IE5VTEwgJiYgbnNfc2FtZW5hbWUobmFtZSwgb3JpZ2luKSA9PSAxKQorCQkJcmV0dXJuIChuYW1lIC0gb25hbWUgLSAobmFtZSA+IG9uYW1lKSk7CisJCXdoaWxlICgqbmFtZSAhPSAnXDAnKSB7CisJCQlpZiAoKm5hbWUgPT0gJ1xcJykgeworCQkJCW5hbWUrKzsKKwkJCQkvKiBYWFggbmVlZCB0byBoYW5kbGUgXG5ubiBmb3JtLiAqLworCQkJCWlmICgqbmFtZSA9PSAnXDAnKQorCQkJCQlicmVhazsKKwkJCX0gZWxzZSBpZiAoKm5hbWUgPT0gJy4nKSB7CisJCQkJbmFtZSsrOworCQkJCWJyZWFrOworCQkJfQorCQkJbmFtZSsrOworCQl9CisJfQorCXJldHVybiAobmFtZSAtIG9uYW1lKTsKK30KKworLyoKKyAqIGludAorICogY2hhcnN0cihyZGF0YSwgZWRhdGEsIGJ1ZiwgYnVmbGVuKQorICoJRm9ybWF0IGEgPGNoYXJhY3Rlci1zdHJpbmc+IGludG8gdGhlIHByZXNlbnRhdGlvbiBidWZmZXIuCisgKiByZXR1cm46CisgKglOdW1iZXIgb2YgcmRhdGEgb2N0ZXRzIGNvbnN1bWVkCisgKgkwIGZvciBwcm90b2NvbCBmb3JtYXQgZXJyb3IKKyAqCS0xIGZvciBvdXRwdXQgYnVmZmVyIGVycm9yCisgKiBzaWRlIGVmZmVjdHM6CisgKglidWZmZXIgaXMgYWR2YW5jZWQgb24gc3VjY2Vzcy4KKyAqLworc3RhdGljIGludAorY2hhcnN0cihjb25zdCB1X2NoYXIgKnJkYXRhLCBjb25zdCB1X2NoYXIgKmVkYXRhLCBjaGFyICoqYnVmLCBzaXplX3QgKmJ1ZmxlbikgeworCWNvbnN0IHVfY2hhciAqb2RhdGEgPSByZGF0YTsKKwlzaXplX3Qgc2F2ZV9idWZsZW4gPSAqYnVmbGVuOworCWNoYXIgKnNhdmVfYnVmID0gKmJ1ZjsKKworCWlmIChhZGRzdHIoIlwiIiwgKHNpemVfdCkxLCBidWYsIGJ1ZmxlbikgPCAwKQorCQlnb3RvIGVub3NwYzsKKwlpZiAocmRhdGEgPCBlZGF0YSkgeworCQlpbnQgbiA9ICpyZGF0YTsKKworCQlpZiAocmRhdGEgKyAxICsgbiA8PSBlZGF0YSkgeworCQkJcmRhdGErKzsKKwkJCXdoaWxlIChuLS0gPiAwKSB7CisJCQkJaWYgKHN0cmNocigiXG5cIlxcIiwgKnJkYXRhKSAhPSBOVUxMKQorCQkJCQlpZiAoYWRkc3RyKCJcXCIsIChzaXplX3QpMSwgYnVmLCBidWZsZW4pIDwgMCkKKwkJCQkJCWdvdG8gZW5vc3BjOworCQkJCWlmIChhZGRzdHIoKGNvbnN0IGNoYXIgKilyZGF0YSwgKHNpemVfdCkxLAorCQkJCQkgICBidWYsIGJ1ZmxlbikgPCAwKQorCQkJCQlnb3RvIGVub3NwYzsKKwkJCQlyZGF0YSsrOworCQkJfQorCQl9CisJfQorCWlmIChhZGRzdHIoIlwiIiwgKHNpemVfdCkxLCBidWYsIGJ1ZmxlbikgPCAwKQorCQlnb3RvIGVub3NwYzsKKwlyZXR1cm4gKHJkYXRhIC0gb2RhdGEpOworIGVub3NwYzoKKwllcnJubyA9IEVOT1NQQzsKKwkqYnVmID0gc2F2ZV9idWY7CisJKmJ1ZmxlbiA9IHNhdmVfYnVmbGVuOworCXJldHVybiAoLTEpOworfQorCitzdGF0aWMgaW50CithZGRuYW1lKGNvbnN0IHVfY2hhciAqbXNnLCBzaXplX3QgbXNnbGVuLAorCWNvbnN0IHVfY2hhciAqKnBwLCBjb25zdCBjaGFyICpvcmlnaW4sCisJY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZsZW4pCit7CisJc2l6ZV90IG5ld2xlbiwgc2F2ZV9idWZsZW4gPSAqYnVmbGVuOworCWNoYXIgKnNhdmVfYnVmID0gKmJ1ZjsKKwlpbnQgbjsKKworCW4gPSBkbl9leHBhbmQobXNnLCBtc2cgKyBtc2dsZW4sICpwcCwgKmJ1ZiwgKGludCkqYnVmbGVuKTsKKwlpZiAobiA8IDApCisJCWdvdG8gZW5vc3BjOwkvKiBHdWVzcy4gKi8KKwluZXdsZW4gPSBwcnVuZV9vcmlnaW4oKmJ1Ziwgb3JpZ2luKTsKKwlpZiAoKipidWYgPT0gJ1wwJykgeworCQlnb3RvIHJvb3Q7CisJfSBlbHNlIGlmIChuZXdsZW4gPT0gMFUpIHsKKwkJLyogVXNlICJAIiBpbnN0ZWFkIG9mIG5hbWUuICovCisJCWlmIChuZXdsZW4gKyAyID4gKmJ1ZmxlbikKKwkJCWdvdG8gZW5vc3BjOyAgICAgICAgLyogTm8gcm9vbSBmb3IgIkBcMCIuICovCisJCSgqYnVmKVtuZXdsZW4rK10gPSAnQCc7CisJCSgqYnVmKVtuZXdsZW5dID0gJ1wwJzsKKwl9IGVsc2UgeworCQlpZiAoKChvcmlnaW4gPT0gTlVMTCB8fCBvcmlnaW5bMF0gPT0gJ1wwJykgfHwKKwkJICAgIChvcmlnaW5bMF0gIT0gJy4nICYmIG9yaWdpblsxXSAhPSAnXDAnICYmCisJCSAgICAoKmJ1ZilbbmV3bGVuXSA9PSAnXDAnKSkgJiYgKCpidWYpW25ld2xlbiAtIDFdICE9ICcuJykgeworCQkJLyogTm8gdHJhaWxpbmcgZG90LiAqLworIHJvb3Q6CisJCQlpZiAobmV3bGVuICsgMiA+ICpidWZsZW4pCisJCQkJZ290byBlbm9zcGM7CS8qIE5vIHJvb20gZm9yICIuXDAiLiAqLworCQkJKCpidWYpW25ld2xlbisrXSA9ICcuJzsKKwkJCSgqYnVmKVtuZXdsZW5dID0gJ1wwJzsKKwkJfQorCX0KKwkqcHAgKz0gbjsKKwlhZGRsZW4obmV3bGVuLCBidWYsIGJ1Zmxlbik7CisJKipidWYgPSAnXDAnOworCXJldHVybiAobmV3bGVuKTsKKyBlbm9zcGM6CisJZXJybm8gPSBFTk9TUEM7CisJKmJ1ZiA9IHNhdmVfYnVmOworCSpidWZsZW4gPSBzYXZlX2J1ZmxlbjsKKwlyZXR1cm4gKC0xKTsKK30KKworc3RhdGljIHZvaWQKK2FkZGxlbihzaXplX3QgbGVuLCBjaGFyICoqYnVmLCBzaXplX3QgKmJ1ZmxlbikgeworCWFzc2VydChsZW4gPD0gKmJ1Zmxlbik7CisJKmJ1ZiArPSBsZW47CisJKmJ1ZmxlbiAtPSBsZW47Cit9CisKK3N0YXRpYyBpbnQKK2FkZHN0cihjb25zdCBjaGFyICpzcmMsIHNpemVfdCBsZW4sIGNoYXIgKipidWYsIHNpemVfdCAqYnVmbGVuKSB7CisJaWYgKGxlbiA+PSAqYnVmbGVuKSB7CisJCWVycm5vID0gRU5PU1BDOworCQlyZXR1cm4gKC0xKTsKKwl9CisJbWVtY3B5KCpidWYsIHNyYywgbGVuKTsKKwlhZGRsZW4obGVuLCBidWYsIGJ1Zmxlbik7CisJKipidWYgPSAnXDAnOworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbnQKK2FkZHRhYihzaXplX3QgbGVuLCBzaXplX3QgdGFyZ2V0LCBpbnQgc3BhY2VkLCBjaGFyICoqYnVmLCBzaXplX3QgKmJ1ZmxlbikgeworCXNpemVfdCBzYXZlX2J1ZmxlbiA9ICpidWZsZW47CisJY2hhciAqc2F2ZV9idWYgPSAqYnVmOworCWludCB0OworCisJaWYgKHNwYWNlZCB8fCBsZW4gPj0gdGFyZ2V0IC0gMSkgeworCQlUKGFkZHN0cigiICAiLCAoc2l6ZV90KTIsIGJ1ZiwgYnVmbGVuKSk7CisJCXNwYWNlZCA9IDE7CisJfSBlbHNlIHsKKwkJZm9yICh0ID0gKHRhcmdldCAtIGxlbiAtIDEpIC8gODsgdCA+PSAwOyB0LS0pCisJCQlpZiAoYWRkc3RyKCJcdCIsIChzaXplX3QpMSwgYnVmLCBidWZsZW4pIDwgMCkgeworCQkJCSpidWZsZW4gPSBzYXZlX2J1ZmxlbjsKKwkJCQkqYnVmID0gc2F2ZV9idWY7CisJCQkJcmV0dXJuICgtMSk7CisJCQl9CisJCXNwYWNlZCA9IDA7CisJfQorCXJldHVybiAoc3BhY2VkKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvbmV0YnNkL25hbWVzZXIvbnNfc2FtZWRvbWFpbi5jIGIvbGliYy9uZXRic2QvbmFtZXNlci9uc19zYW1lZG9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRmZGI2MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvbmV0YnNkL25hbWVzZXIvbnNfc2FtZWRvbWFpbi5jCkBAIC0wLDAgKzEsMjExIEBACisvKgkkTmV0QlNEOiBuc19zYW1lZG9tYWluLmMsdiAxLjIgMjAwNC8wNS8yMCAyMDozNTowNSBjaHJpc3RvcyBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAyMDA0IGJ5IEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCisgKiBDb3B5cmlnaHQgKGMpIDE5OTUsMTk5OSBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSVNDIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgSVNDIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKKyAqIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2lmbmRlZiBsaW50CisjaWZkZWYgbm90ZGVmCitzdGF0aWMgY29uc3QgY2hhciByY3NpZFtdID0gIklkOiBuc19zYW1lZG9tYWluLmMsdiAxLjEuMi4yLjQuMiAyMDA0LzAzLzE2IDEyOjM0OjE3IG1hcmthIEV4cCI7CisjZWxzZQorX19SQ1NJRCgiJE5ldEJTRDogbnNfc2FtZWRvbWFpbi5jLHYgMS4yIDIwMDQvMDUvMjAgMjA6MzU6MDUgY2hyaXN0b3MgRXhwICQiKTsKKyNlbmRpZgorI2VuZGlmCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlICJhcnBhX25hbWVzZXIuaCIKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWZuZGVmIF9MSUJDCisvKgorICogaW50CisgKiBuc19zYW1lZG9tYWluKGEsIGIpCisgKglDaGVjayB3aGV0aGVyIGEgbmFtZSBiZWxvbmdzIHRvIGEgZG9tYWluLgorICogSW5wdXRzOgorICoJYSAtIHRoZSBkb21haW4gd2hvc2UgYW5jZXN0b3J5IGlzIGJlaW5nIHZlcmlmaWVkCisgKgliIC0gdGhlIHBvdGVudGlhbCBhbmNlc3RvciB3ZSdyZSBjaGVja2luZyBhZ2FpbnN0CisgKiBSZXR1cm46CisgKglib29sZWFuIC0gaXMgYSBhdCBvciBiZWxvdyBiPworICogTm90ZXM6CisgKglUcmFpbGluZyBkb3RzIGFyZSBmaXJzdCByZW1vdmVkIGZyb20gbmFtZSBhbmQgZG9tYWluLgorICoJQWx3YXlzIGNvbXBhcmUgY29tcGxldGUgc3ViZG9tYWlucywgbm90IG9ubHkgd2hldGhlciB0aGUKKyAqCWRvbWFpbiBuYW1lIGlzIHRoZSB0cmFpbGluZyBzdHJpbmcgb2YgdGhlIGdpdmVuIG5hbWUuCisgKgorICoJImhvc3QuZm9vYmFyLnRvcCIgbGllcyBpbiAiZm9vYmFyLnRvcCIgYW5kIGluICJ0b3AiIGFuZCBpbiAiIgorICoJYnV0IE5PVCBpbiAiYmFyLnRvcCIKKyAqLworCitpbnQKK25zX3NhbWVkb21haW4oY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYikgeworCXNpemVfdCBsYSwgbGI7CisJaW50IGRpZmYsIGksIGVzY2FwZWQ7CisJY29uc3QgY2hhciAqY3A7CisKKwlsYSA9IHN0cmxlbihhKTsKKwlsYiA9IHN0cmxlbihiKTsKKworCS8qIElnbm9yZSBhIHRyYWlsaW5nIGxhYmVsIHNlcGFyYXRvciAoaS5lLiBhbiB1bmVzY2FwZWQgZG90KSBpbiAnYScuICovCisJaWYgKGxhICE9IDBVICYmIGFbbGEgLSAxXSA9PSAnLicpIHsKKwkJZXNjYXBlZCA9IDA7CisJCS8qIE5vdGUgdGhpcyBsb29wIGRvZXNuJ3QgZ2V0IGV4ZWN1dGVkIGlmIGxhPT0xLiAqLworCQlmb3IgKGkgPSBsYSAtIDI7IGkgPj0gMDsgaS0tKQorCQkJaWYgKGFbaV0gPT0gJ1xcJykgeworCQkJCWlmIChlc2NhcGVkKQorCQkJCQllc2NhcGVkID0gMDsKKwkJCQllbHNlCisJCQkJCWVzY2FwZWQgPSAxOworCQkJfSBlbHNlCisJCQkJYnJlYWs7CisJCWlmICghZXNjYXBlZCkKKwkJCWxhLS07CisJfQorCisJLyogSWdub3JlIGEgdHJhaWxpbmcgbGFiZWwgc2VwYXJhdG9yIChpLmUuIGFuIHVuZXNjYXBlZCBkb3QpIGluICdiJy4gKi8KKwlpZiAobGIgIT0gMFUgJiYgYltsYiAtIDFdID09ICcuJykgeworCQllc2NhcGVkID0gMDsKKwkJLyogbm90ZSB0aGlzIGxvb3AgZG9lc24ndCBnZXQgZXhlY3V0ZWQgaWYgbGI9PTEgKi8KKwkJZm9yIChpID0gbGIgLSAyOyBpID49IDA7IGktLSkKKwkJCWlmIChiW2ldID09ICdcXCcpIHsKKwkJCQlpZiAoZXNjYXBlZCkKKwkJCQkJZXNjYXBlZCA9IDA7CisJCQkJZWxzZQorCQkJCQllc2NhcGVkID0gMTsKKwkJCX0gZWxzZQorCQkJCWJyZWFrOworCQlpZiAoIWVzY2FwZWQpCisJCQlsYi0tOworCX0KKworCS8qIGxiID09IDAgbWVhbnMgJ2InIGlzIHRoZSByb290IGRvbWFpbiwgc28gJ2EnIG11c3QgYmUgaW4gJ2InLiAqLworCWlmIChsYiA9PSAwVSkKKwkJcmV0dXJuICgxKTsKKworCS8qICdiJyBsb25nZXIgdGhhbiAnYScgbWVhbnMgJ2EnIGNhbid0IGJlIGluICdiJy4gKi8KKwlpZiAobGIgPiBsYSkKKwkJcmV0dXJuICgwKTsKKworCS8qICdhJyBhbmQgJ2InIGJlaW5nIGVxdWFsIGF0IHRoaXMgcG9pbnQgaW5kaWNhdGVzIHNhbWVuZXNzLiAqLworCWlmIChsYiA9PSBsYSkKKwkJcmV0dXJuIChzdHJuY2FzZWNtcChhLCBiLCBsYikgPT0gMCk7CisKKwkvKiBPaywgd2Uga25vdyBsYSA+IGxiLiAqLworCisJZGlmZiA9IGxhIC0gbGI7CisKKwkvKgorCSAqIElmICdhJyBpcyBvbmx5IDEgY2hhcmFjdGVyIGxvbmdlciB0aGFuICdiJywgdGhlbiBpdCBjYW4ndCBiZQorCSAqIGEgc3ViZG9tYWluIG9mICdiJyAoYmVjYXVzZSBvZiB0aGUgbmVlZCBmb3IgdGhlICcuJyBsYWJlbAorCSAqIHNlcGFyYXRvcikuCisJICovCisJaWYgKGRpZmYgPCAyKQorCQlyZXR1cm4gKDApOworCisJLyoKKwkgKiBJZiB0aGUgY2hhcmFjdGVyIGJlZm9yZSB0aGUgbGFzdCAnbGInIGNoYXJhY3RlcnMgb2YgJ2InCisJICogaXNuJ3QgJy4nLCB0aGVuIGl0IGNhbid0IGJlIGEgbWF0Y2ggKHRoaXMgbGV0cyB1cyBhdm9pZAorCSAqIGhhdmluZyAiZm9vYmFyLmNvbSIgbWF0Y2ggImJhci5jb20iKS4KKwkgKi8KKwlpZiAoYVtkaWZmIC0gMV0gIT0gJy4nKQorCQlyZXR1cm4gKDApOworCisJLyoKKwkgKiBXZSdyZSBub3Qgc3VyZSBhYm91dCB0aGF0ICcuJywgaG93ZXZlci4gIEl0IGNvdWxkIGJlIGVzY2FwZWQKKyAgICAgICAgICogYW5kIHRodXMgbm90IGEgcmVhbGx5IGEgbGFiZWwgc2VwYXJhdG9yLgorCSAqLworCWVzY2FwZWQgPSAwOworCWZvciAoaSA9IGRpZmYgLSAyOyBpID49IDA7IGktLSkKKwkJaWYgKGFbaV0gPT0gJ1xcJykgeworCQkJaWYgKGVzY2FwZWQpCisJCQkJZXNjYXBlZCA9IDA7CisJCQllbHNlCisJCQkJZXNjYXBlZCA9IDE7CisJCX0gZWxzZQorCQkJYnJlYWs7CisJaWYgKGVzY2FwZWQpCisJCXJldHVybiAoMCk7CisKKwkvKiBOb3cgY29tcGFyZSBhbGlnbmVkIHRyYWlsaW5nIHN1YnN0cmluZy4gKi8KKwljcCA9IGEgKyBkaWZmOworCXJldHVybiAoc3RybmNhc2VjbXAoY3AsIGIsIGxiKSA9PSAwKTsKK30KKworLyoKKyAqIGludAorICogbnNfc3ViZG9tYWluKGEsIGIpCisgKglpcyAiYSIgYSBzdWJkb21haW4gb2YgImIiPworICovCitpbnQKK25zX3N1YmRvbWFpbihjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiKSB7CisJcmV0dXJuIChuc19zYW1lbmFtZShhLCBiKSAhPSAxICYmIG5zX3NhbWVkb21haW4oYSwgYikpOworfQorI2VuZGlmCisKKy8qCisgKiBpbnQKKyAqIG5zX21ha2VjYW5vbihzcmMsIGRzdCwgZHN0c2l6ZSkKKyAqCW1ha2UgYSBjYW5vbmljYWwgY29weSBvZiBkb21haW4gbmFtZSAic3JjIgorICogbm90ZXM6CisgKglmb28gLT4gZm9vLgorICoJZm9vLiAtPiBmb28uCisgKglmb28uLiAtPiBmb28uCisgKglmb29cLiAtPiBmb29cLi4KKyAqCWZvb1xcLiAtPiBmb29cXC4KKyAqLworCitpbnQKK25zX21ha2VjYW5vbihjb25zdCBjaGFyICpzcmMsIGNoYXIgKmRzdCwgc2l6ZV90IGRzdHNpemUpIHsKKwlzaXplX3QgbiA9IHN0cmxlbihzcmMpOworCisJaWYgKG4gKyBzaXplb2YgIi4iID4gZHN0c2l6ZSkgewkJCS8qIE5vdGU6IHNpemVvZiA9PSAyICovCisJCWVycm5vID0gRU1TR1NJWkU7CisJCXJldHVybiAoLTEpOworCX0KKwlzdHJjcHkoZHN0LCBzcmMpOworCXdoaWxlIChuID49IDFVICYmIGRzdFtuIC0gMV0gPT0gJy4nKQkJLyogRW5kcyBpbiAiLiIgKi8KKwkJaWYgKG4gPj0gMlUgJiYgZHN0W24gLSAyXSA9PSAnXFwnICYmCS8qIEVuZHMgaW4gIlwuIiAqLworCQkgICAgKG4gPCAzVSB8fCBkc3RbbiAtIDNdICE9ICdcXCcpKQkvKiBCdXQgbm90ICJcXC4iICovCisJCQlicmVhazsKKwkJZWxzZQorCQkJZHN0Wy0tbl0gPSAnXDAnOworCWRzdFtuKytdID0gJy4nOworCWRzdFtuXSA9ICdcMCc7CisJcmV0dXJuICgwKTsKK30KKworLyoKKyAqIGludAorICogbnNfc2FtZW5hbWUoYSwgYikKKyAqCWRldGVybWluZSB3aGV0aGVyIGRvbWFpbiBuYW1lICJhIiBpcyB0aGUgc2FtZSBhcyBkb21haW4gbmFtZSAiYiIKKyAqIHJldHVybjoKKyAqCS0xIG9uIGVycm9yCisgKgkwIGlmIG5hbWVzIGRpZmZlcgorICoJMSBpZiBuYW1lcyBhcmUgdGhlIHNhbWUKKyAqLworCitpbnQKK25zX3NhbWVuYW1lKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIpIHsKKwljaGFyIHRhW05TX01BWEROQU1FXSwgdGJbTlNfTUFYRE5BTUVdOworCisJaWYgKG5zX21ha2VjYW5vbihhLCB0YSwgc2l6ZW9mIHRhKSA8IDAgfHwKKwkgICAgbnNfbWFrZWNhbm9uKGIsIHRiLCBzaXplb2YgdGIpIDwgMCkKKwkJcmV0dXJuICgtMSk7CisJaWYgKHN0cmNhc2VjbXAodGEsIHRiKSA9PSAwKQorCQlyZXR1cm4gKDEpOworCWVsc2UKKwkJcmV0dXJuICgwKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvbmV0YnNkL25hbWVzZXIvbnNfdHRsLmMgYi9saWJjL25ldGJzZC9uYW1lc2VyL25zX3R0bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NzgxOTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL25ldGJzZC9uYW1lc2VyL25zX3R0bC5jCkBAIC0wLDAgKzEsMTY0IEBACisvKgkkTmV0QlNEOiBuc190dGwuYyx2IDEuMiAyMDA0LzA1LzIwIDIwOjM1OjA1IGNocmlzdG9zIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKKyAqIENvcHlyaWdodCAoYykgMTk5NiwxOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAorICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaWZuZGVmIGxpbnQKKyNpZmRlZiBub3RkZWYKK3N0YXRpYyBjb25zdCBjaGFyIHJjc2lkW10gPSAiSWQ6IG5zX3R0bC5jLHYgMS4xLjIwNi4xIDIwMDQvMDMvMDkgMDg6MzM6NDUgbWFya2EgRXhwIjsKKyNlbHNlCitfX1JDU0lEKCIkTmV0QlNEOiBuc190dGwuYyx2IDEuMiAyMDA0LzA1LzIwIDIwOjM1OjA1IGNocmlzdG9zIEV4cCAkIik7CisjZW5kaWYKKyNlbmRpZgorCisvKiBJbXBvcnQuICovCisKKyNpbmNsdWRlICJhcnBhX25hbWVzZXIuaCIKKworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWZkZWYgU1BSSU5URl9DSEFSCisjIGRlZmluZSBTUFJJTlRGKHgpIHN0cmxlbihzcHJpbnRmLyoqL3gpCisjZWxzZQorIyBkZWZpbmUgU1BSSU5URih4KSAoKHNpemVfdClzcHJpbnRmIHgpCisjZW5kaWYKKworLyogRm9yd2FyZC4gKi8KKworc3RhdGljIGludAlmbXQxKGludCB0LCBjaGFyIHMsIGNoYXIgKipidWYsIHNpemVfdCAqYnVmbGVuKTsKKworLyogTWFjcm9zLiAqLworCisjZGVmaW5lIFQoeCkgaWYgKCh4KSA8IDApIHJldHVybiAoLTEpOyBlbHNlCisKKy8qIFB1YmxpYy4gKi8KKworaW50Cituc19mb3JtYXRfdHRsKHVfbG9uZyBzcmMsIGNoYXIgKmRzdCwgc2l6ZV90IGRzdGxlbikgeworCWNoYXIgKm9kc3QgPSBkc3Q7CisJaW50IHNlY3MsIG1pbnMsIGhvdXJzLCBkYXlzLCB3ZWVrcywgeDsKKwljaGFyICpwOworCisJc2VjcyA9IHNyYyAlIDYwOyAgIHNyYyAvPSA2MDsKKwltaW5zID0gc3JjICUgNjA7ICAgc3JjIC89IDYwOworCWhvdXJzID0gc3JjICUgMjQ7ICBzcmMgLz0gMjQ7CisJZGF5cyA9IHNyYyAlIDc7ICAgIHNyYyAvPSA3OworCXdlZWtzID0gc3JjOyAgICAgICBzcmMgPSAwOworCisJeCA9IDA7CisJaWYgKHdlZWtzKSB7CisJCVQoZm10MSh3ZWVrcywgJ1cnLCAmZHN0LCAmZHN0bGVuKSk7CisJCXgrKzsKKwl9CisJaWYgKGRheXMpIHsKKwkJVChmbXQxKGRheXMsICdEJywgJmRzdCwgJmRzdGxlbikpOworCQl4Kys7CisJfQorCWlmIChob3VycykgeworCQlUKGZtdDEoaG91cnMsICdIJywgJmRzdCwgJmRzdGxlbikpOworCQl4Kys7CisJfQorCWlmIChtaW5zKSB7CisJCVQoZm10MShtaW5zLCAnTScsICZkc3QsICZkc3RsZW4pKTsKKwkJeCsrOworCX0KKwlpZiAoc2VjcyB8fCAhKHdlZWtzIHx8IGRheXMgfHwgaG91cnMgfHwgbWlucykpIHsKKwkJVChmbXQxKHNlY3MsICdTJywgJmRzdCwgJmRzdGxlbikpOworCQl4Kys7CisJfQorCisJaWYgKHggPiAxKSB7CisJCWludCBjaDsKKworCQlmb3IgKHAgPSBvZHN0OyAoY2ggPSAqcCkgIT0gJ1wwJzsgcCsrKQorCQkJaWYgKGlzYXNjaWkoY2gpICYmIGlzdXBwZXIoY2gpKQorCQkJCSpwID0gdG9sb3dlcihjaCk7CisJfQorCisJcmV0dXJuIChkc3QgLSBvZHN0KTsKK30KKworI2lmbmRlZiBfTElCQworaW50Cituc19wYXJzZV90dGwoY29uc3QgY2hhciAqc3JjLCB1X2xvbmcgKmRzdCkgeworCXVfbG9uZyB0dGwsIHRtcDsKKwlpbnQgY2gsIGRpZ2l0cywgZGlydHk7CisKKwl0dGwgPSAwOworCXRtcCA9IDA7CisJZGlnaXRzID0gMDsKKwlkaXJ0eSA9IDA7CisJd2hpbGUgKChjaCA9ICpzcmMrKykgIT0gJ1wwJykgeworCQlpZiAoIWlzYXNjaWkoY2gpIHx8ICFpc3ByaW50KGNoKSkKKwkJCWdvdG8gZWludmFsOworCQlpZiAoaXNkaWdpdChjaCkpIHsKKwkJCXRtcCAqPSAxMDsKKwkJCXRtcCArPSAoY2ggLSAnMCcpOworCQkJZGlnaXRzKys7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoZGlnaXRzID09IDApCisJCQlnb3RvIGVpbnZhbDsKKwkJaWYgKGlzbG93ZXIoY2gpKQorCQkJY2ggPSB0b3VwcGVyKGNoKTsKKwkJc3dpdGNoIChjaCkgeworCQljYXNlICdXJzogIHRtcCAqPSA3OwkvKkZBTExUSFJPVUdIKi8KKwkJY2FzZSAnRCc6ICB0bXAgKj0gMjQ7CS8qRkFMTFRIUk9VR0gqLworCQljYXNlICdIJzogIHRtcCAqPSA2MDsJLypGQUxMVEhST1VHSCovCisJCWNhc2UgJ00nOiAgdG1wICo9IDYwOwkvKkZBTExUSFJPVUdIKi8KKwkJY2FzZSAnUyc6ICBicmVhazsKKwkJZGVmYXVsdDogICBnb3RvIGVpbnZhbDsKKwkJfQorCQl0dGwgKz0gdG1wOworCQl0bXAgPSAwOworCQlkaWdpdHMgPSAwOworCQlkaXJ0eSA9IDE7CisJfQorCWlmIChkaWdpdHMgPiAwKSB7CisJCWlmIChkaXJ0eSkKKwkJCWdvdG8gZWludmFsOworCQllbHNlCisJCQl0dGwgKz0gdG1wOworCX0KKwkqZHN0ID0gdHRsOworCXJldHVybiAoMCk7CisKKyBlaW52YWw6CisJZXJybm8gPSBFSU5WQUw7CisJcmV0dXJuICgtMSk7Cit9CisjZW5kaWYKKworLyogUHJpdmF0ZS4gKi8KKworc3RhdGljIGludAorZm10MShpbnQgdCwgY2hhciBzLCBjaGFyICoqYnVmLCBzaXplX3QgKmJ1ZmxlbikgeworCWNoYXIgdG1wWzUwXTsKKwlzaXplX3QgbGVuOworCisJbGVuID0gU1BSSU5URigodG1wLCAiJWQlYyIsIHQsIHMpKTsKKwlpZiAobGVuICsgMSA+ICpidWZsZW4pCisJCXJldHVybiAoLTEpOworCXN0cmNweSgqYnVmLCB0bXApOworCSpidWYgKz0gbGVuOworCSpidWZsZW4gLT0gbGVuOworCXJldHVybiAoMCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9uZXQvYmFzZTY0LmMgYi9saWJjL25ldGJzZC9uZXQvYmFzZTY0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBjYWFmNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvbmV0YnNkL25ldC9iYXNlNjQuYwpAQCAtMCwwICsxLDM0MCBAQAorLyoJJE5ldEJTRDogYmFzZTY0LmMsdiAxLjggMjAwMi8xMS8xMSAwMToxNToxNyB0aG9ycGVqIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTYgYnkgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElOVEVSTkVUIFNPRlRXQVJFIENPTlNPUlRJVU0gRElTQ0xBSU1TCisgKiBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIElOVEVSTkVUIFNPRlRXQVJFCisgKiBDT05TT1JUSVVNIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUgorICogUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMKKyAqIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUworICogU09GVFdBUkUuCisgKi8KKworLyoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NSBieSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzLCBJbmMuCisgKgorICogSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcywgSW5jLiAoaGVyZWluYWZ0ZXIgY2FsbGVkIElCTSkgZ3JhbnRzCisgKiBwZXJtaXNzaW9uIHVuZGVyIGl0cyBjb3B5cmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBTb2Z0d2FyZSB3aXRoIG9yIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZAorICogYWxsIHBhcmFncmFwaHMgb2YgdGhpcyBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IHRoZSBuYW1lIG9mIElCTQorICogbm90IGJlIHVzZWQgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBtYXJrZXRpbmcgb2YgYW55IHByb2R1Y3QgaW5jb3Jwb3JhdGluZworICogdGhlIFNvZnR3YXJlIG9yIG1vZGlmaWNhdGlvbnMgdGhlcmVvZiwgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvcgorICogcGVybWlzc2lvbi4KKyAqCisgKiBUbyB0aGUgZXh0ZW50IGl0IGhhcyBhIHJpZ2h0IHRvIGRvIHNvLCBJQk0gZ3JhbnRzIGFuIGltbXVuaXR5IGZyb20gc3VpdAorICogdW5kZXIgaXRzIHBhdGVudHMsIGlmIGFueSwgZm9yIHRoZSB1c2UsIHNhbGUgb3IgbWFudWZhY3R1cmUgb2YgcHJvZHVjdHMgdG8KKyAqIHRoZSBleHRlbnQgdGhhdCBzdWNoIHByb2R1Y3RzIGFyZSB1c2VkIGZvciBwZXJmb3JtaW5nIERvbWFpbiBOYW1lIFN5c3RlbQorICogZHluYW1pYyB1cGRhdGVzIGluIFRDUC9JUCBuZXR3b3JrcyBieSBtZWFucyBvZiB0aGUgU29mdHdhcmUuICBObyBpbW11bml0eSBpcworICogZ3JhbnRlZCBmb3IgYW55IHByb2R1Y3QgcGVyIHNlIG9yIGZvciBhbnkgb3RoZXIgZnVuY3Rpb24gb2YgYW55IHByb2R1Y3QuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIEFORCBJQk0gRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBCisgKiBQQVJUSUNVTEFSIFBVUlBPU0UuICBJTiBOTyBFVkVOVCBTSEFMTCBJQk0gQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIEFSSVNJTkcKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOCisgKiBJRiBJQk0gSVMgQVBQUklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCitfX1JDU0lEKCIkTmV0QlNEOiBiYXNlNjQuYyx2IDEuOCAyMDAyLzExLzExIDAxOjE1OjE3IHRob3JwZWogRXhwICQiKTsKKyNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2luY2x1ZGUgImFycGFfbmFtZXNlci5oIgorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpZmRlZiBBTkRST0lEX0NIQU5HRVMKKyNpbmNsdWRlICJyZXNvbHZfcHJpdmF0ZS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxyZXNvbHYuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworc3RhdGljIGNvbnN0IGNoYXIgQmFzZTY0W10gPQorCSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIjsKK3N0YXRpYyBjb25zdCBjaGFyIFBhZDY0ID0gJz0nOworCisvKiAoRnJvbSBSRkMxNTIxIGFuZCBkcmFmdC1pZXRmLWRuc3NlYy1zZWNleHQtMDMudHh0KQorICAgVGhlIGZvbGxvd2luZyBlbmNvZGluZyB0ZWNobmlxdWUgaXMgdGFrZW4gZnJvbSBSRkMgMTUyMSBieSBCb3JlbnN0ZWluCisgICBhbmQgRnJlZWQuICBJdCBpcyByZXByb2R1Y2VkIGhlcmUgaW4gYSBzbGlnaHRseSBlZGl0ZWQgZm9ybSBmb3IKKyAgIGNvbnZlbmllbmNlLgorCisgICBBIDY1LWNoYXJhY3RlciBzdWJzZXQgb2YgVVMtQVNDSUkgaXMgdXNlZCwgZW5hYmxpbmcgNiBiaXRzIHRvIGJlCisgICByZXByZXNlbnRlZCBwZXIgcHJpbnRhYmxlIGNoYXJhY3Rlci4gKFRoZSBleHRyYSA2NXRoIGNoYXJhY3RlciwgIj0iLAorICAgaXMgdXNlZCB0byBzaWduaWZ5IGEgc3BlY2lhbCBwcm9jZXNzaW5nIGZ1bmN0aW9uLikKKworICAgVGhlIGVuY29kaW5nIHByb2Nlc3MgcmVwcmVzZW50cyAyNC1iaXQgZ3JvdXBzIG9mIGlucHV0IGJpdHMgYXMgb3V0cHV0CisgICBzdHJpbmdzIG9mIDQgZW5jb2RlZCBjaGFyYWN0ZXJzLiBQcm9jZWVkaW5nIGZyb20gbGVmdCB0byByaWdodCwgYQorICAgMjQtYml0IGlucHV0IGdyb3VwIGlzIGZvcm1lZCBieSBjb25jYXRlbmF0aW5nIDMgOC1iaXQgaW5wdXQgZ3JvdXBzLgorICAgVGhlc2UgMjQgYml0cyBhcmUgdGhlbiB0cmVhdGVkIGFzIDQgY29uY2F0ZW5hdGVkIDYtYml0IGdyb3VwcywgZWFjaAorICAgb2Ygd2hpY2ggaXMgdHJhbnNsYXRlZCBpbnRvIGEgc2luZ2xlIGRpZ2l0IGluIHRoZSBiYXNlNjQgYWxwaGFiZXQuCisKKyAgIEVhY2ggNi1iaXQgZ3JvdXAgaXMgdXNlZCBhcyBhbiBpbmRleCBpbnRvIGFuIGFycmF5IG9mIDY0IHByaW50YWJsZQorICAgY2hhcmFjdGVycy4gVGhlIGNoYXJhY3RlciByZWZlcmVuY2VkIGJ5IHRoZSBpbmRleCBpcyBwbGFjZWQgaW4gdGhlCisgICBvdXRwdXQgc3RyaW5nLgorCisgICAgICAgICAgICAgICAgICAgICAgICAgVGFibGUgMTogVGhlIEJhc2U2NCBBbHBoYWJldAorCisgICAgICBWYWx1ZSBFbmNvZGluZyAgVmFsdWUgRW5jb2RpbmcgIFZhbHVlIEVuY29kaW5nICBWYWx1ZSBFbmNvZGluZworICAgICAgICAgIDAgQSAgICAgICAgICAgIDE3IFIgICAgICAgICAgICAzNCBpICAgICAgICAgICAgNTEgegorICAgICAgICAgIDEgQiAgICAgICAgICAgIDE4IFMgICAgICAgICAgICAzNSBqICAgICAgICAgICAgNTIgMAorICAgICAgICAgIDIgQyAgICAgICAgICAgIDE5IFQgICAgICAgICAgICAzNiBrICAgICAgICAgICAgNTMgMQorICAgICAgICAgIDMgRCAgICAgICAgICAgIDIwIFUgICAgICAgICAgICAzNyBsICAgICAgICAgICAgNTQgMgorICAgICAgICAgIDQgRSAgICAgICAgICAgIDIxIFYgICAgICAgICAgICAzOCBtICAgICAgICAgICAgNTUgMworICAgICAgICAgIDUgRiAgICAgICAgICAgIDIyIFcgICAgICAgICAgICAzOSBuICAgICAgICAgICAgNTYgNAorICAgICAgICAgIDYgRyAgICAgICAgICAgIDIzIFggICAgICAgICAgICA0MCBvICAgICAgICAgICAgNTcgNQorICAgICAgICAgIDcgSCAgICAgICAgICAgIDI0IFkgICAgICAgICAgICA0MSBwICAgICAgICAgICAgNTggNgorICAgICAgICAgIDggSSAgICAgICAgICAgIDI1IFogICAgICAgICAgICA0MiBxICAgICAgICAgICAgNTkgNworICAgICAgICAgIDkgSiAgICAgICAgICAgIDI2IGEgICAgICAgICAgICA0MyByICAgICAgICAgICAgNjAgOAorICAgICAgICAgMTAgSyAgICAgICAgICAgIDI3IGIgICAgICAgICAgICA0NCBzICAgICAgICAgICAgNjEgOQorICAgICAgICAgMTEgTCAgICAgICAgICAgIDI4IGMgICAgICAgICAgICA0NSB0ICAgICAgICAgICAgNjIgKworICAgICAgICAgMTIgTSAgICAgICAgICAgIDI5IGQgICAgICAgICAgICA0NiB1ICAgICAgICAgICAgNjMgLworICAgICAgICAgMTMgTiAgICAgICAgICAgIDMwIGUgICAgICAgICAgICA0NyB2CisgICAgICAgICAxNCBPICAgICAgICAgICAgMzEgZiAgICAgICAgICAgIDQ4IHcgICAgICAgICAocGFkKSA9CisgICAgICAgICAxNSBQICAgICAgICAgICAgMzIgZyAgICAgICAgICAgIDQ5IHgKKyAgICAgICAgIDE2IFEgICAgICAgICAgICAzMyBoICAgICAgICAgICAgNTAgeQorCisgICBTcGVjaWFsIHByb2Nlc3NpbmcgaXMgcGVyZm9ybWVkIGlmIGZld2VyIHRoYW4gMjQgYml0cyBhcmUgYXZhaWxhYmxlCisgICBhdCB0aGUgZW5kIG9mIHRoZSBkYXRhIGJlaW5nIGVuY29kZWQuICBBIGZ1bGwgZW5jb2RpbmcgcXVhbnR1bSBpcworICAgYWx3YXlzIGNvbXBsZXRlZCBhdCB0aGUgZW5kIG9mIGEgcXVhbnRpdHkuICBXaGVuIGZld2VyIHRoYW4gMjQgaW5wdXQKKyAgIGJpdHMgYXJlIGF2YWlsYWJsZSBpbiBhbiBpbnB1dCBncm91cCwgemVybyBiaXRzIGFyZSBhZGRlZCAob24gdGhlCisgICByaWdodCkgdG8gZm9ybSBhbiBpbnRlZ3JhbCBudW1iZXIgb2YgNi1iaXQgZ3JvdXBzLiAgUGFkZGluZyBhdCB0aGUKKyAgIGVuZCBvZiB0aGUgZGF0YSBpcyBwZXJmb3JtZWQgdXNpbmcgdGhlICc9JyBjaGFyYWN0ZXIuCisKKyAgIFNpbmNlIGFsbCBiYXNlNjQgaW5wdXQgaXMgYW4gaW50ZWdyYWwgbnVtYmVyIG9mIG9jdGV0cywgb25seSB0aGUKKyAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIGZvbGxvd2luZyBjYXNlcyBjYW4gYXJpc2U6CisKKyAgICAgICAoMSkgdGhlIGZpbmFsIHF1YW50dW0gb2YgZW5jb2RpbmcgaW5wdXQgaXMgYW4gaW50ZWdyYWwKKyAgICAgICAgICAgbXVsdGlwbGUgb2YgMjQgYml0czsgaGVyZSwgdGhlIGZpbmFsIHVuaXQgb2YgZW5jb2RlZAorCSAgIG91dHB1dCB3aWxsIGJlIGFuIGludGVncmFsIG11bHRpcGxlIG9mIDQgY2hhcmFjdGVycworCSAgIHdpdGggbm8gIj0iIHBhZGRpbmcsCisgICAgICAgKDIpIHRoZSBmaW5hbCBxdWFudHVtIG9mIGVuY29kaW5nIGlucHV0IGlzIGV4YWN0bHkgOCBiaXRzOworICAgICAgICAgICBoZXJlLCB0aGUgZmluYWwgdW5pdCBvZiBlbmNvZGVkIG91dHB1dCB3aWxsIGJlIHR3bworCSAgIGNoYXJhY3RlcnMgZm9sbG93ZWQgYnkgdHdvICI9IiBwYWRkaW5nIGNoYXJhY3RlcnMsIG9yCisgICAgICAgKDMpIHRoZSBmaW5hbCBxdWFudHVtIG9mIGVuY29kaW5nIGlucHV0IGlzIGV4YWN0bHkgMTYgYml0czsKKyAgICAgICAgICAgaGVyZSwgdGhlIGZpbmFsIHVuaXQgb2YgZW5jb2RlZCBvdXRwdXQgd2lsbCBiZSB0aHJlZQorCSAgIGNoYXJhY3RlcnMgZm9sbG93ZWQgYnkgb25lICI9IiBwYWRkaW5nIGNoYXJhY3Rlci4KKyAgICovCisKK2ludAorYjY0X250b3Aoc3JjLCBzcmNsZW5ndGgsIHRhcmdldCwgdGFyZ3NpemUpCisJdV9jaGFyIGNvbnN0ICpzcmM7CisJc2l6ZV90IHNyY2xlbmd0aDsKKwljaGFyICp0YXJnZXQ7CisJc2l6ZV90IHRhcmdzaXplOworeworCXNpemVfdCBkYXRhbGVuZ3RoID0gMDsKKwl1X2NoYXIgaW5wdXRbM107CisJdV9jaGFyIG91dHB1dFs0XTsKKwlzaXplX3QgaTsKKworCWFzc2VydChzcmMgIT0gTlVMTCk7CisJYXNzZXJ0KHRhcmdldCAhPSBOVUxMKTsKKworCXdoaWxlICgyIDwgc3JjbGVuZ3RoKSB7CisJCWlucHV0WzBdID0gKnNyYysrOworCQlpbnB1dFsxXSA9ICpzcmMrKzsKKwkJaW5wdXRbMl0gPSAqc3JjKys7CisJCXNyY2xlbmd0aCAtPSAzOworCisJCW91dHB1dFswXSA9ICh1X2ludDMyX3QpaW5wdXRbMF0gPj4gMjsKKwkJb3V0cHV0WzFdID0gKCh1X2ludDMyX3QpKGlucHV0WzBdICYgMHgwMykgPDwgNCkgKworCQkgICAgKCh1X2ludDMyX3QpaW5wdXRbMV0gPj4gNCk7CisJCW91dHB1dFsyXSA9ICgodV9pbnQzMl90KShpbnB1dFsxXSAmIDB4MGYpIDw8IDIpICsKKwkJICAgICgodV9pbnQzMl90KWlucHV0WzJdID4+IDYpOworCQlvdXRwdXRbM10gPSBpbnB1dFsyXSAmIDB4M2Y7CisJCWFzc2VydChvdXRwdXRbMF0gPCA2NCk7CisJCWFzc2VydChvdXRwdXRbMV0gPCA2NCk7CisJCWFzc2VydChvdXRwdXRbMl0gPCA2NCk7CisJCWFzc2VydChvdXRwdXRbM10gPCA2NCk7CisKKwkJaWYgKGRhdGFsZW5ndGggKyA0ID4gdGFyZ3NpemUpCisJCQlyZXR1cm4gKC0xKTsKKwkJdGFyZ2V0W2RhdGFsZW5ndGgrK10gPSBCYXNlNjRbb3V0cHV0WzBdXTsKKwkJdGFyZ2V0W2RhdGFsZW5ndGgrK10gPSBCYXNlNjRbb3V0cHV0WzFdXTsKKwkJdGFyZ2V0W2RhdGFsZW5ndGgrK10gPSBCYXNlNjRbb3V0cHV0WzJdXTsKKwkJdGFyZ2V0W2RhdGFsZW5ndGgrK10gPSBCYXNlNjRbb3V0cHV0WzNdXTsKKwl9CisKKwkvKiBOb3cgd2Ugd29ycnkgYWJvdXQgcGFkZGluZy4gKi8KKwlpZiAoMCAhPSBzcmNsZW5ndGgpIHsKKwkJLyogR2V0IHdoYXQncyBsZWZ0LiAqLworCQlpbnB1dFswXSA9IGlucHV0WzFdID0gaW5wdXRbMl0gPSAnXDAnOworCQlmb3IgKGkgPSAwOyBpIDwgc3JjbGVuZ3RoOyBpKyspCisJCQlpbnB1dFtpXSA9ICpzcmMrKzsKKworCQlvdXRwdXRbMF0gPSAodV9pbnQzMl90KWlucHV0WzBdID4+IDI7CisJCW91dHB1dFsxXSA9ICgodV9pbnQzMl90KShpbnB1dFswXSAmIDB4MDMpIDw8IDQpICsKKwkJICAgICgodV9pbnQzMl90KWlucHV0WzFdID4+IDQpOworCQlvdXRwdXRbMl0gPSAoKHVfaW50MzJfdCkoaW5wdXRbMV0gJiAweDBmKSA8PCAyKSArCisJCSAgICAoKHVfaW50MzJfdClpbnB1dFsyXSA+PiA2KTsKKwkJYXNzZXJ0KG91dHB1dFswXSA8IDY0KTsKKwkJYXNzZXJ0KG91dHB1dFsxXSA8IDY0KTsKKwkJYXNzZXJ0KG91dHB1dFsyXSA8IDY0KTsKKworCQlpZiAoZGF0YWxlbmd0aCArIDQgPiB0YXJnc2l6ZSkKKwkJCXJldHVybiAoLTEpOworCQl0YXJnZXRbZGF0YWxlbmd0aCsrXSA9IEJhc2U2NFtvdXRwdXRbMF1dOworCQl0YXJnZXRbZGF0YWxlbmd0aCsrXSA9IEJhc2U2NFtvdXRwdXRbMV1dOworCQlpZiAoc3JjbGVuZ3RoID09IDEpCisJCQl0YXJnZXRbZGF0YWxlbmd0aCsrXSA9IFBhZDY0OworCQllbHNlCisJCQl0YXJnZXRbZGF0YWxlbmd0aCsrXSA9IEJhc2U2NFtvdXRwdXRbMl1dOworCQl0YXJnZXRbZGF0YWxlbmd0aCsrXSA9IFBhZDY0OworCX0KKwlpZiAoZGF0YWxlbmd0aCA+PSB0YXJnc2l6ZSkKKwkJcmV0dXJuICgtMSk7CisJdGFyZ2V0W2RhdGFsZW5ndGhdID0gJ1wwJzsJLyogUmV0dXJuZWQgdmFsdWUgZG9lc24ndCBjb3VudCBcMC4gKi8KKwlyZXR1cm4gKGRhdGFsZW5ndGgpOworfQorCisvKiBza2lwcyBhbGwgd2hpdGVzcGFjZSBhbnl3aGVyZS4KKyAgIGNvbnZlcnRzIGNoYXJhY3RlcnMsIGZvdXIgYXQgYSB0aW1lLCBzdGFydGluZyBhdCAob3IgYWZ0ZXIpCisgICBzcmMgZnJvbSBiYXNlIC0gNjQgbnVtYmVycyBpbnRvIHRocmVlIDggYml0IGJ5dGVzIGluIHRoZSB0YXJnZXQgYXJlYS4KKyAgIGl0IHJldHVybnMgdGhlIG51bWJlciBvZiBkYXRhIGJ5dGVzIHN0b3JlZCBhdCB0aGUgdGFyZ2V0LCBvciAtMSBvbiBlcnJvci4KKyAqLworCitpbnQKK2I2NF9wdG9uKHNyYywgdGFyZ2V0LCB0YXJnc2l6ZSkKKwljaGFyIGNvbnN0ICpzcmM7CisJdV9jaGFyICp0YXJnZXQ7CisJc2l6ZV90IHRhcmdzaXplOworeworCXNpemVfdCB0YXJpbmRleDsKKwlpbnQgc3RhdGUsIGNoOworCWNoYXIgKnBvczsKKworCWFzc2VydChzcmMgIT0gTlVMTCk7CisJYXNzZXJ0KHRhcmdldCAhPSBOVUxMKTsKKworCXN0YXRlID0gMDsKKwl0YXJpbmRleCA9IDA7CisKKwl3aGlsZSAoKGNoID0gKHVfY2hhcikgKnNyYysrKSAhPSAnXDAnKSB7CisJCWlmIChpc3NwYWNlKGNoKSkJLyogU2tpcCB3aGl0ZXNwYWNlIGFueXdoZXJlLiAqLworCQkJY29udGludWU7CisKKwkJaWYgKGNoID09IFBhZDY0KQorCQkJYnJlYWs7CisKKwkJcG9zID0gc3RyY2hyKEJhc2U2NCwgY2gpOworCQlpZiAocG9zID09IDApIAkJLyogQSBub24tYmFzZTY0IGNoYXJhY3Rlci4gKi8KKwkJCXJldHVybiAoLTEpOworCisJCXN3aXRjaCAoc3RhdGUpIHsKKwkJY2FzZSAwOgorCQkJaWYgKHRhcmdldCkgeworCQkJCWlmICh0YXJpbmRleCA+PSB0YXJnc2l6ZSkKKwkJCQkJcmV0dXJuICgtMSk7CisJCQkJdGFyZ2V0W3RhcmluZGV4XSA9IChwb3MgLSBCYXNlNjQpIDw8IDI7CisJCQl9CisJCQlzdGF0ZSA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJaWYgKHRhcmdldCkgeworCQkJCWlmICh0YXJpbmRleCArIDEgPj0gdGFyZ3NpemUpCisJCQkJCXJldHVybiAoLTEpOworCQkJCXRhcmdldFt0YXJpbmRleF0gfD0KKwkJCQkgICAgKHVfaW50MzJfdCkocG9zIC0gQmFzZTY0KSA+PiA0OworCQkJCXRhcmdldFt0YXJpbmRleCsxXSAgPSAoKHBvcyAtIEJhc2U2NCkgJiAweDBmKQorCQkJCQkJCTw8IDQgOworCQkJfQorCQkJdGFyaW5kZXgrKzsKKwkJCXN0YXRlID0gMjsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlpZiAodGFyZ2V0KSB7CisJCQkJaWYgKHRhcmluZGV4ICsgMSA+PSB0YXJnc2l6ZSkKKwkJCQkJcmV0dXJuICgtMSk7CisJCQkJdGFyZ2V0W3RhcmluZGV4XSB8PQorCQkJCQkodV9pbnQzMl90KShwb3MgLSBCYXNlNjQpID4+IDI7CisJCQkJdGFyZ2V0W3RhcmluZGV4KzFdID0gKChwb3MgLSBCYXNlNjQpICYgMHgwMykKKwkJCQkJCQk8PCA2OworCQkJfQorCQkJdGFyaW5kZXgrKzsKKwkJCXN0YXRlID0gMzsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQlpZiAodGFyZ2V0KSB7CisJCQkJaWYgKHRhcmluZGV4ID49IHRhcmdzaXplKQorCQkJCQlyZXR1cm4gKC0xKTsKKwkJCQl0YXJnZXRbdGFyaW5kZXhdIHw9IChwb3MgLSBCYXNlNjQpOworCQkJfQorCQkJdGFyaW5kZXgrKzsKKwkJCXN0YXRlID0gMDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYWJvcnQoKTsKKwkJfQorCX0KKworCS8qCisJICogV2UgYXJlIGRvbmUgZGVjb2RpbmcgQmFzZS02NCBjaGFycy4gIExldCdzIHNlZSBpZiB3ZSBlbmRlZAorCSAqIG9uIGEgYnl0ZSBib3VuZGFyeSwgYW5kL29yIHdpdGggZXJyb25lb3VzIHRyYWlsaW5nIGNoYXJhY3RlcnMuCisJICovCisKKwlpZiAoY2ggPT0gUGFkNjQpIHsJCS8qIFdlIGdvdCBhIHBhZCBjaGFyLiAqLworCQljaCA9ICpzcmMrKzsJCS8qIFNraXAgaXQsIGdldCBuZXh0LiAqLworCQlzd2l0Y2ggKHN0YXRlKSB7CisJCWNhc2UgMDoJCS8qIEludmFsaWQgPSBpbiBmaXJzdCBwb3NpdGlvbiAqLworCQljYXNlIDE6CQkvKiBJbnZhbGlkID0gaW4gc2Vjb25kIHBvc2l0aW9uICovCisJCQlyZXR1cm4gKC0xKTsKKworCQljYXNlIDI6CQkvKiBWYWxpZCwgbWVhbnMgb25lIGJ5dGUgb2YgaW5mbyAqLworCQkJLyogU2tpcCBhbnkgbnVtYmVyIG9mIHNwYWNlcy4gKi8KKwkJCWZvciAoOyBjaCAhPSAnXDAnOyBjaCA9ICh1X2NoYXIpICpzcmMrKykKKwkJCQlpZiAoIWlzc3BhY2UoY2gpKQorCQkJCQlicmVhazsKKwkJCS8qIE1ha2Ugc3VyZSB0aGVyZSBpcyBhbm90aGVyIHRyYWlsaW5nID0gc2lnbi4gKi8KKwkJCWlmIChjaCAhPSBQYWQ2NCkKKwkJCQlyZXR1cm4gKC0xKTsKKwkJCWNoID0gKnNyYysrOwkJLyogU2tpcCB0aGUgPSAqLworCQkJLyogRmFsbCB0aHJvdWdoIHRvICJzaW5nbGUgdHJhaWxpbmcgPSIgY2FzZS4gKi8KKwkJCS8qIEZBTExUSFJPVUdIICovCisKKwkJY2FzZSAzOgkJLyogVmFsaWQsIG1lYW5zIHR3byBieXRlcyBvZiBpbmZvICovCisJCQkvKgorCQkJICogV2Uga25vdyB0aGlzIGNoYXIgaXMgYW4gPS4gIElzIHRoZXJlIGFueXRoaW5nIGJ1dAorCQkJICogd2hpdGVzcGFjZSBhZnRlciBpdD8KKwkJCSAqLworCQkJZm9yICg7IGNoICE9ICdcMCc7IGNoID0gKHVfY2hhcikgKnNyYysrKQorCQkJCWlmICghaXNzcGFjZShjaCkpCisJCQkJCXJldHVybiAoLTEpOworCisJCQkvKgorCQkJICogTm93IG1ha2Ugc3VyZSBmb3IgY2FzZXMgMiBhbmQgMyB0aGF0IHRoZSAiZXh0cmEiCisJCQkgKiBiaXRzIHRoYXQgc2xvcHBlZCBwYXN0IHRoZSBsYXN0IGZ1bGwgYnl0ZSB3ZXJlCisJCQkgKiB6ZXJvcy4gIElmIHdlIGRvbid0IGNoZWNrIHRoZW0sIHRoZXkgYmVjb21lIGEKKwkJCSAqIHN1YmxpbWluYWwgY2hhbm5lbC4KKwkJCSAqLworCQkJaWYgKHRhcmdldCAmJiB0YXJnZXRbdGFyaW5kZXhdICE9IDApCisJCQkJcmV0dXJuICgtMSk7CisJCX0KKwl9IGVsc2UgeworCQkvKgorCQkgKiBXZSBlbmRlZCBieSBzZWVpbmcgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLiAgTWFrZSBzdXJlIHdlCisJCSAqIGhhdmUgbm8gcGFydGlhbCBieXRlcyBseWluZyBhcm91bmQuCisJCSAqLworCQlpZiAoc3RhdGUgIT0gMCkKKwkJCXJldHVybiAoLTEpOworCX0KKworCXJldHVybiAodGFyaW5kZXgpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9uZXRic2QvbmV0L2dldGFkZHJpbmZvLmMgYi9saWJjL25ldGJzZC9uZXQvZ2V0YWRkcmluZm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGQzZDk3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9uZXRic2QvbmV0L2dldGFkZHJpbmZvLmMKQEAgLTAsMCArMSwxNzkyIEBACisvKgkkTmV0QlNEOiBnZXRhZGRyaW5mby5jLHYgMS44MiAyMDA2LzAzLzI1IDEyOjA5OjQwIHJwYXVsbyBFeHAgJAkqLworLyoJJEtBTUU6IGdldGFkZHJpbmZvLmMsdiAxLjI5IDIwMDAvMDgvMzEgMTc6MjY6NTcgaXRvanVuIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcsIGFuZCAxOTk4IFdJREUgUHJvamVjdC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBQUk9KRUNUIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUFJPSkVDVCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgKiBJc3N1ZXMgdG8gYmUgZGlzY3Vzc2VkOgorICogLSBUaHJlYWQgc2FmZS1uZXNzIG11c3QgYmUgY2hlY2tlZC4KKyAqIC0gUmV0dXJuIHZhbHVlcy4gIFRoZXJlIGFyZSBub25zdGFuZGFyZCByZXR1cm4gdmFsdWVzIGRlZmluZWQgYW5kIHVzZWQKKyAqICAgaW4gdGhlIHNvdXJjZSBjb2RlLiAgVGhpcyBpcyBiZWNhdXNlIFJGQzI1NTMgaXMgc2lsZW50IGFib3V0IHdoaWNoIGVycm9yCisgKiAgIGNvZGUgbXVzdCBiZSByZXR1cm5lZCBmb3Igd2hpY2ggc2l0dWF0aW9uLgorICogLSBJUHY0IGNsYXNzZnVsIChzaG9ydGVuZWQpIGZvcm0uICBSRkMyNTUzIGlzIHNpbGVudCBhYm91dCBpdC4gIFhORVQgNS4yCisgKiAgIHNheXMgdG8gdXNlIGluZXRfYXRvbigpIHRvIGNvbnZlcnQgSVB2NCBudW1lcmljIHRvIGJpbmFyeSAoYWxvd3MKKyAqICAgY2xhc3NmdWwgZm9ybSBhcyBhIHJlc3VsdCkuCisgKiAgIGN1cnJlbnQgY29kZSAtIGRpc2FsbG93IGNsYXNzZnVsIGZvcm0gZm9yIElQdjQgKGR1ZSB0byB1c2Ugb2YgaW5ldF9wdG9uKS4KKyAqIC0gZnJlZWFkZHJpbmZvKE5VTEwpLiAgUkZDMjU1MyBpcyBzaWxlbnQgYWJvdXQgaXQuICBYTkVUIDUuMiBzYXlzIGl0IGlzCisgKiAgIGludmFsaWQuCisgKiAgIGN1cnJlbnQgY29kZSAtIFNFR1Ygb24gZnJlZWFkZHJpbmZvKE5VTEwpCisgKiBOb3RlOgorICogLSBXZSB1c2UgZ2V0aXBub2RlYnluYW1lKCkganVzdCBmb3IgdGhyZWFkLXNhZmVuZXNzLiAgVGhlcmUncyBubyBpbnRlbnQKKyAqICAgdG8gbGV0IGl0IGRvIFBGX1VOU1BFQyAoYWN0dWFsbHkgd2UgbmV2ZXIgcGFzcyBQRl9VTlNQRUMgdG8KKyAqICAgZ2V0aXBub2RlYnluYW1lKCkuCisgKiAtIFRoZSBjb2RlIGZpbHRlcnMgb3V0IEFGcyB0aGF0IGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBrZXJuZWwsCisgKiAgIHdoZW4gZ2xvYmJpbmcgTlVMTCBob3N0bmFtZSAodG8gbG9vcGJhY2ssIG9yIHdpbGRjYXJkKS4gIElzIGl0IHRoZSByaWdodAorICogICB0aGluZyB0byBkbz8gIFdoYXQgaXMgdGhlIHJlbGF0aW9uc2hpcCB3aXRoIHBvc3QtUkZDMjU1MyBBSV9BRERSQ09ORklHCisgKiAgIGluIGFpX2ZsYWdzPworICogLSAocG9zdC0yNTUzKSBzZW1hbnRpY3Mgb2YgQUlfQUREUkNPTkZJRyBpdHNlbGYgaXMgdG9vIHZhZ3VlLgorICogICAoMSkgd2hhdCBzaG91bGQgd2UgZG8gYWdhaW5zdCBudW1lcmljIGhvc3RuYW1lICgyKSB3aGF0IHNob3VsZCB3ZSBkbworICogICBhZ2FpbnN0IE5VTEwgaG9zdG5hbWUgKDMpIHdoYXQgaXMgQUlfQUREUkNPTkZJRyBpdHNlbGYuICBBRiBub3QgcmVhZHk/CisgKiAgIG5vbi1sb29wYmFjayBhZGRyZXNzIGNvbmZpZ3VyZWQ/ICBnbG9iYWwgYWRkcmVzcyBjb25maWd1cmVkPworICogLSBUbyBhdm9pZCBzZWFyY2ggb3JkZXIgaXNzdWUsIHdlIGhhdmUgYSBiaWcgYW1vdW50IG9mIGNvZGUgZHVwbGljYXRlCisgKiAgIGZyb20gZ2V0aG5hbWFkZHIuYyBhbmQgc29tZSBvdGhlciBwbGFjZXMuICBUaGUgaXNzdWVzIHRoYXQgdGhlcmUncyBubworICogICBsb3dlciBsYXllciBmdW5jdGlvbiB0byBsb29rdXAgIklQdjQgb3IgSVB2NiIgcmVjb3JkLiAgQ2FsbGluZworICogICBnZXRob3N0YnluYW1lMiBmcm9tIGdldGFkZHJpbmZvIHdpbGwgZW5kIHVwIGluIHdyb25nIHNlYXJjaCBvcmRlciwgYXMKKyAqICAgZm9sbG93czoKKyAqCS0gVGhlIGNvZGUgbWFrZXMgdXNlIG9mIGZvbGxvd2luZyBjYWxscyB3aGVuIGFza2VkIHRvIHJlc29sdmVyIHdpdGgKKyAqCSAgYWlfZmFtaWx5ICA9IFBGX1VOU1BFQzoKKyAqCQlnZXRpcG5vZGVieW5hbWUoaG9zdCwgQUZfSU5FVDYpOworICoJCWdldGlwbm9kZWJ5bmFtZShob3N0LCBBRl9JTkVUKTsKKyAqCSAgVGhpcyB3aWxsIHJlc3VsdCBpbiB0aGUgZm9sbG93aW5nIHF1ZXJpZXMgaWYgdGhlIG5vZGUgaXMgY29uZmlndXJlIHRvCisgKgkgIHByZWZlciAvZXRjL2hvc3RzIHRoYW4gRE5TOgorICoJCWxvb2t1cCAvZXRjL2hvc3RzIGZvciBJUHY2IGFkZHJlc3MKKyAqCQlsb29rdXAgRE5TIGZvciBJUHY2IGFkZHJlc3MKKyAqCQlsb29rdXAgL2V0Yy9ob3N0cyBmb3IgSVB2NCBhZGRyZXNzCisgKgkJbG9va3VwIEROUyBmb3IgSVB2NCBhZGRyZXNzCisgKgkgIHdoaWNoIG1heSBub3QgbWVldCBwZW9wbGUncyByZXF1aXJlbWVudC4KKyAqCSAgVGhlIHJpZ2h0IHRoaW5nIHRvIGhhcHBlbiBpcyB0byBoYXZlIHVuZGVybHlpbmcgbGF5ZXIgd2hpY2ggZG9lcworICoJICBQRl9VTlNQRUMgbG9va3VwIChsb29rdXAgYm90aCkgYW5kIHJldHVybiBjaGFpbiBvZiBhZGRyaW5mb3MuCisgKgkgIFRoaXMgd291bGQgcmVzdWx0IGluIGEgYml0IG9mIGNvZGUgZHVwbGljYXRlIHdpdGggX2Ruc19naGJ5bmFtZSgpIGFuZAorICoJICBmcmllbmRzLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8bmV0L2lmLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2luY2x1ZGUgImFycGFfbmFtZXNlci5oIgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxuZXRkYi5oPgorI2luY2x1ZGUgInJlc29sdl9wcml2YXRlLmgiCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgPHN5c2xvZy5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgIm5zc3dpdGNoLmgiCisKKyNkZWZpbmUgU1VDQ0VTUyAwCisjZGVmaW5lIEFOWSAwCisjZGVmaW5lIFlFUyAxCisjZGVmaW5lIE5PICAwCisKK3N0YXRpYyBjb25zdCBjaGFyIGluX2FkZHJhbnlbXSA9IHsgMCwgMCwgMCwgMCB9Oworc3RhdGljIGNvbnN0IGNoYXIgaW5fbG9vcGJhY2tbXSA9IHsgMTI3LCAwLCAwLCAxIH07CisjaWZkZWYgSU5FVDYKK3N0YXRpYyBjb25zdCBjaGFyIGluNl9hZGRyYW55W10gPSB7CisJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMAorfTsKK3N0YXRpYyBjb25zdCBjaGFyIGluNl9sb29wYmFja1tdID0geworCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEKK307CisjZW5kaWYKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhZmQgeworCWludCBhX2FmOworCWludCBhX2FkZHJsZW47CisJaW50IGFfc29ja2xlbjsKKwlpbnQgYV9vZmY7CisJY29uc3QgY2hhciAqYV9hZGRyYW55OworCWNvbnN0IGNoYXIgKmFfbG9vcGJhY2s7CisJaW50IGFfc2NvcGVkOworfSBhZmRsIFtdID0geworI2lmZGVmIElORVQ2CisJe1BGX0lORVQ2LCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSwKKwkgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpLAorCSBvZmZzZXRvZihzdHJ1Y3Qgc29ja2FkZHJfaW42LCBzaW42X2FkZHIpLAorCSBpbjZfYWRkcmFueSwgaW42X2xvb3BiYWNrLCAxfSwKKyNlbmRpZgorCXtQRl9JTkVULCBzaXplb2Yoc3RydWN0IGluX2FkZHIpLAorCSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSwKKwkgb2Zmc2V0b2Yoc3RydWN0IHNvY2thZGRyX2luLCBzaW5fYWRkciksCisJIGluX2FkZHJhbnksIGluX2xvb3BiYWNrLCAwfSwKKwl7MCwgMCwgMCwgMCwgTlVMTCwgTlVMTCwgMH0sCit9OworCitzdHJ1Y3QgZXhwbG9yZSB7CisJaW50IGVfYWY7CisJaW50IGVfc29ja3R5cGU7CisJaW50IGVfcHJvdG9jb2w7CisJY29uc3QgY2hhciAqZV9wcm90b3N0cjsKKwlpbnQgZV93aWxkOworI2RlZmluZSBXSUxEX0FGKGV4KQkJKChleCktPmVfd2lsZCAmIDB4MDEpCisjZGVmaW5lIFdJTERfU09DS1RZUEUoZXgpCSgoZXgpLT5lX3dpbGQgJiAweDAyKQorI2RlZmluZSBXSUxEX1BST1RPQ09MKGV4KQkoKGV4KS0+ZV93aWxkICYgMHgwNCkKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXhwbG9yZSBleHBsb3JlW10gPSB7CisjaWYgMAorCXsgUEZfTE9DQUwsIDAsIEFOWSwgQU5ZLCBOVUxMLCAweDAxIH0sCisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCXsgUEZfSU5FVDYsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQLCAidWRwIiwgMHgwNyB9LAorCXsgUEZfSU5FVDYsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCwgInRjcCIsIDB4MDcgfSwKKwl7IFBGX0lORVQ2LCBTT0NLX1JBVywgQU5ZLCBOVUxMLCAweDA1IH0sCisjZW5kaWYKKwl7IFBGX0lORVQsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQLCAidWRwIiwgMHgwNyB9LAorCXsgUEZfSU5FVCwgU09DS19TVFJFQU0sIElQUFJPVE9fVENQLCAidGNwIiwgMHgwNyB9LAorCXsgUEZfSU5FVCwgU09DS19SQVcsIEFOWSwgTlVMTCwgMHgwNSB9LAorCXsgUEZfVU5TUEVDLCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCwgInVkcCIsIDB4MDcgfSwKKwl7IFBGX1VOU1BFQywgU09DS19TVFJFQU0sIElQUFJPVE9fVENQLCAidGNwIiwgMHgwNyB9LAorCXsgUEZfVU5TUEVDLCBTT0NLX1JBVywgQU5ZLCBOVUxMLCAweDA1IH0sCisJeyAtMSwgMCwgMCwgTlVMTCwgMCB9LAorfTsKKworI2lmZGVmIElORVQ2CisjZGVmaW5lIFBUT05fTUFYCTE2CisjZWxzZQorI2RlZmluZSBQVE9OX01BWAk0CisjZW5kaWYKKworc3RhdGljIGNvbnN0IG5zX3NyYyBkZWZhdWx0X2Ruc19maWxlc1tdID0geworCXsgTlNTUkNfRklMRVMsIAlOU19TVUNDRVNTIH0sCisJeyBOU1NSQ19ETlMsIAlOU19TVUNDRVNTIH0sCisJeyAwLCAwIH0KK307CisKKyNkZWZpbmUgTUFYUEFDS0VUCSg2NCoxMDI0KQorCit0eXBlZGVmIHVuaW9uIHsKKwlIRUFERVIgaGRyOworCXVfY2hhciBidWZbTUFYUEFDS0VUXTsKK30gcXVlcnlidWY7CisKK3N0cnVjdCByZXNfdGFyZ2V0IHsKKwlzdHJ1Y3QgcmVzX3RhcmdldCAqbmV4dDsKKwljb25zdCBjaGFyICpuYW1lOwkvKiBkb21haW4gbmFtZSAqLworCWludCBxY2xhc3MsIHF0eXBlOwkvKiBjbGFzcyBhbmQgdHlwZSBvZiBxdWVyeSAqLworCXVfY2hhciAqYW5zd2VyOwkJLyogYnVmZmVyIHRvIHB1dCBhbnN3ZXIgKi8KKwlpbnQgYW5zbGVuOwkJLyogc2l6ZSBvZiBhbnN3ZXIgYnVmZmVyICovCisJaW50IG47CQkJLyogcmVzdWx0IGxlbmd0aCAqLworfTsKKworc3RhdGljIGludCBzdHIybnVtYmVyKGNvbnN0IGNoYXIgKik7CitzdGF0aWMgaW50IGV4cGxvcmVfZnFkbihjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKiwgY29uc3QgY2hhciAqLAorCWNvbnN0IGNoYXIgKiwgc3RydWN0IGFkZHJpbmZvICoqKTsKK3N0YXRpYyBpbnQgZXhwbG9yZV9udWxsKGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqLAorCWNvbnN0IGNoYXIgKiwgc3RydWN0IGFkZHJpbmZvICoqKTsKK3N0YXRpYyBpbnQgZXhwbG9yZV9udW1lcmljKGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqLCBjb25zdCBjaGFyICosCisJY29uc3QgY2hhciAqLCBzdHJ1Y3QgYWRkcmluZm8gKiosIGNvbnN0IGNoYXIgKik7CitzdGF0aWMgaW50IGV4cGxvcmVfbnVtZXJpY19zY29wZShjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKiwgY29uc3QgY2hhciAqLAorCWNvbnN0IGNoYXIgKiwgc3RydWN0IGFkZHJpbmZvICoqKTsKK3N0YXRpYyBpbnQgZ2V0X2Nhbm9ubmFtZShjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKiwKKwlzdHJ1Y3QgYWRkcmluZm8gKiwgY29uc3QgY2hhciAqKTsKK3N0YXRpYyBzdHJ1Y3QgYWRkcmluZm8gKmdldF9haShjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKiwKKwljb25zdCBzdHJ1Y3QgYWZkICosIGNvbnN0IGNoYXIgKik7CitzdGF0aWMgaW50IGdldF9wb3J0bWF0Y2goY29uc3Qgc3RydWN0IGFkZHJpbmZvICosIGNvbnN0IGNoYXIgKik7CitzdGF0aWMgaW50IGdldF9wb3J0KGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqLCBjb25zdCBjaGFyICosIGludCk7CitzdGF0aWMgY29uc3Qgc3RydWN0IGFmZCAqZmluZF9hZmQoaW50KTsKKyNpZmRlZiBJTkVUNgorc3RhdGljIGludCBpcDZfc3RyMnNjb3BlaWQoY2hhciAqLCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICosIHVfaW50MzJfdCAqKTsKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IGFkZHJpbmZvICpnZXRhbnN3ZXIoY29uc3QgcXVlcnlidWYgKiwgaW50LCBjb25zdCBjaGFyICosIGludCwKKwljb25zdCBzdHJ1Y3QgYWRkcmluZm8gKik7CitzdGF0aWMgdm9pZCBhaXNvcnQoc3RydWN0IGFkZHJpbmZvICpzLCByZXNfc3RhdGUgcmVzKTsKK3N0YXRpYyBpbnQgX2Ruc19nZXRhZGRyaW5mbyh2b2lkICosIHZvaWQgKiwgdmFfbGlzdCk7CitzdGF0aWMgdm9pZCBfc2V0aHRlbnQoRklMRSAqKik7CitzdGF0aWMgdm9pZCBfZW5kaHRlbnQoRklMRSAqKik7CitzdGF0aWMgc3RydWN0IGFkZHJpbmZvICpfZ2V0aHRlbnQoRklMRSAqKiwgY29uc3QgY2hhciAqLAorICAgIGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqKTsKK3N0YXRpYyBpbnQgX2ZpbGVzX2dldGFkZHJpbmZvKHZvaWQgKiwgdm9pZCAqLCB2YV9saXN0KTsKKworc3RhdGljIGludCByZXNfcXVlcnlOKGNvbnN0IGNoYXIgKiwgc3RydWN0IHJlc190YXJnZXQgKiwgcmVzX3N0YXRlKTsKK3N0YXRpYyBpbnQgcmVzX3NlYXJjaE4oY29uc3QgY2hhciAqLCBzdHJ1Y3QgcmVzX3RhcmdldCAqLCByZXNfc3RhdGUpOworc3RhdGljIGludCByZXNfcXVlcnlkb21haW5OKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLAorCXN0cnVjdCByZXNfdGFyZ2V0ICosIHJlc19zdGF0ZSk7CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYWlfZXJybGlzdFtdID0geworCSJTdWNjZXNzIiwKKwkiQWRkcmVzcyBmYW1pbHkgZm9yIGhvc3RuYW1lIG5vdCBzdXBwb3J0ZWQiLAkvKiBFQUlfQUREUkZBTUlMWSAqLworCSJUZW1wb3JhcnkgZmFpbHVyZSBpbiBuYW1lIHJlc29sdXRpb24iLAkJLyogRUFJX0FHQUlOICAgICAgKi8KKwkiSW52YWxpZCB2YWx1ZSBmb3IgYWlfZmxhZ3MiLAkJICAgICAgIAkvKiBFQUlfQkFERkxBR1MgICAqLworCSJOb24tcmVjb3ZlcmFibGUgZmFpbHVyZSBpbiBuYW1lIHJlc29sdXRpb24iLCAJLyogRUFJX0ZBSUwgICAgICAgKi8KKwkiYWlfZmFtaWx5IG5vdCBzdXBwb3J0ZWQiLAkJCS8qIEVBSV9GQU1JTFkgICAgICovCisJIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUiLCAJCQkvKiBFQUlfTUVNT1JZICAgICAqLworCSJObyBhZGRyZXNzIGFzc29jaWF0ZWQgd2l0aCBob3N0bmFtZSIsIAkJLyogRUFJX05PREFUQSAgICAgKi8KKwkiaG9zdG5hbWUgbm9yIHNlcnZuYW1lIHByb3ZpZGVkLCBvciBub3Qga25vd24iLAkvKiBFQUlfTk9OQU1FICAgICAqLworCSJzZXJ2bmFtZSBub3Qgc3VwcG9ydGVkIGZvciBhaV9zb2NrdHlwZSIsCS8qIEVBSV9TRVJWSUNFICAgICovCisJImFpX3NvY2t0eXBlIG5vdCBzdXBwb3J0ZWQiLCAJCQkvKiBFQUlfU09DS1RZUEUgICAqLworCSJTeXN0ZW0gZXJyb3IgcmV0dXJuZWQgaW4gZXJybm8iLCAJCS8qIEVBSV9TWVNURU0gICAgICovCisJIkludmFsaWQgdmFsdWUgZm9yIGhpbnRzIiwJCQkvKiBFQUlfQkFESElOVFMJICAqLworCSJSZXNvbHZlZCBwcm90b2NvbCBpcyB1bmtub3duIiwJCQkvKiBFQUlfUFJPVE9DT0wgICAqLworCSJBcmd1bWVudCBidWZmZXIgb3ZlcmZsb3ciLAkJCS8qIEVBSV9PVkVSRkxPVyAgICovCisJIlVua25vd24gZXJyb3IiLCAJCQkJLyogRUFJX01BWCAgICAgICAgKi8KK307CisKKy8qIFhYWCBtYWNyb3MgdGhhdCBtYWtlIGV4dGVybmFsIHJlZmVyZW5jZSBpcyBCQUQuICovCisKKyNkZWZpbmUgR0VUX0FJKGFpLCBhZmQsIGFkZHIpIAkJCQkJXAorZG8geyAJCQkJCQkJCVwKKwkvKiBleHRlcm5hbCByZWZlcmVuY2U6IHBhaSwgZXJyb3IsIGFuZCBsYWJlbCBmcmVlICovIAlcCisJKGFpKSA9IGdldF9haShwYWksIChhZmQpLCAoYWRkcikpOyAJCQlcCisJaWYgKChhaSkgPT0gTlVMTCkgeyAJCQkJCVwKKwkJZXJyb3IgPSBFQUlfTUVNT1JZOyAJCQkJXAorCQlnb3RvIGZyZWU7IAkJCQkJXAorCX0gCQkJCQkJCVwKK30gd2hpbGUgKC8qQ09OU1RDT05EKi8wKQorCisjZGVmaW5lIEdFVF9QT1JUKGFpLCBzZXJ2KSAJCQkJCVwKK2RvIHsgCQkJCQkJCQlcCisJLyogZXh0ZXJuYWwgcmVmZXJlbmNlOiBlcnJvciBhbmQgbGFiZWwgZnJlZSAqLyAJCVwKKwllcnJvciA9IGdldF9wb3J0KChhaSksIChzZXJ2KSwgMCk7IAkJCVwKKwlpZiAoZXJyb3IgIT0gMCkgCQkJCQlcCisJCWdvdG8gZnJlZTsgCQkJCQlcCit9IHdoaWxlICgvKkNPTlNUQ09ORCovMCkKKworI2RlZmluZSBHRVRfQ0FOT05OQU1FKGFpLCBzdHIpIAkJCQkJXAorZG8geyAJCQkJCQkJCVwKKwkvKiBleHRlcm5hbCByZWZlcmVuY2U6IHBhaSwgZXJyb3IgYW5kIGxhYmVsIGZyZWUgKi8gCVwKKwllcnJvciA9IGdldF9jYW5vbm5hbWUocGFpLCAoYWkpLCAoc3RyKSk7IAkJXAorCWlmIChlcnJvciAhPSAwKSAJCQkJCVwKKwkJZ290byBmcmVlOyAJCQkJCVwKK30gd2hpbGUgKC8qQ09OU1RDT05EKi8wKQorCisjZGVmaW5lIEVSUihlcnIpIAkJCQkJCVwKK2RvIHsgCQkJCQkJCQlcCisJLyogZXh0ZXJuYWwgcmVmZXJlbmNlOiBlcnJvciwgYW5kIGxhYmVsIGJhZCAqLyAJCVwKKwllcnJvciA9IChlcnIpOyAJCQkJCQlcCisJZ290byBiYWQ7IAkJCQkJCVwKKwkvKk5PVFJFQUNIRUQqLyAJCQkJCQlcCit9IHdoaWxlICgvKkNPTlNUQ09ORCovMCkKKworI2RlZmluZSBNQVRDSF9GQU1JTFkoeCwgeSwgdykgCQkJCQkJXAorCSgoeCkgPT0gKHkpIHx8ICgvKkNPTlNUQ09ORCovKHcpICYmICgoeCkgPT0gUEZfVU5TUEVDIHx8IAlcCisJICAgICh5KSA9PSBQRl9VTlNQRUMpKSkKKyNkZWZpbmUgTUFUQ0goeCwgeSwgdykgCQkJCQkJCVwKKwkoKHgpID09ICh5KSB8fCAoLypDT05TVENPTkQqLyh3KSAmJiAoKHgpID09IEFOWSB8fCAoeSkgPT0gQU5ZKSkpCisKK2NvbnN0IGNoYXIgKgorZ2FpX3N0cmVycm9yKGludCBlY29kZSkKK3sKKwlpZiAoZWNvZGUgPCAwIHx8IGVjb2RlID4gRUFJX01BWCkKKwkJZWNvZGUgPSBFQUlfTUFYOworCXJldHVybiBhaV9lcnJsaXN0W2Vjb2RlXTsKK30KKwordm9pZAorZnJlZWFkZHJpbmZvKHN0cnVjdCBhZGRyaW5mbyAqYWkpCit7CisJc3RydWN0IGFkZHJpbmZvICpuZXh0OworCisJYXNzZXJ0KGFpICE9IE5VTEwpOworCisJZG8geworCQluZXh0ID0gYWktPmFpX25leHQ7CisJCWlmIChhaS0+YWlfY2Fub25uYW1lKQorCQkJZnJlZShhaS0+YWlfY2Fub25uYW1lKTsKKwkJLyogbm8gbmVlZCB0byBmcmVlKGFpLT5haV9hZGRyKSAqLworCQlmcmVlKGFpKTsKKwkJYWkgPSBuZXh0OworCX0gd2hpbGUgKGFpKTsKK30KKworc3RhdGljIGludAorc3RyMm51bWJlcihjb25zdCBjaGFyICpwKQoreworCWNoYXIgKmVwOworCXVuc2lnbmVkIGxvbmcgdjsKKworCWFzc2VydChwICE9IE5VTEwpOworCisJaWYgKCpwID09ICdcMCcpCisJCXJldHVybiAtMTsKKwllcCA9IE5VTEw7CisJZXJybm8gPSAwOworCXYgPSBzdHJ0b3VsKHAsICZlcCwgMTApOworCWlmIChlcnJubyA9PSAwICYmIGVwICYmICplcCA9PSAnXDAnICYmIHYgPD0gVUlOVF9NQVgpCisJCXJldHVybiB2OworCWVsc2UKKwkJcmV0dXJuIC0xOworfQorCitpbnQKK2dldGFkZHJpbmZvKGNvbnN0IGNoYXIgKmhvc3RuYW1lLCBjb25zdCBjaGFyICpzZXJ2bmFtZSwKKyAgICBjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKmhpbnRzLCBzdHJ1Y3QgYWRkcmluZm8gKipyZXMpCit7CisJc3RydWN0IGFkZHJpbmZvIHNlbnRpbmVsOworCXN0cnVjdCBhZGRyaW5mbyAqY3VyOworCWludCBlcnJvciA9IDA7CisJc3RydWN0IGFkZHJpbmZvIGFpOworCXN0cnVjdCBhZGRyaW5mbyBhaTA7CisJc3RydWN0IGFkZHJpbmZvICpwYWk7CisJY29uc3Qgc3RydWN0IGV4cGxvcmUgKmV4OworCisJLyogaG9zdG5hbWUgaXMgYWxsb3dlZCB0byBiZSBOVUxMICovCisJLyogc2Vydm5hbWUgaXMgYWxsb3dlZCB0byBiZSBOVUxMICovCisJLyogaGludHMgaXMgYWxsb3dlZCB0byBiZSBOVUxMICovCisJYXNzZXJ0KHJlcyAhPSBOVUxMKTsKKworCW1lbXNldCgmc2VudGluZWwsIDAsIHNpemVvZihzZW50aW5lbCkpOworCWN1ciA9ICZzZW50aW5lbDsKKwlwYWkgPSAmYWk7CisJcGFpLT5haV9mbGFncyA9IDA7CisJcGFpLT5haV9mYW1pbHkgPSBQRl9VTlNQRUM7CisJcGFpLT5haV9zb2NrdHlwZSA9IEFOWTsKKwlwYWktPmFpX3Byb3RvY29sID0gQU5ZOworCXBhaS0+YWlfYWRkcmxlbiA9IDA7CisJcGFpLT5haV9jYW5vbm5hbWUgPSBOVUxMOworCXBhaS0+YWlfYWRkciA9IE5VTEw7CisJcGFpLT5haV9uZXh0ID0gTlVMTDsKKworCWlmIChob3N0bmFtZSA9PSBOVUxMICYmIHNlcnZuYW1lID09IE5VTEwpCisJCXJldHVybiBFQUlfTk9OQU1FOworCWlmIChoaW50cykgeworCQkvKiBlcnJvciBjaGVjayBmb3IgaGludHMgKi8KKwkJaWYgKGhpbnRzLT5haV9hZGRybGVuIHx8IGhpbnRzLT5haV9jYW5vbm5hbWUgfHwKKwkJICAgIGhpbnRzLT5haV9hZGRyIHx8IGhpbnRzLT5haV9uZXh0KQorCQkJRVJSKEVBSV9CQURISU5UUyk7IC8qIHh4eCAqLworCQlpZiAoaGludHMtPmFpX2ZsYWdzICYgfkFJX01BU0spCisJCQlFUlIoRUFJX0JBREZMQUdTKTsKKwkJc3dpdGNoIChoaW50cy0+YWlfZmFtaWx5KSB7CisJCWNhc2UgUEZfVU5TUEVDOgorCQljYXNlIFBGX0lORVQ6CisjaWZkZWYgSU5FVDYKKwkJY2FzZSBQRl9JTkVUNjoKKyNlbmRpZgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlFUlIoRUFJX0ZBTUlMWSk7CisJCX0KKwkJbWVtY3B5KHBhaSwgaGludHMsIHNpemVvZigqcGFpKSk7CisKKwkJLyoKKwkJICogaWYgYm90aCBzb2NrdHlwZS9wcm90b2NvbCBhcmUgc3BlY2lmaWVkLCBjaGVjayBpZiB0aGV5CisJCSAqIGFyZSBtZWFuaW5nZnVsIGNvbWJpbmF0aW9uLgorCQkgKi8KKwkJaWYgKHBhaS0+YWlfc29ja3R5cGUgIT0gQU5ZICYmIHBhaS0+YWlfcHJvdG9jb2wgIT0gQU5ZKSB7CisJCQlmb3IgKGV4ID0gZXhwbG9yZTsgZXgtPmVfYWYgPj0gMDsgZXgrKykgeworCQkJCWlmIChwYWktPmFpX2ZhbWlseSAhPSBleC0+ZV9hZikKKwkJCQkJY29udGludWU7CisJCQkJaWYgKGV4LT5lX3NvY2t0eXBlID09IEFOWSkKKwkJCQkJY29udGludWU7CisJCQkJaWYgKGV4LT5lX3Byb3RvY29sID09IEFOWSkKKwkJCQkJY29udGludWU7CisJCQkJaWYgKHBhaS0+YWlfc29ja3R5cGUgPT0gZXgtPmVfc29ja3R5cGUKKwkJCQkgJiYgcGFpLT5haV9wcm90b2NvbCAhPSBleC0+ZV9wcm90b2NvbCkgeworCQkJCQlFUlIoRUFJX0JBREhJTlRTKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKgorCSAqIGNoZWNrIGZvciBzcGVjaWFsIGNhc2VzLiAgKDEpIG51bWVyaWMgc2Vydm5hbWUgaXMgZGlzYWxsb3dlZCBpZgorCSAqIHNvY2t0eXBlL3Byb3RvY29sIGFyZSBsZWZ0IHVuc3BlY2lmaWVkLiAoMikgc2Vydm5hbWUgaXMgZGlzYWxsb3dlZAorCSAqIGZvciByYXcgYW5kIG90aGVyIGluZXR7LDZ9IHNvY2tldHMuCisJICovCisJaWYgKE1BVENIX0ZBTUlMWShwYWktPmFpX2ZhbWlseSwgUEZfSU5FVCwgMSkKKyNpZmRlZiBQRl9JTkVUNgorCSB8fCBNQVRDSF9GQU1JTFkocGFpLT5haV9mYW1pbHksIFBGX0lORVQ2LCAxKQorI2VuZGlmCisJICAgICkgeworCQlhaTAgPSAqcGFpOwkvKiBiYWNrdXAgKnBhaSAqLworCisJCWlmIChwYWktPmFpX2ZhbWlseSA9PSBQRl9VTlNQRUMpIHsKKyNpZmRlZiBQRl9JTkVUNgorCQkJcGFpLT5haV9mYW1pbHkgPSBQRl9JTkVUNjsKKyNlbHNlCisJCQlwYWktPmFpX2ZhbWlseSA9IFBGX0lORVQ7CisjZW5kaWYKKwkJfQorCQllcnJvciA9IGdldF9wb3J0bWF0Y2gocGFpLCBzZXJ2bmFtZSk7CisJCWlmIChlcnJvcikKKwkJCUVSUihlcnJvcik7CisKKwkJKnBhaSA9IGFpMDsKKwl9CisKKwlhaTAgPSAqcGFpOworCisJLyogTlVMTCBob3N0bmFtZSwgb3IgbnVtZXJpYyBob3N0bmFtZSAqLworCWZvciAoZXggPSBleHBsb3JlOyBleC0+ZV9hZiA+PSAwOyBleCsrKSB7CisJCSpwYWkgPSBhaTA7CisKKwkJLyogUEZfVU5TUEVDIGVudHJpZXMgYXJlIHByZXBhcmVkIGZvciBETlMgcXVlcmllcyBvbmx5ICovCisJCWlmIChleC0+ZV9hZiA9PSBQRl9VTlNQRUMpCisJCQljb250aW51ZTsKKworCQlpZiAoIU1BVENIX0ZBTUlMWShwYWktPmFpX2ZhbWlseSwgZXgtPmVfYWYsIFdJTERfQUYoZXgpKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIU1BVENIKHBhaS0+YWlfc29ja3R5cGUsIGV4LT5lX3NvY2t0eXBlLCBXSUxEX1NPQ0tUWVBFKGV4KSkpCisJCQljb250aW51ZTsKKwkJaWYgKCFNQVRDSChwYWktPmFpX3Byb3RvY29sLCBleC0+ZV9wcm90b2NvbCwgV0lMRF9QUk9UT0NPTChleCkpKQorCQkJY29udGludWU7CisKKwkJaWYgKHBhaS0+YWlfZmFtaWx5ID09IFBGX1VOU1BFQykKKwkJCXBhaS0+YWlfZmFtaWx5ID0gZXgtPmVfYWY7CisJCWlmIChwYWktPmFpX3NvY2t0eXBlID09IEFOWSAmJiBleC0+ZV9zb2NrdHlwZSAhPSBBTlkpCisJCQlwYWktPmFpX3NvY2t0eXBlID0gZXgtPmVfc29ja3R5cGU7CisJCWlmIChwYWktPmFpX3Byb3RvY29sID09IEFOWSAmJiBleC0+ZV9wcm90b2NvbCAhPSBBTlkpCisJCQlwYWktPmFpX3Byb3RvY29sID0gZXgtPmVfcHJvdG9jb2w7CisKKwkJaWYgKGhvc3RuYW1lID09IE5VTEwpCisJCQllcnJvciA9IGV4cGxvcmVfbnVsbChwYWksIHNlcnZuYW1lLCAmY3VyLT5haV9uZXh0KTsKKwkJZWxzZQorCQkJZXJyb3IgPSBleHBsb3JlX251bWVyaWNfc2NvcGUocGFpLCBob3N0bmFtZSwgc2Vydm5hbWUsCisJCQkgICAgJmN1ci0+YWlfbmV4dCk7CisKKwkJaWYgKGVycm9yKQorCQkJZ290byBmcmVlOworCisJCXdoaWxlIChjdXItPmFpX25leHQpCisJCQljdXIgPSBjdXItPmFpX25leHQ7CisJfQorCisJLyoKKwkgKiBYWFgKKwkgKiBJZiBudW1lcmljIHJlcHJlc2VudGF0aW9uIG9mIEFGMSBjYW4gYmUgaW50ZXJwcmV0ZWQgYXMgRlFETgorCSAqIHJlcHJlc2VudGF0aW9uIG9mIEFGMiwgd2UgbmVlZCB0byB0aGluayBhZ2FpbiBhYm91dCB0aGUgY29kZSBiZWxvdy4KKwkgKi8KKwlpZiAoc2VudGluZWwuYWlfbmV4dCkKKwkJZ290byBnb29kOworCisJaWYgKGhvc3RuYW1lID09IE5VTEwpCisJCUVSUihFQUlfTk9EQVRBKTsKKwlpZiAocGFpLT5haV9mbGFncyAmIEFJX05VTUVSSUNIT1NUKQorCQlFUlIoRUFJX05PTkFNRSk7CisKKwkvKgorCSAqIGhvc3RuYW1lIGFzIGFscGhhYmV0aWNhbCBuYW1lLgorCSAqIHdlIHdvdWxkIGxpa2UgdG8gcHJlZmVyIEFGX0lORVQ2IHRoYW4gQUZfSU5FVCwgc28gd2UnbGwgbWFrZSBhCisJICogb3V0ZXIgbG9vcCBieSBBRnMuCisJICovCisJZm9yIChleCA9IGV4cGxvcmU7IGV4LT5lX2FmID49IDA7IGV4KyspIHsKKwkJKnBhaSA9IGFpMDsKKworCQkvKiByZXF1aXJlIGV4YWN0IG1hdGNoIGZvciBmYW1pbHkgZmllbGQgKi8KKwkJaWYgKHBhaS0+YWlfZmFtaWx5ICE9IGV4LT5lX2FmKQorCQkJY29udGludWU7CisKKwkJaWYgKCFNQVRDSChwYWktPmFpX3NvY2t0eXBlLCBleC0+ZV9zb2NrdHlwZSwKKwkJCQlXSUxEX1NPQ0tUWVBFKGV4KSkpIHsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghTUFUQ0gocGFpLT5haV9wcm90b2NvbCwgZXgtPmVfcHJvdG9jb2wsCisJCQkJV0lMRF9QUk9UT0NPTChleCkpKSB7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChwYWktPmFpX3NvY2t0eXBlID09IEFOWSAmJiBleC0+ZV9zb2NrdHlwZSAhPSBBTlkpCisJCQlwYWktPmFpX3NvY2t0eXBlID0gZXgtPmVfc29ja3R5cGU7CisJCWlmIChwYWktPmFpX3Byb3RvY29sID09IEFOWSAmJiBleC0+ZV9wcm90b2NvbCAhPSBBTlkpCisJCQlwYWktPmFpX3Byb3RvY29sID0gZXgtPmVfcHJvdG9jb2w7CisKKwkJZXJyb3IgPSBleHBsb3JlX2ZxZG4ocGFpLCBob3N0bmFtZSwgc2Vydm5hbWUsCisJCQkmY3VyLT5haV9uZXh0KTsKKworCQl3aGlsZSAoY3VyICYmIGN1ci0+YWlfbmV4dCkKKwkJCWN1ciA9IGN1ci0+YWlfbmV4dDsKKwl9CisKKwkvKiBYWFggKi8KKwlpZiAoc2VudGluZWwuYWlfbmV4dCkKKwkJZXJyb3IgPSAwOworCisJaWYgKGVycm9yKQorCQlnb3RvIGZyZWU7CisJaWYgKGVycm9yID09IDApIHsKKwkJaWYgKHNlbnRpbmVsLmFpX25leHQpIHsKKyBnb29kOgorCQkJKnJlcyA9IHNlbnRpbmVsLmFpX25leHQ7CisJCQlyZXR1cm4gU1VDQ0VTUzsKKwkJfSBlbHNlCisJCQllcnJvciA9IEVBSV9GQUlMOworCX0KKyBmcmVlOgorIGJhZDoKKwlpZiAoc2VudGluZWwuYWlfbmV4dCkKKwkJZnJlZWFkZHJpbmZvKHNlbnRpbmVsLmFpX25leHQpOworCSpyZXMgPSBOVUxMOworCXJldHVybiBlcnJvcjsKK30KKworLyoKKyAqIEZRRE4gaG9zdG5hbWUsIEROUyBsb29rdXAKKyAqLworc3RhdGljIGludAorZXhwbG9yZV9mcWRuKGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqcGFpLCBjb25zdCBjaGFyICpob3N0bmFtZSwKKyAgICBjb25zdCBjaGFyICpzZXJ2bmFtZSwgc3RydWN0IGFkZHJpbmZvICoqcmVzKQoreworCXN0cnVjdCBhZGRyaW5mbyAqcmVzdWx0OworCXN0cnVjdCBhZGRyaW5mbyAqY3VyOworCWludCBlcnJvciA9IDA7CisJc3RhdGljIGNvbnN0IG5zX2R0YWIgZHRhYltdID0geworCQlOU19GSUxFU19DQihfZmlsZXNfZ2V0YWRkcmluZm8sIE5VTEwpCisJCXsgTlNTUkNfRE5TLCBfZG5zX2dldGFkZHJpbmZvLCBOVUxMIH0sCS8qIGZvcmNlIC1ESEVTSU9EICovCisJCU5TX05JU19DQihfeXBfZ2V0YWRkcmluZm8sIE5VTEwpCisJCXsgMCwgMCwgMCB9CisJfTsKKworCWFzc2VydChwYWkgIT0gTlVMTCk7CisJLyogaG9zdG5hbWUgbWF5IGJlIE5VTEwgKi8KKwkvKiBzZXJ2bmFtZSBtYXkgYmUgTlVMTCAqLworCWFzc2VydChyZXMgIT0gTlVMTCk7CisKKwlyZXN1bHQgPSBOVUxMOworCisJLyoKKwkgKiBpZiB0aGUgc2Vydm5hbWUgZG9lcyBub3QgbWF0Y2ggc29ja3R5cGUvcHJvdG9jb2wsIGlnbm9yZSBpdC4KKwkgKi8KKwlpZiAoZ2V0X3BvcnRtYXRjaChwYWksIHNlcnZuYW1lKSAhPSAwKQorCQlyZXR1cm4gMDsKKworCXN3aXRjaCAobnNkaXNwYXRjaCgmcmVzdWx0LCBkdGFiLCBOU0RCX0hPU1RTLCAiZ2V0YWRkcmluZm8iLAorCQkJZGVmYXVsdF9kbnNfZmlsZXMsIGhvc3RuYW1lLCBwYWkpKSB7CisJY2FzZSBOU19UUllBR0FJTjoKKwkJZXJyb3IgPSBFQUlfQUdBSU47CisJCWdvdG8gZnJlZTsKKwljYXNlIE5TX1VOQVZBSUw6CisJCWVycm9yID0gRUFJX0ZBSUw7CisJCWdvdG8gZnJlZTsKKwljYXNlIE5TX05PVEZPVU5EOgorCQllcnJvciA9IEVBSV9OT0RBVEE7CisJCWdvdG8gZnJlZTsKKwljYXNlIE5TX1NVQ0NFU1M6CisJCWVycm9yID0gMDsKKwkJZm9yIChjdXIgPSByZXN1bHQ7IGN1cjsgY3VyID0gY3VyLT5haV9uZXh0KSB7CisJCQlHRVRfUE9SVChjdXIsIHNlcnZuYW1lKTsKKwkJCS8qIGNhbm9ubmFtZSBzaG91bGQgYmUgZmlsbGVkIGFscmVhZHkgKi8KKwkJfQorCQlicmVhazsKKwl9CisKKwkqcmVzID0gcmVzdWx0OworCisJcmV0dXJuIDA7CisKK2ZyZWU6CisJaWYgKHJlc3VsdCkKKwkJZnJlZWFkZHJpbmZvKHJlc3VsdCk7CisJcmV0dXJuIGVycm9yOworfQorCisvKgorICogaG9zdG5hbWUgPT0gTlVMTC4KKyAqIHBhc3NpdmUgc29ja2V0IC0+IGFueWFkZHIgKDAuMC4wLjAgb3IgOjopCisgKiBub24tcGFzc2l2ZSBzb2NrZXQgLT4gbG9jYWxob3N0ICgxMjcuMC4wLjEgb3IgOjoxKQorICovCitzdGF0aWMgaW50CitleHBsb3JlX251bGwoY29uc3Qgc3RydWN0IGFkZHJpbmZvICpwYWksIGNvbnN0IGNoYXIgKnNlcnZuYW1lLAorICAgIHN0cnVjdCBhZGRyaW5mbyAqKnJlcykKK3sKKwlpbnQgczsKKwljb25zdCBzdHJ1Y3QgYWZkICphZmQ7CisJc3RydWN0IGFkZHJpbmZvICpjdXI7CisJc3RydWN0IGFkZHJpbmZvIHNlbnRpbmVsOworCWludCBlcnJvcjsKKworCWFzc2VydChwYWkgIT0gTlVMTCk7CisJLyogc2Vydm5hbWUgbWF5IGJlIE5VTEwgKi8KKwlhc3NlcnQocmVzICE9IE5VTEwpOworCisJKnJlcyA9IE5VTEw7CisJc2VudGluZWwuYWlfbmV4dCA9IE5VTEw7CisJY3VyID0gJnNlbnRpbmVsOworCisJLyoKKwkgKiBmaWx0ZXIgb3V0IEFGcyB0aGF0IGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBrZXJuZWwKKwkgKiBYWFggZXJybm8/CisJICovCisJcyA9IHNvY2tldChwYWktPmFpX2ZhbWlseSwgU09DS19ER1JBTSwgMCk7CisJaWYgKHMgPCAwKSB7CisJCWlmIChlcnJubyAhPSBFTUZJTEUpCisJCQlyZXR1cm4gMDsKKwl9IGVsc2UKKwkJY2xvc2Uocyk7CisKKwkvKgorCSAqIGlmIHRoZSBzZXJ2bmFtZSBkb2VzIG5vdCBtYXRjaCBzb2NrdHlwZS9wcm90b2NvbCwgaWdub3JlIGl0LgorCSAqLworCWlmIChnZXRfcG9ydG1hdGNoKHBhaSwgc2Vydm5hbWUpICE9IDApCisJCXJldHVybiAwOworCisJYWZkID0gZmluZF9hZmQocGFpLT5haV9mYW1pbHkpOworCWlmIChhZmQgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlpZiAocGFpLT5haV9mbGFncyAmIEFJX1BBU1NJVkUpIHsKKwkJR0VUX0FJKGN1ci0+YWlfbmV4dCwgYWZkLCBhZmQtPmFfYWRkcmFueSk7CisJCS8qIHh4eCBtZWFuaW5nbGVzcz8KKwkJICogR0VUX0NBTk9OTkFNRShjdXItPmFpX25leHQsICJhbnlhZGRyIik7CisJCSAqLworCQlHRVRfUE9SVChjdXItPmFpX25leHQsIHNlcnZuYW1lKTsKKwl9IGVsc2UgeworCQlHRVRfQUkoY3VyLT5haV9uZXh0LCBhZmQsIGFmZC0+YV9sb29wYmFjayk7CisJCS8qIHh4eCBtZWFuaW5nbGVzcz8KKwkJICogR0VUX0NBTk9OTkFNRShjdXItPmFpX25leHQsICJsb2NhbGhvc3QiKTsKKwkJICovCisJCUdFVF9QT1JUKGN1ci0+YWlfbmV4dCwgc2Vydm5hbWUpOworCX0KKwljdXIgPSBjdXItPmFpX25leHQ7CisKKwkqcmVzID0gc2VudGluZWwuYWlfbmV4dDsKKwlyZXR1cm4gMDsKKworZnJlZToKKwlpZiAoc2VudGluZWwuYWlfbmV4dCkKKwkJZnJlZWFkZHJpbmZvKHNlbnRpbmVsLmFpX25leHQpOworCXJldHVybiBlcnJvcjsKK30KKworLyoKKyAqIG51bWVyaWMgaG9zdG5hbWUKKyAqLworc3RhdGljIGludAorZXhwbG9yZV9udW1lcmljKGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqcGFpLCBjb25zdCBjaGFyICpob3N0bmFtZSwKKyAgICBjb25zdCBjaGFyICpzZXJ2bmFtZSwgc3RydWN0IGFkZHJpbmZvICoqcmVzLCBjb25zdCBjaGFyICpjYW5vbm5hbWUpCit7CisJY29uc3Qgc3RydWN0IGFmZCAqYWZkOworCXN0cnVjdCBhZGRyaW5mbyAqY3VyOworCXN0cnVjdCBhZGRyaW5mbyBzZW50aW5lbDsKKwlpbnQgZXJyb3I7CisJY2hhciBwdG9uW1BUT05fTUFYXTsKKworCWFzc2VydChwYWkgIT0gTlVMTCk7CisJLyogaG9zdG5hbWUgbWF5IGJlIE5VTEwgKi8KKwkvKiBzZXJ2bmFtZSBtYXkgYmUgTlVMTCAqLworCWFzc2VydChyZXMgIT0gTlVMTCk7CisKKwkqcmVzID0gTlVMTDsKKwlzZW50aW5lbC5haV9uZXh0ID0gTlVMTDsKKwljdXIgPSAmc2VudGluZWw7CisKKwkvKgorCSAqIGlmIHRoZSBzZXJ2bmFtZSBkb2VzIG5vdCBtYXRjaCBzb2NrdHlwZS9wcm90b2NvbCwgaWdub3JlIGl0LgorCSAqLworCWlmIChnZXRfcG9ydG1hdGNoKHBhaSwgc2Vydm5hbWUpICE9IDApCisJCXJldHVybiAwOworCisJYWZkID0gZmluZF9hZmQocGFpLT5haV9mYW1pbHkpOworCWlmIChhZmQgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2ggKGFmZC0+YV9hZikgeworI2lmIDAgLypYL09wZW4gc3BlYyovCisJY2FzZSBBRl9JTkVUOgorCQlpZiAoaW5ldF9hdG9uKGhvc3RuYW1lLCAoc3RydWN0IGluX2FkZHIgKilwdG9uKSA9PSAxKSB7CisJCQlpZiAocGFpLT5haV9mYW1pbHkgPT0gYWZkLT5hX2FmIHx8CisJCQkgICAgcGFpLT5haV9mYW1pbHkgPT0gUEZfVU5TUEVDIC8qPyovKSB7CisJCQkJR0VUX0FJKGN1ci0+YWlfbmV4dCwgYWZkLCBwdG9uKTsKKwkJCQlHRVRfUE9SVChjdXItPmFpX25leHQsIHNlcnZuYW1lKTsKKwkJCQlpZiAoKHBhaS0+YWlfZmxhZ3MgJiBBSV9DQU5PTk5BTUUpKSB7CisJCQkJCS8qCisJCQkJCSAqIFNldCB0aGUgbnVtZXJpYyBhZGRyZXNzIGl0c2VsZiBhcworCQkJCQkgKiB0aGUgY2Fub25pY2FsIG5hbWUsIGJhc2VkIG9uIGEKKwkJCQkJICogY2xhcmlmaWNhdGlvbiBpbiByZmMyNTUzYmlzLTAzLgorCQkJCQkgKi8KKwkJCQkJR0VUX0NBTk9OTkFNRShjdXItPmFpX25leHQsIGNhbm9ubmFtZSk7CisJCQkJfQorCQkJCXdoaWxlIChjdXIgJiYgY3VyLT5haV9uZXh0KQorCQkJCQljdXIgPSBjdXItPmFpX25leHQ7CisJCQl9IGVsc2UKKwkJCQlFUlIoRUFJX0ZBTUlMWSk7CS8qeHh4Ki8KKwkJfQorCQlicmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CisJCWlmIChpbmV0X3B0b24oYWZkLT5hX2FmLCBob3N0bmFtZSwgcHRvbikgPT0gMSkgeworCQkJaWYgKHBhaS0+YWlfZmFtaWx5ID09IGFmZC0+YV9hZiB8fAorCQkJICAgIHBhaS0+YWlfZmFtaWx5ID09IFBGX1VOU1BFQyAvKj8qLykgeworCQkJCUdFVF9BSShjdXItPmFpX25leHQsIGFmZCwgcHRvbik7CisJCQkJR0VUX1BPUlQoY3VyLT5haV9uZXh0LCBzZXJ2bmFtZSk7CisJCQkJaWYgKChwYWktPmFpX2ZsYWdzICYgQUlfQ0FOT05OQU1FKSkgeworCQkJCQkvKgorCQkJCQkgKiBTZXQgdGhlIG51bWVyaWMgYWRkcmVzcyBpdHNlbGYgYXMKKwkJCQkJICogdGhlIGNhbm9uaWNhbCBuYW1lLCBiYXNlZCBvbiBhCisJCQkJCSAqIGNsYXJpZmljYXRpb24gaW4gcmZjMjU1M2Jpcy0wMy4KKwkJCQkJICovCisJCQkJCUdFVF9DQU5PTk5BTUUoY3VyLT5haV9uZXh0LCBjYW5vbm5hbWUpOworCQkJCX0KKwkJCQl3aGlsZSAoY3VyLT5haV9uZXh0KQorCQkJCQljdXIgPSBjdXItPmFpX25leHQ7CisJCQl9IGVsc2UKKwkJCQlFUlIoRUFJX0ZBTUlMWSk7CS8qeHh4Ki8KKwkJfQorCQlicmVhazsKKwl9CisKKwkqcmVzID0gc2VudGluZWwuYWlfbmV4dDsKKwlyZXR1cm4gMDsKKworZnJlZToKK2JhZDoKKwlpZiAoc2VudGluZWwuYWlfbmV4dCkKKwkJZnJlZWFkZHJpbmZvKHNlbnRpbmVsLmFpX25leHQpOworCXJldHVybiBlcnJvcjsKK30KKworLyoKKyAqIG51bWVyaWMgaG9zdG5hbWUgd2l0aCBzY29wZQorICovCitzdGF0aWMgaW50CitleHBsb3JlX251bWVyaWNfc2NvcGUoY29uc3Qgc3RydWN0IGFkZHJpbmZvICpwYWksIGNvbnN0IGNoYXIgKmhvc3RuYW1lLAorICAgIGNvbnN0IGNoYXIgKnNlcnZuYW1lLCBzdHJ1Y3QgYWRkcmluZm8gKipyZXMpCit7CisjaWYgIWRlZmluZWQoU0NPUEVfREVMSU1JVEVSKSB8fCAhZGVmaW5lZChJTkVUNikKKwlyZXR1cm4gZXhwbG9yZV9udW1lcmljKHBhaSwgaG9zdG5hbWUsIHNlcnZuYW1lLCByZXMsIGhvc3RuYW1lKTsKKyNlbHNlCisJY29uc3Qgc3RydWN0IGFmZCAqYWZkOworCXN0cnVjdCBhZGRyaW5mbyAqY3VyOworCWludCBlcnJvcjsKKwljaGFyICpjcCwgKmhvc3RuYW1lMiA9IE5VTEwsICpzY29wZSwgKmFkZHI7CisJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKKworCWFzc2VydChwYWkgIT0gTlVMTCk7CisJLyogaG9zdG5hbWUgbWF5IGJlIE5VTEwgKi8KKwkvKiBzZXJ2bmFtZSBtYXkgYmUgTlVMTCAqLworCWFzc2VydChyZXMgIT0gTlVMTCk7CisKKwkvKgorCSAqIGlmIHRoZSBzZXJ2bmFtZSBkb2VzIG5vdCBtYXRjaCBzb2NrdHlwZS9wcm90b2NvbCwgaWdub3JlIGl0LgorCSAqLworCWlmIChnZXRfcG9ydG1hdGNoKHBhaSwgc2Vydm5hbWUpICE9IDApCisJCXJldHVybiAwOworCisJYWZkID0gZmluZF9hZmQocGFpLT5haV9mYW1pbHkpOworCWlmIChhZmQgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIWFmZC0+YV9zY29wZWQpCisJCXJldHVybiBleHBsb3JlX251bWVyaWMocGFpLCBob3N0bmFtZSwgc2Vydm5hbWUsIHJlcywgaG9zdG5hbWUpOworCisJY3AgPSBzdHJjaHIoaG9zdG5hbWUsIFNDT1BFX0RFTElNSVRFUik7CisJaWYgKGNwID09IE5VTEwpCisJCXJldHVybiBleHBsb3JlX251bWVyaWMocGFpLCBob3N0bmFtZSwgc2Vydm5hbWUsIHJlcywgaG9zdG5hbWUpOworCisJLyoKKwkgKiBIYW5kbGUgc3BlY2lhbCBjYXNlIG9mIDxzY29wZWRfYWRkcmVzcz48ZGVsaW1pdGVyPjxzY29wZSBpZD4KKwkgKi8KKwlob3N0bmFtZTIgPSBzdHJkdXAoaG9zdG5hbWUpOworCWlmIChob3N0bmFtZTIgPT0gTlVMTCkKKwkJcmV0dXJuIEVBSV9NRU1PUlk7CisJLyogdGVybWluYXRlIGF0IHRoZSBkZWxpbWl0ZXIgKi8KKwlob3N0bmFtZTJbY3AgLSBob3N0bmFtZV0gPSAnXDAnOworCWFkZHIgPSBob3N0bmFtZTI7CisJc2NvcGUgPSBjcCArIDE7CisKKwllcnJvciA9IGV4cGxvcmVfbnVtZXJpYyhwYWksIGFkZHIsIHNlcnZuYW1lLCByZXMsIGhvc3RuYW1lKTsKKwlpZiAoZXJyb3IgPT0gMCkgeworCQl1X2ludDMyX3Qgc2NvcGVpZDsKKworCQlmb3IgKGN1ciA9ICpyZXM7IGN1cjsgY3VyID0gY3VyLT5haV9uZXh0KSB7CisJCQlpZiAoY3VyLT5haV9mYW1pbHkgIT0gQUZfSU5FVDYpCisJCQkJY29udGludWU7CisJCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikodm9pZCAqKWN1ci0+YWlfYWRkcjsKKwkJCWlmIChpcDZfc3RyMnNjb3BlaWQoc2NvcGUsIHNpbjYsICZzY29wZWlkKSA9PSAtMSkgeworCQkJCWZyZWUoaG9zdG5hbWUyKTsKKwkJCQlyZXR1cm4oRUFJX05PREFUQSk7IC8qIFhYWDogaXMgcmV0dXJuIE9LPyAqLworCQkJfQorCQkJc2luNi0+c2luNl9zY29wZV9pZCA9IHNjb3BlaWQ7CisJCX0KKwl9CisKKwlmcmVlKGhvc3RuYW1lMik7CisKKwlyZXR1cm4gZXJyb3I7CisjZW5kaWYKK30KKworc3RhdGljIGludAorZ2V0X2Nhbm9ubmFtZShjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKnBhaSwgc3RydWN0IGFkZHJpbmZvICphaSwgY29uc3QgY2hhciAqc3RyKQoreworCisJYXNzZXJ0KHBhaSAhPSBOVUxMKTsKKwlhc3NlcnQoYWkgIT0gTlVMTCk7CisJYXNzZXJ0KHN0ciAhPSBOVUxMKTsKKworCWlmICgocGFpLT5haV9mbGFncyAmIEFJX0NBTk9OTkFNRSkgIT0gMCkgeworCQlhaS0+YWlfY2Fub25uYW1lID0gc3RyZHVwKHN0cik7CisJCWlmIChhaS0+YWlfY2Fub25uYW1lID09IE5VTEwpCisJCQlyZXR1cm4gRUFJX01FTU9SWTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYWRkcmluZm8gKgorZ2V0X2FpKGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqcGFpLCBjb25zdCBzdHJ1Y3QgYWZkICphZmQsIGNvbnN0IGNoYXIgKmFkZHIpCit7CisJY2hhciAqcDsKKwlzdHJ1Y3QgYWRkcmluZm8gKmFpOworCisJYXNzZXJ0KHBhaSAhPSBOVUxMKTsKKwlhc3NlcnQoYWZkICE9IE5VTEwpOworCWFzc2VydChhZGRyICE9IE5VTEwpOworCisJYWkgPSAoc3RydWN0IGFkZHJpbmZvICopbWFsbG9jKHNpemVvZihzdHJ1Y3QgYWRkcmluZm8pCisJCSsgKGFmZC0+YV9zb2NrbGVuKSk7CisJaWYgKGFpID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJbWVtY3B5KGFpLCBwYWksIHNpemVvZihzdHJ1Y3QgYWRkcmluZm8pKTsKKwlhaS0+YWlfYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikodm9pZCAqKShhaSArIDEpOworCW1lbXNldChhaS0+YWlfYWRkciwgMCwgKHNpemVfdClhZmQtPmFfc29ja2xlbik7CisKKyNpZmRlZiBIQVZFX1NBX0xFTgorCWFpLT5haV9hZGRyLT5zYV9sZW4gPSBhZmQtPmFfc29ja2xlbjsKKyNlbmRpZgorCisJYWktPmFpX2FkZHJsZW4gPSBhZmQtPmFfc29ja2xlbjsKKyNpZiBkZWZpbmVkIChfX2FscGhhX18pIHx8IChkZWZpbmVkKF9faTM4Nl9fKSAmJiBkZWZpbmVkKF9MUDY0KSkgfHwgZGVmaW5lZChfX3NwYXJjNjRfXykKKwlhaS0+X19haV9wYWQwID0gMDsKKyNlbmRpZgorCWFpLT5haV9hZGRyLT5zYV9mYW1pbHkgPSBhaS0+YWlfZmFtaWx5ID0gYWZkLT5hX2FmOworCXAgPSAoY2hhciAqKSh2b2lkICopKGFpLT5haV9hZGRyKTsKKwltZW1jcHkocCArIGFmZC0+YV9vZmYsIGFkZHIsIChzaXplX3QpYWZkLT5hX2FkZHJsZW4pOworCXJldHVybiBhaTsKK30KKworc3RhdGljIGludAorZ2V0X3BvcnRtYXRjaChjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKmFpLCBjb25zdCBjaGFyICpzZXJ2bmFtZSkKK3sKKworCWFzc2VydChhaSAhPSBOVUxMKTsKKwkvKiBzZXJ2bmFtZSBtYXkgYmUgTlVMTCAqLworCisJcmV0dXJuIGdldF9wb3J0KGFpLCBzZXJ2bmFtZSwgMSk7Cit9CisKK3N0YXRpYyBpbnQKK2dldF9wb3J0KGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqYWksIGNvbnN0IGNoYXIgKnNlcnZuYW1lLCBpbnQgbWF0Y2hvbmx5KQoreworCWNvbnN0IGNoYXIgKnByb3RvOworCXN0cnVjdCBzZXJ2ZW50ICpzcDsKKwlpbnQgcG9ydDsKKwlpbnQgYWxsb3dudW1lcmljOworCisJYXNzZXJ0KGFpICE9IE5VTEwpOworCS8qIHNlcnZuYW1lIG1heSBiZSBOVUxMICovCisKKwlpZiAoc2Vydm5hbWUgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisJc3dpdGNoIChhaS0+YWlfZmFtaWx5KSB7CisJY2FzZSBBRl9JTkVUOgorI2lmZGVmIEFGX0lORVQ2CisJY2FzZSBBRl9JTkVUNjoKKyNlbmRpZgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9CisKKwlzd2l0Y2ggKGFpLT5haV9zb2NrdHlwZSkgeworCWNhc2UgU09DS19SQVc6CisJCXJldHVybiBFQUlfU0VSVklDRTsKKwljYXNlIFNPQ0tfREdSQU06CisJY2FzZSBTT0NLX1NUUkVBTToKKwkJYWxsb3dudW1lcmljID0gMTsKKwkJYnJlYWs7CisJY2FzZSBBTlk6CisJCWFsbG93bnVtZXJpYyA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiBFQUlfU09DS1RZUEU7CisJfQorCisJcG9ydCA9IHN0cjJudW1iZXIoc2Vydm5hbWUpOworCWlmIChwb3J0ID49IDApIHsKKwkJaWYgKCFhbGxvd251bWVyaWMpCisJCQlyZXR1cm4gRUFJX1NFUlZJQ0U7CisJCWlmIChwb3J0IDwgMCB8fCBwb3J0ID4gNjU1MzUpCisJCQlyZXR1cm4gRUFJX1NFUlZJQ0U7CisJCXBvcnQgPSBodG9ucyhwb3J0KTsKKwl9IGVsc2UgeworCQlpZiAoYWktPmFpX2ZsYWdzICYgQUlfTlVNRVJJQ1NFUlYpCisJCQlyZXR1cm4gRUFJX05PTkFNRTsKKworCQlzd2l0Y2ggKGFpLT5haV9zb2NrdHlwZSkgeworCQljYXNlIFNPQ0tfREdSQU06CisJCQlwcm90byA9ICJ1ZHAiOworCQkJYnJlYWs7CisJCWNhc2UgU09DS19TVFJFQU06CisJCQlwcm90byA9ICJ0Y3AiOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcm90byA9IE5VTEw7CisJCQlicmVhazsKKwkJfQorCisJCWlmICgoc3AgPSBnZXRzZXJ2YnluYW1lKHNlcnZuYW1lLCBwcm90bykpID09IE5VTEwpCisJCQlyZXR1cm4gRUFJX1NFUlZJQ0U7CisJCXBvcnQgPSBzcC0+c19wb3J0OworCX0KKworCWlmICghbWF0Y2hvbmx5KSB7CisJCXN3aXRjaCAoYWktPmFpX2ZhbWlseSkgeworCQljYXNlIEFGX0lORVQ6CisJCQkoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSh2b2lkICopCisJCQkgICAgYWktPmFpX2FkZHIpLT5zaW5fcG9ydCA9IHBvcnQ7CisJCQlicmVhazsKKyNpZmRlZiBJTkVUNgorCQljYXNlIEFGX0lORVQ2OgorCQkJKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopKHZvaWQgKikKKwkJCSAgICBhaS0+YWlfYWRkciktPnNpbjZfcG9ydCA9IHBvcnQ7CisJCQlicmVhazsKKyNlbmRpZgorCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWZkICoKK2ZpbmRfYWZkKGludCBhZikKK3sKKwljb25zdCBzdHJ1Y3QgYWZkICphZmQ7CisKKwlpZiAoYWYgPT0gUEZfVU5TUEVDKQorCQlyZXR1cm4gTlVMTDsKKwlmb3IgKGFmZCA9IGFmZGw7IGFmZC0+YV9hZjsgYWZkKyspIHsKKwkJaWYgKGFmZC0+YV9hZiA9PSBhZikKKwkJCXJldHVybiBhZmQ7CisJfQorCXJldHVybiBOVUxMOworfQorCisjaWZkZWYgSU5FVDYKKy8qIGNvbnZlcnQgYSBzdHJpbmcgdG8gYSBzY29wZSBpZGVudGlmaWVyLiBYWFg6IElQdjYgc3BlY2lmaWMgKi8KK3N0YXRpYyBpbnQKK2lwNl9zdHIyc2NvcGVpZChjaGFyICpzY29wZSwgc3RydWN0IHNvY2thZGRyX2luNiAqc2luNiwgdV9pbnQzMl90ICpzY29wZWlkKQoreworCXVfbG9uZyBsc2NvcGVpZDsKKwlzdHJ1Y3QgaW42X2FkZHIgKmE2OworCWNoYXIgKmVwOworCisJYXNzZXJ0KHNjb3BlICE9IE5VTEwpOworCWFzc2VydChzaW42ICE9IE5VTEwpOworCWFzc2VydChzY29wZWlkICE9IE5VTEwpOworCisJYTYgPSAmc2luNi0+c2luNl9hZGRyOworCisJLyogZW1wdHkgc2NvcGVpZCBwb3J0aW9uIGlzIGludmFsaWQgKi8KKwlpZiAoKnNjb3BlID09ICdcMCcpCisJCXJldHVybiAtMTsKKworCWlmIChJTjZfSVNfQUREUl9MSU5LTE9DQUwoYTYpIHx8IElONl9JU19BRERSX01DX0xJTktMT0NBTChhNikpIHsKKwkJLyoKKwkJICogV2UgY3VycmVudGx5IGFzc3VtZSBhIG9uZS10by1vbmUgbWFwcGluZyBiZXR3ZWVuIGxpbmtzCisJCSAqIGFuZCBpbnRlcmZhY2VzLCBzbyB3ZSBzaW1wbHkgdXNlIGludGVyZmFjZSBpbmRpY2VzIGZvcgorCQkgKiBsaWtlLWxvY2FsIHNjb3Blcy4KKwkJICovCisJCSpzY29wZWlkID0gaWZfbmFtZXRvaW5kZXgoc2NvcGUpOworCQlpZiAoKnNjb3BlaWQgPT0gMCkKKwkJCWdvdG8gdHJ5bnVtZXJpYzsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogc3RpbGwgdW5jbGVhciBhYm91dCBsaXRlcmFsLCBhbGxvdyBudW1lcmljIG9ubHkgLSBwbGFjZWhvbGRlciAqLworCWlmIChJTjZfSVNfQUREUl9TSVRFTE9DQUwoYTYpIHx8IElONl9JU19BRERSX01DX1NJVEVMT0NBTChhNikpCisJCWdvdG8gdHJ5bnVtZXJpYzsKKwlpZiAoSU42X0lTX0FERFJfTUNfT1JHTE9DQUwoYTYpKQorCQlnb3RvIHRyeW51bWVyaWM7CisJZWxzZQorCQlnb3RvIHRyeW51bWVyaWM7CS8qIGdsb2JhbCAqLworCisJLyogdHJ5IHRvIGNvbnZlcnQgdG8gYSBudW1lcmljIGlkIGFzIGEgbGFzdCByZXNvcnQgKi8KKyAgdHJ5bnVtZXJpYzoKKwllcnJubyA9IDA7CisJbHNjb3BlaWQgPSBzdHJ0b3VsKHNjb3BlLCAmZXAsIDEwKTsKKwkqc2NvcGVpZCA9ICh1X2ludDMyX3QpKGxzY29wZWlkICYgMHhmZmZmZmZmZlVMKTsKKwlpZiAoZXJybm8gPT0gMCAmJiBlcCAmJiAqZXAgPT0gJ1wwJyAmJiAqc2NvcGVpZCA9PSBsc2NvcGVpZCkKKwkJcmV0dXJuIDA7CisJZWxzZQorCQlyZXR1cm4gLTE7Cit9CisjZW5kaWYKKworLyogY29kZSBkdXBsaWNhdGUgd2l0aCBnZXRobmFtYWRkci5jICovCisKK3N0YXRpYyBjb25zdCBjaGFyIEFza2VkRm9yR290W10gPQorCSJnZXRob3N0YnkqLmdldGFuc3dlcjogYXNrZWQgZm9yIFwiJXNcIiwgZ290IFwiJXNcIiI7CisKK3N0YXRpYyBzdHJ1Y3QgYWRkcmluZm8gKgorZ2V0YW5zd2VyKGNvbnN0IHF1ZXJ5YnVmICphbnN3ZXIsIGludCBhbnNsZW4sIGNvbnN0IGNoYXIgKnFuYW1lLCBpbnQgcXR5cGUsCisgICAgY29uc3Qgc3RydWN0IGFkZHJpbmZvICpwYWkpCit7CisJc3RydWN0IGFkZHJpbmZvIHNlbnRpbmVsLCAqY3VyOworCXN0cnVjdCBhZGRyaW5mbyBhaTsKKwljb25zdCBzdHJ1Y3QgYWZkICphZmQ7CisJY2hhciAqY2Fub25uYW1lOworCWNvbnN0IEhFQURFUiAqaHA7CisJY29uc3QgdV9jaGFyICpjcDsKKwlpbnQgbjsKKwljb25zdCB1X2NoYXIgKmVvbTsKKwljaGFyICpicCwgKmVwOworCWludCB0eXBlLCBjbGFzcywgYW5jb3VudCwgcWRjb3VudDsKKwlpbnQgaGF2ZWFuc3dlciwgaGFkX2Vycm9yOworCWNoYXIgdGJ1ZltNQVhETkFNRV07CisJaW50ICgqbmFtZV9vaykgKGNvbnN0IGNoYXIgKik7CisJY2hhciBob3N0YnVmWzgqMTAyNF07CisKKwlhc3NlcnQoYW5zd2VyICE9IE5VTEwpOworCWFzc2VydChxbmFtZSAhPSBOVUxMKTsKKwlhc3NlcnQocGFpICE9IE5VTEwpOworCisJbWVtc2V0KCZzZW50aW5lbCwgMCwgc2l6ZW9mKHNlbnRpbmVsKSk7CisJY3VyID0gJnNlbnRpbmVsOworCisJY2Fub25uYW1lID0gTlVMTDsKKwllb20gPSBhbnN3ZXItPmJ1ZiArIGFuc2xlbjsKKwlzd2l0Y2ggKHF0eXBlKSB7CisJY2FzZSBUX0E6CisJY2FzZSBUX0FBQUE6CisJY2FzZSBUX0FOWToJLyp1c2UgVF9BTlkgb25seSBmb3IgVF9BL1RfQUFBQSBsb29rdXAqLworCQluYW1lX29rID0gcmVzX2hub2s7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiBOVUxMOwkvKiBYWFggc2hvdWxkIGJlIGFib3J0KCk7ICovCisJfQorCS8qCisJICogZmluZCBmaXJzdCBzYXRpc2ZhY3RvcnkgYW5zd2VyCisJICovCisJaHAgPSAmYW5zd2VyLT5oZHI7CisJYW5jb3VudCA9IG50b2hzKGhwLT5hbmNvdW50KTsKKwlxZGNvdW50ID0gbnRvaHMoaHAtPnFkY291bnQpOworCWJwID0gaG9zdGJ1ZjsKKwllcCA9IGhvc3RidWYgKyBzaXplb2YgaG9zdGJ1ZjsKKwljcCA9IGFuc3dlci0+YnVmICsgSEZJWEVEU1o7CisJaWYgKHFkY291bnQgIT0gMSkgeworCQloX2Vycm5vID0gTk9fUkVDT1ZFUlk7CisJCXJldHVybiAoTlVMTCk7CisJfQorCW4gPSBkbl9leHBhbmQoYW5zd2VyLT5idWYsIGVvbSwgY3AsIGJwLCBlcCAtIGJwKTsKKwlpZiAoKG4gPCAwKSB8fCAhKCpuYW1lX29rKShicCkpIHsKKwkJaF9lcnJubyA9IE5PX1JFQ09WRVJZOworCQlyZXR1cm4gKE5VTEwpOworCX0KKwljcCArPSBuICsgUUZJWEVEU1o7CisJaWYgKHF0eXBlID09IFRfQSB8fCBxdHlwZSA9PSBUX0FBQUEgfHwgcXR5cGUgPT0gVF9BTlkpIHsKKwkJLyogcmVzX3NlbmQoKSBoYXMgYWxyZWFkeSB2ZXJpZmllZCB0aGF0IHRoZSBxdWVyeSBuYW1lIGlzIHRoZQorCQkgKiBzYW1lIGFzIHRoZSBvbmUgd2Ugc2VudDsgdGhpcyBqdXN0IGdldHMgdGhlIGV4cGFuZGVkIG5hbWUKKwkJICogKGkuZS4sIHdpdGggdGhlIHN1Y2NlZWRpbmcgc2VhcmNoLWRvbWFpbiB0YWNrZWQgb24pLgorCQkgKi8KKwkJbiA9IHN0cmxlbihicCkgKyAxOwkJLyogZm9yIHRoZSBcMCAqLworCQlpZiAobiA+PSBNQVhIT1NUTkFNRUxFTikgeworCQkJaF9lcnJubyA9IE5PX1JFQ09WRVJZOworCQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCQljYW5vbm5hbWUgPSBicDsKKwkJYnAgKz0gbjsKKwkJLyogVGhlIHFuYW1lIGNhbiBiZSBhYmJyZXZpYXRlZCwgYnV0IGhfbmFtZSBpcyBub3cgYWJzb2x1dGUuICovCisJCXFuYW1lID0gY2Fub25uYW1lOworCX0KKwloYXZlYW5zd2VyID0gMDsKKwloYWRfZXJyb3IgPSAwOworCXdoaWxlIChhbmNvdW50LS0gPiAwICYmIGNwIDwgZW9tICYmICFoYWRfZXJyb3IpIHsKKwkJbiA9IGRuX2V4cGFuZChhbnN3ZXItPmJ1ZiwgZW9tLCBjcCwgYnAsIGVwIC0gYnApOworCQlpZiAoKG4gPCAwKSB8fCAhKCpuYW1lX29rKShicCkpIHsKKwkJCWhhZF9lcnJvcisrOworCQkJY29udGludWU7CisJCX0KKwkJY3AgKz0gbjsJCQkvKiBuYW1lICovCisJCXR5cGUgPSBfZ2V0c2hvcnQoY3ApOworIAkJY3AgKz0gSU5UMTZTWjsJCQkvKiB0eXBlICovCisJCWNsYXNzID0gX2dldHNob3J0KGNwKTsKKyAJCWNwICs9IElOVDE2U1ogKyBJTlQzMlNaOwkvKiBjbGFzcywgVFRMICovCisJCW4gPSBfZ2V0c2hvcnQoY3ApOworCQljcCArPSBJTlQxNlNaOwkJCS8qIGxlbiAqLworCQlpZiAoY2xhc3MgIT0gQ19JTikgeworCQkJLyogWFhYIC0gZGVidWc/IHN5c2xvZz8gKi8KKwkJCWNwICs9IG47CisJCQljb250aW51ZTsJCS8qIFhYWCAtIGhhZF9lcnJvcisrID8gKi8KKwkJfQorCQlpZiAoKHF0eXBlID09IFRfQSB8fCBxdHlwZSA9PSBUX0FBQUEgfHwgcXR5cGUgPT0gVF9BTlkpICYmCisJCSAgICB0eXBlID09IFRfQ05BTUUpIHsKKwkJCW4gPSBkbl9leHBhbmQoYW5zd2VyLT5idWYsIGVvbSwgY3AsIHRidWYsIHNpemVvZiB0YnVmKTsKKwkJCWlmICgobiA8IDApIHx8ICEoKm5hbWVfb2spKHRidWYpKSB7CisJCQkJaGFkX2Vycm9yKys7CisJCQkJY29udGludWU7CisJCQl9CisJCQljcCArPSBuOworCQkJLyogR2V0IGNhbm9uaWNhbCBuYW1lLiAqLworCQkJbiA9IHN0cmxlbih0YnVmKSArIDE7CS8qIGZvciB0aGUgXDAgKi8KKwkJCWlmIChuID4gZXAgLSBicCB8fCBuID49IE1BWEhPU1ROQU1FTEVOKSB7CisJCQkJaGFkX2Vycm9yKys7CisJCQkJY29udGludWU7CisJCQl9CisJCQlzdHJsY3B5KGJwLCB0YnVmLCAoc2l6ZV90KShlcCAtIGJwKSk7CisJCQljYW5vbm5hbWUgPSBicDsKKwkJCWJwICs9IG47CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAocXR5cGUgPT0gVF9BTlkpIHsKKwkJCWlmICghKHR5cGUgPT0gVF9BIHx8IHR5cGUgPT0gVF9BQUFBKSkgeworCQkJCWNwICs9IG47CisJCQkJY29udGludWU7CisJCQl9CisJCX0gZWxzZSBpZiAodHlwZSAhPSBxdHlwZSkgeworCQkJaWYgKHR5cGUgIT0gVF9LRVkgJiYgdHlwZSAhPSBUX1NJRykKKwkJCQlzeXNsb2coTE9HX05PVElDRXxMT0dfQVVUSCwKKwkgICAgICAgImdldGhvc3RieSouZ2V0YW5zd2VyOiBhc2tlZCBmb3IgXCIlcyAlcyAlc1wiLCBnb3QgdHlwZSBcIiVzXCIiLAorCQkJCSAgICAgICBxbmFtZSwgcF9jbGFzcyhDX0lOKSwgcF90eXBlKHF0eXBlKSwKKwkJCQkgICAgICAgcF90eXBlKHR5cGUpKTsKKwkJCWNwICs9IG47CisJCQljb250aW51ZTsJCS8qIFhYWCAtIGhhZF9lcnJvcisrID8gKi8KKwkJfQorCQlzd2l0Y2ggKHR5cGUpIHsKKwkJY2FzZSBUX0E6CisJCWNhc2UgVF9BQUFBOgorCQkJaWYgKHN0cmNhc2VjbXAoY2Fub25uYW1lLCBicCkgIT0gMCkgeworCQkJCXN5c2xvZyhMT0dfTk9USUNFfExPR19BVVRILAorCQkJCSAgICAgICBBc2tlZEZvckdvdCwgY2Fub25uYW1lLCBicCk7CisJCQkJY3AgKz0gbjsKKwkJCQljb250aW51ZTsJLyogWFhYIC0gaGFkX2Vycm9yKysgPyAqLworCQkJfQorCQkJaWYgKHR5cGUgPT0gVF9BICYmIG4gIT0gSU5BRERSU1opIHsKKwkJCQljcCArPSBuOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKHR5cGUgPT0gVF9BQUFBICYmIG4gIT0gSU42QUREUlNaKSB7CisJCQkJY3AgKz0gbjsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICh0eXBlID09IFRfQUFBQSkgeworCQkJCXN0cnVjdCBpbjZfYWRkciBpbjY7CisJCQkJbWVtY3B5KCZpbjYsIGNwLCBJTjZBRERSU1opOworCQkJCWlmIChJTjZfSVNfQUREUl9WNE1BUFBFRCgmaW42KSkgeworCQkJCQljcCArPSBuOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQl9CisJCQlpZiAoIWhhdmVhbnN3ZXIpIHsKKwkJCQlpbnQgbm47CisKKwkJCQljYW5vbm5hbWUgPSBicDsKKwkJCQlubiA9IHN0cmxlbihicCkgKyAxOwkvKiBmb3IgdGhlIFwwICovCisJCQkJYnAgKz0gbm47CisJCQl9CisKKwkJCS8qIGRvbid0IG92ZXJ3cml0ZSBwYWkgKi8KKwkJCWFpID0gKnBhaTsKKwkJCWFpLmFpX2ZhbWlseSA9ICh0eXBlID09IFRfQSkgPyBBRl9JTkVUIDogQUZfSU5FVDY7CisJCQlhZmQgPSBmaW5kX2FmZChhaS5haV9mYW1pbHkpOworCQkJaWYgKGFmZCA9PSBOVUxMKSB7CisJCQkJY3AgKz0gbjsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWN1ci0+YWlfbmV4dCA9IGdldF9haSgmYWksIGFmZCwgKGNvbnN0IGNoYXIgKiljcCk7CisJCQlpZiAoY3VyLT5haV9uZXh0ID09IE5VTEwpCisJCQkJaGFkX2Vycm9yKys7CisJCQl3aGlsZSAoY3VyICYmIGN1ci0+YWlfbmV4dCkKKwkJCQljdXIgPSBjdXItPmFpX25leHQ7CisJCQljcCArPSBuOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlhYm9ydCgpOworCQl9CisJCWlmICghaGFkX2Vycm9yKQorCQkJaGF2ZWFuc3dlcisrOworCX0KKwlpZiAoaGF2ZWFuc3dlcikgeworCQlpZiAoIWNhbm9ubmFtZSkKKwkJCSh2b2lkKWdldF9jYW5vbm5hbWUocGFpLCBzZW50aW5lbC5haV9uZXh0LCBxbmFtZSk7CisJCWVsc2UKKwkJCSh2b2lkKWdldF9jYW5vbm5hbWUocGFpLCBzZW50aW5lbC5haV9uZXh0LCBjYW5vbm5hbWUpOworCQloX2Vycm5vID0gTkVUREJfU1VDQ0VTUzsKKwkJcmV0dXJuIHNlbnRpbmVsLmFpX25leHQ7CisJfQorCisJaF9lcnJubyA9IE5PX1JFQ09WRVJZOworCXJldHVybiBOVUxMOworfQorCisjZGVmaW5lIFNPUlRFREFERFIocCkJKCgoc3RydWN0IHNvY2thZGRyX2luICopKHZvaWQgKikocC0+YWlfbmV4dC0+YWlfYWRkcikpLT5zaW5fYWRkci5zX2FkZHIpCisjZGVmaW5lIFNPUlRNQVRDSChwLCBzKSAoKFNPUlRFREFERFIocCkgJiAocykubWFzaykgPT0gKHMpLmFkZHIuc19hZGRyKQorCitzdGF0aWMgdm9pZAorYWlzb3J0KHN0cnVjdCBhZGRyaW5mbyAqcywgcmVzX3N0YXRlIHJlcykKK3sKKwlzdHJ1Y3QgYWRkcmluZm8gaGVhZCwgKnQsICpwOworCWludCBpOworCisJaGVhZC5haV9uZXh0ID0gTlVMTDsKKwl0ID0gJmhlYWQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgcmVzLT5uc29ydDsgaSsrKSB7CisJCXAgPSBzOworCQl3aGlsZSAocC0+YWlfbmV4dCkgeworCQkJaWYgKChwLT5haV9uZXh0LT5haV9mYW1pbHkgIT0gQUZfSU5FVCkKKwkJCXx8IFNPUlRNQVRDSChwLCByZXMtPnNvcnRfbGlzdFtpXSkpIHsKKwkJCQl0LT5haV9uZXh0ID0gcC0+YWlfbmV4dDsKKwkJCQl0ID0gdC0+YWlfbmV4dDsKKwkJCQlwLT5haV9uZXh0ID0gcC0+YWlfbmV4dC0+YWlfbmV4dDsKKwkJCX0gZWxzZSB7CisJCQkJcCA9IHAtPmFpX25leHQ7CisJCQl9CisJCX0KKwl9CisKKwkvKiBhZGQgcmVzdCBvZiBsaXN0IGFuZCByZXNldCBzIHRvIHRoZSBuZXcgbGlzdCovCisJdC0+YWlfbmV4dCA9IHMtPmFpX25leHQ7CisJcy0+YWlfbmV4dCA9IGhlYWQuYWlfbmV4dDsKK30KKworLypBUkdTVVNFRCovCitzdGF0aWMgaW50CitfZG5zX2dldGFkZHJpbmZvKHZvaWQgKnJ2LCB2b2lkCSpjYl9kYXRhLCB2YV9saXN0IGFwKQoreworCXN0cnVjdCBhZGRyaW5mbyAqYWk7CisJcXVlcnlidWYgKmJ1ZiwgKmJ1ZjI7CisJY29uc3QgY2hhciAqbmFtZTsKKwljb25zdCBzdHJ1Y3QgYWRkcmluZm8gKnBhaTsKKwlzdHJ1Y3QgYWRkcmluZm8gc2VudGluZWwsICpjdXI7CisJc3RydWN0IHJlc190YXJnZXQgcSwgcTI7CisJcmVzX3N0YXRlIHJlczsKKworCW5hbWUgPSB2YV9hcmcoYXAsIGNoYXIgKik7CisJcGFpID0gdmFfYXJnKGFwLCBjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKik7CisKKwlmcHJpbnRmKHN0ZGVyciwgIl9kbnNfZ2V0YWRkcmluZm8oKSBuYW1lID0gJyVzJ1xuIiwgbmFtZSk7CisKKwltZW1zZXQoJnEsIDAsIHNpemVvZihxKSk7CisJbWVtc2V0KCZxMiwgMCwgc2l6ZW9mKHEyKSk7CisJbWVtc2V0KCZzZW50aW5lbCwgMCwgc2l6ZW9mKHNlbnRpbmVsKSk7CisJY3VyID0gJnNlbnRpbmVsOworCisJYnVmID0gbWFsbG9jKHNpemVvZigqYnVmKSk7CisJaWYgKGJ1ZiA9PSBOVUxMKSB7CisJCWhfZXJybm8gPSBORVREQl9JTlRFUk5BTDsKKwkJcmV0dXJuIE5TX05PVEZPVU5EOworCX0KKwlidWYyID0gbWFsbG9jKHNpemVvZigqYnVmMikpOworCWlmIChidWYyID09IE5VTEwpIHsKKwkJZnJlZShidWYpOworCQloX2Vycm5vID0gTkVUREJfSU5URVJOQUw7CisJCXJldHVybiBOU19OT1RGT1VORDsKKwl9CisKKwlzd2l0Y2ggKHBhaS0+YWlfZmFtaWx5KSB7CisJY2FzZSBBRl9VTlNQRUM6CisJCS8qIHByZWZlciBJUHY2ICovCisJCXEubmFtZSA9IG5hbWU7CisJCXEucWNsYXNzID0gQ19JTjsKKwkJcS5xdHlwZSA9IFRfQUFBQTsKKwkJcS5hbnN3ZXIgPSBidWYtPmJ1ZjsKKwkJcS5hbnNsZW4gPSBzaXplb2YoYnVmLT5idWYpOworCQlxLm5leHQgPSAmcTI7CisJCXEyLm5hbWUgPSBuYW1lOworCQlxMi5xY2xhc3MgPSBDX0lOOworCQlxMi5xdHlwZSA9IFRfQTsKKwkJcTIuYW5zd2VyID0gYnVmMi0+YnVmOworCQlxMi5hbnNsZW4gPSBzaXplb2YoYnVmMi0+YnVmKTsKKwkJYnJlYWs7CisJY2FzZSBBRl9JTkVUOgorCQlxLm5hbWUgPSBuYW1lOworCQlxLnFjbGFzcyA9IENfSU47CisJCXEucXR5cGUgPSBUX0E7CisJCXEuYW5zd2VyID0gYnVmLT5idWY7CisJCXEuYW5zbGVuID0gc2l6ZW9mKGJ1Zi0+YnVmKTsKKwkJYnJlYWs7CisJY2FzZSBBRl9JTkVUNjoKKwkJcS5uYW1lID0gbmFtZTsKKwkJcS5xY2xhc3MgPSBDX0lOOworCQlxLnF0eXBlID0gVF9BQUFBOworCQlxLmFuc3dlciA9IGJ1Zi0+YnVmOworCQlxLmFuc2xlbiA9IHNpemVvZihidWYtPmJ1Zik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWZyZWUoYnVmKTsKKwkJZnJlZShidWYyKTsKKwkJcmV0dXJuIE5TX1VOQVZBSUw7CisJfQorCisJcmVzID0gX19yZXNfZ2V0X3N0YXRlKCk7CisJaWYgKHJlcyA9PSBOVUxMKSB7CisJCWZyZWUoYnVmKTsKKwkJZnJlZShidWYyKTsKKwkJcmV0dXJuIE5TX05PVEZPVU5EOworCX0KKworCWlmIChyZXNfc2VhcmNoTihuYW1lLCAmcSwgcmVzKSA8IDApIHsKKwkJX19yZXNfcHV0X3N0YXRlKHJlcyk7CisJCWZyZWUoYnVmKTsKKwkJZnJlZShidWYyKTsKKwkJcmV0dXJuIE5TX05PVEZPVU5EOworCX0KKwlhaSA9IGdldGFuc3dlcihidWYsIHEubiwgcS5uYW1lLCBxLnF0eXBlLCBwYWkpOworCWlmIChhaSkgeworCQljdXItPmFpX25leHQgPSBhaTsKKwkJd2hpbGUgKGN1ciAmJiBjdXItPmFpX25leHQpCisJCQljdXIgPSBjdXItPmFpX25leHQ7CisJfQorCWlmIChxLm5leHQpIHsKKwkJYWkgPSBnZXRhbnN3ZXIoYnVmMiwgcTIubiwgcTIubmFtZSwgcTIucXR5cGUsIHBhaSk7CisJCWlmIChhaSkKKwkJCWN1ci0+YWlfbmV4dCA9IGFpOworCX0KKwlmcmVlKGJ1Zik7CisJZnJlZShidWYyKTsKKwlpZiAoc2VudGluZWwuYWlfbmV4dCA9PSBOVUxMKSB7CisJCV9fcmVzX3B1dF9zdGF0ZShyZXMpOworCQlzd2l0Y2ggKGhfZXJybm8pIHsKKwkJY2FzZSBIT1NUX05PVF9GT1VORDoKKwkJCXJldHVybiBOU19OT1RGT1VORDsKKwkJY2FzZSBUUllfQUdBSU46CisJCQlyZXR1cm4gTlNfVFJZQUdBSU47CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gTlNfVU5BVkFJTDsKKwkJfQorCX0KKworCWlmIChyZXMtPm5zb3J0KQorCQlhaXNvcnQoJnNlbnRpbmVsLCByZXMpOworCisJX19yZXNfcHV0X3N0YXRlKHJlcyk7CisKKwkqKChzdHJ1Y3QgYWRkcmluZm8gKiopcnYpID0gc2VudGluZWwuYWlfbmV4dDsKKwlyZXR1cm4gTlNfU1VDQ0VTUzsKK30KKworc3RhdGljIHZvaWQKK19zZXRodGVudChGSUxFICoqaG9zdGYpCit7CisKKwlpZiAoISpob3N0ZikKKwkJKmhvc3RmID0gZm9wZW4oX1BBVEhfSE9TVFMsICJyIiApOworCWVsc2UKKwkJcmV3aW5kKCpob3N0Zik7Cit9CisKK3N0YXRpYyB2b2lkCitfZW5kaHRlbnQoRklMRSAqKmhvc3RmKQoreworCisJaWYgKCpob3N0ZikgeworCQkodm9pZCkgZmNsb3NlKCpob3N0Zik7CisJCSpob3N0ZiA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGFkZHJpbmZvICoKK19nZXRodGVudChGSUxFICoqaG9zdGYsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqcGFpKQoreworCWNoYXIgKnA7CisJY2hhciAqY3AsICp0bmFtZSwgKmNuYW1lOworCXN0cnVjdCBhZGRyaW5mbyBoaW50cywgKnJlczAsICpyZXM7CisJaW50IGVycm9yOworCWNvbnN0IGNoYXIgKmFkZHI7CisJY2hhciBob3N0YnVmWzgqMTAyNF07CisKKy8vCWZwcmludGYoc3RkZXJyLCAiX2dldGh0ZW50KCkgbmFtZSA9ICclcydcbiIsIG5hbWUpOworCWFzc2VydChuYW1lICE9IE5VTEwpOworCWFzc2VydChwYWkgIT0gTlVMTCk7CisKKwlpZiAoISpob3N0ZiAmJiAhKCpob3N0ZiA9IGZvcGVuKF9QQVRIX0hPU1RTLCAiciIgKSkpCisJCXJldHVybiAoTlVMTCk7CisgYWdhaW46CisJaWYgKCEocCA9IGZnZXRzKGhvc3RidWYsIHNpemVvZiBob3N0YnVmLCAqaG9zdGYpKSkKKwkJcmV0dXJuIChOVUxMKTsKKwlpZiAoKnAgPT0gJyMnKQorCQlnb3RvIGFnYWluOworCWlmICghKGNwID0gc3RycGJyayhwLCAiI1xuIikpKQorCQlnb3RvIGFnYWluOworCSpjcCA9ICdcMCc7CisJaWYgKCEoY3AgPSBzdHJwYnJrKHAsICIgXHQiKSkpCisJCWdvdG8gYWdhaW47CisJKmNwKysgPSAnXDAnOworCWFkZHIgPSBwOworCS8qIGlmIHRoaXMgaXMgbm90IHNvbWV0aGluZyB3ZSdyZSBsb29raW5nIGZvciwgc2tpcCBpdC4gKi8KKwljbmFtZSA9IE5VTEw7CisJd2hpbGUgKGNwICYmICpjcCkgeworCQlpZiAoKmNwID09ICcgJyB8fCAqY3AgPT0gJ1x0JykgeworCQkJY3ArKzsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghY25hbWUpCisJCQljbmFtZSA9IGNwOworCQl0bmFtZSA9IGNwOworCQlpZiAoKGNwID0gc3RycGJyayhjcCwgIiBcdCIpKSAhPSBOVUxMKQorCQkJKmNwKysgPSAnXDAnOworLy8JCWZwcmludGYoc3RkZXJyLCAiXHR0bmFtZSA9ICclcyciLCB0bmFtZSk7CisJCWlmIChzdHJjYXNlY21wKG5hbWUsIHRuYW1lKSA9PSAwKQorCQkJZ290byBmb3VuZDsKKwl9CisJZ290byBhZ2FpbjsKKworZm91bmQ6CisJaGludHMgPSAqcGFpOworCWhpbnRzLmFpX2ZsYWdzID0gQUlfTlVNRVJJQ0hPU1Q7CisJZXJyb3IgPSBnZXRhZGRyaW5mbyhhZGRyLCBOVUxMLCAmaGludHMsICZyZXMwKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gYWdhaW47CisJZm9yIChyZXMgPSByZXMwOyByZXM7IHJlcyA9IHJlcy0+YWlfbmV4dCkgeworCQkvKiBjb3ZlciBpdCB1cCAqLworCQlyZXMtPmFpX2ZsYWdzID0gcGFpLT5haV9mbGFnczsKKworCQlpZiAocGFpLT5haV9mbGFncyAmIEFJX0NBTk9OTkFNRSkgeworCQkJaWYgKGdldF9jYW5vbm5hbWUocGFpLCByZXMsIGNuYW1lKSAhPSAwKSB7CisJCQkJZnJlZWFkZHJpbmZvKHJlczApOworCQkJCWdvdG8gYWdhaW47CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIHJlczA7Cit9CisKKy8qQVJHU1VTRUQqLworc3RhdGljIGludAorX2ZpbGVzX2dldGFkZHJpbmZvKHZvaWQgKnJ2LCB2b2lkICpjYl9kYXRhLCB2YV9saXN0IGFwKQoreworCWNvbnN0IGNoYXIgKm5hbWU7CisJY29uc3Qgc3RydWN0IGFkZHJpbmZvICpwYWk7CisJc3RydWN0IGFkZHJpbmZvIHNlbnRpbmVsLCAqY3VyOworCXN0cnVjdCBhZGRyaW5mbyAqcDsKKwlGSUxFICpob3N0ZiA9IE5VTEw7CisKKwluYW1lID0gdmFfYXJnKGFwLCBjaGFyICopOworCXBhaSA9IHZhX2FyZyhhcCwgc3RydWN0IGFkZHJpbmZvICopOworCisvLwlmcHJpbnRmKHN0ZGVyciwgIl9maWxlc19nZXRhZGRyaW5mbygpIG5hbWUgPSAnJXMnXG4iLCBuYW1lKTsKKwltZW1zZXQoJnNlbnRpbmVsLCAwLCBzaXplb2Yoc2VudGluZWwpKTsKKwljdXIgPSAmc2VudGluZWw7CisKKwlfc2V0aHRlbnQoJmhvc3RmKTsKKwl3aGlsZSAoKHAgPSBfZ2V0aHRlbnQoJmhvc3RmLCBuYW1lLCBwYWkpKSAhPSBOVUxMKSB7CisJCWN1ci0+YWlfbmV4dCA9IHA7CisJCXdoaWxlIChjdXIgJiYgY3VyLT5haV9uZXh0KQorCQkJY3VyID0gY3VyLT5haV9uZXh0OworCX0KKwlfZW5kaHRlbnQoJmhvc3RmKTsKKworCSooKHN0cnVjdCBhZGRyaW5mbyAqKilydikgPSBzZW50aW5lbC5haV9uZXh0OworCWlmIChzZW50aW5lbC5haV9uZXh0ID09IE5VTEwpCisJCXJldHVybiBOU19OT1RGT1VORDsKKwlyZXR1cm4gTlNfU1VDQ0VTUzsKK30KKworLyogcmVzb2x2ZXIgbG9naWMgKi8KKworLyoKKyAqIEZvcm11bGF0ZSBhIG5vcm1hbCBxdWVyeSwgc2VuZCwgYW5kIGF3YWl0IGFuc3dlci4KKyAqIFJldHVybmVkIGFuc3dlciBpcyBwbGFjZWQgaW4gc3VwcGxpZWQgYnVmZmVyICJhbnN3ZXIiLgorICogUGVyZm9ybSBwcmVsaW1pbmFyeSBjaGVjayBvZiBhbnN3ZXIsIHJldHVybmluZyBzdWNjZXNzIG9ubHkKKyAqIGlmIG5vIGVycm9yIGlzIGluZGljYXRlZCBhbmQgdGhlIGFuc3dlciBjb3VudCBpcyBub256ZXJvLgorICogUmV0dXJuIHRoZSBzaXplIG9mIHRoZSByZXNwb25zZSBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvci4KKyAqIEVycm9yIG51bWJlciBpcyBsZWZ0IGluIGhfZXJybm8uCisgKgorICogQ2FsbGVyIG11c3QgcGFyc2UgYW5zd2VyIGFuZCBkZXRlcm1pbmUgd2hldGhlciBpdCBhbnN3ZXJzIHRoZSBxdWVzdGlvbi4KKyAqLworc3RhdGljIGludAorcmVzX3F1ZXJ5Tihjb25zdCBjaGFyICpuYW1lLCAvKiBkb21haW4gbmFtZSAqLyBzdHJ1Y3QgcmVzX3RhcmdldCAqdGFyZ2V0LAorICAgIHJlc19zdGF0ZSByZXMpCit7CisJdV9jaGFyIGJ1ZltNQVhQQUNLRVRdOworCUhFQURFUiAqaHA7CisJaW50IG47CisJc3RydWN0IHJlc190YXJnZXQgKnQ7CisJaW50IHJjb2RlOworCWludCBhbmNvdW50OworCisJYXNzZXJ0KG5hbWUgIT0gTlVMTCk7CisJLyogWFhYOiB0YXJnZXQgbWF5IGJlIE5VTEw/Pz8gKi8KKworCXJjb2RlID0gTk9FUlJPUjsKKwlhbmNvdW50ID0gMDsKKworCWZvciAodCA9IHRhcmdldDsgdDsgdCA9IHQtPm5leHQpIHsKKwkJaW50IGNsYXNzLCB0eXBlOworCQl1X2NoYXIgKmFuc3dlcjsKKwkJaW50IGFuc2xlbjsKKworCQlocCA9IChIRUFERVIgKikodm9pZCAqKXQtPmFuc3dlcjsKKwkJaHAtPnJjb2RlID0gTk9FUlJPUjsJLyogZGVmYXVsdCAqLworCisJCS8qIG1ha2UgaXQgZWFzaWVyLi4uICovCisJCWNsYXNzID0gdC0+cWNsYXNzOworCQl0eXBlID0gdC0+cXR5cGU7CisJCWFuc3dlciA9IHQtPmFuc3dlcjsKKwkJYW5zbGVuID0gdC0+YW5zbGVuOworI2lmZGVmIERFQlVHCisJCWlmIChyZXMtPm9wdGlvbnMgJiBSRVNfREVCVUcpCisJCQlwcmludGYoIjs7IHJlc19ucXVlcnkoJXMsICVkLCAlZClcbiIsIG5hbWUsIGNsYXNzLCB0eXBlKTsKKyNlbmRpZgorCisJCW4gPSByZXNfbm1rcXVlcnkocmVzLCBRVUVSWSwgbmFtZSwgY2xhc3MsIHR5cGUsIE5VTEwsIDAsIE5VTEwsCisJCSAgICBidWYsIHNpemVvZihidWYpKTsKKyNpZmRlZiBSRVNfVVNFX0VETlMwCisJCWlmIChuID4gMCAmJiAocmVzLT5vcHRpb25zICYgUkVTX1VTRV9FRE5TMCkgIT0gMCkKKwkJCW4gPSByZXNfbm9wdChyZXMsIG4sIGJ1Ziwgc2l6ZW9mKGJ1ZiksIGFuc2xlbik7CisjZW5kaWYKKwkJaWYgKG4gPD0gMCkgeworI2lmZGVmIERFQlVHCisJCQlpZiAocmVzLT5vcHRpb25zICYgUkVTX0RFQlVHKQorCQkJCXByaW50ZigiOzsgcmVzX25xdWVyeTogbWtxdWVyeSBmYWlsZWRcbiIpOworI2VuZGlmCisJCQloX2Vycm5vID0gTk9fUkVDT1ZFUlk7CisJCQlyZXR1cm4gbjsKKwkJfQorCQluID0gcmVzX25zZW5kKHJlcywgYnVmLCBuLCBhbnN3ZXIsIGFuc2xlbik7CisjaWYgMAorCQlpZiAobiA8IDApIHsKKyNpZmRlZiBERUJVRworCQkJaWYgKHJlcy0+b3B0aW9ucyAmIFJFU19ERUJVRykKKwkJCQlwcmludGYoIjs7IHJlc19xdWVyeTogc2VuZCBlcnJvclxuIik7CisjZW5kaWYKKwkJCWhfZXJybm8gPSBUUllfQUdBSU47CisJCQlyZXR1cm4gbjsKKwkJfQorI2VuZGlmCisKKwkJaWYgKG4gPCAwIHx8IGhwLT5yY29kZSAhPSBOT0VSUk9SIHx8IG50b2hzKGhwLT5hbmNvdW50KSA9PSAwKSB7CisJCQlyY29kZSA9IGhwLT5yY29kZTsJLyogcmVjb3JkIG1vc3QgcmVjZW50IGVycm9yICovCisjaWZkZWYgREVCVUcKKwkJCWlmIChyZXMtPm9wdGlvbnMgJiBSRVNfREVCVUcpCisJCQkJcHJpbnRmKCI7OyByY29kZSA9ICV1LCBhbmNvdW50PSV1XG4iLCBocC0+cmNvZGUsCisJCQkJICAgIG50b2hzKGhwLT5hbmNvdW50KSk7CisjZW5kaWYKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJYW5jb3VudCArPSBudG9ocyhocC0+YW5jb3VudCk7CisKKwkJdC0+biA9IG47CisJfQorCisJaWYgKGFuY291bnQgPT0gMCkgeworCQlzd2l0Y2ggKHJjb2RlKSB7CisJCWNhc2UgTlhET01BSU46CisJCQloX2Vycm5vID0gSE9TVF9OT1RfRk9VTkQ7CisJCQlicmVhazsKKwkJY2FzZSBTRVJWRkFJTDoKKwkJCWhfZXJybm8gPSBUUllfQUdBSU47CisJCQlicmVhazsKKwkJY2FzZSBOT0VSUk9SOgorCQkJaF9lcnJubyA9IE5PX0RBVEE7CisJCQlicmVhazsKKwkJY2FzZSBGT1JNRVJSOgorCQljYXNlIE5PVElNUDoKKwkJY2FzZSBSRUZVU0VEOgorCQlkZWZhdWx0OgorCQkJaF9lcnJubyA9IE5PX1JFQ09WRVJZOworCQkJYnJlYWs7CisJCX0KKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gYW5jb3VudDsKK30KKworLyoKKyAqIEZvcm11bGF0ZSBhIG5vcm1hbCBxdWVyeSwgc2VuZCwgYW5kIHJldHJpZXZlIGFuc3dlciBpbiBzdXBwbGllZCBidWZmZXIuCisgKiBSZXR1cm4gdGhlIHNpemUgb2YgdGhlIHJlc3BvbnNlIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yLgorICogSWYgZW5hYmxlZCwgaW1wbGVtZW50IHNlYXJjaCBydWxlcyB1bnRpbCBhbnN3ZXIgb3IgdW5yZWNvdmVyYWJsZSBmYWlsdXJlCisgKiBpcyBkZXRlY3RlZC4gIEVycm9yIGNvZGUsIGlmIGFueSwgaXMgbGVmdCBpbiBoX2Vycm5vLgorICovCitzdGF0aWMgaW50CityZXNfc2VhcmNoTihjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgcmVzX3RhcmdldCAqdGFyZ2V0LCByZXNfc3RhdGUgcmVzKQoreworCWNvbnN0IGNoYXIgKmNwLCAqIGNvbnN0ICpkb21haW47CisJSEVBREVSICpocDsKKwl1X2ludCBkb3RzOworCWludCB0cmFpbGluZ19kb3QsIHJldCwgc2F2ZWRfaGVycm5vOworCWludCBnb3Rfbm9kYXRhID0gMCwgZ290X3NlcnZmYWlsID0gMCwgdHJpZWRfYXNfaXMgPSAwOworCisJYXNzZXJ0KG5hbWUgIT0gTlVMTCk7CisJYXNzZXJ0KHRhcmdldCAhPSBOVUxMKTsKKworCWhwID0gKEhFQURFUiAqKSh2b2lkICopdGFyZ2V0LT5hbnN3ZXI7CS8qWFhYKi8KKworCWVycm5vID0gMDsKKwloX2Vycm5vID0gSE9TVF9OT1RfRk9VTkQ7CS8qIGRlZmF1bHQsIGlmIHdlIG5ldmVyIHF1ZXJ5ICovCisJZG90cyA9IDA7CisJZm9yIChjcCA9IG5hbWU7ICpjcDsgY3ArKykKKwkJZG90cyArPSAoKmNwID09ICcuJyk7CisJdHJhaWxpbmdfZG90ID0gMDsKKwlpZiAoY3AgPiBuYW1lICYmICotLWNwID09ICcuJykKKwkJdHJhaWxpbmdfZG90Kys7CisKKworZnByaW50ZihzdGRlcnIsICJyZXNfc2VhcmNoTigpIG5hbWUgPSAnJXMnXG4iLCBuYW1lKTsKKworCS8qCisJICogaWYgdGhlcmUgYXJlbid0IGFueSBkb3RzLCBpdCBjb3VsZCBiZSBhIHVzZXItbGV2ZWwgYWxpYXMKKwkgKi8KKwlpZiAoIWRvdHMgJiYgKGNwID0gX19ob3N0YWxpYXMobmFtZSkpICE9IE5VTEwpIHsKKwkJcmV0ID0gcmVzX3F1ZXJ5TihjcCwgdGFyZ2V0LCByZXMpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qCisJICogSWYgdGhlcmUgYXJlIGRvdHMgaW4gdGhlIG5hbWUgYWxyZWFkeSwgbGV0J3MganVzdCBnaXZlIGl0IGEgdHJ5CisJICogJ2FzIGlzJy4gIFRoZSB0aHJlc2hvbGQgY2FuIGJlIHNldCB3aXRoIHRoZSAibmRvdHMiIG9wdGlvbi4KKwkgKi8KKwlzYXZlZF9oZXJybm8gPSAtMTsKKwlpZiAoZG90cyA+PSByZXMtPm5kb3RzKSB7CisJCXJldCA9IHJlc19xdWVyeWRvbWFpbk4obmFtZSwgTlVMTCwgdGFyZ2V0LCByZXMpOworCQlpZiAocmV0ID4gMCkKKwkJCXJldHVybiAocmV0KTsKKwkJc2F2ZWRfaGVycm5vID0gaF9lcnJubzsKKwkJdHJpZWRfYXNfaXMrKzsKKwl9CisKKwkvKgorCSAqIFdlIGRvIGF0IGxlYXN0IG9uZSBsZXZlbCBvZiBzZWFyY2ggaWYKKwkgKgktIHRoZXJlIGlzIG5vIGRvdCBhbmQgUkVTX0RFRk5BTUUgaXMgc2V0LCBvcgorCSAqCS0gdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGRvdCwgdGhlcmUgaXMgbm8gdHJhaWxpbmcgZG90LAorCSAqCSAgYW5kIFJFU19ETlNSQ0ggaXMgc2V0LgorCSAqLworCWlmICgoIWRvdHMgJiYgKHJlcy0+b3B0aW9ucyAmIFJFU19ERUZOQU1FUykpIHx8CisJICAgIChkb3RzICYmICF0cmFpbGluZ19kb3QgJiYgKHJlcy0+b3B0aW9ucyAmIFJFU19ETlNSQ0gpKSkgeworCQlpbnQgZG9uZSA9IDA7CisKKwkJZm9yIChkb21haW4gPSAoY29uc3QgY2hhciAqIGNvbnN0ICopcmVzLT5kbnNyY2g7CisJCSAgICpkb21haW4gJiYgIWRvbmU7CisJCSAgIGRvbWFpbisrKSB7CisKKwkJCXJldCA9IHJlc19xdWVyeWRvbWFpbk4obmFtZSwgKmRvbWFpbiwgdGFyZ2V0LCByZXMpOworCQkJaWYgKHJldCA+IDApCisJCQkJcmV0dXJuIHJldDsKKworCQkJLyoKKwkJCSAqIElmIG5vIHNlcnZlciBwcmVzZW50LCBnaXZlIHVwLgorCQkJICogSWYgbmFtZSBpc24ndCBmb3VuZCBpbiB0aGlzIGRvbWFpbiwKKwkJCSAqIGtlZXAgdHJ5aW5nIGhpZ2hlciBkb21haW5zIGluIHRoZSBzZWFyY2ggbGlzdAorCQkJICogKGlmIHRoYXQncyBlbmFibGVkKS4KKwkJCSAqIE9uIGEgTk9fREFUQSBlcnJvciwga2VlcCB0cnlpbmcsIG90aGVyd2lzZQorCQkJICogYSB3aWxkY2FyZCBlbnRyeSBvZiBhbm90aGVyIHR5cGUgY291bGQga2VlcCB1cworCQkJICogZnJvbSBmaW5kaW5nIHRoaXMgZW50cnkgaGlnaGVyIGluIHRoZSBkb21haW4uCisJCQkgKiBJZiB3ZSBnZXQgc29tZSBvdGhlciBlcnJvciAobmVnYXRpdmUgYW5zd2VyIG9yCisJCQkgKiBzZXJ2ZXIgZmFpbHVyZSksIHRoZW4gc3RvcCBzZWFyY2hpbmcgdXAsCisJCQkgKiBidXQgdHJ5IHRoZSBpbnB1dCBuYW1lIGJlbG93IGluIGNhc2UgaXQncworCQkJICogZnVsbHktcXVhbGlmaWVkLgorCQkJICovCisJCQlpZiAoZXJybm8gPT0gRUNPTk5SRUZVU0VEKSB7CisJCQkJaF9lcnJubyA9IFRSWV9BR0FJTjsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisKKwkJCXN3aXRjaCAoaF9lcnJubykgeworCQkJY2FzZSBOT19EQVRBOgorCQkJCWdvdF9ub2RhdGErKzsKKwkJCQkvKiBGQUxMVEhST1VHSCAqLworCQkJY2FzZSBIT1NUX05PVF9GT1VORDoKKwkJCQkvKiBrZWVwIHRyeWluZyAqLworCQkJCWJyZWFrOworCQkJY2FzZSBUUllfQUdBSU46CisJCQkJaWYgKGhwLT5yY29kZSA9PSBTRVJWRkFJTCkgeworCQkJCQkvKiB0cnkgbmV4dCBzZWFyY2ggZWxlbWVudCwgaWYgYW55ICovCisJCQkJCWdvdF9zZXJ2ZmFpbCsrOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJLyogRkFMTFRIUk9VR0ggKi8KKwkJCWRlZmF1bHQ6CisJCQkJLyogYW55dGhpbmcgZWxzZSBpbXBsaWVzIHRoYXQgd2UncmUgZG9uZSAqLworCQkJCWRvbmUrKzsKKwkJCX0KKwkJCS8qCisJCQkgKiBpZiB3ZSBnb3QgaGVyZSBmb3Igc29tZSByZWFzb24gb3RoZXIgdGhhbiBETlNSQ0gsCisJCQkgKiB3ZSBvbmx5IHdhbnRlZCBvbmUgaXRlcmF0aW9uIG9mIHRoZSBsb29wLCBzbyBzdG9wLgorCQkJICovCisJCQlpZiAoIShyZXMtPm9wdGlvbnMgJiBSRVNfRE5TUkNIKSkKKwkJCSAgICAgICAgZG9uZSsrOworCQl9CisJfQorCisJLyoKKwkgKiBpZiB3ZSBoYXZlIG5vdCBhbHJlYWR5IHRyaWVkIHRoZSBuYW1lICJhcyBpcyIsIGRvIHRoYXQgbm93LgorCSAqIG5vdGUgdGhhdCB3ZSBkbyB0aGlzIHJlZ2FyZGxlc3Mgb2YgaG93IG1hbnkgZG90cyB3ZXJlIGluIHRoZQorCSAqIG5hbWUgb3Igd2hldGhlciBpdCBlbmRzIHdpdGggYSBkb3QuCisJICovCisJaWYgKCF0cmllZF9hc19pcykgeworCQlyZXQgPSByZXNfcXVlcnlkb21haW5OKG5hbWUsIE5VTEwsIHRhcmdldCwgcmVzKTsKKwkJaWYgKHJldCA+IDApCisJCQlyZXR1cm4gcmV0OworCX0KKworCS8qCisJICogaWYgd2UgZ290IGhlcmUsIHdlIGRpZG4ndCBzYXRpc2Z5IHRoZSBzZWFyY2guCisJICogaWYgd2UgZGlkIGFuIGluaXRpYWwgZnVsbCBxdWVyeSwgcmV0dXJuIHRoYXQgcXVlcnkncyBoX2Vycm5vCisJICogKG5vdGUgdGhhdCB3ZSB3b3VsZG4ndCBiZSBoZXJlIGlmIHRoYXQgcXVlcnkgaGFkIHN1Y2NlZWRlZCkuCisJICogZWxzZSBpZiB3ZSBldmVyIGdvdCBhIG5vZGF0YSwgc2VuZCB0aGF0IGJhY2sgYXMgdGhlIHJlYXNvbi4KKwkgKiBlbHNlIHNlbmQgYmFjayBtZWFuaW5nbGVzcyBoX2Vycm5vLCB0aGF0IGJlaW5nIHRoZSBvbmUgZnJvbQorCSAqIHRoZSBsYXN0IEROU1JDSCB3ZSBkaWQuCisJICovCisJaWYgKHNhdmVkX2hlcnJubyAhPSAtMSkKKwkJaF9lcnJubyA9IHNhdmVkX2hlcnJubzsKKwllbHNlIGlmIChnb3Rfbm9kYXRhKQorCQloX2Vycm5vID0gTk9fREFUQTsKKwllbHNlIGlmIChnb3Rfc2VydmZhaWwpCisJCWhfZXJybm8gPSBUUllfQUdBSU47CisJcmV0dXJuIC0xOworfQorCisvKgorICogUGVyZm9ybSBhIGNhbGwgb24gcmVzX3F1ZXJ5IG9uIHRoZSBjb25jYXRlbmF0aW9uIG9mIG5hbWUgYW5kIGRvbWFpbiwKKyAqIHJlbW92aW5nIGEgdHJhaWxpbmcgZG90IGZyb20gbmFtZSBpZiBkb21haW4gaXMgTlVMTC4KKyAqLworc3RhdGljIGludAorcmVzX3F1ZXJ5ZG9tYWluTihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpkb21haW4sCisgICAgc3RydWN0IHJlc190YXJnZXQgKnRhcmdldCwgcmVzX3N0YXRlIHJlcykKK3sKKwljaGFyIG5idWZbTUFYRE5BTUVdOworCWNvbnN0IGNoYXIgKmxvbmduYW1lID0gbmJ1ZjsKKwlzaXplX3QgbiwgZDsKKworCWFzc2VydChuYW1lICE9IE5VTEwpOworCS8qIFhYWDogdGFyZ2V0IG1heSBiZSBOVUxMPz8/ICovCisKKyNpZmRlZiBERUJVRworCWlmIChyZXMtPm9wdGlvbnMgJiBSRVNfREVCVUcpCisJCXByaW50ZigiOzsgcmVzX3F1ZXJ5ZG9tYWluKCVzLCAlcylcbiIsCisJCQluYW1lLCBkb21haW4/ZG9tYWluOiI8TmlsPiIpOworI2VuZGlmCisJaWYgKGRvbWFpbiA9PSBOVUxMKSB7CisJCS8qCisJCSAqIENoZWNrIGZvciB0cmFpbGluZyAnLic7CisJCSAqIGNvcHkgd2l0aG91dCAnLicgaWYgcHJlc2VudC4KKwkJICovCisJCW4gPSBzdHJsZW4obmFtZSk7CisJCWlmIChuICsgMSA+IHNpemVvZihuYnVmKSkgeworCQkJaF9lcnJubyA9IE5PX1JFQ09WRVJZOworCQkJcmV0dXJuIC0xOworCQl9CisJCWlmIChuID4gMCAmJiBuYW1lWy0tbl0gPT0gJy4nKSB7CisJCQlzdHJuY3B5KG5idWYsIG5hbWUsIG4pOworCQkJbmJ1ZltuXSA9ICdcMCc7CisJCX0gZWxzZQorCQkJbG9uZ25hbWUgPSBuYW1lOworCX0gZWxzZSB7CisJCW4gPSBzdHJsZW4obmFtZSk7CisJCWQgPSBzdHJsZW4oZG9tYWluKTsKKwkJaWYgKG4gKyAxICsgZCArIDEgPiBzaXplb2YobmJ1ZikpIHsKKwkJCWhfZXJybm8gPSBOT19SRUNPVkVSWTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlzbnByaW50ZihuYnVmLCBzaXplb2YobmJ1ZiksICIlcy4lcyIsIG5hbWUsIGRvbWFpbik7CisJfQorCXJldHVybiByZXNfcXVlcnlOKGxvbmduYW1lLCB0YXJnZXQsIHJlcyk7Cit9CmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9uZXQvZ2V0bmFtZWluZm8uYyBiL2xpYmMvbmV0YnNkL25ldC9nZXRuYW1laW5mby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiMDRmYmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL25ldGJzZC9uZXQvZ2V0bmFtZWluZm8uYwpAQCAtMCwwICsxLDUxOSBAQAorLyoJJE5ldEJTRDogZ2V0bmFtZWluZm8uYyx2IDEuNDMgMjAwNi8wMi8xNyAxNTo1ODoyNiBnaW5zYmFjaCBFeHAgJAkqLworLyoJJEtBTUU6IGdldG5hbWVpbmZvLmMsdiAxLjQ1IDIwMDAvMDkvMjUgMjI6NDM6NTYgaXRvanVuIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDAgQmVuIEhhcnJpcy4KKyAqIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiwgMTk5NywgYW5kIDE5OTggV0lERSBQcm9qZWN0LgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIHByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFBST0pFQ1QgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBQUk9KRUNUIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIElzc3VlcyB0byBiZSBkaXNjdXNzZWQ6CisgKiAtIFRocmVhZCBzYWZlLW5lc3MgbXVzdCBiZSBjaGVja2VkCisgKiAtIFJGQzI1NTMgc2F5cyB0aGF0IHdlIHNob3VsZCByYWlzZSBlcnJvciBvbiBzaG9ydCBidWZmZXIuICBYL09wZW4gc2F5cworICogICB3ZSBuZWVkIHRvIHRydW5jYXRlIHRoZSByZXN1bHQuICBXZSBvYmV5IFJGQzI1NTMgKGFuZCBYL09wZW4gc2hvdWxkIGJlCisgKiAgIG1vZGlmaWVkKS4gIGlwbmd3ZyByb3VnaCBjb25zZW5zdXMgc2VlbXMgdG8gZm9sbG93IFJGQzI1NTMuCisgKiAtIFdoYXQgaXMgImxvY2FsIiBpbiBOSV9GUUROPworICogLSBOSV9OQU1FUkVRRCBhbmQgTklfTlVNRVJJQ0hPU1QgY29uZmxpY3Qgd2l0aCBlYWNoIG90aGVyLgorICogLSAoS0FNRSBleHRlbnNpb24pIGFsd2F5cyBhdHRhY2ggdGV4dHVhbCBzY29wZWlkIChmZTgwOjoxJWxvMCksIGlmCisgKiAgIHNpbjZfc2NvcGVfaWQgaXMgZmlsbGVkIC0gc3RhbmRhcmRpemF0aW9uIHN0YXR1cz8KKyAqICAgWFhYIGJyZWFrcyBiYWNrd2FyZCBjb21wYXQgZm9yIGNvZGUgdGhhdCBleHBlY3RzIG5vIHNjb3BlaWQuCisgKiAgIGJld2FyZSBvbiBtZXJnZS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCitfX1JDU0lEKCIkTmV0QlNEOiBnZXRuYW1laW5mby5jLHYgMS40MyAyMDA2LzAyLzE3IDE1OjU4OjI2IGdpbnNiYWNoIEV4cCAkIik7CisjZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2luY2x1ZGUgPG5ldC9pZl9kbC5oPgorI2luY2x1ZGUgPG5ldC9pZl9pZWVlMTM5NC5oPgorI2luY2x1ZGUgPG5ldC9pZl90eXBlcy5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlICJhcnBhX25hbWVzZXIuaCIKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxuZXRkYi5oPgorI2lmZGVmIEFORFJPSURfQ0hBTkdFUworI2luY2x1ZGUgInJlc29sdl9wcml2YXRlLmgiCisjZWxzZQorI2luY2x1ZGUgPHJlc29sdi5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWZkIHsKKwlpbnQJCWFfYWY7CisJc29ja2xlbl90CWFfYWRkcmxlbjsKKwlzb2NrbGVuX3QJYV9zb2NrbGVuOworCWludAkJYV9vZmY7Cit9IGFmZGwgW10gPSB7CisjaWZkZWYgSU5FVDYKKwl7UEZfSU5FVDYsIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNiksCisJCW9mZnNldG9mKHN0cnVjdCBzb2NrYWRkcl9pbjYsIHNpbjZfYWRkcil9LAorI2VuZGlmCisJe1BGX0lORVQsIHNpemVvZihzdHJ1Y3QgaW5fYWRkciksIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pLAorCQlvZmZzZXRvZihzdHJ1Y3Qgc29ja2FkZHJfaW4sIHNpbl9hZGRyKX0sCisJezAsIDAsIDAsIDB9LAorfTsKKworc3RydWN0IHNvY2tpbmV0IHsKKwl1X2NoYXIJc2lfbGVuOworCXVfY2hhcglzaV9mYW1pbHk7CisJdV9zaG9ydAlzaV9wb3J0OworfTsKKworc3RhdGljIGludCBnZXRuYW1laW5mb19pbmV0IF9fUCgoY29uc3Qgc3RydWN0IHNvY2thZGRyICosIHNvY2tsZW5fdCwgY2hhciAqLAorICAgIHNvY2tsZW5fdCwgY2hhciAqLCBzb2NrbGVuX3QsIGludCkpOworI2lmZGVmIElORVQ2CitzdGF0aWMgaW50IGlwNl9wYXJzZW51bWVyaWMgX19QKChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKiwgY29uc3QgY2hhciAqLCBjaGFyICosCisJCQkJIHNvY2tsZW5fdCwgaW50KSk7CitzdGF0aWMgaW50IGlwNl9zYTJzdHIgX19QKChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICosIGNoYXIgKiwgc2l6ZV90LAorCQkJCSBpbnQpKTsKKyNlbmRpZgorc3RhdGljIGludCBnZXRuYW1laW5mb19saW5rIF9fUCgoY29uc3Qgc3RydWN0IHNvY2thZGRyICosIHNvY2tsZW5fdCwgY2hhciAqLAorICAgIHNvY2tsZW5fdCwgY2hhciAqLCBzb2NrbGVuX3QsIGludCkpOworc3RhdGljIGludCBoZXhuYW1lIF9fUCgoY29uc3QgdV9pbnQ4X3QgKiwgc2l6ZV90LCBjaGFyICosIHNvY2tsZW5fdCkpOworCisvKgorICogVG9wLWxldmVsIGdldG5hbWVpbmZvKCkgY29kZS4gIExvb2sgYXQgdGhlIGFkZHJlc3MgZmFtaWx5LCBhbmQgcGljayBhbgorICogYXBwcm9wcmlhdGUgZnVuY3Rpb24gdG8gY2FsbC4KKyAqLworaW50IGdldG5hbWVpbmZvKGNvbnN0IHN0cnVjdCBzb2NrYWRkciogc2EsIHNvY2tsZW5fdCBzYWxlbiwgY2hhciogaG9zdCwgc2l6ZV90IGhvc3RsZW4sIGNoYXIqIHNlcnYsIHNpemVfdCBzZXJ2bGVuLCBpbnQgZmxhZ3MpCit7CisJc3dpdGNoIChzYS0+c2FfZmFtaWx5KSB7CisJY2FzZSBBRl9JTkVUOgorCWNhc2UgQUZfSU5FVDY6CisJCXJldHVybiBnZXRuYW1laW5mb19pbmV0KHNhLCBzYWxlbiwgaG9zdCwgaG9zdGxlbiwKKwkJICAgIHNlcnYsIHNlcnZsZW4sIGZsYWdzKTsKKyNpZiAwCisJY2FzZSBBRl9MSU5LOgorCQlyZXR1cm4gZ2V0bmFtZWluZm9fbGluayhzYSwgc2FsZW4sIGhvc3QsIGhvc3RsZW4sCisJCSAgICBzZXJ2LCBzZXJ2bGVuLCBmbGFncyk7CisjZW5kaWYKKwlkZWZhdWx0OgorCQlyZXR1cm4gRUFJX0ZBTUlMWTsKKwl9Cit9CisKKworLyoKKyAqIGdldG5hbWVpbmZvX2luZXQoKToKKyAqIEZvcm1hdCBhbiBJUHY0IG9yIElQdjYgc29ja2FkZHIgaW50byBhIHByaW50YWJsZSBzdHJpbmcuCisgKi8KK3N0YXRpYyBpbnQKK2dldG5hbWVpbmZvX2luZXQoc2EsIHNhbGVuLCBob3N0LCBob3N0bGVuLCBzZXJ2LCBzZXJ2bGVuLCBmbGFncykKKwljb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhOworCXNvY2tsZW5fdCBzYWxlbjsKKwljaGFyICpob3N0OworCXNvY2tsZW5fdCBob3N0bGVuOworCWNoYXIgKnNlcnY7CisJc29ja2xlbl90IHNlcnZsZW47CisJaW50IGZsYWdzOworeworCWNvbnN0IHN0cnVjdCBhZmQgKmFmZDsKKwlzdHJ1Y3Qgc2VydmVudCAqc3A7CisJc3RydWN0IGhvc3RlbnQgKmhwOworCXVfc2hvcnQgcG9ydDsKKwlpbnQgZmFtaWx5LCBpOworCWNvbnN0IGNoYXIgKmFkZHI7CisJdV9pbnQzMl90IHY0YTsKKwljaGFyIG51bXNlcnZbNTEyXTsKKwljaGFyIG51bWFkZHJbNTEyXTsKKworCS8qIHNhIGlzIGNoZWNrZWQgYmVsb3cgKi8KKwkvKiBob3N0IG1heSBiZSBOVUxMICovCisJLyogc2VydiBtYXkgYmUgTlVMTCAqLworCisJaWYgKHNhID09IE5VTEwpCisJCXJldHVybiBFQUlfRkFJTDsKKworI2lmZGVmIEJTRDRfNAorCWlmIChzYS0+c2FfbGVuICE9IHNhbGVuKQorCQlyZXR1cm4gRUFJX0ZBSUw7CisjZW5kaWYKKworCWZhbWlseSA9IHNhLT5zYV9mYW1pbHk7CisJZm9yIChpID0gMDsgYWZkbFtpXS5hX2FmOyBpKyspCisJCWlmIChhZmRsW2ldLmFfYWYgPT0gZmFtaWx5KSB7CisJCQlhZmQgPSAmYWZkbFtpXTsKKwkJCWdvdG8gZm91bmQ7CisJCX0KKwlyZXR1cm4gRUFJX0ZBTUlMWTsKKworIGZvdW5kOgorCWlmIChzYWxlbiAhPSBhZmQtPmFfc29ja2xlbikKKwkJcmV0dXJuIEVBSV9GQUlMOworCisJLyogbmV0d29yayBieXRlIG9yZGVyICovCisJcG9ydCA9ICgoY29uc3Qgc3RydWN0IHNvY2tpbmV0ICopKGNvbnN0IHZvaWQgKilzYSktPnNpX3BvcnQ7CisJYWRkciA9IChjb25zdCBjaGFyICopKGNvbnN0IHZvaWQgKilzYSArIGFmZC0+YV9vZmY7CisKKwlpZiAoc2VydiA9PSBOVUxMIHx8IHNlcnZsZW4gPT0gMCkgeworCQkvKgorCQkgKiBkbyBub3RoaW5nIGluIHRoaXMgY2FzZS4KKwkJICogaW4gY2FzZSB5b3UgYXJlIHdvbmRlcmluZyBpZiAiJiYiIGlzIG1vcmUgY29ycmVjdCB0aGFuCisJCSAqICJ8fCIgaGVyZTogcmZjMjU1M2Jpcy0wMyBzYXlzIHRoYXQgc2VydiA9PSBOVUxMIE9SCisJCSAqIHNlcnZsZW4gPT0gMCBtZWFucyB0aGF0IHRoZSBjYWxsZXIgZG9lcyBub3Qgd2FudCB0aGUgcmVzdWx0LgorCQkgKi8KKwl9IGVsc2UgeworCQlpZiAoZmxhZ3MgJiBOSV9OVU1FUklDU0VSVikKKwkJCXNwID0gTlVMTDsKKwkJZWxzZSB7CisJCQlzcCA9IGdldHNlcnZieXBvcnQocG9ydCwKKwkJCQkoZmxhZ3MgJiBOSV9ER1JBTSkgPyAidWRwIiA6ICJ0Y3AiKTsKKwkJfQorCQlpZiAoc3ApIHsKKwkJCWlmIChzdHJsZW4oc3AtPnNfbmFtZSkgKyAxID4gKHNpemVfdClzZXJ2bGVuKQorCQkJCXJldHVybiBFQUlfTUVNT1JZOworCQkJc3RybGNweShzZXJ2LCBzcC0+c19uYW1lLCBzZXJ2bGVuKTsKKwkJfSBlbHNlIHsKKwkJCXNucHJpbnRmKG51bXNlcnYsIHNpemVvZihudW1zZXJ2KSwgIiV1IiwgbnRvaHMocG9ydCkpOworCQkJaWYgKHN0cmxlbihudW1zZXJ2KSArIDEgPiAoc2l6ZV90KXNlcnZsZW4pCisJCQkJcmV0dXJuIEVBSV9NRU1PUlk7CisJCQlzdHJsY3B5KHNlcnYsIG51bXNlcnYsIHNlcnZsZW4pOworCQl9CisJfQorCisJc3dpdGNoIChzYS0+c2FfZmFtaWx5KSB7CisJY2FzZSBBRl9JTkVUOgorCQl2NGEgPSAodV9pbnQzMl90KQorCQkgICAgbnRvaGwoKChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKikKKwkJICAgIChjb25zdCB2b2lkICopc2EpLT5zaW5fYWRkci5zX2FkZHIpOworCQlpZiAoSU5fTVVMVElDQVNUKHY0YSkgfHwgSU5fRVhQRVJJTUVOVEFMKHY0YSkpCisJCQlmbGFncyB8PSBOSV9OVU1FUklDSE9TVDsKKwkJdjRhID4+PSBJTl9DTEFTU0FfTlNISUZUOworCQlpZiAodjRhID09IDApCisJCQlmbGFncyB8PSBOSV9OVU1FUklDSE9TVDsKKwkJYnJlYWs7CisjaWZkZWYgSU5FVDYKKwljYXNlIEFGX0lORVQ2OgorCSAgICB7CisJCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7CisJCXNpbjYgPSAoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqKShjb25zdCB2b2lkICopc2E7CisJCXN3aXRjaCAoc2luNi0+c2luNl9hZGRyLnM2X2FkZHJbMF0pIHsKKwkJY2FzZSAweDAwOgorCQkJaWYgKElONl9JU19BRERSX1Y0TUFQUEVEKCZzaW42LT5zaW42X2FkZHIpKQorCQkJCTsKKwkJCWVsc2UgaWYgKElONl9JU19BRERSX0xPT1BCQUNLKCZzaW42LT5zaW42X2FkZHIpKQorCQkJCTsKKwkJCWVsc2UKKwkJCQlmbGFncyB8PSBOSV9OVU1FUklDSE9TVDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJaWYgKElONl9JU19BRERSX0xJTktMT0NBTCgmc2luNi0+c2luNl9hZGRyKSkgeworCQkJCWZsYWdzIHw9IE5JX05VTUVSSUNIT1NUOworCQkJfQorCQkJZWxzZSBpZiAoSU42X0lTX0FERFJfTVVMVElDQVNUKCZzaW42LT5zaW42X2FkZHIpKQorCQkJCWZsYWdzIHw9IE5JX05VTUVSSUNIT1NUOworCQkJYnJlYWs7CisJCX0KKwkgICAgfQorCQlicmVhazsKKyNlbmRpZgorCX0KKwlpZiAoaG9zdCA9PSBOVUxMIHx8IGhvc3RsZW4gPT0gMCkgeworCQkvKgorCQkgKiBkbyBub3RoaW5nIGluIHRoaXMgY2FzZS4KKwkJICogaW4gY2FzZSB5b3UgYXJlIHdvbmRlcmluZyBpZiAiJiYiIGlzIG1vcmUgY29ycmVjdCB0aGFuCisJCSAqICJ8fCIgaGVyZTogcmZjMjU1M2Jpcy0wMyBzYXlzIHRoYXQgaG9zdCA9PSBOVUxMIG9yCisJCSAqIGhvc3RsZW4gPT0gMCBtZWFucyB0aGF0IHRoZSBjYWxsZXIgZG9lcyBub3Qgd2FudCB0aGUgcmVzdWx0LgorCQkgKi8KKwl9IGVsc2UgaWYgKGZsYWdzICYgTklfTlVNRVJJQ0hPU1QpIHsKKwkJc2l6ZV90IG51bWFkZHJsZW47CisKKwkJLyogTlVNRVJJQ0hPU1QgYW5kIE5BTUVSRVFEIGNvbmZsaWN0cyB3aXRoIGVhY2ggb3RoZXIgKi8KKwkJaWYgKGZsYWdzICYgTklfTkFNRVJFUUQpCisJCQlyZXR1cm4gRUFJX05PTkFNRTsKKworCQlzd2l0Y2goYWZkLT5hX2FmKSB7CisjaWZkZWYgSU5FVDYKKwkJY2FzZSBBRl9JTkVUNjoKKwkJeworCQkJaW50IGVycm9yOworCisJCQlpZiAoKGVycm9yID0gaXA2X3BhcnNlbnVtZXJpYyhzYSwgYWRkciwgaG9zdCwKKwkJCQkJCSAgICAgIGhvc3RsZW4sIGZsYWdzKSkgIT0gMCkKKwkJCQlyZXR1cm4oZXJyb3IpOworCQkJYnJlYWs7CisJCX0KKyNlbmRpZgorCQlkZWZhdWx0OgorCQkJaWYgKGluZXRfbnRvcChhZmQtPmFfYWYsIGFkZHIsIG51bWFkZHIsIHNpemVvZihudW1hZGRyKSkKKwkJCSAgICA9PSBOVUxMKQorCQkJCXJldHVybiBFQUlfU1lTVEVNOworCQkJbnVtYWRkcmxlbiA9IHN0cmxlbihudW1hZGRyKTsKKwkJCWlmIChudW1hZGRybGVuICsgMSA+IChzaXplX3QpaG9zdGxlbikgLyogZG9uJ3QgZm9yZ2V0IHRlcm1pbmF0b3IgKi8KKwkJCQlyZXR1cm4gRUFJX01FTU9SWTsKKwkJCXN0cmxjcHkoaG9zdCwgbnVtYWRkciwgaG9zdGxlbik7CisJCQlicmVhazsKKwkJfQorCX0gZWxzZSB7CisJCWhwID0gZ2V0aG9zdGJ5YWRkcihhZGRyLCBhZmQtPmFfYWRkcmxlbiwgYWZkLT5hX2FmKTsKKworCQlpZiAoaHApIHsKKyNpZiAwCisJCQkvKgorCQkJICogY29tbWVudGVkIG91dCwgc2luY2UgImZvciBsb2NhbCBob3N0IiBpcyBub3QKKwkJCSAqIGltcGxlbWVudGVkIGhlcmUgLSBzZWUgUkZDMjU1MyBwMzAKKwkJCSAqLworCQkJaWYgKGZsYWdzICYgTklfTk9GUUROKSB7CisJCQkJY2hhciAqcDsKKwkJCQlwID0gc3RyY2hyKGhwLT5oX25hbWUsICcuJyk7CisJCQkJaWYgKHApCisJCQkJCSpwID0gJ1wwJzsKKwkJCX0KKyNlbmRpZgorCQkJaWYgKHN0cmxlbihocC0+aF9uYW1lKSArIDEgPiAoc2l6ZV90KWhvc3RsZW4pIHsKKwkJCQlyZXR1cm4gRUFJX01FTU9SWTsKKwkJCX0KKwkJCXN0cmxjcHkoaG9zdCwgaHAtPmhfbmFtZSwgaG9zdGxlbik7CisJCX0gZWxzZSB7CisJCQlpZiAoZmxhZ3MgJiBOSV9OQU1FUkVRRCkKKwkJCQlyZXR1cm4gRUFJX05PTkFNRTsKKwkJCXN3aXRjaChhZmQtPmFfYWYpIHsKKyNpZmRlZiBJTkVUNgorCQkJY2FzZSBBRl9JTkVUNjoKKwkJCXsKKwkJCQlpbnQgZXJyb3I7CisKKwkJCQlpZiAoKGVycm9yID0gaXA2X3BhcnNlbnVtZXJpYyhzYSwgYWRkciwgaG9zdCwKKwkJCQkJCQkgICAgICBob3N0bGVuLAorCQkJCQkJCSAgICAgIGZsYWdzKSkgIT0gMCkKKwkJCQkJcmV0dXJuKGVycm9yKTsKKwkJCQlicmVhazsKKwkJCX0KKyNlbmRpZgorCQkJZGVmYXVsdDoKKwkJCQlpZiAoaW5ldF9udG9wKGFmZC0+YV9hZiwgYWRkciwgaG9zdCwKKwkJCQkgICAgaG9zdGxlbikgPT0gTlVMTCkKKwkJCQkJcmV0dXJuIEVBSV9TWVNURU07CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuKDApOworfQorCisjaWZkZWYgSU5FVDYKK3N0YXRpYyBpbnQKK2lwNl9wYXJzZW51bWVyaWMoc2EsIGFkZHIsIGhvc3QsIGhvc3RsZW4sIGZsYWdzKQorCWNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2E7CisJY29uc3QgY2hhciAqYWRkcjsKKwljaGFyICpob3N0OworCXNvY2tsZW5fdCBob3N0bGVuOworCWludCBmbGFnczsKK3sKKwlzaXplX3QgbnVtYWRkcmxlbjsKKwljaGFyIG51bWFkZHJbNTEyXTsKKworCWFzc2VydChzYSAhPSBOVUxMKTsKKwlhc3NlcnQoYWRkciAhPSBOVUxMKTsKKwlhc3NlcnQoaG9zdCAhPSBOVUxMKTsKKworCWlmIChpbmV0X250b3AoQUZfSU5FVDYsIGFkZHIsIG51bWFkZHIsIHNpemVvZihudW1hZGRyKSkgPT0gTlVMTCkKKwkJcmV0dXJuIEVBSV9TWVNURU07CisKKwludW1hZGRybGVuID0gc3RybGVuKG51bWFkZHIpOworCWlmIChudW1hZGRybGVuICsgMSA+IGhvc3RsZW4pIC8qIGRvbid0IGZvcmdldCB0ZXJtaW5hdG9yICovCisJCXJldHVybiBFQUlfT1ZFUkZMT1c7CisJc3RybGNweShob3N0LCBudW1hZGRyLCBob3N0bGVuKTsKKworCWlmICgoKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKikoY29uc3Qgdm9pZCAqKXNhKS0+c2luNl9zY29wZV9pZCkgeworCQljaGFyIHpvbmVidWZbTUFYSE9TVE5BTUVMRU5dOworCQlpbnQgem9uZWxlbjsKKworCQl6b25lbGVuID0gaXA2X3NhMnN0cigKKwkJICAgIChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICopKGNvbnN0IHZvaWQgKilzYSwKKwkJICAgIHpvbmVidWYsIHNpemVvZih6b25lYnVmKSwgZmxhZ3MpOworCQlpZiAoem9uZWxlbiA8IDApCisJCQlyZXR1cm4gRUFJX09WRVJGTE9XOworCQlpZiAoKHNpemVfdCkgem9uZWxlbiArIDEgKyBudW1hZGRybGVuICsgMSA+IGhvc3RsZW4pCisJCQlyZXR1cm4gRUFJX09WRVJGTE9XOworCQkvKiBjb25zdHJ1Y3QgPG51bWVyaWMtYWRkcj48ZGVsaW0+PHpvbmVpZD4gKi8KKwkJbWVtY3B5KGhvc3QgKyBudW1hZGRybGVuICsgMSwgem9uZWJ1ZiwKKwkJICAgIChzaXplX3Qpem9uZWxlbik7CisJCWhvc3RbbnVtYWRkcmxlbl0gPSBTQ09QRV9ERUxJTUlURVI7CisJCWhvc3RbbnVtYWRkcmxlbiArIDEgKyB6b25lbGVuXSA9ICdcMCc7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIEFSR1NVU0VEICovCitzdGF0aWMgaW50CitpcDZfc2Eyc3RyKHNhNiwgYnVmLCBidWZzaXosIGZsYWdzKQorCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNhNjsKKwljaGFyICpidWY7CisJc2l6ZV90IGJ1ZnNpejsKKwlpbnQgZmxhZ3M7Cit7CisJdW5zaWduZWQgaW50IGlmaW5kZXg7CisJY29uc3Qgc3RydWN0IGluNl9hZGRyICphNjsKKwlpbnQgbjsKKworCWFzc2VydChzYTYgIT0gTlVMTCk7CisJYXNzZXJ0KGJ1ZiAhPSBOVUxMKTsKKworCWlmaW5kZXggPSAodW5zaWduZWQgaW50KXNhNi0+c2luNl9zY29wZV9pZDsKKwlhNiA9ICZzYTYtPnNpbjZfYWRkcjsKKworI2lmZGVmIE5JX05VTUVSSUNTQ09QRQorCWlmICgoZmxhZ3MgJiBOSV9OVU1FUklDU0NPUEUpICE9IDApIHsKKwkJbiA9IHNucHJpbnRmKGJ1ZiwgYnVmc2l6LCAiJXUiLCBzYTYtPnNpbjZfc2NvcGVfaWQpOworCQlpZiAobiA8IDAgfHwgbiA+PSBidWZzaXopCisJCQlyZXR1cm4gLTE7CisJCWVsc2UKKwkJCXJldHVybiBuOworCX0KKyNlbmRpZgorCisJLyogaWZfaW5kZXh0b25hbWUoKSBkb2VzIG5vdCB0YWtlIGJ1ZmZlciBzaXplLiAgbm90IGEgZ29vZCBhcGkuLi4gKi8KKwlpZiAoKElONl9JU19BRERSX0xJTktMT0NBTChhNikgfHwgSU42X0lTX0FERFJfTUNfTElOS0xPQ0FMKGE2KSkgJiYKKwkgICAgYnVmc2l6ID49IElGX05BTUVTSVpFKSB7CisJCWNoYXIgKnAgPSBpZl9pbmRleHRvbmFtZShpZmluZGV4LCBidWYpOworCQlpZiAocCkgeworCQkJcmV0dXJuKHN0cmxlbihwKSk7CisJCX0KKwl9CisKKwkvKiBsYXN0IHJlc29ydCAqLworCW4gPSBzbnByaW50ZihidWYsIGJ1ZnNpeiwgIiV1Iiwgc2E2LT5zaW42X3Njb3BlX2lkKTsKKwlpZiAobiA8IDAgfHwgKHNpemVfdCkgbiA+PSBidWZzaXopCisJCXJldHVybiAtMTsKKwllbHNlCisJCXJldHVybiBuOworfQorI2VuZGlmIC8qIElORVQ2ICovCisKKworLyoKKyAqIGdldG5hbWVpbmZvX2xpbmsoKToKKyAqIEZvcm1hdCBhIGxpbmstbGF5ZXIgYWRkcmVzcyBpbnRvIGEgcHJpbnRhYmxlIGZvcm1hdCwgcGF5aW5nIGF0dGVudGlvbiB0bworICogdGhlIGludGVyZmFjZSB0eXBlLgorICovCisvKiBBUkdTVVNFRCAqLworc3RhdGljIGludAorZ2V0bmFtZWluZm9fbGluayhjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhLCBzb2NrbGVuX3Qgc2FsZW4sCisgICAgY2hhciAqaG9zdCwgc29ja2xlbl90IGhvc3RsZW4sIGNoYXIgKnNlcnYsIHNvY2tsZW5fdCBzZXJ2bGVuLAorICAgIGludCBmbGFncykKK3sKKwljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfZGwgKnNkbCA9CisJICAgIChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfZGwgKikoY29uc3Qgdm9pZCAqKXNhOworCWNvbnN0IHN0cnVjdCBpZWVlMTM5NF9od2FkZHIgKmloYTsKKwlpbnQgbjsKKworCWlmIChzZXJ2ICE9IE5VTEwgJiYgc2VydmxlbiA+IDApCisJCSpzZXJ2ID0gJ1wwJzsKKworCWlmIChzZGwtPnNkbF9ubGVuID09IDAgJiYgc2RsLT5zZGxfYWxlbiA9PSAwICYmIHNkbC0+c2RsX3NsZW4gPT0gMCkgeworCQluID0gc25wcmludGYoaG9zdCwgaG9zdGxlbiwgImxpbmsjJXUiLCBzZGwtPnNkbF9pbmRleCk7CisJCWlmIChuIDwgMCB8fCAoc29ja2xlbl90KSBuID4gaG9zdGxlbikgeworCQkJKmhvc3QgPSAnXDAnOworCQkJcmV0dXJuIEVBSV9NRU1PUlk7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCisJc3dpdGNoIChzZGwtPnNkbF90eXBlKSB7CisjaWZkZWYgSUZUX0VDT05FVAorCWNhc2UgSUZUX0VDT05FVDoKKwkJaWYgKHNkbC0+c2RsX2FsZW4gPCAyKQorCQkJcmV0dXJuIEVBSV9GQU1JTFk7CisJCWlmIChDTExBRERSKHNkbClbMV0gPT0gMCkKKwkJCW4gPSBzbnByaW50Zihob3N0LCBob3N0bGVuLCAiJXUiLCBDTExBRERSKHNkbClbMF0pOworCQllbHNlCisJCQluID0gc25wcmludGYoaG9zdCwgaG9zdGxlbiwgIiV1LiV1IiwKKwkJCSAgICBDTExBRERSKHNkbClbMV0sIENMTEFERFIoc2RsKVswXSk7CisJCWlmIChuIDwgMCB8fCAoc29ja2xlbl90KSBuID49IGhvc3RsZW4pIHsKKwkJCSpob3N0ID0gJ1wwJzsKKwkJCXJldHVybiBFQUlfTUVNT1JZOworCQl9IGVsc2UKKwkJCXJldHVybiAwOworI2VuZGlmCisJY2FzZSBJRlRfSUVFRTEzOTQ6CisJCWlmIChzZGwtPnNkbF9hbGVuIDwgc2l6ZW9mKGloYS0+aWhhX3VpZCkpCisJCQlyZXR1cm4gRUFJX0ZBTUlMWTsKKwkJaWhhID0KKwkJICAgIChjb25zdCBzdHJ1Y3QgaWVlZTEzOTRfaHdhZGRyICopKGNvbnN0IHZvaWQgKilDTExBRERSKHNkbCk7CisJCXJldHVybiBoZXhuYW1lKGloYS0+aWhhX3VpZCwgc2l6ZW9mKGloYS0+aWhhX3VpZCksCisJCSAgICBob3N0LCBob3N0bGVuKTsKKwkvKgorCSAqIFRoZSBmb2xsb3dpbmcgaGF2ZSB6ZXJvLWxlbmd0aCBhZGRyZXNzZXMuCisJICogSUZUX0FUTQkobmV0L2lmX2F0bXN1YnIuYykKKwkgKiBJRlRfRkFJVEgJKG5ldC9pZl9mYWl0aC5jKQorCSAqIElGVF9HSUYJKG5ldC9pZl9naWYuYykKKwkgKiBJRlRfTE9PUAkobmV0L2lmX2xvb3AuYykKKwkgKiBJRlRfUFBQCShuZXQvaWZfcHBwLmMsIG5ldC9pZl9zcHBwc3Vici5jKQorCSAqIElGVF9TTElQCShuZXQvaWZfc2wuYywgbmV0L2lmX3N0cmlwLmMpCisJICogSUZUX1NURgkobmV0L2lmX3N0Zi5jKQorCSAqIElGVF9MMlZMQU4JKG5ldC9pZl92bGFuLmMpCisJICogSUZUX1BST1BWSVJUVUFMIChuZXQvaWZfYnJpZGdlLmg+CisJICovCisJLyoKKwkgKiBUaGUgZm9sbG93aW5nIHVzZSBJUHY0IGFkZHJlc3NlcyBhcyBsaW5rLWxheWVyIGFkZHJlc3NlczoKKwkgKiBJRlRfT1RIRVIJKG5ldC9pZl9ncmUuYykKKwkgKi8KKwljYXNlIElGVF9BUkNORVQ6IC8qIGRlZmF1bHQgYmVsb3cgaXMgYmVsaWV2ZWQgY29ycmVjdCBmb3IgYWxsIHRoZXNlLiAqLworCWNhc2UgSUZUX0VUSEVSOgorCWNhc2UgSUZUX0ZEREk6CisJY2FzZSBJRlRfSElQUEk6CisJY2FzZSBJRlRfSVNPODgwMjU6CisJZGVmYXVsdDoKKwkJcmV0dXJuIGhleG5hbWUoKGNvbnN0IHVfaW50OF90ICopQ0xMQUREUihzZGwpLAorCQkgICAgKHNpemVfdClzZGwtPnNkbF9hbGVuLCBob3N0LCBob3N0bGVuKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK2hleG5hbWUoY3AsIGxlbiwgaG9zdCwgaG9zdGxlbikKKwljb25zdCB1X2ludDhfdCAqY3A7CisJY2hhciAqaG9zdDsKKwlzaXplX3QgbGVuOworCXNvY2tsZW5fdCBob3N0bGVuOworeworCWludCBuOworCXNpemVfdCBpOworCWNoYXIgKm91dHAgPSBob3N0OworCisJKm91dHAgPSAnXDAnOworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQluID0gc25wcmludGYob3V0cCwgaG9zdGxlbiwgIiVzJTAyeCIsCisJCSAgICBpID8gIjoiIDogIiIsIGNwW2ldKTsKKwkJaWYgKG4gPCAwIHx8IChzb2NrbGVuX3QpIG4gPj0gaG9zdGxlbikgeworCQkJKmhvc3QgPSAnXDAnOworCQkJcmV0dXJuIEVBSV9NRU1PUlk7CisJCX0KKwkJb3V0cCArPSBuOworCQlob3N0bGVuIC09IG47CisJfQorCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbGliYy9uZXRic2QvbmV0L2dldHNlcnZieW5hbWUuYyBiL2xpYmMvbmV0YnNkL25ldC9nZXRzZXJ2YnluYW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVhNTI4ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvbmV0YnNkL25ldC9nZXRzZXJ2YnluYW1lLmMKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CisjaW5jbHVkZSAic2VydmVudC5oIgorCitzdHJ1Y3Qgc2VydmVudCAqCitnZXRzZXJ2YnluYW1lKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnByb3RvKQoreworICAgIHJlc19zdGF0aWMgICAgICAgcnMgPSBfX3Jlc19nZXRfc3RhdGljKCk7CisgICAgc3RydWN0IHNlcnZlbnQqICBzOworCisgICAgaWYgKHJzID09IE5VTEwgfHwgcHJvdG8gPT0gTlVMTCB8fCBuYW1lID09IE5VTEwpIHsKKyAgICAgICAgZXJybm8gPSBFSU5WQUw7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJzLT5zZXJ2ZW50X3B0ciA9IE5VTEw7CisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgc3RydWN0IHNlcnZlbnQqICBzID0gZ2V0c2VydmVudF9yKHJzKTsKKyAgICAgICAgaWYgKHMgPT0gTlVMTCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAoICFzdHJjbXAoIHMtPnNfbmFtZSwgbmFtZSApICYmICFzdHJjbXAoIHMtPnNfcHJvdG8sIHByb3RvICkgKQorICAgICAgICAgICAgcmV0dXJuIHM7CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9uZXQvZ2V0c2VydmJ5bmFtZV9yLmMgYi9saWJjL25ldGJzZC9uZXQvZ2V0c2VydmJ5bmFtZV9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI2ZGM1MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvbmV0YnNkL25ldC9nZXRzZXJ2YnluYW1lX3IuYwpAQCAtMCwwICsxLDc2IEBACisvKgkkTmV0QlNEOiBnZXRzZXJ2YnluYW1lX3IuYyx2IDEuMyAyMDA1LzA0LzE4IDE5OjM5OjQ1IGtsZWluayBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTgzLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQorI2lmIDAKK3N0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylnZXRzZXJ2YnluYW1lLmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKKyNlbHNlCitfX1JDU0lEKCIkTmV0QlNEOiBnZXRzZXJ2YnluYW1lX3IuYyx2IDEuMyAyMDA1LzA0LzE4IDE5OjM5OjQ1IGtsZWluayBFeHAgJCIpOworI2VuZGlmCisjZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLworCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgInNlcnZlbnQuaCIKKworc3RydWN0IHNlcnZlbnQgKgorZ2V0c2VydmJ5bmFtZV9yKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnByb3RvLCBzdHJ1Y3Qgc2VydmVudCAqc3AsCisgICAgc3RydWN0IHNlcnZlbnRfZGF0YSAqc2QpCit7CisJc3RydWN0IHNlcnZlbnQgKnM7CisJY2hhciAqKmNwOworCisJYXNzZXJ0KG5hbWUgIT0gTlVMTCk7CisJLyogcHJvdG8gbWF5IGJlIE5VTEwgKi8KKworCXNldHNlcnZlbnRfcihzZC0+c3RheW9wZW4sIHNkKTsKKwl3aGlsZSAoKHMgPSBnZXRzZXJ2ZW50X3Ioc3AsIHNkKSkgIT0gTlVMTCkgeworCQlpZiAoc3RyY21wKG5hbWUsIHMtPnNfbmFtZSkgPT0gMCkKKwkJCWdvdG8gZ290bmFtZTsKKwkJZm9yIChjcCA9IHMtPnNfYWxpYXNlczsgKmNwOyBjcCsrKQorCQkJaWYgKHN0cmNtcChuYW1lLCAqY3ApID09IDApCisJCQkJZ290byBnb3RuYW1lOworCQljb250aW51ZTsKK2dvdG5hbWU6CisJCWlmIChwcm90byA9PSBOVUxMIHx8IHN0cmNtcChzLT5zX3Byb3RvLCBwcm90bykgPT0gMCkKKwkJCWJyZWFrOworCX0KKwlpZiAoIXNkLT5zdGF5b3BlbikKKwkJaWYgKHNkLT5mcCAhPSBOVUxMKSB7CisJCQkodm9pZClmY2xvc2Uoc2QtPmZwKTsKKwkJCXNkLT5mcCA9IE5VTEw7CisJCX0KKwlyZXR1cm4gczsKK30KZGlmZiAtLWdpdCBhL2xpYmMvbmV0YnNkL25ldC9nZXRzZXJ2Ynlwb3J0LmMgYi9saWJjL25ldGJzZC9uZXQvZ2V0c2VydmJ5cG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhZDdlMjMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL25ldGJzZC9uZXQvZ2V0c2VydmJ5cG9ydC5jCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDxuZXRkYi5oPgorI2luY2x1ZGUgInNlcnZlbnQuaCIKKworc3RydWN0IHNlcnZlbnQgKgorZ2V0c2VydmJ5cG9ydChpbnQgcG9ydCwgY29uc3QgY2hhciAqcHJvdG8pCit7CisgICAgcmVzX3N0YXRpYyAgICAgICBycyA9IF9fcmVzX2dldF9zdGF0aWMoKTsKKyAgICBzdHJ1Y3Qgc2VydmVudCogIHM7CisKKyAgICBpZiAocnMgPT0gTlVMTCB8fCBwcm90byA9PSBOVUxMKSB7CisgICAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBycy0+c2VydmVudF9wdHIgPSBOVUxMOworICAgIHdoaWxlICgxKSB7CisgICAgICAgIHN0cnVjdCBzZXJ2ZW50KiAgcyA9IGdldHNlcnZlbnRfcihycyk7CisgICAgICAgIGlmIChzID09IE5VTEwpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKCBzLT5zX3BvcnQgPT0gcG9ydCAmJiAhc3RyY21wKCBzLT5zX3Byb3RvLCBwcm90byApICkKKyAgICAgICAgICAgIHJldHVybiBzOworICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQpkaWZmIC0tZ2l0IGEvbGliYy9uZXRic2QvbmV0L2dldHNlcnZieXBvcnRfci5jIGIvbGliYy9uZXRic2QvbmV0L2dldHNlcnZieXBvcnRfci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmZTQyOTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL25ldGJzZC9uZXQvZ2V0c2VydmJ5cG9ydF9yLmMKQEAgLTAsMCArMSw2NSBAQAorLyoJJE5ldEJTRDogZ2V0c2VydmJ5cG9ydF9yLmMsdiAxLjMgMjAwNS8wNC8xOCAxOTozOTo0NSBrbGVpbmsgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk4MywgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKKyNpZiAwCitzdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpZ2V0c2VydmJ5cG9ydC5jCTguMSAoQmVya2VsZXkpIDYvNC85MyI7CisjZWxzZQorX19SQ1NJRCgiJE5ldEJTRDogZ2V0c2VydmJ5cG9ydF9yLmMsdiAxLjMgMjAwNS8wNC8xOCAxOTozOTo0NSBrbGVpbmsgRXhwICQiKTsKKyNlbmRpZgorI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KKworI2luY2x1ZGUgPG5ldGRiLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJzZXJ2ZW50LmgiCisKK3N0cnVjdCBzZXJ2ZW50ICoKK2dldHNlcnZieXBvcnRfcihpbnQgcG9ydCwgY29uc3QgY2hhciAqcHJvdG8sIHN0cnVjdCBzZXJ2ZW50ICpzcCwKKyAgICBzdHJ1Y3Qgc2VydmVudF9kYXRhICpzZCkKK3sKKwlzdHJ1Y3Qgc2VydmVudCAqczsKKworCXNldHNlcnZlbnRfcihzZC0+c3RheW9wZW4sIHNkKTsKKwl3aGlsZSAoKHMgPSBnZXRzZXJ2ZW50X3Ioc3AsIHNkKSkgIT0gTlVMTCkgeworCQlpZiAocy0+c19wb3J0ICE9IHBvcnQpCisJCQljb250aW51ZTsKKwkJaWYgKHByb3RvID09IE5VTEwgfHwgc3RyY21wKHMtPnNfcHJvdG8sIHByb3RvKSA9PSAwKQorCQkJYnJlYWs7CisJfQorCWlmICghc2QtPnN0YXlvcGVuKQorCQlpZiAoc2QtPmZwICE9IE5VTEwpIHsKKwkJCSh2b2lkKWZjbG9zZShzZC0+ZnApOworCQkJc2QtPmZwID0gTlVMTDsKKwkJfQorCXJldHVybiBzOworfQpkaWZmIC0tZ2l0IGEvbGliYy9uZXRic2QvbmV0L2dldHNlcnZlbnQuYyBiL2xpYmMvbmV0YnNkL25ldC9nZXRzZXJ2ZW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDUyMDdkZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvbmV0YnNkL25ldC9nZXRzZXJ2ZW50LmMKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXRkYi5oPgorI2luY2x1ZGUgInNlcnZlbnQuaCIKKyNpbmNsdWRlICJzZXJ2aWNlcy5oIgorCit2b2lkCitzZXRzZXJ2ZW50KGludCBmKQoreworICAgIHJlc19zdGF0aWMgIHJzID0gX19yZXNfZ2V0X3N0YXRpYygpOworICAgIGlmIChycykgeworICAgICAgICBycy0+c2VydmVudF9wdHIgPSBOVUxMOworICAgIH0KK30KKwordm9pZAorZW5kc2VydmVudCh2b2lkKQoreworICAgIC8qIG5vdGhpbmcgdG8gZG8gKi8KK30KKworc3RydWN0IHNlcnZlbnQgKgorZ2V0c2VydmVudF9yKCByZXNfc3RhdGljICBycyApCit7CisgICAgY29uc3QgY2hhciogIHA7CisgICAgY29uc3QgY2hhciogIHE7CisgICAgaW50ICAgICAgICAgIG5hbWVsZW47CisgICAgaW50ICAgICAgICAgIG5uLGNvdW50OworICAgIGludCAgICAgICAgICB0b3RhbCA9IDA7CisgICAgY2hhciogICAgICAgIHAyOworCisgICAgcCA9IHJzLT5zZXJ2ZW50X3B0cjsKKyAgICBpZiAocCA9PSBOVUxMKQorICAgICAgICBwID0gX3NlcnZpY2VzOworICAgIGVsc2UgaWYgKHBbMF0gPT0gMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAvKiBmaXJzdCBjb21wdXRlIHRoZSB0b3RhbCBzaXplICovCisgICAgbmFtZWxlbiA9IHBbMF07CisgICAgdG90YWwgICs9IG5hbWVsZW4gKyAxOworICAgIHEgICAgICAgPSBwICsgMSArIG5hbWVsZW4gKyAzOyAgLyogc2tpcCBuYW1lICsgcG9ydCArIHByb3RvICovCisgICAgY291bnQgICA9IHFbMF07ICAgLyogZ2V0IGFsaWFzY291bnQgKi8KKyAgICBxICAgICAgKz0gMTsKKworICAgIHRvdGFsICs9IChjb3VudCsxKSpzaXplb2YoY2hhciopOworICAgIGZvciAobm4gPSAwOyBubiA8IGNvdW50OyBubisrKSB7CisgICAgICAgIGludCAgbGVuMiA9IHFbMF07CisgICAgICAgIHRvdGFsICs9IDEgKyBsZW4yOworICAgICAgICBxICAgICArPSAxICsgbGVuMjsKKyAgICB9CisKKyAgICAvKiByZWFsbG9jYXRlIHRoZSB0aHJlYWQtc3BlY2lmaWMgc2VydmVudCBzdHJ1Y3QgKi8KKyAgICBwMiA9IHJlYWxsb2MoIChjaGFyKilycy0+c2VydmVudC5zX2FsaWFzZXMsIHRvdGFsICk7CisgICAgaWYgKHAyID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgLyogbm93IHdyaXRlIHRvIGl0ICovCisgICAgcnMtPnNlcnZlbnQuc19hbGlhc2VzID0gKGNoYXIqKikgcDI7CisgICAgcDIgICAgICAgICAgICAgICAgICAgKz0gKGNvdW50KzEpKnNpemVvZihjaGFyKik7CisgICAgcnMtPnNlcnZlbnQuc19uYW1lICAgID0gcDI7CisgICAgcDIgICAgICAgICAgICAgICAgICAgKz0gbmFtZWxlbiArIDE7CisgICAgcnMtPnNlcnZlbnQuc19wcm90byAgID0gcDI7CisKKyAgICAvKiBjb3B5IG5hbWUgKyBwb3J0ICsgc2V0dXAgcHJvdG9jb2wgKi8KKyAgICBtZW1jcHkoIHJzLT5zZXJ2ZW50LnNfbmFtZSwgcCsxLCBuYW1lbGVuICk7CisgICAgcnMtPnNlcnZlbnQuc19uYW1lW25hbWVsZW5dID0gMDsKKyAgICBwICs9IDEgKyBuYW1lbGVuOworICAgIHJzLT5zZXJ2ZW50LnNfcG9ydCA9ICgoKCh1bnNpZ25lZCBjaGFyKilwKVswXSA8PCA4KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGNoYXIqKXApWzFdKTsKKworICAgIHJzLT5zZXJ2ZW50LnNfcHJvdG8gPSBwWzJdID09ICd0JyA/ICJ0Y3AiIDogInVkcCI7CisgICAgcCArPSA0OyAgLyogc2tpcCBwb3J0KDIpICsgcHJvdG8oMSkgKyBhbGlhc2NvdW50KDEpICovCisKKyAgICBmb3IgKG5uID0gMDsgbm4gPCBjb3VudDsgbm4rKykgeworICAgICAgICBpbnQgIGxlbjIgPSBwWzBdOworICAgICAgICBycy0+c2VydmVudC5zX2FsaWFzZXNbbm5dID0gcDI7CisgICAgICAgIG1lbWNweSggcDIsIHArMSwgbGVuMiApOworICAgICAgICBwMltsZW4yXSA9IDA7CisgICAgICAgIHAyICs9IGxlbjIgKyAxOworICAgICAgICBwICArPSBsZW4yICsgMTsKKyAgICB9CisgICAgcnMtPnNlcnZlbnQuc19hbGlhc2VzW25uXSA9IE5VTEw7CisKKyAgICBycy0+c2VydmVudF9wdHIgPSBwOworCisgICAgcmV0dXJuICZycy0+c2VydmVudDsKK30KKworc3RydWN0IHNlcnZlbnQgKgorZ2V0c2VydmVudCh2b2lkKQoreworICAgIHJlc19zdGF0aWMgICBycyA9IF9fcmVzX2dldF9zdGF0aWMoKTsKKworICAgIGlmIChycyA9PSBOVUxMKSByZXR1cm4gTlVMTDsKKworICAgIHJldHVybiBnZXRzZXJ2ZW50X3IocnMpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9uZXRic2QvbmV0L2dldHNlcnZlbnRfci5jIGIvbGliYy9uZXRic2QvbmV0L2dldHNlcnZlbnRfci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2Njg3NTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL25ldGJzZC9uZXQvZ2V0c2VydmVudF9yLmMKQEAgLTAsMCArMSwxNTEgQEAKKy8qCSROZXRCU0Q6IGdldHNlcnZlbnRfci5jLHYgMS41IDIwMDUvMDQvMTggMTk6Mzk6NDUga2xlaW5rIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODMsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKyNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKKyNpZiAwCitzdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpZ2V0c2VydmVudC5jCTguMSAoQmVya2VsZXkpIDYvNC85MyI7CisjZWxzZQorX19SQ1NJRCgiJE5ldEJTRDogZ2V0c2VydmVudF9yLmMsdiAxLjUgMjAwNS8wNC8xOCAxOTozOTo0NSBrbGVpbmsgRXhwICQiKTsKKyNlbmRpZgorI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KKworI2luY2x1ZGUgPG5ldGRiLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKworI2luY2x1ZGUgInNlcnZlbnQuaCIKKwordm9pZAorc2V0c2VydmVudF9yKGludCBmLCBzdHJ1Y3Qgc2VydmVudF9kYXRhICpzZCkKK3sKKwlpZiAoc2QtPmZwID09IE5VTEwpCisJCXNkLT5mcCA9IGZvcGVuKF9QQVRIX1NFUlZJQ0VTLCAiciIpOworCWVsc2UKKwkJcmV3aW5kKHNkLT5mcCk7CisJc2QtPnN0YXlvcGVuIHw9IGY7Cit9CisKK3ZvaWQKK2VuZHNlcnZlbnRfcihzdHJ1Y3Qgc2VydmVudF9kYXRhICpzZCkKK3sKKwlpZiAoc2QtPmZwKSB7CisJCSh2b2lkKWZjbG9zZShzZC0+ZnApOworCQlzZC0+ZnAgPSBOVUxMOworCX0KKwlpZiAoc2QtPmFsaWFzZXMpIHsKKwkJZnJlZShzZC0+YWxpYXNlcyk7CisJCXNkLT5hbGlhc2VzID0gTlVMTDsKKwkJc2QtPm1heGFsaWFzZXMgPSAwOworCX0KKwlpZiAoc2QtPmxpbmUpIHsKKwkJZnJlZShzZC0+bGluZSk7CisJCXNkLT5saW5lID0gTlVMTDsKKwl9CisJc2QtPnN0YXlvcGVuID0gMDsKK30KKworc3RydWN0IHNlcnZlbnQgKgorZ2V0c2VydmVudF9yKHN0cnVjdCBzZXJ2ZW50ICpzcCwgc3RydWN0IHNlcnZlbnRfZGF0YSAqc2QpCit7CisJY2hhciAqcCwgKmNwLCAqKnE7CisJc2l6ZV90IGkgPSAwOworCWludCBvZXJybm87CisKKwlpZiAoc2QtPmZwID09IE5VTEwgJiYgKHNkLT5mcCA9IGZvcGVuKF9QQVRIX1NFUlZJQ0VTLCAiciIpKSA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCWZvciAoOzspIHsKKwkJaWYgKHNkLT5saW5lKQorCQkJZnJlZShzZC0+bGluZSk7CisvLwkJc2QtPmxpbmUgPSBmcGFyc2VsbihzZC0+ZnAsIE5VTEwsIE5VTEwsIE5VTEwsIEZQQVJTRUxOX1VORVNDQUxMKTsKKwkJZnByaW50ZihzdGRlcnIsICIqKiogRklYIE1FISBnZXRzZXJ2ZW50X3IoKSBpcyBnb2luZyB0byBmYWlsISEhXG4iKTsKKwkJc2QtPmxpbmUgPSBOVUxMOworCQlpZiAoc2QtPmxpbmUgPT0gTlVMTCkKKwkJCXJldHVybiBOVUxMOworCQlzcC0+c19uYW1lID0gcCA9IHNkLT5saW5lOworCQlwID0gc3RycGJyayhwLCAiIFx0Iik7CisJCWlmIChwID09IE5VTEwpCisJCQljb250aW51ZTsKKwkJKnArKyA9ICdcMCc7CisJCXdoaWxlICgqcCA9PSAnICcgfHwgKnAgPT0gJ1x0JykKKwkJCXArKzsKKwkJY3AgPSBzdHJwYnJrKHAsICIsLyIpOworCQlpZiAoY3AgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCQkqY3ArKyA9ICdcMCc7CisJCXNwLT5zX3BvcnQgPSBodG9ucygodV9zaG9ydClhdG9pKHApKTsKKwkJc3AtPnNfcHJvdG8gPSBjcDsKKwkJaWYgKHNkLT5hbGlhc2VzID09IE5VTEwpIHsKKwkJCXNkLT5tYXhhbGlhc2VzID0gMTA7CisJCQlzZC0+YWxpYXNlcyA9IG1hbGxvYyhzZC0+bWF4YWxpYXNlcyAqIHNpemVvZihjaGFyICopKTsKKwkJCWlmIChzZC0+YWxpYXNlcyA9PSBOVUxMKSB7CisJCQkJb2Vycm5vID0gZXJybm87CisJCQkJZW5kc2VydmVudF9yKHNkKTsKKwkJCQllcnJubyA9IG9lcnJubzsKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCX0KKwkJfQorCQlxID0gc3AtPnNfYWxpYXNlcyA9IHNkLT5hbGlhc2VzOworCQljcCA9IHN0cnBicmsoY3AsICIgXHQiKTsKKwkJaWYgKGNwICE9IE5VTEwpCisJCQkqY3ArKyA9ICdcMCc7CisJCXdoaWxlIChjcCAmJiAqY3ApIHsKKwkJCWlmICgqY3AgPT0gJyAnIHx8ICpjcCA9PSAnXHQnKSB7CisJCQkJY3ArKzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChpID09IHNkLT5tYXhhbGlhc2VzIC0gMikgeworCQkJCXNkLT5tYXhhbGlhc2VzICo9IDI7CisJCQkJcSA9IHJlYWxsb2MocSwKKwkJCQkgICAgc2QtPm1heGFsaWFzZXMgKiBzaXplb2YoY2hhciAqKSk7CisJCQkJaWYgKHEgPT0gTlVMTCkgeworCQkJCQlvZXJybm8gPSBlcnJubzsKKwkJCQkJZW5kc2VydmVudF9yKHNkKTsKKwkJCQkJZXJybm8gPSBvZXJybm87CisJCQkJCXJldHVybiBOVUxMOworCQkJCX0KKwkJCQlzcC0+c19hbGlhc2VzID0gc2QtPmFsaWFzZXMgPSBxOworCQkJfQorCQkJcVtpKytdID0gY3A7CisJCQljcCA9IHN0cnBicmsoY3AsICIgXHQiKTsKKwkJCWlmIChjcCAhPSBOVUxMKQorCQkJCSpjcCsrID0gJ1wwJzsKKwkJfQorCQlxW2ldID0gTlVMTDsKKwkJcmV0dXJuIHNwOworCX0KK30KZGlmZiAtLWdpdCBhL2xpYmMvbmV0YnNkL25ldC9uc2Rpc3BhdGNoLmMgYi9saWJjL25ldGJzZC9uZXQvbnNkaXNwYXRjaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhOTkzNjYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL25ldGJzZC9uZXQvbnNkaXNwYXRjaC5jCkBAIC0wLDAgKzEsMTUyIEBACisvKgkkTmV0QlNEOiBuc2Rpc3BhdGNoLmMsdiAxLjMwIDIwMDUvMTEvMjkgMDM6MTE6NTkgY2hyaXN0b3MgRXhwICQJKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTcsIDE5OTgsIDE5OTksIDIwMDQgVGhlIE5ldEJTRCBGb3VuZGF0aW9uLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gVGhlIE5ldEJTRCBGb3VuZGF0aW9uCisgKiBieSBMdWtlIE1ld2J1cm47IGFuZCBieSBKYXNvbiBSLiBUaG9ycGUuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqICAgICAgICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBOZXRCU0QKKyAqICAgICAgICBGb3VuZGF0aW9uLCBJbmMuIGFuZCBpdHMgY29udHJpYnV0b3JzLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiBUaGUgTmV0QlNEIEZvdW5kYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE5FVEJTRCBGT1VOREFUSU9OLCBJTkMuIEFORCBDT05UUklCVVRPUlMKKyAqIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorICogVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUiBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDAzIE5ldHdvcmtzIEFzc29jaWF0ZXMgVGVjaG5vbG9neSwgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBQb3J0aW9ucyBvZiB0aGlzIHNvZnR3YXJlIHdlcmUgZGV2ZWxvcGVkIGZvciB0aGUgRnJlZUJTRCBQcm9qZWN0IGJ5CisgKiBKYWNxdWVzIEEuIFZpZHJpbmUsIFNhZmVwb3J0IE5ldHdvcmsgU2VydmljZXMsIGFuZCBOZXR3b3JrCisgKiBBc3NvY2lhdGVzIExhYm9yYXRvcmllcywgdGhlIFNlY3VyaXR5IFJlc2VhcmNoIERpdmlzaW9uIG9mIE5ldHdvcmsKKyAqIEFzc29jaWF0ZXMsIEluYy4gdW5kZXIgREFSUEEvU1BBV0FSIGNvbnRyYWN0IE42NjAwMS0wMS1DLTgwMzUKKyAqICgiQ0JPU1MiKSwgYXMgcGFydCBvZiB0aGUgREFSUEEgQ0hBVFMgcmVzZWFyY2ggcHJvZ3JhbS4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2lmZGVmIF9fRUxGX18KKyNpbmNsdWRlIDxkbGZjbi5oPgorI2VuZGlmIC8qIF9fRUxGX18gKi8KKyNpbmNsdWRlIDxmY250bC5oPgorI2RlZmluZSBfTlNfUFJJVkFURQorI2luY2x1ZGUgPG5zc3dpdGNoLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworc3RhdGljIG5zc19tZXRob2QKK19uc21ldGhvZChjb25zdCBjaGFyICpzb3VyY2UsIGNvbnN0IGNoYXIgKmRhdGFiYXNlLCBjb25zdCBjaGFyICptZXRob2QsCisgICAgY29uc3QgbnNfZHRhYiBkaXNwX3RhYltdLCB2b2lkICoqY2JfZGF0YSkKK3sKKwlpbnQJY3VyZGlzcDsKKworCWlmIChkaXNwX3RhYiAhPSBOVUxMKSB7CisJCWZvciAoY3VyZGlzcCA9IDA7IGRpc3BfdGFiW2N1cmRpc3BdLnNyYyAhPSBOVUxMOyBjdXJkaXNwKyspIHsKKwkJCWlmIChzdHJjYXNlY21wKHNvdXJjZSwgZGlzcF90YWJbY3VyZGlzcF0uc3JjKSA9PSAwKSB7CisJCQkJKmNiX2RhdGEgPSBkaXNwX3RhYltjdXJkaXNwXS5jYl9kYXRhOworCQkJCXJldHVybiAoZGlzcF90YWJbY3VyZGlzcF0uY2FsbGJhY2spOworCQkJfQorCQl9CisJfQorCisJKmNiX2RhdGEgPSBOVUxMOworCXJldHVybiAoTlVMTCk7Cit9CisKK2ludAorLypBUkdTVVNFRCovCituc2Rpc3BhdGNoKHZvaWQgKnJldHZhbCwgY29uc3QgbnNfZHRhYiBkaXNwX3RhYltdLCBjb25zdCBjaGFyICpkYXRhYmFzZSwKKwkgICAgY29uc3QgY2hhciAqbWV0aG9kLCBjb25zdCBuc19zcmMgZGVmYXVsdHNbXSwgLi4uKQoreworCXZhX2xpc3QJCSBhcDsKKwlpbnQJCSBpLCByZXN1bHQ7CisJY29uc3QgbnNfc3JjCSpzcmNsaXN0OworCWludAkJIHNyY2xpc3RzaXplOworCW5zc19tZXRob2QJIGNiOworCXZvaWQJCSpjYl9kYXRhOworCisJLyogcmV0dmFsIG1heSBiZSBOVUxMICovCisJLyogZGlzcF90YWIgbWF5IGJlIE5VTEwgKi8KKwlhc3NlcnQoZGF0YWJhc2UgIT0gTlVMTCk7CisJYXNzZXJ0KG1ldGhvZCAhPSBOVUxMKTsKKwlhc3NlcnQoZGVmYXVsdHMgIT0gTlVMTCk7CisJaWYgKGRhdGFiYXNlID09IE5VTEwgfHwgbWV0aG9kID09IE5VTEwgfHwgZGVmYXVsdHMgPT0gTlVMTCkKKwkJcmV0dXJuIChOU19VTkFWQUlMKTsKKworICAgICAgICBzcmNsaXN0ID0gZGVmYXVsdHM7CisgICAgICAgIHNyY2xpc3RzaXplID0gMDsKKyAgICAgICAgd2hpbGUgKHNyY2xpc3Rbc3JjbGlzdHNpemVdLm5hbWUgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICBzcmNsaXN0c2l6ZSsrOworCisJcmVzdWx0ID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBzcmNsaXN0c2l6ZTsgaSsrKSB7CisJCWNiID0gX25zbWV0aG9kKHNyY2xpc3RbaV0ubmFtZSwgZGF0YWJhc2UsIG1ldGhvZCwKKwkJICAgIGRpc3BfdGFiLCAmY2JfZGF0YSk7CisJCXJlc3VsdCA9IDA7CisJCWlmIChjYiAhPSBOVUxMKSB7CisJCQl2YV9zdGFydChhcCwgZGVmYXVsdHMpOworCQkJcmVzdWx0ID0gKCpjYikocmV0dmFsLCBjYl9kYXRhLCBhcCk7CisJCQl2YV9lbmQoYXApOworCQkJaWYgKGRlZmF1bHRzWzBdLmZsYWdzICYgTlNfRk9SQ0VBTEwpCisJCQkJY29udGludWU7CisJCQlpZiAocmVzdWx0ICYgc3JjbGlzdFtpXS5mbGFncykKKwkJCQlicmVhazsKKwkJfQorCX0KKwlyZXN1bHQgJj0gTlNfU1RBVFVTTUFTSzsJLyogY2xlYXIgcHJpdmF0ZSBmbGFncyBpbiByZXN1bHQgKi8KKworCXJldHVybiAocmVzdWx0ID8gcmVzdWx0IDogTlNfTk9URk9VTkQpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9uZXRic2QvbmV0L3JlZW50cmFudC5oIGIvbGliYy9uZXRic2QvbmV0L3JlZW50cmFudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1NTA3ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL25ldGJzZC9uZXQvcmVlbnRyYW50LmgKQEAgLTAsMCArMSwyNjggQEAKKy8qCSROZXRCU0Q6IHJlZW50cmFudC5oLHYgMS4xMCAyMDA0LzEyLzE0IDAwOjIzOjE5IG5hdGhhbncgRXhwICQJKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTcsIDE5OTgsIDIwMDMgVGhlIE5ldEJTRCBGb3VuZGF0aW9uLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gVGhlIE5ldEJTRCBGb3VuZGF0aW9uCisgKiBieSBKLlQuIENvbmtsaW4sIGJ5IE5hdGhhbiBKLiBXaWxsaWFtcywgYW5kIGJ5IEphc29uIFIuIFRob3JwZS4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICogICAgICAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE5ldEJTRAorICogICAgICAgIEZvdW5kYXRpb24sIEluYy4gYW5kIGl0cyBjb250cmlidXRvcnMuCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIFRoZSBOZXRCU0QgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgTkVUQlNEIEZPVU5EQVRJT04sIElOQy4gQU5EIENPTlRSSUJVVE9SUworICogYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECisgKiBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIFJlcXVpcmVtZW50czoKKyAqIAorICogMS4gVGhlIHRocmVhZCBzYWZlIG1lY2hhbmlzbSBzaG91bGQgYmUgbGlnaHR3ZWlnaHQgc28gdGhlIGxpYnJhcnkgY2FuCisgKiAgICBiZSB1c2VkIGJ5IG5vbi10aHJlYWRlZCBhcHBsaWNhdGlvbnMgd2l0aG91dCB1bnJlYXNvbmFibGUgb3ZlcmhlYWQuCisgKiAKKyAqIDIuIFRoZXJlIHNob3VsZCBiZSBubyBkZXBlbmRlbmN5IG9uIGEgdGhyZWFkIGVuZ2luZSBmb3Igbm9uLXRocmVhZGVkCisgKiAgICBhcHBsaWNhdGlvbnMuCisgKiAKKyAqIDMuIFRoZXJlIHNob3VsZCBiZSBubyBkZXBlbmRlbmN5IG9uIGFueSBwYXJ0aWN1bGFyIHRocmVhZCBlbmdpbmUuCisgKiAKKyAqIDQuIFRoZSBsaWJyYXJ5IHNob3VsZCBiZSBhYmxlIHRvIGJlIGNvbXBpbGVkIHdpdGhvdXQgc3VwcG9ydCBmb3IgdGhyZWFkCisgKiAgICBzYWZldHkuCisgKiAKKyAqIAorICogUmF0aW9uYWxlOgorICogCisgKiBPbmUgYXBwcm9hY2ggZm9yIHRocmVhZCBzYWZldHkgaXMgdG8gcHJvdmlkZSBkaXNjcmV0ZSB2ZXJzaW9ucyBvZiB0aGUKKyAqIGxpYnJhcnk6IG9uZSB0aHJlYWQgc2FmZSwgdGhlIG90aGVyIG5vdC4gIFRoZSBkaXNhZHZhbnRhZ2Ugb2YgdGhpcyBpcworICogdGhhdCBsaWJjIGlzIHJhdGhlciBsYXJnZSwgYW5kIHR3byBjb3BpZXMgb2YgYSBsaWJyYXJ5IHdoaWNoIGFyZSA5OSUrCisgKiBpZGVudGljYWwgaXMgbm90IGFuIGVmZmljZW50IHVzZSBvZiByZXNvdXJjZXMuCisgKiAKKyAqIEFub3RoZXIgYXBwcm9hY2ggaXMgdG8gcHJvdmlkZSBhIHNpbmdsZSB0aHJlYWQgc2FmZSBsaWJyYXJ5LiAgSG93ZXZlciwKKyAqIGl0IHNob3VsZCBub3QgYWRkIHNpZ25pZmljYW50IHJ1biB0aW1lIG9yIGNvZGUgc2l6ZSBvdmVyaGVhZCB0byBub24tCisgKiB0aHJlYWRlZCBhcHBsaWNhdGlvbnMuCisgKiAKKyAqIFNpbmNlIHRoZSBOZXRCU0QgQyBsaWJyYXJ5IGlzIHVzZWQgaW4gb3RoZXIgcHJvamVjdHMsIGl0IHNob3VsZCBiZQorICogZWFzeSB0byByZXBsYWNlIHRoZSBtdXR1YWwgZXhjbHVzaW9uIHByaW1pdGl2ZXMgd2l0aCBvbmVzIHByb3ZpZGVkIGJ5CisgKiBhbm90aGVyIHN5c3RlbS4gIFNpbWlsYXJseSwgaXQgc2hvdWxkIGFsc28gYmUgZWFzeSB0byByZW1vdmUgYWxsCisgKiBzdXBwb3J0IGZvciB0aHJlYWQgc2FmZXR5IGNvbXBsZXRlbHkgaWYgdGhlIHRhcmdldCBlbnZpcm9ubWVudCBkb2VzCisgKiBub3Qgc3VwcG9ydCB0aHJlYWRzLgorICogCisgKiAKKyAqIEltcGxlbWVudGF0aW9uIERldGFpbHM6CisgKiAKKyAqIFRoZSB0aHJlYWQgcHJpbWl0aXZlcyB1c2VkIGJ5IHRoZSBsaWJyYXJ5IChtdXRleF90LCBtdXRleF9sb2NrLCBldGMuKQorICogYXJlIG1hY3JvcyB3aGljaCBleHBhbmQgdG8gdGhlIGNvb3Jlc3BvbmRpbmcgcHJpbWl0aXZlcyBwcm92aWRlZCBieQorICogdGhlIHRocmVhZCBlbmdpbmUgb3IgdG8gbm90aGluZy4gIFRoZSBsYXR0ZXIgaXMgdXNlZCBzbyB0aGF0IGNvZGUgaXMKKyAqIG5vdCB1bnJlYXNvbmFibHkgY2x1dHRlcmVkIHdpdGggI2lmZGVmcyB3aGVuIGFsbCB0aHJlYWQgc2FmZSBzdXBwb3J0CisgKiBpcyByZW1vdmVkLgorICogCisgKiBUaGUgdGhyZWFkIG1hY3JvcyBjYW4gYmUgZGlyZWN0bHkgbWFwcGVkIHRvIHRoZSBtdXRleCBwcmltaXRpdmVzIGZyb20KKyAqIHB0aHJlYWRzLCBob3dldmVyIGl0IHNob3VsZCBiZSByZWFzb25hYmx5IGVhc3kgdG8gd3JhcCBhbm90aGVyIG11dGV4CisgKiBpbXBsZW1lbnRhdGlvbiBzbyBpdCBwcmVzZW50cyBhIHNpbWlsYXIgaW50ZXJmYWNlLgorICogCisgKiBUaGUgdGhyZWFkIGZ1bmN0aW9ucyBvcGVyYXRlIGJ5IGRpc3BhdGNoaW5nIHRvIHN5bWJvbHMgd2hpY2ggYXJlLCBieQorICogZGVmYXVsdCwgd2Vhay1hbGlhc2VkIHRvIG5vLW9wIGZ1bmN0aW9ucyBpbiB0aHJlYWQtc3R1Yi90aHJlYWQtc3R1Yi5jCisgKiAoc29tZSB1c2VzIG9mIHRocmVhZCBvcGVyYXRpb25zIGFyZSBjb25kaXRpb25hbCBvbiBfX2lzdGhyZWFkZWQsIGJ1dAorICogbm90IGFsbCBvZiB0aGVtIGFyZSkuCisgKgorICogV2hlbiB0aGUgdGhyZWFkIGxpYnJhcnkgaXMgbGlua2VkIGluLCBpdCBwcm92aWRlcyBzdHJvbmctYWxpYXMgdmVyc2lvbnMKKyAqIG9mIHRob3NlIHN5bWJvbHMgd2hpY2ggZGlzcGF0Y2ggdG8gaXRzIG93biByZWFsIHRocmVhZCBvcGVyYXRpb25zLgorICoKKyAqLworCisjaWZkZWYgX1JFRU5UUkFOVAorCisvKgorICogQWJ0cmFjdCB0aHJlYWQgaW50ZXJmYWNlIGZvciB0aHJlYWQtc2FmZSBsaWJyYXJpZXMuICBUaGVzZSByb3V0aW5lcworICogd2lsbCB1c2Ugc3R1YnMgaW4gbGliYyBpZiB0aGUgYXBwbGljYXRpb24gaXMgbm90IGxpbmtlZCBhZ2FpbnN0IHRoZQorICogcHRocmVhZCBsaWJyYXJ5LCBhbmQgdGhlIHJlYWwgZnVuY3Rpb24gaW4gdGhlIHB0aHJlYWQgbGlicmFyeSBpZiBpdAorICogaXMuCisgKi8KKworI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKworI2RlZmluZQltdXRleF90CQkJcHRocmVhZF9tdXRleF90CisjZGVmaW5lCU1VVEVYX0lOSVRJQUxJWkVSCVBUSFJFQURfTVVURVhfSU5JVElBTElaRVIKKworI2RlZmluZQltdXRleGF0dHJfdAkJcHRocmVhZF9tdXRleGF0dHJfdAorCisjZGVmaW5lCU1VVEVYX1RZUEVfTk9STUFMCVBUSFJFQURfTVVURVhfTk9STUFMCisjZGVmaW5lCU1VVEVYX1RZUEVfRVJST1JDSEVDSwlQVEhSRUFEX01VVEVYX0VSUk9SQ0hFQ0sKKyNkZWZpbmUJTVVURVhfVFlQRV9SRUNVUlNJVkUJUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkUKKworI2RlZmluZQljb25kX3QJCQlwdGhyZWFkX2NvbmRfdAorI2RlZmluZQlDT05EX0lOSVRJQUxJWkVSCVBUSFJFQURfQ09ORF9JTklUSUFMSVpFUgorCisjZGVmaW5lCWNvbmRhdHRyX3QJCXB0aHJlYWRfY29uZGF0dHJfdAorCisjZGVmaW5lCXJ3bG9ja190CQlwdGhyZWFkX3J3bG9ja190CisjZGVmaW5lCVJXTE9DS19JTklUSUFMSVpFUglQVEhSRUFEX1JXTE9DS19JTklUSUFMSVpFUgorCisjZGVmaW5lCXJ3bG9ja2F0dHJfdAkJcHRocmVhZF9yd2xvY2thdHRyX3QKKworI2RlZmluZQl0aHJlYWRfa2V5X3QJCXB0aHJlYWRfa2V5X3QKKworI2RlZmluZQl0aHJfdAkJCXB0aHJlYWRfdAorCisjZGVmaW5lCXRocmF0dHJfdAkJcHRocmVhZF9hdHRyX3QKKworI2RlZmluZQlvbmNlX3QJCQlwdGhyZWFkX29uY2VfdAorI2RlZmluZQlPTkNFX0lOSVRJQUxJWkVSCVBUSFJFQURfT05DRV9JTklUCisKKyNpZm5kZWYgX19MSUJDX1RIUkVBRF9TVFVCUworCitfX0JFR0lOX0RFQ0xTCitpbnQJX19saWJjX211dGV4X2luaXQobXV0ZXhfdCAqLCBjb25zdCBtdXRleGF0dHJfdCAqKTsKK2ludAlfX2xpYmNfbXV0ZXhfbG9jayhtdXRleF90ICopOworaW50CV9fbGliY19tdXRleF90cnlsb2NrKG11dGV4X3QgKik7CitpbnQJX19saWJjX211dGV4X3VubG9jayhtdXRleF90ICopOworaW50CV9fbGliY19tdXRleF9kZXN0cm95KG11dGV4X3QgKik7CisKK2ludAlfX2xpYmNfbXV0ZXhhdHRyX2luaXQobXV0ZXhhdHRyX3QgKik7CitpbnQJX19saWJjX211dGV4YXR0cl9zZXR0eXBlKG11dGV4YXR0cl90ICosIGludCk7CitpbnQJX19saWJjX211dGV4YXR0cl9kZXN0cm95KG11dGV4YXR0cl90ICopOworX19FTkRfREVDTFMKKworI2RlZmluZQltdXRleF9pbml0KG0sIGEpCV9fbGliY19tdXRleF9pbml0KChtKSwgKGEpKQorI2RlZmluZQltdXRleF9sb2NrKG0pCQlfX2xpYmNfbXV0ZXhfbG9jaygobSkpCisjZGVmaW5lCW11dGV4X3RyeWxvY2sobSkJX19saWJjX211dGV4X3RyeWxvY2soKG0pKQorI2RlZmluZQltdXRleF91bmxvY2sobSkJCV9fbGliY19tdXRleF91bmxvY2soKG0pKQorI2RlZmluZQltdXRleF9kZXN0cm95KG0pCV9fbGliY19tdXRleF9kZXN0cm95KChtKSkKKworI2RlZmluZQltdXRleGF0dHJfaW5pdChtYSkJX19saWJjX211dGV4YXR0cl9pbml0KChtYSkpCisjZGVmaW5lCW11dGV4YXR0cl9zZXR0eXBlKG1hLCB0KSBfX2xpYmNfbXV0ZXhhdHRyX3NldHR5cGUoKG1hKSwgKHQpKQorI2RlZmluZQltdXRleGF0dHJfZGVzdHJveShtYSkJX19saWJjX211dGV4YXR0cl9kZXN0cm95KChtYSkpCisKK19fQkVHSU5fREVDTFMKK2ludAlfX2xpYmNfY29uZF9pbml0KGNvbmRfdCAqLCBjb25zdCBjb25kYXR0cl90ICopOworaW50CV9fbGliY19jb25kX3NpZ25hbChjb25kX3QgKik7CitpbnQJX19saWJjX2NvbmRfYnJvYWRjYXN0KGNvbmRfdCAqKTsKK2ludAlfX2xpYmNfY29uZF93YWl0KGNvbmRfdCAqLCBtdXRleF90ICopOworaW50CV9fbGliY19jb25kX3RpbWVkd2FpdChjb25kX3QgKiwgbXV0ZXhfdCAqLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKik7CitpbnQJX19saWJjX2NvbmRfZGVzdHJveShjb25kX3QgKik7CitfX0VORF9ERUNMUworCisjZGVmaW5lCWNvbmRfaW5pdChjLCB0LCBhKSAgICAgCV9fbGliY19jb25kX2luaXQoKGMpLCAoYSkpCisjZGVmaW5lCWNvbmRfc2lnbmFsKGMpCQlfX2xpYmNfY29uZF9zaWduYWwoKGMpKQorI2RlZmluZQljb25kX2Jyb2FkY2FzdChjKQlfX2xpYmNfY29uZF9icm9hZGNhc3QoKGMpKQorI2RlZmluZQljb25kX3dhaXQoYywgbSkJCV9fbGliY19jb25kX3dhaXQoKGMpLCAobSkpCisjZGVmaW5lCWNvbmRfdGltZWR3YWl0KGMsIG0sIHQpCV9fbGliY19jb25kX3RpbWVkd2FpdCgoYyksIChtKSwgKHQpKQorI2RlZmluZQljb25kX2Rlc3Ryb3koYykJCV9fbGliY19jb25kX2Rlc3Ryb3koKGMpKQorCitfX0JFR0lOX0RFQ0xTCitpbnQJX19saWJjX3J3bG9ja19pbml0KHJ3bG9ja190ICosIGNvbnN0IHJ3bG9ja2F0dHJfdCAqKTsKK2ludAlfX2xpYmNfcndsb2NrX3JkbG9jayhyd2xvY2tfdCAqKTsKK2ludAlfX2xpYmNfcndsb2NrX3dybG9jayhyd2xvY2tfdCAqKTsKK2ludAlfX2xpYmNfcndsb2NrX3RyeXJkbG9jayhyd2xvY2tfdCAqKTsKK2ludAlfX2xpYmNfcndsb2NrX3RyeXdybG9jayhyd2xvY2tfdCAqKTsKK2ludAlfX2xpYmNfcndsb2NrX3VubG9jayhyd2xvY2tfdCAqKTsKK2ludAlfX2xpYmNfcndsb2NrX2Rlc3Ryb3kocndsb2NrX3QgKik7CitfX0VORF9ERUNMUworCisjZGVmaW5lCXJ3bG9ja19pbml0KGwsIGEpCV9fbGliY19yd2xvY2tfaW5pdCgobCksIChhKSkKKyNkZWZpbmUJcndsb2NrX3JkbG9jayhsKQlfX2xpYmNfcndsb2NrX3JkbG9jaygobCkpCisjZGVmaW5lCXJ3bG9ja193cmxvY2sobCkJX19saWJjX3J3bG9ja193cmxvY2soKGwpKQorI2RlZmluZQlyd2xvY2tfdHJ5cmRsb2NrKGwpCV9fbGliY19yd2xvY2tfdHJ5cmRsb2NrKChsKSkKKyNkZWZpbmUJcndsb2NrX3RyeXdybG9jayhsKQlfX2xpYmNfcndsb2NrX3RyeXdybG9jaygobCkpCisjZGVmaW5lCXJ3bG9ja191bmxvY2sobCkJX19saWJjX3J3bG9ja191bmxvY2soKGwpKQorI2RlZmluZQlyd2xvY2tfZGVzdHJveShsKQlfX2xpYmNfcndsb2NrX2Rlc3Ryb3koKGwpKQorCitfX0JFR0lOX0RFQ0xTCitpbnQJX19saWJjX3Rocl9rZXljcmVhdGUodGhyZWFkX2tleV90ICosIHZvaWQgKCopKHZvaWQgKikpOworaW50CV9fbGliY190aHJfc2V0c3BlY2lmaWModGhyZWFkX2tleV90LCBjb25zdCB2b2lkICopOwordm9pZAkqX19saWJjX3Rocl9nZXRzcGVjaWZpYyh0aHJlYWRfa2V5X3QpOworaW50CV9fbGliY190aHJfa2V5ZGVsZXRlKHRocmVhZF9rZXlfdCk7CitfX0VORF9ERUNMUworCisjZGVmaW5lCXRocl9rZXljcmVhdGUoaywgZCkJX19saWJjX3Rocl9rZXljcmVhdGUoKGspLCAoZCkpCisjZGVmaW5lCXRocl9zZXRzcGVjaWZpYyhrLCBwKQlfX2xpYmNfdGhyX3NldHNwZWNpZmljKChrKSwgKHApKQorI2RlZmluZQl0aHJfZ2V0c3BlY2lmaWMoaykJX19saWJjX3Rocl9nZXRzcGVjaWZpYygoaykpCisjZGVmaW5lCXRocl9rZXlkZWxldGUoaykJX19saWJjX3Rocl9rZXlkZWxldGUoKGspKQorCitfX0JFR0lOX0RFQ0xTCitpbnQJX19saWJjX3Rocl9vbmNlKG9uY2VfdCAqLCB2b2lkICgqKSh2b2lkKSk7CitpbnQJX19saWJjX3Rocl9zaWdzZXRtYXNrKGludCwgY29uc3Qgc2lnc2V0X3QgKiwgc2lnc2V0X3QgKik7Cit0aHJfdAlfX2xpYmNfdGhyX3NlbGYodm9pZCk7CitpbnQJX19saWJjX3Rocl95aWVsZCh2b2lkKTsKK3ZvaWQJX19saWJjX3Rocl9jcmVhdGUodGhyX3QgKiwgY29uc3QgdGhyYXR0cl90ICosCisJICAgIHZvaWQgKigqKSh2b2lkICopLCB2b2lkICopOwordm9pZAlfX2xpYmNfdGhyX2V4aXQodm9pZCAqKSBfX2F0dHJpYnV0ZV9fKChfX25vcmV0dXJuX18pKTsKK2ludAkqX19saWJjX3Rocl9lcnJubyh2b2lkKTsKK2ludAlfX2xpYmNfdGhyX3NldGNhbmNlbHN0YXRlKGludCwgaW50ICopOworCitleHRlcm4gaW50IF9faXN0aHJlYWRlZDsKK19fRU5EX0RFQ0xTCisKKyNkZWZpbmUJdGhyX29uY2UobywgZikJCV9fbGliY190aHJfb25jZSgobyksIChmKSkKKyNkZWZpbmUJdGhyX3NpZ3NldG1hc2soZiwgbiwgbykJX19saWJjX3Rocl9zaWdzZXRtYXNrKChmKSwgKG4pLCAobykpCisjZGVmaW5lCXRocl9zZWxmKCkJCV9fbGliY190aHJfc2VsZigpCisjZGVmaW5lCXRocl95aWVsZCgpCQlfX2xpYmNfdGhyX3lpZWxkKCkKKyNkZWZpbmUJdGhyX2NyZWF0ZSh0cCwgdGEsIGYsIGEpIF9fbGliY190aHJfY3JlYXRlKCh0cCksICh0YSksIChmKSwgKGEpKQorI2RlZmluZQl0aHJfZXhpdCh2KQkJX19saWJjX3Rocl9leGl0KCh2KSkKKyNkZWZpbmUJdGhyX2Vycm5vKCkJCV9fbGliY190aHJfZXJybm8oKQorI2RlZmluZQl0aHJfZW5hYmxlZCgpCQkoX19pc3RocmVhZGVkKQorI2RlZmluZSB0aHJfc2V0Y2FuY2Vsc3RhdGUobiwgbykgX19saWJjX3Rocl9zZXRjYW5jZWxzdGF0ZSgobiksKG8pKQorI2VuZGlmIC8qIF9fTElCQ19USFJFQURfU1RVQlMgKi8KKworI2RlZmluZQlGTE9DS0ZJTEUoZnApCQlfX2Zsb2NrZmlsZV9pbnRlcm5hbChmcCwgMSkKKyNkZWZpbmUJRlVOTE9DS0ZJTEUoZnApCQlfX2Z1bmxvY2tmaWxlX2ludGVybmFsKGZwLCAxKQorCisjZWxzZSAvKiBfUkVFTlRSQU5UICovCisKKyNkZWZpbmUJbXV0ZXhfaW5pdChtLCBhKQorI2RlZmluZQltdXRleF9sb2NrKG0pCisjZGVmaW5lCW11dGV4X3RyeWxvY2sobSkKKyNkZWZpbmUJbXV0ZXhfdW5sb2NrKG0pCisjZGVmaW5lCW11dGV4X2Rlc3Ryb3kobSkKKworI2RlZmluZQljb25kX2luaXQoYywgdCwgYSkKKyNkZWZpbmUJY29uZF9zaWduYWwoYykKKyNkZWZpbmUJY29uZF9icm9hZGNhc3QoYykKKyNkZWZpbmUJY29uZF93YWl0KGMsIG0pCisjZGVmaW5lCWNvbmRfdGltZWR3YWl0KGMsIG0sIHQpCisjZGVmaW5lCWNvbmRfZGVzdHJveShjKQorCisjZGVmaW5lCXJ3bG9ja19pbml0KGwsIGEpCisjZGVmaW5lCXJ3bG9ja19yZGxvY2sobCkKKyNkZWZpbmUJcndsb2NrX3dybG9jayhsKQorI2RlZmluZQlyd2xvY2tfdHJ5cmRsb2NrKGwpCisjZGVmaW5lCXJ3bG9ja190cnl3cmxvY2sobCkKKyNkZWZpbmUJcndsb2NrX3VubG9jayhsKQorI2RlZmluZQlyd2xvY2tfZGVzdHJveShsKQorCisjZGVmaW5lCXRocl9rZXljcmVhdGUoaywgZCkKKyNkZWZpbmUJdGhyX3NldHNwZWNpZmljKGssIHApCisjZGVmaW5lCXRocl9nZXRzcGVjaWZpYyhrKQorI2RlZmluZQl0aHJfa2V5ZGVsZXRlKGspCisKKyNkZWZpbmUJdGhyX29uY2UobywgZikKKyNkZWZpbmUJdGhyX3NpZ3NldG1hc2soZiwgbiwgbykKKyNkZWZpbmUJdGhyX3NlbGYoKQorI2RlZmluZQl0aHJfZXJybm8oKQorCisjZGVmaW5lCUZMT0NLRklMRShmcCkJCQorI2RlZmluZQlGVU5MT0NLRklMRShmcCkJCQorCisjZW5kaWYgLyogX1JFRU5UUkFOVCAqLwpkaWZmIC0tZ2l0IGEvbGliYy9uZXRic2QvbmV0L3NlcnZlbnQuaCBiL2xpYmMvbmV0YnNkL25ldC9zZXJ2ZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODIyYjM3NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvbmV0YnNkL25ldC9zZXJ2ZW50LmgKQEAgLTAsMCArMSw0NCBAQAorLyoJJE5ldEJTRDogc2VydmVudC5oLHYgMS4xIDIwMDUvMDQvMTggMTk6Mzk6NDUga2xlaW5rIEV4cCAkCSovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDA0IFRoZSBOZXRCU0QgRm91bmRhdGlvbiwgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIFRoZSBOZXRCU0QgRm91bmRhdGlvbgorICogYnkgQ2hyaXN0b3MgWm91bGFzLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKiAgICAgICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgTmV0QlNECisgKiAgICAgICAgRm91bmRhdGlvbiwgSW5jLiBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgVGhlIE5ldEJTRCBGb3VuZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBORVRCU0QgRk9VTkRBVElPTiwgSU5DLiBBTkQgQ09OVFJJQlVUT1JTCisgKiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKKyAqIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEZPVU5EQVRJT04gT1IgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgInJlc29sdl9zdGF0aWMuaCIKKworc3RydWN0IHNlcnZlbnQqICBnZXRzZXJ2ZW50X3IocmVzX3N0YXRpYyBycyk7CmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9uZXQvc2VydmljZXMuaCBiL2xpYmMvbmV0YnNkL25ldC9zZXJ2aWNlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhMTk5ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL25ldGJzZC9uZXQvc2VydmljZXMuaApAQCAtMCwwICsxLDQ4MCBAQAorLyogZ2VuZXJhdGVkIGJ5IGdlbnNlcnYucHkgLSBkbyBub3QgZWRpdCAqLworc3RhdGljIGNvbnN0IGNoYXIgIF9zZXJ2aWNlc1tdID0gIlwKK1w2dGNwbXV4XDBcMXRcMFwKK1w0ZWNob1wwXDd0XDBcCitcNGVjaG9cMFw3dVwwXAorXDdkaXNjYXJkXDBcMTF0XDJcNHNpbmtcNG51bGxcCitcN2Rpc2NhcmRcMFwxMXVcMlw0c2lua1w0bnVsbFwKK1w2c3lzdGF0XDBcMTN0XDFcNXVzZXJzXAorXDdkYXl0aW1lXDBcMTV0XDBcCitcN2RheXRpbWVcMFwxNXVcMFwKK1w3bmV0c3RhdFwwXDE3dFwwXAorXDRxb3RkXDBcMjF0XDFcNXF1b3RlXAorXDNtc3BcMFwyMnRcMFwKK1wzbXNwXDBcMjJ1XDBcCitcN2NoYXJnZW5cMFwyM3RcMlw2dHR5dHN0XDZzb3VyY2VcCitcN2NoYXJnZW5cMFwyM3VcMlw2dHR5dHN0XDZzb3VyY2VcCitcMTBmdHAtZGF0YVwwXDI0dFwwXAorXDNmdHBcMFwyNXRcMFwKK1wzZnNwXDBcMjV1XDFcNGZzcGRcCitcM3NzaFwwXDI2dFwwXAorXDNzc2hcMFwyNnVcMFwKK1w2dGVsbmV0XDBcMjd0XDBcCitcNHNtdHBcMFwzMXRcMVw0bWFpbFwKK1w0dGltZVwwXDQ1dFwxXDExdGltc2VydmVyXAorXDR0aW1lXDBcNDV1XDFcMTF0aW1zZXJ2ZXJcCitcM3JscFwwXDQ3dVwxXDEwcmVzb3VyY2VcCitcMTJuYW1lc2VydmVyXDBcNTJ0XDFcNG5hbWVcCitcNXdob2lzXDBcNTN0XDFcN25pY25hbWVcCitcNnRhY2Fjc1wwXDYxdFwwXAorXDZ0YWNhY3NcMFw2MXVcMFwKK1wxMnJlLW1haWwtY2tcMFw2MnRcMFwKK1wxMnJlLW1haWwtY2tcMFw2MnVcMFwKK1w2ZG9tYWluXDBcNjV0XDFcMTJuYW1lc2VydmVyXAorXDZkb21haW5cMFw2NXVcMVwxMm5hbWVzZXJ2ZXJcCitcM210cFwwXDcxdFwwXAorXDExdGFjYWNzLWRzXDBcMTAxdFwwXAorXDExdGFjYWNzLWRzXDBcMTAxdVwwXAorXDZib290cHNcMFwxMDN0XDBcCitcNmJvb3Rwc1wwXDEwM3VcMFwKK1w2Ym9vdHBjXDBcMTA0dFwwXAorXDZib290cGNcMFwxMDR1XDBcCitcNHRmdHBcMFwxMDV1XDBcCitcNmdvcGhlclwwXDEwNnRcMFwKK1w2Z29waGVyXDBcMTA2dVwwXAorXDNyamVcMFwxMTV0XDFcNm5ldHJqc1wKK1w2ZmluZ2VyXDBcMTE3dFwwXAorXDN3d3dcMFwxMjB0XDFcNGh0dHBcCitcM3d3d1wwXDEyMHVcMFwKK1w0bGlua1wwXDEyN3RcMVw3dHR5bGlua1wKK1wxMGtlcmJlcm9zXDBcMTMwdFwzXDExa2VyYmVyb3M1XDRrcmI1XDE0a2VyYmVyb3Mtc2VjXAorXDEwa2VyYmVyb3NcMFwxMzB1XDNcMTFrZXJiZXJvczVcNGtyYjVcMTRrZXJiZXJvcy1zZWNcCitcNnN1cGR1cFwwXDEzN3RcMFwKK1wxMWhvc3RuYW1lc1wwXDE0NXRcMVwxMGhvc3RuYW1lXAorXDEwaXNvLXRzYXBcMFwxNDZ0XDFcNHRzYXBcCitcMTBhY3ItbmVtYVwwXDE1MHRcMVw1ZGljb21cCitcMTBhY3ItbmVtYVwwXDE1MHVcMVw1ZGljb21cCitcMTBjc25ldC1uc1wwXDE1MXRcMVw2Y3NvLW5zXAorXDEwY3NuZXQtbnNcMFwxNTF1XDFcNmNzby1uc1wKK1w3cnRlbG5ldFwwXDE1M3RcMFwKK1w3cnRlbG5ldFwwXDE1M3VcMFwKK1w0cG9wMlwwXDE1NXRcMlwxMnBvc3RvZmZpY2VcNXBvcC0yXAorXDRwb3AyXDBcMTU1dVwxXDVwb3AtMlwKK1w0cG9wM1wwXDE1NnRcMVw1cG9wLTNcCitcNHBvcDNcMFwxNTZ1XDFcNXBvcC0zXAorXDZzdW5ycGNcMFwxNTd0XDFcMTJwb3J0bWFwcGVyXAorXDZzdW5ycGNcMFwxNTd1XDFcMTJwb3J0bWFwcGVyXAorXDRhdXRoXDBcMTYxdFwzXDE2YXV0aGVudGljYXRpb25cM3RhcFw1aWRlbnRcCitcNHNmdHBcMFwxNjN0XDBcCitcMTF1dWNwLXBhdGhcMFwxNjV0XDBcCitcNG5udHBcMFwxNjd0XDJcMTByZWFkbmV3c1w0dW50cFwKK1wzbnRwXDBcMTczdFwwXAorXDNudHBcMFwxNzN1XDBcCitcNnB3ZGdlblwwXDIwMXRcMFwKK1w2cHdkZ2VuXDBcMjAxdVwwXAorXDdsb2Mtc3J2XDBcMjA3dFwxXDVlcG1hcFwKK1w3bG9jLXNydlwwXDIwN3VcMVw1ZXBtYXBcCitcMTJuZXRiaW9zLW5zXDBcMjExdFwwXAorXDEybmV0Ymlvcy1uc1wwXDIxMXVcMFwKK1wxM25ldGJpb3MtZGdtXDBcMjEydFwwXAorXDEzbmV0Ymlvcy1kZ21cMFwyMTJ1XDBcCitcMTNuZXRiaW9zLXNzblwwXDIxM3RcMFwKK1wxM25ldGJpb3Mtc3NuXDBcMjEzdVwwXAorXDVpbWFwMlwwXDIxN3RcMVw0aW1hcFwKK1w1aW1hcDJcMFwyMTd1XDFcNGltYXBcCitcNHNubXBcMFwyNDF0XDBcCitcNHNubXBcMFwyNDF1XDBcCitcMTFzbm1wLXRyYXBcMFwyNDJ0XDFcMTBzbm1wdHJhcFwKK1wxMXNubXAtdHJhcFwwXDI0MnVcMVwxMHNubXB0cmFwXAorXDEwY21pcC1tYW5cMFwyNDN0XDBcCitcMTBjbWlwLW1hblwwXDI0M3VcMFwKK1wxMmNtaXAtYWdlbnRcMFwyNDR0XDBcCitcMTJjbWlwLWFnZW50XDBcMjQ0dVwwXAorXDVtYWlscVwwXDI1NnRcMFwKK1w1bWFpbHFcMFwyNTZ1XDBcCitcNXhkbWNwXDBcMjYxdFwwXAorXDV4ZG1jcFwwXDI2MXVcMFwKK1wxMG5leHRzdGVwXDBcMjYydFwyXDEwTmVYVFN0ZXBcMTBOZXh0U3RlcFwKK1wxMG5leHRzdGVwXDBcMjYydVwyXDEwTmVYVFN0ZXBcMTBOZXh0U3RlcFwKK1wzYmdwXDBcMjYzdFwwXAorXDNiZ3BcMFwyNjN1XDBcCitcMTBwcm9zcGVyb1wwXDI3N3RcMFwKK1wxMHByb3NwZXJvXDBcMjc3dVwwXAorXDNpcmNcMFwzMDJ0XDBcCitcM2lyY1wwXDMwMnVcMFwKK1w0c211eFwwXDMwN3RcMFwKK1w0c211eFwwXDMwN3VcMFwKK1w3YXQtcnRtcFwwXDMxMXRcMFwKK1w3YXQtcnRtcFwwXDMxMXVcMFwKK1w2YXQtbmJwXDBcMzEydFwwXAorXDZhdC1uYnBcMFwzMTJ1XDBcCitcN2F0LWVjaG9cMFwzMTR0XDBcCitcN2F0LWVjaG9cMFwzMTR1XDBcCitcNmF0LXppc1wwXDMxNnRcMFwKK1w2YXQtemlzXDBcMzE2dVwwXAorXDRxbXRwXDBcMzIxdFwwXAorXDRxbXRwXDBcMzIxdVwwXAorXDV6Mzk1MFwwXDMyMnRcMVw0d2Fpc1wKK1w1ejM5NTBcMFwzMjJ1XDFcNHdhaXNcCitcM2lweFwwXDMyNXRcMFwKK1wzaXB4XDBcMzI1dVwwXAorXDVpbWFwM1wwXDMzNHRcMFwKK1w1aW1hcDNcMFwzMzR1XDBcCitcN3Bhd3NlcnZcMVwxMzF0XDBcCitcN3Bhd3NlcnZcMVwxMzF1XDBcCitcNXpzZXJ2XDFcMTMydFwwXAorXDV6c2VydlwxXDEzMnVcMFwKK1w3ZmF0c2VydlwxXDEzM3RcMFwKK1w3ZmF0c2VydlwxXDEzM3VcMFwKK1wxM3JwYzJwb3J0bWFwXDFcMTYxdFwwXAorXDEzcnBjMnBvcnRtYXBcMVwxNjF1XDBcCitcMTFjb2RhYXV0aDJcMVwxNjJ0XDBcCitcMTFjb2RhYXV0aDJcMVwxNjJ1XDBcCitcMTFjbGVhcmNhc2VcMVwxNjN0XDFcMTFDbGVhcmNhc2VcCitcMTFjbGVhcmNhc2VcMVwxNjN1XDFcMTFDbGVhcmNhc2VcCitcMTF1bGlzdHNlcnZcMVwxNjR0XDBcCitcMTF1bGlzdHNlcnZcMVwxNjR1XDBcCitcNGxkYXBcMVwyMDV0XDBcCitcNGxkYXBcMVwyMDV1XDBcCitcNGltc3BcMVwyMjZ0XDBcCitcNGltc3BcMVwyMjZ1XDBcCitcNWh0dHBzXDFcMjczdFwwXAorXDVodHRwc1wxXDI3M3VcMFwKK1w0c25wcFwxXDI3NHRcMFwKK1w0c25wcFwxXDI3NHVcMFwKK1wxNG1pY3Jvc29mdC1kc1wxXDI3NXRcMFwKK1wxNG1pY3Jvc29mdC1kc1wxXDI3NXVcMFwKK1w0c2FmdFwxXDM0N3RcMFwKK1w0c2FmdFwxXDM0N3VcMFwKK1w2aXNha21wXDFcMzY0dFwwXAorXDZpc2FrbXBcMVwzNjR1XDBcCitcNHJ0c3BcMlw1MnRcMFwKK1w0cnRzcFwyXDUydVwwXAorXDNucXNcMlwxMzd0XDBcCitcM25xc1wyXDEzN3VcMFwKK1wxMm5wbXAtbG9jYWxcMlwxNDJ0XDFcMTZkcXMzMTNfcW1hc3RlclwKK1wxMm5wbXAtbG9jYWxcMlwxNDJ1XDFcMTZkcXMzMTNfcW1hc3RlclwKK1wxMG5wbXAtZ3VpXDJcMTQzdFwxXDE0ZHFzMzEzX2V4ZWNkXAorXDEwbnBtcC1ndWlcMlwxNDN1XDFcMTRkcXMzMTNfZXhlY2RcCitcMTBobW1wLWluZFwyXDE0NHRcMVwyMGRxczMxM19pbnRlcmNlbGxcCitcMTBobW1wLWluZFwyXDE0NHVcMVwyMGRxczMxM19pbnRlcmNlbGxcCitcM2lwcFwyXDE2N3RcMFwKK1wzaXBwXDJcMTY3dVwwXAorXDRleGVjXDJcMHRcMFwKK1w0YmlmZlwyXDB1XDFcNmNvbXNhdFwKK1w1bG9naW5cMlwxdFwwXAorXDN3aG9cMlwxdVwxXDR3aG9kXAorXDVzaGVsbFwyXDJ0XDFcM2NtZFwKK1w2c3lzbG9nXDJcMnVcMFwKK1w3cHJpbnRlclwyXDN0XDFcN3Nwb29sZXJcCitcNHRhbGtcMlw1dVwwXAorXDVudGFsa1wyXDZ1XDBcCitcNXJvdXRlXDJcMTB1XDJcNnJvdXRlclw2cm91dGVkXAorXDV0aW1lZFwyXDE1dVwxXDEydGltZXNlcnZlclwKK1w1dGVtcG9cMlwxNnRcMVw3bmV3ZGF0ZVwKK1w3Y291cmllclwyXDIydFwxXDNycGNcCitcMTJjb25mZXJlbmNlXDJcMjN0XDFcNGNoYXRcCitcN25ldG5ld3NcMlwyNHRcMVwxMHJlYWRuZXdzXAorXDduZXR3YWxsXDJcMjV1XDBcCitcNmdkb21hcFwyXDMydFwwXAorXDZnZG9tYXBcMlwzMnVcMFwKK1w0dXVjcFwyXDM0dFwxXDV1dWNwZFwKK1w2a2xvZ2luXDJcMzd0XDBcCitcNmtzaGVsbFwyXDQwdFwxXDVrcmNtZFwKK1wxMmFmcG92ZXJ0Y3BcMlw0NHRcMFwKK1wxMmFmcG92ZXJ0Y3BcMlw0NHVcMFwKK1wxMHJlbW90ZWZzXDJcNTR0XDJcMTJyZnNfc2VydmVyXDNyZnNcCitcNW5udHBzXDJcNjN0XDFcNXNubnRwXAorXDVubnRwc1wyXDYzdVwxXDVzbm50cFwKK1wxMnN1Ym1pc3Npb25cMlwxMTN0XDBcCitcMTJzdWJtaXNzaW9uXDJcMTEzdVwwXAorXDVsZGFwc1wyXDE3NHRcMFwKK1w1bGRhcHNcMlwxNzR1XDBcCitcNHRpbmNcMlwyMTd0XDBcCitcNHRpbmNcMlwyMTd1XDBcCitcNHNpbGNcMlwzMDJ0XDBcCitcNHNpbGNcMlwzMDJ1XDBcCitcMTRrZXJiZXJvcy1hZG1cMlwzNTV0XDBcCitcN3dlYnN0ZXJcMlwzNzV0XDBcCitcN3dlYnN0ZXJcMlwzNzV1XDBcCitcNXJzeW5jXDNcMTUxdFwwXAorXDVyc3luY1wzXDE1MXVcMFwKK1wxMWZ0cHMtZGF0YVwzXDMzNXRcMFwKK1w0ZnRwc1wzXDMzNnRcMFwKK1w3dGVsbmV0c1wzXDM0MHRcMFwKK1w3dGVsbmV0c1wzXDM0MHVcMFwKK1w1aW1hcHNcM1wzNDF0XDBcCitcNWltYXBzXDNcMzQxdVwwXAorXDRpcmNzXDNcMzQydFwwXAorXDRpcmNzXDNcMzQydVwwXAorXDVwb3Azc1wzXDM0M3RcMFwKK1w1cG9wM3NcM1wzNDN1XDBcCitcNXNvY2tzXDRcNzB0XDBcCitcNXNvY2tzXDRcNzB1XDBcCitcNnByb29mZFw0XDEwNXRcMFwKK1w2cHJvb2ZkXDRcMTA1dVwwXAorXDVyb290ZFw0XDEwNnRcMFwKK1w1cm9vdGRcNFwxMDZ1XDBcCitcN29wZW52cG5cNFwyNTJ0XDBcCitcN29wZW52cG5cNFwyNTJ1XDBcCitcMTNybWlyZWdpc3RyeVw0XDExM3RcMFwKK1wxM3JtaXJlZ2lzdHJ5XDRcMTEzdVwwXAorXDVrYXphYVw0XDI3NnRcMFwKK1w1a2F6YWFcNFwyNzZ1XDBcCitcNm5lc3N1c1w0XDMzMXRcMFwKK1w2bmVzc3VzXDRcMzMxdVwwXAorXDExbG90dXNub3RlXDVcMTEwdFwxXDEybG90dXNub3Rlc1wKK1wxMWxvdHVzbm90ZVw1XDExMHVcMVwxMmxvdHVzbm90ZXNcCitcMTBtcy1zcWwtc1w1XDIzMXRcMFwKK1wxMG1zLXNxbC1zXDVcMjMxdVwwXAorXDEwbXMtc3FsLW1cNVwyMzJ0XDBcCitcMTBtcy1zcWwtbVw1XDIzMnVcMFwKK1wxMmluZ3Jlc2xvY2tcNVwzNjR0XDBcCitcMTJpbmdyZXNsb2NrXDVcMzY0dVwwXAorXDEzcHJvc3Blcm8tbnBcNVwzNjV0XDBcCitcMTNwcm9zcGVyby1ucFw1XDM2NXVcMFwKK1wxM2RhdGFtZXRyaWNzXDZcMTU1dFwxXDEyb2xkLXJhZGl1c1wKK1wxM2RhdGFtZXRyaWNzXDZcMTU1dVwxXDEyb2xkLXJhZGl1c1wKK1wxM3NhLW1zZy1wb3J0XDZcMTU2dFwxXDEzb2xkLXJhZGFjY3RcCitcMTNzYS1tc2ctcG9ydFw2XDE1NnVcMVwxM29sZC1yYWRhY2N0XAorXDZrZXJtaXRcNlwxNjF0XDBcCitcNmtlcm1pdFw2XDE2MXVcMFwKK1wzbDJmXDZcMjQ1dFwxXDRsMnRwXAorXDNsMmZcNlwyNDV1XDFcNGwydHBcCitcNnJhZGl1c1w3XDI0dFwwXAorXDZyYWRpdXNcN1wyNHVcMFwKK1wxM3JhZGl1cy1hY2N0XDdcMjV0XDFcN3JhZGFjY3RcCitcMTNyYWRpdXMtYWNjdFw3XDI1dVwxXDdyYWRhY2N0XAorXDEzdW5peC1zdGF0dXNcN1wyNDV0XDBcCitcMTJsb2ctc2VydmVyXDdcMjQ2dFwwXAorXDEycmVtb3RlcGluZ1w3XDI0N3RcMFwKK1wzbmZzXDEwXDF0XDBcCitcM25mc1wxMFwxdVwwXAorXDEycnRjbS1zYzEwNFwxMFw2NXRcMFwKK1wxMnJ0Y20tc2MxMDRcMTBcNjV1XDBcCitcMTJjdnNwc2VydmVyXDExXDE0MXRcMFwKK1wxMmN2c3BzZXJ2ZXJcMTFcMTQxdVwwXAorXDV2ZW51c1wxMVwxNzZ0XDBcCitcNXZlbnVzXDExXDE3NnVcMFwKK1wxMHZlbnVzLXNlXDExXDE3N3RcMFwKK1wxMHZlbnVzLXNlXDExXDE3N3VcMFwKK1w3Y29kYXNydlwxMVwyMDB0XDBcCitcN2NvZGFzcnZcMTFcMjAwdVwwXAorXDEyY29kYXNydi1zZVwxMVwyMDF0XDBcCitcMTJjb2Rhc3J2LXNlXDExXDIwMXVcMFwKK1wzbW9uXDEyXDI3dFwwXAorXDNtb25cMTJcMjd1XDBcCitcNGRpY3RcMTJcMTA0dFwwXAorXDRkaWN0XDEyXDEwNHVcMFwKK1w0Z3BzZFwxM1wyMDN0XDBcCitcNGdwc2RcMTNcMjAzdVwwXAorXDZnZHNfZGJcMTNcMzUydFwwXAorXDZnZHNfZGJcMTNcMzUydVwwXAorXDVpY3B2MlwxNFw3MnRcMVwzaWNwXAorXDVpY3B2MlwxNFw3MnVcMVwzaWNwXAorXDVteXNxbFwxNFwzNTJ0XDBcCitcNW15c3FsXDE0XDM1MnVcMFwKK1wzbnV0XDE1XDI0NXRcMFwKK1wzbnV0XDE1XDI0NXVcMFwKK1w2ZGlzdGNjXDE2XDYwdFwwXAorXDZkaXN0Y2NcMTZcNjB1XDBcCitcNGRhYXBcMTZcMTUxdFwwXAorXDRkYWFwXDE2XDE1MXVcMFwKK1wzc3ZuXDE2XDE1MnRcMVwxMnN1YnZlcnNpb25cCitcM3N2blwxNlwxNTJ1XDFcMTJzdWJ2ZXJzaW9uXAorXDNpYXhcMjFcMzMxdFwwXAorXDNpYXhcMjFcMzMxdVwwXAorXDEzcmFkbWluLXBvcnRcMjNcNDN0XDBcCitcMTNyYWRtaW4tcG9ydFwyM1w0M3VcMFwKK1wzcmZlXDIzXDIxMnVcMFwKK1wzcmZlXDIzXDIxMnRcMFwKK1wzc2lwXDIzXDMwNHRcMFwKK1wzc2lwXDIzXDMwNHVcMFwKK1w3c2lwLXRsc1wyM1wzMDV0XDBcCitcN3NpcC10bHNcMjNcMzA1dVwwXAorXDEzeG1wcC1jbGllbnRcMjRcMTQ2dFwxXDE1amFiYmVyLWNsaWVudFwKK1wxM3htcHAtY2xpZW50XDI0XDE0NnVcMVwxNWphYmJlci1jbGllbnRcCitcMTN4bXBwLXNlcnZlclwyNFwyMjV0XDFcMTVqYWJiZXItc2VydmVyXAorXDEzeG1wcC1zZXJ2ZXJcMjRcMjI1dVwxXDE1amFiYmVyLXNlcnZlclwKK1wxMGNmZW5naW5lXDI0XDI3NHRcMFwKK1wxMGNmZW5naW5lXDI0XDI3NHVcMFwKK1wxMnBvc3RncmVzcWxcMjVcNzB0XDFcMTBwb3N0Z3Jlc1wKK1wxMnBvc3RncmVzcWxcMjVcNzB1XDFcMTBwb3N0Z3Jlc1wKK1wzeDExXDI3XDE2MHRcMVw1eDExLTBcCitcM3gxMVwyN1wxNjB1XDFcNXgxMS0wXAorXDV4MTEtMVwyN1wxNjF0XDBcCitcNXgxMS0xXDI3XDE2MXVcMFwKK1w1eDExLTJcMjdcMTYydFwwXAorXDV4MTEtMlwyN1wxNjJ1XDBcCitcNXgxMS0zXDI3XDE2M3RcMFwKK1w1eDExLTNcMjdcMTYzdVwwXAorXDV4MTEtNFwyN1wxNjR0XDBcCitcNXgxMS00XDI3XDE2NHVcMFwKK1w1eDExLTVcMjdcMTY1dFwwXAorXDV4MTEtNVwyN1wxNjV1XDBcCitcNXgxMS02XDI3XDE2NnRcMFwKK1w1eDExLTZcMjdcMTY2dVwwXAorXDV4MTEtN1wyN1wxNjd0XDBcCitcNXgxMS03XDI3XDE2N3VcMFwKK1wxNGdudXRlbGxhLXN2Y1wzMFwzMTJ0XDBcCitcMTRnbnV0ZWxsYS1zdmNcMzBcMzEydVwwXAorXDE0Z251dGVsbGEtcnRyXDMwXDMxM3RcMFwKK1wxNGdudXRlbGxhLXJ0clwzMFwzMTN1XDBcCitcMTdhZnMzLWZpbGVzZXJ2ZXJcMzNcMTMwdFwxXDNiYnNcCitcMTdhZnMzLWZpbGVzZXJ2ZXJcMzNcMTMwdVwxXDNiYnNcCitcMTVhZnMzLWNhbGxiYWNrXDMzXDEzMXRcMFwKK1wxNWFmczMtY2FsbGJhY2tcMzNcMTMxdVwwXAorXDE1YWZzMy1wcnNlcnZlclwzM1wxMzJ0XDBcCitcMTVhZnMzLXByc2VydmVyXDMzXDEzMnVcMFwKK1wxNWFmczMtdmxzZXJ2ZXJcMzNcMTMzdFwwXAorXDE1YWZzMy12bHNlcnZlclwzM1wxMzN1XDBcCitcMTVhZnMzLWthc2VydmVyXDMzXDEzNHRcMFwKK1wxNWFmczMta2FzZXJ2ZXJcMzNcMTM0dVwwXAorXDEzYWZzMy12b2xzZXJcMzNcMTM1dFwwXAorXDEzYWZzMy12b2xzZXJcMzNcMTM1dVwwXAorXDEzYWZzMy1lcnJvcnNcMzNcMTM2dFwwXAorXDEzYWZzMy1lcnJvcnNcMzNcMTM2dVwwXAorXDEwYWZzMy1ib3NcMzNcMTM3dFwwXAorXDEwYWZzMy1ib3NcMzNcMTM3dVwwXAorXDEzYWZzMy11cGRhdGVcMzNcMTQwdFwwXAorXDEzYWZzMy11cGRhdGVcMzNcMTQwdVwwXAorXDEzYWZzMy1ybXRzeXNcMzNcMTQxdFwwXAorXDEzYWZzMy1ybXRzeXNcMzNcMTQxdVwwXAorXDE0Zm9udC1zZXJ2aWNlXDMzXDI3NHRcMVwzeGZzXAorXDE0Zm9udC1zZXJ2aWNlXDMzXDI3NHVcMVwzeGZzXAorXDEyYmFjdWxhLWRpclw0M1wyMTV0XDBcCitcMTJiYWN1bGEtZGlyXDQzXDIxNXVcMFwKK1wxMWJhY3VsYS1mZFw0M1wyMTZ0XDBcCitcMTFiYWN1bGEtZmRcNDNcMjE2dVwwXAorXDExYmFjdWxhLXNkXDQzXDIxN3RcMFwKK1wxMWJhY3VsYS1zZFw0M1wyMTd1XDBcCitcNmFtYW5kYVw0N1wxNDB0XDBcCitcNmFtYW5kYVw0N1wxNDB1XDBcCitcM2hrcFw1NFwxNTN0XDBcCitcM2hrcFw1NFwxNTN1XDBcCitcNGJwcmRcNjVcMjMwdFwwXAorXDRicHJkXDY1XDIzMHVcMFwKK1w1YnBkYm1cNjVcMjMxdFwwXAorXDVicGRibVw2NVwyMzF1XDBcCitcMTNicGphdmEtbXN2Y1w2NVwyMzJ0XDBcCitcMTNicGphdmEtbXN2Y1w2NVwyMzJ1XDBcCitcNXZuZXRkXDY1XDIzNHRcMFwKK1w1dm5ldGRcNjVcMjM0dVwwXAorXDRicGNkXDY1XDMyNnRcMFwKK1w0YnBjZFw2NVwzMjZ1XDBcCitcNnZvcGllZFw2NVwzMjd0XDBcCitcNnZvcGllZFw2NVwzMjd1XDBcCitcNHdubjZcMTI3XDF0XDBcCitcNHdubjZcMTI3XDF1XDBcCitcMTFrZXJiZXJvczRcMlwzNTZ1XDJcMTNrZXJiZXJvcy1pdlwza2RjXAorXDExa2VyYmVyb3M0XDJcMzU2dFwyXDEza2VyYmVyb3MtaXZcM2tkY1wKK1wxN2tlcmJlcm9zX21hc3RlclwyXDM1N3VcMFwKK1wxN2tlcmJlcm9zX21hc3RlclwyXDM1N3RcMFwKK1wxNXBhc3N3ZF9zZXJ2ZXJcMlwzNjB1XDBcCitcMTBrcmJfcHJvcFwyXDM2MnRcMlwxMWtyYjVfcHJvcFw1aHByb3BcCitcMTFrcmJ1cGRhdGVcMlwzNzB0XDFcNGtyZWdcCitcN2twYXNzd2RcMlwzNzF0XDFcNGtwd2RcCitcNHN3YXRcM1wyMDV0XDBcCitcNGtwb3BcNFwxMjV0XDBcCitcNWtuZXRkXDEwXDV0XDBcCitcMTJ6ZXBoeXItc3J2XDEwXDY2dVwwXAorXDEyemVwaHlyLWNsdFwxMFw2N3VcMFwKK1wxMXplcGh5ci1obVwxMFw3MHVcMFwKK1w3ZWtsb2dpblwxMFw3MXRcMFwKK1wya3hcMTBcNzd0XDBcCitcNWlwcm9wXDEwXDExMXRcMFwKK1wxMnN1cGZpbGVzcnZcM1wxNDd0XDBcCitcMTJzdXBmaWxlZGJnXDRcMTQ3dFwwXAorXDExbGludXhjb25mXDBcMTQydFwwXAorXDEwcG9wcGFzc2RcMFwxNTJ0XDBcCitcMTBwb3BwYXNzZFwwXDE1MnVcMFwKK1w1c3NtdHBcMVwzMjF0XDFcNXNtdHBzXAorXDEwbW9pcmFfZGJcM1w3dFwwXAorXDE0bW9pcmFfdXBkYXRlXDNcMTF0XDBcCitcMTJtb2lyYV91cmVnXDNcMTN1XDBcCitcNXNwYW1kXDNcMTd0XDBcCitcNW9taXJyXDNcNTB0XDFcNm9taXJyZFwKK1w1b21pcnJcM1w1MHVcMVw2b21pcnJkXAorXDdjdXN0b21zXDNcMzUxdFwwXAorXDdjdXN0b21zXDNcMzUxdVwwXAorXDdza2tzZXJ2XDRcMjMydFwwXAorXDdwcmVkaWN0XDRcMjcydVwwXAorXDZybXRjZmdcNFwzMjR0XDBcCitcNXdpcGxkXDVcMjR0XDBcCitcNHh0ZWxcNVw0MXRcMFwKK1w1eHRlbHdcNVw0MnRcMFwKK1w3c3VwcG9ydFw1XDM3MXRcMFwKK1w1c2lldmVcN1wzMjB0XDBcCitcN2NmaW5nZXJcN1wzMjN0XDBcCitcNG5kdHBcN1wzMzJ0XDBcCitcNGZyb3hcMTBcMTExdFwwXAorXDEwbmluc3RhbGxcMTBcMTQ2dFwwXAorXDEwbmluc3RhbGxcMTBcMTQ2dVwwXAorXDEwemVicmFzcnZcMTJcNTB0XDBcCitcNXplYnJhXDEyXDUxdFwwXAorXDRyaXBkXDEyXDUydFwwXAorXDZyaXBuZ2RcMTJcNTN0XDBcCitcNW9zcGZkXDEyXDU0dFwwXAorXDRiZ3BkXDEyXDU1dFwwXAorXDZvc3BmNmRcMTJcNTZ0XDBcCitcN29zcGZhcGlcMTJcNTd0XDBcCitcNWlzaXNkXDEyXDYwdFwwXAorXDEwYWZiYWNrdXBcMTNcMjU0dFwwXAorXDEwYWZiYWNrdXBcMTNcMjU0dVwwXAorXDExYWZtYmFja3VwXDEzXDI1NXRcMFwKK1wxMWFmbWJhY2t1cFwxM1wyNTV1XDBcCitcNXh0ZWxsXDIwXDIwMHRcMFwKK1wzZmF4XDIxXDMxNXRcMFwKK1w3aHlsYWZheFwyMVwzMTd0XDBcCitcN2Rpc3RtcDNcMjFcMzcwdFwwXAorXDVtdW5pblwyM1wxMjV0XDFcNGxycmRcCitcMTNlbmJkLWNzdGF0ZFwyM1wyNzN0XDBcCitcMTNlbmJkLXNzdGF0ZFwyM1wyNzR0XDBcCitcNHBjcmRcMjRcMzd0XDBcCitcNm5vY2xvZ1wyNFwzNTJ0XDBcCitcNm5vY2xvZ1wyNFwzNTJ1XDBcCitcN2hvc3Rtb25cMjRcMzUzdFwwXAorXDdob3N0bW9uXDI0XDM1M3VcMFwKK1w1cnBsYXlcMjVcMjYzdVwwXAorXDVycGxheVwyNVwyNjN0XDBcCitcNHJwdHBcMjVcMjY0dVwwXAorXDRycHRwXDI1XDI2NHRcMFwKK1w0bnNjYVwyNlw0M3RcMFwKK1w0bXJ0ZFwyNlw1MnRcMFwKK1w2Ymdwc2ltXDI2XDUzdFwwXAorXDVjYW5uYVwyNlw2MHRcMFwKK1wxMXNhbmUtcG9ydFwzMVwyNDZ0XDJcNHNhbmVcNXNhbmVkXAorXDRpcmNkXDMyXDEzdFwwXAorXDEwem9wZS1mdHBcMzdcMTI1dFwwXAorXDEwd2ViY2FjaGVcMzdcMjIwdFwwXAorXDZ0cHJveHlcMzdcMjIxdFwwXAorXDdvbW5pb3JiXDM3XDIzMHRcMFwKK1w3b21uaW9yYlwzN1wyMzB1XDBcCitcMjBjbGMtYnVpbGQtZGFlbW9uXDQzXDM2dFwwXAorXDZ4aW5ldGRcNDNcMjEydFwwXAorXDEzbWFuZGVsc3Bhd25cNDRcMjE3dVwxXDEybWFuZGVsYnJvdFwKK1w0em9wZVw0NVwzMTF0XDBcCitcN2thbWFuZGFcNDdcMTQxdFwwXAorXDdrYW1hbmRhXDQ3XDE0MXVcMFwKK1wxMWFtYW5kYWlkeFw0N1wxNDJ0XDBcCitcMTFhbWlkeHRhcGVcNDdcMTQzdFwwXAorXDVzbXNxcFw1M1wzMDF0XDBcCitcNXNtc3FwXDUzXDMwMXVcMFwKK1w2eHBpbG90XDczXDM2MXRcMFwKK1w2eHBpbG90XDczXDM2MXVcMFwKK1wxMHNnaS1jbXNkXDEwMlwxNTF1XDBcCitcMTBzZ2ktY3JzZFwxMDJcMTUydVwwXAorXDdzZ2ktZ2NkXDEwMlwxNTN1XDBcCitcN3NnaS1jYWRcMTAyXDE1NHRcMFwKK1w3aXNkbmxvZ1wxMTZcNTN0XDBcCitcN2lzZG5sb2dcMTE2XDUzdVwwXAorXDV2Ym94ZFwxMTZcNTR0XDBcCitcNXZib3hkXDExNlw1NHVcMFwKK1w1Ymlua3BcMTM3XDM1MnRcMFwKK1wzYXNwXDE1MlwzNTZ0XDBcCitcM2FzcFwxNTJcMzU2dVwwXAorXDExZGlyY3Byb3h5XDMzNlwyNTB0XDBcCitcNXRmaWRvXDM1M1wyMXRcMFwKK1w0Zmlkb1wzNTNcMjN0XDBcCitcMCI7CisKZGlmZiAtLWdpdCBhL2xpYmMvbmV0YnNkL3Jlc29sdi9fX2RuX2NvbXAuYyBiL2xpYmMvbmV0YnNkL3Jlc29sdi9fX2RuX2NvbXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2QzZjE5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9uZXRic2QvcmVzb2x2L19fZG5fY29tcC5jCkBAIC0wLDAgKzEsMzggQEAKKy8qCSROZXRCU0Q6IF9fZG5fY29tcC5jLHYgMS40IDIwMDUvMDkvMTMgMDE6NDQ6MTAgY2hyaXN0b3MgRXhwICQJKi8KKworLyoKKyAqIHdyaXR0ZW4gYnkgbWF0dGhldyBncmVlbiwgMjIvMDQvOTcuCisgKiBwdWJsaWMgZG9tYWluLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKK19fUkNTSUQoIiROZXRCU0Q6IF9fZG5fY29tcC5jLHYgMS40IDIwMDUvMDkvMTMgMDE6NDQ6MTAgY2hyaXN0b3MgRXhwICQiKTsKKyNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCisKKyNpZiBkZWZpbmVkKF9faW5kcl9yZWZlcmVuY2UpCitfX2luZHJfcmVmZXJlbmNlKF9fZG5fY29tcCxkbl9jb21wKQorI2Vsc2UKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpZmRlZiBBTkRST0lEX0NIQU5HRVMKKyNpbmNsdWRlICJyZXNvbHZfcHJpdmF0ZS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxyZXNvbHYuaD4KKyNlbmRpZgorCisvKiBYWFggVEhJUyBJUyBBIE1FU1MhICBTRUUgPHJlc29sdi5oPiBYWFggKi8KKworI3VuZGVmIGRuX2NvbXAKK2ludAlkbl9jb21wKGNvbnN0IGNoYXIgKiwgdV9jaGFyICosIGludCwgdV9jaGFyICoqLCB1X2NoYXIgKiopOworCitpbnQKK2RuX2NvbXAoY29uc3QgY2hhciAqZXhwX2RuLCB1X2NoYXIgKmNvbXBfZG4sIHVfY2hhciAqKmRucHRycywKKyAgICB1X2NoYXIgKipsYXN0ZG5wdHIsIGludCBsZW5ndGgpCit7CisKKwlyZXR1cm4gX19kbl9jb21wKGV4cF9kbiwgY29tcF9kbiwgbGVuZ3RoLCBkbnB0cnMsIGxhc3RkbnB0cik7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9uZXRic2QvcmVzb2x2L19fcmVzX2Nsb3NlLmMgYi9saWJjL25ldGJzZC9yZXNvbHYvX19yZXNfY2xvc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWY1MGIwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9uZXRic2QvcmVzb2x2L19fcmVzX2Nsb3NlLmMKQEAgLTAsMCArMSwzMyBAQAorLyoJJE5ldEJTRDogX19yZXNfY2xvc2UuYyx2IDEuNCAyMDA1LzA5LzEzIDAxOjQ0OjEwIGNocmlzdG9zIEV4cCAkCSovCisKKy8qCisgKiB3cml0dGVuIGJ5IG1hdHRoZXcgZ3JlZW4sIDIyLzA0Lzk3LgorICogcHVibGljIGRvbWFpbi4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCitfX1JDU0lEKCIkTmV0QlNEOiBfX3Jlc19jbG9zZS5jLHYgMS40IDIwMDUvMDkvMTMgMDE6NDQ6MTAgY2hyaXN0b3MgRXhwICQiKTsKKyNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCisKKyNpZiBkZWZpbmVkKF9faW5kcl9yZWZlcmVuY2UpCitfX2luZHJfcmVmZXJlbmNlKF9fcmVzX2Nsb3NlLCByZXNfY2xvc2UpCisjZWxzZQorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgInJlc29sdl9wcml2YXRlLmgiCisKKy8qIFhYWCBUSElTIElTIEEgTUVTUyEgIFNFRSA8cmVzb2x2Lmg+IFhYWCAqLworCisjdW5kZWYgcmVzX2Nsb3NlCit2b2lkCXJlc19jbG9zZSh2b2lkKTsKKwordm9pZAorcmVzX2Nsb3NlKHZvaWQpCit7CisKKwlfX3Jlc19jbG9zZSgpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvbmV0YnNkL3Jlc29sdi9fX3Jlc19zZW5kLmMgYi9saWJjL25ldGJzZC9yZXNvbHYvX19yZXNfc2VuZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5OGIwNWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL25ldGJzZC9yZXNvbHYvX19yZXNfc2VuZC5jCkBAIC0wLDAgKzEsMzcgQEAKKy8qCSROZXRCU0Q6IF9fcmVzX3NlbmQuYyx2IDEuNCAyMDA1LzA5LzEzIDAxOjQ0OjEwIGNocmlzdG9zIEV4cCAkCSovCisKKy8qCisgKiB3cml0dGVuIGJ5IG1hdHRoZXcgZ3JlZW4sIDIyLzA0Lzk3LgorICogcHVibGljIGRvbWFpbi4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCitfX1JDU0lEKCIkTmV0QlNEOiBfX3Jlc19zZW5kLmMsdiAxLjQgMjAwNS8wOS8xMyAwMTo0NDoxMCBjaHJpc3RvcyBFeHAgJCIpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9faW5kcl9yZWZlcmVuY2UpCitfX2luZHJfcmVmZXJlbmNlKF9fcmVzX3NlbmQsIHJlc19zZW5kKQorI2Vsc2UKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpZmRlZiBBTkRST0lEX0NIQU5HRVMKKyNpbmNsdWRlICJyZXNvbHZfcHJpdmF0ZS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxyZXNvbHYuaD4KKyNlbmRpZgorCisvKiBYWFggVEhJUyBJUyBBIE1FU1MhICBTRUUgPHJlc29sdi5oPiBYWFggKi8KKworI3VuZGVmIHJlc19zZW5kCitpbnQJcmVzX3NlbmQoY29uc3QgdV9jaGFyICosIGludCwgdV9jaGFyICosIGludCk7CisKK2ludAorcmVzX3NlbmQoY29uc3QgdV9jaGFyICpidWYsIGludCBidWZsZW4sIHVfY2hhciAqYW5zLCBpbnQgYW5zc2l6KQoreworCisJcmV0dXJuIF9fcmVzX3NlbmQoYnVmLCBidWZsZW4sIGFucywgYW5zc2l6KTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9yZXNvbHYvaGVycm9yLmMgYi9saWJjL25ldGJzZC9yZXNvbHYvaGVycm9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTkwZTY0MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvbmV0YnNkL3Jlc29sdi9oZXJyb3IuYwpAQCAtMCwwICsxLDEzMyBAQAorLyoJJE5ldEJTRDogaGVycm9yLmMsdiAxLjQgMjAwNC8wNS8yMyAwNTowOTo1MiBjaHJpc3RvcyBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTg3LCAxOTkzCisgKiAgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICogCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKKyAqIAlDYWxpZm9ybmlhLCBCZXJrZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNCBieSBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0sIEluYy4gKCJJU0MiKQorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTE5OTkgYnkgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElTQyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIElTQyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCisgKiBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKKyNpZmRlZiBub3RkZWYKK3N0YXRpYyBjb25zdCBjaGFyIHNjY3NpZFtdID0gIkAoIyloZXJyb3IuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOworc3RhdGljIGNvbnN0IGNoYXIgcmNzaWRbXSA9ICJJZDogaGVycm9yLmMsdiAxLjIuMjA2LjEgMjAwNC8wMy8wOSAwODozMzo1NCBtYXJrYSBFeHAiOworI2Vsc2UKK19fUkNTSUQoIiROZXRCU0Q6IGhlcnJvci5jLHYgMS40IDIwMDQvMDUvMjMgMDU6MDk6NTIgY2hyaXN0b3MgRXhwICQiKTsKKyNlbmRpZgorI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy91aW8uaD4KKworI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlICJhcnBhX25hbWVzZXIuaCIKKworI2luY2x1ZGUgPG5ldGRiLmg+CisjaWZkZWYgQU5EUk9JRF9DSEFOR0VTCisjaW5jbHVkZSAicmVzb2x2X3ByaXZhdGUuaCIKKyNlbHNlCisjaW5jbHVkZSA8cmVzb2x2Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2lmbmRlZiBERV9DT05TVAorI2RlZmluZSBERV9DT05TVChjLHYpICAgdiA9ICgoYykgPyBcCisgICAgc3RyY2hyKChjb25zdCB2b2lkICopKGMpLCAqKGNvbnN0IGNoYXIgKikoY29uc3Qgdm9pZCAqKShjKSkgOiBOVUxMKQorI2VuZGlmCisKK2NvbnN0IGNoYXIgKiBjb25zdCBoX2Vycmxpc3RbXSA9IHsKKwkiUmVzb2x2ZXIgRXJyb3IgMCAobm8gZXJyb3IpIiwKKwkiVW5rbm93biBob3N0IiwJCQkJLyogMSBIT1NUX05PVF9GT1VORCAqLworCSJIb3N0IG5hbWUgbG9va3VwIGZhaWx1cmUiLAkJLyogMiBUUllfQUdBSU4gKi8KKwkiVW5rbm93biBzZXJ2ZXIgZXJyb3IiLAkJCS8qIDMgTk9fUkVDT1ZFUlkgKi8KKwkiTm8gYWRkcmVzcyBhc3NvY2lhdGVkIHdpdGggbmFtZSIsCS8qIDQgTk9fQUREUkVTUyAqLworfTsKK2NvbnN0IGludAloX25lcnIgPSB7IHNpemVvZiBoX2Vycmxpc3QgLyBzaXplb2YgaF9lcnJsaXN0WzBdIH07CisKKy8qCisgKiBoZXJyb3IgLS0KKyAqCXByaW50IHRoZSBlcnJvciBpbmRpY2F0ZWQgYnkgdGhlIGhfZXJybm8gdmFsdWUuCisgKi8KK3ZvaWQKK2hlcnJvcihjb25zdCBjaGFyICpzKSB7CisJc3RydWN0IGlvdmVjIGlvdls0XSwgKnYgPSBpb3Y7CisJY2hhciAqdDsKKworCWlmIChzICE9IE5VTEwgJiYgKnMgIT0gJ1wwJykgeworCQlERV9DT05TVChzLCB0KTsKKwkJdi0+aW92X2Jhc2UgPSB0OworCQl2LT5pb3ZfbGVuID0gc3RybGVuKHQpOworCQl2Kys7CisJCURFX0NPTlNUKCI6ICIsIHQpOworCQl2LT5pb3ZfYmFzZSA9IHQ7CisJCXYtPmlvdl9sZW4gPSAyOworCQl2Kys7CisJfQorCURFX0NPTlNUKGhzdHJlcnJvcihoX2Vycm5vKSwgdCk7CisJdi0+aW92X2Jhc2UgPSB0OworCXYtPmlvdl9sZW4gPSBzdHJsZW4odi0+aW92X2Jhc2UpOworCXYrKzsKKwlERV9DT05TVCgiXG4iLCB0KTsKKwl2LT5pb3ZfYmFzZSA9IHQ7CisJdi0+aW92X2xlbiA9IDE7CisJd3JpdGV2KFNUREVSUl9GSUxFTk8sIGlvdiwgKHYgLSBpb3YpICsgMSk7Cit9CisKKy8qCisgKiBoc3RyZXJyb3IgLS0KKyAqCXJldHVybiB0aGUgc3RyaW5nIGFzc29jaWF0ZWQgd2l0aCBhIGdpdmVuICJob3N0IiBlcnJubyB2YWx1ZS4KKyAqLworY29uc3QgY2hhciAqCitoc3RyZXJyb3IoaW50IGVycikgeworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gKCJSZXNvbHZlciBpbnRlcm5hbCBlcnJvciIpOworCWVsc2UgaWYgKGVyciA8IGhfbmVycikKKwkJcmV0dXJuIChoX2Vycmxpc3RbZXJyXSk7CisJcmV0dXJuICgiVW5rbm93biByZXNvbHZlciBlcnJvciIpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19jYWNoZS5jIGIvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19jYWNoZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjOTEyZGUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL25ldGJzZC9yZXNvbHYvcmVzX2NhY2hlLmMKQEAgLTAsMCArMSwxNDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJyZXNvbHZfY2FjaGUuaCIKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSAicHRocmVhZC5oIgorCisvKiBUaGlzIGNvZGUgaW1wbGVtZW50cyBhIHNtYWxsIGFuZCAqc2ltcGxlKiBETlMgcmVzb2x2ZXIgY2FjaGUuCisgKgorICogSXQgaXMgb25seSB1c2VkIHRvIGNhY2hlIEROUyBhbnN3ZXJzIGZvciBhIG1heGltdW0gb2YgQ09ORklHX1NFQ09ORFMgc2Vjb25kcworICogaW4gb3JkZXIgdG8gcmVkdWNlIEROUyB0cmFmZmljLiBJdCBpcyBub3Qgc3VwcG9zZWQgdG8gYmUgYSBmdWxsIEROUyBjYWNoZSwKKyAqIHNpbmNlIHdlIHBsYW4gdG8gaW1wbGVtZW50IHRoYXQgaW4gdGhlIGZ1dHVyZSBpbiBhIGRlZGljYXRlZCBwcm9jZXNzIHJ1bm5pbmcKKyAqIG9uIHRoZSBzeXN0ZW0uCisgKgorICogTm90ZSB0aGF0IGl0cyBkZXNpZ24gaXMga2VwdCBzaW1wbGUgdmVyeSBpbnRlbnRpb25hbGx5LCBpLmUuOgorICoKKyAqICAtIGl0IHRha2VzIHJhdyBETlMgcXVlcnkgcGFja2V0IGRhdGEgYXMgaW5wdXQsIGFuZCByZXR1cm5zIHJhdyBETlMKKyAqICAgIGFuc3dlciBwYWNrZXQgZGF0YSBhcyBvdXRwdXQKKyAqCisgKiAgICAodGhpcyBtZWFucyB0aGF0IHR3byBzaW1pbGFyIHF1ZXJpZXMgdGhhdCBlbmNvZGUgdGhlIEROUyBuYW1lCisgKiAgICAgZGlmZmVyZW50bHkgd2lsbCBiZSB0cmVhdGVkIGRpc3RpbmN0bHkpLgorICoKKyAqICAtIHRoZSBUVExzIG9mIGFuc3dlciBSUnMgYXJlIGlnbm9yZWQuIG91ciBETlMgcmVzb2x2ZXIgbGlicmFyeSBkb2VzIG5vdCB1c2UKKyAqICAgIHRoZW0gYW55d2F5LCBidXQgaXQgbWVhbnMgdGhhdCByZWNvcmRzIHdpdGggYSBUVEwgc21hbGxlciB0aGFuCisgKiAgICBDT05GSUdfU0VDT05EUyB3aWxsIGJlIGtlcHQgaW4gdGhlIGNhY2hlIGFueXdheS4KKyAqCisgKiAgICB0aGlzIGlzIGJhZCwgYnV0IHdlIGFic29sdXRlbHkgd2FudCB0byBhdm9pZCBwYXJzaW5nIHRoZSBhbnN3ZXIgcGFja2V0cworICogICAgKGFuZCBzaG91bGQgYmUgc29sdmVkIGJ5IHRoZSBsYXRlciBmdWxsIEROUyBjYWNoZSBwcm9jZXNzKS4KKyAqCisgKiAgLSB0aGUgaW1wbGVtZW50YXRpb24gaXMganVzdCBhIChxdWVyeS1kYXRhKSA9PiAoYW5zd2VyLWRhdGEpIGhhc2ggdGFibGUKKyAqICAgIHdpdGggYSB0cml2aWFsIGxlYXN0LXJlY2VudGx5LXVzZWQgZXhwaXJhdGlvbiBwb2xpY3kuCisgKgorICogRG9pbmcgdGhpcyBrZWVwcyB0aGUgY29kZSBzaW1wbGUgYW5kIGF2b2lkcyB0byBkZWFsIHdpdGggYSBsb3Qgb2YgdGhpbmdzCisgKiB0aGF0IGEgZnVsbCBETlMgY2FjaGUgaXMgZXhwZWN0ZWQgdG8gZG8uCisgKgorICogVGhlIEFQSSBpcyBhbHNvIHZlcnkgc2ltcGxlOgorICoKKyAqICAgLSB0aGUgY2xpZW50IGNhbGxzIF9yZXNvbHZfY2FjaGVfZ2V0KCkgdG8gb2J0YWluIGEgaGFuZGxlIHRvIHRoZSBjYWNoZS4KKyAqICAgICB0aGlzIHdpbGwgaW5pdGlhbGl6ZSB0aGUgY2FjaGUgb24gZmlyc3QgdXNhZ2UuIHRoZSByZXN1bHQgY2FuIGJlIE5VTEwKKyAqICAgICBpZiB0aGUgY2FjaGUgaXMgZGlzYWJsZWQuCisgKgorICogICAtIHRoZSBjbGllbnQgY2FsbHMgX3Jlc29sdl9jYWNoZV9sb29rdXAoKSBiZWZvcmUgcGVyZm9ybWluZyBhIHF1ZXJ5CisgKgorICogICAgIGlmIHRoZSBmdW5jdGlvbiByZXR1cm5zIFJFU09MVl9DQUNIRV9GT1VORCwgYSBjb3B5IG9mIHRoZSBhbnN3ZXIgZGF0YQorICogICAgIGhhcyBiZWVuIGNvcGllZCBpbnRvIHRoZSBjbGllbnQtcHJvdmlkZWQgYW5zd2VyIGJ1ZmZlci4KKyAqCisgKiAgICAgaWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgUkVTT0xWX0NBQ0hFX05PVEZPVU5ELCB0aGUgY2xpZW50IHNob3VsZCBwZXJmb3JtCisgKiAgICAgYSByZXF1ZXN0IG5vcm1hbGx5LCAqdGhlbiogY2FsbCBfcmVzb2x2X2NhY2hlX2FkZCgpIHRvIGFkZCB0aGUgcmVjZWl2ZWQKKyAqICAgICBhbnN3ZXIgdG8gdGhlIGNhY2hlLgorICoKKyAqICAgICBpZiB0aGUgZnVuY3Rpb24gcmV0dXJucyBSRVNPTFZfQ0FDSEVfVU5TVVBQT1JURUQsIHRoZSBjbGllbnQgc2hvdWxkCisgKiAgICAgcGVyZm9ybSBhIHJlcXVlc3Qgbm9ybWFsbHksIGFuZCAqbm90KiBjYWxsIF9yZXNvbHZfY2FjaGVfYWRkKCkKKyAqCisgKiAgICAgbm90ZSB0aGF0IFJFU09MVl9DQUNIRV9VTlNVUFBPUlRFRCBpcyBhbHNvIHJldHVybmVkIGlmIHRoZSBhbnN3ZXIgYnVmZmVyCisgKiAgICAgaXMgdG9vIHNob3J0IHRvIGFjY29tb2RhdGUgdGhlIGNhY2hlZCByZXN1bHQuCisgKgorICogIC0gd2hlbiBuZXR3b3JrIHNldHRpbmdzIGNoYW5nZSwgdGhlIGNhY2hlIG11c3QgYmUgZmx1c2hlZCBzaW5jZSB0aGUgbGlzdAorICogICAgb2YgRE5TIHNlcnZlcnMgcHJvYmFibHkgY2hhbmdlZC4gdGhpcyBpcyBkb25lIGJ5IGNhbGxpbmcKKyAqICAgIF9yZXNvbHZfY2FjaGVfcmVzZXQoKQorICoKKyAqICAgIHRoZSBwYXJhbWV0ZXIgdG8gdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGFuIGV2ZXItaW5jcmVhc2luZyBnZW5lcmF0aW9uCisgKiAgICBudW1iZXIgY29ycmVzcG9uZGluZyB0byB0aGUgY3VycmVudCBuZXR3b3JrIHNldHRpbmdzIHN0YXRlLgorICoKKyAqICAgIFRoaXMgaXMgZG9uZSBiZWNhdXNlIHNldmVyYWwgdGhyZWFkcyBjb3VsZCBkZXRlY3QgdGhlIHNhbWUgbmV0d29yaworICogICAgc2V0dGluZ3MgY2hhbmdlIChidXQgYXQgZGlmZmVyZW50IHRpbWVzKSBhbmQgd2lsbCBhbGwgZW5kIHVwIGNhbGxpbmcgdGhlCisgKiAgICBzYW1lIGZ1bmN0aW9uLiBDb21wYXJpbmcgd2l0aCB0aGUgbGFzdCB1c2VkIGdlbmVyYXRpb24gbnVtYmVyIGVuc3VyZXMKKyAqICAgIHRoYXQgdGhlIGNhY2hlIGlzIG9ubHkgZmx1c2hlZCBvbmNlIHBlciBuZXR3b3JrIGNoYW5nZS4KKyAqLworCisvKiB0aGUgbmFtZSBvZiBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSB0aGF0IHdpbGwgYmUgY2hlY2tlZCB0aGUgZmlyc3QgdGltZQorICogdGhpcyBjb2RlIGlzIGNhbGxlZCBpZiBpdHMgdmFsdWUgaXMgIjAiLCB0aGVuIHRoZSByZXNvbHZlciBjYWNoZSBpcworICogZGlzYWJsZWQuCisgKi8KKyNkZWZpbmUgIENPTkZJR19FTlYgICJCSU9OSUNfRE5TQ0FDSEUiCisKKy8qIGVudHJpZXMgb2xkZXIgdGhhbiBDT05GSUdfU0VDT05EUyBzZWNvbmRzIGFyZSBhbHdheXMgZGlzY2FyZGVkLgorICovCisjZGVmaW5lICBDT05GSUdfU0VDT05EUyAgICAoNjAqMTApICAgIC8qIDEwIG1pbnV0ZXMgKi8KKworLyogbWF4aW11bSBudW1iZXIgb2YgZW50cmllcyBrZXB0IGluIHRoZSBjYWNoZS4gVGhpcyB2YWx1ZSBoYXMgYmVlbgorICogZGV0ZXJtaW5lZCBieSBicm93c2luZyB0aHJvdWdoIHZhcmlvdXMgc2l0ZXMgYW5kIGNvdW50aW5nIHRoZSBudW1iZXIKKyAqIG9mIGNvcnJlc3BvbmRpbmcgcmVxdWVzdHMuIEtlZXAgaW4gbWluZCB0aGF0IG91ciBmcmFtZXdvcmsgaXMgY3VycmVudGx5CisgKiBwZXJmb3JtaW5nIHR3byByZXF1ZXN0cyBwZXIgbmFtZSBsb29rdXAgKG9uZSBmb3IgSVB2NCwgdGhlIG90aGVyIGZvciBJUHY2KQorICoKKyAqICAgIHd3dy5nb29nbGUuY29tICAgICAgNAorICogICAgd3d3LnlzZWFyY2guY29tICAgICA2CisgKiAgICB3d3cuYW1hem9uLmNvbSAgICAgIDgKKyAqICAgIHd3dy5ueXRpbWVzLmNvbSAgICAgMjIKKyAqICAgIHd3dy5lc3BuLmNvbSAgICAgICAgMjgKKyAqICAgIHd3dy5tc24uY29tICAgICAgICAgMjgKKyAqICAgIHd3dy5sZW1vbmRlLmZyICAgICAgMzUKKyAqCisgKiAoZGV0ZXJtaW5lZCBpbiAyMDA5LTItMTcgZnJvbSBQYXJpcywgRnJhbmNlLCByZXN1bHRzIG1heSB2YXJ5IGRlcGVuZGluZworICogIG9uIGxvY2F0aW9uKQorICoKKyAqIG1vc3QgaGlnaC1sZXZlbCB3ZWJzaXRlcyB1c2UgbG90cyBvZiBtZWRpYS9hZCBzZXJ2ZXJzIHdpdGggZGlmZmVyZW50IG5hbWVzCisgKiBidXQgdGhlc2UgYXJlIGdlbmVyYWxseSByZXVzZWQgd2hlbiBicm93c2luZyB0aHJvdWdoIHRoZSBzaXRlLgorICoKKyAqIEFzIHN1Y2gsIGEgdmFsdWQgb2YgNjQgc2hvdWxkIGJlIHJlbGF0aXZlbHkgY29uZm9ybXRhYmxlIGF0IHRoZSBtb21lbnQuCisgKi8KKyNkZWZpbmUgIENPTkZJR19NQVhfRU5UUklFUyAgICA2NAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKy8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogc2V0IHRvIDEgdG8gZGVidWcgY2FjaGUgb3BlcmF0aW9ucyAqLworI2RlZmluZSAgREVCVUcgICAgICAgMAorCisvKiBzZXQgdG8gMSB0byBkZWJ1ZyBxdWVyeSBkYXRhICovCisjZGVmaW5lICBERUJVR19EQVRBICAwCisKKyNpZiBERUJVRworIyAgaW5jbHVkZSA8bG9nZC5oPgorIyAgZGVmaW5lICBYTE9HKC4uLikgICBcCisgICAgX19saWJjX2FuZHJvaWRfbG9nX3ByaW50KEFORFJPSURfTE9HX0RFQlVHLCJsaWJjIixfX1ZBX0FSR1NfXykKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisKKy8qKiBCT1VOREVEIEJVRkZFUiBGT1JNQVRUSU5HCisgKiovCisKKy8qIHRlY2huaWNhbCBub3RlOgorICoKKyAqICAgdGhlIGZvbGxvd2luZyBkZWJ1Z2dpbmcgcm91dGluZXMgYXJlIHVzZWQgdG8gYXBwZW5kIGRhdGEgdG8gYSBib3VuZGVkCisgKiAgIGJ1ZmZlciB0aGV5IHRha2UgdHdvIHBhcmFtZXRlcnMgdGhhdCBhcmU6CisgKgorICogICAtIHAgOiBhIHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uIGluIHRoZSBidWZmZXIKKyAqICAgICAgICAgdGhpcyB2YWx1ZSBpcyBpbml0aWFsbHkgc2V0IHRvIHRoZSBidWZmZXIncyBhZGRyZXNzLgorICoKKyAqICAgLSBlbmQgOiB0aGUgYWRkcmVzcyBvZiB0aGUgYnVmZmVyJ3MgbGltaXQsIGkuZS4gb2YgdGhlIGZpcnN0IGJ5dGUKKyAqICAgICAgICAgICBhZnRlciB0aGUgYnVmZmVyLiB0aGlzIGFkZHJlc3Mgc2hvdWxkIG5ldmVyIGJlIHRvdWNoZWQuCisgKgorICogICAgICAgICAgIElNUE9SVEFOVDogaXQgaXMgYXNzdW1lZCB0aGF0IGVuZCA+IGJ1ZmZlcl9hZGRyZXNzLCBpLmUuCisgKiAgICAgICAgICAgICAgICAgICAgICB0aGF0IHRoZSBidWZmZXIgaXMgYXQgbGVhc3Qgb25lIGJ5dGUuCisgKgorICogICB0aGUgX2JwcmludF8oKSBmdW5jdGlvbnMgcmV0dXJuIHRoZSBuZXcgdmFsdWUgb2YgJ3AnIGFmdGVyIHRoZSBkYXRhCisgKiAgIGhhcyBiZWVuIGFwcGVuZGVkLCBhbmQgYWxzbyBlbnN1cmUgdGhlIGZvbGxvd2luZzoKKyAqCisgKiAgIC0gdGhlIHJldHVybmVkIHZhbHVlIHdpbGwgbmV2ZXIgYmUgc3RyaWN0bHkgZ3JlYXRlciB0aGFuICdlbmQnCisgKgorICogICAtIGEgcmV0dXJuIHZhbHVlIGVxdWFsIHRvICdlbmQnIG1lYW5zIHRoYXQgdHJ1bmNhdGlvbiBvY2N1cmVkCisgKiAgICAgKGluIHdoaWNoIGNhc2UsIGVuZFstMV0gd2lsbCBiZSBzZXQgdG8gMCkKKyAqCisgKiAgIC0gYWZ0ZXIgcmV0dXJuaW5nIGZyb20gYSBfYnByaW50XygpIGZ1bmN0aW9uLCB0aGUgY29udGVudCBvZiB0aGUgYnVmZmVyCisgKiAgICAgaXMgYWx3YXlzIDAtdGVybWluYXRlZCwgZXZlbiBpbiB0aGUgZXZlbnQgb2YgdHJ1bmNhdGlvbi4KKyAqCisgKiAgdGhlc2UgY29udmVudGlvbnMgYWxsb3cgeW91IHRvIGNhbGwgX2JwcmludF8gZnVuY3Rpb25zIG11bHRpcGxlIHRpbWVzIGFuZAorICogIG9ubHkgY2hlY2sgZm9yIHRydW5jYXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgc2VxdWVuY2UsIGFzIGluOgorICoKKyAqICAgICBjaGFyICBidWZmWzEwMDBdLCAqcCA9IGJ1ZmYsICplbmQgPSBwICsgc2l6ZW9mKGJ1ZmYpOworICoKKyAqICAgICBwID0gX2JwcmludF9jKHAsIGVuZCwgJyInKTsKKyAqICAgICBwID0gX2JwcmludF9zKHAsIGVuZCwgbXlfc3RyaW5nKTsKKyAqICAgICBwID0gX2JwcmludF9jKHAsIGVuZCwgJyInKTsKKyAqCisgKiAgICAgaWYgKHAgPj0gZW5kKSB7CisgKiAgICAgICAgLy8gYnVmZmVyIHdhcyB0b28gc21hbGwKKyAqICAgICB9CisgKgorICogICAgIHByaW50ZiggIiVzIiwgYnVmZiApOworICovCisKKy8qIGFkZCBhIGNoYXIgdG8gYSBib3VuZGVkIGJ1ZmZlciAqLworc3RhdGljIGNoYXIqCitfYnByaW50X2MoIGNoYXIqICBwLCBjaGFyKiAgZW5kLCBpbnQgIGMgKQoreworICAgIGlmIChwIDwgZW5kKSB7CisgICAgICAgIGlmIChwKzEgPT0gZW5kKQorICAgICAgICAgICAgKnArKyA9IDA7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgKnArKyA9IChjaGFyKSBjOworICAgICAgICAgICAgKnAgICA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHA7Cit9CisKKy8qIGFkZCBhIHNlcXVlbmNlIG9mIGJ5dGVzIHRvIGEgYm91bmRlZCBidWZmZXIgKi8KK3N0YXRpYyBjaGFyKgorX2JwcmludF9iKCBjaGFyKiAgcCwgY2hhciogIGVuZCwgY29uc3QgY2hhciogIGJ1ZiwgaW50ICBsZW4gKQoreworICAgIGludCAgYXZhaWwgPSBlbmQgLSBwOworCisgICAgaWYgKGF2YWlsIDw9IDAgfHwgbGVuIDw9IDApCisgICAgICAgIHJldHVybiBwOworCisgICAgaWYgKGF2YWlsID4gbGVuKQorICAgICAgICBhdmFpbCA9IGxlbjsKKworICAgIG1lbWNweSggcCwgYnVmLCBhdmFpbCApOworICAgIHAgKz0gYXZhaWw7CisKKyAgICBpZiAocCA8IGVuZCkKKyAgICAgICAgcFswXSA9IDA7CisgICAgZWxzZQorICAgICAgICBlbmRbLTFdID0gMDsKKworICAgIHJldHVybiBwOworfQorCisvKiBhZGQgYSBzdHJpbmcgdG8gYSBib3VuZGVkIGJ1ZmZlciAqLworc3RhdGljIGNoYXIqCitfYnByaW50X3MoIGNoYXIqICBwLCBjaGFyKiAgZW5kLCBjb25zdCBjaGFyKiAgc3RyICkKK3sKKyAgICByZXR1cm4gX2JwcmludF9iKHAsIGVuZCwgc3RyLCBzdHJsZW4oc3RyKSk7Cit9CisKKy8qIGFkZCBhIGZvcm1hdHRlZCBzdHJpbmcgdG8gYSBib3VuZGVkIGJ1ZmZlciAqLworc3RhdGljIGNoYXIqCitfYnByaW50KCBjaGFyKiAgcCwgY2hhciogIGVuZCwgY29uc3QgY2hhciogIGZvcm1hdCwgLi4uICkKK3sKKyAgICBpbnQgICAgICBhdmFpbCwgbjsKKyAgICB2YV9saXN0ICBhcmdzOworCisgICAgYXZhaWwgPSBlbmQgLSBwOworCisgICAgaWYgKGF2YWlsIDw9IDApCisgICAgICAgIHJldHVybiBwOworCisgICAgdmFfc3RhcnQoYXJncywgZm9ybWF0KTsKKyAgICBuID0gc25wcmludGYoIHAsIGF2YWlsLCBmb3JtYXQsIGFyZ3MpOworICAgIHZhX2VuZChhcmdzKTsKKworICAgIC8qIGNlcnRhaW4gQyBsaWJyYXJpZXMgcmV0dXJuIC0xIGluIGNhc2Ugb2YgdHJ1bmNhdGlvbiAqLworICAgIGlmIChuIDwgMCB8fCBuID4gYXZhaWwpCisgICAgICAgIG4gPSBhdmFpbDsKKworICAgIHAgKz0gbjsKKyAgICAvKiBjZXJ0YWluIEMgbGlicmFyaWVzIGRvIG5vdCB6ZXJvLXRlcm1pbmF0ZSBpbiBjYXNlIG9mIHRydW5jYXRpb24gKi8KKyAgICBpZiAocCA9PSBlbmQpCisgICAgICAgIHBbLTFdID0gMDsKKworICAgIHJldHVybiBwOworfQorCisvKiBhZGQgYSBoZXggdmFsdWUgdG8gYSBib3VuZGVkIGJ1ZmZlciwgdXAgdG8gOCBkaWdpdHMgKi8KK3N0YXRpYyBjaGFyKgorX2JwcmludF9oZXgoIGNoYXIqICBwLCBjaGFyKiAgZW5kLCB1bnNpZ25lZCAgdmFsdWUsIGludCAgbnVtRGlnaXRzICkKK3sKKyAgICBjaGFyICAgdGV4dFtzaXplb2YodW5zaWduZWQpKjJdOworICAgIGludCAgICBubiA9IDA7CisKKyAgICB3aGlsZSAobnVtRGlnaXRzLS0gPiAwKSB7CisgICAgICAgIHRleHRbbm4rK10gPSAiMDEyMzQ1Njc4OWFiY2RlZiJbKHZhbHVlID4+IChudW1EaWdpdHMqNCkpICYgMTVdOworICAgIH0KKyAgICByZXR1cm4gX2JwcmludF9iKHAsIGVuZCwgdGV4dCwgbm4pOworfQorCisvKiBhZGQgdGhlIGhleGFkZWNpbWFsIGR1bXAgb2Ygc29tZSBtZW1vcnkgYXJlYSB0byBhIGJvdW5kZWQgYnVmZmVyICovCitzdGF0aWMgY2hhcioKK19icHJpbnRfaGV4ZHVtcCggY2hhciogIHAsIGNoYXIqICBlbmQsIGNvbnN0IHVpbnQ4X3QqICBkYXRhLCBpbnQgIGRhdGFsZW4gKQoreworICAgIGludCAgIGxpbmVTaXplID0gMTY7CisKKyAgICB3aGlsZSAoZGF0YWxlbiA+IDApIHsKKyAgICAgICAgaW50ICBhdmFpbCA9IGRhdGFsZW47CisgICAgICAgIGludCAgbm47CisKKyAgICAgICAgaWYgKGF2YWlsID4gbGluZVNpemUpCisgICAgICAgICAgICBhdmFpbCA9IGxpbmVTaXplOworCisgICAgICAgIGZvciAobm4gPSAwOyBubiA8IGF2YWlsOyBubisrKSB7CisgICAgICAgICAgICBpZiAobm4gPiAwKQorICAgICAgICAgICAgICAgIHAgPSBfYnByaW50X2MocCwgZW5kLCAnICcpOworICAgICAgICAgICAgcCA9IF9icHJpbnRfaGV4KHAsIGVuZCwgZGF0YVtubl0sIDIpOworICAgICAgICB9CisgICAgICAgIGZvciAoIDsgbm4gPCBsaW5lU2l6ZTsgbm4rKyApIHsKKyAgICAgICAgICAgIHAgPSBfYnByaW50X3MocCwgZW5kLCAiICAgIik7CisgICAgICAgIH0KKyAgICAgICAgcCA9IF9icHJpbnRfcyhwLCBlbmQsICIgICIpOworCisgICAgICAgIGZvciAobm4gPSAwOyBubiA8IGF2YWlsOyBubisrKSB7CisgICAgICAgICAgICBpbnQgIGMgPSBkYXRhW25uXTsKKworICAgICAgICAgICAgaWYgKGMgPCAzMiB8fCBjID4gMTI3KQorICAgICAgICAgICAgICAgIGMgPSAnLic7CisKKyAgICAgICAgICAgIHAgPSBfYnByaW50X2MocCwgZW5kLCBjKTsKKyAgICAgICAgfQorICAgICAgICBwID0gX2JwcmludF9jKHAsIGVuZCwgJ1xuJyk7CisKKyAgICAgICAgZGF0YSAgICArPSBhdmFpbDsKKyAgICAgICAgZGF0YWxlbiAtPSBhdmFpbDsKKyAgICB9CisgICAgcmV0dXJuIHA7Cit9CisKKy8qIGR1bXAgdGhlIGNvbnRlbnQgb2YgYSBxdWVyeSBvZiBwYWNrZXQgdG8gdGhlIGxvZyAqLworc3RhdGljIHZvaWQKK1hMT0dfQllURVMoIGNvbnN0IHZvaWQqICBiYXNlLCBpbnQgIGxlbiApCit7CisgICAgY2hhciAgYnVmZlsxMDI0XTsKKyAgICBjaGFyKiAgcCA9IGJ1ZmYsICplbmQgPSBwICsgc2l6ZW9mKGJ1ZmYpOworCisgICAgcCA9IF9icHJpbnRfaGV4ZHVtcChwLCBlbmQsIGJhc2UsIGxlbik7CisgICAgWExPRygiJXMiLGJ1ZmYpOworfQorCisjZWxzZSAvKiAhREVCVUcgKi8KKyMgIGRlZmluZSAgWExPRyguLi4pICAgICAgICAoKHZvaWQpMCkKKyMgIGRlZmluZSAgWExPR19CWVRFUyhhLGIpICAoKHZvaWQpMCkKKyNlbmRpZgorCitzdGF0aWMgdGltZV90CitfdGltZV9ub3coIHZvaWQgKQoreworICAgIHN0cnVjdCB0aW1ldmFsICB0djsKKworICAgIGdldHRpbWVvZmRheSggJnR2LCBOVUxMICk7CisgICAgcmV0dXJuIHR2LnR2X3NlYzsKK30KKworLyogcmVtaW5kZXI6IHRoZSBnZW5lcmFsIGZvcm1hdCBvZiBhIEROUyBwYWNrZXQgaXMgdGhlIGZvbGxvd2luZzoKKyAqCisgKiAgICBIRUFERVIgICgxMiBieXRlcykKKyAqICAgIFFVRVNUSU9OICAodmFyaWFibGUpCisgKiAgICBBTlNXRVIgKHZhcmlhYmxlKQorICogICAgQVVUSE9SSVRZICh2YXJpYWJsZSkKKyAqICAgIEFERElUSU9OTkFMICh2YXJpYWJsZSkKKyAqCisgKiB0aGUgSEVBREVSIGlzIG1hZGUgb2Y6CisgKgorICogICBJRCAgICAgOiAxNiA6IDE2LWJpdCB1bmlxdWUgcXVlcnkgaWRlbnRpZmljYXRpb24gZmllbGQKKyAqCisgKiAgIFFSICAgICA6ICAxIDogc2V0IHRvIDAgZm9yIHF1ZXJpZXMsIGFuZCAxIGZvciByZXNwb25zZXMKKyAqICAgT3Bjb2RlIDogIDQgOiBzZXQgdG8gMCBmb3IgcXVlcmllcworICogICBBQSAgICAgOiAgMSA6IHNldCB0byAwIGZvciBxdWVyaWVzCisgKiAgIFRDICAgICA6ICAxIDogdHJ1bmNhdGlvbiBmbGFnLCB3aWxsIGJlIHNldCB0byAwIGluIHF1ZXJpZXMKKyAqICAgUkQgICAgIDogIDEgOiByZWN1cnNpb24gZGVzaXJlZAorICoKKyAqICAgUkEgICAgIDogIDEgOiByZWN1cnNpb24gYXZhaWxhYmxlICgwIGluIHF1ZXJpZXMpCisgKiAgIFogICAgICA6ICAzIDogdGhyZWUgcmVzZXJ2ZWQgemVybyBiaXRzCisgKiAgIFJDT0RFICA6ICA0IDogcmVzcG9uc2UgY29kZSAoYWx3YXlzIDA9Tk9FUlJPUiBpbiBxdWVyaWVzKQorICoKKyAqICAgUURDb3VudDogMTYgOiBxdWVzdGlvbiBjb3VudAorICogICBBTkNvdW50OiAxNiA6IEFuc3dlciBjb3VudCAoMCBpbiBxdWVyaWVzKQorICogICBOU0NvdW50OiAxNjogQXV0aG9yaXR5IFJlY29yZCBjb3VudCAoMCBpbiBxdWVyaWVzKQorICogICBBUkNvdW50OiAxNjogQWRkaXRpb25uYWwgUmVjb3JkIGNvdW50ICgwIGluIHF1ZXJpZXMpCisgKgorICogdGhlIFFVRVNUSU9OIGlzIG1hZGUgb2YgUURDb3VudCBRdWVzdGlvbiBSZWNvcmQgKFFScykKKyAqIHRoZSBBTlNXRVIgaXMgbWFkZSBvZiBBTkNvdW50IFJScworICogdGhlIEFVVEhPUklUWSBpcyBtYWRlIG9mIE5TQ291bnQgUlJzCisgKiB0aGUgQURESVRJT05OQUwgaXMgbWFkZSBvZiBBUkNvdW50IFJScworICoKKyAqIEVhY2ggUXVlc3Rpb24gUmVjb3JkIChRUikgaXMgbWFkZSBvZjoKKyAqCisgKiAgIFFOQU1FICAgOiB2YXJpYWJsZSA6IFF1ZXJ5IEROUyBOQU1FCisgKiAgIFRZUEUgICAgOiAxNiAgICAgICA6IHR5cGUgb2YgcXVlcnkgKEE9MSwgUFRSPTEyLCBNWD0xNSwgQUFBQT0yOCwgQUxMPTI1NSkKKyAqICAgQ0xBU1MgICA6IDE2ICAgICAgIDogY2xhc3Mgb2YgcXVlcnkgKElOPTEpCisgKgorICogRWFjaCBSZXNvdXJjZSBSZWNvcmQgKFJSKSBpcyBtYWRlIG9mOgorICoKKyAqICAgTkFNRSAgICA6IHZhcmlhYmxlIDogRE5TIE5BTUUKKyAqICAgVFlQRSAgICA6IDE2ICAgICAgIDogdHlwZSBvZiBxdWVyeSAoQT0xLCBQVFI9MTIsIE1YPTE1LCBBQUFBPTI4LCBBTEw9MjU1KQorICogICBDTEFTUyAgIDogMTYgICAgICAgOiBjbGFzcyBvZiBxdWVyeSAoSU49MSkKKyAqICAgVFRMICAgICA6IDMyICAgICAgIDogc2Vjb25kcyB0byBjYWNoZSB0aGlzIFJSICgwPW5vbmUpCisgKiAgIFJETEVOR1RIOiAxNiAgICAgICA6IHNpemUgb2YgUkREQVRBIGluIGJ5dGVzCisgKiAgIFJEREFUQSAgOiB2YXJpYWJsZSA6IFJSIGRhdGEgKGRlcGVuZHMgb24gVFlQRSkKKyAqCisgKiBFYWNoIFFOQU1FIGNvbnRhaW5zIGEgZG9tYWluIG5hbWUgZW5jb2RlZCBhcyBhIHNlcXVlbmNlIG9mICdsYWJlbHMnCisgKiB0ZXJtaW5hdGVkIGJ5IGEgemVyby4gRWFjaCBsYWJlbCBoYXMgdGhlIGZvbGxvd2luZyBmb3JtYXQ6CisgKgorICogICAgTEVOICA6IDggICAgIDogbGVuZ2h0IG9mIGxhYmVsIChNVVNUIGJlIDwgNjQpCisgKiAgICBOQU1FIDogOCpMRU4gOiBsYWJlbCBsZW5ndGggKG11c3QgZXhjbHVkZSBkb3RzKQorICoKKyAqIEEgdmFsdWUgb2YgMCBpbiB0aGUgZW5jb2RpbmcgaXMgaW50ZXJwcmV0ZWQgYXMgdGhlICdyb290JyBkb21haW4gYW5kCisgKiB0ZXJtaW5hdGVzIHRoZSBlbmNvZGluZy4gU28gJ3d3dy5hbmRyb2lkLmNvbScgd2lsbCBiZSBlbmNvZGVkIGFzOgorICoKKyAqICAgPDM+d3d3PDc+YW5kcm9pZDwzPmNvbTwwPgorICoKKyAqIFdoZXJlIDxuPiByZXByZXNlbnRzIHRoZSBieXRlIHdpdGggdmFsdWUgJ24nCisgKgorICogRWFjaCBOQU1FIHJlZmxlY3RzIHRoZSBRTkFNRSBvZiB0aGUgcXVlc3Rpb24sIGJ1dCBoYXMgYSBzbGlnaHRseSBtb3JlCisgKiBjb21wbGV4IGVuY29kaW5nIGluIG9yZGVyIHRvIHByb3ZpZGUgbWVzc2FnZSBjb21wcmVzc2lvbi4gVGhpcyBpcyBhY2hpZXZlZAorICogYnkgdXNpbmcgYSAyLWJ5dGUgcG9pbnRlciwgd2l0aCBmb3JtYXQ6CisgKgorICogICAgVFlQRSAgIDogMiAgOiAwYjExIHRvIGluZGljYXRlIGEgcG9pbnRlciwgMGIwMSBhbmQgMGIxMCBhcmUgcmVzZXJ2ZWQKKyAqICAgIE9GRlNFVCA6IDE0IDogb2Zmc2V0IHRvIGFub3RoZXIgcGFydCBvZiB0aGUgRE5TIHBhY2tldAorICoKKyAqIFRoZSBvZmZzZXQgaXMgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBETlMgcGFja2V0IGFuZCBtdXN0IHBvaW50CisgKiBBIHBvaW50ZXIgdGVybWluYXRlcyB0aGUgZW5jb2RpbmcuCisgKgorICogVGhlIE5BTUUgY2FuIGJlIGVuY29kZWQgaW4gb25lIG9mIHRoZSBmb2xsb3dpbmcgZm9ybWF0czoKKyAqCisgKiAgIC0gYSBzZXF1ZW5jZSBvZiBzaW1wbGUgbGFiZWxzIHRlcm1pbmF0ZWQgYnkgMCAobGlrZSBRTkFNRXMpCisgKiAgIC0gYSBzaW5nbGUgcG9pbnRlcgorICogICAtIGEgc2VxdWVuY2Ugb2Ygc2ltcGxlIGxhYmVscyB0ZXJtaW5hdGVkIGJ5IGEgcG9pbnRlcgorICoKKyAqIEEgcG9pbnRlciBzaGFsbCBhbHdheXMgcG9pbnQgdG8gZWl0aGVyIGEgcG9pbnRlciBvZiBhIHNlcXVlbmNlIG9mCisgKiBsYWJlbHMgKHdoaWNoIGNhbiB0aGVtc2VsdmVzIGJlIHRlcm1pbmF0ZWQgYnkgZWl0aGVyIGEgMCBvciBhIHBvaW50ZXIpCisgKgorICogVGhlIGV4cGFuZGVkIGxlbmd0aCBvZiBhIGdpdmVuIGRvbWFpbiBuYW1lIHNob3VsZCBub3QgZXhjZWVkIDI1NSBieXRlcy4KKyAqCisgKiBOT1RFOiB3ZSBkb24ndCBwYXJzZSB0aGUgYW5zd2VyIHBhY2tldHMsIHNvIGRvbid0IG5lZWQgdG8gZGVhbCB3aXRoIE5BTUUKKyAqICAgICAgIHJlY29yZHMsIG9ubHkgUU5BTUVzLgorICovCisKKyNkZWZpbmUgIEROU19IRUFERVJfU0laRSAgMTIKKworI2RlZmluZSAgRE5TX1RZUEVfQSAgICJcMDBcMDEiICAgLyogYmlnLWVuZGlhbiBkZWNpbWFsIDEgKi8KKyNkZWZpbmUgIEROU19UWVBFX1BUUiAiXDAwXDAxNCIgIC8qIGJpZy1lbmRpYW4gZGVjaW1hbCAxMiAqLworI2RlZmluZSAgRE5TX1RZUEVfTVggICJcMDBcMDE3IiAgLyogYmlnLWVuZGlhbiBkZWNpbWFsIDE1ICovCisjZGVmaW5lICBETlNfVFlQRV9BQUFBICJcMDBcMDM0IiAvKiBiaWctZW5kaWFuIGRlY2ltYWwgMjggKi8KKyNkZWZpbmUgIEROU19UWVBFX0FMTCAiXDAwXDAzNzciIC8qIGJpZy1lbmRpYW4gZGVjaW1hbCAyNTUgKi8KKworI2RlZmluZSAgRE5TX0NMQVNTX0lOICJcMDBcMDEiICAgLyogYmlnLWVuZGlhbiBkZWNpbWFsIDEgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGNvbnN0IHVpbnQ4X3QqICBiYXNlOworICAgIGNvbnN0IHVpbnQ4X3QqICBlbmQ7CisgICAgY29uc3QgdWludDhfdCogIGN1cnNvcjsKK30gRG5zUGFja2V0OworCitzdGF0aWMgdm9pZAorX2Ruc1BhY2tldF9pbml0KCBEbnNQYWNrZXQqICBwYWNrZXQsIGNvbnN0IHVpbnQ4X3QqICBidWZmLCBpbnQgIGJ1ZmZsZW4gKQoreworICAgIHBhY2tldC0+YmFzZSAgID0gYnVmZjsKKyAgICBwYWNrZXQtPmVuZCAgICA9IGJ1ZmYgKyBidWZmbGVuOworICAgIHBhY2tldC0+Y3Vyc29yID0gYnVmZjsKK30KKworc3RhdGljIHZvaWQKK19kbnNQYWNrZXRfcmV3aW5kKCBEbnNQYWNrZXQqICBwYWNrZXQgKQoreworICAgIHBhY2tldC0+Y3Vyc29yID0gcGFja2V0LT5iYXNlOworfQorCitzdGF0aWMgdm9pZAorX2Ruc1BhY2tldF9za2lwKCBEbnNQYWNrZXQqICBwYWNrZXQsIGludCAgY291bnQgKQoreworICAgIGNvbnN0IHVpbnQ4X3QqICBwID0gcGFja2V0LT5jdXJzb3IgKyBjb3VudDsKKworICAgIGlmIChwID4gcGFja2V0LT5lbmQpCisgICAgICAgIHAgPSBwYWNrZXQtPmVuZDsKKworICAgIHBhY2tldC0+Y3Vyc29yID0gcDsKK30KKworc3RhdGljIGludAorX2Ruc1BhY2tldF9yZWFkSW50MTYoIERuc1BhY2tldCogIHBhY2tldCApCit7CisgICAgY29uc3QgdWludDhfdCogIHAgPSBwYWNrZXQtPmN1cnNvcjsKKworICAgIGlmIChwKzIgPiBwYWNrZXQtPmVuZCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgcGFja2V0LT5jdXJzb3IgPSBwKzI7CisgICAgcmV0dXJuIChwWzBdPDwgOCkgfCBwWzFdOworfQorCisvKiogUVVFUlkgQ0hFQ0tJTkcKKyAqKi8KKworLyogY2hlY2sgYnl0ZXMgaW4gYSBkbnMgcGFja2V0LiByZXR1cm5zIDEgb24gc3VjY2VzcywgMCBvbiBmYWlsdXJlLgorICogdGhlIGN1cnNvciBpcyBvbmx5IGFkdmFuY2VkIGluIHRoZSBjYXNlIG9mIHN1Y2Nlc3MKKyAqLworc3RhdGljIGludAorX2Ruc1BhY2tldF9jaGVja0J5dGVzKCBEbnNQYWNrZXQqICBwYWNrZXQsIGludCAgbnVtQnl0ZXMsIGNvbnN0IHZvaWQqICBieXRlcyApCit7CisgICAgY29uc3QgdWludDhfdCogIHAgPSBwYWNrZXQtPmN1cnNvcjsKKworICAgIGlmIChwICsgbnVtQnl0ZXMgPiBwYWNrZXQtPmVuZCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAobWVtY21wKHAsIGJ5dGVzLCBudW1CeXRlcykgIT0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBwYWNrZXQtPmN1cnNvciA9IHAgKyBudW1CeXRlczsKKyAgICByZXR1cm4gMTsKK30KKworLyogcGFyc2UgYW5kIHNraXAgYSBnaXZlbiBRTkFNRSBzdG9yZWQgaW4gYSBxdWVyeSBwYWNrZXQsCisgKiBmcm9tIHRoZSBjdXJyZW50IGN1cnNvciBwb3NpdGlvbi4gcmV0dXJucyAxIG9uIHN1Y2Nlc3MsCisgKiBvciAwIGZvciBtYWxmb3JtZWQgZGF0YS4KKyAqLworc3RhdGljIGludAorX2Ruc1BhY2tldF9jaGVja1FOYW1lKCBEbnNQYWNrZXQqICBwYWNrZXQgKQoreworICAgIGNvbnN0IHVpbnQ4X3QqICBwICAgPSBwYWNrZXQtPmN1cnNvcjsKKyAgICBjb25zdCB1aW50OF90KiAgZW5kID0gcGFja2V0LT5lbmQ7CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGludCAgYzsKKworICAgICAgICBpZiAocCA+PSBlbmQpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjID0gKnArKzsKKworICAgICAgICBpZiAoYyA9PSAwKSB7CisgICAgICAgICAgICBwYWNrZXQtPmN1cnNvciA9IHA7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHdlIGRvbid0IGV4cGVjdCBsYWJlbCBjb21wcmVzc2lvbiBpbiBRTkFNRXMgKi8KKyAgICAgICAgaWYgKGMgPj0gNjQpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBwICs9IGM7CisgICAgICAgIC8qIHdlIHJlbHkgb24gdGhlIGJvdW5kIGNoZWNrIGF0IHRoZSBzdGFydAorICAgICAgICAgKiBvZiB0aGUgbG9vcCBoZXJlICovCisgICAgfQorICAgIC8qIG1hbGZvcm1lZCBkYXRhICovCisgICAgWExPRygibWFsZm9ybWVkIFFOQU1FIik7CisgICAgcmV0dXJuIDA7Cit9CisKKy8qIHBhcnNlIGFuZCBza2lwIGEgZ2l2ZW4gUVIgc3RvcmVkIGluIGEgcGFja2V0LgorICogcmV0dXJucyAxIG9uIHN1Y2Nlc3MsIGFuZCAwIG9uIGZhaWx1cmUKKyAqLworc3RhdGljIGludAorX2Ruc1BhY2tldF9jaGVja1FSKCBEbnNQYWNrZXQqICBwYWNrZXQgKQoreworICAgIGludCAgbGVuOworCisgICAgaWYgKCFfZG5zUGFja2V0X2NoZWNrUU5hbWUocGFja2V0KSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvKiBUWVBFIG11c3QgYmUgb25lIG9mIHRoZSB0aGluZ3Mgd2Ugc3VwcG9ydCAqLworICAgIGlmICghX2Ruc1BhY2tldF9jaGVja0J5dGVzKHBhY2tldCwgMiwgRE5TX1RZUEVfQSkgJiYKKyAgICAgICAgIV9kbnNQYWNrZXRfY2hlY2tCeXRlcyhwYWNrZXQsIDIsIEROU19UWVBFX1BUUikgJiYKKyAgICAgICAgIV9kbnNQYWNrZXRfY2hlY2tCeXRlcyhwYWNrZXQsIDIsIEROU19UWVBFX01YKSAmJgorICAgICAgICAhX2Ruc1BhY2tldF9jaGVja0J5dGVzKHBhY2tldCwgMiwgRE5TX1RZUEVfQUFBQSkgJiYKKyAgICAgICAgIV9kbnNQYWNrZXRfY2hlY2tCeXRlcyhwYWNrZXQsIDIsIEROU19UWVBFX0FMTCkpCisgICAgeworICAgICAgICBYTE9HKCJ1bnN1cHBvcnRlZCBUWVBFIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAvKiBDTEFTUyBtdXN0IGJlIElOICovCisgICAgaWYgKCFfZG5zUGFja2V0X2NoZWNrQnl0ZXMocGFja2V0LCAyLCBETlNfQ0xBU1NfSU4pKSB7CisgICAgICAgIFhMT0coInVuc3VwcG9ydGVkIENMQVNTIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJldHVybiAxOworfQorCisvKiBjaGVjayB0aGUgaGVhZGVyIG9mIGEgRE5TIFF1ZXJ5IHBhY2tldCwgcmV0dXJuIDEgaWYgaXQgaXMgb25lCisgKiB0eXBlIG9mIHF1ZXJ5IHdlIGNhbiBjYWNoZSwgb3IgMCBvdGhlcndpc2UKKyAqLworc3RhdGljIGludAorX2Ruc1BhY2tldF9jaGVja1F1ZXJ5KCBEbnNQYWNrZXQqICBwYWNrZXQgKQoreworICAgIGNvbnN0IHVpbnQ4X3QqICBwID0gcGFja2V0LT5iYXNlOworICAgIGludCAgICAgICAgICAgICBxZENvdW50LCBhbkNvdW50LCBkbkNvdW50LCBhckNvdW50OworCisgICAgaWYgKHAgKyBETlNfSEVBREVSX1NJWkUgPiBwYWNrZXQtPmVuZCkgeworICAgICAgICBYTE9HKCJxdWVyeSBwYWNrZXQgdG9vIHNtYWxsIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8qIFFSIG11c3QgYmUgc2V0IHRvIDAsIG9wY29kZSBtdXN0IGJlIDAgYW5kIEFBIG11c3QgYmUgMCAqLworICAgIC8qIFJBLCBaLCBhbmQgUkNPREUgbXVzdCBiZSAwICovCisgICAgaWYgKChwWzJdICYgMHhGQykgIT0gMCB8fCBwWzNdICE9IDApIHsKKyAgICAgICAgWExPRygicXVlcnkgcGFja2V0IGZsYWdzIHVuc3VwcG9ydGVkIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8qIE5vdGUgdGhhdCB3ZSBpZ25vcmUgdGhlIFRDIGFuZCBSRCBiaXRzIGhlcmUgZm9yIHRoZQorICAgICAqIGZvbGxvd2luZyByZWFzb25zOgorICAgICAqCisgICAgICogLSB0aGVyZSBpcyBubyBwb2ludCBmb3IgYSBxdWVyeSBwYWNrZXQgc2VudCB0byBhIHNlcnZlcgorICAgICAqICAgdG8gaGF2ZSB0aGUgVEMgYml0IHNldCwgYnV0IHRoZSBpbXBsZW1lbnRhdGlvbiBtaWdodAorICAgICAqICAgc2V0IHRoZSBiaXQgaW4gdGhlIHF1ZXJ5IGJ1ZmZlciBmb3IgaXRzIG93biBuZWVkcworICAgICAqICAgYmV0d2VlbiBhIF9yZXNvbHZfY2FjaGVfbG9va3VwIGFuZCBhCisgICAgICogICBfcmVzb2x2X2NhY2hlX2FkZC4gV2Ugc2hvdWxkIG5vdCBmcmVhayBvdXQgaWYgdGhpcworICAgICAqICAgaXMgdGhlIGNhc2UuCisgICAgICoKKyAgICAgKiAtIHdlIGNvbnNpZGVyIHRoYXQgdGhlIHJlc3VsdCBmcm9tIGEgUkQ9MCBvciBhIFJEPTEKKyAgICAgKiAgIHF1ZXJ5IG1pZ2h0IGJlIGRpZmZlcmVudCwgaGVuY2UgdGhhdCB0aGUgUkQgYml0CisgICAgICogICBzaG91bGQgYmUgdXNlZCB0byBkaWZmZXJlbnRpYXRlIGNhY2hlZCByZXN1bHQuCisgICAgICoKKyAgICAgKiAgIHRoaXMgaW1wbGllcyB0aGF0IFJEIGlzIGNoZWNrZWQgd2hlbiBoYXNoaW5nIG9yCisgICAgICogICBjb21wYXJpbmcgcXVlcnkgcGFja2V0cywgYnV0IG5vdCBUQworICAgICAqLworCisgICAgLyogQU5DT1VOVCwgRE5DT1VOVCBhbmQgQVJDT1VOVCBtdXN0IGJlIDAgKi8KKyAgICBxZENvdW50ID0gKHBbNF0gPDwgOCkgfCBwWzVdOworICAgIGFuQ291bnQgPSAocFs2XSA8PCA4KSB8IHBbN107CisgICAgZG5Db3VudCA9IChwWzhdIDw8IDgpIHwgcFs5XTsKKyAgICBhckNvdW50ID0gKHBbMTBdPDwgOCkgfCBwWzExXTsKKworICAgIGlmIChhbkNvdW50ICE9IDAgfHwgZG5Db3VudCAhPSAwIHx8IGFyQ291bnQgIT0gMCkgeworICAgICAgICBYTE9HKCJxdWVyeSBwYWNrZXQgY29udGFpbnMgbm9uLXF1ZXJ5IHJlY29yZHMiKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKHFkQ291bnQgPT0gMCkgeworICAgICAgICBYTE9HKCJxdWVyeSBwYWNrZXQgZG9lc24ndCBjb250YWluIHF1ZXJ5IHJlY29yZCIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvKiBDaGVjayBRRENPVU5UIFFScyAqLworICAgIHBhY2tldC0+Y3Vyc29yID0gcCArIEROU19IRUFERVJfU0laRTsKKworICAgIGZvciAoO3FkQ291bnQgPiAwOyBxZENvdW50LS0pCisgICAgICAgIGlmICghX2Ruc1BhY2tldF9jaGVja1FSKHBhY2tldCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiAxOworfQorCisvKiogUVVFUlkgREVCVUdHSU5HCisgKiovCisjaWYgREVCVUcKK3N0YXRpYyBjaGFyKgorX2Ruc1BhY2tldF9icHJpbnRRTmFtZShEbnNQYWNrZXQqICBwYWNrZXQsIGNoYXIqICBicCwgY2hhciogIGJlbmQpCit7CisgICAgY29uc3QgdWludDhfdCogIHAgICA9IHBhY2tldC0+Y3Vyc29yOworICAgIGNvbnN0IHVpbnQ4X3QqICBlbmQgPSBwYWNrZXQtPmVuZDsKKyAgICBpbnQgICAgICAgICAgICAgZmlyc3QgPSAxOworCisgICAgZm9yICg7OykgeworICAgICAgICBpbnQgIGM7CisKKyAgICAgICAgaWYgKHAgPj0gZW5kKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgYyA9ICpwKys7CisKKyAgICAgICAgaWYgKGMgPT0gMCkgeworICAgICAgICAgICAgcGFja2V0LT5jdXJzb3IgPSBwOworICAgICAgICAgICAgcmV0dXJuIGJwOworICAgICAgICB9CisKKyAgICAgICAgLyogd2UgZG9uJ3QgZXhwZWN0IGxhYmVsIGNvbXByZXNzaW9uIGluIFFOQU1FcyAqLworICAgICAgICBpZiAoYyA+PSA2NCkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmIChmaXJzdCkKKyAgICAgICAgICAgIGZpcnN0ID0gMDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYnAgPSBfYnByaW50X2MoYnAsIGJlbmQsICcuJyk7CisKKyAgICAgICAgYnAgPSBfYnByaW50X2IoYnAsIGJlbmQsIChjb25zdCBjaGFyKilwLCBjKTsKKworICAgICAgICBwICs9IGM7CisgICAgICAgIC8qIHdlIHJlbHkgb24gdGhlIGJvdW5kIGNoZWNrIGF0IHRoZSBzdGFydAorICAgICAgICAgKiBvZiB0aGUgbG9vcCBoZXJlICovCisgICAgfQorICAgIC8qIG1hbGZvcm1lZCBkYXRhICovCisgICAgYnAgPSBfYnByaW50X3MoYnAsIGJlbmQsICI8TUFMRk9STUVEPiIpOworICAgIHJldHVybiBicDsKK30KKworc3RhdGljIGNoYXIqCitfZG5zUGFja2V0X2JwcmludFFSKERuc1BhY2tldCogIHBhY2tldCwgY2hhciogIHAsIGNoYXIqICBlbmQpCit7CisjZGVmaW5lICBRUSh4KSAgIHsgRE5TX1RZUEVfIyN4LCAjeCB9CisgICAgc3RhdGljIGNvbnN0IHN0cnVjdCB7IAorICAgICAgICBjb25zdCBjaGFyKiAgdHlwZUJ5dGVzOworICAgICAgICBjb25zdCBjaGFyKiAgdHlwZVN0cmluZzsgCisgICAgfSBxVHlwZXNbXSA9CisgICAgeworICAgICAgICBRUShBKSwgUVEoUFRSKSwgUVEoTVgpLCBRUShBQUFBKSwgUVEoQUxMKSwKKyAgICAgICAgeyBOVUxMLCBOVUxMIH0KKyAgICB9OworICAgIGludCAgICAgICAgICBubjsKKyAgICBjb25zdCBjaGFyKiAgdHlwZVN0cmluZyA9IE5VTEw7CisKKyAgICAvKiBkdW1wIFFOQU1FICovCisgICAgcCA9IF9kbnNQYWNrZXRfYnByaW50UU5hbWUocGFja2V0LCBwLCBlbmQpOworCisgICAgLyogZHVtcCBUWVBFICovCisgICAgcCA9IF9icHJpbnRfcyhwLCBlbmQsICIgKCIpOworCisgICAgZm9yIChubiA9IDA7IHFUeXBlc1tubl0udHlwZUJ5dGVzICE9IE5VTEw7IG5uKyspIHsKKyAgICAgICAgaWYgKF9kbnNQYWNrZXRfY2hlY2tCeXRlcyhwYWNrZXQsIDIsIHFUeXBlc1tubl0udHlwZUJ5dGVzKSkgeworICAgICAgICAgICAgdHlwZVN0cmluZyA9IHFUeXBlc1tubl0udHlwZVN0cmluZzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHR5cGVTdHJpbmcgIT0gTlVMTCkKKyAgICAgICAgcCA9IF9icHJpbnRfcyhwLCBlbmQsIHR5cGVTdHJpbmcpOworICAgIGVsc2UgeworICAgICAgICBpbnQgIHR5cGVDb2RlID0gX2Ruc1BhY2tldF9yZWFkSW50MTYocGFja2V0KTsKKyAgICAgICAgcCA9IF9icHJpbnQocCwgZW5kLCAiVU5LTk9XTi0lZCIsIHR5cGVDb2RlKTsKKyAgICB9CisKKyAgICBwID0gX2JwcmludF9jKHAsIGVuZCwgJyknKTsKKworICAgIC8qIHNraXAgQ0xBU1MgKi8KKyAgICBfZG5zUGFja2V0X3NraXAocGFja2V0LCAyKTsKKyAgICByZXR1cm4gcDsKK30KKworLyogdGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoZSBwYWNrZXQgaGFzIGFscmVhZHkgYmVlbiBjaGVja2VkICovCitzdGF0aWMgY2hhcioKK19kbnNQYWNrZXRfYnByaW50UXVlcnkoIERuc1BhY2tldCogIHBhY2tldCwgY2hhciogIHAsIGNoYXIqICBlbmQgKQoreworICAgIGludCAgIHFkQ291bnQ7CisKKyAgICBpZiAocGFja2V0LT5iYXNlWzJdICYgMHgxKSB7CisgICAgICAgIHAgPSBfYnByaW50X3MocCwgZW5kLCAiUkVDVVJTSVZFICIpOworICAgIH0KKworICAgIF9kbnNQYWNrZXRfc2tpcChwYWNrZXQsIDQpOworICAgIHFkQ291bnQgPSBfZG5zUGFja2V0X3JlYWRJbnQxNihwYWNrZXQpOworICAgIF9kbnNQYWNrZXRfc2tpcChwYWNrZXQsIDYpOworCisgICAgZm9yICggOyBxZENvdW50ID4gMDsgcWRDb3VudC0tICkgeworICAgICAgICBwID0gX2Ruc1BhY2tldF9icHJpbnRRUihwYWNrZXQsIHAsIGVuZCk7CisgICAgfQorICAgIHJldHVybiBwOworfQorI2VuZGlmCisKKworLyoqIFFVRVJZIEhBU0hJTkcgU1VQUE9SVAorICoqCisgKiogVEhFIEZPTExPV0lORyBDT0RFIEFTU1VNRVMgVEhBVCBUSEUgSU5QVVQgUEFDS0VUIEhBUyBBTFJFQURZCisgKiogQkVFTiBTVUNDRVNGVUxMWSBDSEVDS0VELgorICoqLworCisvKiB1c2UgMzItYml0IEZOViBoYXNoIGZ1bmN0aW9uICovCisjZGVmaW5lICBGTlZfTVVMVCAgIDE2Nzc3NjE5VQorI2RlZmluZSAgRk5WX0JBU0lTICAyMTY2MTM2MjYxVQorCitzdGF0aWMgdW5zaWduZWQKK19kbnNQYWNrZXRfaGFzaEJ5dGVzKCBEbnNQYWNrZXQqICBwYWNrZXQsIGludCAgbnVtQnl0ZXMsIHVuc2lnbmVkICBoYXNoICkKK3sKKyAgICBjb25zdCB1aW50OF90KiAgcCAgID0gcGFja2V0LT5jdXJzb3I7CisgICAgY29uc3QgdWludDhfdCogIGVuZCA9IHBhY2tldC0+ZW5kOworCisgICAgd2hpbGUgKG51bUJ5dGVzID4gMCAmJiBwIDwgZW5kKSB7CisgICAgICAgIGhhc2ggPSBoYXNoKkZOVl9NVUxUIF4gKnArKzsKKyAgICB9CisgICAgcGFja2V0LT5jdXJzb3IgPSBwOworICAgIHJldHVybiBoYXNoOworfQorCisKK3N0YXRpYyB1bnNpZ25lZAorX2Ruc1BhY2tldF9oYXNoUU5hbWUoIERuc1BhY2tldCogIHBhY2tldCwgdW5zaWduZWQgIGhhc2ggKQoreworICAgIGNvbnN0IHVpbnQ4X3QqICBwICAgPSBwYWNrZXQtPmN1cnNvcjsKKyAgICBjb25zdCB1aW50OF90KiAgZW5kID0gcGFja2V0LT5lbmQ7CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGludCAgYzsKKworICAgICAgICBpZiAocCA+PSBlbmQpIHsgIC8qIHNob3VsZCBub3QgaGFwcGVuICovCisgICAgICAgICAgICBYTE9HKCIlczogSU5URVJOQUxfRVJST1I6IHJlYWQtb3ZlcmZsb3cgISFcbiIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGMgPSAqcCsrOworCisgICAgICAgIGlmIChjID09IDApCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAoYyA+PSA2NCkgeworICAgICAgICAgICAgWExPRygiJXM6IElOVEVSTkFMX0VSUk9SOiBtYWxmb3JtZWQgZG9tYWluICEhXG4iLCBfX0ZVTkNUSU9OX18pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHAgKyBjID49IGVuZCkgeworICAgICAgICAgICAgWExPRygiJXM6IElOVEVSTkFMX0VSUk9SOiBzaW1wbGUgbGFiZWwgcmVhZC1vdmVyZmxvdyAhIVxuIiwKKyAgICAgICAgICAgICAgICAgICAgX19GVU5DVElPTl9fKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHdoaWxlIChjID4gMCkgeworICAgICAgICAgICAgaGFzaCA9IGhhc2gqRk5WX01VTFQgXiAqcCsrOworICAgICAgICAgICAgYyAgIC09IDE7CisgICAgICAgIH0KKyAgICB9CisgICAgcGFja2V0LT5jdXJzb3IgPSBwOworICAgIHJldHVybiBoYXNoOworfQorCitzdGF0aWMgdW5zaWduZWQKK19kbnNQYWNrZXRfaGFzaFFSKCBEbnNQYWNrZXQqICBwYWNrZXQsIHVuc2lnbmVkICBoYXNoICkKK3sKKyAgICBpbnQgICBsZW47CisKKyAgICBoYXNoID0gX2Ruc1BhY2tldF9oYXNoUU5hbWUocGFja2V0LCBoYXNoKTsKKyAgICBoYXNoID0gX2Ruc1BhY2tldF9oYXNoQnl0ZXMocGFja2V0LCA0LCBoYXNoKTsgLyogVFlQRSBhbmQgQ0xBU1MgKi8KKyAgICByZXR1cm4gaGFzaDsKK30KKworc3RhdGljIHVuc2lnbmVkCitfZG5zUGFja2V0X2hhc2hRdWVyeSggRG5zUGFja2V0KiAgcGFja2V0ICkKK3sKKyAgICB1bnNpZ25lZCAgaGFzaCA9IEZOVl9CQVNJUzsKKyAgICBpbnQgICAgICAgY291bnQ7CisgICAgX2Ruc1BhY2tldF9yZXdpbmQocGFja2V0KTsKKworICAgIC8qIHdlIGlnbm9yZSB0aGUgVEMgYml0IGZvciByZWFzb25zIGV4cGxhaW5lZCBpbgorICAgICAqIF9kbnNQYWNrZXRfY2hlY2tRdWVyeSgpLgorICAgICAqCisgICAgICogaG93ZXZlciB3ZSBoYXNoIHRoZSBSRCBiaXQgdG8gZGlmZmVyZW50aWF0ZQorICAgICAqIGJldHdlZW4gYW5zd2VycyBmb3IgcmVjdXJzaXZlIGFuZCBub24tcmVjdXJzaXZlCisgICAgICogcXVlcmllcy4KKyAgICAgKi8KKyAgICBoYXNoID0gaGFzaCpGTlZfTVVMVCBeIChwYWNrZXQtPmJhc2VbMl0gJiAxKTsKKworICAgIC8qIGFzc3VtZTogb3RoZXIgZmxhZ3MgYXJlIDAgKi8KKyAgICBfZG5zUGFja2V0X3NraXAocGFja2V0LCA0KTsKKworICAgIC8qIHJlYWQgUURDT1VOVCAqLworICAgIGNvdW50ID0gX2Ruc1BhY2tldF9yZWFkSW50MTYocGFja2V0KTsKKworICAgIC8qIGFzc3VtZTogQU5jb3VudCwgTlNjb3VudCwgQVJjb3VudCBhcmUgMCAqLworICAgIF9kbnNQYWNrZXRfc2tpcChwYWNrZXQsIDYpOworCisgICAgLyogaGFzaCBRRENPVU5UIFFScyAqLworICAgIGZvciAoIDsgY291bnQgPiAwOyBjb3VudC0tICkKKyAgICAgICAgaGFzaCA9IF9kbnNQYWNrZXRfaGFzaFFSKHBhY2tldCwgaGFzaCk7CisKKyAgICByZXR1cm4gaGFzaDsKK30KKworCisvKiogUVVFUlkgQ09NUEFSSVNPTgorICoqCisgKiogVEhFIEZPTExPV0lORyBDT0RFIEFTU1VNRVMgVEhBVCBUSEUgSU5QVVQgUEFDS0VUUyBIQVZFIEFMUkVBRFkKKyAqKiBCRUVOIFNVQ0NFU0ZVTExZIENIRUNLRUQuCisgKiovCisKK3N0YXRpYyBpbnQKK19kbnNQYWNrZXRfaXNFcXVhbERvbWFpbk5hbWUoIERuc1BhY2tldCogIHBhY2sxLCBEbnNQYWNrZXQqICBwYWNrMiApCit7CisgICAgY29uc3QgdWludDhfdCogIHAxICAgPSBwYWNrMS0+Y3Vyc29yOworICAgIGNvbnN0IHVpbnQ4X3QqICBlbmQxID0gcGFjazEtPmVuZDsKKyAgICBjb25zdCB1aW50OF90KiAgcDIgICA9IHBhY2syLT5jdXJzb3I7CisgICAgY29uc3QgdWludDhfdCogIGVuZDIgPSBwYWNrMi0+ZW5kOworCisgICAgZm9yICg7OykgeworICAgICAgICBpbnQgIGMxLCBjMjsKKworICAgICAgICBpZiAocDEgPj0gZW5kMSB8fCBwMiA+PSBlbmQyKSB7CisgICAgICAgICAgICBYTE9HKCIlczogSU5URVJOQUxfRVJST1I6IHJlYWQtb3ZlcmZsb3cgISFcbiIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjMSA9ICpwMSsrOworICAgICAgICBjMiA9ICpwMisrOworICAgICAgICBpZiAoYzEgIT0gYzIpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAoYzEgPT0gMCkgeworICAgICAgICAgICAgcGFjazEtPmN1cnNvciA9IHAxOworICAgICAgICAgICAgcGFjazItPmN1cnNvciA9IHAyOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGMxID49IDY0KSB7CisgICAgICAgICAgICBYTE9HKCIlczogSU5URVJOQUxfRVJST1I6IG1hbGZvcm1lZCBkb21haW4gISFcbiIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoKHAxK2MxID4gZW5kMSkgfHwgKHAyK2MxID4gZW5kMikpIHsKKyAgICAgICAgICAgIFhMT0coIiVzOiBJTlRFUk5BTF9FUlJPUjogc2ltcGxlIGxhYmVsIHJlYWQtb3ZlcmZsb3cgISFcbiIsCisgICAgICAgICAgICAgICAgICAgIF9fRlVOQ1RJT05fXyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAobWVtY21wKHAxLCBwMiwgYzEpICE9IDApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgcDEgKz0gYzE7CisgICAgICAgIHAyICs9IGMxOworICAgICAgICAvKiB3ZSByZWx5IG9uIHRoZSBib3VuZCBjaGVja3MgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsb29wICovCisgICAgfQorICAgIC8qIG5vdCB0aGUgc2FtZSwgb3Igb25lIGlzIG1hbGZvcm1lZCAqLworICAgIFhMT0coImRpZmZlcmVudCBETiIpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitfZG5zUGFja2V0X2lzRXF1YWxCeXRlcyggRG5zUGFja2V0KiAgcGFjazEsIERuc1BhY2tldCogIHBhY2syLCBpbnQgIG51bUJ5dGVzICkKK3sKKyAgICBjb25zdCB1aW50OF90KiAgcDEgPSBwYWNrMS0+Y3Vyc29yOworICAgIGNvbnN0IHVpbnQ4X3QqICBwMiA9IHBhY2syLT5jdXJzb3I7CisKKyAgICBpZiAoIHAxICsgbnVtQnl0ZXMgPiBwYWNrMS0+ZW5kIHx8IHAyICsgbnVtQnl0ZXMgPiBwYWNrMi0+ZW5kICkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoIG1lbWNtcChwMSwgcDIsIG51bUJ5dGVzKSAhPSAwICkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBwYWNrMS0+Y3Vyc29yICs9IG51bUJ5dGVzOworICAgIHBhY2syLT5jdXJzb3IgKz0gbnVtQnl0ZXM7CisgICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK19kbnNQYWNrZXRfaXNFcXVhbFFSKCBEbnNQYWNrZXQqICBwYWNrMSwgRG5zUGFja2V0KiAgcGFjazIgKQoreworICAgIC8qIGNvbXBhcmUgZG9tYWluIG5hbWUgZW5jb2RpbmcgKyBUWVBFICsgQ0xBU1MgKi8KKyAgICBpZiAoICFfZG5zUGFja2V0X2lzRXF1YWxEb21haW5OYW1lKHBhY2sxLCBwYWNrMikgfHwKKyAgICAgICAgICFfZG5zUGFja2V0X2lzRXF1YWxCeXRlcyhwYWNrMSwgcGFjazIsIDIrMikgKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CitfZG5zUGFja2V0X2lzRXF1YWxRdWVyeSggRG5zUGFja2V0KiAgcGFjazEsIERuc1BhY2tldCogIHBhY2syICkKK3sKKyAgICBpbnQgIGNvdW50MSwgY291bnQyOworCisgICAgLyogY29tcGFyZSB0aGUgaGVhZGVycywgaWdub3JlIG1vc3QgZmllbGRzICovCisgICAgX2Ruc1BhY2tldF9yZXdpbmQocGFjazEpOworICAgIF9kbnNQYWNrZXRfcmV3aW5kKHBhY2syKTsKKworICAgIC8qIGNvbXBhcmUgUkQsIGlnbm9yZSBUQywgc2VlIGNvbW1lbnQgaW4gX2Ruc1BhY2tldF9jaGVja1F1ZXJ5ICovCisgICAgaWYgKChwYWNrMS0+YmFzZVsyXSAmIDEpICE9IChwYWNrMi0+YmFzZVsyXSAmIDEpKSB7CisgICAgICAgIFhMT0coImRpZmZlcmVudCBSRCIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvKiBhc3N1bWU6IG90aGVyIGZsYWdzIGFyZSBhbGwgMCAqLworICAgIF9kbnNQYWNrZXRfc2tpcChwYWNrMSwgNCk7CisgICAgX2Ruc1BhY2tldF9za2lwKHBhY2syLCA0KTsKKworICAgIC8qIGNvbXBhcmUgUURDT1VOVCAqLworICAgIGNvdW50MSA9IF9kbnNQYWNrZXRfcmVhZEludDE2KHBhY2sxKTsKKyAgICBjb3VudDIgPSBfZG5zUGFja2V0X3JlYWRJbnQxNihwYWNrMik7CisgICAgaWYgKGNvdW50MSAhPSBjb3VudDIgfHwgY291bnQxIDwgMCkgeworICAgICAgICBYTE9HKCJkaWZmZXJlbnQgUURDT1VOVCIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvKiBhc3N1bWU6IEFOY291bnQsIE5TY291bnQgYW5kIEFSY291bnQgYXJlIGFsbCAwICovCisgICAgX2Ruc1BhY2tldF9za2lwKHBhY2sxLCA2KTsKKyAgICBfZG5zUGFja2V0X3NraXAocGFjazIsIDYpOworCisgICAgLyogY29tcGFyZSB0aGUgUURDT1VOVCBRUnMgKi8KKyAgICBmb3IgKCA7IGNvdW50MSA+IDA7IGNvdW50MS0tICkgeworICAgICAgICBpZiAoIV9kbnNQYWNrZXRfaXNFcXVhbFFSKHBhY2sxLCBwYWNrMikpIHsKKyAgICAgICAgICAgIFhMT0coImRpZmZlcmVudCBRUiIpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDE7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKy8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBjYWNoZSBlbnRyeS4gZm9yIHNpbXBsaWNpdHksICdoYXNoJyBhbmQgJ2hsaW5rJyBhcmUgaW5saW5lZCBpbiB0aGlzCisgKiBzdHJ1Y3R1cmUgdGhvdWdoIHRoZXkgYXJlIGNvbmNlcHR1YWxseSBwYXJ0IG9mIHRoZSBoYXNoIHRhYmxlLgorICoKKyAqIHNpbWlsYXJseSwgbXJ1X25leHQgYW5kIG1ydV9wcmV2IGFyZSBwYXJ0IG9mIHRoZSBnbG9iYWwgTVJVIGxpc3QKKyAqLwordHlwZWRlZiBzdHJ1Y3QgRW50cnkgeworICAgIHVuc2lnbmVkIGludCAgICAgaGFzaDsgICAvKiBoYXNoIHZhbHVlICovCisgICAgc3RydWN0IEVudHJ5KiAgICBobGluazsgIC8qIG5leHQgaW4gY29sbGlzaW9uIGNoYWluICovCisgICAgc3RydWN0IEVudHJ5KiAgICBtcnVfcHJldjsKKyAgICBzdHJ1Y3QgRW50cnkqICAgIG1ydV9uZXh0OworCisgICAgY29uc3QgdWludDhfdCogICBxdWVyeTsKKyAgICBpbnQgICAgICAgICAgICAgIHF1ZXJ5bGVuOworICAgIGNvbnN0IHVpbnQ4X3QqICAgYW5zd2VyOworICAgIGludCAgICAgICAgICAgICAgYW5zd2VybGVuOworICAgIHRpbWVfdCAgICAgICAgICAgd2hlbjsgICAvKiB0aW1lX3Qgd2hlbiBlbnRyeSB3YXMgYWRkZWQgdG8gdGFibGUgKi8KKyAgICBpbnQgICAgICAgICAgICAgIGlkOyAgICAgLyogZm9yIGRlYnVnZ2luZyBwdXJwb3NlICovCit9IEVudHJ5OworCisKK3N0YXRpYyB2b2lkCitlbnRyeV9mcmVlKCBFbnRyeSogIGUgKQoreworICAgIC8qIGV2ZXJ5dGhpbmcgaXMgYWxsb2NhdGVkIGluIGEgc2luZ2xlIG1lbW9yeSBibG9jayAqLworICAgIGlmIChlKSB7CisgICAgICAgIGZyZWUoZSk7CisgICAgfQorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkCitlbnRyeV9tcnVfcmVtb3ZlKCBFbnRyeSogIGUgKQoreworICAgIGUtPm1ydV9wcmV2LT5tcnVfbmV4dCA9IGUtPm1ydV9uZXh0OworICAgIGUtPm1ydV9uZXh0LT5tcnVfcHJldiA9IGUtPm1ydV9wcmV2OworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkCitlbnRyeV9tcnVfYWRkKCBFbnRyeSogIGUsIEVudHJ5KiAgbGlzdCApCit7CisgICAgRW50cnkqICBmaXJzdCA9IGxpc3QtPm1ydV9uZXh0OworCisgICAgZS0+bXJ1X25leHQgPSBmaXJzdDsKKyAgICBlLT5tcnVfcHJldiA9IGxpc3Q7CisKKyAgICBsaXN0LT5tcnVfbmV4dCAgPSBlOworICAgIGZpcnN0LT5tcnVfcHJldiA9IGU7Cit9CisKKy8qIGNvbXB1dGUgdGhlIGhhc2ggb2YgYSBnaXZlbiBlbnRyeSwgdGhpcyBpcyBhIGhhc2ggb2YgbW9zdAorICogZGF0YSBpbiB0aGUgcXVlcnkgKGtleSkgKi8KK3N0YXRpYyB1bnNpZ25lZAorZW50cnlfaGFzaCggY29uc3QgRW50cnkqICBlICkKK3sKKyAgICBEbnNQYWNrZXQgIHBhY2tbMV07CisKKyAgICBfZG5zUGFja2V0X2luaXQocGFjaywgZS0+cXVlcnksIGUtPnF1ZXJ5bGVuKTsKKyAgICByZXR1cm4gX2Ruc1BhY2tldF9oYXNoUXVlcnkocGFjayk7Cit9CisKKy8qIGluaXRpYWxpemUgYW4gRW50cnkgYXMgYSBzZWFyY2gga2V5LCB0aGlzIGFsc28gY2hlY2tzIHRoZSBpbnB1dCBxdWVyeSBwYWNrZXQKKyAqIHJldHVybnMgMSBvbiBzdWNjZXNzLCBvciAwIGluIGNhc2Ugb2YgdW5zdXBwb3J0ZWQvbWFsZm9ybWVkIGRhdGEgKi8KK3N0YXRpYyBpbnQKK2VudHJ5X2luaXRfa2V5KCBFbnRyeSogIGUsIGNvbnN0IHZvaWQqICBxdWVyeSwgaW50ICBxdWVyeWxlbiApCit7CisgICAgRG5zUGFja2V0ICBwYWNrWzFdOworCisgICAgbWVtc2V0KGUsIDAsIHNpemVvZigqZSkpOworCisgICAgZS0+cXVlcnkgICAgPSBxdWVyeTsKKyAgICBlLT5xdWVyeWxlbiA9IHF1ZXJ5bGVuOworICAgIGUtPmhhc2ggICAgID0gZW50cnlfaGFzaChlKTsKKworICAgIF9kbnNQYWNrZXRfaW5pdChwYWNrLCBxdWVyeSwgcXVlcnlsZW4pOworCisgICAgcmV0dXJuIF9kbnNQYWNrZXRfY2hlY2tRdWVyeShwYWNrKTsKK30KKworLyogYWxsb2NhdGUgYSBuZXcgZW50cnkgYXMgYSBjYWNoZSBub2RlICovCitzdGF0aWMgRW50cnkqCitlbnRyeV9hbGxvYyggY29uc3QgRW50cnkqICBpbml0LCBjb25zdCB2b2lkKiAgYW5zd2VyLCBpbnQgIGFuc3dlcmxlbiApCit7CisgICAgRW50cnkqICBlOworICAgIGludCAgICAgc2l6ZTsKKworICAgIHNpemUgPSBzaXplb2YoKmUpICsgaW5pdC0+cXVlcnlsZW4gKyBhbnN3ZXJsZW47CisgICAgZSAgICA9IGNhbGxvYyhzaXplLCAxKTsKKyAgICBpZiAoZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gZTsKKworICAgIGUtPmhhc2ggICAgID0gaW5pdC0+aGFzaDsKKyAgICBlLT5xdWVyeSAgICA9IChjb25zdCB1aW50OF90KikoZSsxKTsKKyAgICBlLT5xdWVyeWxlbiA9IGluaXQtPnF1ZXJ5bGVuOworCisgICAgbWVtY3B5KCAoY2hhciopZS0+cXVlcnksIGluaXQtPnF1ZXJ5LCBlLT5xdWVyeWxlbiApOworCisgICAgZS0+YW5zd2VyICAgID0gZS0+cXVlcnkgKyBlLT5xdWVyeWxlbjsKKyAgICBlLT5hbnN3ZXJsZW4gPSBhbnN3ZXJsZW47CisKKyAgICBtZW1jcHkoIChjaGFyKillLT5hbnN3ZXIsIGFuc3dlciwgZS0+YW5zd2VybGVuICk7CisKKyAgICBlLT53aGVuICA9IF90aW1lX25vdygpOworCisgICAgcmV0dXJuIGU7Cit9CisKK3N0YXRpYyBpbnQKK2VudHJ5X2VxdWFscyggY29uc3QgRW50cnkqICBlMSwgY29uc3QgRW50cnkqICBlMiApCit7CisgICAgRG5zUGFja2V0ICBwYWNrMVsxXSwgcGFjazJbMV07CisKKyAgICBpZiAoZTEtPnF1ZXJ5bGVuICE9IGUyLT5xdWVyeWxlbikgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgX2Ruc1BhY2tldF9pbml0KHBhY2sxLCBlMS0+cXVlcnksIGUxLT5xdWVyeWxlbik7CisgICAgX2Ruc1BhY2tldF9pbml0KHBhY2syLCBlMi0+cXVlcnksIGUyLT5xdWVyeWxlbik7CisKKyAgICByZXR1cm4gX2Ruc1BhY2tldF9pc0VxdWFsUXVlcnkocGFjazEsIHBhY2syKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFdlIHVzZSBhIHNpbXBsZSBoYXNoIHRhYmxlIHdpdGggZXh0ZXJuYWwgY29sbGlzaW9uIGxpc3RzCisgKiBmb3Igc2ltcGxpY2l0eSwgdGhlIGhhc2gtdGFibGUgZmllbGRzICdoYXNoJyBhbmQgJ2hsaW5rJyBhcmUKKyAqIGlubGluZWQgaW4gdGhlIEVudHJ5IHN0cnVjdHVyZS4KKyAqLworI2RlZmluZSAgTUFYX0hBU0hfRU5UUklFUyAgICgyKkNPTkZJR19NQVhfRU5UUklFUykKKwordHlwZWRlZiBzdHJ1Y3QgcmVzb2x2X2NhY2hlIHsKKyAgICBpbnQgICAgICAgICAgICAgIG51bV9lbnRyaWVzOworICAgIEVudHJ5ICAgICAgICAgICAgbXJ1X2xpc3Q7CisgICAgcHRocmVhZF9tdXRleF90ICBsb2NrOworICAgIHVuc2lnbmVkICAgICAgICAgZ2VuZXJhdGlvbjsKKyAgICBpbnQgICAgICAgICAgICAgIGxhc3RfaWQ7CisgICAgRW50cnkqICAgICAgICAgICBlbnRyaWVzWyBNQVhfSEFTSF9FTlRSSUVTIF07Cit9IENhY2hlOworCisKKyNkZWZpbmUgIEhUQUJMRV9WQUxJRCh4KSAgKCh4KSAhPSBOVUxMICYmICh4KSAhPSBIVEFCTEVfREVMRVRFRCkKKworc3RhdGljIHZvaWQKK19jYWNoZV9mbHVzaF9sb2NrZWQoIENhY2hlKiAgY2FjaGUgKQoreworICAgIGludCAgICAgbm47CisgICAgdGltZV90ICBub3cgPSBfdGltZV9ub3coKTsKKworICAgIGZvciAobm4gPSAwOyBubiA8IE1BWF9IQVNIX0VOVFJJRVM7IG5uKyspIAorICAgIHsKKyAgICAgICAgRW50cnkqKiAgcG5vZGUgPSAmY2FjaGUtPmVudHJpZXNbbm5dOworCisgICAgICAgIHdoaWxlICgqcG5vZGUgIT0gTlVMTCkgeworICAgICAgICAgICAgRW50cnkqICBub2RlID0gKnBub2RlOworICAgICAgICAgICAgKnBub2RlID0gbm9kZS0+aGxpbms7CisgICAgICAgICAgICBlbnRyeV9mcmVlKG5vZGUpOworICAgICAgICB9CisgICAgfQorCisgICAgY2FjaGUtPm1ydV9saXN0Lm1ydV9uZXh0ID0gY2FjaGUtPm1ydV9saXN0Lm1ydV9wcmV2ID0gJmNhY2hlLT5tcnVfbGlzdDsKKyAgICBjYWNoZS0+bnVtX2VudHJpZXMgICAgICAgPSAwOworICAgIGNhY2hlLT5sYXN0X2lkICAgICAgICAgICA9IDA7CisKKyAgICBYTE9HKCIqKioqKioqKioqKioqKioqKioqKioqKioqXG4iCisgICAgICAgICAiKioqIEROUyBDQUNIRSBGTFVTSEVEICoqKlxuIgorICAgICAgICAgIioqKioqKioqKioqKioqKioqKioqKioqKioiKTsKK30KKworc3RydWN0IHJlc29sdl9jYWNoZSoKK19yZXNvbHZfY2FjaGVfY3JlYXRlKCB2b2lkICkKK3sKKyAgICBzdHJ1Y3QgcmVzb2x2X2NhY2hlKiAgY2FjaGU7CisKKyAgICBjYWNoZSA9IGNhbGxvYyhzaXplb2YoKmNhY2hlKSwgMSk7CisgICAgaWYgKGNhY2hlKSB7CisgICAgICAgIGNhY2hlLT5nZW5lcmF0aW9uID0gfjBVOworICAgICAgICBwdGhyZWFkX211dGV4X2luaXQoICZjYWNoZS0+bG9jaywgTlVMTCApOworICAgICAgICBjYWNoZS0+bXJ1X2xpc3QubXJ1X3ByZXYgPSBjYWNoZS0+bXJ1X2xpc3QubXJ1X25leHQgPSAmY2FjaGUtPm1ydV9saXN0OworICAgICAgICBYTE9HKCIlczogY2FjaGUgY3JlYXRlZFxuIiwgX19GVU5DVElPTl9fKTsKKyAgICB9CisgICAgcmV0dXJuIGNhY2hlOworfQorCisKKyNpZiBERUJVRworc3RhdGljIHZvaWQKK19kdW1wX3F1ZXJ5KCBjb25zdCB1aW50OF90KiAgcXVlcnksIGludCAgcXVlcnlsZW4gKQoreworICAgIGNoYXIgICAgICAgdGVtcFsyNTZdLCAqcD10ZW1wLCAqZW5kPXArc2l6ZW9mKHRlbXApOworICAgIERuc1BhY2tldCAgcGFja1sxXTsKKworICAgIF9kbnNQYWNrZXRfaW5pdChwYWNrLCBxdWVyeSwgcXVlcnlsZW4pOworICAgIHAgPSBfZG5zUGFja2V0X2JwcmludFF1ZXJ5KHBhY2ssIHAsIGVuZCk7CisgICAgWExPRygiUVVFUlk6ICVzIiwgdGVtcCk7Cit9CisKK3N0YXRpYyB2b2lkCitfY2FjaGVfZHVtcF9tcnUoIENhY2hlKiAgY2FjaGUgKQoreworICAgIGNoYXIgICAgdGVtcFs1MTJdLCAqcD10ZW1wLCAqZW5kPXArc2l6ZW9mKHRlbXApOworICAgIEVudHJ5KiAgZTsKKworICAgIHAgPSBfYnByaW50KHRlbXAsIGVuZCwgIk1SVSBMSVNUICglMmQpOiAiLCBjYWNoZS0+bnVtX2VudHJpZXMpOworICAgIGZvciAoZSA9IGNhY2hlLT5tcnVfbGlzdC5tcnVfbmV4dDsgZSAhPSAmY2FjaGUtPm1ydV9saXN0OyBlID0gZS0+bXJ1X25leHQpCisgICAgICAgIHAgPSBfYnByaW50KHAsIGVuZCwgIiAlZCIsIGUtPmlkKTsKKworICAgIFhMT0coIiVzIiwgdGVtcCk7Cit9CisjZW5kaWYKKworI2lmIERFQlVHCisjICBkZWZpbmUgIFhMT0dfUVVFUlkocSxsZW4pICAgX2R1bXBfcXVlcnkoKHEpLCAobGVuKSkKKyNlbHNlCisjICBkZWZpbmUgIFhMT0dfUVVFUlkocSxsZW4pICAgKCh2b2lkKTApCisjZW5kaWYKKworLyogVGhpcyBmdW5jdGlvbiB0cmllcyB0byBmaW5kIGEga2V5IHdpdGhpbiB0aGUgaGFzaCB0YWJsZQorICogSW4gY2FzZSBvZiBzdWNjZXNzLCBpdCB3aWxsIHJldHVybiBhICpwb2ludGVyKiB0byB0aGUgaGFzaGVkIGtleS4KKyAqIEluIGNhc2Ugb2YgZmFpbHVyZSwgaXQgd2lsbCByZXR1cm4gYSAqcG9pbnRlciogdG8gTlVMTAorICoKKyAqIFNvLCB0aGUgY2FsbGVyIG11c3QgY2hlY2sgJypyZXN1bHQnIHRvIGNoZWNrIGZvciBzdWNjZXNzL2ZhaWx1cmUuCisgKgorICogVGhlIG1haW4gaWRlYSBpcyB0aGF0IHRoZSByZXN1bHQgY2FuIGxhdGVyIGJlIHVzZWQgZGlyZWN0bHkgaW4KKyAqIGNhbGxzIHRvIF9yZXNvbHZfY2FjaGVfYWRkIG9yIF9yZXNvbHZfY2FjaGVfcmVtb3ZlIGFzIHRoZSAnbG9va3VwJworICogcGFyYW1ldGVyLiBUaGlzIG1ha2VzIHRoZSBjb2RlIHNpbXBsZXIgYW5kIGF2b2lkcyByZS1zZWFyY2hpbmcKKyAqIGZvciB0aGUga2V5IHBvc2l0aW9uIGluIHRoZSBodGFibGUuCisgKgorICogVGhlIHJlc3VsdCBvZiBhIGxvb2t1cF9wIGlzIG9ubHkgdmFsaWQgdW50aWwgeW91IGFsdGVyIHRoZSBoYXNoCisgKiB0YWJsZS4KKyAqLworc3RhdGljIEVudHJ5KioKK19jYWNoZV9sb29rdXBfcCggQ2FjaGUqICAgY2FjaGUsCisgICAgICAgICAgICAgICAgIEVudHJ5KiAgIGtleSApCit7CisgICAgaW50ICAgICAgaW5kZXggPSBrZXktPmhhc2ggJSBNQVhfSEFTSF9FTlRSSUVTOworICAgIEVudHJ5KiogIHBub2RlID0gJmNhY2hlLT5lbnRyaWVzWyBrZXktPmhhc2ggJSBNQVhfSEFTSF9FTlRSSUVTIF07CisKKyAgICB3aGlsZSAoKnBub2RlICE9IE5VTEwpIHsKKyAgICAgICAgRW50cnkqICBub2RlID0gKnBub2RlOworCisgICAgICAgIGlmIChub2RlID09IE5VTEwpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAobm9kZS0+aGFzaCA9PSBrZXktPmhhc2ggJiYgZW50cnlfZXF1YWxzKG5vZGUsIGtleSkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBwbm9kZSA9ICZub2RlLT5obGluazsKKyAgICB9CisgICAgcmV0dXJuIHBub2RlOyAKK30KKworLyogQWRkIGEgbmV3IGVudHJ5IHRvIHRoZSBoYXNoIHRhYmxlLiAnbG9va3VwJyBtdXN0IGJlIHRoZQorICogcmVzdWx0IG9mIGFuIGltbWVkaWF0ZSBwcmV2aW91cyBmYWlsZWQgX2xvb2t1cF9wKCkgY2FsbAorICogKGkuZS4gd2l0aCAqbG9va3VwID09IE5VTEwpLCBhbmQgJ2UnIGlzIHRoZSBwb2ludGVyIHRvIHRoZQorICogbmV3bHkgY3JlYXRlZCBlbnRyeQorICovCitzdGF0aWMgdm9pZAorX2NhY2hlX2FkZF9wKCBDYWNoZSogICBjYWNoZSwKKyAgICAgICAgICAgICAgRW50cnkqKiAgbG9va3VwLAorICAgICAgICAgICAgICBFbnRyeSogICBlICkKK3sKKyAgICAqbG9va3VwID0gZTsKKyAgICBlLT5pZCA9ICsrY2FjaGUtPmxhc3RfaWQ7CisgICAgZW50cnlfbXJ1X2FkZChlLCAmY2FjaGUtPm1ydV9saXN0KTsKKyAgICBjYWNoZS0+bnVtX2VudHJpZXMgKz0gMTsKKworICAgIFhMT0coIiVzOiBlbnRyeSAlZCBhZGRlZCAoY291bnQ9JWQpIiwgX19GVU5DVElPTl9fLAorICAgICAgICAgZS0+aWQsIGNhY2hlLT5udW1fZW50cmllcyk7Cit9CisKKy8qIFJlbW92ZSBhbiBleGlzdGluZyBlbnRyeSBmcm9tIHRoZSBoYXNoIHRhYmxlLAorICogJ2xvb2t1cCcgbXVzdCBiZSB0aGUgcmVzdWx0IG9mIGFuIGltbWVkaWF0ZSBwcmV2aW91cworICogYW5kIHN1Y2Nlc2Z1bCBfbG9va3VwX3AoKSBjYWxsLgorICovCitzdGF0aWMgdm9pZAorX2NhY2hlX3JlbW92ZV9wKCBDYWNoZSogICBjYWNoZSwKKyAgICAgICAgICAgICAgICAgRW50cnkqKiAgbG9va3VwICkKK3sKKyAgICBFbnRyeSogIGUgID0gKmxvb2t1cDsKKworICAgIFhMT0coIiVzOiBlbnRyeSAlZCByZW1vdmVkIChjb3VudD0lZCkiLCBfX0ZVTkNUSU9OX18sCisgICAgICAgICBlLT5pZCwgY2FjaGUtPm51bV9lbnRyaWVzLTEpOworCisgICAgZW50cnlfbXJ1X3JlbW92ZShlKTsKKyAgICAqbG9va3VwID0gZS0+aGxpbms7CisgICAgZW50cnlfZnJlZShlKTsKKyAgICBjYWNoZS0+bnVtX2VudHJpZXMgLT0gMTsKK30KKworLyogUmVtb3ZlIHRoZSBvbGRlc3QgZW50cnkgZnJvbSB0aGUgaGFzaCB0YWJsZS4KKyAqLworc3RhdGljIHZvaWQKK19jYWNoZV9yZW1vdmVfb2xkZXN0KCBDYWNoZSogIGNhY2hlICkKK3sKKyAgICBFbnRyeSogICBvbGRlc3QgPSBjYWNoZS0+bXJ1X2xpc3QubXJ1X3ByZXY7CisgICAgRW50cnkqKiAgbG9va3VwID0gX2NhY2hlX2xvb2t1cF9wKGNhY2hlLCBvbGRlc3QpOworCisgICAgaWYgKCpsb29rdXAgPT0gTlVMTCkgeyAvKiBzaG91bGQgbm90IGhhcHBlbiAqLworICAgICAgICBYTE9HKCIlczogT0xERVNUIE5PVCBJTiBIVEFCTEUgPyIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgX2NhY2hlX3JlbW92ZV9wKGNhY2hlLCBsb29rdXApOworfQorCisKK1Jlc29sdkNhY2hlU3RhdHVzCitfcmVzb2x2X2NhY2hlX2xvb2t1cCggc3RydWN0IHJlc29sdl9jYWNoZSogIGNhY2hlLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqICAgICAgICAgICBxdWVyeSwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgcXVlcnlsZW4sCisgICAgICAgICAgICAgICAgICAgICAgdm9pZCogICAgICAgICAgICAgICAgIGFuc3dlciwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgYW5zd2Vyc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAqYW5zd2VybGVuICkKK3sKKyAgICBEbnNQYWNrZXQgIHBhY2tbMV07CisgICAgRW50cnkgICAgICBrZXlbMV07CisgICAgaW50ICAgICAgICBpbmRleDsKKyAgICBFbnRyeSoqICAgIGxvb2t1cDsKKyAgICBFbnRyeSogICAgIGU7CisgICAgdGltZV90ICAgICBub3c7CisKKyAgICBSZXNvbHZDYWNoZVN0YXR1cyAgcmVzdWx0ID0gUkVTT0xWX0NBQ0hFX05PVEZPVU5EOworCisgICAgWExPRygiJXM6IGxvb2t1cCIsIF9fRlVOQ1RJT05fXyk7CisgICAgWExPR19RVUVSWShxdWVyeSwgcXVlcnlsZW4pOworCisgICAgLyogd2UgZG9uJ3QgY2FjaGUgbWFsZm9ybWVkIHF1ZXJpZXMgKi8KKyAgICBpZiAoIWVudHJ5X2luaXRfa2V5KGtleSwgcXVlcnksIHF1ZXJ5bGVuKSkgeworICAgICAgICBYTE9HKCIlczogdW5zdXBwb3J0ZWQgcXVlcnkiLCBfX0ZVTkNUSU9OX18pOworICAgICAgICByZXR1cm4gUkVTT0xWX0NBQ0hFX1VOU1VQUE9SVEVEOworICAgIH0KKyAgICAvKiBsb29rdXAgY2FjaGUgKi8KKyAgICBwdGhyZWFkX211dGV4X2xvY2soICZjYWNoZS0+bG9jayApOworCisgICAgLyogc2VlIHRoZSBkZXNjcmlwdGlvbiBvZiBfbG9va3VwX3AgdG8gdW5kZXJzdGFuZCB0aGlzLgorICAgICAqIHRoZSBmdW5jdGlvbiBhbHdheXMgcmV0dXJuIGEgbm9uLU5VTEwgcG9pbnRlci4KKyAgICAgKi8KKyAgICBsb29rdXAgPSBfY2FjaGVfbG9va3VwX3AoY2FjaGUsIGtleSk7CisgICAgZSAgICAgID0gKmxvb2t1cDsKKworICAgIGlmIChlID09IE5VTEwpIHsKKyAgICAgICAgWExPRyggIk5PVCBJTiBDQUNIRSIpOworICAgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgbm93ID0gX3RpbWVfbm93KCk7CisKKyAgICAvKiByZW1vdmUgc3RhbGUgZW50cmllcyBoZXJlICovCisgICAgaWYgKCAodW5zaWduZWQpKG5vdyAtIGUtPndoZW4pID49IENPTkZJR19TRUNPTkRTICkgeworICAgICAgICBYTE9HKCAiIE5PVCBJTiBDQUNIRSAoU1RBTEUgRU5UUlkgJXAgRElTQ0FSREVEKSIsICpsb29rdXAgKTsKKyAgICAgICAgX2NhY2hlX3JlbW92ZV9wKGNhY2hlLCBsb29rdXApOworICAgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgKmFuc3dlcmxlbiA9IGUtPmFuc3dlcmxlbjsKKyAgICBpZiAoZS0+YW5zd2VybGVuID4gYW5zd2Vyc2l6ZSkgeworICAgICAgICAvKiBOT1RFOiB3ZSByZXR1cm4gVU5TVVBQT1JURUQgaWYgdGhlIGFuc3dlciBidWZmZXIgaXMgdG9vIHNob3J0ICovCisgICAgICAgIHJlc3VsdCA9IFJFU09MVl9DQUNIRV9VTlNVUFBPUlRFRDsKKyAgICAgICAgWExPRygiIEFOU1dFUiBUT08gTE9ORyIpOworICAgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgbWVtY3B5KCBhbnN3ZXIsIGUtPmFuc3dlciwgZS0+YW5zd2VybGVuICk7CisKKyAgICAvKiBidW1wIHVwIHRoaXMgZW50cnkgdG8gdGhlIHRvcCBvZiB0aGUgTVJVIGxpc3QgKi8KKyAgICBpZiAoZSAhPSBjYWNoZS0+bXJ1X2xpc3QubXJ1X25leHQpIHsKKyAgICAgICAgZW50cnlfbXJ1X3JlbW92ZSggZSApOworICAgICAgICBlbnRyeV9tcnVfYWRkKCBlLCAmY2FjaGUtPm1ydV9saXN0ICk7CisgICAgfQorCisgICAgWExPRyggIkZPVU5EIElOIENBQ0hFIGVudHJ5PSVwIiwgZSApOworICAgIHJlc3VsdCA9IFJFU09MVl9DQUNIRV9GT1VORDsKKworRXhpdDoKKyAgICBwdGhyZWFkX211dGV4X3VubG9jayggJmNhY2hlLT5sb2NrICk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworCit2b2lkCitfcmVzb2x2X2NhY2hlX2FkZCggc3RydWN0IHJlc29sdl9jYWNoZSogIGNhY2hlLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqICAgICAgICAgICBxdWVyeSwKKyAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgcXVlcnlsZW4sCisgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCogICAgICAgICAgIGFuc3dlciwKKyAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgYW5zd2VybGVuICkKK3sKKyAgICBFbnRyeSAgICBrZXlbMV07CisgICAgRW50cnkqICAgZTsKKyAgICBFbnRyeSoqICBsb29rdXA7CisKKyAgICAvKiBkb24ndCBhc3N1bWUgdGhhdCB0aGUgcXVlcnkgaGFzIGFscmVhZHkgYmVlbiBjYWNoZWQKKyAgICAgKi8KKyAgICBpZiAoIWVudHJ5X2luaXRfa2V5KCBrZXksIHF1ZXJ5LCBxdWVyeWxlbiApKSB7CisgICAgICAgIFhMT0coICIlczogcGFzc2VkIGludmFsaWQgcXVlcnkgPyIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBwdGhyZWFkX211dGV4X2xvY2soICZjYWNoZS0+bG9jayApOworCisgICAgWExPRyggIiVzOiBxdWVyeToiLCBfX0ZVTkNUSU9OX18gKTsKKyAgICBYTE9HX1FVRVJZKHF1ZXJ5LHF1ZXJ5bGVuKTsKKyNpZiBERUJVR19EQVRBCisgICAgWExPRyggImFuc3dlcjoiKTsKKyAgICBYTE9HX0JZVEVTKGFuc3dlcixhbnN3ZXJsZW4pOworI2VuZGlmCisKKyAgICBsb29rdXAgPSBfY2FjaGVfbG9va3VwX3AoY2FjaGUsIGtleSk7CisgICAgZSAgICAgID0gKmxvb2t1cDsKKworICAgIGlmIChlICE9IE5VTEwpIHsgLyogc2hvdWxkIG5vdCBoYXBwZW4gKi8KKyAgICAgICAgWExPRygiJXM6IEFMUkVBRFkgSU4gQ0FDSEUgKCVwKSA/IElHTk9SSU5HIEFERCIsCisgICAgICAgICAgICAgX19GVU5DVElPTl9fLCBlKTsKKyAgICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIGlmIChjYWNoZS0+bnVtX2VudHJpZXMgPj0gQ09ORklHX01BWF9FTlRSSUVTKSB7CisgICAgICAgIF9jYWNoZV9yZW1vdmVfb2xkZXN0KGNhY2hlKTsKKyAgICAgICAgLyogbmVlZCB0byBsb29rdXAgYWdhaW4gKi8KKyAgICAgICAgbG9va3VwID0gX2NhY2hlX2xvb2t1cF9wKGNhY2hlLCBrZXkpOworICAgICAgICBlICAgICAgPSAqbG9va3VwOworICAgICAgICBpZiAoZSAhPSBOVUxMKSB7CisgICAgICAgICAgICBYTE9HKCIlczogQUxSRUFEWSBJTiBDQUNIRSAoJXApID8gSUdOT1JJTkcgQUREIiwKKyAgICAgICAgICAgICAgICBfX0ZVTkNUSU9OX18sIGUpOworICAgICAgICAgICAgZ290byBFeGl0OworICAgICAgICB9CisgICAgfQorCisgICAgZSA9IGVudHJ5X2FsbG9jKCBrZXksIGFuc3dlciwgYW5zd2VybGVuICk7CisgICAgaWYgKGUgIT0gTlVMTCkgeworICAgICAgICBfY2FjaGVfYWRkX3AoY2FjaGUsIGxvb2t1cCwgZSk7CisgICAgfQorI2lmIERFQlVHCisgICAgX2NhY2hlX2R1bXBfbXJ1KGNhY2hlKTsKKyNlbmRpZgorRXhpdDoKKyAgICBwdGhyZWFkX211dGV4X3VubG9jayggJmNhY2hlLT5sb2NrICk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKy8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgc3RydWN0IHJlc29sdl9jYWNoZSogIF9yZXNfY2FjaGU7CitzdGF0aWMgcHRocmVhZF9vbmNlX3QgICAgICAgIF9yZXNfY2FjaGVfb25jZTsKKworc3RhdGljIHZvaWQKK19yZXNfY2FjaGVfaW5pdCggdm9pZCApCit7CisgICAgY29uc3QgY2hhciogIGVudiA9IGdldGVudihDT05GSUdfRU5WKTsKKworICAgIGlmIChlbnYgJiYgYXRvaShlbnYpID09IDApIHsKKyAgICAgICAgLyogdGhlIGNhY2hlIGlzIGRpc2FibGVkICovCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBfcmVzX2NhY2hlID0gX3Jlc29sdl9jYWNoZV9jcmVhdGUoKTsKK30KKworCitzdHJ1Y3QgcmVzb2x2X2NhY2hlKgorX19nZXRfcmVzX2NhY2hlKCB2b2lkICkKK3sKKyAgICBwdGhyZWFkX29uY2UoICZfcmVzX2NhY2hlX29uY2UsIF9yZXNfY2FjaGVfaW5pdCApOworICAgIHJldHVybiBfcmVzX2NhY2hlOworfQorCit2b2lkCitfcmVzb2x2X2NhY2hlX3Jlc2V0KCB1bnNpZ25lZCAgZ2VuZXJhdGlvbiApCit7CisgICAgWExPRygiJXM6IGdlbmVyYXRpb249JWQiLCBfX0ZVTkNUSU9OX18sIGdlbmVyYXRpb24pOworCisgICAgaWYgKF9yZXNfY2FjaGUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuOworCisgICAgcHRocmVhZF9tdXRleF9sb2NrKCAmX3Jlc19jYWNoZS0+bG9jayApOworICAgIGlmIChfcmVzX2NhY2hlLT5nZW5lcmF0aW9uICE9IGdlbmVyYXRpb24pIHsKKyAgICAgICAgX2NhY2hlX2ZsdXNoX2xvY2tlZChfcmVzX2NhY2hlKTsKKyAgICAgICAgX3Jlc19jYWNoZS0+Z2VuZXJhdGlvbiA9IGdlbmVyYXRpb247CisgICAgfQorICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCAmX3Jlc19jYWNoZS0+bG9jayApOworfQpkaWZmIC0tZ2l0IGEvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19jb21wLmMgYi9saWJjL25ldGJzZC9yZXNvbHYvcmVzX2NvbXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTkxZThiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19jb21wLmMKQEAgLTAsMCArMSwyNTkgQEAKKy8qCSROZXRCU0Q6IHJlc19jb21wLmMsdiAxLjYgMjAwNC8wNS8yMiAyMzo0NzowOSBjaHJpc3RvcyBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTg1LCAxOTkzCisgKiAgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICogCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKKyAqIAlDYWxpZm9ybmlhLCBCZXJrZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5MyBieSBEaWdpdGFsIEVxdWlwbWVudCBDb3Jwb3JhdGlvbi4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0CisgKiB0aGUgbmFtZSBvZiBEaWdpdGFsIEVxdWlwbWVudCBDb3Jwb3JhdGlvbiBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvcgorICogcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBkb2N1bWVudCBvciBzb2Z0d2FyZSB3aXRob3V0CisgKiBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBESUdJVEFMIEVRVUlQTUVOVCBDT1JQLiBESVNDTEFJTVMgQUxMCisgKiBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICAgSU4gTk8gRVZFTlQgU0hBTEwgRElHSVRBTCBFUVVJUE1FTlQKKyAqIENPUlBPUkFUSU9OIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUgorICogUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMKKyAqIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUworICogU09GVFdBUkUuCisgKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNCBieSBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0sIEluYy4gKCJJU0MiKQorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTE5OTkgYnkgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElTQyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIElTQyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCisgKiBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCisjaWZkZWYgbm90ZGVmCitzdGF0aWMgY29uc3QgY2hhciBzY2NzaWRbXSA9ICJAKCMpcmVzX2NvbXAuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOworc3RhdGljIGNvbnN0IGNoYXIgcmNzaWRbXSA9ICJJZDogcmVzX2NvbXAuYyx2IDEuMS4yLjEuNC4xIDIwMDQvMDMvMDkgMDg6MzM6NTQgbWFya2EgRXhwIjsKKyNlbHNlCitfX1JDU0lEKCIkTmV0QlNEOiByZXNfY29tcC5jLHYgMS42IDIwMDQvMDUvMjIgMjM6NDc6MDkgY2hyaXN0b3MgRXhwICQiKTsKKyNlbmRpZgorI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlICJhcnBhX25hbWVzZXIuaCIKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2lmZGVmIEFORFJPSURfQ0hBTkdFUworI2luY2x1ZGUgInJlc29sdl9wcml2YXRlLmgiCisjZWxzZQorI2luY2x1ZGUgPHJlc29sdi5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworLyoKKyAqIEV4cGFuZCBjb21wcmVzc2VkIGRvbWFpbiBuYW1lICdzcmMnIHRvIGZ1bGwgZG9tYWluIG5hbWUuCisgKiAnbXNnJyBpcyBhIHBvaW50ZXIgdG8gdGhlIGJlZ2luaW5nIG9mIHRoZSBtZXNzYWdlLAorICogJ2VvbScgcG9pbnRzIHRvIHRoZSBmaXJzdCBsb2NhdGlvbiBhZnRlciB0aGUgbWVzc2FnZSwKKyAqICdkc3QnIGlzIGEgcG9pbnRlciB0byBhIGJ1ZmZlciBvZiBzaXplICdkc3RzaXonIGZvciB0aGUgcmVzdWx0LgorICogUmV0dXJuIHNpemUgb2YgY29tcHJlc3NlZCBuYW1lIG9yIC0xIGlmIHRoZXJlIHdhcyBhbiBlcnJvci4KKyAqLworaW50Citkbl9leHBhbmQoY29uc3QgdV9jaGFyICptc2csIGNvbnN0IHVfY2hhciAqZW9tLCBjb25zdCB1X2NoYXIgKnNyYywKKwkgIGNoYXIgKmRzdCwgaW50IGRzdHNpeikKK3sKKwlpbnQgbiA9IG5zX25hbWVfdW5jb21wcmVzcyhtc2csIGVvbSwgc3JjLCBkc3QsIChzaXplX3QpZHN0c2l6KTsKKworCWlmIChuID4gMCAmJiBkc3RbMF0gPT0gJy4nKQorCQlkc3RbMF0gPSAnXDAnOworCXJldHVybiAobik7Cit9CisKKy8qCisgKiBQYWNrIGRvbWFpbiBuYW1lICdleHBfZG4nIGluIHByZXNlbnRhdGlvbiBmb3JtIGludG8gJ2NvbXBfZG4nLgorICogUmV0dXJuIHRoZSBzaXplIG9mIHRoZSBjb21wcmVzc2VkIG5hbWUgb3IgLTEuCisgKiAnbGVuZ3RoJyBpcyB0aGUgc2l6ZSBvZiB0aGUgYXJyYXkgcG9pbnRlZCB0byBieSAnY29tcF9kbicuCisgKi8KK2ludAorZG5fY29tcChjb25zdCBjaGFyICpzcmMsIHVfY2hhciAqZHN0LCBpbnQgZHN0c2l6LAorCXVfY2hhciAqKmRucHRycywgdV9jaGFyICoqbGFzdGRucHRyKQoreworCXJldHVybiAobnNfbmFtZV9jb21wcmVzcyhzcmMsIGRzdCwgKHNpemVfdClkc3RzaXosCisJCQkJIChjb25zdCB1X2NoYXIgKiopZG5wdHJzLAorCQkJCSAoY29uc3QgdV9jaGFyICoqKWxhc3RkbnB0cikpOworfQorCisvKgorICogU2tpcCBvdmVyIGEgY29tcHJlc3NlZCBkb21haW4gbmFtZS4gUmV0dXJuIHRoZSBzaXplIG9yIC0xLgorICovCitpbnQKK2RuX3NraXBuYW1lKGNvbnN0IHVfY2hhciAqcHRyLCBjb25zdCB1X2NoYXIgKmVvbSkgeworCWNvbnN0IHVfY2hhciAqc2F2ZXB0ciA9IHB0cjsKKworCWlmIChuc19uYW1lX3NraXAoJnB0ciwgZW9tKSA9PSAtMSkKKwkJcmV0dXJuICgtMSk7CisJcmV0dXJuIChwdHIgLSBzYXZlcHRyKTsKK30KKworLyoKKyAqIFZlcmlmeSB0aGF0IGEgZG9tYWluIG5hbWUgdXNlcyBhbiBhY2NlcHRhYmxlIGNoYXJhY3RlciBzZXQuCisgKi8KKworLyoKKyAqIE5vdGUgdGhlIGNvbnNwaWN1b3VzIGFic2VuY2Ugb2YgY3R5cGUgbWFjcm9zIGluIHRoZXNlIGRlZmluaXRpb25zLiAgT24KKyAqIG5vbi1BU0NJSSBob3N0cywgd2UgY2FuJ3QgZGVwZW5kIG9uIHN0cmluZyBsaXRlcmFscyBvciBjdHlwZSBtYWNyb3MgdG8KKyAqIHRlbGwgdXMgYW55dGhpbmcgYWJvdXQgbmV0d29yay1mb3JtYXQgZGF0YS4gIFRoZSByZXN0IG9mIHRoZSBCSU5EIHN5c3RlbQorICogaXMgbm90IGNhcmVmdWwgYWJvdXQgdGhpcywgYnV0IGZvciBzb21lIHJlYXNvbiwgd2UncmUgZG9pbmcgaXQgcmlnaHQgaGVyZS4KKyAqLworI2RlZmluZSBQRVJJT0QgMHgyZQorI2RlZmluZQloeXBoZW5jaGFyKGMpICgoYykgPT0gMHgyZCkKKyNkZWZpbmUgYnNsYXNoY2hhcihjKSAoKGMpID09IDB4NWMpCisjZGVmaW5lIHBlcmlvZGNoYXIoYykgKChjKSA9PSBQRVJJT0QpCisjZGVmaW5lIGFzdGVyY2hhcihjKSAoKGMpID09IDB4MmEpCisjZGVmaW5lIGFscGhhY2hhcihjKSAoKChjKSA+PSAweDQxICYmIChjKSA8PSAweDVhKSBcCisJCSAgIHx8ICgoYykgPj0gMHg2MSAmJiAoYykgPD0gMHg3YSkpCisjZGVmaW5lIGRpZ2l0Y2hhcihjKSAoKGMpID49IDB4MzAgJiYgKGMpIDw9IDB4MzkpCisKKyNkZWZpbmUgYm9yZGVyY2hhcihjKSAoYWxwaGFjaGFyKGMpIHx8IGRpZ2l0Y2hhcihjKSkKKyNkZWZpbmUgbWlkZGxlY2hhcihjKSAoYm9yZGVyY2hhcihjKSB8fCBoeXBoZW5jaGFyKGMpKQorI2RlZmluZQlkb21haW5jaGFyKGMpICgoYykgPiAweDIwICYmIChjKSA8IDB4N2YpCisKK2ludAorcmVzX2hub2soY29uc3QgY2hhciAqZG4pIHsKKwlpbnQgcGNoID0gUEVSSU9ELCBjaCA9ICpkbisrOworCisJd2hpbGUgKGNoICE9ICdcMCcpIHsKKwkJaW50IG5jaCA9ICpkbisrOworCisJCWlmIChwZXJpb2RjaGFyKGNoKSkgeworCQkJOworCQl9IGVsc2UgaWYgKHBlcmlvZGNoYXIocGNoKSkgeworCQkJaWYgKCFib3JkZXJjaGFyKGNoKSkKKwkJCQlyZXR1cm4gKDApOworCQl9IGVsc2UgaWYgKHBlcmlvZGNoYXIobmNoKSB8fCBuY2ggPT0gJ1wwJykgeworCQkJaWYgKCFib3JkZXJjaGFyKGNoKSkKKwkJCQlyZXR1cm4gKDApOworCQl9IGVsc2UgeworCQkJaWYgKCFtaWRkbGVjaGFyKGNoKSkKKwkJCQlyZXR1cm4gKDApOworCQl9CisJCXBjaCA9IGNoLCBjaCA9IG5jaDsKKwl9CisJcmV0dXJuICgxKTsKK30KKworLyoKKyAqIGhvc3RuYW1lLWxpa2UgKEEsIE1YLCBXS1MpIG93bmVycyBjYW4gaGF2ZSAiKiIgYXMgdGhlaXIgZmlyc3QgbGFiZWwKKyAqIGJ1dCBtdXN0IG90aGVyd2lzZSBiZSBhcyBhIGhvc3QgbmFtZS4KKyAqLworaW50CityZXNfb3dub2soY29uc3QgY2hhciAqZG4pIHsKKwlpZiAoYXN0ZXJjaGFyKGRuWzBdKSkgeworCQlpZiAocGVyaW9kY2hhcihkblsxXSkpCisJCQlyZXR1cm4gKHJlc19obm9rKGRuKzIpKTsKKwkJaWYgKGRuWzFdID09ICdcMCcpCisJCQlyZXR1cm4gKDEpOworCX0KKwlyZXR1cm4gKHJlc19obm9rKGRuKSk7Cit9CisKKy8qCisgKiBTT0EgUk5BTUVzIGFuZCBSUCBSTkFNRXMgY2FuIGhhdmUgYW55IHByaW50YWJsZSBjaGFyYWN0ZXIgaW4gdGhlaXIgZmlyc3QKKyAqIGxhYmVsLCBidXQgdGhlIHJlc3Qgb2YgdGhlIG5hbWUgaGFzIHRvIGxvb2sgbGlrZSBhIGhvc3QgbmFtZS4KKyAqLworaW50CityZXNfbWFpbG9rKGNvbnN0IGNoYXIgKmRuKSB7CisJaW50IGNoLCBlc2NhcGVkID0gMDsKKworCS8qICIuIiBpcyBhIHZhbGlkIG1pc3NpbmcgcmVwcmVzZW50YXRpb24gKi8KKwlpZiAoKmRuID09ICdcMCcpCisJCXJldHVybiAoMSk7CisKKwkvKiBvdGhlcndpc2UgPGxhYmVsPi48aG9zdG5hbWU+ICovCisJd2hpbGUgKChjaCA9ICpkbisrKSAhPSAnXDAnKSB7CisJCWlmICghZG9tYWluY2hhcihjaCkpCisJCQlyZXR1cm4gKDApOworCQlpZiAoIWVzY2FwZWQgJiYgcGVyaW9kY2hhcihjaCkpCisJCQlicmVhazsKKwkJaWYgKGVzY2FwZWQpCisJCQllc2NhcGVkID0gMDsKKwkJZWxzZSBpZiAoYnNsYXNoY2hhcihjaCkpCisJCQllc2NhcGVkID0gMTsKKwl9CisJaWYgKHBlcmlvZGNoYXIoY2gpKQorCQlyZXR1cm4gKHJlc19obm9rKGRuKSk7CisJcmV0dXJuICgwKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgcXVpdGUgbGliZXJhbCwgc2luY2UgUkZDIDEwMzQncyBjaGFyYWN0ZXIgc2V0cyBhcmUgb25seQorICogcmVjb21tZW5kYXRpb25zLgorICovCitpbnQKK3Jlc19kbm9rKGNvbnN0IGNoYXIgKmRuKSB7CisJaW50IGNoOworCisJd2hpbGUgKChjaCA9ICpkbisrKSAhPSAnXDAnKQorCQlpZiAoIWRvbWFpbmNoYXIoY2gpKQorCQkJcmV0dXJuICgwKTsKKwlyZXR1cm4gKDEpOworfQorCisjaWZkZWYgQklORF80X0NPTVBBVAorLyoKKyAqIFRoaXMgbW9kdWxlIG11c3QgZXhwb3J0IHRoZSBmb2xsb3dpbmcgZXh0ZXJuYWxseS12aXNpYmxlIHN5bWJvbHM6CisgKglfX19wdXRsb25nCisgKglfX19wdXRzaG9ydAorICoJX19nZXRsb25nCisgKglfX2dldHNob3J0CisgKiBOb3RlIHRoYXQgb25lIF8gY29tZXMgZnJvbSBDIGFuZCB0aGUgb3RoZXJzIGNvbWUgZnJvbSB1cy4KKyAqLwordm9pZCBfX3B1dGxvbmcodV9pbnQzMl90IHNyYywgdV9jaGFyICpkc3QpIHsgbnNfcHV0MzIoc3JjLCBkc3QpOyB9Cit2b2lkIF9fcHV0c2hvcnQodV9pbnQxNl90IHNyYywgdV9jaGFyICpkc3QpIHsgbnNfcHV0MTYoc3JjLCBkc3QpOyB9CisjaWZuZGVmIF9fdWx0cml4X18KK3VfaW50MzJfdCBfZ2V0bG9uZyhjb25zdCB1X2NoYXIgKnNyYykgeyByZXR1cm4gKG5zX2dldDMyKHNyYykpOyB9Cit1X2ludDE2X3QgX2dldHNob3J0KGNvbnN0IHVfY2hhciAqc3JjKSB7IHJldHVybiAobnNfZ2V0MTYoc3JjKSk7IH0KKyNlbmRpZiAvKl9fdWx0cml4X18qLworI2VuZGlmIC8qQklORF80X0NPTVBBVCovCmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9yZXNvbHYvcmVzX2NvbXBhdC5jIGIvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19jb21wYXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWExZDVmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19jb21wYXQuYwpAQCAtMCwwICsxLDg3IEBACisvKgkkTmV0QlNEOiByZXNfY29tcGF0LmMsdiAxLjEgMjAwNC8wNi8wOSAxODowNzowMyBjaHJpc3RvcyBFeHAgJAkqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwNCBUaGUgTmV0QlNEIEZvdW5kYXRpb24sIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBUaGUgTmV0QlNEIEZvdW5kYXRpb24KKyAqIGJ5IENocmlzdG9zIFpvdWxhcy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICogICAgICAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE5ldEJTRAorICogICAgICAgIEZvdW5kYXRpb24sIEluYy4gYW5kIGl0cyBjb250cmlidXRvcnMuCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIFRoZSBOZXRCU0QgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgTkVUQlNEIEZPVU5EQVRJT04sIElOQy4gQU5EIENPTlRSSUJVVE9SUworICogYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECisgKiBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQorX19SQ1NJRCgiJE5ldEJTRDogcmVzX2NvbXBhdC5jLHYgMS4xIDIwMDQvMDYvMDkgMTg6MDc6MDMgY2hyaXN0b3MgRXhwICQiKTsKKyNlbmRpZgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSAiYXJwYV9uYW1lc2VyLmgiCisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNkZWZpbmUgX19PTERfUkVTX1NUQVRFCisjaWZkZWYgQU5EUk9JRF9DSEFOR0VTCisjaW5jbHVkZSAicmVzb2x2X3ByaXZhdGUuaCIKKyNlbHNlCisjaW5jbHVkZSAicmVzb2x2LmgiCisjZW5kaWYKKworI3VuZGVmIF9yZXMKKworLyoKKyAqIEJpbmFyeSBDb21wYXRpYmlsaXR5OyB0aGlzIHN5bWJvbCBkb2VzIG5vdCBhcHBlYXIgaW4gYSBoZWFkZXIgZmlsZQorICogTW9zdCB1c2VybGFuZCBwcm9ncmFtcyB1c2UgdGhpcyB0byBzZXQgcmVzX29wdGlvbnMgYmVmb3JlIHJlc19pbml0KCkKKyAqIGlzIGNhbGxlZC4gVGhlcmUgYXJlIGhvb2tzIHRvIHJlc19pbml0KCkgdG8gY29uc3VsdCB0aGUgZGF0YSBpbiB0aGlzCisgKiBzdHJ1Y3R1cmUuIFRoZSBob29rcyBhcmUgcHJvdmlkZWQgaW5kaXJlY3RseSBieSB0aGUgdHdvIGZ1bmN0aW9ucyBiZWxvdy4KKyAqIFdlIGRlcGVuZCBvbiB0aGUgZmFjdCB0aGUgdGhlIGZpcnN0IDQ0MCBbMzIgYml0IG1hY2hpbmVzXSBieXRlcyBhcmUKKyAqIHNoYXJlZCBiZXR3ZWVuIHRoZSB0d28gc3RydWN0dXJlcy4KKyAqLworI2lmbmRlZiBfX0JJTkRfTk9TVEFUSUMKK3N0cnVjdCBfX3Jlc19zdGF0ZSBfcmVzCisjaWYgZGVmaW5lZChfX0JJTkRfUkVTX1RFWFQpCisJPSB7IFJFU19USU1FT1VULCB9ICAgICAgLyogTW90b3JvbGEsIGV0IGFsLiAqLworIyBlbmRpZgorOworCit2b2lkICpfX3Jlc19nZXRfb2xkX3N0YXRlKHZvaWQpOwordm9pZCBfX3Jlc19wdXRfb2xkX3N0YXRlKHZvaWQgKik7CisKK3ZvaWQgKgorX19yZXNfZ2V0X29sZF9zdGF0ZSh2b2lkKQoreworCXJldHVybiAmX3JlczsKK30KKwordm9pZAorX19yZXNfcHV0X29sZF9zdGF0ZSh2b2lkICpyZXMpCit7CisJKHZvaWQpbWVtY3B5KCZfcmVzLCByZXMsIHNpemVvZihfcmVzKSk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvbmV0YnNkL3Jlc29sdi9yZXNfZGF0YS5jIGIvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19kYXRhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTYwZWNmZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvbmV0YnNkL3Jlc29sdi9yZXNfZGF0YS5jCkBAIC0wLDAgKzEsMzMyIEBACisvKgkkTmV0QlNEOiByZXNfZGF0YS5jLHYgMS44IDIwMDQvMDYvMDkgMTg6MDc6MDMgY2hyaXN0b3MgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNCBieSBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0sIEluYy4gKCJJU0MiKQorICogQ29weXJpZ2h0IChjKSAxOTk1LTE5OTkgYnkgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElTQyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIElTQyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCisgKiBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKKyNpZmRlZiBub3RkZWYKK3N0YXRpYyBjb25zdCBjaGFyIHJjc2lkW10gPSAiSWQ6IHJlc19kYXRhLmMsdiAxLjEuMjA2LjIgMjAwNC8wMy8xNiAxMjozNDoxOCBtYXJrYSBFeHAiOworI2Vsc2UKK19fUkNTSUQoIiROZXRCU0Q6IHJlc19kYXRhLmMsdiAxLjggMjAwNC8wNi8wOSAxODowNzowMyBjaHJpc3RvcyBFeHAgJCIpOworI2VuZGlmCisjZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLworCisKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorCisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2luY2x1ZGUgImFycGFfbmFtZXNlci5oIgorCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxuZXRkYi5oPgorI2luY2x1ZGUgInJlc29sdl9wcml2YXRlLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworCitjb25zdCBjaGFyICogY29uc3QgX3Jlc19vcGNvZGVzW10gPSB7CisJIlFVRVJZIiwKKwkiSVFVRVJZIiwKKwkiQ1FVRVJZTSIsCisJIkNRVUVSWVUiLAkvKiBleHBlcmltZW50YWwgKi8KKwkiTk9USUZZIiwJLyogZXhwZXJpbWVudGFsICovCisJIlVQREFURSIsCisJIjYiLAorCSI3IiwKKwkiOCIsCisJIjkiLAorCSIxMCIsCisJIjExIiwKKwkiMTIiLAorCSIxMyIsCisJIlpPTkVJTklUIiwKKwkiWk9ORVJFRiIsCit9OworCisjaWZkZWYgQklORF9VUERBVEUKK2NvbnN0IGNoYXIgKiBjb25zdCBfcmVzX3NlY3Rpb25jb2Rlc1tdID0geworCSJaT05FIiwKKwkiUFJFUkVRVUlTSVRFUyIsCisJIlVQREFURSIsCisJIkFERElUSU9OQUwiLAorfTsKKyNlbmRpZgorCisjaWZuZGVmIF9fQklORF9OT1NUQVRJQworZXh0ZXJuIHN0cnVjdCBfX3Jlc19zdGF0ZSBfbnJlczsKKworLyogUHJvdG8uICovCisKK2ludCAgcmVzX291cnNlcnZlcl9wKGNvbnN0IHJlc19zdGF0ZSwgY29uc3Qgc3RydWN0IHNvY2thZGRyICopOworCisjaWZkZWYgQU5EUk9JRF9DSEFOR0VTCitpbnQgcmVzX25lZWRfaW5pdCgpIHsKKwlyZXR1cm4gKChfbnJlcy5vcHRpb25zICYgUkVTX0lOSVQpID09IDBVKSB8fCByZXNfZ2V0X2Ruc19jaGFuZ2VkKCk7Cit9CisjZWxzZQorI2RlZmluZSByZXNfbmVlZF9pbml0KCkgICAoKF9ucmVzLm9wdGlvbnMgJiBSRVNfSU5JVCkgPT0gMFUpCisjZW5kaWYKKworaW50CityZXNfaW5pdCh2b2lkKSB7CisJaW50IHJ2OworCWV4dGVybiBpbnQgX19yZXNfdmluaXQocmVzX3N0YXRlLCBpbnQpOworI2lmZGVmIENPTVBBVF9fUkVTCisJLyoKKwkgKiBDb21wYXRpYmlsaXR5IHdpdGggcHJvZ3JhbSB0aGF0IHdlcmUgYWNjZXNzaW5nIF9yZXMgZGlyZWN0bHkKKwkgKiB0byBzZXQgb3B0aW9ucy4gV2Uga2VlcCBhbm90aGVyIHN0cnVjdCByZXMgdGhhdCBpcyB0aGUgc2FtZQorCSAqIHNpemUgYXMgdGhlIG9yaWdpbmFsIHJlcyBzdHJ1Y3R1cmUsIGFuZCB0aGVuIGNvcHkgZmllbGRzIHRvCisJICogaXQgc28gdGhhdCB3ZSBhY2hpZXZlIHRoZSBzYW1lIGluaXRpYWxpemF0aW9uCisJICovCisJZXh0ZXJuIHZvaWQgKl9fcmVzX2dldF9vbGRfc3RhdGUodm9pZCk7CisJZXh0ZXJuIHZvaWQgX19yZXNfcHV0X29sZF9zdGF0ZSh2b2lkICopOworCXJlc19zdGF0ZSBvcmVzID0gX19yZXNfZ2V0X29sZF9zdGF0ZSgpOworCisJaWYgKG9yZXMtPm9wdGlvbnMgIT0gMCkKKwkJX25yZXMub3B0aW9ucyA9IG9yZXMtPm9wdGlvbnM7CisJaWYgKG9yZXMtPnJldHJhbnMgIT0gMCkKKwkJX25yZXMucmV0cmFucyA9IG9yZXMtPnJldHJhbnM7CisJaWYgKG9yZXMtPnJldHJ5ICE9IDApCisJCV9ucmVzLnJldHJ5ID0gb3Jlcy0+cmV0cnk7CisjZW5kaWYKKworCS8qCisJICogVGhlc2UgdGhyZWUgZmllbGRzIHVzZWQgdG8gYmUgc3RhdGljYWxseSBpbml0aWFsaXplZC4gIFRoaXMgbWFkZQorCSAqIGl0IGhhcmQgdG8gdXNlIHRoaXMgY29kZSBpbiBhIHNoYXJlZCBsaWJyYXJ5LiAgSXQgaXMgbmVjZXNzYXJ5LAorCSAqIG5vdyB0aGF0IHdlJ3JlIGRvaW5nIGR5bmFtaWMgaW5pdGlhbGl6YXRpb24gaGVyZSwgdGhhdCB3ZSBwcmVzZXJ2ZQorCSAqIHRoZSBvbGQgc2VtYW50aWNzOiBpZiBhbiBhcHBsaWNhdGlvbiBtb2RpZmllcyBvbmUgb2YgdGhlc2UgdGhyZWUKKwkgKiBmaWVsZHMgb2YgX3JlcyBiZWZvcmUgcmVzX2luaXQoKSBpcyBjYWxsZWQsIHJlc19pbml0KCkgd2lsbCBub3QKKwkgKiBhbHRlciB0aGVtLiAgT2YgY291cnNlLCBpZiBhbiBhcHBsaWNhdGlvbiBpcyBzZXR0aW5nIHRoZW0gdG8KKwkgKiBfemVyb18gYmVmb3JlIGNhbGxpbmcgcmVzX2luaXQoKSwgaG9waW5nIHRvIG92ZXJyaWRlIHdoYXQgdXNlZAorCSAqIHRvIGJlIHRoZSBzdGF0aWMgZGVmYXVsdCwgd2UgY2FuJ3QgZGV0ZWN0IGl0IGFuZCB1bmV4cGVjdGVkIHJlc3VsdHMKKwkgKiB3aWxsIGZvbGxvdy4gIFplcm8gZm9yIGFueSBvZiB0aGVzZSBmaWVsZHMgd291bGQgbWFrZSBubyBzZW5zZSwKKwkgKiBzbyBvbmUgY2FuIHNhZmVseSBhc3N1bWUgdGhhdCB0aGUgYXBwbGljYXRpb25zIHdlcmUgYWxyZWFkeSBnZXR0aW5nCisJICogdW5leHBlY3RlZCByZXN1bHRzLgorCSAqCisJICogX25yZXMub3B0aW9ucyBpcyB0cmlja3kgc2luY2Ugc29tZSBhcHBzIHdlcmUga25vd24gdG8gZGlkZGxlIHRoZSBiaXRzCisJICogYmVmb3JlIHJlc19pbml0KCkgd2FzIGZpcnN0IGNhbGxlZC4gV2UgY2FuJ3QgcmVwbGljYXRlIHRoYXQgc2VtYW50aWMKKwkgKiB3aXRoIGR5bmFtaWMgaW5pdGlhbGl6YXRpb24gKHRoZXkgbWF5IGhhdmUgdHVybmVkIGJpdHMgb2ZmIHRoYXQgYXJlCisJICogc2V0IGluIFJFU19ERUZBVUxUKS4gIE91ciBzb2x1dGlvbiBpcyB0byBkZWNsYXJlIHN1Y2ggYXBwbGljYXRpb25zCisJICogImJyb2tlbiIuICBUaGV5IGNvdWxkIGZvb2wgdXMgYnkgc2V0dGluZyBSRVNfSU5JVCBidXQgbm9uZSBkbyAoeWV0KS4KKwkgKi8KKwlpZiAoIV9ucmVzLnJldHJhbnMpCisJCV9ucmVzLnJldHJhbnMgPSBSRVNfVElNRU9VVDsKKwlpZiAoIV9ucmVzLnJldHJ5KQorCQlfbnJlcy5yZXRyeSA9IDQ7CisJaWYgKCEoX25yZXMub3B0aW9ucyAmIFJFU19JTklUKSkKKwkJX25yZXMub3B0aW9ucyA9IFJFU19ERUZBVUxUOworCisJLyoKKwkgKiBUaGlzIG9uZSB1c2VkIHRvIGluaXRpYWxpemUgaW1wbGljaXRseSB0byB6ZXJvLCBzbyB1bmxlc3MgdGhlIGFwcAorCSAqIGhhcyBzZXQgaXQgdG8gc29tZXRoaW5nIGluIHBhcnRpY3VsYXIsIHdlIGNhbiByYW5kb21pemUgaXQgbm93LgorCSAqLworCWlmICghX25yZXMuaWQpCisJCV9ucmVzLmlkID0gcmVzX3JhbmRvbWlkKCk7CisKKwlydiA9IF9fcmVzX3Zpbml0KCZfbnJlcywgMSk7CisjaWZkZWYgQ09NUEFUX19SRVMKKwlfX3Jlc19wdXRfb2xkX3N0YXRlKCZfbnJlcyk7CisjZW5kaWYKKwlyZXR1cm4gcnY7Cit9CisKK3ZvaWQKK3BfcXVlcnkoY29uc3QgdV9jaGFyICptc2cpIHsKKwlmcF9xdWVyeShtc2csIHN0ZG91dCk7Cit9CisKK3ZvaWQKK2ZwX3F1ZXJ5KGNvbnN0IHVfY2hhciAqbXNnLCBGSUxFICpmaWxlKSB7CisJZnBfbnF1ZXJ5KG1zZywgUEFDS0VUU1osIGZpbGUpOworfQorCit2b2lkCitmcF9ucXVlcnkoY29uc3QgdV9jaGFyICptc2csIGludCBsZW4sIEZJTEUgKmZpbGUpIHsKKwlpZiAocmVzX25lZWRfaW5pdCgpICYmIHJlc19pbml0KCkgPT0gLTEpCisJCXJldHVybjsKKworCXJlc19wcXVlcnkoJl9ucmVzLCBtc2csIGxlbiwgZmlsZSk7Cit9CisKK2ludAorcmVzX21rcXVlcnkoaW50IG9wLAkJCS8qIG9wY29kZSBvZiBxdWVyeSAqLworCSAgICBjb25zdCBjaGFyICpkbmFtZSwJCS8qIGRvbWFpbiBuYW1lICovCisJICAgIGludCBjbGFzcywgaW50IHR5cGUsCS8qIGNsYXNzIGFuZCB0eXBlIG9mIHF1ZXJ5ICovCisJICAgIGNvbnN0IHVfY2hhciAqZGF0YSwJCS8qIHJlc291cmNlIHJlY29yZCBkYXRhICovCisJICAgIGludCBkYXRhbGVuLAkJLyogbGVuZ3RoIG9mIGRhdGEgKi8KKwkgICAgY29uc3QgdV9jaGFyICpuZXdycl9pbiwJLyogbmV3IHJyIGZvciBtb2RpZnkgb3IgYXBwZW5kICovCisJICAgIHVfY2hhciAqYnVmLAkJLyogYnVmZmVyIHRvIHB1dCBxdWVyeSAqLworCSAgICBpbnQgYnVmbGVuKQkJCS8qIHNpemUgb2YgYnVmZmVyICovCit7CisJaWYgKHJlc19uZWVkX2luaXQoKSAmJiByZXNfaW5pdCgpID09IC0xKSB7CisJCVJFU19TRVRfSF9FUlJOTygmX25yZXMsIE5FVERCX0lOVEVSTkFMKTsKKwkJcmV0dXJuICgtMSk7CisJfQorCXJldHVybiAocmVzX25ta3F1ZXJ5KCZfbnJlcywgb3AsIGRuYW1lLCBjbGFzcywgdHlwZSwKKwkJCSAgICAgZGF0YSwgZGF0YWxlbiwKKwkJCSAgICAgbmV3cnJfaW4sIGJ1ZiwgYnVmbGVuKSk7Cit9CisKKyNpZmRlZiBfTElCUkVTT0xWCitpbnQKK3Jlc19ta3VwZGF0ZShuc191cGRyZWMgKnJyZWNwX2luLCB1X2NoYXIgKmJ1ZiwgaW50IGJ1ZmxlbikgeworCWlmIChyZXNfbmVlZF9pbml0KCkgJiYgcmVzX2luaXQoKSA9PSAtMSkgeworCQlSRVNfU0VUX0hfRVJSTk8oJl9ucmVzLCBORVREQl9JTlRFUk5BTCk7CisJCXJldHVybiAoLTEpOworCX0KKworCXJldHVybiAocmVzX25ta3VwZGF0ZSgmX25yZXMsIHJyZWNwX2luLCBidWYsIGJ1ZmxlbikpOworfQorI2VuZGlmCisKK2ludAorcmVzX3F1ZXJ5KGNvbnN0IGNoYXIgKm5hbWUsCS8qIGRvbWFpbiBuYW1lICovCisJICBpbnQgY2xhc3MsIGludCB0eXBlLAkvKiBjbGFzcyBhbmQgdHlwZSBvZiBxdWVyeSAqLworCSAgdV9jaGFyICphbnN3ZXIsCS8qIGJ1ZmZlciB0byBwdXQgYW5zd2VyICovCisJICBpbnQgYW5zbGVuKQkJLyogc2l6ZSBvZiBhbnN3ZXIgYnVmZmVyICovCit7CisJaWYgKHJlc19uZWVkX2luaXQoKSAmJiByZXNfaW5pdCgpID09IC0xKSB7CisJCVJFU19TRVRfSF9FUlJOTygmX25yZXMsIE5FVERCX0lOVEVSTkFMKTsKKwkJcmV0dXJuICgtMSk7CisJfQorCXJldHVybiAocmVzX25xdWVyeSgmX25yZXMsIG5hbWUsIGNsYXNzLCB0eXBlLCBhbnN3ZXIsIGFuc2xlbikpOworfQorCit2b2lkCityZXNfc2VuZF9zZXRxaG9vayhyZXNfc2VuZF9xaG9vayBob29rKSB7CisJX25yZXMucWhvb2sgPSBob29rOworfQorCit2b2lkCityZXNfc2VuZF9zZXRyaG9vayhyZXNfc2VuZF9yaG9vayBob29rKSB7CisJX25yZXMucmhvb2sgPSBob29rOworfQorCitpbnQKK3Jlc19pc291cnNlcnZlcihjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKmlucCkgeworCXJldHVybiAocmVzX291cnNlcnZlcl9wKCZfbnJlcywgKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqKShjb25zdCB2b2lkICopaW5wKSk7Cit9CisKK2ludAorcmVzX3NlbmQoY29uc3QgdV9jaGFyICpidWYsIGludCBidWZsZW4sIHVfY2hhciAqYW5zLCBpbnQgYW5zc2l6KSB7CisJaWYgKHJlc19uZWVkX2luaXQoKSAmJiByZXNfaW5pdCgpID09IC0xKSB7CisJCS8qIGVycm5vIHNob3VsZCBoYXZlIGJlZW4gc2V0IGJ5IHJlc19pbml0KCkgaW4gdGhpcyBjYXNlLiAqLworCQlyZXR1cm4gKC0xKTsKKwl9CisKKwlyZXR1cm4gKHJlc19uc2VuZCgmX25yZXMsIGJ1ZiwgYnVmbGVuLCBhbnMsIGFuc3NpeikpOworfQorCisjaWZkZWYgX0xJQlJFU09MVgoraW50CityZXNfc2VuZHNpZ25lZChjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGJ1ZmxlbiwgbnNfdHNpZ19rZXkgKmtleSwKKwkgICAgICAgdV9jaGFyICphbnMsIGludCBhbnNzaXopCit7CisJaWYgKHJlc19uZWVkX2luaXQoKSAmJiByZXNfaW5pdCgpID09IC0xKSB7CisJCS8qIGVycm5vIHNob3VsZCBoYXZlIGJlZW4gc2V0IGJ5IHJlc19pbml0KCkgaW4gdGhpcyBjYXNlLiAqLworCQlyZXR1cm4gKC0xKTsKKwl9CisKKwlyZXR1cm4gKHJlc19uc2VuZHNpZ25lZCgmX25yZXMsIGJ1ZiwgYnVmbGVuLCBrZXksIGFucywgYW5zc2l6KSk7Cit9CisjZW5kaWYKKwordm9pZAorcmVzX2Nsb3NlKHZvaWQpIHsKKwlyZXNfbmNsb3NlKCZfbnJlcyk7Cit9CisKKyNpZmRlZiBfTElCUkVTT0xWCitpbnQKK3Jlc191cGRhdGUobnNfdXBkcmVjICpycmVjcF9pbikgeworCWlmIChyZXNfbmVlZF9pbml0KCkgJiYgcmVzX2luaXQoKSA9PSAtMSkgeworCQlSRVNfU0VUX0hfRVJSTk8oJl9ucmVzLCBORVREQl9JTlRFUk5BTCk7CisJCXJldHVybiAoLTEpOworCX0KKworCXJldHVybiAocmVzX251cGRhdGUoJl9ucmVzLCBycmVjcF9pbiwgTlVMTCkpOworfQorI2VuZGlmCisKK2ludAorcmVzX3NlYXJjaChjb25zdCBjaGFyICpuYW1lLAkvKiBkb21haW4gbmFtZSAqLworCSAgIGludCBjbGFzcywgaW50IHR5cGUsCS8qIGNsYXNzIGFuZCB0eXBlIG9mIHF1ZXJ5ICovCisJICAgdV9jaGFyICphbnN3ZXIsCS8qIGJ1ZmZlciB0byBwdXQgYW5zd2VyICovCisJICAgaW50IGFuc2xlbikJCS8qIHNpemUgb2YgYW5zd2VyICovCit7CisJaWYgKHJlc19uZWVkX2luaXQoKSAmJiByZXNfaW5pdCgpID09IC0xKSB7CisJCVJFU19TRVRfSF9FUlJOTygmX25yZXMsIE5FVERCX0lOVEVSTkFMKTsKKwkJcmV0dXJuICgtMSk7CisJfQorCisJcmV0dXJuIChyZXNfbnNlYXJjaCgmX25yZXMsIG5hbWUsIGNsYXNzLCB0eXBlLCBhbnN3ZXIsIGFuc2xlbikpOworfQorCitpbnQKK3Jlc19xdWVyeWRvbWFpbihjb25zdCBjaGFyICpuYW1lLAorCQljb25zdCBjaGFyICpkb21haW4sCisJCWludCBjbGFzcywgaW50IHR5cGUsCS8qIGNsYXNzIGFuZCB0eXBlIG9mIHF1ZXJ5ICovCisJCXVfY2hhciAqYW5zd2VyLAkJLyogYnVmZmVyIHRvIHB1dCBhbnN3ZXIgKi8KKwkJaW50IGFuc2xlbikJCS8qIHNpemUgb2YgYW5zd2VyICovCit7CisJaWYgKHJlc19uZWVkX2luaXQoKSAmJiByZXNfaW5pdCgpID09IC0xKSB7CisJCVJFU19TRVRfSF9FUlJOTygmX25yZXMsIE5FVERCX0lOVEVSTkFMKTsKKwkJcmV0dXJuICgtMSk7CisJfQorCisJcmV0dXJuIChyZXNfbnF1ZXJ5ZG9tYWluKCZfbnJlcywgbmFtZSwgZG9tYWluLAorCQkJCSBjbGFzcywgdHlwZSwKKwkJCQkgYW5zd2VyLCBhbnNsZW4pKTsKK30KKworaW50CityZXNfb3B0KGludCBhLCB1X2NoYXIgKmIsIGludCBjLCBpbnQgZCkKK3sKKwlyZXR1cm4gcmVzX25vcHQoJl9ucmVzLCBhLCBiLCBjLCBkKTsKK30KKworY29uc3QgY2hhciAqCitob3N0YWxpYXMoY29uc3QgY2hhciAqbmFtZSkgeworCXJldHVybiBOVUxMOworfQorCisjaWZkZWYgdWx0cml4CitpbnQKK2xvY2FsX2hvc3RuYW1lX2xlbmd0aChjb25zdCBjaGFyICpob3N0bmFtZSkgeworCWludCBsZW5faG9zdCwgbGVuX2RvbWFpbjsKKworCWlmICghKl9ucmVzLmRlZmRuYW1lKQorCQlyZXNfaW5pdCgpOworCWxlbl9ob3N0ID0gc3RybGVuKGhvc3RuYW1lKTsKKwlsZW5fZG9tYWluID0gc3RybGVuKF9ucmVzLmRlZmRuYW1lKTsKKwlpZiAobGVuX2hvc3QgPiBsZW5fZG9tYWluICYmCisJICAgICFzdHJjYXNlY21wKGhvc3RuYW1lICsgbGVuX2hvc3QgLSBsZW5fZG9tYWluLCBfbnJlcy5kZWZkbmFtZSkgJiYKKwkgICAgaG9zdG5hbWVbbGVuX2hvc3QgLSBsZW5fZG9tYWluIC0gMV0gPT0gJy4nKQorCQlyZXR1cm4gKGxlbl9ob3N0IC0gbGVuX2RvbWFpbiAtIDEpOworCXJldHVybiAoMCk7Cit9CisjZW5kaWYgLyp1bHRyaXgqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvbmV0YnNkL3Jlc29sdi9yZXNfZGVidWcuYyBiL2xpYmMvbmV0YnNkL3Jlc29sdi9yZXNfZGVidWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGM2YWZjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19kZWJ1Zy5jCkBAIC0wLDAgKzEsMTE3NCBAQAorLyoJJE5ldEJTRDogcmVzX2RlYnVnLmMsdiAxLjcgMjAwNC8xMS8wNyAwMjoyNTowMSBjaHJpc3RvcyBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTg1CisgKiAgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICogCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKKyAqIAlDYWxpZm9ybmlhLCBCZXJrZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5MyBieSBEaWdpdGFsIEVxdWlwbWVudCBDb3Jwb3JhdGlvbi4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0CisgKiB0aGUgbmFtZSBvZiBEaWdpdGFsIEVxdWlwbWVudCBDb3Jwb3JhdGlvbiBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvcgorICogcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBkb2N1bWVudCBvciBzb2Z0d2FyZSB3aXRob3V0CisgKiBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBESUdJVEFMIEVRVUlQTUVOVCBDT1JQLiBESVNDTEFJTVMgQUxMCisgKiBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICAgSU4gTk8gRVZFTlQgU0hBTEwgRElHSVRBTCBFUVVJUE1FTlQKKyAqIENPUlBPUkFUSU9OIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUgorICogUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMKKyAqIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUworICogU09GVFdBUkUuCisgKi8KKworLyoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NSBieSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzLCBJbmMuCisgKgorICogSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcywgSW5jLiAoaGVyZWluYWZ0ZXIgY2FsbGVkIElCTSkgZ3JhbnRzCisgKiBwZXJtaXNzaW9uIHVuZGVyIGl0cyBjb3B5cmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBTb2Z0d2FyZSB3aXRoIG9yIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZAorICogYWxsIHBhcmFncmFwaHMgb2YgdGhpcyBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IHRoZSBuYW1lIG9mIElCTQorICogbm90IGJlIHVzZWQgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBtYXJrZXRpbmcgb2YgYW55IHByb2R1Y3QgaW5jb3Jwb3JhdGluZworICogdGhlIFNvZnR3YXJlIG9yIG1vZGlmaWNhdGlvbnMgdGhlcmVvZiwgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvcgorICogcGVybWlzc2lvbi4KKyAqCisgKiBUbyB0aGUgZXh0ZW50IGl0IGhhcyBhIHJpZ2h0IHRvIGRvIHNvLCBJQk0gZ3JhbnRzIGFuIGltbXVuaXR5IGZyb20gc3VpdAorICogdW5kZXIgaXRzIHBhdGVudHMsIGlmIGFueSwgZm9yIHRoZSB1c2UsIHNhbGUgb3IgbWFudWZhY3R1cmUgb2YgcHJvZHVjdHMgdG8KKyAqIHRoZSBleHRlbnQgdGhhdCBzdWNoIHByb2R1Y3RzIGFyZSB1c2VkIGZvciBwZXJmb3JtaW5nIERvbWFpbiBOYW1lIFN5c3RlbQorICogZHluYW1pYyB1cGRhdGVzIGluIFRDUC9JUCBuZXR3b3JrcyBieSBtZWFucyBvZiB0aGUgU29mdHdhcmUuICBObyBpbW11bml0eSBpcworICogZ3JhbnRlZCBmb3IgYW55IHByb2R1Y3QgcGVyIHNlIG9yIGZvciBhbnkgb3RoZXIgZnVuY3Rpb24gb2YgYW55IHByb2R1Y3QuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIEFORCBJQk0gRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBCisgKiBQQVJUSUNVTEFSIFBVUlBPU0UuICBJTiBOTyBFVkVOVCBTSEFMTCBJQk0gQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIEFSSVNJTkcKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOCisgKiBJRiBJQk0gSVMgQVBQUklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKyAqLworCisvKgorICogQ29weXJpZ2h0IChjKSAyMDA0IGJ5IEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMTk5OSBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSVNDIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgSVNDIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKKyAqIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQorI2lmZGVmIG5vdGRlZgorc3RhdGljIGNvbnN0IGNoYXIgc2Njc2lkW10gPSAiQCgjKXJlc19kZWJ1Zy5jCTguMSAoQmVya2VsZXkpIDYvNC85MyI7CitzdGF0aWMgY29uc3QgY2hhciByY3NpZFtdID0gIklkOiByZXNfZGVidWcuYyx2IDEuMy4yLjUuNC41IDIwMDQvMDcvMjggMjA6MTY6NDYgbWFya2EgRXhwIjsKKyNlbHNlCitfX1JDU0lEKCIkTmV0QlNEOiByZXNfZGVidWcuYyx2IDEuNyAyMDA0LzExLzA3IDAyOjI1OjAxIGNocmlzdG9zIEV4cCAkIik7CisjZW5kaWYKKyNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCisKKworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorCisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2luY2x1ZGUgImFycGFfbmFtZXNlci5oIgorCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDxuZXRkYi5oPgorI2luY2x1ZGUgInJlc29sdl9wcml2YXRlLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisKKworCisjaWZkZWYgU1BSSU5URl9DSEFSCisjIGRlZmluZSBTUFJJTlRGKHgpIHN0cmxlbihzcHJpbnRmLyoqL3gpCisjZWxzZQorIyBkZWZpbmUgU1BSSU5URih4KSBzcHJpbnRmIHgKKyNlbmRpZgorCitzdGF0aWMgY29uc3QgY2hhciAqcHJlY3NpemVfbnRvYSh1X2ludDMyX3QpOworCitleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IF9yZXNfb3Bjb2Rlc1tdOworZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBfcmVzX3NlY3Rpb25jb2Rlc1tdOworCisjaWZuZGVmIF9MSUJDCisvKgorICogUHJpbnQgdGhlIGN1cnJlbnQgb3B0aW9ucy4KKyAqLwordm9pZAorZnBfcmVzc3RhdChjb25zdCByZXNfc3RhdGUgc3RhdHAsIEZJTEUgKmZpbGUpIHsKKwl1X2xvbmcgbWFzazsKKworCWZwcmludGYoZmlsZSwgIjs7IHJlcyBvcHRpb25zOiIpOworCWZvciAobWFzayA9IDE7ICBtYXNrICE9IDBVOyAgbWFzayA8PD0gMSkKKwkJaWYgKHN0YXRwLT5vcHRpb25zICYgbWFzaykKKwkJCWZwcmludGYoZmlsZSwgIiAlcyIsIHBfb3B0aW9uKG1hc2spKTsKKwlwdXRjKCdcbicsIGZpbGUpOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkCitkb19zZWN0aW9uKGNvbnN0IHJlc19zdGF0ZSBzdGF0cCwKKwkgICBuc19tc2cgKmhhbmRsZSwgbnNfc2VjdCBzZWN0aW9uLAorCSAgIGludCBwZmxhZywgRklMRSAqZmlsZSkKK3sKKwlpbnQgbiwgc2ZsYWcsIHJybnVtOworCWludCBidWZsZW4gPSAyMDQ4OworCWNoYXIgKmJ1ZjsKKwluc19vcGNvZGUgb3Bjb2RlOworCW5zX3JyIHJyOworCisJLyoKKwkgKiBQcmludCBhbnN3ZXIgcmVjb3Jkcy4KKwkgKi8KKwlzZmxhZyA9IChzdGF0cC0+cGZjb2RlICYgcGZsYWcpOworCWlmIChzdGF0cC0+cGZjb2RlICYmICFzZmxhZykKKwkJcmV0dXJuOworCisJYnVmID0gbWFsbG9jKChzaXplX3QpYnVmbGVuKTsKKwlpZiAoYnVmID09IE5VTEwpIHsKKwkJZnByaW50ZihmaWxlLCAiOzsgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZVxuIik7CisJCXJldHVybjsKKwl9CisKKwlvcGNvZGUgPSAobnNfb3Bjb2RlKSBuc19tc2dfZ2V0ZmxhZygqaGFuZGxlLCBuc19mX29wY29kZSk7CisJcnJudW0gPSAwOworCWZvciAoOzspIHsKKwkJaWYgKG5zX3BhcnNlcnIoaGFuZGxlLCBzZWN0aW9uLCBycm51bSwgJnJyKSkgeworCQkJaWYgKGVycm5vICE9IEVOT0RFVikKKwkJCQlmcHJpbnRmKGZpbGUsICI7OyBuc19wYXJzZXJyOiAlc1xuIiwKKwkJCQkJc3RyZXJyb3IoZXJybm8pKTsKKwkJCWVsc2UgaWYgKHJybnVtID4gMCAmJiBzZmxhZyAhPSAwICYmCisJCQkJIChzdGF0cC0+cGZjb2RlICYgUkVTX1BSRl9IRUFEMSkpCisJCQkJcHV0YygnXG4nLCBmaWxlKTsKKwkJCWdvdG8gY2xlYW51cDsKKwkJfQorCQlpZiAocnJudW0gPT0gMCAmJiBzZmxhZyAhPSAwICYmIChzdGF0cC0+cGZjb2RlICYgUkVTX1BSRl9IRUFEMSkpCisJCQlmcHJpbnRmKGZpbGUsICI7OyAlcyBTRUNUSU9OOlxuIiwKKwkJCQlwX3NlY3Rpb24oc2VjdGlvbiwgb3Bjb2RlKSk7CisJCWlmIChzZWN0aW9uID09IG5zX3NfcWQpCisJCQlmcHJpbnRmKGZpbGUsICI7O1x0JXMsIHR5cGUgPSAlcywgY2xhc3MgPSAlc1xuIiwKKwkJCQluc19ycl9uYW1lKHJyKSwKKwkJCQlwX3R5cGUobnNfcnJfdHlwZShycikpLAorCQkJCXBfY2xhc3MobnNfcnJfY2xhc3MocnIpKSk7CisJCWVsc2UgaWYgKHNlY3Rpb24gPT0gbnNfc19hciAmJiBuc19ycl90eXBlKHJyKSA9PSBuc190X29wdCkgeworCQkJdV9pbnQzMl90IHR0bCA9IG5zX3JyX3R0bChycik7CisJCQlmcHJpbnRmKGZpbGUsCisJCQkJIjsgRUROUzogdmVyc2lvbjogJXUsIHVkcD0ldSwgZmxhZ3M9JTA0eFxuIiwKKwkJCQkodHRsPj4xNikmMHhmZiwgbnNfcnJfY2xhc3MocnIpLCB0dGwmMHhmZmZmKTsKKwkJfSBlbHNlIHsKKwkJCW4gPSBuc19zcHJpbnRycihoYW5kbGUsICZyciwgTlVMTCwgTlVMTCwKKwkJCQkJYnVmLCAodV9pbnQpYnVmbGVuKTsKKwkJCWlmIChuIDwgMCkgeworCQkJCWlmIChlcnJubyA9PSBFTk9TUEMpIHsKKwkJCQkJZnJlZShidWYpOworCQkJCQlidWYgPSBOVUxMOworCQkJCQlpZiAoYnVmbGVuIDwgMTMxMDcyKQorCQkJCQkJYnVmID0gbWFsbG9jKChzaXplX3QpKGJ1ZmxlbiArPSAxMDI0KSk7CisJCQkJCWlmIChidWYgPT0gTlVMTCkgeworCQkJCQkJZnByaW50ZihmaWxlLAorCQkJCSAgICAgICAgICAgICAgIjs7IG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVcbiIpOworCQkJCQkgICAgICByZXR1cm47CisJCQkJCX0KKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCWZwcmludGYoZmlsZSwgIjs7IG5zX3NwcmludHJyOiAlc1xuIiwKKwkJCQkJc3RyZXJyb3IoZXJybm8pKTsKKwkJCQlnb3RvIGNsZWFudXA7CisJCQl9CisJCQlmcHV0cyhidWYsIGZpbGUpOworCQkJZnB1dGMoJ1xuJywgZmlsZSk7CisJCX0KKwkJcnJudW0rKzsKKwl9CisgY2xlYW51cDoKKwlpZiAoYnVmICE9IE5VTEwpCisJCWZyZWUoYnVmKTsKK30KKworLyoKKyAqIFByaW50IHRoZSBjb250ZW50cyBvZiBhIHF1ZXJ5LgorICogVGhpcyBpcyBpbnRlbmRlZCB0byBiZSBwcmltYXJpbHkgYSBkZWJ1Z2dpbmcgcm91dGluZS4KKyAqLwordm9pZAorcmVzX3BxdWVyeShjb25zdCByZXNfc3RhdGUgc3RhdHAsIGNvbnN0IHVfY2hhciAqbXNnLCBpbnQgbGVuLCBGSUxFICpmaWxlKSB7CisJbnNfbXNnIGhhbmRsZTsKKwlpbnQgcWRjb3VudCwgYW5jb3VudCwgbnNjb3VudCwgYXJjb3VudDsKKwl1X2ludCBvcGNvZGUsIHJjb2RlLCBpZDsKKworCWlmIChuc19pbml0cGFyc2UobXNnLCBsZW4sICZoYW5kbGUpIDwgMCkgeworCQlmcHJpbnRmKGZpbGUsICI7OyBuc19pbml0cGFyc2U6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworCQlyZXR1cm47CisJfQorCW9wY29kZSA9IG5zX21zZ19nZXRmbGFnKGhhbmRsZSwgbnNfZl9vcGNvZGUpOworCXJjb2RlID0gbnNfbXNnX2dldGZsYWcoaGFuZGxlLCBuc19mX3Jjb2RlKTsKKwlpZCA9IG5zX21zZ19pZChoYW5kbGUpOworCXFkY291bnQgPSBuc19tc2dfY291bnQoaGFuZGxlLCBuc19zX3FkKTsKKwlhbmNvdW50ID0gbnNfbXNnX2NvdW50KGhhbmRsZSwgbnNfc19hbik7CisJbnNjb3VudCA9IG5zX21zZ19jb3VudChoYW5kbGUsIG5zX3NfbnMpOworCWFyY291bnQgPSBuc19tc2dfY291bnQoaGFuZGxlLCBuc19zX2FyKTsKKworCS8qCisJICogUHJpbnQgaGVhZGVyIGZpZWxkcy4KKwkgKi8KKwlpZiAoKCFzdGF0cC0+cGZjb2RlKSB8fCAoc3RhdHAtPnBmY29kZSAmIFJFU19QUkZfSEVBRFgpIHx8IHJjb2RlKQorCQlmcHJpbnRmKGZpbGUsCisJCQkiOzsgLT4+SEVBREVSPDwtIG9wY29kZTogJXMsIHN0YXR1czogJXMsIGlkOiAlZFxuIiwKKwkJCV9yZXNfb3Bjb2Rlc1tvcGNvZGVdLCBwX3Jjb2RlKChpbnQpcmNvZGUpLCBpZCk7CisJaWYgKCghc3RhdHAtPnBmY29kZSkgfHwgKHN0YXRwLT5wZmNvZGUgJiBSRVNfUFJGX0hFQURYKSkKKwkJcHV0YygnOycsIGZpbGUpOworCWlmICgoIXN0YXRwLT5wZmNvZGUpIHx8IChzdGF0cC0+cGZjb2RlICYgUkVTX1BSRl9IRUFEMikpIHsKKwkJZnByaW50ZihmaWxlLCAiOyBmbGFnczoiKTsKKwkJaWYgKG5zX21zZ19nZXRmbGFnKGhhbmRsZSwgbnNfZl9xcikpCisJCQlmcHJpbnRmKGZpbGUsICIgcXIiKTsKKwkJaWYgKG5zX21zZ19nZXRmbGFnKGhhbmRsZSwgbnNfZl9hYSkpCisJCQlmcHJpbnRmKGZpbGUsICIgYWEiKTsKKwkJaWYgKG5zX21zZ19nZXRmbGFnKGhhbmRsZSwgbnNfZl90YykpCisJCQlmcHJpbnRmKGZpbGUsICIgdGMiKTsKKwkJaWYgKG5zX21zZ19nZXRmbGFnKGhhbmRsZSwgbnNfZl9yZCkpCisJCQlmcHJpbnRmKGZpbGUsICIgcmQiKTsKKwkJaWYgKG5zX21zZ19nZXRmbGFnKGhhbmRsZSwgbnNfZl9yYSkpCisJCQlmcHJpbnRmKGZpbGUsICIgcmEiKTsKKwkJaWYgKG5zX21zZ19nZXRmbGFnKGhhbmRsZSwgbnNfZl96KSkKKwkJCWZwcmludGYoZmlsZSwgIiA/PyIpOworCQlpZiAobnNfbXNnX2dldGZsYWcoaGFuZGxlLCBuc19mX2FkKSkKKwkJCWZwcmludGYoZmlsZSwgIiBhZCIpOworCQlpZiAobnNfbXNnX2dldGZsYWcoaGFuZGxlLCBuc19mX2NkKSkKKwkJCWZwcmludGYoZmlsZSwgIiBjZCIpOworCX0KKwlpZiAoKCFzdGF0cC0+cGZjb2RlKSB8fCAoc3RhdHAtPnBmY29kZSAmIFJFU19QUkZfSEVBRDEpKSB7CisJCWZwcmludGYoZmlsZSwgIjsgJXM6ICVkIiwKKwkJCXBfc2VjdGlvbihuc19zX3FkLCAoaW50KW9wY29kZSksIHFkY291bnQpOworCQlmcHJpbnRmKGZpbGUsICIsICVzOiAlZCIsCisJCQlwX3NlY3Rpb24obnNfc19hbiwgKGludClvcGNvZGUpLCBhbmNvdW50KTsKKwkJZnByaW50ZihmaWxlLCAiLCAlczogJWQiLAorCQkJcF9zZWN0aW9uKG5zX3NfbnMsIChpbnQpb3Bjb2RlKSwgbnNjb3VudCk7CisJCWZwcmludGYoZmlsZSwgIiwgJXM6ICVkIiwKKwkJCXBfc2VjdGlvbihuc19zX2FyLCAoaW50KW9wY29kZSksIGFyY291bnQpOworCX0KKwlpZiAoKCFzdGF0cC0+cGZjb2RlKSB8fCAoc3RhdHAtPnBmY29kZSAmCisJCShSRVNfUFJGX0hFQURYIHwgUkVTX1BSRl9IRUFEMiB8IFJFU19QUkZfSEVBRDEpKSkgeworCQlwdXRjKCdcbicsZmlsZSk7CisJfQorCS8qCisJICogUHJpbnQgdGhlIHZhcmlvdXMgc2VjdGlvbnMuCisJICovCisJZG9fc2VjdGlvbihzdGF0cCwgJmhhbmRsZSwgbnNfc19xZCwgUkVTX1BSRl9RVUVTLCBmaWxlKTsKKwlkb19zZWN0aW9uKHN0YXRwLCAmaGFuZGxlLCBuc19zX2FuLCBSRVNfUFJGX0FOUywgZmlsZSk7CisJZG9fc2VjdGlvbihzdGF0cCwgJmhhbmRsZSwgbnNfc19ucywgUkVTX1BSRl9BVVRILCBmaWxlKTsKKwlkb19zZWN0aW9uKHN0YXRwLCAmaGFuZGxlLCBuc19zX2FyLCBSRVNfUFJGX0FERCwgZmlsZSk7CisJaWYgKHFkY291bnQgPT0gMCAmJiBhbmNvdW50ID09IDAgJiYKKwkgICAgbnNjb3VudCA9PSAwICYmIGFyY291bnQgPT0gMCkKKwkJcHV0YygnXG4nLCBmaWxlKTsKK30KKworY29uc3QgdV9jaGFyICoKK3BfY2RubmFtZShjb25zdCB1X2NoYXIgKmNwLCBjb25zdCB1X2NoYXIgKm1zZywgaW50IGxlbiwgRklMRSAqZmlsZSkgeworCWNoYXIgbmFtZVtNQVhETkFNRV07CisJaW50IG47CisKKwlpZiAoKG4gPSBkbl9leHBhbmQobXNnLCBtc2cgKyBsZW4sIGNwLCBuYW1lLCBzaXplb2YgbmFtZSkpIDwgMCkKKwkJcmV0dXJuIChOVUxMKTsKKwlpZiAobmFtZVswXSA9PSAnXDAnKQorCQlwdXRjKCcuJywgZmlsZSk7CisJZWxzZQorCQlmcHV0cyhuYW1lLCBmaWxlKTsKKwlyZXR1cm4gKGNwICsgbik7Cit9CisKK2NvbnN0IHVfY2hhciAqCitwX2NkbmFtZShjb25zdCB1X2NoYXIgKmNwLCBjb25zdCB1X2NoYXIgKm1zZywgRklMRSAqZmlsZSkgeworCXJldHVybiAocF9jZG5uYW1lKGNwLCBtc2csIFBBQ0tFVFNaLCBmaWxlKSk7Cit9CisKKy8qIFJldHVybiBhIGZ1bGx5LXF1YWxpZmllZCBkb21haW4gbmFtZSBmcm9tIGEgY29tcHJlc3NlZCBuYW1lICh3aXRoCisgICBsZW5ndGggc3VwcGxpZWQpLiAgKi8KKworY29uc3QgdV9jaGFyICoKK3BfZnFubmFtZShjcCwgbXNnLCBtc2dsZW4sIG5hbWUsIG5hbWVsZW4pCisJY29uc3QgdV9jaGFyICpjcCwgKm1zZzsKKwlpbnQgbXNnbGVuOworCWNoYXIgKm5hbWU7CisJaW50IG5hbWVsZW47Cit7CisJaW50IG4sIG5ld2xlbjsKKworCWlmICgobiA9IGRuX2V4cGFuZChtc2csIGNwICsgbXNnbGVuLCBjcCwgbmFtZSwgbmFtZWxlbikpIDwgMCkKKwkJcmV0dXJuIChOVUxMKTsKKwluZXdsZW4gPSBzdHJsZW4obmFtZSk7CisJaWYgKG5ld2xlbiA9PSAwIHx8IG5hbWVbbmV3bGVuIC0gMV0gIT0gJy4nKSB7CisJCWlmIChuZXdsZW4gKyAxID49IG5hbWVsZW4pCS8qIExhY2sgc3BhY2UgZm9yIGZpbmFsIGRvdCAqLworCQkJcmV0dXJuIChOVUxMKTsKKwkJZWxzZQorCQkJc3RyY3B5KG5hbWUgKyBuZXdsZW4sICIuIik7CisJfQorCXJldHVybiAoY3AgKyBuKTsKK30KKworLyogWFhYOgl0aGUgcmVzdCBvZiB0aGVzZSBmdW5jdGlvbnMgbmVlZCB0byBiZWNvbWUgbGVuZ3RoLWxpbWl0ZWQsIHRvby4gKi8KKworY29uc3QgdV9jaGFyICoKK3BfZnFuYW1lKGNvbnN0IHVfY2hhciAqY3AsIGNvbnN0IHVfY2hhciAqbXNnLCBGSUxFICpmaWxlKSB7CisJY2hhciBuYW1lW01BWEROQU1FXTsKKwljb25zdCB1X2NoYXIgKm47CisKKwluID0gcF9mcW5uYW1lKGNwLCBtc2csIE1BWENETkFNRSwgbmFtZSwgc2l6ZW9mIG5hbWUpOworCWlmIChuID09IE5VTEwpCisJCXJldHVybiAoTlVMTCk7CisJZnB1dHMobmFtZSwgZmlsZSk7CisJcmV0dXJuIChuKTsKK30KKworLyoKKyAqIE5hbWVzIG9mIFJSIGNsYXNzZXMgYW5kIHFjbGFzc2VzLiAgQ2xhc3NlcyBhbmQgcWNsYXNzZXMgYXJlIHRoZSBzYW1lLCBleGNlcHQKKyAqIHRoYXQgQ19BTlkgaXMgYSBxY2xhc3MgYnV0IG5vdCBhIGNsYXNzLiAgKFlvdSBjYW4gYXNrIGZvciByZWNvcmRzIG9mIGNsYXNzCisgKiBDX0FOWSwgYnV0IHlvdSBjYW4ndCBoYXZlIGFueSByZWNvcmRzIG9mIHRoYXQgY2xhc3MgaW4gdGhlIGRhdGFiYXNlLikKKyAqLworY29uc3Qgc3RydWN0IHJlc19zeW0gX19wX2NsYXNzX3N5bXNbXSA9IHsKKwl7Q19JTiwJCSJJTiIsCQkoY2hhciAqKTB9LAorCXtDX0NIQU9TLAkiQ0giLAkJKGNoYXIgKikwfSwKKwl7Q19DSEFPUywJIkNIQU9TIiwJKGNoYXIgKikwfSwKKwl7Q19IUywJCSJIUyIsCQkoY2hhciAqKTB9LAorCXtDX0hTLAkJIkhFU0lPRCIsCShjaGFyICopMH0sCisJe0NfQU5ZLAkJIkFOWSIsCQkoY2hhciAqKTB9LAorCXtDX05PTkUsCSJOT05FIiwJCShjaGFyICopMH0sCisJe0NfSU4sIAkJKGNoYXIgKikwLAkoY2hhciAqKTB9Cit9OworCisvKgorICogTmFtZXMgb2YgbWVzc2FnZSBzZWN0aW9ucy4KKyAqLworY29uc3Qgc3RydWN0IHJlc19zeW0gX19wX2RlZmF1bHRfc2VjdGlvbl9zeW1zW10gPSB7CisJe25zX3NfcWQsCSJRVUVSWSIsCShjaGFyICopMH0sCisJe25zX3NfYW4sCSJBTlNXRVIiLAkoY2hhciAqKTB9LAorCXtuc19zX25zLAkiQVVUSE9SSVRZIiwJKGNoYXIgKikwfSwKKwl7bnNfc19hciwJIkFERElUSU9OQUwiLAkoY2hhciAqKTB9LAorCXswLCAgICAgICAgICAgICAoY2hhciAqKTAsCShjaGFyICopMH0KK307CisKK2NvbnN0IHN0cnVjdCByZXNfc3ltIF9fcF91cGRhdGVfc2VjdGlvbl9zeW1zW10gPSB7CisJe1NfWk9ORSwJIlpPTkUiLAkJKGNoYXIgKikwfSwKKwl7U19QUkVSRVEsCSJQUkVSRVFVSVNJVEUiLAkoY2hhciAqKTB9LAorCXtTX1VQREFURSwJIlVQREFURSIsCShjaGFyICopMH0sCisJe1NfQUREVCwJIkFERElUSU9OQUwiLAkoY2hhciAqKTB9LAorCXswLCAgICAgICAgICAgICAoY2hhciAqKTAsCShjaGFyICopMH0KK307CisKK2NvbnN0IHN0cnVjdCByZXNfc3ltIF9fcF9rZXlfc3ltc1tdID0geworCXtOU19BTEdfTUQ1UlNBLAkJIlJTQSIsCQkiUlNBIEtFWSB3aXRoIE1ENSBoYXNoIn0sCisJe05TX0FMR19ESCwJCSJESCIsCQkiRGlmZmllIEhlbGxtYW4ifSwKKwl7TlNfQUxHX0RTQSwJCSJEU0EiLAkJIkRpZ2l0YWwgU2lnbmF0dXJlIEFsZ29yaXRobSJ9LAorCXtOU19BTEdfRVhQSVJFX09OTFksCSJFWFBJUkVPTkxZIiwJIk5vIGFsZ29yaXRobSJ9LAorCXtOU19BTEdfUFJJVkFURV9PSUQsCSJQUklWQVRFIiwJIkFsZ29yaXRobSBvYnRhaW5lZCBmcm9tIE9JRCJ9LAorCXswLAkJCU5VTEwsCQlOVUxMfQorfTsKKworY29uc3Qgc3RydWN0IHJlc19zeW0gX19wX2NlcnRfc3ltc1tdID0geworCXtjZXJ0X3RfcGtpeCwJIlBLSVgiLAkJIlBLSVggKFguNTA5djMpIENlcnRpZmljYXRlIn0sCisJe2NlcnRfdF9zcGtpLAkiU1BLSSIsCQkiU1BLSSBjZXJ0aWZpY2F0ZSJ9LAorCXtjZXJ0X3RfcGdwLAkiUEdQIiwJCSJQR1AgY2VydGlmaWNhdGUifSwKKwl7Y2VydF90X3VybCwJIlVSTCIsCQkiVVJMIFByaXZhdGUifSwKKwl7Y2VydF90X29pZCwJIk9JRCIsCQkiT0lEIFByaXZhdGUifSwKKwl7MCwJCU5VTEwsCQlOVUxMfQorfTsKKworLyoKKyAqIE5hbWVzIG9mIFJSIHR5cGVzIGFuZCBxdHlwZXMuICBUeXBlcyBhbmQgcXR5cGVzIGFyZSB0aGUgc2FtZSwgZXhjZXB0CisgKiB0aGF0IFRfQU5ZIGlzIGEgcXR5cGUgYnV0IG5vdCBhIHR5cGUuICAoWW91IGNhbiBhc2sgZm9yIHJlY29yZHMgb2YgdHlwZQorICogVF9BTlksIGJ1dCB5b3UgY2FuJ3QgaGF2ZSBhbnkgcmVjb3JkcyBvZiB0aGF0IHR5cGUgaW4gdGhlIGRhdGFiYXNlLikKKyAqLworY29uc3Qgc3RydWN0IHJlc19zeW0gX19wX3R5cGVfc3ltc1tdID0geworCXtuc190X2EsCSJBIiwJCSJhZGRyZXNzIn0sCisJe25zX3RfbnMsCSJOUyIsCQkibmFtZSBzZXJ2ZXIifSwKKwl7bnNfdF9tZCwJIk1EIiwJCSJtYWlsIGRlc3RpbmF0aW9uIChkZXByZWNhdGVkKSJ9LAorCXtuc190X21mLAkiTUYiLAkJIm1haWwgZm9yd2FyZGVyIChkZXByZWNhdGVkKSJ9LAorCXtuc190X2NuYW1lLAkiQ05BTUUiLAkiY2Fub25pY2FsIG5hbWUifSwKKwl7bnNfdF9zb2EsCSJTT0EiLAkJInN0YXJ0IG9mIGF1dGhvcml0eSJ9LAorCXtuc190X21iLAkiTUIiLAkJIm1haWxib3gifSwKKwl7bnNfdF9tZywJIk1HIiwJCSJtYWlsIGdyb3VwIG1lbWJlciJ9LAorCXtuc190X21yLAkiTVIiLAkJIm1haWwgcmVuYW1lIn0sCisJe25zX3RfbnVsbCwJIk5VTEwiLAkJIm51bGwifSwKKwl7bnNfdF93a3MsCSJXS1MiLAkJIndlbGwta25vd24gc2VydmljZSAoZGVwcmVjYXRlZCkifSwKKwl7bnNfdF9wdHIsCSJQVFIiLAkJImRvbWFpbiBuYW1lIHBvaW50ZXIifSwKKwl7bnNfdF9oaW5mbywJIkhJTkZPIiwJImhvc3QgaW5mb3JtYXRpb24ifSwKKwl7bnNfdF9taW5mbywJIk1JTkZPIiwJIm1haWxib3ggaW5mb3JtYXRpb24ifSwKKwl7bnNfdF9teCwJIk1YIiwJCSJtYWlsIGV4Y2hhbmdlciJ9LAorCXtuc190X3R4dCwJIlRYVCIsCQkidGV4dCJ9LAorCXtuc190X3JwLAkiUlAiLAkJInJlc3BvbnNpYmxlIHBlcnNvbiJ9LAorCXtuc190X2Fmc2RiLAkiQUZTREIiLAkiRENFIG9yIEFGUyBzZXJ2ZXIifSwKKwl7bnNfdF94MjUsCSJYMjUiLAkJIlgyNSBhZGRyZXNzIn0sCisJe25zX3RfaXNkbiwJIklTRE4iLAkJIklTRE4gYWRkcmVzcyJ9LAorCXtuc190X3J0LAkiUlQiLAkJInJvdXRlciJ9LAorCXtuc190X25zYXAsCSJOU0FQIiwJCSJuc2FwIGFkZHJlc3MifSwKKwl7bnNfdF9uc2FwX3B0ciwJIk5TQVBfUFRSIiwJImRvbWFpbiBuYW1lIHBvaW50ZXIifSwKKwl7bnNfdF9zaWcsCSJTSUciLAkJInNpZ25hdHVyZSJ9LAorCXtuc190X2tleSwJIktFWSIsCQkia2V5In0sCisJe25zX3RfcHgsCSJQWCIsCQkibWFwcGluZyBpbmZvcm1hdGlvbiJ9LAorCXtuc190X2dwb3MsCSJHUE9TIiwJCSJnZW9ncmFwaGljYWwgcG9zaXRpb24gKHdpdGhkcmF3bikifSwKKwl7bnNfdF9hYWFhLAkiQUFBQSIsCQkiSVB2NiBhZGRyZXNzIn0sCisJe25zX3RfbG9jLAkiTE9DIiwJCSJsb2NhdGlvbiJ9LAorCXtuc190X254dCwJIk5YVCIsCQkibmV4dCB2YWxpZCBuYW1lICh1bmltcGxlbWVudGVkKSJ9LAorCXtuc190X2VpZCwJIkVJRCIsCQkiZW5kcG9pbnQgaWRlbnRpZmllciAodW5pbXBsZW1lbnRlZCkifSwKKwl7bnNfdF9uaW1sb2MsCSJOSU1MT0MiLAkiTklNUk9EIGxvY2F0b3IgKHVuaW1wbGVtZW50ZWQpIn0sCisJe25zX3Rfc3J2LAkiU1JWIiwJCSJzZXJ2ZXIgc2VsZWN0aW9uIn0sCisJe25zX3RfYXRtYSwJIkFUTUEiLAkJIkFUTSBhZGRyZXNzICh1bmltcGxlbWVudGVkKSJ9LAorCXtuc190X3RrZXksCSJUS0VZIiwJCSJ0a2V5In0sCisJe25zX3RfdHNpZywJIlRTSUciLAkJInRyYW5zYWN0aW9uIHNpZ25hdHVyZSJ9LAorCXtuc190X2l4ZnIsCSJJWEZSIiwJCSJpbmNyZW1lbnRhbCB6b25lIHRyYW5zZmVyIn0sCisJe25zX3RfYXhmciwJIkFYRlIiLAkJInpvbmUgdHJhbnNmZXIifSwKKwl7bnNfdF96eGZyLAkiWlhGUiIsCQkiY29tcHJlc3NlZCB6b25lIHRyYW5zZmVyIn0sCisJe25zX3RfbWFpbGIsCSJNQUlMQiIsCSJtYWlsYm94LXJlbGF0ZWQgZGF0YSAoZGVwcmVjYXRlZCkifSwKKwl7bnNfdF9tYWlsYSwJIk1BSUxBIiwJIm1haWwgYWdlbnQgKGRlcHJlY2F0ZWQpIn0sCisJe25zX3RfbmFwdHIsCSJOQVBUUiIsCSJVUk4gTmFtaW5nIEF1dGhvcml0eSJ9LAorCXtuc190X2t4LAkiS1giLAkJIktleSBFeGNoYW5nZSJ9LAorCXtuc190X2NlcnQsCSJDRVJUIiwJCSJDZXJ0aWZpY2F0ZSJ9LAorCXtuc190X2E2LAkiQTYiLAkJIklQdjYgQWRkcmVzcyJ9LAorCXtuc190X2RuYW1lLAkiRE5BTUUiLAkiZG5hbWUifSwKKwl7bnNfdF9zaW5rLAkiU0lOSyIsCQkiS2l0Y2hlbiBTaW5rIChleHBlcmltZW50YWwpIn0sCisJe25zX3Rfb3B0LAkiT1BUIiwJCSJFRE5TIE9wdGlvbnMifSwKKwl7bnNfdF9hbnksCSJBTlkiLAkJIlwiYW55XCIifSwKKwl7MCwgCQlOVUxMLAkJTlVMTH0KK307CisKKy8qCisgKiBOYW1lcyBvZiBETlMgcmNvZGVzLgorICovCitjb25zdCBzdHJ1Y3QgcmVzX3N5bSBfX3BfcmNvZGVfc3ltc1tdID0geworCXtuc19yX25vZXJyb3IsCSJOT0VSUk9SIiwJCSJubyBlcnJvciJ9LAorCXtuc19yX2Zvcm1lcnIsCSJGT1JNRVJSIiwJCSJmb3JtYXQgZXJyb3IifSwKKwl7bnNfcl9zZXJ2ZmFpbCwJIlNFUlZGQUlMIiwJCSJzZXJ2ZXIgZmFpbGVkIn0sCisJe25zX3Jfbnhkb21haW4sCSJOWERPTUFJTiIsCQkibm8gc3VjaCBkb21haW4gbmFtZSJ9LAorCXtuc19yX25vdGltcGwsCSJOT1RJTVAiLAkJIm5vdCBpbXBsZW1lbnRlZCJ9LAorCXtuc19yX3JlZnVzZWQsCSJSRUZVU0VEIiwJCSJyZWZ1c2VkIn0sCisJe25zX3JfeXhkb21haW4sCSJZWERPTUFJTiIsCQkiZG9tYWluIG5hbWUgZXhpc3RzIn0sCisJe25zX3JfeXhycnNldCwJIllYUlJTRVQiLAkJInJyc2V0IGV4aXN0cyJ9LAorCXtuc19yX254cnJzZXQsCSJOWFJSU0VUIiwJCSJycnNldCBkb2Vzbid0IGV4aXN0In0sCisJe25zX3Jfbm90YXV0aCwJIk5PVEFVVEgiLAkJIm5vdCBhdXRob3JpdGF0aXZlIn0sCisJe25zX3Jfbm90em9uZSwJIk5PVFpPTkUiLAkJIk5vdCBpbiB6b25lIn0sCisJe25zX3JfbWF4LAkiIiwJCQkiIn0sCisJe25zX3JfYmFkc2lnLAkiQkFEU0lHIiwJCSJiYWQgc2lnbmF0dXJlIn0sCisJe25zX3JfYmFka2V5LAkiQkFES0VZIiwJCSJiYWQga2V5In0sCisJe25zX3JfYmFkdGltZSwJIkJBRFRJTUUiLAkJImJhZCB0aW1lIn0sCisJezAsIAkJTlVMTCwJCQlOVUxMfQorfTsKKworaW50CitzeW1fc3Rvbihjb25zdCBzdHJ1Y3QgcmVzX3N5bSAqc3ltcywgY29uc3QgY2hhciAqbmFtZSwgaW50ICpzdWNjZXNzKSB7CisJZm9yICg7IHN5bXMtPm5hbWUgIT0gMDsgc3ltcysrKSB7CisJCWlmIChzdHJjYXNlY21wIChuYW1lLCBzeW1zLT5uYW1lKSA9PSAwKSB7CisJCQlpZiAoc3VjY2VzcykKKwkJCQkqc3VjY2VzcyA9IDE7CisJCQlyZXR1cm4gKHN5bXMtPm51bWJlcik7CisJCX0KKwl9CisJaWYgKHN1Y2Nlc3MpCisJCSpzdWNjZXNzID0gMDsKKwlyZXR1cm4gKHN5bXMtPm51bWJlcik7CQkvKiBUaGUgZGVmYXVsdCB2YWx1ZS4gKi8KK30KKworY29uc3QgY2hhciAqCitzeW1fbnRvcyhjb25zdCBzdHJ1Y3QgcmVzX3N5bSAqc3ltcywgaW50IG51bWJlciwgaW50ICpzdWNjZXNzKSB7CisJc3RhdGljIGNoYXIgdW5uYW1lWzIwXTsKKworCWZvciAoOyBzeW1zLT5uYW1lICE9IDA7IHN5bXMrKykgeworCQlpZiAobnVtYmVyID09IHN5bXMtPm51bWJlcikgeworCQkJaWYgKHN1Y2Nlc3MpCisJCQkJKnN1Y2Nlc3MgPSAxOworCQkJcmV0dXJuIChzeW1zLT5uYW1lKTsKKwkJfQorCX0KKworCXNwcmludGYodW5uYW1lLCAiJWQiLCBudW1iZXIpOwkJLyogWFhYIG5vbnJlZW50cmFudCAqLworCWlmIChzdWNjZXNzKQorCQkqc3VjY2VzcyA9IDA7CisJcmV0dXJuICh1bm5hbWUpOworfQorCitjb25zdCBjaGFyICoKK3N5bV9udG9wKGNvbnN0IHN0cnVjdCByZXNfc3ltICpzeW1zLCBpbnQgbnVtYmVyLCBpbnQgKnN1Y2Nlc3MpIHsKKwlzdGF0aWMgY2hhciB1bm5hbWVbMjBdOworCisJZm9yICg7IHN5bXMtPm5hbWUgIT0gMDsgc3ltcysrKSB7CisJCWlmIChudW1iZXIgPT0gc3ltcy0+bnVtYmVyKSB7CisJCQlpZiAoc3VjY2VzcykKKwkJCQkqc3VjY2VzcyA9IDE7CisJCQlyZXR1cm4gKHN5bXMtPmh1bWFubmFtZSk7CisJCX0KKwl9CisJc3ByaW50Zih1bm5hbWUsICIlZCIsIG51bWJlcik7CQkvKiBYWFggbm9ucmVlbnRyYW50ICovCisJaWYgKHN1Y2Nlc3MpCisJCSpzdWNjZXNzID0gMDsKKwlyZXR1cm4gKHVubmFtZSk7Cit9CisKKy8qCisgKiBSZXR1cm4gYSBzdHJpbmcgZm9yIHRoZSB0eXBlLgorICovCitjb25zdCBjaGFyICoKK3BfdHlwZShpbnQgdHlwZSkgeworCWludCBzdWNjZXNzOworCWNvbnN0IGNoYXIgKnJlc3VsdDsKKwlzdGF0aWMgY2hhciB0eXBlYnVmWzIwXTsKKworCXJlc3VsdCA9IHN5bV9udG9zKF9fcF90eXBlX3N5bXMsIHR5cGUsICZzdWNjZXNzKTsKKwlpZiAoc3VjY2VzcykKKwkJcmV0dXJuIChyZXN1bHQpOworCWlmICh0eXBlIDwgMCB8fCB0eXBlID4gMHhmZmZmKQorCQlyZXR1cm4gKCJCQURUWVBFIik7CisJc3ByaW50Zih0eXBlYnVmLCAiVFlQRSVkIiwgdHlwZSk7CisJcmV0dXJuICh0eXBlYnVmKTsKK30KKworLyoKKyAqIFJldHVybiBhIHN0cmluZyBmb3IgdGhlIHR5cGUuCisgKi8KK2NvbnN0IGNoYXIgKgorcF9zZWN0aW9uKGludCBzZWN0aW9uLCBpbnQgb3Bjb2RlKSB7CisJY29uc3Qgc3RydWN0IHJlc19zeW0gKnN5bWJvbHM7CisKKwlzd2l0Y2ggKG9wY29kZSkgeworCWNhc2UgbnNfb191cGRhdGU6CisJCXN5bWJvbHMgPSBfX3BfdXBkYXRlX3NlY3Rpb25fc3ltczsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc3ltYm9scyA9IF9fcF9kZWZhdWx0X3NlY3Rpb25fc3ltczsKKwkJYnJlYWs7CisJfQorCXJldHVybiAoc3ltX250b3Moc3ltYm9scywgc2VjdGlvbiwgKGludCAqKTApKTsKK30KKworLyoKKyAqIFJldHVybiBhIG1uZW1vbmljIGZvciBjbGFzcy4KKyAqLworY29uc3QgY2hhciAqCitwX2NsYXNzKGludCBjbGFzcykgeworCWludCBzdWNjZXNzOworCWNvbnN0IGNoYXIgKnJlc3VsdDsKKwlzdGF0aWMgY2hhciBjbGFzc2J1ZlsyMF07CisKKwlyZXN1bHQgPSBzeW1fbnRvcyhfX3BfY2xhc3Nfc3ltcywgY2xhc3MsICZzdWNjZXNzKTsKKwlpZiAoc3VjY2VzcykKKwkJcmV0dXJuIChyZXN1bHQpOworCWlmIChjbGFzcyA8IDAgfHwgY2xhc3MgPiAweGZmZmYpCisJCXJldHVybiAoIkJBRENMQVNTIik7CisJc3ByaW50ZihjbGFzc2J1ZiwgIkNMQVNTJWQiLCBjbGFzcyk7CisJcmV0dXJuIChjbGFzc2J1Zik7Cit9CisKKy8qCisgKiBSZXR1cm4gYSBtbmVtb25pYyBmb3IgYW4gb3B0aW9uCisgKi8KK2NvbnN0IGNoYXIgKgorcF9vcHRpb24odV9sb25nIG9wdGlvbikgeworCXN0YXRpYyBjaGFyIG5idWZbNDBdOworCisJc3dpdGNoIChvcHRpb24pIHsKKwljYXNlIFJFU19JTklUOgkJcmV0dXJuICJpbml0IjsKKwljYXNlIFJFU19ERUJVRzoJCXJldHVybiAiZGVidWciOworCWNhc2UgUkVTX0FBT05MWToJcmV0dXJuICJhYW9ubHkodW5pbXBsKSI7CisJY2FzZSBSRVNfVVNFVkM6CQlyZXR1cm4gInVzZXZjIjsKKwljYXNlIFJFU19QUklNQVJZOglyZXR1cm4gInByaW1yeSh1bmltcGwpIjsKKwljYXNlIFJFU19JR05UQzoJCXJldHVybiAiaWdudGMiOworCWNhc2UgUkVTX1JFQ1VSU0U6CXJldHVybiAicmVjdXJzIjsKKwljYXNlIFJFU19ERUZOQU1FUzoJcmV0dXJuICJkZWZuYW0iOworCWNhc2UgUkVTX1NUQVlPUEVOOglyZXR1cm4gInN0eW9wbiI7CisJY2FzZSBSRVNfRE5TUkNIOglyZXR1cm4gImRuc3JjaCI7CisJY2FzZSBSRVNfSU5TRUNVUkUxOglyZXR1cm4gImluc2VjdXJlMSI7CisJY2FzZSBSRVNfSU5TRUNVUkUyOglyZXR1cm4gImluc2VjdXJlMiI7CisJY2FzZSBSRVNfTk9BTElBU0VTOglyZXR1cm4gIm5vYWxpYXNlcyI7CisJY2FzZSBSRVNfVVNFX0lORVQ2OglyZXR1cm4gImluZXQ2IjsKKyNpZmRlZiBSRVNfVVNFX0VETlMwCS8qIEtBTUUgZXh0ZW5zaW9uICovCisJY2FzZSBSRVNfVVNFX0VETlMwOglyZXR1cm4gImVkbnMwIjsKKyNlbmRpZgorI2lmZGVmIFJFU19VU0VfRE5BTUUKKwljYXNlIFJFU19VU0VfRE5BTUU6CXJldHVybiAiZG5hbWUiOworI2VuZGlmCisjaWZkZWYgUkVTX1VTRV9ETlNTRUMKKwljYXNlIFJFU19VU0VfRE5TU0VDOglyZXR1cm4gImRuc3NlYyI7CisjZW5kaWYKKyNpZmRlZiBSRVNfTk9UTERRVUVSWQorCWNhc2UgUkVTX05PVExEUVVFUlk6CXJldHVybiAibm8tdGxkLXF1ZXJ5IjsKKyNlbmRpZgorI2lmZGVmIFJFU19OT19OSUJCTEUyCisJY2FzZSBSRVNfTk9fTklCQkxFMjoJcmV0dXJuICJuby1uaWJibGUyIjsKKyNlbmRpZgorCQkJCS8qIFhYWCBub25yZWVudHJhbnQgKi8KKwlkZWZhdWx0OgkJc3ByaW50ZihuYnVmLCAiPzB4JWx4PyIsICh1X2xvbmcpb3B0aW9uKTsKKwkJCQlyZXR1cm4gKG5idWYpOworCX0KK30KKworLyoKKyAqIFJldHVybiBhIG1uZW1vbmljIGZvciBhIHRpbWUgdG8gbGl2ZS4KKyAqLworY29uc3QgY2hhciAqCitwX3RpbWUodV9pbnQzMl90IHZhbHVlKSB7CisJc3RhdGljIGNoYXIgbmJ1Zls0MF07CQkvKiBYWFggbm9ucmVlbnRyYW50ICovCisKKwlpZiAobnNfZm9ybWF0X3R0bCgodV9sb25nKXZhbHVlLCBuYnVmLCBzaXplb2YgbmJ1ZikgPCAwKQorCQlzcHJpbnRmKG5idWYsICIldSIsIHZhbHVlKTsKKwlyZXR1cm4gKG5idWYpOworfQorCisvKgorICogUmV0dXJuIGEgc3RyaW5nIGZvciB0aGUgcmNvZGUuCisgKi8KK2NvbnN0IGNoYXIgKgorcF9yY29kZShpbnQgcmNvZGUpIHsKKwlyZXR1cm4gKHN5bV9udG9zKF9fcF9yY29kZV9zeW1zLCByY29kZSwgKGludCAqKTApKTsKK30KKworLyoKKyAqIFJldHVybiBhIHN0cmluZyBmb3IgYSByZXNfc29ja2FkZHJfdW5pb24uCisgKi8KK2NvbnN0IGNoYXIgKgorcF9zb2NrdW4odW5pb24gcmVzX3NvY2thZGRyX3VuaW9uIHUsIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpIHsKKwljaGFyIHJldFtzaXplb2YgImZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmOjEyMy4xMjMuMTIzLjEyMyJdOworCisJc3dpdGNoICh1LnNpbi5zaW5fZmFtaWx5KSB7CisJY2FzZSBBRl9JTkVUOgorCQlpbmV0X250b3AoQUZfSU5FVCwgJnUuc2luLnNpbl9hZGRyLCByZXQsIHNpemVvZiByZXQpOworCQlicmVhazsKKyNpZmRlZiBIQVNfSU5FVDZfU1RSVUNUUworCWNhc2UgQUZfSU5FVDY6CisJCWluZXRfbnRvcChBRl9JTkVUNiwgJnUuc2luNi5zaW42X2FkZHIsIHJldCwgc2l6ZW9mIHJldCk7CisJCWJyZWFrOworI2VuZGlmCisJZGVmYXVsdDoKKwkJc3ByaW50ZihyZXQsICJbYWYlZF0iLCB1LnNpbi5zaW5fZmFtaWx5KTsKKwkJYnJlYWs7CisJfQorCWlmIChzaXplID4gMFUpIHsKKwkJc3RybmNweShidWYsIHJldCwgc2l6ZSAtIDEpOworCQlidWZbc2l6ZSAtIDFdID0gJzAnOworCX0KKwlyZXR1cm4gKGJ1Zik7Cit9CisKKy8qCisgKiByb3V0aW5lcyB0byBjb252ZXJ0IGJldHdlZW4gb24tdGhlLXdpcmUgUlIgZm9ybWF0IGFuZCB6b25lIGZpbGUgZm9ybWF0LgorICogRG9lcyBub3QgY29udGFpbiBjb252ZXJzaW9uIHRvL2Zyb20gZGVjaW1hbCBkZWdyZWVzOyBkaXZpZGUgb3IgbXVsdGlwbHkKKyAqIGJ5IDYwKjYwKjEwMDAgZm9yIHRoYXQuCisgKi8KKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBwb3dlcm9mdGVuWzEwXSA9IHsxLCAxMCwgMTAwLCAxMDAwLCAxMDAwMCwgMTAwMDAwLAorCQkJCSAgICAgIDEwMDAwMDAsMTAwMDAwMDAsMTAwMDAwMDAwLDEwMDAwMDAwMDB9OworCisvKiB0YWtlcyBhbiBYZVkgcHJlY2lzaW9uL3NpemUgdmFsdWUsIHJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24uICovCitzdGF0aWMgY29uc3QgY2hhciAqCitwcmVjc2l6ZV9udG9hKHByZWMpCisJdV9pbnQzMl90IHByZWM7Cit7CisJc3RhdGljIGNoYXIgcmV0YnVmW3NpemVvZiAiOTAwMDAwMDAuMDAiXTsJLyogWFhYIG5vbnJlZW50cmFudCAqLworCXVuc2lnbmVkIGxvbmcgdmFsOworCWludCBtYW50aXNzYSwgZXhwb25lbnQ7CisKKwltYW50aXNzYSA9IChpbnQpKChwcmVjID4+IDQpICYgMHgwZikgJSAxMDsKKwlleHBvbmVudCA9IChpbnQpKChwcmVjID4+IDApICYgMHgwZikgJSAxMDsKKworCXZhbCA9IG1hbnRpc3NhICogcG93ZXJvZnRlbltleHBvbmVudF07CisKKwkodm9pZCkgc3ByaW50ZihyZXRidWYsICIlbHUuJS4ybHUiLCB2YWwvMTAwLCB2YWwlMTAwKTsKKwlyZXR1cm4gKHJldGJ1Zik7Cit9CisKKy8qIGNvbnZlcnRzIGFzY2lpIHNpemUvcHJlY2lzaW9uIFggKiAxMCoqWShjbSkgdG8gMHhYWS4gIG1vdmVzIHBvaW50ZXIuICovCitzdGF0aWMgdV9pbnQ4X3QKK3ByZWNzaXplX2F0b24oY29uc3QgY2hhciAqKnN0cnB0cikgeworCXVuc2lnbmVkIGludCBtdmFsID0gMCwgY212YWwgPSAwOworCXVfaW50OF90IHJldHZhbCA9IDA7CisJY29uc3QgY2hhciAqY3A7CisJaW50IGV4cG9uZW50OworCWludCBtYW50aXNzYTsKKworCWNwID0gKnN0cnB0cjsKKworCXdoaWxlIChpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSpjcCkpCisJCW12YWwgPSBtdmFsICogMTAgKyAoKmNwKysgLSAnMCcpOworCisJaWYgKCpjcCA9PSAnLicpIHsJCS8qIGNlbnRpbWV0ZXJzICovCisJCWNwKys7CisJCWlmIChpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSpjcCkpIHsKKwkJCWNtdmFsID0gKCpjcCsrIC0gJzAnKSAqIDEwOworCQkJaWYgKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKmNwKSkgeworCQkJCWNtdmFsICs9ICgqY3ArKyAtICcwJyk7CisJCQl9CisJCX0KKwl9CisJY212YWwgPSAobXZhbCAqIDEwMCkgKyBjbXZhbDsKKworCWZvciAoZXhwb25lbnQgPSAwOyBleHBvbmVudCA8IDk7IGV4cG9uZW50KyspCisJCWlmIChjbXZhbCA8IHBvd2Vyb2Z0ZW5bZXhwb25lbnQrMV0pCisJCQlicmVhazsKKworCW1hbnRpc3NhID0gY212YWwgLyBwb3dlcm9mdGVuW2V4cG9uZW50XTsKKwlpZiAobWFudGlzc2EgPiA5KQorCQltYW50aXNzYSA9IDk7CisKKwlyZXR2YWwgPSAobWFudGlzc2EgPDwgNCkgfCBleHBvbmVudDsKKworCSpzdHJwdHIgPSBjcDsKKworCXJldHVybiAocmV0dmFsKTsKK30KKworLyogY29udmVydHMgYXNjaWkgbGF0L2xvbiB0byB1bnNpZ25lZCBlbmNvZGVkIDMyLWJpdCBudW1iZXIuICBtb3ZlcyBwb2ludGVyLiAqLworc3RhdGljIHVfaW50MzJfdAorbGF0bG9uMnVsKGNvbnN0IGNoYXIgKipsYXRsb25zdHJwdHIsIGludCAqd2hpY2gpIHsKKwljb25zdCBjaGFyICpjcDsKKwl1X2ludDMyX3QgcmV0dmFsOworCWludCBkZWcgPSAwLCBtaW4gPSAwLCBzZWNzID0gMCwgc2Vjc2ZyYWMgPSAwOworCisJY3AgPSAqbGF0bG9uc3RycHRyOworCisJd2hpbGUgKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKmNwKSkKKwkJZGVnID0gZGVnICogMTAgKyAoKmNwKysgLSAnMCcpOworCisJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmNwKSkKKwkJY3ArKzsKKworCWlmICghKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKmNwKSkpCisJCWdvdG8gZm5kaGVtaTsKKworCXdoaWxlIChpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSpjcCkpCisJCW1pbiA9IG1pbiAqIDEwICsgKCpjcCsrIC0gJzAnKTsKKworCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpjcCkpCisJCWNwKys7CisKKwlpZiAoIShpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSpjcCkpKQorCQlnb3RvIGZuZGhlbWk7CisKKwl3aGlsZSAoaXNkaWdpdCgodW5zaWduZWQgY2hhcikqY3ApKQorCQlzZWNzID0gc2VjcyAqIDEwICsgKCpjcCsrIC0gJzAnKTsKKworCWlmICgqY3AgPT0gJy4nKSB7CQkvKiBkZWNpbWFsIHNlY29uZHMgKi8KKwkJY3ArKzsKKwkJaWYgKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKmNwKSkgeworCQkJc2Vjc2ZyYWMgPSAoKmNwKysgLSAnMCcpICogMTAwOworCQkJaWYgKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKmNwKSkgeworCQkJCXNlY3NmcmFjICs9ICgqY3ArKyAtICcwJykgKiAxMDsKKwkJCQlpZiAoaXNkaWdpdCgodW5zaWduZWQgY2hhcikqY3ApKSB7CisJCQkJCXNlY3NmcmFjICs9ICgqY3ArKyAtICcwJyk7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJd2hpbGUgKCFpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpjcCkpCS8qIGlmIGFueSB0cmFpbGluZyBnYXJiYWdlICovCisJCWNwKys7CisKKwl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqY3ApKQorCQljcCsrOworCisgZm5kaGVtaToKKwlzd2l0Y2ggKCpjcCkgeworCWNhc2UgJ04nOiBjYXNlICduJzoKKwljYXNlICdFJzogY2FzZSAnZSc6CisJCXJldHZhbCA9ICgodW5zaWduZWQpMTw8MzEpCisJCQkrICgoKCgoZGVnICogNjApICsgbWluKSAqIDYwKSArIHNlY3MpICogMTAwMCkKKwkJCSsgc2Vjc2ZyYWM7CisJCWJyZWFrOworCWNhc2UgJ1MnOiBjYXNlICdzJzoKKwljYXNlICdXJzogY2FzZSAndyc6CisJCXJldHZhbCA9ICgodW5zaWduZWQpMTw8MzEpCisJCQktICgoKCgoZGVnICogNjApICsgbWluKSAqIDYwKSArIHNlY3MpICogMTAwMCkKKwkJCS0gc2Vjc2ZyYWM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHZhbCA9IDA7CS8qIGludmFsaWQgdmFsdWUgLS0gaW5kaWNhdGVzIGVycm9yICovCisJCWJyZWFrOworCX0KKworCXN3aXRjaCAoKmNwKSB7CisJY2FzZSAnTic6IGNhc2UgJ24nOgorCWNhc2UgJ1MnOiBjYXNlICdzJzoKKwkJKndoaWNoID0gMTsJLyogbGF0aXR1ZGUgKi8KKwkJYnJlYWs7CisJY2FzZSAnRSc6IGNhc2UgJ2UnOgorCWNhc2UgJ1cnOiBjYXNlICd3JzoKKwkJKndoaWNoID0gMjsJLyogbG9uZ2l0dWRlICovCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCSp3aGljaCA9IDA7CS8qIGVycm9yICovCisJCWJyZWFrOworCX0KKworCWNwKys7CQkJLyogc2tpcCB0aGUgaGVtaXNwaGVyZSAqLworCisJd2hpbGUgKCFpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpjcCkpCS8qIGlmIGFueSB0cmFpbGluZyBnYXJiYWdlICovCisJCWNwKys7CisKKwl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqY3ApKQkvKiBtb3ZlIHRvIG5leHQgZmllbGQgKi8KKwkJY3ArKzsKKworCSpsYXRsb25zdHJwdHIgPSBjcDsKKworCXJldHVybiAocmV0dmFsKTsKK30KKworLyogY29udmVydHMgYSB6b25lIGZpbGUgcmVwcmVzZW50YXRpb24gaW4gYSBzdHJpbmcgdG8gYW4gUkRBVEEgb24tdGhlLXdpcmUKKyAqIHJlcHJlc2VudGF0aW9uLiAqLworaW50Citsb2NfYXRvbihhc2NpaSwgYmluYXJ5KQorCWNvbnN0IGNoYXIgKmFzY2lpOworCXVfY2hhciAqYmluYXJ5OworeworCWNvbnN0IGNoYXIgKmNwLCAqbWF4Y3A7CisJdV9jaGFyICpiY3A7CisKKwl1X2ludDMyX3QgbGF0aXQgPSAwLCBsb25naXQgPSAwLCBhbHQgPSAwOworCXVfaW50MzJfdCBsbHRlbXAxID0gMCwgbGx0ZW1wMiA9IDA7CisJaW50IGFsdG1ldGVycyA9IDAsIGFsdGZyYWMgPSAwLCBhbHRzaWduID0gMTsKKwl1X2ludDhfdCBocCA9IDB4MTY7CS8qIGRlZmF1bHQgPSAxZTYgY20gPSAxMDAwMC4wMG0gPSAxMGttICovCisJdV9pbnQ4X3QgdnAgPSAweDEzOwkvKiBkZWZhdWx0ID0gMWUzIGNtID0gMTAuMDBtICovCisJdV9pbnQ4X3Qgc2l6ID0gMHgxMjsJLyogZGVmYXVsdCA9IDFlMiBjbSA9IDEuMDBtICovCisJaW50IHdoaWNoMSA9IDAsIHdoaWNoMiA9IDA7CisKKwljcCA9IGFzY2lpOworCW1heGNwID0gY3AgKyBzdHJsZW4oYXNjaWkpOworCisJbGx0ZW1wMSA9IGxhdGxvbjJ1bCgmY3AsICZ3aGljaDEpOworCisJbGx0ZW1wMiA9IGxhdGxvbjJ1bCgmY3AsICZ3aGljaDIpOworCisJc3dpdGNoICh3aGljaDEgKyB3aGljaDIpIHsKKwljYXNlIDM6CQkJLyogMSArIDIsIHRoZSBvbmx5IHZhbGlkIGNvbWJpbmF0aW9uICovCisJCWlmICgod2hpY2gxID09IDEpICYmICh3aGljaDIgPT0gMikpIHsgLyogbm9ybWFsIGNhc2UgKi8KKwkJCWxhdGl0ID0gbGx0ZW1wMTsKKwkJCWxvbmdpdCA9IGxsdGVtcDI7CisJCX0gZWxzZSBpZiAoKHdoaWNoMSA9PSAyKSAmJiAod2hpY2gyID09IDEpKSB7IC8qIHJldmVyc2VkICovCisJCQlsb25naXQgPSBsbHRlbXAxOworCQkJbGF0aXQgPSBsbHRlbXAyOworCQl9IGVsc2UgewkvKiBzb21lIGtpbmQgb2YgYnJva2VubmVzcyAqLworCQkJcmV0dXJuICgwKTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgkJLyogd2UgZGlkbid0IGdldCBvbmUgb2YgZWFjaCAqLworCQlyZXR1cm4gKDApOworCX0KKworCS8qIGFsdGl0dWRlICovCisJaWYgKCpjcCA9PSAnLScpIHsKKwkJYWx0c2lnbiA9IC0xOworCQljcCsrOworCX0KKworCWlmICgqY3AgPT0gJysnKQorCQljcCsrOworCisJd2hpbGUgKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKmNwKSkKKwkJYWx0bWV0ZXJzID0gYWx0bWV0ZXJzICogMTAgKyAoKmNwKysgLSAnMCcpOworCisJaWYgKCpjcCA9PSAnLicpIHsJCS8qIGRlY2ltYWwgbWV0ZXJzICovCisJCWNwKys7CisJCWlmIChpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSpjcCkpIHsKKwkJCWFsdGZyYWMgPSAoKmNwKysgLSAnMCcpICogMTA7CisJCQlpZiAoaXNkaWdpdCgodW5zaWduZWQgY2hhcikqY3ApKSB7CisJCQkJYWx0ZnJhYyArPSAoKmNwKysgLSAnMCcpOworCQkJfQorCQl9CisJfQorCisJYWx0ID0gKDEwMDAwMDAwICsgKGFsdHNpZ24gKiAoYWx0bWV0ZXJzICogMTAwICsgYWx0ZnJhYykpKTsKKworCXdoaWxlICghaXNzcGFjZSgodW5zaWduZWQgY2hhcikqY3ApICYmIChjcCA8IG1heGNwKSkgLyogaWYgdHJhaWxpbmcgZ2FyYmFnZSBvciBtICovCisJCWNwKys7CisKKwl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqY3ApICYmIChjcCA8IG1heGNwKSkKKwkJY3ArKzsKKworCWlmIChjcCA+PSBtYXhjcCkKKwkJZ290byBkZWZhdWx0czsKKworCXNpeiA9IHByZWNzaXplX2F0b24oJmNwKTsKKworCXdoaWxlICghaXNzcGFjZSgodW5zaWduZWQgY2hhcikqY3ApICYmIChjcCA8IG1heGNwKSkJLyogaWYgdHJhaWxpbmcgZ2FyYmFnZSBvciBtICovCisJCWNwKys7CisKKwl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqY3ApICYmIChjcCA8IG1heGNwKSkKKwkJY3ArKzsKKworCWlmIChjcCA+PSBtYXhjcCkKKwkJZ290byBkZWZhdWx0czsKKworCWhwID0gcHJlY3NpemVfYXRvbigmY3ApOworCisJd2hpbGUgKCFpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpjcCkgJiYgKGNwIDwgbWF4Y3ApKQkvKiBpZiB0cmFpbGluZyBnYXJiYWdlIG9yIG0gKi8KKwkJY3ArKzsKKworCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpjcCkgJiYgKGNwIDwgbWF4Y3ApKQorCQljcCsrOworCisJaWYgKGNwID49IG1heGNwKQorCQlnb3RvIGRlZmF1bHRzOworCisJdnAgPSBwcmVjc2l6ZV9hdG9uKCZjcCk7CisKKyBkZWZhdWx0czoKKworCWJjcCA9IGJpbmFyeTsKKwkqYmNwKysgPSAodV9pbnQ4X3QpIDA7CS8qIHZlcnNpb24gYnl0ZSAqLworCSpiY3ArKyA9IHNpejsKKwkqYmNwKysgPSBocDsKKwkqYmNwKysgPSB2cDsKKwlQVVRMT05HKGxhdGl0LGJjcCk7CisJUFVUTE9ORyhsb25naXQsYmNwKTsKKwlQVVRMT05HKGFsdCxiY3ApOworCisJcmV0dXJuICgxNik7CQkvKiBzaXplIG9mIFJSIGluIG9jdGV0cyAqLworfQorCisvKiB0YWtlcyBhbiBvbi10aGUtd2lyZSBMT0MgUlIgYW5kIGZvcm1hdHMgaXQgaW4gYSBodW1hbiByZWFkYWJsZSBmb3JtYXQuICovCitjb25zdCBjaGFyICoKK2xvY19udG9hKGJpbmFyeSwgYXNjaWkpCisJY29uc3QgdV9jaGFyICpiaW5hcnk7CisJY2hhciAqYXNjaWk7Cit7CisJc3RhdGljIGNvbnN0IGNoYXIgKmVycm9yID0gIj8iOworCXN0YXRpYyBjaGFyIHRtcGJ1ZltzaXplb2YKKyIxMDAwIDYwIDYwLjAwMCBOIDEwMDAgNjAgNjAuMDAwIFcgLTEyMzQ1Njc4LjAwbSA5MDAwMDAwMC4wMG0gOTAwMDAwMDAuMDBtIDkwMDAwMDAwLjAwbSJdOworCWNvbnN0IHVfY2hhciAqY3AgPSBiaW5hcnk7CisKKwlpbnQgbGF0ZGVnLCBsYXRtaW4sIGxhdHNlYywgbGF0c2VjZnJhYzsKKwlpbnQgbG9uZ2RlZywgbG9uZ21pbiwgbG9uZ3NlYywgbG9uZ3NlY2ZyYWM7CisJY2hhciBub3J0aHNvdXRoLCBlYXN0d2VzdDsKKwljb25zdCBjaGFyICphbHRzaWduOworCWludCBhbHRtZXRlcnMsIGFsdGZyYWM7CisKKwljb25zdCB1X2ludDMyX3QgcmVmZXJlbmNlYWx0ID0gMTAwMDAwICogMTAwOworCisJaW50MzJfdCBsYXR2YWwsIGxvbmd2YWwsIGFsdHZhbDsKKwl1X2ludDMyX3QgdGVtcGw7CisJdV9pbnQ4X3Qgc2l6ZXZhbCwgaHB2YWwsIHZwdmFsLCB2ZXJzaW9udmFsOworCisJY2hhciAqc2l6ZXN0ciwgKmhwc3RyLCAqdnBzdHI7CisKKwl2ZXJzaW9udmFsID0gKmNwKys7CisKKwlpZiAoYXNjaWkgPT0gTlVMTCkKKwkJYXNjaWkgPSB0bXBidWY7CisKKwlpZiAodmVyc2lvbnZhbCkgeworCQkodm9pZCkgc3ByaW50Zihhc2NpaSwgIjsgZXJyb3I6IHVua25vd24gTE9DIFJSIHZlcnNpb24iKTsKKwkJcmV0dXJuIChhc2NpaSk7CisJfQorCisJc2l6ZXZhbCA9ICpjcCsrOworCisJaHB2YWwgPSAqY3ArKzsKKwl2cHZhbCA9ICpjcCsrOworCisJR0VUTE9ORyh0ZW1wbCwgY3ApOworCWxhdHZhbCA9ICh0ZW1wbCAtICgodW5zaWduZWQpMTw8MzEpKTsKKworCUdFVExPTkcodGVtcGwsIGNwKTsKKwlsb25ndmFsID0gKHRlbXBsIC0gKCh1bnNpZ25lZCkxPDwzMSkpOworCisJR0VUTE9ORyh0ZW1wbCwgY3ApOworCWlmICh0ZW1wbCA8IHJlZmVyZW5jZWFsdCkgeyAvKiBiZWxvdyBXR1MgODQgc3BoZXJvaWQgKi8KKwkJYWx0dmFsID0gcmVmZXJlbmNlYWx0IC0gdGVtcGw7CisJCWFsdHNpZ24gPSAiLSI7CisJfSBlbHNlIHsKKwkJYWx0dmFsID0gdGVtcGwgLSByZWZlcmVuY2VhbHQ7CisJCWFsdHNpZ24gPSAiIjsKKwl9CisKKwlpZiAobGF0dmFsIDwgMCkgeworCQlub3J0aHNvdXRoID0gJ1MnOworCQlsYXR2YWwgPSAtbGF0dmFsOworCX0gZWxzZQorCQlub3J0aHNvdXRoID0gJ04nOworCisJbGF0c2VjZnJhYyA9IGxhdHZhbCAlIDEwMDA7CisJbGF0dmFsID0gbGF0dmFsIC8gMTAwMDsKKwlsYXRzZWMgPSBsYXR2YWwgJSA2MDsKKwlsYXR2YWwgPSBsYXR2YWwgLyA2MDsKKwlsYXRtaW4gPSBsYXR2YWwgJSA2MDsKKwlsYXR2YWwgPSBsYXR2YWwgLyA2MDsKKwlsYXRkZWcgPSBsYXR2YWw7CisKKwlpZiAobG9uZ3ZhbCA8IDApIHsKKwkJZWFzdHdlc3QgPSAnVyc7CisJCWxvbmd2YWwgPSAtbG9uZ3ZhbDsKKwl9IGVsc2UKKwkJZWFzdHdlc3QgPSAnRSc7CisKKwlsb25nc2VjZnJhYyA9IGxvbmd2YWwgJSAxMDAwOworCWxvbmd2YWwgPSBsb25ndmFsIC8gMTAwMDsKKwlsb25nc2VjID0gbG9uZ3ZhbCAlIDYwOworCWxvbmd2YWwgPSBsb25ndmFsIC8gNjA7CisJbG9uZ21pbiA9IGxvbmd2YWwgJSA2MDsKKwlsb25ndmFsID0gbG9uZ3ZhbCAvIDYwOworCWxvbmdkZWcgPSBsb25ndmFsOworCisJYWx0ZnJhYyA9IGFsdHZhbCAlIDEwMDsKKwlhbHRtZXRlcnMgPSAoYWx0dmFsIC8gMTAwKTsKKworCXNpemVzdHIgPSBzdHJkdXAocHJlY3NpemVfbnRvYSgodV9pbnQzMl90KXNpemV2YWwpKTsKKwlocHN0ciA9IHN0cmR1cChwcmVjc2l6ZV9udG9hKCh1X2ludDMyX3QpaHB2YWwpKTsKKwl2cHN0ciA9IHN0cmR1cChwcmVjc2l6ZV9udG9hKCh1X2ludDMyX3QpdnB2YWwpKTsKKworCXNwcmludGYoYXNjaWksCisJICAgICIlZCAlLjJkICUuMmQuJS4zZCAlYyAlZCAlLjJkICUuMmQuJS4zZCAlYyAlcyVkLiUuMmRtICVzbSAlc20gJXNtIiwKKwkJbGF0ZGVnLCBsYXRtaW4sIGxhdHNlYywgbGF0c2VjZnJhYywgbm9ydGhzb3V0aCwKKwkJbG9uZ2RlZywgbG9uZ21pbiwgbG9uZ3NlYywgbG9uZ3NlY2ZyYWMsIGVhc3R3ZXN0LAorCQlhbHRzaWduLCBhbHRtZXRlcnMsIGFsdGZyYWMsCisJCShzaXplc3RyICE9IE5VTEwpID8gc2l6ZXN0ciA6IGVycm9yLAorCQkoaHBzdHIgIT0gTlVMTCkgPyBocHN0ciA6IGVycm9yLAorCQkodnBzdHIgIT0gTlVMTCkgPyB2cHN0ciA6IGVycm9yKTsKKworCWlmIChzaXplc3RyICE9IE5VTEwpCisJCWZyZWUoc2l6ZXN0cik7CisJaWYgKGhwc3RyICE9IE5VTEwpCisJCWZyZWUoaHBzdHIpOworCWlmICh2cHN0ciAhPSBOVUxMKQorCQlmcmVlKHZwc3RyKTsKKworCXJldHVybiAoYXNjaWkpOworfQorCisKKy8qIFJldHVybiB0aGUgbnVtYmVyIG9mIEROUyBoaWVyYXJjaHkgbGV2ZWxzIGluIHRoZSBuYW1lLiAqLworaW50Citkbl9jb3VudF9sYWJlbHMoY29uc3QgY2hhciAqbmFtZSkgeworCWludCBpLCBsZW4sIGNvdW50OworCisJbGVuID0gc3RybGVuKG5hbWUpOworCWZvciAoaSA9IDAsIGNvdW50ID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCS8qIFhYWCBuZWVkIHRvIGNoZWNrIGZvciBcLiBvciB1c2UgbmFtZWQncyBubGFiZWxzKCkuICovCisJCWlmIChuYW1lW2ldID09ICcuJykKKwkJCWNvdW50Kys7CisJfQorCisJLyogZG9uJ3QgY291bnQgaW5pdGlhbCB3aWxkY2FyZCAqLworCWlmIChuYW1lWzBdID09ICcqJykKKwkJaWYgKGNvdW50KQorCQkJY291bnQtLTsKKworCS8qIGRvbid0IGNvdW50IHRoZSBudWxsIGxhYmVsIGZvciByb290LiAqLworCS8qIGlmIHRlcm1pbmF0aW5nICcuJyBub3QgZm91bmQsIG11c3QgYWRqdXN0ICovCisJLyogY291bnQgdG8gaW5jbHVkZSBsYXN0IGxhYmVsICovCisJaWYgKGxlbiA+IDAgJiYgbmFtZVtsZW4tMV0gIT0gJy4nKQorCQljb3VudCsrOworCXJldHVybiAoY291bnQpOworfQorCisKKy8qCisgKiBNYWtlIGRhdGVzIGV4cHJlc3NlZCBpbiBzZWNvbmRzLXNpbmNlLUphbi0xLTE5NzAgZWFzeSB0byByZWFkLgorICogU0lHIHJlY29yZHMgYXJlIHJlcXVpcmVkIHRvIGJlIHByaW50ZWQgbGlrZSB0aGlzLCBieSB0aGUgU2VjdXJlIEROUyBSRkMuCisgKi8KK2NoYXIgKgorcF9zZWNzdG9kYXRlICh1X2xvbmcgc2VjcykgeworCS8qIFhYWCBub25yZWVudHJhbnQgKi8KKwlzdGF0aWMgY2hhciBvdXRwdXRbMTVdOwkJLyogWVlZWU1NRERISE1NU1MgYW5kIG51bGwgKi8KKwl0aW1lX3QgbXljbG9jayA9IHNlY3M7CisJc3RydWN0IHRtICpteXRpbWU7CisjaWZkZWYgSEFWRV9USU1FX1IKKwlzdHJ1Y3QgdG0gcmVzOworCisJbXl0aW1lID0gZ210aW1lX3IoJm15Y2xvY2ssICZyZXMpOworI2Vsc2UKKwlteXRpbWUgPSBnbXRpbWUoJm15Y2xvY2spOworI2VuZGlmCisJbXl0aW1lLT50bV95ZWFyICs9IDE5MDA7CisJbXl0aW1lLT50bV9tb24gKz0gMTsKKwlzcHJpbnRmKG91dHB1dCwgIiUwNGQlMDJkJTAyZCUwMmQlMDJkJTAyZCIsCisJCW15dGltZS0+dG1feWVhciwgbXl0aW1lLT50bV9tb24sIG15dGltZS0+dG1fbWRheSwKKwkJbXl0aW1lLT50bV9ob3VyLCBteXRpbWUtPnRtX21pbiwgbXl0aW1lLT50bV9zZWMpOworCXJldHVybiAob3V0cHV0KTsKK30KKwordV9pbnQxNl90CityZXNfbmFtZXRvY2xhc3MoY29uc3QgY2hhciAqYnVmLCBpbnQgKnN1Y2Nlc3NwKSB7CisJdW5zaWduZWQgbG9uZyByZXN1bHQ7CisJY2hhciAqZW5kcHRyOworCWludCBzdWNjZXNzOworCisJcmVzdWx0ID0gc3ltX3N0b24oX19wX2NsYXNzX3N5bXMsIGJ1ZiwgJnN1Y2Nlc3MpOworCWlmIChzdWNjZXNzKQorCQlnb3RvIGRvbmU7CisKKwlpZiAoc3RybmNhc2VjbXAoYnVmLCAiQ0xBU1MiLCA1KSAhPSAwIHx8CisJICAgICFpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKWJ1Zls1XSkpCisJCWdvdG8gZG9uZTsKKwllcnJubyA9IDA7CisJcmVzdWx0ID0gc3RydG91bChidWYgKyA1LCAmZW5kcHRyLCAxMCk7CisJaWYgKGVycm5vID09IDAgJiYgKmVuZHB0ciA9PSAnXDAnICYmIHJlc3VsdCA8PSAweGZmZmZVKQorCQlzdWNjZXNzID0gMTsKKyBkb25lOgorCWlmIChzdWNjZXNzcCkKKwkJKnN1Y2Nlc3NwID0gc3VjY2VzczsKKwlyZXR1cm4gKHVfaW50MTZfdCkocmVzdWx0KTsKK30KKwordV9pbnQxNl90CityZXNfbmFtZXRvdHlwZShjb25zdCBjaGFyICpidWYsIGludCAqc3VjY2Vzc3ApIHsKKwl1bnNpZ25lZCBsb25nIHJlc3VsdDsKKwljaGFyICplbmRwdHI7CisJaW50IHN1Y2Nlc3M7CisKKwlyZXN1bHQgPSBzeW1fc3RvbihfX3BfdHlwZV9zeW1zLCBidWYsICZzdWNjZXNzKTsKKwlpZiAoc3VjY2VzcykKKwkJZ290byBkb25lOworCisJaWYgKHN0cm5jYXNlY21wKGJ1ZiwgInR5cGUiLCA0KSAhPSAwIHx8CisJICAgICFpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKWJ1Zls0XSkpCisJCWdvdG8gZG9uZTsKKwllcnJubyA9IDA7CisJcmVzdWx0ID0gc3RydG91bChidWYgKyA0LCAmZW5kcHRyLCAxMCk7CisJaWYgKGVycm5vID09IDAgJiYgKmVuZHB0ciA9PSAnXDAnICYmIHJlc3VsdCA8PSAweGZmZmZVKQorCQlzdWNjZXNzID0gMTsKKyBkb25lOgorCWlmIChzdWNjZXNzcCkKKwkJKnN1Y2Nlc3NwID0gc3VjY2VzczsKKwlyZXR1cm4gKHVfaW50MTZfdCkocmVzdWx0KTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvbmV0YnNkL3Jlc29sdi9yZXNfZGVidWcuaCBiL2xpYmMvbmV0YnNkL3Jlc29sdi9yZXNfZGVidWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzQxYzVhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19kZWJ1Zy5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCSROZXRCU0Q6IHJlc19kZWJ1Zy5oLHYgMS4xLjEuMSAyMDA0LzA1LzIwIDE3OjE4OjU1IGNocmlzdG9zIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKKyAqIENvcHlyaWdodCAoYykgMTk5OSBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSVNDIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgSVNDIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKKyAqIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBfUkVTX0RFQlVHX0hfCisjZGVmaW5lIF9SRVNfREVCVUdfSF8KKworI2lmbmRlZiBERUJVRworIyAgIGRlZmluZSBEcHJpbnQoY29uZCwgYXJncykgLyplbXB0eSovCisjICAgZGVmaW5lIERwcmludFEoY29uZCwgYXJncywgcXVlcnksIHNpemUpIC8qZW1wdHkqLworIyAgIGRlZmluZSBBZXJyb3Ioc3RhdHAsIGZpbGUsIHN0cmluZywgZXJyb3IsIGFkZHJlc3MpIC8qZW1wdHkqLworIyAgIGRlZmluZSBQZXJyb3Ioc3RhdHAsIGZpbGUsIHN0cmluZywgZXJyb3IpIC8qZW1wdHkqLworI2Vsc2UKKyMgICBkZWZpbmUgRHByaW50KGNvbmQsIGFyZ3MpIGlmIChjb25kKSB7ZnByaW50ZiBhcmdzO30gZWxzZSB7fQorIyAgIGRlZmluZSBEcHJpbnRRKGNvbmQsIGFyZ3MsIHF1ZXJ5LCBzaXplKSBpZiAoY29uZCkge1wKKwkJCWZwcmludGYgYXJncztcCisJCQlyZXNfcHF1ZXJ5KHN0YXRwLCBxdWVyeSwgc2l6ZSwgc3Rkb3V0KTtcCisJCX0gZWxzZSB7fQorI2VuZGlmCisKKyNlbmRpZiAvKiBfUkVTX0RFQlVHX0hfICovIApkaWZmIC0tZ2l0IGEvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19pbml0LmMgYi9saWJjL25ldGJzZC9yZXNvbHYvcmVzX2luaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzAyNzJjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19pbml0LmMKQEAgLTAsMCArMSw4NjMgQEAKKy8qCSROZXRCU0Q6IHJlc19pbml0LmMsdiAxLjggMjAwNi8wMy8xOSAwMzoxMDowOCBjaHJpc3RvcyBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTg1LCAxOTg5LCAxOTkzCisgKiAgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICogCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKKyAqIAlDYWxpZm9ybmlhLCBCZXJrZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5MyBieSBEaWdpdGFsIEVxdWlwbWVudCBDb3Jwb3JhdGlvbi4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0CisgKiB0aGUgbmFtZSBvZiBEaWdpdGFsIEVxdWlwbWVudCBDb3Jwb3JhdGlvbiBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvcgorICogcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBkb2N1bWVudCBvciBzb2Z0d2FyZSB3aXRob3V0CisgKiBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBESUdJVEFMIEVRVUlQTUVOVCBDT1JQLiBESVNDTEFJTVMgQUxMCisgKiBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICAgSU4gTk8gRVZFTlQgU0hBTEwgRElHSVRBTCBFUVVJUE1FTlQKKyAqIENPUlBPUkFUSU9OIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUgorICogUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMKKyAqIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUworICogU09GVFdBUkUuCisgKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNCBieSBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0sIEluYy4gKCJJU0MiKQorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTE5OTkgYnkgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElTQyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIElTQyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCisgKiBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKKyNpZmRlZiBub3RkZWYKK3N0YXRpYyBjb25zdCBjaGFyIHNjY3NpZFtdID0gIkAoIylyZXNfaW5pdC5jCTguMSAoQmVya2VsZXkpIDYvNy85MyI7CitzdGF0aWMgY29uc3QgY2hhciByY3NpZFtdID0gIklkOiByZXNfaW5pdC5jLHYgMS45LjIuNS40LjIgMjAwNC8wMy8xNiAxMjozNDoxOCBtYXJrYSBFeHAiOworI2Vsc2UKK19fUkNTSUQoIiROZXRCU0Q6IHJlc19pbml0LmMsdiAxLjggMjAwNi8wMy8xOSAwMzoxMDowOCBjaHJpc3RvcyBFeHAgJCIpOworI2VuZGlmCisjZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLworCisKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorCisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2luY2x1ZGUgImFycGFfbmFtZXNlci5oIgorCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CisKKyNpZmRlZiBBTkRST0lEX0NIQU5HRVMKKyNpbmNsdWRlIDxzeXMvc3lzdGVtX3Byb3BlcnRpZXMuaD4KKyNlbmRpZiAvKiBBTkRST0lEX0NIQU5HRVMgKi8KKworI2lmbmRlZiBNSU4KKyNkZWZpbmUJTUlOKHgseSkJKCh4KTwoeSk/KHgpOih5KSkKKyNlbmRpZgorCisvKiBlbnN1cmUgdGhhdCBzb2NrYWRkcl9pbjYgYW5kIElONkFERFJfQU5ZX0lOSVQgYXJlIGRlY2xhcmVkIC8gZGVmaW5lZCAqLworI2lmZGVmIEFORFJPSURfQ0hBTkdFUworI2luY2x1ZGUgInJlc29sdl9wcml2YXRlLmgiCisjZGVmaW5lIE1BWF9ETlNfUFJPUEVSVElFUyA4CisjZGVmaW5lIEROU19QUk9QX05BTUVfUFJFRklYICJuZXQuZG5zIgorI2RlZmluZSBETlNfQ0hBTkdFX1BST1BfTkFNRSAibmV0LmRuc2NoYW5nZSIKK2NvbnN0IHByb3BfaW5mbyAqZG5zX2NoYW5nZV9wcm9wOworaW50IGRuc19sYXN0X2NoYW5nZV9jb3VudGVyOworc3RhdGljIGludCBfZ2V0X2Ruc19jaGFuZ2VfY291bnQoKTsKKyNlbHNlCisjaW5jbHVkZSA8cmVzb2x2Lmg+CisjZW5kaWYKKworI2luY2x1ZGUgInJlc19wcml2YXRlLmgiCisKKy8qIE9wdGlvbnMuICBTaG91bGQgYWxsIGJlIGxlZnQgYWxvbmUuICovCisjaWZuZGVmIERFQlVHCisjZGVmaW5lIERFQlVHCisjZW5kaWYKKworc3RhdGljIHZvaWQgcmVzX3NldG9wdGlvbnMgX19QKChyZXNfc3RhdGUsIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKSk7CisKK3N0YXRpYyBjb25zdCBjaGFyIHNvcnRfbWFza1tdID0gIi8mIjsKKyNkZWZpbmUgSVNTT1JUTUFTSyhjaCkgKHN0cmNocihzb3J0X21hc2ssIGNoKSAhPSBOVUxMKQorc3RhdGljIHVfaW50MzJfdCBuZXRfbWFzayBfX1AoKHN0cnVjdCBpbl9hZGRyKSk7CisKKyNpZiAhZGVmaW5lZChpc2FzY2lpKQkvKiBYWFggLSBjb3VsZCBiZSBhIGZ1bmN0aW9uICovCisjIGRlZmluZSBpc2FzY2lpKGMpICghKGMgJiAwMjAwKSkKKyNlbmRpZgorCisvKgorICogUmVzb2x2ZXIgc3RhdGUgZGVmYXVsdCBzZXR0aW5ncy4KKyAqLworCisvKgorICogU2V0IHVwIGRlZmF1bHQgc2V0dGluZ3MuICBJZiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGV4aXN0LCB0aGUgdmFsdWVzCisgKiB0aGVyZSB3aWxsIGhhdmUgcHJlY2VkZW5jZS4gIE90aGVyd2lzZSwgdGhlIHNlcnZlciBhZGRyZXNzIGlzIHNldCB0bworICogSU5BRERSX0FOWSBhbmQgdGhlIGRlZmF1bHQgZG9tYWluIG5hbWUgY29tZXMgZnJvbSB0aGUgZ2V0aG9zdG5hbWUoKS4KKyAqCisgKiBBbiBpbnRlcnJpbSB2ZXJzaW9uIG9mIHRoaXMgY29kZSAoQklORCA0LjksIHByZS00LjRCU0QpIHVzZWQgMTI3LjAuMC4xCisgKiByYXRoZXIgdGhhbiBJTkFERFJfQU5ZICgiMC4wLjAuMCIpIGFzIHRoZSBkZWZhdWx0IG5hbWUgc2VydmVyIGFkZHJlc3MKKyAqIHNpbmNlIGl0IHdhcyBub3RlZCB0aGF0IElOQUREUl9BTlkgYWN0dWFsbHkgbWVhbnQgYGB0aGUgZmlyc3QgaW50ZXJmYWNlCisgKiB5b3UgImlmY29uZmlnIidkIGF0IGJvb3QgdGltZScnIGFuZCBpZiB0aGlzIHdhcyBhIFNMSVAgb3IgUFBQIGludGVyZmFjZSwKKyAqIGl0IGhhZCB0byBiZSAidXAiIGluIG9yZGVyIGZvciB5b3UgdG8gcmVhY2ggeW91ciBvd24gbmFtZSBzZXJ2ZXIuICBJdAorICogd2FzIGxhdGVyIGRlY2lkZWQgdGhhdCBzaW5jZSB0aGUgcmVjb21tZW5kZWQgcHJhY3RpY2UgaXMgdG8gYWx3YXlzCisgKiBpbnN0YWxsIGxvY2FsIHN0YXRpYyByb3V0ZXMgdGhyb3VnaCAxMjcuMC4wLjEgZm9yIGFsbCB5b3VyIG5ldHdvcmsKKyAqIGludGVyZmFjZXMsIHRoYXQgd2UgY291bGQgc29sdmUgdGhpcyBwcm9ibGVtIHdpdGhvdXQgYSBjb2RlIGNoYW5nZS4KKyAqCisgKiBUaGUgY29uZmlndXJhdGlvbiBmaWxlIHNob3VsZCBhbHdheXMgYmUgdXNlZCwgc2luY2UgaXQgaXMgdGhlIG9ubHkgd2F5CisgKiB0byBzcGVjaWZ5IGEgZGVmYXVsdCBkb21haW4uICBJZiB5b3UgYXJlIHJ1bm5pbmcgYSBzZXJ2ZXIgb24geW91ciBsb2NhbAorICogbWFjaGluZSwgeW91IHNob3VsZCBzYXkgIm5hbWVzZXJ2ZXIgMC4wLjAuMCIgb3IgIm5hbWVzZXJ2ZXIgMTI3LjAuMC4xIgorICogaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAqCisgKiBSZXR1cm4gMCBpZiBjb21wbGV0ZXMgc3VjY2Vzc2Z1bGx5LCAtMSBvbiBlcnJvcgorICovCitpbnQKK3Jlc19uaW5pdChyZXNfc3RhdGUgc3RhdHApIHsKKwlleHRlcm4gaW50IF9fcmVzX3Zpbml0KHJlc19zdGF0ZSwgaW50KTsKKworCXJldHVybiAoX19yZXNfdmluaXQoc3RhdHAsIDApKTsKK30KKworLyogVGhpcyBmdW5jdGlvbiBoYXMgdG8gYmUgcmVhY2hhYmxlIGJ5IHJlc19kYXRhLmMgYnV0IG5vdCBwdWJsaWNseS4gKi8KK2ludAorX19yZXNfdmluaXQocmVzX3N0YXRlIHN0YXRwLCBpbnQgcHJlaW5pdCkgeworCXJlZ2lzdGVyIEZJTEUgKmZwOworCXJlZ2lzdGVyIGNoYXIgKmNwLCAqKnBwOworCXJlZ2lzdGVyIGludCBuOworCWNoYXIgYnVmW0JVRlNJWl07CisJaW50IG5zZXJ2ID0gMDsgICAgLyogbnVtYmVyIG9mIG5hbWVzZXJ2ZXIgcmVjb3JkcyByZWFkIGZyb20gZmlsZSAqLworCWludCBoYXZlZW52ID0gMDsKKwlpbnQgaGF2ZXNlYXJjaCA9IDA7CisJaW50IG5zb3J0ID0gMDsKKwljaGFyICpuZXQ7CisJaW50IGRvdHM7CisJdW5pb24gcmVzX3NvY2thZGRyX3VuaW9uIHVbMl07CisjaWZkZWYgQU5EUk9JRF9DSEFOR0VTCisgICAgICAgIHBpZF90IG15cGlkID0gZ2V0cGlkKCk7CisgICAgICAgIGludCB1c2VfcHJvY19wcm9wcyA9IDA7CisgICAgICAgIGludCBmb3VuZF9wcm9wOworCWNoYXIgZG5zUHJvcGVydHlbUFJPUF9WQUxVRV9NQVhdOworI2VuZGlmCisKKwlpZiAoIXByZWluaXQpIHsKKwkJc3RhdHAtPnJldHJhbnMgPSBSRVNfVElNRU9VVDsKKwkJc3RhdHAtPnJldHJ5ID0gUkVTX0RGTFJFVFJZOworCQlzdGF0cC0+b3B0aW9ucyA9IFJFU19ERUZBVUxUOworCQlzdGF0cC0+aWQgPSByZXNfcmFuZG9taWQoKTsKKwl9CisKKwlpZiAoKHN0YXRwLT5vcHRpb25zICYgUkVTX0lOSVQpICE9IDBVKQorCQlyZXNfbmRlc3Ryb3koc3RhdHApOworCisJbWVtc2V0KHUsIDAsIHNpemVvZih1KSk7CisjaWZkZWYgVVNFTE9PUEJBQ0sKKwl1W25zZXJ2XS5zaW4uc2luX2FkZHIgPSBpbmV0X21ha2VhZGRyKElOX0xPT1BCQUNLTkVULCAxKTsKKyNlbHNlCisJdVtuc2Vydl0uc2luLnNpbl9hZGRyLnNfYWRkciA9IElOQUREUl9BTlk7CisjZW5kaWYKKwl1W25zZXJ2XS5zaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7CisJdVtuc2Vydl0uc2luLnNpbl9wb3J0ID0gaHRvbnMoTkFNRVNFUlZFUl9QT1JUKTsKKyNpZmRlZiBIQVZFX1NBX0xFTgorCXVbbnNlcnZdLnNpbi5zaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisjZW5kaWYKKwluc2VydisrOworI2lmZGVmIEhBU19JTkVUNl9TVFJVQ1RTCisjaWZkZWYgVVNFTE9PUEJBQ0sKKwl1W25zZXJ2XS5zaW42LnNpbjZfYWRkciA9IGluNmFkZHJfbG9vcGJhY2s7CisjZWxzZQorCXVbbnNlcnZdLnNpbjYuc2luNl9hZGRyID0gaW42YWRkcl9hbnk7CisjZW5kaWYKKwl1W25zZXJ2XS5zaW42LnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisJdVtuc2Vydl0uc2luNi5zaW42X3BvcnQgPSBodG9ucyhOQU1FU0VSVkVSX1BPUlQpOworI2lmZGVmIEhBVkVfU0FfTEVOCisJdVtuc2Vydl0uc2luNi5zaW42X2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKyNlbmRpZgorCW5zZXJ2Kys7CisjZW5kaWYKKwlzdGF0cC0+bnNjb3VudCA9IDA7CisJc3RhdHAtPm5kb3RzID0gMTsKKwlzdGF0cC0+cGZjb2RlID0gMDsKKwlzdGF0cC0+X3Zjc29jayA9IC0xOworCXN0YXRwLT5fZmxhZ3MgPSAwOworCXN0YXRwLT5xaG9vayA9IE5VTEw7CisJc3RhdHAtPnJob29rID0gTlVMTDsKKwlzdGF0cC0+X3UuX2V4dC5uc2NvdW50ID0gMDsKKwlzdGF0cC0+X3UuX2V4dC5leHQgPSBtYWxsb2Moc2l6ZW9mKCpzdGF0cC0+X3UuX2V4dC5leHQpKTsKKwlpZiAoc3RhdHAtPl91Ll9leHQuZXh0ICE9IE5VTEwpIHsKKwkgICAgICAgIG1lbXNldChzdGF0cC0+X3UuX2V4dC5leHQsIDAsIHNpemVvZigqc3RhdHAtPl91Ll9leHQuZXh0KSk7CisJCXN0YXRwLT5fdS5fZXh0LmV4dC0+bnNhZGRyc1swXS5zaW4gPSBzdGF0cC0+bnNhZGRyOworCQlzdHJjcHkoc3RhdHAtPl91Ll9leHQuZXh0LT5uc3VmZml4LCAiaXA2LmFycGEiKTsKKwkJc3RyY3B5KHN0YXRwLT5fdS5fZXh0LmV4dC0+bnN1ZmZpeDIsICJpcDYuaW50Iik7CisJfQorCXN0YXRwLT5uc29ydCA9IDA7CisJcmVzX3NldHNlcnZlcnMoc3RhdHAsIHUsIG5zZXJ2KTsKKworI2lmIDAgLyogSUdOT1JFIFRIRSBFTlZJUk9OTUVOVCAqLworCS8qIEFsbG93IHVzZXIgdG8gb3ZlcnJpZGUgdGhlIGxvY2FsIGRvbWFpbiBkZWZpbml0aW9uICovCisJaWYgKChjcCA9IGdldGVudigiTE9DQUxET01BSU4iKSkgIT0gTlVMTCkgeworCQkodm9pZClzdHJuY3B5KHN0YXRwLT5kZWZkbmFtZSwgY3AsIHNpemVvZihzdGF0cC0+ZGVmZG5hbWUpIC0gMSk7CisJCXN0YXRwLT5kZWZkbmFtZVtzaXplb2Yoc3RhdHAtPmRlZmRuYW1lKSAtIDFdID0gJ1wwJzsKKwkJaGF2ZWVudisrOworCisJCS8qCisJCSAqIFNldCBzZWFyY2ggbGlzdCB0byBiZSBibGFuay1zZXBhcmF0ZWQgc3RyaW5ncworCQkgKiBmcm9tIHJlc3Qgb2YgZW52IHZhbHVlLiAgUGVybWl0cyB1c2VycyBvZiBMT0NBTERPTUFJTgorCQkgKiB0byBzdGlsbCBoYXZlIGEgc2VhcmNoIGxpc3QsIGFuZCBhbnlvbmUgdG8gc2V0IHRoZQorCQkgKiBvbmUgdGhhdCB0aGV5IHdhbnQgdG8gdXNlIGFzIGFuIGluZGl2aWR1YWwgKGV2ZW4gbW9yZQorCQkgKiBpbXBvcnRhbnQgbm93IHRoYXQgdGhlIHJmYzE1MzUgc3R1ZmYgcmVzdHJpY3RzIHNlYXJjaGVzKQorCQkgKi8KKwkJY3AgPSBzdGF0cC0+ZGVmZG5hbWU7CisJCXBwID0gc3RhdHAtPmRuc3JjaDsKKwkJKnBwKysgPSBjcDsKKwkJZm9yIChuID0gMDsgKmNwICYmIHBwIDwgc3RhdHAtPmRuc3JjaCArIE1BWEROU1JDSDsgY3ArKykgeworCQkJaWYgKCpjcCA9PSAnXG4nKQkvKiBzaWxseSBiYWNrd2FyZHMgY29tcGF0ICovCisJCQkJYnJlYWs7CisJCQllbHNlIGlmICgqY3AgPT0gJyAnIHx8ICpjcCA9PSAnXHQnKSB7CisJCQkJKmNwID0gMDsKKwkJCQluID0gMTsKKwkJCX0gZWxzZSBpZiAobikgeworCQkJCSpwcCsrID0gY3A7CisJCQkJbiA9IDA7CisJCQkJaGF2ZXNlYXJjaCA9IDE7CisJCQl9CisJCX0KKwkJLyogbnVsbCB0ZXJtaW5hdGUgbGFzdCBkb21haW4gaWYgdGhlcmUgYXJlIGV4Y2VzcyAqLworCQl3aGlsZSAoKmNwICE9ICdcMCcgJiYgKmNwICE9ICcgJyAmJiAqY3AgIT0gJ1x0JyAmJiAqY3AgIT0gJ1xuJykKKwkJCWNwKys7CisJCSpjcCA9ICdcMCc7CisJCSpwcCsrID0gMDsKKwl9CisJaWYgKG5zZXJ2ID4gMCkKKwkJc3RhdHAtPm5zY291bnQgPSBuc2VydjsKKyNlbmRpZgorI2lmZGVmIEFORFJPSURfQ0hBTkdFUyAvKiBSRUFEIEZST00gU1lTVEVNIFBST1BFUlRJRVMgKi8KKwlkbnNfbGFzdF9jaGFuZ2VfY291bnRlciA9IF9nZXRfZG5zX2NoYW5nZV9jb3VudCgpOworCisJbnNlcnYgPSAwOworCWZvcihuID0gMTsgbiA8PSBNQVhfRE5TX1BST1BFUlRJRVMgJiYgbnNlcnYgPCBNQVhOUzsgbisrKSB7CisJCWNoYXIgcHJvcG5hbWVbUFJPUF9OQU1FX01BWF07CisJCWNoYXIgcHJvcHZhbHVlW1BST1BfVkFMVUVfTUFYXTsKKworCQlzdHJ1Y3QgYWRkcmluZm8gaGludHMsICphaTsKKwkJY2hhciBzYnVmW05JX01BWFNFUlZdOworCQljb25zdCBzaXplX3QgbWluc2l6ID0gc2l6ZW9mKHN0YXRwLT5fdS5fZXh0LmV4dC0+bnNhZGRyc1swXSk7CisKKwkJLyoKKwkJICogQ2hlY2sgZmlyc3QgZm9yIHByb2Nlc3Mtc3BlY2lmaWMgcHJvcGVydGllcywgYW5kIGlmIHRob3NlIGRvbid0CisJCSAqIGV4aXN0LCB0cnkgdGhlIGdlbmVyaWMgcHJvcGVydGllcy4KKwkJICovCisJCWZvdW5kX3Byb3AgPSAwOworCQlpZiAobiA9PSAxIHx8IHVzZV9wcm9jX3Byb3BzKSB7CisJCQlzbnByaW50Zihwcm9wbmFtZSwgc2l6ZW9mKHByb3BuYW1lKSwgIiVzJWQuJWQiLCBETlNfUFJPUF9OQU1FX1BSRUZJWCwgbiwgbXlwaWQpOworCQkJaWYoX19zeXN0ZW1fcHJvcGVydHlfZ2V0KHByb3BuYW1lLCBwcm9wdmFsdWUpIDwgMSkgeworCQkJCWlmICh1c2VfcHJvY19wcm9wcykgeworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWZvdW5kX3Byb3AgPSAxOworCQkJCXVzZV9wcm9jX3Byb3BzID0gMTsKKwkJCX0KKwkJfQorCQlpZiAoIWZvdW5kX3Byb3ApIHsKKwkJCXNucHJpbnRmKHByb3BuYW1lLCBzaXplb2YocHJvcG5hbWUpLCAiJXMlZCIsIEROU19QUk9QX05BTUVfUFJFRklYLCBuKTsKKwkJCWlmKF9fc3lzdGVtX3Byb3BlcnR5X2dldChwcm9wbmFtZSwgcHJvcHZhbHVlKSA8IDEpIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWNwID0gcHJvcHZhbHVlOworCisJCXdoaWxlICgqY3AgPT0gJyAnIHx8ICpjcCA9PSAnXHQnKQorCQkJY3ArKzsKKwkJY3Bbc3RyY3NwbihjcCwgIjsjIFx0XG4iKV0gPSAnXDAnOworCQlpZiAoKCpjcCAhPSAnXDAnKSAmJiAoKmNwICE9ICdcbicpKSB7CisJCQltZW1zZXQoJmhpbnRzLCAwLCBzaXplb2YoaGludHMpKTsKKwkJCWhpbnRzLmFpX2ZhbWlseSA9IFBGX1VOU1BFQzsKKwkJCWhpbnRzLmFpX3NvY2t0eXBlID0gU09DS19ER1JBTTsJLypkdW1teSovCisJCQloaW50cy5haV9mbGFncyA9IEFJX05VTUVSSUNIT1NUOworCQkJc3ByaW50ZihzYnVmLCAiJXUiLCBOQU1FU0VSVkVSX1BPUlQpOworCQkJaWYgKGdldGFkZHJpbmZvKGNwLCBzYnVmLCAmaGludHMsICZhaSkgPT0gMCAmJgorCQkJICAgIChzaXplX3QpYWktPmFpX2FkZHJsZW4gPD0gbWluc2l6KSB7CisJCQkJaWYgKHN0YXRwLT5fdS5fZXh0LmV4dCAhPSBOVUxMKSB7CisJCQkJCW1lbWNweSgmc3RhdHAtPl91Ll9leHQuZXh0LT5uc2FkZHJzW25zZXJ2XSwKKwkJCQkJICAgICAgIGFpLT5haV9hZGRyLCBhaS0+YWlfYWRkcmxlbik7CisJCQkJfQorCQkJCWlmICgoc2l6ZV90KWFpLT5haV9hZGRybGVuIDw9CisJCQkJICAgIHNpemVvZihzdGF0cC0+bnNhZGRyX2xpc3RbbnNlcnZdKSkgeworCQkJCQltZW1jcHkoJnN0YXRwLT5uc2FkZHJfbGlzdFtuc2Vydl0sCisJCQkJCSAgICAgICBhaS0+YWlfYWRkciwgYWktPmFpX2FkZHJsZW4pOworCQkJCX0gZWxzZSB7CisJCQkJCXN0YXRwLT5uc2FkZHJfbGlzdFtuc2Vydl0uc2luX2ZhbWlseSA9IDA7CisJCQkJfQorCQkJCWZyZWVhZGRyaW5mbyhhaSk7CisJCQkJbnNlcnYrKzsKKwkJCX0KKwkJfQorCX0KKyNlbHNlIC8qIElHTk9SRSByZXNvbHYuY29uZiAqLworI2RlZmluZQlNQVRDSChsaW5lLCBuYW1lKSBcCisJKCFzdHJuY21wKGxpbmUsIG5hbWUsIHNpemVvZihuYW1lKSAtIDEpICYmIFwKKwkobGluZVtzaXplb2YobmFtZSkgLSAxXSA9PSAnICcgfHwgXAorCSBsaW5lW3NpemVvZihuYW1lKSAtIDFdID09ICdcdCcpKQorCisJbnNlcnYgPSAwOworCWlmICgoZnAgPSBmb3BlbihfUEFUSF9SRVNDT05GLCAiciIpKSAhPSBOVUxMKSB7CisJICAgIC8qIHJlYWQgdGhlIGNvbmZpZyBmaWxlICovCisJICAgIHdoaWxlIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBmcCkgIT0gTlVMTCkgeworCQkvKiBza2lwIGNvbW1lbnRzICovCisJCWlmICgqYnVmID09ICc7JyB8fCAqYnVmID09ICcjJykKKwkJCWNvbnRpbnVlOworCQkvKiByZWFkIGRlZmF1bHQgZG9tYWluIG5hbWUgKi8KKwkJaWYgKE1BVENIKGJ1ZiwgImRvbWFpbiIpKSB7CisJCSAgICBpZiAoaGF2ZWVudikJLyogc2tpcCBpZiBoYXZlIGZyb20gZW52aXJvbiAqLworCQkJICAgIGNvbnRpbnVlOworCQkgICAgY3AgPSBidWYgKyBzaXplb2YoImRvbWFpbiIpIC0gMTsKKwkJICAgIHdoaWxlICgqY3AgPT0gJyAnIHx8ICpjcCA9PSAnXHQnKQorCQkJICAgIGNwKys7CisJCSAgICBpZiAoKCpjcCA9PSAnXDAnKSB8fCAoKmNwID09ICdcbicpKQorCQkJICAgIGNvbnRpbnVlOworCQkgICAgc3RybmNweShzdGF0cC0+ZGVmZG5hbWUsIGNwLCBzaXplb2Yoc3RhdHAtPmRlZmRuYW1lKSAtIDEpOworCQkgICAgc3RhdHAtPmRlZmRuYW1lW3NpemVvZihzdGF0cC0+ZGVmZG5hbWUpIC0gMV0gPSAnXDAnOworCQkgICAgaWYgKChjcCA9IHN0cnBicmsoc3RhdHAtPmRlZmRuYW1lLCAiIFx0XG4iKSkgIT0gTlVMTCkKKwkJCSAgICAqY3AgPSAnXDAnOworCQkgICAgaGF2ZXNlYXJjaCA9IDA7CisJCSAgICBjb250aW51ZTsKKwkJfQorCQkvKiBzZXQgc2VhcmNoIGxpc3QgKi8KKwkJaWYgKE1BVENIKGJ1ZiwgInNlYXJjaCIpKSB7CisJCSAgICBpZiAoaGF2ZWVudikJLyogc2tpcCBpZiBoYXZlIGZyb20gZW52aXJvbiAqLworCQkJICAgIGNvbnRpbnVlOworCQkgICAgY3AgPSBidWYgKyBzaXplb2YoInNlYXJjaCIpIC0gMTsKKwkJICAgIHdoaWxlICgqY3AgPT0gJyAnIHx8ICpjcCA9PSAnXHQnKQorCQkJICAgIGNwKys7CisJCSAgICBpZiAoKCpjcCA9PSAnXDAnKSB8fCAoKmNwID09ICdcbicpKQorCQkJICAgIGNvbnRpbnVlOworCQkgICAgc3RybmNweShzdGF0cC0+ZGVmZG5hbWUsIGNwLCBzaXplb2Yoc3RhdHAtPmRlZmRuYW1lKSAtIDEpOworCQkgICAgc3RhdHAtPmRlZmRuYW1lW3NpemVvZihzdGF0cC0+ZGVmZG5hbWUpIC0gMV0gPSAnXDAnOworCQkgICAgaWYgKChjcCA9IHN0cmNocihzdGF0cC0+ZGVmZG5hbWUsICdcbicpKSAhPSBOVUxMKQorCQkJICAgICpjcCA9ICdcMCc7CisJCSAgICAvKgorCQkgICAgICogU2V0IHNlYXJjaCBsaXN0IHRvIGJlIGJsYW5rLXNlcGFyYXRlZCBzdHJpbmdzCisJCSAgICAgKiBvbiByZXN0IG9mIGxpbmUuCisJCSAgICAgKi8KKwkJICAgIGNwID0gc3RhdHAtPmRlZmRuYW1lOworCQkgICAgcHAgPSBzdGF0cC0+ZG5zcmNoOworCQkgICAgKnBwKysgPSBjcDsKKwkJICAgIGZvciAobiA9IDA7ICpjcCAmJiBwcCA8IHN0YXRwLT5kbnNyY2ggKyBNQVhETlNSQ0g7IGNwKyspIHsKKwkJCSAgICBpZiAoKmNwID09ICcgJyB8fCAqY3AgPT0gJ1x0JykgeworCQkJCSAgICAqY3AgPSAwOworCQkJCSAgICBuID0gMTsKKwkJCSAgICB9IGVsc2UgaWYgKG4pIHsKKwkJCQkgICAgKnBwKysgPSBjcDsKKwkJCQkgICAgbiA9IDA7CisJCQkgICAgfQorCQkgICAgfQorCQkgICAgLyogbnVsbCB0ZXJtaW5hdGUgbGFzdCBkb21haW4gaWYgdGhlcmUgYXJlIGV4Y2VzcyAqLworCQkgICAgd2hpbGUgKCpjcCAhPSAnXDAnICYmICpjcCAhPSAnICcgJiYgKmNwICE9ICdcdCcpCisJCQkgICAgY3ArKzsKKwkJICAgICpjcCA9ICdcMCc7CisJCSAgICAqcHArKyA9IDA7CisJCSAgICBoYXZlc2VhcmNoID0gMTsKKwkJICAgIGNvbnRpbnVlOworCQl9CisJCS8qIHJlYWQgbmFtZXNlcnZlcnMgdG8gcXVlcnkgKi8KKwkJaWYgKE1BVENIKGJ1ZiwgIm5hbWVzZXJ2ZXIiKSAmJiBuc2VydiA8IE1BWE5TKSB7CisJCSAgICBzdHJ1Y3QgYWRkcmluZm8gaGludHMsICphaTsKKwkJICAgIGNoYXIgc2J1ZltOSV9NQVhTRVJWXTsKKwkJICAgIGNvbnN0IHNpemVfdCBtaW5zaXogPQorCQkgICAgICAgIHNpemVvZihzdGF0cC0+X3UuX2V4dC5leHQtPm5zYWRkcnNbMF0pOworCisJCSAgICBjcCA9IGJ1ZiArIHNpemVvZigibmFtZXNlcnZlciIpIC0gMTsKKwkJICAgIHdoaWxlICgqY3AgPT0gJyAnIHx8ICpjcCA9PSAnXHQnKQorCQkJY3ArKzsKKwkJICAgIGNwW3N0cmNzcG4oY3AsICI7IyBcdFxuIildID0gJ1wwJzsKKwkJICAgIGlmICgoKmNwICE9ICdcMCcpICYmICgqY3AgIT0gJ1xuJykpIHsKKwkJCW1lbXNldCgmaGludHMsIDAsIHNpemVvZihoaW50cykpOworCQkJaGludHMuYWlfZmFtaWx5ID0gUEZfVU5TUEVDOworCQkJaGludHMuYWlfc29ja3R5cGUgPSBTT0NLX0RHUkFNOwkvKmR1bW15Ki8KKwkJCWhpbnRzLmFpX2ZsYWdzID0gQUlfTlVNRVJJQ0hPU1Q7CisJCQlzcHJpbnRmKHNidWYsICIldSIsIE5BTUVTRVJWRVJfUE9SVCk7CisJCQlpZiAoZ2V0YWRkcmluZm8oY3AsIHNidWYsICZoaW50cywgJmFpKSA9PSAwICYmCisJCQkgICAgYWktPmFpX2FkZHJsZW4gPD0gbWluc2l6KSB7CisJCQkgICAgaWYgKHN0YXRwLT5fdS5fZXh0LmV4dCAhPSBOVUxMKSB7CisJCQkJbWVtY3B5KCZzdGF0cC0+X3UuX2V4dC5leHQtPm5zYWRkcnNbbnNlcnZdLAorCQkJCSAgICBhaS0+YWlfYWRkciwgYWktPmFpX2FkZHJsZW4pOworCQkJICAgIH0KKwkJCSAgICBpZiAoYWktPmFpX2FkZHJsZW4gPD0KKwkJCSAgICAgICAgc2l6ZW9mKHN0YXRwLT5uc2FkZHJfbGlzdFtuc2Vydl0pKSB7CisJCQkJbWVtY3B5KCZzdGF0cC0+bnNhZGRyX2xpc3RbbnNlcnZdLAorCQkJCSAgICBhaS0+YWlfYWRkciwgYWktPmFpX2FkZHJsZW4pOworCQkJICAgIH0gZWxzZQorCQkJCXN0YXRwLT5uc2FkZHJfbGlzdFtuc2Vydl0uc2luX2ZhbWlseSA9IDA7CisJCQkgICAgZnJlZWFkZHJpbmZvKGFpKTsKKwkJCSAgICBuc2VydisrOworCQkJfQorCQkgICAgfQorCQkgICAgY29udGludWU7CisJCX0KKwkJaWYgKE1BVENIKGJ1ZiwgInNvcnRsaXN0IikpIHsKKwkJICAgIHN0cnVjdCBpbl9hZGRyIGE7CisKKwkJICAgIGNwID0gYnVmICsgc2l6ZW9mKCJzb3J0bGlzdCIpIC0gMTsKKwkJICAgIHdoaWxlIChuc29ydCA8IE1BWFJFU09MVlNPUlQpIHsKKwkJCXdoaWxlICgqY3AgPT0gJyAnIHx8ICpjcCA9PSAnXHQnKQorCQkJICAgIGNwKys7CisJCQlpZiAoKmNwID09ICdcMCcgfHwgKmNwID09ICdcbicgfHwgKmNwID09ICc7JykKKwkJCSAgICBicmVhazsKKwkJCW5ldCA9IGNwOworCQkJd2hpbGUgKCpjcCAmJiAhSVNTT1JUTUFTSygqY3ApICYmICpjcCAhPSAnOycgJiYKKwkJCSAgICAgICBpc2FzY2lpKCpjcCkgJiYgIWlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmNwKSkKKwkJCQljcCsrOworCQkJbiA9ICpjcDsKKwkJCSpjcCA9IDA7CisJCQlpZiAoaW5ldF9hdG9uKG5ldCwgJmEpKSB7CisJCQkgICAgc3RhdHAtPnNvcnRfbGlzdFtuc29ydF0uYWRkciA9IGE7CisJCQkgICAgaWYgKElTU09SVE1BU0sobikpIHsKKwkJCQkqY3ArKyA9IG47CisJCQkJbmV0ID0gY3A7CisJCQkJd2hpbGUgKCpjcCAmJiAqY3AgIT0gJzsnICYmCisJCQkJCWlzYXNjaWkoKmNwKSAmJgorCQkJCQkhaXNzcGFjZSgodW5zaWduZWQgY2hhcikqY3ApKQorCQkJCSAgICBjcCsrOworCQkJCW4gPSAqY3A7CisJCQkJKmNwID0gMDsKKwkJCQlpZiAoaW5ldF9hdG9uKG5ldCwgJmEpKSB7CisJCQkJICAgIHN0YXRwLT5zb3J0X2xpc3RbbnNvcnRdLm1hc2sgPSBhLnNfYWRkcjsKKwkJCQl9IGVsc2UgeworCQkJCSAgICBzdGF0cC0+c29ydF9saXN0W25zb3J0XS5tYXNrID0KKwkJCQkJbmV0X21hc2soc3RhdHAtPnNvcnRfbGlzdFtuc29ydF0uYWRkcik7CisJCQkJfQorCQkJICAgIH0gZWxzZSB7CisJCQkJc3RhdHAtPnNvcnRfbGlzdFtuc29ydF0ubWFzayA9CisJCQkJICAgIG5ldF9tYXNrKHN0YXRwLT5zb3J0X2xpc3RbbnNvcnRdLmFkZHIpOworCQkJICAgIH0KKwkJCSAgICBuc29ydCsrOworCQkJfQorCQkJKmNwID0gbjsKKwkJICAgIH0KKwkJICAgIGNvbnRpbnVlOworCQl9CisJCWlmIChNQVRDSChidWYsICJvcHRpb25zIikpIHsKKwkJICAgIHJlc19zZXRvcHRpb25zKHN0YXRwLCBidWYgKyBzaXplb2YoIm9wdGlvbnMiKSAtIDEsICJjb25mIik7CisJCSAgICBjb250aW51ZTsKKwkJfQorCSAgICB9CisJICAgIGlmIChuc2VydiA+IDApCisJCXN0YXRwLT5uc2NvdW50ID0gbnNlcnY7CisJICAgIHN0YXRwLT5uc29ydCA9IG5zb3J0OworCSAgICAodm9pZCkgZmNsb3NlKGZwKTsKKwl9CisjZW5kaWYgLyogQU5EUk9JRF9DSEFOR0VTICovCisvKgorICogTGFzdCBjaGFuY2UgdG8gZ2V0IGEgbmFtZXNlcnZlci4gIFRoaXMgc2hvdWxkIG5vdCBub3JtYWxseQorICogYmUgbmVjZXNzYXJ5CisgKi8KKyNpZmRlZiBOT19SRVNPTFZfQ09ORgorCWlmKG5zZXJ2ID09IDApCisJCW5zZXJ2ID0gZ2V0X25hbWVzZXJ2ZXJzKHN0YXRwKTsKKyNlbmRpZgorCisJaWYgKHN0YXRwLT5kZWZkbmFtZVswXSA9PSAwICYmCisJICAgIGdldGhvc3RuYW1lKGJ1Ziwgc2l6ZW9mKHN0YXRwLT5kZWZkbmFtZSkgLSAxKSA9PSAwICYmCisJICAgIChjcCA9IHN0cmNocihidWYsICcuJykpICE9IE5VTEwpCisJCXN0cmNweShzdGF0cC0+ZGVmZG5hbWUsIGNwICsgMSk7CisKKwkvKiBmaW5kIGNvbXBvbmVudHMgb2YgbG9jYWwgZG9tYWluIHRoYXQgbWlnaHQgYmUgc2VhcmNoZWQgKi8KKwlpZiAoaGF2ZXNlYXJjaCA9PSAwKSB7CisJCXBwID0gc3RhdHAtPmRuc3JjaDsKKwkJKnBwKysgPSBzdGF0cC0+ZGVmZG5hbWU7CisJCSpwcCA9IE5VTEw7CisKKwkJZG90cyA9IDA7CisJCWZvciAoY3AgPSBzdGF0cC0+ZGVmZG5hbWU7ICpjcDsgY3ArKykKKwkJCWRvdHMgKz0gKCpjcCA9PSAnLicpOworCisJCWNwID0gc3RhdHAtPmRlZmRuYW1lOworCQl3aGlsZSAocHAgPCBzdGF0cC0+ZG5zcmNoICsgTUFYREZMU1JDSCkgeworCQkJaWYgKGRvdHMgPCBMT0NBTERPTUFJTlBBUlRTKQorCQkJCWJyZWFrOworCQkJY3AgPSBzdHJjaHIoY3AsICcuJykgKyAxOyAgICAvKiB3ZSBrbm93IHRoZXJlIGlzIG9uZSAqLworCQkJKnBwKysgPSBjcDsKKwkJCWRvdHMtLTsKKwkJfQorCQkqcHAgPSBOVUxMOworI2lmZGVmIERFQlVHCisJCWlmIChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRykgeworCQkJcHJpbnRmKCI7OyByZXNfaW5pdCgpLi4uIGRlZmF1bHQgZG5zcmNoIGxpc3Q6XG4iKTsKKwkJCWZvciAocHAgPSBzdGF0cC0+ZG5zcmNoOyAqcHA7IHBwKyspCisJCQkJcHJpbnRmKCI7O1x0JXNcbiIsICpwcCk7CisJCQlwcmludGYoIjs7XHQuLkVORC4uXG4iKTsKKwkJfQorI2VuZGlmCisJfQorCisJaWYgKChjcCA9IGdldGVudigiUkVTX09QVElPTlMiKSkgIT0gTlVMTCkKKwkJcmVzX3NldG9wdGlvbnMoc3RhdHAsIGNwLCAiZW52Iik7CisJaWYgKG5zZXJ2ID4gMCkgeworCQlzdGF0cC0+bnNjb3VudCA9IG5zZXJ2OworCQlzdGF0cC0+b3B0aW9ucyB8PSBSRVNfSU5JVDsKKwl9CisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIHZvaWQKK3Jlc19zZXRvcHRpb25zKHJlc19zdGF0ZSBzdGF0cCwgY29uc3QgY2hhciAqb3B0aW9ucywgY29uc3QgY2hhciAqc291cmNlKQoreworCWNvbnN0IGNoYXIgKmNwID0gb3B0aW9uczsKKwlpbnQgaTsKKwlzdHJ1Y3QgX19yZXNfc3RhdGVfZXh0ICpleHQgPSBzdGF0cC0+X3UuX2V4dC5leHQ7CisKKyNpZmRlZiBERUJVRworCWlmIChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRykKKwkJcHJpbnRmKCI7OyByZXNfc2V0b3B0aW9ucyhcIiVzXCIsIFwiJXNcIikuLi5cbiIsCisJCSAgICAgICBvcHRpb25zLCBzb3VyY2UpOworI2VuZGlmCisJd2hpbGUgKCpjcCkgeworCQkvKiBza2lwIGxlYWRpbmcgYW5kIGlubmVyIHJ1bnMgb2Ygc3BhY2VzICovCisJCXdoaWxlICgqY3AgPT0gJyAnIHx8ICpjcCA9PSAnXHQnKQorCQkJY3ArKzsKKwkJLyogc2VhcmNoIGZvciBhbmQgcHJvY2VzcyBpbmRpdmlkdWFsIG9wdGlvbnMgKi8KKwkJaWYgKCFzdHJuY21wKGNwLCAibmRvdHM6Iiwgc2l6ZW9mKCJuZG90czoiKSAtIDEpKSB7CisJCQlpID0gYXRvaShjcCArIHNpemVvZigibmRvdHM6IikgLSAxKTsKKwkJCWlmIChpIDw9IFJFU19NQVhORE9UUykKKwkJCQlzdGF0cC0+bmRvdHMgPSBpOworCQkJZWxzZQorCQkJCXN0YXRwLT5uZG90cyA9IFJFU19NQVhORE9UUzsKKyNpZmRlZiBERUJVRworCQkJaWYgKHN0YXRwLT5vcHRpb25zICYgUkVTX0RFQlVHKQorCQkJCXByaW50ZigiOztcdG5kb3RzPSVkXG4iLCBzdGF0cC0+bmRvdHMpOworI2VuZGlmCisJCX0gZWxzZSBpZiAoIXN0cm5jbXAoY3AsICJ0aW1lb3V0OiIsIHNpemVvZigidGltZW91dDoiKSAtIDEpKSB7CisJCQlpID0gYXRvaShjcCArIHNpemVvZigidGltZW91dDoiKSAtIDEpOworCQkJaWYgKGkgPD0gUkVTX01BWFJFVFJBTlMpCisJCQkJc3RhdHAtPnJldHJhbnMgPSBpOworCQkJZWxzZQorCQkJCXN0YXRwLT5yZXRyYW5zID0gUkVTX01BWFJFVFJBTlM7CisjaWZkZWYgREVCVUcKKwkJCWlmIChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRykKKwkJCQlwcmludGYoIjs7XHR0aW1lb3V0PSVkXG4iLCBzdGF0cC0+cmV0cmFucyk7CisjZW5kaWYKKwkJfSBlbHNlIGlmICghc3RybmNtcChjcCwgImF0dGVtcHRzOiIsIHNpemVvZigiYXR0ZW1wdHM6IikgLSAxKSl7CisJCQlpID0gYXRvaShjcCArIHNpemVvZigiYXR0ZW1wdHM6IikgLSAxKTsKKwkJCWlmIChpIDw9IFJFU19NQVhSRVRSWSkKKwkJCQlzdGF0cC0+cmV0cnkgPSBpOworCQkJZWxzZQorCQkJCXN0YXRwLT5yZXRyeSA9IFJFU19NQVhSRVRSWTsKKyNpZmRlZiBERUJVRworCQkJaWYgKHN0YXRwLT5vcHRpb25zICYgUkVTX0RFQlVHKQorCQkJCXByaW50ZigiOztcdGF0dGVtcHRzPSVkXG4iLCBzdGF0cC0+cmV0cnkpOworI2VuZGlmCisJCX0gZWxzZSBpZiAoIXN0cm5jbXAoY3AsICJkZWJ1ZyIsIHNpemVvZigiZGVidWciKSAtIDEpKSB7CisjaWZkZWYgREVCVUcKKwkJCWlmICghKHN0YXRwLT5vcHRpb25zICYgUkVTX0RFQlVHKSkgeworCQkJCXByaW50ZigiOzsgcmVzX3NldG9wdGlvbnMoXCIlc1wiLCBcIiVzXCIpLi5cbiIsCisJCQkJICAgICAgIG9wdGlvbnMsIHNvdXJjZSk7CisJCQkJc3RhdHAtPm9wdGlvbnMgfD0gUkVTX0RFQlVHOworCQkJfQorCQkJcHJpbnRmKCI7O1x0ZGVidWdcbiIpOworI2VuZGlmCisJCX0gZWxzZSBpZiAoIXN0cm5jbXAoY3AsICJub190bGRfcXVlcnkiLAorCQkJCSAgICBzaXplb2YoIm5vX3RsZF9xdWVyeSIpIC0gMSkgfHwKKwkJCSAgICFzdHJuY21wKGNwLCAibm8tdGxkLXF1ZXJ5IiwKKwkJCQkgICAgc2l6ZW9mKCJuby10bGQtcXVlcnkiKSAtIDEpKSB7CisJCQlzdGF0cC0+b3B0aW9ucyB8PSBSRVNfTk9UTERRVUVSWTsKKwkJfSBlbHNlIGlmICghc3RybmNtcChjcCwgImluZXQ2Iiwgc2l6ZW9mKCJpbmV0NiIpIC0gMSkpIHsKKwkJCXN0YXRwLT5vcHRpb25zIHw9IFJFU19VU0VfSU5FVDY7CisJCX0gZWxzZSBpZiAoIXN0cm5jbXAoY3AsICJyb3RhdGUiLCBzaXplb2YoInJvdGF0ZSIpIC0gMSkpIHsKKwkJCXN0YXRwLT5vcHRpb25zIHw9IFJFU19ST1RBVEU7CisJCX0gZWxzZSBpZiAoIXN0cm5jbXAoY3AsICJuby1jaGVjay1uYW1lcyIsCisJCQkJICAgIHNpemVvZigibm8tY2hlY2stbmFtZXMiKSAtIDEpKSB7CisJCQlzdGF0cC0+b3B0aW9ucyB8PSBSRVNfTk9DSEVDS05BTUU7CisJCX0KKyNpZmRlZiBSRVNfVVNFX0VETlMwCisJCWVsc2UgaWYgKCFzdHJuY21wKGNwLCAiZWRuczAiLCBzaXplb2YoImVkbnMwIikgLSAxKSkgeworCQkJc3RhdHAtPm9wdGlvbnMgfD0gUkVTX1VTRV9FRE5TMDsKKwkJfQorI2VuZGlmCisJCWVsc2UgaWYgKCFzdHJuY21wKGNwLCAiZG5hbWUiLCBzaXplb2YoImRuYW1lIikgLSAxKSkgeworCQkJc3RhdHAtPm9wdGlvbnMgfD0gUkVTX1VTRV9ETkFNRTsKKwkJfQorCQllbHNlIGlmICghc3RybmNtcChjcCwgIm5pYmJsZToiLCBzaXplb2YoIm5pYmJsZToiKSAtIDEpKSB7CisJCQlpZiAoZXh0ID09IE5VTEwpCisJCQkJZ290byBza2lwOworCQkJY3AgKz0gc2l6ZW9mKCJuaWJibGU6IikgLSAxOworCQkJaSA9IE1JTihzdHJjc3BuKGNwLCAiIFx0IiksIHNpemVvZihleHQtPm5zdWZmaXgpIC0gMSk7CisJCQlzdHJuY3B5KGV4dC0+bnN1ZmZpeCwgY3AsIChzaXplX3QpaSk7CisJCQlleHQtPm5zdWZmaXhbaV0gPSAnXDAnOworCQl9CisJCWVsc2UgaWYgKCFzdHJuY21wKGNwLCAibmliYmxlMjoiLCBzaXplb2YoIm5pYmJsZTI6IikgLSAxKSkgeworCQkJaWYgKGV4dCA9PSBOVUxMKQorCQkJCWdvdG8gc2tpcDsKKwkJCWNwICs9IHNpemVvZigibmliYmxlMjoiKSAtIDE7CisJCQlpID0gTUlOKHN0cmNzcG4oY3AsICIgXHQiKSwgc2l6ZW9mKGV4dC0+bnN1ZmZpeDIpIC0gMSk7CisJCQlzdHJuY3B5KGV4dC0+bnN1ZmZpeDIsIGNwLCAoc2l6ZV90KWkpOworCQkJZXh0LT5uc3VmZml4MltpXSA9ICdcMCc7CisJCX0KKwkJZWxzZSBpZiAoIXN0cm5jbXAoY3AsICJ2NnJldm1vZGU6Iiwgc2l6ZW9mKCJ2NnJldm1vZGU6IikgLSAxKSkgeworCQkJY3AgKz0gc2l6ZW9mKCJ2NnJldm1vZGU6IikgLSAxOworCQkJLyogIm5pYmJsZSIgYW5kICJiaXRzdHJpbmciIHVzZWQgdG8gYmUgdmFsaWQgKi8KKwkJCWlmICghc3RybmNtcChjcCwgInNpbmdsZSIsIHNpemVvZigic2luZ2xlIikgLSAxKSkgeworCQkJCXN0YXRwLT5vcHRpb25zIHw9IFJFU19OT19OSUJCTEUyOworCQkJfSBlbHNlIGlmICghc3RybmNtcChjcCwgImJvdGgiLCBzaXplb2YoImJvdGgiKSAtIDEpKSB7CisJCQkJc3RhdHAtPm9wdGlvbnMgJj0KKwkJCQkJIH5SRVNfTk9fTklCQkxFMjsKKwkJCX0KKwkJfQorCQllbHNlIHsKKwkJCS8qIFhYWCAtIHByaW50IGEgd2FybmluZyBoZXJlPyAqLworCQl9CisgICBza2lwOgorCQkvKiBza2lwIHRvIG5leHQgcnVuIG9mIHNwYWNlcyAqLworCQl3aGlsZSAoKmNwICYmICpjcCAhPSAnICcgJiYgKmNwICE9ICdcdCcpCisJCQljcCsrOworCX0KK30KKworLyogWFhYIC0gc2hvdWxkIHJlYWxseSBzdXBwb3J0IENJRFIgd2hpY2ggbWVhbnMgZXhwbGljaXQgbWFza3MgYWx3YXlzLiAqLworc3RhdGljIHVfaW50MzJfdAorbmV0X21hc2soaW4pCQkvKiBYWFggLSBzaG91bGQgcmVhbGx5IHVzZSBzeXN0ZW0ncyB2ZXJzaW9uIG9mIHRoaXMgKi8KKwlzdHJ1Y3QgaW5fYWRkciBpbjsKK3sKKwlyZWdpc3RlciB1X2ludDMyX3QgaSA9IG50b2hsKGluLnNfYWRkcik7CisKKwlpZiAoSU5fQ0xBU1NBKGkpKQorCQlyZXR1cm4gKGh0b25sKElOX0NMQVNTQV9ORVQpKTsKKwllbHNlIGlmIChJTl9DTEFTU0IoaSkpCisJCXJldHVybiAoaHRvbmwoSU5fQ0xBU1NCX05FVCkpOworCXJldHVybiAoaHRvbmwoSU5fQ0xBU1NDX05FVCkpOworfQorCit1X2ludAorcmVzX3JhbmRvbWlkKHZvaWQpIHsKKwlzdHJ1Y3QgdGltZXZhbCBub3c7CisKKwlnZXR0aW1lb2ZkYXkoJm5vdywgTlVMTCk7CisJcmV0dXJuICgweGZmZmYgJiAobm93LnR2X3NlYyBeIG5vdy50dl91c2VjIF4gZ2V0cGlkKCkpKTsKK30KKworLyoKKyAqIFRoaXMgcm91dGluZSBpcyBmb3IgY2xvc2luZyB0aGUgc29ja2V0IGlmIGEgdmlydHVhbCBjaXJjdWl0IGlzIHVzZWQgYW5kCisgKiB0aGUgcHJvZ3JhbSB3YW50cyB0byBjbG9zZSBpdC4gIFRoaXMgcHJvdmlkZXMgc3VwcG9ydCBmb3IgZW5kaG9zdGVudCgpCisgKiB3aGljaCBleHBlY3RzIHRvIGNsb3NlIHRoZSBzb2NrZXQuCisgKgorICogVGhpcyByb3V0aW5lIGlzIG5vdCBleHBlY3RlZCB0byBiZSB1c2VyIHZpc2libGUuCisgKi8KK3ZvaWQKK3Jlc19uY2xvc2UocmVzX3N0YXRlIHN0YXRwKSB7CisJaW50IG5zOworCisJaWYgKHN0YXRwLT5fdmNzb2NrID49IDApIHsKKwkJKHZvaWQpIGNsb3NlKHN0YXRwLT5fdmNzb2NrKTsKKwkJc3RhdHAtPl92Y3NvY2sgPSAtMTsKKwkJc3RhdHAtPl9mbGFncyAmPSB+KFJFU19GX1ZDIHwgUkVTX0ZfQ09OTik7CisJfQorCWZvciAobnMgPSAwOyBucyA8IHN0YXRwLT5fdS5fZXh0Lm5zY291bnQ7IG5zKyspIHsKKwkJaWYgKHN0YXRwLT5fdS5fZXh0Lm5zc29ja3NbbnNdICE9IC0xKSB7CisJCQkodm9pZCkgY2xvc2Uoc3RhdHAtPl91Ll9leHQubnNzb2Nrc1tuc10pOworCQkJc3RhdHAtPl91Ll9leHQubnNzb2Nrc1tuc10gPSAtMTsKKwkJfQorCX0KK30KKwordm9pZAorcmVzX25kZXN0cm95KHJlc19zdGF0ZSBzdGF0cCkgeworCXJlc19uY2xvc2Uoc3RhdHApOworCWlmIChzdGF0cC0+X3UuX2V4dC5leHQgIT0gTlVMTCkKKwkJZnJlZShzdGF0cC0+X3UuX2V4dC5leHQpOworCXN0YXRwLT5vcHRpb25zICY9IH5SRVNfSU5JVDsKKwlzdGF0cC0+X3UuX2V4dC5leHQgPSBOVUxMOworfQorCitjb25zdCBjaGFyICoKK3Jlc19nZXRfbmliYmxlc3VmZml4KHJlc19zdGF0ZSBzdGF0cCkgeworCWlmIChzdGF0cC0+X3UuX2V4dC5leHQpCisJCXJldHVybiAoc3RhdHAtPl91Ll9leHQuZXh0LT5uc3VmZml4KTsKKwlyZXR1cm4gKCJpcDYuYXJwYSIpOworfQorCitjb25zdCBjaGFyICoKK3Jlc19nZXRfbmliYmxlc3VmZml4MihyZXNfc3RhdGUgc3RhdHApIHsKKwlpZiAoc3RhdHAtPl91Ll9leHQuZXh0KQorCQlyZXR1cm4gKHN0YXRwLT5fdS5fZXh0LmV4dC0+bnN1ZmZpeDIpOworCXJldHVybiAoImlwNi5pbnQiKTsKK30KKwordm9pZAorcmVzX3NldHNlcnZlcnMocmVzX3N0YXRlIHN0YXRwLCBjb25zdCB1bmlvbiByZXNfc29ja2FkZHJfdW5pb24gKnNldCwgaW50IGNudCkgeworCWludCBpLCBuc2VydjsKKwlzaXplX3Qgc2l6ZTsKKworCS8qIGNsb3NlIG9wZW4gc2VydmVycyAqLworCXJlc19uY2xvc2Uoc3RhdHApOworCisJLyogY2F1c2UgcnR0IHRpbWVzIHRvIGJlIGZvcmdvdHRlbiAqLworCXN0YXRwLT5fdS5fZXh0Lm5zY291bnQgPSAwOworCisJbnNlcnYgPSAwOworCWZvciAoaSA9IDA7IGkgPCBjbnQgJiYgbnNlcnYgPCBNQVhOUzsgaSsrKSB7CisJCXN3aXRjaCAoc2V0LT5zaW4uc2luX2ZhbWlseSkgeworCQljYXNlIEFGX0lORVQ6CisJCQlzaXplID0gc2l6ZW9mKHNldC0+c2luKTsKKwkJCWlmIChzdGF0cC0+X3UuX2V4dC5leHQpCisJCQkJbWVtY3B5KCZzdGF0cC0+X3UuX2V4dC5leHQtPm5zYWRkcnNbbnNlcnZdLAorCQkJCQkmc2V0LT5zaW4sIHNpemUpOworCQkJaWYgKHNpemUgPD0gc2l6ZW9mKHN0YXRwLT5uc2FkZHJfbGlzdFtuc2Vydl0pKQorCQkJCW1lbWNweSgmc3RhdHAtPm5zYWRkcl9saXN0W25zZXJ2XSwKKwkJCQkJJnNldC0+c2luLCBzaXplKTsKKyNpZmRlZiBub3RkZWYKKwkJCWVsc2UKKwkJCQlzdGF0cC0+bnNhZGRyX2xpc3RbbnNlcnZdLnNpbl9mYW1pbHkgPSAwOworI2VuZGlmCisJCQluc2VydisrOworCQkJYnJlYWs7CisKKyNpZmRlZiBIQVNfSU5FVDZfU1RSVUNUUworCQljYXNlIEFGX0lORVQ2OgorCQkJc2l6ZSA9IHNpemVvZihzZXQtPnNpbjYpOworCQkJaWYgKHN0YXRwLT5fdS5fZXh0LmV4dCkKKwkJCQltZW1jcHkoJnN0YXRwLT5fdS5fZXh0LmV4dC0+bnNhZGRyc1tuc2Vydl0sCisJCQkJCSZzZXQtPnNpbjYsIHNpemUpOworCQkJaWYgKHNpemUgPD0gc2l6ZW9mKHN0YXRwLT5uc2FkZHJfbGlzdFtuc2Vydl0pKQorCQkJCW1lbWNweSgmc3RhdHAtPm5zYWRkcl9saXN0W25zZXJ2XSwKKwkJCQkJJnNldC0+c2luNiwgc2l6ZSk7CisJCQllbHNlCisJCQkJc3RhdHAtPm5zYWRkcl9saXN0W25zZXJ2XS5zaW5fZmFtaWx5ID0gMDsKKwkJCW5zZXJ2Kys7CisJCQlicmVhazsKKyNlbmRpZgorCisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCQlzZXQrKzsKKwl9CisJc3RhdHAtPm5zY291bnQgPSBuc2VydjsKKworfQorCitpbnQKK3Jlc19nZXRzZXJ2ZXJzKHJlc19zdGF0ZSBzdGF0cCwgdW5pb24gcmVzX3NvY2thZGRyX3VuaW9uICpzZXQsIGludCBjbnQpIHsKKwlpbnQgaTsKKwlzaXplX3Qgc2l6ZTsKKwl1X2ludDE2X3QgZmFtaWx5OworCisJZm9yIChpID0gMDsgaSA8IHN0YXRwLT5uc2NvdW50ICYmIGkgPCBjbnQ7IGkrKykgeworCQlpZiAoc3RhdHAtPl91Ll9leHQuZXh0KQorCQkJZmFtaWx5ID0gc3RhdHAtPl91Ll9leHQuZXh0LT5uc2FkZHJzW2ldLnNpbi5zaW5fZmFtaWx5OworCQllbHNlCisJCQlmYW1pbHkgPSBzdGF0cC0+bnNhZGRyX2xpc3RbaV0uc2luX2ZhbWlseTsKKworCQlzd2l0Y2ggKGZhbWlseSkgeworCQljYXNlIEFGX0lORVQ6CisJCQlzaXplID0gc2l6ZW9mKHNldC0+c2luKTsKKwkJCWlmIChzdGF0cC0+X3UuX2V4dC5leHQpCisJCQkJbWVtY3B5KCZzZXQtPnNpbiwKKwkJCQkgICAgICAgJnN0YXRwLT5fdS5fZXh0LmV4dC0+bnNhZGRyc1tpXSwKKwkJCQkgICAgICAgc2l6ZSk7CisJCQllbHNlCisJCQkJbWVtY3B5KCZzZXQtPnNpbiwgJnN0YXRwLT5uc2FkZHJfbGlzdFtpXSwKKwkJCQkgICAgICAgc2l6ZSk7CisJCQlicmVhazsKKworI2lmZGVmIEhBU19JTkVUNl9TVFJVQ1RTCisJCWNhc2UgQUZfSU5FVDY6CisJCQlzaXplID0gc2l6ZW9mKHNldC0+c2luNik7CisJCQlpZiAoc3RhdHAtPl91Ll9leHQuZXh0KQorCQkJCW1lbWNweSgmc2V0LT5zaW42LAorCQkJCSAgICAgICAmc3RhdHAtPl91Ll9leHQuZXh0LT5uc2FkZHJzW2ldLAorCQkJCSAgICAgICBzaXplKTsKKwkJCWVsc2UKKwkJCQltZW1jcHkoJnNldC0+c2luNiwgJnN0YXRwLT5uc2FkZHJfbGlzdFtpXSwKKwkJCQkgICAgICAgc2l6ZSk7CisJCQlicmVhazsKKyNlbmRpZgorCisJCWRlZmF1bHQ6CisJCQlzZXQtPnNpbi5zaW5fZmFtaWx5ID0gMDsKKwkJCWJyZWFrOworCQl9CisJCXNldCsrOworCX0KKwlyZXR1cm4gKHN0YXRwLT5uc2NvdW50KTsKK30KKworI2lmZGVmIEFORFJPSURfQ0hBTkdFUworc3RhdGljIGludCBfZ2V0X2Ruc19jaGFuZ2VfY291bnQoKQoreworCWlmIChkbnNfY2hhbmdlX3Byb3AgPT0gTlVMTCkgeworCQlkbnNfY2hhbmdlX3Byb3AgPSBfX3N5c3RlbV9wcm9wZXJ0eV9maW5kKEROU19DSEFOR0VfUFJPUF9OQU1FKTsKKwl9CisJaWYgKGRuc19jaGFuZ2VfcHJvcCAhPSBOVUxMKSB7CisJCWNoYXIgcHJvcHZhbHVlW1BST1BfVkFMVUVfTUFYXTsKKwkJaWYgKF9fc3lzdGVtX3Byb3BlcnR5X3JlYWQoZG5zX2NoYW5nZV9wcm9wLCBOVUxMLCBwcm9wdmFsdWUpID49IDEpIHsKKwkJCXJldHVybiBhdG9pKHByb3B2YWx1ZSk7CisJCX0KKwl9CisJcmV0dXJuIC0xOworfQorCitpbnQgcmVzX2dldF9kbnNfY2hhbmdlZCgpCit7CisJaW50IGNoYW5nZV9jb3VudDsKKworCWNoYW5nZV9jb3VudCA9IF9nZXRfZG5zX2NoYW5nZV9jb3VudCgpOworCWlmIChjaGFuZ2VfY291bnQgIT0gZG5zX2xhc3RfY2hhbmdlX2NvdW50ZXIpIHsKKwkJaWYgKGNoYW5nZV9jb3VudCAhPSAtMSkgeworCQkJZG5zX2xhc3RfY2hhbmdlX2NvdW50ZXIgPSBjaGFuZ2VfY291bnQ7CisJCX0KKwkJcmV0dXJuIDE7CisJfSBlbHNlIHsKKwkJcmV0dXJuIDA7CisJfQorfQorI2VuZGlmIC8qIEFORFJPSURfQ0hBTkdFUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19ta3F1ZXJ5LmMgYi9saWJjL25ldGJzZC9yZXNvbHYvcmVzX21rcXVlcnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjRkZTdmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19ta3F1ZXJ5LmMKQEAgLTAsMCArMSwyNzYgQEAKKy8qCSROZXRCU0Q6IHJlc19ta3F1ZXJ5LmMsdiAxLjYgMjAwNi8wMS8yNCAxNzo0MDozMiBjaHJpc3RvcyBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAyMDA4ICBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QgKHF1ZXJ5IGlkIHJhbmRvbWl6YXRpb24pCisgKiBDb3B5cmlnaHQgKGMpIDE5ODUsIDE5OTMKKyAqICAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKiAJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgorICogCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTkzIGJ5IERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQKKyAqIHRoZSBuYW1lIG9mIERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yCisgKiBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIGRvY3VtZW50IG9yIHNvZnR3YXJlIHdpdGhvdXQKKyAqIHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIERJR0lUQUwgRVFVSVBNRU5UIENPUlAuIERJU0NMQUlNUyBBTEwKKyAqIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gICBJTiBOTyBFVkVOVCBTSEFMTCBESUdJVEFMIEVRVUlQTUVOVAorICogQ09SUE9SQVRJT04gQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SCisgKiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUworICogQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTCisgKiBTT0ZUV0FSRS4KKyAqLworCisvKgorICogQ29weXJpZ2h0IChjKSAyMDA0IGJ5IEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMTk5OSBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSVNDIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgSVNDIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKKyAqIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQorI2lmZGVmIG5vdGRlZgorc3RhdGljIGNvbnN0IGNoYXIgc2Njc2lkW10gPSAiQCgjKXJlc19ta3F1ZXJ5LmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKK3N0YXRpYyBjb25zdCBjaGFyIHJjc2lkW10gPSAiSWQ6IHJlc19ta3F1ZXJ5LmMsdiAxLjEuMi4yLjQuMiAyMDA0LzAzLzE2IDEyOjM0OjE4IG1hcmthIEV4cCI7CisjZWxzZQorX19SQ1NJRCgiJE5ldEJTRDogcmVzX21rcXVlcnkuYyx2IDEuNiAyMDA2LzAxLzI0IDE3OjQwOjMyIGNocmlzdG9zIEV4cCAkIik7CisjZW5kaWYKKyNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCisKKworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgImFycGFfbmFtZXNlci5oIgorI2luY2x1ZGUgPG5ldGRiLmg+CisjaWZkZWYgQU5EUk9JRF9DSEFOR0VTCisjaW5jbHVkZSAicmVzb2x2X3ByaXZhdGUuaCIKKyNlbHNlCisjaW5jbHVkZSA8cmVzb2x2Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisvKiBPcHRpb25zLiAgTGVhdmUgdGhlbSBvbi4gKi8KKyNpZm5kZWYgREVCVUcKKyNkZWZpbmUgREVCVUcKKyNlbmRpZgorCisjaWZuZGVmIGxpbnQKKyNkZWZpbmUgVU5VU0VEKGEpCSh2b2lkKSZhCisjZWxzZQorI2RlZmluZSBVTlVTRUQoYSkJYSA9IGEKKyNlbmRpZgorCitleHRlcm4gY29uc3QgY2hhciAqX3Jlc19vcGNvZGVzW107CisKKy8qCisgKiBGb3JtIGFsbCB0eXBlcyBvZiBxdWVyaWVzLgorICogUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgcmVzdWx0IG9yIC0xLgorICovCitpbnQKK3Jlc19ubWtxdWVyeShyZXNfc3RhdGUgc3RhdHAsCisJICAgICBpbnQgb3AsCQkJLyogb3Bjb2RlIG9mIHF1ZXJ5ICovCisJICAgICBjb25zdCBjaGFyICpkbmFtZSwJCS8qIGRvbWFpbiBuYW1lICovCisJICAgICBpbnQgY2xhc3MsIGludCB0eXBlLAkvKiBjbGFzcyBhbmQgdHlwZSBvZiBxdWVyeSAqLworCSAgICAgY29uc3QgdV9jaGFyICpkYXRhLAkvKiByZXNvdXJjZSByZWNvcmQgZGF0YSAqLworCSAgICAgaW50IGRhdGFsZW4sCQkvKiBsZW5ndGggb2YgZGF0YSAqLworCSAgICAgY29uc3QgdV9jaGFyICpuZXdycl9pbiwJLyogbmV3IHJyIGZvciBtb2RpZnkgb3IgYXBwZW5kICovCisJICAgICB1X2NoYXIgKmJ1ZiwJCS8qIGJ1ZmZlciB0byBwdXQgcXVlcnkgKi8KKwkgICAgIGludCBidWZsZW4pCQkvKiBzaXplIG9mIGJ1ZmZlciAqLworeworCXJlZ2lzdGVyIEhFQURFUiAqaHA7CisJcmVnaXN0ZXIgdV9jaGFyICpjcCwgKmVwOworCXJlZ2lzdGVyIGludCBuOworCXVfY2hhciAqZG5wdHJzWzIwXSwgKipkcHAsICoqbGFzdGRucHRyOworCisJVU5VU0VEKG5ld3JyX2luKTsKKworI2lmZGVmIERFQlVHCisJaWYgKHN0YXRwLT5vcHRpb25zICYgUkVTX0RFQlVHKQorCQlwcmludGYoIjs7IHJlc19ubWtxdWVyeSglcywgJXMsICVzLCAlcylcbiIsCisJCSAgICAgICBfcmVzX29wY29kZXNbb3BdLCBkbmFtZSwgcF9jbGFzcyhjbGFzcyksIHBfdHlwZSh0eXBlKSk7CisjZW5kaWYKKwkvKgorCSAqIEluaXRpYWxpemUgaGVhZGVyIGZpZWxkcy4KKwkgKi8KKwlpZiAoKGJ1ZiA9PSBOVUxMKSB8fCAoYnVmbGVuIDwgSEZJWEVEU1opKQorCQlyZXR1cm4gKC0xKTsKKwltZW1zZXQoYnVmLCAwLCBIRklYRURTWik7CisJaHAgPSAoSEVBREVSICopKHZvaWQgKilidWY7CisJaHAtPmlkID0gaHRvbnMocmVzX3JhbmRvbWlkKCkpOworCWhwLT5vcGNvZGUgPSBvcDsKKwlocC0+cmQgPSAoc3RhdHAtPm9wdGlvbnMgJiBSRVNfUkVDVVJTRSkgIT0gMFU7CisJaHAtPnJjb2RlID0gTk9FUlJPUjsKKwljcCA9IGJ1ZiArIEhGSVhFRFNaOworCWVwID0gYnVmICsgYnVmbGVuOworCWRwcCA9IGRucHRyczsKKwkqZHBwKysgPSBidWY7CisJKmRwcCsrID0gTlVMTDsKKwlsYXN0ZG5wdHIgPSBkbnB0cnMgKyBzaXplb2YgZG5wdHJzIC8gc2l6ZW9mIGRucHRyc1swXTsKKwkvKgorCSAqIHBlcmZvcm0gb3Bjb2RlIHNwZWNpZmljIHByb2Nlc3NpbmcKKwkgKi8KKwlzd2l0Y2ggKG9wKSB7CisJY2FzZSBRVUVSWToJLypGQUxMVEhST1VHSCovCisJY2FzZSBOU19OT1RJRllfT1A6CisJCWlmIChlcCAtIGNwIDwgUUZJWEVEU1opCisJCQlyZXR1cm4gKC0xKTsKKwkJaWYgKChuID0gZG5fY29tcChkbmFtZSwgY3AsIGVwIC0gY3AgLSBRRklYRURTWiwgZG5wdHJzLAorCQkgICAgbGFzdGRucHRyKSkgPCAwKQorCQkJcmV0dXJuICgtMSk7CisJCWNwICs9IG47CisJCW5zX3B1dDE2KHR5cGUsIGNwKTsKKwkJY3AgKz0gSU5UMTZTWjsKKwkJbnNfcHV0MTYoY2xhc3MsIGNwKTsKKwkJY3AgKz0gSU5UMTZTWjsKKwkJaHAtPnFkY291bnQgPSBodG9ucygxKTsKKwkJaWYgKG9wID09IFFVRVJZIHx8IGRhdGEgPT0gTlVMTCkKKwkJCWJyZWFrOworCQkvKgorCQkgKiBNYWtlIGFuIGFkZGl0aW9uYWwgcmVjb3JkIGZvciBjb21wbGV0aW9uIGRvbWFpbi4KKwkJICovCisJCWlmICgoZXAgLSBjcCkgPCBSUkZJWEVEU1opCisJCQlyZXR1cm4gKC0xKTsKKwkJbiA9IGRuX2NvbXAoKGNvbnN0IGNoYXIgKilkYXRhLCBjcCwgZXAgLSBjcCAtIFJSRklYRURTWiwKKwkJCSAgICBkbnB0cnMsIGxhc3RkbnB0cik7CisJCWlmIChuIDwgMCkKKwkJCXJldHVybiAoLTEpOworCQljcCArPSBuOworCQluc19wdXQxNihUX05VTEwsIGNwKTsKKwkJY3AgKz0gSU5UMTZTWjsKKwkJbnNfcHV0MTYoY2xhc3MsIGNwKTsKKwkJY3AgKz0gSU5UMTZTWjsKKwkJbnNfcHV0MzIoMCwgY3ApOworCQljcCArPSBJTlQzMlNaOworCQluc19wdXQxNigwLCBjcCk7CisJCWNwICs9IElOVDE2U1o7CisJCWhwLT5hcmNvdW50ID0gaHRvbnMoMSk7CisJCWJyZWFrOworCisJY2FzZSBJUVVFUlk6CisJCS8qCisJCSAqIEluaXRpYWxpemUgYW5zd2VyIHNlY3Rpb24KKwkJICovCisJCWlmIChlcCAtIGNwIDwgMSArIFJSRklYRURTWiArIGRhdGFsZW4pCisJCQlyZXR1cm4gKC0xKTsKKwkJKmNwKysgPSAnXDAnOwkvKiBubyBkb21haW4gbmFtZSAqLworCQluc19wdXQxNih0eXBlLCBjcCk7CisJCWNwICs9IElOVDE2U1o7CisJCW5zX3B1dDE2KGNsYXNzLCBjcCk7CisJCWNwICs9IElOVDE2U1o7CisJCW5zX3B1dDMyKDAsIGNwKTsKKwkJY3AgKz0gSU5UMzJTWjsKKwkJbnNfcHV0MTYoZGF0YWxlbiwgY3ApOworCQljcCArPSBJTlQxNlNaOworCQlpZiAoZGF0YWxlbikgeworCQkJbWVtY3B5KGNwLCBkYXRhLCAoc2l6ZV90KWRhdGFsZW4pOworCQkJY3AgKz0gZGF0YWxlbjsKKwkJfQorCQlocC0+YW5jb3VudCA9IGh0b25zKDEpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAoLTEpOworCX0KKwlyZXR1cm4gKGNwIC0gYnVmKTsKK30KKworI2lmZGVmIFJFU19VU0VfRUROUzAKKy8qIGF0dGFjaCBPUFQgcHNldWRvLVJSLCBhcyBkb2N1bWVudGVkIGluIFJGQzI2NzEgKEVETlMwKS4gKi8KKyNpZm5kZWYgVF9PUFQKKyNkZWZpbmUgVF9PUFQJNDEKKyNlbmRpZgorCitpbnQKK3Jlc19ub3B0KHJlc19zdGF0ZSBzdGF0cCwKKwkgaW50IG4wLAkJLyogY3VycmVudCBvZmZzZXQgaW4gYnVmZmVyICovCisJIHVfY2hhciAqYnVmLAkJLyogYnVmZmVyIHRvIHB1dCBxdWVyeSAqLworCSBpbnQgYnVmbGVuLAkJLyogc2l6ZSBvZiBidWZmZXIgKi8KKwkgaW50IGFuc2xlbikJCS8qIFVEUCBhbnN3ZXIgYnVmZmVyIHNpemUgKi8KK3sKKwlyZWdpc3RlciBIRUFERVIgKmhwOworCXJlZ2lzdGVyIHVfY2hhciAqY3AsICplcDsKKwl1X2ludDE2X3QgZmxhZ3MgPSAwOworCisjaWZkZWYgREVCVUcKKwlpZiAoKHN0YXRwLT5vcHRpb25zICYgUkVTX0RFQlVHKSAhPSAwVSkKKwkJcHJpbnRmKCI7OyByZXNfbm9wdCgpXG4iKTsKKyNlbmRpZgorCisJaHAgPSAoSEVBREVSICopKHZvaWQgKilidWY7CisJY3AgPSBidWYgKyBuMDsKKwllcCA9IGJ1ZiArIGJ1ZmxlbjsKKworCWlmICgoZXAgLSBjcCkgPCAxICsgUlJGSVhFRFNaKQorCQlyZXR1cm4gKC0xKTsKKworCSpjcCsrID0gMDsJLyogIi4iICovCisKKwluc19wdXQxNihUX09QVCwgY3ApOwkvKiBUWVBFICovCisJY3AgKz0gSU5UMTZTWjsKKwluc19wdXQxNihhbnNsZW4gJiAweGZmZmYsIGNwKTsJLyogQ0xBU1MgPSBVRFAgcGF5bG9hZCBzaXplICovCisJY3AgKz0gSU5UMTZTWjsKKwkqY3ArKyA9IE5PRVJST1I7CS8qIGV4dGVuZGVkIFJDT0RFICovCisJKmNwKysgPSAwOwkJLyogRUROUyB2ZXJzaW9uICovCisJaWYgKHN0YXRwLT5vcHRpb25zICYgUkVTX1VTRV9ETlNTRUMpIHsKKyNpZmRlZiBERUJVRworCQlpZiAoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcpCisJCQlwcmludGYoIjs7IHJlc19vcHQoKS4uLiBFTkRTMCBETlNTRUNcbiIpOworI2VuZGlmCisJCWZsYWdzIHw9IE5TX09QVF9ETlNTRUNfT0s7CisJfQorCW5zX3B1dDE2KGZsYWdzLCBjcCk7CisJY3AgKz0gSU5UMTZTWjsKKwluc19wdXQxNigwLCBjcCk7CS8qIFJETEVOICovCisJY3AgKz0gSU5UMTZTWjsKKwlocC0+YXJjb3VudCA9IGh0b25zKG50b2hzKGhwLT5hcmNvdW50KSArIDEpOworCisJcmV0dXJuIChjcCAtIGJ1Zik7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvbmV0YnNkL3Jlc29sdi9yZXNfcHJpdmF0ZS5oIGIvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19wcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM0MTkxMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvbmV0YnNkL3Jlc29sdi9yZXNfcHJpdmF0ZS5oCkBAIC0wLDAgKzEsMjIgQEAKKy8qCSROZXRCU0Q6IHJlc19wcml2YXRlLmgsdiAxLjEuMS4xIDIwMDQvMDUvMjAgMTc6MTg6NTQgY2hyaXN0b3MgRXhwICQJKi8KKworI2lmbmRlZiByZXNfcHJpdmF0ZV9oCisjZGVmaW5lIHJlc19wcml2YXRlX2gKKworc3RydWN0IF9fcmVzX3N0YXRlX2V4dCB7CisJdW5pb24gcmVzX3NvY2thZGRyX3VuaW9uIG5zYWRkcnNbTUFYTlNdOworCXN0cnVjdCBzb3J0X2xpc3QgeworCQlpbnQgICAgIGFmOworCQl1bmlvbiB7CisJCQlzdHJ1Y3QgaW5fYWRkciAgaW5hOworCQkJc3RydWN0IGluNl9hZGRyIGluNmE7CisJCX0gYWRkciwgbWFzazsKKwl9IHNvcnRfbGlzdFtNQVhSRVNPTFZTT1JUXTsKKwljaGFyIG5zdWZmaXhbNjRdOworCWNoYXIgbnN1ZmZpeDJbNjRdOworfTsKKworZXh0ZXJuIGludAorcmVzX291cnNlcnZlcl9wKGNvbnN0IHJlc19zdGF0ZSBzdGF0cCwgY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19xdWVyeS5jIGIvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19xdWVyeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMTMyMWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL25ldGJzZC9yZXNvbHYvcmVzX3F1ZXJ5LmMKQEAgLTAsMCArMSw0MTUgQEAKKy8qCSROZXRCU0Q6IHJlc19xdWVyeS5jLHYgMS43IDIwMDYvMDEvMjQgMTc6NDE6MjUgY2hyaXN0b3MgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk4OCwgMTk5MworICogICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqIAlUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCisgKiAJQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5kIGl0cyBjb250cmlidXRvcnMuCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTMgYnkgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24uCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLCBhbmQgdGhhdAorICogdGhlIG5hbWUgb2YgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24gbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IKKyAqIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgZG9jdW1lbnQgb3Igc29mdHdhcmUgd2l0aG91dAorICogc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgRElHSVRBTCBFUVVJUE1FTlQgQ09SUC4gRElTQ0xBSU1TIEFMTAorICogV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLCBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgIElOIE5PIEVWRU5UIFNIQUxMIERJR0lUQUwgRVFVSVBNRU5UCisgKiBDT1JQT1JBVElPTiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IKKyAqIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTCisgKiBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLgorICovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0xOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAorICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCisjaWZkZWYgbm90ZGVmCitzdGF0aWMgY29uc3QgY2hhciBzY2NzaWRbXSA9ICJAKCMpcmVzX3F1ZXJ5LmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKK3N0YXRpYyBjb25zdCBjaGFyIHJjc2lkW10gPSAiSWQ6IHJlc19xdWVyeS5jLHYgMS4yLjIuMy40LjIgMjAwNC8wMy8xNiAxMjozNDoxOSBtYXJrYSBFeHAiOworI2Vsc2UKK19fUkNTSUQoIiROZXRCU0Q6IHJlc19xdWVyeS5jLHYgMS43IDIwMDYvMDEvMjQgMTc6NDE6MjUgY2hyaXN0b3MgRXhwICQiKTsKKyNlbmRpZgorI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KKworCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSAiYXJwYV9uYW1lc2VyLmgiCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CisjaWZkZWYgQU5EUk9JRF9DSEFOR0VTCisjaW5jbHVkZSAicmVzb2x2X3ByaXZhdGUuaCIKKyNlbHNlCisjaW5jbHVkZSA8cmVzb2x2Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjZGVmaW5lIERJU0FCTEVfSE9TVF9BTElBUyAxCisKKy8qIE9wdGlvbnMuICBMZWF2ZSB0aGVtIG9uLiAqLworI2lmbmRlZiBERUJVRworI2RlZmluZSBERUJVRworI2VuZGlmCisKKyNpZiBQQUNLRVRTWiA+IDEwMjQKKyNkZWZpbmUgTUFYUEFDS0VUCVBBQ0tFVFNaCisjZWxzZQorI2RlZmluZSBNQVhQQUNLRVQJMTAyNAorI2VuZGlmCisKKy8qCisgKiBGb3JtdWxhdGUgYSBub3JtYWwgcXVlcnksIHNlbmQsIGFuZCBhd2FpdCBhbnN3ZXIuCisgKiBSZXR1cm5lZCBhbnN3ZXIgaXMgcGxhY2VkIGluIHN1cHBsaWVkIGJ1ZmZlciAiYW5zd2VyIi4KKyAqIFBlcmZvcm0gcHJlbGltaW5hcnkgY2hlY2sgb2YgYW5zd2VyLCByZXR1cm5pbmcgc3VjY2VzcyBvbmx5CisgKiBpZiBubyBlcnJvciBpcyBpbmRpY2F0ZWQgYW5kIHRoZSBhbnN3ZXIgY291bnQgaXMgbm9uemVyby4KKyAqIFJldHVybiB0aGUgc2l6ZSBvZiB0aGUgcmVzcG9uc2Ugb24gc3VjY2VzcywgLTEgb24gZXJyb3IuCisgKiBFcnJvciBudW1iZXIgaXMgbGVmdCBpbiBIX0VSUk5PLgorICoKKyAqIENhbGxlciBtdXN0IHBhcnNlIGFuc3dlciBhbmQgZGV0ZXJtaW5lIHdoZXRoZXIgaXQgYW5zd2VycyB0aGUgcXVlc3Rpb24uCisgKi8KK2ludAorcmVzX25xdWVyeShyZXNfc3RhdGUgc3RhdHAsCisJICAgY29uc3QgY2hhciAqbmFtZSwJLyogZG9tYWluIG5hbWUgKi8KKwkgICBpbnQgY2xhc3MsIGludCB0eXBlLAkvKiBjbGFzcyBhbmQgdHlwZSBvZiBxdWVyeSAqLworCSAgIHVfY2hhciAqYW5zd2VyLAkvKiBidWZmZXIgdG8gcHV0IGFuc3dlciAqLworCSAgIGludCBhbnNsZW4pCQkvKiBzaXplIG9mIGFuc3dlciBidWZmZXIgKi8KK3sKKwl1X2NoYXIgYnVmW01BWFBBQ0tFVF07CisJSEVBREVSICpocCA9IChIRUFERVIgKikodm9pZCAqKWFuc3dlcjsKKwlpbnQgbjsKKwl1X2ludCBvZmxhZ3M7CisKKwlvZmxhZ3MgPSBzdGF0cC0+X2ZsYWdzOworCithZ2FpbjoKKwlocC0+cmNvZGUgPSBOT0VSUk9SOwkvKiBkZWZhdWx0ICovCisKKyNpZmRlZiBERUJVRworCWlmIChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRykKKwkJcHJpbnRmKCI7OyByZXNfcXVlcnkoJXMsICVkLCAlZClcbiIsIG5hbWUsIGNsYXNzLCB0eXBlKTsKKyNlbmRpZgorCisJbiA9IHJlc19ubWtxdWVyeShzdGF0cCwgUVVFUlksIG5hbWUsIGNsYXNzLCB0eXBlLCBOVUxMLCAwLCBOVUxMLAorCQkJIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworI2lmZGVmIFJFU19VU0VfRUROUzAKKwlpZiAobiA+IDAgJiYgKHN0YXRwLT5fZmxhZ3MgJiBSRVNfRl9FRE5TMEVSUikgPT0gMCAmJgorCSAgICAoc3RhdHAtPm9wdGlvbnMgJiAoUkVTX1VTRV9FRE5TMHxSRVNfVVNFX0ROU1NFQykpICE9IDBVKQorCQluID0gcmVzX25vcHQoc3RhdHAsIG4sIGJ1Ziwgc2l6ZW9mKGJ1ZiksIGFuc2xlbik7CisjZW5kaWYKKwlpZiAobiA8PSAwKSB7CisjaWZkZWYgREVCVUcKKwkJaWYgKHN0YXRwLT5vcHRpb25zICYgUkVTX0RFQlVHKQorCQkJcHJpbnRmKCI7OyByZXNfcXVlcnk6IG1rcXVlcnkgZmFpbGVkXG4iKTsKKyNlbmRpZgorCQlSRVNfU0VUX0hfRVJSTk8oc3RhdHAsIE5PX1JFQ09WRVJZKTsKKwkJcmV0dXJuIChuKTsKKwl9CisJbiA9IHJlc19uc2VuZChzdGF0cCwgYnVmLCBuLCBhbnN3ZXIsIGFuc2xlbik7CisJaWYgKG4gPCAwKSB7CisjaWZkZWYgUkVTX1VTRV9FRE5TMAorCQkvKiBpZiB0aGUgcXVlcnkgY2hva2VkIHdpdGggRUROUzAsIHJldHJ5IHdpdGhvdXQgRUROUzAgKi8KKwkJaWYgKChzdGF0cC0+b3B0aW9ucyAmIChSRVNfVVNFX0VETlMwfFJFU19VU0VfRE5TU0VDKSkgIT0gMFUgJiYKKwkJICAgICgob2ZsYWdzIF4gc3RhdHAtPl9mbGFncykgJiBSRVNfRl9FRE5TMEVSUikgIT0gMCkgeworCQkJc3RhdHAtPl9mbGFncyB8PSBSRVNfRl9FRE5TMEVSUjsKKwkJCWlmIChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRykKKwkJCQlwcmludGYoIjs7IHJlc19ucXVlcnk6IHJldHJ5IHdpdGhvdXQgRUROUzBcbiIpOworCQkJZ290byBhZ2FpbjsKKwkJfQorI2VuZGlmCisjaWZkZWYgREVCVUcKKwkJaWYgKHN0YXRwLT5vcHRpb25zICYgUkVTX0RFQlVHKQorCQkJcHJpbnRmKCI7OyByZXNfcXVlcnk6IHNlbmQgZXJyb3JcbiIpOworI2VuZGlmCisJCVJFU19TRVRfSF9FUlJOTyhzdGF0cCwgVFJZX0FHQUlOKTsKKwkJcmV0dXJuIChuKTsKKwl9CisKKwlpZiAoaHAtPnJjb2RlICE9IE5PRVJST1IgfHwgbnRvaHMoaHAtPmFuY291bnQpID09IDApIHsKKyNpZmRlZiBERUJVRworCQlpZiAoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcpCisJCQlwcmludGYoIjs7IHJjb2RlID0gKCVzKSwgY291bnRzID0gYW46JWQgbnM6JWQgYXI6JWRcbiIsCisJCQkgICAgICAgcF9yY29kZShocC0+cmNvZGUpLAorCQkJICAgICAgIG50b2hzKGhwLT5hbmNvdW50KSwKKwkJCSAgICAgICBudG9ocyhocC0+bnNjb3VudCksCisJCQkgICAgICAgbnRvaHMoaHAtPmFyY291bnQpKTsKKyNlbmRpZgorCQlzd2l0Y2ggKGhwLT5yY29kZSkgeworCQljYXNlIE5YRE9NQUlOOgorCQkJUkVTX1NFVF9IX0VSUk5PKHN0YXRwLCBIT1NUX05PVF9GT1VORCk7CisJCQlicmVhazsKKwkJY2FzZSBTRVJWRkFJTDoKKwkJCVJFU19TRVRfSF9FUlJOTyhzdGF0cCwgVFJZX0FHQUlOKTsKKwkJCWJyZWFrOworCQljYXNlIE5PRVJST1I6CisJCQlSRVNfU0VUX0hfRVJSTk8oc3RhdHAsIE5PX0RBVEEpOworCQkJYnJlYWs7CisJCWNhc2UgRk9STUVSUjoKKwkJY2FzZSBOT1RJTVA6CisJCWNhc2UgUkVGVVNFRDoKKwkJZGVmYXVsdDoKKwkJCVJFU19TRVRfSF9FUlJOTyhzdGF0cCwgTk9fUkVDT1ZFUlkpOworCQkJYnJlYWs7CisJCX0KKwkJcmV0dXJuICgtMSk7CisJfQorCXJldHVybiAobik7Cit9CisKKy8qCisgKiBGb3JtdWxhdGUgYSBub3JtYWwgcXVlcnksIHNlbmQsIGFuZCByZXRyaWV2ZSBhbnN3ZXIgaW4gc3VwcGxpZWQgYnVmZmVyLgorICogUmV0dXJuIHRoZSBzaXplIG9mIHRoZSByZXNwb25zZSBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvci4KKyAqIElmIGVuYWJsZWQsIGltcGxlbWVudCBzZWFyY2ggcnVsZXMgdW50aWwgYW5zd2VyIG9yIHVucmVjb3ZlcmFibGUgZmFpbHVyZQorICogaXMgZGV0ZWN0ZWQuICBFcnJvciBjb2RlLCBpZiBhbnksIGlzIGxlZnQgaW4gSF9FUlJOTy4KKyAqLworaW50CityZXNfbnNlYXJjaChyZXNfc3RhdGUgc3RhdHAsCisJICAgIGNvbnN0IGNoYXIgKm5hbWUsCS8qIGRvbWFpbiBuYW1lICovCisJICAgIGludCBjbGFzcywgaW50IHR5cGUsCS8qIGNsYXNzIGFuZCB0eXBlIG9mIHF1ZXJ5ICovCisJICAgIHVfY2hhciAqYW5zd2VyLAkvKiBidWZmZXIgdG8gcHV0IGFuc3dlciAqLworCSAgICBpbnQgYW5zbGVuKQkJLyogc2l6ZSBvZiBhbnN3ZXIgKi8KK3sKKwljb25zdCBjaGFyICpjcCwgKiBjb25zdCAqZG9tYWluOworCUhFQURFUiAqaHAgPSAoSEVBREVSICopKHZvaWQgKilhbnN3ZXI7CisJY2hhciB0bXBbTlNfTUFYRE5BTUVdOworCXVfaW50IGRvdHM7CisJaW50IHRyYWlsaW5nX2RvdCwgcmV0LCBzYXZlZF9oZXJybm87CisJaW50IGdvdF9ub2RhdGEgPSAwLCBnb3Rfc2VydmZhaWwgPSAwLCByb290X29uX2xpc3QgPSAwOworCWludCB0cmllZF9hc19pcyA9IDA7CisJaW50IHNlYXJjaGVkID0gMDsKKworCWVycm5vID0gMDsKKwlSRVNfU0VUX0hfRVJSTk8oc3RhdHAsIEhPU1RfTk9UX0ZPVU5EKTsgIC8qIFRydWUgaWYgd2UgbmV2ZXIgcXVlcnkuICovCisKKwlkb3RzID0gMDsKKwlmb3IgKGNwID0gbmFtZTsgKmNwICE9ICdcMCc7IGNwKyspCisJCWRvdHMgKz0gKCpjcCA9PSAnLicpOworCXRyYWlsaW5nX2RvdCA9IDA7CisJaWYgKGNwID4gbmFtZSAmJiAqLS1jcCA9PSAnLicpCisJCXRyYWlsaW5nX2RvdCsrOworCisJLyogSWYgdGhlcmUgYXJlbid0IGFueSBkb3RzLCBpdCBjb3VsZCBiZSBhIHVzZXItbGV2ZWwgYWxpYXMuICovCisJaWYgKCFkb3RzICYmIChjcCA9IHJlc19ob3N0YWxpYXMoc3RhdHAsIG5hbWUsIHRtcCwgc2l6ZW9mIHRtcCkpIT0gTlVMTCkKKwkJcmV0dXJuIChyZXNfbnF1ZXJ5KHN0YXRwLCBjcCwgY2xhc3MsIHR5cGUsIGFuc3dlciwgYW5zbGVuKSk7CisKKwkvKgorCSAqIElmIHRoZXJlIGFyZSBlbm91Z2ggZG90cyBpbiB0aGUgbmFtZSwgbGV0J3MganVzdCBnaXZlIGl0IGEKKwkgKiB0cnkgJ2FzIGlzJy4gVGhlIHRocmVzaG9sZCBjYW4gYmUgc2V0IHdpdGggdGhlICJuZG90cyIgb3B0aW9uLgorCSAqIEFsc28sIHF1ZXJ5ICdhcyBpcycsIGlmIHRoZXJlIGlzIGEgdHJhaWxpbmcgZG90IGluIHRoZSBuYW1lLgorCSAqLworCXNhdmVkX2hlcnJubyA9IC0xOworCWlmIChkb3RzID49IHN0YXRwLT5uZG90cyB8fCB0cmFpbGluZ19kb3QpIHsKKwkJcmV0ID0gcmVzX25xdWVyeWRvbWFpbihzdGF0cCwgbmFtZSwgTlVMTCwgY2xhc3MsIHR5cGUsCisJCQkJCSBhbnN3ZXIsIGFuc2xlbik7CisJCWlmIChyZXQgPiAwIHx8IHRyYWlsaW5nX2RvdCkKKwkJCXJldHVybiAocmV0KTsKKwkJc2F2ZWRfaGVycm5vID0gc3RhdHAtPnJlc19oX2Vycm5vOworCQl0cmllZF9hc19pcysrOworCX0KKworCS8qCisJICogV2UgZG8gYXQgbGVhc3Qgb25lIGxldmVsIG9mIHNlYXJjaCBpZgorCSAqCS0gdGhlcmUgaXMgbm8gZG90IGFuZCBSRVNfREVGTkFNRSBpcyBzZXQsIG9yCisJICoJLSB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgZG90LCB0aGVyZSBpcyBubyB0cmFpbGluZyBkb3QsCisJICoJICBhbmQgUkVTX0ROU1JDSCBpcyBzZXQuCisJICovCisJaWYgKCghZG90cyAmJiAoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVGTkFNRVMpICE9IDBVKSB8fAorCSAgICAoZG90cyAmJiAhdHJhaWxpbmdfZG90ICYmIChzdGF0cC0+b3B0aW9ucyAmIFJFU19ETlNSQ0gpICE9IDBVKSkgeworCQlpbnQgZG9uZSA9IDA7CisKKwkJZm9yIChkb21haW4gPSAoY29uc3QgY2hhciAqIGNvbnN0ICopc3RhdHAtPmRuc3JjaDsKKwkJICAgICAqZG9tYWluICYmICFkb25lOworCQkgICAgIGRvbWFpbisrKSB7CisJCQlzZWFyY2hlZCA9IDE7CisKKwkJCWlmIChkb21haW5bMF1bMF0gPT0gJ1wwJyB8fAorCQkJICAgIChkb21haW5bMF1bMF0gPT0gJy4nICYmIGRvbWFpblswXVsxXSA9PSAnXDAnKSkKKwkJCQlyb290X29uX2xpc3QrKzsKKworCQkJcmV0ID0gcmVzX25xdWVyeWRvbWFpbihzdGF0cCwgbmFtZSwgKmRvbWFpbiwKKwkJCQkJICAgICAgIGNsYXNzLCB0eXBlLAorCQkJCQkgICAgICAgYW5zd2VyLCBhbnNsZW4pOworCQkJaWYgKHJldCA+IDApCisJCQkJcmV0dXJuIChyZXQpOworCisJCQkvKgorCQkJICogSWYgbm8gc2VydmVyIHByZXNlbnQsIGdpdmUgdXAuCisJCQkgKiBJZiBuYW1lIGlzbid0IGZvdW5kIGluIHRoaXMgZG9tYWluLAorCQkJICoga2VlcCB0cnlpbmcgaGlnaGVyIGRvbWFpbnMgaW4gdGhlIHNlYXJjaCBsaXN0CisJCQkgKiAoaWYgdGhhdCdzIGVuYWJsZWQpLgorCQkJICogT24gYSBOT19EQVRBIGVycm9yLCBrZWVwIHRyeWluZywgb3RoZXJ3aXNlCisJCQkgKiBhIHdpbGRjYXJkIGVudHJ5IG9mIGFub3RoZXIgdHlwZSBjb3VsZCBrZWVwIHVzCisJCQkgKiBmcm9tIGZpbmRpbmcgdGhpcyBlbnRyeSBoaWdoZXIgaW4gdGhlIGRvbWFpbi4KKwkJCSAqIElmIHdlIGdldCBzb21lIG90aGVyIGVycm9yIChuZWdhdGl2ZSBhbnN3ZXIgb3IKKwkJCSAqIHNlcnZlciBmYWlsdXJlKSwgdGhlbiBzdG9wIHNlYXJjaGluZyB1cCwKKwkJCSAqIGJ1dCB0cnkgdGhlIGlucHV0IG5hbWUgYmVsb3cgaW4gY2FzZSBpdCdzCisJCQkgKiBmdWxseS1xdWFsaWZpZWQuCisJCQkgKi8KKwkJCWlmIChlcnJubyA9PSBFQ09OTlJFRlVTRUQpIHsKKwkJCQlSRVNfU0VUX0hfRVJSTk8oc3RhdHAsIFRSWV9BR0FJTik7CisJCQkJcmV0dXJuICgtMSk7CisJCQl9CisKKwkJCXN3aXRjaCAoc3RhdHAtPnJlc19oX2Vycm5vKSB7CisJCQljYXNlIE5PX0RBVEE6CisJCQkJZ290X25vZGF0YSsrOworCQkJCS8qIEZBTExUSFJPVUdIICovCisJCQljYXNlIEhPU1RfTk9UX0ZPVU5EOgorCQkJCS8qIGtlZXAgdHJ5aW5nICovCisJCQkJYnJlYWs7CisJCQljYXNlIFRSWV9BR0FJTjoKKwkJCQlpZiAoaHAtPnJjb2RlID09IFNFUlZGQUlMKSB7CisJCQkJCS8qIHRyeSBuZXh0IHNlYXJjaCBlbGVtZW50LCBpZiBhbnkgKi8KKwkJCQkJZ290X3NlcnZmYWlsKys7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQkvKiBGQUxMVEhST1VHSCAqLworCQkJZGVmYXVsdDoKKwkJCQkvKiBhbnl0aGluZyBlbHNlIGltcGxpZXMgdGhhdCB3ZSdyZSBkb25lICovCisJCQkJZG9uZSsrOworCQkJfQorCisJCQkvKiBpZiB3ZSBnb3QgaGVyZSBmb3Igc29tZSByZWFzb24gb3RoZXIgdGhhbiBETlNSQ0gsCisJCQkgKiB3ZSBvbmx5IHdhbnRlZCBvbmUgaXRlcmF0aW9uIG9mIHRoZSBsb29wLCBzbyBzdG9wLgorCQkJICovCisJCQlpZiAoKHN0YXRwLT5vcHRpb25zICYgUkVTX0ROU1JDSCkgPT0gMFUpCisJCQkJZG9uZSsrOworCQl9CisJfQorCisJLyoKKwkgKiBJZiB0aGUgcXVlcnkgaGFzIG5vdCBhbHJlYWR5IGJlZW4gdHJpZWQgYXMgaXMgdGhlbiB0cnkgaXQKKwkgKiB1bmxlc3MgUkVTX05PVExEUVVFUlkgaXMgc2V0IGFuZCB0aGVyZSB3ZXJlIG5vIGRvdHMuCisJICovCisJaWYgKChkb3RzIHx8ICFzZWFyY2hlZCB8fCAoc3RhdHAtPm9wdGlvbnMgJiBSRVNfTk9UTERRVUVSWSkgPT0gMFUpICYmCisJICAgICEodHJpZWRfYXNfaXMgfHwgcm9vdF9vbl9saXN0KSkgeworCQlyZXQgPSByZXNfbnF1ZXJ5ZG9tYWluKHN0YXRwLCBuYW1lLCBOVUxMLCBjbGFzcywgdHlwZSwKKwkJCQkgICAgICAgYW5zd2VyLCBhbnNsZW4pOworCQlpZiAocmV0ID4gMCkKKwkJCXJldHVybiAocmV0KTsKKwl9CisKKwkvKiBpZiB3ZSBnb3QgaGVyZSwgd2UgZGlkbid0IHNhdGlzZnkgdGhlIHNlYXJjaC4KKwkgKiBpZiB3ZSBkaWQgYW4gaW5pdGlhbCBmdWxsIHF1ZXJ5LCByZXR1cm4gdGhhdCBxdWVyeSdzIEhfRVJSTk8KKwkgKiAobm90ZSB0aGF0IHdlIHdvdWxkbid0IGJlIGhlcmUgaWYgdGhhdCBxdWVyeSBoYWQgc3VjY2VlZGVkKS4KKwkgKiBlbHNlIGlmIHdlIGV2ZXIgZ290IGEgbm9kYXRhLCBzZW5kIHRoYXQgYmFjayBhcyB0aGUgcmVhc29uLgorCSAqIGVsc2Ugc2VuZCBiYWNrIG1lYW5pbmdsZXNzIEhfRVJSTk8sIHRoYXQgYmVpbmcgdGhlIG9uZSBmcm9tCisJICogdGhlIGxhc3QgRE5TUkNIIHdlIGRpZC4KKwkgKi8KKwlpZiAoc2F2ZWRfaGVycm5vICE9IC0xKQorCQlSRVNfU0VUX0hfRVJSTk8oc3RhdHAsIHNhdmVkX2hlcnJubyk7CisJZWxzZSBpZiAoZ290X25vZGF0YSkKKwkJUkVTX1NFVF9IX0VSUk5PKHN0YXRwLCBOT19EQVRBKTsKKwllbHNlIGlmIChnb3Rfc2VydmZhaWwpCisJCVJFU19TRVRfSF9FUlJOTyhzdGF0cCwgVFJZX0FHQUlOKTsKKwlyZXR1cm4gKC0xKTsKK30KKworLyoKKyAqIFBlcmZvcm0gYSBjYWxsIG9uIHJlc19xdWVyeSBvbiB0aGUgY29uY2F0ZW5hdGlvbiBvZiBuYW1lIGFuZCBkb21haW4sCisgKiByZW1vdmluZyBhIHRyYWlsaW5nIGRvdCBmcm9tIG5hbWUgaWYgZG9tYWluIGlzIE5VTEwuCisgKi8KK2ludAorcmVzX25xdWVyeWRvbWFpbihyZXNfc3RhdGUgc3RhdHAsCisJICAgIGNvbnN0IGNoYXIgKm5hbWUsCisJICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwKKwkgICAgaW50IGNsYXNzLCBpbnQgdHlwZSwJLyogY2xhc3MgYW5kIHR5cGUgb2YgcXVlcnkgKi8KKwkgICAgdV9jaGFyICphbnN3ZXIsCQkvKiBidWZmZXIgdG8gcHV0IGFuc3dlciAqLworCSAgICBpbnQgYW5zbGVuKQkJLyogc2l6ZSBvZiBhbnN3ZXIgKi8KK3sKKwljaGFyIG5idWZbTUFYRE5BTUVdOworCWNvbnN0IGNoYXIgKmxvbmduYW1lID0gbmJ1ZjsKKwlpbnQgbiwgZDsKKworI2lmZGVmIERFQlVHCisJaWYgKHN0YXRwLT5vcHRpb25zICYgUkVTX0RFQlVHKQorCQlwcmludGYoIjs7IHJlc19ucXVlcnlkb21haW4oJXMsICVzLCAlZCwgJWQpXG4iLAorCQkgICAgICAgbmFtZSwgZG9tYWluP2RvbWFpbjoiPE5pbD4iLCBjbGFzcywgdHlwZSk7CisjZW5kaWYKKwlpZiAoZG9tYWluID09IE5VTEwpIHsKKwkJLyoKKwkJICogQ2hlY2sgZm9yIHRyYWlsaW5nICcuJzsKKwkJICogY29weSB3aXRob3V0ICcuJyBpZiBwcmVzZW50LgorCQkgKi8KKwkJbiA9IHN0cmxlbihuYW1lKTsKKwkJaWYgKG4gPj0gTUFYRE5BTUUpIHsKKwkJCVJFU19TRVRfSF9FUlJOTyhzdGF0cCwgTk9fUkVDT1ZFUlkpOworCQkJcmV0dXJuICgtMSk7CisJCX0KKwkJbi0tOworCQlpZiAobiA+PSAwICYmIG5hbWVbbl0gPT0gJy4nKSB7CisJCQlzdHJuY3B5KG5idWYsIG5hbWUsIChzaXplX3Qpbik7CisJCQluYnVmW25dID0gJ1wwJzsKKwkJfSBlbHNlCisJCQlsb25nbmFtZSA9IG5hbWU7CisJfSBlbHNlIHsKKwkJbiA9IHN0cmxlbihuYW1lKTsKKwkJZCA9IHN0cmxlbihkb21haW4pOworCQlpZiAobiArIGQgKyAxID49IE1BWEROQU1FKSB7CisJCQlSRVNfU0VUX0hfRVJSTk8oc3RhdHAsIE5PX1JFQ09WRVJZKTsKKwkJCXJldHVybiAoLTEpOworCQl9CisJCXNwcmludGYobmJ1ZiwgIiVzLiVzIiwgbmFtZSwgZG9tYWluKTsKKwl9CisJcmV0dXJuIChyZXNfbnF1ZXJ5KHN0YXRwLCBsb25nbmFtZSwgY2xhc3MsIHR5cGUsIGFuc3dlciwgYW5zbGVuKSk7Cit9CisKK2NvbnN0IGNoYXIgKgorcmVzX2hvc3RhbGlhcyhjb25zdCByZXNfc3RhdGUgc3RhdHAsIGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKmRzdCwgc2l6ZV90IHNpeikgeworCXJldHVybiAoTlVMTCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9yZXNvbHYvcmVzX3JhbmRvbS5jIGIvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19yYW5kb20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTcwYzRmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19yYW5kb20uYwpAQCAtMCwwICsxLDI3NSBAQAorLyogJE9wZW5CU0Q6IHJlc19yYW5kb20uYyx2IDEuMTcgMjAwOC8wNC8xMyAwMDoyODozNSBkam0gRXhwICQgKi8KKworLyoKKyAqIENvcHlyaWdodCAxOTk3IE5pZWxzIFByb3ZvcyA8cHJvdm9zQHBoeXNuZXQudW5pLWhhbWJ1cmcuZGU+CisgKiBDb3B5cmlnaHQgMjAwOCBEYW1pZW4gTWlsbGVyIDxkam1Ab3BlbmJzZC5vcmc+CisgKiBDb3B5cmlnaHQgMjAwOCBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QgKHRocmVhZC1zYWZldHkpCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoZW8gZGUgUmFhZHQgPGRlcmFhZHRAb3BlbmJzZC5vcmc+IGNhbWUgdXAgd2l0aCB0aGUgaWRlYSBvZiB1c2luZworICogc3VjaCBhIG1hdGhlbWF0aWNhbCBzeXN0ZW0gdG8gZ2VuZXJhdGUgbW9yZSByYW5kb20gKHlldCBub24tcmVwZWF0aW5nKQorICogaWRzIHRvIHNvbHZlIHRoZSByZXNvbHZlci9uYW1lZCBwcm9ibGVtLiAgQnV0IE5pZWxzIGRlc2lnbmVkIHRoZQorICogYWN0dWFsIHN5c3RlbSBiYXNlZCBvbiB0aGUgY29uc3RyYWludHMuCisgKgorICogTGF0ZXIgbW9kaWZpZWQgYnkgRGFtaWVuIE1pbGxlciB0byB3cmFwIHRoZSBMQ0cgb3V0cHV0IGluIGEgMTUtYml0CisgKiBwZXJtdXRhdGlvbiBnZW5lcmF0b3IgYmFzZWQgb24gYSBMdWJ5LVJhY2tvZmYgYmxvY2sgY2lwaGVyLiBUaGlzCisgKiBlbnN1cmVzIHRoZSBvdXRwdXQgaXMgbm9uLXJlcGVhdGluZyBhbmQgcHJlc2VydmVzIHRoZSBNU0IgdHdpZGRsZQorICogdHJpY2ssIGJ1dCBtYWtlcyBpdCBtb3JlIHJlc2lzdGFudCB0byBMQ0cgcHJlZGljdGlvbi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIHNlZWQgPSByYW5kb20gMTViaXQKKyAqIG4gPSBwcmltZSwgZzAgPSBnZW5lcmF0b3IgdG8gbiwKKyAqIGogPSByYW5kb20gc28gdGhhdCBnY2QoaixuLTEpID09IDEKKyAqIGcgPSBnMF5qIG1vZCBuIHdpbGwgYmUgYSBnZW5lcmF0b3IgYWdhaW4uCisgKgorICogWFswXSA9IHJhbmRvbSBzZWVkLgorICogWFtuXSA9IGEqWFtuLTFdK2IgbW9kIG0gaXMgYSBMaW5lYXIgQ29uZ3J1ZW50aWFsIEdlbmVyYXRvcgorICogd2l0aCBhID0gN14oZXZlbiByYW5kb20pIG1vZCBtLAorICogICAgICBiID0gcmFuZG9tIHdpdGggZ2NkKGIsbSkgPT0gMQorICogICAgICBtID0gMzExMDQgYW5kIGEgbWF4aW1hbCBwZXJpb2Qgb2YgbS0xLgorICoKKyAqIFRoZSB0cmFuc2FjdGlvbiBpZCBpcyBkZXRlcm1pbmVkIGJ5OgorICogaWRbbl0gPSBzZWVkIHhvciAoZ15YW25dIG1vZCBuKQorICoKKyAqIEVmZmVjdGl2bHkgdGhlIGlkIGlzIHJlc3RyaWN0ZWQgdG8gdGhlIGxvd2VyIDE1IGJpdHMsIHRodXMKKyAqIHlpZWxkaW5nIHR3byBkaWZmZXJlbnQgY3ljbGVzIGJ5IHRvZ2dsaW5nIHRoZSBtc2Igb24gYW5kIG9mZi4KKyAqIFRoaXMgYXZvaWRzIHJldXNlIGlzc3VlcyBjYXVzZWQgYnkgcmVzZWVkaW5nLgorICoKKyAqIFRoZSBvdXRwdXQgb2YgdGhpcyBnZW5lcmF0b3IgaXMgdGhlbiByYW5kb21seSBwZXJtdXRlZCB0aG91Z2ggYQorICogY3VzdG9tIDE1IGJpdCBMdWJ5LVJhY2tvZmYgYmxvY2sgY2lwaGVyLgorICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlICJyZXNvbHZfcHJpdmF0ZS5oIgorCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKy8qIEJJT05JQy1CRUdJTiAqLworc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCAgICAgICAgIF9yZXNfcmFuZG9tX2xvY2sgPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOworI2RlZmluZSAgX1JFU19SQU5ET01fTE9DSygpICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmX3Jlc19yYW5kb21fbG9jaykKKyNkZWZpbmUgIF9SRVNfUkFORE9NX1VOTE9DSygpICBwdGhyZWFkX211dGV4X3VubG9jaygmX3Jlc19yYW5kb21fbG9jaykKKy8qIEJJT05JQy1FTkQgKi8KKworI2RlZmluZSBSVV9PVVQgIAkxODAJLyogVGltZSBhZnRlciB3aWNoIHdpbGwgYmUgcmVzZWVkZWQgKi8KKyNkZWZpbmUgUlVfTUFYCQkzMDAwMAkvKiBVbmlxIGN5Y2xlLCBhdm9pZCBibGFja2phY2sgcHJlZGljdGlvbiAqLworI2RlZmluZSBSVV9HRU4JCTIJLyogU3RhcnRpbmcgZ2VuZXJhdG9yICovCisjZGVmaW5lIFJVX04JCTMyNzQ5CS8qIFJVX04tMSA9IDIqMiozKjI3MjkgKi8KKyNkZWZpbmUgUlVfQUdFTgkJNwkvKiBkZXRlcm1pbmUgcnVfYSBhcyBSVV9BR0VOXigyKnJhbmQpICovCisjZGVmaW5lIFJVX00JCTMxMTA0CS8qIFJVX00gPSAyXjcqM141IC0gZG9uJ3QgY2hhbmdlICovCisjZGVmaW5lIFJVX1JPVU5EUwkxMQkvKiBOdW1iZXIgb2Ygcm91bmRzIGZvciBwZXJtdXRlIChvZGQpICovCisKK3N0cnVjdCBwcmZfY3R4IHsKKwkvKiBQUkYgbG9va3VwIHRhYmxlIGZvciBvZGQgcm91bmRzICg3IGJpdHMgaW5wdXQgdG8gOCBiaXRzIG91dHB1dCkgKi8KKwl1X2NoYXIgcHJmN1soUlVfUk9VTkRTIC8gMikgKiAoMSA8PCA3KV07CisKKwkvKiBQUkYgbG9va3VwIHRhYmxlIGZvciBldmVuIHJvdW5kcyAoOCBiaXRzIGlucHV0IHRvIDcgYml0cyBvdXRwdXQpICovCisJdV9jaGFyIHByZjhbKChSVV9ST1VORFMgKyAxKSAvIDIpICogKDEgPDwgOCldOworfTsKKworI2RlZmluZSBQRkFDX04gMworY29uc3Qgc3RhdGljIHVfaW50MTZfdCBwZmFjdHNbUEZBQ19OXSA9IHsKKwkyLAorCTMsCisJMjcyOQorfTsKKworc3RhdGljIHVfaW50MTZfdCBydV94Oworc3RhdGljIHVfaW50MTZfdCBydV9zZWVkLCBydV9zZWVkMjsKK3N0YXRpYyB1X2ludDE2X3QgcnVfYSwgcnVfYjsKK3N0YXRpYyB1X2ludDE2X3QgcnVfZzsKK3N0YXRpYyB1X2ludDE2X3QgcnVfY291bnRlciA9IDA7CitzdGF0aWMgdV9pbnQxNl90IHJ1X21zYiA9IDA7CitzdGF0aWMgc3RydWN0IHByZl9jdHggKnJ1X3ByZiA9IE5VTEw7CitzdGF0aWMgbG9uZyBydV9yZXNlZWQ7CisKK3N0YXRpYyB1X2ludDE2X3QgcG1vZCh1X2ludDE2X3QsIHVfaW50MTZfdCwgdV9pbnQxNl90KTsKK3N0YXRpYyB2b2lkIHJlc19pbml0aWQodm9pZCk7CisKKy8qCisgKiBEbyBhIGZhc3QgbW9kdWxhciBleHBvbmF0aW9uLCByZXR1cm5lZCB2YWx1ZSB3aWxsIGJlIGluIHRoZSByYW5nZQorICogb2YgMCAtIChtb2QtMSkKKyAqLworc3RhdGljIHVfaW50MTZfdAorcG1vZCh1X2ludDE2X3QgZ2VuLCB1X2ludDE2X3QgZXhwLCB1X2ludDE2X3QgbW9kKQoreworCXVfaW50MTZfdCBzLCB0LCB1OworCisJcyA9IDE7CisJdCA9IGdlbjsKKwl1ID0gZXhwOworCisJd2hpbGUgKHUpIHsKKwkJaWYgKHUgJiAxKQorCQkJcyA9IChzICogdCkgJSBtb2Q7CisJCXUgPj49IDE7CisJCXQgPSAodCAqIHQpICUgbW9kOworCX0KKwlyZXR1cm4gKHMpOworfQorCisvKgorICogMTUtYml0IHBlcm11dGF0aW9uIGJhc2VkIG9uIEx1YnktUmFja29mZiBibG9jayBjaXBoZXIKKyAqLwordV9pbnQKK3Blcm11dGUxNSh1X2ludCBpbikKK3sKKwlpbnQgaTsKKwl1X2ludCBsZWZ0LCByaWdodCwgdG1wOworCisJaWYgKHJ1X3ByZiA9PSBOVUxMKQorCQlyZXR1cm4gaW47CisKKwlsZWZ0ID0gKGluID4+IDgpICYgMHg3ZjsKKwlyaWdodCA9IGluICYgMHhmZjsKKworCS8qCisJICogRWFjaCByb3VuZCBzd2FwcyB0aGUgd2lkdGggb2YgbGVmdCBhbmQgcmlnaHQuIEV2ZW4gcm91bmRzIGhhdmUKKwkgKiBhIDctYml0IGxlZnQsIG9kZCByb3VuZHMgaGF2ZSBhbiA4LWJpdCBsZWZ0LglTaW5jZSB0aGlzIHVzZXMgYW4KKwkgKiBvZGQgbnVtYmVyIG9mIHJvdW5kcywgbGVmdCBpcyBhbHdheXMgOCBiaXRzIHdpZGUgYXQgdGhlIGVuZC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgUlVfUk9VTkRTOyBpKyspIHsKKwkJaWYgKChpICYgMSkgPT0gMCkKKwkJCXRtcCA9IHJ1X3ByZi0+cHJmOFsoaSA8PCAoOCAtIDEpKSB8IHJpZ2h0XSAmIDB4N2Y7CisJCWVsc2UKKwkJCXRtcCA9IHJ1X3ByZi0+cHJmN1soKGkgLSAxKSA8PCAoNyAtIDEpKSB8IHJpZ2h0XTsKKwkJdG1wIF49IGxlZnQ7CisJCWxlZnQgPSByaWdodDsKKwkJcmlnaHQgPSB0bXA7CisJfQorCisJcmV0dXJuIChyaWdodCA8PCA4KSB8IGxlZnQ7Cit9CisKKy8qCisgKiBJbml0aWFsaXplcyB0aGUgc2VlZCBhbmQgY2hvb3NlcyBhIHN1aXRhYmxlIGdlbmVyYXRvci4gQWxzbyB0b2dnbGVzCisgKiB0aGUgbXNiIGZsYWcuIFRoZSBtc2IgZmxhZyBpcyB1c2VkIHRvIGdlbmVyYXRlIHR3byBkaXN0aW5jdAorICogY3ljbGVzIG9mIHJhbmRvbSBudW1iZXJzIGFuZCB0aHVzIGF2b2lkaW5nIHJldXNlIG9mIGlkcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHJlc19yYW5kb21pZCgpIHdoZW4gbmVlZGVkLCBhbgorICogYXBwbGljYXRpb24gZG9lcyBub3QgaGF2ZSB0byB3b3JyeSBhYm91dCBpdC4KKyAqLworc3RhdGljIHZvaWQKK3Jlc19pbml0aWQodm9pZCkKK3sKKwl1X2ludDE2X3QgaiwgaTsKKwl1X2ludDMyX3QgdG1wOworCWludCBub3ByaW1lID0gMTsKKwlzdHJ1Y3QgdGltZXZhbCB0djsKKworCXJ1X3ggPSBhcmM0cmFuZG9tX3VuaWZvcm0oUlVfTSk7CisKKwkvKiAxNSBiaXRzIG9mIHJhbmRvbSBzZWVkICovCisJdG1wID0gYXJjNHJhbmRvbSgpOworCXJ1X3NlZWQgPSAodG1wID4+IDE2KSAmIDB4N0ZGRjsKKwlydV9zZWVkMiA9IHRtcCAmIDB4N0ZGRjsKKworCS8qIERldGVybWluZSB0aGUgTENHIHdlIHVzZSAqLworCXRtcCA9IGFyYzRyYW5kb20oKTsKKwlydV9iID0gKHRtcCAmIDB4ZmZmZSkgfCAxOworCXJ1X2EgPSBwbW9kKFJVX0FHRU4sICh0bXAgPj4gMTYpICYgMHhmZmZlLCBSVV9NKTsKKwl3aGlsZSAocnVfYiAlIDMgPT0gMCkKKwkJcnVfYiArPSAyOworCisJaiA9IGFyYzRyYW5kb21fdW5pZm9ybShSVV9OKTsKKworCS8qCisJICogRG8gYSBmYXN0IGdjZChqLFJVX04tMSksIHNvIHdlIGNhbiBmaW5kIGEgaiB3aXRoCisJICogZ2NkKGosIFJVX04tMSkgPT0gMSwgZ2l2aW5nIGEgbmV3IGdlbmVyYXRvciBmb3IKKwkgKiBSVV9HRU5eaiBtb2QgUlVfTgorCSAqLworCisJd2hpbGUgKG5vcHJpbWUpIHsKKwkJZm9yIChpID0gMDsgaSA8IFBGQUNfTjsgaSsrKQorCQkJaWYgKGogJSBwZmFjdHNbaV0gPT0gMCkKKwkJCQlicmVhazsKKworCQlpZiAoaSA+PSBQRkFDX04pCisJCQlub3ByaW1lID0gMDsKKwkJZWxzZQorCQkJaiA9IChqICsgMSkgJSBSVV9OOworCX0KKworCXJ1X2cgPSBwbW9kKFJVX0dFTiwgaiwgUlVfTik7CisJcnVfY291bnRlciA9IDA7CisKKwkvKiBJbml0aWFsaXNlIFBSRiBmb3IgTHVieS1SYWNrb2ZmIHBlcm11dGF0aW9uICovCisJaWYgKHJ1X3ByZiA9PSBOVUxMKQorCQlydV9wcmYgPSBtYWxsb2Moc2l6ZW9mKCpydV9wcmYpKTsKKwlpZiAocnVfcHJmICE9IE5VTEwpCisJCWFyYzRyYW5kb21fYnVmKHJ1X3ByZiwgc2l6ZW9mKCpydV9wcmYpKTsKKworCWdldHRpbWVvZmRheSgmdHYsIE5VTEwpOworCXJ1X3Jlc2VlZCA9IHR2LnR2X3NlYyArIFJVX09VVDsKKwlydV9tc2IgPSBydV9tc2IgPT0gMHg4MDAwID8gMCA6IDB4ODAwMDsKK30KKwordV9pbnQKK3Jlc19yYW5kb21pZCh2b2lkKQoreworCXN0cnVjdCB0aW1ldmFsIHR2OworICAgICAgICB1X2ludCAgcmVzdWx0OworCisgICAgICAgIF9SRVNfUkFORE9NX0xPQ0soKQorCWdldHRpbWVvZmRheSgmdHYsIE5VTEwpOworCWlmIChydV9jb3VudGVyID49IFJVX01BWCB8fCB0di50dl9zZWMgPiBydV9yZXNlZWQpCisJCXJlc19pbml0aWQoKTsKKworCS8qIExpbmVhciBDb25ncnVlbnRpYWwgR2VuZXJhdG9yICovCisJcnVfeCA9IChydV9hICogcnVfeCArIHJ1X2IpICUgUlVfTTsKKwlydV9jb3VudGVyKys7CisKKwlyZXN1bHQgPSBwZXJtdXRlMTUocnVfc2VlZCBeIHBtb2QocnVfZywgcnVfc2VlZDIgKyBydV94LCBSVV9OKSkgfCBydV9tc2I7CisgICAgICAgIF9SRVNfUkFORE9NX1VOTE9DSygpCisgICAgICAgIHJldHVybiByZXN1bHQ7Cit9CisKKyNpZiAwCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWludCBpLCBuOworCXVfaW50MTZfdCB3ZXJ0OworCisJcmVzX2luaXRpZCgpOworCisJcHJpbnRmKCJHZW5lcmF0b3I6ICV1XG4iLCBydV9nKTsKKwlwcmludGYoIlNlZWQ6ICV1XG4iLCBydV9zZWVkKTsKKwlwcmludGYoIlJlc2VlZCBhdCAlbGRcbiIsIHJ1X3Jlc2VlZCk7CisJcHJpbnRmKCJSdV9YOiAldVxuIiwgcnVfeCk7CisJcHJpbnRmKCJSdV9BOiAldVxuIiwgcnVfYSk7CisJcHJpbnRmKCJSdV9COiAldVxuIiwgcnVfYik7CisKKwluID0gYXJnYyA+IDEgPyBhdG9pKGFyZ3ZbMV0pIDogNjAwMDE7CisJZm9yIChpPTA7aTxuO2krKykgeworCQl3ZXJ0ID0gcmVzX3JhbmRvbWlkKCk7CisJCXByaW50ZigiJXVcbiIsIHdlcnQpOworCX0KKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9yZXNvbHYvcmVzX3NlbmQuYyBiL2xpYmMvbmV0YnNkL3Jlc29sdi9yZXNfc2VuZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhY2E3NjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL25ldGJzZC9yZXNvbHYvcmVzX3NlbmQuYwpAQCAtMCwwICsxLDExNjggQEAKKy8qCSROZXRCU0Q6IHJlc19zZW5kLmMsdiAxLjkgMjAwNi8wMS8yNCAxNzo0MToyNSBjaHJpc3RvcyBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IDIwMDggIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdCAoc291cmNlIHBvcnQgcmFuZG9taXphdGlvbikKKyAqIENvcHlyaWdodCAoYykgMTk4NSwgMTk4OSwgMTk5MworICogICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqIAlUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCisgKiAJQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5kIGl0cyBjb250cmlidXRvcnMuCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTMgYnkgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24uCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLCBhbmQgdGhhdAorICogdGhlIG5hbWUgb2YgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24gbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IKKyAqIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgZG9jdW1lbnQgb3Igc29mdHdhcmUgd2l0aG91dAorICogc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgRElHSVRBTCBFUVVJUE1FTlQgQ09SUC4gRElTQ0xBSU1TIEFMTAorICogV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLCBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgIElOIE5PIEVWRU5UIFNIQUxMIERJR0lUQUwgRVFVSVBNRU5UCisgKiBDT1JQT1JBVElPTiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IKKyAqIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTCisgKiBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLgorICovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0xOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAorICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCisjaWZkZWYgbm90ZGVmCitzdGF0aWMgY29uc3QgY2hhciBzY2NzaWRbXSA9ICJAKCMpcmVzX3NlbmQuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOworc3RhdGljIGNvbnN0IGNoYXIgcmNzaWRbXSA9ICJJZDogcmVzX3NlbmQuYyx2IDEuNS4yLjIuNC41IDIwMDQvMDgvMTAgMDI6MTk6NTYgbWFya2EgRXhwIjsKKyNlbHNlCitfX1JDU0lEKCIkTmV0QlNEOiByZXNfc2VuZC5jLHYgMS45IDIwMDYvMDEvMjQgMTc6NDE6MjUgY2hyaXN0b3MgRXhwICQiKTsKKyNlbmRpZgorI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KKworLyogc2V0IHRvIDEgdG8gdXNlIG91ciBzbWFsbC9zaW1wbGUvbGltaXRlZCBETlMgY2FjaGUgKi8KKyNkZWZpbmUgIFVTRV9SRVNPTFZfQ0FDSEUgIDEKKworLyoKKyAqIFNlbmQgcXVlcnkgdG8gbmFtZSBzZXJ2ZXIgYW5kIHdhaXQgZm9yIHJlcGx5LgorICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvdWlvLmg+CisKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbjYuaD4KKyNpbmNsdWRlICJhcnBhX25hbWVzZXIuaCIKKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNpZmRlZiBBTkRST0lEX0NIQU5HRVMKKyNpbmNsdWRlICJyZXNvbHZfcHJpdmF0ZS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxyZXNvbHYuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlIDxpc2MvZXZlbnRsaWIuaD4KKworI2lmIFVTRV9SRVNPTFZfQ0FDSEUKKyMgIGluY2x1ZGUgPHJlc29sdl9jYWNoZS5oPgorI2VuZGlmCisKKyNpZm5kZWYgREVfQ09OU1QKKyNkZWZpbmUgREVfQ09OU1QoYyx2KSAgIHYgPSAoKGMpID8gXAorICAgIHN0cmNocigoY29uc3Qgdm9pZCAqKShjKSwgKihjb25zdCBjaGFyICopKGNvbnN0IHZvaWQgKikoYykpIDogTlVMTCkKKyNlbmRpZgorCisvKiBPcHRpb25zLiAgTGVhdmUgdGhlbSBvbi4gKi8KKyNpZm5kZWYgREVCVUcKKyNkZWZpbmUgREVCVUcKKyNlbmRpZgorI2luY2x1ZGUgInJlc19kZWJ1Zy5oIgorI2luY2x1ZGUgInJlc19wcml2YXRlLmgiCisKKyNkZWZpbmUgRVhUKHJlcykgKChyZXMpLT5fdS5fZXh0KQorCitzdGF0aWMgY29uc3QgaW50IGhpZ2hlc3RGRCA9IEZEX1NFVFNJWkUgLSAxOworCisvKiBGb3J3YXJkLiAqLworCitzdGF0aWMgaW50CQlnZXRfc2FsZW4gX19QKChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKikpOworc3RhdGljIHN0cnVjdCBzb2NrYWRkciAqIGdldF9uc2FkZHIgX19QKChyZXNfc3RhdGUsIHNpemVfdCkpOworc3RhdGljIGludAkJc2VuZF92YyhyZXNfc3RhdGUsIGNvbnN0IHVfY2hhciAqLCBpbnQsCisJCQkJdV9jaGFyICosIGludCwgaW50ICosIGludCk7CitzdGF0aWMgaW50CQlzZW5kX2RnKHJlc19zdGF0ZSwgY29uc3QgdV9jaGFyICosIGludCwKKwkJCQl1X2NoYXIgKiwgaW50LCBpbnQgKiwgaW50LAorCQkJCWludCAqLCBpbnQgKik7CitzdGF0aWMgdm9pZAkJQWVycm9yKGNvbnN0IHJlc19zdGF0ZSwgRklMRSAqLCBjb25zdCBjaGFyICosIGludCwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKiwgaW50KTsKK3N0YXRpYyB2b2lkCQlQZXJyb3IoY29uc3QgcmVzX3N0YXRlLCBGSUxFICosIGNvbnN0IGNoYXIgKiwgaW50KTsKK3N0YXRpYyBpbnQJCXNvY2tfZXEoc3RydWN0IHNvY2thZGRyICosIHN0cnVjdCBzb2NrYWRkciAqKTsKKyNpZmRlZiBORUVEX1BTRUxFQ1QKK3N0YXRpYyBpbnQJCXBzZWxlY3QoaW50LCB2b2lkICosIHZvaWQgKiwgdm9pZCAqLAorCQkJCXN0cnVjdCB0aW1lc3BlYyAqLAorCQkJCWNvbnN0IHNpZ3NldF90ICopOworI2VuZGlmCit2b2lkIHJlc19wcXVlcnkoY29uc3QgcmVzX3N0YXRlLCBjb25zdCB1X2NoYXIgKiwgaW50LCBGSUxFICopOworCisKKy8qIEJJT05JQy1CRUdJTjogaW1wbGVtZW50IHNvdXJjZSBwb3J0IHJhbmRvbWl6YXRpb24gKi8KK3R5cGVkZWYgdW5pb24geworICAgIHN0cnVjdCBzb2NrYWRkciAgICAgIHNhOworICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAgIHNpbjsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42ICBzaW42OworfSBfc29ja2FkZHJfdW5pb247CisKK3N0YXRpYyBpbnQKK3JhbmRvbV9iaW5kKCBpbnQgIHMsIGludCAgZmFtaWx5ICkKK3sKKyAgICBfc29ja2FkZHJfdW5pb24gIHU7CisgICAgaW50ICAgICAgICAgICAgICBqOworICAgIHNvY2tsZW5fdCAgICAgICAgc2xlbjsKKworICAgIC8qIGNsZWFyIGFsbCwgdGhpcyBhbHNvIHNldHMgdGhlIElQNC82IGFkZHJlc3MgdG8gJ2FueScgKi8KKyAgICBtZW1zZXQoICZ1LCAwLCBzaXplb2YgdSApOworCisgICAgc3dpdGNoIChmYW1pbHkpIHsKKyAgICAgICAgY2FzZSBBRl9JTkVUOgorICAgICAgICAgICAgdS5zaW4uc2luX2ZhbWlseSA9IGZhbWlseTsKKyAgICAgICAgICAgIHNsZW4gICAgICAgICAgICAgPSBzaXplb2YgdS5zaW47CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBRl9JTkVUNjoKKyAgICAgICAgICAgIHUuc2luNi5zaW42X2ZhbWlseSA9IGZhbWlseTsKKyAgICAgICAgICAgIHNsZW4gICAgICAgICAgICAgICA9IHNpemVvZiB1LnNpbjY7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGVycm5vID0gRVBST1RPOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qIGZpcnN0IHRyeSB0byBiaW5kIHRvIGEgcmFuZG9tIHNvdXJjZSBwb3J0IGEgZmV3IHRpbWVzICovCisgICAgZm9yIChqID0gMDsgaiA8IDEwOyBqKyspIHsKKyAgICAgICAgLyogZmluZCBhIHJhbmRvbSBwb3J0IGJldHdlZW4gMTAyNSAuLiA2NTUzNCAqLworICAgICAgICBpbnQgIHBvcnQgPSAxMDI1ICsgKHJlc19yYW5kb21pZCgpICUgKDY1NTM1LTEwMjUpKTsKKyAgICAgICAgaWYgKGZhbWlseSA9PSBBRl9JTkVUKQorICAgICAgICAgICAgdS5zaW4uc2luX3BvcnQgPSBodG9ucyhwb3J0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdS5zaW42LnNpbjZfcG9ydCA9IGh0b25zKHBvcnQpOworCisgICAgICAgIGlmICggIWJpbmQoIHMsICZ1LnNhLCBzbGVuICkgKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLyogbm90aGluZyBhZnRlciAxMCB0cmllcywgb3VyIG5ldHdvcmsgdGFibGUgaXMgcHJvYmFibHkgYnVzeSAqLworICAgIC8qIGxldCB0aGUgc3lzdGVtIGRlY2lkZSB3aGljaCBwb3J0IGlzIGJlc3QgKi8KKyAgICBpZiAoZmFtaWx5ID09IEFGX0lORVQpCisgICAgICAgIHUuc2luLnNpbl9wb3J0ID0gMDsKKyAgICBlbHNlCisgICAgICAgIHUuc2luNi5zaW42X3BvcnQgPSAwOworCisgICAgcmV0dXJuIGJpbmQoIHMsICZ1LnNhLCBzbGVuICk7Cit9CisvKiBCSU9OSUMtRU5EICovCisKK3N0YXRpYyBjb25zdCBpbnQgbmlmbGFncyA9IE5JX05VTUVSSUNIT1NUIHwgTklfTlVNRVJJQ1NFUlY7CisKKy8qIFB1YmxpYy4gKi8KKworLyogaW50CisgKiByZXNfaXNvdXJzZXJ2ZXIoaW5hKQorICoJbG9va3MgdXAgImluYSIgaW4gX3Jlcy5uc19hZGRyX2xpc3RbXQorICogcmV0dXJuczoKKyAqCTAgIDogbm90IGZvdW5kCisgKgk+MCA6IGZvdW5kCisgKiBhdXRob3I6CisgKglwYXVsIHZpeGllLCAyOW1heTk0CisgKi8KK2ludAorcmVzX291cnNlcnZlcl9wKGNvbnN0IHJlc19zdGF0ZSBzdGF0cCwgY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYSkgeworCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqaW5wLCAqc3J2OworCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKmluNnAsICpzcnY2OworCWludCBuczsKKworCXN3aXRjaCAoc2EtPnNhX2ZhbWlseSkgeworCWNhc2UgQUZfSU5FVDoKKwkJaW5wID0gKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqKShjb25zdCB2b2lkICopc2E7CisJCWZvciAobnMgPSAwOyAgbnMgPCBzdGF0cC0+bnNjb3VudDsgIG5zKyspIHsKKwkJCXNydiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikodm9pZCAqKWdldF9uc2FkZHIoc3RhdHAsIChzaXplX3QpbnMpOworCQkJaWYgKHNydi0+c2luX2ZhbWlseSA9PSBpbnAtPnNpbl9mYW1pbHkgJiYKKwkJCSAgICBzcnYtPnNpbl9wb3J0ID09IGlucC0+c2luX3BvcnQgJiYKKwkJCSAgICAoc3J2LT5zaW5fYWRkci5zX2FkZHIgPT0gSU5BRERSX0FOWSB8fAorCQkJICAgICBzcnYtPnNpbl9hZGRyLnNfYWRkciA9PSBpbnAtPnNpbl9hZGRyLnNfYWRkcikpCisJCQkJcmV0dXJuICgxKTsKKwkJfQorCQlicmVhazsKKwljYXNlIEFGX0lORVQ2OgorCQlpZiAoRVhUKHN0YXRwKS5leHQgPT0gTlVMTCkKKwkJCWJyZWFrOworCQlpbjZwID0gKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKikoY29uc3Qgdm9pZCAqKXNhOworCQlmb3IgKG5zID0gMDsgIG5zIDwgc3RhdHAtPm5zY291bnQ7ICBucysrKSB7CisJCQlzcnY2ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikodm9pZCAqKWdldF9uc2FkZHIoc3RhdHAsIChzaXplX3QpbnMpOworCQkJaWYgKHNydjYtPnNpbjZfZmFtaWx5ID09IGluNnAtPnNpbjZfZmFtaWx5ICYmCisJCQkgICAgc3J2Ni0+c2luNl9wb3J0ID09IGluNnAtPnNpbjZfcG9ydCAmJgorI2lmZGVmIEhBVkVfU0lONl9TQ09QRV9JRAorCQkJICAgIChzcnY2LT5zaW42X3Njb3BlX2lkID09IDAgfHwKKwkJCSAgICAgc3J2Ni0+c2luNl9zY29wZV9pZCA9PSBpbjZwLT5zaW42X3Njb3BlX2lkKSAmJgorI2VuZGlmCisJCQkgICAgKElONl9JU19BRERSX1VOU1BFQ0lGSUVEKCZzcnY2LT5zaW42X2FkZHIpIHx8CisJCQkgICAgIElONl9BUkVfQUREUl9FUVVBTCgmc3J2Ni0+c2luNl9hZGRyLCAmaW42cC0+c2luNl9hZGRyKSkpCisJCQkJcmV0dXJuICgxKTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJcmV0dXJuICgwKTsKK30KKworLyogaW50CisgKiByZXNfbmFtZWlucXVlcnkobmFtZSwgdHlwZSwgY2xhc3MsIGJ1ZiwgZW9tKQorICoJbG9vayBmb3IgKG5hbWUsdHlwZSxjbGFzcykgaW4gdGhlIHF1ZXJ5IHNlY3Rpb24gb2YgcGFja2V0IChidWYsZW9tKQorICogcmVxdWlyZXM6CisgKglidWYgKyBIRklYRURTWiA8PSBlb20KKyAqIHJldHVybnM6CisgKgktMSA6IGZvcm1hdCBlcnJvcgorICoJMCAgOiBub3QgZm91bmQKKyAqCT4wIDogZm91bmQKKyAqIGF1dGhvcjoKKyAqCXBhdWwgdml4aWUsIDI5bWF5OTQKKyAqLworaW50CityZXNfbmFtZWlucXVlcnkoY29uc3QgY2hhciAqbmFtZSwgaW50IHR5cGUsIGludCBjbGFzcywKKwkJY29uc3QgdV9jaGFyICpidWYsIGNvbnN0IHVfY2hhciAqZW9tKQoreworCWNvbnN0IHVfY2hhciAqY3AgPSBidWYgKyBIRklYRURTWjsKKwlpbnQgcWRjb3VudCA9IG50b2hzKCgoY29uc3QgSEVBREVSKikoY29uc3Qgdm9pZCAqKWJ1ZiktPnFkY291bnQpOworCisJd2hpbGUgKHFkY291bnQtLSA+IDApIHsKKwkJY2hhciB0bmFtZVtNQVhETkFNRSsxXTsKKwkJaW50IG4sIHR0eXBlLCB0Y2xhc3M7CisKKwkJbiA9IGRuX2V4cGFuZChidWYsIGVvbSwgY3AsIHRuYW1lLCBzaXplb2YgdG5hbWUpOworCQlpZiAobiA8IDApCisJCQlyZXR1cm4gKC0xKTsKKwkJY3AgKz0gbjsKKwkJaWYgKGNwICsgMiAqIElOVDE2U1ogPiBlb20pCisJCQlyZXR1cm4gKC0xKTsKKwkJdHR5cGUgPSBuc19nZXQxNihjcCk7IGNwICs9IElOVDE2U1o7CisJCXRjbGFzcyA9IG5zX2dldDE2KGNwKTsgY3AgKz0gSU5UMTZTWjsKKwkJaWYgKHR0eXBlID09IHR5cGUgJiYgdGNsYXNzID09IGNsYXNzICYmCisJCSAgICBuc19zYW1lbmFtZSh0bmFtZSwgbmFtZSkgPT0gMSkKKwkJCXJldHVybiAoMSk7CisJfQorCXJldHVybiAoMCk7Cit9CisKKy8qIGludAorICogcmVzX3F1ZXJpZXNtYXRjaChidWYxLCBlb20xLCBidWYyLCBlb20yKQorICoJaXMgdGhlcmUgYSAxOjEgbWFwcGluZyBvZiAobmFtZSx0eXBlLGNsYXNzKQorICoJaW4gKGJ1ZjEsZW9tMSkgYW5kIChidWYyLGVvbTIpPworICogcmV0dXJuczoKKyAqCS0xIDogZm9ybWF0IGVycm9yCisgKgkwICA6IG5vdCBhIDE6MSBtYXBwaW5nCisgKgk+MCA6IGlzIGEgMToxIG1hcHBpbmcKKyAqIGF1dGhvcjoKKyAqCXBhdWwgdml4aWUsIDI5bWF5OTQKKyAqLworaW50CityZXNfcXVlcmllc21hdGNoKGNvbnN0IHVfY2hhciAqYnVmMSwgY29uc3QgdV9jaGFyICplb20xLAorCQkgY29uc3QgdV9jaGFyICpidWYyLCBjb25zdCB1X2NoYXIgKmVvbTIpCit7CisJY29uc3QgdV9jaGFyICpjcCA9IGJ1ZjEgKyBIRklYRURTWjsKKwlpbnQgcWRjb3VudCA9IG50b2hzKCgoY29uc3QgSEVBREVSKikoY29uc3Qgdm9pZCAqKWJ1ZjEpLT5xZGNvdW50KTsKKworCWlmIChidWYxICsgSEZJWEVEU1ogPiBlb20xIHx8IGJ1ZjIgKyBIRklYRURTWiA+IGVvbTIpCisJCXJldHVybiAoLTEpOworCisJLyoKKwkgKiBPbmx5IGhlYWRlciBzZWN0aW9uIHByZXNlbnQgaW4gcmVwbGllcyB0bworCSAqIGR5bmFtaWMgdXBkYXRlIHBhY2tldHMuCisJICovCisJaWYgKCgoKGNvbnN0IEhFQURFUiAqKShjb25zdCB2b2lkICopYnVmMSktPm9wY29kZSA9PSBuc19vX3VwZGF0ZSkgJiYKKwkgICAgKCgoY29uc3QgSEVBREVSICopKGNvbnN0IHZvaWQgKilidWYyKS0+b3Bjb2RlID09IG5zX29fdXBkYXRlKSkKKwkJcmV0dXJuICgxKTsKKworCWlmIChxZGNvdW50ICE9IG50b2hzKCgoY29uc3QgSEVBREVSKikoY29uc3Qgdm9pZCAqKWJ1ZjIpLT5xZGNvdW50KSkKKwkJcmV0dXJuICgwKTsKKwl3aGlsZSAocWRjb3VudC0tID4gMCkgeworCQljaGFyIHRuYW1lW01BWEROQU1FKzFdOworCQlpbnQgbiwgdHR5cGUsIHRjbGFzczsKKworCQluID0gZG5fZXhwYW5kKGJ1ZjEsIGVvbTEsIGNwLCB0bmFtZSwgc2l6ZW9mIHRuYW1lKTsKKwkJaWYgKG4gPCAwKQorCQkJcmV0dXJuICgtMSk7CisJCWNwICs9IG47CisJCWlmIChjcCArIDIgKiBJTlQxNlNaID4gZW9tMSkKKwkJCXJldHVybiAoLTEpOworCQl0dHlwZSA9IG5zX2dldDE2KGNwKTsJY3AgKz0gSU5UMTZTWjsKKwkJdGNsYXNzID0gbnNfZ2V0MTYoY3ApOyBjcCArPSBJTlQxNlNaOworCQlpZiAoIXJlc19uYW1laW5xdWVyeSh0bmFtZSwgdHR5cGUsIHRjbGFzcywgYnVmMiwgZW9tMikpCisJCQlyZXR1cm4gKDApOworCX0KKwlyZXR1cm4gKDEpOworfQorCisKK2ludAorcmVzX25zZW5kKHJlc19zdGF0ZSBzdGF0cCwKKwkgIGNvbnN0IHVfY2hhciAqYnVmLCBpbnQgYnVmbGVuLCB1X2NoYXIgKmFucywgaW50IGFuc3NpeikKK3sKKwlpbnQgZ290c29tZXdoZXJlLCB0ZXJybm8sIHRyeSwgdl9jaXJjdWl0LCByZXNwbGVuLCBucywgbjsKKwljaGFyIGFidWZbTklfTUFYSE9TVF07CisjaWYgVVNFX1JFU09MVl9DQUNIRQorICAgICAgICBzdHJ1Y3QgcmVzb2x2X2NhY2hlKiAgY2FjaGU7CisgICAgICAgIFJlc29sdkNhY2hlU3RhdHVzICAgICBjYWNoZV9zdGF0dXMgPSBSRVNPTFZfQ0FDSEVfVU5TVVBQT1JURUQ7CisjZW5kaWYKKworCWlmIChzdGF0cC0+bnNjb3VudCA9PSAwKSB7CisJCWVycm5vID0gRVNSQ0g7CisJCXJldHVybiAoLTEpOworCX0KKwlpZiAoYW5zc2l6IDwgSEZJWEVEU1opIHsKKwkJZXJybm8gPSBFSU5WQUw7CisJCXJldHVybiAoLTEpOworCX0KKwlEcHJpbnRRKChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRykgfHwgKHN0YXRwLT5wZmNvZGUgJiBSRVNfUFJGX1FVRVJZKSwKKwkJKHN0ZG91dCwgIjs7IHJlc19zZW5kKClcbiIpLCBidWYsIGJ1Zmxlbik7CisJdl9jaXJjdWl0ID0gKHN0YXRwLT5vcHRpb25zICYgUkVTX1VTRVZDKSB8fCBidWZsZW4gPiBQQUNLRVRTWjsKKwlnb3Rzb21ld2hlcmUgPSAwOworCXRlcnJubyA9IEVUSU1FRE9VVDsKKworI2lmIFVTRV9SRVNPTFZfQ0FDSEUKKyAgICAgICAgY2FjaGUgPSBfX2dldF9yZXNfY2FjaGUoKTsKKyAgICAgICAgaWYgKGNhY2hlICE9IE5VTEwpIHsKKyAgICAgICAgICAgIGludCAgYW5zbGVuID0gMDsKKyAgICAgICAgICAgIGNhY2hlX3N0YXR1cyA9IF9yZXNvbHZfY2FjaGVfbG9va3VwKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZSwgYnVmLCBidWZsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFucywgYW5zc2l6LCAmYW5zbGVuKTsKKworICAgICAgICAgICAgaWYgKGNhY2hlX3N0YXR1cyA9PSBSRVNPTFZfQ0FDSEVfRk9VTkQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gYW5zbGVuOworICAgICAgICAgICAgfQorICAgICAgICB9CisjZW5kaWYKKworCS8qCisJICogSWYgdGhlIG5zX2FkZHJfbGlzdCBpbiB0aGUgcmVzb2x2ZXIgY29udGV4dCBoYXMgY2hhbmdlZCwgdGhlbgorCSAqIGludmFsaWRhdGUgb3VyIGNhY2hlZCBjb3B5IGFuZCB0aGUgYXNzb2NpYXRlZCB0aW1pbmcgZGF0YS4KKwkgKi8KKwlpZiAoRVhUKHN0YXRwKS5uc2NvdW50ICE9IDApIHsKKwkJaW50IG5lZWRjbG9zZSA9IDA7CisJCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHBlZXI7CisJCXNvY2tsZW5fdCBwZWVybGVuOworCisJCWlmIChFWFQoc3RhdHApLm5zY291bnQgIT0gc3RhdHAtPm5zY291bnQpCisJCQluZWVkY2xvc2UrKzsKKwkJZWxzZQorCQkJZm9yIChucyA9IDA7IG5zIDwgc3RhdHAtPm5zY291bnQ7IG5zKyspIHsKKwkJCQlpZiAoc3RhdHAtPm5zYWRkcl9saXN0W25zXS5zaW5fZmFtaWx5ICYmCisJCQkJICAgICFzb2NrX2VxKChzdHJ1Y3Qgc29ja2FkZHIgKikodm9pZCAqKSZzdGF0cC0+bnNhZGRyX2xpc3RbbnNdLAorCQkJCQkgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikodm9pZCAqKSZFWFQoc3RhdHApLmV4dC0+bnNhZGRyc1tuc10pKSB7CisJCQkJCW5lZWRjbG9zZSsrOworCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCQlpZiAoRVhUKHN0YXRwKS5uc3NvY2tzW25zXSA9PSAtMSkKKwkJCQkJY29udGludWU7CisJCQkJcGVlcmxlbiA9IHNpemVvZihwZWVyKTsKKwkJCQlpZiAoZ2V0c29ja25hbWUoRVhUKHN0YXRwKS5uc3NvY2tzW25zXSwKKwkJCQkgICAgKHN0cnVjdCBzb2NrYWRkciAqKSh2b2lkICopJnBlZXIsICZwZWVybGVuKSA8IDApIHsKKwkJCQkJbmVlZGNsb3NlKys7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlpZiAoIXNvY2tfZXEoKHN0cnVjdCBzb2NrYWRkciAqKSh2b2lkICopJnBlZXIsCisJCQkJICAgIGdldF9uc2FkZHIoc3RhdHAsIChzaXplX3QpbnMpKSkgeworCQkJCQluZWVkY2xvc2UrKzsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQlpZiAobmVlZGNsb3NlKSB7CisJCQlyZXNfbmNsb3NlKHN0YXRwKTsKKwkJCUVYVChzdGF0cCkubnNjb3VudCA9IDA7CisJCX0KKwl9CisKKwkvKgorCSAqIE1heWJlIGluaXRpYWxpemUgb3VyIHByaXZhdGUgY29weSBvZiB0aGUgbnNfYWRkcl9saXN0LgorCSAqLworCWlmIChFWFQoc3RhdHApLm5zY291bnQgPT0gMCkgeworCQlmb3IgKG5zID0gMDsgbnMgPCBzdGF0cC0+bnNjb3VudDsgbnMrKykgeworCQkJRVhUKHN0YXRwKS5uc3RpbWVzW25zXSA9IFJFU19NQVhUSU1FOworCQkJRVhUKHN0YXRwKS5uc3NvY2tzW25zXSA9IC0xOworCQkJaWYgKCFzdGF0cC0+bnNhZGRyX2xpc3RbbnNdLnNpbl9mYW1pbHkpCisJCQkJY29udGludWU7CisJCQlFWFQoc3RhdHApLmV4dC0+bnNhZGRyc1tuc10uc2luID0KKwkJCQkgc3RhdHAtPm5zYWRkcl9saXN0W25zXTsKKwkJfQorCQlFWFQoc3RhdHApLm5zY291bnQgPSBzdGF0cC0+bnNjb3VudDsKKwl9CisKKwkvKgorCSAqIFNvbWUgcmVzb2x2ZXJzIHdhbnQgdG8gZXZlbiBvdXQgdGhlIGxvYWQgb24gdGhlaXIgbmFtZXNlcnZlcnMuCisJICogTm90ZSB0aGF0IFJFU19CTEFTVCBvdmVycmlkZXMgUkVTX1JPVEFURS4KKwkgKi8KKwlpZiAoKHN0YXRwLT5vcHRpb25zICYgUkVTX1JPVEFURSkgIT0gMFUgJiYKKwkgICAgKHN0YXRwLT5vcHRpb25zICYgUkVTX0JMQVNUKSA9PSAwVSkgeworCQl1bmlvbiByZXNfc29ja2FkZHJfdW5pb24gaW51OworCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gaW5hOworCQlpbnQgbGFzdG5zID0gc3RhdHAtPm5zY291bnQgLSAxOworCQlpbnQgZmQ7CisJCXVfaW50MTZfdCBuc3RpbWU7CisKKwkJaWYgKEVYVChzdGF0cCkuZXh0ICE9IE5VTEwpCisJCQlpbnUgPSBFWFQoc3RhdHApLmV4dC0+bnNhZGRyc1swXTsKKwkJaW5hID0gc3RhdHAtPm5zYWRkcl9saXN0WzBdOworCQlmZCA9IEVYVChzdGF0cCkubnNzb2Nrc1swXTsKKwkJbnN0aW1lID0gRVhUKHN0YXRwKS5uc3RpbWVzWzBdOworCQlmb3IgKG5zID0gMDsgbnMgPCBsYXN0bnM7IG5zKyspIHsKKwkJCWlmIChFWFQoc3RhdHApLmV4dCAhPSBOVUxMKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWFQoc3RhdHApLmV4dC0+bnNhZGRyc1tuc10gPQorCQkJCQlFWFQoc3RhdHApLmV4dC0+bnNhZGRyc1tucyArIDFdOworCQkJc3RhdHAtPm5zYWRkcl9saXN0W25zXSA9IHN0YXRwLT5uc2FkZHJfbGlzdFtucyArIDFdOworCQkJRVhUKHN0YXRwKS5uc3NvY2tzW25zXSA9IEVYVChzdGF0cCkubnNzb2Nrc1tucyArIDFdOworCQkJRVhUKHN0YXRwKS5uc3RpbWVzW25zXSA9IEVYVChzdGF0cCkubnN0aW1lc1tucyArIDFdOworCQl9CisJCWlmIChFWFQoc3RhdHApLmV4dCAhPSBOVUxMKQorCQkJRVhUKHN0YXRwKS5leHQtPm5zYWRkcnNbbGFzdG5zXSA9IGludTsKKwkJc3RhdHAtPm5zYWRkcl9saXN0W2xhc3Ruc10gPSBpbmE7CisJCUVYVChzdGF0cCkubnNzb2Nrc1tsYXN0bnNdID0gZmQ7CisJCUVYVChzdGF0cCkubnN0aW1lc1tsYXN0bnNdID0gbnN0aW1lOworCX0KKworCS8qCisJICogU2VuZCByZXF1ZXN0LCBSRVRSWSB0aW1lcywgb3IgdW50aWwgc3VjY2Vzc2Z1bC4KKwkgKi8KKwlmb3IgKHRyeSA9IDA7IHRyeSA8IHN0YXRwLT5yZXRyeTsgdHJ5KyspIHsKKwkgICAgZm9yIChucyA9IDA7IG5zIDwgc3RhdHAtPm5zY291bnQ7IG5zKyspIHsKKwkJc3RydWN0IHNvY2thZGRyICpuc2FwOworCQlpbnQgbnNhcGxlbjsKKwkJbnNhcCA9IGdldF9uc2FkZHIoc3RhdHAsIChzaXplX3QpbnMpOworCQluc2FwbGVuID0gZ2V0X3NhbGVuKG5zYXApOworCQlzdGF0cC0+X2ZsYWdzICY9IH5SRVNfRl9MQVNUTUFTSzsKKwkJc3RhdHAtPl9mbGFncyB8PSAobnMgPDwgUkVTX0ZfTEFTVFNISUZUKTsKKyBzYW1lX25zOgorCQlpZiAoc3RhdHAtPnFob29rKSB7CisJCQlpbnQgZG9uZSA9IDAsIGxvb3BzID0gMDsKKworCQkJZG8geworCQkJCXJlc19zZW5kaG9va2FjdCBhY3Q7CisKKwkJCQlhY3QgPSAoKnN0YXRwLT5xaG9vaykoJm5zYXAsICZidWYsICZidWZsZW4sCisJCQkJCQkgICAgICBhbnMsIGFuc3NpeiwgJnJlc3BsZW4pOworCQkJCXN3aXRjaCAoYWN0KSB7CisJCQkJY2FzZSByZXNfZ29haGVhZDoKKwkJCQkJZG9uZSA9IDE7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgcmVzX25leHRuczoKKwkJCQkJcmVzX25jbG9zZShzdGF0cCk7CisJCQkJCWdvdG8gbmV4dF9uczsKKwkJCQljYXNlIHJlc19kb25lOgorCQkJCQlyZXR1cm4gKHJlc3BsZW4pOworCQkJCWNhc2UgcmVzX21vZGlmaWVkOgorCQkJCQkvKiBnaXZlIHRoZSBob29rIGFub3RoZXIgdHJ5ICovCisJCQkJCWlmICgrK2xvb3BzIDwgNDIpIC8qZG91ZyBhZGFtcyovCisJCQkJCQlicmVhazsKKwkJCQkJLypGQUxMVEhST1VHSCovCisJCQkJY2FzZSByZXNfZXJyb3I6CisJCQkJCS8qRkFMTFRIUk9VR0gqLworCQkJCWRlZmF1bHQ6CisJCQkJCWdvdG8gZmFpbDsKKwkJCQl9CisJCQl9IHdoaWxlICghZG9uZSk7CisJCX0KKworCQlEcHJpbnQoKChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRykgJiYKKwkJCWdldG5hbWVpbmZvKG5zYXAsIChzb2NrbGVuX3QpbnNhcGxlbiwgYWJ1Ziwgc2l6ZW9mKGFidWYpLAorCQkJCSAgICBOVUxMLCAwLCBuaWZsYWdzKSA9PSAwKSwKKwkJICAgICAgIChzdGRvdXQsICI7OyBRdWVyeWluZyBzZXJ2ZXIgKCMgJWQpIGFkZHJlc3MgPSAlc1xuIiwKKwkJCW5zICsgMSwgYWJ1ZikpOworCisKKwkJaWYgKHZfY2lyY3VpdCkgeworCQkJLyogVXNlIFZDOyBhdCBtb3N0IG9uZSBhdHRlbXB0IHBlciBzZXJ2ZXIuICovCisJCQl0cnkgPSBzdGF0cC0+cmV0cnk7CisJCQluID0gc2VuZF92YyhzdGF0cCwgYnVmLCBidWZsZW4sIGFucywgYW5zc2l6LCAmdGVycm5vLAorCQkJCSAgICBucyk7CisJCQlpZiAobiA8IDApCisJCQkJZ290byBmYWlsOworCQkJaWYgKG4gPT0gMCkKKwkJCQlnb3RvIG5leHRfbnM7CisJCQlyZXNwbGVuID0gbjsKKwkJfSBlbHNlIHsKKwkJCS8qIFVzZSBkYXRhZ3JhbXMuICovCisJCQluID0gc2VuZF9kZyhzdGF0cCwgYnVmLCBidWZsZW4sIGFucywgYW5zc2l6LCAmdGVycm5vLAorCQkJCSAgICBucywgJnZfY2lyY3VpdCwgJmdvdHNvbWV3aGVyZSk7CisJCQlpZiAobiA8IDApCisJCQkJZ290byBmYWlsOworCQkJaWYgKG4gPT0gMCkKKwkJCQlnb3RvIG5leHRfbnM7CisJCQlpZiAodl9jaXJjdWl0KQorCQkJCWdvdG8gc2FtZV9uczsKKwkJCXJlc3BsZW4gPSBuOworCQl9CisKKwkJRHByaW50KChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRykgfHwKKwkJICAgICAgICgoc3RhdHAtPnBmY29kZSAmIFJFU19QUkZfUkVQTFkpICYmCisJCQkoc3RhdHAtPnBmY29kZSAmIFJFU19QUkZfSEVBRDEpKSwKKwkJICAgICAgIChzdGRvdXQsICI7OyBnb3QgYW5zd2VyOlxuIikpOworCisJCURwcmludFEoKHN0YXRwLT5vcHRpb25zICYgUkVTX0RFQlVHKSB8fAorCQkJKHN0YXRwLT5wZmNvZGUgJiBSRVNfUFJGX1JFUExZKSwKKwkJCShzdGRvdXQsICIlcyIsICIiKSwKKwkJCWFucywgKHJlc3BsZW4gPiBhbnNzaXopID8gYW5zc2l6IDogcmVzcGxlbik7CisKKyNpZiBVU0VfUkVTT0xWX0NBQ0hFCisgICAgICAgICAgICAgICAgaWYgKGNhY2hlX3N0YXR1cyA9PSBSRVNPTFZfQ0FDSEVfTk9URk9VTkQpIHsKKyAgICAgICAgICAgICAgICAgICAgX3Jlc29sdl9jYWNoZV9hZGQoY2FjaGUsIGJ1ZiwgYnVmbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnMsIHJlc3BsZW4pOworICAgICAgICAgICAgICAgIH0KKyNlbmRpZgorCQkvKgorCQkgKiBJZiB3ZSBoYXZlIHRlbXBvcmFyaWx5IG9wZW5lZCBhIHZpcnR1YWwgY2lyY3VpdCwKKwkJICogb3IgaWYgd2UgaGF2ZW4ndCBiZWVuIGFza2VkIHRvIGtlZXAgYSBzb2NrZXQgb3BlbiwKKwkJICogY2xvc2UgdGhlIHNvY2tldC4KKwkJICovCisJCWlmICgodl9jaXJjdWl0ICYmIChzdGF0cC0+b3B0aW9ucyAmIFJFU19VU0VWQykgPT0gMFUpIHx8CisJCSAgICAoc3RhdHAtPm9wdGlvbnMgJiBSRVNfU1RBWU9QRU4pID09IDBVKSB7CisJCQlyZXNfbmNsb3NlKHN0YXRwKTsKKwkJfQorCQlpZiAoc3RhdHAtPnJob29rKSB7CisJCQlpbnQgZG9uZSA9IDAsIGxvb3BzID0gMDsKKworCQkJZG8geworCQkJCXJlc19zZW5kaG9va2FjdCBhY3Q7CisKKwkJCQlhY3QgPSAoKnN0YXRwLT5yaG9vaykobnNhcCwgYnVmLCBidWZsZW4sCisJCQkJCQkgICAgICBhbnMsIGFuc3NpeiwgJnJlc3BsZW4pOworCQkJCXN3aXRjaCAoYWN0KSB7CisJCQkJY2FzZSByZXNfZ29haGVhZDoKKwkJCQljYXNlIHJlc19kb25lOgorCQkJCQlkb25lID0gMTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSByZXNfbmV4dG5zOgorCQkJCQlyZXNfbmNsb3NlKHN0YXRwKTsKKwkJCQkJZ290byBuZXh0X25zOworCQkJCWNhc2UgcmVzX21vZGlmaWVkOgorCQkJCQkvKiBnaXZlIHRoZSBob29rIGFub3RoZXIgdHJ5ICovCisJCQkJCWlmICgrK2xvb3BzIDwgNDIpIC8qZG91ZyBhZGFtcyovCisJCQkJCQlicmVhazsKKwkJCQkJLypGQUxMVEhST1VHSCovCisJCQkJY2FzZSByZXNfZXJyb3I6CisJCQkJCS8qRkFMTFRIUk9VR0gqLworCQkJCWRlZmF1bHQ6CisJCQkJCWdvdG8gZmFpbDsKKwkJCQl9CisJCQl9IHdoaWxlICghZG9uZSk7CisKKwkJfQorCQlyZXR1cm4gKHJlc3BsZW4pOworIG5leHRfbnM6IDsKKwkgICB9IC8qZm9yZWFjaCBucyovCisJfSAvKmZvcmVhY2ggcmV0cnkqLworCXJlc19uY2xvc2Uoc3RhdHApOworCWlmICghdl9jaXJjdWl0KSB7CisJCWlmICghZ290c29tZXdoZXJlKQorCQkJZXJybm8gPSBFQ09OTlJFRlVTRUQ7CS8qIG5vIG5hbWVzZXJ2ZXJzIGZvdW5kICovCisJCWVsc2UKKwkJCWVycm5vID0gRVRJTUVET1VUOwkvKiBubyBhbnN3ZXIgb2J0YWluZWQgKi8KKwl9IGVsc2UKKwkJZXJybm8gPSB0ZXJybm87CisJcmV0dXJuICgtMSk7CisgZmFpbDoKKwlyZXNfbmNsb3NlKHN0YXRwKTsKKwlyZXR1cm4gKC0xKTsKK30KKworLyogUHJpdmF0ZSAqLworCitzdGF0aWMgaW50CitnZXRfc2FsZW4oc2EpCisJY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYTsKK3sKKworI2lmZGVmIEhBVkVfU0FfTEVOCisJLyogVGhlcmUgYXJlIHBlb3BsZSBkbyBub3Qgc2V0IHNhX2xlbi4gIEJlIGZvcmdpdmluZyB0byB0aGVtLiAqLworCWlmIChzYS0+c2FfbGVuKQorCQlyZXR1cm4gKHNhLT5zYV9sZW4pOworI2VuZGlmCisKKwlpZiAoc2EtPnNhX2ZhbWlseSA9PSBBRl9JTkVUKQorCQlyZXR1cm4gKHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKwllbHNlIGlmIChzYS0+c2FfZmFtaWx5ID09IEFGX0lORVQ2KQorCQlyZXR1cm4gKHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisJZWxzZQorCQlyZXR1cm4gKDApOwkvKiB1bmtub3duLCBkaWUgb24gY29ubmVjdCAqLworfQorCisvKgorICogcGljayBhcHByb3ByaWF0ZSBuc2FkZHJfbGlzdCBmb3IgdXNlLiAgc2VlIHJlc19pbml0KCkgZm9yIGluaXRpYWxpemF0aW9uLgorICovCitzdGF0aWMgc3RydWN0IHNvY2thZGRyICoKK2dldF9uc2FkZHIoc3RhdHAsIG4pCisJcmVzX3N0YXRlIHN0YXRwOworCXNpemVfdCBuOworeworCisJaWYgKCFzdGF0cC0+bnNhZGRyX2xpc3Rbbl0uc2luX2ZhbWlseSAmJiBFWFQoc3RhdHApLmV4dCkgeworCQkvKgorCQkgKiAtIEVYVChzdGF0cCkuZXh0LT5uc2FkZHJzW25dIGhvbGRzIGFuIGFkZHJlc3MgdGhhdCBpcyBsYXJnZXIKKwkJICogICB0aGFuIHN0cnVjdCBzb2NrYWRkciwgYW5kCisJCSAqIC0gdXNlciBjb2RlIGRpZCBub3QgdXBkYXRlIHN0YXRwLT5uc2FkZHJfbGlzdFtuXS4KKwkJICovCisJCXJldHVybiAoc3RydWN0IHNvY2thZGRyICopKHZvaWQgKikmRVhUKHN0YXRwKS5leHQtPm5zYWRkcnNbbl07CisJfSBlbHNlIHsKKwkJLyoKKwkJICogLSB1c2VyIGNvZGUgdXBkYXRlZCBzdGF0cC0+bnNhZGRyX2xpc3Rbbl0sIG9yCisJCSAqIC0gc3RhdHAtPm5zYWRkcl9saXN0W25dIGhhcyB0aGUgc2FtZSBjb250ZW50IGFzCisJCSAqICAgRVhUKHN0YXRwKS5leHQtPm5zYWRkcnNbbl0uCisJCSAqLworCQlyZXR1cm4gKHN0cnVjdCBzb2NrYWRkciAqKSh2b2lkICopJnN0YXRwLT5uc2FkZHJfbGlzdFtuXTsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK3NlbmRfdmMocmVzX3N0YXRlIHN0YXRwLAorCWNvbnN0IHVfY2hhciAqYnVmLCBpbnQgYnVmbGVuLCB1X2NoYXIgKmFucywgaW50IGFuc3NpeiwKKwlpbnQgKnRlcnJubywgaW50IG5zKQoreworCWNvbnN0IEhFQURFUiAqaHAgPSAoY29uc3QgSEVBREVSICopKGNvbnN0IHZvaWQgKilidWY7CisJSEVBREVSICphbmhwID0gKEhFQURFUiAqKSh2b2lkICopYW5zOworCXN0cnVjdCBzb2NrYWRkciAqbnNhcDsKKwlpbnQgbnNhcGxlbjsKKwlpbnQgdHJ1bmNhdGluZywgY29ubnJlc2V0LCByZXNwbGVuLCBuOworCXN0cnVjdCBpb3ZlYyBpb3ZbMl07CisJdV9zaG9ydCBsZW47CisJdV9jaGFyICpjcDsKKwl2b2lkICp0bXA7CisKKwluc2FwID0gZ2V0X25zYWRkcihzdGF0cCwgKHNpemVfdClucyk7CisJbnNhcGxlbiA9IGdldF9zYWxlbihuc2FwKTsKKworCWNvbm5yZXNldCA9IDA7Cisgc2FtZV9uczoKKwl0cnVuY2F0aW5nID0gMDsKKworCS8qIEFyZSB3ZSBzdGlsbCB0YWxraW5nIHRvIHdob20gd2Ugd2FudCB0byB0YWxrIHRvPyAqLworCWlmIChzdGF0cC0+X3Zjc29jayA+PSAwICYmIChzdGF0cC0+X2ZsYWdzICYgUkVTX0ZfVkMpICE9IDApIHsKKwkJc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgcGVlcjsKKwkJc29ja2xlbl90IHNpemUgPSBzaXplb2YgcGVlcjsKKworCQlpZiAoZ2V0cGVlcm5hbWUoc3RhdHAtPl92Y3NvY2ssCisJCQkJKHN0cnVjdCBzb2NrYWRkciAqKSh2b2lkICopJnBlZXIsICZzaXplKSA8IDAgfHwKKwkJICAgICFzb2NrX2VxKChzdHJ1Y3Qgc29ja2FkZHIgKikodm9pZCAqKSZwZWVyLCBuc2FwKSkgeworCQkJcmVzX25jbG9zZShzdGF0cCk7CisJCQlzdGF0cC0+X2ZsYWdzICY9IH5SRVNfRl9WQzsKKwkJfQorCX0KKworCWlmIChzdGF0cC0+X3Zjc29jayA8IDAgfHwgKHN0YXRwLT5fZmxhZ3MgJiBSRVNfRl9WQykgPT0gMCkgeworCQlpZiAoc3RhdHAtPl92Y3NvY2sgPj0gMCkKKwkJCXJlc19uY2xvc2Uoc3RhdHApOworCisJCXN0YXRwLT5fdmNzb2NrID0gc29ja2V0KG5zYXAtPnNhX2ZhbWlseSwgU09DS19TVFJFQU0sIDApOworCQlpZiAoc3RhdHAtPl92Y3NvY2sgPiBoaWdoZXN0RkQpIHsKKwkJCXJlc19uY2xvc2Uoc3RhdHApOworCQkJZXJybm8gPSBFTk9UU09DSzsKKwkJfQorCQlpZiAoc3RhdHAtPl92Y3NvY2sgPCAwKSB7CisJCQlzd2l0Y2ggKGVycm5vKSB7CisJCQljYXNlIEVQUk9UT05PU1VQUE9SVDoKKyNpZmRlZiBFUEZOT1NVUFBPUlQKKwkJCWNhc2UgRVBGTk9TVVBQT1JUOgorI2VuZGlmCisJCQljYXNlIEVBRk5PU1VQUE9SVDoKKwkJCQlQZXJyb3Ioc3RhdHAsIHN0ZGVyciwgInNvY2tldCh2YykiLCBlcnJubyk7CisJCQkJcmV0dXJuICgwKTsKKwkJCWRlZmF1bHQ6CisJCQkJKnRlcnJubyA9IGVycm5vOworCQkJCVBlcnJvcihzdGF0cCwgc3RkZXJyLCAic29ja2V0KHZjKSIsIGVycm5vKTsKKwkJCQlyZXR1cm4gKC0xKTsKKwkJCX0KKwkJfQorCQllcnJubyA9IDA7CisJCWlmIChyYW5kb21fYmluZChzdGF0cC0+X3Zjc29jayxuc2FwLT5zYV9mYW1pbHkpIDwgMCkgeworCQkJKnRlcnJubyA9IGVycm5vOworCQkJQWVycm9yKHN0YXRwLCBzdGRlcnIsICJiaW5kL3ZjIiwgZXJybm8sIG5zYXAsCisJCQkgICAgbnNhcGxlbik7CisJCQlyZXNfbmNsb3NlKHN0YXRwKTsKKwkJCXJldHVybiAoMCk7CisJCX0KKwkJaWYgKGNvbm5lY3Qoc3RhdHAtPl92Y3NvY2ssIG5zYXAsIChzb2NrbGVuX3QpbnNhcGxlbikgPCAwKSB7CisJCQkqdGVycm5vID0gZXJybm87CisJCQlBZXJyb3Ioc3RhdHAsIHN0ZGVyciwgImNvbm5lY3QvdmMiLCBlcnJubywgbnNhcCwKKwkJCSAgICBuc2FwbGVuKTsKKwkJCXJlc19uY2xvc2Uoc3RhdHApOworCQkJcmV0dXJuICgwKTsKKwkJfQorCQlzdGF0cC0+X2ZsYWdzIHw9IFJFU19GX1ZDOworCX0KKworCS8qCisJICogU2VuZCBsZW5ndGggJiBtZXNzYWdlCisJICovCisJbnNfcHV0MTYoKHVfc2hvcnQpYnVmbGVuLCAodV9jaGFyKikodm9pZCAqKSZsZW4pOworCWlvdlswXSA9IGV2Q29uc0lvdmVjKCZsZW4sIElOVDE2U1opOworCURFX0NPTlNUKGJ1ZiwgdG1wKTsKKwlpb3ZbMV0gPSBldkNvbnNJb3ZlYyh0bXAsIChzaXplX3QpYnVmbGVuKTsKKwlpZiAod3JpdGV2KHN0YXRwLT5fdmNzb2NrLCBpb3YsIDIpICE9IChJTlQxNlNaICsgYnVmbGVuKSkgeworCQkqdGVycm5vID0gZXJybm87CisJCVBlcnJvcihzdGF0cCwgc3RkZXJyLCAid3JpdGUgZmFpbGVkIiwgZXJybm8pOworCQlyZXNfbmNsb3NlKHN0YXRwKTsKKwkJcmV0dXJuICgwKTsKKwl9CisJLyoKKwkgKiBSZWNlaXZlIGxlbmd0aCAmIHJlc3BvbnNlCisJICovCisgcmVhZF9sZW46CisJY3AgPSBhbnM7CisJbGVuID0gSU5UMTZTWjsKKwl3aGlsZSAoKG4gPSByZWFkKHN0YXRwLT5fdmNzb2NrLCAoY2hhciAqKWNwLCAoc2l6ZV90KWxlbikpID4gMCkgeworCQljcCArPSBuOworCQlpZiAoKGxlbiAtPSBuKSA9PSAwKQorCQkJYnJlYWs7CisJfQorCWlmIChuIDw9IDApIHsKKwkJKnRlcnJubyA9IGVycm5vOworCQlQZXJyb3Ioc3RhdHAsIHN0ZGVyciwgInJlYWQgZmFpbGVkIiwgZXJybm8pOworCQlyZXNfbmNsb3NlKHN0YXRwKTsKKwkJLyoKKwkJICogQSBsb25nIHJ1bm5pbmcgcHJvY2VzcyBtaWdodCBnZXQgaXRzIFRDUAorCQkgKiBjb25uZWN0aW9uIHJlc2V0IGlmIHRoZSByZW1vdGUgc2VydmVyIHdhcworCQkgKiByZXN0YXJ0ZWQuICBSZXF1ZXJ5IHRoZSBzZXJ2ZXIgaW5zdGVhZCBvZgorCQkgKiB0cnlpbmcgYSBuZXcgb25lLiAgV2hlbiB0aGVyZSBpcyBvbmx5IG9uZQorCQkgKiBzZXJ2ZXIsIHRoaXMgbWVhbnMgdGhhdCBhIHF1ZXJ5IG1pZ2h0IHdvcmsKKwkJICogaW5zdGVhZCBvZiBmYWlsaW5nLiAgV2Ugb25seSBhbGxvdyBvbmUgcmVzZXQKKwkJICogcGVyIHF1ZXJ5IHRvIHByZXZlbnQgbG9vcGluZy4KKwkJICovCisJCWlmICgqdGVycm5vID09IEVDT05OUkVTRVQgJiYgIWNvbm5yZXNldCkgeworCQkJY29ubnJlc2V0ID0gMTsKKwkJCXJlc19uY2xvc2Uoc3RhdHApOworCQkJZ290byBzYW1lX25zOworCQl9CisJCXJlc19uY2xvc2Uoc3RhdHApOworCQlyZXR1cm4gKDApOworCX0KKwlyZXNwbGVuID0gbnNfZ2V0MTYoYW5zKTsKKwlpZiAocmVzcGxlbiA+IGFuc3NpeikgeworCQlEcHJpbnQoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcsCisJCSAgICAgICAoc3Rkb3V0LCAiOzsgcmVzcG9uc2UgdHJ1bmNhdGVkXG4iKQorCQkgICAgICAgKTsKKwkJdHJ1bmNhdGluZyA9IDE7CisJCWxlbiA9IGFuc3NpejsKKwl9IGVsc2UKKwkJbGVuID0gcmVzcGxlbjsKKwlpZiAobGVuIDwgSEZJWEVEU1opIHsKKwkJLyoKKwkJICogVW5kZXJzaXplZCBtZXNzYWdlLgorCQkgKi8KKwkJRHByaW50KHN0YXRwLT5vcHRpb25zICYgUkVTX0RFQlVHLAorCQkgICAgICAgKHN0ZG91dCwgIjs7IHVuZGVyc2l6ZWQ6ICVkXG4iLCBsZW4pKTsKKwkJKnRlcnJubyA9IEVNU0dTSVpFOworCQlyZXNfbmNsb3NlKHN0YXRwKTsKKwkJcmV0dXJuICgwKTsKKwl9CisJY3AgPSBhbnM7CisJd2hpbGUgKGxlbiAhPSAwICYmIChuID0gcmVhZChzdGF0cC0+X3Zjc29jaywgKGNoYXIgKiljcCwgKHNpemVfdClsZW4pKSA+IDApeworCQljcCArPSBuOworCQlsZW4gLT0gbjsKKwl9CisJaWYgKG4gPD0gMCkgeworCQkqdGVycm5vID0gZXJybm87CisJCVBlcnJvcihzdGF0cCwgc3RkZXJyLCAicmVhZCh2YykiLCBlcnJubyk7CisJCXJlc19uY2xvc2Uoc3RhdHApOworCQlyZXR1cm4gKDApOworCX0KKwlpZiAodHJ1bmNhdGluZykgeworCQkvKgorCQkgKiBGbHVzaCByZXN0IG9mIGFuc3dlciBzbyBjb25uZWN0aW9uIHN0YXlzIGluIHN5bmNoLgorCQkgKi8KKwkJYW5ocC0+dGMgPSAxOworCQlsZW4gPSByZXNwbGVuIC0gYW5zc2l6OworCQl3aGlsZSAobGVuICE9IDApIHsKKwkJCWNoYXIganVua1tQQUNLRVRTWl07CisKKwkJCW4gPSByZWFkKHN0YXRwLT5fdmNzb2NrLCBqdW5rLAorCQkJCSAobGVuID4gc2l6ZW9mIGp1bmspID8gc2l6ZW9mIGp1bmsgOiBsZW4pOworCQkJaWYgKG4gPiAwKQorCQkJCWxlbiAtPSBuOworCQkJZWxzZQorCQkJCWJyZWFrOworCQl9CisJfQorCS8qCisJICogSWYgdGhlIGNhbGxpbmcgYXBwbGljYXRpbmcgaGFzIGJhaWxlZCBvdXQgb2YKKwkgKiBhIHByZXZpb3VzIGNhbGwgYW5kIGZhaWxlZCB0byBhcnJhbmdlIHRvIGhhdmUKKwkgKiB0aGUgY2lyY3VpdCBjbG9zZWQgb3IgdGhlIHNlcnZlciBoYXMgZ290CisJICogaXRzZWxmIGNvbmZ1c2VkLCB0aGVuIGRyb3AgdGhlIHBhY2tldCBhbmQKKwkgKiB3YWl0IGZvciB0aGUgY29ycmVjdCBvbmUuCisJICovCisJaWYgKGhwLT5pZCAhPSBhbmhwLT5pZCkgeworCQlEcHJpbnRRKChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRykgfHwKKwkJCShzdGF0cC0+cGZjb2RlICYgUkVTX1BSRl9SRVBMWSksCisJCQkoc3Rkb3V0LCAiOzsgb2xkIGFuc3dlciAodW5leHBlY3RlZCk6XG4iKSwKKwkJCWFucywgKHJlc3BsZW4gPiBhbnNzaXopID8gYW5zc2l6OiByZXNwbGVuKTsKKwkJZ290byByZWFkX2xlbjsKKwl9CisKKwkvKgorCSAqIEFsbCBpcyB3ZWxsLCBvciB0aGUgZXJyb3IgaXMgZmF0YWwuICBTaWduYWwgdGhhdCB0aGUKKwkgKiBuZXh0IG5hbWVzZXJ2ZXIgb3VnaHQgbm90IGJlIHRyaWVkLgorCSAqLworCXJldHVybiAocmVzcGxlbik7Cit9CisKK3N0YXRpYyBpbnQKK3NlbmRfZGcocmVzX3N0YXRlIHN0YXRwLAorCWNvbnN0IHVfY2hhciAqYnVmLCBpbnQgYnVmbGVuLCB1X2NoYXIgKmFucywgaW50IGFuc3NpeiwKKwlpbnQgKnRlcnJubywgaW50IG5zLCBpbnQgKnZfY2lyY3VpdCwgaW50ICpnb3Rzb21ld2hlcmUpCit7CisJY29uc3QgSEVBREVSICpocCA9IChjb25zdCBIRUFERVIgKikoY29uc3Qgdm9pZCAqKWJ1ZjsKKwlIRUFERVIgKmFuaHAgPSAoSEVBREVSICopKHZvaWQgKilhbnM7CisJY29uc3Qgc3RydWN0IHNvY2thZGRyICpuc2FwOworCWludCBuc2FwbGVuOworCXN0cnVjdCB0aW1lc3BlYyBub3csIHRpbWVvdXQsIGZpbmlzaDsKKwlmZF9zZXQgZHNtYXNrOworCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGZyb207CisJc29ja2xlbl90IGZyb21sZW47CisJaW50IHJlc3BsZW4sIHNlY29uZHMsIG4sIHM7CisKKwluc2FwID0gZ2V0X25zYWRkcihzdGF0cCwgKHNpemVfdClucyk7CisJbnNhcGxlbiA9IGdldF9zYWxlbihuc2FwKTsKKwlpZiAoRVhUKHN0YXRwKS5uc3NvY2tzW25zXSA9PSAtMSkgeworCQlFWFQoc3RhdHApLm5zc29ja3NbbnNdID0gc29ja2V0KG5zYXAtPnNhX2ZhbWlseSwgU09DS19ER1JBTSwgMCk7CisJCWlmIChFWFQoc3RhdHApLm5zc29ja3NbbnNdID4gaGlnaGVzdEZEKSB7CisJCQlyZXNfbmNsb3NlKHN0YXRwKTsKKwkJCWVycm5vID0gRU5PVFNPQ0s7CisJCX0KKwkJaWYgKEVYVChzdGF0cCkubnNzb2Nrc1tuc10gPCAwKSB7CisJCQlzd2l0Y2ggKGVycm5vKSB7CisJCQljYXNlIEVQUk9UT05PU1VQUE9SVDoKKyNpZmRlZiBFUEZOT1NVUFBPUlQKKwkJCWNhc2UgRVBGTk9TVVBQT1JUOgorI2VuZGlmCisJCQljYXNlIEVBRk5PU1VQUE9SVDoKKwkJCQlQZXJyb3Ioc3RhdHAsIHN0ZGVyciwgInNvY2tldChkZykiLCBlcnJubyk7CisJCQkJcmV0dXJuICgwKTsKKwkJCWRlZmF1bHQ6CisJCQkJKnRlcnJubyA9IGVycm5vOworCQkJCVBlcnJvcihzdGF0cCwgc3RkZXJyLCAic29ja2V0KGRnKSIsIGVycm5vKTsKKwkJCQlyZXR1cm4gKC0xKTsKKwkJCX0KKwkJfQorI2lmbmRlZiBDQU5OT1RfQ09OTkVDVF9ER1JBTQorCQkvKgorCQkgKiBPbiBhIDQuM0JTRCsgbWFjaGluZSAoY2xpZW50IGFuZCBzZXJ2ZXIsCisJCSAqIGFjdHVhbGx5KSwgc2VuZGluZyB0byBhIG5hbWVzZXJ2ZXIgZGF0YWdyYW0KKwkJICogcG9ydCB3aXRoIG5vIG5hbWVzZXJ2ZXIgd2lsbCBjYXVzZSBhbgorCQkgKiBJQ01QIHBvcnQgdW5yZWFjaGFibGUgbWVzc2FnZSB0byBiZSByZXR1cm5lZC4KKwkJICogSWYgb3VyIGRhdGFncmFtIHNvY2tldCBpcyAiY29ubmVjdGVkIiB0byB0aGUKKwkJICogc2VydmVyLCB3ZSBnZXQgYW4gRUNPTk5SRUZVU0VEIGVycm9yIG9uIHRoZSBuZXh0CisJCSAqIHNvY2tldCBvcGVyYXRpb24sIGFuZCBzZWxlY3QgcmV0dXJucyBpZiB0aGUKKwkJICogZXJyb3IgbWVzc2FnZSBpcyByZWNlaXZlZC4gIFdlIGNhbiB0aHVzIGRldGVjdAorCQkgKiB0aGUgYWJzZW5jZSBvZiBhIG5hbWVzZXJ2ZXIgd2l0aG91dCB0aW1pbmcgb3V0LgorCQkgKi8KKwkJaWYgKHJhbmRvbV9iaW5kKEVYVChzdGF0cCkubnNzb2Nrc1tuc10sIG5zYXAtPnNhX2ZhbWlseSkgPCAwKSB7CisJCQlBZXJyb3Ioc3RhdHAsIHN0ZGVyciwgImJpbmQoZGcpIiwgZXJybm8sIG5zYXAsCisJCQkgICAgbnNhcGxlbik7CisJCQlyZXNfbmNsb3NlKHN0YXRwKTsKKwkJCXJldHVybiAoMCk7CisJCX0KKwkJaWYgKGNvbm5lY3QoRVhUKHN0YXRwKS5uc3NvY2tzW25zXSwgbnNhcCwgKHNvY2tsZW5fdCluc2FwbGVuKSA8IDApIHsKKwkJCUFlcnJvcihzdGF0cCwgc3RkZXJyLCAiY29ubmVjdChkZykiLCBlcnJubywgbnNhcCwKKwkJCSAgICBuc2FwbGVuKTsKKwkJCXJlc19uY2xvc2Uoc3RhdHApOworCQkJcmV0dXJuICgwKTsKKwkJfQorI2VuZGlmIC8qICFDQU5OT1RfQ09OTkVDVF9ER1JBTSAqLworCQlEcHJpbnQoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcsCisJCSAgICAgICAoc3Rkb3V0LCAiOzsgbmV3IERHIHNvY2tldFxuIikpCisJfQorCXMgPSBFWFQoc3RhdHApLm5zc29ja3NbbnNdOworI2lmbmRlZiBDQU5OT1RfQ09OTkVDVF9ER1JBTQorCWlmIChzZW5kKHMsIChjb25zdCBjaGFyKilidWYsIChzaXplX3QpYnVmbGVuLCAwKSAhPSBidWZsZW4pIHsKKwkJUGVycm9yKHN0YXRwLCBzdGRlcnIsICJzZW5kIiwgZXJybm8pOworCQlyZXNfbmNsb3NlKHN0YXRwKTsKKwkJcmV0dXJuICgwKTsKKwl9CisjZWxzZSAvKiAhQ0FOTk9UX0NPTk5FQ1RfREdSQU0gKi8KKwlpZiAoc2VuZHRvKHMsIChjb25zdCBjaGFyKilidWYsIGJ1ZmxlbiwgMCwgbnNhcCwgbnNhcGxlbikgIT0gYnVmbGVuKQorCXsKKwkJQWVycm9yKHN0YXRwLCBzdGRlcnIsICJzZW5kdG8iLCBlcnJubywgbnNhcCwgbnNhcGxlbik7CisJCXJlc19uY2xvc2Uoc3RhdHApOworCQlyZXR1cm4gKDApOworCX0KKyNlbmRpZiAvKiAhQ0FOTk9UX0NPTk5FQ1RfREdSQU0gKi8KKworCS8qCisJICogV2FpdCBmb3IgcmVwbHkuCisJICovCisJc2Vjb25kcyA9IChzdGF0cC0+cmV0cmFucyA8PCBucyk7CisJaWYgKG5zID4gMCkKKwkJc2Vjb25kcyAvPSBzdGF0cC0+bnNjb3VudDsKKwlpZiAoc2Vjb25kcyA8PSAwKQorCQlzZWNvbmRzID0gMTsKKwlub3cgPSBldk5vd1RpbWUoKTsKKwl0aW1lb3V0ID0gZXZDb25zVGltZSgobG9uZylzZWNvbmRzLCAwTCk7CisJZmluaXNoID0gZXZBZGRUaW1lKG5vdywgdGltZW91dCk7CisJZ290byBub25vdzsKKyB3YWl0OgorCW5vdyA9IGV2Tm93VGltZSgpOworIG5vbm93OgorCUZEX1pFUk8oJmRzbWFzayk7CisJRkRfU0VUKHMsICZkc21hc2spOworCWlmIChldkNtcFRpbWUoZmluaXNoLCBub3cpID4gMCkKKwkJdGltZW91dCA9IGV2U3ViVGltZShmaW5pc2gsIG5vdyk7CisJZWxzZQorCQl0aW1lb3V0ID0gZXZDb25zVGltZSgwTCwgMEwpOworCW4gPSBwc2VsZWN0KHMgKyAxLCAmZHNtYXNrLCBOVUxMLCBOVUxMLCAmdGltZW91dCwgTlVMTCk7CisJaWYgKG4gPT0gMCkgeworCQlEcHJpbnQoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcsIChzdGRvdXQsICI7OyB0aW1lb3V0XG4iKSk7CisJCSpnb3Rzb21ld2hlcmUgPSAxOworCQlyZXR1cm4gKDApOworCX0KKwlpZiAobiA8IDApIHsKKwkJaWYgKGVycm5vID09IEVJTlRSKQorCQkJZ290byB3YWl0OworCQlQZXJyb3Ioc3RhdHAsIHN0ZGVyciwgInNlbGVjdCIsIGVycm5vKTsKKwkJcmVzX25jbG9zZShzdGF0cCk7CisJCXJldHVybiAoMCk7CisJfQorCWVycm5vID0gMDsKKwlmcm9tbGVuID0gc2l6ZW9mKGZyb20pOworCXJlc3BsZW4gPSByZWN2ZnJvbShzLCAoY2hhciopYW5zLCAoc2l6ZV90KWFuc3NpeiwwLAorCQkJICAgKHN0cnVjdCBzb2NrYWRkciAqKSh2b2lkICopJmZyb20sICZmcm9tbGVuKTsKKwlpZiAocmVzcGxlbiA8PSAwKSB7CisJCVBlcnJvcihzdGF0cCwgc3RkZXJyLCAicmVjdmZyb20iLCBlcnJubyk7CisJCXJlc19uY2xvc2Uoc3RhdHApOworCQlyZXR1cm4gKDApOworCX0KKwkqZ290c29tZXdoZXJlID0gMTsKKwlpZiAocmVzcGxlbiA8IEhGSVhFRFNaKSB7CisJCS8qCisJCSAqIFVuZGVyc2l6ZWQgbWVzc2FnZS4KKwkJICovCisJCURwcmludChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRywKKwkJICAgICAgIChzdGRvdXQsICI7OyB1bmRlcnNpemVkOiAlZFxuIiwKKwkJCXJlc3BsZW4pKTsKKwkJKnRlcnJubyA9IEVNU0dTSVpFOworCQlyZXNfbmNsb3NlKHN0YXRwKTsKKwkJcmV0dXJuICgwKTsKKwl9CisJaWYgKGhwLT5pZCAhPSBhbmhwLT5pZCkgeworCQkvKgorCQkgKiByZXNwb25zZSBmcm9tIG9sZCBxdWVyeSwgaWdub3JlIGl0LgorCQkgKiBYWFggLSBwb3RlbnRpYWwgc2VjdXJpdHkgaGF6YXJkIGNvdWxkCisJCSAqCSBiZSBkZXRlY3RlZCBoZXJlLgorCQkgKi8KKwkJRHByaW50USgoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcpIHx8CisJCQkoc3RhdHAtPnBmY29kZSAmIFJFU19QUkZfUkVQTFkpLAorCQkJKHN0ZG91dCwgIjs7IG9sZCBhbnN3ZXI6XG4iKSwKKwkJCWFucywgKHJlc3BsZW4gPiBhbnNzaXopID8gYW5zc2l6IDogcmVzcGxlbik7CisJCWdvdG8gd2FpdDsKKwl9CisJaWYgKCEoc3RhdHAtPm9wdGlvbnMgJiBSRVNfSU5TRUNVUkUxKSAmJgorCSAgICAhcmVzX291cnNlcnZlcl9wKHN0YXRwLCAoc3RydWN0IHNvY2thZGRyICopKHZvaWQgKikmZnJvbSkpIHsKKwkJLyoKKwkJICogcmVzcG9uc2UgZnJvbSB3cm9uZyBzZXJ2ZXI/IGlnbm9yZSBpdC4KKwkJICogWFhYIC0gcG90ZW50aWFsIHNlY3VyaXR5IGhhemFyZCBjb3VsZAorCQkgKgkgYmUgZGV0ZWN0ZWQgaGVyZS4KKwkJICovCisJCURwcmludFEoKHN0YXRwLT5vcHRpb25zICYgUkVTX0RFQlVHKSB8fAorCQkJKHN0YXRwLT5wZmNvZGUgJiBSRVNfUFJGX1JFUExZKSwKKwkJCShzdGRvdXQsICI7OyBub3Qgb3VyIHNlcnZlcjpcbiIpLAorCQkJYW5zLCAocmVzcGxlbiA+IGFuc3NpeikgPyBhbnNzaXogOiByZXNwbGVuKTsKKwkJZ290byB3YWl0OworCX0KKyNpZmRlZiBSRVNfVVNFX0VETlMwCisJaWYgKGFuaHAtPnJjb2RlID09IEZPUk1FUlIgJiYgKHN0YXRwLT5vcHRpb25zICYgUkVTX1VTRV9FRE5TMCkgIT0gMFUpIHsKKwkJLyoKKwkJICogRG8gbm90IHJldHJ5IGlmIHRoZSBzZXJ2ZXIgZG8gbm90IHVuZGVyc3RhbmQgRUROUzAuCisJCSAqIFRoZSBjYXNlIGhhcyB0byBiZSBjYXB0dXJlZCBoZXJlLCBhcyBGT1JNRVJSIHBhY2tldCBkbyBub3QKKwkJICogY2FycnkgcXVlcnkgc2VjdGlvbiwgaGVuY2UgcmVzX3F1ZXJpZXNtYXRjaCgpIHJldHVybnMgMC4KKwkJICovCisJCURwcmludFEoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcsCisJCQkoc3Rkb3V0LCAic2VydmVyIHJlamVjdGVkIHF1ZXJ5IHdpdGggRUROUzA6XG4iKSwKKwkJCWFucywgKHJlc3BsZW4gPiBhbnNzaXopID8gYW5zc2l6IDogcmVzcGxlbik7CisJCS8qIHJlY29yZCB0aGUgZXJyb3IgKi8KKwkJc3RhdHAtPl9mbGFncyB8PSBSRVNfRl9FRE5TMEVSUjsKKwkJcmVzX25jbG9zZShzdGF0cCk7CisJCXJldHVybiAoMCk7CisJfQorI2VuZGlmCisJaWYgKCEoc3RhdHAtPm9wdGlvbnMgJiBSRVNfSU5TRUNVUkUyKSAmJgorCSAgICAhcmVzX3F1ZXJpZXNtYXRjaChidWYsIGJ1ZiArIGJ1ZmxlbiwKKwkJCSAgICAgIGFucywgYW5zICsgYW5zc2l6KSkgeworCQkvKgorCQkgKiByZXNwb25zZSBjb250YWlucyB3cm9uZyBxdWVyeT8gaWdub3JlIGl0LgorCQkgKiBYWFggLSBwb3RlbnRpYWwgc2VjdXJpdHkgaGF6YXJkIGNvdWxkCisJCSAqCSBiZSBkZXRlY3RlZCBoZXJlLgorCQkgKi8KKwkJRHByaW50USgoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcpIHx8CisJCQkoc3RhdHAtPnBmY29kZSAmIFJFU19QUkZfUkVQTFkpLAorCQkJKHN0ZG91dCwgIjs7IHdyb25nIHF1ZXJ5IG5hbWU6XG4iKSwKKwkJCWFucywgKHJlc3BsZW4gPiBhbnNzaXopID8gYW5zc2l6IDogcmVzcGxlbik7CisJCWdvdG8gd2FpdDsKKwl9CisJaWYgKGFuaHAtPnJjb2RlID09IFNFUlZGQUlMIHx8CisJICAgIGFuaHAtPnJjb2RlID09IE5PVElNUCB8fAorCSAgICBhbmhwLT5yY29kZSA9PSBSRUZVU0VEKSB7CisJCURwcmludFEoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcsCisJCQkoc3Rkb3V0LCAic2VydmVyIHJlamVjdGVkIHF1ZXJ5OlxuIiksCisJCQlhbnMsIChyZXNwbGVuID4gYW5zc2l6KSA/IGFuc3NpeiA6IHJlc3BsZW4pOworCQlyZXNfbmNsb3NlKHN0YXRwKTsKKwkJLyogZG9uJ3QgcmV0cnkgaWYgY2FsbGVkIGZyb20gZGlnICovCisJCWlmICghc3RhdHAtPnBmY29kZSkKKwkJCXJldHVybiAoMCk7CisJfQorCWlmICghKHN0YXRwLT5vcHRpb25zICYgUkVTX0lHTlRDKSAmJiBhbmhwLT50YykgeworCQkvKgorCQkgKiBUbyBnZXQgdGhlIHJlc3Qgb2YgYW5zd2VyLAorCQkgKiB1c2UgVENQIHdpdGggc2FtZSBzZXJ2ZXIuCisJCSAqLworCQlEcHJpbnQoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcsCisJCSAgICAgICAoc3Rkb3V0LCAiOzsgdHJ1bmNhdGVkIGFuc3dlclxuIikpOworCQkqdl9jaXJjdWl0ID0gMTsKKwkJcmVzX25jbG9zZShzdGF0cCk7CisJCXJldHVybiAoMSk7CisJfQorCS8qCisJICogQWxsIGlzIHdlbGwsIG9yIHRoZSBlcnJvciBpcyBmYXRhbC4gIFNpZ25hbCB0aGF0IHRoZQorCSAqIG5leHQgbmFtZXNlcnZlciBvdWdodCBub3QgYmUgdHJpZWQuCisJICovCisJcmV0dXJuIChyZXNwbGVuKTsKK30KKworc3RhdGljIHZvaWQKK0FlcnJvcihjb25zdCByZXNfc3RhdGUgc3RhdHAsIEZJTEUgKmZpbGUsIGNvbnN0IGNoYXIgKnN0cmluZywgaW50IGVycm9yLAorICAgICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqYWRkcmVzcywgaW50IGFsZW4pCit7CisJaW50IHNhdmUgPSBlcnJubzsKKwljaGFyIGhidWZbTklfTUFYSE9TVF07CisJY2hhciBzYnVmW05JX01BWFNFUlZdOworCisJYWxlbiA9IGFsZW47CisKKwlpZiAoKHN0YXRwLT5vcHRpb25zICYgUkVTX0RFQlVHKSAhPSAwVSkgeworCQlpZiAoZ2V0bmFtZWluZm8oYWRkcmVzcywgKHNvY2tsZW5fdClhbGVuLCBoYnVmLCBzaXplb2YoaGJ1ZiksCisJCSAgICBzYnVmLCBzaXplb2Yoc2J1ZiksIG5pZmxhZ3MpKSB7CisJCQlzdHJuY3B5KGhidWYsICI/Iiwgc2l6ZW9mKGhidWYpIC0gMSk7CisJCQloYnVmW3NpemVvZihoYnVmKSAtIDFdID0gJ1wwJzsKKwkJCXN0cm5jcHkoc2J1ZiwgIj8iLCBzaXplb2Yoc2J1ZikgLSAxKTsKKwkJCXNidWZbc2l6ZW9mKHNidWYpIC0gMV0gPSAnXDAnOworCQl9CisJCWZwcmludGYoZmlsZSwgInJlc19zZW5kOiAlcyAoWyVzXS4lcyk6ICVzXG4iLAorCQkJc3RyaW5nLCBoYnVmLCBzYnVmLCBzdHJlcnJvcihlcnJvcikpOworCX0KKwllcnJubyA9IHNhdmU7Cit9CisKK3N0YXRpYyB2b2lkCitQZXJyb3IoY29uc3QgcmVzX3N0YXRlIHN0YXRwLCBGSUxFICpmaWxlLCBjb25zdCBjaGFyICpzdHJpbmcsIGludCBlcnJvcikgeworCWludCBzYXZlID0gZXJybm87CisKKwlpZiAoKHN0YXRwLT5vcHRpb25zICYgUkVTX0RFQlVHKSAhPSAwVSkKKwkJZnByaW50ZihmaWxlLCAicmVzX3NlbmQ6ICVzOiAlc1xuIiwKKwkJCXN0cmluZywgc3RyZXJyb3IoZXJyb3IpKTsKKwllcnJubyA9IHNhdmU7Cit9CisKK3N0YXRpYyBpbnQKK3NvY2tfZXEoc3RydWN0IHNvY2thZGRyICphLCBzdHJ1Y3Qgc29ja2FkZHIgKmIpIHsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKmE0LCAqYjQ7CisJc3RydWN0IHNvY2thZGRyX2luNiAqYTYsICpiNjsKKworCWlmIChhLT5zYV9mYW1pbHkgIT0gYi0+c2FfZmFtaWx5KQorCQlyZXR1cm4gMDsKKwlzd2l0Y2ggKGEtPnNhX2ZhbWlseSkgeworCWNhc2UgQUZfSU5FVDoKKwkJYTQgPSAoc3RydWN0IHNvY2thZGRyX2luICopKHZvaWQgKilhOworCQliNCA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikodm9pZCAqKWI7CisJCXJldHVybiBhNC0+c2luX3BvcnQgPT0gYjQtPnNpbl9wb3J0ICYmCisJCSAgICBhNC0+c2luX2FkZHIuc19hZGRyID09IGI0LT5zaW5fYWRkci5zX2FkZHI7CisJY2FzZSBBRl9JTkVUNjoKKwkJYTYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSh2b2lkICopYTsKKwkJYjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSh2b2lkICopYjsKKwkJcmV0dXJuIGE2LT5zaW42X3BvcnQgPT0gYjYtPnNpbjZfcG9ydCAmJgorI2lmZGVmIEhBVkVfU0lONl9TQ09QRV9JRAorCQkgICAgYTYtPnNpbjZfc2NvcGVfaWQgPT0gYjYtPnNpbjZfc2NvcGVfaWQgJiYKKyNlbmRpZgorCQkgICAgSU42X0FSRV9BRERSX0VRVUFMKCZhNi0+c2luNl9hZGRyLCAmYjYtPnNpbjZfYWRkcik7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorfQorCisjaWZkZWYgTkVFRF9QU0VMRUNUCisvKiBYWFggbmVlZHMgdG8gbW92ZSB0byB0aGUgcG9ydGluZyBsaWJyYXJ5LiAqLworc3RhdGljIGludAorcHNlbGVjdChpbnQgbmZkcywgdm9pZCAqcmZkcywgdm9pZCAqd2Zkcywgdm9pZCAqZWZkcywKKwlzdHJ1Y3QgdGltZXNwZWMgKnRzcCwgY29uc3Qgc2lnc2V0X3QgKnNpZ21hc2spCit7CisJc3RydWN0IHRpbWV2YWwgdHYsICp0dnA7CisJc2lnc2V0X3Qgc2lnczsKKwlpbnQgbjsKKworCWlmICh0c3ApIHsKKwkJdHZwID0gJnR2OworCQl0diA9IGV2VGltZVZhbCgqdHNwKTsKKwl9IGVsc2UKKwkJdHZwID0gTlVMTDsKKwlpZiAoc2lnbWFzaykKKwkJc2lncHJvY21hc2soU0lHX1NFVE1BU0ssIHNpZ21hc2ssICZzaWdzKTsKKwluID0gc2VsZWN0KG5mZHMsIHJmZHMsIHdmZHMsIGVmZHMsIHR2cCk7CisJaWYgKHNpZ21hc2spCisJCXNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmc2lncywgTlVMTCk7CisJaWYgKHRzcCkKKwkJKnRzcCA9IGV2VGltZVNwZWModHYpOworCXJldHVybiAobik7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvbmV0YnNkL3Jlc29sdi9yZXNfc3RhdGUuYyBiL2xpYmMvbmV0YnNkL3Jlc29sdi9yZXNfc3RhdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTIzMDFkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19zdGF0ZS5jCkBAIC0wLDAgKzEsMTg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSAiYXJwYV9uYW1lc2VyLmgiCisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNpbmNsdWRlICJyZXNvbHZfcHJpdmF0ZS5oIgorI2luY2x1ZGUgInJlc29sdl9jYWNoZS5oIgorI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2RlZmluZSBfUkVBTExZX0lOQ0xVREVfU1lTX19TWVNURU1fUFJPUEVSVElFU19IXworI2luY2x1ZGUgPHN5cy9fc3lzdGVtX3Byb3BlcnRpZXMuaD4KKworc3RhdGljIHB0aHJlYWRfa2V5X3QgICBfcmVzX2tleTsKK3N0YXRpYyBwdGhyZWFkX29uY2VfdCAgX3Jlc19vbmNlOworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgaW50ICAgICAgICAgICAgICAgICAgICBfaF9lcnJubzsKKyAgICBzdHJ1Y3QgX19yZXNfc3RhdGUgICAgIF9ucmVzWzFdOworICAgIHVuc2lnbmVkICAgICAgICAgICAgICAgX3NlcmlhbDsKKyAgICBzdHJ1Y3QgcHJvcF9pbmZvKiAgICAgIF9waTsKKyAgICBzdHJ1Y3QgcmVzX3N0YXRpYyAgICAgIF9yc3RhdGljWzFdOworfSBfcmVzX3RocmVhZDsKKworc3RhdGljIF9yZXNfdGhyZWFkKgorX3Jlc190aHJlYWRfYWxsb2Modm9pZCkKK3sKKyAgICBfcmVzX3RocmVhZCogIHJ0ID0gbWFsbG9jKHNpemVvZigqcnQpKTsKKworICAgIGlmIChydCkgeworICAgICAgICBydC0+X2hfZXJybm8gPSAwOworICAgICAgICAvKiBTcGVjaWFsIHN5c3RlbSBwcm9wZXJ0eSB3aGljaCB0cmFja3MgYW55IGNoYW5nZXMgdG8gJ25ldC4qJy4gKi8KKyAgICAgICAgcnQtPl9zZXJpYWwgPSAwOworICAgICAgICBydC0+X3BpID0gKHN0cnVjdCBwcm9wX2luZm8qKSBfX3N5c3RlbV9wcm9wZXJ0eV9maW5kKCJuZXQuY2hhbmdlIik7CisgICAgICAgIGlmIChydC0+X3BpKSB7CisgICAgICAgICAgICBydC0+X3NlcmlhbCA9IHJ0LT5fcGktPnNlcmlhbDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIHJlc19uaW5pdCggcnQtPl9ucmVzICkgPCAwICkgeworICAgICAgICAgICAgZnJlZShydCk7CisgICAgICAgICAgICBydCA9IE5VTEw7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtZW1zZXQocnQtPl9yc3RhdGljLCAwLCBzaXplb2YgcnQtPl9yc3RhdGljKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcnQ7Cit9CisKK3N0YXRpYyB2b2lkCitfcmVzX3N0YXRpY19kb25lKCByZXNfc3RhdGljICBycyApCit7CisgICAgLyogZm9ydHVuYXRlbHksIHRoZXJlIGlzIG5vdGhpbmcgdG8gZG8gaGVyZSwgc2luY2UgdGhlCisgICAgICogcG9pbnRzIGluIGhfYWRkcl9wdHJzIGFuZCBob3N0X2FsaWFzZXMgc2hvdWxkIGFsbAorICAgICAqIHBvaW50IHRvICdob3N0YnVmJworICAgICAqLworICAgIGlmIChycy0+aG9zdGYpIHsgIC8qIHNob3VsZCBub3QgaGFwcGVuIGluIHRoZW9yeSwgYnV0IGp1c3QgYmUgc2FmZSAqLworICAgICAgICBmY2xvc2UocnMtPmhvc3RmKTsKKyAgICAgICAgcnMtPmhvc3RmID0gTlVMTDsKKyAgICB9CisgICAgZnJlZShycy0+c2VydmVudC5zX2FsaWFzZXMpOworfQorCitzdGF0aWMgdm9pZAorX3Jlc190aHJlYWRfZnJlZSggdm9pZCogIF9ydCApCit7CisgICAgX3Jlc190aHJlYWQqICBydCA9IF9ydDsKKworICAgIF9yZXNfc3RhdGljX2RvbmUocnQtPl9yc3RhdGljKTsKKyAgICByZXNfbmRlc3Ryb3kocnQtPl9ucmVzKTsKKyAgICBmcmVlKHJ0KTsKK30KKworc3RhdGljIHZvaWQKK19yZXNfaW5pdF9rZXkoIHZvaWQgKQoreworICAgIHB0aHJlYWRfa2V5X2NyZWF0ZSggJl9yZXNfa2V5LCBfcmVzX3RocmVhZF9mcmVlICk7Cit9CisKK3N0YXRpYyBfcmVzX3RocmVhZCoKK19yZXNfdGhyZWFkX2dldCh2b2lkKQoreworICAgIF9yZXNfdGhyZWFkKiAgcnQ7CisgICAgcHRocmVhZF9vbmNlKCAmX3Jlc19vbmNlLCBfcmVzX2luaXRfa2V5ICk7CisgICAgcnQgPSBwdGhyZWFkX2dldHNwZWNpZmljKCBfcmVzX2tleSApOworICAgIGlmIChydCA9PSBOVUxMKSB7CisgICAgICAgIGlmICgocnQgPSBfcmVzX3RocmVhZF9hbGxvYygpKSA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBydC0+X2hfZXJybm8gPSAwOworICAgICAgICBydC0+X3NlcmlhbCA9IDA7CisgICAgICAgIHB0aHJlYWRfc2V0c3BlY2lmaWMoIF9yZXNfa2V5LCBydCApOworICAgIH0KKyAgICAvKiBDaGVjayB0aGUgc2VyaWFsIHZhbHVlIGZvciBhbnkgY2hhbmVzIHRvIG5ldC4qIHByb3BlcnRpZXMuICovCisgICAgaWYgKHJ0LT5fcGkgPT0gTlVMTCkgeworICAgICAgICBydC0+X3BpID0gKHN0cnVjdCBwcm9wX2luZm8qKSBfX3N5c3RlbV9wcm9wZXJ0eV9maW5kKCJuZXQuY2hhbmdlIik7CisgICAgfQorICAgIGlmIChydC0+X3BpID09IE5VTEwgfHwgcnQtPl9zZXJpYWwgPT0gcnQtPl9waS0+c2VyaWFsKSB7CisgICAgICAgIHJldHVybiBydDsKKyAgICB9CisgICAgcnQtPl9zZXJpYWwgPSBydC0+X3BpLT5zZXJpYWw7CisgICAgLyogUmVsb2FkIGZyb20gc3lzdGVtIHByb3BlcnRpZXMuICovCisgICAgaWYgKCByZXNfbmluaXQoIHJ0LT5fbnJlcyApIDwgMCApIHsKKyAgICAgICAgZnJlZShydCk7CisgICAgICAgIHJ0ID0gTlVMTDsKKyAgICAgICAgcHRocmVhZF9zZXRzcGVjaWZpYyggX3Jlc19rZXksIHJ0ICk7CisgICAgfQorICAgIF9yZXNvbHZfY2FjaGVfcmVzZXQocnQtPl9zZXJpYWwpOworICAgIHJldHVybiBydDsKK30KKworc3RydWN0IF9fcmVzX3N0YXRlIF9ucmVzOworCisjaWYgMAorc3RydWN0IHJlc29sdl9jYWNoZSoKK19fZ2V0X3Jlc19jYWNoZSh2b2lkKQoreworICAgIF9yZXNfdGhyZWFkKiAgcnQgPSBfcmVzX3RocmVhZF9nZXQoKTsKKworICAgIGlmICghcnQpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKCFydC0+X2NhY2hlKSB7CisgICAgICAgIHJ0LT5fY2FjaGUgPSBfcmVzb2x2X2NhY2hlX2NyZWF0ZSgpOworICAgIH0KKyAgICByZXR1cm4gcnQtPl9jYWNoZTsKK30KKyNlbmRpZgorCitpbnQqCitfX2dldF9oX2Vycm5vKHZvaWQpCit7CisgICAgX3Jlc190aHJlYWQqICBydCAgICA9IF9yZXNfdGhyZWFkX2dldCgpOworICAgIHN0YXRpYyBpbnQgICAgcGFuaWMgPSBORVREQl9JTlRFUk5BTDsKKworICAgIHJldHVybiBydCA/ICZydC0+X2hfZXJybm8gOiAmcGFuaWM7Cit9CisKK3Jlc19zdGF0ZQorX19yZXNfZ2V0X3N0YXRlKHZvaWQpCit7CisgICAgX3Jlc190aHJlYWQqICBydCA9IF9yZXNfdGhyZWFkX2dldCgpOworCisgICAgcmV0dXJuIHJ0ID8gcnQtPl9ucmVzIDogTlVMTDsKK30KKwordm9pZAorX19yZXNfcHV0X3N0YXRlKHJlc19zdGF0ZSByZXMpCit7CisgICAgLyogbm90aGluZyB0byBkbyAqLworICAgIHJlcz1yZXM7Cit9CisKK3Jlc19zdGF0aWMKK19fcmVzX2dldF9zdGF0aWModm9pZCkKK3sKKyAgICBfcmVzX3RocmVhZCogIHJ0ID0gX3Jlc190aHJlYWRfZ2V0KCk7CisKKyAgICByZXR1cm4gcnQgPyBydC0+X3JzdGF0aWMgOiBOVUxMOworfQpkaWZmIC0tZ2l0IGEvbGliYy9wcml2YXRlL2FycGFfbmFtZXNlci5oIGIvbGliYy9wcml2YXRlL2FycGFfbmFtZXNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkMmE3MzkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3ByaXZhdGUvYXJwYV9uYW1lc2VyLmgKQEAgLTAsMCArMSw1NjkgQEAKKy8qCSROZXRCU0Q6IG5hbWVzZXIuaCx2IDEuMTkgMjAwNS8xMi8yNiAxOTowMTo0NyBwZXJyeSBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTgzLCAxOTg5LCAxOTkzCisgKiAgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNCBieSBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0sIEluYy4gKCJJU0MiKQorICogQ29weXJpZ2h0IChjKSAxOTk2LTE5OTkgYnkgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElTQyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIElTQyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCisgKiBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKy8qCisgKglJZDogbmFtZXNlci5oLHYgMS4yLjIuNC40LjEgMjAwNC8wMy8wOSAwODozMzozMCBtYXJrYSBFeHAKKyAqLworCisjaWZuZGVmIF9BUlBBX05BTUVTRVJfSF8KKyNkZWZpbmUgX0FSUEFfTkFNRVNFUl9IXworCisjZGVmaW5lIEJJTkRfNF9DT01QQVQKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorCisvKgorICogUmV2aXNpb24gaW5mb3JtYXRpb24uICBUaGlzIGlzIHRoZSByZWxlYXNlIGRhdGUgaW4gWVlZWU1NREQgZm9ybWF0LgorICogSXQgY2FuIGNoYW5nZSBldmVyeSBkYXkgc28gdGhlIHJpZ2h0IHRoaW5nIHRvIGRvIHdpdGggaXQgaXMgdXNlIGl0CisgKiBpbiBwcmVwcm9jZXNzb3IgY29tbWFuZHMgc3VjaCBhcyAiI2lmIChfX05BTUVTRVIgPiAxOTkzMTEwNCkiLiAgRG8gbm90CisgKiBjb21wYXJlIGZvciBlcXVhbGl0eTsgcmF0aGVyLCB1c2UgaXQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgeW91ciBsaWJiaW5kLmEKKyAqIGNvbnRhaW5zIGEgbmV3IGVub3VnaCBsaWIvbmFtZXNlci8gdG8gc3VwcG9ydCB0aGUgZmVhdHVyZSB5b3UgbmVlZC4KKyAqLworCisjZGVmaW5lIF9fTkFNRVNFUgkxOTk5MTAwNgkvKiBOZXcgaW50ZXJmYWNlIHZlcnNpb24gc3RhbXAuICovCisKKy8qCisgKiBEZWZpbmUgY29uc3RhbnRzIGJhc2VkIG9uIFJGQyA4ODMsIFJGQyAxMDM0LCBSRkMgMTAzNQorICovCisjZGVmaW5lIE5TX1BBQ0tFVFNaCTUxMgkvKiBkZWZhdWx0IFVEUCBwYWNrZXQgc2l6ZSAqLworI2RlZmluZSBOU19NQVhETkFNRQkxMDI1CS8qIG1heGltdW0gZG9tYWluIG5hbWUgKi8KKyNkZWZpbmUgTlNfTUFYTVNHCTY1NTM1CS8qIG1heGltdW0gbWVzc2FnZSBzaXplICovCisjZGVmaW5lIE5TX01BWENETkFNRQkyNTUJLyogbWF4aW11bSBjb21wcmVzc2VkIGRvbWFpbiBuYW1lICovCisjZGVmaW5lIE5TX01BWExBQkVMCTYzCS8qIG1heGltdW0gbGVuZ3RoIG9mIGRvbWFpbiBsYWJlbCAqLworI2RlZmluZSBOU19IRklYRURTWgkxMgkvKiAjL2J5dGVzIG9mIGZpeGVkIGRhdGEgaW4gaGVhZGVyICovCisjZGVmaW5lIE5TX1FGSVhFRFNaCTQJLyogIy9ieXRlcyBvZiBmaXhlZCBkYXRhIGluIHF1ZXJ5ICovCisjZGVmaW5lIE5TX1JSRklYRURTWgkxMAkvKiAjL2J5dGVzIG9mIGZpeGVkIGRhdGEgaW4gciByZWNvcmQgKi8KKyNkZWZpbmUgTlNfSU5UMzJTWgk0CS8qICMvYnl0ZXMgb2YgZGF0YSBpbiBhIHVpbnQzMl90ICovCisjZGVmaW5lIE5TX0lOVDE2U1oJMgkvKiAjL2J5dGVzIG9mIGRhdGEgaW4gYSB1aW50MTZfdCAqLworI2RlZmluZSBOU19JTlQ4U1oJMQkvKiAjL2J5dGVzIG9mIGRhdGEgaW4gYSB1aW50OF90ICovCisjZGVmaW5lIE5TX0lOQUREUlNaCTQJLyogSVB2NCBUX0EgKi8KKyNkZWZpbmUgTlNfSU42QUREUlNaCTE2CS8qIElQdjYgVF9BQUFBICovCisjZGVmaW5lIE5TX0NNUFJTRkxHUwkweGMwCS8qIEZsYWcgYml0cyBpbmRpY2F0aW5nIG5hbWUgY29tcHJlc3Npb24uICovCisjZGVmaW5lIE5TX0RFRkFVTFRQT1JUCTUzCS8qIEZvciBib3RoIFRDUCBhbmQgVURQLiAqLworCisvKgorICogVGhlc2UgY2FuIGJlIGV4cGFuZGVkIHdpdGggc3lub255bXMsIGp1c3Qga2VlcCBuc19wYXJzZS5jOm5zX3BhcnNlcmVjb3JkKCkKKyAqIGluIHN5bmNoIHdpdGggaXQuCisgKi8KK3R5cGVkZWYgZW51bSBfX25zX3NlY3QgeworCW5zX3NfcWQgPSAwLAkJLyogUXVlcnk6IFF1ZXN0aW9uLiAqLworCW5zX3Nfem4gPSAwLAkJLyogVXBkYXRlOiBab25lLiAqLworCW5zX3NfYW4gPSAxLAkJLyogUXVlcnk6IEFuc3dlci4gKi8KKwluc19zX3ByID0gMSwJCS8qIFVwZGF0ZTogUHJlcmVxdWlzaXRlcy4gKi8KKwluc19zX25zID0gMiwJCS8qIFF1ZXJ5OiBOYW1lIHNlcnZlcnMuICovCisJbnNfc191ZCA9IDIsCQkvKiBVcGRhdGU6IFVwZGF0ZS4gKi8KKwluc19zX2FyID0gMywJCS8qIFF1ZXJ5fFVwZGF0ZTogQWRkaXRpb25hbCByZWNvcmRzLiAqLworCW5zX3NfbWF4ID0gNAorfSBuc19zZWN0OworCisvKgorICogVGhpcyBpcyBhIG1lc3NhZ2UgaGFuZGxlLiAgSXQgaXMgY2FsbGVyIGFsbG9jYXRlZCBhbmQgaGFzIG5vIGR5bmFtaWMgZGF0YS4KKyAqIFRoaXMgc3RydWN0dXJlIGlzIGludGVuZGVkIHRvIGJlIG9wYXF1ZSB0byBhbGwgYnV0IG5zX3BhcnNlLmMsIHRodXMgdGhlCisgKiBsZWFkaW5nIF8ncyBvbiB0aGUgbWVtYmVyIG5hbWVzLiAgVXNlIHRoZSBhY2Nlc3NvciBmdW5jdGlvbnMsIG5vdCB0aGUgXydzLgorICovCit0eXBlZGVmIHN0cnVjdCBfX25zX21zZyB7CisJY29uc3QgdV9jaGFyCSpfbXNnLCAqX2VvbTsKKwl1aW50MTZfdAlfaWQsIF9mbGFncywgX2NvdW50c1tuc19zX21heF07CisJY29uc3QgdV9jaGFyCSpfc2VjdGlvbnNbbnNfc19tYXhdOworCW5zX3NlY3QJCV9zZWN0OworCWludAkJX3JybnVtOworCWNvbnN0IHVfY2hhcgkqX21zZ19wdHI7Cit9IG5zX21zZzsKKworLyogUHJpdmF0ZSBkYXRhIHN0cnVjdHVyZSAtIGRvIG5vdCB1c2UgZnJvbSBvdXRzaWRlIGxpYnJhcnkuICovCitzdHJ1Y3QgX25zX2ZsYWdkYXRhIHsgIGludCBtYXNrLCBzaGlmdDsgIH07CitleHRlcm4gY29uc3Qgc3RydWN0IF9uc19mbGFnZGF0YSBfbnNfZmxhZ2RhdGFbXTsKKworLyogQWNjZXNzb3IgbWFjcm9zIC0gdGhpcyBpcyBwYXJ0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiAqLworCisjZGVmaW5lIG5zX21zZ19pZChoYW5kbGUpICgoaGFuZGxlKS5faWQgKyAwKQorI2RlZmluZSBuc19tc2dfYmFzZShoYW5kbGUpICgoaGFuZGxlKS5fbXNnICsgMCkKKyNkZWZpbmUgbnNfbXNnX2VuZChoYW5kbGUpICgoaGFuZGxlKS5fZW9tICsgMCkKKyNkZWZpbmUgbnNfbXNnX3NpemUoaGFuZGxlKSAoKHNpemVfdCkoKGhhbmRsZSkuX2VvbSAtIChoYW5kbGUpLl9tc2cpKQorI2RlZmluZSBuc19tc2dfY291bnQoaGFuZGxlLCBzZWN0aW9uKSAoKGhhbmRsZSkuX2NvdW50c1tzZWN0aW9uXSArIDApCisKKy8qCisgKiBUaGlzIGlzIGEgcGFyc2VkIHJlY29yZC4gIEl0IGlzIGNhbGxlciBhbGxvY2F0ZWQgYW5kIGhhcyBubyBkeW5hbWljIGRhdGEuCisgKi8KK3R5cGVkZWYJc3RydWN0IF9fbnNfcnIgeworCWNoYXIJCW5hbWVbTlNfTUFYRE5BTUVdOworCXVpbnQxNl90CXR5cGU7CisJdWludDE2X3QJcnJfY2xhc3M7CisJdWludDMyX3QJdHRsOworCXVpbnQxNl90CXJkbGVuZ3RoOworCWNvbnN0IHVfY2hhciAqCXJkYXRhOworfSBuc19ycjsKKworLyogQWNjZXNzb3IgbWFjcm9zIC0gdGhpcyBpcyBwYXJ0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiAqLworI2RlZmluZSBuc19ycl9uYW1lKHJyKQkoKChycikubmFtZVswXSAhPSAnXDAnKSA/IChycikubmFtZSA6ICIuIikKKyNkZWZpbmUgbnNfcnJfdHlwZShycikJKChuc190eXBlKSgocnIpLnR5cGUgKyAwKSkKKyNkZWZpbmUgbnNfcnJfY2xhc3MocnIpCSgobnNfY2xhc3MpKChycikucnJfY2xhc3MgKyAwKSkKKyNkZWZpbmUgbnNfcnJfdHRsKHJyKQkoKHVfbG9uZykocnIpLnR0bCArIDApCisjZGVmaW5lIG5zX3JyX3JkbGVuKHJyKQkoKHNpemVfdCkocnIpLnJkbGVuZ3RoICsgMCkKKyNkZWZpbmUgbnNfcnJfcmRhdGEocnIpCSgocnIpLnJkYXRhICsgMCkKKworLyoKKyAqIFRoZXNlIGRvbid0IGhhdmUgdG8gYmUgaW4gdGhlIHNhbWUgb3JkZXIgYXMgaW4gdGhlIHBhY2tldCBmbGFncyB3b3JkLAorICogYW5kIHRoZXkgY2FuIGV2ZW4gb3ZlcmxhcCBpbiBzb21lIGNhc2VzLCBidXQgdGhleSB3aWxsIG5lZWQgdG8gYmUga2VwdAorICogaW4gc3luY2ggd2l0aCBuc19wYXJzZS5jOm5zX2ZsYWdkYXRhW10uCisgKi8KK3R5cGVkZWYgZW51bSBfX25zX2ZsYWcgeworCW5zX2ZfcXIsCQkvKiBRdWVzdGlvbi9SZXNwb25zZS4gKi8KKwluc19mX29wY29kZSwJCS8qIE9wZXJhdGlvbiBjb2RlLiAqLworCW5zX2ZfYWEsCQkvKiBBdXRob3JpdGF0aXZlIEFuc3dlci4gKi8KKwluc19mX3RjLAkJLyogVHJ1bmNhdGlvbiBvY2N1cnJlZC4gKi8KKwluc19mX3JkLAkJLyogUmVjdXJzaW9uIERlc2lyZWQuICovCisJbnNfZl9yYSwJCS8qIFJlY3Vyc2lvbiBBdmFpbGFibGUuICovCisJbnNfZl96LAkJCS8qIE1CWi4gKi8KKwluc19mX2FkLAkJLyogQXV0aGVudGljIERhdGEgKEROU1NFQykuICovCisJbnNfZl9jZCwJCS8qIENoZWNraW5nIERpc2FibGVkIChETlNTRUMpLiAqLworCW5zX2ZfcmNvZGUsCQkvKiBSZXNwb25zZSBjb2RlLiAqLworCW5zX2ZfbWF4Cit9IG5zX2ZsYWc7CisKKy8qCisgKiBDdXJyZW50bHkgZGVmaW5lZCBvcGNvZGVzLgorICovCit0eXBlZGVmIGVudW0gX19uc19vcGNvZGUgeworCW5zX29fcXVlcnkgPSAwLAkJLyogU3RhbmRhcmQgcXVlcnkuICovCisJbnNfb19pcXVlcnkgPSAxLAkvKiBJbnZlcnNlIHF1ZXJ5IChkZXByZWNhdGVkL3Vuc3VwcG9ydGVkKS4gKi8KKwluc19vX3N0YXR1cyA9IDIsCS8qIE5hbWUgc2VydmVyIHN0YXR1cyBxdWVyeSAodW5zdXBwb3J0ZWQpLiAqLworCQkJCS8qIE9wY29kZSAzIGlzIHVuZGVmaW5lZC9yZXNlcnZlZC4gKi8KKwluc19vX25vdGlmeSA9IDQsCS8qIFpvbmUgY2hhbmdlIG5vdGlmaWNhdGlvbi4gKi8KKwluc19vX3VwZGF0ZSA9IDUsCS8qIFpvbmUgdXBkYXRlIG1lc3NhZ2UuICovCisJbnNfb19tYXggPSA2Cit9IG5zX29wY29kZTsKKworLyoKKyAqIEN1cnJlbnRseSBkZWZpbmVkIHJlc3BvbnNlIGNvZGVzLgorICovCit0eXBlZGVmCWVudW0gX19uc19yY29kZSB7CisJbnNfcl9ub2Vycm9yID0gMCwJLyogTm8gZXJyb3Igb2NjdXJyZWQuICovCisJbnNfcl9mb3JtZXJyID0gMSwJLyogRm9ybWF0IGVycm9yLiAqLworCW5zX3Jfc2VydmZhaWwgPSAyLAkvKiBTZXJ2ZXIgZmFpbHVyZS4gKi8KKwluc19yX254ZG9tYWluID0gMywJLyogTmFtZSBlcnJvci4gKi8KKwluc19yX25vdGltcGwgPSA0LAkvKiBVbmltcGxlbWVudGVkLiAqLworCW5zX3JfcmVmdXNlZCA9IDUsCS8qIE9wZXJhdGlvbiByZWZ1c2VkLiAqLworCS8qIHRoZXNlIGFyZSBmb3IgQklORF9VUERBVEUgKi8KKwluc19yX3l4ZG9tYWluID0gNiwJLyogTmFtZSBleGlzdHMgKi8KKwluc19yX3l4cnJzZXQgPSA3LAkvKiBSUnNldCBleGlzdHMgKi8KKwluc19yX254cnJzZXQgPSA4LAkvKiBSUnNldCBkb2VzIG5vdCBleGlzdCAqLworCW5zX3Jfbm90YXV0aCA9IDksCS8qIE5vdCBhdXRob3JpdGF0aXZlIGZvciB6b25lICovCisJbnNfcl9ub3R6b25lID0gMTAsCS8qIFpvbmUgb2YgcmVjb3JkIGRpZmZlcmVudCBmcm9tIHpvbmUgc2VjdGlvbiAqLworCW5zX3JfbWF4ID0gMTEsCisJLyogVGhlIGZvbGxvd2luZyBhcmUgRUROUyBleHRlbmRlZCByY29kZXMgKi8KKwluc19yX2JhZHZlcnMgPSAxNiwKKwkvKiBUaGUgZm9sbG93aW5nIGFyZSBUU0lHIGVycm9ycyAqLworCW5zX3JfYmFkc2lnID0gMTYsCisJbnNfcl9iYWRrZXkgPSAxNywKKwluc19yX2JhZHRpbWUgPSAxOAorfSBuc19yY29kZTsKKworLyogQklORF9VUERBVEUgKi8KK3R5cGVkZWYgZW51bSBfX25zX3VwZGF0ZV9vcGVyYXRpb24geworCW5zX3VvcF9kZWxldGUgPSAwLAorCW5zX3VvcF9hZGQgPSAxLAorCW5zX3VvcF9tYXggPSAyCit9IG5zX3VwZGF0ZV9vcGVyYXRpb247CisKKy8qCisgKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIGZvciBUU0lHIGF1dGhlbnRpY2F0ZWQgbWVzc2FnZXMKKyAqLworc3RydWN0IG5zX3RzaWdfa2V5IHsKKyAgICAgICAgY2hhciBuYW1lW05TX01BWEROQU1FXSwgYWxnW05TX01BWEROQU1FXTsKKyAgICAgICAgdW5zaWduZWQgY2hhciAqZGF0YTsKKyAgICAgICAgaW50IGxlbjsKK307Cit0eXBlZGVmIHN0cnVjdCBuc190c2lnX2tleSBuc190c2lnX2tleTsKKworLyoKKyAqIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgZm9yIFRTSUcgYXV0aGVudGljYXRlZCBUQ1AgbWVzc2FnZXMKKyAqLworc3RydWN0IG5zX3RjcF90c2lnX3N0YXRlIHsKKwlpbnQgY291bnRlcjsKKwlzdHJ1Y3QgZHN0X2tleSAqa2V5OworCXZvaWQgKmN0eDsKKwl1bnNpZ25lZCBjaGFyIHNpZ1tOU19QQUNLRVRTWl07CisJaW50IHNpZ2xlbjsKK307Cit0eXBlZGVmIHN0cnVjdCBuc190Y3BfdHNpZ19zdGF0ZSBuc190Y3BfdHNpZ19zdGF0ZTsKKworI2RlZmluZSBOU19UU0lHX0ZVREdFIDMwMAorI2RlZmluZSBOU19UU0lHX1RDUF9DT1VOVCAxMDAKKyNkZWZpbmUgTlNfVFNJR19BTEdfSE1BQ19NRDUgIkhNQUMtTUQ1LlNJRy1BTEcuUkVHLklOVCIKKworI2RlZmluZSBOU19UU0lHX0VSUk9SX05PX1RTSUcgLTEwCisjZGVmaW5lIE5TX1RTSUdfRVJST1JfTk9fU1BBQ0UgLTExCisjZGVmaW5lIE5TX1RTSUdfRVJST1JfRk9STUVSUiAtMTIKKworLyoKKyAqIEN1cnJlbnRseSBkZWZpbmVkIHR5cGUgdmFsdWVzIGZvciByZXNvdXJjZXMgYW5kIHF1ZXJpZXMuCisgKi8KK3R5cGVkZWYgZW51bSBfX25zX3R5cGUgeworCW5zX3RfaW52YWxpZCA9IDAsCS8qIENvb2tpZS4gKi8KKwluc190X2EgPSAxLAkJLyogSG9zdCBhZGRyZXNzLiAqLworCW5zX3RfbnMgPSAyLAkJLyogQXV0aG9yaXRhdGl2ZSBzZXJ2ZXIuICovCisJbnNfdF9tZCA9IDMsCQkvKiBNYWlsIGRlc3RpbmF0aW9uLiAqLworCW5zX3RfbWYgPSA0LAkJLyogTWFpbCBmb3J3YXJkZXIuICovCisJbnNfdF9jbmFtZSA9IDUsCQkvKiBDYW5vbmljYWwgbmFtZS4gKi8KKwluc190X3NvYSA9IDYsCQkvKiBTdGFydCBvZiBhdXRob3JpdHkgem9uZS4gKi8KKwluc190X21iID0gNywJCS8qIE1haWxib3ggZG9tYWluIG5hbWUuICovCisJbnNfdF9tZyA9IDgsCQkvKiBNYWlsIGdyb3VwIG1lbWJlci4gKi8KKwluc190X21yID0gOSwJCS8qIE1haWwgcmVuYW1lIG5hbWUuICovCisJbnNfdF9udWxsID0gMTAsCQkvKiBOdWxsIHJlc291cmNlIHJlY29yZC4gKi8KKwluc190X3drcyA9IDExLAkJLyogV2VsbCBrbm93biBzZXJ2aWNlLiAqLworCW5zX3RfcHRyID0gMTIsCQkvKiBEb21haW4gbmFtZSBwb2ludGVyLiAqLworCW5zX3RfaGluZm8gPSAxMywJLyogSG9zdCBpbmZvcm1hdGlvbi4gKi8KKwluc190X21pbmZvID0gMTQsCS8qIE1haWxib3ggaW5mb3JtYXRpb24uICovCisJbnNfdF9teCA9IDE1LAkJLyogTWFpbCByb3V0aW5nIGluZm9ybWF0aW9uLiAqLworCW5zX3RfdHh0ID0gMTYsCQkvKiBUZXh0IHN0cmluZ3MuICovCisJbnNfdF9ycCA9IDE3LAkJLyogUmVzcG9uc2libGUgcGVyc29uLiAqLworCW5zX3RfYWZzZGIgPSAxOCwJLyogQUZTIGNlbGwgZGF0YWJhc2UuICovCisJbnNfdF94MjUgPSAxOSwJCS8qIFhfMjUgY2FsbGluZyBhZGRyZXNzLiAqLworCW5zX3RfaXNkbiA9IDIwLAkJLyogSVNETiBjYWxsaW5nIGFkZHJlc3MuICovCisJbnNfdF9ydCA9IDIxLAkJLyogUm91dGVyLiAqLworCW5zX3RfbnNhcCA9IDIyLAkJLyogTlNBUCBhZGRyZXNzLiAqLworCW5zX3RfbnNhcF9wdHIgPSAyMywJLyogUmV2ZXJzZSBOU0FQIGxvb2t1cCAoZGVwcmVjYXRlZCkuICovCisJbnNfdF9zaWcgPSAyNCwJCS8qIFNlY3VyaXR5IHNpZ25hdHVyZS4gKi8KKwluc190X2tleSA9IDI1LAkJLyogU2VjdXJpdHkga2V5LiAqLworCW5zX3RfcHggPSAyNiwJCS8qIFguNDAwIG1haWwgbWFwcGluZy4gKi8KKwluc190X2dwb3MgPSAyNywJCS8qIEdlb2dyYXBoaWNhbCBwb3NpdGlvbiAod2l0aGRyYXduKS4gKi8KKwluc190X2FhYWEgPSAyOCwJCS8qIElwNiBBZGRyZXNzLiAqLworCW5zX3RfbG9jID0gMjksCQkvKiBMb2NhdGlvbiBJbmZvcm1hdGlvbi4gKi8KKwluc190X254dCA9IDMwLAkJLyogTmV4dCBkb21haW4gKHNlY3VyaXR5KS4gKi8KKwluc190X2VpZCA9IDMxLAkJLyogRW5kcG9pbnQgaWRlbnRpZmllci4gKi8KKwluc190X25pbWxvYyA9IDMyLAkvKiBOaW1yb2QgTG9jYXRvci4gKi8KKwluc190X3NydiA9IDMzLAkJLyogU2VydmVyIFNlbGVjdGlvbi4gKi8KKwluc190X2F0bWEgPSAzNCwJCS8qIEFUTSBBZGRyZXNzICovCisJbnNfdF9uYXB0ciA9IDM1LAkvKiBOYW1pbmcgQXV0aG9yaXR5IFBvaW5UZVIgKi8KKwluc190X2t4ID0gMzYsCQkvKiBLZXkgRXhjaGFuZ2UgKi8KKwluc190X2NlcnQgPSAzNywJCS8qIENlcnRpZmljYXRpb24gcmVjb3JkICovCisJbnNfdF9hNiA9IDM4LAkJLyogSVB2NiBhZGRyZXNzIChkZXByZWNhdGVzIEFBQUEpICovCisJbnNfdF9kbmFtZSA9IDM5LAkvKiBOb24tdGVybWluYWwgRE5BTUUgKGZvciBJUHY2KSAqLworCW5zX3Rfc2luayA9IDQwLAkJLyogS2l0Y2hlbiBzaW5rIChleHBlcmltZW50YXRsKSAqLworCW5zX3Rfb3B0ID0gNDEsCQkvKiBFRE5TMCBvcHRpb24gKG1ldGEtUlIpICovCisJbnNfdF9hcGwgPSA0MiwJCS8qIEFkZHJlc3MgcHJlZml4IGxpc3QgKFJGQyAzMTIzKSAqLworCW5zX3RfdGtleSA9IDI0OSwJLyogVHJhbnNhY3Rpb24ga2V5ICovCisJbnNfdF90c2lnID0gMjUwLAkvKiBUcmFuc2FjdGlvbiBzaWduYXR1cmUuICovCisJbnNfdF9peGZyID0gMjUxLAkvKiBJbmNyZW1lbnRhbCB6b25lIHRyYW5zZmVyLiAqLworCW5zX3RfYXhmciA9IDI1MiwJLyogVHJhbnNmZXIgem9uZSBvZiBhdXRob3JpdHkuICovCisJbnNfdF9tYWlsYiA9IDI1MywJLyogVHJhbnNmZXIgbWFpbGJveCByZWNvcmRzLiAqLworCW5zX3RfbWFpbGEgPSAyNTQsCS8qIFRyYW5zZmVyIG1haWwgYWdlbnQgcmVjb3Jkcy4gKi8KKwluc190X2FueSA9IDI1NSwJCS8qIFdpbGRjYXJkIG1hdGNoLiAqLworCW5zX3RfenhmciA9IDI1NiwJLyogQklORC1zcGVjaWZpYywgbm9uc3RhbmRhcmQuICovCisJbnNfdF9tYXggPSA2NTUzNgorfSBuc190eXBlOworCisvKiBFeGNsdXNpdmVseSBhIFFUWVBFPyAobm90IGFsc28gYW4gUlRZUEUpICovCisjZGVmaW5lCW5zX3RfcXRfcCh0KSAobnNfdF94ZnJfcCh0KSB8fCAodCkgPT0gbnNfdF9hbnkgfHwgXAorCQkgICAgICAodCkgPT0gbnNfdF9tYWlsYiB8fCAodCkgPT0gbnNfdF9tYWlsYSkKKy8qIFNvbWUga2luZCBvZiBtZXRhLVJSPyAobm90IGEgUVRZUEUsIGJ1dCBhbHNvIG5vdCBhbiBSVFlQRSkgKi8KKyNkZWZpbmUJbnNfdF9tcnJfcCh0KSAoKHQpID09IG5zX3RfdHNpZyB8fCAodCkgPT0gbnNfdF9vcHQpCisvKiBFeGNsdXNpdmVseSBhbiBSVFlQRT8gKG5vdCBhbHNvIGEgUVRZUEUgb3IgYSBtZXRhLVJSKSAqLworI2RlZmluZSBuc190X3JyX3AodCkgKCFuc190X3F0X3AodCkgJiYgIW5zX3RfbXJyX3AodCkpCisjZGVmaW5lIG5zX3RfdWRwX3AodCkgKCh0KSAhPSBuc190X2F4ZnIgJiYgKHQpICE9IG5zX3RfenhmcikKKyNkZWZpbmUgbnNfdF94ZnJfcCh0KSAoKHQpID09IG5zX3RfYXhmciB8fCAodCkgPT0gbnNfdF9peGZyIHx8IFwKKwkJICAgICAgICh0KSA9PSBuc190X3p4ZnIpCisKKy8qCisgKiBWYWx1ZXMgZm9yIGNsYXNzIGZpZWxkCisgKi8KK3R5cGVkZWYgZW51bSBfX25zX2NsYXNzIHsKKwluc19jX2ludmFsaWQgPSAwLAkvKiBDb29raWUuICovCisJbnNfY19pbiA9IDEsCQkvKiBJbnRlcm5ldC4gKi8KKwluc19jXzIgPSAyLAkJLyogdW5hbGxvY2F0ZWQvdW5zdXBwb3J0ZWQuICovCisJbnNfY19jaGFvcyA9IDMsCQkvKiBNSVQgQ2hhb3MtbmV0LiAqLworCW5zX2NfaHMgPSA0LAkJLyogTUlUIEhlc2lvZC4gKi8KKwkvKiBRdWVyeSBjbGFzcyB2YWx1ZXMgd2hpY2ggZG8gbm90IGFwcGVhciBpbiByZXNvdXJjZSByZWNvcmRzICovCisJbnNfY19ub25lID0gMjU0LAkvKiBmb3IgcHJlcmVxLiBzZWN0aW9ucyBpbiB1cGRhdGUgcmVxdWVzdHMgKi8KKwluc19jX2FueSA9IDI1NSwJCS8qIFdpbGRjYXJkIG1hdGNoLiAqLworCW5zX2NfbWF4ID0gNjU1MzYKK30gbnNfY2xhc3M7CisKKy8qIEROU1NFQyBjb25zdGFudHMuICovCisKK3R5cGVkZWYgZW51bSBfX25zX2tleV90eXBlcyB7CisJbnNfa3RfcnNhID0gMSwJCS8qIGtleSB0eXBlIFJTQS9NRDUgKi8KKwluc19rdF9kaCAgPSAyLAkJLyogRGlmZmllIEhlbGxtYW4gKi8KKwluc19rdF9kc2EgPSAzLAkJLyogRGlnaXRhbCBTaWduYXR1cmUgU3RhbmRhcmQgKE1BTkRBVE9SWSkgKi8KKwluc19rdF9wcml2YXRlID0gMjU0CS8qIFByaXZhdGUga2V5IHR5cGUgc3RhcnRzIHdpdGggT0lEICovCit9IG5zX2tleV90eXBlczsKKwordHlwZWRlZiBlbnVtIF9fbnNfY2VydF90eXBlcyB7CisJY2VydF90X3BraXggPSAxLAkvKiBQS0lYIChYLjUwOXYzKSAqLworCWNlcnRfdF9zcGtpID0gMiwJLyogU1BLSSAqLworCWNlcnRfdF9wZ3AgID0gMywJLyogUEdQICovCisJY2VydF90X3VybCAgPSAyNTMsCS8qIFVSTCBwcml2YXRlIHR5cGUgKi8KKwljZXJ0X3Rfb2lkICA9IDI1NAkvKiBPSUQgcHJpdmF0ZSB0eXBlICovCit9IG5zX2NlcnRfdHlwZXM7CisKKy8qIEZsYWdzIGZpZWxkIG9mIHRoZSBLRVkgUlIgcmRhdGEuICovCisjZGVmaW5lCU5TX0tFWV9UWVBFTUFTSwkJMHhDMDAwCS8qIE1hc2sgZm9yICJ0eXBlIiBiaXRzICovCisjZGVmaW5lCU5TX0tFWV9UWVBFX0FVVEhfQ09ORgkweDAwMDAJLyogS2V5IHVzYWJsZSBmb3IgYm90aCAqLworI2RlZmluZQlOU19LRVlfVFlQRV9DT05GX09OTFkJMHg4MDAwCS8qIEtleSB1c2FibGUgZm9yIGNvbmZpZGVudGlhbGl0eSAqLworI2RlZmluZQlOU19LRVlfVFlQRV9BVVRIX09OTFkJMHg0MDAwCS8qIEtleSB1c2FibGUgZm9yIGF1dGhlbnRpY2F0aW9uICovCisjZGVmaW5lCU5TX0tFWV9UWVBFX05PX0tFWQkweEMwMDAJLyogTm8ga2V5IHVzYWJsZSBmb3IgZWl0aGVyOyBubyBrZXkgKi8KKy8qIFRoZSB0eXBlIGJpdHMgY2FuIGFsc28gYmUgaW50ZXJwcmV0ZWQgaW5kZXBlbmRlbnRseSwgYXMgc2luZ2xlIGJpdHM6ICovCisjZGVmaW5lCU5TX0tFWV9OT19BVVRICQkweDgwMDAJLyogS2V5IHVudXNhYmxlIGZvciBhdXRoZW50aWNhdGlvbiAqLworI2RlZmluZQlOU19LRVlfTk9fQ09ORgkJMHg0MDAwCS8qIEtleSB1bnVzYWJsZSBmb3IgY29uZmlkZW50aWFsaXR5ICovCisjZGVmaW5lCU5TX0tFWV9SRVNFUlZFRDIJMHgyMDAwCS8qIFNlY3VyaXR5IGlzICptYW5kYXRvcnkqIGlmIGJpdD0wICovCisjZGVmaW5lCU5TX0tFWV9FWFRFTkRFRF9GTEFHUwkweDEwMDAJLyogcmVzZXJ2ZWQgLSBtdXN0IGJlIHplcm8gKi8KKyNkZWZpbmUJTlNfS0VZX1JFU0VSVkVENAkweDA4MDAgIC8qIHJlc2VydmVkIC0gbXVzdCBiZSB6ZXJvICovCisjZGVmaW5lCU5TX0tFWV9SRVNFUlZFRDUJMHgwNDAwICAvKiByZXNlcnZlZCAtIG11c3QgYmUgemVybyAqLworI2RlZmluZQlOU19LRVlfTkFNRV9UWVBFCTB4MDMwMAkvKiB0aGVzZSBiaXRzIGRldGVybWluZSB0aGUgdHlwZSAqLworI2RlZmluZQlOU19LRVlfTkFNRV9VU0VSCTB4MDAwMAkvKiBrZXkgaXMgYXNzb2MuIHdpdGggdXNlciAqLworI2RlZmluZQlOU19LRVlfTkFNRV9FTlRJVFkJMHgwMjAwCS8qIGtleSBpcyBhc3NvYy4gd2l0aCBlbnRpdHkgZWcgaG9zdCAqLworI2RlZmluZQlOU19LRVlfTkFNRV9aT05FCTB4MDEwMAkvKiBrZXkgaXMgem9uZSBrZXkgKi8KKyNkZWZpbmUJTlNfS0VZX05BTUVfUkVTRVJWRUQJMHgwMzAwCS8qIHJlc2VydmVkIG1lYW5pbmcgKi8KKyNkZWZpbmUJTlNfS0VZX1JFU0VSVkVEOAkweDAwODAgIC8qIHJlc2VydmVkIC0gbXVzdCBiZSB6ZXJvICovCisjZGVmaW5lCU5TX0tFWV9SRVNFUlZFRDkJMHgwMDQwICAvKiByZXNlcnZlZCAtIG11c3QgYmUgemVybyAqLworI2RlZmluZQlOU19LRVlfUkVTRVJWRUQxMAkweDAwMjAgIC8qIHJlc2VydmVkIC0gbXVzdCBiZSB6ZXJvICovCisjZGVmaW5lCU5TX0tFWV9SRVNFUlZFRDExCTB4MDAxMCAgLyogcmVzZXJ2ZWQgLSBtdXN0IGJlIHplcm8gKi8KKyNkZWZpbmUJTlNfS0VZX1NJR05BVE9SWU1BU0sJMHgwMDBGCS8qIGtleSBjYW4gc2lnbiBSUidzIG9mIHNhbWUgbmFtZSAqLworI2RlZmluZQlOU19LRVlfUkVTRVJWRURfQklUTUFTSyAoIE5TX0tFWV9SRVNFUlZFRDIgfCBcCisJCQkJICBOU19LRVlfUkVTRVJWRUQ0IHwgXAorCQkJCSAgTlNfS0VZX1JFU0VSVkVENSB8IFwKKwkJCQkgIE5TX0tFWV9SRVNFUlZFRDggfCBcCisJCQkJICBOU19LRVlfUkVTRVJWRUQ5IHwgXAorCQkJCSAgTlNfS0VZX1JFU0VSVkVEMTAgfCBcCisJCQkJICBOU19LRVlfUkVTRVJWRUQxMSApCisjZGVmaW5lIE5TX0tFWV9SRVNFUlZFRF9CSVRNQVNLMiAweEZGRkYgLyogbm8gYml0cyBkZWZpbmVkIGhlcmUgKi8KKworLyogVGhlIEFsZ29yaXRobSBmaWVsZCBvZiB0aGUgS0VZIGFuZCBTSUcgUlIncyBpcyBhbiBpbnRlZ2VyLCB7MS4uMjU0fSAqLworI2RlZmluZQlOU19BTEdfTUQ1UlNBCQkxCS8qIE1ENSB3aXRoIFJTQSAqLworI2RlZmluZQlOU19BTEdfREggICAgICAgICAgICAgICAyCS8qIERpZmZpZSBIZWxsbWFuIEtFWSAqLworI2RlZmluZQlOU19BTEdfRFNBICAgICAgICAgICAgICAzCS8qIERTQSBLRVkgKi8KKyNkZWZpbmUJTlNfQUxHX0RTUyAgICAgICAgICAgICAgTlNfQUxHX0RTQQorI2RlZmluZQlOU19BTEdfRVhQSVJFX09OTFkJMjUzCS8qIE5vIGFsZywgbm8gc2VjdXJpdHkgKi8KKyNkZWZpbmUJTlNfQUxHX1BSSVZBVEVfT0lECTI1NAkvKiBLZXkgYmVnaW5zIHdpdGggT0lEIGdpdmluZyBhbGcgKi8KKworLyogUHJvdG9jb2wgdmFsdWVzICAqLworLyogdmFsdWUgMCBpcyByZXNlcnZlZCAqLworI2RlZmluZSBOU19LRVlfUFJPVF9UTFMgICAgICAgICAxCisjZGVmaW5lIE5TX0tFWV9QUk9UX0VNQUlMICAgICAgIDIKKyNkZWZpbmUgTlNfS0VZX1BST1RfRE5TU0VDICAgICAgMworI2RlZmluZSBOU19LRVlfUFJPVF9JUFNFQyAgICAgICA0CisjZGVmaW5lIE5TX0tFWV9QUk9UX0FOWQkJMjU1CisKKy8qIFNpZ25hdHVyZXMgKi8KKyNkZWZpbmUJTlNfTUQ1UlNBX01JTl9CSVRTCSA1MTIJLyogU2l6ZSBvZiBhIG1vZCBvciBleHAgaW4gYml0cyAqLworI2RlZmluZQlOU19NRDVSU0FfTUFYX0JJVFMJNDA5NgorCS8qIFRvdGFsIG9mIGJpbmFyeSBtb2QgYW5kIGV4cCAqLworI2RlZmluZQlOU19NRDVSU0FfTUFYX0JZVEVTCSgoTlNfTUQ1UlNBX01BWF9CSVRTKzcvOCkqMiszKQorCS8qIE1heCBsZW5ndGggb2YgdGV4dCBzaWcgYmxvY2sgKi8KKyNkZWZpbmUJTlNfTUQ1UlNBX01BWF9CQVNFNjQJKCgoTlNfTUQ1UlNBX01BWF9CWVRFUysyKS8zKSo0KQorI2RlZmluZSBOU19NRDVSU0FfTUlOX1NJWkUJKChOU19NRDVSU0FfTUlOX0JJVFMrNykvOCkKKyNkZWZpbmUgTlNfTUQ1UlNBX01BWF9TSVpFCSgoTlNfTUQ1UlNBX01BWF9CSVRTKzcpLzgpCisKKyNkZWZpbmUgTlNfRFNBX1NJR19TSVpFICAgICAgICAgNDEKKyNkZWZpbmUgTlNfRFNBX01JTl9TSVpFICAgICAgICAgMjEzCisjZGVmaW5lIE5TX0RTQV9NQVhfQllURVMgICAgICAgIDQwNQorCisvKiBPZmZzZXRzIGludG8gU0lHIHJlY29yZCByZGF0YSB0byBmaW5kIHZhcmlvdXMgdmFsdWVzICovCisjZGVmaW5lCU5TX1NJR19UWVBFCTAJLyogVHlwZSBmbGFncyAqLworI2RlZmluZQlOU19TSUdfQUxHCTIJLyogQWxnb3JpdGhtICovCisjZGVmaW5lCU5TX1NJR19MQUJFTFMJMwkvKiBIb3cgbWFueSBsYWJlbHMgaW4gbmFtZSAqLworI2RlZmluZQlOU19TSUdfT1RUTAk0CS8qIE9yaWdpbmFsIFRUTCAqLworI2RlZmluZQlOU19TSUdfRVhQSVIJOAkvKiBFeHBpcmF0aW9uIHRpbWUgKi8KKyNkZWZpbmUJTlNfU0lHX1NJR05FRAkxMgkvKiBTaWduYXR1cmUgdGltZSAqLworI2RlZmluZQlOU19TSUdfRk9PVAkxNgkvKiBLZXkgZm9vdHByaW50ICovCisjZGVmaW5lCU5TX1NJR19TSUdORVIJMTgJLyogRG9tYWluIG5hbWUgb2Ygd2hvIHNpZ25lZCBpdCAqLworCisvKiBIb3cgUlIgdHlwZXMgYXJlIHJlcHJlc2VudGVkIGFzIGJpdC1mbGFncyBpbiBOWFQgcmVjb3JkcyAqLworI2RlZmluZQlOU19OWFRfQklUUyA4CisjZGVmaW5lCU5TX05YVF9CSVRfU0VUKCAgbixwKSAocFsobikvTlNfTlhUX0JJVFNdIHw9ICAoMHg4MD4+KChuKSVOU19OWFRfQklUUykpKQorI2RlZmluZQlOU19OWFRfQklUX0NMRUFSKG4scCkgKHBbKG4pL05TX05YVF9CSVRTXSAmPSB+KDB4ODA+PigobiklTlNfTlhUX0JJVFMpKSkKKyNkZWZpbmUJTlNfTlhUX0JJVF9JU1NFVChuLHApIChwWyhuKS9OU19OWFRfQklUU10gJiAgICgweDgwPj4oKG4pJU5TX05YVF9CSVRTKSkpCisjZGVmaW5lIE5TX05YVF9NQVggMTI3CisKKy8qCisgKiBFRE5TMCBleHRlbmRlZCBmbGFncywgaG9zdCBvcmRlci4KKyAqLworI2RlZmluZSBOU19PUFRfRE5TU0VDX09LCTB4ODAwMFUKKworLyoKKyAqIElubGluZSB2ZXJzaW9ucyBvZiBnZXQvcHV0IHNob3J0L2xvbmcuICBQb2ludGVyIGlzIGFkdmFuY2VkLgorICovCisjZGVmaW5lIE5TX0dFVDE2KHMsIGNwKSBkbyB7IFwKKwljb25zdCB1X2NoYXIgKnRfY3AgPSAoY29uc3QgdV9jaGFyICopKGNwKTsgXAorCShzKSA9ICgodWludDE2X3QpdF9jcFswXSA8PCA4KSBcCisJICAgIHwgKCh1aW50MTZfdCl0X2NwWzFdKSBcCisJICAgIDsgXAorCShjcCkgKz0gTlNfSU5UMTZTWjsgXAorfSB3aGlsZSAoLypDT05TVENPTkQqLzApCisKKyNkZWZpbmUgTlNfR0VUMzIobCwgY3ApIGRvIHsgXAorCWNvbnN0IHVfY2hhciAqdF9jcCA9IChjb25zdCB1X2NoYXIgKikoY3ApOyBcCisJKGwpID0gKCh1aW50MzJfdCl0X2NwWzBdIDw8IDI0KSBcCisJICAgIHwgKCh1aW50MzJfdCl0X2NwWzFdIDw8IDE2KSBcCisJICAgIHwgKCh1aW50MzJfdCl0X2NwWzJdIDw8IDgpIFwKKwkgICAgfCAoKHVpbnQzMl90KXRfY3BbM10pIFwKKwkgICAgOyBcCisJKGNwKSArPSBOU19JTlQzMlNaOyBcCit9IHdoaWxlICgvKkNPTlNUQ09ORCovMCkKKworI2RlZmluZSBOU19QVVQxNihzLCBjcCkgZG8geyBcCisJdWludDMyX3QgdF9zID0gKHVpbnQzMl90KShzKTsgXAorCXVfY2hhciAqdF9jcCA9ICh1X2NoYXIgKikoY3ApOyBcCisJKnRfY3ArKyA9IHRfcyA+PiA4OyBcCisJKnRfY3AgICA9IHRfczsgXAorCShjcCkgKz0gTlNfSU5UMTZTWjsgXAorfSB3aGlsZSAoLypDT05TVENPTkQqLzApCisKKyNkZWZpbmUgTlNfUFVUMzIobCwgY3ApIGRvIHsgXAorCXVpbnQzMl90IHRfbCA9ICh1aW50MzJfdCkobCk7IFwKKwl1X2NoYXIgKnRfY3AgPSAodV9jaGFyICopKGNwKTsgXAorCSp0X2NwKysgPSB0X2wgPj4gMjQ7IFwKKwkqdF9jcCsrID0gdF9sID4+IDE2OyBcCisJKnRfY3ArKyA9IHRfbCA+PiA4OyBcCisJKnRfY3AgICA9IHRfbDsgXAorCShjcCkgKz0gTlNfSU5UMzJTWjsgXAorfSB3aGlsZSAoLypDT05TVENPTkQqLzApCisKKy8qCisgKiBBTlNJIEMgaWRlbnRpZmllciBoaWRpbmcgZm9yIGJpbmQncyBsaWIvbmFtZXNlci4KKyAqLworI2RlZmluZQluc19tc2dfZ2V0ZmxhZwkJX19uc19tc2dfZ2V0ZmxhZworI2RlZmluZSBuc19nZXQxNgkJX19uc19nZXQxNgorI2RlZmluZSBuc19nZXQzMgkJX19uc19nZXQzMgorI2RlZmluZSBuc19wdXQxNgkJX19uc19wdXQxNgorI2RlZmluZSBuc19wdXQzMgkJX19uc19wdXQzMgorI2RlZmluZSBuc19pbml0cGFyc2UJCV9fbnNfaW5pdHBhcnNlCisjZGVmaW5lIG5zX3NraXBycgkJX19uc19za2lwcnIKKyNkZWZpbmUgbnNfcGFyc2VycgkJX19uc19wYXJzZXJyCisjZGVmaW5lCW5zX3NwcmludHJyCQlfX25zX3NwcmludHJyCisjZGVmaW5lCW5zX3NwcmludHJyZgkJX19uc19zcHJpbnRycmYKKyNkZWZpbmUJbnNfZm9ybWF0X3R0bAkJX19uc19mb3JtYXRfdHRsCisjZGVmaW5lCW5zX3BhcnNlX3R0bAkJX19uc19wYXJzZV90dGwKKyNkZWZpbmUgbnNfZGF0ZXRvc2VjcwkJX19uc19kYXRldG9zZWNzCisjZGVmaW5lCW5zX25hbWVfbnRvbAkJX19uc19uYW1lX250b2wKKyNkZWZpbmUJbnNfbmFtZV9udG9wCQlfX25zX25hbWVfbnRvcAorI2RlZmluZQluc19uYW1lX3B0b24JCV9fbnNfbmFtZV9wdG9uCisjZGVmaW5lCW5zX25hbWVfdW5wYWNrCQlfX25zX25hbWVfdW5wYWNrCisjZGVmaW5lCW5zX25hbWVfcGFjawkJX19uc19uYW1lX3BhY2sKKyNkZWZpbmUJbnNfbmFtZV9jb21wcmVzcwlfX25zX25hbWVfY29tcHJlc3MKKyNkZWZpbmUJbnNfbmFtZV91bmNvbXByZXNzCV9fbnNfbmFtZV91bmNvbXByZXNzCisjZGVmaW5lCW5zX25hbWVfc2tpcAkJX19uc19uYW1lX3NraXAKKyNkZWZpbmUJbnNfbmFtZV9yb2xsYmFjawlfX25zX25hbWVfcm9sbGJhY2sKKyNkZWZpbmUJbnNfc2lnbgkJCV9fbnNfc2lnbgorI2RlZmluZQluc19zaWduMgkJX19uc19zaWduMgorI2RlZmluZQluc19zaWduX3RjcAkJX19uc19zaWduX3RjcAorI2RlZmluZQluc19zaWduX3RjcDIJCV9fbnNfc2lnbl90Y3AyCisjZGVmaW5lCW5zX3NpZ25fdGNwX2luaXQJX19uc19zaWduX3RjcF9pbml0CisjZGVmaW5lIG5zX2ZpbmRfdHNpZwkJX19uc19maW5kX3RzaWcKKyNkZWZpbmUJbnNfdmVyaWZ5CQlfX25zX3ZlcmlmeQorI2RlZmluZQluc192ZXJpZnlfdGNwCQlfX25zX3ZlcmlmeV90Y3AKKyNkZWZpbmUJbnNfdmVyaWZ5X3RjcF9pbml0CV9fbnNfdmVyaWZ5X3RjcF9pbml0CisjZGVmaW5lCW5zX3NhbWVkb21haW4JCV9fbnNfc2FtZWRvbWFpbgorI2RlZmluZQluc19zdWJkb21haW4JCV9fbnNfc3ViZG9tYWluCisjZGVmaW5lCW5zX21ha2VjYW5vbgkJX19uc19tYWtlY2Fub24KKyNkZWZpbmUJbnNfc2FtZW5hbWUJCV9fbnNfc2FtZW5hbWUKKworX19CRUdJTl9ERUNMUworaW50CQluc19tc2dfZ2V0ZmxhZyhuc19tc2csIGludCk7Cit1aW50MTZfdAluc19nZXQxNihjb25zdCB1X2NoYXIgKik7Cit1aW50MzJfdAluc19nZXQzMihjb25zdCB1X2NoYXIgKik7Cit2b2lkCQluc19wdXQxNih1aW50MTZfdCwgdV9jaGFyICopOwordm9pZAkJbnNfcHV0MzIodWludDMyX3QsIHVfY2hhciAqKTsKK2ludAkJbnNfaW5pdHBhcnNlKGNvbnN0IHVfY2hhciAqLCBpbnQsIG5zX21zZyAqKTsKK2ludAkJbnNfc2tpcHJyKGNvbnN0IHVfY2hhciAqLCBjb25zdCB1X2NoYXIgKiwgbnNfc2VjdCwgaW50KTsKK2ludAkJbnNfcGFyc2Vycihuc19tc2cgKiwgbnNfc2VjdCwgaW50LCBuc19yciAqKTsKK2ludAkJbnNfc3ByaW50cnIoY29uc3QgbnNfbXNnICosIGNvbnN0IG5zX3JyICosCisJCQkJIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjaGFyICosIHNpemVfdCk7CitpbnQJCW5zX3NwcmludHJyZihjb25zdCB1X2NoYXIgKiwgc2l6ZV90LCBjb25zdCBjaGFyICosCisJCQkJICBuc19jbGFzcywgbnNfdHlwZSwgdV9sb25nLCBjb25zdCB1X2NoYXIgKiwKKwkJCQkgIHNpemVfdCwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosCisJCQkJICBjaGFyICosIHNpemVfdCk7CitpbnQJCW5zX2Zvcm1hdF90dGwodV9sb25nLCBjaGFyICosIHNpemVfdCk7CitpbnQJCW5zX3BhcnNlX3R0bChjb25zdCBjaGFyICosIHVfbG9uZyAqKTsKK3VpbnQzMl90CW5zX2RhdGV0b3NlY3MoY29uc3QgY2hhciAqY3AsIGludCAqZXJycCk7CitpbnQJCW5zX25hbWVfbnRvbChjb25zdCB1X2NoYXIgKiwgdV9jaGFyICosIHNpemVfdCk7CitpbnQJCW5zX25hbWVfbnRvcChjb25zdCB1X2NoYXIgKiwgY2hhciAqLCBzaXplX3QpOworaW50CQluc19uYW1lX3B0b24oY29uc3QgY2hhciAqLCB1X2NoYXIgKiwgc2l6ZV90KTsKK2ludAkJbnNfbmFtZV91bnBhY2soY29uc3QgdV9jaGFyICosIGNvbnN0IHVfY2hhciAqLAorCQkJCSAgICBjb25zdCB1X2NoYXIgKiwgdV9jaGFyICosIHNpemVfdCk7CitpbnQJCW5zX25hbWVfcGFjayhjb25zdCB1X2NoYXIgKiwgdV9jaGFyICosIGludCwKKwkJCQkgIGNvbnN0IHVfY2hhciAqKiwgY29uc3QgdV9jaGFyICoqKTsKK2ludAkJbnNfbmFtZV91bmNvbXByZXNzKGNvbnN0IHVfY2hhciAqLCBjb25zdCB1X2NoYXIgKiwKKwkJCQkJY29uc3QgdV9jaGFyICosIGNoYXIgKiwgc2l6ZV90KTsKK2ludAkJbnNfbmFtZV9jb21wcmVzcyhjb25zdCBjaGFyICosIHVfY2hhciAqLCBzaXplX3QsCisJCQkJICAgICAgY29uc3QgdV9jaGFyICoqLCBjb25zdCB1X2NoYXIgKiopOworaW50CQluc19uYW1lX3NraXAoY29uc3QgdV9jaGFyICoqLCBjb25zdCB1X2NoYXIgKik7Cit2b2lkCQluc19uYW1lX3JvbGxiYWNrKGNvbnN0IHVfY2hhciAqLCBjb25zdCB1X2NoYXIgKiosCisJCQkJICAgICAgY29uc3QgdV9jaGFyICoqKTsKK2ludAkJbnNfc2lnbih1X2NoYXIgKiwgaW50ICosIGludCwgaW50LCB2b2lkICosCisJCQkgICAgIGNvbnN0IHVfY2hhciAqLCBpbnQsIHVfY2hhciAqLCBpbnQgKiwgdGltZV90KTsKK2ludAkJbnNfc2lnbjIodV9jaGFyICosIGludCAqLCBpbnQsIGludCwgdm9pZCAqLAorCQkJICAgICAgY29uc3QgdV9jaGFyICosIGludCwgdV9jaGFyICosIGludCAqLCB0aW1lX3QsCisJCQkgICAgICB1X2NoYXIgKiosIHVfY2hhciAqKik7CitpbnQJCW5zX3NpZ25fdGNwKHVfY2hhciAqLCBpbnQgKiwgaW50LCBpbnQsCisJCQkJIG5zX3RjcF90c2lnX3N0YXRlICosIGludCk7CitpbnQJCW5zX3NpZ25fdGNwMih1X2NoYXIgKiwgaW50ICosIGludCwgaW50LAorCQkJCSAgbnNfdGNwX3RzaWdfc3RhdGUgKiwgaW50LAorCQkJCSAgdV9jaGFyICoqLCB1X2NoYXIgKiopOworaW50CQluc19zaWduX3RjcF9pbml0KHZvaWQgKiwgY29uc3QgdV9jaGFyICosIGludCwKKwkJCQkJbnNfdGNwX3RzaWdfc3RhdGUgKik7Cit1X2NoYXIJCSpuc19maW5kX3RzaWcodV9jaGFyICosIHVfY2hhciAqKTsKK2ludAkJbnNfdmVyaWZ5KHVfY2hhciAqLCBpbnQgKiwgdm9pZCAqLAorCQkJICAgICAgIGNvbnN0IHVfY2hhciAqLCBpbnQsIHVfY2hhciAqLCBpbnQgKiwKKwkJCSAgICAgICB0aW1lX3QgKiwgaW50KTsKK2ludAkJbnNfdmVyaWZ5X3RjcCh1X2NoYXIgKiwgaW50ICosIG5zX3RjcF90c2lnX3N0YXRlICosIGludCk7CitpbnQJCW5zX3ZlcmlmeV90Y3BfaW5pdCh2b2lkICosIGNvbnN0IHVfY2hhciAqLCBpbnQsCisJCQkJCW5zX3RjcF90c2lnX3N0YXRlICopOworaW50CQluc19zYW1lZG9tYWluKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKK2ludAkJbnNfc3ViZG9tYWluKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKK2ludAkJbnNfbWFrZWNhbm9uKGNvbnN0IGNoYXIgKiwgY2hhciAqLCBzaXplX3QpOworaW50CQluc19zYW1lbmFtZShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CitfX0VORF9ERUNMUworCisjaWZkZWYgQklORF80X0NPTVBBVAorI2luY2x1ZGUgImFycGFfbmFtZXNlcl9jb21wYXQuaCIKKyNlbmRpZgorCisjZW5kaWYgLyogIV9BUlBBX05BTUVTRVJfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvcHJpdmF0ZS9hcnBhX25hbWVzZXJfY29tcGF0LmggYi9saWJjL3ByaXZhdGUvYXJwYV9uYW1lc2VyX2NvbXBhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5YmRmZDAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3ByaXZhdGUvYXJwYV9uYW1lc2VyX2NvbXBhdC5oCkBAIC0wLDAgKzEsMjM2IEBACisvKgkkTmV0QlNEOiBuYW1lc2VyX2NvbXBhdC5oLHYgMS4xLjEuMiAyMDA0LzExLzA3IDAxOjI4OjI3IGNocmlzdG9zIEV4cCAkCSovCisKKy8qIENvcHlyaWdodCAoYykgMTk4MywgMTk4OQorICogICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqIAlUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCisgKiAJQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5kIGl0cyBjb250cmlidXRvcnMuCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgKiAgICAgIGZyb20gbmFtZXNlci5oCTguMSAoQmVya2VsZXkpIDYvMi85MworICoJSWQ6IG5hbWVzZXJfY29tcGF0LmgsdiAxLjEuMi4zLjQuMiAyMDA0LzA3LzAxIDA0OjQzOjQxIG1hcmthIEV4cAorICovCisKKyNpZm5kZWYgX0FSUEFfTkFNRVNFUl9DT01QQVRfCisjZGVmaW5lCV9BUlBBX05BTUVTRVJfQ09NUEFUXworCisjZGVmaW5lCV9fQklORAkJMTk5NTA2MjEJLyogKERFQUQpIGludGVyZmFjZSB2ZXJzaW9uIHN0YW1wLiAqLworCisjaW5jbHVkZSA8ZW5kaWFuLmg+CisKKyNpZm5kZWYgQllURV9PUkRFUgorI2lmIChCU0QgPj0gMTk5MTAzKQorIyBpbmNsdWRlIDxtYWNoaW5lL2VuZGlhbi5oPgorI2Vsc2UKKyNpZmRlZiBfX2xpbnV4CisjIGluY2x1ZGUgPGVuZGlhbi5oPgorI2Vsc2UKKyNkZWZpbmUJTElUVExFX0VORElBTgkxMjM0CS8qIGxlYXN0LXNpZ25pZmljYW50IGJ5dGUgZmlyc3QgKHZheCwgcGMpICovCisjZGVmaW5lCUJJR19FTkRJQU4JNDMyMQkvKiBtb3N0LXNpZ25pZmljYW50IGJ5dGUgZmlyc3QgKElCTSwgbmV0KSAqLworI2RlZmluZQlQRFBfRU5ESUFOCTM0MTIJLyogTFNCIGZpcnN0IGluIHdvcmQsIE1TVyBmaXJzdCBpbiBsb25nIChwZHApKi8KKworI2lmIGRlZmluZWQodmF4KSB8fCBkZWZpbmVkKG5zMzIwMDApIHx8IGRlZmluZWQoc3VuMzg2KSB8fCBkZWZpbmVkKGkzODYpIHx8IFwKKyAgICBkZWZpbmVkKE1JUFNFTCkgfHwgZGVmaW5lZChfTUlQU0VMKSB8fCBkZWZpbmVkKEJJVF9aRVJPX09OX1JJR0hUKSB8fCBcCisgICAgZGVmaW5lZChfX2FscGhhX18pIHx8IGRlZmluZWQoX19hbHBoYSkgfHwgXAorICAgIChkZWZpbmVkKF9fTHlueF9fKSAmJiBkZWZpbmVkKF9feDg2X18pKQorI2RlZmluZSBCWVRFX09SREVSCUxJVFRMRV9FTkRJQU4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChzZWwpIHx8IGRlZmluZWQocHlyKSB8fCBkZWZpbmVkKG1jNjgwMDApIHx8IGRlZmluZWQoc3BhcmMpIHx8IFwKKyAgICBkZWZpbmVkKGlzNjhrKSB8fCBkZWZpbmVkKHRhaG9lKSB8fCBkZWZpbmVkKGlibTAzMikgfHwgZGVmaW5lZChpYm0zNzApIHx8IFwKKyAgICBkZWZpbmVkKE1JUFNFQikgfHwgZGVmaW5lZChfTUlQU0VCKSB8fCBkZWZpbmVkKF9JQk1SMikgfHwgZGVmaW5lZChER1VYKSB8fFwKKyAgICBkZWZpbmVkKGFwb2xsbykgfHwgZGVmaW5lZChfX2NvbnZleF9fKSB8fCBkZWZpbmVkKF9DUkFZKSB8fCBcCisgICAgZGVmaW5lZChfX2hwcGEpIHx8IGRlZmluZWQoX19ocDkwMDApIHx8IFwKKyAgICBkZWZpbmVkKF9faHA5MDAwczMwMCkgfHwgZGVmaW5lZChfX2hwOTAwMHM3MDApIHx8IFwKKyAgICBkZWZpbmVkKF9faHAzMDAwczkwMCkgfHwgZGVmaW5lZChfX2hwdXgpIHx8IGRlZmluZWQoTVBFKSB8fCBcCisgICAgZGVmaW5lZCAoQklUX1pFUk9fT05fTEVGVCkgfHwgZGVmaW5lZChtNjhrKSB8fCBkZWZpbmVkKF9fc3BhcmMpIHx8ICBcCisgICAgKGRlZmluZWQoX19MeW54X18pICYmIFwKKyAgICAgKGRlZmluZWQoX182OGtfXykgfHwgZGVmaW5lZChfX3NwYXJjX18pIHx8IGRlZmluZWQoX19wb3dlcnBjX18pKSkKKyNkZWZpbmUgQllURV9PUkRFUglCSUdfRU5ESUFOCisjZW5kaWYKKyNlbmRpZiAvKiBfX2xpbnV4ICovCisjZW5kaWYgLyogQlNEICovCisjZW5kaWYgLyogQllURV9PUkRFUiAqLworCisjaWYgIWRlZmluZWQoQllURV9PUkRFUikgfHwgXAorICAgIChCWVRFX09SREVSICE9IEJJR19FTkRJQU4gJiYgQllURV9PUkRFUiAhPSBMSVRUTEVfRU5ESUFOICYmIFwKKyAgICBCWVRFX09SREVSICE9IFBEUF9FTkRJQU4pCisJLyogeW91IG11c3QgZGV0ZXJtaW5lIHdoYXQgdGhlIGNvcnJlY3QgYml0IG9yZGVyIGlzIGZvcgorCSAqIHlvdXIgY29tcGlsZXIgLSB0aGUgbmV4dCBsaW5lIGlzIGFuIGludGVudGlvbmFsIGVycm9yCisJICogd2hpY2ggd2lsbCBmb3JjZSB5b3VyIGNvbXBpbGVzIHRvIGJvbWIgdW50aWwgeW91IGZpeAorCSAqIHRoZSBhYm92ZSBtYWNyb3MuCisJICovCisgICNlcnJvciAiVW5kZWZpbmVkIG9yIGludmFsaWQgQllURV9PUkRFUiI7CisjZW5kaWYKKworLyoKKyAqIFN0cnVjdHVyZSBmb3IgcXVlcnkgaGVhZGVyLiAgVGhlIG9yZGVyIG9mIHRoZSBmaWVsZHMgaXMgbWFjaGluZS0gYW5kCisgKiBjb21waWxlci1kZXBlbmRlbnQsIGRlcGVuZGluZyBvbiB0aGUgYnl0ZS9iaXQgb3JkZXIgYW5kIHRoZSBsYXlvdXQKKyAqIG9mIGJpdCBmaWVsZHMuICBXZSB1c2UgYml0IGZpZWxkcyBvbmx5IGluIGludCB2YXJpYWJsZXMsIGFzIHRoaXMKKyAqIGlzIGFsbCBBTlNJIHJlcXVpcmVzLiAgVGhpcyByZXF1aXJlcyBhIHNvbWV3aGF0IGNvbmZ1c2luZyByZWFycmFuZ2VtZW50LgorICovCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZAlpZCA6MTY7CQkvKiBxdWVyeSBpZGVudGlmaWNhdGlvbiBudW1iZXIgKi8KKyNpZiBCWVRFX09SREVSID09IEJJR19FTkRJQU4KKwkJCS8qIGZpZWxkcyBpbiB0aGlyZCBieXRlICovCisJdW5zaWduZWQJcXI6IDE7CQkvKiByZXNwb25zZSBmbGFnICovCisJdW5zaWduZWQJb3Bjb2RlOiA0OwkvKiBwdXJwb3NlIG9mIG1lc3NhZ2UgKi8KKwl1bnNpZ25lZAlhYTogMTsJCS8qIGF1dGhvcml0aXZlIGFuc3dlciAqLworCXVuc2lnbmVkCXRjOiAxOwkJLyogdHJ1bmNhdGVkIG1lc3NhZ2UgKi8KKwl1bnNpZ25lZAlyZDogMTsJCS8qIHJlY3Vyc2lvbiBkZXNpcmVkICovCisJCQkvKiBmaWVsZHMgaW4gZm91cnRoIGJ5dGUgKi8KKwl1bnNpZ25lZAlyYTogMTsJCS8qIHJlY3Vyc2lvbiBhdmFpbGFibGUgKi8KKwl1bnNpZ25lZAl1bnVzZWQgOjE7CS8qIHVudXNlZCBiaXRzIChNQlogYXMgb2YgNC45LjNhMykgKi8KKwl1bnNpZ25lZAlhZDogMTsJCS8qIGF1dGhlbnRpYyBkYXRhIGZyb20gbmFtZWQgKi8KKwl1bnNpZ25lZAljZDogMTsJCS8qIGNoZWNraW5nIGRpc2FibGVkIGJ5IHJlc29sdmVyICovCisJdW5zaWduZWQJcmNvZGUgOjQ7CS8qIHJlc3BvbnNlIGNvZGUgKi8KKyNlbmRpZgorI2lmIEJZVEVfT1JERVIgPT0gTElUVExFX0VORElBTiB8fCBCWVRFX09SREVSID09IFBEUF9FTkRJQU4KKwkJCS8qIGZpZWxkcyBpbiB0aGlyZCBieXRlICovCisJdW5zaWduZWQJcmQgOjE7CQkvKiByZWN1cnNpb24gZGVzaXJlZCAqLworCXVuc2lnbmVkCXRjIDoxOwkJLyogdHJ1bmNhdGVkIG1lc3NhZ2UgKi8KKwl1bnNpZ25lZAlhYSA6MTsJCS8qIGF1dGhvcml0aXZlIGFuc3dlciAqLworCXVuc2lnbmVkCW9wY29kZSA6NDsJLyogcHVycG9zZSBvZiBtZXNzYWdlICovCisJdW5zaWduZWQJcXIgOjE7CQkvKiByZXNwb25zZSBmbGFnICovCisJCQkvKiBmaWVsZHMgaW4gZm91cnRoIGJ5dGUgKi8KKwl1bnNpZ25lZAlyY29kZSA6NDsJLyogcmVzcG9uc2UgY29kZSAqLworCXVuc2lnbmVkCWNkOiAxOwkJLyogY2hlY2tpbmcgZGlzYWJsZWQgYnkgcmVzb2x2ZXIgKi8KKwl1bnNpZ25lZAlhZDogMTsJCS8qIGF1dGhlbnRpYyBkYXRhIGZyb20gbmFtZWQgKi8KKwl1bnNpZ25lZAl1bnVzZWQgOjE7CS8qIHVudXNlZCBiaXRzIChNQlogYXMgb2YgNC45LjNhMykgKi8KKwl1bnNpZ25lZAlyYSA6MTsJCS8qIHJlY3Vyc2lvbiBhdmFpbGFibGUgKi8KKyNlbmRpZgorCQkJLyogcmVtYWluaW5nIGJ5dGVzICovCisJdW5zaWduZWQJcWRjb3VudCA6MTY7CS8qIG51bWJlciBvZiBxdWVzdGlvbiBlbnRyaWVzICovCisJdW5zaWduZWQJYW5jb3VudCA6MTY7CS8qIG51bWJlciBvZiBhbnN3ZXIgZW50cmllcyAqLworCXVuc2lnbmVkCW5zY291bnQgOjE2OwkvKiBudW1iZXIgb2YgYXV0aG9yaXR5IGVudHJpZXMgKi8KKwl1bnNpZ25lZAlhcmNvdW50IDoxNjsJLyogbnVtYmVyIG9mIHJlc291cmNlIGVudHJpZXMgKi8KK30gSEVBREVSOworCisjZGVmaW5lIFBBQ0tFVFNaCU5TX1BBQ0tFVFNaCisjZGVmaW5lIE1BWEROQU1FCU5TX01BWEROQU1FCisjZGVmaW5lIE1BWENETkFNRQlOU19NQVhDRE5BTUUKKyNkZWZpbmUgTUFYTEFCRUwJTlNfTUFYTEFCRUwKKyNkZWZpbmUJSEZJWEVEU1oJTlNfSEZJWEVEU1oKKyNkZWZpbmUgUUZJWEVEU1oJTlNfUUZJWEVEU1oKKyNkZWZpbmUgUlJGSVhFRFNaCU5TX1JSRklYRURTWgorI2RlZmluZQlJTlQzMlNaCQlOU19JTlQzMlNaCisjZGVmaW5lCUlOVDE2U1oJCU5TX0lOVDE2U1oKKyNkZWZpbmUJSU5UOFNaCQlOU19JTlQ4U1oKKyNkZWZpbmUJSU5BRERSU1oJTlNfSU5BRERSU1oKKyNkZWZpbmUJSU42QUREUlNaCU5TX0lONkFERFJTWgorI2RlZmluZQlJTkRJUl9NQVNLCU5TX0NNUFJTRkxHUworI2RlZmluZSBOQU1FU0VSVkVSX1BPUlQJTlNfREVGQVVMVFBPUlQKKworI2RlZmluZSBTX1pPTkUJCW5zX3Nfem4KKyNkZWZpbmUgU19QUkVSRVEJbnNfc19wcgorI2RlZmluZSBTX1VQREFURQluc19zX3VkCisjZGVmaW5lIFNfQUREVAkJbnNfc19hcgorCisjZGVmaW5lIFFVRVJZCQluc19vX3F1ZXJ5CisjZGVmaW5lIElRVUVSWQkJbnNfb19pcXVlcnkKKyNkZWZpbmUgU1RBVFVTCQluc19vX3N0YXR1cworI2RlZmluZQlOU19OT1RJRllfT1AJbnNfb19ub3RpZnkKKyNkZWZpbmUJTlNfVVBEQVRFX09QCW5zX29fdXBkYXRlCisKKyNkZWZpbmUgTk9FUlJPUgkJbnNfcl9ub2Vycm9yCisjZGVmaW5lIEZPUk1FUlIJCW5zX3JfZm9ybWVycgorI2RlZmluZSBTRVJWRkFJTAluc19yX3NlcnZmYWlsCisjZGVmaW5lIE5YRE9NQUlOCW5zX3Jfbnhkb21haW4KKyNkZWZpbmUgTk9USU1QCQluc19yX25vdGltcGwKKyNkZWZpbmUgUkVGVVNFRAkJbnNfcl9yZWZ1c2VkCisjZGVmaW5lIFlYRE9NQUlOCW5zX3JfeXhkb21haW4KKyNkZWZpbmUgWVhSUlNFVAkJbnNfcl95eHJyc2V0CisjZGVmaW5lIE5YUlJTRVQJCW5zX3JfbnhycnNldAorI2RlZmluZSBOT1RBVVRICQluc19yX25vdGF1dGgKKyNkZWZpbmUgTk9UWk9ORQkJbnNfcl9ub3R6b25lCisvKiNkZWZpbmUgQkFEU0lHCQluc19yX2JhZHNpZyovCisvKiNkZWZpbmUgQkFES0VZCQluc19yX2JhZGtleSovCisvKiNkZWZpbmUgQkFEVElNRQkJbnNfcl9iYWR0aW1lKi8KKworCisjZGVmaW5lIERFTEVURQkJbnNfdW9wX2RlbGV0ZQorI2RlZmluZSBBREQJCW5zX3VvcF9hZGQKKworI2RlZmluZSBUX0EJCW5zX3RfYQorI2RlZmluZSBUX05TCQluc190X25zCisjZGVmaW5lIFRfTUQJCW5zX3RfbWQKKyNkZWZpbmUgVF9NRgkJbnNfdF9tZgorI2RlZmluZSBUX0NOQU1FCQluc190X2NuYW1lCisjZGVmaW5lIFRfU09BCQluc190X3NvYQorI2RlZmluZSBUX01CCQluc190X21iCisjZGVmaW5lIFRfTUcJCW5zX3RfbWcKKyNkZWZpbmUgVF9NUgkJbnNfdF9tcgorI2RlZmluZSBUX05VTEwJCW5zX3RfbnVsbAorI2RlZmluZSBUX1dLUwkJbnNfdF93a3MKKyNkZWZpbmUgVF9QVFIJCW5zX3RfcHRyCisjZGVmaW5lIFRfSElORk8JCW5zX3RfaGluZm8KKyNkZWZpbmUgVF9NSU5GTwkJbnNfdF9taW5mbworI2RlZmluZSBUX01YCQluc190X214CisjZGVmaW5lIFRfVFhUCQluc190X3R4dAorI2RlZmluZQlUX1JQCQluc190X3JwCisjZGVmaW5lIFRfQUZTREIJCW5zX3RfYWZzZGIKKyNkZWZpbmUgVF9YMjUJCW5zX3RfeDI1CisjZGVmaW5lIFRfSVNETgkJbnNfdF9pc2RuCisjZGVmaW5lIFRfUlQJCW5zX3RfcnQKKyNkZWZpbmUgVF9OU0FQCQluc190X25zYXAKKyNkZWZpbmUgVF9OU0FQX1BUUgluc190X25zYXBfcHRyCisjZGVmaW5lCVRfU0lHCQluc190X3NpZworI2RlZmluZQlUX0tFWQkJbnNfdF9rZXkKKyNkZWZpbmUJVF9QWAkJbnNfdF9weAorI2RlZmluZQlUX0dQT1MJCW5zX3RfZ3BvcworI2RlZmluZQlUX0FBQUEJCW5zX3RfYWFhYQorI2RlZmluZQlUX0xPQwkJbnNfdF9sb2MKKyNkZWZpbmUJVF9OWFQJCW5zX3Rfbnh0CisjZGVmaW5lCVRfRUlECQluc190X2VpZAorI2RlZmluZQlUX05JTUxPQwluc190X25pbWxvYworI2RlZmluZQlUX1NSVgkJbnNfdF9zcnYKKyNkZWZpbmUgVF9BVE1BCQluc190X2F0bWEKKyNkZWZpbmUgVF9OQVBUUgkJbnNfdF9uYXB0cgorI2RlZmluZSBUX0E2CQluc190X2E2CisjZGVmaW5lCVRfVFNJRwkJbnNfdF90c2lnCisjZGVmaW5lCVRfSVhGUgkJbnNfdF9peGZyCisjZGVmaW5lIFRfQVhGUgkJbnNfdF9heGZyCisjZGVmaW5lIFRfTUFJTEIJCW5zX3RfbWFpbGIKKyNkZWZpbmUgVF9NQUlMQQkJbnNfdF9tYWlsYQorI2RlZmluZSBUX0FOWQkJbnNfdF9hbnkKKworI2RlZmluZSBDX0lOCQluc19jX2luCisjZGVmaW5lIENfQ0hBT1MJCW5zX2NfY2hhb3MKKyNkZWZpbmUgQ19IUwkJbnNfY19ocworLyogQklORF9VUERBVEUgKi8KKyNkZWZpbmUgQ19OT05FCQluc19jX25vbmUKKyNkZWZpbmUgQ19BTlkJCW5zX2NfYW55CisKKyNkZWZpbmUJR0VUU0hPUlQJCU5TX0dFVDE2CisjZGVmaW5lCUdFVExPTkcJCQlOU19HRVQzMgorI2RlZmluZQlQVVRTSE9SVAkJTlNfUFVUMTYKKyNkZWZpbmUJUFVUTE9ORwkJCU5TX1BVVDMyCisKKyNlbmRpZiAvKiBfQVJQQV9OQU1FU0VSX0NPTVBBVF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvcHJpdmF0ZS9iaW9uaWNfdGxzLmggYi9saWJjL3ByaXZhdGUvYmlvbmljX3Rscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhMzQzNDQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3ByaXZhdGUvYmlvbmljX3Rscy5oCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX1NZU19UTFNfSAorI2RlZmluZSBfU1lTX1RMU19ICisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKworX19CRUdJTl9ERUNMUworCisvKiogV0FSTklORyBXQVJOSU5HIFdBUk5JTkcKKyAqKgorICoqIFRoaXMgaGVhZGVyIGZpbGUgaXMgKk5PVCogcGFydCBvZiB0aGUgcHVibGljIEJpb25pYyBBQkkvQVBJCisgKiogYW5kIHNob3VsZCBub3QgYmUgdXNlZC9pbmNsdWRlZCBieSB1c2VyLXNlcnZpY2VhYmxlIHBhcnRzIG9mCisgKiogdGhlIHN5c3RlbSAoZS5nLiBhcHBsaWNhdGlvbnMpLgorICoqCisgKiogSXQgaXMgb25seSBwcm92aWRlZCBoZXJlIGZvciB0aGUgYmVuZWZpdCBvZiB0aGUgc3lzdGVtIGR5bmFtaWMKKyAqKiBsaW5rZXIgYW5kIHRoZSBPcGVuR0wgc3ViLXN5c3RlbSAod2hpY2ggbmVlZHMgdG8gYWNjZXNzIHRoZQorICoqIHByZS1hbGxvY2F0ZWQgc2xvdCBkaXJlY3RseSBmb3IgcGVyZm9ybWFuY2UgcmVhc29uKS4KKyAqKi8KKworLyogbWF4aW11bSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIFRMUyBhcnJheSAqLworI2RlZmluZSBCSU9OSUNfVExTX1NMT1RTICAgICAgICAgICAgNjQKKworLyogbm90ZSB0aGF0IHNsb3QgMCwgY2FsbGVkIFRMU19TTE9UX1NFTEYgbXVzdCBwb2ludCB0byBpdHNlbGYuCisgKiB0aGlzIGlzIHJlcXVpcmVkIHRvIGltcGxlbWVudCB0aHJlYWQtbG9jYWwgc3RvcmFnZSB3aXRoIHRoZSB4ODYKKyAqIExpbnV4IGtlcm5lbCwgdGhhdCByZWFkcyB0aGUgVExTIGZyb20gZnM6WzBdLCB3aGVyZSAnZnMnIGlzIGEKKyAqIHRocmVhZC1zcGVjaWZpYyBzZWdtZW50IGRlc2NyaXB0b3IuLi4KKyAqLworCisvKiBXZWxsIGtub3duIFRMUyBzbG90cyAqLworI2RlZmluZSBUTFNfU0xPVF9TRUxGICAgICAgICAgICAgICAgMAorI2RlZmluZSBUTFNfU0xPVF9USFJFQURfSUQgICAgICAgICAgMQorI2RlZmluZSBUTFNfU0xPVF9FUlJOTyAgICAgICAgICAgICAgMgorCisjZGVmaW5lIFRMU19TTE9UX09QRU5HTF9BUEkgICAgICAgICAzCisjZGVmaW5lIFRMU19TTE9UX09QRU5HTCAgICAgICAgICAgICA0CisKKy8qIHNtYWxsIHRlY2huaWNhbCBub3RlOiBpdCBpcyBub3QgcG9zc2libGUgdG8gY2FsbCBwdGhyZWFkX3NldHNwZWNpZmljCisgKiBvbiBrZXlzIHRoYXQgYXJlIDw9IFRMU19TTE9UX01BWF9XRUxMX0tOT1dOLCB3aGljaCBpcyB3aHkgaXQgaXMgc2V0IHRvCisgKiBUTFNfU0xPVF9FUlJOTy4KKyAqCisgKiBsYXRlciBzbG90cyBsaWtlIFRMU19TTE9UX09QRU5HTCBhcmUgcHJlLWFsbG9jYXRlZCB0aHJvdWdoIHRoZSB1c2Ugb2YKKyAqIFRMU19ERUZBVUxUX0FMTE9DX01BUC4gdGhpcyBtZWFucyB0aGF0IHRoZXJlIGlzIG5vIG5lZWQgdG8gdXNlCisgKiBwdGhyZWFkX2tleV9jcmVhdGUoKSB0byBpbml0aWFsaXplIHRoZW0uIG9uIHRoZSBvdGhlciBoYW5kLCB0aGVyZSBpcworICogbm8gZGVzdHJ1Y3RvciBhc3NvY2lhdGVkIHRvIHRoZW0gKHdlIG1pZ2h0IG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgbGF0ZXIpCisgKi8KKyNkZWZpbmUgVExTX1NMT1RfTUFYX1dFTExfS05PV04gICAgIFRMU19TTE9UX0VSUk5PCisKKyNkZWZpbmUgVExTX0RFRkFVTFRfQUxMT0NfTUFQICAgICAgIDB4MDAwMDAwMUYKKworLyogc2V0IHRoZSBUaHJlYWQgTG9jYWwgU3RvcmFnZSwgbXVzdCBjb250YWluIGF0IGxlYXN0IEJJT05JQ19UTFNfU0xPVFMgcG9pbnRlcnMgKi8KK2V4dGVybiB2b2lkIF9faW5pdF90bHModm9pZCoqICB0bHMsIHZvaWQqICB0aHJlYWRfaW5mbyk7CisKKy8qIHN5c2NhbGwgb25seSwgZG8gbm90IGNhbGwgZGlyZWN0bHkgKi8KK2V4dGVybiBpbnQgX19zZXRfdGxzKHZvaWQgKnB0cik7CisKKy8qIGdldCB0aGUgVExTICovCisjaWZkZWYgX19hcm1fXworIyAgZGVmaW5lIF9fZ2V0X3RscygpICggKigodm9sYXRpbGUgdm9pZCAqKikgMHhmZmZmMGZmMCkgKQorI2Vsc2UKK2V4dGVybiB2b2lkKiAgX19nZXRfdGxzKCB2b2lkICk7CisjZW5kaWYKKworLyogcmV0dXJuIHRoZSBzdGFjayBiYXNlIGFuZCBzaXplLCB1c2VkIGJ5IG91ciBtYWxsb2MgZGVidWdnZXIgKi8KK2V4dGVybiB2b2lkKiAgX19nZXRfc3RhY2tfYmFzZShpbnQgICpwX3N0YWNrX3NpemUpOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX1NZU19UTFNfSCAqLwpkaWZmIC0tZ2l0IGEvbGliYy9wcml2YXRlL2N0eXBlX3ByaXZhdGUuaCBiL2xpYmMvcHJpdmF0ZS9jdHlwZV9wcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzljYzc5MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvcHJpdmF0ZS9jdHlwZV9wcml2YXRlLmgKQEAgLTAsMCArMSw3IEBACisvKiAkT3BlbkJTRDogY3R5cGVfcHJpdmF0ZS5oLHYgMS4xIDIwMDUvMDgvMDggMDU6NTM6MDAgZXNwaWUgRXhwICQgKi8KKy8qIFdyaXR0ZW4gYnkgTWFyYyBFc3BpZSwgcHVibGljIGRvbWFpbiAqLworI2RlZmluZSBDVFlQRV9OVU1fQ0hBUlMgICAgICAgMjU2CitleHRlcm4gY29uc3QgY2hhciBfQ19jdHlwZV9bXTsKK2V4dGVybiBjb25zdCBzaG9ydCBfQ190b3VwcGVyX1tdOworZXh0ZXJuIGNvbnN0IHNob3J0IF9DX3RvbG93ZXJfW107CisKZGlmZiAtLWdpdCBhL2xpYmMvcHJpdmF0ZS9pc2MvYXNzZXJ0aW9ucy5oIGIvbGliYy9wcml2YXRlL2lzYy9hc3NlcnRpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTIxZDE4ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvcHJpdmF0ZS9pc2MvYXNzZXJ0aW9ucy5oCkBAIC0wLDAgKzEsMTI0IEBACisvKgkkTmV0QlNEOiBhc3NlcnRpb25zLmgsdiAxLjEuMS4xIDIwMDQvMDUvMjAgMTk6NDk6NDEgY2hyaXN0b3MgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNCBieSBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0sIEluYy4gKCJJU0MiKQorICogQ29weXJpZ2h0IChjKSAxOTk3LTE5OTkgYnkgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElTQyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIElTQyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCisgKiBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKy8qCisgKiBJZDogYXNzZXJ0aW9ucy5oLHYgMS4xLjIwNi4xIDIwMDQvMDMvMDkgMDg6MzM6MzAgbWFya2EgRXhwCisgKi8KKworI2lmbmRlZiBBU1NFUlRJT05TX0gKKyNkZWZpbmUgQVNTRVJUSU9OU19ICQkxCisKK3R5cGVkZWYgZW51bSB7CisJYXNzZXJ0X3JlcXVpcmUsIGFzc2VydF9lbnN1cmUsIGFzc2VydF9pbnNpc3QsIGFzc2VydF9pbnZhcmlhbnQKK30gYXNzZXJ0aW9uX3R5cGU7CisKK3R5cGVkZWYgdm9pZCAoKmFzc2VydGlvbl9mYWlsdXJlX2NhbGxiYWNrKShjb25zdCBjaGFyICosIGludCwgYXNzZXJ0aW9uX3R5cGUsCisJCQkJCSAgIGNvbnN0IGNoYXIgKiwgaW50KTsKKworZXh0ZXJuIGFzc2VydGlvbl9mYWlsdXJlX2NhbGxiYWNrIF9fYXNzZXJ0aW9uX2ZhaWxlZDsKK3ZvaWQgc2V0X2Fzc2VydGlvbl9mYWlsdXJlX2NhbGxiYWNrKGFzc2VydGlvbl9mYWlsdXJlX2NhbGxiYWNrIGYpOworY29uc3QgY2hhciAqYXNzZXJ0aW9uX3R5cGVfdG9fdGV4dChhc3NlcnRpb25fdHlwZSB0eXBlKTsKKworI2lmZGVmIENIRUNLX0FMTAorI2RlZmluZSBDSEVDS19SRVFVSVJFCQkxCisjZGVmaW5lIENIRUNLX0VOU1VSRQkJMQorI2RlZmluZSBDSEVDS19JTlNJU1QJCTEKKyNkZWZpbmUgQ0hFQ0tfSU5WQVJJQU5UCQkxCisjZW5kaWYKKworI2lmZGVmIENIRUNLX05PTkUKKyNkZWZpbmUgQ0hFQ0tfUkVRVUlSRQkJMAorI2RlZmluZSBDSEVDS19FTlNVUkUJCTAKKyNkZWZpbmUgQ0hFQ0tfSU5TSVNUCQkwCisjZGVmaW5lIENIRUNLX0lOVkFSSUFOVAkJMAorI2VuZGlmCisKKyNpZm5kZWYgQ0hFQ0tfUkVRVUlSRQorI2RlZmluZSBDSEVDS19SRVFVSVJFCQkxCisjZW5kaWYKKworI2lmbmRlZiBDSEVDS19FTlNVUkUKKyNkZWZpbmUgQ0hFQ0tfRU5TVVJFCQkxCisjZW5kaWYKKworI2lmbmRlZiBDSEVDS19JTlNJU1QKKyNkZWZpbmUgQ0hFQ0tfSU5TSVNUCQkxCisjZW5kaWYKKworI2lmbmRlZiBDSEVDS19JTlZBUklBTlQKKyNkZWZpbmUgQ0hFQ0tfSU5WQVJJQU5UCQkxCisjZW5kaWYKKworI2lmIENIRUNLX1JFUVVJUkUgIT0gMAorI2RlZmluZSBSRVFVSVJFKGNvbmQpIFwKKwkoKHZvaWQpICgoY29uZCkgfHwgXAorCQkgKChfX2Fzc2VydGlvbl9mYWlsZWQpKF9fRklMRV9fLCBfX0xJTkVfXywgYXNzZXJ0X3JlcXVpcmUsIFwKKwkJCQkgICAgICAgI2NvbmQsIDApLCAwKSkpCisjZGVmaW5lIFJFUVVJUkVfRVJSKGNvbmQpIFwKKwkoKHZvaWQpICgoY29uZCkgfHwgXAorCQkgKChfX2Fzc2VydGlvbl9mYWlsZWQpKF9fRklMRV9fLCBfX0xJTkVfXywgYXNzZXJ0X3JlcXVpcmUsIFwKKwkJCQkgICAgICAgI2NvbmQsIDEpLCAwKSkpCisjZWxzZQorI2RlZmluZSBSRVFVSVJFKGNvbmQpCQkoKHZvaWQpIChjb25kKSkKKyNkZWZpbmUgUkVRVUlSRV9FUlIoY29uZCkJKCh2b2lkKSAoY29uZCkpCisjZW5kaWYgLyogQ0hFQ0tfUkVRVUlSRSAqLworCisjaWYgQ0hFQ0tfRU5TVVJFICE9IDAKKyNkZWZpbmUgRU5TVVJFKGNvbmQpIFwKKwkoKHZvaWQpICgoY29uZCkgfHwgXAorCQkgKChfX2Fzc2VydGlvbl9mYWlsZWQpKF9fRklMRV9fLCBfX0xJTkVfXywgYXNzZXJ0X2Vuc3VyZSwgXAorCQkJCSAgICAgICAjY29uZCwgMCksIDApKSkKKyNkZWZpbmUgRU5TVVJFX0VSUihjb25kKSBcCisJKCh2b2lkKSAoKGNvbmQpIHx8IFwKKwkJICgoX19hc3NlcnRpb25fZmFpbGVkKShfX0ZJTEVfXywgX19MSU5FX18sIGFzc2VydF9lbnN1cmUsIFwKKwkJCQkgICAgICAgI2NvbmQsIDEpLCAwKSkpCisjZWxzZQorI2RlZmluZSBFTlNVUkUoY29uZCkJCSgodm9pZCkgKGNvbmQpKQorI2RlZmluZSBFTlNVUkVfRVJSKGNvbmQpCSgodm9pZCkgKGNvbmQpKQorI2VuZGlmIC8qIENIRUNLX0VOU1VSRSAqLworCisjaWYgQ0hFQ0tfSU5TSVNUICE9IDAKKyNkZWZpbmUgSU5TSVNUKGNvbmQpIFwKKwkoKHZvaWQpICgoY29uZCkgfHwgXAorCQkgKChfX2Fzc2VydGlvbl9mYWlsZWQpKF9fRklMRV9fLCBfX0xJTkVfXywgYXNzZXJ0X2luc2lzdCwgXAorCQkJCSAgICAgICAjY29uZCwgMCksIDApKSkKKyNkZWZpbmUgSU5TSVNUX0VSUihjb25kKSBcCisJKCh2b2lkKSAoKGNvbmQpIHx8IFwKKwkJICgoX19hc3NlcnRpb25fZmFpbGVkKShfX0ZJTEVfXywgX19MSU5FX18sIGFzc2VydF9pbnNpc3QsIFwKKwkJCQkgICAgICAgI2NvbmQsIDEpLCAwKSkpCisjZWxzZQorI2RlZmluZSBJTlNJU1QoY29uZCkJCSgodm9pZCkgKGNvbmQpKQorI2RlZmluZSBJTlNJU1RfRVJSKGNvbmQpCSgodm9pZCkgKGNvbmQpKQorI2VuZGlmIC8qIENIRUNLX0lOU0lTVCAqLworCisjaWYgQ0hFQ0tfSU5WQVJJQU5UICE9IDAKKyNkZWZpbmUgSU5WQVJJQU5UKGNvbmQpIFwKKwkoKHZvaWQpICgoY29uZCkgfHwgXAorCQkgKChfX2Fzc2VydGlvbl9mYWlsZWQpKF9fRklMRV9fLCBfX0xJTkVfXywgYXNzZXJ0X2ludmFyaWFudCwgXAorCQkJCSAgICAgICAjY29uZCwgMCksIDApKSkKKyNkZWZpbmUgSU5WQVJJQU5UX0VSUihjb25kKSBcCisJKCh2b2lkKSAoKGNvbmQpIHx8IFwKKwkJICgoX19hc3NlcnRpb25fZmFpbGVkKShfX0ZJTEVfXywgX19MSU5FX18sIGFzc2VydF9pbnZhcmlhbnQsIFwKKwkJCQkgICAgICAgI2NvbmQsIDEpLCAwKSkpCisjZWxzZQorI2RlZmluZSBJTlZBUklBTlQoY29uZCkJCSgodm9pZCkgKGNvbmQpKQorI2RlZmluZSBJTlZBUklBTlRfRVJSKGNvbmQpCSgodm9pZCkgKGNvbmQpKQorI2VuZGlmIC8qIENIRUNLX0lOVkFSSUFOVCAqLworCisjZW5kaWYgLyogQVNTRVJUSU9OU19IICovCmRpZmYgLS1naXQgYS9saWJjL3ByaXZhdGUvaXNjL2RzdC5oIGIvbGliYy9wcml2YXRlL2lzYy9kc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmIwNzEwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9wcml2YXRlL2lzYy9kc3QuaApAQCAtMCwwICsxLDE4MiBAQAorLyoJJE5ldEJTRDogZHN0LmgsdiAxLjEuMS4xIDIwMDQvMDUvMjAgMTk6NDk6NDEgY2hyaXN0b3MgRXhwICQJKi8KKworI2lmbmRlZiBEU1RfSAorI2RlZmluZSBEU1RfSAorCisjaWZuZGVmIEhBU19EU1RfS0VZCit0eXBlZGVmIHN0cnVjdCBkc3Rfa2V5IHsKKwljaGFyCSpka19rZXlfbmFtZTsgICAvKiBuYW1lIG9mIHRoZSBrZXkgKi8KKwlpbnQJZGtfa2V5X3NpemU7ICAgIC8qIHRoaXMgaXMgdGhlIHNpemUgb2YgdGhlIGtleSBpbiBiaXRzICovCisJaW50CWRrX3Byb3RvOyAgICAgICAvKiB3aGF0IHByb3RvY29scyB0aGlzIGtleSBjYW4gYmUgdXNlZCBmb3IgKi8KKwlpbnQJZGtfYWxnOyAgICAgICAgIC8qIGFsZ29yaXRobSBudW1iZXIgZnJvbSBrZXkgcmVjb3JkICovCisJdV9pbnQzMl90IGRrX2ZsYWdzOyAgICAgLyogYW5kIHRoZSBmbGFncyBvZiB0aGUgcHVibGljIGtleSAqLworCXVfaW50MTZfdCBka19pZDsgICAgICAgIC8qIGlkZW50aWZpZXIgb2YgdGhlIGtleSAqLworfSBEU1RfS0VZOworI2VuZGlmIC8qIEhBU19EU1RfS0VZICovCisKKy8qCisgKiBkbyBub3QgdGFpbnQgbmFtZXNwYWNlCisgKi8KKyNkZWZpbmUJZHN0X2JzYWZlX2luaXQJCV9fZHN0X2JzYWZlX2luaXQKKyNkZWZpbmUJZHN0X2J1ZmZlcl90b19rZXkJX19kc3RfYnVmZmVyX3RvX2tleQorI2RlZmluZQlkc3RfY2hlY2tfYWxnb3JpdGhtCV9fZHN0X2NoZWNrX2FsZ29yaXRobQorI2RlZmluZQlkc3RfY29tcGFyZV9rZXlzCV9fZHN0X2NvbXBhcmVfa2V5cworI2RlZmluZQlkc3RfY3lsaW5rX2luaXQJCV9fZHN0X2N5bGlua19pbml0CisjZGVmaW5lCWRzdF9kbnNrZXlfdG9fa2V5CV9fZHN0X2Ruc2tleV90b19rZXkKKyNkZWZpbmUJZHN0X2VheV9kc3NfaW5pdAlfX2RzdF9lYXlfZHNzX2luaXQKKyNkZWZpbmUJZHN0X2ZyZWVfa2V5CQlfX2RzdF9mcmVlX2tleQorI2RlZmluZQlkc3RfZ2VuZXJhdGVfa2V5CV9fZHN0X2dlbmVyYXRlX2tleQorI2RlZmluZQlkc3RfaG1hY19tZDVfaW5pdAlfX2RzdF9obWFjX21kNV9pbml0CisjZGVmaW5lCWRzdF9pbml0CQlfX2RzdF9pbml0CisjZGVmaW5lCWRzdF9rZXlfdG9fYnVmZmVyCV9fZHN0X2tleV90b19idWZmZXIKKyNkZWZpbmUJZHN0X2tleV90b19kbnNrZXkJX19kc3Rfa2V5X3RvX2Ruc2tleQorI2RlZmluZQlkc3RfcmVhZF9rZXkJCV9fZHN0X3JlYWRfa2V5CisjZGVmaW5lCWRzdF9yc2FyZWZfaW5pdAkJX19kc3RfcnNhcmVmX2luaXQKKyNkZWZpbmUJZHN0X3NfYnVpbGRfZmlsZW5hbWUJX19kc3Rfc19idWlsZF9maWxlbmFtZQorI2RlZmluZQlkc3Rfc19jYWxjdWxhdGVfYml0cwlfX2RzdF9zX2NhbGN1bGF0ZV9iaXRzCisjZGVmaW5lCWRzdF9zX2NvbnZfYmlnbnVtX2I2NF90b191OAlfX2RzdF9zX2NvbnZfYmlnbnVtX2I2NF90b191OAorI2RlZmluZQlkc3Rfc19jb252X2JpZ251bV91OF90b19iNjQJX19kc3Rfc19jb252X2JpZ251bV91OF90b19iNjQKKyNkZWZpbmUJZHN0X3NfZG5zX2tleV9pZAlfX2RzdF9zX2Ruc19rZXlfaWQKKyNkZWZpbmUJZHN0X3NfZHVtcAkJX19kc3Rfc19kdW1wCisjZGVmaW5lCWRzdF9zX2ZpbGVuYW1lX2xlbmd0aAlfX2RzdF9zX2ZpbGVuYW1lX2xlbmd0aAorI2RlZmluZQlkc3Rfc19mb3BlbgkJX19kc3Rfc19mb3BlbgorI2RlZmluZQlkc3Rfc19nZXRfaW50MTYJCV9fZHN0X3NfZ2V0X2ludDE2CisjZGVmaW5lCWRzdF9zX2dldF9pbnQzMgkJX19kc3Rfc19nZXRfaW50MzIKKyNkZWZpbmUJZHN0X3NfaWRfY2FsYwkJX19kc3Rfc19pZF9jYWxjCisjZGVmaW5lCWRzdF9zX3B1dF9pbnQxNgkJX19kc3Rfc19wdXRfaW50MTYKKyNkZWZpbmUJZHN0X3NfcHV0X2ludDMyCQlfX2RzdF9zX3B1dF9pbnQzMgorI2RlZmluZQlkc3Rfc19xdWlja19yYW5kb20JX19kc3Rfc19xdWlja19yYW5kb20KKyNkZWZpbmUJZHN0X3NfcXVpY2tfcmFuZG9tX3NldAlfX2RzdF9zX3F1aWNrX3JhbmRvbV9zZXQKKyNkZWZpbmUJZHN0X3NfcmFuZG9tCQlfX2RzdF9zX3JhbmRvbQorI2RlZmluZQlkc3Rfc19zZW1pX3JhbmRvbQlfX2RzdF9zX3NlbWlfcmFuZG9tCisjZGVmaW5lCWRzdF9zX3ZlcmlmeV9zdHIJX19kc3Rfc192ZXJpZnlfc3RyCisjZGVmaW5lCWRzdF9zaWdfc2l6ZQkJX19kc3Rfc2lnX3NpemUKKyNkZWZpbmUJZHN0X3NpZ25fZGF0YQkJX19kc3Rfc2lnbl9kYXRhCisjZGVmaW5lCWRzdF92ZXJpZnlfZGF0YQkJX19kc3RfdmVyaWZ5X2RhdGEKKyNkZWZpbmUJZHN0X3dyaXRlX2tleQkJX19kc3Rfd3JpdGVfa2V5CisKKy8qIAorICogRFNUIENyeXB0byBBUEkgZGVmaW50aW9ucyAKKyAqLwordm9pZCAgICAgZHN0X2luaXQodm9pZCk7CitpbnQgICAgICBkc3RfY2hlY2tfYWxnb3JpdGhtKGNvbnN0IGludCk7CisKK2ludCBkc3Rfc2lnbl9kYXRhKGNvbnN0IGludCwJIAkvKiBzcGVjaWZpZXMgSU5JVC9VUERBVEUvRklOQUwvQUxMICovCisJCSAgRFNUX0tFWSAqLAkgCS8qIHRoZSBrZXkgdG8gdXNlICovCisJCSAgdm9pZCAqKiwJIAkvKiBwb2ludGVyIHRvIHN0YXRlIHN0cnVjdHVyZSAqLworCQkgIGNvbnN0IHVfY2hhciAqLAkvKiBkYXRhIHRvIGJlIHNpZ25lZCAqLworCQkgIGNvbnN0IGludCwJIAkvKiBsZW5ndGggb2YgaW5wdXQgZGF0YSAqLworCQkgIHVfY2hhciAqLAkgCS8qIGJ1ZmZlciB0byB3cml0ZSBzaWduYXR1cmUgdG8gKi8KKwkJICBjb25zdCBpbnQpOwkgCS8qIHNpemUgb2Ygb3V0cHV0IGJ1ZmZlciAqLworCitpbnQgZHN0X3ZlcmlmeV9kYXRhKGNvbnN0IGludCwJIAkvKiBzcGVjaWZpZXMgSU5JVC9VUERBVEUvRklOQUwvQUxMICovCisJCSAgICBEU1RfS0VZICosCSAJLyogdGhlIGtleSB0byB1c2UgKi8KKwkJICAgIHZvaWQgKiosCSAJLyogcG9pbnRlciB0byBzdGF0ZSBzdHJ1Y3R1cmUgKi8KKwkJICAgIGNvbnN0IHVfY2hhciAqLAkvKiBkYXRhIHRvIGJlIHZlcmlmaWVkICovCisJCSAgICBjb25zdCBpbnQsCSAJLyogbGVuZ3RoIG9mIGlucHV0IGRhdGEgKi8KKwkJICAgIGNvbnN0IHVfY2hhciAqLAkvKiBidWZmZXIgY29udGFpbmluZyBzaWduYXR1cmUgKi8KKwkJICAgIGNvbnN0IGludCk7CSAJLyogbGVuZ3RoIG9mIHNpZ25hdHVyZSAqLworCisKK0RTVF9LRVkgKmRzdF9yZWFkX2tleShjb25zdCBjaGFyICosCS8qIG5hbWUgb2Yga2V5ICovCisJCSAgICAgIGNvbnN0IHVfaW50MTZfdCwJLyoga2V5IHRhZyBpZGVudGlmaWVyICovCisJCSAgICAgIGNvbnN0IGludCwJLyoga2V5IGFsZ29yaXRobSAqLworCQkgICAgICBjb25zdCBpbnQpOwkvKiBQcml2YXRlL1B1YmxpY0tleSB3YW50ZWQqLworCitpbnQgICAgICBkc3Rfd3JpdGVfa2V5KGNvbnN0IERTVF9LRVkgKiwJLyoga2V5IHRvIHdyaXRlIG91dCAqLworCQkgICAgICAgY29uc3QgaW50KTsgCS8qIFB1YmxpYy9Qcml2YXRlICovCisKK0RTVF9LRVkgKmRzdF9kbnNrZXlfdG9fa2V5KGNvbnN0IGNoYXIgKiwJLyogS0VZIHJlY29yZCBuYW1lICovCisJCQkgICBjb25zdCB1X2NoYXIgKiwJLyogS0VZIFJEQVRBICovCisJCQkgICBjb25zdCBpbnQpOwkJLyogc2l6ZSBvZiBpbnB1dCBidWZmZXIqLworCisKK2ludCAgICAgIGRzdF9rZXlfdG9fZG5za2V5KGNvbnN0IERTVF9LRVkgKiwJLyoga2V5IHRvIHRyYW5zbGF0ZSAqLworCQkJICAgdV9jaGFyICosCQkvKiBvdXRwdXQgYnVmZmVyICovCisJCQkgICBjb25zdCBpbnQpOwkJLyogc2l6ZSBvZiBvdXRfc3RvcmFnZSovCisKKworRFNUX0tFWSAqZHN0X2J1ZmZlcl90b19rZXkoY29uc3QgY2hhciAqLCAgCS8qIG5hbWUgb2YgdGhlIGtleSAqLworCQkJICAgY29uc3QgaW50LAkgIAkvKiBhbGdvcml0aG0gKi8KKwkJCSAgIGNvbnN0IGludCwJICAJLyogZG5zIGZsYWdzICovCisJCQkgICBjb25zdCBpbnQsCSAgCS8qIGRucyBwcm90b2NvbCAqLworCQkJICAgY29uc3QgdV9jaGFyICosIAkvKiBrZXkgaW4gZG5zIHdpcmUgZm10ICovCisJCQkgICBjb25zdCBpbnQpOwkgIAkvKiBzaXplIG9mIGtleSAqLworCisKK2ludCAgICAgZHN0X2tleV90b19idWZmZXIoRFNUX0tFWSAqLCB1X2NoYXIgKiwgaW50KTsKKworRFNUX0tFWSAqZHN0X2dlbmVyYXRlX2tleShjb25zdCBjaGFyICosICAgIAkvKiBuYW1lIG9mIG5ldyBrZXkgKi8KKwkJCSAgY29uc3QgaW50LCAgICAgICAJLyoga2V5IGFsZ29yaXRobSB0byBnZW5lcmF0ZSAqLworCQkJICBjb25zdCBpbnQsICAgICAgCS8qIHNpemUgb2YgbmV3IGtleSAqLworCQkJICBjb25zdCBpbnQsICAgICAgIAkvKiBhbGcgZGVwZW5kZW50IHBhcmFtZXRlciovCisJCQkgIGNvbnN0IGludCwgICAgIAkvKiBrZXkgRE5TIGZsYWdzICovCisJCQkgIGNvbnN0IGludCk7CQkvKiBrZXkgRE5TIHByb3RvY29sICovCisKK0RTVF9LRVkgKmRzdF9mcmVlX2tleShEU1RfS0VZICopOworaW50ICAgICAgZHN0X2NvbXBhcmVfa2V5cyhjb25zdCBEU1RfS0VZICosIGNvbnN0IERTVF9LRVkgKik7CisKK2ludAlkc3Rfc2lnX3NpemUoRFNUX0tFWSAqKTsKKworCisvKiBzdXBwb3J0IGZvciBkbnMga2V5IHRhZ3MvaWRzICovCit1X2ludDE2X3QgZHN0X3NfZG5zX2tleV9pZChjb25zdCB1X2NoYXIgKiwgY29uc3QgaW50KTsKK3VfaW50MTZfdCBkc3Rfc19pZF9jYWxjKGNvbnN0IHVfY2hhciAqLCBjb25zdCBpbnQpOworCisvKiBVc2VkIGJ5IGNhbGxlcnMgYXMgd2VsbCBhcyBieSB0aGUgbGlicmFyeS4gICovCisjZGVmaW5lIFJBV19LRVlfU0laRSAgICA4MTkyICAgICAgICAvKiBsYXJnZSBlbm91Z2ggdG8gc3RvcmUgYW55IGtleSAqLworCisvKiBEU1RfQVBJIGNvbnRyb2wgZmxhZ3MgKi8KKy8qIFRoZXNlIGFyZSB1c2VkIHVzZWQgaW4gZnVuY3Rpb25zIGRzdF9zaWduX2RhdGEgYW5kIGRzdF92ZXJpZnlfZGF0YSAqLworI2RlZmluZSBTSUdfTU9ERV9JTklUCQkxICAvKiBpbml0aWFsaXplIGRpZ2VzdCAqLworI2RlZmluZSBTSUdfTU9ERV9VUERBVEUJCTIgIC8qIGFkZCBkYXRhIHRvIGRpZ2VzdCAqLworI2RlZmluZSBTSUdfTU9ERV9GSU5BTAkJNCAgLyogZ2VuZXJhdGUvdmVyaWZ5IHNpZ25hdHVyZSAqLworI2RlZmluZSBTSUdfTU9ERV9BTEwJCShTSUdfTU9ERV9JTklUfFNJR19NT0RFX1VQREFURXxTSUdfTU9ERV9GSU5BTCkKKworLyogRmxhZ3MgZm9yIGRzdF9yZWFkX3ByaXZhdGVfa2V5KCkgICovCisjZGVmaW5lIERTVF9GT1JDRV9SRUFECQkweDEwMDAwMDAKKyNkZWZpbmUgRFNUX0NBTl9TSUdOCQkweDAxMEYKKyNkZWZpbmUgRFNUX05PX0FVVEhFTgkJMHg4MDAwCisjZGVmaW5lIERTVF9FWFRFTkRfRkxBRyAgICAgICAgIDB4MTAwMAorI2RlZmluZSBEU1RfU1RBTkRBUkQJCTAKKyNkZWZpbmUgRFNUX1BSSVZBVEUgICAgICAgICAgICAgMHgyMDAwMDAwCisjZGVmaW5lIERTVF9QVUJMSUMgICAgICAgICAgICAgIDB4NDAwMDAwMAorI2RlZmluZSBEU1RfUkFORF9TRU1JICAgICAgICAgICAxCisjZGVmaW5lIERTVF9SQU5EX1NURCAgICAgICAgICAgIDIKKyNkZWZpbmUgRFNUX1JBTkRfS0VZICAgICAgICAgICAgMworI2RlZmluZSBEU1RfUkFORF9EU1MgICAgICAgICAgICA0CisKKworLyogRFNUIGFsZ29yaXRobSBjb2RlcyAqLworI2RlZmluZSBLRVlfUlNBCQkJMQorI2RlZmluZSBLRVlfREgJCQkyCisjZGVmaW5lIEtFWV9EU0EJCQkzCisjZGVmaW5lIEtFWV9QUklWQVRFCQkyNTQKKyNkZWZpbmUgS0VZX0VYUEFORAkJMjU1CisjZGVmaW5lIEtFWV9ITUFDX01ENQkJMTU3CisjZGVmaW5lIEtFWV9ITUFDX1NIQTEJCTE1OAorI2RlZmluZSBVTktOT1dOX0tFWUFMRwkJMAorI2RlZmluZSBEU1RfTUFYX0FMR1MgICAgICAgICAgICBLRVlfSE1BQ19TSEExCisKKy8qIERTVCBjb25zdGFudHMgdG8gbG9jYXRpb25zIGluIEtFWSByZWNvcmQgIGNoYW5nZXMgaW4gbmV3IEtFWSByZWNvcmQgKi8KKyNkZWZpbmUgRFNUX0ZMQUdTX1NJWkUJCTIKKyNkZWZpbmUgRFNUX0tFWV9QUk9UCQkyCisjZGVmaW5lIERTVF9LRVlfQUxHCQkzCisjZGVmaW5lIERTVF9FWFRfRkxBRyAgICAgICAgICAgIDQKKyNkZWZpbmUgRFNUX0tFWV9TVEFSVAkJNAorCisjaWZuZGVmIFNJR05fRl9OT0tFWSAKKyNkZWZpbmUgU0lHTl9GX05PS0VZCQkweEMwMDAKKyNlbmRpZgorCisvKiBlcnJvciBjb2RlcyBmcm9tIGRzdCByb3V0aW5lcyAqLworI2RlZmluZSBTSUdOX0lOSVRfRkFJTFVSRQkoLTIzKQorI2RlZmluZSBTSUdOX1VQREFURV9GQUlMVVJFCSgtMjQpCisjZGVmaW5lIFNJR05fRklOQUxfRkFJTFVSRQkoLTI1KQorI2RlZmluZSBWRVJJRllfSU5JVF9GQUlMVVJFCSgtMjYpCisjZGVmaW5lIFZFUklGWV9VUERBVEVfRkFJTFVSRQkoLTI3KQorI2RlZmluZSBWRVJJRllfRklOQUxfRkFJTFVSRQkoLTI4KQorI2RlZmluZSBNSVNTSU5HX0tFWV9PUl9TSUdOQVRVUkUgKC0zMCkKKyNkZWZpbmUgVU5TVVBQT1JURURfS0VZQUxHCSgtMzEpCisKKyNlbmRpZiAvKiBEU1RfSCAqLwpkaWZmIC0tZ2l0IGEvbGliYy9wcml2YXRlL2lzYy9ldmVudGxpYi5oIGIvbGliYy9wcml2YXRlL2lzYy9ldmVudGxpYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxODVmNjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3ByaXZhdGUvaXNjL2V2ZW50bGliLmgKQEAgLTAsMCArMSwyMDQgQEAKKy8qCSROZXRCU0Q6IGV2ZW50bGliLmgsdiAxLjEuMS4zIDIwMDUvMTIvMjEgMjM6MTU6MjIgY2hyaXN0b3MgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNCBieSBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0sIEluYy4gKCJJU0MiKQorICogQ29weXJpZ2h0IChjKSAxOTk1LTE5OTkgYnkgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bQorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSVNDIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgSVNDIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKKyAqIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworLyogZXZlbnRsaWIuaCAtIGV4cG9ydGVkIGludGVyZmFjZXMgZm9yIGV2ZW50bGliCisgKiB2aXggMDlzZXA5NSBbaW5pdGlhbF0KKyAqCisgKiBJZDogZXZlbnRsaWIuaCx2IDEuMS4yLjEuNC4yIDIwMDUvMDcvMjggMDc6NDM6MTggbWFya2EgRXhwCisgKi8KKworI2lmbmRlZiBfRVZFTlRMSUJfSAorI2RlZmluZSBfRVZFTlRMSUJfSAorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3Vpby5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2lmbmRlZiBfX1AKKyMgZGVmaW5lIF9fRVZFTlRMSUJfUF9ERUZJTkVECisjIGlmZGVmIF9fU1REQ19fCisjICBkZWZpbmUgX19QKHgpIHgKKyMgZWxzZQorIyAgZGVmaW5lIF9fUCh4KSAoKQorIyBlbmRpZgorI2VuZGlmCisKKy8qIEluIHRoZSBhYnNlbmNlIG9mIGJyYW5kZWQgdHlwZXMuLi4gKi8KK3R5cGVkZWYgc3RydWN0IHsgdm9pZCAqb3BhcXVlOyB9IGV2Q29ubklEOwordHlwZWRlZiBzdHJ1Y3QgeyB2b2lkICpvcGFxdWU7IH0gZXZGaWxlSUQ7Cit0eXBlZGVmIHN0cnVjdCB7IHZvaWQgKm9wYXF1ZTsgfSBldlN0cmVhbUlEOwordHlwZWRlZiBzdHJ1Y3QgeyB2b2lkICpvcGFxdWU7IH0gZXZUaW1lcklEOwordHlwZWRlZiBzdHJ1Y3QgeyB2b2lkICpvcGFxdWU7IH0gZXZXYWl0SUQ7Cit0eXBlZGVmIHN0cnVjdCB7IHZvaWQgKm9wYXF1ZTsgfSBldkNvbnRleHQ7Cit0eXBlZGVmIHN0cnVjdCB7IHZvaWQgKm9wYXF1ZTsgfSBldkV2ZW50OworCisjZGVmaW5lCWV2SW5pdElEKGlkKSAoKGlkKS0+b3BhcXVlID0gTlVMTCkKKyNkZWZpbmUJZXZUZXN0SUQoaWQpICgoaWQpLm9wYXF1ZSAhPSBOVUxMKQorCit0eXBlZGVmIHZvaWQgKCpldkNvbm5GdW5jKV9fUCgoZXZDb250ZXh0LCB2b2lkICosIGludCwgY29uc3Qgdm9pZCAqLCBpbnQsCisJCQkgICAgICAgY29uc3Qgdm9pZCAqLCBpbnQpKTsKK3R5cGVkZWYgdm9pZCAoKmV2RmlsZUZ1bmMpX19QKChldkNvbnRleHQsIHZvaWQgKiwgaW50LCBpbnQpKTsKK3R5cGVkZWYJdm9pZCAoKmV2U3RyZWFtRnVuYylfX1AoKGV2Q29udGV4dCwgdm9pZCAqLCBpbnQsIGludCkpOwordHlwZWRlZiB2b2lkICgqZXZUaW1lckZ1bmMpX19QKChldkNvbnRleHQsIHZvaWQgKiwKKwkJCQlzdHJ1Y3QgdGltZXNwZWMsIHN0cnVjdCB0aW1lc3BlYykpOwordHlwZWRlZgl2b2lkICgqZXZXYWl0RnVuYylfX1AoKGV2Q29udGV4dCwgdm9pZCAqLCBjb25zdCB2b2lkICopKTsKKwordHlwZWRlZglzdHJ1Y3QgeyB1bnNpZ25lZCBjaGFyIG1hc2tbMjU2LzhdOyB9IGV2Qnl0ZU1hc2s7CisjZGVmaW5lCUVWX0JZVEVNQVNLX0JZVEUoYikgKChiKSAvIDgpCisjZGVmaW5lCUVWX0JZVEVNQVNLX01BU0soYikgKDEgPDwgKChiKSAlIDgpKQorI2RlZmluZQlFVl9CWVRFTUFTS19TRVQoYm0sIGIpIFwKKwkoKGJtKS5tYXNrW0VWX0JZVEVNQVNLX0JZVEUoYildIHw9IEVWX0JZVEVNQVNLX01BU0soYikpCisjZGVmaW5lCUVWX0JZVEVNQVNLX0NMUihibSwgYikgXAorCSgoYm0pLm1hc2tbRVZfQllURU1BU0tfQllURShiKV0gJj0gfkVWX0JZVEVNQVNLX01BU0soYikpCisjZGVmaW5lCUVWX0JZVEVNQVNLX1RTVChibSwgYikgXAorCSgoYm0pLm1hc2tbRVZfQllURU1BU0tfQllURShiKV0gJiBFVl9CWVRFTUFTS19NQVNLKGIpKQorCisjZGVmaW5lCUVWX1BPTEwJCTEKKyNkZWZpbmUJRVZfV0FJVAkJMgorI2RlZmluZQlFVl9OVUxMCQk0CisKKyNkZWZpbmUJRVZfUkVBRAkJMQorI2RlZmluZQlFVl9XUklURQkyCisjZGVmaW5lCUVWX0VYQ0VQVAk0CisKKyNkZWZpbmUgRVZfV0FTTk9OQkxPQ0tJTkcgOAkvKiBJbnRlcm5hbCBsaWJyYXJ5IHVzZS4gKi8KKworLyogZXZlbnRsaWIuYyAqLworI2RlZmluZSBldkNyZWF0ZQlfX2V2Q3JlYXRlCisjZGVmaW5lIGV2U2V0RGVidWcJX19ldlNldERlYnVnCisjZGVmaW5lIGV2RGVzdHJveQlfX2V2RGVzdHJveQorI2RlZmluZSBldkdldE5leHQJX19ldkdldE5leHQKKyNkZWZpbmUgZXZEaXNwYXRjaAlfX2V2RGlzcGF0Y2gKKyNkZWZpbmUgZXZEcm9wCQlfX2V2RHJvcAorI2RlZmluZSBldk1haW5Mb29wCV9fZXZNYWluTG9vcAorI2RlZmluZSBldkhpZ2hlc3RGRAlfX2V2SGlnaGVzdEZECisjZGVmaW5lIGV2R2V0T3B0aW9uCV9fZXZHZXRPcHRpb24KKyNkZWZpbmUgZXZTZXRPcHRpb24JX19ldlNldE9wdGlvbgorCitpbnQgIGV2Q3JlYXRlIF9fUCgoZXZDb250ZXh0ICopKTsKK3ZvaWQgZXZTZXREZWJ1ZyBfX1AoKGV2Q29udGV4dCwgaW50LCBGSUxFICopKTsKK2ludCAgZXZEZXN0cm95IF9fUCgoZXZDb250ZXh0KSk7CitpbnQgIGV2R2V0TmV4dCBfX1AoKGV2Q29udGV4dCwgZXZFdmVudCAqLCBpbnQpKTsKK2ludCAgZXZEaXNwYXRjaCBfX1AoKGV2Q29udGV4dCwgZXZFdmVudCkpOwordm9pZCBldkRyb3AgX19QKChldkNvbnRleHQsIGV2RXZlbnQpKTsKK2ludCAgZXZNYWluTG9vcCBfX1AoKGV2Q29udGV4dCkpOworaW50ICBldkhpZ2hlc3RGRCBfX1AoKGV2Q29udGV4dCkpOworaW50ICBldkdldE9wdGlvbiBfX1AoKGV2Q29udGV4dCAqLCBjb25zdCBjaGFyICosIGludCAqKSk7CitpbnQgIGV2U2V0T3B0aW9uIF9fUCgoZXZDb250ZXh0ICosIGNvbnN0IGNoYXIgKiwgaW50KSk7CisKKy8qIGV2X2Nvbm5lY3RzLmMgKi8KKyNkZWZpbmUgZXZMaXN0ZW4JX19ldkxpc3RlbgorI2RlZmluZSBldkNvbm5lY3QJX19ldkNvbm5lY3QKKyNkZWZpbmUgZXZDYW5jZWxDb25uCV9fZXZDYW5jZWxDb25uCisjZGVmaW5lIGV2SG9sZAkJX19ldkhvbGQKKyNkZWZpbmUgZXZVbmhvbGQJX19ldlVuaG9sZAorI2RlZmluZSBldlRyeUFjY2VwdAlfX2V2VHJ5QWNjZXB0CisKK2ludCBldkxpc3RlbiBfX1AoKGV2Q29udGV4dCwgaW50LCBpbnQsIGV2Q29ubkZ1bmMsIHZvaWQgKiwgZXZDb25uSUQgKikpOworaW50IGV2Q29ubmVjdCBfX1AoKGV2Q29udGV4dCwgaW50LCBjb25zdCB2b2lkICosIGludCwKKwkJICAgZXZDb25uRnVuYywgdm9pZCAqLCBldkNvbm5JRCAqKSk7CitpbnQgZXZDYW5jZWxDb25uIF9fUCgoZXZDb250ZXh0LCBldkNvbm5JRCkpOworaW50IGV2SG9sZCBfX1AoKGV2Q29udGV4dCwgZXZDb25uSUQpKTsKK2ludCBldlVuaG9sZCBfX1AoKGV2Q29udGV4dCwgZXZDb25uSUQpKTsKK2ludCBldlRyeUFjY2VwdCBfX1AoKGV2Q29udGV4dCwgZXZDb25uSUQsIGludCAqKSk7CisKKy8qIGV2X2ZpbGVzLmMgKi8KKyNkZWZpbmUgZXZTZWxlY3RGRAlfX2V2U2VsZWN0RkQKKyNkZWZpbmUgZXZEZXNlbGVjdEZECV9fZXZEZXNlbGVjdEZECisKK2ludCBldlNlbGVjdEZEIF9fUCgoZXZDb250ZXh0LCBpbnQsIGludCwgZXZGaWxlRnVuYywgdm9pZCAqLCBldkZpbGVJRCAqKSk7CitpbnQgZXZEZXNlbGVjdEZEIF9fUCgoZXZDb250ZXh0LCBldkZpbGVJRCkpOworCisvKiBldl9zdHJlYW1zLmMgKi8KKyNkZWZpbmUgZXZDb25zSW92ZWMJX19ldkNvbnNJb3ZlYworI2RlZmluZSBldldyaXRlCQlfX2V2V3JpdGUKKyNkZWZpbmUgZXZSZWFkCQlfX2V2UmVhZAorI2RlZmluZSBldlRpbWVSVwlfX2V2VGltZVJXCisjZGVmaW5lIGV2VW50aW1lUlcJX19ldlVudGltZVJXCisjZGVmaW5lCWV2Q2FuY2VsUlcJX19ldkNhbmNlbFJXCisKK3N0cnVjdCBpb3ZlYyBldkNvbnNJb3ZlYyBfX1AoKHZvaWQgKiwgc2l6ZV90KSk7CitpbnQgZXZXcml0ZSBfX1AoKGV2Q29udGV4dCwgaW50LCBjb25zdCBzdHJ1Y3QgaW92ZWMgKiwgaW50LAorCQkgZXZTdHJlYW1GdW5jIGZ1bmMsIHZvaWQgKiwgZXZTdHJlYW1JRCAqKSk7CitpbnQgZXZSZWFkIF9fUCgoZXZDb250ZXh0LCBpbnQsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqLCBpbnQsCisJCWV2U3RyZWFtRnVuYyBmdW5jLCB2b2lkICosIGV2U3RyZWFtSUQgKikpOworaW50IGV2VGltZVJXIF9fUCgoZXZDb250ZXh0LCBldlN0cmVhbUlELCBldlRpbWVySUQgdGltZXIpKTsKK2ludCBldlVudGltZVJXIF9fUCgoZXZDb250ZXh0LCBldlN0cmVhbUlEKSk7CitpbnQgZXZDYW5jZWxSVyBfX1AoKGV2Q29udGV4dCwgZXZTdHJlYW1JRCkpOworCisvKiBldl90aW1lcnMuYyAqLworI2RlZmluZSBldkNvbnNUaW1lCV9fZXZDb25zVGltZQorI2RlZmluZSBldkFkZFRpbWUJX19ldkFkZFRpbWUKKyNkZWZpbmUgZXZTdWJUaW1lCV9fZXZTdWJUaW1lCisjZGVmaW5lIGV2Q21wVGltZQlfX2V2Q21wVGltZQorI2RlZmluZQlldlRpbWVTcGVjCV9fZXZUaW1lU3BlYworI2RlZmluZQlldlRpbWVWYWwJX19ldlRpbWVWYWwKKworI2RlZmluZSBldk5vd1RpbWUJCV9fZXZOb3dUaW1lCisjZGVmaW5lIGV2VVRDVGltZQkJX19ldlVUQ1RpbWUKKyNkZWZpbmUgZXZMYXN0RXZlbnRUaW1lCQlfX2V2TGFzdEV2ZW50VGltZQorI2RlZmluZSBldlNldFRpbWVyCQlfX2V2U2V0VGltZXIKKyNkZWZpbmUgZXZDbGVhclRpbWVyCQlfX2V2Q2xlYXJUaW1lcgorI2RlZmluZSBldkNvbmZpZ1RpbWVyCQlfX2V2Q29uZmlnVGltZXIKKyNkZWZpbmUgZXZSZXNldFRpbWVyCQlfX2V2UmVzZXRUaW1lcgorI2RlZmluZSBldlNldElkbGVUaW1lcgkJX19ldlNldElkbGVUaW1lcgorI2RlZmluZSBldkNsZWFySWRsZVRpbWVyCV9fZXZDbGVhcklkbGVUaW1lcgorI2RlZmluZSBldlJlc2V0SWRsZVRpbWVyCV9fZXZSZXNldElkbGVUaW1lcgorI2RlZmluZSBldlRvdWNoSWRsZVRpbWVyCV9fZXZUb3VjaElkbGVUaW1lcgorCitzdHJ1Y3QgdGltZXNwZWMgZXZDb25zVGltZSBfX1AoKHRpbWVfdCBzZWMsIGxvbmcgbnNlYykpOworc3RydWN0IHRpbWVzcGVjIGV2QWRkVGltZSBfX1AoKHN0cnVjdCB0aW1lc3BlYywgc3RydWN0IHRpbWVzcGVjKSk7CitzdHJ1Y3QgdGltZXNwZWMgZXZTdWJUaW1lIF9fUCgoc3RydWN0IHRpbWVzcGVjLCBzdHJ1Y3QgdGltZXNwZWMpKTsKK3N0cnVjdCB0aW1lc3BlYyBldk5vd1RpbWUgX19QKCh2b2lkKSk7CitzdHJ1Y3QgdGltZXNwZWMgZXZVVENUaW1lIF9fUCgodm9pZCkpOworc3RydWN0IHRpbWVzcGVjIGV2TGFzdEV2ZW50VGltZSBfX1AoKGV2Q29udGV4dCkpOworc3RydWN0IHRpbWVzcGVjIGV2VGltZVNwZWMgX19QKChzdHJ1Y3QgdGltZXZhbCkpOworc3RydWN0IHRpbWV2YWwgZXZUaW1lVmFsIF9fUCgoc3RydWN0IHRpbWVzcGVjKSk7CitpbnQgZXZDbXBUaW1lIF9fUCgoc3RydWN0IHRpbWVzcGVjLCBzdHJ1Y3QgdGltZXNwZWMpKTsKK2ludCBldlNldFRpbWVyIF9fUCgoZXZDb250ZXh0LCBldlRpbWVyRnVuYywgdm9pZCAqLCBzdHJ1Y3QgdGltZXNwZWMsCisJCSAgICBzdHJ1Y3QgdGltZXNwZWMsIGV2VGltZXJJRCAqKSk7CitpbnQgZXZDbGVhclRpbWVyIF9fUCgoZXZDb250ZXh0LCBldlRpbWVySUQpKTsKK2ludCBldkNvbmZpZ1RpbWVyIF9fUCgoZXZDb250ZXh0LCBldlRpbWVySUQsIGNvbnN0IGNoYXIgKnBhcmFtLAorCQkgICAgICBpbnQgdmFsdWUpKTsKK2ludCBldlJlc2V0VGltZXIgX19QKChldkNvbnRleHQsIGV2VGltZXJJRCwgZXZUaW1lckZ1bmMsIHZvaWQgKiwKKwkJICAgICAgc3RydWN0IHRpbWVzcGVjLCBzdHJ1Y3QgdGltZXNwZWMpKTsKK2ludCBldlNldElkbGVUaW1lciBfX1AoKGV2Q29udGV4dCwgZXZUaW1lckZ1bmMsIHZvaWQgKiwgc3RydWN0IHRpbWVzcGVjLAorCQkJZXZUaW1lcklEICopKTsKK2ludCBldkNsZWFySWRsZVRpbWVyIF9fUCgoZXZDb250ZXh0LCBldlRpbWVySUQpKTsKK2ludCBldlJlc2V0SWRsZVRpbWVyIF9fUCgoZXZDb250ZXh0LCBldlRpbWVySUQsIGV2VGltZXJGdW5jLCB2b2lkICosCisJCQkgIHN0cnVjdCB0aW1lc3BlYykpOworaW50IGV2VG91Y2hJZGxlVGltZXIgX19QKChldkNvbnRleHQsIGV2VGltZXJJRCkpOworCisvKiBldl93YWl0cy5jICovCisjZGVmaW5lIGV2V2FpdEZvcglfX2V2V2FpdEZvcgorI2RlZmluZSBldkRvCQlfX2V2RG8KKyNkZWZpbmUgZXZVbndhaXQJX19ldlVud2FpdAorI2RlZmluZSBldkRlZmVyCQlfX2V2RGVmZXIKKworaW50IGV2V2FpdEZvciBfX1AoKGV2Q29udGV4dCwgY29uc3Qgdm9pZCAqLCBldldhaXRGdW5jLCB2b2lkICosIGV2V2FpdElEICopKTsKK2ludCBldkRvIF9fUCgoZXZDb250ZXh0LCBjb25zdCB2b2lkICopKTsKK2ludCBldlVud2FpdCBfX1AoKGV2Q29udGV4dCwgZXZXYWl0SUQpKTsKK2ludCBldkRlZmVyIF9fUCgoZXZDb250ZXh0LCBldldhaXRGdW5jLCB2b2lkICopKTsKKworI2lmZGVmIF9fRVZFTlRMSUJfUF9ERUZJTkVECisjIHVuZGVmIF9fUAorI2VuZGlmCisKKyNlbmRpZiAvKl9FVkVOVExJQl9IKi8KZGlmZiAtLWdpdCBhL2xpYmMvcHJpdmF0ZS9pc2MvaGVhcC5oIGIvbGliYy9wcml2YXRlL2lzYy9oZWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE1YTZlOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvcHJpdmF0ZS9pc2MvaGVhcC5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qCSROZXRCU0Q6IGhlYXAuaCx2IDEuMS4xLjEgMjAwNC8wNS8yMCAxOTo0OTo0MSBjaHJpc3RvcyBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAyMDA0IGJ5IEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCisgKiBDb3B5cmlnaHQgKGMpIDE5OTcsMTk5OSBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSVNDIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgSVNDIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKKyAqIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKwordHlwZWRlZiBpbnQgKCpoZWFwX2hpZ2hlcl9wcmlvcml0eV9mdW5jKSh2b2lkICosIHZvaWQgKik7Cit0eXBlZGVmIHZvaWQgKCpoZWFwX2luZGV4X2Z1bmMpKHZvaWQgKiwgaW50KTsKK3R5cGVkZWYgdm9pZCAoKmhlYXBfZm9yX2VhY2hfZnVuYykodm9pZCAqLCB2b2lkICopOworCit0eXBlZGVmIHN0cnVjdCBoZWFwX2NvbnRleHQgeworCWludCBhcnJheV9zaXplOworCWludCBhcnJheV9zaXplX2luY3JlbWVudDsKKwlpbnQgaGVhcF9zaXplOworCXZvaWQgKipoZWFwOworCWhlYXBfaGlnaGVyX3ByaW9yaXR5X2Z1bmMgaGlnaGVyX3ByaW9yaXR5OworCWhlYXBfaW5kZXhfZnVuYyBpbmRleDsKK30gKmhlYXBfY29udGV4dDsKKworI2RlZmluZSBoZWFwX25ldwlfX2hlYXBfbmV3CisjZGVmaW5lIGhlYXBfZnJlZQlfX2hlYXBfZnJlZQorI2RlZmluZSBoZWFwX2luc2VydAlfX2hlYXBfaW5zZXJ0CisjZGVmaW5lIGhlYXBfZGVsZXRlCV9faGVhcF9kZWxldGUKKyNkZWZpbmUgaGVhcF9pbmNyZWFzZWQJX19oZWFwX2luY3JlYXNlZAorI2RlZmluZSBoZWFwX2RlY3JlYXNlZAlfX2hlYXBfZGVjcmVhc2VkCisjZGVmaW5lIGhlYXBfZWxlbWVudAlfX2hlYXBfZWxlbWVudAorI2RlZmluZSBoZWFwX2Zvcl9lYWNoCV9faGVhcF9mb3JfZWFjaAorCitoZWFwX2NvbnRleHQJaGVhcF9uZXcoaGVhcF9oaWdoZXJfcHJpb3JpdHlfZnVuYywgaGVhcF9pbmRleF9mdW5jLCBpbnQpOworaW50CQloZWFwX2ZyZWUoaGVhcF9jb250ZXh0KTsKK2ludAkJaGVhcF9pbnNlcnQoaGVhcF9jb250ZXh0LCB2b2lkICopOworaW50CQloZWFwX2RlbGV0ZShoZWFwX2NvbnRleHQsIGludCk7CitpbnQJCWhlYXBfaW5jcmVhc2VkKGhlYXBfY29udGV4dCwgaW50KTsKK2ludAkJaGVhcF9kZWNyZWFzZWQoaGVhcF9jb250ZXh0LCBpbnQpOwordm9pZCAqCQloZWFwX2VsZW1lbnQoaGVhcF9jb250ZXh0LCBpbnQpOworaW50CQloZWFwX2Zvcl9lYWNoKGhlYXBfY29udGV4dCwgaGVhcF9mb3JfZWFjaF9mdW5jLCB2b2lkICopOwpkaWZmIC0tZ2l0IGEvbGliYy9wcml2YXRlL2lzYy9saXN0LmggYi9saWJjL3ByaXZhdGUvaXNjL2xpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODk3NjZhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9wcml2YXRlL2lzYy9saXN0LmgKQEAgLTAsMCArMSwxMTQgQEAKKy8qCSROZXRCU0Q6IGxpc3QuaCx2IDEuMiAyMDA0LzA1LzIwIDE5OjUxOjU1IGNocmlzdG9zIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKKyAqIENvcHlyaWdodCAoYykgMTk5NywxOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAorICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIExJU1RfSAorI2RlZmluZSBMSVNUX0ggMQorI2luY2x1ZGUgPGlzYy9hc3NlcnRpb25zLmg+CisKKyNkZWZpbmUgTElTVCh0eXBlKSBzdHJ1Y3QgeyB0eXBlICpoZWFkLCAqdGFpbDsgfQorI2RlZmluZSBJTklUX0xJU1QobGlzdCkgXAorCWRvIHsgKGxpc3QpLmhlYWQgPSBOVUxMOyAobGlzdCkudGFpbCA9IE5VTEw7IH0gd2hpbGUgKC8qQ09OU1RDT05EKi8wKQorCisjZGVmaW5lIExJTksodHlwZSkgc3RydWN0IHsgdHlwZSAqcHJldiwgKm5leHQ7IH0KKyNkZWZpbmUgSU5JVF9MSU5LX1RZUEUoZWx0LCBsaW5rLCB0eXBlKSBcCisJZG8geyBcCisJCShlbHQpLT5saW5rLnByZXYgPSAodHlwZSAqKSgtMSk7IFwKKwkJKGVsdCktPmxpbmsubmV4dCA9ICh0eXBlICopKC0xKTsgXAorCX0gd2hpbGUgKC8qQ09OU1RDT05EKi8wKQorI2RlZmluZSBJTklUX0xJTksoZWx0LCBsaW5rKSBcCisJSU5JVF9MSU5LX1RZUEUoZWx0LCBsaW5rLCB2b2lkKQorI2RlZmluZSBMSU5LRUQoZWx0LCBsaW5rKSAoKHZvaWQgKikoKGVsdCktPmxpbmsucHJldikgIT0gKHZvaWQgKikoLTEpKQorCisjZGVmaW5lIEhFQUQobGlzdCkgKChsaXN0KS5oZWFkKQorI2RlZmluZSBUQUlMKGxpc3QpICgobGlzdCkudGFpbCkKKyNkZWZpbmUgRU1QVFkobGlzdCkgKChsaXN0KS5oZWFkID09IE5VTEwpCisKKyNkZWZpbmUgUFJFUEVORChsaXN0LCBlbHQsIGxpbmspIFwKKwlkbyB7IFwKKwkJSU5TSVNUKCFMSU5LRUQoZWx0LCBsaW5rKSk7XAorCQlpZiAoKGxpc3QpLmhlYWQgIT0gTlVMTCkgXAorCQkJKGxpc3QpLmhlYWQtPmxpbmsucHJldiA9IChlbHQpOyBcCisJCWVsc2UgXAorCQkJKGxpc3QpLnRhaWwgPSAoZWx0KTsgXAorCQkoZWx0KS0+bGluay5wcmV2ID0gTlVMTDsgXAorCQkoZWx0KS0+bGluay5uZXh0ID0gKGxpc3QpLmhlYWQ7IFwKKwkJKGxpc3QpLmhlYWQgPSAoZWx0KTsgXAorCX0gd2hpbGUgKC8qQ09OU1RDT05EKi8wKQorCisjZGVmaW5lIEFQUEVORChsaXN0LCBlbHQsIGxpbmspIFwKKwlkbyB7IFwKKwkJSU5TSVNUKCFMSU5LRUQoZWx0LCBsaW5rKSk7XAorCQlpZiAoKGxpc3QpLnRhaWwgIT0gTlVMTCkgXAorCQkJKGxpc3QpLnRhaWwtPmxpbmsubmV4dCA9IChlbHQpOyBcCisJCWVsc2UgXAorCQkJKGxpc3QpLmhlYWQgPSAoZWx0KTsgXAorCQkoZWx0KS0+bGluay5wcmV2ID0gKGxpc3QpLnRhaWw7IFwKKwkJKGVsdCktPmxpbmsubmV4dCA9IE5VTEw7IFwKKwkJKGxpc3QpLnRhaWwgPSAoZWx0KTsgXAorCX0gd2hpbGUgKC8qQ09OU1RDT05EKi8wKQorCisjZGVmaW5lIFVOTElOS19UWVBFKGxpc3QsIGVsdCwgbGluaywgdHlwZSkgXAorCWRvIHsgXAorCQlJTlNJU1QoTElOS0VEKGVsdCwgbGluaykpO1wKKwkJaWYgKChlbHQpLT5saW5rLm5leHQgIT0gTlVMTCkgXAorCQkJKGVsdCktPmxpbmsubmV4dC0+bGluay5wcmV2ID0gKGVsdCktPmxpbmsucHJldjsgXAorCQllbHNlIFwKKwkJCShsaXN0KS50YWlsID0gKGVsdCktPmxpbmsucHJldjsgXAorCQlpZiAoKGVsdCktPmxpbmsucHJldiAhPSBOVUxMKSBcCisJCQkoZWx0KS0+bGluay5wcmV2LT5saW5rLm5leHQgPSAoZWx0KS0+bGluay5uZXh0OyBcCisJCWVsc2UgXAorCQkJKGxpc3QpLmhlYWQgPSAoZWx0KS0+bGluay5uZXh0OyBcCisJCUlOSVRfTElOS19UWVBFKGVsdCwgbGluaywgdHlwZSk7IFwKKwl9IHdoaWxlICgvKkNPTlNUQ09ORCovMCkKKyNkZWZpbmUgVU5MSU5LKGxpc3QsIGVsdCwgbGluaykgXAorCVVOTElOS19UWVBFKGxpc3QsIGVsdCwgbGluaywgdm9pZCkKKworI2RlZmluZSBQUkVWKGVsdCwgbGluaykgKChlbHQpLT5saW5rLnByZXYpCisjZGVmaW5lIE5FWFQoZWx0LCBsaW5rKSAoKGVsdCktPmxpbmsubmV4dCkKKworI2RlZmluZSBJTlNFUlRfQkVGT1JFKGxpc3QsIGJlZm9yZSwgZWx0LCBsaW5rKSBcCisJZG8geyBcCisJCUlOU0lTVCghTElOS0VEKGVsdCwgbGluaykpO1wKKwkJaWYgKChiZWZvcmUpLT5saW5rLnByZXYgPT0gTlVMTCkgXAorCQkJUFJFUEVORChsaXN0LCBlbHQsIGxpbmspOyBcCisJCWVsc2UgeyBcCisJCQkoZWx0KS0+bGluay5wcmV2ID0gKGJlZm9yZSktPmxpbmsucHJldjsgXAorCQkJKGJlZm9yZSktPmxpbmsucHJldiA9IChlbHQpOyBcCisJCQkoZWx0KS0+bGluay5wcmV2LT5saW5rLm5leHQgPSAoZWx0KTsgXAorCQkJKGVsdCktPmxpbmsubmV4dCA9IChiZWZvcmUpOyBcCisJCX0gXAorCX0gd2hpbGUgKC8qQ09OU1RDT05EKi8wKQorCisjZGVmaW5lIElOU0VSVF9BRlRFUihsaXN0LCBhZnRlciwgZWx0LCBsaW5rKSBcCisJZG8geyBcCisJCUlOU0lTVCghTElOS0VEKGVsdCwgbGluaykpO1wKKwkJaWYgKChhZnRlciktPmxpbmsubmV4dCA9PSBOVUxMKSBcCisJCQlBUFBFTkQobGlzdCwgZWx0LCBsaW5rKTsgXAorCQllbHNlIHsgXAorCQkJKGVsdCktPmxpbmsubmV4dCA9IChhZnRlciktPmxpbmsubmV4dDsgXAorCQkJKGFmdGVyKS0+bGluay5uZXh0ID0gKGVsdCk7IFwKKwkJCShlbHQpLT5saW5rLm5leHQtPmxpbmsucHJldiA9IChlbHQpOyBcCisJCQkoZWx0KS0+bGluay5wcmV2ID0gKGFmdGVyKTsgXAorCQl9IFwKKwl9IHdoaWxlICgvKkNPTlNUQ09ORCovMCkKKworI2RlZmluZSBFTlFVRVVFKGxpc3QsIGVsdCwgbGluaykgQVBQRU5EKGxpc3QsIGVsdCwgbGluaykKKyNkZWZpbmUgREVRVUVVRShsaXN0LCBlbHQsIGxpbmspIFVOTElOSyhsaXN0LCBlbHQsIGxpbmspCisKKyNlbmRpZiAvKiBMSVNUX0ggKi8KZGlmZiAtLWdpdCBhL2xpYmMvcHJpdmF0ZS9pc2MvbWVtY2x1c3Rlci5oIGIvbGliYy9wcml2YXRlL2lzYy9tZW1jbHVzdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRhYWYyMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvcHJpdmF0ZS9pc2MvbWVtY2x1c3Rlci5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qCSROZXRCU0Q6IG1lbWNsdXN0ZXIuaCx2IDEuMS4xLjEgMjAwNC8wNS8yMCAxOTo0OTo0MSBjaHJpc3RvcyBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAyMDA0IGJ5IEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCisgKiBDb3B5cmlnaHQgKGMpIDE5OTcsMTk5OSBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSVNDIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgSVNDIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKKyAqIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBNRU1DTFVTVEVSX0gKKyNkZWZpbmUgTUVNQ0xVU1RFUl9ICisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjZGVmaW5lIG1lbWluaXQJCV9fbWVtaW5pdAorI2lmZGVmIE1FTUNMVVNURVJfREVCVUcKKyNkZWZpbmUgbWVtZ2V0KHMpCV9fbWVtZ2V0X2RlYnVnKHMsIF9fRklMRV9fLCBfX0xJTkVfXykKKyNkZWZpbmUgbWVtcHV0KHAsIHMpCV9fbWVtcHV0X2RlYnVnKHAsIHMsIF9fRklMRV9fLCBfX0xJTkVfXykKKyNlbHNlIC8qTUVNQ0xVU1RFUl9ERUJVRyovCisjaWZkZWYgTUVNQ0xVU1RFUl9SRUNPUkQKKyNkZWZpbmUgbWVtZ2V0KHMpCV9fbWVtZ2V0X3JlY29yZChzLCBfX0ZJTEVfXywgX19MSU5FX18pCisjZGVmaW5lIG1lbXB1dChwLCBzKQlfX21lbXB1dF9yZWNvcmQocCwgcywgX19GSUxFX18sIF9fTElORV9fKQorI2Vsc2UgLypNRU1DTFVTVEVSX1JFQ09SRCovCisjZGVmaW5lIG1lbWdldAkJX19tZW1nZXQKKyNkZWZpbmUgbWVtcHV0CQlfX21lbXB1dAorI2VuZGlmIC8qTUVNQ0xVU1RFUl9SRUNPUkQqLworI2VuZGlmIC8qTUVNQ0xVU1RFUl9ERUJVRyovCisjZGVmaW5lIG1lbXN0YXRzCV9fbWVtc3RhdHMKKyNkZWZpbmUgbWVtYWN0aXZlCV9fbWVtYWN0aXZlCisKK2ludAltZW1pbml0KHNpemVfdCwgc2l6ZV90KTsKK3ZvaWQgKglfX21lbWdldChzaXplX3QpOwordm9pZCAJX19tZW1wdXQodm9pZCAqLCBzaXplX3QpOwordm9pZCAqCV9fbWVtZ2V0X2RlYnVnKHNpemVfdCwgY29uc3QgY2hhciAqLCBpbnQpOwordm9pZCAJX19tZW1wdXRfZGVidWcodm9pZCAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwgaW50KTsKK3ZvaWQgKglfX21lbWdldF9yZWNvcmQoc2l6ZV90LCBjb25zdCBjaGFyICosIGludCk7Cit2b2lkIAlfX21lbXB1dF9yZWNvcmQodm9pZCAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwgaW50KTsKK3ZvaWQgCW1lbXN0YXRzKEZJTEUgKik7CitpbnQJbWVtYWN0aXZlKHZvaWQpOworCisjZW5kaWYgLyogTUVNQ0xVU1RFUl9IICovCmRpZmYgLS1naXQgYS9saWJjL3ByaXZhdGUvbG9nZC5oIGIvbGliYy9wcml2YXRlL2xvZ2QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzFjYjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9wcml2YXRlL2xvZ2QuaApAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9BTkRST0lEX0JJT05JQ19MT0dEX0gKKyNkZWZpbmUgX0FORFJPSURfQklPTklDX0xPR0RfSAorCitlbnVtICB7CisgICAgQU5EUk9JRF9MT0dfVU5LTk9XTiA9IDAsCisgICAgQU5EUk9JRF9MT0dfREVGQVVMVCwgICAgLyogb25seSBmb3IgU2V0TWluUHJpb3JpdHkoKSAqLworCisgICAgQU5EUk9JRF9MT0dfVkVSQk9TRSwKKyAgICBBTkRST0lEX0xPR19ERUJVRywKKyAgICBBTkRST0lEX0xPR19JTkZPLAorICAgIEFORFJPSURfTE9HX1dBUk4sCisgICAgQU5EUk9JRF9MT0dfRVJST1IsCisgICAgQU5EUk9JRF9MT0dfRkFUQUwsCisKKyAgICBBTkRST0lEX0xPR19TSUxFTlQsICAgICAvKiBvbmx5IGZvciBTZXRNaW5Qcmlvcml0eSgpOyBtdXN0IGJlIGxhc3QgKi8KK307CisKK2ludCBfX2xpYmNfYW5kcm9pZF9sb2dfcHJpbnQoaW50IHByaW8sIGNvbnN0IGNoYXIgKnRhZywgY29uc3QgY2hhciAqZm10LCAuLi4pOworCisjZW5kaWYgLyogX0FORFJPSURfQklPTklDX0xPR0RfSCAqLwpkaWZmIC0tZ2l0IGEvbGliYy9wcml2YXRlL25zc3dpdGNoLmggYi9saWJjL3ByaXZhdGUvbnNzd2l0Y2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDM4NDRiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9wcml2YXRlL25zc3dpdGNoLmgKQEAgLTAsMCArMSwyMzcgQEAKKy8qCSROZXRCU0Q6IG5zc3dpdGNoLmgsdiAxLjE4IDIwMDUvMTEvMjkgMDM6MTI6NTggY2hyaXN0b3MgRXhwICQJKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTcsIDE5OTgsIDE5OTksIDIwMDQgVGhlIE5ldEJTRCBGb3VuZGF0aW9uLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gVGhlIE5ldEJTRCBGb3VuZGF0aW9uCisgKiBieSBMdWtlIE1ld2J1cm4uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqICAgICAgICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBOZXRCU0QKKyAqICAgICAgICBGb3VuZGF0aW9uLCBJbmMuIGFuZCBpdHMgY29udHJpYnV0b3JzLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiBUaGUgTmV0QlNEIEZvdW5kYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE5FVEJTRCBGT1VOREFUSU9OLCBJTkMuIEFORCBDT05UUklCVVRPUlMKKyAqIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorICogVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUiBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX05TU1dJVENIX0gKKyNkZWZpbmUgX05TU1dJVENIX0gJMQorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisKKyNkZWZpbmUJTlNTX01PRFVMRV9JTlRFUkZBQ0VfVkVSU0lPTgkwCisKKyNpZm5kZWYgX1BBVEhfTlNfQ09ORgorI2RlZmluZSBfUEFUSF9OU19DT05GCSIvZXRjL25zc3dpdGNoLmNvbmYiCisjZW5kaWYKKworI2RlZmluZQlOU19DT05USU5VRQkwCisjZGVmaW5lCU5TX1JFVFVSTgkxCisKKy8qCisgKiBMYXlvdXQgb2Y6CisgKgl1aW50MzJfdCBuc19zcmMuZmxhZ3MKKyAqLworCS8qIG5zc3dpdGNoLmNvbmYgc3RhdHVzIGNvZGVzIGFuZCBuc2Rpc3BhdGNoKDMpIHJldHVybiB2YWx1ZXMgKi8KKyNkZWZpbmUJTlNfU1VDQ0VTUwkoMTw8MCkJCS8qIGVudHJ5IHdhcyBmb3VuZCAqLworI2RlZmluZQlOU19VTkFWQUlMCSgxPDwxKQkJLyogc291cmNlIG5vdCByZXNwb25kaW5nLCBvciBjb3JydXB0ICovCisjZGVmaW5lCU5TX05PVEZPVU5ECSgxPDwyKQkJLyogc291cmNlIHJlc3BvbmRlZCAnbm8gc3VjaCBlbnRyeScgKi8KKyNkZWZpbmUJTlNfVFJZQUdBSU4JKDE8PDMpCQkvKiBzb3VyY2UgYnVzeSwgbWF5IHJlc3BvbmQgdG8gcmV0cnlzICovCisjZGVmaW5lCU5TX1NUQVRVU01BU0sJMHgwMDAwMDBmZgkvKiBiaXRtYXNrIHRvIGdldCB0aGUgc3RhdHVzIGZsYWdzICovCisKKwkvKiBpbnRlcm5hbCBuc2Rpc3BhdGNoKDMpIGZsYWdzOyBub3Qgc2V0dGFibGUgaW4gbnNzd2l0Y2guY29uZig1KSAgKi8KKyNkZWZpbmUJTlNfRk9SQ0VBTEwJKDE8PDgpCQkvKiBmb3JjZSBhbGwgbWV0aG9kcyB0byBiZSBpbnZva2VkOyAqLworCisvKgorICogQ3VycmVudGx5IGltcGxlbWVudGVkIHNvdXJjZXMuCisgKi8KKyNkZWZpbmUgTlNTUkNfRklMRVMJImZpbGVzIgkJLyogbG9jYWwgZmlsZXMgKi8KKyNkZWZpbmUJTlNTUkNfRE5TCSJkbnMiCQkvKiBETlM7IElOIGZvciBob3N0cywgSFMgZm9yIG90aGVycyAqLworI2RlZmluZQlOU1NSQ19OSVMJIm5pcyIJCS8qIFlQL05JUyAqLworI2RlZmluZQlOU1NSQ19DT01QQVQJImNvbXBhdCIJLyogcGFzc3dkLGdyb3VwIGluIFlQIGNvbXBhdCBtb2RlICovCisKKy8qCisgKiBDdXJyZW50bHkgaW1wbGVtZW50ZWQgZGF0YWJhc2VzLgorICovCisjZGVmaW5lIE5TREJfSE9TVFMJCSJob3N0cyIKKyNkZWZpbmUgTlNEQl9HUk9VUAkJImdyb3VwIgorI2RlZmluZSBOU0RCX0dST1VQX0NPTVBBVAkiZ3JvdXBfY29tcGF0IgorI2RlZmluZSBOU0RCX05FVEdST1VQCQkibmV0Z3JvdXAiCisjZGVmaW5lIE5TREJfTkVUV09SS1MJCSJuZXR3b3JrcyIKKyNkZWZpbmUgTlNEQl9QQVNTV0QJCSJwYXNzd2QiCisjZGVmaW5lIE5TREJfUEFTU1dEX0NPTVBBVAkicGFzc3dkX2NvbXBhdCIKKyNkZWZpbmUgTlNEQl9TSEVMTFMJCSJzaGVsbHMiCisKKy8qCisgKiBTdWdnZXN0ZWQgZGF0YWJhc2VzIHRvIGltcGxlbWVudC4KKyAqLworI2RlZmluZSBOU0RCX0FMSUFTRVMJCSJhbGlhc2VzIgorI2RlZmluZSBOU0RCX0FVVEgJCSJhdXRoIgorI2RlZmluZSBOU0RCX0FVVE9NT1VOVAkJImF1dG9tb3VudCIKKyNkZWZpbmUgTlNEQl9CT09UUEFSQU1TCQkiYm9vdHBhcmFtcyIKKyNkZWZpbmUgTlNEQl9FVEhFUlMJCSJldGhlcnMiCisjZGVmaW5lIE5TREJfRVhQT1JUUwkJImV4cG9ydHMiCisjZGVmaW5lIE5TREJfTkVUTUFTS1MJCSJuZXRtYXNrcyIKKyNkZWZpbmUgTlNEQl9QSE9ORVMJCSJwaG9uZXMiCisjZGVmaW5lIE5TREJfUFJJTlRDQVAJCSJwcmludGNhcCIKKyNkZWZpbmUgTlNEQl9QUk9UT0NPTFMJCSJwcm90b2NvbHMiCisjZGVmaW5lIE5TREJfUkVNT1RFCQkicmVtb3RlIgorI2RlZmluZSBOU0RCX1JQQwkJInJwYyIKKyNkZWZpbmUgTlNEQl9TRU5ETUFJTFZBUlMJInNlbmRtYWlsdmFycyIKKyNkZWZpbmUgTlNEQl9TRVJWSUNFUwkJInNlcnZpY2VzIgorI2RlZmluZSBOU0RCX1RFUk1DQVAJCSJ0ZXJtY2FwIgorI2RlZmluZSBOU0RCX1RUWVMJCSJ0dHlzIgorCisvKgorICogbnNfZHRhYiBgY2FsbGJhY2snIGZ1bmN0aW9uIHNpZ25hdHVyZS4KKyAqLwordHlwZWRlZglpbnQgKCpuc3NfbWV0aG9kKSh2b2lkICosIHZvaWQgKiwgdmFfbGlzdCk7CisKKy8qCisgKiBuc19kdGFiIC0gYG5zc3dpdGNoIGRpc3BhdGNoIHRhYmxlJworICogQ29udGFpbnMgYW4gZW50cnkgZm9yIGVhY2ggc291cmNlIGFuZCB0aGUgYXBwcm9wcmlhdGUgZnVuY3Rpb24gdG8gY2FsbC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCWNvbnN0IGNoYXIJICpzcmM7CisJbnNzX21ldGhvZAkgY2FsbGJhY2s7CisJdm9pZAkJICpjYl9kYXRhOworfSBuc19kdGFiOworCisvKgorICogTWFjcm9zIHRvIGhlbHAgYnVpbGQgYW4gbnNfZHRhYltdCisgKi8KKyNkZWZpbmUgTlNfRklMRVNfQ0IoRixDKQl7IE5TU1JDX0ZJTEVTLAlGLAlfX1VOQ09OU1QoQykgfSwKKyNkZWZpbmUgTlNfQ09NUEFUX0NCKEYsQykJeyBOU1NSQ19DT01QQVQsCUYsCV9fVU5DT05TVChDKSB9LAorCisjaWZkZWYgSEVTSU9ECisjICAgZGVmaW5lIE5TX0ROU19DQihGLEMpCXsgTlNTUkNfRE5TLAlGLAlfX1VOQ09OU1QoQykgfSwKKyNlbHNlCisjICAgZGVmaW5lIE5TX0ROU19DQihGLEMpCisjZW5kaWYKKworI2lmZGVmIFlQCisjICAgZGVmaW5lIE5TX05JU19DQihGLEMpCXsgTlNTUkNfTklTLAlGLAlfX1VOQ09OU1QoQykgfSwKKyNlbHNlCisjICAgZGVmaW5lIE5TX05JU19DQihGLEMpCisjZW5kaWYKKworLyoKKyAqIG5zX3NyYyAtIGBuc3N3aXRjaCBzb3VyY2UnCisgKiBVc2VkIGJ5IHRoZSBuc3BhcnNlciByb3V0aW5lcyB0byBzdG9yZSBhIG1hcHBpbmcgYmV0d2VlbiBhIHNvdXJjZQorICogYW5kIGl0cyBkaXNwYXRjaCBjb250cm9sIGZsYWdzIGZvciBhIGdpdmVuIGRhdGFiYXNlLgorICovCit0eXBlZGVmIHN0cnVjdCB7CisJY29uc3QgY2hhcgkqbmFtZTsKKwl1aW50MzJfdAkgZmxhZ3M7Cit9IG5zX3NyYzsKKworCisjaWYgMAorLyoKKyAqIERlZmF1bHQgc291cmNlbGlzdHMgKGlmIG5zc3dpdGNoLmNvbmYgaXMgbWlzc2luZywgY29ycnVwdCwKKyAqIG9yIHRoZSByZXF1ZXN0ZWQgZGF0YWJhc2UgZG9lc24ndCBoYXZlIGFuIGVudHJ5KQorICovCitleHRlcm4gY29uc3QgbnNfc3JjIF9fbnNkZWZhdWx0c3JjW107CitleHRlcm4gY29uc3QgbnNfc3JjIF9fbnNkZWZhdWx0Y29tcGF0W107CitleHRlcm4gY29uc3QgbnNfc3JjIF9fbnNkZWZhdWx0Y29tcGF0X2ZvcmNlYWxsW107CitleHRlcm4gY29uc3QgbnNfc3JjIF9fbnNkZWZhdWx0ZmlsZXNbXTsKK2V4dGVybiBjb25zdCBuc19zcmMgX19uc2RlZmF1bHRmaWxlc19mb3JjZWFsbFtdOworZXh0ZXJuIGNvbnN0IG5zX3NyYyBfX25zZGVmYXVsdG5pc1tdOworZXh0ZXJuIGNvbnN0IG5zX3NyYyBfX25zZGVmYXVsdG5pc19mb3JjZWFsbFtdOworI2VuZGlmCisKKy8qCisgKiBuc19tdGFiIC0gYG5zc3dpdGNoIG1ldGhvZCB0YWJsZScKKyAqIEFuIG5zc3dpdGNoIG1vZHVsZSBwcm92aWRlcyBhIG1hcHBpbmcgZnJvbSAoZGF0YWJhc2UgbmFtZSwgbWV0aG9kIG5hbWUpCisgKiB0dXBsZXMgdG8gdGhlIG5zc19tZXRob2QgYW5kIGFzc29jaWF0ZWQgY2FsbGJhY2sgZGF0YS4gIEVmZmVjdGl2ZWx5LAorICogbnNfZHRhYiwgYnV0IHVzZWQgZm9yIGR5bmFtaWNhbGx5IGxvYWRlZCBtb2R1bGVzLgorICovCit0eXBlZGVmIHN0cnVjdCB7CisJY29uc3QgY2hhcgkqZGF0YWJhc2U7CisJY29uc3QgY2hhcgkqbmFtZTsKKwluc3NfbWV0aG9kCSBtZXRob2Q7CisJdm9pZAkJKm1kYXRhOworfSBuc19tdGFiOworCisvKgorICogbnNzX21vZHVsZV9yZWdpc3Rlcl9mbiAtIG1vZHVsZSByZWdpc3RyYXRpb24gZnVuY3Rpb24KKyAqCWNhbGxlZCBhdCBtb2R1bGUgbG9hZAorICogbnNzX21vZHVsZV91bnJlZ2lzdGVyX2ZuIC0gbW9kdWxlIHVuLXJlZ2lzdHJhdGlvbiBmdW5jdGlvbgorICoJY2FsbGVkIGF0IG1vZHVsZSB1bmxvYWQKKyAqLwordHlwZWRlZgl2b2lkICgqbnNzX21vZHVsZV91bnJlZ2lzdGVyX2ZuKShuc19tdGFiICosIHVfaW50KTsKK3R5cGVkZWYJbnNfbXRhYiAqKCpuc3NfbW9kdWxlX3JlZ2lzdGVyX2ZuKShjb25zdCBjaGFyICosIHVfaW50ICosCisJCQkJCSAgIG5zc19tb2R1bGVfdW5yZWdpc3Rlcl9mbiAqKTsKKworI2lmZGVmIF9OU19QUklWQVRFCisKKy8qCisgKiBQcml2YXRlIGRhdGEgc3RydWN0dXJlcyBmb3IgYmFjay1lbmQgbnNzd2l0Y2ggaW1wbGVtZW50YXRpb24uCisgKi8KKworLyoKKyAqIG5zX2RidCAtIGBuc3N3aXRjaCBkYXRhYmFzZSB0aGFuZycKKyAqIEZvciBlYWNoIGRhdGFiYXNlIGluIC9ldGMvbnNzd2l0Y2guY29uZiB0aGVyZSBpcyBhIG5zX2RidCwgd2l0aCBpdHMKKyAqIG5hbWUgYW5kIGEgbGlzdCBvZiBuc19zcmMncyBjb250YWluaW5nIHRoZSBzb3VyY2UgaW5mb3JtYXRpb24uCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwljb25zdCBjaGFyCSpuYW1lOwkJLyogbmFtZSBvZiBkYXRhYmFzZSAqLworCW5zX3NyYwkJKnNyY2xpc3Q7CS8qIGxpc3Qgb2Ygc291cmNlcyAqLworCXVfaW50CQkgc3JjbGlzdHNpemU7CS8qIHNpemUgb2Ygc3JjbGlzdCAqLworfSBuc19kYnQ7CisKKy8qCisgKiBuc19tb2QgLSBgbnNzd2l0Y2ggbW9kdWxlJworICovCit0eXBlZGVmIHN0cnVjdCB7CisJY29uc3QgY2hhcgkqbmFtZTsJCS8qIG1vZHVsZSBuYW1lICovCisJdm9pZAkJKmhhbmRsZTsJLyogaGFuZGxlIGZyb20gZGxvcGVuKCkgKi8KKwluc19tdGFiCQkqbXRhYjsJCS8qIG1ldGhvZCB0YWJsZSAqLworCXVfaW50CQkgbXRhYnNpemU7CS8qIHNpemUgb2YgbXRhYiAqLworCQkJCQkvKiBjYWxsZWQgdG8gdW5sb2FkIG1vZHVsZSAqLworCW5zc19tb2R1bGVfdW5yZWdpc3Rlcl9mbiB1bnJlZ2lzdGVyOworfSBuc19tb2Q7CisKKyNlbmRpZiAvKiBfTlNfUFJJVkFURSAqLworCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKworX19CRUdJTl9ERUNMUworaW50CW5zZGlzcGF0Y2godm9pZCAqLCBjb25zdCBuc19kdGFiIFtdLCBjb25zdCBjaGFyICosCisJCQljb25zdCBjaGFyICosIGNvbnN0IG5zX3NyYyBbXSwgLi4uKTsKKworI2lmZGVmIF9OU19QUklWQVRFCitpbnQJCSBfbnNkYnRhZGRzcmMobnNfZGJ0ICosIGNvbnN0IG5zX3NyYyAqKTsKK3ZvaWQJCSBfbnNkYnRkdW1wKGNvbnN0IG5zX2RidCAqKTsKK2ludAkJIF9uc2RidHB1dChjb25zdCBuc19kYnQgKik7Cit2b2lkCQkgX25zeXllcnJvcihjb25zdCBjaGFyICopOworaW50CQkgX25zeXlsZXgodm9pZCk7CisjZW5kaWYgLyogX05TX1BSSVZBVEUgKi8KKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qICFfTlNTV0lUQ0hfSCAqLwpkaWZmIC0tZ2l0IGEvbGliYy9wcml2YXRlL3JhbmQ0OC5oIGIvbGliYy9wcml2YXRlL3JhbmQ0OC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmYTQ5ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3ByaXZhdGUvcmFuZDQ4LmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMTk5MyBNYXJ0aW4gQmlyZ21laWVyCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFlvdSBtYXkgcmVkaXN0cmlidXRlIHVubW9kaWZpZWQgb3IgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhpcyBzb3VyY2UKKyAqIGNvZGUgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBhbmQgdGhlCisgKiBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgcmV0YWluZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBgYGFzIGlzJycsIGFuZCBjb21lcyB3aXRoIG5vIHdhcnJhbnRpZXMKKyAqIG9mIGFueSBraW5kLiBJIHNoYWxsIGluIG5vIGV2ZW50IGJlIGxpYWJsZSBmb3IgYW55dGhpbmcgdGhhdCBoYXBwZW5zCisgKiB0byBhbnlvbmUvYW55dGhpbmcgd2hlbiB1c2luZyB0aGlzIHNvZnR3YXJlLgorICoKKyAqCSRPcGVuQlNEOiByYW5kNDguaCx2IDEuMyAyMDAyLzAyLzE2IDIxOjI3OjI0IG1pbGxlcnQgRXhwICQKKyAqLworCisjaWZuZGVmIF9SQU5ENDhfSF8KKyNkZWZpbmUgX1JBTkQ0OF9IXworCisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCit2b2lkCQlfX2RvcmFuZDQ4KHVuc2lnbmVkIHNob3J0WzNdKTsKKworI2RlZmluZQlSQU5ENDhfU0VFRF8wCSgweDMzMGUpCisjZGVmaW5lCVJBTkQ0OF9TRUVEXzEJKDB4YWJjZCkKKyNkZWZpbmUJUkFORDQ4X1NFRURfMgkoMHgxMjM0KQorI2RlZmluZQlSQU5ENDhfTVVMVF8wCSgweGU2NmQpCisjZGVmaW5lCVJBTkQ0OF9NVUxUXzEJKDB4ZGVlYykKKyNkZWZpbmUJUkFORDQ4X01VTFRfMgkoMHgwMDA1KQorI2RlZmluZQlSQU5ENDhfQURECSgweDAwMGIpCisKKyNlbmRpZiAvKiBfUkFORDQ4X0hfICovCmRpZmYgLS1naXQgYS9saWJjL3ByaXZhdGUvcmVzb2x2X2NhY2hlLmggYi9saWJjL3ByaXZhdGUvcmVzb2x2X2NhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q4NzZmYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvcHJpdmF0ZS9yZXNvbHZfY2FjaGUuaApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9SRVNPTFZfQ0FDSEVfSF8KKyNkZWZpbmUgX1JFU09MVl9DQUNIRV9IXworCitzdHJ1Y3QgcmVzb2x2X2NhY2hlOyAgLyogZm9yd2FyZCAqLworCisvKiBnZXQgY2FjaGUgaW5zdGFuY2UsIGNhbiBiZSBOVUxMIGlmIGNhY2hlIGlzIGRpc2FibGVkCisgKiAoZS5nLiB0aHJvdWdoIGFuIGVudmlyb25tZW50IHZhcmlhYmxlKSAqLworZXh0ZXJuIHN0cnVjdCByZXNvbHZfY2FjaGUqICBfX2dldF9yZXNfY2FjaGUodm9pZCk7CisKKy8qIHRoaXMgZ2V0cyBjYWxsZWQgZXZlcnl0aW1lIHdlIGRldGVjdCBzb21lIGNoYW5nZXMgaW4gdGhlIEROUyBjb25maWd1cmF0aW9uCisgKiBhbmQgd2lsbCBmbHVzaCB0aGUgY2FjaGUgKi8KK2V4dGVybiB2b2lkICAgX3Jlc29sdl9jYWNoZV9yZXNldCggdW5zaWduZWQgIGdlbmVyYXRpb24gKTsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBSRVNPTFZfQ0FDSEVfVU5TVVBQT1JURUQsICAvKiB0aGUgY2FjaGUgY2FuJ3QgaGFuZGxlIHRoYXQga2luZCBvZiBxdWVyaWVzICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb3IgdGhlIGFuc3dlciBidWZmZXIgaXMgdG9vIHNtYWxsICovCisgICAgUkVTT0xWX0NBQ0hFX05PVEZPVU5ELCAgICAgLyogdGhlIGNhY2hlIGRvZXNuJ3Qga25vdyBhYm91dCB0aGlzIHF1ZXJ5ICovCisgICAgUkVTT0xWX0NBQ0hFX0ZPVU5EICAgICAgICAgLyogdGhlIGNhY2hlIGZvdW5kIHRoZSBhbnN3ZXIgKi8KK30gUmVzb2x2Q2FjaGVTdGF0dXM7CisKK2V4dGVybiBSZXNvbHZDYWNoZVN0YXR1cworX3Jlc29sdl9jYWNoZV9sb29rdXAoIHN0cnVjdCByZXNvbHZfY2FjaGUqICBjYWNoZSwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiAgICAgICAgICAgcXVlcnksCisgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgIHF1ZXJ5bGVuLAorICAgICAgICAgICAgICAgICAgICAgIHZvaWQqICAgICAgICAgICAgICAgICBhbnN3ZXIsCisgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgIGFuc3dlcnNpemUsCisgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgKmFuc3dlcmxlbiApOworCisvKiBhZGQgYSAocXVlcnksYW5zd2VyKSB0byB0aGUgY2FjaGUsIG9ubHkgY2FsbCBpZiBfcmVzb2x2X2NhY2hlX2xvb2t1cAorICogZGlkIHJldHVybiBSRVNPTFZfQ0FDSEVfTk9URk9VTkQKKyAqLworZXh0ZXJuIHZvaWQKK19yZXNvbHZfY2FjaGVfYWRkKCBzdHJ1Y3QgcmVzb2x2X2NhY2hlKiAgY2FjaGUsCisgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCogICAgICAgICAgIHF1ZXJ5LAorICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICAgICAgICBxdWVyeWxlbiwKKyAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiAgICAgICAgICAgYW5zd2VyLAorICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICAgICAgICBhbnN3ZXJsZW4gKTsKKworI2VuZGlmIC8qIF9SRVNPTFZfQ0FDSEVfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvcHJpdmF0ZS9yZXNvbHZfcHJpdmF0ZS5oIGIvbGliYy9wcml2YXRlL3Jlc29sdl9wcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGYzYzZjMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvcHJpdmF0ZS9yZXNvbHZfcHJpdmF0ZS5oCkBAIC0wLDAgKzEsNDk5IEBACisvKgkkTmV0QlNEOiByZXNvbHYuaCx2IDEuMzEgMjAwNS8xMi8yNiAxOTowMTo0NyBwZXJyeSBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTgzLCAxOTg3LCAxOTg5CisgKiAgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNCBieSBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0sIEluYy4gKCJJU0MiKQorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTE5OTkgYnkgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElTQyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIElTQyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCisgKiBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKy8qCisgKglAKCMpcmVzb2x2LmgJOC4xIChCZXJrZWxleSkgNi8yLzkzCisgKglJZDogcmVzb2x2LmgsdiAxLjcuMi4xMS40LjIgMjAwNC8wNi8yNSAwMDo0MTowNSBtYXJrYSBFeHAKKyAqLworCisjaWZuZGVmIF9SRVNPTFZfUFJJVkFURV9IXworI2RlZmluZQlfUkVTT0xWX1BSSVZBVEVfSF8KKworI2luY2x1ZGUgPHJlc29sdi5oPgorI2luY2x1ZGUgInJlc29sdl9zdGF0aWMuaCIKKworLyoKKyAqIFJldmlzaW9uIGluZm9ybWF0aW9uLiAgVGhpcyBpcyB0aGUgcmVsZWFzZSBkYXRlIGluIFlZWVlNTUREIGZvcm1hdC4KKyAqIEl0IGNhbiBjaGFuZ2UgZXZlcnkgZGF5IHNvIHRoZSByaWdodCB0aGluZyB0byBkbyB3aXRoIGl0IGlzIHVzZSBpdAorICogaW4gcHJlcHJvY2Vzc29yIGNvbW1hbmRzIHN1Y2ggYXMgIiNpZiAoX19SRVMgPiAxOTkzMTEwNCkiLiAgRG8gbm90CisgKiBjb21wYXJlIGZvciBlcXVhbGl0eTsgcmF0aGVyLCB1c2UgaXQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgeW91ciByZXNvbHZlcgorICogaXMgbmV3IGVub3VnaCB0byBjb250YWluIGEgY2VydGFpbiBmZWF0dXJlLgorICovCisKKyNkZWZpbmUJX19SRVMJMjAwMzAxMjQKKworLyoKKyAqIFRoaXMgdXNlZCB0byBiZSBkZWZpbmVkIGluIHJlc19xdWVyeS5jLCBub3cgaXQncyBpbiBoZXJyb3IuYy4KKyAqIFtYWFggbm8gaXQncyBub3QuICBJdCdzIGluIGlycy9pcnNfZGF0YS5jXQorICogSXQgd2FzCisgKiBuZXZlciBleHRlcm4nZCBieSBhbnkgKi5oIGZpbGUgYmVmb3JlIGl0IHdhcyBwbGFjZWQgaGVyZS4gIEZvciB0aHJlYWQKKyAqIGF3YXJlIHByb2dyYW1zLCB0aGUgbGFzdCBoX2Vycm5vIHZhbHVlIHNldCBpcyBzdG9yZWQgaW4gcmVzLT5oX2Vycm5vLgorICoKKyAqIFhYWDoJVGhlcmUgZG9lc24ndCBzZWVtIHRvIGJlIGEgZ29vZCByZWFzb24gZm9yIGV4cG9zaW5nIFJFU19TRVRfSF9FUlJOTworICoJKGFuZCBfX2hfZXJybm9fc2V0KSB0byB0aGUgcHVibGljIHZpYSA8cmVzb2x2Lmg+LgorICogWFhYOglfX2hfZXJybm9fc2V0IGlzIHJlYWxseSBwYXJ0IG9mIElSUywgbm90IHBhcnQgb2YgdGhlIHJlc29sdmVyLgorICoJSWYgc29tZWJvZHkgd2FudHMgdG8gYnVpbGQgYW5kIHVzZSBhIHJlc29sdmVyIHRoYXQgZG9lc24ndCB1c2UgSVJTLAorICoJd2hhdCBkbyB0aGV5IGRvPyAgUGVyaGFwcyBzb21ldGhpbmcgbGlrZQorICoJCSNpZmRlZiBXQU5UX0lSUworICoJCSMgZGVmaW5lIFJFU19TRVRfSF9FUlJOTyhyLHgpIF9faF9lcnJub19zZXQocix4KQorICoJCSNlbHNlCisgKgkJIyBkZWZpbmUgUkVTX1NFVF9IX0VSUk5PKHIseCkgKGhfZXJybm8gPSAociktPnJlc19oX2Vycm5vID0gKHgpKQorICoJCSNlbmRpZgorICovCisKKyNkZWZpbmUgUkVTX1NFVF9IX0VSUk5PKHIseCkgKGhfZXJybm8gPSAociktPnJlc19oX2Vycm5vID0gKHgpKQorc3RydWN0IF9fcmVzX3N0YXRlOyAvKiBmb3J3YXJkICovCisKKy8qCisgKiBSZXNvbHZlciBjb25maWd1cmF0aW9uIGZpbGUuCisgKiBOb3JtYWxseSBub3QgcHJlc2VudCwgYnV0IG1heSBjb250YWluIHRoZSBhZGRyZXNzIG9mIHRoZQorICogaW5pdGlhbCBuYW1lIHNlcnZlcihzKSB0byBxdWVyeSBhbmQgdGhlIGRvbWFpbiBzZWFyY2ggbGlzdC4KKyAqLworCisjaWZuZGVmIF9QQVRIX1JFU0NPTkYKKyNpZmRlZiBBTkRST0lEX0NIQU5HRVMKKyNkZWZpbmUgX1BBVEhfUkVTQ09ORiAgICAgICAgIi9ldGMvcHBwL3Jlc29sdi5jb25mIgorI2Vsc2UKKyNkZWZpbmUgX1BBVEhfUkVTQ09ORiAgICAgICAgIi9ldGMvcmVzb2x2LmNvbmYiCisjZW5kaWYKKyNlbmRpZgorCit0eXBlZGVmIGVudW0geyByZXNfZ29haGVhZCwgcmVzX25leHRucywgcmVzX21vZGlmaWVkLCByZXNfZG9uZSwgcmVzX2Vycm9yIH0KKwlyZXNfc2VuZGhvb2thY3Q7CisKK3R5cGVkZWYgcmVzX3NlbmRob29rYWN0ICgqcmVzX3NlbmRfcWhvb2spKHN0cnVjdCBzb2NrYWRkciAqIGNvbnN0ICosCisJCQkJCSAgICAgIGNvbnN0IHVfY2hhciAqKiwgaW50ICosCisJCQkJCSAgICAgIHVfY2hhciAqLCBpbnQsIGludCAqKTsKKwordHlwZWRlZiByZXNfc2VuZGhvb2thY3QgKCpyZXNfc2VuZF9yaG9vaykoY29uc3Qgc3RydWN0IHNvY2thZGRyICosCisJCQkJCSAgICAgIGNvbnN0IHVfY2hhciAqLCBpbnQsIHVfY2hhciAqLAorCQkJCQkgICAgICBpbnQsIGludCAqKTsKKworc3RydWN0IHJlc19zeW0geworCWludAkJbnVtYmVyOwkgICAvKiBJZGVudGlmeWluZyBudW1iZXIsIGxpa2UgVF9NWCAqLworCWNvbnN0IGNoYXIgKgluYW1lOwkgICAvKiBJdHMgc3ltYm9saWMgbmFtZSwgbGlrZSAiTVgiICovCisJY29uc3QgY2hhciAqCWh1bWFubmFtZTsgLyogSXRzIGZ1biBuYW1lLCBsaWtlICJtYWlsIGV4Y2hhbmdlciIgKi8KK307CisKKy8qCisgKiBHbG9iYWwgZGVmaW5lcyBhbmQgdmFyaWFibGVzIGZvciByZXNvbHZlciBzdHViLgorICovCisjZGVmaW5lCU1BWE5TCQkJMwkvKiBtYXggIyBuYW1lIHNlcnZlcnMgd2UnbGwgdHJhY2sgKi8KKyNkZWZpbmUJTUFYREZMU1JDSAkJMwkvKiAjIGRlZmF1bHQgZG9tYWluIGxldmVscyB0byB0cnkgKi8KKyNkZWZpbmUJTUFYRE5TUkNICQk2CS8qIG1heCAjIGRvbWFpbnMgaW4gc2VhcmNoIHBhdGggKi8KKyNkZWZpbmUJTE9DQUxET01BSU5QQVJUUwkyCS8qIG1pbiBsZXZlbHMgaW4gbmFtZSB0aGF0IGlzICJsb2NhbCIgKi8KKworI2RlZmluZQlSRVNfVElNRU9VVAkJNQkvKiBtaW4uIHNlY29uZHMgYmV0d2VlbiByZXRyaWVzICovCisjZGVmaW5lCU1BWFJFU09MVlNPUlQJCTEwCS8qIG51bWJlciBvZiBuZXQgdG8gc29ydCBvbiAqLworI2RlZmluZQlSRVNfTUFYTkRPVFMJCTE1CS8qIHNob3VsZCByZWZsZWN0IGJpdCBmaWVsZCBzaXplICovCisjZGVmaW5lCVJFU19NQVhSRVRSQU5TCQkzMAkvKiBvbmx5IGZvciByZXNvbHYuY29uZi9SRVNfT1BUSU9OUyAqLworI2RlZmluZQlSRVNfTUFYUkVUUlkJCTUJLyogb25seSBmb3IgcmVzb2x2LmNvbmYvUkVTX09QVElPTlMgKi8KKyNkZWZpbmUJUkVTX0RGTFJFVFJZCQkyCS8qIERlZmF1bHQgIy90cmllcy4gKi8KKyNkZWZpbmUJUkVTX01BWFRJTUUJCTY1NTM1CS8qIEluZmluaXR5LCBpbiBtaWxsaXNlY29uZHMuICovCisKK3N0cnVjdCBfX3Jlc19zdGF0ZV9leHQ7CisKK3N0cnVjdCBfX3Jlc19zdGF0ZSB7CisJaW50CXJldHJhbnM7CSAJLyogcmV0cmFuc21pc3Npb24gdGltZSBpbnRlcnZhbCAqLworCWludAlyZXRyeTsJCQkvKiBudW1iZXIgb2YgdGltZXMgdG8gcmV0cmFuc21pdCAqLworI2lmZGVmIHN1bgorCXVfaW50CW9wdGlvbnM7CQkvKiBvcHRpb24gZmxhZ3MgLSBzZWUgYmVsb3cuICovCisjZWxzZQorCXVfbG9uZwlvcHRpb25zOwkJLyogb3B0aW9uIGZsYWdzIC0gc2VlIGJlbG93LiAqLworI2VuZGlmCisJaW50CW5zY291bnQ7CQkvKiBudW1iZXIgb2YgbmFtZSBzZXJ2ZXJzICovCisJc3RydWN0IHNvY2thZGRyX2luCisJCW5zYWRkcl9saXN0W01BWE5TXTsJLyogYWRkcmVzcyBvZiBuYW1lIHNlcnZlciAqLworI2RlZmluZQluc2FkZHIJbnNhZGRyX2xpc3RbMF0JCS8qIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovCisJdV9zaG9ydAlpZDsJCQkvKiBjdXJyZW50IG1lc3NhZ2UgaWQgKi8KKwljaGFyCSpkbnNyY2hbTUFYRE5TUkNIKzFdOwkvKiBjb21wb25lbnRzIG9mIGRvbWFpbiB0byBzZWFyY2ggKi8KKwljaGFyCWRlZmRuYW1lWzI1Nl07CQkvKiBkZWZhdWx0IGRvbWFpbiAoZGVwcmVjYXRlZCkgKi8KKyNpZmRlZiBzdW4KKwl1X2ludAlwZmNvZGU7CQkJLyogUkVTX1BSRl8gZmxhZ3MgLSBzZWUgYmVsb3cuICovCisjZWxzZQorCXVfbG9uZwlwZmNvZGU7CQkJLyogUkVTX1BSRl8gZmxhZ3MgLSBzZWUgYmVsb3cuICovCisjZW5kaWYKKwl1bnNpZ25lZCBuZG90czo0OwkJLyogdGhyZXNob2xkIGZvciBpbml0aWFsIGFicy4gcXVlcnkgKi8KKwl1bnNpZ25lZCBuc29ydDo0OwkJLyogbnVtYmVyIG9mIGVsZW1lbnRzIGluIHNvcnRfbGlzdFtdICovCisJY2hhcgl1bnVzZWRbM107CisJc3RydWN0IHsKKwkJc3RydWN0IGluX2FkZHIJYWRkcjsKKwkJdWludDMyX3QJbWFzazsKKwl9IHNvcnRfbGlzdFtNQVhSRVNPTFZTT1JUXTsKKyNpZmRlZiBfX09MRF9SRVNfU1RBVEUKKwljaGFyIGxvb2t1cHNbNF07CisjZWxzZQorCXJlc19zZW5kX3Fob29rIHFob29rOwkJLyogcXVlcnkgaG9vayAqLworCXJlc19zZW5kX3Job29rIHJob29rOwkJLyogcmVzcG9uc2UgaG9vayAqLworCWludAlyZXNfaF9lcnJubzsJCS8qIGxhc3Qgb25lIHNldCBmb3IgdGhpcyBjb250ZXh0ICovCisJaW50CV92Y3NvY2s7CQkvKiBQUklWQVRFOiBmb3IgcmVzX3NlbmQgVkMgaS9vICovCisJdV9pbnQJX2ZsYWdzOwkJCS8qIFBSSVZBVEU6IHNlZSBiZWxvdyAqLworCXVfaW50CV9wYWQ7CQkJLyogbWFrZSBfdSA2NCBiaXQgYWxpZ25lZCAqLworCXVuaW9uIHsKKwkJLyogT24gYW4gMzItYml0IGFyY2ggdGhpcyBtZWFucyA1MTJiIHRvdGFsLiAqLworCQljaGFyCXBhZFs3MiAtIDQqc2l6ZW9mIChpbnQpIC0gMipzaXplb2YgKHZvaWQgKildOworCQlzdHJ1Y3QgeworCQkJdWludDE2X3QJCW5zY291bnQ7CisJCQl1aW50MTZfdAkJbnN0aW1lc1tNQVhOU107CS8qIG1zLiAqLworCQkJaW50CQkJbnNzb2Nrc1tNQVhOU107CisJCQlzdHJ1Y3QgX19yZXNfc3RhdGVfZXh0ICpleHQ7CS8qIGV4dGVudGlvbiBmb3IgSVB2NiAqLworCQl9IF9leHQ7CisJfSBfdTsKKyNlbmRpZgorICAgICAgICBzdHJ1Y3QgcmVzX3N0YXRpYyAgIHJzdGF0aWNbMV07Cit9OworCit0eXBlZGVmIHN0cnVjdCBfX3Jlc19zdGF0ZSAqcmVzX3N0YXRlOworCit1bmlvbiByZXNfc29ja2FkZHJfdW5pb24geworCXN0cnVjdCBzb2NrYWRkcl9pbglzaW47CisjaWZkZWYgSU42QUREUl9BTllfSU5JVAorCXN0cnVjdCBzb2NrYWRkcl9pbjYJc2luNjsKKyNlbmRpZgorI2lmZGVmIElTQ19BTElHTjY0CisJaW50NjRfdAkJCV9fYWxpZ242NDsJLyogNjRiaXQgYWxpZ25tZW50ICovCisjZWxzZQorCWludDMyX3QJCQlfX2FsaWduMzI7CS8qIDMyYml0IGFsaWdubWVudCAqLworI2VuZGlmCisJY2hhcgkJCV9fc3BhY2VbMTI4XTsgICAvKiBtYXggc2l6ZSAqLworfTsKKworLyoKKyAqIFJlc29sdmVyIGZsYWdzICh1c2VkIHRvIGJlIGRpc2NyZXRlIHBlci1tb2R1bGUgc3RhdGljcyBpbnRzKS4KKyAqLworI2RlZmluZQlSRVNfRl9WQwkweDAwMDAwMDAxCS8qIHNvY2tldCBpcyBUQ1AgKi8KKyNkZWZpbmUJUkVTX0ZfQ09OTgkweDAwMDAwMDAyCS8qIHNvY2tldCBpcyBjb25uZWN0ZWQgKi8KKyNkZWZpbmUJUkVTX0ZfRUROUzBFUlIJMHgwMDAwMDAwNAkvKiBFRE5TMCBjYXVzZWQgZXJyb3JzICovCisjZGVmaW5lCVJFU19GX19VTlVTRUQJMHgwMDAwMDAwOAkvKiAodW51c2VkKSAqLworI2RlZmluZQlSRVNfRl9MQVNUTUFTSwkweDAwMDAwMEYwCS8qIG9yZGluYWwgc2VydmVyIG9mIGxhc3QgcmVzX25zZW5kICovCisjZGVmaW5lCVJFU19GX0xBU1RTSElGVAk0CQkvKiBiaXQgcG9zaXRpb24gb2YgTEFTVE1BU0sgImZsYWciICovCisjZGVmaW5lCVJFU19HRVRMQVNUKHJlcykgKCgocmVzKS5fZmxhZ3MgJiBSRVNfRl9MQVNUTUFTSykgPj4gUkVTX0ZfTEFTVFNISUZUKQorCisvKiByZXNfZmluZHpvbmVjdXQyKCkgb3B0aW9ucyAqLworI2RlZmluZQlSRVNfRVhIQVVTVElWRQkweDAwMDAwMDAxCS8qIGFsd2F5cyBkbyBhbGwgcXVlcmllcyAqLworI2RlZmluZQlSRVNfSVBWNE9OTFkJMHgwMDAwMDAwMgkvKiBJUHY0IG9ubHkgKi8KKyNkZWZpbmUJUkVTX0lQVjZPTkxZCTB4MDAwMDAwMDQJLyogSVB2NiBvbmx5ICovCisKKy8qCisgKiBSZXNvbHZlciBvcHRpb25zIChrZWVwIHRoZXNlIGluIHN5bmNoIHdpdGggcmVzX2RlYnVnLmMsIHBsZWFzZSkKKyAqLworI2RlZmluZSBSRVNfSU5JVAkweDAwMDAwMDAxCS8qIGFkZHJlc3MgaW5pdGlhbGl6ZWQgKi8KKyNkZWZpbmUgUkVTX0RFQlVHCTB4MDAwMDAwMDIJLyogcHJpbnQgZGVidWcgbWVzc2FnZXMgKi8KKyNkZWZpbmUgUkVTX0FBT05MWQkweDAwMDAwMDA0CS8qIGF1dGhvcml0YXRpdmUgYW5zd2VycyBvbmx5ICghSU1QTCkqLworI2RlZmluZSBSRVNfVVNFVkMJMHgwMDAwMDAwOAkvKiB1c2UgdmlydHVhbCBjaXJjdWl0ICovCisjZGVmaW5lIFJFU19QUklNQVJZCTB4MDAwMDAwMTAJLyogcXVlcnkgcHJpbWFyeSBzZXJ2ZXIgb25seSAoIUlNUEwpICovCisjZGVmaW5lIFJFU19JR05UQwkweDAwMDAwMDIwCS8qIGlnbm9yZSB0cnVjYXRpb24gZXJyb3JzICovCisjZGVmaW5lIFJFU19SRUNVUlNFCTB4MDAwMDAwNDAJLyogcmVjdXJzaW9uIGRlc2lyZWQgKi8KKyNkZWZpbmUgUkVTX0RFRk5BTUVTCTB4MDAwMDAwODAJLyogdXNlIGRlZmF1bHQgZG9tYWluIG5hbWUgKi8KKyNkZWZpbmUgUkVTX1NUQVlPUEVOCTB4MDAwMDAxMDAJLyogS2VlcCBUQ1Agc29ja2V0IG9wZW4gKi8KKyNkZWZpbmUgUkVTX0ROU1JDSAkweDAwMDAwMjAwCS8qIHNlYXJjaCB1cCBsb2NhbCBkb21haW4gdHJlZSAqLworI2RlZmluZQlSRVNfSU5TRUNVUkUxCTB4MDAwMDA0MDAJLyogdHlwZSAxIHNlY3VyaXR5IGRpc2FibGVkICovCisjZGVmaW5lCVJFU19JTlNFQ1VSRTIJMHgwMDAwMDgwMAkvKiB0eXBlIDIgc2VjdXJpdHkgZGlzYWJsZWQgKi8KKyNkZWZpbmUJUkVTX05PQUxJQVNFUwkweDAwMDAxMDAwCS8qIHNodXRzIG9mZiBIT1NUQUxJQVNFUyBmZWF0dXJlICovCisjZGVmaW5lCVJFU19VU0VfSU5FVDYJMHgwMDAwMjAwMAkvKiB1c2UvbWFwIElQdjYgaW4gZ2V0aG9zdGJ5bmFtZSgpICovCisjZGVmaW5lIFJFU19ST1RBVEUJMHgwMDAwNDAwMAkvKiByb3RhdGUgbnMgbGlzdCBhZnRlciBlYWNoIHF1ZXJ5ICovCisjZGVmaW5lCVJFU19OT0NIRUNLTkFNRQkweDAwMDA4MDAwCS8qIGRvIG5vdCBjaGVjayBuYW1lcyBmb3Igc2FuaXR5LiAqLworI2RlZmluZQlSRVNfS0VFUFRTSUcJMHgwMDAxMDAwMAkvKiBkbyBub3Qgc3RyaXAgVFNJRyByZWNvcmRzICovCisjZGVmaW5lCVJFU19CTEFTVAkweDAwMDIwMDAwCS8qIGJsYXN0IGFsbCByZWN1cnNpdmUgc2VydmVycyAqLworI2RlZmluZSBSRVNfTk9UTERRVUVSWQkweDAwMTAwMDAwCS8qIGRvbid0IHVucXVhbGlmaWVkIG5hbWUgYXMgYSB0bGQgKi8KKyNkZWZpbmUgUkVTX1VTRV9ETlNTRUMJMHgwMDIwMDAwMAkvKiB1c2UgRE5TU0VDIHVzaW5nIE9LIGJpdCBpbiBPUFQgKi8KKy8qICNkZWZpbmUgUkVTX0RFQlVHMgkweDAwNDAwMDAwICovCS8qIG5zbG9va3VwIGludGVybmFsICovCisvKiBLQU1FIGV4dGVuc2lvbnM6IHVzZSBoaWdoZXIgYml0IHRvIGF2b2lkIGNvbmZsaWN0IHdpdGggSVNDIHVzZSAqLworI2RlZmluZSBSRVNfVVNFX0ROQU1FCTB4MTAwMDAwMDAJLyogdXNlIEROQU1FICovCisjZGVmaW5lIFJFU19VU0VfRUROUzAJMHg0MDAwMDAwMAkvKiB1c2UgRUROUzAgaWYgY29uZmlndXJlZCAqLworI2RlZmluZSBSRVNfTk9fTklCQkxFMgkweDgwMDAwMDAwCS8qIGRpc2FibGUgYWx0ZXJuYXRlIG5pYmJsZSBsb29rdXAgKi8KKworI2RlZmluZSBSRVNfREVGQVVMVAkoUkVTX1JFQ1VSU0UgfCBSRVNfREVGTkFNRVMgfCBcCisJCQkgUkVTX0ROU1JDSCB8IFJFU19OT19OSUJCTEUyKQorCisvKgorICogUmVzb2x2ZXIgInBmY29kZSIgdmFsdWVzLiAgVXNlZCBieSBkaWcuCisgKi8KKyNkZWZpbmUgUkVTX1BSRl9TVEFUUwkweDAwMDAwMDAxCisjZGVmaW5lIFJFU19QUkZfVVBEQVRFCTB4MDAwMDAwMDIKKyNkZWZpbmUgUkVTX1BSRl9DTEFTUyAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgUkVTX1BSRl9DTUQJMHgwMDAwMDAwOAorI2RlZmluZSBSRVNfUFJGX1FVRVMJMHgwMDAwMDAxMAorI2RlZmluZSBSRVNfUFJGX0FOUwkweDAwMDAwMDIwCisjZGVmaW5lIFJFU19QUkZfQVVUSAkweDAwMDAwMDQwCisjZGVmaW5lIFJFU19QUkZfQURECTB4MDAwMDAwODAKKyNkZWZpbmUgUkVTX1BSRl9IRUFEMQkweDAwMDAwMTAwCisjZGVmaW5lIFJFU19QUkZfSEVBRDIJMHgwMDAwMDIwMAorI2RlZmluZSBSRVNfUFJGX1RUTElECTB4MDAwMDA0MDAKKyNkZWZpbmUgUkVTX1BSRl9IRUFEWAkweDAwMDAwODAwCisjZGVmaW5lIFJFU19QUkZfUVVFUlkJMHgwMDAwMTAwMAorI2RlZmluZSBSRVNfUFJGX1JFUExZCTB4MDAwMDIwMDAKKyNkZWZpbmUgUkVTX1BSRl9JTklUCTB4MDAwMDQwMDAKKyNkZWZpbmUgUkVTX1BSRl9UUlVOQwkweDAwMDA4MDAwCisvKgkJCTB4MDAwMTAwMDAJKi8KKworLyogVGhpbmdzIGludm9sdmluZyBhbiBpbnRlcm5hbCAoc3RhdGljKSByZXNvbHZlciBjb250ZXh0LiAqLworX19CRUdJTl9ERUNMUworZXh0ZXJuIHN0cnVjdCBfX3Jlc19zdGF0ZSAqX19yZXNfZ2V0X3N0YXRlKHZvaWQpOworZXh0ZXJuIHZvaWQgX19yZXNfcHV0X3N0YXRlKHN0cnVjdCBfX3Jlc19zdGF0ZSAqKTsKKworI2lmbmRlZiBBTkRST0lEX0NIQU5HRVMKKy8qCisgKiBTb3VyY2UgYW5kIEJpbmFyeSBjb21wYXRpYmlsaXR5OyBfcmVzIHdpbGwgbm90IHdvcmsgcHJvcGVybHkKKyAqIHdpdGggbXVsdGktdGhyZWFkZWQgcHJvZ3JhbXMuCisgKi8KK2V4dGVybiBzdHJ1Y3QgX19yZXNfc3RhdGUgKl9fcmVzX3N0YXRlKHZvaWQpOworI2RlZmluZSBfcmVzICgqX19yZXNfc3RhdGUoKSkKKyNlbmRpZgorCitfX0VORF9ERUNMUworCisjaWZuZGVmIF9fQklORF9OT1NUQVRJQworI2RlZmluZSBmcF9ucXVlcnkJCV9fZnBfbnF1ZXJ5CisjZGVmaW5lIGZwX3F1ZXJ5CQlfX2ZwX3F1ZXJ5CisjZGVmaW5lIGhvc3RhbGlhcwkJX19ob3N0YWxpYXMKKyNkZWZpbmUgcF9xdWVyeQkJCV9fcF9xdWVyeQorI2RlZmluZSByZXNfY2xvc2UJCV9fcmVzX2Nsb3NlCisjZGVmaW5lIHJlc19vcHQJCQlfX3Jlc19vcHQKKyNkZWZpbmUgcmVzX2lzb3Vyc2VydmVyCQlfX3Jlc19pc291cnNlcnZlcgorI2RlZmluZQlyZXNfcXVlcnlkb21haW4JCV9fcmVzX3F1ZXJ5ZG9tYWluCisjZGVmaW5lIHJlc19zZW5kCQlfX3Jlc19zZW5kCisjZGVmaW5lIHJlc19zZW5kc2lnbmVkCQlfX3Jlc19zZW5kc2lnbmVkCisKKyNpZmRlZiBCSU5EX1JFU19QT1NJWDMKKyNkZWZpbmUJZG5fZXhwYW5kCV9fZG5fZXhwYW5kCisjZGVmaW5lCXJlc19pbml0CV9fcmVzX2luaXQKKyNkZWZpbmUJcmVzX3F1ZXJ5CV9fcmVzX3F1ZXJ5CisjZGVmaW5lCXJlc19zZWFyY2gJX19yZXNfc2VhcmNoCisjZGVmaW5lCXJlc19ta3F1ZXJ5CV9fcmVzX21rcXVlcnkKKyNlbmRpZgorCitfX0JFR0lOX0RFQ0xTCit2b2lkCQlmcF9ucXVlcnkoY29uc3QgdV9jaGFyICosIGludCwgRklMRSAqKTsKK3ZvaWQJCWZwX3F1ZXJ5KGNvbnN0IHVfY2hhciAqLCBGSUxFICopOworY29uc3QgY2hhciAqCWhvc3RhbGlhcyhjb25zdCBjaGFyICopOwordm9pZAkJcF9xdWVyeShjb25zdCB1X2NoYXIgKik7Cit2b2lkCQlyZXNfY2xvc2Uodm9pZCk7CitpbnQJCXJlc19pbml0KHZvaWQpOworaW50CQlyZXNfb3B0KGludCwgdV9jaGFyICosIGludCwgaW50KTsKK2ludAkJcmVzX2lzb3Vyc2VydmVyKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqKTsKK2ludAkJcmVzX21rcXVlcnkoaW50LCBjb25zdCBjaGFyICosIGludCwgaW50LCBjb25zdCB1X2NoYXIgKiwgaW50LCBjb25zdCB1X2NoYXIgKiwgdV9jaGFyICosIGludCk7CitpbnQJCXJlc19xdWVyeShjb25zdCBjaGFyICosIGludCwgaW50LCB1X2NoYXIgKiwgaW50KTsKK2ludAkJcmVzX3F1ZXJ5ZG9tYWluKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQsIGludCwgdV9jaGFyICosIGludCk7CitpbnQJCXJlc19zZWFyY2goY29uc3QgY2hhciAqLCBpbnQsIGludCwgdV9jaGFyICosIGludCk7CitpbnQJCXJlc19zZW5kKGNvbnN0IHVfY2hhciAqLCBpbnQsIHVfY2hhciAqLCBpbnQpOworaW50CQlyZXNfc2VuZHNpZ25lZChjb25zdCB1X2NoYXIgKiwgaW50LCBuc190c2lnX2tleSAqLCB1X2NoYXIgKiwgaW50KTsKK19fRU5EX0RFQ0xTCisjZW5kaWYKKworI2lmICFkZWZpbmVkKFNIQVJFRF9MSUJCSU5EKSB8fCBkZWZpbmVkKExJQikKKy8qCisgKiBJZiBsaWJiaW5kIGlzIGEgc2hhcmVkIG9iamVjdCAod2VsbCwgRExMIGFueXdheSkKKyAqIHRoZXNlIGV4dGVybnMgYnJlYWsgdGhlIGxpbmtlciB3aGVuIHJlc29sdi5oIGlzCisgKiBpbmNsdWRlZCBieSBhIGxpYiBjbGllbnQgKGxpa2UgbmFtZWQpCisgKiBNYWtlIHRoZW0gZ28gYXdheSBpZiBhIGNsaWVudCBpcyBpbmNsdWRpbmcgdGhpcworICoKKyAqLworZXh0ZXJuIGNvbnN0IHN0cnVjdCByZXNfc3ltIF9fcF9rZXlfc3ltc1tdOworZXh0ZXJuIGNvbnN0IHN0cnVjdCByZXNfc3ltIF9fcF9jZXJ0X3N5bXNbXTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgcmVzX3N5bSBfX3BfY2xhc3Nfc3ltc1tdOworZXh0ZXJuIGNvbnN0IHN0cnVjdCByZXNfc3ltIF9fcF90eXBlX3N5bXNbXTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgcmVzX3N5bSBfX3BfcmNvZGVfc3ltc1tdOworI2VuZGlmIC8qIFNIQVJFRF9MSUJCSU5EICovCisKKyNpZm5kZWYgQUROUk9JRF9DSEFOR0VTCisjZGVmaW5lIGI2NF9udG9wCQlfX2I2NF9udG9wCisjZGVmaW5lIGI2NF9wdG9uCQlfX2I2NF9wdG9uCisjZW5kaWYKKworI2RlZmluZSBkbl9jb21wCQkJX19kbl9jb21wCisjZGVmaW5lIGRuX2NvdW50X2xhYmVscwkJX19kbl9jb3VudF9sYWJlbHMKKyNkZWZpbmUgZG5fc2tpcG5hbWUJCV9fZG5fc2tpcG5hbWUKKyNkZWZpbmUgZnBfcmVzc3RhdAkJX19mcF9yZXNzdGF0CisjZGVmaW5lIGxvY19hdG9uCQlfX2xvY19hdG9uCisjZGVmaW5lIGxvY19udG9hCQlfX2xvY19udG9hCisjZGVmaW5lIHBfY2RuYW1lCQlfX3BfY2RuYW1lCisjZGVmaW5lIHBfY2RubmFtZQkJX19wX2Nkbm5hbWUKKyNkZWZpbmUgcF9jbGFzcwkJCV9fcF9jbGFzcworI2RlZmluZSBwX2ZxbmFtZQkJX19wX2ZxbmFtZQorI2RlZmluZSBwX2Zxbm5hbWUJCV9fcF9mcW5uYW1lCisjZGVmaW5lIHBfb3B0aW9uCQlfX3Bfb3B0aW9uCisjZGVmaW5lIHBfc2Vjc3RvZGF0ZQkJX19wX3NlY3N0b2RhdGUKKyNkZWZpbmUgcF9zZWN0aW9uCQlfX3Bfc2VjdGlvbgorI2RlZmluZSBwX3RpbWUJCQlfX3BfdGltZQorI2RlZmluZSBwX3R5cGUJCQlfX3BfdHlwZQorI2RlZmluZSBwX3Jjb2RlCQkJX19wX3Jjb2RlCisjZGVmaW5lIHBfc29ja3VuCQlfX3Bfc29ja3VuCisjZGVmaW5lIHB1dGxvbmcJCQlfX3B1dGxvbmcKKyNkZWZpbmUgcHV0c2hvcnQJCV9fcHV0c2hvcnQKKyNkZWZpbmUgcmVzX2Rub2sJCV9fcmVzX2Rub2sKKyNkZWZpbmUgcmVzX2ZpbmR6b25lY3V0CQlfX3Jlc19maW5kem9uZWN1dAorI2RlZmluZSByZXNfZmluZHpvbmVjdXQyCV9fcmVzX2ZpbmR6b25lY3V0MgorI2RlZmluZSByZXNfaG5vawkJX19yZXNfaG5vaworI2RlZmluZSByZXNfaG9zdGFsaWFzCQlfX3Jlc19ob3N0YWxpYXMKKyNkZWZpbmUgcmVzX21haWxvawkJX19yZXNfbWFpbG9rCisjZGVmaW5lIHJlc19uYW1laW5xdWVyeQkJX19yZXNfbmFtZWlucXVlcnkKKyNkZWZpbmUgcmVzX25jbG9zZQkJX19yZXNfbmNsb3NlCisjZGVmaW5lIHJlc19uaW5pdAkJX19yZXNfbmluaXQKKyNkZWZpbmUgcmVzX25ta3F1ZXJ5CQlfX3Jlc19ubWtxdWVyeQorI2RlZmluZSByZXNfcHF1ZXJ5CQlfX3Jlc19wcXVlcnkKKyNkZWZpbmUgcmVzX25xdWVyeQkJX19yZXNfbnF1ZXJ5CisjZGVmaW5lIHJlc19ucXVlcnlkb21haW4JX19yZXNfbnF1ZXJ5ZG9tYWluCisjZGVmaW5lIHJlc19uc2VhcmNoCQlfX3Jlc19uc2VhcmNoCisjZGVmaW5lIHJlc19uc2VuZAkJX19yZXNfbnNlbmQKKyNkZWZpbmUgcmVzX25zZW5kc2lnbmVkCQlfX3Jlc19uc2VuZHNpZ25lZAorI2RlZmluZSByZXNfbmlzb3Vyc2VydmVyCV9fcmVzX25pc291cnNlcnZlcgorI2RlZmluZSByZXNfb3dub2sJCV9fcmVzX293bm9rCisjZGVmaW5lIHJlc19xdWVyaWVzbWF0Y2gJX19yZXNfcXVlcmllc21hdGNoCisjZGVmaW5lIHJlc19yYW5kb21pZAkJX19yZXNfcmFuZG9taWQKKyNkZWZpbmUgc3ltX250b3AJCV9fc3ltX250b3AKKyNkZWZpbmUgc3ltX250b3MJCV9fc3ltX250b3MKKyNkZWZpbmUgc3ltX3N0b24JCV9fc3ltX3N0b24KKyNkZWZpbmUgcmVzX25vcHQJCV9fcmVzX25vcHQKKyNkZWZpbmUgcmVzX25kZXN0cm95CQlfX3Jlc19uZGVzdHJveQorI2RlZmluZQlyZXNfbmFtZXRvY2xhc3MJCV9fcmVzX25hbWV0b2NsYXNzCisjZGVmaW5lCXJlc19uYW1ldG90eXBlCQlfX3Jlc19uYW1ldG90eXBlCisjZGVmaW5lCXJlc19zZXRzZXJ2ZXJzCQlfX3Jlc19zZXRzZXJ2ZXJzCisjZGVmaW5lCXJlc19nZXRzZXJ2ZXJzCQlfX3Jlc19nZXRzZXJ2ZXJzCisjZGVmaW5lCXJlc19idWlsZHByb3RvbGlzdAlfX3Jlc19idWlsZHByb3RvbGlzdAorI2RlZmluZQlyZXNfZGVzdHJveXByb3RvbGlzdAlfX3Jlc19kZXN0cm95cHJvdG9saXN0CisjZGVmaW5lCXJlc19kZXN0cm95c2VydmljZWxpc3QJX19yZXNfZGVzdHJveXNlcnZpY2VsaXN0CisjZGVmaW5lCXJlc19nZXRfbmliYmxlc3VmZml4CV9fcmVzX2dldF9uaWJibGVzdWZmaXgKKyNkZWZpbmUJcmVzX2dldF9uaWJibGVzdWZmaXgyCV9fcmVzX2dldF9uaWJibGVzdWZmaXgyCisjZGVmaW5lCXJlc19vdXJzZXJ2ZXJfcAkJX19yZXNfb3Vyc2VydmVyX3AKKyNkZWZpbmUJcmVzX3Byb3RvY29sbmFtZQlfX3Jlc19wcm90b2NvbG5hbWUKKyNkZWZpbmUJcmVzX3Byb3RvY29sbnVtYmVyCV9fcmVzX3Byb3RvY29sbnVtYmVyCisjZGVmaW5lCXJlc19zZW5kX3NldHFob29rCV9fcmVzX3NlbmRfc2V0cWhvb2sKKyNkZWZpbmUJcmVzX3NlbmRfc2V0cmhvb2sJX19yZXNfc2VuZF9zZXRyaG9vaworI2RlZmluZQlyZXNfc2VydmljZW5hbWUJCV9fcmVzX3NlcnZpY2VuYW1lCisjZGVmaW5lCXJlc19zZXJ2aWNlbnVtYmVyCV9fcmVzX3NlcnZpY2VudW1iZXIKK19fQkVHSU5fREVDTFMKK2ludAkJcmVzX2hub2soY29uc3QgY2hhciAqKTsKK2ludAkJcmVzX293bm9rKGNvbnN0IGNoYXIgKik7CitpbnQJCXJlc19tYWlsb2soY29uc3QgY2hhciAqKTsKK2ludAkJcmVzX2Rub2soY29uc3QgY2hhciAqKTsKK2ludAkJc3ltX3N0b24oY29uc3Qgc3RydWN0IHJlc19zeW0gKiwgY29uc3QgY2hhciAqLCBpbnQgKik7Citjb25zdCBjaGFyICoJc3ltX250b3MoY29uc3Qgc3RydWN0IHJlc19zeW0gKiwgaW50LCBpbnQgKik7Citjb25zdCBjaGFyICoJc3ltX250b3AoY29uc3Qgc3RydWN0IHJlc19zeW0gKiwgaW50LCBpbnQgKik7CisjaWZuZGVmIEFORFJPSURfQ0hBTkdFUworaW50CQliNjRfbnRvcCh1X2NoYXIgY29uc3QgKiwgc2l6ZV90LCBjaGFyICosIHNpemVfdCk7CitpbnQJCWI2NF9wdG9uKGNoYXIgY29uc3QgKiwgdV9jaGFyICosIHNpemVfdCk7CisjZW5kaWYKK2ludAkJbG9jX2F0b24oY29uc3QgY2hhciAqLCB1X2NoYXIgKik7Citjb25zdCBjaGFyICoJbG9jX250b2EoY29uc3QgdV9jaGFyICosIGNoYXIgKik7CitpbnQJCWRuX3NraXBuYW1lKGNvbnN0IHVfY2hhciAqLCBjb25zdCB1X2NoYXIgKik7Cit2b2lkCQlwdXRsb25nKHVpbnQzMl90LCB1X2NoYXIgKik7Cit2b2lkCQlwdXRzaG9ydCh1aW50MTZfdCwgdV9jaGFyICopOworI2lmbmRlZiBfX3VsdHJpeF9fCit1aW50MTZfdAlfZ2V0c2hvcnQoY29uc3QgdV9jaGFyICopOwordWludDMyX3QJX2dldGxvbmcoY29uc3QgdV9jaGFyICopOworI2VuZGlmCitjb25zdCBjaGFyICoJcF9jbGFzcyhpbnQpOworY29uc3QgY2hhciAqCXBfdGltZSh1aW50MzJfdCk7Citjb25zdCBjaGFyICoJcF90eXBlKGludCk7Citjb25zdCBjaGFyICoJcF9yY29kZShpbnQpOworY29uc3QgY2hhciAqCXBfc29ja3VuKHVuaW9uIHJlc19zb2NrYWRkcl91bmlvbiwgY2hhciAqLCBzaXplX3QpOworY29uc3QgdV9jaGFyICoJcF9jZG5uYW1lKGNvbnN0IHVfY2hhciAqLCBjb25zdCB1X2NoYXIgKiwgaW50LCBGSUxFICopOworY29uc3QgdV9jaGFyICoJcF9jZG5hbWUoY29uc3QgdV9jaGFyICosIGNvbnN0IHVfY2hhciAqLCBGSUxFICopOworY29uc3QgdV9jaGFyICoJcF9mcW5uYW1lKGNvbnN0IHVfY2hhciAqLCBjb25zdCB1X2NoYXIgKiwKKwkJCSAgICAgICBpbnQsIGNoYXIgKiwgaW50KTsKK2NvbnN0IHVfY2hhciAqCXBfZnFuYW1lKGNvbnN0IHVfY2hhciAqLCBjb25zdCB1X2NoYXIgKiwgRklMRSAqKTsKK2NvbnN0IGNoYXIgKglwX29wdGlvbih1X2xvbmcpOworY2hhciAqCQlwX3NlY3N0b2RhdGUodV9sb25nKTsKK2ludAkJZG5fY291bnRfbGFiZWxzKGNvbnN0IGNoYXIgKik7CitpbnQJCWRuX2NvbXAoY29uc3QgY2hhciAqLCB1X2NoYXIgKiwgaW50LCB1X2NoYXIgKiosIHVfY2hhciAqKik7CitpbnQJCWRuX2V4cGFuZChjb25zdCB1X2NoYXIgKiwgY29uc3QgdV9jaGFyICosIGNvbnN0IHVfY2hhciAqLAorCQkJICAgICAgIGNoYXIgKiwgaW50KTsKK3VfaW50CQlyZXNfcmFuZG9taWQodm9pZCk7CitpbnQJCXJlc19uYW1laW5xdWVyeShjb25zdCBjaGFyICosIGludCwgaW50LCBjb25zdCB1X2NoYXIgKiwKKwkJCQkgICAgIGNvbnN0IHVfY2hhciAqKTsKK2ludAkJcmVzX3F1ZXJpZXNtYXRjaChjb25zdCB1X2NoYXIgKiwgY29uc3QgdV9jaGFyICosCisJCQkJICAgICAgY29uc3QgdV9jaGFyICosIGNvbnN0IHVfY2hhciAqKTsKK2NvbnN0IGNoYXIgKglwX3NlY3Rpb24oaW50LCBpbnQpOworLyogVGhpbmdzIGludm9sdmluZyBhIHJlc29sdmVyIGNvbnRleHQuICovCitpbnQJCXJlc19uaW5pdChyZXNfc3RhdGUpOworaW50CQlyZXNfbmlzb3Vyc2VydmVyKGNvbnN0IHJlc19zdGF0ZSwgY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICopOwordm9pZAkJZnBfcmVzc3RhdChjb25zdCByZXNfc3RhdGUsIEZJTEUgKik7Cit2b2lkCQlyZXNfcHF1ZXJ5KGNvbnN0IHJlc19zdGF0ZSwgY29uc3QgdV9jaGFyICosIGludCwgRklMRSAqKTsKK2NvbnN0IGNoYXIgKglyZXNfaG9zdGFsaWFzKGNvbnN0IHJlc19zdGF0ZSwgY29uc3QgY2hhciAqLCBjaGFyICosIHNpemVfdCk7CitpbnQJCXJlc19ucXVlcnkocmVzX3N0YXRlLCBjb25zdCBjaGFyICosIGludCwgaW50LCB1X2NoYXIgKiwgaW50KTsKK2ludAkJcmVzX25zZWFyY2gocmVzX3N0YXRlLCBjb25zdCBjaGFyICosIGludCwgaW50LCB1X2NoYXIgKiwgaW50KTsKK2ludAkJcmVzX25xdWVyeWRvbWFpbihyZXNfc3RhdGUsIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLAorCQkJCSAgICAgIGludCwgaW50LCB1X2NoYXIgKiwgaW50KTsKK2ludAkJcmVzX25ta3F1ZXJ5KHJlc19zdGF0ZSwgaW50LCBjb25zdCBjaGFyICosIGludCwgaW50LAorCQkJCSAgY29uc3QgdV9jaGFyICosIGludCwgY29uc3QgdV9jaGFyICosCisJCQkJICB1X2NoYXIgKiwgaW50KTsKK2ludAkJcmVzX25zZW5kKHJlc19zdGF0ZSwgY29uc3QgdV9jaGFyICosIGludCwgdV9jaGFyICosIGludCk7CitpbnQJCXJlc19uc2VuZHNpZ25lZChyZXNfc3RhdGUsIGNvbnN0IHVfY2hhciAqLCBpbnQsCisJCQkJICAgICBuc190c2lnX2tleSAqLCB1X2NoYXIgKiwgaW50KTsKK2ludAkJcmVzX2ZpbmR6b25lY3V0KHJlc19zdGF0ZSwgY29uc3QgY2hhciAqLCBuc19jbGFzcywgaW50LAorCQkJCSAgICAgY2hhciAqLCBzaXplX3QsIHN0cnVjdCBpbl9hZGRyICosIGludCk7CitpbnQJCXJlc19maW5kem9uZWN1dDIocmVzX3N0YXRlLCBjb25zdCBjaGFyICosIG5zX2NsYXNzLCBpbnQsCisJCQkJICAgICAgY2hhciAqLCBzaXplX3QsCisJCQkJICAgICAgdW5pb24gcmVzX3NvY2thZGRyX3VuaW9uICosIGludCk7Cit2b2lkCQlyZXNfbmNsb3NlKHJlc19zdGF0ZSk7CitpbnQJCXJlc19ub3B0KHJlc19zdGF0ZSwgaW50LCB1X2NoYXIgKiwgaW50LCBpbnQpOwordm9pZAkJcmVzX3NlbmRfc2V0cWhvb2socmVzX3NlbmRfcWhvb2spOwordm9pZAkJcmVzX3NlbmRfc2V0cmhvb2socmVzX3NlbmRfcmhvb2spOworaW50CQlfX3Jlc192aW5pdChyZXNfc3RhdGUsIGludCk7Cit2b2lkCQlyZXNfZGVzdHJveXNlcnZpY2VsaXN0KHZvaWQpOworY29uc3QgY2hhciAqCXJlc19zZXJ2aWNlbmFtZSh1aW50MTZfdCwgY29uc3QgY2hhciAqKTsKK2NvbnN0IGNoYXIgKglyZXNfcHJvdG9jb2xuYW1lKGludCk7Cit2b2lkCQlyZXNfZGVzdHJveXByb3RvbGlzdCh2b2lkKTsKK3ZvaWQJCXJlc19idWlsZHByb3RvbGlzdCh2b2lkKTsKK2NvbnN0IGNoYXIgKglyZXNfZ2V0X25pYmJsZXN1ZmZpeChyZXNfc3RhdGUpOworY29uc3QgY2hhciAqCXJlc19nZXRfbmliYmxlc3VmZml4MihyZXNfc3RhdGUpOwordm9pZAkJcmVzX25kZXN0cm95KHJlc19zdGF0ZSk7Cit1aW50MTZfdAlyZXNfbmFtZXRvY2xhc3MoY29uc3QgY2hhciAqLCBpbnQgKik7Cit1aW50MTZfdAlyZXNfbmFtZXRvdHlwZShjb25zdCBjaGFyICosIGludCAqKTsKK3ZvaWQJCXJlc19zZXRzZXJ2ZXJzKHJlc19zdGF0ZSwKKwkJCQkgICAgY29uc3QgdW5pb24gcmVzX3NvY2thZGRyX3VuaW9uICosIGludCk7CitpbnQJCXJlc19nZXRzZXJ2ZXJzKHJlc19zdGF0ZSwKKwkJCQkgICAgdW5pb24gcmVzX3NvY2thZGRyX3VuaW9uICosIGludCk7CisKK2ludCByZXNfZ2V0X2Ruc19jaGFuZ2VkKCk7Cit1X2ludCAgcmVzX3JhbmRvbWlkKHZvaWQpOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogIV9SRVNPTFZfUFJJVkFURV9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9wcml2YXRlL3Jlc29sdl9zdGF0aWMuaCBiL2xpYmMvcHJpdmF0ZS9yZXNvbHZfc3RhdGljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGYyYTA5NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvcHJpdmF0ZS9yZXNvbHZfc3RhdGljLmgKQEAgLTAsMCArMSwzMiBAQAorI2lmbmRlZiBfUkVTT0xWX1NUQVRJQ19ICisjZGVmaW5lIF9SRVNPTFZfU1RBVElDX0gKKworI2luY2x1ZGUgPG5ldGRiLmg+CisKKy8qIHRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIGFsbCB0aGUgdmFyaWFibGVzIHRoYXQgd2VyZSBkZWNsYXJlZAorICogJ3N0YXRpYycgaW4gdGhlIG9yaWdpbmFsIE5ldEJTRCByZXNvbHZlciBjb2RlLgorICoKKyAqIHRoaXMgY2F1c2VkIHZhc3QgYW1vdW50cyBvZiBjcmFzaGVzIGFuZCBtZW1vcnkgY29ycnVwdGlvbnMKKyAqIHdoZW4gdGhlIHJlc29sdmVyIHdhcyBiZWluZyB1c2VkIGJ5IG11bHRpcGxlIHRocmVhZHMuCisgKgorICogKG5vdGU6IHRoZSBPcGVuQlNEL0ZyZWVCU0QgcmVzb2x2ZXIgaGFzIHNpbWlsYXIgJ2lzc3VlcycpCisgKi8KKworI2RlZmluZQlNQVhBTElBU0VTCTM1CisjZGVmaW5lCU1BWEFERFJTCTM1CisKK3R5cGVkZWYgc3RydWN0IHJlc19zdGF0aWMgeworICAgIGNoYXIqICAgICAgICAgICBoX2FkZHJfcHRyc1tNQVhBRERSUyArIDFdOworICAgIGNoYXIqICAgICAgICAgICBob3N0X2FsaWFzZXNbTUFYQUxJQVNFU107CisgICAgY2hhciAgICAgICAgICAgIGhvc3RidWZbOCoxMDI0XTsKKyAgICB1X2ludDMyX3QgICAgICAgaG9zdF9hZGRyWzE2IC8gc2l6ZW9mKHVfaW50MzJfdCldOyAgLyogSVB2NCBvciBJUHY2ICovCisgICAgRklMRSogICAgICAgICAgIGhvc3RmOworICAgIGludCAgICAgICAgICAgICBzdGF5b3BlbjsKKyAgICBjb25zdCBjaGFyKiAgICAgc2VydmVudF9wdHI7CisgICAgc3RydWN0IHNlcnZlbnQgIHNlcnZlbnQ7CisgICAgc3RydWN0IGhvc3RlbnQgIGhvc3Q7Cit9ICpyZXNfc3RhdGljOworCitleHRlcm4gcmVzX3N0YXRpYyBfX3Jlc19nZXRfc3RhdGljKHZvaWQpOworCisjZW5kaWYgLyogX1JFU09MVl9TVEFUSUNfSCAqLwpkaWZmIC0tZ2l0IGEvbGliYy9wcml2YXRlL3N5c2NvbW1vbi5oIGIvbGliYy9wcml2YXRlL3N5c2NvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyOTAyNTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3ByaXZhdGUvc3lzY29tbW9uLmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIHN5c2NvbW1vbi5oCisgKgorICogQ29tbW9uIGhlYWRlciBmaWxlIGZvciBzeXN0ZW0gY2FsbCBzdHVicworICovCisKKyNkZWZpbmUgX19JTl9TWVNfQ09NTU9OCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3lzY2FsbC5oPgorCisjaW5jbHVkZSA8cG9sbC5oPgorI2luY2x1ZGUgPHNjaGVkLmg+CisjaW5jbHVkZSA8c3lzL2RpcmVudC5oPgorI2luY2x1ZGUgPHN5cy9rbG9nLmg+CisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNpbmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4KKyNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHN5cy90aW1lcy5oPgorI2luY2x1ZGUgPHN5cy91aW8uaD4KKyNpbmNsdWRlIDxzeXMvdXRpbWUuaD4KKyNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgorI2luY2x1ZGUgPHN5cy92ZnMuaD4KKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaWZkZWYgX19pMzg2X18KKyMgaW5jbHVkZSA8c3lzL3ZtODYuaD4KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9wcml2YXRlL3RocmVhZF9wcml2YXRlLmggYi9saWJjL3ByaXZhdGUvdGhyZWFkX3ByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDNmMGFiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9wcml2YXRlL3RocmVhZF9wcml2YXRlLmgKQEAgLTAsMCArMSwxNjIgQEAKKy8qICRPcGVuQlNEOiB0aHJlYWRfcHJpdmF0ZS5oLHYgMS4xOCAyMDA2LzAyLzIyIDA3OjE2OjMxIG90dG8gRXhwICQgKi8KKworLyogUFVCTElDIERPTUFJTjogTm8gUmlnaHRzIFJlc2VydmVkLiBNYXJjbyBTIEh5bWFuIDxtYXJjQHNuYWZ1Lm9yZz4gKi8KKworI2lmbmRlZiBfVEhSRUFEX1BSSVZBVEVfSF8KKyNkZWZpbmUgX1RIUkVBRF9QUklWQVRFX0hfCisKKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisKKy8qCisgKiBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgdGhyZWFkIGxpYnJhcnkgaW50ZXJmYWNlIHRvIGxpYmMuICBUaHJlYWQKKyAqIGxpYnJhcmllcyBtdXN0IGltcGxlbWVudCB0aGUgZnVuY3Rpb25zIGRlc2NyaWJlZCBoZXJlIGZvciBwcm9wZXIKKyAqIGludGVyLW9wZXJhdGlvbiB3aXRoIGxpYmMuICAgbGliYyBjb250YWlucyB3ZWFrIHZlcnNpb25zIG9mIHRoZQorICogZGVzY3JpYmVkIGZ1bmN0aW9ucyBmb3Igb3BlcmF0aW9uIGluIGEgbm9uLXRocmVhZGVkIGVudmlyb25tZW50LgorICovCisKKy8qCisgKiBUaGlzIHZhcmlhYmxlIGlzIDAgdW50aWwgYSBzZWNvbmQgdGhyZWFkIGlzIGNyZWF0ZWQuCisgKi8KK2V4dGVybiBpbnQgX19pc3RocmVhZGVkOworCisvKgorICogV2VhayBzeW1ib2xzIGFyZSB1c2VkIGluIGxpYmMgc28gdGhhdCB0aGUgdGhyZWFkIGxpYnJhcnkgY2FuCisgKiBlZmZpY2llbnRseSB3cmFwIGxpYmMgZnVuY3Rpb25zLgorICogCisgKiBVc2UgV0VBS19OQU1FKG4pIHRvIGdldCBhIGxpYmMtcHJpdmF0ZSBuYW1lIGZvciBuIChfd2Vha19uKSwKKyAqICAgICBXRUFLX0FMSUFTKG4pIHRvIGdlbmVyYXRlIHRoZSB3ZWFrIHN5bWJvbCBuIHBvaW50aW5nIHRvIF93ZWFrX24sCisgKiAgICAgV0VBS19QUk9UT1RZUEUobikgdG8gZ2VuZXJhdGUgYSBwcm90b3R5cGUgZm9yIF93ZWFrX24gKGJhc2VkIG9uIG4pLgorICovCisjZGVmaW5lIFdFQUtfTkFNRShuYW1lKQkJX19DT05DQVQoX3dlYWtfLG5hbWUpCisjZGVmaW5lIFdFQUtfQUxJQVMobmFtZSkJX193ZWFrX2FsaWFzKG5hbWUsIFdFQUtfTkFNRShuYW1lKSkKKyNpZmRlZiBfX0dOVUNfXworI2RlZmluZSBXRUFLX1BST1RPVFlQRShuYW1lKQlfX3R5cGVvZl9fKG5hbWUpIFdFQUtfTkFNRShuYW1lKQorI2Vsc2UKKyNkZWZpbmUgV0VBS19QUk9UT1RZUEUobmFtZSkJLyogdHlwZW9mKCkgb25seSBpbiBnY2MgKi8KKyNlbmRpZgorCisvKgorICogaGVscGVyIG1hY3JvIHRvIG1ha2UgdW5pcXVlIG5hbWVzIGluIHRoZSB0aHJlYWQgbmFtZXNwYWNlCisgKi8KKyNkZWZpbmUgX19USFJFQURfTkFNRShuYW1lKQlfX0NPTkNBVChfdGhyZWFkX3RhZ25hbWVfLG5hbWUpCisKK3N0cnVjdCBfX3RocmVhZF9wcml2YXRlX3RhZ190IHsKKyAgICBwdGhyZWFkX211dGV4X3QgICAgX3ByaXZhdGVfbG9jazsKKyAgICBwdGhyZWFkX2tleV90ICAgICAgX3ByaXZhdGVfa2V5OworfTsKKworI2RlZmluZSBfVEhSRUFEX1BSSVZBVEVfTVVURVgobmFtZSkgIFwKKwlzdGF0aWMgc3RydWN0IF9fdGhyZWFkX3ByaXZhdGVfdGFnX3QgIF9fVEhSRUFEX05BTUUobmFtZSkgPSB7IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVIsIC0xIH0KKyNkZWZpbmUgX1RIUkVBRF9QUklWQVRFX01VVEVYX0xPQ0sobmFtZSkgIFwKKwlwdGhyZWFkX211dGV4X2xvY2soICZfX1RIUkVBRF9OQU1FKG5hbWUpLl9wcml2YXRlX2xvY2sgKQorI2RlZmluZSBfVEhSRUFEX1BSSVZBVEVfTVVURVhfVU5MT0NLKG5hbWUpIFwKKwlwdGhyZWFkX211dGV4X3VubG9jayggJl9fVEhSRUFEX05BTUUobmFtZSkuX3ByaXZhdGVfbG9jayApCisKKyNkZWZpbmUgX1RIUkVBRF9QUklWQVRFX0tFWShuYW1lKSAgICBcCisJc3RhdGljIHN0cnVjdCBfX3RocmVhZF9wcml2YXRlX3RhZ190ICBfX1RIUkVBRF9OQU1FKG5hbWUpID0geyBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSLCAtMSB9CisKK2V4dGVybiB2b2lkKiAgX19iaW9uaWNfdGhyZWFkX3ByaXZhdGVfc3RvcmFnZSggc3RydWN0IF9fdGhyZWFkX3ByaXZhdGVfdGFnX3QqICBwdGFnLCB2b2lkKiAgc3RvcmFnZSwgc2l6ZV90ICBvYmpzaXplLCB2b2lkKiAgZXJyb3IgKTsKKworI2RlZmluZSBfVEhSRUFEX1BSSVZBVEUobmFtZSwgc3RvcmFnZSwgZXJyb3IpICAgIFwKKwlfX2Jpb25pY190aHJlYWRfcHJpdmF0ZV9zdG9yYWdlKCAmX19USFJFQURfTkFNRShuYW1lKSwgJihzdG9yYWdlKSxzaXplb2Yoc3RvcmFnZSksIGVycm9yKQorCQorI2lmIDAKKy8qCisgKiBoZWxwZXIgZnVuY3Rpb25zIHRoYXQgZXhpc3QgYXMgKHdlYWspIG51bGwgZnVuY3Rpb25zIGluIGxpYmMgYW5kCisgKiAoc3Ryb25nKSBmdW5jdGlvbnMgaW4gdGhlIHRocmVhZCBsaWJyYXJ5LiAgIFRoZXNlIGZ1bmN0aW9uczoKKyAqCisgKiBfdGhyZWFkX3RhZ19sb2NrOgorICoJbG9jayB0aGUgbXV0ZXggYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiB0YWcuICAgSWYgdGhlIGdpdmVuCisgKgl0YWcgaXMgTlVMTCBhIHRhZyBpcyBmaXJzdCBhbGxvY2F0ZWQuCisgKgorICogX3RocmVhZF90YWdfdW5sb2NrOgorICoJdW5sb2NrIHRoZSBtdXRleCBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIHRhZy4gICBJZiB0aGUgZ2l2ZW4KKyAqCXRhZyBpcyBOVUxMIGEgdGFnIGlzIGZpcnN0IGFsbG9jYXRlZC4KKyAqCisgKiBfdGhyZWFkX3RhZ19zdG9yYWdlOgorICoJcmV0dXJuIGEgcG9pbnRlciB0byBwZXIgdGhyZWFkIGluc3RhbmNlIG9mIGRhdGEgYXNzb2NpYXRlZAorICoJd2l0aCB0aGUgZ2l2ZW4gdGFnLiAgSWYgdGhlIGdpdmVuIHRhZyBpcyBOVUxMIGEgdGFnIGlzIGZpcnN0CisgKglhbGxvY2F0ZWQuCisgKi8KK3ZvaWQJX3RocmVhZF90YWdfbG9jayh2b2lkICoqKTsKK3ZvaWQJX3RocmVhZF90YWdfdW5sb2NrKHZvaWQgKiopOwordm9pZCAgICpfdGhyZWFkX3RhZ19zdG9yYWdlKHZvaWQgKiosIHZvaWQgKiwgc2l6ZV90LCB2b2lkICopOworCisvKgorICogTWFjcm9zIHVzZWQgaW4gbGliYyB0byBhY2Nlc3MgdGhyZWFkIG11dGV4LCBrZXlzLCBhbmQgcGVyIHRocmVhZCBzdG9yYWdlLgorICogX1RIUkVBRF9QUklWQVRFX0tFWSBhbmQgX1RIUkVBRF9QUklWQVRFX01VVEVYIGFyZSBkaWZmZXJlbnQgbWFjcm9zIGZvcgorICogaGlzdG9yaWNhbCByZWFzb25zLiAgIFRoZXkgZG8gdGhlIHNhbWUgdGhpbmcsIGRlZmluZSBhIHN0YXRpYyB2YXJpYWJsZQorICoga2V5ZWQgYnkgJ25hbWUnIHRoYXQgaWRlbnRpZmllcyBhIG11dGV4IGFuZCBhIGtleSB0byBpZGVudGlmeSBwZXIgdGhyZWFkCisgKiBkYXRhLgorICovCisjZGVmaW5lIF9USFJFQURfUFJJVkFURV9LRVkobmFtZSkJCQkJCVwKKwlzdGF0aWMgdm9pZCAqX19USFJFQURfTkFNRShuYW1lKQorI2RlZmluZSBfVEhSRUFEX1BSSVZBVEVfTVVURVgobmFtZSkJCQkJCVwKKwlzdGF0aWMgdm9pZCAqX19USFJFQURfTkFNRShuYW1lKQorI2RlZmluZSBfVEhSRUFEX1BSSVZBVEVfTVVURVhfTE9DSyhuYW1lKQkJCQlcCisJX3RocmVhZF90YWdfbG9jaygmKF9fVEhSRUFEX05BTUUobmFtZSkpKQorI2RlZmluZSBfVEhSRUFEX1BSSVZBVEVfTVVURVhfVU5MT0NLKG5hbWUpCQkJCVwKKwlfdGhyZWFkX3RhZ191bmxvY2soJihfX1RIUkVBRF9OQU1FKG5hbWUpKSkKKyNkZWZpbmUgX1RIUkVBRF9QUklWQVRFKGtleW5hbWUsIHN0b3JhZ2UsIGVycm9yKQkJCVwKKwlfdGhyZWFkX3RhZ19zdG9yYWdlKCYoX19USFJFQURfTkFNRShrZXluYW1lKSksICYoc3RvcmFnZSksCVwKKwkJCSAgICBzaXplb2YgKHN0b3JhZ2UpLCBlcnJvcikKKy8qCisgKiBSZXNvbHZlciBjb2RlIGlzIHNwZWNpYWwgY2FzZWQgaW4gdGhhdCBpdCB1c2VzIGdsb2JhbCBrZXlzLgorICovCitleHRlcm4gdm9pZCAqX19USFJFQURfTkFNRShfcmVzKTsKK2V4dGVybiB2b2lkICpfX1RIUkVBRF9OQU1FKF9yZXNfZXh0KTsKK2V4dGVybiB2b2lkICpfX1RIUkVBRF9OQU1FKHNlcnZfbXV0ZXgpOworI2VuZGlmCisKKy8qCisgKiBGaWxlIGRlc2NyaXB0b3IgbG9ja2luZyBkZWZpbml0aW9ucy4KKyAqLworI2RlZmluZSBGRF9SRUFECQkweDEKKyNkZWZpbmUgRkRfV1JJVEUJMHgyCisjZGVmaW5lIEZEX1JEV1IJCShGRF9SRUFEIHwgRkRfV1JJVEUpCisKK3N0cnVjdCB0aW1lc3BlYzsKK2ludAlfdGhyZWFkX2ZkX2xvY2soaW50LCBpbnQsIHN0cnVjdCB0aW1lc3BlYyAqKTsKK3ZvaWQJX3RocmVhZF9mZF91bmxvY2soaW50LCBpbnQpOworCisvKgorICogTWFjcm9zIGFyZSB1c2VkIGluIGxpYmMgY29kZSBmb3IgaGlzdG9yaWNhbCAoZGVidWcpIHJlYXNvbnMuCisgKiBEZWZpbmUgdGhlbSBoZXJlLgorICovCisjZGVmaW5lIF9GRF9MT0NLKF9mZCxfdHlwZSxfdHMpCV90aHJlYWRfZmRfbG9jayhfZmQsIF90eXBlLCBfdHMpCisjZGVmaW5lIF9GRF9VTkxPQ0soX2ZkLF90eXBlKQlfdGhyZWFkX2ZkX3VubG9jayhfZmQsIF90eXBlKQorCisKKy8qCisgKiBtYWxsb2MgbG9jay91bmxvY2sgcHJvdG90eXBlcyBhbmQgZGVmaW5pdGlvbnMKKyAqLwordm9pZAlfdGhyZWFkX21hbGxvY19pbml0KHZvaWQpOwordm9pZAlfdGhyZWFkX21hbGxvY19sb2NrKHZvaWQpOwordm9pZAlfdGhyZWFkX21hbGxvY191bmxvY2sodm9pZCk7CisKKyNkZWZpbmUgX01BTExPQ19MT0NLKCkJCWRvIHsJCQkJCVwKKwkJCQkJaWYgKF9faXN0aHJlYWRlZCkJCVwKKwkJCQkJCV90aHJlYWRfbWFsbG9jX2xvY2soKTsJXAorCQkJCX0gd2hpbGUgKDApCisjZGVmaW5lIF9NQUxMT0NfVU5MT0NLKCkJZG8gewkJCQkJXAorCQkJCQlpZiAoX19pc3RocmVhZGVkKQkJXAorCQkJCQkJX3RocmVhZF9tYWxsb2NfdW5sb2NrKCk7XAorCQkJCX0gd2hpbGUgKDApCisjZGVmaW5lIF9NQUxMT0NfTE9DS19JTklUKCkJZG8gewkJCQkJXAorCQkJCQlpZiAoX19pc3RocmVhZGVkKQkJXAorCQkJCQkJX3RocmVhZF9tYWxsb2NfaW5pdCgpO1wKKwkJCQl9IHdoaWxlICgwKQorCit2b2lkCV90aHJlYWRfYXRleGl0X2xvY2sodm9pZCk7Cit2b2lkCV90aHJlYWRfYXRleGl0X3VubG9jayh2b2lkKTsKKworI2RlZmluZSBfQVRFWElUX0xPQ0soKQkJZG8gewkJCQkJXAorCQkJCQlpZiAoX19pc3RocmVhZGVkKQkJXAorCQkJCQkJX3RocmVhZF9hdGV4aXRfbG9jaygpOwlcCisJCQkJfSB3aGlsZSAoMCkKKyNkZWZpbmUgX0FURVhJVF9VTkxPQ0soKQlkbyB7CQkJCQlcCisJCQkJCWlmIChfX2lzdGhyZWFkZWQpCQlcCisJCQkJCQlfdGhyZWFkX2F0ZXhpdF91bmxvY2soKTtcCisJCQkJfSB3aGlsZSAoMCkKKworI2VuZGlmIC8qIF9USFJFQURfUFJJVkFURV9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9hc3ByaW50Zi5jIGIvbGliYy9zdGRpby9hc3ByaW50Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczNzkxNDAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGlvL2FzcHJpbnRmLmMKQEAgLTAsMCArMSw2MCBAQAorLyoJJE9wZW5CU0Q6IGFzcHJpbnRmLmMsdiAxLjE1IDIwMDUvMTAvMTAgMTI6MDA6NTIgZXNwaWUgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk5NyBUb2RkIEMuIE1pbGxlciA8VG9kZC5NaWxsZXJAY291cnRlc2FuLmNvbT4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgImxvY2FsLmgiCisKK2ludAorYXNwcmludGYoY2hhciAqKnN0ciwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJaW50IHJldDsKKwl2YV9saXN0IGFwOworCUZJTEUgZjsKKwl1bnNpZ25lZCBjaGFyICpfYmFzZTsKKworCWYuX2ZpbGUgPSAtMTsKKwlmLl9mbGFncyA9IF9fU1dSIHwgX19TU1RSIHwgX19TQUxDOworCWYuX2JmLl9iYXNlID0gZi5fcCA9ICh1bnNpZ25lZCBjaGFyICopbWFsbG9jKDEyOCk7CisJaWYgKGYuX2JmLl9iYXNlID09IE5VTEwpCisJCWdvdG8gZXJyOworCWYuX2JmLl9zaXplID0gZi5fdyA9IDEyNzsJCS8qIExlYXZlIHJvb20gZm9yIHRoZSBOVUwgKi8KKwl2YV9zdGFydChhcCwgZm10KTsKKwlyZXQgPSB2ZnByaW50ZigmZiwgZm10LCBhcCk7CisgIHZhX2VuZChhcCk7CisJaWYgKHJldCA9PSAtMSkKKwkJZ290byBlcnI7CisJKmYuX3AgPSAnXDAnOworCV9iYXNlID0gcmVhbGxvYyhmLl9iZi5fYmFzZSwgcmV0ICsgMSk7CisJaWYgKF9iYXNlID09IE5VTEwpCisJCWdvdG8gZXJyOworCSpzdHIgPSAoY2hhciAqKV9iYXNlOworCXJldHVybiAocmV0KTsKKworZXJyOgorCWlmIChmLl9iZi5fYmFzZSkgeworCQlmcmVlKGYuX2JmLl9iYXNlKTsKKwkJZi5fYmYuX2Jhc2UgPSBOVUxMOworCX0KKwkqc3RyID0gTlVMTDsKKwllcnJubyA9IEVOT01FTTsKKwlyZXR1cm4gKC0xKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vY2xyZXJyLmMgYi9saWJjL3N0ZGlvL2NscmVyci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwZjE5OTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGlvL2NscmVyci5jCkBAIC0wLDAgKzEsNDMgQEAKKy8qCSRPcGVuQlNEOiBjbHJlcnIuYyx2IDEuNiAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI3VuZGVmCWNsZWFyZXJyCisKK3ZvaWQKK2NsZWFyZXJyKEZJTEUgKmZwKQoreworCWZsb2NrZmlsZShmcCk7CisJX19zY2xlYXJlcnIoZnApOworCWZ1bmxvY2tmaWxlKGZwKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vZmNsb3NlLmMgYi9saWJjL3N0ZGlvL2ZjbG9zZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5NDI5MmIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGlvL2ZjbG9zZS5jCkBAIC0wLDAgKzEsNjUgQEAKKy8qCSRPcGVuQlNEOiBmY2xvc2UuYyx2IDEuNiAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKworLyogQklPTklDOiByZW1vdmUgYW55IGZpbGUgbG9jayBhc3NvY2lhdGVkIHdpdGggYSBGSUxFKiBwb2ludGVyICovCitleHRlcm4gdm9pZCBfX2ZyZW1vdmVsb2NrKEZJTEUgKmZwKTsKKworaW50CitmY2xvc2UoRklMRSAqZnApCit7CisJaW50IHI7CisKKwlpZiAoZnAtPl9mbGFncyA9PSAwKSB7CS8qIG5vdCBvcGVuISAqLworCQllcnJubyA9IEVCQURGOworCQlyZXR1cm4gKEVPRik7CisJfQorCVdDSU9fRlJFRShmcCk7CisJciA9IGZwLT5fZmxhZ3MgJiBfX1NXUiA/IF9fc2ZsdXNoKGZwKSA6IDA7CisJaWYgKGZwLT5fY2xvc2UgIT0gTlVMTCAmJiAoKmZwLT5fY2xvc2UpKGZwLT5fY29va2llKSA8IDApCisJCXIgPSBFT0Y7CisJaWYgKGZwLT5fZmxhZ3MgJiBfX1NNQkYpCisJCWZyZWUoKGNoYXIgKilmcC0+X2JmLl9iYXNlKTsKKwlpZiAoSEFTVUIoZnApKQorCQlGUkVFVUIoZnApOworCWlmIChIQVNMQihmcCkpCisJCUZSRUVMQihmcCk7CisJZnAtPl9mbGFncyA9IDA7CQkvKiBSZWxlYXNlIHRoaXMgRklMRSBmb3IgcmV1c2UuICovCisJZnAtPl9yID0gZnAtPl93ID0gMDsJLyogTWVzcyB1cCBpZiByZWFjY2Vzc2VkLiAqLworCV9fZnJlbW92ZWxvY2soZnApOworCXJldHVybiAocik7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL2Zkb3Blbi5jIGIvbGliYy9zdGRpby9mZG9wZW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGY2MDljCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRpby9mZG9wZW4uYwpAQCAtMCwwICsxLDc2IEBACisvKgkkT3BlbkJTRDogZmRvcGVuLmMsdiAxLjUgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKworRklMRSAqCitmZG9wZW4oaW50IGZkLCBjb25zdCBjaGFyICptb2RlKQoreworCUZJTEUgKmZwOworCWludCBmbGFncywgb2ZsYWdzLCBmZGZsYWdzLCB0bXA7CisKKwlpZiAoKGZsYWdzID0gX19zZmxhZ3MobW9kZSwgJm9mbGFncykpID09IDApCisJCXJldHVybiAoTlVMTCk7CisKKwkvKiBNYWtlIHN1cmUgdGhlIG1vZGUgdGhlIHVzZXIgd2FudHMgaXMgYSBzdWJzZXQgb2YgdGhlIGFjdHVhbCBtb2RlLiAqLworCWlmICgoZmRmbGFncyA9IGZjbnRsKGZkLCBGX0dFVEZMLCAwKSkgPCAwKQorCQlyZXR1cm4gKE5VTEwpOworCXRtcCA9IGZkZmxhZ3MgJiBPX0FDQ01PREU7CisJaWYgKHRtcCAhPSBPX1JEV1IgJiYgKHRtcCAhPSAob2ZsYWdzICYgT19BQ0NNT0RFKSkpIHsKKwkJZXJybm8gPSBFSU5WQUw7CisJCXJldHVybiAoTlVMTCk7CisJfQorCisJaWYgKChmcCA9IF9fc2ZwKCkpID09IE5VTEwpCisJCXJldHVybiAoTlVMTCk7CisJZnAtPl9mbGFncyA9IGZsYWdzOworCS8qCisJICogSWYgb3BlbmVkIGZvciBhcHBlbmRpbmcsIGJ1dCB1bmRlcmx5aW5nIGRlc2NyaXB0b3IgZG9lcyBub3QgaGF2ZQorCSAqIE9fQVBQRU5EIGJpdCBzZXQsIGFzc2VydCBfX1NBUFAgc28gdGhhdCBfX3N3cml0ZSgpIHdpbGwgbHNlZWsgdG8KKwkgKiBlbmQgYmVmb3JlIGVhY2ggd3JpdGUuCisJICovCisJaWYgKChvZmxhZ3MgJiBPX0FQUEVORCkgJiYgIShmZGZsYWdzICYgT19BUFBFTkQpKQorCQlmcC0+X2ZsYWdzIHw9IF9fU0FQUDsKKwlmcC0+X2ZpbGUgPSBmZDsKKwlmcC0+X2Nvb2tpZSA9IGZwOworCWZwLT5fcmVhZCA9IF9fc3JlYWQ7CisJZnAtPl93cml0ZSA9IF9fc3dyaXRlOworCWZwLT5fc2VlayA9IF9fc3NlZWs7CisJZnAtPl9jbG9zZSA9IF9fc2Nsb3NlOworCXJldHVybiAoZnApOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9mZW9mLmMgYi9saWJjL3N0ZGlvL2Zlb2YuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjc0MmRhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRpby9mZW9mLmMKQEAgLTAsMCArMSw0NSBAQAorLyoJJE9wZW5CU0Q6IGZlb2YuYyx2IDEuNSAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisvKgorICogQSBzdWJyb3V0aW5lIHZlcnNpb24gb2YgdGhlIG1hY3JvIGZlb2YuCisgKi8KKyN1bmRlZiBmZW9mCisKK2ludAorZmVvZihGSUxFICpmcCkKK3sKKwlyZXR1cm4gKF9fc2Zlb2YoZnApKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vZmVycm9yLmMgYi9saWJjL3N0ZGlvL2ZlcnJvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMmNmMDEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGlvL2ZlcnJvci5jCkBAIC0wLDAgKzEsNDUgQEAKKy8qCSRPcGVuQlNEOiBmZXJyb3IuYyx2IDEuNSAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisvKgorICogQSBzdWJyb3V0aW5lIHZlcnNpb24gb2YgdGhlIG1hY3JvIGZlcnJvci4KKyAqLworI3VuZGVmIGZlcnJvcgorCitpbnQKK2ZlcnJvcihGSUxFICpmcCkKK3sKKwlyZXR1cm4gKF9fc2ZlcnJvcihmcCkpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9mZmx1c2guYyBiL2xpYmMvc3RkaW8vZmZsdXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y3MmFkOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkaW8vZmZsdXNoLmMKQEAgLTAsMCArMSw4MiBAQAorLyoJJE9wZW5CU0Q6IGZmbHVzaC5jLHYgMS41IDIwMDUvMDgvMDggMDg6MDU6MzYgZXNwaWUgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorCisvKiBGbHVzaCBhIHNpbmdsZSBmaWxlLCBvciAoaWYgZnAgaXMgTlVMTCkgYWxsIGZpbGVzLiAgKi8KK2ludAorZmZsdXNoKEZJTEUgKmZwKQoreworCisJaWYgKGZwID09IE5VTEwpCisJCXJldHVybiAoX2Z3YWxrKF9fc2ZsdXNoKSk7CisJaWYgKChmcC0+X2ZsYWdzICYgKF9fU1dSIHwgX19TUlcpKSA9PSAwKSB7CisJCWVycm5vID0gRUJBREY7CisJCXJldHVybiAoRU9GKTsKKwl9CisJcmV0dXJuIChfX3NmbHVzaChmcCkpOworfQorCitpbnQKK19fc2ZsdXNoKEZJTEUgKmZwKQoreworCXVuc2lnbmVkIGNoYXIgKnA7CisJaW50IG4sIHQ7CisKKwl0ID0gZnAtPl9mbGFnczsKKwlpZiAoKHQgJiBfX1NXUikgPT0gMCkKKwkJcmV0dXJuICgwKTsKKworCWlmICgocCA9IGZwLT5fYmYuX2Jhc2UpID09IE5VTEwpCisJCXJldHVybiAoMCk7CisKKwluID0gZnAtPl9wIC0gcDsJCS8qIHdyaXRlIHRoaXMgbXVjaCAqLworCisJLyoKKwkgKiBTZXQgdGhlc2UgaW1tZWRpYXRlbHkgdG8gYXZvaWQgcHJvYmxlbXMgd2l0aCBsb25nam1wIGFuZCB0byBhbGxvdworCSAqIGV4Y2hhbmdlIGJ1ZmZlcmluZyAodmlhIHNldHZidWYpIGluIHVzZXIgd3JpdGUgZnVuY3Rpb24uCisJICovCisJZnAtPl9wID0gcDsKKwlmcC0+X3cgPSB0ICYgKF9fU0xCRnxfX1NOQkYpID8gMCA6IGZwLT5fYmYuX3NpemU7CisKKwlmb3IgKDsgbiA+IDA7IG4gLT0gdCwgcCArPSB0KSB7CisJCXQgPSAoKmZwLT5fd3JpdGUpKGZwLT5fY29va2llLCAoY2hhciAqKXAsIG4pOworCQlpZiAodCA8PSAwKSB7CisJCQlmcC0+X2ZsYWdzIHw9IF9fU0VSUjsKKwkJCXJldHVybiAoRU9GKTsKKwkJfQorCX0KKwlyZXR1cm4gKDApOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9mZ2V0Yy5jIGIvbGliYy9zdGRpby9mZ2V0Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzZTI5NDgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGlvL2ZnZXRjLmMKQEAgLTAsMCArMSw0MCBAQAorLyoJJE9wZW5CU0Q6IGZnZXRjLmMsdiAxLjUgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKworaW50CitmZ2V0YyhGSUxFICpmcCkKK3sKKwlyZXR1cm4gKF9fc2dldGMoZnApKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vZmdldGxuLmMgYi9saWJjL3N0ZGlvL2ZnZXRsbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0NmUxYjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGlvL2ZnZXRsbi5jCkBAIC0wLDAgKzEsMTUwIEBACisvKgkkT3BlbkJTRDogZmdldGxuLmMsdiAxLjcgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorCisvKgorICogRXhwYW5kIHRoZSBsaW5lIGJ1ZmZlci4gIFJldHVybiAtMSBvbiBlcnJvci4KKyNpZmRlZiBub3RkZWYKKyAqIFRoZSBgbmV3IHNpemUnIGRvZXMgbm90IGFjY291bnQgZm9yIGEgdGVybWluYXRpbmcgJ1wwJywKKyAqIHNvIHdlIGFkZCAxIGhlcmUuCisjZW5kaWYKKyAqLworaW50CitfX3NsYmV4cGFuZChGSUxFICpmcCwgc2l6ZV90IG5ld3NpemUpCit7CisJdm9pZCAqcDsKKworI2lmZGVmIG5vdGRlZgorCSsrbmV3c2l6ZTsKKyNlbmRpZgorCWlmICgoc2l6ZV90KWZwLT5fbGIuX3NpemUgPj0gbmV3c2l6ZSkKKwkJcmV0dXJuICgwKTsKKwlpZiAoKHAgPSByZWFsbG9jKGZwLT5fbGIuX2Jhc2UsIG5ld3NpemUpKSA9PSBOVUxMKQorCQlyZXR1cm4gKC0xKTsKKwlmcC0+X2xiLl9iYXNlID0gcDsKKwlmcC0+X2xiLl9zaXplID0gbmV3c2l6ZTsKKwlyZXR1cm4gKDApOworfQorCisvKgorICogR2V0IGFuIGlucHV0IGxpbmUuICBUaGUgcmV0dXJuZWQgcG9pbnRlciBvZnRlbiAoYnV0IG5vdCBhbHdheXMpCisgKiBwb2ludHMgaW50byBhIHN0ZGlvIGJ1ZmZlci4gIEZnZXRsaW5lIGRvZXMgbm90IGFsdGVyIHRoZSB0ZXh0IG9mCisgKiB0aGUgcmV0dXJuZWQgbGluZSAod2hpY2ggaXMgdGh1cyBub3QgYSBDIHN0cmluZyBiZWNhdXNlIGl0IHdpbGwKKyAqIG5vdCBuZWNlc3NhcmlseSBlbmQgd2l0aCAnXDAnKSwgYnV0IGRvZXMgYWxsb3cgY2FsbGVycyB0byBtb2RpZnkKKyAqIGl0IGlmIHRoZXkgd2lzaC4gIFRodXMsIHdlIHNldCBfX1NNT0QgaW4gY2FzZSB0aGUgY2FsbGVyIGRvZXMuCisgKi8KK2NoYXIgKgorZmdldGxuKEZJTEUgKmZwLCBzaXplX3QgKmxlbnApCit7CisJdW5zaWduZWQgY2hhciAqcDsKKwlzaXplX3QgbGVuOworCXNpemVfdCBvZmY7CisKKwkvKiBtYWtlIHN1cmUgdGhlcmUgaXMgaW5wdXQgKi8KKwlpZiAoZnAtPl9yIDw9IDAgJiYgX19zcmVmaWxsKGZwKSkgeworCQkqbGVucCA9IDA7CisJCXJldHVybiAoTlVMTCk7CisJfQorCisJLyogbG9vayBmb3IgYSBuZXdsaW5lIGluIHRoZSBpbnB1dCAqLworCWlmICgocCA9IG1lbWNocigodm9pZCAqKWZwLT5fcCwgJ1xuJywgZnAtPl9yKSkgIT0gTlVMTCkgeworCQljaGFyICpyZXQ7CisKKwkJLyoKKwkJICogRm91bmQgb25lLiAgRmxhZyBidWZmZXIgYXMgbW9kaWZpZWQgdG8ga2VlcCBmc2VlayBmcm9tCisJCSAqIGBvcHRpbWlzaW5nJyBhIGJhY2t3YXJkIHNlZWssIGluIGNhc2UgdGhlIHVzZXIgc3RvbXBzIG9uCisJCSAqIHRoZSB0ZXh0LgorCQkgKi8KKwkJcCsrOwkJLyogYWR2YW5jZSBvdmVyIGl0ICovCisJCXJldCA9IChjaGFyICopZnAtPl9wOworCQkqbGVucCA9IGxlbiA9IHAgLSBmcC0+X3A7CisJCWZwLT5fZmxhZ3MgfD0gX19TTU9EOworCQlmcC0+X3IgLT0gbGVuOworCQlmcC0+X3AgPSBwOworCQlyZXR1cm4gKHJldCk7CisJfQorCisJLyoKKwkgKiBXZSBoYXZlIHRvIGNvcHkgdGhlIGN1cnJlbnQgYnVmZmVyZWQgZGF0YSB0byB0aGUgbGluZSBidWZmZXIuCisJICogQXMgYSBib251cywgdGhvdWdoLCB3ZSBjYW4gbGVhdmUgb2ZmIHRoZSBfX1NNT0QuCisJICoKKwkgKiBPUFRJTUlTVElDIGlzIGxlbmd0aCB0aGF0IHdlIChvcHRpbWlzdGljYWxseSkgZXhwZWN0IHdpbGwKKwkgKiBhY2NvbW1vZGF0ZSB0aGUgYHJlc3QnIG9mIHRoZSBzdHJpbmcsIG9uIGVhY2ggdHJpcCB0aHJvdWdoIHRoZQorCSAqIGxvb3AgYmVsb3cuCisJICovCisjZGVmaW5lIE9QVElNSVNUSUMgODAKKworCWZvciAobGVuID0gZnAtPl9yLCBvZmYgPSAwOzsgbGVuICs9IGZwLT5fcikgeworCQlzaXplX3QgZGlmZjsKKworCQkvKgorCQkgKiBNYWtlIHN1cmUgdGhlcmUgaXMgcm9vbSBmb3IgbW9yZSBieXRlcy4gIENvcHkgZGF0YSBmcm9tCisJCSAqIGZpbGUgYnVmZmVyIHRvIGxpbmUgYnVmZmVyLCByZWZpbGwgZmlsZSBhbmQgbG9vayBmb3IKKwkJICogbmV3bGluZS4gIFRoZSBsb29wIHN0b3BzIG9ubHkgd2hlbiB3ZSBmaW5kIGEgbmV3bGluZS4KKwkJICovCisJCWlmIChfX3NsYmV4cGFuZChmcCwgbGVuICsgT1BUSU1JU1RJQykpCisJCQlnb3RvIGVycm9yOworCQkodm9pZCltZW1jcHkoKHZvaWQgKikoZnAtPl9sYi5fYmFzZSArIG9mZiksICh2b2lkICopZnAtPl9wLAorCQkgICAgbGVuIC0gb2ZmKTsKKwkJb2ZmID0gbGVuOworCQlpZiAoX19zcmVmaWxsKGZwKSkKKwkJCWJyZWFrOwkvKiBFT0Ygb3IgZXJyb3I6IHJldHVybiBwYXJ0aWFsIGxpbmUgKi8KKwkJaWYgKChwID0gbWVtY2hyKCh2b2lkICopZnAtPl9wLCAnXG4nLCBmcC0+X3IpKSA9PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJLyogZ290IGl0OiBmaW5pc2ggdXAgdGhlIGxpbmUgKGxpa2UgY29kZSBhYm92ZSkgKi8KKwkJcCsrOworCQlkaWZmID0gcCAtIGZwLT5fcDsKKwkJbGVuICs9IGRpZmY7CisJCWlmIChfX3NsYmV4cGFuZChmcCwgbGVuKSkKKwkJCWdvdG8gZXJyb3I7CisJCSh2b2lkKW1lbWNweSgodm9pZCAqKShmcC0+X2xiLl9iYXNlICsgb2ZmKSwgKHZvaWQgKilmcC0+X3AsCisJCSAgICBkaWZmKTsKKwkJZnAtPl9yIC09IGRpZmY7CisJCWZwLT5fcCA9IHA7CisJCWJyZWFrOworCX0KKwkqbGVucCA9IGxlbjsKKyNpZmRlZiBub3RkZWYKKwlmcC0+X2xiLl9iYXNlW2xlbl0gPSAnXDAnOworI2VuZGlmCisJcmV0dXJuICgoY2hhciAqKWZwLT5fbGIuX2Jhc2UpOworCitlcnJvcjoKKwkqbGVucCA9IDA7CQkvKiA/Pz8gKi8KKwlyZXR1cm4gKE5VTEwpOwkJLyogPz8/ICovCit9CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL2ZnZXRwb3MuYyBiL2xpYmMvc3RkaW8vZmdldHBvcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2MTg4ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGlvL2ZnZXRwb3MuYwpAQCAtMCwwICsxLDQzIEBACisvKgkkT3BlbkJTRDogZmdldHBvcy5jLHYgMS42IDIwMDUvMDgvMDggMDg6MDU6MzYgZXNwaWUgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKy8qCisgKiBmZ2V0cG9zOiBsaWtlIGZ0ZWxsby4KKyAqLworaW50CitmZ2V0cG9zKEZJTEUgKmZwLCBmcG9zX3QgKnBvcykKK3sKKwlyZXR1cm4oKCpwb3MgPSBmdGVsbG8oZnApKSA9PSAoZnBvc190KS0xKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vZmdldHMuYyBiL2xpYmMvc3RkaW8vZmdldHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWJkYWM5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRpby9mZ2V0cy5jCkBAIC0wLDAgKzEsOTcgQEAKKy8qCSRPcGVuQlNEOiBmZ2V0cy5jLHYgMS4xMCAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgImxvY2FsLmgiCisKKy8qCisgKiBSZWFkIGF0IG1vc3Qgbi0xIGNoYXJhY3RlcnMgZnJvbSB0aGUgZ2l2ZW4gZmlsZS4KKyAqIFN0b3Agd2hlbiBhIG5ld2xpbmUgaGFzIGJlZW4gcmVhZCwgb3IgdGhlIGNvdW50IHJ1bnMgb3V0LgorICogUmV0dXJuIGZpcnN0IGFyZ3VtZW50LCBvciBOVUxMIGlmIG5vIGNoYXJhY3RlcnMgd2VyZSByZWFkLgorICogRG8gbm90IHJldHVybiBOVUxMIGlmIG4gPT0gMS4KKyAqLworY2hhciAqCitmZ2V0cyhjaGFyICpidWYsIGludCBuLCBGSUxFICpmcCkKK3sKKwlzaXplX3QgbGVuOworCWNoYXIgKnM7CisJdW5zaWduZWQgY2hhciAqcCwgKnQ7CisKKwlpZiAobiA8PSAwKQkJLyogc2FuaXR5IGNoZWNrICovCisJCXJldHVybiAoTlVMTCk7CisKKwlfU0VUX09SSUVOVEFUSU9OKGZwLCAtMSk7CisJcyA9IGJ1ZjsKKwluLS07CQkJLyogbGVhdmUgc3BhY2UgZm9yIE5VTCAqLworCXdoaWxlIChuICE9IDApIHsKKwkJLyoKKwkJICogSWYgdGhlIGJ1ZmZlciBpcyBlbXB0eSwgcmVmaWxsIGl0LgorCQkgKi8KKwkJaWYgKGZwLT5fciA8PSAwKSB7CisJCQlpZiAoX19zcmVmaWxsKGZwKSkgeworCQkJCS8qIEVPRi9lcnJvcjogc3RvcCB3aXRoIHBhcnRpYWwgb3Igbm8gbGluZSAqLworCQkJCWlmIChzID09IGJ1ZikKKwkJCQkJcmV0dXJuIChOVUxMKTsKKyAgICAgIGJyZWFrOworICB9CisJCX0KKwkJbGVuID0gZnAtPl9yOworCQlwID0gZnAtPl9wOworICAKKwkJLyoKKwkJICogU2NhbiB0aHJvdWdoIGF0IG1vc3QgbiBieXRlcyBvZiB0aGUgY3VycmVudCBidWZmZXIsCisJCSAqIGxvb2tpbmcgZm9yICdcbicuICBJZiBmb3VuZCwgY29weSB1cCB0byBhbmQgaW5jbHVkaW5nCisJCSAqIG5ld2xpbmUsIGFuZCBzdG9wLiAgT3RoZXJ3aXNlLCBjb3B5IGVudGlyZSBjaHVuaworCQkgKiBhbmQgbG9vcC4KKwkJICovCisJCWlmICgoaW50KWxlbiA+IG4pCisJCQlsZW4gPSBuOworCQl0ID0gbWVtY2hyKCh2b2lkICopcCwgJ1xuJywgbGVuKTsKKwkJaWYgKHQgIT0gTlVMTCkgeworCQkJbGVuID0gKyt0IC0gcDsKKwkJCWZwLT5fciAtPSBsZW47CisJCQlmcC0+X3AgPSB0OworCQkJKHZvaWQpbWVtY3B5KCh2b2lkICopcywgKHZvaWQgKilwLCBsZW4pOworCQkJc1tsZW5dID0gJ1wwJzsKKwkJCXJldHVybiAoYnVmKTsKKwkJfQorCQlmcC0+X3IgLT0gbGVuOworCQlmcC0+X3AgKz0gbGVuOworCQkodm9pZCltZW1jcHkoKHZvaWQgKilzLCAodm9pZCAqKXAsIGxlbik7CisJCXMgKz0gbGVuOworCQluIC09IGxlbjsKKwl9CisJKnMgPSAnXDAnOworCXJldHVybiAoYnVmKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vZmlsZWV4dC5oIGIvbGliYy9zdGRpby9maWxlZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQwNzA0MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkaW8vZmlsZWV4dC5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCSRPcGVuQlNEOiBmaWxlZXh0LmgsdiAxLjIgMjAwNS8wNi8xNyAyMDo0MDozMiBlc3BpZSBFeHAgJAkqLworLyogJE5ldEJTRDogZmlsZWV4dC5oLHYgMS41IDIwMDMvMDcvMTggMjE6NDY6NDEgbmF0aGFudyBFeHAgJCAqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykyMDAxIENpdHJ1cyBQcm9qZWN0LAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAkQ2l0cnVzJAorICovCisKKy8qCisgKiBmaWxlIGV4dGVuc2lvbgorICovCitzdHJ1Y3QgX19zZmlsZWV4dCB7CisJc3RydWN0CV9fc2J1ZiBfdWI7IC8qIHVuZ2V0YyBidWZmZXIgKi8KKwlzdHJ1Y3Qgd2NoYXJfaW9fZGF0YSBfd2NpbzsJLyogd2lkZSBjaGFyIGlvIHN0YXR1cyAqLworfTsKKworI2RlZmluZSBfRVhUKGZwKSAoKHN0cnVjdCBfX3NmaWxlZXh0ICopKChmcCktPl9leHQuX2Jhc2UpKQorI2RlZmluZSBfVUIoZnApIF9FWFQoZnApLT5fdWIKKworI2RlZmluZSBfRklMRUVYVF9JTklUKGZwKSBcCitkbyB7IFwKKwlfVUIoZnApLl9iYXNlID0gTlVMTDsgXAorCV9VQihmcCkuX3NpemUgPSAwOyBcCisJV0NJT19JTklUKGZwKTsgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBfRklMRUVYVF9TRVRVUChmLCBmZXh0KSBcCitkbyB7IFwKKwkoZiktPl9leHQuX2Jhc2UgPSAodW5zaWduZWQgY2hhciAqKShmZXh0KTsgXAorCV9GSUxFRVhUX0lOSVQoZik7IFwKK30gd2hpbGUgKDApCmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL2ZpbGVuby5jIGIvbGliYy9zdGRpby9maWxlbm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmQ5ODViCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRpby9maWxlbm8uYwpAQCAtMCwwICsxLDQ1IEBACisvKgkkT3BlbkJTRDogZmlsZW5vLmMsdiAxLjUgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKworLyoKKyAqIEEgc3Vicm91dGluZSB2ZXJzaW9uIG9mIHRoZSBtYWNybyBmaWxlbm8uCisgKi8KKyN1bmRlZiBmaWxlbm8KKworaW50CitmaWxlbm8oRklMRSAqZnApCit7CisJcmV0dXJuIChfX3NmaWxlbm8oZnApKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vZmluZGZwLmMgYi9saWJjL3N0ZGlvL2ZpbmRmcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1NWE2NWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGlvL2ZpbmRmcC5jCkBAIC0wLDAgKzEsMTgxIEBACisvKgkkT3BlbkJTRDogZmluZGZwLmMsdiAxLjkgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgImxvY2FsLmgiCisjaW5jbHVkZSAiZ2x1ZS5oIgorCitpbnQJX19zZGlkaW5pdDsKKworI2RlZmluZQlORFlOQU1JQyAxMAkJLyogYWRkIHRlbiBtb3JlIHdoZW5ldmVyIG5lY2Vzc2FyeSAqLworCisjZGVmaW5lCXN0ZChmbGFncywgZmlsZSkgXAorCXswLDAsMCxmbGFncyxmaWxlLHswLDB9LDAsX19zRitmaWxlLF9fc2Nsb3NlLF9fc3JlYWQsX19zc2VlayxfX3N3cml0ZSwgXAorCSB7KHVuc2lnbmVkIGNoYXIgKikoX19zRmV4dCtmaWxlKSwgMH0sTlVMTCwwLHswLDAsMH0sezB9LHswLDB9LDAsMH0KKy8qCSBwIHIgdyBmbGFncyBmaWxlIF9iZiB6ICBjb29raWUgICAgICBjbG9zZSAgICByZWFkICAgIHNlZWsgICAgd3JpdGUKKwkgZXh0ICovCisKKwkJCQkvKiB0aGUgdXN1YWwgLSAoc3RkaW4gKyBzdGRvdXQgKyBzdGRlcnIpICovCitzdGF0aWMgRklMRSB1c3VhbFtGT1BFTl9NQVggLSAzXTsKK3N0YXRpYyBzdHJ1Y3QgX19zZmlsZWV4dCB1c3VhbGV4dFtGT1BFTl9NQVggLSAzXTsKK3N0YXRpYyBzdHJ1Y3QgZ2x1ZSB1Z2x1ZSA9IHsgMCwgRk9QRU5fTUFYIC0gMywgdXN1YWwgfTsKKworc3RydWN0IF9fc2ZpbGVleHQgX19zRmV4dFszXTsKK0ZJTEUgX19zRlszXSA9IHsKKwlzdGQoX19TUkQsIFNURElOX0ZJTEVOTyksCQkvKiBzdGRpbiAqLworCXN0ZChfX1NXUiwgU1RET1VUX0ZJTEVOTyksCQkvKiBzdGRvdXQgKi8KKwlzdGQoX19TV1J8X19TTkJGLCBTVERFUlJfRklMRU5PKQkvKiBzdGRlcnIgKi8KK307CitzdHJ1Y3QgZ2x1ZSBfX3NnbHVlID0geyAmdWdsdWUsIDMsIF9fc0YgfTsKKworc3RhdGljIHN0cnVjdCBnbHVlICoKK21vcmVnbHVlKGludCBuKQoreworCXN0cnVjdCBnbHVlICpnOworCUZJTEUgKnA7CisJc3RydWN0IF9fc2ZpbGVleHQgKnBleHQ7CisJc3RhdGljIEZJTEUgZW1wdHk7CisJY2hhciAqZGF0YTsKKworCWRhdGEgPSBtYWxsb2Moc2l6ZW9mKCpnKSArIEFMSUdOQllURVMgKyBuICogc2l6ZW9mKEZJTEUpCisJICAgICsgbiAqIHNpemVvZihzdHJ1Y3QgX19zZmlsZWV4dCkpOworCWlmIChkYXRhID09IE5VTEwpCisJCXJldHVybiAoTlVMTCk7CisJZyA9IChzdHJ1Y3QgZ2x1ZSAqKWRhdGE7CisJcCA9IChGSUxFICopQUxJR04oZGF0YSArIHNpemVvZigqZykpOworCXBleHQgPSAoc3RydWN0IF9fc2ZpbGVleHQgKikKKwkgICAgKEFMSUdOKGRhdGEgKyBzaXplb2YoKmcpKSArIG4gKiBzaXplb2YoRklMRSkpOworCWctPm5leHQgPSBOVUxMOworCWctPm5pb2JzID0gbjsKKwlnLT5pb2JzID0gcDsKKwl3aGlsZSAoLS1uID49IDApIHsKKwkJKnAgPSBlbXB0eTsKKwkJX0ZJTEVFWFRfU0VUVVAocCwgcGV4dCk7CisJCXArKzsKKwkJcGV4dCsrOworCX0KKwlyZXR1cm4gKGcpOworfQorCisvKgorICogRmluZCBhIGZyZWUgRklMRSBmb3IgZm9wZW4gZXQgYWwuCisgKi8KK0ZJTEUgKgorX19zZnAodm9pZCkKK3sKKwlGSUxFICpmcDsKKwlpbnQgbjsKKwlzdHJ1Y3QgZ2x1ZSAqZzsKKworCWlmICghX19zZGlkaW5pdCkKKwkJX19zaW5pdCgpOworCWZvciAoZyA9ICZfX3NnbHVlOzsgZyA9IGctPm5leHQpIHsKKwkJZm9yIChmcCA9IGctPmlvYnMsIG4gPSBnLT5uaW9iczsgLS1uID49IDA7IGZwKyspCisJCQlpZiAoZnAtPl9mbGFncyA9PSAwKQorCQkJCWdvdG8gZm91bmQ7CisJCWlmIChnLT5uZXh0ID09IE5VTEwgJiYgKGctPm5leHQgPSBtb3JlZ2x1ZShORFlOQU1JQykpID09IE5VTEwpCisJCQlicmVhazsKKwl9CisJcmV0dXJuIChOVUxMKTsKK2ZvdW5kOgorCWZwLT5fZmxhZ3MgPSAxOwkJLyogcmVzZXJ2ZSB0aGlzIHNsb3Q7IGNhbGxlciBzZXRzIHJlYWwgZmxhZ3MgKi8KKwlmcC0+X3AgPSBOVUxMOwkJLyogbm8gY3VycmVudCBwb2ludGVyICovCisJZnAtPl93ID0gMDsJCS8qIG5vdGhpbmcgdG8gcmVhZCBvciB3cml0ZSAqLworCWZwLT5fciA9IDA7CisJZnAtPl9iZi5fYmFzZSA9IE5VTEw7CS8qIG5vIGJ1ZmZlciAqLworCWZwLT5fYmYuX3NpemUgPSAwOworCWZwLT5fbGJmc2l6ZSA9IDA7CS8qIG5vdCBsaW5lIGJ1ZmZlcmVkICovCisJZnAtPl9maWxlID0gLTE7CQkvKiBubyBmaWxlICovCisvKglmcC0+X2Nvb2tpZSA9IDxhbnk+OyAqLwkvKiBjYWxsZXIgc2V0cyBjb29raWUsIF9yZWFkL193cml0ZSBldGMgKi8KKwlmcC0+X2xiLl9iYXNlID0gTlVMTDsJLyogbm8gbGluZSBidWZmZXIgKi8KKwlmcC0+X2xiLl9zaXplID0gMDsKKwlfRklMRUVYVF9JTklUKGZwKTsKKwlyZXR1cm4gKGZwKTsKK30KKworI2lmIDAKKyNkZWZpbmUgZ2V0ZHRhYmxlc2l6ZSgpCXN5c2NvbmYoX1NDX09QRU5fTUFYKQorCisvKgorICogWFhYLiAgRm9yY2UgaW1tZWRpYXRlIGFsbG9jYXRpb24gb2YgaW50ZXJuYWwgbWVtb3J5LiAgTm90IHVzZWQgYnkgc3RkaW8sCisgKiBidXQgZG9jdW1lbnRlZCBoaXN0b3JpY2FsbHkgZm9yIGNlcnRhaW4gYXBwbGljYXRpb25zLiAgQmFkIGFwcGxpY2F0aW9ucy4KKyAqLwordm9pZAorZl9wcmVhbGxvYyh2b2lkKQoreworCXN0cnVjdCBnbHVlICpnOworCWludCBuOworCisJbiA9IGdldGR0YWJsZXNpemUoKSAtIEZPUEVOX01BWCArIDIwOwkJLyogMjAgZm9yIHNsb3AuICovCisJZm9yIChnID0gJl9fc2dsdWU7IChuIC09IGctPm5pb2JzKSA+IDAgJiYgZy0+bmV4dDsgZyA9IGctPm5leHQpCisJCS8qIHZvaWQgKi87CisJaWYgKG4gPiAwKQorCQlnLT5uZXh0ID0gbW9yZWdsdWUobik7Cit9CisjZW5kaWYKKworLyoKKyAqIGV4aXQoKSBhbmQgYWJvcnQoKSBjYWxsIF9jbGVhbnVwKCkgdGhyb3VnaCB0aGUgY2FsbGJhY2sgcmVnaXN0ZXJlZAorICogd2l0aCBfX2F0ZXhpdF9yZWdpc3Rlcl9jbGVhbnVwKCksIHNldCB3aGVuZXZlciB3ZSBvcGVuIG9yIGJ1ZmZlciBhCisgKiBmaWxlLiBUaGlzIGNoaWNhbmVyeSBpcyBkb25lIHNvIHRoYXQgcHJvZ3JhbXMgdGhhdCBkbyBub3QgdXNlIHN0ZGlvCisgKiBuZWVkIG5vdCBsaW5rIGl0IGFsbCBpbi4KKyAqCisgKiBUaGUgbmFtZSBgX2NsZWFudXAnIGlzLCBhbGFzLCBmYWlybHkgd2VsbCBrbm93biBvdXRzaWRlIHN0ZGlvLgorICovCit2b2lkCitfY2xlYW51cCh2b2lkKQoreworCS8qICh2b2lkKSBfZndhbGsoZmNsb3NlKTsgKi8KKwkodm9pZCkgX2Z3YWxrKF9fc2ZsdXNoKTsJCS8qIGBjaGVhdGluZycgKi8KK30KKworLyoKKyAqIF9fc2luaXQoKSBpcyBjYWxsZWQgd2hlbmV2ZXIgc3RkaW8ncyBpbnRlcm5hbCB2YXJpYWJsZXMgbXVzdCBiZSBzZXQgdXAuCisgKi8KK3ZvaWQKK19fc2luaXQodm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBGT1BFTl9NQVggLSAzOyBpKyspIHsKKwkJX0ZJTEVFWFRfU0VUVVAodXN1YWwraSwgdXN1YWxleHQraSk7CisJfQorCS8qIG1ha2Ugc3VyZSB3ZSBjbGVhbiB1cCBvbiBleGl0ICovCisJX19hdGV4aXRfcmVnaXN0ZXJfY2xlYW51cChfY2xlYW51cCk7IC8qIGNvbnNlcnZhdGl2ZSAqLworCV9fc2RpZGluaXQgPSAxOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9mbGFncy5jIGIvbGliYy9zdGRpby9mbGFncy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkZTA0NDcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGlvL2ZsYWdzLmMKQEAgLTAsMCArMSw4MiBAQAorLyoJJE9wZW5CU0Q6IGZsYWdzLmMsdiAxLjYgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL2ZpbGUuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKworLyoKKyAqIFJldHVybiB0aGUgKHN0ZGlvKSBmbGFncyBmb3IgYSBnaXZlbiBtb2RlLiAgU3RvcmUgdGhlIGZsYWdzCisgKiB0byBiZSBwYXNzZWQgdG8gYW4gb3BlbigpIHN5c2NhbGwgdGhyb3VnaCAqb3B0ci4KKyAqIFJldHVybiAwIG9uIGVycm9yLgorICovCitpbnQKK19fc2ZsYWdzKGNvbnN0IGNoYXIgKm1vZGUsIGludCAqb3B0cikKK3sKKwlpbnQgcmV0LCBtLCBvOworCisJc3dpdGNoICgqbW9kZSsrKSB7CisKKwljYXNlICdyJzoJLyogb3BlbiBmb3IgcmVhZGluZyAqLworCQlyZXQgPSBfX1NSRDsKKwkJbSA9IE9fUkRPTkxZOworCQlvID0gMDsKKwkJYnJlYWs7CisKKwljYXNlICd3JzoJLyogb3BlbiBmb3Igd3JpdGluZyAqLworCQlyZXQgPSBfX1NXUjsKKwkJbSA9IE9fV1JPTkxZOworCQlvID0gT19DUkVBVCB8IE9fVFJVTkM7CisJCWJyZWFrOworCisJY2FzZSAnYSc6CS8qIG9wZW4gZm9yIGFwcGVuZGluZyAqLworCQlyZXQgPSBfX1NXUjsKKwkJbSA9IE9fV1JPTkxZOworCQlvID0gT19DUkVBVCB8IE9fQVBQRU5EOworCQlicmVhazsKKworCWRlZmF1bHQ6CS8qIGlsbGVnYWwgbW9kZSAqLworCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuICgwKTsKKwl9CisKKwkvKiBbcndhXVwrIG9yIFtyd2FdYlwrIG1lYW5zIHJlYWQgYW5kIHdyaXRlICovCisJaWYgKCptb2RlID09ICcrJyB8fCAoKm1vZGUgPT0gJ2InICYmIG1vZGVbMV0gPT0gJysnKSkgeworCQlyZXQgPSBfX1NSVzsKKwkJbSA9IE9fUkRXUjsKKwl9CisJKm9wdHIgPSBtIHwgbzsKKwlyZXR1cm4gKHJldCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL2Zsb2F0aW8uaCBiL2xpYmMvc3RkaW8vZmxvYXRpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwZjk4MDEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGlvL2Zsb2F0aW8uaApAQCAtMCwwICsxLDQyIEBACisvKgkkT3BlbkJTRDogZmxvYXRpby5oLHYgMS4zIDIwMDMvMDYvMDIgMjA6MTg6MzcgbWlsbGVydCBFeHAgJAkqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgKiBGbG9hdGluZyBwb2ludCBzY2FuZi9wcmludGYgKGlucHV0L291dHB1dCkgZGVmaW5pdGlvbnMuCisgKi8KKworLyogMTEtYml0IGV4cG9uZW50IChWQVggRyBmbG9hdGluZyBwb2ludCkgaXMgMzA4IGRlY2ltYWwgZGlnaXRzICovCisjZGVmaW5lCU1BWEVYUAkJMzA4CisvKiAxMjggYml0IGZyYWN0aW9uIHRha2VzIHVwIDM5IGRlY2ltYWwgZGlnaXRzOyBtYXggcmVhc29uYWJsZSBwcmVjaXNpb24gKi8KKyNkZWZpbmUJTUFYRlJBQ1QJMzkKZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vZmxvY2tmaWxlLmMgYi9saWJjL3N0ZGlvL2Zsb2NrZmlsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4MTg3OWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGlvL2Zsb2NrZmlsZS5jCkBAIC0wLDAgKzEsMjEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKy8qIGltcGxlbWVudCBmbG9ja2ZpbGUoKSwgZnRyeWxvY2tmaWxlKCkgYW5kIGZ1bmxvY2tmaWxlKCkKKyAqCisgKiB3ZSBjYW4ndCB1c2UgdGhlIE9wZW5CU0QgaW1wbGVtZW50YXRpb24gd2hpY2ggdXNlcyBrZXJuZWwtc3BlY2lmaWMKKyAqIEFQSXMgbm90IGF2YWlsYWJsZSBvbiBMaW51eC4KKyAqCisgKiBJZGVhbGx5LCB0aGlzIHdvdWxkIGJlIHRyaXZpYWxseSBpbXBsZW1lbnRlZCBieSBhZGRpbmcgYQorICogcHRocmVhZF9tdXRleF90IGZpZWxkIHRvIHN0cnVjdCBfX3NGSUxFIGFzIGRlZmluZWQgaW4KKyAqIDxzdGRpby5oPi4KKyAqCisgKiBIb3dldmVyLCBzaW5jZSB3ZSBkb24ndCB3YW50IHRvIGJyaW5nIHB0aHJlYWQgaW50byB0aGUgbWl4CisgKiBhcyB3ZWxsIGFzIGNoYW5nZSB0aGUgc2l6ZSBvZiBhIHB1YmxpYyBBUEkvQUJJIHN0cnVjdHVyZSwKKyAqIHdlJ3JlIGdvaW5nIHRvIHN0b3JlIHRoZSBkYXRhIG91dC1vZi1iYW5kLgorICoKKyAqIHdlIHVzZSBhIGhhc2gtdGFibGUgdG8gbWFwIEZJTEUqIHBvaW50ZXJzIHRvIHJlY3Vyc2l2ZSBtdXRleGVzCisgKiBmY2xvc2UoKSB3aWxsIGNhbGwgX19mcmVtb3ZlbG9jaygpIGRlZmluZWQgYmVsb3cgdG8gcmVtb3ZlCisgKiBhIHBvaW50ZXIgZnJvbSB0aGUgdGFibGUuCisgKgorICogdGhlIGJlaGF2aW91ciwgaWYgZmNsb3NlKCkgaXMgY2FsbGVkIHdoaWxlIHRoZSBjb3JyZXNwb25kaW5nCisgKiBmaWxlIGlzIGxvY2tlZCBpcyB0b3RhbGx5IHVuZGVmaW5lZC4KKyAqLworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisvKiBhIG5vZGUgaW4gdGhlIGhhc2ggdGFibGUgKi8KK3R5cGVkZWYgc3RydWN0IEZpbGVMb2NrIHsKKyAgICBzdHJ1Y3QgRmlsZUxvY2sqICBuZXh0OworICAgIEZJTEUqICAgICAgICAgICAgIGZpbGU7CisgICAgcHRocmVhZF9tdXRleF90ICAgbXV0ZXg7Cit9IEZpbGVMb2NrOworCisvKiB1c2UgYSBzdGF0aWMgaGFzaCB0YWJsZS4gV2UgYXNzdW1lIHRoYXQgd2UncmUgbm90IGdvaW5nIHRvCisgKiBsb2NrIGEgcmVhbGx5IGxhcmdlIG51bWJlciBvZiBGSUxFKiBvYmplY3RzIG9uIGFuIGVtYmVkZGVkCisgKiBzeXN0ZW0uCisgKi8KKyNkZWZpbmUgIEZJTEVfTE9DS19CVUNLRVRTICAzMgorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgcHRocmVhZF9tdXRleF90ICAgbG9jazsKKyAgICBGaWxlTG9jayogICAgICAgICBidWNrZXRzWyBGSUxFX0xPQ0tfQlVDS0VUUyBdOworfSBMb2NrVGFibGU7CisKK3N0YXRpYyBMb2NrVGFibGUqICAgICAgX2xvY2tUYWJsZTsKK3N0YXRpYyBwdGhyZWFkX29uY2VfdCAgX2xvY2tUYWJsZV9vbmNlID0gUFRIUkVBRF9PTkNFX0lOSVQ7CisKK3N0YXRpYyB2b2lkCitsb2NrX3RhYmxlX2luaXQoIHZvaWQgKQoreworICAgIF9sb2NrVGFibGUgPSBtYWxsb2Moc2l6ZW9mKCpfbG9ja1RhYmxlKSk7CisgICAgaWYgKF9sb2NrVGFibGUgIT0gTlVMTCkgeworICAgICAgICBwdGhyZWFkX211dGV4X2luaXQoJl9sb2NrVGFibGUtPmxvY2ssIE5VTEwpOworICAgICAgICBtZW1zZXQoX2xvY2tUYWJsZS0+YnVja2V0cywgMCwgc2l6ZW9mKF9sb2NrVGFibGUtPmJ1Y2tldHMpKTsKKyAgICB9Cit9CisKK3N0YXRpYyBMb2NrVGFibGUqCitsb2NrX3RhYmxlX2xvY2soIHZvaWQgKQoreworICAgIHB0aHJlYWRfb25jZSggJl9sb2NrVGFibGVfb25jZSwgbG9ja190YWJsZV9pbml0ICk7CisgICAgcHRocmVhZF9tdXRleF9sb2NrKCAmX2xvY2tUYWJsZS0+bG9jayApOworICAgIHJldHVybiBfbG9ja1RhYmxlOworfQorCitzdGF0aWMgdm9pZAorbG9ja190YWJsZV91bmxvY2soIExvY2tUYWJsZSogIHQgKQoreworICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCAmdC0+bG9jayApOworfQorCitzdGF0aWMgRmlsZUxvY2sqKgorbG9ja190YWJsZV9sb29rdXAoIExvY2tUYWJsZSogIHQsIEZJTEUqICBmICkKK3sKKyAgICB1aW50MzJfdCAgICBoYXNoID0gKHVpbnQzMl90KSh2b2lkKilmOworICAgIEZpbGVMb2NrKiogIHBub2RlOworCisgICAgaGFzaCA9IChoYXNoID4+IDIpIF4gKGhhc2ggPDwgMTcpOworICAgIHBub2RlID0gJnQtPmJ1Y2tldHNbaGFzaCAlIEZJTEVfTE9DS19CVUNLRVRTXTsKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIEZpbGVMb2NrKiAgbm9kZSA9ICpwbm9kZTsKKyAgICAgICAgaWYgKG5vZGUgPT0gTlVMTCB8fCBub2RlLT5maWxlID09IGYpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgcG5vZGUgPSAmbm9kZS0+bmV4dDsKKyAgICB9CisgICAgcmV0dXJuIHBub2RlOworfQorCit2b2lkCitmbG9ja2ZpbGUoRklMRSAqIGZwKQoreworICAgIExvY2tUYWJsZSogIHQgPSBsb2NrX3RhYmxlX2xvY2soKTsKKworICAgIGlmICh0ICE9IE5VTEwpIHsKKyAgICAgICAgRmlsZUxvY2sqKiAgbG9va3VwID0gbG9ja190YWJsZV9sb29rdXAodCwgZnApOworICAgICAgICBGaWxlTG9jayogICBsb2NrICAgPSAqbG9va3VwOworCisgICAgICAgIGlmIChsb2NrID09IE5VTEwpIHsKKyAgICAgICAgICAgIHB0aHJlYWRfbXV0ZXhhdHRyX3QgIGF0dHI7CisKKyAgICAgICAgICAgIC8qIGNyZWF0ZSBhIG5ldyBub2RlIGluIHRoZSBoYXNoIHRhYmxlICovCisgICAgICAgICAgICBsb2NrID0gbWFsbG9jKHNpemVvZigqbG9jaykpOworICAgICAgICAgICAgaWYgKGxvY2sgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGxvY2tfdGFibGVfdW5sb2NrKHQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxvY2stPm5leHQgICAgICAgID0gTlVMTDsKKyAgICAgICAgICAgIGxvY2stPmZpbGUgICAgICAgID0gZnA7CisKKyAgICAgICAgICAgIHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQoJmF0dHIpOworICAgICAgICAgICAgcHRocmVhZF9tdXRleGF0dHJfc2V0dHlwZSgmYXR0ciwgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkUpOworICAgICAgICAgICAgcHRocmVhZF9tdXRleF9pbml0KCAmbG9jay0+bXV0ZXgsICZhdHRyICk7CisKKyAgICAgICAgICAgICpsb29rdXAgICAgICAgICAgID0gbG9jazsKKyAgICAgICAgfQorICAgICAgICBsb2NrX3RhYmxlX3VubG9jayh0KTsKKworICAgICAgICAvKiB3ZSBhc3N1bWUgdGhhdCBhbm90aGVyIHRocmVhZCBkaWRuJ3QgZGVzdHJveSAnbG9jaycKKyAgICAgICAgKiBieSBjYWxsaW5nIGZjbG9zZSgpIG9uIHRoZSBGSUxFKi4gVGhpcyBjYW4gaGFwcGVuIGlmCisgICAgICAgICogdGhlIGNsaWVudCBpcyAqcmVhbGx5KiBidWdneSwgYnV0IHdlIGRvbid0IGNhcmUgYWJvdXQKKyAgICAgICAgKiBzdWNoIGNvZGUgaGVyZS4KKyAgICAgICAgKi8KKyAgICAgICAgcHRocmVhZF9tdXRleF9sb2NrKCZsb2NrLT5tdXRleCk7CisgICAgfQorfQorCisKK2ludAorZnRyeWxvY2tmaWxlKEZJTEUgKmZwKQoreworICAgIGludCAgICAgICAgIHJldCA9IC0xOworICAgIExvY2tUYWJsZSogIHQgICA9IGxvY2tfdGFibGVfbG9jaygpOworCisgICAgaWYgKHQgIT0gTlVMTCkgeworICAgICAgICBGaWxlTG9jayoqICBsb29rdXAgPSBsb2NrX3RhYmxlX2xvb2t1cCh0LCBmcCk7CisgICAgICAgIEZpbGVMb2NrKiAgIGxvY2sgICA9ICpsb29rdXA7CisKKyAgICAgICAgbG9ja190YWJsZV91bmxvY2sodCk7CisKKyAgICAgICAgLyogc2VlIGFib3ZlIGNvbW1lbnQgYWJvdXQgd2h5IHdlIGFzc3VtZSB0aGF0ICdsb2NrJyBjYW4KKyAgICAgICAgKiBiZSBhY2Nlc3NlZCBmcm9tIGhlcmUKKyAgICAgICAgKi8KKyAgICAgICAgaWYgKGxvY2sgIT0gTlVMTCAmJiAhcHRocmVhZF9tdXRleF90cnlsb2NrKCZsb2NrLT5tdXRleCkpIHsKKyAgICAgICAgICAgIHJldCA9IDA7ICAvKiBzaWduYWwgc3VjY2VzcyAqLworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiByZXQ7Cit9CisKK3ZvaWQKK2Z1bmxvY2tmaWxlKEZJTEUgKiBmcCkKK3sKKyAgICBMb2NrVGFibGUqICB0ID0gbG9ja190YWJsZV9sb2NrKCk7CisKKyAgICBpZiAodCAhPSBOVUxMKSB7CisgICAgICAgIEZpbGVMb2NrKiogIGxvb2t1cCA9IGxvY2tfdGFibGVfbG9va3VwKHQsIGZwKTsKKyAgICAgICAgRmlsZUxvY2sqICAgbG9jayAgID0gKmxvb2t1cDsKKworICAgICAgICBpZiAobG9jayAhPSBOVUxMKQorICAgICAgICAgICAgcHRocmVhZF9tdXRleF91bmxvY2soJmxvY2stPm11dGV4KTsKKworICAgICAgICBsb2NrX3RhYmxlX3VubG9jayh0KTsKKyAgICB9Cit9CisKKworLyogY2FsbGVkIGZyb20gZmNsb3NlKCkgdG8gcmVtb3ZlIHRoZSBmaWxlIGxvY2sgKi8KK3ZvaWQKK19fZnJlbW92ZWxvY2soRklMRSogIGZwKQoreworICAgIExvY2tUYWJsZSogIHQgPSBsb2NrX3RhYmxlX2xvY2soKTsKKworICAgIGlmICh0ICE9IE5VTEwpIHsKKyAgICAgICAgRmlsZUxvY2sqKiAgbG9va3VwID0gbG9ja190YWJsZV9sb29rdXAodCwgZnApOworICAgICAgICBGaWxlTG9jayogICBsb2NrICAgPSAqbG9va3VwOworCisgICAgICAgIGlmIChsb2NrICE9IE5VTEwpIHsKKyAgICAgICAgICAgICpsb29rdXAgICA9IGxvY2stPm5leHQ7CisgICAgICAgICAgICBsb2NrLT5maWxlID0gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBsb2NrX3RhYmxlX3VubG9jayh0KTsKKworICAgICAgICBpZiAobG9jayAhPSBOVUxMKQorICAgICAgICAgICAgZnJlZShsb2NrKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL2ZvcGVuLmMgYi9saWJjL3N0ZGlvL2ZvcGVuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGUxNWRjMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkaW8vZm9wZW4uYwpAQCAtMCwwICsxLDc2IEBACisvKgkkT3BlbkJTRDogZm9wZW4uYyx2IDEuNSAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgImxvY2FsLmgiCisjaW5jbHVkZSA8bGludXgvc3RhdC5oPgorCitGSUxFICoKK2ZvcGVuKGNvbnN0IGNoYXIgKmZpbGUsIGNvbnN0IGNoYXIgKm1vZGUpCit7CisJRklMRSAqZnA7CisJaW50IGY7CisJaW50IGZsYWdzLCBvZmxhZ3M7CisKKwlpZiAoKGZsYWdzID0gX19zZmxhZ3MobW9kZSwgJm9mbGFncykpID09IDApCisJCXJldHVybiAoTlVMTCk7CisJaWYgKChmcCA9IF9fc2ZwKCkpID09IE5VTEwpCisJCXJldHVybiAoTlVMTCk7CisJaWYgKChmID0gb3BlbihmaWxlLCBvZmxhZ3MsIERFRkZJTEVNT0RFKSkgPCAwKSB7CisJCWZwLT5fZmxhZ3MgPSAwOwkJCS8qIHJlbGVhc2UgKi8KKwkJcmV0dXJuIChOVUxMKTsKKyAgfQorCWZwLT5fZmlsZSA9IGY7CisJZnAtPl9mbGFncyA9IGZsYWdzOworCWZwLT5fY29va2llID0gZnA7CisJZnAtPl9yZWFkID0gX19zcmVhZDsKKwlmcC0+X3dyaXRlID0gX19zd3JpdGU7CisJZnAtPl9zZWVrID0gX19zc2VlazsKKwlmcC0+X2Nsb3NlID0gX19zY2xvc2U7CisKKwkvKgorCSAqIFdoZW4gb3BlbmluZyBpbiBhcHBlbmQgbW9kZSwgZXZlbiB0aG91Z2ggd2UgdXNlIE9fQVBQRU5ELAorCSAqIHdlIG5lZWQgdG8gc2VlayB0byB0aGUgZW5kIHNvIHRoYXQgZnRlbGwoKSBnZXRzIHRoZSByaWdodAorCSAqIGFuc3dlci4gIElmIHRoZSB1c2VyIHRoZW4gYWx0ZXJzIHRoZSBzZWVrIHBvaW50ZXIsIG9yCisJICogdGhlIGZpbGUgZXh0ZW5kcywgdGhpcyB3aWxsIGZhaWwsIGJ1dCB0aGVyZSBpcyBub3QgbXVjaAorCSAqIHdlIGNhbiBkbyBhYm91dCB0aGlzLiAgKFdlIGNvdWxkIHNldCBfX1NBUFAgYW5kIGNoZWNrIGluCisJICogZnNlZWsgYW5kIGZ0ZWxsLikKKwkgKi8KKwlpZiAob2ZsYWdzICYgT19BUFBFTkQpCisJCSh2b2lkKSBfX3NzZWVrKCh2b2lkICopZnAsIChmcG9zX3QpMCwgU0VFS19FTkQpOworCXJldHVybiAoZnApOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9mcHJpbnRmLmMgYi9saWJjL3N0ZGlvL2ZwcmludGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDlkOGRiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRpby9mcHJpbnRmLmMKQEAgLTAsMCArMSw0NyBAQAorLyoJJE9wZW5CU0Q6IGZwcmludGYuYyx2IDEuNiAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorCitpbnQKK2ZwcmludGYoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCWludCByZXQ7CisgIHZhX2xpc3QgYXA7CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwlyZXQgPSB2ZnByaW50ZihmcCwgZm10LCBhcCk7CisgIHZhX2VuZChhcCk7CisJcmV0dXJuIChyZXQpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9mcHVyZ2UuYyBiL2xpYmMvc3RkaW8vZnB1cmdlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmEwMjEzYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkaW8vZnB1cmdlLmMKQEAgLTAsMCArMSw1OCBAQAorLyoJJE9wZW5CU0Q6IGZwdXJnZS5jLHYgMS42IDIwMDUvMDgvMDggMDg6MDU6MzYgZXNwaWUgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorCisvKgorICogZnB1cmdlOiBsaWtlIGZmbHVzaCwgYnV0IHdpdGhvdXQgd3JpdGluZyBhbnl0aGluZzogbGVhdmUgdGhlCisgKiBnaXZlbiBGSUxFJ3MgYnVmZmVyIGVtcHR5LgorICovCitpbnQKK2ZwdXJnZShGSUxFICpmcCkKK3sKKwlpZiAoIWZwLT5fZmxhZ3MpIHsKKwkJZXJybm8gPSBFQkFERjsKKwkJcmV0dXJuKEVPRik7CisJfQorCisJaWYgKEhBU1VCKGZwKSkKKwkJRlJFRVVCKGZwKTsKKwlXQ0lPX0ZSRUUoZnApOworCWZwLT5fcCA9IGZwLT5fYmYuX2Jhc2U7CisJZnAtPl9yID0gMDsKKwlmcC0+X3cgPSBmcC0+X2ZsYWdzICYgKF9fU0xCRnxfX1NOQkYpID8gMCA6IGZwLT5fYmYuX3NpemU7CisJcmV0dXJuICgwKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vZnB1dGMuYyBiL2xpYmMvc3RkaW8vZnB1dGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTZlN2I3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRpby9mcHV0Yy5jCkBAIC0wLDAgKzEsNDYgQEAKKy8qCSRPcGVuQlNEOiBmcHV0Yy5jLHYgMS43IDIwMDUvMDgvMDggMDg6MDU6MzYgZXNwaWUgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorCitpbnQKK2ZwdXRjKGludCBjLCBGSUxFICpmcCkKK3sKKwlpZiAoY2FudHdyaXRlKGZwKSkgeworCQllcnJubyA9IEVCQURGOworCQlyZXR1cm4gKEVPRik7CisJfQorCXJldHVybiAocHV0YyhjLCBmcCkpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9mcHV0cy5jIGIvbGliYy9zdGRpby9mcHV0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0MzRjYTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGlvL2ZwdXRzLmMKQEAgLTAsMCArMSw1NCBAQAorLyoJJE9wZW5CU0Q6IGZwdXRzLmMsdiAxLjcgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorI2luY2x1ZGUgImZ2d3JpdGUuaCIKKworLyoKKyAqIFdyaXRlIHRoZSBnaXZlbiBzdHJpbmcgdG8gdGhlIGdpdmVuIGZpbGUuCisgKi8KK2ludAorZnB1dHMoY29uc3QgY2hhciAqcywgRklMRSAqZnApCit7CisJc3RydWN0IF9fc3VpbyB1aW87CisJc3RydWN0IF9fc2lvdiBpb3Y7CisKKwlpb3YuaW92X2Jhc2UgPSAodm9pZCAqKXM7CisJaW92Lmlvdl9sZW4gPSB1aW8udWlvX3Jlc2lkID0gc3RybGVuKHMpOworCXVpby51aW9faW92ID0gJmlvdjsKKwl1aW8udWlvX2lvdmNudCA9IDE7CisJX1NFVF9PUklFTlRBVElPTihmcCwgLTEpOworCXJldHVybiAoX19zZnZ3cml0ZShmcCwgJnVpbykpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9mcmVhZC5jIGIvbGliYy9zdGRpby9mcmVhZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmOTk3N2YKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGlvL2ZyZWFkLmMKQEAgLTAsMCArMSwxNTggQEAKKy8qCSRPcGVuQlNEOiBmcmVhZC5jLHYgMS42IDIwMDUvMDgvMDggMDg6MDU6MzYgZXNwaWUgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorCitzdGF0aWMgaW50CitsZmx1c2goRklMRSAqZnApCit7CisKKyAgICBpZiAoKGZwLT5fZmxhZ3MgJiAoX19TTEJGfF9fU1dSKSkgPT0gKF9fU0xCRnxfX1NXUikpCisgICAgICAgIHJldHVybiAoX19zZmx1c2goZnApKTsKKyAgICByZXR1cm4gKDApOworfQorCitzaXplX3QKK2ZyZWFkKHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUsIHNpemVfdCBjb3VudCwgRklMRSAqZnApCit7CisJc2l6ZV90IHJlc2lkOworCWNoYXIgKnA7CisJaW50IHI7CisJc2l6ZV90IHRvdGFsOworCisJLyoKKwkgKiBUaGUgQU5TSSBzdGFuZGFyZCByZXF1aXJlcyBhIHJldHVybiB2YWx1ZSBvZiAwIGZvciBhIGNvdW50CisJICogb3IgYSBzaXplIG9mIDAuICBQZWN1bGlhcmlseSwgaXQgaW1wb3NlcyBubyBzdWNoIHJlcXVpcmVtZW50cworCSAqIG9uIGZ3cml0ZTsgaXQgb25seSByZXF1aXJlcyBmcmVhZCB0byBiZSBicm9rZW4uCisJICovCisJaWYgKChyZXNpZCA9IGNvdW50ICogc2l6ZSkgPT0gMCkKKwkJcmV0dXJuICgwKTsKKwlpZiAoZnAtPl9yIDwgMCkKKwkJZnAtPl9yID0gMDsKKwl0b3RhbCA9IHJlc2lkOworCXAgPSBidWY7CisKKyNpZiAxICAvKiBCSU9OSUM6IG9wdGltaXplIHVuYnVmZmVyZWQgcmVhZHMgKi8KKyAgICBpZiAoZnAtPl9mbGFncyAmIF9fU05CRiAmJiBmcC0+X3VyID09IDApCisgICAgeworICAgICAgIC8qIHRoZSBmb2xsb3dpbmcgY29tZXMgbWFpbmx5IGZyb20gX19zcmVmaWxsKCksIHdpdGggc2xpZ2h0CisgICAgICAgICogbW9kaWZpY2F0aW9ucworICAgICAgICAqLworCisgICAgICAgIC8qIG1ha2Ugc3VyZSBzdGRpbyBpcyBzZXQgdXAgKi8KKyAgICAgICAgaWYgKCFfX3NkaWRpbml0KQorICAgICAgICAgICAgX19zaW5pdCgpOworCisgICAgICAgIGZwLT5fciA9IDA7ICAgICAvKiBsYXJnZWx5IGEgY29udmVuaWVuY2UgZm9yIGNhbGxlcnMgKi8KKworICAgICAgICAvKiBTeXNWIGRvZXMgbm90IG1ha2UgdGhpcyB0ZXN0OyB0YWtlIGl0IG91dCBmb3IgY29tcGF0aWJpbGl0eSAqLworICAgICAgICBpZiAoZnAtPl9mbGFncyAmIF9fU0VPRikKKyAgICAgICAgICAgIHJldHVybiAoRU9GKTsKKworICAgICAgICAvKiBpZiBub3QgYWxyZWFkeSByZWFkaW5nLCBoYXZlIHRvIGJlIHJlYWRpbmcgYW5kIHdyaXRpbmcgKi8KKyAgICAgICAgaWYgKChmcC0+X2ZsYWdzICYgX19TUkQpID09IDApIHsKKyAgICAgICAgICAgIGlmICgoZnAtPl9mbGFncyAmIF9fU1JXKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgZXJybm8gPSBFQkFERjsKKyAgICAgICAgICAgICAgICBmcC0+X2ZsYWdzIHw9IF9fU0VSUjsKKyAgICAgICAgICAgICAgICByZXR1cm4gKEVPRik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvKiBzd2l0Y2ggdG8gcmVhZGluZyAqLworICAgICAgICAgICAgaWYgKGZwLT5fZmxhZ3MgJiBfX1NXUikgeworICAgICAgICAgICAgICAgIGlmIChfX3NmbHVzaChmcCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAoRU9GKTsKKyAgICAgICAgICAgICAgICBmcC0+X2ZsYWdzICY9IH5fX1NXUjsKKyAgICAgICAgICAgICAgICBmcC0+X3cgPSAwOworICAgICAgICAgICAgICAgIGZwLT5fbGJmc2l6ZSA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmcC0+X2ZsYWdzIHw9IF9fU1JEOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAvKgorICAgICAgICAgICAgKiBXZSB3ZXJlIHJlYWRpbmcuICBJZiB0aGVyZSBpcyBhbiB1bmdldGMgYnVmZmVyLAorICAgICAgICAgICAgKiB3ZSBtdXN0IGhhdmUgYmVlbiByZWFkaW5nIGZyb20gdGhhdC4gIERyb3AgaXQsCisgICAgICAgICAgICAqIHJlc3RvcmluZyB0aGUgcHJldmlvdXMgYnVmZmVyIChpZiBhbnkpLiAgSWYgdGhlcmUKKyAgICAgICAgICAgICogaXMgYW55dGhpbmcgaW4gdGhhdCBidWZmZXIsIHJldHVybi4KKyAgICAgICAgICAgICovCisgICAgICAgICAgICBpZiAoSEFTVUIoZnApKSB7CisgICAgICAgICAgICAgICAgRlJFRVVCKGZwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgLyoKKyAgICAgICAgKiBCZWZvcmUgcmVhZGluZyBmcm9tIGEgbGluZSBidWZmZXJlZCBvciB1bmJ1ZmZlcmVkIGZpbGUsCisgICAgICAgICogZmx1c2ggYWxsIGxpbmUgYnVmZmVyZWQgb3V0cHV0IGZpbGVzLCBwZXIgdGhlIEFOU0kgQworICAgICAgICAqIHN0YW5kYXJkLgorICAgICAgICAqLworCisgICAgICAgIGlmIChmcC0+X2ZsYWdzICYgKF9fU0xCRnxfX1NOQkYpKQorICAgICAgICAgICAgKHZvaWQpIF9md2FsayhsZmx1c2gpOworCisgICAgICAgIHdoaWxlIChyZXNpZCA+IDApIHsKKyAgICAgICAgICAgIGludCAgIGxlbiA9ICgqZnAtPl9yZWFkKShmcC0+X2Nvb2tpZSwgcCwgcmVzaWQgKTsKKyAgICAgICAgICAgIGZwLT5fZmxhZ3MgJj0gfl9fU01PRDsKKyAgICAgICAgICAgIGlmIChsZW4gPD0gMCkgeworICAgICAgICAgICAgICAgIGlmIChsZW4gPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgZnAtPl9mbGFncyB8PSBfX1NFT0Y7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGZwLT5fZmxhZ3MgfD0gX19TRVJSOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gKCh0b3RhbCAtIHJlc2lkKSAvIHNpemUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcCAgICAgKz0gbGVuOworICAgICAgICAgICAgcmVzaWQgLT0gbGVuOworICAgICAgICB9CisgICAgICAgIHJldHVybiAoY291bnQpOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKyAgICB7CisgICAgICAgIHdoaWxlIChyZXNpZCA+IChzaXplX3QpKHIgPSBmcC0+X3IpKSB7CisgICAgICAgICAgICAodm9pZCltZW1jcHkoKHZvaWQgKilwLCAodm9pZCAqKWZwLT5fcCwgKHNpemVfdClyKTsKKyAgICAgICAgICAgIGZwLT5fcCArPSByOworICAgICAgICAgICAgLyogZnAtPl9yID0gMCAuLi4gZG9uZSBpbiBfX3NyZWZpbGwgKi8KKyAgICAgICAgICAgIHAgKz0gcjsKKyAgICAgICAgICAgIHJlc2lkIC09IHI7CisgICAgICAgICAgICBpZiAoX19zcmVmaWxsKGZwKSkgeworICAgICAgICAgICAgICAgIC8qIG5vIG1vcmUgaW5wdXQ6IHJldHVybiBwYXJ0aWFsIHJlc3VsdCAqLworICAgICAgICAgICAgICAgIHJldHVybiAoKHRvdGFsIC0gcmVzaWQpIC8gc2l6ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKwkodm9pZCltZW1jcHkoKHZvaWQgKilwLCAodm9pZCAqKWZwLT5fcCwgcmVzaWQpOworCWZwLT5fciAtPSByZXNpZDsKKwlmcC0+X3AgKz0gcmVzaWQ7CisJcmV0dXJuIChjb3VudCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL2ZyZW9wZW4uYyBiL2xpYmMvc3RkaW8vZnJlb3Blbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxNGQ4MTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGlvL2ZyZW9wZW4uYwpAQCAtMCwwICsxLDE1OCBAQAorLyoJJE9wZW5CU0Q6IGZyZW9wZW4uYyx2IDEuOSAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgImxvY2FsLmgiCisKKy8qIAorICogUmUtZGlyZWN0IGFuIGV4aXN0aW5nLCBvcGVuIChwcm9iYWJseSkgZmlsZSB0byBzb21lIG90aGVyIGZpbGUuIAorICogQU5TSSBpcyB3cml0dGVuIHN1Y2ggdGhhdCB0aGUgb3JpZ2luYWwgZmlsZSBnZXRzIGNsb3NlZCBpZiBhdAorICogYWxsIHBvc3NpYmxlLCBubyBtYXR0ZXIgd2hhdC4KKyAqLworRklMRSAqCitmcmVvcGVuKGNvbnN0IGNoYXIgKmZpbGUsIGNvbnN0IGNoYXIgKm1vZGUsIEZJTEUgKmZwKQoreworCWludCBmOworCWludCBmbGFncywgaXNvcGVuLCBvZmxhZ3MsIHN2ZXJybm8sIHdhbnRmZDsKKworCWlmICgoZmxhZ3MgPSBfX3NmbGFncyhtb2RlLCAmb2ZsYWdzKSkgPT0gMCkgeworCQkodm9pZCkgZmNsb3NlKGZwKTsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisKKwlpZiAoIV9fc2RpZGluaXQpCisJCV9fc2luaXQoKTsKKworCS8qCisJICogVGhlcmUgYXJlIGFjdHVhbGx5IHByb2dyYW1zIHRoYXQgZGVwZW5kIG9uIGJlaW5nIGFibGUgdG8gImZyZW9wZW4iCisJICogZGVzY3JpcHRvcnMgdGhhdCB3ZXJlbid0IG9yaWdpbmFsbHkgb3Blbi4gIEtlZXAgdGhpcyBmcm9tIGJyZWFraW5nLgorCSAqIFJlbWVtYmVyIHdoZXRoZXIgdGhlIHN0cmVhbSB3YXMgb3BlbiB0byBiZWdpbiB3aXRoLCBhbmQgd2hpY2ggZmlsZQorCSAqIGRlc2NyaXB0b3IgKGlmIGFueSkgd2FzIGFzc29jaWF0ZWQgd2l0aCBpdC4gIElmIGl0IHdhcyBhdHRhY2hlZCB0bworCSAqIGEgZGVzY3JpcHRvciwgZGVmZXIgY2xvc2luZyBpdDsgZnJlb3BlbigiL2Rldi9zdGRpbiIsICJyIiwgc3RkaW4pCisJICogc2hvdWxkIHdvcmsuICBUaGlzIGlzIHVubmVjZXNzYXJ5IGlmIGl0IHdhcyBub3QgYSBVbml4IGZpbGUuCisJICovCisJaWYgKGZwLT5fZmxhZ3MgPT0gMCkgeworCQlmcC0+X2ZsYWdzID0gX19TRU9GOwkvKiBob2xkIG9uIHRvIGl0ICovCisJCWlzb3BlbiA9IDA7CisJCXdhbnRmZCA9IC0xOworCX0gZWxzZSB7CisJCS8qIGZsdXNoIHRoZSBzdHJlYW07IEFOU0kgZG9lc24ndCByZXF1aXJlIHRoaXMuICovCisJCWlmIChmcC0+X2ZsYWdzICYgX19TV1IpCisJCQkodm9pZCkgX19zZmx1c2goZnApOworCQkvKiBpZiBjbG9zZSBpcyBOVUxMLCBjbG9zaW5nIGlzIGEgbm8tb3AsIGhlbmNlIHBvaW50bGVzcyAqLworCQlpc29wZW4gPSBmcC0+X2Nsb3NlICE9IE5VTEw7CisJCWlmICgod2FudGZkID0gZnAtPl9maWxlKSA8IDAgJiYgaXNvcGVuKSB7CisJCQkodm9pZCkgKCpmcC0+X2Nsb3NlKShmcC0+X2Nvb2tpZSk7CisJCQlpc29wZW4gPSAwOworCQl9CisJfQorCisJLyogR2V0IGEgbmV3IGRlc2NyaXB0b3IgdG8gcmVmZXIgdG8gdGhlIG5ldyBmaWxlLiAqLworCWYgPSBvcGVuKGZpbGUsIG9mbGFncywgREVGRklMRU1PREUpOworCWlmIChmIDwgMCAmJiBpc29wZW4pIHsKKwkJLyogSWYgb3V0IG9mIGZkJ3MgY2xvc2UgdGhlIG9sZCBvbmUgYW5kIHRyeSBhZ2Fpbi4gKi8KKwkJaWYgKGVycm5vID09IEVORklMRSB8fCBlcnJubyA9PSBFTUZJTEUpIHsKKwkJCSh2b2lkKSAoKmZwLT5fY2xvc2UpKGZwLT5fY29va2llKTsKKwkJCWlzb3BlbiA9IDA7CisJCQlmID0gb3BlbihmaWxlLCBvZmxhZ3MsIERFRkZJTEVNT0RFKTsKKwkJfQorCX0KKwlzdmVycm5vID0gZXJybm87CisKKwkvKgorCSAqIEZpbmlzaCBjbG9zaW5nIGZwLiAgRXZlbiBpZiB0aGUgb3BlbiBzdWNjZWVkZWQgYWJvdmUsIHdlIGNhbm5vdAorCSAqIGtlZXAgZnAtPl9iYXNlOiBpdCBtYXkgYmUgdGhlIHdyb25nIHNpemUuICBUaGlzIGxvc2VzIHRoZSBlZmZlY3QKKwkgKiBvZiBhbnkgc2V0YnVmZmVyIGNhbGxzLCBidXQgc3RkaW8gaGFzIGFsd2F5cyBkb25lIHRoaXMgYmVmb3JlLgorCSAqLworCWlmIChpc29wZW4gJiYgZiAhPSB3YW50ZmQpCisJCSh2b2lkKSAoKmZwLT5fY2xvc2UpKGZwLT5fY29va2llKTsKKwlpZiAoZnAtPl9mbGFncyAmIF9fU01CRikKKwkJZnJlZSgoY2hhciAqKWZwLT5fYmYuX2Jhc2UpOworCWZwLT5fdyA9IDA7CisJZnAtPl9yID0gMDsKKwlmcC0+X3AgPSBOVUxMOworCWZwLT5fYmYuX2Jhc2UgPSBOVUxMOworCWZwLT5fYmYuX3NpemUgPSAwOworCWZwLT5fbGJmc2l6ZSA9IDA7CisJaWYgKEhBU1VCKGZwKSkKKwkJRlJFRVVCKGZwKTsKKwlfVUIoZnApLl9zaXplID0gMDsKKwlXQ0lPX0ZSRUUoZnApOworCWlmIChIQVNMQihmcCkpCisJCUZSRUVMQihmcCk7CisJZnAtPl9sYi5fc2l6ZSA9IDA7CisKKwlpZiAoZiA8IDApIHsJCQkvKiBkaWQgbm90IGdldCBpdCBhZnRlciBhbGwgKi8KKwkJZnAtPl9mbGFncyA9IDA7CQkvKiBzZXQgaXQgZnJlZSAqLworCQllcnJubyA9IHN2ZXJybm87CS8qIHJlc3RvcmUgaW4gY2FzZSBfY2xvc2UgY2xvYmJlcmVkICovCisJCXJldHVybiAoTlVMTCk7CisJfQorCisJLyoKKwkgKiBJZiByZW9wZW5pbmcgc29tZXRoaW5nIHRoYXQgd2FzIG9wZW4gYmVmb3JlIG9uIGEgcmVhbCBmaWxlLCB0cnkKKwkgKiB0byBtYWludGFpbiB0aGUgZGVzY3JpcHRvci4gIFZhcmlvdXMgQyBsaWJyYXJ5IHJvdXRpbmVzIChwZXJyb3IpCisJICogYXNzdW1lIHN0ZGVyciBpcyBhbHdheXMgZmQgU1RERVJSX0ZJTEVOTywgZXZlbiBpZiBiZWluZyBmcmVvcGVuJ2QuCisJICovCisJaWYgKHdhbnRmZCA+PSAwICYmIGYgIT0gd2FudGZkKSB7CisJCWlmIChkdXAyKGYsIHdhbnRmZCkgPj0gMCkgeworCQkJKHZvaWQpIGNsb3NlKGYpOworCQkJZiA9IHdhbnRmZDsKKwkJfQorCX0KKworCWZwLT5fZmxhZ3MgPSBmbGFnczsKKwlmcC0+X2ZpbGUgPSBmOworCWZwLT5fY29va2llID0gZnA7CisJZnAtPl9yZWFkID0gX19zcmVhZDsKKwlmcC0+X3dyaXRlID0gX19zd3JpdGU7CisJZnAtPl9zZWVrID0gX19zc2VlazsKKwlmcC0+X2Nsb3NlID0gX19zY2xvc2U7CisKKwkvKgorCSAqIFdoZW4gb3BlbmluZyBpbiBhcHBlbmQgbW9kZSwgZXZlbiB0aG91Z2ggd2UgdXNlIE9fQVBQRU5ELAorCSAqIHdlIG5lZWQgdG8gc2VlayB0byB0aGUgZW5kIHNvIHRoYXQgZnRlbGwoKSBnZXRzIHRoZSByaWdodAorCSAqIGFuc3dlci4gIElmIHRoZSB1c2VyIHRoZW4gYWx0ZXJzIHRoZSBzZWVrIHBvaW50ZXIsIG9yCisJICogdGhlIGZpbGUgZXh0ZW5kcywgdGhpcyB3aWxsIGZhaWwsIGJ1dCB0aGVyZSBpcyBub3QgbXVjaAorCSAqIHdlIGNhbiBkbyBhYm91dCB0aGlzLiAgKFdlIGNvdWxkIHNldCBfX1NBUFAgYW5kIGNoZWNrIGluCisJICogZnNlZWsgYW5kIGZ0ZWxsLikKKwkgKi8KKwlpZiAob2ZsYWdzICYgT19BUFBFTkQpCisJCSh2b2lkKSBfX3NzZWVrKCh2b2lkICopZnAsIChmcG9zX3QpMCwgU0VFS19FTkQpOworCXJldHVybiAoZnApOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9mc2NhbmYuYyBiL2xpYmMvc3RkaW8vZnNjYW5mLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmYzZmNlYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkaW8vZnNjYW5mLmMKQEAgLTAsMCArMSw0NyBAQAorLyoJJE9wZW5CU0Q6IGZzY2FuZi5jLHYgMS45IDIwMDUvMTAvMTAgMTc6Mzc6NDQgZXNwaWUgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisKK2ludAorZnNjYW5mKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwlpbnQgcmV0OworCXZhX2xpc3QgYXA7CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwlyZXQgPSB2ZnNjYW5mKGZwLCBmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworCXJldHVybiAocmV0KTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vZnNlZWsuYyBiL2xpYmMvc3RkaW8vZnNlZWsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWMyNWUyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRpby9mc2Vlay5jCkBAIC0wLDAgKzEsMjUyIEBACisvKgkkT3BlbkJTRDogZnNlZWsuYyx2IDEuNyAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgImxvY2FsLmgiCisKKyNkZWZpbmUJUE9TX0VSUgkoLShmcG9zX3QpMSkKKworLyoKKyAqIFNlZWsgdGhlIGdpdmVuIGZpbGUgdG8gdGhlIGdpdmVuIG9mZnNldC4KKyAqIGBXaGVuY2UnIG11c3QgYmUgb25lIG9mIHRoZSB0aHJlZSBTRUVLXyogbWFjcm9zLgorICovCitpbnQKK2ZzZWVrbyhGSUxFICpmcCwgb2ZmX3Qgb2Zmc2V0LCBpbnQgd2hlbmNlKQoreworCWZwb3NfdCAoKnNlZWtmbikodm9pZCAqLCBmcG9zX3QsIGludCk7CisJZnBvc190IHRhcmdldCwgY3Vyb2ZmOworCXNpemVfdCBuOworCXN0cnVjdCBzdGF0IHN0OworCWludCBoYXZlcG9zOworCisJLyogbWFrZSBzdXJlIHN0ZGlvIGlzIHNldCB1cCAqLworCWlmICghX19zZGlkaW5pdCkKKwkJX19zaW5pdCgpOworCisJLyoKKwkgKiBIYXZlIHRvIGJlIGFibGUgdG8gc2Vlay4KKwkgKi8KKwlpZiAoKHNlZWtmbiA9IGZwLT5fc2VlaykgPT0gTlVMTCkgeworCQllcnJubyA9IEVTUElQRTsJCQkvKiBoaXN0b3JpYyBwcmFjdGljZSAqLworCQlyZXR1cm4gKEVPRik7CisJfQorCisJLyoKKwkgKiBDaGFuZ2UgYW55IFNFRUtfQ1VSIHRvIFNFRUtfU0VULCBhbmQgY2hlY2sgYHdoZW5jZScgYXJndW1lbnQuCisJICogQWZ0ZXIgdGhpcywgd2hlbmNlIGlzIGVpdGhlciBTRUVLX1NFVCBvciBTRUVLX0VORC4KKwkgKi8KKwlzd2l0Y2ggKHdoZW5jZSkgeworCisJY2FzZSBTRUVLX0NVUjoKKwkJLyoKKwkJICogSW4gb3JkZXIgdG8gc2VlayByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBzdHJlYW0gb2Zmc2V0LAorCQkgKiB3ZSBoYXZlIHRvIGZpcnN0IGZpbmQgdGhlIGN1cnJlbnQgc3RyZWFtIG9mZnNldCBhIGxhCisJCSAqIGZ0ZWxsIChzZWUgZnRlbGwgZm9yIGRldGFpbHMpLgorCQkgKi8KKwkJX19zZmx1c2goZnApOwkvKiBtYXkgYWRqdXN0IHNlZWsgb2Zmc2V0IG9uIGFwcGVuZCBzdHJlYW0gKi8KKwkJaWYgKGZwLT5fZmxhZ3MgJiBfX1NPRkYpCisJCQljdXJvZmYgPSBmcC0+X29mZnNldDsKKwkJZWxzZSB7CisJCQljdXJvZmYgPSAoKnNlZWtmbikoZnAtPl9jb29raWUsIChmcG9zX3QpMCwgU0VFS19DVVIpOworCQkJaWYgKGN1cm9mZiA9PSAoZnBvc190KS0xKQorCQkJCXJldHVybiAoRU9GKTsKKwkJfQorCQlpZiAoZnAtPl9mbGFncyAmIF9fU1JEKSB7CisJCQljdXJvZmYgLT0gZnAtPl9yOworCQkJaWYgKEhBU1VCKGZwKSkKKwkJCQljdXJvZmYgLT0gZnAtPl91cjsKKwkJfSBlbHNlIGlmIChmcC0+X2ZsYWdzICYgX19TV1IgJiYgZnAtPl9wICE9IE5VTEwpCisJCQljdXJvZmYgKz0gZnAtPl9wIC0gZnAtPl9iZi5fYmFzZTsKKworCQlvZmZzZXQgKz0gY3Vyb2ZmOworCQl3aGVuY2UgPSBTRUVLX1NFVDsKKwkJaGF2ZXBvcyA9IDE7CisJCWJyZWFrOworCisJY2FzZSBTRUVLX1NFVDoKKwljYXNlIFNFRUtfRU5EOgorCQljdXJvZmYgPSAwOwkJLyogWFhYIGp1c3QgdG8ga2VlcCBnY2MgcXVpZXQgKi8KKwkJaGF2ZXBvcyA9IDA7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZXJybm8gPSBFSU5WQUw7CisJCXJldHVybiAoRU9GKTsKKwl9CisKKwkvKgorCSAqIENhbiBvbmx5IG9wdGltaXNlIGlmOgorCSAqCXJlYWRpbmcgKGFuZCBub3QgcmVhZGluZy1hbmQtd3JpdGluZyk7CisJICoJbm90IHVuYnVmZmVyZWQ7IGFuZAorCSAqCXRoaXMgaXMgYSBgcmVndWxhcicgVW5peCBmaWxlIChhbmQgaGVuY2Ugc2Vla2ZuPT1fX3NzZWVrKS4KKwkgKiBXZSBtdXN0IGNoZWNrIF9fTkJGIGZpcnN0LCBiZWNhdXNlIGl0IGlzIHBvc3NpYmxlIHRvIGhhdmUgX19OQkYKKwkgKiBhbmQgX19TT1BUIGJvdGggc2V0LgorCSAqLworCWlmIChmcC0+X2JmLl9iYXNlID09IE5VTEwpCisJCV9fc21ha2VidWYoZnApOworCWlmIChmcC0+X2ZsYWdzICYgKF9fU1dSIHwgX19TUlcgfCBfX1NOQkYgfCBfX1NOUFQpKQorCQlnb3RvIGR1bWI7CisJaWYgKChmcC0+X2ZsYWdzICYgX19TT1BUKSA9PSAwKSB7CisJCWlmIChzZWVrZm4gIT0gX19zc2VlayB8fAorCQkgICAgZnAtPl9maWxlIDwgMCB8fCBmc3RhdChmcC0+X2ZpbGUsICZzdCkgfHwKKwkJICAgIChzdC5zdF9tb2RlICYgU19JRk1UKSAhPSBTX0lGUkVHKSB7CisJCQlmcC0+X2ZsYWdzIHw9IF9fU05QVDsKKwkJCWdvdG8gZHVtYjsKKwkJfQorCQlmcC0+X2Jsa3NpemUgPSBzdC5zdF9ibGtzaXplOworCQlmcC0+X2ZsYWdzIHw9IF9fU09QVDsKKwl9CisKKwkvKgorCSAqIFdlIGFyZSByZWFkaW5nOyB3ZSBjYW4gdHJ5IHRvIG9wdGltaXNlLgorCSAqIEZpZ3VyZSBvdXQgd2hlcmUgd2UgYXJlIGdvaW5nIGFuZCB3aGVyZSB3ZSBhcmUgbm93LgorCSAqLworCWlmICh3aGVuY2UgPT0gU0VFS19TRVQpCisJCXRhcmdldCA9IG9mZnNldDsKKwllbHNlIHsKKwkJaWYgKGZzdGF0KGZwLT5fZmlsZSwgJnN0KSkKKwkJCWdvdG8gZHVtYjsKKwkJdGFyZ2V0ID0gc3Quc3Rfc2l6ZSArIG9mZnNldDsKKwl9CisKKwlpZiAoIWhhdmVwb3MpIHsKKwkJaWYgKGZwLT5fZmxhZ3MgJiBfX1NPRkYpCisJCQljdXJvZmYgPSBmcC0+X29mZnNldDsKKwkJZWxzZSB7CisJCQljdXJvZmYgPSAoKnNlZWtmbikoZnAtPl9jb29raWUsIChmcG9zX3QpMCwgU0VFS19DVVIpOworCQkJaWYgKGN1cm9mZiA9PSBQT1NfRVJSKQorCQkJCWdvdG8gZHVtYjsKKwkJfQorCQljdXJvZmYgLT0gZnAtPl9yOworCQlpZiAoSEFTVUIoZnApKQorCQkJY3Vyb2ZmIC09IGZwLT5fdXI7CisJfQorCisJLyoKKwkgKiBDb21wdXRlIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGlucHV0IGJ1ZmZlciAocHJldGVuZGluZworCSAqIHRoYXQgYW55IHVuZ2V0YygpIGlucHV0IGhhcyBiZWVuIGRpc2NhcmRlZCkuICBBZGp1c3QgY3VycmVudAorCSAqIG9mZnNldCBiYWNrd2FyZHMgYnkgdGhpcyBjb3VudCBzbyB0aGF0IGl0IHJlcHJlc2VudHMgdGhlCisJICogZmlsZSBvZmZzZXQgZm9yIHRoZSBmaXJzdCBieXRlIGluIHRoZSBjdXJyZW50IGlucHV0IGJ1ZmZlci4KKwkgKi8KKwlpZiAoSEFTVUIoZnApKSB7CisJCWN1cm9mZiArPSBmcC0+X3I7CS8qIGtpbGwgb2ZmIHVuZ2V0YyAqLworCQluID0gZnAtPl91cCAtIGZwLT5fYmYuX2Jhc2U7CisJCWN1cm9mZiAtPSBuOworCQluICs9IGZwLT5fdXI7CisJfSBlbHNlIHsKKwkJbiA9IGZwLT5fcCAtIGZwLT5fYmYuX2Jhc2U7CisJCWN1cm9mZiAtPSBuOworCQluICs9IGZwLT5fcjsKKwl9CisKKwkvKgorCSAqIElmIHRoZSB0YXJnZXQgb2Zmc2V0IGlzIHdpdGhpbiB0aGUgY3VycmVudCBidWZmZXIsCisJICogc2ltcGx5IGFkanVzdCB0aGUgcG9pbnRlcnMsIGNsZWFyIEVPRiwgdW5kbyB1bmdldGMoKSwKKwkgKiBhbmQgcmV0dXJuLiAgKElmIHRoZSBidWZmZXIgd2FzIG1vZGlmaWVkLCB3ZSBoYXZlIHRvCisJICogc2tpcCB0aGlzOyBzZWUgZmdldGxuLmMuKQorCSAqLworCWlmICgoZnAtPl9mbGFncyAmIF9fU01PRCkgPT0gMCAmJgorCSAgICB0YXJnZXQgPj0gY3Vyb2ZmICYmIHRhcmdldCA8IChmcG9zX3QpKGN1cm9mZiArIG4pKSB7CisJCWludCBvID0gdGFyZ2V0IC0gY3Vyb2ZmOworCisJCWZwLT5fcCA9IGZwLT5fYmYuX2Jhc2UgKyBvOworCQlmcC0+X3IgPSBuIC0gbzsKKwkJaWYgKEhBU1VCKGZwKSkKKwkJCUZSRUVVQihmcCk7CisJCWZwLT5fZmxhZ3MgJj0gfl9fU0VPRjsKKwkJcmV0dXJuICgwKTsKKwl9CisKKwkvKgorCSAqIFRoZSBwbGFjZSB3ZSB3YW50IHRvIGdldCB0byBpcyBub3Qgd2l0aGluIHRoZSBjdXJyZW50IGJ1ZmZlciwKKwkgKiBidXQgd2UgY2FuIHN0aWxsIGJlIGtpbmQgdG8gdGhlIGtlcm5lbCBjb3B5b3V0IG1lY2hhbmlzbS4KKwkgKiBCeSBhbGlnbmluZyB0aGUgZmlsZSBvZmZzZXQgdG8gYSBibG9jayBib3VuZGFyeSwgd2UgY2FuIGxldAorCSAqIHRoZSBrZXJuZWwgdXNlIHRoZSBWTSBoYXJkd2FyZSB0byBtYXAgcGFnZXMgaW5zdGVhZCBvZgorCSAqIGNvcHlpbmcgYnl0ZXMgbGFib3Jpb3VzbHkuICBVc2luZyBhIGJsb2NrIGJvdW5kYXJ5IGFsc28KKwkgKiBlbnN1cmVzIHRoYXQgd2Ugb25seSByZWFkIG9uZSBibG9jaywgcmF0aGVyIHRoYW4gdHdvLgorCSAqLworCWN1cm9mZiA9IHRhcmdldCAmIH4oZnAtPl9ibGtzaXplIC0gMSk7CisJaWYgKCgqc2Vla2ZuKShmcC0+X2Nvb2tpZSwgY3Vyb2ZmLCBTRUVLX1NFVCkgPT0gUE9TX0VSUikKKwkJZ290byBkdW1iOworCWZwLT5fciA9IDA7CisgCWZwLT5fcCA9IGZwLT5fYmYuX2Jhc2U7CisJaWYgKEhBU1VCKGZwKSkKKwkJRlJFRVVCKGZwKTsKKwlmcC0+X2ZsYWdzICY9IH5fX1NFT0Y7CisJbiA9IHRhcmdldCAtIGN1cm9mZjsKKwlpZiAobikgeworCQlpZiAoX19zcmVmaWxsKGZwKSB8fCAoc2l6ZV90KWZwLT5fciA8IG4pCisJCQlnb3RvIGR1bWI7CisJCWZwLT5fcCArPSBuOworCQlmcC0+X3IgLT0gbjsKKwl9CisJcmV0dXJuICgwKTsKKworCS8qCisJICogV2UgZ2V0IGhlcmUgaWYgd2UgY2Fubm90IG9wdGltaXNlIHRoZSBzZWVrIC4uLiBqdXN0CisJICogZG8gaXQuICBBbGxvdyB0aGUgc2VlayBmdW5jdGlvbiB0byBjaGFuZ2UgZnAtPl9iZi5fYmFzZS4KKwkgKi8KK2R1bWI6CisJaWYgKF9fc2ZsdXNoKGZwKSB8fAorCSAgICAoKnNlZWtmbikoZnAtPl9jb29raWUsIChmcG9zX3Qpb2Zmc2V0LCB3aGVuY2UpID09IFBPU19FUlIpIHsKKwkJcmV0dXJuIChFT0YpOworCX0KKwkvKiBzdWNjZXNzOiBjbGVhciBFT0YgaW5kaWNhdG9yIGFuZCBkaXNjYXJkIHVuZ2V0YygpIGRhdGEgKi8KKwlpZiAoSEFTVUIoZnApKQorCQlGUkVFVUIoZnApOworCWZwLT5fcCA9IGZwLT5fYmYuX2Jhc2U7CisJZnAtPl9yID0gMDsKKwkvKiBmcC0+X3cgPSAwOyAqLwkvKiB1bm5lY2Vzc2FyeSAoSSB0aGluay4uLikgKi8KKwlmcC0+X2ZsYWdzICY9IH5fX1NFT0Y7CisJcmV0dXJuICgwKTsKK30KKworLyoKKyAqIGZzZWVrKCkncyBvZmZzZXQgaXMgYSBsb25nIGFuZCBzaXplb2Yob2ZmX3QpICE9IHNpemVvZihsb25nKSBvbiBhbGwgYXJjaGVzCisgKi8KKyNpZiBkZWZpbmVkKF9fYWxwaGFfXykgJiYgZGVmaW5lZChfX2luZHJfcmVmZXJlbmNlKQorX19pbmRyX3JlZmVyZW5jZShmc2Vla28sIGZzZWVrKTsKKyNlbHNlCitpbnQKK2ZzZWVrKEZJTEUgKmZwLCBsb25nIG9mZnNldCwgaW50IHdoZW5jZSkKK3sKKwlvZmZfdCBvZmYgPSBvZmZzZXQ7CisKKwlyZXR1cm4oZnNlZWtvKGZwLCBvZmYsIHdoZW5jZSkpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL2ZzZXRwb3MuYyBiL2xpYmMvc3RkaW8vZnNldHBvcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2MjRmZTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGlvL2ZzZXRwb3MuYwpAQCAtMCwwICsxLDQzIEBACisvKgkkT3BlbkJTRDogZnNldHBvcy5jLHYgMS42IDIwMDUvMDgvMDggMDg6MDU6MzYgZXNwaWUgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKy8qCisgKiBmc2V0cG9zOiBsaWtlIGZzZWVrby4KKyAqLworaW50Citmc2V0cG9zKEZJTEUgKmlvcCwgY29uc3QgZnBvc190ICpwb3MpCit7CisJcmV0dXJuIChmc2Vla28oaW9wLCAob2ZmX3QpKnBvcywgU0VFS19TRVQpKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vZnRlbGwuYyBiL2xpYmMvc3RkaW8vZnRlbGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2Q0NDllCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRpby9mdGVsbC5jCkBAIC0wLDAgKzEsOTcgQEAKKy8qCSRPcGVuQlNEOiBmdGVsbC5jLHYgMS42IDIwMDUvMDgvMDggMDg6MDU6MzYgZXNwaWUgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorCisvKgorICogZnRlbGxvOiByZXR1cm4gY3VycmVudCBvZmZzZXQuCisgKi8KK29mZl90CitmdGVsbG8oRklMRSAqZnApCit7CisJZnBvc190IHBvczsKKworCWlmIChmcC0+X3NlZWsgPT0gTlVMTCkgeworCQllcnJubyA9IEVTUElQRTsJCQkvKiBoaXN0b3JpYyBwcmFjdGljZSAqLworCQlyZXR1cm4gKChvZmZfdCktMSk7CisJfQorCisJLyoKKwkgKiBGaW5kIG9mZnNldCBvZiB1bmRlcmx5aW5nIEkvTyBvYmplY3QsIHRoZW4KKwkgKiBhZGp1c3QgZm9yIGJ1ZmZlcmVkIGJ5dGVzLgorCSAqLworCV9fc2ZsdXNoKGZwKTsJCS8qIG1heSBhZGp1c3Qgc2VlayBvZmZzZXQgb24gYXBwZW5kIHN0cmVhbSAqLworCWlmIChmcC0+X2ZsYWdzICYgX19TT0ZGKQorCQlwb3MgPSBmcC0+X29mZnNldDsKKwllbHNlIHsKKwkJcG9zID0gKCpmcC0+X3NlZWspKGZwLT5fY29va2llLCAoZnBvc190KTAsIFNFRUtfQ1VSKTsKKwkJaWYgKHBvcyA9PSAtMUwpCisJCQlyZXR1cm4gKHBvcyk7CisJfQorCWlmIChmcC0+X2ZsYWdzICYgX19TUkQpIHsKKwkJLyoKKwkJICogUmVhZGluZy4gIEFueSB1bnJlYWQgY2hhcmFjdGVycyAoaW5jbHVkaW5nCisJCSAqIHRob3NlIGZyb20gdW5nZXRjKSBjYXVzZSB0aGUgcG9zaXRpb24gdG8gYmUKKwkJICogc21hbGxlciB0aGFuIHRoYXQgaW4gdGhlIHVuZGVybHlpbmcgb2JqZWN0LgorCQkgKi8KKwkJcG9zIC09IGZwLT5fcjsKKwkJaWYgKEhBU1VCKGZwKSkKKwkJCXBvcyAtPSBmcC0+X3VyOworCX0gZWxzZSBpZiAoZnAtPl9mbGFncyAmIF9fU1dSICYmIGZwLT5fcCAhPSBOVUxMKSB7CisJCS8qCisJCSAqIFdyaXRpbmcuICBBbnkgYnVmZmVyZWQgY2hhcmFjdGVycyBjYXVzZSB0aGUKKwkJICogcG9zaXRpb24gdG8gYmUgZ3JlYXRlciB0aGFuIHRoYXQgaW4gdGhlCisJCSAqIHVuZGVybHlpbmcgb2JqZWN0LgorCQkgKi8KKwkJcG9zICs9IGZwLT5fcCAtIGZwLT5fYmYuX2Jhc2U7CisJfQorCXJldHVybiAocG9zKTsKK30KKworLyoKKyAqIGZ0ZWxsKCkgcmV0dXJucyBhIGxvbmcgYW5kIHNpemVvZihvZmZfdCkgIT0gc2l6ZW9mKGxvbmcpIG9uIGFsbCBhcmNoZXMKKyAqLworI2lmIGRlZmluZWQoX19hbHBoYV9fKSAmJiBkZWZpbmVkKF9faW5kcl9yZWZlcmVuY2UpCitfX2luZHJfcmVmZXJlbmNlKGZ0ZWxsbywgZnRlbGwpOworI2Vsc2UKK2xvbmcKK2Z0ZWxsKEZJTEUgKmZwKQoreworCWxvbmcgcG9zOworCisJcG9zID0gKGxvbmcpZnRlbGxvKGZwKTsKKwlyZXR1cm4ocG9zKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9mdW5vcGVuLmMgYi9saWJjL3N0ZGlvL2Z1bm9wZW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODVlZTk2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRpby9mdW5vcGVuLmMKQEAgLTAsMCArMSw2OCBAQAorLyoJJE9wZW5CU0Q6IGZ1bm9wZW4uYyx2IDEuOCAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKworRklMRSAqCitmdW5vcGVuKGNvbnN0IHZvaWQgKmNvb2tpZSwgaW50ICgqcmVhZGZuKSh2b2lkICosIGNoYXIgKiwgaW50KSwKKwlpbnQgKCp3cml0ZWZuKSh2b2lkICosIGNvbnN0IGNoYXIgKiwgaW50KSwKKwlmcG9zX3QgKCpzZWVrZm4pKHZvaWQgKiwgZnBvc190LCBpbnQpLCBpbnQgKCpjbG9zZWZuKSh2b2lkICopKQoreworCUZJTEUgKmZwOworCWludCBmbGFnczsKKworCWlmIChyZWFkZm4gPT0gTlVMTCkgeworCQlpZiAod3JpdGVmbiA9PSBOVUxMKSB7CQkvKiBpbGxlZ2FsICovCisJCQllcnJubyA9IEVJTlZBTDsKKwkJCXJldHVybiAoTlVMTCk7CisJCX0gZWxzZQorCQkJZmxhZ3MgPSBfX1NXUjsJCS8qIHdyaXRlIG9ubHkgKi8KKwl9IGVsc2UgeworCQlpZiAod3JpdGVmbiA9PSBOVUxMKQorCQkJZmxhZ3MgPSBfX1NSRDsJCS8qIHJlYWQgb25seSAqLworCQllbHNlCisJCQlmbGFncyA9IF9fU1JXOwkJLyogcmVhZC13cml0ZSAqLworCX0KKwlpZiAoKGZwID0gX19zZnAoKSkgPT0gTlVMTCkKKwkJcmV0dXJuIChOVUxMKTsKKwlmcC0+X2ZsYWdzID0gZmxhZ3M7CisJZnAtPl9maWxlID0gLTE7CisJZnAtPl9jb29raWUgPSAodm9pZCAqKWNvb2tpZTsJCS8qIFNBRkU6IGNvb2tpZSBub3QgbW9kaWZpZWQgKi8KKwlmcC0+X3JlYWQgPSByZWFkZm47CisJZnAtPl93cml0ZSA9IHdyaXRlZm47CisJZnAtPl9zZWVrID0gc2Vla2ZuOworCWZwLT5fY2xvc2UgPSBjbG9zZWZuOworCXJldHVybiAoZnApOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9mdndyaXRlLmMgYi9saWJjL3N0ZGlvL2Z2d3JpdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmVhNjcyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRpby9mdndyaXRlLmMKQEAgLTAsMCArMSwyMDggQEAKKy8qCSRPcGVuQlNEOiBmdndyaXRlLmMsdiAxLjE0IDIwMDUvMDgvMDggMDg6MDU6MzYgZXNwaWUgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorI2luY2x1ZGUgImZ2d3JpdGUuaCIKKworLyoKKyAqIFdyaXRlIHNvbWUgbWVtb3J5IHJlZ2lvbnMuICBSZXR1cm4gemVybyBvbiBzdWNjZXNzLCBFT0Ygb24gZXJyb3IuCisgKgorICogVGhpcyByb3V0aW5lIGlzIGxhcmdlIGFuZCB1bnNpZ2h0bHksIGJ1dCBtb3N0IG9mIHRoZSB1Z2xpbmVzcyBkdWUKKyAqIHRvIHRoZSB0aHJlZSBkaWZmZXJlbnQga2luZHMgb2Ygb3V0cHV0IGJ1ZmZlcmluZyBpcyBoYW5kbGVkIGhlcmUuCisgKi8KK2ludAorX19zZnZ3cml0ZShGSUxFICpmcCwgc3RydWN0IF9fc3VpbyAqdWlvKQoreworCXNpemVfdCBsZW47CisJY2hhciAqcDsKKwlzdHJ1Y3QgX19zaW92ICppb3Y7CisJaW50IHcsIHM7CisJY2hhciAqbmw7CisJaW50IG5sa25vd24sIG5sZGlzdDsKKworCWlmICgobGVuID0gdWlvLT51aW9fcmVzaWQpID09IDApCisJCXJldHVybiAoMCk7CisJLyogbWFrZSBzdXJlIHdlIGNhbiB3cml0ZSAqLworCWlmIChjYW50d3JpdGUoZnApKSB7CisJCWVycm5vID0gRUJBREY7CisJCXJldHVybiAoRU9GKTsKKwl9CisKKyNkZWZpbmUJTUlOKGEsIGIpICgoYSkgPCAoYikgPyAoYSkgOiAoYikpCisjZGVmaW5lCUNPUFkobikJICAodm9pZCltZW1jcHkoKHZvaWQgKilmcC0+X3AsICh2b2lkICopcCwgKHNpemVfdCkobikpCisKKwlpb3YgPSB1aW8tPnVpb19pb3Y7CisJcCA9IGlvdi0+aW92X2Jhc2U7CisJbGVuID0gaW92LT5pb3ZfbGVuOworCWlvdisrOworI2RlZmluZSBHRVRJT1YoZXh0cmFfd29yaykgXAorCXdoaWxlIChsZW4gPT0gMCkgeyBcCisJCWV4dHJhX3dvcms7IFwKKwkJcCA9IGlvdi0+aW92X2Jhc2U7IFwKKwkJbGVuID0gaW92LT5pb3ZfbGVuOyBcCisJCWlvdisrOyBcCisJfQorCWlmIChmcC0+X2ZsYWdzICYgX19TTkJGKSB7CisJCS8qCisJCSAqIFVuYnVmZmVyZWQ6IHdyaXRlIHVwIHRvIEJVRlNJWiBieXRlcyBhdCBhIHRpbWUuCisJCSAqLworCQlkbyB7CisJCQlHRVRJT1YoOyk7CisjaWYgMSAgLyogQklPTklDOiBkb24ndCBsaW1pdCB0byAxS0Igd3JpdGVzICovCisgICAgICAgICAgICB3ID0gKCpmcC0+X3dyaXRlKShmcC0+X2Nvb2tpZSwgcCwgbGVuKTsKKyNlbHNlCisJCQl3ID0gKCpmcC0+X3dyaXRlKShmcC0+X2Nvb2tpZSwgcCwgTUlOKGxlbiwgQlVGU0laMikpOworI2VuZGlmCisJCQlpZiAodyA8PSAwKQorCQkJCWdvdG8gZXJyOworCQkJcCArPSB3OworCQkJbGVuIC09IHc7CisJCX0gd2hpbGUgKCh1aW8tPnVpb19yZXNpZCAtPSB3KSAhPSAwKTsKKwl9IGVsc2UgaWYgKChmcC0+X2ZsYWdzICYgX19TTEJGKSA9PSAwKSB7CisJCS8qCisJCSAqIEZ1bGx5IGJ1ZmZlcmVkOiBmaWxsIHBhcnRpYWxseSBmdWxsIGJ1ZmZlciwgaWYgYW55LAorCQkgKiBhbmQgdGhlbiBmbHVzaC4gIElmIHRoZXJlIGlzIG5vIHBhcnRpYWwgYnVmZmVyLCB3cml0ZQorCQkgKiBvbmUgX2JmLl9zaXplIGJ5dGUgY2h1bmsgZGlyZWN0bHkgKHdpdGhvdXQgY29weWluZykuCisJCSAqCisJCSAqIFN0cmluZyBvdXRwdXQgaXMgYSBzcGVjaWFsIGNhc2U6IHdyaXRlIGFzIG1hbnkgYnl0ZXMKKwkJICogYXMgZml0LCBidXQgcHJldGVuZCB3ZSB3cm90ZSBldmVyeXRoaW5nLiAgVGhpcyBtYWtlcworCQkgKiBzbnByaW50ZigpIHJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIG5lZWRlZCwgcmF0aGVyCisJCSAqIHRoYW4gdGhlIG51bWJlciB1c2VkLCBhbmQgYXZvaWRzIGl0cyB3cml0ZSBmdW5jdGlvbgorCQkgKiAoc28gdGhhdCB0aGUgd3JpdGUgZnVuY3Rpb24gY2FuIGJlIGludmFsaWQpLgorCQkgKi8KKwkJZG8geworCQkJR0VUSU9WKDspOworCQkJaWYgKChmcC0+X2ZsYWdzICYgKF9fU0FMQyB8IF9fU1NUUikpID09CisJCQkgICAgKF9fU0FMQyB8IF9fU1NUUikgJiYgZnAtPl93IDwgKGludClsZW4pIHsKKwkJCQlzaXplX3QgYmxlbiA9IGZwLT5fcCAtIGZwLT5fYmYuX2Jhc2U7CisJCQkJdW5zaWduZWQgY2hhciAqX2Jhc2U7CisJCQkJaW50IF9zaXplOworCisJCQkJLyogQWxsb2NhdGUgc3BhY2UgZXhwb25lbnRpYWxseS4gKi8KKwkJCQlfc2l6ZSA9IGZwLT5fYmYuX3NpemU7CisJCQkJZG8geworCQkJCQlfc2l6ZSA9IChfc2l6ZSA8PCAxKSArIDE7CisJCQkJfSB3aGlsZSAoX3NpemUgPCAoaW50KShibGVuICsgbGVuKSk7CisJCQkJX2Jhc2UgPSByZWFsbG9jKGZwLT5fYmYuX2Jhc2UsIF9zaXplICsgMSk7CisJCQkJaWYgKF9iYXNlID09IE5VTEwpCisJCQkJCWdvdG8gZXJyOworCQkJCWZwLT5fdyArPSBfc2l6ZSAtIGZwLT5fYmYuX3NpemU7CisJCQkJZnAtPl9iZi5fYmFzZSA9IF9iYXNlOworCQkJCWZwLT5fYmYuX3NpemUgPSBfc2l6ZTsKKwkJCQlmcC0+X3AgPSBfYmFzZSArIGJsZW47CisJCQl9CisJCQl3ID0gZnAtPl93OworCQkJaWYgKGZwLT5fZmxhZ3MgJiBfX1NTVFIpIHsKKwkJCQlpZiAoKGludClsZW4gPCB3KQorCQkJCQl3ID0gbGVuOworCQkJCUNPUFkodyk7CS8qIGNvcHkgTUlOKGZwLT5fdyxsZW4pLCAqLworCQkJCWZwLT5fdyAtPSB3OworCQkJCWZwLT5fcCArPSB3OworCQkJCXcgPSBsZW47CS8qIGJ1dCBwcmV0ZW5kIGNvcGllZCBhbGwgKi8KKwkJCX0gZWxzZSBpZiAoZnAtPl9wID4gZnAtPl9iZi5fYmFzZSAmJiAoaW50KWxlbiA+IHcpIHsKKwkJCQkvKiBmaWxsIGFuZCBmbHVzaCAqLworCQkJCUNPUFkodyk7CisJCQkJLyogZnAtPl93IC09IHc7ICovIC8qIHVubmVlZGVkICovCisJCQkJZnAtPl9wICs9IHc7CisJCQkJaWYgKGZmbHVzaChmcCkpCisJCQkJCWdvdG8gZXJyOworCQkJfSBlbHNlIGlmICgoaW50KWxlbiA+PSAodyA9IGZwLT5fYmYuX3NpemUpKSB7CisJCQkJLyogd3JpdGUgZGlyZWN0bHkgKi8KKwkJCQl3ID0gKCpmcC0+X3dyaXRlKShmcC0+X2Nvb2tpZSwgcCwgdyk7CisJCQkJaWYgKHcgPD0gMCkKKwkJCQkJZ290byBlcnI7CisJCQl9IGVsc2UgeworCQkJCS8qIGZpbGwgYW5kIGRvbmUgKi8KKwkJCQl3ID0gbGVuOworCQkJCUNPUFkodyk7CisJCQkJZnAtPl93IC09IHc7CisJCQkJZnAtPl9wICs9IHc7CisJCQl9CisJCQlwICs9IHc7CisJCQlsZW4gLT0gdzsKKwkJfSB3aGlsZSAoKHVpby0+dWlvX3Jlc2lkIC09IHcpICE9IDApOworCX0gZWxzZSB7CisJCS8qCisJCSAqIExpbmUgYnVmZmVyZWQ6IGxpa2UgZnVsbHkgYnVmZmVyZWQsIGJ1dCB3ZQorCQkgKiBtdXN0IGNoZWNrIGZvciBuZXdsaW5lcy4gIENvbXB1dGUgdGhlIGRpc3RhbmNlCisJCSAqIHRvIHRoZSBmaXJzdCBuZXdsaW5lIChpbmNsdWRpbmcgdGhlIG5ld2xpbmUpLAorCQkgKiBvciBgaW5maW5pdHknIGlmIHRoZXJlIGlzIG5vbmUsIHRoZW4gcHJldGVuZAorCQkgKiB0aGF0IHRoZSBhbW91bnQgdG8gd3JpdGUgaXMgTUlOKGxlbixubGRpc3QpLgorCQkgKi8KKwkJbmxrbm93biA9IDA7CisJCW5sZGlzdCA9IDA7CS8qIFhYWCBqdXN0IHRvIGtlZXAgZ2NjIGhhcHB5ICovCisJCWRvIHsKKwkJCUdFVElPVihubGtub3duID0gMCk7CisJCQlpZiAoIW5sa25vd24pIHsKKwkJCQlubCA9IG1lbWNocigodm9pZCAqKXAsICdcbicsIGxlbik7CisJCQkJbmxkaXN0ID0gbmwgPyBubCArIDEgLSBwIDogKGludClsZW4gKyAxOworCQkJCW5sa25vd24gPSAxOworCQkJfQorCQkJcyA9IE1JTigoaW50KWxlbiwgbmxkaXN0KTsKKwkJCXcgPSBmcC0+X3cgKyBmcC0+X2JmLl9zaXplOworCQkJaWYgKGZwLT5fcCA+IGZwLT5fYmYuX2Jhc2UgJiYgcyA+IHcpIHsKKwkJCQlDT1BZKHcpOworCQkJCS8qIGZwLT5fdyAtPSB3OyAqLworCQkJCWZwLT5fcCArPSB3OworCQkJCWlmIChmZmx1c2goZnApKQorCQkJCQlnb3RvIGVycjsKKwkJCX0gZWxzZSBpZiAocyA+PSAodyA9IGZwLT5fYmYuX3NpemUpKSB7CisJCQkJdyA9ICgqZnAtPl93cml0ZSkoZnAtPl9jb29raWUsIHAsIHcpOworCQkJCWlmICh3IDw9IDApCisJCQkJIAlnb3RvIGVycjsKKwkJCX0gZWxzZSB7CisJCQkJdyA9IHM7CisJCQkJQ09QWSh3KTsKKwkJCQlmcC0+X3cgLT0gdzsKKwkJCQlmcC0+X3AgKz0gdzsKKwkJCX0KKwkJCWlmICgobmxkaXN0IC09IHcpID09IDApIHsKKwkJCQkvKiBjb3BpZWQgdGhlIG5ld2xpbmU6IGZsdXNoIGFuZCBmb3JnZXQgKi8KKwkJCQlpZiAoZmZsdXNoKGZwKSkKKwkJCQkJZ290byBlcnI7CisJCQkJbmxrbm93biA9IDA7CisJCQl9CisJCQlwICs9IHc7CisJCQlsZW4gLT0gdzsKKwkJfSB3aGlsZSAoKHVpby0+dWlvX3Jlc2lkIC09IHcpICE9IDApOworCX0KKwlyZXR1cm4gKDApOworCitlcnI6CisJZnAtPl9mbGFncyB8PSBfX1NFUlI7CisJcmV0dXJuIChFT0YpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9mdndyaXRlLmggYi9saWJjL3N0ZGlvL2Z2d3JpdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzQ0ZTQyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRpby9mdndyaXRlLmgKQEAgLTAsMCArMSw0OCBAQAorLyoJJE9wZW5CU0Q6IGZ2d3JpdGUuaCx2IDEuNSAyMDAzLzA2LzAyIDIwOjE4OjM3IG1pbGxlcnQgRXhwICQJKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorICogSS9PIGRlc2NyaXB0b3JzIGZvciBfX3NmdndyaXRlKCkuCisgKi8KK3N0cnVjdCBfX3Npb3YgeworCXZvaWQJKmlvdl9iYXNlOworCXNpemVfdAlpb3ZfbGVuOworfTsKK3N0cnVjdCBfX3N1aW8geworCXN0cnVjdAlfX3Npb3YgKnVpb19pb3Y7CisJaW50CXVpb19pb3ZjbnQ7CisJaW50CXVpb19yZXNpZDsKK307CisKK2V4dGVybiBpbnQgX19zZnZ3cml0ZShGSUxFICosIHN0cnVjdCBfX3N1aW8gKik7CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL2Z3YWxrLmMgYi9saWJjL3N0ZGlvL2Z3YWxrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYwNmNmMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkaW8vZndhbGsuYwpAQCAtMCwwICsxLDUyIEBACisvKgkkT3BlbkJTRDogZndhbGsuYyx2IDEuNyAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKyNpbmNsdWRlICJnbHVlLmgiCisKK2ludAorX2Z3YWxrKGludCAoKmZ1bmN0aW9uKShGSUxFICopKQoreworCUZJTEUgKmZwOworCWludCBuLCByZXQ7CisJc3RydWN0IGdsdWUgKmc7CisKKwlyZXQgPSAwOworCWZvciAoZyA9ICZfX3NnbHVlOyBnICE9IE5VTEw7IGcgPSBnLT5uZXh0KQorCQlmb3IgKGZwID0gZy0+aW9icywgbiA9IGctPm5pb2JzOyAtLW4gPj0gMDsgZnArKykKKwkJCWlmIChmcC0+X2ZsYWdzICE9IDApCisJCQkJcmV0IHw9ICgqZnVuY3Rpb24pKGZwKTsKKwlyZXR1cm4gKHJldCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL2Z3cml0ZS5jIGIvbGliYy9zdGRpby9md3JpdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTUwOGRjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRpby9md3JpdGUuYwpAQCAtMCwwICsxLDYyIEBACisvKgkkT3BlbkJTRDogZndyaXRlLmMsdiAxLjUgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorI2luY2x1ZGUgImZ2d3JpdGUuaCIKKworLyoKKyAqIFdyaXRlIGBjb3VudCcgb2JqZWN0cyAoZWFjaCBzaXplIGBzaXplJykgZnJvbSBtZW1vcnkgdG8gdGhlIGdpdmVuIGZpbGUuCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiB3aG9sZSBvYmplY3RzIHdyaXR0ZW4uCisgKi8KK3NpemVfdAorZndyaXRlKGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUsIHNpemVfdCBjb3VudCwgRklMRSAqZnApCit7CisJc2l6ZV90IG47CisJc3RydWN0IF9fc3VpbyB1aW87CisJc3RydWN0IF9fc2lvdiBpb3Y7CisKKwlpb3YuaW92X2Jhc2UgPSAodm9pZCAqKWJ1ZjsKKwl1aW8udWlvX3Jlc2lkID0gaW92Lmlvdl9sZW4gPSBuID0gY291bnQgKiBzaXplOworCXVpby51aW9faW92ID0gJmlvdjsKKwl1aW8udWlvX2lvdmNudCA9IDE7CisKKwkvKgorCSAqIFRoZSB1c3VhbCBjYXNlIGlzIHN1Y2Nlc3MgKF9fc2Z2d3JpdGUgcmV0dXJucyAwKTsKKwkgKiBza2lwIHRoZSBkaXZpZGUgaWYgdGhpcyBoYXBwZW5zLCBzaW5jZSBkaXZpZGVzIGFyZQorCSAqIGdlbmVyYWxseSBzbG93IGFuZCBzaW5jZSB0aGlzIG9jY3VycyB3aGVuZXZlciBzaXplPT0wLgorCSAqLworCWlmIChfX3NmdndyaXRlKGZwLCAmdWlvKSA9PSAwKQorCQlyZXR1cm4gKGNvdW50KTsKKwlyZXR1cm4gKChuIC0gdWlvLnVpb19yZXNpZCkgLyBzaXplKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vZ2V0Yy5jIGIvbGliYy9zdGRpby9nZXRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RkNTcyMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkaW8vZ2V0Yy5jCkBAIC0wLDAgKzEsNjEgQEAKKy8qCSRPcGVuQlNEOiBnZXRjLmMsdiAxLjYgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKworLyoKKyAqIEEgc3Vicm91dGluZSB2ZXJzaW9uIG9mIHRoZSBtYWNybyBnZXRjX3VubG9ja2VkLgorICovCisjdW5kZWYgZ2V0Y191bmxvY2tlZAorCitpbnQKK2dldGNfdW5sb2NrZWQoRklMRSAqZnApCit7CisJcmV0dXJuIChfX3NnZXRjKGZwKSk7Cit9CisKKy8qCisgKiBBIHN1YnJvdXRpbmUgdmVyc2lvbiBvZiB0aGUgbWFjcm8gZ2V0Yy4KKyAqLworI3VuZGVmIGdldGMKKworaW50CitnZXRjKEZJTEUgKmZwKQoreworCWludCBjOworCisJZmxvY2tmaWxlKGZwKTsKKwljID0gX19zZ2V0YyhmcCk7CisJZnVubG9ja2ZpbGUoZnApOworCXJldHVybiAoYyk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL2dldGNoYXIuYyBiL2xpYmMvc3RkaW8vZ2V0Y2hhci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1MDgxN2QKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGlvL2dldGNoYXIuYwpAQCAtMCwwICsxLDU4IEBACisvKgkkT3BlbkJTRDogZ2V0Y2hhci5jLHYgMS43IDIwMDUvMDgvMDggMDg6MDU6MzYgZXNwaWUgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKy8qCisgKiBBIHN1YnJvdXRpbmUgdmVyc2lvbiBvZiB0aGUgbWFjcm8gZ2V0Y2hhcl91bmxvY2tlZC4KKyAqLworI3VuZGVmIGdldGNoYXJfdW5sb2NrZWQKKworaW50CitnZXRjaGFyX3VubG9ja2VkKHZvaWQpCit7CisJcmV0dXJuIChnZXRjX3VubG9ja2VkKHN0ZGluKSk7Cit9CisKKworLyoKKyAqIEEgc3Vicm91dGluZSB2ZXJzaW9uIG9mIHRoZSBtYWNybyBnZXRjaGFyLgorICovCisKKyN1bmRlZiBnZXRjaGFyCisKK2ludAorZ2V0Y2hhcih2b2lkKQoreworCXJldHVybiAoZ2V0YyhzdGRpbikpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9nZXRzLmMgYi9saWJjL3N0ZGlvL2dldHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDRlYjk5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRpby9nZXRzLmMKQEAgLTAsMCArMSw1NSBAQAorLyoJJE9wZW5CU0Q6IGdldHMuYyx2IDEuOSAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCitfX3dhcm5fcmVmZXJlbmNlcyhnZXRzLAorICAgICJ3YXJuaW5nOiBnZXRzKCkgaXMgdmVyeSB1bnNhZmU7IGNvbnNpZGVyIHVzaW5nIGZnZXRzKCkiKTsKKworY2hhciAqCitnZXRzKGNoYXIgKmJ1ZikKK3sKKwlpbnQgYzsKKwljaGFyICpzOworCisJZm9yIChzID0gYnVmOyAoYyA9IGdldGNoYXIoKSkgIT0gJ1xuJzspCisJCWlmIChjID09IEVPRikKKwkJCWlmIChzID09IGJ1ZikKKwkJCQlyZXR1cm4gKE5VTEwpOworCQkJZWxzZQorCQkJCWJyZWFrOworCQllbHNlCisJCQkqcysrID0gYzsKKwkqcyA9ICdcMCc7CisJcmV0dXJuIChidWYpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9nbHVlLmggYi9saWJjL3N0ZGlvL2dsdWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2NlZjYzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRpby9nbHVlLmgKQEAgLTAsMCArMSw0NSBAQAorLyoJJE9wZW5CU0Q6IGdsdWUuaCx2IDEuNCAyMDA0LzAxLzExIDIxOjM5OjUxIG1pbGxlcnQgRXhwICQJKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorICogVGhlIGZpcnN0IGZldyBGSUxFcyBhcmUgc3RhdGljYWxseSBhbGxvY2F0ZWQ7IG90aGVycyBhcmUgZHluYW1pY2FsbHkKKyAqIGFsbG9jYXRlZCBhbmQgbGlua2VkIGluIHZpYSB0aGlzIGdsdWUgc3RydWN0dXJlLgorICovCitzdHJ1Y3QgZ2x1ZSB7CisJc3RydWN0CWdsdWUgKm5leHQ7CisJaW50CW5pb2JzOworCUZJTEUJKmlvYnM7Cit9OworCitleHRlcm4gc3RydWN0IGdsdWUgX19zZ2x1ZTsKZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vbG9jYWwuaCBiL2xpYmMvc3RkaW8vbG9jYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGIxZmM1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRpby9sb2NhbC5oCkBAIC0wLDAgKzEsOTEgQEAKKy8qCSRPcGVuQlNEOiBsb2NhbC5oLHYgMS4xMiAyMDA1LzEwLzEwIDE3OjM3OjQ0IGVzcGllIEV4cCAkCSovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIndjaW8uaCIKKyNpbmNsdWRlICJmaWxlZXh0LmgiCisKKyNpZm5kZWYgREVGRklMRU1PREUKKyNkZWZpbmUgREVGRklMRU1PREUgIChTX0lSVVNSfFNfSVdVU1J8U19JUkdSUHxTX0lXR1JQfFNfSVJPVEh8U19JV09USCkKKyNlbmRpZgorCisKKy8qCisgKiBJbmZvcm1hdGlvbiBsb2NhbCB0byB0aGlzIGltcGxlbWVudGF0aW9uIG9mIHN0ZGlvLAorICogaW4gcGFydGljdWxhciwgbWFjcm9zIGFuZCBwcml2YXRlIHZhcmlhYmxlcy4KKyAqLworCitpbnQJX19zZmx1c2goRklMRSAqKTsKK0ZJTEUJKl9fc2ZwKHZvaWQpOworaW50CV9fc3JlZmlsbChGSUxFICopOworaW50CV9fc3JlYWQodm9pZCAqLCBjaGFyICosIGludCk7CitpbnQJX19zd3JpdGUodm9pZCAqLCBjb25zdCBjaGFyICosIGludCk7CitmcG9zX3QJX19zc2Vlayh2b2lkICosIGZwb3NfdCwgaW50KTsKK2ludAlfX3NjbG9zZSh2b2lkICopOwordm9pZAlfX3Npbml0KHZvaWQpOwordm9pZAlfY2xlYW51cCh2b2lkKTsKK3ZvaWQJX19zbWFrZWJ1ZihGSUxFICopOworaW50CV9fc3doYXRidWYoRklMRSAqLCBzaXplX3QgKiwgaW50ICopOworaW50CV9md2FsayhpbnQgKCopKEZJTEUgKikpOworaW50CV9fc3dzZXR1cChGSUxFICopOworaW50CV9fc2ZsYWdzKGNvbnN0IGNoYXIgKiwgaW50ICopOworCitleHRlcm4gdm9pZCBfX2F0ZXhpdF9yZWdpc3Rlcl9jbGVhbnVwKHZvaWQgKCopKHZvaWQpKTsKK2V4dGVybiBpbnQgX19zZGlkaW5pdDsKKworLyoKKyAqIFJldHVybiB0cnVlIGlmIHRoZSBnaXZlbiBGSUxFIGNhbm5vdCBiZSB3cml0dGVuIG5vdy4KKyAqLworI2RlZmluZQljYW50d3JpdGUoZnApIFwKKwkoKCgoZnApLT5fZmxhZ3MgJiBfX1NXUikgPT0gMCB8fCAoZnApLT5fYmYuX2Jhc2UgPT0gTlVMTCkgJiYgXAorCSBfX3N3c2V0dXAoZnApKQorCisvKgorICogVGVzdCB3aGV0aGVyIHRoZSBnaXZlbiBzdGRpbyBmaWxlIGhhcyBhbiBhY3RpdmUgdW5nZXRjIGJ1ZmZlcjsKKyAqIHJlbGVhc2Ugc3VjaCBhIGJ1ZmZlciwgd2l0aG91dCByZXN0b3Jpbmcgb3JkaW5hcnkgdW5yZWFkIGRhdGEuCisgKi8KKyNkZWZpbmUJSEFTVUIoZnApIChfVUIoZnApLl9iYXNlICE9IE5VTEwpCisjZGVmaW5lCUZSRUVVQihmcCkgeyBcCisJaWYgKF9VQihmcCkuX2Jhc2UgIT0gKGZwKS0+X3VidWYpIFwKKwkJZnJlZShfVUIoZnApLl9iYXNlKTsgXAorCV9VQihmcCkuX2Jhc2UgPSBOVUxMOyBcCit9CisKKy8qCisgKiB0ZXN0IGZvciBhbiBmZ2V0bG4oKSBidWZmZXIuCisgKi8KKyNkZWZpbmUJSEFTTEIoZnApICgoZnApLT5fbGIuX2Jhc2UgIT0gTlVMTCkKKyNkZWZpbmUJRlJFRUxCKGZwKSB7IFwKKwlmcmVlKChjaGFyICopKGZwKS0+X2xiLl9iYXNlKTsgXAorCShmcCktPl9sYi5fYmFzZSA9IE5VTEw7IFwKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vbWFrZWJ1Zi5jIGIvbGliYy9zdGRpby9tYWtlYnVmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ3ZTI3YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkaW8vbWFrZWJ1Zi5jCkBAIC0wLDAgKzEsMTA3IEBACisvKgkkT3BlbkJTRDogbWFrZWJ1Zi5jLHYgMS44IDIwMDUvMTIvMjggMTg6NTA6MjIgbWlsbGVydCBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgImxvY2FsLmgiCisKKy8qCisgKiBBbGxvY2F0ZSBhIGZpbGUgYnVmZmVyLCBvciBzd2l0Y2ggdG8gdW5idWZmZXJlZCBJL08uCisgKiBQZXIgdGhlIEFOU0kgQyBzdGFuZGFyZCwgQUxMIHR0eSBkZXZpY2VzIGRlZmF1bHQgdG8gbGluZSBidWZmZXJlZC4KKyAqCisgKiBBcyBhIHNpZGUgZWZmZWN0LCB3ZSBzZXQgX19TT1BUIG9yIF9fU05QVCAoZW4vZGlzLWFibGUgZnNlZWsKKyAqIG9wdGltaXNhdGlvbikgcmlnaHQgYWZ0ZXIgdGhlIGZzdGF0KCkgdGhhdCBmaW5kcyB0aGUgYnVmZmVyIHNpemUuCisgKi8KK3ZvaWQKK19fc21ha2VidWYoRklMRSAqZnApCit7CisJdm9pZCAqcDsKKwlpbnQgZmxhZ3M7CisJc2l6ZV90IHNpemU7CisJaW50IGNvdWxkYmV0dHk7CisKKwlpZiAoZnAtPl9mbGFncyAmIF9fU05CRikgeworCQlmcC0+X2JmLl9iYXNlID0gZnAtPl9wID0gZnAtPl9uYnVmOworCQlmcC0+X2JmLl9zaXplID0gMTsKKwkJcmV0dXJuOworCX0KKwlmbGFncyA9IF9fc3doYXRidWYoZnAsICZzaXplLCAmY291bGRiZXR0eSk7CisJaWYgKChwID0gbWFsbG9jKHNpemUpKSA9PSBOVUxMKSB7CisJCWZwLT5fZmxhZ3MgfD0gX19TTkJGOworCQlmcC0+X2JmLl9iYXNlID0gZnAtPl9wID0gZnAtPl9uYnVmOworCQlmcC0+X2JmLl9zaXplID0gMTsKKwkJcmV0dXJuOworCX0KKwlfX2F0ZXhpdF9yZWdpc3Rlcl9jbGVhbnVwKF9jbGVhbnVwKTsKKwlmbGFncyB8PSBfX1NNQkY7CisJZnAtPl9iZi5fYmFzZSA9IGZwLT5fcCA9IHA7CisJZnAtPl9iZi5fc2l6ZSA9IHNpemU7CisJaWYgKGNvdWxkYmV0dHkgJiYgaXNhdHR5KGZwLT5fZmlsZSkpCisJCWZsYWdzIHw9IF9fU0xCRjsKKwlmcC0+X2ZsYWdzIHw9IGZsYWdzOworfQorCisvKgorICogSW50ZXJuYWwgcm91dGluZSB0byBkZXRlcm1pbmUgYHByb3BlcicgYnVmZmVyaW5nIGZvciBhIGZpbGUuCisgKi8KK2ludAorX19zd2hhdGJ1ZihGSUxFICpmcCwgc2l6ZV90ICpidWZzaXplLCBpbnQgKmNvdWxkYmV0dHkpCit7CisJc3RydWN0IHN0YXQgc3Q7CisKKwlpZiAoZnAtPl9maWxlIDwgMCB8fCBmc3RhdChmcC0+X2ZpbGUsICZzdCkgPCAwKSB7CisJCSpjb3VsZGJldHR5ID0gMDsKKwkJKmJ1ZnNpemUgPSBCVUZTSVo7CisJCXJldHVybiAoX19TTlBUKTsKKwl9CisKKwkvKiBjb3VsZCBiZSBhIHR0eSBpZmYgaXQgaXMgYSBjaGFyYWN0ZXIgZGV2aWNlICovCisJKmNvdWxkYmV0dHkgPSBTX0lTQ0hSKHN0LnN0X21vZGUpOworCWlmIChzdC5zdF9ibGtzaXplID09IDApIHsKKwkJKmJ1ZnNpemUgPSBCVUZTSVo7CisJCXJldHVybiAoX19TTlBUKTsKKwl9CisKKwkvKgorCSAqIE9wdGltaXNlIGZzZWVrKCkgb25seSBpZiBpdCBpcyBhIHJlZ3VsYXIgZmlsZS4gIChUaGUgdGVzdCBmb3IKKwkgKiBfX3NzZWVrIGlzIG1haW5seSBwYXJhbm9pYS4pICBJdCBpcyBzYWZlIHRvIHNldCBfYmxrc2l6ZQorCSAqIHVuY29uZGl0aW9uYWxseTsgaXQgd2lsbCBvbmx5IGJlIHVzZWQgaWYgX19TT1BUIGlzIGFsc28gc2V0LgorCSAqLworCSpidWZzaXplID0gc3Quc3RfYmxrc2l6ZTsKKwlmcC0+X2Jsa3NpemUgPSBzdC5zdF9ibGtzaXplOworCXJldHVybiAoKHN0LnN0X21vZGUgJiBTX0lGTVQpID09IFNfSUZSRUcgJiYgZnAtPl9zZWVrID09IF9fc3NlZWsgPworCSAgICBfX1NPUFQgOiBfX1NOUFQpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9ta3RlbXAuYyBiL2xpYmMvc3RkaW8vbWt0ZW1wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUxZjgwMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkaW8vbWt0ZW1wLmMKQEAgLTAsMCArMSwxODQgQEAKKy8qCSRPcGVuQlNEOiBta3RlbXAuYyx2IDEuMTkgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLworLyoKKyAqIENvcHlyaWdodCAoYykgMTk4NywgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKK3N0YXRpYyBpbnQgX2dldHRlbXAoY2hhciAqLCBpbnQgKiwgaW50LCBpbnQpOworCitleHRlcm4gdWludDMyX3QgIGFyYzRyYW5kb20oKTsKKworaW50Citta3N0ZW1wcyhjaGFyICpwYXRoLCBpbnQgc2xlbikKK3sKKwlpbnQgZmQ7CisKKwlyZXR1cm4gKF9nZXR0ZW1wKHBhdGgsICZmZCwgMCwgc2xlbikgPyBmZCA6IC0xKTsKK30KKworaW50Citta3N0ZW1wKGNoYXIgKnBhdGgpCit7CisJaW50IGZkOworCisJcmV0dXJuIChfZ2V0dGVtcChwYXRoLCAmZmQsIDAsIDApID8gZmQgOiAtMSk7Cit9CisKK2NoYXIgKgorbWtkdGVtcChjaGFyICpwYXRoKQoreworCXJldHVybihfZ2V0dGVtcChwYXRoLCAoaW50ICopTlVMTCwgMSwgMCkgPyBwYXRoIDogKGNoYXIgKilOVUxMKTsKK30KKworY2hhciAqX21rdGVtcChjaGFyICopOworCitjaGFyICoKK19ta3RlbXAoY2hhciAqcGF0aCkKK3sKKwlyZXR1cm4oX2dldHRlbXAocGF0aCwgKGludCAqKU5VTEwsIDAsIDApID8gcGF0aCA6IChjaGFyICopTlVMTCk7Cit9CisKK19fd2Fybl9yZWZlcmVuY2VzKG1rdGVtcCwKKyAgICAid2FybmluZzogbWt0ZW1wKCkgcG9zc2libHkgdXNlZCB1bnNhZmVseTsgY29uc2lkZXIgdXNpbmcgbWtzdGVtcCgpIik7CisKK2NoYXIgKgorbWt0ZW1wKGNoYXIgKnBhdGgpCit7CisJcmV0dXJuKF9ta3RlbXAocGF0aCkpOworfQorCisKK3N0YXRpYyBpbnQKK19nZXR0ZW1wKGNoYXIgKnBhdGgsIGludCAqZG9vcGVuLCBpbnQgZG9ta2RpciwgaW50IHNsZW4pCit7CisJY2hhciAqc3RhcnQsICp0cnYsICpzdWZmcDsKKwlzdHJ1Y3Qgc3RhdCBzYnVmOworCWludCBydmFsOworCXBpZF90IHBpZDsKKworCWlmIChkb29wZW4gJiYgZG9ta2RpcikgeworCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuKDApOworCX0KKworCWZvciAodHJ2ID0gcGF0aDsgKnRydjsgKyt0cnYpCisJCTsKKwl0cnYgLT0gc2xlbjsKKwlzdWZmcCA9IHRydjsKKwktLXRydjsKKwlpZiAodHJ2IDwgcGF0aCkgeworCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuICgwKTsKKwl9CisJcGlkID0gZ2V0cGlkKCk7CisJd2hpbGUgKHRydiA+PSBwYXRoICYmICp0cnYgPT0gJ1gnICYmIHBpZCAhPSAwKSB7CisJCSp0cnYtLSA9IChwaWQgJSAxMCkgKyAnMCc7CisJCXBpZCAvPSAxMDsKKwl9CisJd2hpbGUgKHRydiA+PSBwYXRoICYmICp0cnYgPT0gJ1gnKSB7CisJCWNoYXIgYzsKKworCQlwaWQgPSAoYXJjNHJhbmRvbSgpICYgMHhmZmZmKSAlICgyNisyNik7CisJCWlmIChwaWQgPCAyNikKKwkJCWMgPSBwaWQgKyAnQSc7CisJCWVsc2UKKwkJCWMgPSAocGlkIC0gMjYpICsgJ2EnOworCQkqdHJ2LS0gPSBjOworCX0KKwlzdGFydCA9IHRydiArIDE7CisKKwkvKgorCSAqIGNoZWNrIHRoZSB0YXJnZXQgZGlyZWN0b3J5OyBpZiB5b3UgaGF2ZSBzaXggWCdzIGFuZCBpdAorCSAqIGRvZXNuJ3QgZXhpc3QgdGhpcyBydW5zIGZvciBhICp2ZXJ5KiBsb25nIHRpbWUuCisJICovCisJaWYgKGRvb3BlbiB8fCBkb21rZGlyKSB7CisJCWZvciAoOzsgLS10cnYpIHsKKwkJCWlmICh0cnYgPD0gcGF0aCkKKwkJCQlicmVhazsKKwkJCWlmICgqdHJ2ID09ICcvJykgeworCQkJCSp0cnYgPSAnXDAnOworCQkJCXJ2YWwgPSBzdGF0KHBhdGgsICZzYnVmKTsKKwkJCQkqdHJ2ID0gJy8nOworCQkJCWlmIChydmFsICE9IDApCisJCQkJCXJldHVybigwKTsKKwkJCQlpZiAoIVNfSVNESVIoc2J1Zi5zdF9tb2RlKSkgeworCQkJCQllcnJubyA9IEVOT1RESVI7CisJCQkJCXJldHVybigwKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwlmb3IgKDs7KSB7CisJCWlmIChkb29wZW4pIHsKKwkJCWlmICgoKmRvb3BlbiA9CisJCQkgICAgb3BlbihwYXRoLCBPX0NSRUFUfE9fRVhDTHxPX1JEV1IsIDA2MDApKSA+PSAwKQorCQkJCXJldHVybigxKTsKKwkJCWlmIChlcnJubyAhPSBFRVhJU1QpCisJCQkJcmV0dXJuKDApOworCQl9IGVsc2UgaWYgKGRvbWtkaXIpIHsKKwkJCWlmIChta2RpcihwYXRoLCAwNzAwKSA9PSAwKQorCQkJCXJldHVybigxKTsKKwkJCWlmIChlcnJubyAhPSBFRVhJU1QpCisJCQkJcmV0dXJuKDApOworCQl9IGVsc2UgaWYgKGxzdGF0KHBhdGgsICZzYnVmKSkKKwkJCXJldHVybihlcnJubyA9PSBFTk9FTlQgPyAxIDogMCk7CisKKwkJLyogdHJpY2t5IGxpdHRsZSBhbGdvcml0aG0gZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KKwkJZm9yICh0cnYgPSBzdGFydDs7KSB7CisJCQlpZiAoISp0cnYpCisJCQkJcmV0dXJuICgwKTsKKwkJCWlmICgqdHJ2ID09ICdaJykgeworCQkJCWlmICh0cnYgPT0gc3VmZnApCisJCQkJCXJldHVybiAoMCk7CisJCQkJKnRydisrID0gJ2EnOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoaXNkaWdpdCgqdHJ2KSkKKwkJCQkJKnRydiA9ICdhJzsKKwkJCQllbHNlIGlmICgqdHJ2ID09ICd6JykJLyogaW5jIGZyb20geiB0byBBICovCisJCQkJCSp0cnYgPSAnQSc7CisJCQkJZWxzZSB7CisJCQkJCWlmICh0cnYgPT0gc3VmZnApCisJCQkJCQlyZXR1cm4gKDApOworCQkJCQkrKyp0cnY7CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCS8qTk9UUkVBQ0hFRCovCit9CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL3ByaW50Zi5jIGIvbGliYy9zdGRpby9wcmludGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWNjMTliCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRpby9wcmludGYuYwpAQCAtMCwwICsxLDQ3IEBACisvKgkkT3BlbkJTRDogcHJpbnRmLmMsdiAxLjcgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworaW50CitwcmludGYoY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJaW50IHJldDsKKyAgdmFfbGlzdCBhcDsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXJldCA9IHZmcHJpbnRmKHN0ZG91dCwgZm10LCBhcCk7CisgIHZhX2VuZChhcCk7CisJcmV0dXJuIChyZXQpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9wdXRjLmMgYi9saWJjL3N0ZGlvL3B1dGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjUwMjE1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRpby9wdXRjLmMKQEAgLTAsMCArMSw2NyBAQAorLyoJJE9wZW5CU0Q6IHB1dGMuYyx2IDEuNyAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKworLyoKKyAqIEEgc3Vicm91dGluZSB2ZXJzaW9uIG9mIHRoZSBtYWNybyBwdXRjX3VubG9ja2VkLgorICovCisjdW5kZWYgcHV0Y191bmxvY2tlZAorCitpbnQKK3B1dGNfdW5sb2NrZWQoaW50IGMsIEZJTEUgKmZwKQoreworCWlmIChjYW50d3JpdGUoZnApKSB7CisJCWVycm5vID0gRUJBREY7CisJCXJldHVybiAoRU9GKTsKKwl9CisJcmV0dXJuIChfX3NwdXRjKGMsIGZwKSk7Cit9CisKKy8qCisgKiBBIHN1YnJvdXRpbmUgdmVyc2lvbiBvZiB0aGUgbWFjcm8gcHV0Yy4KKyAqLworI3VuZGVmIHB1dGMKKworaW50CitwdXRjKGludCBjLCBGSUxFICpmcCkKK3sKKwlpbnQgcmV0OworCisJZmxvY2tmaWxlKGZwKTsKKwlyZXQgPSBwdXRjX3VubG9ja2VkKGMsIGZwKTsKKwlmdW5sb2NrZmlsZShmcCk7CisJcmV0dXJuIChyZXQpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9wdXRjaGFyLmMgYi9saWJjL3N0ZGlvL3B1dGNoYXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzNjZGZkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRpby9wdXRjaGFyLmMKQEAgLTAsMCArMSw1OSBAQAorLyoJJE9wZW5CU0Q6IHB1dGNoYXIuYyx2IDEuNyAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjdW5kZWYgcHV0Y2hhcl91bmxvY2tlZAorLyoKKyAqIEEgc3Vicm91dGluZyB2ZXJzaW9uIG9mIHRoZSBtYWNybyBwdXRjaGFyX3VubG9ja2VkCisgKi8KK2ludAorcHV0Y2hhcl91bmxvY2tlZChpbnQgYykKK3sKKwlGSUxFICpzbyA9IHN0ZG91dDsKKworCXJldHVybiAocHV0Y191bmxvY2tlZChjLHNvKSk7Cit9CisKKyN1bmRlZiBwdXRjaGFyCisKKy8qCisgKiBBIHN1YnJvdXRpbmUgdmVyc2lvbiBvZiB0aGUgbWFjcm8gcHV0Y2hhcgorICovCitpbnQKK3B1dGNoYXIoaW50IGMpCit7CisJRklMRSAqc28gPSBzdGRvdXQ7CisKKwlyZXR1cm4gKHB1dGMoYywgc28pKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vcHV0cy5jIGIvbGliYy9zdGRpby9wdXRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZlY2MyNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkaW8vcHV0cy5jCkBAIC0wLDAgKzEsNTYgQEAKKy8qCSRPcGVuQlNEOiBwdXRzLmMsdiAxLjcgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlICJmdndyaXRlLmgiCisKKy8qCisgKiBXcml0ZSB0aGUgZ2l2ZW4gc3RyaW5nIHRvIHN0ZG91dCwgYXBwZW5kaW5nIGEgbmV3bGluZS4KKyAqLworaW50CitwdXRzKGNvbnN0IGNoYXIgKnMpCit7CisJc2l6ZV90IGMgPSBzdHJsZW4ocyk7CisJc3RydWN0IF9fc3VpbyB1aW87CisJc3RydWN0IF9fc2lvdiBpb3ZbMl07CisKKwlpb3ZbMF0uaW92X2Jhc2UgPSAodm9pZCAqKXM7CisJaW92WzBdLmlvdl9sZW4gPSBjOworCWlvdlsxXS5pb3ZfYmFzZSA9ICJcbiI7CisJaW92WzFdLmlvdl9sZW4gPSAxOworCXVpby51aW9fcmVzaWQgPSBjICsgMTsKKwl1aW8udWlvX2lvdiA9ICZpb3ZbMF07CisJdWlvLnVpb19pb3ZjbnQgPSAyOworCXJldHVybiAoX19zZnZ3cml0ZShzdGRvdXQsICZ1aW8pID8gRU9GIDogJ1xuJyk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL3B1dHcuYyBiL2xpYmMvc3RkaW8vcHV0dy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyOTU1ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGlvL3B1dHcuYwpAQCAtMCwwICsxLDQ4IEBACisvKgkkT3BlbkJTRDogcHV0dy5jLHYgMS42IDIwMDUvMDgvMDggMDg6MDU6MzYgZXNwaWUgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSAiZnZ3cml0ZS5oIgorCitpbnQKK3B1dHcoaW50IHcsIEZJTEUgKmZwKQoreworCXN0cnVjdCBfX3N1aW8gdWlvOworCXN0cnVjdCBfX3Npb3YgaW92OworCisJaW92Lmlvdl9iYXNlID0gJnc7CisJaW92Lmlvdl9sZW4gPSB1aW8udWlvX3Jlc2lkID0gc2l6ZW9mKHcpOworCXVpby51aW9faW92ID0gJmlvdjsKKwl1aW8udWlvX2lvdmNudCA9IDE7CisJcmV0dXJuIChfX3NmdndyaXRlKGZwLCAmdWlvKSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL3JlZmlsbC5jIGIvbGliYy9zdGRpby9yZWZpbGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGIzNzhlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRpby9yZWZpbGwuYwpAQCAtMCwwICsxLDEyMSBAQAorLyoJJE9wZW5CU0Q6IHJlZmlsbC5jLHYgMS44IDIwMDUvMDgvMDggMDg6MDU6MzYgZXNwaWUgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorCitzdGF0aWMgaW50CitsZmx1c2goRklMRSAqZnApCit7CisKKwlpZiAoKGZwLT5fZmxhZ3MgJiAoX19TTEJGfF9fU1dSKSkgPT0gKF9fU0xCRnxfX1NXUikpCisJCXJldHVybiAoX19zZmx1c2goZnApKTsKKwlyZXR1cm4gKDApOworfQorCisvKgorICogUmVmaWxsIGEgc3RkaW8gYnVmZmVyLgorICogUmV0dXJuIEVPRiBvbiBlb2Ygb3IgZXJyb3IsIDAgb3RoZXJ3aXNlLgorICovCitpbnQKK19fc3JlZmlsbChGSUxFICpmcCkKK3sKKworCS8qIG1ha2Ugc3VyZSBzdGRpbyBpcyBzZXQgdXAgKi8KKwlpZiAoIV9fc2RpZGluaXQpCisJCV9fc2luaXQoKTsKKworCWZwLT5fciA9IDA7CQkvKiBsYXJnZWx5IGEgY29udmVuaWVuY2UgZm9yIGNhbGxlcnMgKi8KKworCS8qIFN5c1YgZG9lcyBub3QgbWFrZSB0aGlzIHRlc3Q7IHRha2UgaXQgb3V0IGZvciBjb21wYXRpYmlsaXR5ICovCisJaWYgKGZwLT5fZmxhZ3MgJiBfX1NFT0YpCisJCXJldHVybiAoRU9GKTsKKworCS8qIGlmIG5vdCBhbHJlYWR5IHJlYWRpbmcsIGhhdmUgdG8gYmUgcmVhZGluZyBhbmQgd3JpdGluZyAqLworCWlmICgoZnAtPl9mbGFncyAmIF9fU1JEKSA9PSAwKSB7CisJCWlmICgoZnAtPl9mbGFncyAmIF9fU1JXKSA9PSAwKSB7CisJCQllcnJubyA9IEVCQURGOworCQkJZnAtPl9mbGFncyB8PSBfX1NFUlI7CisJCQlyZXR1cm4gKEVPRik7CisJCX0KKwkJLyogc3dpdGNoIHRvIHJlYWRpbmcgKi8KKwkJaWYgKGZwLT5fZmxhZ3MgJiBfX1NXUikgeworCQkJaWYgKF9fc2ZsdXNoKGZwKSkKKwkJCQlyZXR1cm4gKEVPRik7CisJCQlmcC0+X2ZsYWdzICY9IH5fX1NXUjsKKwkJCWZwLT5fdyA9IDA7CisJCQlmcC0+X2xiZnNpemUgPSAwOworCQl9CisJCWZwLT5fZmxhZ3MgfD0gX19TUkQ7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogV2Ugd2VyZSByZWFkaW5nLiAgSWYgdGhlcmUgaXMgYW4gdW5nZXRjIGJ1ZmZlciwKKwkJICogd2UgbXVzdCBoYXZlIGJlZW4gcmVhZGluZyBmcm9tIHRoYXQuICBEcm9wIGl0LAorCQkgKiByZXN0b3JpbmcgdGhlIHByZXZpb3VzIGJ1ZmZlciAoaWYgYW55KS4gIElmIHRoZXJlCisJCSAqIGlzIGFueXRoaW5nIGluIHRoYXQgYnVmZmVyLCByZXR1cm4uCisJCSAqLworCQlpZiAoSEFTVUIoZnApKSB7CisJCQlGUkVFVUIoZnApOworCQkJaWYgKChmcC0+X3IgPSBmcC0+X3VyKSAhPSAwKSB7CisJCQkJZnAtPl9wID0gZnAtPl91cDsKKwkJCQlyZXR1cm4gKDApOworCQkJfQorCQl9CisJfQorCisJaWYgKGZwLT5fYmYuX2Jhc2UgPT0gTlVMTCkKKwkJX19zbWFrZWJ1ZihmcCk7CisKKwkvKgorCSAqIEJlZm9yZSByZWFkaW5nIGZyb20gYSBsaW5lIGJ1ZmZlcmVkIG9yIHVuYnVmZmVyZWQgZmlsZSwKKwkgKiBmbHVzaCBhbGwgbGluZSBidWZmZXJlZCBvdXRwdXQgZmlsZXMsIHBlciB0aGUgQU5TSSBDCisJICogc3RhbmRhcmQuCisJICovCisJaWYgKGZwLT5fZmxhZ3MgJiAoX19TTEJGfF9fU05CRikpCisJCSh2b2lkKSBfZndhbGsobGZsdXNoKTsKKwlmcC0+X3AgPSBmcC0+X2JmLl9iYXNlOworCWZwLT5fciA9ICgqZnAtPl9yZWFkKShmcC0+X2Nvb2tpZSwgKGNoYXIgKilmcC0+X3AsIGZwLT5fYmYuX3NpemUpOworCWZwLT5fZmxhZ3MgJj0gfl9fU01PRDsJLyogYnVmZmVyIGNvbnRlbnRzIGFyZSBhZ2FpbiBwcmlzdGluZSAqLworCWlmIChmcC0+X3IgPD0gMCkgeworCQlpZiAoZnAtPl9yID09IDApCisJCQlmcC0+X2ZsYWdzIHw9IF9fU0VPRjsKKwkJZWxzZSB7CisJCQlmcC0+X3IgPSAwOworCQkJZnAtPl9mbGFncyB8PSBfX1NFUlI7CisJCX0KKwkJcmV0dXJuIChFT0YpOworCX0KKwlyZXR1cm4gKDApOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9yZW1vdmUuYyBiL2xpYmMvc3RkaW8vcmVtb3ZlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA5ZDc2ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkaW8vcmVtb3ZlLmMKQEAgLTAsMCArMSw0OSBAQAorLyoJJE9wZW5CU0Q6IHJlbW92ZS5jLHYgMS43IDIwMDUvMDgvMDggMDg6MDU6MzYgZXNwaWUgRXhwICQJKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCitpbnQKK3JlbW92ZShjb25zdCBjaGFyICpmaWxlKQoreworCXN0cnVjdCBzdGF0IHN0OworCisJaWYgKGxzdGF0KGZpbGUsICZzdCkgPCAwKQorCQlyZXR1cm4gKC0xKTsKKwlpZiAoU19JU0RJUihzdC5zdF9tb2RlKSkKKwkJcmV0dXJuIChybWRpcihmaWxlKSk7CisJcmV0dXJuICh1bmxpbmsoZmlsZSkpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9yZXdpbmQuYyBiL2xpYmMvc3RkaW8vcmV3aW5kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjgxMTliNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkaW8vcmV3aW5kLmMKQEAgLTAsMCArMSw0MyBAQAorLyoJJE9wZW5CU0Q6IHJld2luZC5jLHYgMS41IDIwMDUvMDgvMDggMDg6MDU6MzYgZXNwaWUgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKwordm9pZAorcmV3aW5kKEZJTEUgKmZwKQoreworCSh2b2lkKSBmc2VlayhmcCwgMEwsIFNFRUtfU0VUKTsKKwljbGVhcmVycihmcCk7CisJZXJybm8gPSAwOyAgICAgIC8qIG5vdCByZXF1aXJlZCwgYnV0IHNlZW1zIHJlYXNvbmFibGUgKi8KK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vcmdldC5jIGIvbGliYy9zdGRpby9yZ2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNkOTdjYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkaW8vcmdldC5jCkBAIC0wLDAgKzEsNTEgQEAKKy8qCSRPcGVuQlNEOiByZ2V0LmMsdiAxLjcgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorCisvKgorICogSGFuZGxlIGdldGMoKSB3aGVuIHRoZSBidWZmZXIgcmFuIG91dDoKKyAqIFJlZmlsbCwgdGhlbiByZXR1cm4gdGhlIGZpcnN0IGNoYXJhY3RlcgorICogaW4gdGhlIG5ld2x5LWZpbGxlZCBidWZmZXIuCisgKi8KK2ludAorX19zcmdldChGSUxFICpmcCkKK3sKKwlfU0VUX09SSUVOVEFUSU9OKGZwLCAtMSk7CisJaWYgKF9fc3JlZmlsbChmcCkgPT0gMCkgeworCQlmcC0+X3ItLTsKKwkJcmV0dXJuICgqZnAtPl9wKyspOworCX0KKwlyZXR1cm4gKEVPRik7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL3NjYW5mLmMgYi9saWJjL3N0ZGlvL3NjYW5mLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzExOTRkMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkaW8vc2NhbmYuYwpAQCAtMCwwICsxLDQ3IEBACisvKgkkT3BlbkJTRDogc2NhbmYuYyx2IDEuOSAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorCitpbnQKK3NjYW5mKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCWludCByZXQ7CisJdmFfbGlzdCBhcDsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXJldCA9IHZmc2NhbmYoc3RkaW4sIGZtdCwgYXApOworCXZhX2VuZChhcCk7CisJcmV0dXJuIChyZXQpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9zZXRidWYuYyBiL2xpYmMvc3RkaW8vc2V0YnVmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgzYjg5NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkaW8vc2V0YnVmLmMKQEAgLTAsMCArMSw0MSBAQAorLyoJJE9wZW5CU0Q6IHNldGJ1Zi5jLHYgMS41IDIwMDUvMDgvMDggMDg6MDU6MzYgZXNwaWUgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKwordm9pZAorc2V0YnVmKEZJTEUgKmZwLCBjaGFyICpidWYpCit7CisJKHZvaWQpIHNldHZidWYoZnAsIGJ1ZiwgYnVmID8gX0lPRkJGIDogX0lPTkJGLCBCVUZTSVopOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9zZXRidWZmZXIuYyBiL2xpYmMvc3RkaW8vc2V0YnVmZmVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODcyNWZmNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkaW8vc2V0YnVmZmVyLmMKQEAgLTAsMCArMSw1MSBAQAorLyoJJE9wZW5CU0Q6IHNldGJ1ZmZlci5jLHYgMS41IDIwMDUvMDgvMDggMDg6MDU6MzYgZXNwaWUgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKK3ZvaWQKK3NldGJ1ZmZlcihGSUxFICpmcCwgY2hhciAqYnVmLCBpbnQgc2l6ZSkKK3sKKworCSh2b2lkKXNldHZidWYoZnAsIGJ1ZiwgYnVmID8gX0lPRkJGIDogX0lPTkJGLCBzaXplKTsKK30KKworLyoKKyAqIHNldCBsaW5lIGJ1ZmZlcmluZworICovCitpbnQKK3NldGxpbmVidWYoRklMRSAqZnApCit7CisKKwlyZXR1cm4gKHNldHZidWYoZnAsIChjaGFyICopTlVMTCwgX0lPTEJGLCAoc2l6ZV90KTApKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vc2V0dmJ1Zi5jIGIvbGliYy9zdGRpby9zZXR2YnVmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI5MmJmMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkaW8vc2V0dmJ1Zi5jCkBAIC0wLDAgKzEsMTUxIEBACisvKgkkT3BlbkJTRDogc2V0dmJ1Zi5jLHYgMS44IDIwMDUvMDgvMDggMDg6MDU6MzYgZXNwaWUgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKworLyoKKyAqIFNldCBvbmUgb2YgdGhlIHRocmVlIGtpbmRzIG9mIGJ1ZmZlcmluZywgb3B0aW9uYWxseSBpbmNsdWRpbmcKKyAqIGEgYnVmZmVyLgorICovCitpbnQKK3NldHZidWYoRklMRSAqZnAsIGNoYXIgKmJ1ZiwgaW50IG1vZGUsIHNpemVfdCBzaXplKQoreworCWludCByZXQsIGZsYWdzOworCXNpemVfdCBpb3NpemU7CisJaW50IHR0eWZsYWc7CisKKwkvKgorCSAqIFZlcmlmeSBhcmd1bWVudHMuICBUaGUgYGludCcgbGltaXQgb24gYHNpemUnIGlzIGR1ZSB0byB0aGlzCisJICogcGFydGljdWxhciBpbXBsZW1lbnRhdGlvbi4gIE5vdGUsIGJ1ZiBhbmQgc2l6ZSBhcmUgaWdub3JlZAorCSAqIHdoZW4gc2V0dGluZyBfSU9OQkYuCisJICovCisJaWYgKG1vZGUgIT0gX0lPTkJGKQorCQlpZiAoKG1vZGUgIT0gX0lPRkJGICYmIG1vZGUgIT0gX0lPTEJGKSB8fCAoaW50KXNpemUgPCAwKQorCQkJcmV0dXJuIChFT0YpOworCisJLyoKKwkgKiBXcml0ZSBjdXJyZW50IGJ1ZmZlciwgaWYgYW55LiAgRGlzY2FyZCB1bnJlYWQgaW5wdXQgKGluY2x1ZGluZworCSAqIHVuZ2V0YyBkYXRhKSwgY2FuY2VsIGxpbmUgYnVmZmVyaW5nLCBhbmQgZnJlZSBvbGQgYnVmZmVyIGlmCisJICogbWFsbG9jKCllZC4gIFdlIGFsc28gY2xlYXIgYW55IGVvZiBjb25kaXRpb24sIGFzIGlmIHRoaXMgd2VyZQorCSAqIGEgc2Vlay4KKwkgKi8KKwlyZXQgPSAwOworCSh2b2lkKV9fc2ZsdXNoKGZwKTsKKwlpZiAoSEFTVUIoZnApKQorCQlGUkVFVUIoZnApOworCVdDSU9fRlJFRShmcCk7CisJZnAtPl9yID0gZnAtPl9sYmZzaXplID0gMDsKKwlmbGFncyA9IGZwLT5fZmxhZ3M7CisJaWYgKGZsYWdzICYgX19TTUJGKQorCQlmcmVlKCh2b2lkICopZnAtPl9iZi5fYmFzZSk7CisJZmxhZ3MgJj0gfihfX1NMQkYgfCBfX1NOQkYgfCBfX1NNQkYgfCBfX1NPUFQgfCBfX1NOUFQgfCBfX1NFT0YpOworCisJLyogSWYgc2V0dGluZyB1bmJ1ZmZlcmVkIG1vZGUsIHNraXAgYWxsIHRoZSBoYXJkIHdvcmsuICovCisJaWYgKG1vZGUgPT0gX0lPTkJGKQorCQlnb3RvIG5iZjsKKworCS8qCisJICogRmluZCBvcHRpbWFsIEkvTyBzaXplIGZvciBzZWVrIG9wdGltaXphdGlvbi4gIFRoaXMgYWxzbyByZXR1cm5zCisJICogYSBgdHR5IGZsYWcnIHRvIHN1Z2dlc3QgdGhhdCB3ZSBjaGVjayBpc2F0dHkoZmQpLCBidXQgd2UgZG8gbm90CisJICogY2FyZSBzaW5jZSBvdXIgY2FsbGVyIHRvbGQgdXMgaG93IHRvIGJ1ZmZlci4KKwkgKi8KKwlmbGFncyB8PSBfX3N3aGF0YnVmKGZwLCAmaW9zaXplLCAmdHR5ZmxhZyk7CisJaWYgKHNpemUgPT0gMCkgeworCQlidWYgPSBOVUxMOwkvKiBmb3JjZSBsb2NhbCBhbGxvY2F0aW9uICovCisJCXNpemUgPSBpb3NpemU7CisJfQorCisJLyogQWxsb2NhdGUgYnVmZmVyIGlmIG5lZWRlZC4gKi8KKwlpZiAoYnVmID09IE5VTEwpIHsKKwkJaWYgKChidWYgPSBtYWxsb2Moc2l6ZSkpID09IE5VTEwpIHsKKwkJCS8qCisJCQkgKiBVbmFibGUgdG8gaG9ub3IgdXNlcidzIHJlcXVlc3QuICBXZSB3aWxsIHJldHVybgorCQkJICogZmFpbHVyZSwgYnV0IHRyeSBhZ2FpbiB3aXRoIGZpbGUgc3lzdGVtIHNpemUuCisJCQkgKi8KKwkJCXJldCA9IEVPRjsKKwkJCWlmIChzaXplICE9IGlvc2l6ZSkgeworCQkJCXNpemUgPSBpb3NpemU7CisJCQkJYnVmID0gbWFsbG9jKHNpemUpOworCQkJfQorCQl9CisJCWlmIChidWYgPT0gTlVMTCkgeworCQkJLyogTm8gbHVjazsgc3dpdGNoIHRvIHVuYnVmZmVyZWQgSS9PLiAqLworbmJmOgorCQkJZnAtPl9mbGFncyA9IGZsYWdzIHwgX19TTkJGOworCQkJZnAtPl93ID0gMDsKKwkJCWZwLT5fYmYuX2Jhc2UgPSBmcC0+X3AgPSBmcC0+X25idWY7CisJCQlmcC0+X2JmLl9zaXplID0gMTsKKwkJCXJldHVybiAocmV0KTsKKwkJfQorCQlmbGFncyB8PSBfX1NNQkY7CisJfQorCisJLyoKKwkgKiBLaWxsIGFueSBzZWVrIG9wdGltaXphdGlvbiBpZiB0aGUgYnVmZmVyIGlzIG5vdCB0aGUKKwkgKiByaWdodCBzaXplLgorCSAqCisJICogU0hPVUxEIFdFIEFMTE9XIE1VTFRJUExFUyBIRVJFIChpLmUuLCBvayBpZmYgKHNpemUgJSBpb3NpemUpID09IDApPworCSAqLworCWlmIChzaXplICE9IGlvc2l6ZSkKKwkJZmxhZ3MgfD0gX19TTlBUOworCisJLyoKKwkgKiBGaXggdXAgdGhlIEZJTEUgZmllbGRzLCBhbmQgc2V0IF9fY2xlYW51cCBmb3Igb3V0cHV0IGZsdXNoIG9uCisJICogZXhpdCAoc2luY2Ugd2UgYXJlIGJ1ZmZlcmVkIGluIHNvbWUgd2F5KS4KKwkgKi8KKwlpZiAobW9kZSA9PSBfSU9MQkYpCisJCWZsYWdzIHw9IF9fU0xCRjsKKwlmcC0+X2ZsYWdzID0gZmxhZ3M7CisJZnAtPl9iZi5fYmFzZSA9IGZwLT5fcCA9ICh1bnNpZ25lZCBjaGFyICopYnVmOworCWZwLT5fYmYuX3NpemUgPSBzaXplOworCS8qIGZwLT5fbGJmc2l6ZSBpcyBzdGlsbCAwICovCisJaWYgKGZsYWdzICYgX19TV1IpIHsKKwkJLyoKKwkJICogQmVnaW4gb3IgY29udGludWUgd3JpdGluZzogc2VlIF9fc3dzZXR1cCgpLiAgTm90ZQorCQkgKiB0aGF0IF9fU05CRiBpcyBpbXBvc3NpYmxlIChpdCB3YXMgaGFuZGxlZCBlYXJsaWVyKS4KKwkJICovCisJCWlmIChmbGFncyAmIF9fU0xCRikgeworCQkJZnAtPl93ID0gMDsKKwkJCWZwLT5fbGJmc2l6ZSA9IC1mcC0+X2JmLl9zaXplOworCQl9IGVsc2UKKwkJCWZwLT5fdyA9IHNpemU7CisJfSBlbHNlIHsKKwkJLyogYmVnaW4vY29udGludWUgcmVhZGluZywgb3Igc3RheSBpbiBpbnRlcm1lZGlhdGUgc3RhdGUgKi8KKwkJZnAtPl93ID0gMDsKKwl9CisJX19hdGV4aXRfcmVnaXN0ZXJfY2xlYW51cChfY2xlYW51cCk7CisKKwlyZXR1cm4gKHJldCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL3NucHJpbnRmLmMgYi9saWJjL3N0ZGlvL3NucHJpbnRmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgzMGMwZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkaW8vc25wcmludGYuYwpAQCAtMCwwICsxLDY3IEBACisvKgkkT3BlbkJTRDogc25wcmludGYuYyx2IDEuMTQgMjAwNS8xMC8xMCAxMjowMDo1MiBlc3BpZSBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorCitpbnQKK3NucHJpbnRmKGNoYXIgKnN0ciwgc2l6ZV90IG4sIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworICB2YV9saXN0IGFwOworCWludCByZXQ7CisJY2hhciBkdW1teTsKKwlGSUxFIGY7CisJc3RydWN0IF9fc2ZpbGVleHQgZmV4dDsKKworCS8qIFdoaWxlIHNucHJpbnRmKDMpIHNwZWNpZmllcyBzaXplX3Qgc3RkaW8gdXNlcyBhbiBpbnQgaW50ZXJuYWxseSAqLworCWlmIChuID4gSU5UX01BWCkKKwkJbiA9IElOVF9NQVg7CisJLyogU3RkaW8gaW50ZXJuYWxzIGRvIG5vdCBkZWFsIGNvcnJlY3RseSB3aXRoIHplcm8gbGVuZ3RoIGJ1ZmZlciAqLworCWlmIChuID09IDApIHsKKwkJc3RyID0gJmR1bW15OworCQluID0gMTsKKwl9CisJX0ZJTEVFWFRfU0VUVVAoJmYsICZmZXh0KTsKKwlmLl9maWxlID0gLTE7CisJZi5fZmxhZ3MgPSBfX1NXUiB8IF9fU1NUUjsKKwlmLl9iZi5fYmFzZSA9IGYuX3AgPSAodW5zaWduZWQgY2hhciAqKXN0cjsKKwlmLl9iZi5fc2l6ZSA9IGYuX3cgPSBuIC0gMTsKKwl2YV9zdGFydChhcCwgZm10KTsKKwlyZXQgPSB2ZnByaW50ZigmZiwgZm10LCBhcCk7CisgIHZhX2VuZChhcCk7CisJKmYuX3AgPSAnXDAnOworCXJldHVybiAocmV0KTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vc3ByaW50Zi5jIGIvbGliYy9zdGRpby9zcHJpbnRmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM5Y2RlNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkaW8vc3ByaW50Zi5jCkBAIC0wLDAgKzEsNjMgQEAKKy8qCSRPcGVuQlNEOiBzcHJpbnRmLmMsdiAxLjEzIDIwMDUvMTAvMTAgMTI6MDA6NTIgZXNwaWUgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKworI2lmIGRlZmluZWQoQVBJV0FSTikKK19fd2Fybl9yZWZlcmVuY2VzKHNwcmludGYsCisgICAgIndhcm5pbmc6IHNwcmludGYoKSBpcyBvZnRlbiBtaXN1c2VkLCBwbGVhc2UgdXNlIHNucHJpbnRmKCkiKTsKKyNlbmRpZgorCitpbnQKK3NwcmludGYoY2hhciAqc3RyLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwlpbnQgcmV0OworICB2YV9saXN0IGFwOworCUZJTEUgZjsKKwlzdHJ1Y3QgX19zZmlsZWV4dCBmZXh0OworCisJX0ZJTEVFWFRfU0VUVVAoJmYsICZmZXh0KTsKKwlmLl9maWxlID0gLTE7CisJZi5fZmxhZ3MgPSBfX1NXUiB8IF9fU1NUUjsKKwlmLl9iZi5fYmFzZSA9IGYuX3AgPSAodW5zaWduZWQgY2hhciAqKXN0cjsKKwlmLl9iZi5fc2l6ZSA9IGYuX3cgPSBJTlRfTUFYOworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXJldCA9IHZmcHJpbnRmKCZmLCBmbXQsIGFwKTsKKyAgdmFfZW5kKGFwKTsKKwkqZi5fcCA9ICdcMCc7CisJcmV0dXJuIChyZXQpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9zc2NhbmYuYyBiL2xpYmMvc3RkaW8vc3NjYW5mLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE0MWVlYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkaW8vc3NjYW5mLmMKQEAgLTAsMCArMSw2NSBAQAorLyoJJE9wZW5CU0Q6IHNzY2FuZi5jLHYgMS4xMiAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgImxvY2FsLmgiCisKKy8qIEFSR1NVU0VEICovCitzdGF0aWMgaW50Citlb2ZyZWFkKHZvaWQgKmNvb2tpZSwgY2hhciAqYnVmLCBpbnQgbGVuKQoreworCisJcmV0dXJuICgwKTsKK30KKworaW50Citzc2NhbmYoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwlpbnQgcmV0OworICB2YV9saXN0IGFwOworCUZJTEUgZjsKKwlzdHJ1Y3QgX19zZmlsZWV4dCBmZXh0OworCisJX0ZJTEVFWFRfU0VUVVAoJmYsICZmZXh0KTsKKwlmLl9mbGFncyA9IF9fU1JEOworCWYuX2JmLl9iYXNlID0gZi5fcCA9ICh1bnNpZ25lZCBjaGFyICopc3RyOworCWYuX2JmLl9zaXplID0gZi5fciA9IHN0cmxlbihzdHIpOworCWYuX3JlYWQgPSBlb2ZyZWFkOworCWYuX2xiLl9iYXNlID0gTlVMTDsKKwl2YV9zdGFydChhcCwgZm10KTsKKwlyZXQgPSB2ZnNjYW5mKCZmLCBmbXQsIGFwKTsKKyAgdmFfZW5kKGFwKTsKKwlyZXR1cm4gKHJldCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL3N0ZGlvLmMgYi9saWJjL3N0ZGlvL3N0ZGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRhMjdiNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkaW8vc3RkaW8uYwpAQCAtMCwwICsxLDg5IEBACisvKgkkT3BlbkJTRDogc3RkaW8uYyx2IDEuOSAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKworLyoKKyAqIFNtYWxsIHN0YW5kYXJkIEkvTy9zZWVrL2Nsb3NlIGZ1bmN0aW9ucy4KKyAqIFRoZXNlIG1haW50YWluIHRoZSBga25vd24gc2VlayBvZmZzZXQnIGZvciBzZWVrIG9wdGltaXNhdGlvbi4KKyAqLworaW50CitfX3NyZWFkKHZvaWQgKmNvb2tpZSwgY2hhciAqYnVmLCBpbnQgbikKK3sKKwlGSUxFICpmcCA9IGNvb2tpZTsKKwlpbnQgcmV0OworCQorCXJldCA9IHJlYWQoZnAtPl9maWxlLCBidWYsIG4pOworCS8qIGlmIHRoZSByZWFkIHN1Y2NlZWRlZCwgdXBkYXRlIHRoZSBjdXJyZW50IG9mZnNldCAqLworCWlmIChyZXQgPj0gMCkKKwkJZnAtPl9vZmZzZXQgKz0gcmV0OworCWVsc2UKKwkJZnAtPl9mbGFncyAmPSB+X19TT0ZGOwkvKiBwYXJhbm9pYSAqLworCXJldHVybiAocmV0KTsKK30KKworaW50CitfX3N3cml0ZSh2b2lkICpjb29raWUsIGNvbnN0IGNoYXIgKmJ1ZiwgaW50IG4pCit7CisJRklMRSAqZnAgPSBjb29raWU7CisKKwlpZiAoZnAtPl9mbGFncyAmIF9fU0FQUCkKKwkJKHZvaWQpIGxzZWVrKGZwLT5fZmlsZSwgKG9mZl90KTAsIFNFRUtfRU5EKTsKKwlmcC0+X2ZsYWdzICY9IH5fX1NPRkY7CS8qIGluIGNhc2UgRkFQUEVORCBtb2RlIGlzIHNldCAqLworCXJldHVybiAod3JpdGUoZnAtPl9maWxlLCBidWYsIG4pKTsKK30KKworZnBvc190CitfX3NzZWVrKHZvaWQgKmNvb2tpZSwgZnBvc190IG9mZnNldCwgaW50IHdoZW5jZSkKK3sKKwlGSUxFICpmcCA9IGNvb2tpZTsKKwlvZmZfdCByZXQ7CisJCisJcmV0ID0gbHNlZWsoZnAtPl9maWxlLCAob2ZmX3Qpb2Zmc2V0LCB3aGVuY2UpOworCWlmIChyZXQgPT0gKG9mZl90KS0xKQorCQlmcC0+X2ZsYWdzICY9IH5fX1NPRkY7CisJZWxzZSB7CisJCWZwLT5fZmxhZ3MgfD0gX19TT0ZGOworCQlmcC0+X29mZnNldCA9IHJldDsKKwl9CisJcmV0dXJuIChyZXQpOworfQorCitpbnQKK19fc2Nsb3NlKHZvaWQgKmNvb2tpZSkKK3sKKwlyZXR1cm4gKGNsb3NlKCgoRklMRSAqKWNvb2tpZSktPl9maWxlKSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL3RlbXBuYW0uYyBiL2xpYmMvc3RkaW8vdGVtcG5hbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiN2VjNzUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGlvL3RlbXBuYW0uYwpAQCAtMCwwICsxLDg0IEBACisvKgkkT3BlbkJTRDogdGVtcG5hbS5jLHYgMS4xNCAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCisvKgorICogQ29weXJpZ2h0IChjKSAxOTg4LCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxwYXRocy5oPgorCitfX3dhcm5fcmVmZXJlbmNlcyh0ZW1wbmFtLAorICAgICJ3YXJuaW5nOiB0ZW1wbmFtKCkgcG9zc2libHkgdXNlZCB1bnNhZmVseTsgY29uc2lkZXIgdXNpbmcgbWtzdGVtcCgpIik7CisKK2V4dGVybiBjaGFyICpfbWt0ZW1wKGNoYXIgKik7CisKK2NoYXIgKgordGVtcG5hbShjb25zdCBjaGFyICpkaXIsIGNvbnN0IGNoYXIgKnBmeCkKK3sKKwlpbnQgc3ZlcnJubzsKKwljaGFyICpmLCAqbmFtZTsKKworCWlmICghKG5hbWUgPSBtYWxsb2MoTUFYUEFUSExFTikpKQorCQlyZXR1cm4oTlVMTCk7CisKKwlpZiAoIXBmeCkKKwkJcGZ4ID0gInRtcC4iOworCisJaWYgKGlzc2V0dWdpZCgpID09IDAgJiYgKGYgPSBnZXRlbnYoIlRNUERJUiIpKSkgeworCQkodm9pZClzbnByaW50ZihuYW1lLCBNQVhQQVRITEVOLCAiJXMlcyVzWFhYWFhYWFhYWCIsIGYsCisJCSAgICAqKGYgKyBzdHJsZW4oZikgLSAxKSA9PSAnLyc/ICIiOiAiLyIsIHBmeCk7CisJCWlmICgoZiA9IF9ta3RlbXAobmFtZSkpKQorCQkJcmV0dXJuKGYpOworCX0KKworCWlmICgoZiA9IChjaGFyICopZGlyKSkgeworCQkodm9pZClzbnByaW50ZihuYW1lLCBNQVhQQVRITEVOLCAiJXMlcyVzWFhYWFhYWFhYWCIsIGYsCisJCSAgICAqKGYgKyBzdHJsZW4oZikgLSAxKSA9PSAnLyc/ICIiOiAiLyIsIHBmeCk7CisJCWlmICgoZiA9IF9ta3RlbXAobmFtZSkpKQorCQkJcmV0dXJuKGYpOworCX0KKworCWYgPSBQX3RtcGRpcjsKKwkodm9pZClzbnByaW50ZihuYW1lLCBNQVhQQVRITEVOLCAiJXMlc1hYWFhYWFhYWCIsIGYsIHBmeCk7CisJaWYgKChmID0gX21rdGVtcChuYW1lKSkpCisJCXJldHVybihmKTsKKworCWYgPSBfUEFUSF9UTVA7CisJKHZvaWQpc25wcmludGYobmFtZSwgTUFYUEFUSExFTiwgIiVzJXNYWFhYWFhYWFgiLCBmLCBwZngpOworCWlmICgoZiA9IF9ta3RlbXAobmFtZSkpKQorCQlyZXR1cm4oZik7CisKKwlzdmVycm5vID0gZXJybm87CisJZnJlZShuYW1lKTsKKwllcnJubyA9IHN2ZXJybm87CisJcmV0dXJuKE5VTEwpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby90bXBmaWxlLmMgYi9saWJjL3N0ZGlvL3RtcGZpbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWY3ZTkyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRpby90bXBmaWxlLmMKQEAgLTAsMCArMSw4MSBAQAorLyoJJE9wZW5CU0Q6IHRtcGZpbGUuYyx2IDEuMTAgMjAwNS8xMC8xMCAxMjowMDo1MiBlc3BpZSBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8cGF0aHMuaD4KKworRklMRSAqCit0bXBmaWxlKHZvaWQpCit7CisJc2lnc2V0X3Qgc2V0LCBvc2V0OworCUZJTEUgKmZwOworCWludCBmZCwgc3ZlcnJubzsKKyNkZWZpbmUJVFJBSUxFUgkidG1wLlhYWFhYWFhYWFgiCisJY2hhciBidWZbc2l6ZW9mKF9QQVRIX1RNUCkgKyBzaXplb2YoVFJBSUxFUildOworCisJKHZvaWQpbWVtY3B5KGJ1ZiwgX1BBVEhfVE1QLCBzaXplb2YoX1BBVEhfVE1QKSAtIDEpOworCSh2b2lkKW1lbWNweShidWYgKyBzaXplb2YoX1BBVEhfVE1QKSAtIDEsIFRSQUlMRVIsIHNpemVvZihUUkFJTEVSKSk7CisKKwlzaWdmaWxsc2V0KCZzZXQpOworCSh2b2lkKXNpZ3Byb2NtYXNrKFNJR19CTE9DSywgJnNldCwgJm9zZXQpOworCisJZmQgPSBta3N0ZW1wKGJ1Zik7CisJaWYgKGZkICE9IC0xKSB7CisJCW1vZGVfdCB1OworCisJCSh2b2lkKXVubGluayhidWYpOworCQl1ID0gdW1hc2soMCk7CisJCSh2b2lkKXVtYXNrKHUpOworCQkodm9pZClmY2htb2QoZmQsIDA2NjYgJiB+dSk7CisJfQorCisJKHZvaWQpc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZvc2V0LCBOVUxMKTsKKworCWlmIChmZCA9PSAtMSkKKwkJcmV0dXJuIChOVUxMKTsKKworCWlmICgoZnAgPSBmZG9wZW4oZmQsICJ3KyIpKSA9PSBOVUxMKSB7CisJCXN2ZXJybm8gPSBlcnJubzsKKwkJKHZvaWQpY2xvc2UoZmQpOworCQllcnJubyA9IHN2ZXJybm87CisJCXJldHVybiAoTlVMTCk7CisJfQorCXJldHVybiAoZnApOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby90bXBuYW0uYyBiL2xpYmMvc3RkaW8vdG1wbmFtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJlMGEyMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkaW8vdG1wbmFtLmMKQEAgLTAsMCArMSw1NSBAQAorLyoJJE9wZW5CU0Q6IHRtcG5hbS5jLHYgMS4xMCAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MywgMTk5NAorICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKK19fd2Fybl9yZWZlcmVuY2VzKHRtcG5hbSwKKyAgICAid2FybmluZzogdG1wbmFtKCkgcG9zc2libHkgdXNlZCB1bnNhZmVseTsgY29uc2lkZXIgdXNpbmcgbWtzdGVtcCgpIik7CisKK2V4dGVybiBjaGFyICpfbWt0ZW1wKGNoYXIgKik7CisKK2NoYXIgKgordG1wbmFtKGNoYXIgKnMpCit7CisJc3RhdGljIHVfbG9uZyB0bXBjb3VudDsKKwlzdGF0aWMgY2hhciBidWZbTF90bXBuYW1dOworCisJaWYgKHMgPT0gTlVMTCkKKwkJcyA9IGJ1ZjsKKwkodm9pZClzbnByaW50ZihzLCBMX3RtcG5hbSwgIiVzdG1wLiVsdS5YWFhYWFhYWFgiLCBQX3RtcGRpciwgdG1wY291bnQpOworCSsrdG1wY291bnQ7CisJcmV0dXJuIChfbWt0ZW1wKHMpKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vdW5nZXRjLmMgYi9saWJjL3N0ZGlvL3VuZ2V0Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlMDUyNTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGlvL3VuZ2V0Yy5jCkBAIC0wLDAgKzEsMTQxIEBACisvKgkkT3BlbkJTRDogdW5nZXRjLmMsdiAxLjkgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorCitzdGF0aWMgaW50IF9fc3VibW9yZShGSUxFICopOworLyoKKyAqIEV4cGFuZCB0aGUgdW5nZXRjIGJ1ZmZlciBgaW4gcGxhY2UnLiAgVGhhdCBpcywgYWRqdXN0IGZwLT5fcCB3aGVuCisgKiB0aGUgYnVmZmVyIG1vdmVzLCBzbyB0aGF0IGl0IHBvaW50cyB0aGUgc2FtZSBkaXN0YW5jZSBmcm9tIHRoZSBlbmQsCisgKiBhbmQgbW92ZSB0aGUgYnl0ZXMgaW4gdGhlIGJ1ZmZlciBhcm91bmQgYXMgbmVjZXNzYXJ5IHNvIHRoYXQgdGhleQorICogYXJlIGFsbCBhdCB0aGUgZW5kIChzdGFjay1zdHlsZSkuCisgKi8KK3N0YXRpYyBpbnQKK19fc3VibW9yZShGSUxFICpmcCkKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBjaGFyICpwOworCisJaWYgKF9VQihmcCkuX2Jhc2UgPT0gZnAtPl91YnVmKSB7CisJCS8qCisJCSAqIEdldCBhIG5ldyBidWZmZXIgKHJhdGhlciB0aGFuIGV4cGFuZGluZyB0aGUgb2xkIG9uZSkuCisJCSAqLworCQlpZiAoKHAgPSBtYWxsb2MoKHNpemVfdClCVUZTSVopKSA9PSBOVUxMKQorCQkJcmV0dXJuIChFT0YpOworCQlfVUIoZnApLl9iYXNlID0gcDsKKwkJX1VCKGZwKS5fc2l6ZSA9IEJVRlNJWjsKKwkJcCArPSBCVUZTSVogLSBzaXplb2YoZnAtPl91YnVmKTsKKwkJZm9yIChpID0gc2l6ZW9mKGZwLT5fdWJ1Zik7IC0taSA+PSAwOykKKwkJCXBbaV0gPSBmcC0+X3VidWZbaV07CisJCWZwLT5fcCA9IHA7CisJCXJldHVybiAoMCk7CisJfQorCWkgPSBfVUIoZnApLl9zaXplOworCXAgPSByZWFsbG9jKF9VQihmcCkuX2Jhc2UsIGkgPDwgMSk7CisJaWYgKHAgPT0gTlVMTCkKKwkJcmV0dXJuIChFT0YpOworCS8qIG5vIG92ZXJsYXAgKGhlbmNlIGNhbiB1c2UgbWVtY3B5KSBiZWNhdXNlIHdlIGRvdWJsZWQgdGhlIHNpemUgKi8KKwkodm9pZCltZW1jcHkoKHZvaWQgKikocCArIGkpLCAodm9pZCAqKXAsIChzaXplX3QpaSk7CisJZnAtPl9wID0gcCArIGk7CisJX1VCKGZwKS5fYmFzZSA9IHA7CisJX1VCKGZwKS5fc2l6ZSA9IGkgPDwgMTsKKwlyZXR1cm4gKDApOworfQorCitpbnQKK3VuZ2V0YyhpbnQgYywgRklMRSAqZnApCit7CisJaWYgKGMgPT0gRU9GKQorCQlyZXR1cm4gKEVPRik7CisJaWYgKCFfX3NkaWRpbml0KQorCQlfX3Npbml0KCk7CisJX1NFVF9PUklFTlRBVElPTihmcCwgLTEpOworCWlmICgoZnAtPl9mbGFncyAmIF9fU1JEKSA9PSAwKSB7CisJCS8qCisJCSAqIE5vdCBhbHJlYWR5IHJlYWRpbmc6IG5vIGdvb2QgdW5sZXNzIHJlYWRpbmctYW5kLXdyaXRpbmcuCisJCSAqIE90aGVyd2lzZSwgZmx1c2ggYW55IGN1cnJlbnQgd3JpdGUgc3R1ZmYuCisJCSAqLworCQlpZiAoKGZwLT5fZmxhZ3MgJiBfX1NSVykgPT0gMCkKKwkJCXJldHVybiAoRU9GKTsKKwkJaWYgKGZwLT5fZmxhZ3MgJiBfX1NXUikgeworCQkJaWYgKF9fc2ZsdXNoKGZwKSkKKwkJCQlyZXR1cm4gKEVPRik7CisJCQlmcC0+X2ZsYWdzICY9IH5fX1NXUjsKKwkJCWZwLT5fdyA9IDA7CisJCQlmcC0+X2xiZnNpemUgPSAwOworCQl9CisJCWZwLT5fZmxhZ3MgfD0gX19TUkQ7CisJfQorCWMgPSAodW5zaWduZWQgY2hhciljOworCisJLyoKKwkgKiBJZiB3ZSBhcmUgaW4gdGhlIG1pZGRsZSBvZiB1bmdldGMnaW5nLCBqdXN0IGNvbnRpbnVlLgorCSAqIFRoaXMgbWF5IHJlcXVpcmUgZXhwYW5kaW5nIHRoZSBjdXJyZW50IHVuZ2V0YyBidWZmZXIuCisJICovCisJaWYgKEhBU1VCKGZwKSkgeworCQlpZiAoZnAtPl9yID49IF9VQihmcCkuX3NpemUgJiYgX19zdWJtb3JlKGZwKSkKKwkJCXJldHVybiAoRU9GKTsKKwkJKi0tZnAtPl9wID0gYzsKKwkJZnAtPl9yKys7CisJCXJldHVybiAoYyk7CisJfQorCWZwLT5fZmxhZ3MgJj0gfl9fU0VPRjsKKworCS8qCisJICogSWYgd2UgY2FuIGhhbmRsZSB0aGlzIGJ5IHNpbXBseSBiYWNraW5nIHVwLCBkbyBzbywKKwkgKiBidXQgbmV2ZXIgcmVwbGFjZSB0aGUgb3JpZ2luYWwgY2hhcmFjdGVyLgorCSAqIChUaGlzIG1ha2VzIHNzY2FuZigpIHdvcmsgd2hlbiBzY2FubmluZyBgY29uc3QnIGRhdGEuKQorCSAqLworCWlmIChmcC0+X2JmLl9iYXNlICE9IE5VTEwgJiYgZnAtPl9wID4gZnAtPl9iZi5fYmFzZSAmJgorCSAgICBmcC0+X3BbLTFdID09IGMpIHsKKwkJZnAtPl9wLS07CisJCWZwLT5fcisrOworCQlyZXR1cm4gKGMpOworCX0KKworCS8qCisJICogQ3JlYXRlIGFuIHVuZ2V0YyBidWZmZXIuCisJICogSW5pdGlhbGx5LCB3ZSB3aWxsIHVzZSB0aGUgYHJlc2VydmUnIGJ1ZmZlci4KKwkgKi8KKwlmcC0+X3VyID0gZnAtPl9yOworCWZwLT5fdXAgPSBmcC0+X3A7CisJX1VCKGZwKS5fYmFzZSA9IGZwLT5fdWJ1ZjsKKwlfVUIoZnApLl9zaXplID0gc2l6ZW9mKGZwLT5fdWJ1Zik7CisJZnAtPl91YnVmW3NpemVvZihmcC0+X3VidWYpIC0gMV0gPSBjOworCWZwLT5fcCA9ICZmcC0+X3VidWZbc2l6ZW9mKGZwLT5fdWJ1ZikgLSAxXTsKKwlmcC0+X3IgPSAxOworCXJldHVybiAoYyk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL3Zhc3ByaW50Zi5jIGIvbGliYy9zdGRpby92YXNwcmludGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzI4MGM5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRpby92YXNwcmludGYuYwpAQCAtMCwwICsxLDU4IEBACisvKgkkT3BlbkJTRDogdmFzcHJpbnRmLmMsdiAxLjEzIDIwMDYvMDEvMDYgMTg6NTM6MDQgbWlsbGVydCBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTk3IFRvZGQgQy4gTWlsbGVyIDxUb2RkLk1pbGxlckBjb3VydGVzYW4uY29tPgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKworaW50Cit2YXNwcmludGYoY2hhciAqKnN0ciwgY29uc3QgY2hhciAqZm10LCBfX3ZhX2xpc3QgYXApCit7CisJaW50IHJldDsKKwlGSUxFIGY7CisJc3RydWN0IF9fc2ZpbGVleHQgZmV4dDsKKwl1bnNpZ25lZCBjaGFyICpfYmFzZTsKKworCV9GSUxFRVhUX1NFVFVQKCZmLCAmZmV4dCk7CisJZi5fZmlsZSA9IC0xOworCWYuX2ZsYWdzID0gX19TV1IgfCBfX1NTVFIgfCBfX1NBTEM7CisJZi5fYmYuX2Jhc2UgPSBmLl9wID0gKHVuc2lnbmVkIGNoYXIgKiltYWxsb2MoMTI4KTsKKwlpZiAoZi5fYmYuX2Jhc2UgPT0gTlVMTCkKKwkJZ290byBlcnI7CisJZi5fYmYuX3NpemUgPSBmLl93ID0gMTI3OwkJLyogTGVhdmUgcm9vbSBmb3IgdGhlIE5VTCAqLworCXJldCA9IHZmcHJpbnRmKCZmLCBmbXQsIGFwKTsKKwlpZiAocmV0ID09IC0xKQorCQlnb3RvIGVycjsKKwkqZi5fcCA9ICdcMCc7CisJX2Jhc2UgPSByZWFsbG9jKGYuX2JmLl9iYXNlLCByZXQgKyAxKTsKKwlpZiAoX2Jhc2UgPT0gTlVMTCkKKwkJZ290byBlcnI7CisJKnN0ciA9IChjaGFyICopX2Jhc2U7CisJcmV0dXJuIChyZXQpOworCitlcnI6CisJaWYgKGYuX2JmLl9iYXNlKSB7CisJCWZyZWUoZi5fYmYuX2Jhc2UpOworCQlmLl9iZi5fYmFzZSA9IE5VTEw7CisJfQorCSpzdHIgPSBOVUxMOworCWVycm5vID0gRU5PTUVNOworCXJldHVybiAoLTEpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby92ZnByaW50Zi5jIGIvbGliYy9zdGRpby92ZnByaW50Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjZTAzNjEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGlvL3ZmcHJpbnRmLmMKQEAgLTAsMCArMSwxMzEzIEBACisvKgkkT3BlbkJTRDogdmZwcmludGYuYyx2IDEuMzcgMjAwNi8wMS8xMyAxNzo1NjoxOCBtaWxsZXJ0IEV4cCAkCSovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIEFjdHVhbCBwcmludGYgaW5uYXJkcy4KKyAqCisgKiBUaGlzIGNvZGUgaXMgbGFyZ2UgYW5kIGNvbXBsaWNhdGVkLi4uCisgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJsb2NhbC5oIgorI2luY2x1ZGUgImZ2d3JpdGUuaCIKKworc3RhdGljIHZvaWQgX19maW5kX2FyZ3VtZW50cyhjb25zdCBjaGFyICpmbXQwLCB2YV9saXN0IGFwLCB2YV9saXN0ICoqYXJndGFibGUsCisgICAgc2l6ZV90ICphcmd0YWJsZXNpeik7CitzdGF0aWMgaW50IF9fZ3Jvd190eXBlX3RhYmxlKHVuc2lnbmVkIGNoYXIgKip0eXBldGFibGUsIGludCAqdGFibGVzaXplKTsKKworLyoKKyAqIEZsdXNoIG91dCBhbGwgdGhlIHZlY3RvcnMgZGVmaW5lZCBieSB0aGUgZ2l2ZW4gdWlvLAorICogdGhlbiByZXNldCBpdCBzbyB0aGF0IGl0IGNhbiBiZSByZXVzZWQuCisgKi8KK3N0YXRpYyBpbnQKK19fc3ByaW50KEZJTEUgKmZwLCBzdHJ1Y3QgX19zdWlvICp1aW8pCit7CisJaW50IGVycjsKKworCWlmICh1aW8tPnVpb19yZXNpZCA9PSAwKSB7CisJCXVpby0+dWlvX2lvdmNudCA9IDA7CisJCXJldHVybiAoMCk7CisJfQorCWVyciA9IF9fc2Z2d3JpdGUoZnAsIHVpbyk7CisJdWlvLT51aW9fcmVzaWQgPSAwOworCXVpby0+dWlvX2lvdmNudCA9IDA7CisJcmV0dXJuIChlcnIpOworfQorCisvKgorICogSGVscGVyIGZ1bmN0aW9uIGZvciBgZnByaW50ZiB0byB1bmJ1ZmZlcmVkIHVuaXggZmlsZSc6IGNyZWF0ZXMgYQorICogdGVtcG9yYXJ5IGJ1ZmZlci4gIFdlIG9ubHkgd29yayBvbiB3cml0ZS1vbmx5IGZpbGVzOyB0aGlzIGF2b2lkcworICogd29ycmllcyBhYm91dCB1bmdldGMgYnVmZmVycyBhbmQgc28gZm9ydGguCisgKi8KK3N0YXRpYyBpbnQKK19fc2JwcmludGYoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCkKK3sKKwlpbnQgcmV0OworCUZJTEUgZmFrZTsKKwlzdHJ1Y3QgX19zZmlsZWV4dCBmYWtlZXh0OworCXVuc2lnbmVkIGNoYXIgYnVmW0JVRlNJWl07CisKKwlfRklMRUVYVF9TRVRVUCgmZmFrZSwgJmZha2VleHQpOworCS8qIGNvcHkgdGhlIGltcG9ydGFudCB2YXJpYWJsZXMgKi8KKwlmYWtlLl9mbGFncyA9IGZwLT5fZmxhZ3MgJiB+X19TTkJGOworCWZha2UuX2ZpbGUgPSBmcC0+X2ZpbGU7CisJZmFrZS5fY29va2llID0gZnAtPl9jb29raWU7CisJZmFrZS5fd3JpdGUgPSBmcC0+X3dyaXRlOworCisJLyogc2V0IHVwIHRoZSBidWZmZXIgKi8KKwlmYWtlLl9iZi5fYmFzZSA9IGZha2UuX3AgPSBidWY7CisJZmFrZS5fYmYuX3NpemUgPSBmYWtlLl93ID0gc2l6ZW9mKGJ1Zik7CisJZmFrZS5fbGJmc2l6ZSA9IDA7CS8qIG5vdCBhY3R1YWxseSB1c2VkLCBidXQgSnVzdCBJbiBDYXNlICovCisKKwkvKiBkbyB0aGUgd29yaywgdGhlbiBjb3B5IGFueSBlcnJvciBzdGF0dXMgKi8KKwlyZXQgPSB2ZnByaW50ZigmZmFrZSwgZm10LCBhcCk7CisJaWYgKHJldCA+PSAwICYmIGZmbHVzaCgmZmFrZSkpCisJCXJldCA9IEVPRjsKKwlpZiAoZmFrZS5fZmxhZ3MgJiBfX1NFUlIpCisJCWZwLT5fZmxhZ3MgfD0gX19TRVJSOworCXJldHVybiAocmV0KTsKK30KKworCisjaWZkZWYgRkxPQVRJTkdfUE9JTlQKKyNpbmNsdWRlIDxsb2NhbGUuaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSAiZmxvYXRpby5oIgorCisjZGVmaW5lCUJVRgkJKE1BWEVYUCtNQVhGUkFDVCsxKQkvKiArIGRlY2ltYWwgcG9pbnQgKi8KKyNkZWZpbmUJREVGUFJFQwkJNgorCitzdGF0aWMgY2hhciAqY3Z0KGRvdWJsZSwgaW50LCBpbnQsIGNoYXIgKiwgaW50ICosIGludCwgaW50ICopOworc3RhdGljIGludCBleHBvbmVudChjaGFyICosIGludCwgaW50KTsKKyNlbHNlIC8qIG5vIEZMT0FUSU5HX1BPSU5UICovCisjZGVmaW5lCUJVRgkJNDAKKyNlbmRpZiAvKiBGTE9BVElOR19QT0lOVCAqLworCisjZGVmaW5lIFNUQVRJQ19BUkdfVEJMX1NJWkUgOAkvKiBTaXplIG9mIHN0YXRpYyBhcmd1bWVudCB0YWJsZS4gKi8KKworLyogQklPTklDOiBkbyBub3QgbGluayBsaWJtIGZvciBvbmx5IHR3byByYXRoZXIgc2ltcGxlIGZ1bmN0aW9ucyAqLworI2lmZGVmIEZMT0FUSU5HX1BPSU5UCitzdGF0aWMgIGludCAgX215X2lzaW5mKGRvdWJsZSk7CitzdGF0aWMgIGludCAgX215X2lzbmFuKGRvdWJsZSk7CisjZW5kaWYKKworLyoKKyAqIE1hY3JvcyBmb3IgY29udmVydGluZyBkaWdpdHMgdG8gbGV0dGVycyBhbmQgdmljZSB2ZXJzYQorICovCisjZGVmaW5lCXRvX2RpZ2l0KGMpCSgoYykgLSAnMCcpCisjZGVmaW5lIGlzX2RpZ2l0KGMpCSgodW5zaWduZWQpdG9fZGlnaXQoYykgPD0gOSkKKyNkZWZpbmUJdG9fY2hhcihuKQkoKG4pICsgJzAnKQorCisvKgorICogRmxhZ3MgdXNlZCBkdXJpbmcgY29udmVyc2lvbi4KKyAqLworI2RlZmluZQlBTFQJCTB4MDAwMQkJLyogYWx0ZXJuYXRlIGZvcm0gKi8KKyNkZWZpbmUJSEVYUFJFRklYCTB4MDAwMgkJLyogYWRkIDB4IG9yIDBYIHByZWZpeCAqLworI2RlZmluZQlMQURKVVNUCQkweDAwMDQJCS8qIGxlZnQgYWRqdXN0bWVudCAqLworI2RlZmluZQlMT05HREJMCQkweDAwMDgJCS8qIGxvbmcgZG91YmxlOyB1bmltcGxlbWVudGVkICovCisjZGVmaW5lCUxPTkdJTlQJCTB4MDAxMAkJLyogbG9uZyBpbnRlZ2VyICovCisjZGVmaW5lCUxMT05HSU5UCTB4MDAyMAkJLyogbG9uZyBsb25nIGludGVnZXIgKi8KKyNkZWZpbmUJU0hPUlRJTlQJMHgwMDQwCQkvKiBzaG9ydCBpbnRlZ2VyICovCisjZGVmaW5lCVpFUk9QQUQJCTB4MDA4MAkJLyogemVybyAoYXMgb3Bwb3NlZCB0byBibGFuaykgcGFkICovCisjZGVmaW5lIEZQVAkJMHgwMTAwCQkvKiBGbG9hdGluZyBwb2ludCBudW1iZXIgKi8KKyNkZWZpbmUgUFRSSU5UCQkweDAyMDAJCS8qICh1bnNpZ25lZCkgcHRyZGlmZl90ICovCisjZGVmaW5lIFNJWkVJTlQJCTB4MDQwMAkJLyogKHNpZ25lZCkgc2l6ZV90ICovCisjZGVmaW5lIENIQVJJTlQJCTB4MDgwMAkJLyogOCBiaXQgaW50ZWdlciAqLworI2RlZmluZSBNQVhJTlQJCTB4MTAwMAkJLyogbGFyZ2VzdCBpbnRlZ2VyIHNpemUgKGludG1heF90KSAqLworCitpbnQKK3ZmcHJpbnRmKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmbXQwLCBfX3ZhX2xpc3QgYXApCit7CisJY2hhciAqZm10OwkvKiBmb3JtYXQgc3RyaW5nICovCisJaW50IGNoOwkvKiBjaGFyYWN0ZXIgZnJvbSBmbXQgKi8KKwlpbnQgbiwgbSwgbjI7CS8qIGhhbmR5IGludGVnZXJzIChzaG9ydCB0ZXJtIHVzYWdlKSAqLworCWNoYXIgKmNwOwkvKiBoYW5keSBjaGFyIHBvaW50ZXIgKHNob3J0IHRlcm0gdXNhZ2UpICovCisJY2hhciAqY3BfZnJlZSA9IE5VTEw7ICAvKiBCSU9OSUM6IGNvcHkgb2YgY3AgdG8gYmUgZnJlZWQgYWZ0ZXIgdXNhZ2UgKi8KKwlzdHJ1Y3QgX19zaW92ICppb3ZwOy8qIGZvciBQUklOVCBtYWNybyAqLworCWludCBmbGFnczsJLyogZmxhZ3MgYXMgYWJvdmUgKi8KKwlpbnQgcmV0OwkJLyogcmV0dXJuIHZhbHVlIGFjY3VtdWxhdG9yICovCisJaW50IHdpZHRoOwkJLyogd2lkdGggZnJvbSBmb3JtYXQgKCU4ZCksIG9yIDAgKi8KKwlpbnQgcHJlYzsJCS8qIHByZWNpc2lvbiBmcm9tIGZvcm1hdCAoJS4zZCksIG9yIC0xICovCisJY2hhciBzaWduOwkJLyogc2lnbiBwcmVmaXggKCcgJywgJysnLCAnLScsIG9yIFwwKSAqLworCXdjaGFyX3Qgd2M7CisJdm9pZCogcHM7CisjaWZkZWYgRkxPQVRJTkdfUE9JTlQKKwljaGFyICpkZWNpbWFsX3BvaW50ID0gIi4iOworCWNoYXIgc29mdHNpZ247CQkvKiB0ZW1wb3JhcnkgbmVnYXRpdmUgc2lnbiBmb3IgZmxvYXRzICovCisJZG91YmxlIF9kb3VibGUgPSAwLjsJLyogZG91YmxlIHByZWNpc2lvbiBhcmd1bWVudHMgJVtlRWZnR10gKi8KKwlpbnQgZXhwdDsJCS8qIGludGVnZXIgdmFsdWUgb2YgZXhwb25lbnQgKi8KKwlpbnQgZXhwc2l6ZSA9IDA7CS8qIGNoYXJhY3RlciBjb3VudCBmb3IgZXhwc3RyICovCisJaW50IG5kaWc7CQkvKiBhY3R1YWwgbnVtYmVyIG9mIGRpZ2l0cyByZXR1cm5lZCBieSBjdnQgKi8KKwljaGFyIGV4cHN0cls3XTsJCS8qIGJ1ZmZlciBmb3IgZXhwb25lbnQgc3RyaW5nICovCisjZW5kaWYKKworCXVpbnRtYXhfdCBfdW1heDsJLyogaW50ZWdlciBhcmd1bWVudHMgJVtkaW91eFhdICovCisJZW51bSB7IE9DVCwgREVDLCBIRVggfSBiYXNlOy8qIGJhc2UgZm9yIFtkaW91eFhdIGNvbnZlcnNpb24gKi8KKwlpbnQgZHByZWM7CQkvKiBhIGNvcHkgb2YgcHJlYyBpZiBbZGlvdXhYXSwgMCBvdGhlcndpc2UgKi8KKwlpbnQgcmVhbHN6OwkJLyogZmllbGQgc2l6ZSBleHBhbmRlZCBieSBkcHJlYyAqLworCWludCBzaXplOwkJLyogc2l6ZSBvZiBjb252ZXJ0ZWQgZmllbGQgb3Igc3RyaW5nICovCisJY2hhciogeGRpZ3MgPSBOVUxMOwkJLyogZGlnaXRzIGZvciBbeFhdIGNvbnZlcnNpb24gKi8KKyNkZWZpbmUgTklPViA4CisJc3RydWN0IF9fc3VpbyB1aW87CS8qIG91dHB1dCBpbmZvcm1hdGlvbjogc3VtbWFyeSAqLworCXN0cnVjdCBfX3Npb3YgaW92W05JT1ZdOy8qIC4uLiBhbmQgaW5kaXZpZHVhbCBpbyB2ZWN0b3JzICovCisJY2hhciBidWZbQlVGXTsJCS8qIHNwYWNlIGZvciAlYywgJVtkaW91eFhdLCAlW2VFZmdHXSAqLworCWNoYXIgb3hbMl07CQkvKiBzcGFjZSBmb3IgMHggaGV4LXByZWZpeCAqLworCXZhX2xpc3QgKmFyZ3RhYmxlOwkvKiBhcmdzLCBidWlsdCBkdWUgdG8gcG9zaXRpb25hbCBhcmcgKi8KKwl2YV9saXN0IHN0YXRhcmd0YWJsZVtTVEFUSUNfQVJHX1RCTF9TSVpFXTsKKwlzaXplX3QgYXJndGFibGVzaXo7CisJaW50IG5leHRhcmc7CQkvKiAxLWJhc2VkIGFyZ3VtZW50IGluZGV4ICovCisJdmFfbGlzdCBvcmdhcDsJCS8qIG9yaWdpbmFsIGFyZ3VtZW50IHBvaW50ZXIgKi8KKwkvKgorCSAqIENob29zZSBQQURTSVpFIHRvIHRyYWRlIGVmZmljaWVuY3kgdnMuIHNpemUuICBJZiBsYXJnZXIgcHJpbnRmCisJICogZmllbGRzIG9jY3VyIGZyZXF1ZW50bHksIGluY3JlYXNlIFBBRFNJWkUgYW5kIG1ha2UgdGhlIGluaXRpYWxpc2VycworCSAqIGJlbG93IGxvbmdlci4KKwkgKi8KKyNkZWZpbmUJUEFEU0laRQkxNgkJLyogcGFkIGNodW5rIHNpemUgKi8KKwlzdGF0aWMgY2hhciBibGFua3NbUEFEU0laRV0gPQorCSB7JyAnLCcgJywnICcsJyAnLCcgJywnICcsJyAnLCcgJywnICcsJyAnLCcgJywnICcsJyAnLCcgJywnICcsJyAnfTsKKwlzdGF0aWMgY2hhciB6ZXJvZXNbUEFEU0laRV0gPQorCSB7JzAnLCcwJywnMCcsJzAnLCcwJywnMCcsJzAnLCcwJywnMCcsJzAnLCcwJywnMCcsJzAnLCcwJywnMCcsJzAnfTsKKworCS8qCisJICogQkVXQVJFLCB0aGVzZSBgZ290byBlcnJvcicgb24gZXJyb3IsIGFuZCBQQUQgdXNlcyBgbicuCisJICovCisjZGVmaW5lCVBSSU5UKHB0ciwgbGVuKSBkbyB7IFwKKwlpb3ZwLT5pb3ZfYmFzZSA9IChwdHIpOyBcCisJaW92cC0+aW92X2xlbiA9IChsZW4pOyBcCisJdWlvLnVpb19yZXNpZCArPSAobGVuKTsgXAorCWlvdnArKzsgXAorCWlmICgrK3Vpby51aW9faW92Y250ID49IE5JT1YpIHsgXAorCQlpZiAoX19zcHJpbnQoZnAsICZ1aW8pKSBcCisJCQlnb3RvIGVycm9yOyBcCisJCWlvdnAgPSBpb3Y7IFwKKwl9IFwKK30gd2hpbGUgKDApCisjZGVmaW5lCVBBRChob3dtYW55LCB3aXRoKSBkbyB7IFwKKwlpZiAoKG4gPSAoaG93bWFueSkpID4gMCkgeyBcCisJCXdoaWxlIChuID4gUEFEU0laRSkgeyBcCisJCQlQUklOVCh3aXRoLCBQQURTSVpFKTsgXAorCQkJbiAtPSBQQURTSVpFOyBcCisJCX0gXAorCQlQUklOVCh3aXRoLCBuKTsgXAorCX0gXAorfSB3aGlsZSAoMCkKKyNkZWZpbmUJRkxVU0goKSBkbyB7IFwKKwlpZiAodWlvLnVpb19yZXNpZCAmJiBfX3NwcmludChmcCwgJnVpbykpIFwKKwkJZ290byBlcnJvcjsgXAorCXVpby51aW9faW92Y250ID0gMDsgXAorCWlvdnAgPSBpb3Y7IFwKK30gd2hpbGUgKDApCisKKwkvKgorCSAqIFRvIGV4dGVuZCBzaG9ydHMgcHJvcGVybHksIHdlIG5lZWQgYm90aCBzaWduZWQgYW5kIHVuc2lnbmVkCisJICogYXJndW1lbnQgZXh0cmFjdGlvbiBtZXRob2RzLgorCSAqLworI2RlZmluZQlTQVJHKCkgXAorCSgoaW50bWF4X3QpKGZsYWdzJk1BWElOVCA/IEdFVEFSRyhpbnRtYXhfdCkgOiBcCisJICAgIGZsYWdzJkxMT05HSU5UID8gR0VUQVJHKGxvbmcgbG9uZykgOiBcCisJICAgIGZsYWdzJkxPTkdJTlQgPyBHRVRBUkcobG9uZykgOiBcCisJICAgIGZsYWdzJlBUUklOVCA/IEdFVEFSRyhwdHJkaWZmX3QpIDogXAorCSAgICBmbGFncyZTSVpFSU5UID8gR0VUQVJHKHNzaXplX3QpIDogXAorCSAgICBmbGFncyZTSE9SVElOVCA/IChzaG9ydClHRVRBUkcoaW50KSA6IFwKKwkgICAgZmxhZ3MmQ0hBUklOVCA/IChfX3NpZ25lZCBjaGFyKUdFVEFSRyhpbnQpIDogXAorCSAgICBHRVRBUkcoaW50KSkpCisjZGVmaW5lCVVBUkcoKSBcCisJKCh1aW50bWF4X3QpKGZsYWdzJk1BWElOVCA/IEdFVEFSRyh1aW50bWF4X3QpIDogXAorCSAgICBmbGFncyZMTE9OR0lOVCA/IEdFVEFSRyh1bnNpZ25lZCBsb25nIGxvbmcpIDogXAorCSAgICBmbGFncyZMT05HSU5UID8gR0VUQVJHKHVuc2lnbmVkIGxvbmcpIDogXAorCSAgICBmbGFncyZQVFJJTlQgPyAodWludHB0cl90KUdFVEFSRyhwdHJkaWZmX3QpIDogLyogWFhYICovIFwKKwkgICAgZmxhZ3MmU0laRUlOVCA/IEdFVEFSRyhzaXplX3QpIDogXAorCSAgICBmbGFncyZTSE9SVElOVCA/ICh1bnNpZ25lZCBzaG9ydClHRVRBUkcoaW50KSA6IFwKKwkgICAgZmxhZ3MmQ0hBUklOVCA/ICh1bnNpZ25lZCBjaGFyKUdFVEFSRyhpbnQpIDogXAorCSAgICBHRVRBUkcodW5zaWduZWQgaW50KSkpCisKKwkgLyoKKwkgICogR2V0ICogYXJndW1lbnRzLCBpbmNsdWRpbmcgdGhlIGZvcm0gKm5uJC4gIFByZXNlcnZlIHRoZSBuZXh0YXJnCisJICAqIHRoYXQgdGhlIGFyZ3VtZW50IGNhbiBiZSBnb3R0ZW4gb25jZSB0aGUgdHlwZSBpcyBkZXRlcm1pbmVkLgorCSAgKi8KKyNkZWZpbmUgR0VUQVNURVIodmFsKSBcCisJbjIgPSAwOyBcCisJY3AgPSBmbXQ7IFwKKwl3aGlsZSAoaXNfZGlnaXQoKmNwKSkgeyBcCisJCW4yID0gMTAgKiBuMiArIHRvX2RpZ2l0KCpjcCk7IFwKKwkJY3ArKzsgXAorCX0gXAorCWlmICgqY3AgPT0gJyQnKSB7IFwKKwkJaW50IGhvbGQgPSBuZXh0YXJnOyBcCisJCWlmIChhcmd0YWJsZSA9PSBOVUxMKSB7IFwKKwkJCWFyZ3RhYmxlID0gc3RhdGFyZ3RhYmxlOyBcCisJCQlfX2ZpbmRfYXJndW1lbnRzKGZtdDAsIG9yZ2FwLCAmYXJndGFibGUsICZhcmd0YWJsZXNpeik7IFwKKwkJfSBcCisJCW5leHRhcmcgPSBuMjsgXAorCQl2YWwgPSBHRVRBUkcoaW50KTsgXAorCQluZXh0YXJnID0gaG9sZDsgXAorCQlmbXQgPSArK2NwOyBcCisJfSBlbHNlIHsgXAorCQl2YWwgPSBHRVRBUkcoaW50KTsgXAorCX0KKworLyoKKyogR2V0IHRoZSBhcmd1bWVudCBpbmRleGVkIGJ5IG5leHRhcmcuICAgSWYgdGhlIGFyZ3VtZW50IHRhYmxlIGlzCisqIGJ1aWx0LCB1c2UgaXQgdG8gZ2V0IHRoZSBhcmd1bWVudC4gIElmIGl0cyBub3QsIGdldCB0aGUgbmV4dAorKiBhcmd1bWVudCAoYW5kIGFyZ3VtZW50cyBtdXN0IGJlIGdvdHRlbiBzZXF1ZW50aWFsbHkpLgorKi8KKyNkZWZpbmUgR0VUQVJHKHR5cGUpIFwKKwkoKChhcmd0YWJsZSAhPSBOVUxMKSA/ICh2b2lkKShhcCA9IGFyZ3RhYmxlW25leHRhcmddKSA6ICh2b2lkKTApLCBcCisJIG5leHRhcmcrKywgdmFfYXJnKGFwLCB0eXBlKSkKKworCV9TRVRfT1JJRU5UQVRJT04oZnAsIC0xKTsKKwkvKiBzb3JyeSwgZnByaW50ZihyZWFkX29ubHlfZmlsZSwgIiIpIHJldHVybnMgRU9GLCBub3QgMCAqLworCWlmIChjYW50d3JpdGUoZnApKSB7CisJCWVycm5vID0gRUJBREY7CisJCXJldHVybiAoRU9GKTsKKwl9CisKKwkvKiBvcHRpbWlzZSBmcHJpbnRmKHN0ZGVycikgKGFuZCBvdGhlciB1bmJ1ZmZlcmVkIFVuaXggZmlsZXMpICovCisJaWYgKChmcC0+X2ZsYWdzICYgKF9fU05CRnxfX1NXUnxfX1NSVykpID09IChfX1NOQkZ8X19TV1IpICYmCisJICAgIGZwLT5fZmlsZSA+PSAwKQorCQlyZXR1cm4gKF9fc2JwcmludGYoZnAsIGZtdDAsIGFwKSk7CisKKwlmbXQgPSAoY2hhciAqKWZtdDA7CisJYXJndGFibGUgPSBOVUxMOworCW5leHRhcmcgPSAxOworCXZhX2NvcHkob3JnYXAsIGFwKTsKKwl1aW8udWlvX2lvdiA9IGlvdnAgPSBpb3Y7CisJdWlvLnVpb19yZXNpZCA9IDA7CisJdWlvLnVpb19pb3ZjbnQgPSAwOworCXJldCA9IDA7CisKKwltZW1zZXQoJnBzLCAwLCBzaXplb2YocHMpKTsKKwkvKgorCSAqIFNjYW4gdGhlIGZvcm1hdCBmb3IgY29udmVyc2lvbnMgKGAlJyBjaGFyYWN0ZXIpLgorCSAqLworCWZvciAoOzspIHsKKwkJY3AgPSBmbXQ7CisjaWYgMSAgLyogQklPTklDICovCisgICAgICAgICAgICAgICAgbiA9IC0xOworICAgICAgICAgICAgICAgIHdoaWxlICggKHdjID0gKmZtdCkgIT0gMCApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHdjID09ICclJykgeworICAgICAgICAgICAgICAgICAgICAgICAgbiA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBmbXQrKzsKKyAgICAgICAgICAgICAgICB9CisjZWxzZQorCQl3aGlsZSAoKG4gPSBtYnJ0b3djKCZ3YywgZm10LCBNQl9DVVJfTUFYLCAmcHMpKSA+IDApIHsKKwkJCWZtdCArPSBuOworCQkJaWYgKHdjID09ICclJykgeworCQkJCWZtdC0tOworCQkJCWJyZWFrOworCQkJfQorCQl9CisjZW5kaWYKKwkJaWYgKChtID0gZm10IC0gY3ApICE9IDApIHsKKwkJCVBSSU5UKGNwLCBtKTsKKwkJCXJldCArPSBtOworCQl9CisJCWlmIChuIDw9IDApCisJCQlnb3RvIGRvbmU7CisJCWZtdCsrOwkJLyogc2tpcCBvdmVyICclJyAqLworCisJCWZsYWdzID0gMDsKKwkJZHByZWMgPSAwOworCQl3aWR0aCA9IDA7CisJCXByZWMgPSAtMTsKKwkJc2lnbiA9ICdcMCc7CisKK3JmbGFnOgkJY2ggPSAqZm10Kys7CityZXN3aXRjaDoJc3dpdGNoIChjaCkgeworCQljYXNlICcgJzoKKwkJCS8qCisJCQkgKiBgYElmIHRoZSBzcGFjZSBhbmQgKyBmbGFncyBib3RoIGFwcGVhciwgdGhlIHNwYWNlCisJCQkgKiBmbGFnIHdpbGwgYmUgaWdub3JlZC4nJworCQkJICoJLS0gQU5TSSBYM0oxMQorCQkJICovCisJCQlpZiAoIXNpZ24pCisJCQkJc2lnbiA9ICcgJzsKKwkJCWdvdG8gcmZsYWc7CisJCWNhc2UgJyMnOgorCQkJZmxhZ3MgfD0gQUxUOworCQkJZ290byByZmxhZzsKKwkJY2FzZSAnKic6CisJCQkvKgorCQkJICogYGBBIG5lZ2F0aXZlIGZpZWxkIHdpZHRoIGFyZ3VtZW50IGlzIHRha2VuIGFzIGEKKwkJCSAqIC0gZmxhZyBmb2xsb3dlZCBieSBhIHBvc2l0aXZlIGZpZWxkIHdpZHRoLicnCisJCQkgKgktLSBBTlNJIFgzSjExCisJCQkgKiBUaGV5IGRvbid0IGV4Y2x1ZGUgZmllbGQgd2lkdGhzIHJlYWQgZnJvbSBhcmdzLgorCQkJICovCisJCQlHRVRBU1RFUih3aWR0aCk7CisJCQlpZiAod2lkdGggPj0gMCkKKwkJCQlnb3RvIHJmbGFnOworCQkJd2lkdGggPSAtd2lkdGg7CisJCQkvKiBGQUxMVEhST1VHSCAqLworCQljYXNlICctJzoKKwkJCWZsYWdzIHw9IExBREpVU1Q7CisJCQlnb3RvIHJmbGFnOworCQljYXNlICcrJzoKKwkJCXNpZ24gPSAnKyc7CisJCQlnb3RvIHJmbGFnOworCQljYXNlICcuJzoKKwkJCWlmICgoY2ggPSAqZm10KyspID09ICcqJykgeworCQkJCUdFVEFTVEVSKG4pOworCQkJCXByZWMgPSBuIDwgMCA/IC0xIDogbjsKKwkJCQlnb3RvIHJmbGFnOworCQkJfQorCQkJbiA9IDA7CisJCQl3aGlsZSAoaXNfZGlnaXQoY2gpKSB7CisJCQkJbiA9IDEwICogbiArIHRvX2RpZ2l0KGNoKTsKKwkJCQljaCA9ICpmbXQrKzsKKwkJCX0KKwkJCWlmIChjaCA9PSAnJCcpIHsKKwkJCQluZXh0YXJnID0gbjsKKwkJCQlpZiAoYXJndGFibGUgPT0gTlVMTCkgeworCQkJCQlhcmd0YWJsZSA9IHN0YXRhcmd0YWJsZTsKKwkJCQkJX19maW5kX2FyZ3VtZW50cyhmbXQwLCBvcmdhcCwKKwkJCQkJICAgICZhcmd0YWJsZSwgJmFyZ3RhYmxlc2l6KTsKKwkJCQl9CisJCQkJZ290byByZmxhZzsKKwkJCX0KKwkJCXByZWMgPSBuIDwgMCA/IC0xIDogbjsKKwkJCWdvdG8gcmVzd2l0Y2g7CisJCWNhc2UgJzAnOgorCQkJLyoKKwkJCSAqIGBgTm90ZSB0aGF0IDAgaXMgdGFrZW4gYXMgYSBmbGFnLCBub3QgYXMgdGhlCisJCQkgKiBiZWdpbm5pbmcgb2YgYSBmaWVsZCB3aWR0aC4nJworCQkJICoJLS0gQU5TSSBYM0oxMQorCQkJICovCisJCQlmbGFncyB8PSBaRVJPUEFEOworCQkJZ290byByZmxhZzsKKwkJY2FzZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzogY2FzZSAnNCc6CisJCWNhc2UgJzUnOiBjYXNlICc2JzogY2FzZSAnNyc6IGNhc2UgJzgnOiBjYXNlICc5JzoKKwkJCW4gPSAwOworCQkJZG8geworCQkJCW4gPSAxMCAqIG4gKyB0b19kaWdpdChjaCk7CisJCQkJY2ggPSAqZm10Kys7CisJCQl9IHdoaWxlIChpc19kaWdpdChjaCkpOworCQkJaWYgKGNoID09ICckJykgeworCQkJCW5leHRhcmcgPSBuOworCQkJCWlmIChhcmd0YWJsZSA9PSBOVUxMKSB7CisJCQkJCWFyZ3RhYmxlID0gc3RhdGFyZ3RhYmxlOworCQkJCQlfX2ZpbmRfYXJndW1lbnRzKGZtdDAsIG9yZ2FwLAorCQkJCQkgICAgJmFyZ3RhYmxlLCAmYXJndGFibGVzaXopOworCQkJCX0KKwkJCQlnb3RvIHJmbGFnOworCQkJfQorCQkJd2lkdGggPSBuOworCQkJZ290byByZXN3aXRjaDsKKyNpZmRlZiBGTE9BVElOR19QT0lOVAorCQljYXNlICdMJzoKKwkJCWZsYWdzIHw9IExPTkdEQkw7CisJCQlnb3RvIHJmbGFnOworI2VuZGlmCisJCWNhc2UgJ2gnOgorCQkJZmxhZ3MgfD0gU0hPUlRJTlQ7CisJCQlnb3RvIHJmbGFnOworCQljYXNlICdqJzoKKwkJCWZsYWdzIHw9IE1BWElOVDsKKwkJCWdvdG8gcmZsYWc7CisJCWNhc2UgJ2wnOgorCQkJaWYgKCpmbXQgPT0gJ2wnKSB7CisJCQkJZm10Kys7CisJCQkJZmxhZ3MgfD0gTExPTkdJTlQ7CisJCQl9IGVsc2UgeworCQkJCWZsYWdzIHw9IExPTkdJTlQ7CisJCQl9CisJCQlnb3RvIHJmbGFnOworCQljYXNlICdxJzoKKwkJCWZsYWdzIHw9IExMT05HSU5UOworCQkJZ290byByZmxhZzsKKwkJY2FzZSAndCc6CisJCQlmbGFncyB8PSBQVFJJTlQ7CisJCQlnb3RvIHJmbGFnOworCQljYXNlICd6JzoKKwkJCWZsYWdzIHw9IFNJWkVJTlQ7CisJCQlnb3RvIHJmbGFnOworCQljYXNlICdjJzoKKwkJCSooY3AgPSBidWYpID0gR0VUQVJHKGludCk7CisJCQlzaXplID0gMTsKKwkJCXNpZ24gPSAnXDAnOworCQkJYnJlYWs7CisJCWNhc2UgJ0QnOgorCQkJZmxhZ3MgfD0gTE9OR0lOVDsKKwkJCS8qRkFMTFRIUk9VR0gqLworCQljYXNlICdkJzoKKwkJY2FzZSAnaSc6CisJCQlfdW1heCA9IFNBUkcoKTsKKwkJCWlmICgoaW50bWF4X3QpX3VtYXggPCAwKSB7CisJCQkJX3VtYXggPSAtX3VtYXg7CisJCQkJc2lnbiA9ICctJzsKKwkJCX0KKwkJCWJhc2UgPSBERUM7CisJCQlnb3RvIG51bWJlcjsKKyNpZmRlZiBGTE9BVElOR19QT0lOVAorCQljYXNlICdlJzoKKwkJY2FzZSAnRSc6CisJCWNhc2UgJ2YnOgorCQljYXNlICdnJzoKKwkJY2FzZSAnRyc6CisJCQlpZiAocHJlYyA9PSAtMSkgeworCQkJCXByZWMgPSBERUZQUkVDOworCQkJfSBlbHNlIGlmICgoY2ggPT0gJ2cnIHx8IGNoID09ICdHJykgJiYgcHJlYyA9PSAwKSB7CisJCQkJcHJlYyA9IDE7CisJCQl9CisKKwkJCWlmIChmbGFncyAmIExPTkdEQkwpIHsKKwkJCQlfZG91YmxlID0gKGRvdWJsZSkgR0VUQVJHKGxvbmcgZG91YmxlKTsKKwkJCX0gZWxzZSB7CisJCQkJX2RvdWJsZSA9IEdFVEFSRyhkb3VibGUpOworCQkJfQorCisJCQkvKiBkbyB0aGlzIGJlZm9yZSB0cmlja3kgcHJlY2lzaW9uIGNoYW5nZXMgKi8KKwkJCWlmIChfbXlfaXNpbmYoX2RvdWJsZSkpIHsKKwkJCQlpZiAoX2RvdWJsZSA8IDApCisJCQkJCXNpZ24gPSAnLSc7CisJCQkJY3AgPSAiSW5mIjsKKwkJCQlzaXplID0gMzsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChfbXlfaXNuYW4oX2RvdWJsZSkpIHsKKwkJCQljcCA9ICJOYU4iOworCQkJCXNpemUgPSAzOworCQkJCWJyZWFrOworCQkJfQorCisJCQlmbGFncyB8PSBGUFQ7CisJCQljcCA9IGN2dChfZG91YmxlLCBwcmVjLCBmbGFncywgJnNvZnRzaWduLAorCQkJCSZleHB0LCBjaCwgJm5kaWcpOworCQkgICAgY3BfZnJlZSA9IGNwOworCQkJaWYgKGNoID09ICdnJyB8fCBjaCA9PSAnRycpIHsKKwkJCQlpZiAoZXhwdCA8PSAtNCB8fCBleHB0ID4gcHJlYykKKwkJCQkJY2ggPSAoY2ggPT0gJ2cnKSA/ICdlJyA6ICdFJzsKKwkJCQllbHNlCisJCQkJCWNoID0gJ2cnOworCQkJfQorCQkJaWYgKGNoIDw9ICdlJykgewkvKiAnZScgb3IgJ0UnIGZtdCAqLworCQkJCS0tZXhwdDsKKwkJCQlleHBzaXplID0gZXhwb25lbnQoZXhwc3RyLCBleHB0LCBjaCk7CisJCQkJc2l6ZSA9IGV4cHNpemUgKyBuZGlnOworCQkJCWlmIChuZGlnID4gMSB8fCBmbGFncyAmIEFMVCkKKwkJCQkJKytzaXplOworCQkJfSBlbHNlIGlmIChjaCA9PSAnZicpIHsJCS8qIGYgZm10ICovCisJCQkJaWYgKGV4cHQgPiAwKSB7CisJCQkJCXNpemUgPSBleHB0OworCQkJCQlpZiAocHJlYyB8fCBmbGFncyAmIEFMVCkKKwkJCQkJCXNpemUgKz0gcHJlYyArIDE7CisJCQkJfSBlbHNlCS8qICIwLlgiICovCisJCQkJCXNpemUgPSBwcmVjICsgMjsKKwkJCX0gZWxzZSBpZiAoZXhwdCA+PSBuZGlnKSB7CS8qIGZpeGVkIGcgZm10ICovCisJCQkJc2l6ZSA9IGV4cHQ7CisJCQkJaWYgKGZsYWdzICYgQUxUKQorCQkJCQkrK3NpemU7CisJCQl9IGVsc2UKKwkJCQlzaXplID0gbmRpZyArIChleHB0ID4gMCA/CisJCQkJCTEgOiAyIC0gZXhwdCk7CisKKwkJCWlmIChzb2Z0c2lnbikKKwkJCQlzaWduID0gJy0nOworCQkJYnJlYWs7CisjZW5kaWYgLyogRkxPQVRJTkdfUE9JTlQgKi8KKy8qIHRoZSBBbmRyb2lkIHNlY3VyaXR5IHRlYW0gc3VnZ2VzdHMgcmVtb3Zpbmcgc3VwcG9ydCBmb3IgJW4KKyAqIHNpbmNlIGl0IGhhcyBubyByZWFsIHByYWN0aWNhbCB2YWx1ZSwgYW5kIGNvdWxkIGxlYWQgdG8KKyAqIHJ1bm5pbmcgbWFsaWNpb3VzIGNvZGUgKGZvciByZWFsbHkgYnVneSBwcm9ncmFtcyB0aGF0CisgKiBzZW5kIHRvIHByaW50ZigpIHVzZXItZ2VuZXJhdGVkIGZvcm1hdHRpbmcgc3RyaW5ncykuCisgKi8KKyNpZiAwCisJCWNhc2UgJ24nOgorCQkJaWYgKGZsYWdzICYgTExPTkdJTlQpCisJCQkJKkdFVEFSRyhsb25nIGxvbmcgKikgPSByZXQ7CisJCQllbHNlIGlmIChmbGFncyAmIExPTkdJTlQpCisJCQkJKkdFVEFSRyhsb25nICopID0gcmV0OworCQkJZWxzZSBpZiAoZmxhZ3MgJiBTSE9SVElOVCkKKwkJCQkqR0VUQVJHKHNob3J0ICopID0gcmV0OworCQkJZWxzZSBpZiAoZmxhZ3MgJiBDSEFSSU5UKQorCQkJCSpHRVRBUkcoX19zaWduZWQgY2hhciAqKSA9IHJldDsKKwkJCWVsc2UgaWYgKGZsYWdzICYgUFRSSU5UKQorCQkJCSpHRVRBUkcocHRyZGlmZl90ICopID0gcmV0OworCQkJZWxzZSBpZiAoZmxhZ3MgJiBTSVpFSU5UKQorCQkJCSpHRVRBUkcoc3NpemVfdCAqKSA9IHJldDsKKwkJCWVsc2UgaWYgKGZsYWdzICYgTUFYSU5UKQorCQkJCSpHRVRBUkcoaW50bWF4X3QgKikgPSByZXQ7CisJCQllbHNlCisJCQkJKkdFVEFSRyhpbnQgKikgPSByZXQ7CisJCQljb250aW51ZTsJLyogbm8gb3V0cHV0ICovCisjZW5kaWYKKwkJY2FzZSAnTyc6CisJCQlmbGFncyB8PSBMT05HSU5UOworCQkJLypGQUxMVEhST1VHSCovCisJCWNhc2UgJ28nOgorCQkJX3VtYXggPSBVQVJHKCk7CisJCQliYXNlID0gT0NUOworCQkJZ290byBub3NpZ247CisJCWNhc2UgJ3AnOgorCQkJLyoKKwkJCSAqIGBgVGhlIGFyZ3VtZW50IHNoYWxsIGJlIGEgcG9pbnRlciB0byB2b2lkLiAgVGhlCisJCQkgKiB2YWx1ZSBvZiB0aGUgcG9pbnRlciBpcyBjb252ZXJ0ZWQgdG8gYSBzZXF1ZW5jZQorCQkJICogb2YgcHJpbnRhYmxlIGNoYXJhY3RlcnMsIGluIGFuIGltcGxlbWVudGF0aW9uLQorCQkJICogZGVmaW5lZCBtYW5uZXIuJycKKwkJCSAqCS0tIEFOU0kgWDNKMTEKKwkJCSAqLworCQkJLyogTk9TVFJJQ1QgKi8KKwkJCV91bWF4ID0gKHVfbG9uZylHRVRBUkcodm9pZCAqKTsKKwkJCWJhc2UgPSBIRVg7CisJCQl4ZGlncyA9ICIwMTIzNDU2Nzg5YWJjZGVmIjsKKwkJCWZsYWdzIHw9IEhFWFBSRUZJWDsKKwkJCWNoID0gJ3gnOworCQkJZ290byBub3NpZ247CisJCWNhc2UgJ3MnOgorCQkJaWYgKChjcCA9IEdFVEFSRyhjaGFyICopKSA9PSBOVUxMKQorCQkJCWNwID0gIihudWxsKSI7CisJCQlpZiAocHJlYyA+PSAwKSB7CisJCQkJLyoKKwkJCQkgKiBjYW4ndCB1c2Ugc3RybGVuOyBjYW4gb25seSBsb29rIGZvciB0aGUKKwkJCQkgKiBOVUwgaW4gdGhlIGZpcnN0IGBwcmVjJyBjaGFyYWN0ZXJzLCBhbmQKKwkJCQkgKiBzdHJsZW4oKSB3aWxsIGdvIGZ1cnRoZXIuCisJCQkJICovCisJCQkJY2hhciAqcCA9IG1lbWNocihjcCwgMCwgcHJlYyk7CisKKwkJCQlpZiAocCAhPSBOVUxMKSB7CisJCQkJCXNpemUgPSBwIC0gY3A7CisJCQkJCWlmIChzaXplID4gcHJlYykKKwkJCQkJCXNpemUgPSBwcmVjOworCQkJCX0gZWxzZQorCQkJCQlzaXplID0gcHJlYzsKKwkJCX0gZWxzZQorCQkJCXNpemUgPSBzdHJsZW4oY3ApOworCQkJc2lnbiA9ICdcMCc7CisJCQlicmVhazsKKwkJY2FzZSAnVSc6CisJCQlmbGFncyB8PSBMT05HSU5UOworCQkJLypGQUxMVEhST1VHSCovCisJCWNhc2UgJ3UnOgorCQkJX3VtYXggPSBVQVJHKCk7CisJCQliYXNlID0gREVDOworCQkJZ290byBub3NpZ247CisJCWNhc2UgJ1gnOgorCQkJeGRpZ3MgPSAiMDEyMzQ1Njc4OUFCQ0RFRiI7CisJCQlnb3RvIGhleDsKKwkJY2FzZSAneCc6CisJCQl4ZGlncyA9ICIwMTIzNDU2Nzg5YWJjZGVmIjsKK2hleDoJCQlfdW1heCA9IFVBUkcoKTsKKwkJCWJhc2UgPSBIRVg7CisJCQkvKiBsZWFkaW5nIDB4L1ggb25seSBpZiBub24temVybyAqLworCQkJaWYgKGZsYWdzICYgQUxUICYmIF91bWF4ICE9IDApCisJCQkJZmxhZ3MgfD0gSEVYUFJFRklYOworCisJCQkvKiB1bnNpZ25lZCBjb252ZXJzaW9ucyAqLworbm9zaWduOgkJCXNpZ24gPSAnXDAnOworCQkJLyoKKwkJCSAqIGBgLi4uIGRpb3VYeCBjb252ZXJzaW9ucyAuLi4gaWYgYSBwcmVjaXNpb24gaXMKKwkJCSAqIHNwZWNpZmllZCwgdGhlIDAgZmxhZyB3aWxsIGJlIGlnbm9yZWQuJycKKwkJCSAqCS0tIEFOU0kgWDNKMTEKKwkJCSAqLworbnVtYmVyOgkJCWlmICgoZHByZWMgPSBwcmVjKSA+PSAwKQorCQkJCWZsYWdzICY9IH5aRVJPUEFEOworCisJCQkvKgorCQkJICogYGBUaGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgYSB6ZXJvIHZhbHVlIHdpdGggYW4KKwkJCSAqIGV4cGxpY2l0IHByZWNpc2lvbiBvZiB6ZXJvIGlzIG5vIGNoYXJhY3RlcnMuJycKKwkJCSAqCS0tIEFOU0kgWDNKMTEKKwkJCSAqLworCQkJY3AgPSBidWYgKyBCVUY7CisJCQlpZiAoX3VtYXggIT0gMCB8fCBwcmVjICE9IDApIHsKKwkJCQkvKgorCQkJCSAqIFVuc2lnbmVkIG1vZCBpcyBoYXJkLCBhbmQgdW5zaWduZWQgbW9kCisJCQkJICogYnkgYSBjb25zdGFudCBpcyBlYXNpZXIgdGhhbiB0aGF0IGJ5CisJCQkJICogYSB2YXJpYWJsZTsgaGVuY2UgdGhpcyBzd2l0Y2guCisJCQkJICovCisJCQkJc3dpdGNoIChiYXNlKSB7CisJCQkJY2FzZSBPQ1Q6CisJCQkJCWRvIHsKKwkJCQkJCSotLWNwID0gdG9fY2hhcihfdW1heCAmIDcpOworCQkJCQkJX3VtYXggPj49IDM7CisJCQkJCX0gd2hpbGUgKF91bWF4KTsKKwkJCQkJLyogaGFuZGxlIG9jdGFsIGxlYWRpbmcgMCAqLworCQkJCQlpZiAoZmxhZ3MgJiBBTFQgJiYgKmNwICE9ICcwJykKKwkJCQkJCSotLWNwID0gJzAnOworCQkJCQlicmVhazsKKworCQkJCWNhc2UgREVDOgorCQkJCQkvKiBtYW55IG51bWJlcnMgYXJlIDEgZGlnaXQgKi8KKwkJCQkJd2hpbGUgKF91bWF4ID49IDEwKSB7CisJCQkJCQkqLS1jcCA9IHRvX2NoYXIoX3VtYXggJSAxMCk7CisJCQkJCQlfdW1heCAvPSAxMDsKKwkJCQkJfQorCQkJCQkqLS1jcCA9IHRvX2NoYXIoX3VtYXgpOworCQkJCQlicmVhazsKKworCQkJCWNhc2UgSEVYOgorCQkJCQlkbyB7CisJCQkJCQkqLS1jcCA9IHhkaWdzW191bWF4ICYgMTVdOworCQkJCQkJX3VtYXggPj49IDQ7CisJCQkJCX0gd2hpbGUgKF91bWF4KTsKKwkJCQkJYnJlYWs7CisKKwkJCQlkZWZhdWx0OgorCQkJCQljcCA9ICJidWcgaW4gdmZwcmludGY6IGJhZCBiYXNlIjsKKwkJCQkJc2l6ZSA9IHN0cmxlbihjcCk7CisJCQkJCWdvdG8gc2tpcHNpemU7CisJCQkJfQorCQkJfQorCQkJc2l6ZSA9IGJ1ZiArIEJVRiAtIGNwOworCQlza2lwc2l6ZToKKwkJCWJyZWFrOworCQlkZWZhdWx0OgkvKiAiJT8iIHByaW50cyA/LCB1bmxlc3MgPyBpcyBOVUwgKi8KKwkJCWlmIChjaCA9PSAnXDAnKQorCQkJCWdvdG8gZG9uZTsKKwkJCS8qIHByZXRlbmQgaXQgd2FzICVjIHdpdGggYXJndW1lbnQgY2ggKi8KKwkJCWNwID0gYnVmOworCQkJKmNwID0gY2g7CisJCQlzaXplID0gMTsKKwkJCXNpZ24gPSAnXDAnOworCQkJYnJlYWs7CisJCX0KKworCQkvKgorCQkgKiBBbGwgcmVhc29uYWJsZSBmb3JtYXRzIHdpbmQgdXAgaGVyZS4gIEF0IHRoaXMgcG9pbnQsIGBjcCcKKwkJICogcG9pbnRzIHRvIGEgc3RyaW5nIHdoaWNoIChpZiBub3QgZmxhZ3MmTEFESlVTVCkgc2hvdWxkIGJlCisJCSAqIHBhZGRlZCBvdXQgdG8gYHdpZHRoJyBwbGFjZXMuICBJZiBmbGFncyZaRVJPUEFELCBpdCBzaG91bGQKKwkJICogZmlyc3QgYmUgcHJlZml4ZWQgYnkgYW55IHNpZ24gb3Igb3RoZXIgcHJlZml4OyBvdGhlcndpc2UsCisJCSAqIGl0IHNob3VsZCBiZSBibGFuayBwYWRkZWQgYmVmb3JlIHRoZSBwcmVmaXggaXMgZW1pdHRlZC4KKwkJICogQWZ0ZXIgYW55IGxlZnQtaGFuZCBwYWRkaW5nIGFuZCBwcmVmaXhpbmcsIGVtaXQgemVyb2VzCisJCSAqIHJlcXVpcmVkIGJ5IGEgZGVjaW1hbCBbZGlvdXhYXSBwcmVjaXNpb24sIHRoZW4gcHJpbnQgdGhlCisJCSAqIHN0cmluZyBwcm9wZXIsIHRoZW4gZW1pdCB6ZXJvZXMgcmVxdWlyZWQgYnkgYW55IGxlZnRvdmVyCisJCSAqIGZsb2F0aW5nIHByZWNpc2lvbjsgZmluYWxseSwgaWYgTEFESlVTVCwgcGFkIHdpdGggYmxhbmtzLgorCQkgKgorCQkgKiBDb21wdXRlIGFjdHVhbCBzaXplLCBzbyB3ZSBrbm93IGhvdyBtdWNoIHRvIHBhZC4KKwkJICogc2l6ZSBleGNsdWRlcyBkZWNpbWFsIHByZWM7IHJlYWxzeiBpbmNsdWRlcyBpdC4KKwkJICovCisJCXJlYWxzeiA9IGRwcmVjID4gc2l6ZSA/IGRwcmVjIDogc2l6ZTsKKwkJaWYgKHNpZ24pCisJCQlyZWFsc3orKzsKKwkJZWxzZSBpZiAoZmxhZ3MgJiBIRVhQUkVGSVgpCisJCQlyZWFsc3orPSAyOworCisJCS8qIHJpZ2h0LWFkanVzdGluZyBibGFuayBwYWRkaW5nICovCisJCWlmICgoZmxhZ3MgJiAoTEFESlVTVHxaRVJPUEFEKSkgPT0gMCkKKwkJCVBBRCh3aWR0aCAtIHJlYWxzeiwgYmxhbmtzKTsKKworCQkvKiBwcmVmaXggKi8KKwkJaWYgKHNpZ24pIHsKKwkJCVBSSU5UKCZzaWduLCAxKTsKKwkJfSBlbHNlIGlmIChmbGFncyAmIEhFWFBSRUZJWCkgeworCQkJb3hbMF0gPSAnMCc7CisJCQlveFsxXSA9IGNoOworCQkJUFJJTlQob3gsIDIpOworCQl9CisKKwkJLyogcmlnaHQtYWRqdXN0aW5nIHplcm8gcGFkZGluZyAqLworCQlpZiAoKGZsYWdzICYgKExBREpVU1R8WkVST1BBRCkpID09IFpFUk9QQUQpCisJCQlQQUQod2lkdGggLSByZWFsc3osIHplcm9lcyk7CisKKwkJLyogbGVhZGluZyB6ZXJvZXMgZnJvbSBkZWNpbWFsIHByZWNpc2lvbiAqLworCQlQQUQoZHByZWMgLSBzaXplLCB6ZXJvZXMpOworCisJCS8qIHRoZSBzdHJpbmcgb3IgbnVtYmVyIHByb3BlciAqLworI2lmZGVmIEZMT0FUSU5HX1BPSU5UCisJCWlmICgoZmxhZ3MgJiBGUFQpID09IDApIHsKKwkJCVBSSU5UKGNwLCBzaXplKTsKKwkJfSBlbHNlIHsJLyogZ2x1ZSB0b2dldGhlciBmX3AgZnJhZ21lbnRzICovCisJCQlpZiAoY2ggPj0gJ2YnKSB7CS8qICdmJyBvciAnZycgKi8KKwkJCQlpZiAoX2RvdWJsZSA9PSAwKSB7CisJCQkJCS8qIGtsdWRnZSBmb3IgX19kdG9hIGlycmVndWxhcml0eSAqLworCQkJCQlQUklOVCgiMCIsIDEpOworCQkJCQlpZiAoZXhwdCA8IG5kaWcgfHwgKGZsYWdzICYgQUxUKSAhPSAwKSB7CisJCQkJCQlQUklOVChkZWNpbWFsX3BvaW50LCAxKTsKKwkJCQkJCVBBRChuZGlnIC0gMSwgemVyb2VzKTsKKwkJCQkJfQorCQkJCX0gZWxzZSBpZiAoZXhwdCA8PSAwKSB7CisJCQkJCVBSSU5UKCIwIiwgMSk7CisJCQkJCVBSSU5UKGRlY2ltYWxfcG9pbnQsIDEpOworCQkJCQlQQUQoLWV4cHQsIHplcm9lcyk7CisJCQkJCVBSSU5UKGNwLCBuZGlnKTsKKwkJCQl9IGVsc2UgaWYgKGV4cHQgPj0gbmRpZykgeworCQkJCQlQUklOVChjcCwgbmRpZyk7CisJCQkJCVBBRChleHB0IC0gbmRpZywgemVyb2VzKTsKKwkJCQkJaWYgKGZsYWdzICYgQUxUKQorCQkJCQkJUFJJTlQoIi4iLCAxKTsKKwkJCQl9IGVsc2UgeworCQkJCQlQUklOVChjcCwgZXhwdCk7CisJCQkJCWNwICs9IGV4cHQ7CisJCQkJCVBSSU5UKCIuIiwgMSk7CisJCQkJCVBSSU5UKGNwLCBuZGlnLWV4cHQpOworCQkJCX0KKwkJCX0gZWxzZSB7CS8qICdlJyBvciAnRScgKi8KKwkJCQlpZiAobmRpZyA+IDEgfHwgZmxhZ3MgJiBBTFQpIHsKKwkJCQkJb3hbMF0gPSAqY3ArKzsKKwkJCQkJb3hbMV0gPSAnLic7CisJCQkJCVBSSU5UKG94LCAyKTsKKwkJCQkJaWYgKF9kb3VibGUpIHsKKwkJCQkJCVBSSU5UKGNwLCBuZGlnLTEpOworCQkJCQl9IGVsc2UJLyogMC5bMC4uXSAqLworCQkJCQkJLyogX19kdG9hIGlycmVndWxhcml0eSAqLworCQkJCQkJUEFEKG5kaWcgLSAxLCB6ZXJvZXMpOworCQkJCX0gZWxzZQkvKiBYZVlZWSAqLworCQkJCQlQUklOVChjcCwgMSk7CisJCQkJUFJJTlQoZXhwc3RyLCBleHBzaXplKTsKKwkJCX0KKwkJfQorI2Vsc2UKKwkJUFJJTlQoY3AsIHNpemUpOworI2VuZGlmCisJCS8qIGxlZnQtYWRqdXN0aW5nIHBhZGRpbmcgKGFsd2F5cyBibGFuaykgKi8KKwkJaWYgKGZsYWdzICYgTEFESlVTVCkKKwkJCVBBRCh3aWR0aCAtIHJlYWxzeiwgYmxhbmtzKTsKKworCQkvKiBmaW5hbGx5LCBhZGp1c3QgcmV0ICovCisJCXJldCArPSB3aWR0aCA+IHJlYWxzeiA/IHdpZHRoIDogcmVhbHN6OworCisJCUZMVVNIKCk7CS8qIGNvcHkgb3V0IHRoZSBJL08gdmVjdG9ycyAqLworI2lmIDEgICAvKiBCSU9OSUM6IHJlbW92ZSBtZW1vcnkgbGVhayB3aGVuIHByaW50aW5nIGRvdWJsZXMgKi8KKwkJaWYgKGNwX2ZyZWUpIHsKKwkJICBmcmVlKGNwX2ZyZWUpOworCQkgIGNwX2ZyZWUgPSBOVUxMOworCQl9CisjZW5kaWYKKwl9Citkb25lOgorCUZMVVNIKCk7CitlcnJvcjoKKyNpZiAxICAgLyogQklPTklDOiByZW1vdmUgbWVtb3J5IGxlYWsgd2hlbiBwcmludGluZyBkb3VibGVzICovCisgICAgaWYgKGNwX2ZyZWUpIHsKKyAgICAgICAgZnJlZShjcF9mcmVlKTsKKyAgICAgICAgY3BfZnJlZSA9IE5VTEw7CisgICAgfQorI2VuZGlmCisJaWYgKGFyZ3RhYmxlICE9IE5VTEwgJiYgYXJndGFibGUgIT0gc3RhdGFyZ3RhYmxlKSB7CisJCW11bm1hcChhcmd0YWJsZSwgYXJndGFibGVzaXopOworCQlhcmd0YWJsZSA9IE5VTEw7CisJfQorCXJldHVybiAoX19zZmVycm9yKGZwKSA/IEVPRiA6IHJldCk7CisJLyogTk9UUkVBQ0hFRCAqLworfQorCisvKgorICogVHlwZSBpZHMgZm9yIGFyZ3VtZW50IHR5cGUgdGFibGUuCisgKi8KKyNkZWZpbmUgVF9VTlVTRUQJMAorI2RlZmluZSBUX1NIT1JUCQkxCisjZGVmaW5lIFRfVV9TSE9SVAkyCisjZGVmaW5lIFRQX1NIT1JUCTMKKyNkZWZpbmUgVF9JTlQJCTQKKyNkZWZpbmUgVF9VX0lOVAkJNQorI2RlZmluZSBUUF9JTlQJCTYKKyNkZWZpbmUgVF9MT05HCQk3CisjZGVmaW5lIFRfVV9MT05HCTgKKyNkZWZpbmUgVFBfTE9ORwkJOQorI2RlZmluZSBUX0xMT05HCQkxMAorI2RlZmluZSBUX1VfTExPTkcJMTEKKyNkZWZpbmUgVFBfTExPTkcJMTIKKyNkZWZpbmUgVF9ET1VCTEUJMTMKKyNkZWZpbmUgVF9MT05HX0RPVUJMRQkxNAorI2RlZmluZSBUUF9DSEFSCQkxNQorI2RlZmluZSBUUF9WT0lECQkxNgorI2RlZmluZSBUX1BUUklOVAkxNworI2RlZmluZSBUUF9QVFJJTlQJMTgKKyNkZWZpbmUgVF9TSVpFSU5UCTE5CisjZGVmaW5lIFRfU1NJWkVJTlQJMjAKKyNkZWZpbmUgVFBfU1NJWkVJTlQJMjEKKyNkZWZpbmUgVF9NQVhJTlQJMjIKKyNkZWZpbmUgVF9NQVhVSU5UCTIzCisjZGVmaW5lIFRQX01BWElOVAkyNAorCisvKgorICogRmluZCBhbGwgYXJndW1lbnRzIHdoZW4gYSBwb3NpdGlvbmFsIHBhcmFtZXRlciBpcyBlbmNvdW50ZXJlZC4gIFJldHVybnMgYQorICogdGFibGUsIGluZGV4ZWQgYnkgYXJndW1lbnQgbnVtYmVyLCBvZiBwb2ludGVycyB0byBlYWNoIGFyZ3VtZW50cy4gIFRoZQorICogaW5pdGlhbCBhcmd1bWVudCB0YWJsZSBzaG91bGQgYmUgYW4gYXJyYXkgb2YgU1RBVElDX0FSR19UQkxfU0laRSBlbnRyaWVzLgorICogSXQgd2lsbCBiZSByZXBsYWNlZCB3aXRoIGEgbW1hcC1lZCBvbmUgaWYgaXQgb3ZlcmZsb3dzIChtYWxsb2MgY2Fubm90IGJlCisgKiB1c2VkIHNpbmNlIHdlIGFyZSBhdHRlbXB0aW5nIHRvIG1ha2Ugc25wcmludGYgdGhyZWFkIHNhZmUsIGFuZCBhbGxvY2EgaXMKKyAqIHByb2JsZW1hdGljIHNpbmNlIHdlIGhhdmUgbmVzdGVkIGZ1bmN0aW9ucy4uKQorICovCitzdGF0aWMgdm9pZAorX19maW5kX2FyZ3VtZW50cyhjb25zdCBjaGFyICpmbXQwLCB2YV9saXN0IGFwLCB2YV9saXN0ICoqYXJndGFibGUsCisgICAgc2l6ZV90ICphcmd0YWJsZXNpeikKK3sKKwljaGFyICpmbXQ7CS8qIGZvcm1hdCBzdHJpbmcgKi8KKwlpbnQgY2g7CS8qIGNoYXJhY3RlciBmcm9tIGZtdCAqLworCWludCBuLCBuMjsJLyogaGFuZHkgaW50ZWdlciAoc2hvcnQgdGVybSB1c2FnZSkgKi8KKwljaGFyICpjcDsJLyogaGFuZHkgY2hhciBwb2ludGVyIChzaG9ydCB0ZXJtIHVzYWdlKSAqLworCWludCBmbGFnczsJLyogZmxhZ3MgYXMgYWJvdmUgKi8KKwl1bnNpZ25lZCBjaGFyICp0eXBldGFibGU7IC8qIHRhYmxlIG9mIHR5cGVzICovCisJdW5zaWduZWQgY2hhciBzdGF0dHlwZXRhYmxlW1NUQVRJQ19BUkdfVEJMX1NJWkVdOworCWludCB0YWJsZXNpemU7CQkvKiBjdXJyZW50IHNpemUgb2YgdHlwZSB0YWJsZSAqLworCWludCB0YWJsZW1heDsJCS8qIGxhcmdlc3QgdXNlZCBpbmRleCBpbiB0YWJsZSAqLworCWludCBuZXh0YXJnOwkJLyogMS1iYXNlZCBhcmd1bWVudCBpbmRleCAqLworCXdjaGFyX3Qgd2M7CisJdm9pZCogcHM7CisKKwkvKgorCSAqIEFkZCBhbiBhcmd1bWVudCB0eXBlIHRvIHRoZSB0YWJsZSwgZXhwYW5kaW5nIGlmIG5lY2Vzc2FyeS4KKwkgKi8KKyNkZWZpbmUgQUREVFlQRSh0eXBlKSBcCisJKChuZXh0YXJnID49IHRhYmxlc2l6ZSkgPyBcCisJCV9fZ3Jvd190eXBlX3RhYmxlKCZ0eXBldGFibGUsICZ0YWJsZXNpemUpIDogMCwgXAorCShuZXh0YXJnID4gdGFibGVtYXgpID8gdGFibGVtYXggPSBuZXh0YXJnIDogMCwgXAorCXR5cGV0YWJsZVtuZXh0YXJnKytdID0gdHlwZSkKKworI2RlZmluZQlBRERTQVJHKCkgXAorICAgICAgICAoKGZsYWdzJk1BWElOVCkgPyBBRERUWVBFKFRfTUFYSU5UKSA6IFwKKwkgICAgKChmbGFncyZQVFJJTlQpID8gQUREVFlQRShUX1BUUklOVCkgOiBcCisJICAgICgoZmxhZ3MmU0laRUlOVCkgPyBBRERUWVBFKFRfU1NJWkVJTlQpIDogXAorCSAgICAoKGZsYWdzJkxMT05HSU5UKSA/IEFERFRZUEUoVF9MTE9ORykgOiBcCisJICAgICgoZmxhZ3MmTE9OR0lOVCkgPyBBRERUWVBFKFRfTE9ORykgOiBcCisJICAgICgoZmxhZ3MmU0hPUlRJTlQpID8gQUREVFlQRShUX1NIT1JUKSA6IEFERFRZUEUoVF9JTlQpKSkpKSkpCisKKyNkZWZpbmUJQUREVUFSRygpIFwKKyAgICAgICAgKChmbGFncyZNQVhJTlQpID8gQUREVFlQRShUX01BWFVJTlQpIDogXAorCSAgICAoKGZsYWdzJlBUUklOVCkgPyBBRERUWVBFKFRfUFRSSU5UKSA6IFwKKwkgICAgKChmbGFncyZTSVpFSU5UKSA/IEFERFRZUEUoVF9TSVpFSU5UKSA6IFwKKwkgICAgKChmbGFncyZMTE9OR0lOVCkgPyBBRERUWVBFKFRfVV9MTE9ORykgOiBcCisJICAgICgoZmxhZ3MmTE9OR0lOVCkgPyBBRERUWVBFKFRfVV9MT05HKSA6IFwKKwkgICAgKChmbGFncyZTSE9SVElOVCkgPyBBRERUWVBFKFRfVV9TSE9SVCkgOiBBRERUWVBFKFRfVV9JTlQpKSkpKSkpCisKKwkvKgorCSAqIEFkZCAqIGFyZ3VtZW50cyB0byB0aGUgdHlwZSBhcnJheS4KKwkgKi8KKyNkZWZpbmUgQUREQVNURVIoKSBcCisJbjIgPSAwOyBcCisJY3AgPSBmbXQ7IFwKKwl3aGlsZSAoaXNfZGlnaXQoKmNwKSkgeyBcCisJCW4yID0gMTAgKiBuMiArIHRvX2RpZ2l0KCpjcCk7IFwKKwkJY3ArKzsgXAorCX0gXAorCWlmICgqY3AgPT0gJyQnKSB7IFwKKwkJaW50IGhvbGQgPSBuZXh0YXJnOyBcCisJCW5leHRhcmcgPSBuMjsgXAorCQlBRERUWVBFKFRfSU5UKTsgXAorCQluZXh0YXJnID0gaG9sZDsgXAorCQlmbXQgPSArK2NwOyBcCisJfSBlbHNlIHsgXAorCQlBRERUWVBFKFRfSU5UKTsgXAorCX0KKwlmbXQgPSAoY2hhciAqKWZtdDA7CisJdHlwZXRhYmxlID0gc3RhdHR5cGV0YWJsZTsKKwl0YWJsZXNpemUgPSBTVEFUSUNfQVJHX1RCTF9TSVpFOworCXRhYmxlbWF4ID0gMDsKKwluZXh0YXJnID0gMTsKKwltZW1zZXQodHlwZXRhYmxlLCBUX1VOVVNFRCwgU1RBVElDX0FSR19UQkxfU0laRSk7CisJbWVtc2V0KCZwcywgMCwgc2l6ZW9mKHBzKSk7CisKKwkvKgorCSAqIFNjYW4gdGhlIGZvcm1hdCBmb3IgY29udmVyc2lvbnMgKGAlJyBjaGFyYWN0ZXIpLgorCSAqLworCWZvciAoOzspIHsKKwkJY3AgPSBmbXQ7CisjaWYgMSAgLyogQklPTklDICovCisgICAgICAgICAgICAgICAgbiA9IC0xOworICAgICAgICAgICAgICAgIHdoaWxlICgod2MgPSAqZm10KSAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh3YyA9PSAnJScpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG4gPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZm10Kys7CisgICAgICAgICAgICAgICAgfQorI2Vsc2UKKwkJd2hpbGUgKChuID0gbWJydG93Yygmd2MsIGZtdCwgTUJfQ1VSX01BWCwgJnBzKSkgPiAwKSB7CisJCQlmbXQgKz0gbjsKKwkJCWlmICh3YyA9PSAnJScpIHsKKwkJCQlmbXQtLTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorI2VuZGlmCisJCWlmIChuIDw9IDApCisJCQlnb3RvIGRvbmU7CisJCWZtdCsrOwkJLyogc2tpcCBvdmVyICclJyAqLworCisJCWZsYWdzID0gMDsKKworcmZsYWc6CQljaCA9ICpmbXQrKzsKK3Jlc3dpdGNoOglzd2l0Y2ggKGNoKSB7CisJCWNhc2UgJyAnOgorCQljYXNlICcjJzoKKwkJCWdvdG8gcmZsYWc7CisJCWNhc2UgJyonOgorCQkJQUREQVNURVIoKTsKKwkJCWdvdG8gcmZsYWc7CisJCWNhc2UgJy0nOgorCQljYXNlICcrJzoKKwkJCWdvdG8gcmZsYWc7CisJCWNhc2UgJy4nOgorCQkJaWYgKChjaCA9ICpmbXQrKykgPT0gJyonKSB7CisJCQkJQUREQVNURVIoKTsKKwkJCQlnb3RvIHJmbGFnOworCQkJfQorCQkJd2hpbGUgKGlzX2RpZ2l0KGNoKSkgeworCQkJCWNoID0gKmZtdCsrOworCQkJfQorCQkJZ290byByZXN3aXRjaDsKKwkJY2FzZSAnMCc6CisJCQlnb3RvIHJmbGFnOworCQljYXNlICcxJzogY2FzZSAnMic6IGNhc2UgJzMnOiBjYXNlICc0JzoKKwkJY2FzZSAnNSc6IGNhc2UgJzYnOiBjYXNlICc3JzogY2FzZSAnOCc6IGNhc2UgJzknOgorCQkJbiA9IDA7CisJCQlkbyB7CisJCQkJbiA9IDEwICogbiArIHRvX2RpZ2l0KGNoKTsKKwkJCQljaCA9ICpmbXQrKzsKKwkJCX0gd2hpbGUgKGlzX2RpZ2l0KGNoKSk7CisJCQlpZiAoY2ggPT0gJyQnKSB7CisJCQkJbmV4dGFyZyA9IG47CisJCQkJZ290byByZmxhZzsKKwkJCX0KKwkJCWdvdG8gcmVzd2l0Y2g7CisjaWZkZWYgRkxPQVRJTkdfUE9JTlQKKwkJY2FzZSAnTCc6CisJCQlmbGFncyB8PSBMT05HREJMOworCQkJZ290byByZmxhZzsKKyNlbmRpZgorCQljYXNlICdoJzoKKwkJCWlmICgqZm10ID09ICdoJykgeworCQkJCWZtdCsrOworCQkJCWZsYWdzIHw9IENIQVJJTlQ7CisJCQl9IGVsc2UgeworCQkJCWZsYWdzIHw9IFNIT1JUSU5UOworCQkJfQorCQkJZ290byByZmxhZzsKKwkJY2FzZSAnbCc6CisJCQlpZiAoKmZtdCA9PSAnbCcpIHsKKwkJCQlmbXQrKzsKKwkJCQlmbGFncyB8PSBMTE9OR0lOVDsKKwkJCX0gZWxzZSB7CisJCQkJZmxhZ3MgfD0gTE9OR0lOVDsKKwkJCX0KKwkJCWdvdG8gcmZsYWc7CisJCWNhc2UgJ3EnOgorCQkJZmxhZ3MgfD0gTExPTkdJTlQ7CisJCQlnb3RvIHJmbGFnOworCQljYXNlICd0JzoKKwkJCWZsYWdzIHw9IFBUUklOVDsKKwkJCWdvdG8gcmZsYWc7CisJCWNhc2UgJ3onOgorCQkJZmxhZ3MgfD0gU0laRUlOVDsKKwkJCWdvdG8gcmZsYWc7CisJCWNhc2UgJ2MnOgorCQkJQUREVFlQRShUX0lOVCk7CisJCQlicmVhazsKKwkJY2FzZSAnRCc6CisJCQlmbGFncyB8PSBMT05HSU5UOworCQkJLypGQUxMVEhST1VHSCovCisJCWNhc2UgJ2QnOgorCQljYXNlICdpJzoKKwkJCUFERFNBUkcoKTsKKwkJCWJyZWFrOworI2lmZGVmIEZMT0FUSU5HX1BPSU5UCisJCWNhc2UgJ2UnOgorCQljYXNlICdFJzoKKwkJY2FzZSAnZic6CisJCWNhc2UgJ2cnOgorCQljYXNlICdHJzoKKwkJCWlmIChmbGFncyAmIExPTkdEQkwpCisJCQkJQUREVFlQRShUX0xPTkdfRE9VQkxFKTsKKwkJCWVsc2UKKwkJCQlBRERUWVBFKFRfRE9VQkxFKTsKKwkJCWJyZWFrOworI2VuZGlmIC8qIEZMT0FUSU5HX1BPSU5UICovCisJCWNhc2UgJ24nOgorCQkJaWYgKGZsYWdzICYgTExPTkdJTlQpCisJCQkJQUREVFlQRShUUF9MTE9ORyk7CisJCQllbHNlIGlmIChmbGFncyAmIExPTkdJTlQpCisJCQkJQUREVFlQRShUUF9MT05HKTsKKwkJCWVsc2UgaWYgKGZsYWdzICYgU0hPUlRJTlQpCisJCQkJQUREVFlQRShUUF9TSE9SVCk7CisJCQllbHNlIGlmIChmbGFncyAmIFBUUklOVCkKKwkJCQlBRERUWVBFKFRQX1BUUklOVCk7CisJCQllbHNlIGlmIChmbGFncyAmIFNJWkVJTlQpCisJCQkJQUREVFlQRShUUF9TU0laRUlOVCk7CisJCQllbHNlIGlmIChmbGFncyAmIE1BWElOVCkKKwkJCQlBRERUWVBFKFRQX01BWElOVCk7CisJCQllbHNlCisJCQkJQUREVFlQRShUUF9JTlQpOworCQkJY29udGludWU7CS8qIG5vIG91dHB1dCAqLworCQljYXNlICdPJzoKKwkJCWZsYWdzIHw9IExPTkdJTlQ7CisJCQkvKkZBTExUSFJPVUdIKi8KKwkJY2FzZSAnbyc6CisJCQlBRERVQVJHKCk7CisJCQlicmVhazsKKwkJY2FzZSAncCc6CisJCQlBRERUWVBFKFRQX1ZPSUQpOworCQkJYnJlYWs7CisJCWNhc2UgJ3MnOgorCQkJQUREVFlQRShUUF9DSEFSKTsKKwkJCWJyZWFrOworCQljYXNlICdVJzoKKwkJCWZsYWdzIHw9IExPTkdJTlQ7CisJCQkvKkZBTExUSFJPVUdIKi8KKwkJY2FzZSAndSc6CisJCWNhc2UgJ1gnOgorCQljYXNlICd4JzoKKwkJCUFERFVBUkcoKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgkvKiAiJT8iIHByaW50cyA/LCB1bmxlc3MgPyBpcyBOVUwgKi8KKwkJCWlmIChjaCA9PSAnXDAnKQorCQkJCWdvdG8gZG9uZTsKKwkJCWJyZWFrOworCQl9CisJfQorZG9uZToKKwkvKgorCSAqIEJ1aWxkIHRoZSBhcmd1bWVudCB0YWJsZS4KKwkgKi8KKwlpZiAodGFibGVtYXggPj0gU1RBVElDX0FSR19UQkxfU0laRSkgeworCQkqYXJndGFibGVzaXogPSBzaXplb2YgKHZhX2xpc3QpICogKHRhYmxlbWF4ICsgMSk7CisJCSphcmd0YWJsZSA9ICh2YV9saXN0ICopbW1hcChOVUxMLCAqYXJndGFibGVzaXosCisJCSAgICBQUk9UX1dSSVRFfFBST1RfUkVBRCwgTUFQX0FOT058TUFQX1BSSVZBVEUsIC0xLCAwKTsKKwl9CisKKyNpZiAwCisJLyogWFhYIGlzIHRoaXMgcmVxdWlyZWQ/ICovCisJKCphcmd0YWJsZSkgWzBdID0gTlVMTDsKKyNlbmRpZgorCWZvciAobiA9IDE7IG4gPD0gdGFibGVtYXg7IG4rKykgeworCQl2YV9jb3B5KCgqYXJndGFibGUpW25dLCBhcCk7CisJCXN3aXRjaCAodHlwZXRhYmxlW25dKSB7CisJCWNhc2UgVF9VTlVTRUQ6CisJCQkodm9pZCkgdmFfYXJnKGFwLCBpbnQpOworCQkJYnJlYWs7CisJCWNhc2UgVF9TSE9SVDoKKwkJCSh2b2lkKSB2YV9hcmcoYXAsIGludCk7CisJCQlicmVhazsKKwkJY2FzZSBUX1VfU0hPUlQ6CisJCQkodm9pZCkgdmFfYXJnKGFwLCBpbnQpOworCQkJYnJlYWs7CisJCWNhc2UgVFBfU0hPUlQ6CisJCQkodm9pZCkgdmFfYXJnKGFwLCBzaG9ydCAqKTsKKwkJCWJyZWFrOworCQljYXNlIFRfSU5UOgorCQkJKHZvaWQpIHZhX2FyZyhhcCwgaW50KTsKKwkJCWJyZWFrOworCQljYXNlIFRfVV9JTlQ6CisJCQkodm9pZCkgdmFfYXJnKGFwLCB1bnNpZ25lZCBpbnQpOworCQkJYnJlYWs7CisJCWNhc2UgVFBfSU5UOgorCQkJKHZvaWQpIHZhX2FyZyhhcCwgaW50ICopOworCQkJYnJlYWs7CisJCWNhc2UgVF9MT05HOgorCQkJKHZvaWQpIHZhX2FyZyhhcCwgbG9uZyk7CisJCQlicmVhazsKKwkJY2FzZSBUX1VfTE9ORzoKKwkJCSh2b2lkKSB2YV9hcmcoYXAsIHVuc2lnbmVkIGxvbmcpOworCQkJYnJlYWs7CisJCWNhc2UgVFBfTE9ORzoKKwkJCSh2b2lkKSB2YV9hcmcoYXAsIGxvbmcgKik7CisJCQlicmVhazsKKwkJY2FzZSBUX0xMT05HOgorCQkJKHZvaWQpIHZhX2FyZyhhcCwgbG9uZyBsb25nKTsKKwkJCWJyZWFrOworCQljYXNlIFRfVV9MTE9ORzoKKwkJCSh2b2lkKSB2YV9hcmcoYXAsIHVuc2lnbmVkIGxvbmcgbG9uZyk7CisJCQlicmVhazsKKwkJY2FzZSBUUF9MTE9ORzoKKwkJCSh2b2lkKSB2YV9hcmcoYXAsIGxvbmcgbG9uZyAqKTsKKwkJCWJyZWFrOworCQljYXNlIFRfRE9VQkxFOgorCQkJKHZvaWQpIHZhX2FyZyhhcCwgZG91YmxlKTsKKwkJCWJyZWFrOworCQljYXNlIFRfTE9OR19ET1VCTEU6CisJCQkodm9pZCkgdmFfYXJnKGFwLCBsb25nIGRvdWJsZSk7CisJCQlicmVhazsKKwkJY2FzZSBUUF9DSEFSOgorCQkJKHZvaWQpIHZhX2FyZyhhcCwgY2hhciAqKTsKKwkJCWJyZWFrOworCQljYXNlIFRQX1ZPSUQ6CisJCQkodm9pZCkgdmFfYXJnKGFwLCB2b2lkICopOworCQkJYnJlYWs7CisJCWNhc2UgVF9QVFJJTlQ6CisJCQkodm9pZCkgdmFfYXJnKGFwLCBwdHJkaWZmX3QpOworCQkJYnJlYWs7CisJCWNhc2UgVFBfUFRSSU5UOgorCQkJKHZvaWQpIHZhX2FyZyhhcCwgcHRyZGlmZl90ICopOworCQkJYnJlYWs7CisJCWNhc2UgVF9TSVpFSU5UOgorCQkJKHZvaWQpIHZhX2FyZyhhcCwgc2l6ZV90KTsKKwkJCWJyZWFrOworCQljYXNlIFRfU1NJWkVJTlQ6CisJCQkodm9pZCkgdmFfYXJnKGFwLCBzc2l6ZV90KTsKKwkJCWJyZWFrOworCQljYXNlIFRQX1NTSVpFSU5UOgorCQkJKHZvaWQpIHZhX2FyZyhhcCwgc3NpemVfdCAqKTsKKwkJCWJyZWFrOworCQljYXNlIFRQX01BWElOVDoKKwkJCSh2b2lkKSB2YV9hcmcoYXAsIGludG1heF90ICopOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAodHlwZXRhYmxlICE9IE5VTEwgJiYgdHlwZXRhYmxlICE9IHN0YXR0eXBldGFibGUpIHsKKwkJbXVubWFwKHR5cGV0YWJsZSwgKmFyZ3RhYmxlc2l6KTsKKwkJdHlwZXRhYmxlID0gTlVMTDsKKwl9Cit9CisKKy8qCisgKiBJbmNyZWFzZSB0aGUgc2l6ZSBvZiB0aGUgdHlwZSB0YWJsZS4KKyAqLworc3RhdGljIGludAorX19ncm93X3R5cGVfdGFibGUodW5zaWduZWQgY2hhciAqKnR5cGV0YWJsZSwgaW50ICp0YWJsZXNpemUpCit7CisJdW5zaWduZWQgY2hhciAqb2xkdGFibGUgPSAqdHlwZXRhYmxlOworCWludCBuZXdzaXplID0gKnRhYmxlc2l6ZSAqIDI7CisKKwlpZiAoKnRhYmxlc2l6ZSA9PSBTVEFUSUNfQVJHX1RCTF9TSVpFKSB7CisJCSp0eXBldGFibGUgPSAodW5zaWduZWQgY2hhciAqKW1tYXAoTlVMTCwKKwkJICAgIHNpemVvZiAodW5zaWduZWQgY2hhcikgKiBuZXdzaXplLCBQUk9UX1dSSVRFfFBST1RfUkVBRCwKKwkJICAgIE1BUF9BTk9OfE1BUF9QUklWQVRFLCAtMSwgMCk7CisJCS8qIFhYWCB1bmNoZWNrZWQgKi8KKwkJbWVtY3B5KCAqdHlwZXRhYmxlLCBvbGR0YWJsZSwgKnRhYmxlc2l6ZSk7CisJfSBlbHNlIHsKKwkJdW5zaWduZWQgY2hhciAqbmV3ID0gKHVuc2lnbmVkIGNoYXIgKiltbWFwKE5VTEwsCisJCSAgICBzaXplb2YgKHVuc2lnbmVkIGNoYXIpICogbmV3c2l6ZSwgUFJPVF9XUklURXxQUk9UX1JFQUQsCisJCSAgICBNQVBfQU5PTnxNQVBfUFJJVkFURSwgLTEsIDApOworCQltZW1tb3ZlKG5ldywgKnR5cGV0YWJsZSwgKnRhYmxlc2l6ZSk7CisJCW11bm1hcCgqdHlwZXRhYmxlLCAqdGFibGVzaXplKTsKKwkJKnR5cGV0YWJsZSA9IG5ldzsKKwkJLyogWFhYIHVuY2hlY2tlZCAqLworCX0KKwltZW1zZXQoKnR5cGV0YWJsZSArICp0YWJsZXNpemUsIFRfVU5VU0VELCAobmV3c2l6ZSAtICp0YWJsZXNpemUpKTsKKworCSp0YWJsZXNpemUgPSBuZXdzaXplOworCXJldHVybigwKTsKK30KKworCisjaWZkZWYgRkxPQVRJTkdfUE9JTlQKKworZXh0ZXJuIGNoYXIgKl9fZHRvYShkb3VibGUsIGludCwgaW50LCBpbnQgKiwgaW50ICosIGNoYXIgKiopOworCitzdGF0aWMgY2hhciAqCitjdnQoZG91YmxlIHZhbHVlLCBpbnQgbmRpZ2l0cywgaW50IGZsYWdzLCBjaGFyICpzaWduLCBpbnQgKmRlY3B0LCBpbnQgY2gsCisgICAgaW50ICpsZW5ndGgpCit7CisJaW50IG1vZGUsIGRzZ247CisJY2hhciAqZGlnaXRzLCAqYnAsICpydmU7CisJc3RhdGljICBjaGFyICB0ZW1wWzY0XTsKKworCWlmIChjaCA9PSAnZicpIHsKKwkJbW9kZSA9IDM7CQkvKiBuZGlnaXRzIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50ICovCisJfSBlbHNlIHsKKwkJLyogVG8gb2J0YWluIG5kaWdpdHMgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQgZm9yIHRoZSAnZScKKwkJICogYW5kICdFJyBmb3JtYXRzLCByb3VuZCB0byBuZGlnaXRzICsgMSBzaWduaWZpY2FudAorCQkgKiBmaWd1cmVzLgorCQkgKi8KKwkJaWYgKGNoID09ICdlJyB8fCBjaCA9PSAnRScpIHsKKwkJCW5kaWdpdHMrKzsKKwkJfQorCQltb2RlID0gMjsJCS8qIG5kaWdpdHMgc2lnbmlmaWNhbnQgZGlnaXRzICovCisJfQorCisJaWYgKHZhbHVlIDwgMCkgeworCQl2YWx1ZSA9IC12YWx1ZTsKKwkJKnNpZ24gPSAnLSc7CisJfSBlbHNlCisJCSpzaWduID0gJ1wwMDAnOworCWRpZ2l0cyA9IF9fZHRvYSh2YWx1ZSwgbW9kZSwgbmRpZ2l0cywgZGVjcHQsICZkc2duLCAmcnZlKTsKKwlpZiAoKGNoICE9ICdnJyAmJiBjaCAhPSAnRycpIHx8IGZsYWdzICYgQUxUKSB7CS8qIFByaW50IHRyYWlsaW5nIHplcm9zICovCisJCWJwID0gZGlnaXRzICsgbmRpZ2l0czsKKwkJaWYgKGNoID09ICdmJykgeworCQkJaWYgKCpkaWdpdHMgPT0gJzAnICYmIHZhbHVlKQorCQkJCSpkZWNwdCA9IC1uZGlnaXRzICsgMTsKKwkJCWJwICs9ICpkZWNwdDsKKwkJfQorCQlpZiAodmFsdWUgPT0gMCkJLyoga2x1ZGdlIGZvciBfX2R0b2EgaXJyZWd1bGFyaXR5ICovCisJCQlydmUgPSBicDsKKwkJd2hpbGUgKHJ2ZSA8IGJwKQorCQkJKnJ2ZSsrID0gJzAnOworCX0KKwkqbGVuZ3RoID0gcnZlIC0gZGlnaXRzOworCXJldHVybiAoZGlnaXRzKTsKK30KKworc3RhdGljIGludAorZXhwb25lbnQoY2hhciAqcDAsIGludCBleHAsIGludCBmbXRjaCkKK3sKKwljaGFyICpwLCAqdDsKKwljaGFyIGV4cGJ1ZltNQVhFWFBdOworCisJcCA9IHAwOworCSpwKysgPSBmbXRjaDsKKwlpZiAoZXhwIDwgMCkgeworCQlleHAgPSAtZXhwOworCQkqcCsrID0gJy0nOworCX0KKwllbHNlCisJCSpwKysgPSAnKyc7CisJdCA9IGV4cGJ1ZiArIE1BWEVYUDsKKwlpZiAoZXhwID4gOSkgeworCQlkbyB7CisJCQkqLS10ID0gdG9fY2hhcihleHAgJSAxMCk7CisJCX0gd2hpbGUgKChleHAgLz0gMTApID4gOSk7CisJCSotLXQgPSB0b19jaGFyKGV4cCk7CisJCWZvciAoOyB0IDwgZXhwYnVmICsgTUFYRVhQOyAqcCsrID0gKnQrKyk7CisJfQorCWVsc2UgeworCQkqcCsrID0gJzAnOworCQkqcCsrID0gdG9fY2hhcihleHApOworCX0KKwlyZXR1cm4gKHAgLSBwMCk7Cit9CisKKworLyogQklPTklDICovCisjaW5jbHVkZSA8bWFjaGluZS9pZWVlLmg+Cit0eXBlZGVmIHVuaW9uIHsKKyAgICBkb3VibGUgICAgICAgICAgICAgIGQ7CisgICAgc3RydWN0IGllZWVfZG91YmxlICBpOworfSBpZWVlX3U7CisKK3N0YXRpYyBpbnQKK19teV9pc2luZiAoZG91YmxlICB2YWx1ZSkKK3sKKyAgICBpZWVlX3UgICB1OworCisgICAgdS5kID0gdmFsdWU7CisgICAgcmV0dXJuICh1LmkuZGJsX2V4cCA9PSAyMDQ3ICYmIHUuaS5kYmxfZnJhY2ggPT0gMCAmJiB1LmkuZGJsX2ZyYWNsID09IDApOworfQorCitzdGF0aWMgaW50CitfbXlfaXNuYW4gKGRvdWJsZSAgdmFsdWUpCit7CisgICAgaWVlZV91ICAgdTsKKworICAgIHUuZCA9IHZhbHVlOworICAgIHJldHVybiAodS5pLmRibF9leHAgPT0gMjA0NyAmJiAodS5pLmRibF9mcmFjaCAhPSAwIHx8IHUuaS5kYmxfZnJhY2wgIT0gMCkpOworfQorI2VuZGlmIC8qIEZMT0FUSU5HX1BPSU5UICovCmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL3Zmc2NhbmYuYyBiL2xpYmMvc3RkaW8vdmZzY2FuZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiZDBhOGIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGlvL3Zmc2NhbmYuYwpAQCAtMCwwICsxLDc5MSBAQAorLyoJJE9wZW5CU0Q6IHZmc2NhbmYuYyx2IDEuMjEgMjAwNi8wMS8xMyAyMTozMzoyOCBtaWxsZXJ0IEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGludHR5cGVzLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorCisjaWZkZWYgRkxPQVRJTkdfUE9JTlQKKyNpbmNsdWRlICJmbG9hdGlvLmgiCisjZW5kaWYKKworI2RlZmluZQlCVUYJCTUxMwkvKiBNYXhpbXVtIGxlbmd0aCBvZiBudW1lcmljIHN0cmluZy4gKi8KKworLyoKKyAqIEZsYWdzIHVzZWQgZHVyaW5nIGNvbnZlcnNpb24uCisgKi8KKyNkZWZpbmUJTE9ORwkJMHgwMDAwMQkvKiBsOiBsb25nIG9yIGRvdWJsZSAqLworI2RlZmluZQlMT05HREJMCQkweDAwMDAyCS8qIEw6IGxvbmcgZG91YmxlOyB1bmltcGxlbWVudGVkICovCisjZGVmaW5lCVNIT1JUCQkweDAwMDA0CS8qIGg6IHNob3J0ICovCisjZGVmaW5lCVNIT1JUU0hPUlQJMHgwMDAwOAkvKiBoaDogOCBiaXQgaW50ZWdlciAqLworI2RlZmluZSBMTE9ORwkJMHgwMDAxMAkvKiBsbDogbG9uZyBsb25nICgrIGRlcHJlY2F0ZWQgcTogcXVhZCkgKi8KKyNkZWZpbmUJUE9JTlRFUgkJMHgwMDAyMAkvKiBwOiB2b2lkICogKGFzIGhleCkgKi8KKyNkZWZpbmUJU0laRUlOVAkJMHgwMDA0MAkvKiB6OiAoc2lnbmVkKSBzaXplX3QgKi8KKyNkZWZpbmUJTUFYSU5UCQkweDAwMDgwCS8qIGo6IGludG1heF90ICovCisjZGVmaW5lCVBUUklOVAkJMHgwMDEwMAkvKiB0OiBwdHJkaWZmX3QgKi8KKyNkZWZpbmUJTk9TS0lQCQkweDAwMjAwCS8qIFsgb3IgYzogZG8gbm90IHNraXAgYmxhbmtzICovCisjZGVmaW5lCVNVUFBSRVNTCTB4MDA0MDAJLyogKjogc3VwcHJlc3MgYXNzaWdubWVudCAqLworI2RlZmluZQlVTlNJR05FRAkweDAwODAwCS8qICVbb3VweFhdIGNvbnZlcnNpb25zICovCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGFyZSB1c2VkIGluIG51bWVyaWMgY29udmVyc2lvbnMgb25seToKKyAqIFNJR05PSywgSEFWRVNJR04sIE5ESUdJVFMsIERQVE9LLCBhbmQgRVhQT0sgYXJlIGZvciBmbG9hdGluZyBwb2ludDsKKyAqIFNJR05PSywgSEFWRVNJR04sIE5ESUdJVFMsIFBGWE9LLCBhbmQgTlpESUdJVFMgYXJlIGZvciBpbnRlZ3JhbC4KKyAqLworI2RlZmluZQlTSUdOT0sJCTB4MDEwMDAJLyogKy8tIGlzIChzdGlsbCkgbGVnYWwgKi8KKyNkZWZpbmUJSEFWRVNJR04JMHgwMjAwMAkvKiBzaWduIGRldGVjdGVkICovCisjZGVmaW5lCU5ESUdJVFMJCTB4MDQwMDAJLyogbm8gZGlnaXRzIGRldGVjdGVkICovCisKKyNkZWZpbmUJRFBUT0sJCTB4MDgwMDAJLyogKGZsb2F0KSBkZWNpbWFsIHBvaW50IGlzIHN0aWxsIGxlZ2FsICovCisjZGVmaW5lCUVYUE9LCQkweDEwMDAwCS8qIChmbG9hdCkgZXhwb25lbnQgKGUrMywgZXRjKSBzdGlsbCBsZWdhbCAqLworCisjZGVmaW5lCVBGWE9LCQkweDA4MDAwCS8qIDB4IHByZWZpeCBpcyAoc3RpbGwpIGxlZ2FsICovCisjZGVmaW5lCU5aRElHSVRTCTB4MTAwMDAJLyogbm8gemVybyBkaWdpdHMgZGV0ZWN0ZWQgKi8KKworLyoKKyAqIENvbnZlcnNpb24gdHlwZXMuCisgKi8KKyNkZWZpbmUJQ1RfQ0hBUgkJMAkvKiAlYyBjb252ZXJzaW9uICovCisjZGVmaW5lCUNUX0NDTAkJMQkvKiAlWy4uLl0gY29udmVyc2lvbiAqLworI2RlZmluZQlDVF9TVFJJTkcJMgkvKiAlcyBjb252ZXJzaW9uICovCisjZGVmaW5lCUNUX0lOVAkJMwkvKiBpbnRlZ2VyLCBpLmUuLCBzdHJ0b2ltYXggb3Igc3RydG91bWF4ICovCisjZGVmaW5lCUNUX0ZMT0FUCTQJLyogZmxvYXRpbmcsIGkuZS4sIHN0cnRvZCAqLworCisjZGVmaW5lIHVfY2hhciB1bnNpZ25lZCBjaGFyCisjZGVmaW5lIHVfbG9uZyB1bnNpZ25lZCBsb25nCisKK3N0YXRpYyB1X2NoYXIgKl9fc2NjbChjaGFyICosIHVfY2hhciAqKTsKKworI2lmICFkZWZpbmVkKFZGU0NBTkYpCisjZGVmaW5lIFZGU0NBTkYJdmZzY2FuZgorI2VuZGlmCisKKy8qCisgKiB2ZnNjYW5mCisgKi8KK2ludAorVkZTQ0FORihGSUxFICpmcCwgY29uc3QgY2hhciAqZm10MCwgX192YV9saXN0IGFwKQoreworCXVfY2hhciAqZm10ID0gKHVfY2hhciAqKWZtdDA7CisJaW50IGM7CQkvKiBjaGFyYWN0ZXIgZnJvbSBmb3JtYXQsIG9yIGNvbnZlcnNpb24gKi8KKwlzaXplX3Qgd2lkdGg7CS8qIGZpZWxkIHdpZHRoLCBvciAwICovCisJY2hhciAqcDsJLyogcG9pbnRzIGludG8gYWxsIGtpbmRzIG9mIHN0cmluZ3MgKi8KKwlpbnQgbjsJCS8qIGhhbmR5IGludGVnZXIgKi8KKwlpbnQgZmxhZ3M7CS8qIGZsYWdzIGFzIGRlZmluZWQgYWJvdmUgKi8KKwljaGFyICpwMDsJLyogc2F2ZXMgb3JpZ2luYWwgdmFsdWUgb2YgcCB3aGVuIG5lY2Vzc2FyeSAqLworCWludCBuYXNzaWduZWQ7CQkvKiBudW1iZXIgb2YgZmllbGRzIGFzc2lnbmVkICovCisJaW50IG5yZWFkOwkJLyogbnVtYmVyIG9mIGNoYXJhY3RlcnMgY29uc3VtZWQgZnJvbSBmcCAqLworCWludCBiYXNlOwkJLyogYmFzZSBhcmd1bWVudCB0byBzdHJ0b2ltYXgvc3RydG91aW1heCAqLworCWNoYXIgY2NsdGFiWzI1Nl07CS8qIGNoYXJhY3RlciBjbGFzcyB0YWJsZSBmb3IgJVsuLi5dICovCisJY2hhciBidWZbQlVGXTsJCS8qIGJ1ZmZlciBmb3IgbnVtZXJpYyBjb252ZXJzaW9ucyAqLworCisJLyogYGJhc2VmaXgnIGlzIHVzZWQgdG8gYXZvaWQgYGlmJyB0ZXN0cyBpbiB0aGUgaW50ZWdlciBzY2FubmVyICovCisJc3RhdGljIHNob3J0IGJhc2VmaXhbMTddID0KKwkJeyAxMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYgfTsKKworCV9TRVRfT1JJRU5UQVRJT04oZnAsIC0xKTsKKworCW5hc3NpZ25lZCA9IDA7CisJbnJlYWQgPSAwOworCWJhc2UgPSAwOwkJLyogWFhYIGp1c3QgdG8ga2VlcCBnY2MgaGFwcHkgKi8KKwlmb3IgKDs7KSB7CisJCWMgPSAqZm10Kys7CisJCWlmIChjID09IDApCisJCQlyZXR1cm4gKG5hc3NpZ25lZCk7CisJCWlmIChpc3NwYWNlKGMpKSB7CisJCQl3aGlsZSAoKGZwLT5fciA+IDAgfHwgX19zcmVmaWxsKGZwKSA9PSAwKSAmJgorCQkJICAgIGlzc3BhY2UoKmZwLT5fcCkpCisJCQkJbnJlYWQrKywgZnAtPl9yLS0sIGZwLT5fcCsrOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGMgIT0gJyUnKQorCQkJZ290byBsaXRlcmFsOworCQl3aWR0aCA9IDA7CisJCWZsYWdzID0gMDsKKwkJLyoKKwkJICogc3dpdGNoIG9uIHRoZSBmb3JtYXQuICBjb250aW51ZSBpZiBkb25lOworCQkgKiBicmVhayBvbmNlIGZvcm1hdCB0eXBlIGlzIGRlcml2ZWQuCisJCSAqLworYWdhaW46CQljID0gKmZtdCsrOworCQlzd2l0Y2ggKGMpIHsKKwkJY2FzZSAnJSc6CitsaXRlcmFsOgorCQkJaWYgKGZwLT5fciA8PSAwICYmIF9fc3JlZmlsbChmcCkpCisJCQkJZ290byBpbnB1dF9mYWlsdXJlOworCQkJaWYgKCpmcC0+X3AgIT0gYykKKwkJCQlnb3RvIG1hdGNoX2ZhaWx1cmU7CisJCQlmcC0+X3ItLSwgZnAtPl9wKys7CisJCQlucmVhZCsrOworCQkJY29udGludWU7CisKKwkJY2FzZSAnKic6CisJCQlmbGFncyB8PSBTVVBQUkVTUzsKKwkJCWdvdG8gYWdhaW47CisJCWNhc2UgJ2onOgorCQkJZmxhZ3MgfD0gTUFYSU5UOworCQkJZ290byBhZ2FpbjsKKwkJY2FzZSAnTCc6CisJCQlmbGFncyB8PSBMT05HREJMOworCQkJZ290byBhZ2FpbjsKKwkJY2FzZSAnaCc6CisJCQlpZiAoKmZtdCA9PSAnaCcpIHsKKwkJCQlmbXQrKzsKKwkJCQlmbGFncyB8PSBTSE9SVFNIT1JUOworCQkJfSBlbHNlIHsKKwkJCQlmbGFncyB8PSBTSE9SVDsKKwkJCX0KKwkJCWdvdG8gYWdhaW47CisJCWNhc2UgJ2wnOgorCQkJaWYgKCpmbXQgPT0gJ2wnKSB7CisJCQkJZm10Kys7CisJCQkJZmxhZ3MgfD0gTExPTkc7CisJCQl9IGVsc2UgeworCQkJCWZsYWdzIHw9IExPTkc7CisJCQl9CisJCQlnb3RvIGFnYWluOworCQljYXNlICdxJzoKKwkJCWZsYWdzIHw9IExMT05HOwkJLyogZGVwcmVjYXRlZCAqLworCQkJZ290byBhZ2FpbjsKKwkJY2FzZSAndCc6CisJCQlmbGFncyB8PSBQVFJJTlQ7CisJCQlnb3RvIGFnYWluOworCQljYXNlICd6JzoKKwkJCWZsYWdzIHw9IFNJWkVJTlQ7CisJCQlnb3RvIGFnYWluOworCisJCWNhc2UgJzAnOiBjYXNlICcxJzogY2FzZSAnMic6IGNhc2UgJzMnOiBjYXNlICc0JzoKKwkJY2FzZSAnNSc6IGNhc2UgJzYnOiBjYXNlICc3JzogY2FzZSAnOCc6IGNhc2UgJzknOgorCQkJd2lkdGggPSB3aWR0aCAqIDEwICsgYyAtICcwJzsKKwkJCWdvdG8gYWdhaW47CisKKwkJLyoKKwkJICogQ29udmVyc2lvbnMuCisJCSAqIFRob3NlIG1hcmtlZCBgY29tcGF0JyBhcmUgZm9yIDQuWzEyM11CU0QgY29tcGF0aWJpbGl0eS4KKwkJICoKKwkJICogKEFjY29yZGluZyB0byBBTlNJLCBFIGFuZCBYIGZvcm1hdHMgYXJlIHN1cHBvc2VkCisJCSAqIHRvIHRoZSBzYW1lIGFzIGUgYW5kIHguICBTb3JyeSBhYm91dCB0aGF0LikKKwkJICovCisJCWNhc2UgJ0QnOgkvKiBjb21wYXQgKi8KKwkJCWZsYWdzIHw9IExPTkc7CisJCQkvKiBGQUxMVEhST1VHSCAqLworCQljYXNlICdkJzoKKwkJCWMgPSBDVF9JTlQ7CisJCQliYXNlID0gMTA7CisJCQlicmVhazsKKworCQljYXNlICdpJzoKKwkJCWMgPSBDVF9JTlQ7CisJCQliYXNlID0gMDsKKwkJCWJyZWFrOworCisJCWNhc2UgJ08nOgkvKiBjb21wYXQgKi8KKwkJCWZsYWdzIHw9IExPTkc7CisJCQkvKiBGQUxMVEhST1VHSCAqLworCQljYXNlICdvJzoKKwkJCWMgPSBDVF9JTlQ7CisJCQlmbGFncyB8PSBVTlNJR05FRDsKKwkJCWJhc2UgPSA4OworCQkJYnJlYWs7CisKKwkJY2FzZSAndSc6CisJCQljID0gQ1RfSU5UOworCQkJZmxhZ3MgfD0gVU5TSUdORUQ7CisJCQliYXNlID0gMTA7CisJCQlicmVhazsKKworCQljYXNlICdYJzoKKwkJY2FzZSAneCc6CisJCQlmbGFncyB8PSBQRlhPSzsJLyogZW5hYmxlIDB4IHByZWZpeGluZyAqLworCQkJYyA9IENUX0lOVDsKKwkJCWZsYWdzIHw9IFVOU0lHTkVEOworCQkJYmFzZSA9IDE2OworCQkJYnJlYWs7CisKKyNpZmRlZiBGTE9BVElOR19QT0lOVAorCQljYXNlICdFJzoKKwkJY2FzZSAnRyc6CisJCWNhc2UgJ2UnOiAKKwkJY2FzZSAnZic6IAorCQljYXNlICdnJzoKKwkJCWMgPSBDVF9GTE9BVDsKKwkJCWJyZWFrOworI2VuZGlmCisKKwkJY2FzZSAncyc6CisJCQljID0gQ1RfU1RSSU5HOworCQkJYnJlYWs7CisKKwkJY2FzZSAnWyc6CisJCQlmbXQgPSBfX3NjY2woY2NsdGFiLCBmbXQpOworCQkJZmxhZ3MgfD0gTk9TS0lQOworCQkJYyA9IENUX0NDTDsKKwkJCWJyZWFrOworCisJCWNhc2UgJ2MnOgorCQkJZmxhZ3MgfD0gTk9TS0lQOworCQkJYyA9IENUX0NIQVI7CisJCQlicmVhazsKKworCQljYXNlICdwJzoJLyogcG9pbnRlciBmb3JtYXQgaXMgbGlrZSBoZXggKi8KKwkJCWZsYWdzIHw9IFBPSU5URVIgfCBQRlhPSzsKKwkJCWMgPSBDVF9JTlQ7CisJCQlmbGFncyB8PSBVTlNJR05FRDsKKwkJCWJhc2UgPSAxNjsKKwkJCWJyZWFrOworCisJCWNhc2UgJ24nOgorCQkJaWYgKGZsYWdzICYgU1VQUFJFU1MpCisJCQkJY29udGludWU7CisJCQlpZiAoZmxhZ3MgJiBTSE9SVFNIT1JUKQorCQkJCSp2YV9hcmcoYXAsIF9fc2lnbmVkIGNoYXIgKikgPSBucmVhZDsKKwkJCWVsc2UgaWYgKGZsYWdzICYgU0hPUlQpCisJCQkJKnZhX2FyZyhhcCwgc2hvcnQgKikgPSBucmVhZDsKKwkJCWVsc2UgaWYgKGZsYWdzICYgTE9ORykKKwkJCQkqdmFfYXJnKGFwLCBsb25nICopID0gbnJlYWQ7CisJCQllbHNlIGlmIChmbGFncyAmIFNJWkVJTlQpCisJCQkJKnZhX2FyZyhhcCwgc3NpemVfdCAqKSA9IG5yZWFkOworCQkJZWxzZSBpZiAoZmxhZ3MgJiBQVFJJTlQpCisJCQkJKnZhX2FyZyhhcCwgcHRyZGlmZl90ICopID0gbnJlYWQ7CisJCQllbHNlIGlmIChmbGFncyAmIExMT05HKQorCQkJCSp2YV9hcmcoYXAsIGxvbmcgbG9uZyAqKSA9IG5yZWFkOworCQkJZWxzZSBpZiAoZmxhZ3MgJiBNQVhJTlQpCisJCQkJKnZhX2FyZyhhcCwgaW50bWF4X3QgKikgPSBucmVhZDsKKwkJCWVsc2UKKwkJCQkqdmFfYXJnKGFwLCBpbnQgKikgPSBucmVhZDsKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIERpc2d1c3RpbmcgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgaGFja3MuCVhYWAorCQkgKi8KKwkJY2FzZSAnXDAnOgkvKiBjb21wYXQgKi8KKwkJCXJldHVybiAoRU9GKTsKKworCQlkZWZhdWx0OgkvKiBjb21wYXQgKi8KKwkJCWlmIChpc3VwcGVyKGMpKQorCQkJCWZsYWdzIHw9IExPTkc7CisJCQljID0gQ1RfSU5UOworCQkJYmFzZSA9IDEwOworCQkJYnJlYWs7CisJCX0KKworCQkvKgorCQkgKiBXZSBoYXZlIGEgY29udmVyc2lvbiB0aGF0IHJlcXVpcmVzIGlucHV0LgorCQkgKi8KKwkJaWYgKGZwLT5fciA8PSAwICYmIF9fc3JlZmlsbChmcCkpCisJCQlnb3RvIGlucHV0X2ZhaWx1cmU7CisKKwkJLyoKKwkJICogQ29uc3VtZSBsZWFkaW5nIHdoaXRlIHNwYWNlLCBleGNlcHQgZm9yIGZvcm1hdHMKKwkJICogdGhhdCBzdXBwcmVzcyB0aGlzLgorCQkgKi8KKwkJaWYgKChmbGFncyAmIE5PU0tJUCkgPT0gMCkgeworCQkJd2hpbGUgKGlzc3BhY2UoKmZwLT5fcCkpIHsKKwkJCQlucmVhZCsrOworCQkJCWlmICgtLWZwLT5fciA+IDApCisJCQkJCWZwLT5fcCsrOworCQkJCWVsc2UgaWYgKF9fc3JlZmlsbChmcCkpCisJCQkJCWdvdG8gaW5wdXRfZmFpbHVyZTsKKwkJCX0KKwkJCS8qCisJCQkgKiBOb3RlIHRoYXQgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciBpbgorCQkJICogdGhlIGJ1ZmZlciwgc28gY29udmVyc2lvbnMgdGhhdCBkbyBub3Qgc2V0IE5PU0tJUAorCQkJICogY2Egbm8gbG9uZ2VyIHJlc3VsdCBpbiBhbiBpbnB1dCBmYWlsdXJlLgorCQkJICovCisJCX0KKworCQkvKgorCQkgKiBEbyB0aGUgY29udmVyc2lvbi4KKwkJICovCisJCXN3aXRjaCAoYykgeworCisJCWNhc2UgQ1RfQ0hBUjoKKwkJCS8qIHNjYW4gYXJiaXRyYXJ5IGNoYXJhY3RlcnMgKHNldHMgTk9TS0lQKSAqLworCQkJaWYgKHdpZHRoID09IDApCisJCQkJd2lkdGggPSAxOworCQkJaWYgKGZsYWdzICYgU1VQUFJFU1MpIHsKKwkJCQlzaXplX3Qgc3VtID0gMDsKKwkJCQlmb3IgKDs7KSB7CisJCQkJCWlmICgobiA9IGZwLT5fcikgPCAoaW50KXdpZHRoKSB7CisJCQkJCQlzdW0gKz0gbjsKKwkJCQkJCXdpZHRoIC09IG47CisJCQkJCQlmcC0+X3AgKz0gbjsKKwkJCQkJCWlmIChfX3NyZWZpbGwoZnApKSB7CisJCQkJCQkJaWYgKHN1bSA9PSAwKQorCQkJCQkJCSAgICBnb3RvIGlucHV0X2ZhaWx1cmU7CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCX0gZWxzZSB7CisJCQkJCQlzdW0gKz0gd2lkdGg7CisJCQkJCQlmcC0+X3IgLT0gd2lkdGg7CisJCQkJCQlmcC0+X3AgKz0gd2lkdGg7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCQlucmVhZCArPSBzdW07CisJCQl9IGVsc2UgeworCQkJCXNpemVfdCByID0gZnJlYWQoKHZvaWQgKil2YV9hcmcoYXAsIGNoYXIgKiksIDEsCisJCQkJICAgIHdpZHRoLCBmcCk7CisKKwkJCQlpZiAociA9PSAwKQorCQkJCQlnb3RvIGlucHV0X2ZhaWx1cmU7CisJCQkJbnJlYWQgKz0gcjsKKwkJCQluYXNzaWduZWQrKzsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgQ1RfQ0NMOgorCQkJLyogc2NhbiBhIChub25lbXB0eSkgY2hhcmFjdGVyIGNsYXNzIChzZXRzIE5PU0tJUCkgKi8KKwkJCWlmICh3aWR0aCA9PSAwKQorCQkJCXdpZHRoID0gKHNpemVfdCl+MDsJLyogYGluZmluaXR5JyAqLworCQkJLyogdGFrZSBvbmx5IHRob3NlIHRoaW5ncyBpbiB0aGUgY2xhc3MgKi8KKwkJCWlmIChmbGFncyAmIFNVUFBSRVNTKSB7CisJCQkJbiA9IDA7CisJCQkJd2hpbGUgKGNjbHRhYlsqZnAtPl9wXSkgeworCQkJCQluKyssIGZwLT5fci0tLCBmcC0+X3ArKzsKKwkJCQkJaWYgKC0td2lkdGggPT0gMCkKKwkJCQkJCWJyZWFrOworCQkJCQlpZiAoZnAtPl9yIDw9IDAgJiYgX19zcmVmaWxsKGZwKSkgeworCQkJCQkJaWYgKG4gPT0gMCkKKwkJCQkJCQlnb3RvIGlucHV0X2ZhaWx1cmU7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCQlpZiAobiA9PSAwKQorCQkJCQlnb3RvIG1hdGNoX2ZhaWx1cmU7CisJCQl9IGVsc2UgeworCQkJCXAwID0gcCA9IHZhX2FyZyhhcCwgY2hhciAqKTsKKwkJCQl3aGlsZSAoY2NsdGFiWypmcC0+X3BdKSB7CisJCQkJCWZwLT5fci0tOworCQkJCQkqcCsrID0gKmZwLT5fcCsrOworCQkJCQlpZiAoLS13aWR0aCA9PSAwKQorCQkJCQkJYnJlYWs7CisJCQkJCWlmIChmcC0+X3IgPD0gMCAmJiBfX3NyZWZpbGwoZnApKSB7CisJCQkJCQlpZiAocCA9PSBwMCkKKwkJCQkJCQlnb3RvIGlucHV0X2ZhaWx1cmU7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCQluID0gcCAtIHAwOworCQkJCWlmIChuID09IDApCisJCQkJCWdvdG8gbWF0Y2hfZmFpbHVyZTsKKwkJCQkqcCA9ICdcMCc7CisJCQkJbmFzc2lnbmVkKys7CisJCQl9CisJCQlucmVhZCArPSBuOworCQkJYnJlYWs7CisKKwkJY2FzZSBDVF9TVFJJTkc6CisJCQkvKiBsaWtlIENDTCwgYnV0IHplcm8tbGVuZ3RoIHN0cmluZyBPSywgJiBubyBOT1NLSVAgKi8KKwkJCWlmICh3aWR0aCA9PSAwKQorCQkJCXdpZHRoID0gKHNpemVfdCl+MDsKKwkJCWlmIChmbGFncyAmIFNVUFBSRVNTKSB7CisJCQkJbiA9IDA7CisJCQkJd2hpbGUgKCFpc3NwYWNlKCpmcC0+X3ApKSB7CisJCQkJCW4rKywgZnAtPl9yLS0sIGZwLT5fcCsrOworCQkJCQlpZiAoLS13aWR0aCA9PSAwKQorCQkJCQkJYnJlYWs7CisJCQkJCWlmIChmcC0+X3IgPD0gMCAmJiBfX3NyZWZpbGwoZnApKQorCQkJCQkJYnJlYWs7CisJCQkJfQorCQkJCW5yZWFkICs9IG47CisJCQl9IGVsc2UgeworCQkJCXAwID0gcCA9IHZhX2FyZyhhcCwgY2hhciAqKTsKKwkJCQl3aGlsZSAoIWlzc3BhY2UoKmZwLT5fcCkpIHsKKwkJCQkJZnAtPl9yLS07CisJCQkJCSpwKysgPSAqZnAtPl9wKys7CisJCQkJCWlmICgtLXdpZHRoID09IDApCisJCQkJCQlicmVhazsKKwkJCQkJaWYgKGZwLT5fciA8PSAwICYmIF9fc3JlZmlsbChmcCkpCisJCQkJCQlicmVhazsKKwkJCQl9CisJCQkJKnAgPSAnXDAnOworCQkJCW5yZWFkICs9IHAgLSBwMDsKKwkJCQluYXNzaWduZWQrKzsKKwkJCX0KKwkJCWNvbnRpbnVlOworCisJCWNhc2UgQ1RfSU5UOgorCQkJLyogc2NhbiBhbiBpbnRlZ2VyIGFzIGlmIGJ5IHN0cnRvaW1heC9zdHJ0b3VtYXggKi8KKyNpZmRlZiBoYXJkd2F5CisJCQlpZiAod2lkdGggPT0gMCB8fCB3aWR0aCA+IHNpemVvZihidWYpIC0gMSkKKwkJCQl3aWR0aCA9IHNpemVvZihidWYpIC0gMTsKKyNlbHNlCisJCQkvKiBzaXplX3QgaXMgdW5zaWduZWQsIGhlbmNlIHRoaXMgb3B0aW1pc2F0aW9uICovCisJCQlpZiAoLS13aWR0aCA+IHNpemVvZihidWYpIC0gMikKKwkJCQl3aWR0aCA9IHNpemVvZihidWYpIC0gMjsKKwkJCXdpZHRoKys7CisjZW5kaWYKKwkJCWZsYWdzIHw9IFNJR05PSyB8IE5ESUdJVFMgfCBOWkRJR0lUUzsKKwkJCWZvciAocCA9IGJ1Zjsgd2lkdGg7IHdpZHRoLS0pIHsKKwkJCQljID0gKmZwLT5fcDsKKwkJCQkvKgorCQkJCSAqIFN3aXRjaCBvbiB0aGUgY2hhcmFjdGVyOyBgZ290byBvaycKKwkJCQkgKiBpZiB3ZSBhY2NlcHQgaXQgYXMgYSBwYXJ0IG9mIG51bWJlci4KKwkJCQkgKi8KKwkJCQlzd2l0Y2ggKGMpIHsKKworCQkJCS8qCisJCQkJICogVGhlIGRpZ2l0IDAgaXMgYWx3YXlzIGxlZ2FsLCBidXQgaXMKKwkJCQkgKiBzcGVjaWFsLiAgRm9yICVpIGNvbnZlcnNpb25zLCBpZiBubworCQkJCSAqIGRpZ2l0cyAoemVybyBvciBub256ZXJvKSBoYXZlIGJlZW4KKwkJCQkgKiBzY2FubmVkIChvbmx5IHNpZ25zKSwgd2Ugd2lsbCBoYXZlCisJCQkJICogYmFzZT09MC4gIEluIHRoYXQgY2FzZSwgd2Ugc2hvdWxkIHNldAorCQkJCSAqIGl0IHRvIDggYW5kIGVuYWJsZSAweCBwcmVmaXhpbmcuCisJCQkJICogQWxzbywgaWYgd2UgaGF2ZSBub3Qgc2Nhbm5lZCB6ZXJvIGRpZ2l0cworCQkJCSAqIGJlZm9yZSB0aGlzLCBkbyBub3QgdHVybiBvZmYgcHJlZml4aW5nCisJCQkJICogKHNvbWVvbmUgZWxzZSB3aWxsIHR1cm4gaXQgb2ZmIGlmIHdlCisJCQkJICogaGF2ZSBzY2FubmVkIGFueSBub256ZXJvIGRpZ2l0cykuCisJCQkJICovCisJCQkJY2FzZSAnMCc6CisJCQkJCWlmIChiYXNlID09IDApIHsKKwkJCQkJCWJhc2UgPSA4OworCQkJCQkJZmxhZ3MgfD0gUEZYT0s7CisJCQkJCX0KKwkJCQkJaWYgKGZsYWdzICYgTlpESUdJVFMpCisJCQkJCSAgICBmbGFncyAmPSB+KFNJR05PS3xOWkRJR0lUU3xORElHSVRTKTsKKwkJCQkJZWxzZQorCQkJCQkgICAgZmxhZ3MgJj0gfihTSUdOT0t8UEZYT0t8TkRJR0lUUyk7CisJCQkJCWdvdG8gb2s7CisKKwkJCQkvKiAxIHRocm91Z2ggNyBhbHdheXMgbGVnYWwgKi8KKwkJCQljYXNlICcxJzogY2FzZSAnMic6IGNhc2UgJzMnOgorCQkJCWNhc2UgJzQnOiBjYXNlICc1JzogY2FzZSAnNic6IGNhc2UgJzcnOgorCQkJCQliYXNlID0gYmFzZWZpeFtiYXNlXTsKKwkJCQkJZmxhZ3MgJj0gfihTSUdOT0sgfCBQRlhPSyB8IE5ESUdJVFMpOworCQkJCQlnb3RvIG9rOworCisJCQkJLyogZGlnaXRzIDggYW5kIDkgb2sgaWZmIGRlY2ltYWwgb3IgaGV4ICovCisJCQkJY2FzZSAnOCc6IGNhc2UgJzknOgorCQkJCQliYXNlID0gYmFzZWZpeFtiYXNlXTsKKwkJCQkJaWYgKGJhc2UgPD0gOCkKKwkJCQkJCWJyZWFrOwkvKiBub3QgbGVnYWwgaGVyZSAqLworCQkJCQlmbGFncyAmPSB+KFNJR05PSyB8IFBGWE9LIHwgTkRJR0lUUyk7CisJCQkJCWdvdG8gb2s7CisKKwkJCQkvKiBsZXR0ZXJzIG9rIGlmZiBoZXggKi8KKwkJCQljYXNlICdBJzogY2FzZSAnQic6IGNhc2UgJ0MnOgorCQkJCWNhc2UgJ0QnOiBjYXNlICdFJzogY2FzZSAnRic6CisJCQkJY2FzZSAnYSc6IGNhc2UgJ2InOiBjYXNlICdjJzoKKwkJCQljYXNlICdkJzogY2FzZSAnZSc6IGNhc2UgJ2YnOgorCQkJCQkvKiBubyBuZWVkIHRvIGZpeCBiYXNlIGhlcmUgKi8KKwkJCQkJaWYgKGJhc2UgPD0gMTApCisJCQkJCQlicmVhazsJLyogbm90IGxlZ2FsIGhlcmUgKi8KKwkJCQkJZmxhZ3MgJj0gfihTSUdOT0sgfCBQRlhPSyB8IE5ESUdJVFMpOworCQkJCQlnb3RvIG9rOworCisJCQkJLyogc2lnbiBvayBvbmx5IGFzIGZpcnN0IGNoYXJhY3RlciAqLworCQkJCWNhc2UgJysnOiBjYXNlICctJzoKKwkJCQkJaWYgKGZsYWdzICYgU0lHTk9LKSB7CisJCQkJCQlmbGFncyAmPSB+U0lHTk9LOworCQkJCQkJZmxhZ3MgfD0gSEFWRVNJR047CisJCQkJCQlnb3RvIG9rOworCQkJCQl9CisJCQkJCWJyZWFrOworCisJCQkJLyoKKwkJCQkgKiB4IG9rIGlmZiBmbGFnIHN0aWxsIHNldCBhbmQgMm5kIGNoYXIgKG9yCisJCQkJICogM3JkIGNoYXIgaWYgd2UgaGF2ZSBhIHNpZ24pLgorCQkJCSAqLworCQkJCWNhc2UgJ3gnOiBjYXNlICdYJzoKKwkJCQkJaWYgKChmbGFncyAmIFBGWE9LKSAmJiBwID09CisJCQkJCSAgICBidWYgKyAxICsgISEoZmxhZ3MgJiBIQVZFU0lHTikpIHsKKwkJCQkJCWJhc2UgPSAxNjsJLyogaWYgJWkgKi8KKwkJCQkJCWZsYWdzICY9IH5QRlhPSzsKKwkJCQkJCWdvdG8gb2s7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQkJLyoKKwkJCQkgKiBJZiB3ZSBnb3QgaGVyZSwgYyBpcyBub3QgYSBsZWdhbCBjaGFyYWN0ZXIKKwkJCQkgKiBmb3IgYSBudW1iZXIuICBTdG9wIGFjY3VtdWxhdGluZyBkaWdpdHMuCisJCQkJICovCisJCQkJYnJlYWs7CisJCW9rOgorCQkJCS8qCisJCQkJICogYyBpcyBsZWdhbDogc3RvcmUgaXQgYW5kIGxvb2sgYXQgdGhlIG5leHQuCisJCQkJICovCisJCQkJKnArKyA9IGM7CisJCQkJaWYgKC0tZnAtPl9yID4gMCkKKwkJCQkJZnAtPl9wKys7CisJCQkJZWxzZSBpZiAoX19zcmVmaWxsKGZwKSkKKwkJCQkJYnJlYWs7CQkvKiBFT0YgKi8KKwkJCX0KKwkJCS8qCisJCQkgKiBJZiB3ZSBoYWQgb25seSBhIHNpZ24sIGl0IGlzIG5vIGdvb2Q7IHB1c2gKKwkJCSAqIGJhY2sgdGhlIHNpZ24uICBJZiB0aGUgbnVtYmVyIGVuZHMgaW4gYHgnLAorCQkJICogaXQgd2FzIFtzaWduXSAnMCcgJ3gnLCBzbyBwdXNoIGJhY2sgdGhlIHgKKwkJCSAqIGFuZCB0cmVhdCBpdCBhcyBbc2lnbl0gJzAnLgorCQkJICovCisJCQlpZiAoZmxhZ3MgJiBORElHSVRTKSB7CisJCQkJaWYgKHAgPiBidWYpCisJCQkJCSh2b2lkKSB1bmdldGMoKih1X2NoYXIgKiktLXAsIGZwKTsKKwkJCQlnb3RvIG1hdGNoX2ZhaWx1cmU7CisJCQl9CisJCQljID0gKCh1X2NoYXIgKilwKVstMV07CisJCQlpZiAoYyA9PSAneCcgfHwgYyA9PSAnWCcpIHsKKwkJCQktLXA7CisJCQkJKHZvaWQpIHVuZ2V0YyhjLCBmcCk7CisJCQl9CisJCQlpZiAoKGZsYWdzICYgU1VQUFJFU1MpID09IDApIHsKKwkJCQl1aW50bWF4X3QgcmVzOworCisJCQkJKnAgPSAnXDAnOworCQkJCWlmIChmbGFncyAmIFVOU0lHTkVEKQorCQkJCQlyZXMgPSBzdHJ0b3VtYXgoYnVmLCBOVUxMLCBiYXNlKTsKKwkJCQllbHNlCisJCQkJCXJlcyA9IHN0cnRvaW1heChidWYsIE5VTEwsIGJhc2UpOworCQkJCWlmIChmbGFncyAmIFBPSU5URVIpCisJCQkJCSp2YV9hcmcoYXAsIHZvaWQgKiopID0KKwkJCQkJICAgICh2b2lkICopKHVpbnRwdHJfdClyZXM7CisJCQkJZWxzZSBpZiAoZmxhZ3MgJiBNQVhJTlQpCisJCQkJCSp2YV9hcmcoYXAsIGludG1heF90ICopID0gcmVzOworCQkJCWVsc2UgaWYgKGZsYWdzICYgTExPTkcpCisJCQkJCSp2YV9hcmcoYXAsIGxvbmcgbG9uZyAqKSA9IHJlczsKKwkJCQllbHNlIGlmIChmbGFncyAmIFNJWkVJTlQpCisJCQkJCSp2YV9hcmcoYXAsIHNzaXplX3QgKikgPSByZXM7CisJCQkJZWxzZSBpZiAoZmxhZ3MgJiBQVFJJTlQpCisJCQkJCSp2YV9hcmcoYXAsIHB0cmRpZmZfdCAqKSA9IHJlczsKKwkJCQllbHNlIGlmIChmbGFncyAmIExPTkcpCisJCQkJCSp2YV9hcmcoYXAsIGxvbmcgKikgPSByZXM7CisJCQkJZWxzZSBpZiAoZmxhZ3MgJiBTSE9SVCkKKwkJCQkJKnZhX2FyZyhhcCwgc2hvcnQgKikgPSByZXM7CisJCQkJZWxzZSBpZiAoZmxhZ3MgJiBTSE9SVFNIT1JUKQorCQkJCQkqdmFfYXJnKGFwLCBfX3NpZ25lZCBjaGFyICopID0gcmVzOworCQkJCWVsc2UKKwkJCQkJKnZhX2FyZyhhcCwgaW50ICopID0gcmVzOworCQkJCW5hc3NpZ25lZCsrOworCQkJfQorCQkJbnJlYWQgKz0gcCAtIGJ1ZjsKKwkJCWJyZWFrOworCisjaWZkZWYgRkxPQVRJTkdfUE9JTlQKKwkJY2FzZSBDVF9GTE9BVDoKKwkJCS8qIHNjYW4gYSBmbG9hdGluZyBwb2ludCBudW1iZXIgYXMgaWYgYnkgc3RydG9kICovCisjaWZkZWYgaGFyZHdheQorCQkJaWYgKHdpZHRoID09IDAgfHwgd2lkdGggPiBzaXplb2YoYnVmKSAtIDEpCisJCQkJd2lkdGggPSBzaXplb2YoYnVmKSAtIDE7CisjZWxzZQorCQkJLyogc2l6ZV90IGlzIHVuc2lnbmVkLCBoZW5jZSB0aGlzIG9wdGltaXNhdGlvbiAqLworCQkJaWYgKC0td2lkdGggPiBzaXplb2YoYnVmKSAtIDIpCisJCQkJd2lkdGggPSBzaXplb2YoYnVmKSAtIDI7CisJCQl3aWR0aCsrOworI2VuZGlmCisJCQlmbGFncyB8PSBTSUdOT0sgfCBORElHSVRTIHwgRFBUT0sgfCBFWFBPSzsKKwkJCWZvciAocCA9IGJ1Zjsgd2lkdGg7IHdpZHRoLS0pIHsKKwkJCQljID0gKmZwLT5fcDsKKwkJCQkvKgorCQkJCSAqIFRoaXMgY29kZSBtaW1pY2tzIHRoZSBpbnRlZ2VyIGNvbnZlcnNpb24KKwkJCQkgKiBjb2RlLCBidXQgaXMgbXVjaCBzaW1wbGVyLgorCQkJCSAqLworCQkJCXN3aXRjaCAoYykgeworCisJCQkJY2FzZSAnMCc6IGNhc2UgJzEnOiBjYXNlICcyJzogY2FzZSAnMyc6CisJCQkJY2FzZSAnNCc6IGNhc2UgJzUnOiBjYXNlICc2JzogY2FzZSAnNyc6CisJCQkJY2FzZSAnOCc6IGNhc2UgJzknOgorCQkJCQlmbGFncyAmPSB+KFNJR05PSyB8IE5ESUdJVFMpOworCQkJCQlnb3RvIGZvazsKKworCQkJCWNhc2UgJysnOiBjYXNlICctJzoKKwkJCQkJaWYgKGZsYWdzICYgU0lHTk9LKSB7CisJCQkJCQlmbGFncyAmPSB+U0lHTk9LOworCQkJCQkJZ290byBmb2s7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAnLic6CisJCQkJCWlmIChmbGFncyAmIERQVE9LKSB7CisJCQkJCQlmbGFncyAmPSB+KFNJR05PSyB8IERQVE9LKTsKKwkJCQkJCWdvdG8gZm9rOworCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCWNhc2UgJ2UnOiBjYXNlICdFJzoKKwkJCQkJLyogbm8gZXhwb25lbnQgd2l0aG91dCBzb21lIGRpZ2l0cyAqLworCQkJCQlpZiAoKGZsYWdzJihORElHSVRTfEVYUE9LKSkgPT0gRVhQT0spIHsKKwkJCQkJCWZsYWdzID0KKwkJCQkJCSAgICAoZmxhZ3MgJiB+KEVYUE9LfERQVE9LKSkgfAorCQkJCQkJICAgIFNJR05PSyB8IE5ESUdJVFM7CisJCQkJCQlnb3RvIGZvazsKKwkJCQkJfQorCQkJCQlicmVhazsKKwkJCQl9CisJCQkJYnJlYWs7CisJCWZvazoKKwkJCQkqcCsrID0gYzsKKwkJCQlpZiAoLS1mcC0+X3IgPiAwKQorCQkJCQlmcC0+X3ArKzsKKwkJCQllbHNlIGlmIChfX3NyZWZpbGwoZnApKQorCQkJCQlicmVhazsJLyogRU9GICovCisJCQl9CisJCQkvKgorCQkJICogSWYgbm8gZGlnaXRzLCBtaWdodCBiZSBtaXNzaW5nIGV4cG9uZW50IGRpZ2l0cworCQkJICogKGp1c3QgZ2l2ZSBiYWNrIHRoZSBleHBvbmVudCkgb3IgbWlnaHQgYmUgbWlzc2luZworCQkJICogcmVndWxhciBkaWdpdHMsIGJ1dCBoYWQgc2lnbiBhbmQvb3IgZGVjaW1hbCBwb2ludC4KKwkJCSAqLworCQkJaWYgKGZsYWdzICYgTkRJR0lUUykgeworCQkJCWlmIChmbGFncyAmIEVYUE9LKSB7CisJCQkJCS8qIG5vIGRpZ2l0cyBhdCBhbGwgKi8KKwkJCQkJd2hpbGUgKHAgPiBidWYpCisJCQkJCQl1bmdldGMoKih1X2NoYXIgKiktLXAsIGZwKTsKKwkJCQkJZ290byBtYXRjaF9mYWlsdXJlOworCQkJCX0KKwkJCQkvKiBqdXN0IGEgYmFkIGV4cG9uZW50IChlIGFuZCBtYXliZSBzaWduKSAqLworCQkJCWMgPSAqKHVfY2hhciAqKS0tcDsKKwkJCQlpZiAoYyAhPSAnZScgJiYgYyAhPSAnRScpIHsKKwkJCQkJKHZvaWQpIHVuZ2V0YyhjLCBmcCk7Lyogc2lnbiAqLworCQkJCQljID0gKih1X2NoYXIgKiktLXA7CisJCQkJfQorCQkJCSh2b2lkKSB1bmdldGMoYywgZnApOworCQkJfQorCQkJaWYgKChmbGFncyAmIFNVUFBSRVNTKSA9PSAwKSB7CisJCQkJZG91YmxlIHJlczsKKworCQkJCSpwID0gJ1wwJzsKKwkJCQlyZXMgPSBzdHJ0b2QoYnVmLCAoY2hhciAqKikgTlVMTCk7CisJCQkJaWYgKGZsYWdzICYgTE9OR0RCTCkKKwkJCQkJKnZhX2FyZyhhcCwgbG9uZyBkb3VibGUgKikgPSByZXM7CisJCQkJZWxzZSBpZiAoZmxhZ3MgJiBMT05HKQorCQkJCQkqdmFfYXJnKGFwLCBkb3VibGUgKikgPSByZXM7CisJCQkJZWxzZQorCQkJCQkqdmFfYXJnKGFwLCBmbG9hdCAqKSA9IHJlczsKKwkJCQluYXNzaWduZWQrKzsKKwkJCX0KKwkJCW5yZWFkICs9IHAgLSBidWY7CisJCQlicmVhazsKKyNlbmRpZiAvKiBGTE9BVElOR19QT0lOVCAqLworCQl9CisJfQoraW5wdXRfZmFpbHVyZToKKwlyZXR1cm4gKG5hc3NpZ25lZCA/IG5hc3NpZ25lZCA6IC0xKTsKK21hdGNoX2ZhaWx1cmU6CisJcmV0dXJuIChuYXNzaWduZWQpOworfQorCisvKgorICogRmlsbCBpbiB0aGUgZ2l2ZW4gdGFibGUgZnJvbSB0aGUgc2NhbnNldCBhdCB0aGUgZ2l2ZW4gZm9ybWF0CisgKiAoanVzdCBhZnRlciBgWycpLiAgUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgY2hhcmFjdGVyIHBhc3QgdGhlCisgKiBjbG9zaW5nIGBdJy4gIFRoZSB0YWJsZSBoYXMgYSAxIHdoZXJldmVyIGNoYXJhY3RlcnMgc2hvdWxkIGJlCisgKiBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIHNjYW5zZXQuCisgKi8KK3N0YXRpYyB1X2NoYXIgKgorX19zY2NsKGNoYXIgKnRhYiwgdV9jaGFyICpmbXQpCit7CisJaW50IGMsIG4sIHY7CisKKwkvKiBmaXJzdCBgY2xlYXInIHRoZSB3aG9sZSB0YWJsZSAqLworCWMgPSAqZm10Kys7CQkvKiBmaXJzdCBjaGFyIGhhdCA9PiBuZWdhdGVkIHNjYW5zZXQgKi8KKwlpZiAoYyA9PSAnXicpIHsKKwkJdiA9IDE7CQkvKiBkZWZhdWx0ID0+IGFjY2VwdCAqLworCQljID0gKmZtdCsrOwkvKiBnZXQgbmV3IGZpcnN0IGNoYXIgKi8KKwl9IGVsc2UKKwkJdiA9IDA7CQkvKiBkZWZhdWx0ID0+IHJlamVjdCAqLworCS8qIHNob3VsZCBwcm9iYWJseSB1c2UgbWVtc2V0IGhlcmUgKi8KKwlmb3IgKG4gPSAwOyBuIDwgMjU2OyBuKyspCisJCXRhYltuXSA9IHY7CisJaWYgKGMgPT0gMCkKKwkJcmV0dXJuIChmbXQgLSAxKTsvKiBmb3JtYXQgZW5kZWQgYmVmb3JlIGNsb3NpbmcgXSAqLworCisJLyoKKwkgKiBOb3cgc2V0IHRoZSBlbnRyaWVzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFjdHVhbCBzY2Fuc2V0CisJICogdG8gdGhlIG9wcG9zaXRlIG9mIHRoZSBhYm92ZS4KKwkgKgorCSAqIFRoZSBmaXJzdCBjaGFyYWN0ZXIgbWF5IGJlICddJyAob3IgJy0nKSB3aXRob3V0IGJlaW5nIHNwZWNpYWw7CisJICogdGhlIGxhc3QgY2hhcmFjdGVyIG1heSBiZSAnLScuCisJICovCisJdiA9IDEgLSB2OworCWZvciAoOzspIHsKKwkJdGFiW2NdID0gdjsJCS8qIHRha2UgY2hhcmFjdGVyIGMgKi8KK2Rvc3dpdGNoOgorCQluID0gKmZtdCsrOwkJLyogYW5kIGV4YW1pbmUgdGhlIG5leHQgKi8KKwkJc3dpdGNoIChuKSB7CisKKwkJY2FzZSAwOgkJCS8qIGZvcm1hdCBlbmRlZCB0b28gc29vbiAqLworCQkJcmV0dXJuIChmbXQgLSAxKTsKKworCQljYXNlICctJzoKKwkJCS8qCisJCQkgKiBBIHNjYW5zZXQgb2YgdGhlIGZvcm0KKwkJCSAqCVswMSstXQorCQkJICogaXMgZGVmaW5lZCBhcyBgdGhlIGRpZ2l0IDAsIHRoZSBkaWdpdCAxLAorCQkJICogdGhlIGNoYXJhY3RlciArLCB0aGUgY2hhcmFjdGVyIC0nLCBidXQKKwkJCSAqIHRoZSBlZmZlY3Qgb2YgYSBzY2Fuc2V0IHN1Y2ggYXMKKwkJCSAqCVthLXpBLVowLTldCisJCQkgKiBpcyBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkLiAgVGhlIFY3IFVuaXgKKwkJCSAqIHNjYW5mIHRyZWF0cyBgYS16JyBhcyBgdGhlIGxldHRlcnMgYSB0aHJvdWdoCisJCQkgKiB6JywgYnV0IHRyZWF0cyBgYS1hJyBhcyBgdGhlIGxldHRlciBhLCB0aGUKKwkJCSAqIGNoYXJhY3RlciAtLCBhbmQgdGhlIGxldHRlciBhJy4KKwkJCSAqCisJCQkgKiBGb3IgY29tcGF0aWJpbGl0eSwgdGhlIGAtJyBpcyBub3QgY29uc2lkZXJkCisJCQkgKiB0byBkZWZpbmUgYSByYW5nZSBpZiB0aGUgY2hhcmFjdGVyIGZvbGxvd2luZworCQkJICogaXQgaXMgZWl0aGVyIGEgY2xvc2UgYnJhY2tldCAocmVxdWlyZWQgYnkgQU5TSSkKKwkJCSAqIG9yIGlzIG5vdCBudW1lcmljYWxseSBncmVhdGVyIHRoYW4gdGhlIGNoYXJhY3RlcgorCQkJICogd2UganVzdCBzdG9yZWQgaW4gdGhlIHRhYmxlIChjKS4KKwkJCSAqLworCQkJbiA9ICpmbXQ7CisJCQlpZiAobiA9PSAnXScgfHwgbiA8IGMpIHsKKwkJCQljID0gJy0nOworCQkJCWJyZWFrOwkvKiByZXN1bWUgdGhlIGZvcig7OykgKi8KKwkJCX0KKwkJCWZtdCsrOworCQkJZG8gewkJLyogZmlsbCBpbiB0aGUgcmFuZ2UgKi8KKwkJCQl0YWJbKytjXSA9IHY7CisJCQl9IHdoaWxlIChjIDwgbik7CisjaWYgMQkvKiBYWFggYW5vdGhlciBkaXNndXN0aW5nIGNvbXBhdGliaWxpdHkgaGFjayAqLworCQkJLyoKKwkJCSAqIEFsYXMsIHRoZSBWNyBVbml4IHNjYW5mIGFsc28gdHJlYXRzIGZvcm1hdHMKKwkJCSAqIHN1Y2ggYXMgW2EtYy1lXSBhcyBgdGhlIGxldHRlcnMgYSB0aHJvdWdoIGUnLgorCQkJICogVGhpcyB0b28gaXMgcGVybWl0dGVkIGJ5IHRoZSBzdGFuZGFyZC4uLi4KKwkJCSAqLworCQkJZ290byBkb3N3aXRjaDsKKyNlbHNlCisJCQljID0gKmZtdCsrOworCQkJaWYgKGMgPT0gMCkKKwkJCQlyZXR1cm4gKGZtdCAtIDEpOworCQkJaWYgKGMgPT0gJ10nKQorCQkJCXJldHVybiAoZm10KTsKKyNlbmRpZgorCQkJYnJlYWs7CisKKwkJY2FzZSAnXSc6CQkvKiBlbmQgb2Ygc2NhbnNldCAqLworCQkJcmV0dXJuIChmbXQpOworCisJCWRlZmF1bHQ6CQkvKiBqdXN0IGFub3RoZXIgY2hhcmFjdGVyICovCisJCQljID0gbjsKKwkJCWJyZWFrOworCQl9CisJfQorCS8qIE5PVFJFQUNIRUQgKi8KK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vdnByaW50Zi5jIGIvbGliYy9zdGRpby92cHJpbnRmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNjNjIyYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkaW8vdnByaW50Zi5jCkBAIC0wLDAgKzEsNDAgQEAKKy8qCSRPcGVuQlNEOiB2cHJpbnRmLmMsdiAxLjggMjAwNi8wMS8wNiAxODo1MzowNCBtaWxsZXJ0IEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCitpbnQKK3ZwcmludGYoY29uc3QgY2hhciAqZm10LCBfX3ZhX2xpc3QgYXApCit7CisJcmV0dXJuICh2ZnByaW50ZihzdGRvdXQsIGZtdCwgYXApKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vdnNjYW5mLmMgYi9saWJjL3N0ZGlvL3ZzY2FuZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyODQ5OGUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGlvL3ZzY2FuZi5jCkBAIC0wLDAgKzEsNDEgQEAKKy8qCSRPcGVuQlNEOiB2c2NhbmYuYyx2IDEuOCAyMDA2LzAxLzA2IDE4OjUzOjA0IG1pbGxlcnQgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBEb25uIFNlZWxleSBhdCBVVU5FVCBUZWNobm9sb2dpZXMsIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKK2ludAordnNjYW5mKGNvbnN0IGNoYXIgKmZtdCwgX192YV9saXN0IGFwKQoreworCisJcmV0dXJuICh2ZnNjYW5mKHN0ZGluLCBmbXQsIGFwKSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL3ZzbnByaW50Zi5jIGIvbGliYy9zdGRpby92c25wcmludGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmRkMDA5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRpby92c25wcmludGYuYwpAQCAtMCwwICsxLDY0IEBACisvKgkkT3BlbkJTRDogdnNucHJpbnRmLmMsdiAxLjEyIDIwMDYvMDEvMDYgMTg6NTM6MDQgbWlsbGVydCBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorCitpbnQKK3ZzbnByaW50ZihjaGFyICpzdHIsIHNpemVfdCBuLCBjb25zdCBjaGFyICpmbXQsIF9fdmFfbGlzdCBhcCkKK3sKKwlpbnQgcmV0OworCWNoYXIgZHVtbXk7CisJRklMRSBmOworCXN0cnVjdCBfX3NmaWxlZXh0IGZleHQ7CisKKwlfRklMRUVYVF9TRVRVUCgmZiwgJmZleHQpOworCisJLyogV2hpbGUgc25wcmludGYoMykgc3BlY2lmaWVzIHNpemVfdCBzdGRpbyB1c2VzIGFuIGludCBpbnRlcm5hbGx5ICovCisJaWYgKG4gPiBJTlRfTUFYKQorCQluID0gSU5UX01BWDsKKwkvKiBTdGRpbyBpbnRlcm5hbHMgZG8gbm90IGRlYWwgY29ycmVjdGx5IHdpdGggemVybyBsZW5ndGggYnVmZmVyICovCisJaWYgKG4gPT0gMCkgeworCQlzdHIgPSAmZHVtbXk7CisJCW4gPSAxOworCX0KKwlmLl9maWxlID0gLTE7CisJZi5fZmxhZ3MgPSBfX1NXUiB8IF9fU1NUUjsKKwlmLl9iZi5fYmFzZSA9IGYuX3AgPSAodW5zaWduZWQgY2hhciAqKXN0cjsKKwlmLl9iZi5fc2l6ZSA9IGYuX3cgPSBuIC0gMTsKKwlyZXQgPSB2ZnByaW50ZigmZiwgZm10LCBhcCk7CisJKmYuX3AgPSAnXDAnOworCXJldHVybiAocmV0KTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vdnNwcmludGYuYyBiL2xpYmMvc3RkaW8vdnNwcmludGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2E1M2ExCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRpby92c3ByaW50Zi5jCkBAIC0wLDAgKzEsNTkgQEAKKy8qCSRPcGVuQlNEOiB2c3ByaW50Zi5jLHYgMS4xMyAyMDA2LzAxLzA2IDE4OjUzOjA0IG1pbGxlcnQgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKworI2lmIGRlZmluZWQoQVBJV0FSTikKK19fd2Fybl9yZWZlcmVuY2VzKHZzcHJpbnRmLAorICAgICJ3YXJuaW5nOiB2c3ByaW50ZigpIGlzIG9mdGVuIG1pc3VzZWQsIHBsZWFzZSB1c2UgdnNucHJpbnRmKCkiKTsKKyNlbmRpZgorCitpbnQKK3ZzcHJpbnRmKGNoYXIgKnN0ciwgY29uc3QgY2hhciAqZm10LCBfX3ZhX2xpc3QgYXApCit7CisJaW50IHJldDsKKwlGSUxFIGY7CisJc3RydWN0IF9fc2ZpbGVleHQgZmV4dDsKKworCV9GSUxFRVhUX1NFVFVQKCZmLCAmZmV4dCk7CisJZi5fZmlsZSA9IC0xOworCWYuX2ZsYWdzID0gX19TV1IgfCBfX1NTVFI7CisJZi5fYmYuX2Jhc2UgPSBmLl9wID0gKHVuc2lnbmVkIGNoYXIgKilzdHI7CisJZi5fYmYuX3NpemUgPSBmLl93ID0gSU5UX01BWDsKKwlyZXQgPSB2ZnByaW50ZigmZiwgZm10LCBhcCk7CisJKmYuX3AgPSAnXDAnOworCXJldHVybiAocmV0KTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vdnNzY2FuZi5jIGIvbGliYy9zdGRpby92c3NjYW5mLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdjMWFlNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkaW8vdnNzY2FuZi5jCkBAIC0wLDAgKzEsNTkgQEAKKy8qCSRPcGVuQlNEOiB2c3NjYW5mLmMsdiAxLjExIDIwMDYvMDEvMDYgMTg6NTM6MDQgbWlsbGVydCBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIERvbm4gU2VlbGV5IGF0IFVVTkVUIFRlY2hub2xvZ2llcywgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorCisvKiBBUkdTVVNFRCAqLworc3RhdGljIGludAorZW9mcmVhZCh2b2lkICpjb29raWUsIGNoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKworCXJldHVybiAoMCk7Cit9CisKK2ludAordnNzY2FuZihjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKmZtdCwgX192YV9saXN0IGFwKQoreworCUZJTEUgZjsKKwlzdHJ1Y3QgX19zZmlsZWV4dCBmZXh0OworCisJX0ZJTEVFWFRfU0VUVVAoJmYsICZmZXh0KTsKKwlmLl9mbGFncyA9IF9fU1JEOworCWYuX2JmLl9iYXNlID0gZi5fcCA9ICh1bnNpZ25lZCBjaGFyICopc3RyOworCWYuX2JmLl9zaXplID0gZi5fciA9IHN0cmxlbihzdHIpOworCWYuX3JlYWQgPSBlb2ZyZWFkOworCWYuX2xiLl9iYXNlID0gTlVMTDsKKwlyZXR1cm4gKHZmc2NhbmYoJmYsIGZtdCwgYXApKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vd2J1Zi5jIGIvbGliYy9zdGRpby93YnVmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc1Nzc5OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkaW8vd2J1Zi5jCkBAIC0wLDAgKzEsODQgQEAKKy8qCSRPcGVuQlNEOiB3YnVmLmMsdiAxLjkgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgImxvY2FsLmgiCisKKy8qCisgKiBXcml0ZSB0aGUgZ2l2ZW4gY2hhcmFjdGVyIGludG8gdGhlIChwcm9iYWJseSBmdWxsKSBidWZmZXIgZm9yCisgKiB0aGUgZ2l2ZW4gZmlsZS4gIEZsdXNoIHRoZSBidWZmZXIgb3V0IGlmIGl0IGlzIG9yIGJlY29tZXMgZnVsbCwKKyAqIG9yIGlmIGM9PSdcbicgYW5kIHRoZSBmaWxlIGlzIGxpbmUgYnVmZmVyZWQuCisgKi8KK2ludAorX19zd2J1ZihpbnQgYywgRklMRSAqZnApCit7CisJaW50IG47CisKKwlfU0VUX09SSUVOVEFUSU9OKGZwLCAtMSk7CisJLyoKKwkgKiBJbiBjYXNlIHdlIGNhbm5vdCB3cml0ZSwgb3IgbG9uZ2ptcCB0YWtlcyB1cyBvdXQgZWFybHksCisJICogbWFrZSBzdXJlIF93IGlzIDAgKGlmIGZ1bGx5LSBvciB1bi1idWZmZXJlZCkgb3IgLV9iZi5fc2l6ZQorCSAqIChpZiBsaW5lIGJ1ZmZlcmVkKSBzbyB0aGF0IHdlIHdpbGwgZ2V0IGNhbGxlZCBhZ2Fpbi4KKwkgKiBJZiB3ZSBkaWQgbm90IGRvIHRoaXMsIGEgc3VmZmljaWVudCBudW1iZXIgb2YgcHV0YygpCisJICogY2FsbHMgbWlnaHQgd3JhcCBfdyBmcm9tIG5lZ2F0aXZlIHRvIHBvc2l0aXZlLgorCSAqLworCWZwLT5fdyA9IGZwLT5fbGJmc2l6ZTsKKwlpZiAoY2FudHdyaXRlKGZwKSkgeworCQllcnJubyA9IEVCQURGOworCQlyZXR1cm4gKEVPRik7CisJfQorCWMgPSAodW5zaWduZWQgY2hhciljOworCisJLyoKKwkgKiBJZiBpdCBpcyBjb21wbGV0ZWx5IGZ1bGwsIGZsdXNoIGl0IG91dC4gIFRoZW4sIGluIGFueSBjYXNlLAorCSAqIHN0dWZmIGMgaW50byB0aGUgYnVmZmVyLiAgSWYgdGhpcyBjYXVzZXMgdGhlIGJ1ZmZlciB0byBmaWxsCisJICogY29tcGxldGVseSwgb3IgaWYgYyBpcyAnXG4nIGFuZCB0aGUgZmlsZSBpcyBsaW5lIGJ1ZmZlcmVkLAorCSAqIGZsdXNoIGl0IChwZXJoYXBzIGEgc2Vjb25kIHRpbWUpLiAgVGhlIHNlY29uZCBmbHVzaCB3aWxsIGFsd2F5cworCSAqIGhhcHBlbiBvbiB1bmJ1ZmZlcmVkIHN0cmVhbXMsIHdoZXJlIF9iZi5fc2l6ZT09MTsgZmZsdXNoKCkKKwkgKiBndWFyYW50ZWVzIHRoYXQgcHV0YygpIHdpbGwgYWx3YXlzIGNhbGwgd2J1ZigpIGJ5IHNldHRpbmcgX3cKKwkgKiB0byAwLCBzbyB3ZSBuZWVkIG5vdCBkbyBhbnl0aGluZyBlbHNlLgorCSAqLworCW4gPSBmcC0+X3AgLSBmcC0+X2JmLl9iYXNlOworCWlmIChuID49IGZwLT5fYmYuX3NpemUpIHsKKwkJaWYgKGZmbHVzaChmcCkpCisJCQlyZXR1cm4gKEVPRik7CisJCW4gPSAwOworCX0KKwlmcC0+X3ctLTsKKwkqZnAtPl9wKysgPSBjOworCWlmICgrK24gPT0gZnAtPl9iZi5fc2l6ZSB8fCAoZnAtPl9mbGFncyAmIF9fU0xCRiAmJiBjID09ICdcbicpKQorCQlpZiAoZmZsdXNoKGZwKSkKKwkJCXJldHVybiAoRU9GKTsKKwlyZXR1cm4gKGMpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby93Y2lvLmggYi9saWJjL3N0ZGlvL3djaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOGFjMWIyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRpby93Y2lvLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisvKiB0aGlzIGZpbGUgaXMgb25seSB1c2VkIHRvIHF1aWV0IHRoZSBCU0Qgc3RkaW8gaW1wbGVtZW50YXRpb24KKyAqIHNpbmNlIHdlIGRvbid0IGltcGxlbWVudCB3Y2hhciBzdXBwb3J0IGF0IGFsbAorICovCisjaWZuZGVmIF9XQ0lPX0hfCisjZGVmaW5lIF9XQ0lPX0hfCisKKy8qIG1pbmltYWwgcmVxdWlyZW1lbnQgb2YgU1VTdjIgKi8KKyNkZWZpbmUgV0NJT19VTkdFVFdDX0JVRlNJWkUgMQorCitzdHJ1Y3Qgd2NoYXJfaW9fZGF0YSB7CisgICAgICAgIGludCBkdW1teTsKK307CisKKy8qIEJJT05JQzogZGlzYWJsZSB3Y2hhciBzdXBwb3J0ICovCisjZGVmaW5lIFdDSU9fR0VUKGZwKSBcCisJKChzdHJ1Y3Qgd2hjYXJfaW9fZGF0YSopIDApCisKKyNkZWZpbmUgX1NFVF9PUklFTlRBVElPTihmcCwgbW9kZSkgKCh2b2lkKTApCisKKy8qCisgKiBXQ0lPX0ZSRUUgc2hvdWxkIGJlIGNhbGxlZCBieSBmY2xvc2UKKyAqLworI2RlZmluZSBXQ0lPX0ZSRUUoZnApICgodm9pZCkoMCkpCisKKyNkZWZpbmUgV0NJT19GUkVFVUIoZnApICgodm9pZCkwKQorCisjZGVmaW5lIFdDSU9fSU5JVChmcCkgICgodm9pZCkwKQorCisjZW5kaWYgLypfV0NJT19IXyovCmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL3dzZXR1cC5jIGIvbGliYy9zdGRpby93c2V0dXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODM0MjIzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRpby93c2V0dXAuYwpAQCAtMCwwICsxLDg2IEBACisvKgkkT3BlbkJTRDogd3NldHVwLmMsdiAxLjcgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorCisvKgorICogVmFyaW91cyBvdXRwdXQgcm91dGluZXMgY2FsbCB3c2V0dXAgdG8gYmUgc3VyZSBpdCBpcyBzYWZlIHRvIHdyaXRlLAorICogYmVjYXVzZSBlaXRoZXIgX2ZsYWdzIGRvZXMgbm90IGluY2x1ZGUgX19TV1IsIG9yIF9idWYgaXMgTlVMTC4KKyAqIF93c2V0dXAgcmV0dXJucyAwIGlmIE9LIHRvIHdyaXRlLCBub256ZXJvIG90aGVyd2lzZS4KKyAqLworaW50CitfX3N3c2V0dXAoRklMRSAqZnApCit7CisJLyogbWFrZSBzdXJlIHN0ZGlvIGlzIHNldCB1cCAqLworCWlmICghX19zZGlkaW5pdCkKKwkJX19zaW5pdCgpOworCisJLyoKKwkgKiBJZiB3ZSBhcmUgbm90IHdyaXRpbmcsIHdlIGhhZCBiZXR0ZXIgYmUgcmVhZGluZyBhbmQgd3JpdGluZy4KKwkgKi8KKwlpZiAoKGZwLT5fZmxhZ3MgJiBfX1NXUikgPT0gMCkgeworCQlpZiAoKGZwLT5fZmxhZ3MgJiBfX1NSVykgPT0gMCkKKwkJCXJldHVybiAoRU9GKTsKKwkJaWYgKGZwLT5fZmxhZ3MgJiBfX1NSRCkgeworCQkJLyogY2xvYmJlciBhbnkgdW5nZXRjIGRhdGEgKi8KKwkJCWlmIChIQVNVQihmcCkpCisJCQkJRlJFRVVCKGZwKTsKKwkJCWZwLT5fZmxhZ3MgJj0gfihfX1NSRHxfX1NFT0YpOworCQkJZnAtPl9yID0gMDsKKwkJCWZwLT5fcCA9IGZwLT5fYmYuX2Jhc2U7CisJCX0KKwkJZnAtPl9mbGFncyB8PSBfX1NXUjsKKwl9CisKKwkvKgorCSAqIE1ha2UgYSBidWZmZXIgaWYgbmVjZXNzYXJ5LCB0aGVuIHNldCBfdy4KKwkgKi8KKwlpZiAoZnAtPl9iZi5fYmFzZSA9PSBOVUxMKSB7CisJCWlmICgoZnAtPl9mbGFncyAmIChfX1NTVFIgfCBfX1NBTEMpKSA9PSBfX1NTVFIpCisJCQlyZXR1cm4gKEVPRik7CisJCV9fc21ha2VidWYoZnApOworCX0KKwlpZiAoZnAtPl9mbGFncyAmIF9fU0xCRikgeworCQkvKgorCQkgKiBJdCBpcyBsaW5lIGJ1ZmZlcmVkLCBzbyBtYWtlIF9sYmZzaXplIGJlIC1fYnVmc2l6ZQorCQkgKiBmb3IgdGhlIHB1dGMoKSBtYWNyby4gIFdlIHdpbGwgY2hhbmdlIF9sYmZzaXplIGJhY2sKKwkJICogdG8gMCB3aGVuZXZlciB3ZSB0dXJuIG9mZiBfX1NXUi4KKwkJICovCisJCWZwLT5fdyA9IDA7CisJCWZwLT5fbGJmc2l6ZSA9IC1mcC0+X2JmLl9zaXplOworCX0gZWxzZQorCQlmcC0+X3cgPSBmcC0+X2ZsYWdzICYgX19TTkJGID8gMCA6IGZwLT5fYmYuX3NpemU7CisJcmV0dXJuICgwKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkbGliL19yYW5kNDguYyBiL2xpYmMvc3RkbGliL19yYW5kNDguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Yzk1MGY3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRsaWIvX3JhbmQ0OC5jCkBAIC0wLDAgKzEsNDcgQEAKKy8qCSRPcGVuQlNEOiBfcmFuZDQ4LmMsdiAxLjMgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLworLyoKKyAqIENvcHlyaWdodCAoYykgMTk5MyBNYXJ0aW4gQmlyZ21laWVyCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFlvdSBtYXkgcmVkaXN0cmlidXRlIHVubW9kaWZpZWQgb3IgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhpcyBzb3VyY2UKKyAqIGNvZGUgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBhbmQgdGhlCisgKiBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgcmV0YWluZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBgYGFzIGlzJycsIGFuZCBjb21lcyB3aXRoIG5vIHdhcnJhbnRpZXMKKyAqIG9mIGFueSBraW5kLiBJIHNoYWxsIGluIG5vIGV2ZW50IGJlIGxpYWJsZSBmb3IgYW55dGhpbmcgdGhhdCBoYXBwZW5zCisgKiB0byBhbnlvbmUvYW55dGhpbmcgd2hlbiB1c2luZyB0aGlzIHNvZnR3YXJlLgorICovCisKKyNpbmNsdWRlICJyYW5kNDguaCIKKwordW5zaWduZWQgc2hvcnQgX19yYW5kNDhfc2VlZFszXSA9IHsKKwlSQU5ENDhfU0VFRF8wLAorCVJBTkQ0OF9TRUVEXzEsCisJUkFORDQ4X1NFRURfMgorfTsKK3Vuc2lnbmVkIHNob3J0IF9fcmFuZDQ4X211bHRbM10gPSB7CisJUkFORDQ4X01VTFRfMCwKKwlSQU5ENDhfTVVMVF8xLAorCVJBTkQ0OF9NVUxUXzIKK307Cit1bnNpZ25lZCBzaG9ydCBfX3JhbmQ0OF9hZGQgPSBSQU5ENDhfQUREOworCit2b2lkCitfX2RvcmFuZDQ4KHVuc2lnbmVkIHNob3J0IHhzZWVkWzNdKQoreworCXVuc2lnbmVkIGxvbmcgYWNjdTsKKwl1bnNpZ25lZCBzaG9ydCB0ZW1wWzJdOworCisJYWNjdSA9ICh1bnNpZ25lZCBsb25nKSBfX3JhbmQ0OF9tdWx0WzBdICogKHVuc2lnbmVkIGxvbmcpIHhzZWVkWzBdICsKKwkgKHVuc2lnbmVkIGxvbmcpIF9fcmFuZDQ4X2FkZDsKKwl0ZW1wWzBdID0gKHVuc2lnbmVkIHNob3J0KSBhY2N1OwkvKiBsb3dlciAxNiBiaXRzICovCisJYWNjdSA+Pj0gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSAqIDg7CisJYWNjdSArPSAodW5zaWduZWQgbG9uZykgX19yYW5kNDhfbXVsdFswXSAqICh1bnNpZ25lZCBsb25nKSB4c2VlZFsxXSArCisJICh1bnNpZ25lZCBsb25nKSBfX3JhbmQ0OF9tdWx0WzFdICogKHVuc2lnbmVkIGxvbmcpIHhzZWVkWzBdOworCXRlbXBbMV0gPSAodW5zaWduZWQgc2hvcnQpIGFjY3U7CS8qIG1pZGRsZSAxNiBiaXRzICovCisJYWNjdSA+Pj0gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSAqIDg7CisJYWNjdSArPSBfX3JhbmQ0OF9tdWx0WzBdICogeHNlZWRbMl0gKyBfX3JhbmQ0OF9tdWx0WzFdICogeHNlZWRbMV0gKyBfX3JhbmQ0OF9tdWx0WzJdICogeHNlZWRbMF07CisJeHNlZWRbMF0gPSB0ZW1wWzBdOworCXhzZWVkWzFdID0gdGVtcFsxXTsKKwl4c2VlZFsyXSA9ICh1bnNpZ25lZCBzaG9ydCkgYWNjdTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkbGliL2Fzc2VydC5jIGIvbGliYy9zdGRsaWIvYXNzZXJ0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQzOWQ4ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkbGliL2Fzc2VydC5jCkBAIC0wLDAgKzEsNTQgQEAKKy8qCSRPcGVuQlNEOiBhc3NlcnQuYyx2IDEuOCAyMDA1LzA4LzA4IDA4OjA1OjMzIGVzcGllIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MiwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCit2b2lkCitfX2Fzc2VydChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZmFpbGVkZXhwcikKK3sKKwkodm9pZClmcHJpbnRmKHN0ZGVyciwKKwkgICAgImFzc2VydGlvbiBcIiVzXCIgZmFpbGVkOiBmaWxlIFwiJXNcIiwgbGluZSAlZFxuIiwKKwkgICAgZmFpbGVkZXhwciwgZmlsZSwgbGluZSk7CisJYWJvcnQoKTsKKwkvKiBOT1RSRUFDSEVEICovCit9CisKK3ZvaWQKK19fYXNzZXJ0Mihjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZnVuYywgY29uc3QgY2hhciAqZmFpbGVkZXhwcikKK3sKKwkodm9pZClmcHJpbnRmKHN0ZGVyciwKKwkgICAgImFzc2VydGlvbiBcIiVzXCIgZmFpbGVkOiBmaWxlIFwiJXNcIiwgbGluZSAlZCwgZnVuY3Rpb24gXCIlc1wiXG4iLAorCSAgICBmYWlsZWRleHByLCBmaWxlLCBsaW5lLCBmdW5jKTsKKyAgYWJvcnQoKTsKKwkvKiBOT1RSRUFDSEVEICovCit9CmRpZmYgLS1naXQgYS9saWJjL3N0ZGxpYi9hdGV4aXQuYyBiL2xpYmMvc3RkbGliL2F0ZXhpdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViZjgyYmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGxpYi9hdGV4aXQuYwpAQCAtMCwwICsxLDIwOSBAQAorLyoJJE9wZW5CU0Q6IGF0ZXhpdC5jLHYgMS4xNCAyMDA3LzA5LzA1IDIwOjQ3OjQ3IGNobCBFeHAgJCAqLworLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMiBEYW5pZWwgSGFydG1laWVyCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTgorICogQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSAiYXRleGl0LmgiCisjaW5jbHVkZSAidGhyZWFkX3ByaXZhdGUuaCIKKworaW50IF9fYXRleGl0X2ludmFsaWQgPSAxOworc3RydWN0IGF0ZXhpdCAqX19hdGV4aXQ7CisKKy8qCisgKiBGdW5jdGlvbiBwb2ludGVycyBhcmUgc3RvcmVkIGluIGEgbGlua2VkIGxpc3Qgb2YgcGFnZXMuIFRoZSBsaXN0CisgKiBpcyBpbml0aWFsbHkgZW1wdHksIGFuZCBwYWdlcyBhcmUgYWxsb2NhdGVkIG9uIGRlbWFuZC4gVGhlIGZpcnN0CisgKiBmdW5jdGlvbiBwb2ludGVyIGluIHRoZSBmaXJzdCBhbGxvY2F0ZWQgcGFnZSAodGhlIGxhc3Qgb25lIGluCisgKiB0aGUgbGlua2VkIGxpc3QpIGlzIHJlc2VydmVkIGZvciB0aGUgY2xlYW51cCBmdW5jdGlvbi4KKyAqCisgKiBPdXRzaWRlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zLCBhbGwgcGFnZXMgYXJlIG1wcm90ZWN0KCknZWQKKyAqIHRvIHByZXZlbnQgdW5pbnRlbnRpb25hbC9tYWxpY2lvdXMgY29ycnVwdGlvbi4KKyAqLworCisvKgorICogUmVnaXN0ZXIgYSBmdW5jdGlvbiB0byBiZSBwZXJmb3JtZWQgYXQgZXhpdCBvciB3aGVuIGEgc2hhcmVkIG9iamVjdAorICogd2l0aCB0aGUgZ2l2ZW4gZHNvIGhhbmRsZSBpcyB1bmxvYWRlZCBkeW5hbWljYWxseS4gIEFsc28gdXNlZCBhcworICogdGhlIGJhY2tlbmQgZm9yIGF0ZXhpdCgpLiAgRm9yIG1vcmUgaW5mbyBvbiB0aGlzIEFQSSwgc2VlOgorICoKKyAqCWh0dHA6Ly93d3cuY29kZXNvdXJjZXJ5LmNvbS9jeHgtYWJpL2FiaS5odG1sI2Rzby1kdG9yCisgKi8KK2ludAorX19jeGFfYXRleGl0KHZvaWQgKCpmdW5jKSh2b2lkICopLCB2b2lkICphcmcsIHZvaWQgKmRzbykKK3sKKwlzdHJ1Y3QgYXRleGl0ICpwID0gX19hdGV4aXQ7CisJc3RydWN0IGF0ZXhpdF9mbiAqZm5wOworCWludCBwZ3NpemUgPSBnZXRwYWdlc2l6ZSgpOworCWludCByZXQgPSAtMTsKKworCWlmIChwZ3NpemUgPCAoaW50KXNpemVvZigqcCkpCisJCXJldHVybiAoLTEpOworCV9BVEVYSVRfTE9DSygpOworCXAgPSBfX2F0ZXhpdDsKKwlpZiAocCAhPSBOVUxMKSB7CisJCWlmIChwLT5pbmQgKyAxID49IHAtPm1heCkKKwkJCXAgPSBOVUxMOworCQllbHNlIGlmIChtcHJvdGVjdChwLCBwZ3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpKQorCQkJZ290byB1bmxvY2s7CisJfQorCWlmIChwID09IE5VTEwpIHsKKwkJcCA9IG1tYXAoTlVMTCwgcGdzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAorCQkgICAgTUFQX0FOT04gfCBNQVBfUFJJVkFURSwgLTEsIDApOworCQlpZiAocCA9PSBNQVBfRkFJTEVEKQorCQkJZ290byB1bmxvY2s7CisJCWlmIChfX2F0ZXhpdCA9PSBOVUxMKSB7CisJCQltZW1zZXQoJnAtPmZuc1swXSwgMCwgc2l6ZW9mKHAtPmZuc1swXSkpOworCQkJcC0+aW5kID0gMTsKKwkJfSBlbHNlCisJCQlwLT5pbmQgPSAwOworCQlwLT5tYXggPSAocGdzaXplIC0gKChjaGFyICopJnAtPmZuc1swXSAtIChjaGFyICopcCkpIC8KKwkJICAgIHNpemVvZihwLT5mbnNbMF0pOworCQlwLT5uZXh0ID0gX19hdGV4aXQ7CisJCV9fYXRleGl0ID0gcDsKKwkJaWYgKF9fYXRleGl0X2ludmFsaWQpCisJCQlfX2F0ZXhpdF9pbnZhbGlkID0gMDsKKwl9CisJZm5wID0gJnAtPmZuc1twLT5pbmQrK107CisJZm5wLT5mbl9wdHIuY3hhX2Z1bmMgPSBmdW5jOworCWZucC0+Zm5fYXJnID0gYXJnOworCWZucC0+Zm5fZHNvID0gZHNvOworCWlmIChtcHJvdGVjdChwLCBwZ3NpemUsIFBST1RfUkVBRCkpCisJCWdvdG8gdW5sb2NrOworCXJldCA9IDA7Cit1bmxvY2s6CisJX0FURVhJVF9VTkxPQ0soKTsKKwlyZXR1cm4gKHJldCk7Cit9CisKKy8qCisgKiBSZWdpc3RlciBhIGZ1bmN0aW9uIHRvIGJlIHBlcmZvcm1lZCBhdCBleGl0LgorICovCitpbnQKK2F0ZXhpdCh2b2lkICgqZnVuYykodm9pZCkpCit7CisJcmV0dXJuIChfX2N4YV9hdGV4aXQoKHZvaWQgKCopKHZvaWQgKikpZnVuYywgTlVMTCwgTlVMTCkpOworfQorCisvKgorICogQ2FsbCBhbGwgaGFuZGxlcnMgcmVnaXN0ZXJlZCB3aXRoIF9fY3hhX2F0ZXhpdCgpIGZvciB0aGUgc2hhcmVkCisgKiBvYmplY3Qgb3duaW5nICdkc28nLgorICogTm90ZTogaWYgJ2RzbycgaXMgTlVMTCwgdGhlbiBhbGwgcmVtYWluaW5nIGhhbmRsZXJzIGFyZSBjYWxsZWQuCisgKi8KK3ZvaWQKK19fY3hhX2ZpbmFsaXplKHZvaWQgKmRzbykKK3sKKwlzdHJ1Y3QgYXRleGl0ICpwLCAqcTsKKwlzdHJ1Y3QgYXRleGl0X2ZuIGZuOworCWludCBuLCBwZ3NpemUgPSBnZXRwYWdlc2l6ZSgpOworCXN0YXRpYyBpbnQgY2FsbF9kZXB0aDsKKworCWlmIChfX2F0ZXhpdF9pbnZhbGlkKQorCQlyZXR1cm47CisKKwljYWxsX2RlcHRoKys7CisKKwlmb3IgKHAgPSBfX2F0ZXhpdDsgcCAhPSBOVUxMOyBwID0gcC0+bmV4dCkgeworCQlmb3IgKG4gPSBwLT5pbmQ7IC0tbiA+PSAwOykgeworCQkJaWYgKHAtPmZuc1tuXS5mbl9wdHIuY3hhX2Z1bmMgPT0gTlVMTCkKKwkJCQljb250aW51ZTsJLyogYWxyZWFkeSBjYWxsZWQgKi8KKwkJCWlmIChkc28gIT0gTlVMTCAmJiBkc28gIT0gcC0+Zm5zW25dLmZuX2RzbykKKwkJCQljb250aW51ZTsJLyogd3JvbmcgRFNPICovCisKKwkJCS8qCisJCQkgKiBNYXJrIGhhbmRsZXIgYXMgaGF2aW5nIGJlZW4gYWxyZWFkeSBjYWxsZWQgdG8gYXZvaWQKKwkJCSAqIGR1cGVzIGFuZCBsb29wcywgdGhlbiBjYWxsIHRoZSBhcHByb3ByaWF0ZSBmdW5jdGlvbi4KKwkJCSAqLworCQkJZm4gPSBwLT5mbnNbbl07CisJCQlpZiAobXByb3RlY3QocCwgcGdzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKSA9PSAwKSB7CisJCQkJcC0+Zm5zW25dLmZuX3B0ci5jeGFfZnVuYyA9IE5VTEw7CisJCQkJbXByb3RlY3QocCwgcGdzaXplLCBQUk9UX1JFQUQpOworCQkJfQorCQkJaWYgKGRzbyAhPSBOVUxMKQorCQkJCSgqZm4uZm5fcHRyLmN4YV9mdW5jKShmbi5mbl9hcmcpOworCQkJZWxzZQorCQkJCSgqZm4uZm5fcHRyLnN0ZF9mdW5jKSgpOworCQl9CisJfQorCisJLyoKKwkgKiBJZiBjYWxsZWQgdmlhIGV4aXQoKSwgdW5tYXAgdGhlIHBhZ2VzIHNpbmNlIHdlIGhhdmUgbm93IHJ1bgorCSAqIGFsbCB0aGUgaGFuZGxlcnMuICBXZSBkZWZlciB0aGlzIHVudGlsIGNhbGxkZXB0aCA9PSAwIHNvIHRoYXQKKwkgKiB3ZSBkb24ndCB1bm1hcCB0aGluZ3MgcHJlbWF0dXJlbHkgaWYgY2FsbGVkIHJlY3Vyc2l2ZWx5LgorCSAqLworCWlmIChkc28gPT0gTlVMTCAmJiAtLWNhbGxfZGVwdGggPT0gMCkgeworCQlmb3IgKHAgPSBfX2F0ZXhpdDsgcCAhPSBOVUxMOyApIHsKKwkJCXEgPSBwOworCQkJcCA9IHAtPm5leHQ7CisJCQltdW5tYXAocSwgcGdzaXplKTsKKwkJfQorCQlfX2F0ZXhpdCA9IE5VTEw7CisJfQorfQorCisvKgorICogUmVnaXN0ZXIgdGhlIGNsZWFudXAgZnVuY3Rpb24KKyAqLwordm9pZAorX19hdGV4aXRfcmVnaXN0ZXJfY2xlYW51cCh2b2lkICgqZnVuYykodm9pZCkpCit7CisJc3RydWN0IGF0ZXhpdCAqcDsKKwlpbnQgcGdzaXplID0gZ2V0cGFnZXNpemUoKTsKKworCWlmIChwZ3NpemUgPCAoaW50KXNpemVvZigqcCkpCisJCXJldHVybjsKKwlfQVRFWElUX0xPQ0soKTsKKwlwID0gX19hdGV4aXQ7CisJd2hpbGUgKHAgIT0gTlVMTCAmJiBwLT5uZXh0ICE9IE5VTEwpCisJCXAgPSBwLT5uZXh0OworCWlmIChwID09IE5VTEwpIHsKKwkJcCA9IG1tYXAoTlVMTCwgcGdzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAorCQkgICAgTUFQX0FOT04gfCBNQVBfUFJJVkFURSwgLTEsIDApOworCQlpZiAocCA9PSBNQVBfRkFJTEVEKQorCQkJZ290byB1bmxvY2s7CisJCXAtPmluZCA9IDE7CisJCXAtPm1heCA9IChwZ3NpemUgLSAoKGNoYXIgKikmcC0+Zm5zWzBdIC0gKGNoYXIgKilwKSkgLworCQkgICAgc2l6ZW9mKHAtPmZuc1swXSk7CisJCXAtPm5leHQgPSBOVUxMOworCQlfX2F0ZXhpdCA9IHA7CisJCWlmIChfX2F0ZXhpdF9pbnZhbGlkKQorCQkJX19hdGV4aXRfaW52YWxpZCA9IDA7CisJfSBlbHNlIHsKKwkJaWYgKG1wcm90ZWN0KHAsIHBnc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSkpCisJCQlnb3RvIHVubG9jazsKKwl9CisJcC0+Zm5zWzBdLmZuX3B0ci5zdGRfZnVuYyA9IGZ1bmM7CisJcC0+Zm5zWzBdLmZuX2FyZyA9IE5VTEw7CisJcC0+Zm5zWzBdLmZuX2RzbyA9IE5VTEw7CisJbXByb3RlY3QocCwgcGdzaXplLCBQUk9UX1JFQUQpOwordW5sb2NrOgorCV9BVEVYSVRfVU5MT0NLKCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0ZGxpYi9hdGV4aXQuaCBiL2xpYmMvc3RkbGliL2F0ZXhpdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMjM1NjUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGxpYi9hdGV4aXQuaApAQCAtMCwwICsxLDUxIEBACisvKgkkT3BlbkJTRDogYXRleGl0LmgsdiAxLjcgMjAwNy8wOS8wMyAxNDo0MDoxNiBtaWxsZXJ0IEV4cCAkICovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIgRGFuaWVsIEhhcnRtZWllcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4KKyAqIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICovCisKK3N0cnVjdCBhdGV4aXQgeworCXN0cnVjdCBhdGV4aXQgKm5leHQ7CQkvKiBuZXh0IGluIGxpc3QgKi8KKwlpbnQgaW5kOwkJCS8qIG5leHQgaW5kZXggaW4gdGhpcyB0YWJsZSAqLworCWludCBtYXg7CQkJLyogbWF4IGVudHJpZXMgPj0gQVRFWElUX1NJWkUgKi8KKwlzdHJ1Y3QgYXRleGl0X2ZuIHsKKwkJdW5pb24geworCQkJdm9pZCAoKnN0ZF9mdW5jKSh2b2lkKTsKKwkJCXZvaWQgKCpjeGFfZnVuYykodm9pZCAqKTsKKwkJfSBmbl9wdHI7CisJCXZvaWQgKmZuX2FyZzsJCS8qIGFyZ3VtZW50IGZvciBDWEEgY2FsbGJhY2sgKi8KKwkJdm9pZCAqZm5fZHNvOwkJLyogc2hhcmVkIG1vZHVsZSBoYW5kbGUgKi8KKwl9IGZuc1sxXTsJCQkvKiB0aGUgdGFibGUgaXRzZWxmICovCit9OworCitleHRlcm4gaW50IF9fYXRleGl0X2ludmFsaWQ7CitleHRlcm4gc3RydWN0IGF0ZXhpdCAqX19hdGV4aXQ7CQkvKiBwb2ludHMgdG8gaGVhZCBvZiBMSUZPIHN0YWNrICovCisKK2ludAlfX2N4YV9hdGV4aXQodm9pZCAoKikodm9pZCAqKSwgdm9pZCAqLCB2b2lkICopOwordm9pZAlfX2N4YV9maW5hbGl6ZSh2b2lkICopOwpkaWZmIC0tZ2l0IGEvbGliYy9zdGRsaWIvYXRvaS5jIGIvbGliYy9zdGRsaWIvYXRvaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhNjU1NDMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGxpYi9hdG9pLmMKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPGludHR5cGVzLmg+CisKK2ludCAgYXRvaShjb25zdCBjaGFyKiAgcykKK3sKKyAgICByZXR1cm4gKGludClzdHJ0b2ltYXgocywgTlVMTCwgMTApOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRsaWIvYXRvbC5jIGIvbGliYy9zdGRsaWIvYXRvbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzZGMwNWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGxpYi9hdG9sLmMKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPGludHR5cGVzLmg+CisKK2xvbmcgIGF0b2woY29uc3QgY2hhciogIHMpCit7CisgICAgcmV0dXJuIChsb25nKXN0cnRvaW1heChzLCBOVUxMLCAxMCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0ZGxpYi9hdG9sbC5jIGIvbGliYy9zdGRsaWIvYXRvbGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTM4NzhmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRsaWIvYXRvbGwuYwpAQCAtMCwwICsxLDMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKworbG9uZyBsb25nIGF0b2xsKGNvbnN0IGNoYXIqICBzKQoreworICAgIHJldHVybiAobG9uZyBsb25nKXN0cnRvaW1heChzLCBOVUxMLCAxMCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0ZGxpYi9ic2VhcmNoLmMgYi9saWJjL3N0ZGxpYi9ic2VhcmNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE5M2QyNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkbGliL2JzZWFyY2guYwpAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAxOTkwIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworLyoKKyAqIFBlcmZvcm0gYSBiaW5hcnkgc2VhcmNoLgorICoKKyAqIFRoZSBjb2RlIGJlbG93IGlzIGEgYml0IHNuZWFreS4gIEFmdGVyIGEgY29tcGFyaXNvbiBmYWlscywgd2UKKyAqIGRpdmlkZSB0aGUgd29yayBpbiBoYWxmIGJ5IG1vdmluZyBlaXRoZXIgbGVmdCBvciByaWdodC4gSWYgbGltCisgKiBpcyBvZGQsIG1vdmluZyBsZWZ0IHNpbXBseSBpbnZvbHZlcyBoYWx2aW5nIGxpbTogZS5nLiwgd2hlbiBsaW0KKyAqIGlzIDUgd2UgbG9vayBhdCBpdGVtIDIsIHNvIHdlIGNoYW5nZSBsaW0gdG8gMiBzbyB0aGF0IHdlIHdpbGwKKyAqIGxvb2sgYXQgaXRlbXMgMCAmIDEuICBJZiBsaW0gaXMgZXZlbiwgdGhlIHNhbWUgYXBwbGllcy4gIElmIGxpbQorICogaXMgb2RkLCBtb3ZpbmcgcmlnaHQgYWdhaW4gaW52b2xlcyBoYWx2aW5nIGxpbSwgdGhpcyB0aW1lIG1vdmluZworICogdGhlIGJhc2UgdXAgb25lIGl0ZW0gcGFzdCBwOiBlLmcuLCB3aGVuIGxpbSBpcyA1IHdlIGNoYW5nZSBiYXNlCisgKiB0byBpdGVtIDMgYW5kIG1ha2UgbGltIDIgc28gdGhhdCB3ZSB3aWxsIGxvb2sgYXQgaXRlbXMgMyBhbmQgNC4KKyAqIElmIGxpbSBpcyBldmVuLCBob3dldmVyLCB3ZSBoYXZlIHRvIHNocmluayBpdCBieSBvbmUgYmVmb3JlCisgKiBoYWx2aW5nOiBlLmcuLCB3aGVuIGxpbSBpcyA0LCB3ZSBzdGlsbCBsb29rZWQgYXQgaXRlbSAyLCBzbyB3ZQorICogaGF2ZSB0byBtYWtlIGxpbSAzLCB0aGVuIGhhbHZlLCBvYnRhaW5pbmcgMSwgc28gdGhhdCB3ZSB3aWxsIG9ubHkKKyAqIGxvb2sgYXQgaXRlbSAzLgorICovCit2b2lkICoKK2JzZWFyY2goY29uc3Qgdm9pZCAqa2V5LCBjb25zdCB2b2lkICpiYXNlMCwgc2l6ZV90IG5tZW1iLCBzaXplX3Qgc2l6ZSwKKyAgICBpbnQgKCpjb21wYXIpKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSkKK3sKKwljb25zdCBjaGFyICpiYXNlID0gYmFzZTA7CisJaW50IGxpbSwgY21wOworCWNvbnN0IHZvaWQgKnA7CisKKwlmb3IgKGxpbSA9IG5tZW1iOyBsaW0gIT0gMDsgbGltID4+PSAxKSB7CisJCXAgPSBiYXNlICsgKGxpbSA+PiAxKSAqIHNpemU7CisJCWNtcCA9ICgqY29tcGFyKShrZXksIHApOworCQlpZiAoY21wID09IDApCisJCQlyZXR1cm4gKCh2b2lkICopcCk7CisJCWlmIChjbXAgPiAwKSB7CS8qIGtleSA+IHA6IG1vdmUgcmlnaHQgKi8KKwkJCWJhc2UgPSAoY2hhciAqKXAgKyBzaXplOworCQkJbGltLS07CisJCX0gLyogZWxzZSBtb3ZlIGxlZnQgKi8KKwl9CisJcmV0dXJuIChOVUxMKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkbGliL2N0eXBlXy5jIGIvbGliYy9zdGRsaWIvY3R5cGVfLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU5YWYzZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkbGliL2N0eXBlXy5jCkBAIC0wLDAgKzEsMTU4IEBACisvKgkkT3BlbkJTRDogY3R5cGVfLmMsdiAxLjkgMjAwNS8wOC8wOCAwODowNTozMyBlc3BpZSBFeHAgJCAqLworLyoKKyAqIENvcHlyaWdodCAoYykgMTk4OSBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIChjKSBVTklYIFN5c3RlbSBMYWJvcmF0b3JpZXMsIEluYy4KKyAqIEFsbCBvciBzb21lIHBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIG1hdGVyaWFsIGxpY2Vuc2VkCisgKiB0byB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhIGJ5IEFtZXJpY2FuIFRlbGVwaG9uZSBhbmQgVGVsZWdyYXBoCisgKiBDby4gb3IgVW5peCBTeXN0ZW0gTGFib3JhdG9yaWVzLCBJbmMuIGFuZCBhcmUgcmVwcm9kdWNlZCBoZXJlaW4gd2l0aAorICogdGhlIHBlcm1pc3Npb24gb2YgVU5JWCBTeXN0ZW0gTGFib3JhdG9yaWVzLCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgImN0eXBlX3ByaXZhdGUuaCIKKworY29uc3QgY2hhciBfQ19jdHlwZV9bMSArIENUWVBFX05VTV9DSEFSU10gPSB7CisJMCwKKwlfQywJX0MsCV9DLAlfQywJX0MsCV9DLAlfQywJX0MsCisJX0MsCV9DfF9TLAlfQ3xfUywJX0N8X1MsCV9DfF9TLAlfQ3xfUywJX0MsCV9DLAorCV9DLAlfQywJX0MsCV9DLAlfQywJX0MsCV9DLAlfQywKKwlfQywJX0MsCV9DLAlfQywJX0MsCV9DLAlfQywJX0MsCisgICBfU3woY2hhcilfQiwJX1AsCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsCisJX1AsCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLAorCV9OLAlfTiwJX04sCV9OLAlfTiwJX04sCV9OLAlfTiwKKwlfTiwJX04sCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsCisJX1AsCV9VfF9YLAlfVXxfWCwJX1V8X1gsCV9VfF9YLAlfVXxfWCwJX1V8X1gsCV9VLAorCV9VLAlfVSwJX1UsCV9VLAlfVSwJX1UsCV9VLAlfVSwKKwlfVSwJX1UsCV9VLAlfVSwJX1UsCV9VLAlfVSwJX1UsCisJX1UsCV9VLAlfVSwJX1AsCV9QLAlfUCwJX1AsCV9QLAorCV9QLAlfTHxfWCwJX0x8X1gsCV9MfF9YLAlfTHxfWCwJX0x8X1gsCV9MfF9YLAlfTCwKKwlfTCwJX0wsCV9MLAlfTCwJX0wsCV9MLAlfTCwJX0wsCisJX0wsCV9MLAlfTCwJX0wsCV9MLAlfTCwJX0wsCV9MLAorLyogZGV0ZXJtaW5lIHByaW50YWJpbGl0eSBiYXNlZCBvbiB0aGUgSVMwIDg4NTkgOC1iaXQgc3RhbmRhcmQgKi8KKwlfTCwJX0wsCV9MLAlfUCwJX1AsCV9QLAlfUCwJX0MsCisKKwlfQywJX0MsCV9DLAlfQywJX0MsCV9DLAlfQywJX0MsIC8qIDgwICovCisJX0MsCV9DLAlfQywJX0MsCV9DLAlfQywJX0MsCV9DLCAvKiA4OCAqLworCV9DLAlfQywJX0MsCV9DLAlfQywJX0MsCV9DLAlfQywgLyogOTAgKi8KKwlfQywJX0MsCV9DLAlfQywJX0MsCV9DLAlfQywJX0MsIC8qIDk4ICovCisJX1AsCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLCAvKiBBMCAqLworCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLAlfUCwgLyogQTggKi8KKwlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsIC8qIEIwICovCisJX1AsCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLCAvKiBCOCAqLworCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLAlfUCwgLyogQzAgKi8KKwlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsIC8qIEM4ICovCisJX1AsCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLCAvKiBEMCAqLworCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLAlfUCwgLyogRDggKi8KKwlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsIC8qIEUwICovCisJX1AsCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLCAvKiBFOCAqLworCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLAlfUCwgLyogRjAgKi8KKwlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AgIC8qIEY4ICovCit9OworCitjb25zdCBjaGFyICpfY3R5cGVfID0gX0NfY3R5cGVfOworCisKKyNpZiAxIC8qIG5kZWYgTkRFQlVHICovCitpbnQgaXNhbG51bShpbnQgYykKK3sKKwlyZXR1cm4gKGMgPT0gLTEgPyAwIDogKChfY3R5cGVfICsgMSlbKHVuc2lnbmVkIGNoYXIpY10gJiAoX1V8X0x8X04pKSk7Cit9CisKK2ludCBpc2FscGhhKGludCBjKQoreworCXJldHVybiAoYyA9PSAtMSA/IDAgOiAoKF9jdHlwZV8gKyAxKVsodW5zaWduZWQgY2hhciljXSAmIChfVXxfTCkpKTsKK30KKworaW50IGlzY250cmwoaW50IGMpCit7CisJcmV0dXJuIChjID09IC0xID8gMCA6ICgoX2N0eXBlXyArIDEpWyh1bnNpZ25lZCBjaGFyKWNdICYgX0MpKTsKK30KKworaW50IGlzZGlnaXQoaW50IGMpCit7CisJcmV0dXJuIChjID09IC0xID8gMCA6ICgoX2N0eXBlXyArIDEpWyh1bnNpZ25lZCBjaGFyKWNdICYgX04pKTsKK30KKworaW50IGlzZ3JhcGgoaW50IGMpCit7CisJcmV0dXJuIChjID09IC0xID8gMCA6ICgoX2N0eXBlXyArIDEpWyh1bnNpZ25lZCBjaGFyKWNdICYgKF9QfF9VfF9MfF9OKSkpOworfQorCitpbnQgaXNsb3dlcihpbnQgYykKK3sKKwlyZXR1cm4gKGMgPT0gLTEgPyAwIDogKChfY3R5cGVfICsgMSlbKHVuc2lnbmVkIGNoYXIpY10gJiBfTCkpOworfQorCitpbnQgaXNwcmludChpbnQgYykKK3sKKwlyZXR1cm4gKGMgPT0gLTEgPyAwIDogKChfY3R5cGVfICsgMSlbKHVuc2lnbmVkIGNoYXIpY10gJiAoX1B8X1V8X0x8X058X0IpKSk7Cit9CisKK2ludCBpc3B1bmN0KGludCBjKQoreworCXJldHVybiAoYyA9PSAtMSA/IDAgOiAoKF9jdHlwZV8gKyAxKVsodW5zaWduZWQgY2hhciljXSAmIF9QKSk7Cit9CisKK2ludCBpc3NwYWNlKGludCBjKQoreworCXJldHVybiAoYyA9PSAtMSA/IDAgOiAoKF9jdHlwZV8gKyAxKVsodW5zaWduZWQgY2hhciljXSAmIF9TKSk7Cit9CisKK2ludCBpc3VwcGVyKGludCBjKQoreworCXJldHVybiAoYyA9PSAtMSA/IDAgOiAoKF9jdHlwZV8gKyAxKVsodW5zaWduZWQgY2hhciljXSAmIF9VKSk7Cit9CisKK2ludCBpc3hkaWdpdChpbnQgYykKK3sKKwlyZXR1cm4gKGMgPT0gLTEgPyAwIDogKChfY3R5cGVfICsgMSlbKHVuc2lnbmVkIGNoYXIpY10gJiAoX058X1gpKSk7Cit9CisKKyNpZiBfX0JTRF9WSVNJQkxFIHx8IF9fSVNPX0NfVklTSUJMRSA+PSAxOTk5IHx8IF9fUE9TSVhfVklTSUJMRSA+IDIwMDExMiBcCisgICAgfHwgX19YUEdfVklTSUJMRSA+IDYwMAoraW50IGlzYmxhbmsoaW50IGMpCit7CisJcmV0dXJuIChjID09ICcgJyB8fCBjID09ICdcdCcpOworfQorI2VuZGlmCisKKyNpZiBfX0JTRF9WSVNJQkxFIHx8IF9fWFBHX1ZJU0lCTEUKK2ludCBpc2FzY2lpKGludCBjKQoreworCXJldHVybiAoKHVuc2lnbmVkIGludCljIDw9IDAxNzcpOworfQorCitpbnQgdG9hc2NpaShpbnQgYykKK3sKKwlyZXR1cm4gKGMgJiAwMTc3KTsKK30KKworI2VuZGlmIC8qIF9fQlNEX1ZJU0lCTEUgfHwgX19YUEdfVklTSUJMRSAqLworCisjZW5kaWYgLyogIU5EQkVVRyAqLworCmRpZmYgLS1naXQgYS9saWJjL3N0ZGxpYi9kaXYuYyBiL2xpYmMvc3RkbGliL2Rpdi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3YWMyZGIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGxpYi9kaXYuYwpAQCAtMCwwICsxLDcxIEBACisvKgkkT3BlbkJTRDogZGl2LmMsdiAxLjUgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLworLyoKKyAqIENvcHlyaWdodCAoYykgMTk5MCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CQkvKiBkaXZfdCAqLworCitkaXZfdAorZGl2KGludCBudW0sIGludCBkZW5vbSkKK3sKKwlkaXZfdCByOworCisJci5xdW90ID0gbnVtIC8gZGVub207CisJci5yZW0gPSBudW0gJSBkZW5vbTsKKwkvKgorCSAqIFRoZSBBTlNJIHN0YW5kYXJkIHNheXMgdGhhdCB8ci5xdW90fCA8PSB8bi9kfCwgd2hlcmUKKwkgKiBuL2QgaXMgdG8gYmUgY29tcHV0ZWQgaW4gaW5maW5pdGUgcHJlY2lzaW9uLiAgSW4gb3RoZXIKKwkgKiB3b3Jkcywgd2Ugc2hvdWxkIGFsd2F5cyB0cnVuY2F0ZSB0aGUgcXVvdGllbnQgdG93YXJkcworCSAqIDAsIG5ldmVyIC1pbmZpbml0eS4KKwkgKgorCSAqIE1hY2hpbmUgZGl2aXNpb24gYW5kIHJlbWFpbmVyIG1heSB3b3JrIGVpdGhlciB3YXkgd2hlbgorCSAqIG9uZSBvciBib3RoIG9mIG4gb3IgZCBpcyBuZWdhdGl2ZS4gIElmIG9ubHkgb25lIGlzCisJICogbmVnYXRpdmUgYW5kIHIucXVvdCBoYXMgYmVlbiB0cnVuY2F0ZWQgdG93YXJkcyAtaW5mLAorCSAqIHIucmVtIHdpbGwgaGF2ZSB0aGUgc2FtZSBzaWduIGFzIGRlbm9tIGFuZCB0aGUgb3Bwb3NpdGUKKwkgKiBzaWduIG9mIG51bTsgaWYgYm90aCBhcmUgbmVnYXRpdmUgYW5kIHIucXVvdCBoYXMgYmVlbgorCSAqIHRydW5jYXRlZCB0b3dhcmRzIC1pbmYsIHIucmVtIHdpbGwgYmUgcG9zaXRpdmUgKHdpbGwKKwkgKiBoYXZlIHRoZSBvcHBvc2l0ZSBzaWduIG9mIG51bSkuICBUaGVzZSBhcmUgY29uc2lkZXJlZAorCSAqIGB3cm9uZycuCisJICoKKwkgKiBJZiBib3RoIGFyZSBudW0gYW5kIGRlbm9tIGFyZSBwb3NpdGl2ZSwgciB3aWxsIGFsd2F5cworCSAqIGJlIHBvc2l0aXZlLgorCSAqCisJICogVGhpcyBhbGwgYm9pbHMgZG93biB0bzoKKwkgKglpZiBudW0gPj0gMCwgYnV0IHIucmVtIDwgMCwgd2UgZ290IHRoZSB3cm9uZyBhbnN3ZXIuCisJICogSW4gdGhhdCBjYXNlLCB0byBnZXQgdGhlIHJpZ2h0IGFuc3dlciwgYWRkIDEgdG8gci5xdW90IGFuZAorCSAqIHN1YnRyYWN0IGRlbm9tIGZyb20gci5yZW0uCisJICovCisJaWYgKG51bSA+PSAwICYmIHIucmVtIDwgMCkgeworCQlyLnF1b3QrKzsKKwkJci5yZW0gLT0gZGVub207CisJfQorCXJldHVybiAocik7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0ZGxpYi9leGl0LmMgYi9saWJjL3N0ZGxpYi9leGl0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNmZTNkMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkbGliL2V4aXQuYwpAQCAtMCwwICsxLDU5IEBACisvKgkkT3BlbkJTRDogZXhpdC5jLHYgMS4xMiAyMDA3LzA5LzAzIDE0OjQwOjE2IG1pbGxlcnQgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlICJhdGV4aXQuaCIKKyNpbmNsdWRlICJ0aHJlYWRfcHJpdmF0ZS5oIgorCisvKgorICogVGhpcyB2YXJpYWJsZSBpcyB6ZXJvIHVudGlsIGEgcHJvY2VzcyBoYXMgY3JlYXRlZCBhIHRocmVhZC4KKyAqIEl0IGlzIHVzZWQgdG8gYXZvaWQgY2FsbGluZyBsb2NraW5nIGZ1bmN0aW9ucyBpbiBsaWJjIHdoZW4gdGhleQorICogYXJlIG5vdCByZXF1aXJlZC4gQnkgZGVmYXVsdCwgbGliYyBpcyBpbnRlbmRlZCB0byBiZShjb21lKQorICogdGhyZWFkLXNhZmUsIGJ1dCB3aXRob3V0IGEgKHNpZ25pZmljYW50KSBwZW5hbHR5IHRvIG5vbi10aHJlYWRlZAorICogcHJvY2Vzc2VzLgorICovCitpbnQgICAgIF9faXN0aHJlYWRlZCAgICA9IDA7CisKKy8qCisgKiBFeGl0LCBmbHVzaGluZyBzdGRpbyBidWZmZXJzIGlmIG5lY2Vzc2FyeS4KKyAqLwordm9pZAorZXhpdChpbnQgc3RhdHVzKQoreworCS8qCisJICogQ2FsbCBmdW5jdGlvbnMgcmVnaXN0ZXJlZCBieSBhdGV4aXQoKSBvciBfY3hhX2F0ZXhpdCgpCisJICogKGluY2x1ZGluZyB0aGUgc3RkaW8gY2xlYW51cCByb3V0aW5lKSBhbmQgdGhlbiBfZXhpdCgpLgorCSAqLworCV9fY3hhX2ZpbmFsaXplKE5VTEwpOworCV9leGl0KHN0YXR1cyk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0ZGxpYi9nZXRlbnYuYyBiL2xpYmMvc3RkbGliL2dldGVudi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzYWJlMzAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGxpYi9nZXRlbnYuYwpAQCAtMCwwICsxLDgwIEBACisvKgkkT3BlbkJTRDogZ2V0ZW52LmMsdiAxLjggMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLworLyoKKyAqIENvcHlyaWdodCAoYykgMTk4NywgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworY2hhciAqX19maW5kZW52KGNvbnN0IGNoYXIgKm5hbWUsIGludCAqb2Zmc2V0KTsKKworLyoKKyAqIF9fZmluZGVudiAtLQorICoJUmV0dXJucyBwb2ludGVyIHRvIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBuYW1lLCBpZiBhbnksIGVsc2UgTlVMTC4KKyAqCVNldHMgb2Zmc2V0IHRvIGJlIHRoZSBvZmZzZXQgb2YgdGhlIG5hbWUvdmFsdWUgY29tYmluYXRpb24gaW4gdGhlCisgKgllbnZpcm9ubWVudGFsIGFycmF5LCBmb3IgdXNlIGJ5IHNldGVudigzKSBhbmQgdW5zZXRlbnYoMykuCisgKglFeHBsaWNpdGx5IHJlbW92ZXMgJz0nIGluIGFyZ3VtZW50IG5hbWUuCisgKgorICoJVGhpcyByb3V0aW5lICpzaG91bGQqIGJlIGEgc3RhdGljOyBkb24ndCB1c2UgaXQuCisgKi8KK2NoYXIgKgorX19maW5kZW52KGNvbnN0IGNoYXIgKm5hbWUsIGludCAqb2Zmc2V0KQoreworCWV4dGVybiBjaGFyICoqZW52aXJvbjsKKwlpbnQgbGVuLCBpOworCWNvbnN0IGNoYXIgKm5wOworCWNoYXIgKipwLCAqY3A7CisKKwlpZiAobmFtZSA9PSBOVUxMIHx8IGVudmlyb24gPT0gTlVMTCkKKwkJcmV0dXJuIChOVUxMKTsKKwlmb3IgKG5wID0gbmFtZTsgKm5wICYmICpucCAhPSAnPSc7ICsrbnApCisJCTsKKwlsZW4gPSBucCAtIG5hbWU7CisJZm9yIChwID0gZW52aXJvbjsgKGNwID0gKnApICE9IE5VTEw7ICsrcCkgeworCQlmb3IgKG5wID0gbmFtZSwgaSA9IGxlbjsgaSAmJiAqY3A7IGktLSkKKwkJCWlmICgqY3ArKyAhPSAqbnArKykKKwkJCQlicmVhazsKKwkJaWYgKGkgPT0gMCAmJiAqY3ArKyA9PSAnPScpIHsKKwkJCSpvZmZzZXQgPSBwIC0gZW52aXJvbjsKKwkJCXJldHVybiAoY3ApOworICAgIH0KKyAgfQorCXJldHVybiAoTlVMTCk7Cit9CisKKy8qCisgKiBnZXRlbnYgLS0KKyAqCVJldHVybnMgcHRyIHRvIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBuYW1lLCBpZiBhbnksIGVsc2UgTlVMTC4KKyAqLworY2hhciAqCitnZXRlbnYoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpbnQgb2Zmc2V0OworCisJcmV0dXJuIChfX2ZpbmRlbnYobmFtZSwgJm9mZnNldCkpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRsaWIvanJhbmQ0OC5jIGIvbGliYy9zdGRsaWIvanJhbmQ0OC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiOGM1OTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGxpYi9qcmFuZDQ4LmMKQEAgLTAsMCArMSwyMiBAQAorLyoJJE9wZW5CU0Q6IGpyYW5kNDguYyx2IDEuMyAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCisvKgorICogQ29weXJpZ2h0IChjKSAxOTkzIE1hcnRpbiBCaXJnbWVpZXIKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogWW91IG1heSByZWRpc3RyaWJ1dGUgdW5tb2RpZmllZCBvciBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGlzIHNvdXJjZQorICogY29kZSBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIGFuZCB0aGUKKyAqIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSByZXRhaW5lZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGBgYXMgaXMnJywgYW5kIGNvbWVzIHdpdGggbm8gd2FycmFudGllcworICogb2YgYW55IGtpbmQuIEkgc2hhbGwgaW4gbm8gZXZlbnQgYmUgbGlhYmxlIGZvciBhbnl0aGluZyB0aGF0IGhhcHBlbnMKKyAqIHRvIGFueW9uZS9hbnl0aGluZyB3aGVuIHVzaW5nIHRoaXMgc29mdHdhcmUuCisgKi8KKworI2luY2x1ZGUgInJhbmQ0OC5oIgorCitsb25nCitqcmFuZDQ4KHVuc2lnbmVkIHNob3J0IHhzZWVkWzNdKQoreworCV9fZG9yYW5kNDgoeHNlZWQpOworCXJldHVybiAoKGxvbmcpIHhzZWVkWzJdIDw8IDE2KSArIChsb25nKSB4c2VlZFsxXTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkbGliL2xkaXYuYyBiL2xpYmMvc3RkbGliL2xkaXYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzUwNjVmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRsaWIvbGRpdi5jCkBAIC0wLDAgKzEsNTAgQEAKKy8qCSRPcGVuQlNEOiBsZGl2LmMsdiAxLjUgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLworLyoKKyAqIENvcHlyaWdodCAoYykgMTk5MCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CQkvKiBsZGl2X3QgKi8KKworbGRpdl90CitsZGl2KGxvbmcgbnVtLCBsb25nIGRlbm9tKQoreworCWxkaXZfdCByOworCisJLyogc2VlIGRpdi5jIGZvciBjb21tZW50cyAqLworCisJci5xdW90ID0gbnVtIC8gZGVub207CisJci5yZW0gPSBudW0gJSBkZW5vbTsKKwlpZiAobnVtID49IDAgJiYgci5yZW0gPCAwKSB7CisJCXIucXVvdCsrOworCQlyLnJlbSAtPSBkZW5vbTsKKwl9CisJcmV0dXJuIChyKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkbGliL2xsZGl2LmMgYi9saWJjL3N0ZGxpYi9sbGRpdi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4ZDZjOTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGxpYi9sbGRpdi5jCkBAIC0wLDAgKzEsNTAgQEAKKy8qCSRPcGVuQlNEOiBsbGRpdi5jLHYgMS4xIDIwMDYvMDEvMTMgMTc6NTg6MDkgbWlsbGVydCBFeHAgJAkqLworLyoKKyAqIENvcHlyaWdodCAoYykgMTk5MCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CQkvKiBsbGRpdl90ICovCisKK2xsZGl2X3QKK2xsZGl2KGxvbmcgbG9uZyBudW0sIGxvbmcgbG9uZyBkZW5vbSkKK3sKKwlsbGRpdl90IHI7CisKKwkvKiBzZWUgZGl2LmMgZm9yIGNvbW1lbnRzICovCisKKwlyLnF1b3QgPSBudW0gLyBkZW5vbTsKKwlyLnJlbSA9IG51bSAlIGRlbm9tOworCWlmIChudW0gPj0gMCAmJiByLnJlbSA8IDApIHsKKwkJci5xdW90Kys7CisJCXIucmVtIC09IGRlbm9tOworCX0KKwlyZXR1cm4gKHIpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRsaWIvbG9jYWxlLmMgYi9saWJjL3N0ZGxpYi9sb2NhbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGFiYmU0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRsaWIvbG9jYWxlLmMKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPGxvY2FsZS5oPgorCitjaGFyKiBzZXRsb2NhbGUgKGludCBjYXRlZ29yeSwgY2hhciBjb25zdCAqbG9jYWxlKQoreworICAgIC8qIElOVEVOVElPTkFMOiB0aGVyZSBpcyBubyBsb2NhbGUgc3VwcG9ydCBpbiBCaW9uaWMgKi8KKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkbGliL2xyYW5kNDguYyBiL2xpYmMvc3RkbGliL2xyYW5kNDguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWJlYjg1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRsaWIvbHJhbmQ0OC5jCkBAIC0wLDAgKzEsMjQgQEAKKy8qCSRPcGVuQlNEOiBscmFuZDQ4LmMsdiAxLjMgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLworLyoKKyAqIENvcHlyaWdodCAoYykgMTk5MyBNYXJ0aW4gQmlyZ21laWVyCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFlvdSBtYXkgcmVkaXN0cmlidXRlIHVubW9kaWZpZWQgb3IgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhpcyBzb3VyY2UKKyAqIGNvZGUgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBhbmQgdGhlCisgKiBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgcmV0YWluZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBgYGFzIGlzJycsIGFuZCBjb21lcyB3aXRoIG5vIHdhcnJhbnRpZXMKKyAqIG9mIGFueSBraW5kLiBJIHNoYWxsIGluIG5vIGV2ZW50IGJlIGxpYWJsZSBmb3IgYW55dGhpbmcgdGhhdCBoYXBwZW5zCisgKiB0byBhbnlvbmUvYW55dGhpbmcgd2hlbiB1c2luZyB0aGlzIHNvZnR3YXJlLgorICovCisKKyNpbmNsdWRlICJyYW5kNDguaCIKKworZXh0ZXJuIHVuc2lnbmVkIHNob3J0IF9fcmFuZDQ4X3NlZWRbM107CisKK2xvbmcKK2xyYW5kNDgodm9pZCkKK3sKKwlfX2RvcmFuZDQ4KF9fcmFuZDQ4X3NlZWQpOworCXJldHVybiAoKGxvbmcpIF9fcmFuZDQ4X3NlZWRbMl0gPDwgMTUpICsgKChsb25nKSBfX3JhbmQ0OF9zZWVkWzFdID4+IDEpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRsaWIvbXJhbmQ0OC5jIGIvbGliYy9zdGRsaWIvbXJhbmQ0OC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3NzI2NGEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGxpYi9tcmFuZDQ4LmMKQEAgLTAsMCArMSwyNCBAQAorLyoJJE9wZW5CU0Q6IG1yYW5kNDguYyx2IDEuMyAyMDA1LzA4LzA4IDA4OjA1OjM3IGVzcGllIEV4cCAkICovCisvKgorICogQ29weXJpZ2h0IChjKSAxOTkzIE1hcnRpbiBCaXJnbWVpZXIKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogWW91IG1heSByZWRpc3RyaWJ1dGUgdW5tb2RpZmllZCBvciBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGlzIHNvdXJjZQorICogY29kZSBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIGFuZCB0aGUKKyAqIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSByZXRhaW5lZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGBgYXMgaXMnJywgYW5kIGNvbWVzIHdpdGggbm8gd2FycmFudGllcworICogb2YgYW55IGtpbmQuIEkgc2hhbGwgaW4gbm8gZXZlbnQgYmUgbGlhYmxlIGZvciBhbnl0aGluZyB0aGF0IGhhcHBlbnMKKyAqIHRvIGFueW9uZS9hbnl0aGluZyB3aGVuIHVzaW5nIHRoaXMgc29mdHdhcmUuCisgKi8KKworI2luY2x1ZGUgInJhbmQ0OC5oIgorCitleHRlcm4gdW5zaWduZWQgc2hvcnQgX19yYW5kNDhfc2VlZFszXTsKKworbG9uZworbXJhbmQ0OCh2b2lkKQoreworCV9fZG9yYW5kNDgoX19yYW5kNDhfc2VlZCk7CisJcmV0dXJuICgobG9uZykgX19yYW5kNDhfc2VlZFsyXSA8PCAxNikgKyAobG9uZykgX19yYW5kNDhfc2VlZFsxXTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkbGliL25yYW5kNDguYyBiL2xpYmMvc3RkbGliL25yYW5kNDguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWY1NDhjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRsaWIvbnJhbmQ0OC5jCkBAIC0wLDAgKzEsMjIgQEAKKy8qCSRPcGVuQlNEOiBucmFuZDQ4LmMsdiAxLjMgMjAwNS8wOC8wOCAwODowNTozNyBlc3BpZSBFeHAgJCAqLworLyoKKyAqIENvcHlyaWdodCAoYykgMTk5MyBNYXJ0aW4gQmlyZ21laWVyCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFlvdSBtYXkgcmVkaXN0cmlidXRlIHVubW9kaWZpZWQgb3IgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhpcyBzb3VyY2UKKyAqIGNvZGUgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBhbmQgdGhlCisgKiBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgcmV0YWluZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBgYGFzIGlzJycsIGFuZCBjb21lcyB3aXRoIG5vIHdhcnJhbnRpZXMKKyAqIG9mIGFueSBraW5kLiBJIHNoYWxsIGluIG5vIGV2ZW50IGJlIGxpYWJsZSBmb3IgYW55dGhpbmcgdGhhdCBoYXBwZW5zCisgKiB0byBhbnlvbmUvYW55dGhpbmcgd2hlbiB1c2luZyB0aGlzIHNvZnR3YXJlLgorICovCisKKyNpbmNsdWRlICJyYW5kNDguaCIKKworbG9uZworbnJhbmQ0OCh1bnNpZ25lZCBzaG9ydCB4c2VlZFszXSkKK3sKKwlfX2RvcmFuZDQ4KHhzZWVkKTsKKwlyZXR1cm4gKChsb25nKSB4c2VlZFsyXSA8PCAxNSkgKyAoKGxvbmcpIHhzZWVkWzFdID4+IDEpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRsaWIvcHV0ZW52LmMgYi9saWJjL3N0ZGxpYi9wdXRlbnYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2JlZGFlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRsaWIvcHV0ZW52LmMKQEAgLTAsMCArMSw1MCBAQAorLyoJJE9wZW5CU0Q6IHB1dGVudi5jLHYgMS41IDIwMDUvMDgvMDggMDg6MDU6MzcgZXNwaWUgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTg4LCAxOTkzCisgKiAgICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworaW50CitwdXRlbnYoY29uc3QgY2hhciAqc3RyKQoreworCWNoYXIgKnAsICplcXVhbDsKKwlpbnQgcnZhbDsKKworCWlmICgocCA9IHN0cmR1cChzdHIpKSA9PSBOVUxMKQorCQlyZXR1cm4gKC0xKTsKKwlpZiAoKGVxdWFsID0gc3RyY2hyKHAsICc9JykpID09IE5VTEwpIHsKKwkJKHZvaWQpZnJlZShwKTsKKwkJcmV0dXJuICgtMSk7CisgIH0KKwkqZXF1YWwgPSAnXDAnOworCXJ2YWwgPSBzZXRlbnYocCwgZXF1YWwgKyAxLCAxKTsKKwkodm9pZClmcmVlKHApOworCXJldHVybiAocnZhbCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0ZGxpYi9xc29ydC5jIGIvbGliYy9zdGRsaWIvcXNvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDY2OTYxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRsaWIvcXNvcnQuYwpAQCAtMCwwICsxLDE2MSBAQAorLyoJJE9wZW5CU0Q6IHFzb3J0LmMsdiAxLjEwIDIwMDUvMDgvMDggMDg6MDU6MzcgZXNwaWUgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkyLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitzdGF0aWMgX19pbmxpbmUgY2hhcgkqbWVkMyhjaGFyICosIGNoYXIgKiwgY2hhciAqLCBpbnQgKCopKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSk7CitzdGF0aWMgX19pbmxpbmUgdm9pZAkgc3dhcGZ1bmMoY2hhciAqLCBjaGFyICosIGludCwgaW50KTsKKworI2RlZmluZSBtaW4oYSwgYikJKGEpIDwgKGIpID8gYSA6IGIKKworLyoKKyAqIFFzb3J0IHJvdXRpbmUgZnJvbSBCZW50bGV5ICYgTWNJbHJveSdzICJFbmdpbmVlcmluZyBhIFNvcnQgRnVuY3Rpb24iLgorICovCisjZGVmaW5lIHN3YXBjb2RlKFRZUEUsIHBhcm1pLCBwYXJtaiwgbikgeyAJCVwKKwlsb25nIGkgPSAobikgLyBzaXplb2YgKFRZUEUpOyAJCQlcCisJVFlQRSAqcGkgPSAoVFlQRSAqKSAocGFybWkpOyAJCQlcCisJVFlQRSAqcGogPSAoVFlQRSAqKSAocGFybWopOyAJCQlcCisJZG8geyAJCQkJCQlcCisJCVRZUEUJdCA9ICpwaTsJCQlcCisJCSpwaSsrID0gKnBqOwkJCQlcCisJCSpwaisrID0gdDsJCQkJXAorICAgICAgICB9IHdoaWxlICgtLWkgPiAwKTsJCQkJXAorfQorCisjZGVmaW5lIFNXQVBJTklUKGEsIGVzKSBzd2FwdHlwZSA9ICgoY2hhciAqKWEgLSAoY2hhciAqKTApICUgc2l6ZW9mKGxvbmcpIHx8IFwKKwllcyAlIHNpemVvZihsb25nKSA/IDIgOiBlcyA9PSBzaXplb2YobG9uZyk/IDAgOiAxOworCitzdGF0aWMgX19pbmxpbmUgdm9pZAorc3dhcGZ1bmMoY2hhciAqYSwgY2hhciAqYiwgaW50IG4sIGludCBzd2FwdHlwZSkKK3sKKwlpZiAoc3dhcHR5cGUgPD0gMSkgCisJCXN3YXBjb2RlKGxvbmcsIGEsIGIsIG4pCisJZWxzZQorCQlzd2FwY29kZShjaGFyLCBhLCBiLCBuKQorfQorCisjZGVmaW5lIHN3YXAoYSwgYikJCQkJCVwKKwlpZiAoc3dhcHR5cGUgPT0gMCkgewkJCQlcCisJCWxvbmcgdCA9ICoobG9uZyAqKShhKTsJCQlcCisJCSoobG9uZyAqKShhKSA9ICoobG9uZyAqKShiKTsJCVwKKwkJKihsb25nICopKGIpID0gdDsJCQlcCisJfSBlbHNlCQkJCQkJXAorCQlzd2FwZnVuYyhhLCBiLCBlcywgc3dhcHR5cGUpCisKKyNkZWZpbmUgdmVjc3dhcChhLCBiLCBuKSAJaWYgKChuKSA+IDApIHN3YXBmdW5jKGEsIGIsIG4sIHN3YXB0eXBlKQorCitzdGF0aWMgX19pbmxpbmUgY2hhciAqCittZWQzKGNoYXIgKmEsIGNoYXIgKmIsIGNoYXIgKmMsIGludCAoKmNtcCkoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKQoreworCXJldHVybiBjbXAoYSwgYikgPCAwID8KKwkgICAgICAgKGNtcChiLCBjKSA8IDAgPyBiIDogKGNtcChhLCBjKSA8IDAgPyBjIDogYSApKQorICAgICAgICAgICAgICA6KGNtcChiLCBjKSA+IDAgPyBiIDogKGNtcChhLCBjKSA8IDAgPyBhIDogYyApKTsKK30KKwordm9pZAorcXNvcnQodm9pZCAqYWEsIHNpemVfdCBuLCBzaXplX3QgZXMsIGludCAoKmNtcCkoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKQoreworCWNoYXIgKnBhLCAqcGIsICpwYywgKnBkLCAqcGwsICpwbSwgKnBuOworCWludCBkLCByLCBzd2FwdHlwZSwgc3dhcF9jbnQ7CisJY2hhciAqYSA9IGFhOworCitsb29wOglTV0FQSU5JVChhLCBlcyk7CisJc3dhcF9jbnQgPSAwOworCWlmIChuIDwgNykgeworCQlmb3IgKHBtID0gKGNoYXIgKilhICsgZXM7IHBtIDwgKGNoYXIgKikgYSArIG4gKiBlczsgcG0gKz0gZXMpCisJCQlmb3IgKHBsID0gcG07IHBsID4gKGNoYXIgKikgYSAmJiBjbXAocGwgLSBlcywgcGwpID4gMDsKKwkJCSAgICAgcGwgLT0gZXMpCisJCQkJc3dhcChwbCwgcGwgLSBlcyk7CisJCXJldHVybjsKKwl9CisJcG0gPSAoY2hhciAqKWEgKyAobiAvIDIpICogZXM7CisJaWYgKG4gPiA3KSB7CisJCXBsID0gKGNoYXIgKilhOworCQlwbiA9IChjaGFyICopYSArIChuIC0gMSkgKiBlczsKKwkJaWYgKG4gPiA0MCkgeworCQkJZCA9IChuIC8gOCkgKiBlczsKKwkJCXBsID0gbWVkMyhwbCwgcGwgKyBkLCBwbCArIDIgKiBkLCBjbXApOworCQkJcG0gPSBtZWQzKHBtIC0gZCwgcG0sIHBtICsgZCwgY21wKTsKKwkJCXBuID0gbWVkMyhwbiAtIDIgKiBkLCBwbiAtIGQsIHBuLCBjbXApOworCQl9CisJCXBtID0gbWVkMyhwbCwgcG0sIHBuLCBjbXApOworCX0KKwlzd2FwKGEsIHBtKTsKKwlwYSA9IHBiID0gKGNoYXIgKilhICsgZXM7CisgICAgCisJcGMgPSBwZCA9IChjaGFyICopYSArIChuIC0gMSkgKiBlczsKKwlmb3IgKDs7KSB7CisJCXdoaWxlIChwYiA8PSBwYyAmJiAociA9IGNtcChwYiwgYSkpIDw9IDApIHsKKwkJCWlmIChyID09IDApIHsKKwkJCQlzd2FwX2NudCA9IDE7CisJCQkJc3dhcChwYSwgcGIpOworCQkJCXBhICs9IGVzOworICAgICAgfQorCQkJcGIgKz0gZXM7CisJCX0KKwkJd2hpbGUgKHBiIDw9IHBjICYmIChyID0gY21wKHBjLCBhKSkgPj0gMCkgeworCQkJaWYgKHIgPT0gMCkgeworCQkJCXN3YXBfY250ID0gMTsKKwkJCQlzd2FwKHBjLCBwZCk7CisJCQkJcGQgLT0gZXM7CisJCQl9CisJCQlwYyAtPSBlczsKKwkJfQorCQlpZiAocGIgPiBwYykKKwkJCWJyZWFrOworCQlzd2FwKHBiLCBwYyk7CisJCXN3YXBfY250ID0gMTsKKwkJcGIgKz0gZXM7CisJCXBjIC09IGVzOworCX0KKwlpZiAoc3dhcF9jbnQgPT0gMCkgeyAgLyogU3dpdGNoIHRvIGluc2VydGlvbiBzb3J0ICovCisJCWZvciAocG0gPSAoY2hhciAqKSBhICsgZXM7IHBtIDwgKGNoYXIgKikgYSArIG4gKiBlczsgcG0gKz0gZXMpCisJCQlmb3IgKHBsID0gcG07IHBsID4gKGNoYXIgKikgYSAmJiBjbXAocGwgLSBlcywgcGwpID4gMDsgCisJCQkgICAgIHBsIC09IGVzKQorCQkJCXN3YXAocGwsIHBsIC0gZXMpOworCQlyZXR1cm47CisgICAgfQorCisJcG4gPSAoY2hhciAqKWEgKyBuICogZXM7CisJciA9IG1pbihwYSAtIChjaGFyICopYSwgcGIgLSBwYSk7CisJdmVjc3dhcChhLCBwYiAtIHIsIHIpOworCXIgPSBtaW4ocGQgLSBwYywgcG4gLSBwZCAtIChpbnQpZXMpOworCXZlY3N3YXAocGIsIHBuIC0gciwgcik7CisJaWYgKChyID0gcGIgLSBwYSkgPiAoaW50KWVzKQorCQlxc29ydChhLCByIC8gZXMsIGVzLCBjbXApOworCWlmICgociA9IHBkIC0gcGMpID4gKGludCllcykgeyAKKwkJLyogSXRlcmF0ZSByYXRoZXIgdGhhbiByZWN1cnNlIHRvIHNhdmUgc3RhY2sgc3BhY2UgKi8KKwkJYSA9IHBuIC0gcjsKKwkJbiA9IHIgLyBlczsKKwkJZ290byBsb29wOworCX0KKy8qCQlxc29ydChwbiAtIHIsIHIgLyBlcywgZXMsIGNtcCk7Ki8KK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkbGliL3NlZWQ0OC5jIGIvbGliYy9zdGRsaWIvc2VlZDQ4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZkNWY1NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkbGliL3NlZWQ0OC5jCkBAIC0wLDAgKzEsMzcgQEAKKy8qCSRPcGVuQlNEOiBzZWVkNDguYyx2IDEuMyAyMDA1LzA4LzA4IDA4OjA1OjM3IGVzcGllIEV4cCAkICovCisvKgorICogQ29weXJpZ2h0IChjKSAxOTkzIE1hcnRpbiBCaXJnbWVpZXIKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogWW91IG1heSByZWRpc3RyaWJ1dGUgdW5tb2RpZmllZCBvciBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGlzIHNvdXJjZQorICogY29kZSBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIGFuZCB0aGUKKyAqIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSByZXRhaW5lZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGBgYXMgaXMnJywgYW5kIGNvbWVzIHdpdGggbm8gd2FycmFudGllcworICogb2YgYW55IGtpbmQuIEkgc2hhbGwgaW4gbm8gZXZlbnQgYmUgbGlhYmxlIGZvciBhbnl0aGluZyB0aGF0IGhhcHBlbnMKKyAqIHRvIGFueW9uZS9hbnl0aGluZyB3aGVuIHVzaW5nIHRoaXMgc29mdHdhcmUuCisgKi8KKworI2luY2x1ZGUgInJhbmQ0OC5oIgorCitleHRlcm4gdW5zaWduZWQgc2hvcnQgX19yYW5kNDhfc2VlZFszXTsKK2V4dGVybiB1bnNpZ25lZCBzaG9ydCBfX3JhbmQ0OF9tdWx0WzNdOworZXh0ZXJuIHVuc2lnbmVkIHNob3J0IF9fcmFuZDQ4X2FkZDsKKwordW5zaWduZWQgc2hvcnQgKgorc2VlZDQ4KHVuc2lnbmVkIHNob3J0IHhzZWVkWzNdKQoreworCXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBzc2VlZFszXTsKKyAgCisJc3NlZWRbMF0gPSBfX3JhbmQ0OF9zZWVkWzBdOworCXNzZWVkWzFdID0gX19yYW5kNDhfc2VlZFsxXTsKKwlzc2VlZFsyXSA9IF9fcmFuZDQ4X3NlZWRbMl07CisJX19yYW5kNDhfc2VlZFswXSA9IHhzZWVkWzBdOworCV9fcmFuZDQ4X3NlZWRbMV0gPSB4c2VlZFsxXTsKKwlfX3JhbmQ0OF9zZWVkWzJdID0geHNlZWRbMl07CisJX19yYW5kNDhfbXVsdFswXSA9IFJBTkQ0OF9NVUxUXzA7CisJX19yYW5kNDhfbXVsdFsxXSA9IFJBTkQ0OF9NVUxUXzE7CisJX19yYW5kNDhfbXVsdFsyXSA9IFJBTkQ0OF9NVUxUXzI7CisJX19yYW5kNDhfYWRkID0gUkFORDQ4X0FERDsKKwlyZXR1cm4gc3NlZWQ7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0ZGxpYi9zZXRlbnYuYyBiL2xpYmMvc3RkbGliL3NldGVudi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1NmRiNWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGxpYi9zZXRlbnYuYwpAQCAtMCwwICsxLDEwNSBAQAorLyoJJE9wZW5CU0Q6IHNldGVudi5jLHYgMS45IDIwMDUvMDgvMDggMDg6MDU6MzcgZXNwaWUgRXhwICQgKi8KKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODcgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCitjaGFyICpfX2ZpbmRlbnYoY29uc3QgY2hhciAqbmFtZSwgaW50ICpvZmZzZXQpOworCitleHRlcm4gY2hhciAqKmVudmlyb247CisKKy8qCisgKiBzZXRlbnYgLS0KKyAqCVNldCB0aGUgdmFsdWUgb2YgdGhlIGVudmlyb25tZW50YWwgdmFyaWFibGUgIm5hbWUiIHRvIGJlCisgKgkidmFsdWUiLiAgSWYgcmV3cml0ZSBpcyBzZXQsIHJlcGxhY2UgYW55IGN1cnJlbnQgdmFsdWUuCisgKi8KK2ludAorc2V0ZW52KGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlLCBpbnQgcmV3cml0ZSkKK3sKKwlzdGF0aWMgY2hhciAqKmxhc3RlbnY7CQkJLyogbGFzdCB2YWx1ZSBvZiBlbnZpcm9uICovCisJY2hhciAqQzsKKwlpbnQgbF92YWx1ZSwgb2Zmc2V0OworCisJaWYgKCp2YWx1ZSA9PSAnPScpCQkJLyogbm8gYD0nIGluIHZhbHVlICovCisJCSsrdmFsdWU7CisJbF92YWx1ZSA9IHN0cmxlbih2YWx1ZSk7CisJaWYgKChDID0gX19maW5kZW52KG5hbWUsICZvZmZzZXQpKSkgewkvKiBmaW5kIGlmIGFscmVhZHkgZXhpc3RzICovCisJCWlmICghcmV3cml0ZSkKKwkJCXJldHVybiAoMCk7CisJCWlmICgoaW50KXN0cmxlbihDKSA+PSBsX3ZhbHVlKSB7CS8qIG9sZCBsYXJnZXI7IGNvcHkgb3ZlciAqLworCQkJd2hpbGUgKCgqQysrID0gKnZhbHVlKyspKQorCQkJCTsKKwkJCXJldHVybiAoMCk7CisJCX0KKwl9IGVsc2UgewkJCQkJLyogY3JlYXRlIG5ldyBzbG90ICovCisJCXNpemVfdCBjbnQ7CisJCWNoYXIgKipQOworCisJCWZvciAoUCA9IGVudmlyb247ICpQICE9IE5VTEw7IFArKykKKwkJCTsKKwkJY250ID0gUCAtIGVudmlyb247CisgICAgICAgIFAgPSAoY2hhciAqKilyZWFsbG9jKGxhc3RlbnYsIHNpemVvZihjaGFyICopICogKGNudCArIDIpKTsKKwkJaWYgKCFQKQorCQkJcmV0dXJuICgtMSk7CisJCWlmIChsYXN0ZW52ICE9IGVudmlyb24pCisJCQltZW1jcHkoUCwgZW52aXJvbiwgY250ICogc2l6ZW9mKGNoYXIgKikpOworCQlsYXN0ZW52ID0gZW52aXJvbiA9IFA7CisJCW9mZnNldCA9IGNudDsKKwkJZW52aXJvbltjbnQgKyAxXSA9IE5VTEw7CisJfQorCWZvciAoQyA9IChjaGFyICopbmFtZTsgKkMgJiYgKkMgIT0gJz0nOyArK0MpCisJCTsJCQkJLyogbm8gYD0nIGluIG5hbWUgKi8KKwlpZiAoIShlbnZpcm9uW29mZnNldF0gPQkJCS8qIG5hbWUgKyBgPScgKyB2YWx1ZSAqLworCSAgICBtYWxsb2MoKHNpemVfdCkoKGludCkoQyAtIG5hbWUpICsgbF92YWx1ZSArIDIpKSkpCisJCXJldHVybiAoLTEpOworCWZvciAoQyA9IGVudmlyb25bb2Zmc2V0XTsgKCpDID0gKm5hbWUrKykgJiYgKkMgIT0gJz0nOyArK0MpCisJCTsKKwlmb3IgKCpDKysgPSAnPSc7ICgqQysrID0gKnZhbHVlKyspOyApCisJCTsKKwlyZXR1cm4gKDApOworfQorCisvKgorICogdW5zZXRlbnYobmFtZSkgLS0KKyAqCURlbGV0ZSBlbnZpcm9ubWVudGFsIHZhcmlhYmxlICJuYW1lIi4KKyAqLworaW50Cit1bnNldGVudihjb25zdCBjaGFyICpuYW1lKQoreworCWNoYXIgKipQOworCWludCBvZmZzZXQ7CisKKwl3aGlsZSAoX19maW5kZW52KG5hbWUsICZvZmZzZXQpKQkvKiBpZiBzZXQgbXVsdGlwbGUgdGltZXMgKi8KKwkJZm9yIChQID0gJmVudmlyb25bb2Zmc2V0XTs7ICsrUCkKKwkJCWlmICghKCpQID0gKihQICsgMSkpKQorCQkJCWJyZWFrOworCisgICAgICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRsaWIvc2V0am1wZXJyLmMgYi9saWJjL3N0ZGxpYi9zZXRqbXBlcnIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTA2Y2RjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRsaWIvc2V0am1wZXJyLmMKQEAgLTAsMCArMSw0NiBAQAorLyoJJE9wZW5CU0Q6IHNldGptcGVyci5jLHYgMS41IDIwMDUvMDgvMDggMDg6MDU6MzQgZXNwaWUgRXhwICQgKi8KKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBmcm9tIGxvbmdqbXAoKSB3aGVuIGFuIGVycm9yIG9jY3Vycy4KKyAqIFByb2dyYW1zIHRoYXQgd2lzaCB0byBleGl0IGdyYWNlZnVsbHkgZnJvbSB0aGlzIGVycm9yIG1heQorICogd3JpdGUgdGhlaXIgb3duIHZlcnNpb25zLgorICogSWYgdGhpcyByb3V0aW5lIHJldHVybnMsIHRoZSBwcm9ncmFtIGlzIGFib3J0ZWQuCisgKi8KKworI2luY2x1ZGUgPHNldGptcC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCit2b2lkCitsb25nam1wZXJyb3Iodm9pZCkKK3sKKyNkZWZpbmUJRVJSTVNHCSJsb25nam1wIGJvdGNoLlxuIgorCSh2b2lkKXdyaXRlKFNUREVSUl9GSUxFTk8sIEVSUk1TRywgc2l6ZW9mKEVSUk1TRykgLSAxKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkbGliL3NoYTFoYXNoLmMgYi9saWJjL3N0ZGxpYi9zaGExaGFzaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4ZTMzOTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGxpYi9zaGExaGFzaC5jCkBAIC0wLDAgKzEsMzE3IEBACisvKgorU0hBLTEgaW4gQworQnkgU3RldmUgUmVpZCA8c3JlaWRAc2VhLXRvLXNreS5uZXQ+CisxMDAlIFB1YmxpYyBEb21haW4KKworLS0tLS0tLS0tLS0tLS0tLS0KK01vZGlmaWVkIDcvOTggCitCeSBKYW1lcyBILiBCcm93biA8amJyb3duQGJ1cmdveW5lLmNvbT4KK1N0aWxsIDEwMCUgUHVibGljIERvbWFpbgorCitDb3JyZWN0ZWQgYSBwcm9ibGVtIHdoaWNoIGdlbmVyYXRlZCBpbXByb3BlciBoYXNoIHZhbHVlcyBvbiAxNiBiaXQgbWFjaGluZXMKK1JvdXRpbmUgU0hBMVVwZGF0ZSBjaGFuZ2VkIGZyb20KKwl2b2lkIFNIQTFVcGRhdGUoU0hBMV9DVFgqIGNvbnRleHQsIHVuc2lnbmVkIGNoYXIqIGRhdGEsIHVuc2lnbmVkIGludAorbGVuKQordG8KKwl2b2lkIFNIQTFVcGRhdGUoU0hBMV9DVFgqIGNvbnRleHQsIHVuc2lnbmVkIGNoYXIqIGRhdGEsIHVuc2lnbmVkCitsb25nIGxlbikKKworVGhlICdsZW4nIHBhcmFtZXRlciB3YXMgZGVjbGFyZWQgYW4gaW50IHdoaWNoIHdvcmtzIGZpbmUgb24gMzIgYml0IG1hY2hpbmVzLgorSG93ZXZlciwgb24gMTYgYml0IG1hY2hpbmVzIGFuIGludCBpcyB0b28gc21hbGwgZm9yIHRoZSBzaGlmdHMgYmVpbmcgZG9uZQorYWdhaW5zdAoraXQuICBUaGlzIGNhdXNlZCB0aGUgaGFzaCBmdW5jdGlvbiB0byBnZW5lcmF0ZSBpbmNvcnJlY3QgdmFsdWVzIGlmIGxlbiB3YXMKK2dyZWF0ZXIgdGhhbiA4MTkxICg4SyAtIDEpIGR1ZSB0byB0aGUgJ2xlbiA8PCAzJyBvbiBsaW5lIDMgb2YgU0hBMVVwZGF0ZSgpLgorCitTaW5jZSB0aGUgZmlsZSBJTyBpbiBtYWluKCkgcmVhZHMgMTZLIGF0IGEgdGltZSwgYW55IGZpbGUgOEsgb3IgbGFyZ2VyIHdvdWxkCitiZSBndWFyYW50ZWVkIHRvIGdlbmVyYXRlIHRoZSB3cm9uZyBoYXNoIChlLmcuIFRlc3QgVmVjdG9yICMzLCBhIG1pbGxpb24KKyJhInMpLgorCitJIGFsc28gY2hhbmdlZCB0aGUgZGVjbGFyYXRpb24gb2YgdmFyaWFibGVzIGkgJiBqIGluIFNIQTFVcGRhdGUgdG8gCit1bnNpZ25lZCBsb25nIGZyb20gdW5zaWduZWQgaW50IGZvciB0aGUgc2FtZSByZWFzb24uCisKK1RoZXNlIGNoYW5nZXMgc2hvdWxkIG1ha2Ugbm8gZGlmZmVyZW5jZSB0byBhbnkgMzIgYml0IGltcGxlbWVudGF0aW9ucyBzaW5jZQorYW4KK2ludCBhbmQgYSBsb25nIGFyZSB0aGUgc2FtZSBzaXplIGluIHRob3NlIGVudmlyb25tZW50cy4KKworLS0KK0kgYWxzbyBjb3JyZWN0ZWQgYSBmZXcgY29tcGlsZXIgd2FybmluZ3MgZ2VuZXJhdGVkIGJ5IEJvcmxhbmQgQy4KKzEuIEFkZGVkICNpbmNsdWRlIDxwcm9jZXNzLmg+IGZvciBleGl0KCkgcHJvdG90eXBlCisyLiBSZW1vdmVkIHVudXNlZCB2YXJpYWJsZSAnaicgaW4gU0hBMUZpbmFsCiszLiBDaGFuZ2VkIGV4aXQoMCkgdG8gcmV0dXJuKDApIGF0IGVuZCBvZiBtYWluLgorCitBTEwgY2hhbmdlcyBJIG1hZGUgY2FuIGJlIGxvY2F0ZWQgYnkgc2VhcmNoaW5nIGZvciBjb21tZW50cyBjb250YWluaW5nICdKSEInCistLS0tLS0tLS0tLS0tLS0tLQorTW9kaWZpZWQgOC85OAorQnkgU3RldmUgUmVpZCA8c3JlaWRAc2VhLXRvLXNreS5uZXQ+CitTdGlsbCAxMDAlIHB1YmxpYyBkb21haW4KKworMS0gUmVtb3ZlZCAjaW5jbHVkZSA8cHJvY2Vzcy5oPiBhbmQgdXNlZCByZXR1cm4oKSBpbnN0ZWFkIG9mIGV4aXQoKQorMi0gRml4ZWQgb3ZlcndyaXRpbmcgb2YgZmluYWxjb3VudCBpbiBTSEExRmluYWwoKSAoZGlzY292ZXJlZCBieSBDaHJpcyBIYWxsKQorMy0gQ2hhbmdlZCBlbWFpbCBhZGRyZXNzIGZyb20gc3RldmVAZWRtd2ViLmNvbSB0byBzcmVpZEBzZWEtdG8tc2t5Lm5ldAorCistLS0tLS0tLS0tLS0tLS0tLQorTW9kaWZpZWQgNC8wMQorQnkgU2F1bCBLcmF2aXR6IDxTYXVsLktyYXZpdHpAY2VsZXJhLmNvbT4KK1N0aWxsIDEwMCUgUEQKK01vZGlmaWVkIHRvIHJ1biBvbiBDb21wYXEgQWxwaGEgaGFyZHdhcmUuICAKKworLS0tLS0tLS0tLS0tLS0tLS0KK01vZGlmaWVkIDIvMDMKK0J5IEguIFBldGVyIEFudmluIDxocGFAenl0b3IuY29tPgorU3RpbGwgMTAwJSBQRAorTW9kaWZpZWQgdG8gcnVuIG9uIGFueSBoYXJkd2FyZSB3aXRoIDxpbnR0eXBlcy5oPiBhbmQgPG5ldGluZXQvaW4uaD4KK0NoYW5nZWQgdGhlIGRyaXZlciBwcm9ncmFtCisKKyovCisKKy8qCitUZXN0IFZlY3RvcnMgKGZyb20gRklQUyBQVUIgMTgwLTEpCisiYWJjIgorICBBOTk5M0UzNiA0NzA2ODE2QSBCQTNFMjU3MSA3ODUwQzI2QyA5Q0QwRDg5RAorImFiY2RiY2RlY2RlZmRlZmdlZmdoZmdoaWdoaWpoaWpraWprbGprbG1rbG1ubG1ub21ub3Bub3BxIgorICA4NDk4M0U0NCAxQzNCRDI2RSBCQUFFNEFBMSBGOTUxMjlFNSBFNTQ2NzBGMQorQSBtaWxsaW9uIHJlcGV0aXRpb25zIG9mICJhIgorICAzNEFBOTczQyBENEM0REFBNCBGNjFFRUIyQiBEQkFEMjczMSA2NTM0MDE2RgorKi8KKworLyogI2RlZmluZSBTSEExSEFORFNPRkYgICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGludHR5cGVzLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgkJLyogRm9yIGh0b25sL250b2hsL2h0b25zL250b2hzICovCisKKy8qICNpbmNsdWRlIDxwcm9jZXNzLmg+ICovCS8qIHByb3RvdHlwZSBmb3IgZXhpdCgpIC0gSkhCICovCisvKiBVc2luZyByZXR1cm4oKSBpbnN0ZWFkIG9mIGV4aXQoKSAtIFNXUiAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgdWludDMyX3Qgc3RhdGVbNV07CisgICAgdWludDMyX3QgY291bnRbMl07CisgICAgdW5zaWduZWQgY2hhciBidWZmZXJbNjRdOworfSBTSEExX0NUWDsKKwordm9pZCBTSEExVHJhbnNmb3JtKHVpbnQzMl90IHN0YXRlWzVdLCB1bnNpZ25lZCBjaGFyIGJ1ZmZlcls2NF0pOwordm9pZCBTSEExSW5pdChTSEExX0NUWCogY29udGV4dCk7Cit2b2lkIFNIQTFVcGRhdGUoU0hBMV9DVFgqIGNvbnRleHQsIHVuc2lnbmVkIGNoYXIqIGRhdGEsIHVpbnQzMl90IGxlbik7CS8qCitKSEIgKi8KK3ZvaWQgU0hBMUZpbmFsKHVuc2lnbmVkIGNoYXIgZGlnZXN0WzIwXSwgU0hBMV9DVFgqIGNvbnRleHQpOworCisjZGVmaW5lIHJvbCh2YWx1ZSwgYml0cykgKCgodmFsdWUpIDw8IChiaXRzKSkgfCAoKHZhbHVlKSA+PiAoMzIgLSAoYml0cykpKSkKKworLyogYmxrMCgpIGFuZCBibGsoKSBwZXJmb3JtIHRoZSBpbml0aWFsIGV4cGFuZC4gKi8KKy8qIEkgZ290IHRoZSBpZGVhIG9mIGV4cGFuZGluZyBkdXJpbmcgdGhlIHJvdW5kIGZ1bmN0aW9uIGZyb20gU1NMZWF5ICovCisjZGVmaW5lIGJsazAoaSkgKGJsb2NrLT5sW2ldID0gbnRvaGwoYmxvY2stPmxbaV0pKQorI2RlZmluZSBibGsoaSkgKGJsb2NrLT5sW2kmMTVdID0gcm9sKGJsb2NrLT5sWyhpKzEzKSYxNV1eYmxvY2stPmxbKGkrOCkmMTVdIFwKKyAgICBeYmxvY2stPmxbKGkrMikmMTVdXmJsb2NrLT5sW2kmMTVdLDEpKQorCisvKiAoUjArUjEpLCBSMiwgUjMsIFI0IGFyZSB0aGUgZGlmZmVyZW50IG9wZXJhdGlvbnMgdXNlZCBpbiBTSEExICovCisjZGVmaW5lIFIwKHYsdyx4LHkseixpKSB6Kz0oKHcmKHheeSkpXnkpK2JsazAoaSkrMHg1QTgyNzk5OStyb2wodiw1KTt3PXJvbCh3LDMwKTsKKyNkZWZpbmUgUjEodix3LHgseSx6LGkpIHorPSgodyYoeF55KSleeSkrYmxrKGkpKzB4NUE4Mjc5OTkrcm9sKHYsNSk7dz1yb2wodywzMCk7CisjZGVmaW5lIFIyKHYsdyx4LHkseixpKSB6Kz0od154XnkpK2JsayhpKSsweDZFRDlFQkExK3JvbCh2LDUpO3c9cm9sKHcsMzApOworI2RlZmluZSBSMyh2LHcseCx5LHosaSkgeis9KCgod3x4KSZ5KXwodyZ4KSkrYmxrKGkpKzB4OEYxQkJDREMrcm9sKHYsNSk7dz1yb2wodywzMCk7CisjZGVmaW5lIFI0KHYsdyx4LHkseixpKSB6Kz0od154XnkpK2JsayhpKSsweENBNjJDMUQ2K3JvbCh2LDUpO3c9cm9sKHcsMzApOworCisKKyNpZmRlZiBWRVJCT1NFICAvKiBTQUsgKi8KK3ZvaWQgU0hBUHJpbnRDb250ZXh0KFNIQTFfQ1RYICpjb250ZXh0LCBjaGFyICptc2cpeworICBwcmludGYoIiVzICglZCwlZCkgJXggJXggJXggJXggJXhcbiIsCisJIG1zZywKKwkgY29udGV4dC0+Y291bnRbMF0sIGNvbnRleHQtPmNvdW50WzFdLCAKKwkgY29udGV4dC0+c3RhdGVbMF0sCisJIGNvbnRleHQtPnN0YXRlWzFdLAorCSBjb250ZXh0LT5zdGF0ZVsyXSwKKwkgY29udGV4dC0+c3RhdGVbM10sCisJIGNvbnRleHQtPnN0YXRlWzRdKTsKK30KKyNlbmRpZgorCisvKiBIYXNoIGEgc2luZ2xlIDUxMi1iaXQgYmxvY2suIFRoaXMgaXMgdGhlIGNvcmUgb2YgdGhlIGFsZ29yaXRobS4gKi8KKwordm9pZCBTSEExVHJhbnNmb3JtKHVpbnQzMl90IHN0YXRlWzVdLCB1bnNpZ25lZCBjaGFyIGJ1ZmZlcls2NF0pCit7Cit1aW50MzJfdCBhLCBiLCBjLCBkLCBlOwordHlwZWRlZiB1bmlvbiB7CisgICAgdW5zaWduZWQgY2hhciBjWzY0XTsKKyAgICB1aW50MzJfdCBsWzE2XTsKK30gQ0hBUjY0TE9ORzE2OworQ0hBUjY0TE9ORzE2KiBibG9jazsKKyNpZmRlZiBTSEExSEFORFNPRkYKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHdvcmtzcGFjZVs2NF07CisgICAgYmxvY2sgPSAoQ0hBUjY0TE9ORzE2Kil3b3Jrc3BhY2U7CisgICAgbWVtY3B5KGJsb2NrLCBidWZmZXIsIDY0KTsKKyNlbHNlCisgICAgYmxvY2sgPSAoQ0hBUjY0TE9ORzE2KilidWZmZXI7CisjZW5kaWYKKyAgICAvKiBDb3B5IGNvbnRleHQtPnN0YXRlW10gdG8gd29ya2luZyB2YXJzICovCisgICAgYSA9IHN0YXRlWzBdOworICAgIGIgPSBzdGF0ZVsxXTsKKyAgICBjID0gc3RhdGVbMl07CisgICAgZCA9IHN0YXRlWzNdOworICAgIGUgPSBzdGF0ZVs0XTsKKyAgICAvKiA0IHJvdW5kcyBvZiAyMCBvcGVyYXRpb25zIGVhY2guIExvb3AgdW5yb2xsZWQuICovCisgICAgUjAoYSxiLGMsZCxlLCAwKTsgUjAoZSxhLGIsYyxkLCAxKTsgUjAoZCxlLGEsYixjLCAyKTsgUjAoYyxkLGUsYSxiLCAzKTsKKyAgICBSMChiLGMsZCxlLGEsIDQpOyBSMChhLGIsYyxkLGUsIDUpOyBSMChlLGEsYixjLGQsIDYpOyBSMChkLGUsYSxiLGMsIDcpOworICAgIFIwKGMsZCxlLGEsYiwgOCk7IFIwKGIsYyxkLGUsYSwgOSk7IFIwKGEsYixjLGQsZSwxMCk7IFIwKGUsYSxiLGMsZCwxMSk7CisgICAgUjAoZCxlLGEsYixjLDEyKTsgUjAoYyxkLGUsYSxiLDEzKTsgUjAoYixjLGQsZSxhLDE0KTsgUjAoYSxiLGMsZCxlLDE1KTsKKyAgICBSMShlLGEsYixjLGQsMTYpOyBSMShkLGUsYSxiLGMsMTcpOyBSMShjLGQsZSxhLGIsMTgpOyBSMShiLGMsZCxlLGEsMTkpOworICAgIFIyKGEsYixjLGQsZSwyMCk7IFIyKGUsYSxiLGMsZCwyMSk7IFIyKGQsZSxhLGIsYywyMik7IFIyKGMsZCxlLGEsYiwyMyk7CisgICAgUjIoYixjLGQsZSxhLDI0KTsgUjIoYSxiLGMsZCxlLDI1KTsgUjIoZSxhLGIsYyxkLDI2KTsgUjIoZCxlLGEsYixjLDI3KTsKKyAgICBSMihjLGQsZSxhLGIsMjgpOyBSMihiLGMsZCxlLGEsMjkpOyBSMihhLGIsYyxkLGUsMzApOyBSMihlLGEsYixjLGQsMzEpOworICAgIFIyKGQsZSxhLGIsYywzMik7IFIyKGMsZCxlLGEsYiwzMyk7IFIyKGIsYyxkLGUsYSwzNCk7IFIyKGEsYixjLGQsZSwzNSk7CisgICAgUjIoZSxhLGIsYyxkLDM2KTsgUjIoZCxlLGEsYixjLDM3KTsgUjIoYyxkLGUsYSxiLDM4KTsgUjIoYixjLGQsZSxhLDM5KTsKKyAgICBSMyhhLGIsYyxkLGUsNDApOyBSMyhlLGEsYixjLGQsNDEpOyBSMyhkLGUsYSxiLGMsNDIpOyBSMyhjLGQsZSxhLGIsNDMpOworICAgIFIzKGIsYyxkLGUsYSw0NCk7IFIzKGEsYixjLGQsZSw0NSk7IFIzKGUsYSxiLGMsZCw0Nik7IFIzKGQsZSxhLGIsYyw0Nyk7CisgICAgUjMoYyxkLGUsYSxiLDQ4KTsgUjMoYixjLGQsZSxhLDQ5KTsgUjMoYSxiLGMsZCxlLDUwKTsgUjMoZSxhLGIsYyxkLDUxKTsKKyAgICBSMyhkLGUsYSxiLGMsNTIpOyBSMyhjLGQsZSxhLGIsNTMpOyBSMyhiLGMsZCxlLGEsNTQpOyBSMyhhLGIsYyxkLGUsNTUpOworICAgIFIzKGUsYSxiLGMsZCw1Nik7IFIzKGQsZSxhLGIsYyw1Nyk7IFIzKGMsZCxlLGEsYiw1OCk7IFIzKGIsYyxkLGUsYSw1OSk7CisgICAgUjQoYSxiLGMsZCxlLDYwKTsgUjQoZSxhLGIsYyxkLDYxKTsgUjQoZCxlLGEsYixjLDYyKTsgUjQoYyxkLGUsYSxiLDYzKTsKKyAgICBSNChiLGMsZCxlLGEsNjQpOyBSNChhLGIsYyxkLGUsNjUpOyBSNChlLGEsYixjLGQsNjYpOyBSNChkLGUsYSxiLGMsNjcpOworICAgIFI0KGMsZCxlLGEsYiw2OCk7IFI0KGIsYyxkLGUsYSw2OSk7IFI0KGEsYixjLGQsZSw3MCk7IFI0KGUsYSxiLGMsZCw3MSk7CisgICAgUjQoZCxlLGEsYixjLDcyKTsgUjQoYyxkLGUsYSxiLDczKTsgUjQoYixjLGQsZSxhLDc0KTsgUjQoYSxiLGMsZCxlLDc1KTsKKyAgICBSNChlLGEsYixjLGQsNzYpOyBSNChkLGUsYSxiLGMsNzcpOyBSNChjLGQsZSxhLGIsNzgpOyBSNChiLGMsZCxlLGEsNzkpOworICAgIC8qIEFkZCB0aGUgd29ya2luZyB2YXJzIGJhY2sgaW50byBjb250ZXh0LnN0YXRlW10gKi8KKyAgICBzdGF0ZVswXSArPSBhOworICAgIHN0YXRlWzFdICs9IGI7CisgICAgc3RhdGVbMl0gKz0gYzsKKyAgICBzdGF0ZVszXSArPSBkOworICAgIHN0YXRlWzRdICs9IGU7CisgICAgLyogV2lwZSB2YXJpYWJsZXMgKi8KKyAgICBhID0gYiA9IGMgPSBkID0gZSA9IDA7Cit9CisKKworLyogU0hBMUluaXQgLSBJbml0aWFsaXplIG5ldyBjb250ZXh0ICovCisKK3ZvaWQgU0hBMUluaXQoU0hBMV9DVFgqIGNvbnRleHQpCit7CisgICAgLyogU0hBMSBpbml0aWFsaXphdGlvbiBjb25zdGFudHMgKi8KKyAgICBjb250ZXh0LT5zdGF0ZVswXSA9IDB4Njc0NTIzMDE7CisgICAgY29udGV4dC0+c3RhdGVbMV0gPSAweEVGQ0RBQjg5OworICAgIGNvbnRleHQtPnN0YXRlWzJdID0gMHg5OEJBRENGRTsKKyAgICBjb250ZXh0LT5zdGF0ZVszXSA9IDB4MTAzMjU0NzY7CisgICAgY29udGV4dC0+c3RhdGVbNF0gPSAweEMzRDJFMUYwOworICAgIGNvbnRleHQtPmNvdW50WzBdID0gY29udGV4dC0+Y291bnRbMV0gPSAwOworfQorCisKKy8qIFJ1biB5b3VyIGRhdGEgdGhyb3VnaCB0aGlzLiAqLworCit2b2lkIFNIQTFVcGRhdGUoU0hBMV9DVFgqIGNvbnRleHQsIHVuc2lnbmVkIGNoYXIqIGRhdGEsIHVpbnQzMl90IGxlbikJLyoKK0pIQiAqLworewordWludDMyX3QgaSwgajsJLyogSkhCICovCisKKyNpZmRlZiBWRVJCT1NFCisgICAgU0hBUHJpbnRDb250ZXh0KGNvbnRleHQsICJiZWZvcmUiKTsKKyNlbmRpZgorICAgIGogPSAoY29udGV4dC0+Y291bnRbMF0gPj4gMykgJiA2MzsKKyAgICBpZiAoKGNvbnRleHQtPmNvdW50WzBdICs9IGxlbiA8PCAzKSA8IChsZW4gPDwgMykpIGNvbnRleHQtPmNvdW50WzFdKys7CisgICAgY29udGV4dC0+Y291bnRbMV0gKz0gKGxlbiA+PiAyOSk7CisgICAgaWYgKChqICsgbGVuKSA+IDYzKSB7CisgICAgICAgIG1lbWNweSgmY29udGV4dC0+YnVmZmVyW2pdLCBkYXRhLCAoaSA9IDY0LWopKTsKKyAgICAgICAgU0hBMVRyYW5zZm9ybShjb250ZXh0LT5zdGF0ZSwgY29udGV4dC0+YnVmZmVyKTsKKyAgICAgICAgZm9yICggOyBpICsgNjMgPCBsZW47IGkgKz0gNjQpIHsKKyAgICAgICAgICAgIFNIQTFUcmFuc2Zvcm0oY29udGV4dC0+c3RhdGUsICZkYXRhW2ldKTsKKyAgICAgICAgfQorICAgICAgICBqID0gMDsKKyAgICB9CisgICAgZWxzZSBpID0gMDsKKyAgICBtZW1jcHkoJmNvbnRleHQtPmJ1ZmZlcltqXSwgJmRhdGFbaV0sIGxlbiAtIGkpOworI2lmZGVmIFZFUkJPU0UKKyAgICBTSEFQcmludENvbnRleHQoY29udGV4dCwgImFmdGVyICIpOworI2VuZGlmCit9CisKKworLyogQWRkIHBhZGRpbmcgYW5kIHJldHVybiB0aGUgbWVzc2FnZSBkaWdlc3QuICovCisKK3ZvaWQgU0hBMUZpbmFsKHVuc2lnbmVkIGNoYXIgZGlnZXN0WzIwXSwgU0hBMV9DVFgqIGNvbnRleHQpCit7Cit1aW50MzJfdCBpOwkvKiBKSEIgKi8KK3Vuc2lnbmVkIGNoYXIgZmluYWxjb3VudFs4XTsKKworICAgIGZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKyAgICAgICAgZmluYWxjb3VudFtpXSA9ICh1bnNpZ25lZCBjaGFyKSgoY29udGV4dC0+Y291bnRbKGkgPj0gNCA/IDAgOiAxKV0KKyAgICAgICAgID4+ICgoMy0oaSAmIDMpKSAqIDgpICkgJiAyNTUpOyAgLyogRW5kaWFuIGluZGVwZW5kZW50ICovCisgICAgfQorICAgIFNIQTFVcGRhdGUoY29udGV4dCwgKHVuc2lnbmVkIGNoYXIgKikiXDIwMCIsIDEpOworICAgIHdoaWxlICgoY29udGV4dC0+Y291bnRbMF0gJiA1MDQpICE9IDQ0OCkgeworICAgICAgICBTSEExVXBkYXRlKGNvbnRleHQsICh1bnNpZ25lZCBjaGFyICopIlwwIiwgMSk7CisgICAgfQorICAgIFNIQTFVcGRhdGUoY29udGV4dCwgZmluYWxjb3VudCwgOCk7ICAvKiBTaG91bGQgY2F1c2UgYSBTSEExVHJhbnNmb3JtKCkKKyovCisgICAgZm9yIChpID0gMDsgaSA8IDIwOyBpKyspIHsKKyAgICAgICAgZGlnZXN0W2ldID0gKHVuc2lnbmVkIGNoYXIpCisgICAgICAgICAoKGNvbnRleHQtPnN0YXRlW2k+PjJdID4+ICgoMy0oaSAmIDMpKSAqIDgpICkgJiAyNTUpOworICAgIH0KKyAgICAvKiBXaXBlIHZhcmlhYmxlcyAqLworICAgIGkgPSAwOwkvKiBKSEIgKi8KKyAgICBtZW1zZXQoY29udGV4dC0+YnVmZmVyLCAwLCA2NCk7CisgICAgbWVtc2V0KGNvbnRleHQtPnN0YXRlLCAwLCAyMCk7CisgICAgbWVtc2V0KGNvbnRleHQtPmNvdW50LCAwLCA4KTsKKyAgICBtZW1zZXQoZmluYWxjb3VudCwgMCwgOCk7CS8qIFNXUiAqLworI2lmZGVmIFNIQTFIQU5EU09GRiAgLyogbWFrZSBTSEExVHJhbnNmb3JtIG92ZXJ3cml0ZSBpdCdzIG93biBzdGF0aWMgdmFycyAqLworICAgIFNIQTFUcmFuc2Zvcm0oY29udGV4dC0+c3RhdGUsIGNvbnRleHQtPmJ1ZmZlcik7CisjZW5kaWYKK30KKyAgCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogVGhpcyBpcyBub3QgcXVpdGUgdGhlIE1JTUUgYmFzZTY0IGFsZ29yaXRobTogaXQgdXNlcyBfIGluc3RlYWQgb2YgLywKKyAgIGFuZCBpbnN0ZWFkIG9mIHBhZGRpbmcgdGhlIG91dHB1dCB3aXRoID0gY2hhcmFjdGVycyB3ZSBqdXN0IG1ha2UgdGhlCisgICBvdXRwdXQgc2hvcnRlci4gKi8KK2NoYXIgKm15YmFzZTY0KHVpbnQ4X3QgZGlnZXN0WzIwXSkKK3sKKyAgc3RhdGljIGNvbnN0IGNoYXIgY2hhcnpbXSA9CisgICAgIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5LV8iOworICB1aW50OF90IGlucHV0WzIxXTsKKyAgc3RhdGljIGNoYXIgb3V0cHV0WzI4XTsKKyAgaW50IGksIGo7CisgIHVpbnQ4X3QgKnA7CisgIGNoYXIgKnE7CisgIHVpbnQzMl90IGJ2OworCisgIG1lbWNweShpbnB1dCwgZGlnZXN0LCAyMCk7CisgIGlucHV0WzIwXSA9IDA7CQkvKiBQYWQgdG8gbXVsdGlwbGUgb2YgMyBieXRlcyAqLworCisgIHAgPSBpbnB1dDsgIHEgPSBvdXRwdXQ7CisgIGZvciAoIGkgPSAwIDsgaSA8IDcgOyBpKysgKSB7CisgICAgYnYgPSAocFswXSA8PCAxNikgfCAocFsxXSA8PCA4KSB8IHBbMl07CisgICAgcCArPSAzOworICAgIGZvciAoIGogPSAwIDsgaiA8IDQgOyBqKysgKSB7CisgICAgICAqcSsrID0gY2hhcnpbKGJ2ID4+IDE4KSAmIDB4M2ZdOworICAgICAgYnYgPDw9IDY7CisgICAgfQorICB9CisgICotLXEgPSAnXDAnOwkJCS8qIFRoZSBsYXN0IGNoYXJhY3RlciBpcyBub3Qgc2lnbmlmaWNhbnQgKi8KKyAgcmV0dXJuIG91dHB1dDsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICBpbnQgaTsKKyAgU0hBMV9DVFggY29udGV4dDsKKyAgdWludDhfdCBkaWdlc3RbMjBdLCBidWZmZXJbMTYzODRdOworICBGSUxFKiBmaWxlOworCisgIGlmIChhcmdjIDwgMikgeworICAgIGZpbGUgPSBzdGRpbjsKKyAgfQorICBlbHNlIHsKKyAgICBpZiAoIShmaWxlID0gZm9wZW4oYXJndlsxXSwgInJiIikpKSB7CisgICAgICBmcHV0cygiVW5hYmxlIHRvIG9wZW4gZmlsZS4iLCBzdGRlcnIpOworICAgICAgcmV0dXJuKC0xKTsKKyAgICB9CisgIH0gCisgIFNIQTFJbml0KCZjb250ZXh0KTsKKyAgd2hpbGUgKCFmZW9mKGZpbGUpKSB7ICAvKiBub3RlOiB3aGF0IGlmIGZlcnJvcihmaWxlKSAqLworICAgIGkgPSBmcmVhZChidWZmZXIsIDEsIDE2Mzg0LCBmaWxlKTsKKyAgICBTSEExVXBkYXRlKCZjb250ZXh0LCBidWZmZXIsIGkpOworICB9CisgIFNIQTFGaW5hbChkaWdlc3QsICZjb250ZXh0KTsKKyAgZmNsb3NlKGZpbGUpOworCisgIHB1dHMobXliYXNlNjQoZGlnZXN0KSk7CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0ZGxpYi9zcmFuZDQ4LmMgYi9saWJjL3N0ZGxpYi9zcmFuZDQ4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc2YjZjYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkbGliL3NyYW5kNDguYwpAQCAtMCwwICsxLDMxIEBACisvKgkkT3BlbkJTRDogc3JhbmQ0OC5jLHYgMS4zIDIwMDUvMDgvMDggMDg6MDU6MzcgZXNwaWUgRXhwICQgKi8KKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTMgTWFydGluIEJpcmdtZWllcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBZb3UgbWF5IHJlZGlzdHJpYnV0ZSB1bm1vZGlmaWVkIG9yIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoaXMgc291cmNlCisgKiBjb2RlIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgYW5kIHRoZQorICogZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIHJldGFpbmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYGBhcyBpcycnLCBhbmQgY29tZXMgd2l0aCBubyB3YXJyYW50aWVzCisgKiBvZiBhbnkga2luZC4gSSBzaGFsbCBpbiBubyBldmVudCBiZSBsaWFibGUgZm9yIGFueXRoaW5nIHRoYXQgaGFwcGVucworICogdG8gYW55b25lL2FueXRoaW5nIHdoZW4gdXNpbmcgdGhpcyBzb2Z0d2FyZS4KKyAqLworCisjaW5jbHVkZSAicmFuZDQ4LmgiCisKK2V4dGVybiB1bnNpZ25lZCBzaG9ydCBfX3JhbmQ0OF9zZWVkWzNdOworZXh0ZXJuIHVuc2lnbmVkIHNob3J0IF9fcmFuZDQ4X211bHRbM107CitleHRlcm4gdW5zaWduZWQgc2hvcnQgX19yYW5kNDhfYWRkOworCit2b2lkCitzcmFuZDQ4KGxvbmcgc2VlZCkKK3sKKwlfX3JhbmQ0OF9zZWVkWzBdID0gUkFORDQ4X1NFRURfMDsKKwlfX3JhbmQ0OF9zZWVkWzFdID0gKHVuc2lnbmVkIHNob3J0KSBzZWVkOworCV9fcmFuZDQ4X3NlZWRbMl0gPSAodW5zaWduZWQgc2hvcnQpIChzZWVkID4+IDE2KTsKKwlfX3JhbmQ0OF9tdWx0WzBdID0gUkFORDQ4X01VTFRfMDsKKwlfX3JhbmQ0OF9tdWx0WzFdID0gUkFORDQ4X01VTFRfMTsKKwlfX3JhbmQ0OF9tdWx0WzJdID0gUkFORDQ4X01VTFRfMjsKKwlfX3JhbmQ0OF9hZGQgPSBSQU5ENDhfQUREOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRsaWIvc3RybnRvaW1heC5jIGIvbGliYy9zdGRsaWIvc3RybnRvaW1heC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmM2NkOWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGxpYi9zdHJudG9pbWF4LmMKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPGludHR5cGVzLmg+CisKK2ludG1heF90IHN0cm50b2ltYXgoY29uc3QgY2hhciAqbnB0ciwgY2hhciAqKmVuZHB0ciwgaW50IGJhc2UsIHNpemVfdCBuKQoreworICByZXR1cm4gKGludG1heF90KSBzdHJudG91bWF4KG5wdHIsIGVuZHB0ciwgYmFzZSwgbik7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0ZGxpYi9zdHJudG91bWF4LmMgYi9saWJjL3N0ZGxpYi9zdHJudG91bWF4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE1MWVmNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkbGliL3N0cm50b3VtYXguYwpAQCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKworc3RhdGljIGlubGluZSBpbnQgZGlnaXR2YWwoaW50IGNoKQoreworICAgIHVuc2lnbmVkICBkOworCisgICAgZCA9ICh1bnNpZ25lZCkoY2ggLSAnMCcpOworICAgIGlmIChkIDwgMTApIHJldHVybiAoaW50KWQ7CisKKyAgICBkID0gKHVuc2lnbmVkKShjaCAtICdhJyk7CisgICAgaWYgKGQgPCA2KSByZXR1cm4gKGludCkoZCsxMCk7CisKKyAgICBkID0gKHVuc2lnbmVkKShjaCAtICdBJyk7CisgICAgaWYgKGQgPCA2KSByZXR1cm4gKGludCkoZCsxMCk7CisKKyAgICByZXR1cm4gLTE7Cit9CisKK3VpbnRtYXhfdAorc3RybnRvdW1heChjb25zdCBjaGFyICpucHRyLCBjaGFyICoqZW5kcHRyLCBpbnQgYmFzZSwgc2l6ZV90IG4pCit7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciogIHAgICA9IG5wdHI7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciogIGVuZCA9IHAgKyBuOworICAgIGludCAgICAgICAgICAgICAgICAgICBtaW51cyA9IDA7CisgICAgdWludG1heF90ICAgICAgICAgICAgIHYgPSAwOworICAgIGludCAgICAgICAgICAgICAgICAgICBkOworCisgICAgLyogc2tpcCBsZWFkaW5nIHNwYWNlICovCisgICAgd2hpbGUgKHAgPCBlbmQgJiYgaXNzcGFjZSgqcCkpCisgICAgICAgIHArKzsKKworICAgIC8qIFNpbmdsZSBvcHRpb25hbCArIG9yIC0gKi8KKyAgICBpZiAocCA8IGVuZCkgeworICAgICAgICBjaGFyIGMgPSBwWzBdOworICAgICAgICBpZiAoIGMgPT0gJy0nIHx8IGMgPT0gJysnICkgeworICAgICAgICAgICAgbWludXMgPSAoYyA9PSAnLScpOworICAgICAgICAgICAgcCsrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCBiYXNlID09IDAgKSB7CisgICAgICAgIGlmICggcCsyIDwgZW5kICYmIHBbMF0gPT0gJzAnICYmIChwWzFdID09ICd4JyB8fCBwWzFdID09ICdYJykgKSB7CisgICAgICAgICAgICBwICs9IDI7CisgICAgICAgICAgICBiYXNlID0gMTY7CisgICAgICAgIH0gZWxzZSBpZiAoIHArMSA8IGVuZCAmJiBwWzBdID09ICcwJyApIHsKKyAgICAgICAgICAgIHAgICArPSAxOworICAgICAgICAgICAgYmFzZSA9IDg7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBiYXNlID0gMTA7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKCBiYXNlID09IDE2ICkgeworICAgICAgICBpZiAoIHArMiA8IGVuZCAmJiBwWzBdID09ICcwJyAmJiAocFsxXSA9PSAneCcgfHwgcFsxXSA9PSAnWCcpICkgeworICAgICAgICAgICAgcCArPSAyOworICAgICAgICB9CisgICAgfQorCisgICAgd2hpbGUgKCBwIDwgZW5kICYmIChkID0gZGlnaXR2YWwoKnApKSA+PSAwICYmIGQgPCBiYXNlICkgeworICAgICAgICB2ID0gdipiYXNlICsgZDsKKyAgICAgICAgcCArPSAxOworICAgIH0KKworICAgIGlmICggZW5kcHRyICkKKyAgICAgICAgKmVuZHB0ciA9IChjaGFyICopcDsKKworICAgIHJldHVybiBtaW51cyA/IC12IDogdjsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkbGliL3N0cnRvZC5jIGIvbGliYy9zdGRsaWIvc3RydG9kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZiNzExMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkbGliL3N0cnRvZC5jCkBAIC0wLDAgKzEsMjU5MCBAQAorLyoJJE5ldEJTRDogc3RydG9kLmMsdiAxLjQ1LjIuMSAyMDA1LzA0LzE5IDEzOjM1OjU0IHRyb24gRXhwICQJKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBUaGUgYXV0aG9yIG9mIHRoaXMgc29mdHdhcmUgaXMgRGF2aWQgTS4gR2F5LgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5MSBieSBBVCZULgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIGVudGlyZSBub3RpY2UKKyAqIGlzIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb2YgYW55IHNvZnR3YXJlIHdoaWNoIGlzIG9yIGluY2x1ZGVzIGEgY29weQorICogb3IgbW9kaWZpY2F0aW9uIG9mIHRoaXMgc29mdHdhcmUgYW5kIGluIGFsbCBjb3BpZXMgb2YgdGhlIHN1cHBvcnRpbmcKKyAqIGRvY3VtZW50YXRpb24gZm9yIHN1Y2ggc29mdHdhcmUuCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBCRUlORyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAqIFdBUlJBTlRZLiAgSU4gUEFSVElDVUxBUiwgTkVJVEhFUiBUSEUgQVVUSE9SIE5PUiBBVCZUIE1BS0VTIEFOWQorICogUkVQUkVTRU5UQVRJT04gT1IgV0FSUkFOVFkgT0YgQU5ZIEtJTkQgQ09OQ0VSTklORyBUSEUgTUVSQ0hBTlRBQklMSVRZCisgKiBPRiBUSElTIFNPRlRXQVJFIE9SIElUUyBGSVRORVNTIEZPUiBBTlkgUEFSVElDVUxBUiBQVVJQT1NFLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFBsZWFzZSBzZW5kIGJ1ZyByZXBvcnRzIHRvCisJRGF2aWQgTS4gR2F5CisJQVQmVCBCZWxsIExhYm9yYXRvcmllcywgUm9vbSAyQy00NjMKKwk2MDAgTW91bnRhaW4gQXZlbnVlCisJTXVycmF5IEhpbGwsIE5KIDA3OTc0LTIwNzAKKwlVLlMuQS4KKwlkbWdAcmVzZWFyY2guYXR0LmNvbSBvciByZXNlYXJjaCFkbWcKKyAqLworCisvKiBzdHJ0b2QgZm9yIElFRUUtLCBWQVgtLCBhbmQgSUJNLWFyaXRobWV0aWMgbWFjaGluZXMuCisgKgorICogVGhpcyBzdHJ0b2QgcmV0dXJucyBhIG5lYXJlc3QgbWFjaGluZSBudW1iZXIgdG8gdGhlIGlucHV0IGRlY2ltYWwKKyAqIHN0cmluZyAob3Igc2V0cyBlcnJubyB0byBFUkFOR0UpLiAgV2l0aCBJRUVFIGFyaXRobWV0aWMsIHRpZXMgYXJlCisgKiBicm9rZW4gYnkgdGhlIElFRUUgcm91bmQtZXZlbiBydWxlLiAgT3RoZXJ3aXNlIHRpZXMgYXJlIGJyb2tlbiBieQorICogYmlhc2VkIHJvdW5kaW5nIChhZGQgaGFsZiBhbmQgY2hvcCkuCisgKgorICogSW5zcGlyZWQgbG9vc2VseSBieSBXaWxsaWFtIEQuIENsaW5nZXIncyBwYXBlciAiSG93IHRvIFJlYWQgRmxvYXRpbmcKKyAqIFBvaW50IE51bWJlcnMgQWNjdXJhdGVseSIgW1Byb2MuIEFDTSBTSUdQTEFOICc5MCwgcHAuIDkyLTEwMV0uCisgKgorICogTW9kaWZpY2F0aW9uczoKKyAqCisgKgkxLiBXZSBvbmx5IHJlcXVpcmUgSUVFRSwgSUJNLCBvciBWQVggZG91YmxlLXByZWNpc2lvbgorICoJCWFyaXRobWV0aWMgKG5vdCBJRUVFIGRvdWJsZS1leHRlbmRlZCkuCisgKgkyLiBXZSBnZXQgYnkgd2l0aCBmbG9hdGluZy1wb2ludCBhcml0aG1ldGljIGluIGEgY2FzZSB0aGF0CisgKgkJQ2xpbmdlciBtaXNzZWQgLS0gd2hlbiB3ZSdyZSBjb21wdXRpbmcgZCAqIDEwXm4KKyAqCQlmb3IgYSBzbWFsbCBpbnRlZ2VyIGQgYW5kIHRoZSBpbnRlZ2VyIG4gaXMgbm90IHRvbworICoJCW11Y2ggbGFyZ2VyIHRoYW4gMjIgKHRoZSBtYXhpbXVtIGludGVnZXIgayBmb3Igd2hpY2gKKyAqCQl3ZSBjYW4gcmVwcmVzZW50IDEwXmsgZXhhY3RseSksIHdlIG1heSBiZSBhYmxlIHRvCisgKgkJY29tcHV0ZSAoZCoxMF5rKSAqIDEwXihlLWspIHdpdGgganVzdCBvbmUgcm91bmRvZmYuCisgKgkzLiBSYXRoZXIgdGhhbiBhIGJpdC1hdC1hLXRpbWUgYWRqdXN0bWVudCBvZiB0aGUgYmluYXJ5CisgKgkJcmVzdWx0IGluIHRoZSBoYXJkIGNhc2UsIHdlIHVzZSBmbG9hdGluZy1wb2ludAorICoJCWFyaXRobWV0aWMgdG8gZGV0ZXJtaW5lIHRoZSBhZGp1c3RtZW50IHRvIHdpdGhpbgorICoJCW9uZSBiaXQ7IG9ubHkgaW4gcmVhbGx5IGhhcmQgY2FzZXMgZG8gd2UgbmVlZCB0bworICoJCWNvbXB1dGUgYSBzZWNvbmQgcmVzaWR1YWwuCisgKgk0LiBCZWNhdXNlIG9mIDMuLCB3ZSBkb24ndCBuZWVkIGEgbGFyZ2UgdGFibGUgb2YgcG93ZXJzIG9mIDEwCisgKgkJZm9yIHRlbi10by1lIChqdXN0IHNvbWUgc21hbGwgdGFibGVzLCBlLmcuIG9mIDEwXmsKKyAqCQlmb3IgMCA8PSBrIDw9IDIyKS4KKyAqLworCisvKgorICogI2RlZmluZSBJRUVFX0xJVFRMRV9FTkRJQU4gZm9yIElFRUUtYXJpdGhtZXRpYyBtYWNoaW5lcyB3aGVyZSB0aGUgbGVhc3QKKyAqCXNpZ25pZmljYW50IGJ5dGUgaGFzIHRoZSBsb3dlc3QgYWRkcmVzcy4KKyAqICNkZWZpbmUgSUVFRV9CSUdfRU5ESUFOIGZvciBJRUVFLWFyaXRobWV0aWMgbWFjaGluZXMgd2hlcmUgdGhlIG1vc3QKKyAqCXNpZ25pZmljYW50IGJ5dGUgaGFzIHRoZSBsb3dlc3QgYWRkcmVzcy4KKyAqICNkZWZpbmUgTG9uZyBpbnQgb24gbWFjaGluZXMgd2l0aCAzMi1iaXQgaW50cyBhbmQgNjQtYml0IGxvbmdzLgorICogI2RlZmluZSBTdWRkZW5fVW5kZXJmbG93IGZvciBJRUVFLWZvcm1hdCBtYWNoaW5lcyB3aXRob3V0IGdyYWR1YWwKKyAqCXVuZGVyZmxvdyAoaS5lLiwgdGhhdCBmbHVzaCB0byB6ZXJvIG9uIHVuZGVyZmxvdykuCisgKiAjZGVmaW5lIElCTSBmb3IgSUJNIG1haW5mcmFtZS1zdHlsZSBmbG9hdGluZy1wb2ludCBhcml0aG1ldGljLgorICogI2RlZmluZSBWQVggZm9yIFZBWC1zdHlsZSBmbG9hdGluZy1wb2ludCBhcml0aG1ldGljLgorICogI2RlZmluZSBVbnNpZ25lZF9TaGlmdHMgaWYgPj4gZG9lcyB0cmVhdHMgaXRzIGxlZnQgb3BlcmFuZCBhcyB1bnNpZ25lZC4KKyAqICNkZWZpbmUgTm9fbGVmdHJpZ2h0IHRvIG9taXQgbGVmdC1yaWdodCBsb2dpYyBpbiBmYXN0IGZsb2F0aW5nLXBvaW50CisgKgljb21wdXRhdGlvbiBvZiBkdG9hLgorICogI2RlZmluZSBDaGVja19GTFRfUk9VTkRTIGlmIEZMVF9ST1VORFMgY2FuIGFzc3VtZSB0aGUgdmFsdWVzIDIgb3IgMy4KKyAqICNkZWZpbmUgUk5EX1BST0RRVU9UIHRvIHVzZSBybmRfcHJvZCBhbmQgcm5kX3F1b3QgKGFzc2VtYmx5IHJvdXRpbmVzCisgKgl0aGF0IHVzZSBleHRlbmRlZC1wcmVjaXNpb24gaW5zdHJ1Y3Rpb25zIHRvIGNvbXB1dGUgcm91bmRlZAorICoJcHJvZHVjdHMgYW5kIHF1b3RpZW50cykgd2l0aCBJQk0uCisgKiAjZGVmaW5lIFJPVU5EX0JJQVNFRCBmb3IgSUVFRS1mb3JtYXQgd2l0aCBiaWFzZWQgcm91bmRpbmcuCisgKiAjZGVmaW5lIEluYWNjdXJhdGVfRGl2aWRlIGZvciBJRUVFLWZvcm1hdCB3aXRoIGNvcnJlY3RseSByb3VuZGVkCisgKglwcm9kdWN0cyBidXQgaW5hY2N1cmF0ZSBxdW90aWVudHMsIGUuZy4sIGZvciBJbnRlbCBpODYwLgorICogI2RlZmluZSBKdXN0XzE2IHRvIHN0b3JlIDE2IGJpdHMgcGVyIDMyLWJpdCBMb25nIHdoZW4gZG9pbmcgaGlnaC1wcmVjaXNpb24KKyAqCWludGVnZXIgYXJpdGhtZXRpYy4gIFdoZXRoZXIgdGhpcyBzcGVlZHMgdGhpbmdzIHVwIG9yIHNsb3dzIHRoaW5ncworICoJZG93biBkZXBlbmRzIG9uIHRoZSBtYWNoaW5lIGFuZCB0aGUgbnVtYmVyIGJlaW5nIGNvbnZlcnRlZC4KKyAqICNkZWZpbmUgS1JfaGVhZGVycyBmb3Igb2xkLXN0eWxlIEMgZnVuY3Rpb24gaGVhZGVycy4KKyAqICNkZWZpbmUgQmFkX2Zsb2F0X2ggaWYgeW91ciBzeXN0ZW0gbGFja3MgYSBmbG9hdC5oIG9yIGlmIGl0IGRvZXMgbm90CisgKglkZWZpbmUgc29tZSBvciBhbGwgb2YgREJMX0RJRywgREJMX01BWF8xMF9FWFAsIERCTF9NQVhfRVhQLAorICoJRkxUX1JBRElYLCBGTFRfUk9VTkRTLCBhbmQgREJMX01BWC4KKyAqICNkZWZpbmUgTUFMTE9DIHlvdXJfbWFsbG9jLCB3aGVyZSB5b3VyX21hbGxvYyhuKSBhY3RzIGxpa2UgbWFsbG9jKG4pCisgKglpZiBtZW1vcnkgaXMgYXZhaWxhYmxlIGFuZCBvdGhlcndpc2UgZG9lcyBzb21ldGhpbmcgeW91IGRlZW0KKyAqCWFwcHJvcHJpYXRlLiAgSWYgTUFMTE9DIGlzIHVuZGVmaW5lZCwgbWFsbG9jIHdpbGwgYmUgaW52b2tlZAorICoJZGlyZWN0bHkgLS0gYW5kIGFzc3VtZWQgYWx3YXlzIHRvIHN1Y2NlZWQuCisgKi8KKworI2lmZGVmIEFORFJPSURfQ0hBTkdFUworI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNkZWZpbmUgbXV0ZXhfbG9jayh4KSBwdGhyZWFkX211dGV4X2xvY2soeCkKKyNkZWZpbmUgbXV0ZXhfdW5sb2NrKHgpIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKHgpCisjZW5kaWYKKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQorX19SQ1NJRCgiJE5ldEJTRDogc3RydG9kLmMsdiAxLjQ1LjIuMSAyMDA1LzA0LzE5IDEzOjM1OjU0IHRyb24gRXhwICQiKTsKKyNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCisKKyNkZWZpbmUgVW5zaWduZWRfU2hpZnRzCisjaWYgZGVmaW5lZChfX202OGtfXykgfHwgZGVmaW5lZChfX3NwYXJjX18pIHx8IGRlZmluZWQoX19pMzg2X18pIHx8IFwKKyAgICBkZWZpbmVkKF9fbWlwc19fKSB8fCBkZWZpbmVkKF9fbnMzMmtfXykgfHwgZGVmaW5lZChfX2FscGhhX18pIHx8IFwKKyAgICBkZWZpbmVkKF9fcG93ZXJwY19fKSB8fCBkZWZpbmVkKF9fc2hfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBcCisgICAgZGVmaW5lZChfX2hwcGFfXykgfHwgXAorICAgIChkZWZpbmVkKF9fYXJtX18pICYmIGRlZmluZWQoX19WRlBfRlBfXykpCisjaW5jbHVkZSA8ZW5kaWFuLmg+CisjaWYgQllURV9PUkRFUiA9PSBCSUdfRU5ESUFOCisjZGVmaW5lIElFRUVfQklHX0VORElBTgorI2Vsc2UKKyNkZWZpbmUgSUVFRV9MSVRUTEVfRU5ESUFOCisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX2FybV9fKSAmJiAhZGVmaW5lZChfX1ZGUF9GUF9fKQorLyoKKyAqIEFsdGhvdWdoIHRoZSBDUFUgaXMgbGl0dGxlIGVuZGlhbiB0aGUgRlAgaGFzIGRpZmZlcmVudAorICogYnl0ZSBhbmQgd29yZCBlbmRpYW5uZXNzLiBUaGUgYnl0ZSBvcmRlciBpcyBzdGlsbCBsaXR0bGUgZW5kaWFuCisgKiBidXQgdGhlIHdvcmQgb3JkZXIgaXMgYmlnIGVuZGlhbi4KKyAqLworI2RlZmluZSBJRUVFX0JJR19FTkRJQU4KKyNlbmRpZgorCisjaWZkZWYgX192YXhfXworI2RlZmluZSBWQVgKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX2hwcGFfXykgfHwgZGVmaW5lZChfX21pcHNfXykgfHwgZGVmaW5lZChfX3NoX18pCisjZGVmaW5lCU5BTl9XT1JEMAkweDdmZjQwMDAwCisjZWxzZQorI2RlZmluZQlOQU5fV09SRDAJMHg3ZmY4MDAwMAorI2VuZGlmCisjZGVmaW5lCU5BTl9XT1JEMQkwCisKKyNkZWZpbmUgTG9uZwlpbnQzMl90CisjZGVmaW5lIFVMb25nCXVfaW50MzJfdAorCisjaWZkZWYgREVCVUcKKyNpbmNsdWRlICJzdGRpby5oIgorI2RlZmluZSBCdWcoeCkge2ZwcmludGYoc3RkZXJyLCAiJXNcbiIsIHgpOyBleGl0KDEpO30KKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKKyNpbmNsdWRlICJtYWxsb2MuaCIKKyNpbmNsdWRlICJtZW1vcnkuaCIKKyNlbHNlCisjaWZuZGVmIEtSX2hlYWRlcnMKKyNpbmNsdWRlICJzdGRsaWIuaCIKKyNpbmNsdWRlICJzdHJpbmcuaCIKKyNpZm5kZWYgQU5EUk9JRF9DSEFOR0VTCisjaW5jbHVkZSAibG9jYWxlLmgiCisjZW5kaWYgLyogQU5EUk9JRF9DSEFOR0VTICovCisjZWxzZQorI2luY2x1ZGUgIm1hbGxvYy5oIgorI2luY2x1ZGUgIm1lbW9yeS5oIgorI2VuZGlmCisjZW5kaWYKKyNpZm5kZWYgQU5EUk9JRF9DSEFOR0VTCisjaW5jbHVkZSAiZXh0ZXJuLmgiCisjaW5jbHVkZSAicmVlbnRyYW50LmgiCisjZW5kaWYgLyogQU5EUk9JRF9DSEFOR0VTICovCisKKyNpZmRlZiBNQUxMT0MKKyNpZmRlZiBLUl9oZWFkZXJzCitleHRlcm4gY2hhciAqTUFMTE9DKCk7CisjZWxzZQorZXh0ZXJuIHZvaWQgKk1BTExPQyhzaXplX3QpOworI2VuZGlmCisjZWxzZQorI2RlZmluZSBNQUxMT0MgbWFsbG9jCisjZW5kaWYKKworI2luY2x1ZGUgImN0eXBlLmgiCisjaW5jbHVkZSAiZXJybm8uaCIKKyNpbmNsdWRlICJmbG9hdC5oIgorCisjaWZuZGVmIF9fTUFUSF9IX18KKyNpbmNsdWRlICJtYXRoLmgiCisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaWZuZGVmIENPTlNUCisjaWZkZWYgS1JfaGVhZGVycworI2RlZmluZSBDT05TVCAvKiBibGFuayAqLworI2Vsc2UKKyNkZWZpbmUgQ09OU1QgY29uc3QKKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBVbnNpZ25lZF9TaGlmdHMKKyNkZWZpbmUgU2lnbl9FeHRlbmQoYSxiKSBpZiAoYiA8IDApIGEgfD0gMHhmZmZmMDAwMDsKKyNlbHNlCisjZGVmaW5lIFNpZ25fRXh0ZW5kKGEsYikgLypuby1vcCovCisjZW5kaWYKKworI2lmIGRlZmluZWQoSUVFRV9MSVRUTEVfRU5ESUFOKSArIGRlZmluZWQoSUVFRV9CSUdfRU5ESUFOKSArIGRlZmluZWQoVkFYKSArIFwKKyAgICBkZWZpbmVkKElCTSkgIT0gMQorRXhhY3RseSBvbmUgb2YgSUVFRV9MSVRUTEVfRU5ESUFOIElFRUVfQklHX0VORElBTiwgVkFYLCBvcgorSUJNIHNob3VsZCBiZSBkZWZpbmVkLgorI2VuZGlmCisKK3R5cGVkZWYgdW5pb24geworCWRvdWJsZSBkOworCVVMb25nIHVsWzJdOworfSBfZG91YmxlOworI2RlZmluZSB2YWx1ZSh4KSAoKHgpLmQpCisjaWZkZWYgSUVFRV9MSVRUTEVfRU5ESUFOCisjZGVmaW5lIHdvcmQwKHgpICgoeCkudWxbMV0pCisjZGVmaW5lIHdvcmQxKHgpICgoeCkudWxbMF0pCisjZWxzZQorI2RlZmluZSB3b3JkMCh4KSAoKHgpLnVsWzBdKQorI2RlZmluZSB3b3JkMSh4KSAoKHgpLnVsWzFdKQorI2VuZGlmCisKKy8qIFRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbiBvZiBTdG9yZWluYyBpcyBhcHByb3ByaWF0ZSBmb3IgTUlQUyBwcm9jZXNzb3JzLgorICogQW4gYWx0ZXJuYXRpdmUgdGhhdCBtaWdodCBiZSBiZXR0ZXIgb24gc29tZSBtYWNoaW5lcyBpcworICogI2RlZmluZSBTdG9yZWluYyhhLGIsYykgKCphKysgPSBiIDw8IDE2IHwgYyAmIDB4ZmZmZikKKyAqLworI2lmIGRlZmluZWQoSUVFRV9MSVRUTEVfRU5ESUFOKSArIGRlZmluZWQoVkFYKSArIGRlZmluZWQoX19hcm1fXykKKyNkZWZpbmUgU3RvcmVpbmMoYSxiLGMpIFwKKyAgICAoKCh1X3Nob3J0ICopKHZvaWQgKilhKVsxXSA9IFwKKwkodV9zaG9ydCliLCAoKHVfc2hvcnQgKikodm9pZCAqKWEpWzBdID0gKHVfc2hvcnQpYywgYSsrKQorI2Vsc2UKKyNkZWZpbmUgU3RvcmVpbmMoYSxiLGMpIFwKKyAgICAoKCh1X3Nob3J0ICopKHZvaWQgKilhKVswXSA9IFwKKwkodV9zaG9ydCliLCAoKHVfc2hvcnQgKikodm9pZCAqKWEpWzFdID0gKHVfc2hvcnQpYywgYSsrKQorI2VuZGlmCisKKy8qICNkZWZpbmUgUCBEQkxfTUFOVF9ESUcgKi8KKy8qIFRlbl9wbWF4ID0gZmxvb3IoUCpsb2coMikvbG9nKDUpKSAqLworLyogQmxldGNoID0gKGhpZ2hlc3QgcG93ZXIgb2YgMiA8IERCTF9NQVhfMTBfRVhQKSAvIDE2ICovCisvKiBRdWlja19tYXggPSBmbG9vcigoUC0xKSpsb2coRkxUX1JBRElYKS9sb2coMTApIC0gMSkgKi8KKy8qIEludF9tYXggPSBmbG9vcihQKmxvZyhGTFRfUkFESVgpL2xvZygxMCkgLSAxKSAqLworCisjaWYgZGVmaW5lZChJRUVFX0xJVFRMRV9FTkRJQU4pICsgZGVmaW5lZChJRUVFX0JJR19FTkRJQU4pCisjZGVmaW5lIEV4cF9zaGlmdCAgMjAKKyNkZWZpbmUgRXhwX3NoaWZ0MSAyMAorI2RlZmluZSBFeHBfbXNrMSAgICAweDEwMDAwMAorI2RlZmluZSBFeHBfbXNrMTEgICAweDEwMDAwMAorI2RlZmluZSBFeHBfbWFzayAgMHg3ZmYwMDAwMAorI2RlZmluZSBQIDUzCisjZGVmaW5lIEJpYXMgMTAyMworI2RlZmluZSBJRUVFX0FyaXRoCisjZGVmaW5lIEVtaW4gKC0xMDIyKQorI2RlZmluZSBFeHBfMSAgMHgzZmYwMDAwMAorI2RlZmluZSBFeHBfMTEgMHgzZmYwMDAwMAorI2RlZmluZSBFYml0cyAxMQorI2RlZmluZSBGcmFjX21hc2sgIDB4ZmZmZmYKKyNkZWZpbmUgRnJhY19tYXNrMSAweGZmZmZmCisjZGVmaW5lIFRlbl9wbWF4IDIyCisjZGVmaW5lIEJsZXRjaCAweDEwCisjZGVmaW5lIEJuZHJ5X21hc2sgIDB4ZmZmZmYKKyNkZWZpbmUgQm5kcnlfbWFzazEgMHhmZmZmZgorI2RlZmluZSBMU0IgMQorI2RlZmluZSBTaWduX2JpdCAweDgwMDAwMDAwCisjZGVmaW5lIExvZzJQIDEKKyNkZWZpbmUgVGlueTAgMAorI2RlZmluZSBUaW55MSAxCisjZGVmaW5lIFF1aWNrX21heCAxNAorI2RlZmluZSBJbnRfbWF4IDE0CisjZGVmaW5lIEluZmluaXRlKHgpICh3b3JkMCh4KSA9PSAweDdmZjAwMDAwKSAvKiBzdWZmaWNpZW50IHRlc3QgZm9yIGhlcmUgKi8KKyNlbHNlCisjdW5kZWYgIFN1ZGRlbl9VbmRlcmZsb3cKKyNkZWZpbmUgU3VkZGVuX1VuZGVyZmxvdworI2lmZGVmIElCTQorI2RlZmluZSBFeHBfc2hpZnQgIDI0CisjZGVmaW5lIEV4cF9zaGlmdDEgMjQKKyNkZWZpbmUgRXhwX21zazEgICAweDEwMDAwMDAKKyNkZWZpbmUgRXhwX21zazExICAweDEwMDAwMDAKKyNkZWZpbmUgRXhwX21hc2sgIDB4N2YwMDAwMDAKKyNkZWZpbmUgUCAxNAorI2RlZmluZSBCaWFzIDY1CisjZGVmaW5lIEV4cF8xICAweDQxMDAwMDAwCisjZGVmaW5lIEV4cF8xMSAweDQxMDAwMDAwCisjZGVmaW5lIEViaXRzIDgJLyogZXhwb25lbnQgaGFzIDcgYml0cywgYnV0IDggaXMgdGhlIHJpZ2h0IHZhbHVlIGluIGIyZCAqLworI2RlZmluZSBGcmFjX21hc2sgIDB4ZmZmZmZmCisjZGVmaW5lIEZyYWNfbWFzazEgMHhmZmZmZmYKKyNkZWZpbmUgQmxldGNoIDQKKyNkZWZpbmUgVGVuX3BtYXggMjIKKyNkZWZpbmUgQm5kcnlfbWFzayAgMHhlZmZmZmYKKyNkZWZpbmUgQm5kcnlfbWFzazEgMHhmZmZmZmYKKyNkZWZpbmUgTFNCIDEKKyNkZWZpbmUgU2lnbl9iaXQgMHg4MDAwMDAwMAorI2RlZmluZSBMb2cyUCA0CisjZGVmaW5lIFRpbnkwIDB4MTAwMDAwCisjZGVmaW5lIFRpbnkxIDAKKyNkZWZpbmUgUXVpY2tfbWF4IDE0CisjZGVmaW5lIEludF9tYXggMTUKKyNlbHNlIC8qIFZBWCAqLworI2RlZmluZSBFeHBfc2hpZnQgIDIzCisjZGVmaW5lIEV4cF9zaGlmdDEgNworI2RlZmluZSBFeHBfbXNrMSAgICAweDgwCisjZGVmaW5lIEV4cF9tc2sxMSAgIDB4ODAwMDAwCisjZGVmaW5lIEV4cF9tYXNrICAweDdmODAKKyNkZWZpbmUgUCA1NgorI2RlZmluZSBCaWFzIDEyOQorI2RlZmluZSBFeHBfMSAgMHg0MDgwMDAwMAorI2RlZmluZSBFeHBfMTEgMHg0MDgwCisjZGVmaW5lIEViaXRzIDgKKyNkZWZpbmUgRnJhY19tYXNrICAweDdmZmZmZgorI2RlZmluZSBGcmFjX21hc2sxIDB4ZmZmZjAwN2YKKyNkZWZpbmUgVGVuX3BtYXggMjQKKyNkZWZpbmUgQmxldGNoIDIKKyNkZWZpbmUgQm5kcnlfbWFzayAgMHhmZmZmMDA3ZgorI2RlZmluZSBCbmRyeV9tYXNrMSAweGZmZmYwMDdmCisjZGVmaW5lIExTQiAweDEwMDAwCisjZGVmaW5lIFNpZ25fYml0IDB4ODAwMAorI2RlZmluZSBMb2cyUCAxCisjZGVmaW5lIFRpbnkwIDB4ODAKKyNkZWZpbmUgVGlueTEgMAorI2RlZmluZSBRdWlja19tYXggMTUKKyNkZWZpbmUgSW50X21heCAxNQorI2VuZGlmCisjZW5kaWYKKworI2lmbmRlZiBJRUVFX0FyaXRoCisjZGVmaW5lIFJPVU5EX0JJQVNFRAorI2VuZGlmCisKKyNpZmRlZiBSTkRfUFJPRFFVT1QKKyNkZWZpbmUgcm91bmRlZF9wcm9kdWN0KGEsYikgYSA9IHJuZF9wcm9kKGEsIGIpCisjZGVmaW5lIHJvdW5kZWRfcXVvdGllbnQoYSxiKSBhID0gcm5kX3F1b3QoYSwgYikKKyNpZmRlZiBLUl9oZWFkZXJzCitleHRlcm4gZG91YmxlIHJuZF9wcm9kKCksIHJuZF9xdW90KCk7CisjZWxzZQorZXh0ZXJuIGRvdWJsZSBybmRfcHJvZChkb3VibGUsIGRvdWJsZSksIHJuZF9xdW90KGRvdWJsZSwgZG91YmxlKTsKKyNlbmRpZgorI2Vsc2UKKyNkZWZpbmUgcm91bmRlZF9wcm9kdWN0KGEsYikgYSAqPSBiCisjZGVmaW5lIHJvdW5kZWRfcXVvdGllbnQoYSxiKSBhIC89IGIKKyNlbmRpZgorCisjZGVmaW5lIEJpZzAgKEZyYWNfbWFzazEgfCBFeHBfbXNrMSooREJMX01BWF9FWFArQmlhcy0xKSkKKyNkZWZpbmUgQmlnMSAweGZmZmZmZmZmCisKKyNpZm5kZWYgSnVzdF8xNgorLyogV2hlbiBQYWNrXzMyIGlzIG5vdCBkZWZpbmVkLCB3ZSBzdG9yZSAxNiBiaXRzIHBlciAzMi1iaXQgTG9uZy4KKyAqIFRoaXMgbWFrZXMgc29tZSBpbm5lciBsb29wcyBzaW1wbGVyIGFuZCBzb21ldGltZXMgc2F2ZXMgd29yaworICogZHVyaW5nIG11bHRpcGxpY2F0aW9ucywgYnV0IGl0IG9mdGVuIHNlZW1zIHRvIG1ha2UgdGhpbmdzIHNsaWdodGx5CisgKiBzbG93ZXIuICBIZW5jZSB0aGUgZGVmYXVsdCBpcyBub3cgdG8gc3RvcmUgMzIgYml0cyBwZXIgTG9uZy4KKyAqLworI2lmbmRlZiBQYWNrXzMyCisjZGVmaW5lIFBhY2tfMzIKKyNlbmRpZgorI2VuZGlmCisKKyNkZWZpbmUgS21heCAxNQorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgZG91YmxlIHN0cnRvZChjb25zdCBjaGFyICpzMDAsIGNoYXIgKipzZSk7CitleHRlcm4gIkMiIGNoYXIgKl9fZHRvYShkb3VibGUgZCwgaW50IG1vZGUsIGludCBuZGlnaXRzLAorCQkJaW50ICpkZWNwdCwgaW50ICpzaWduLCBjaGFyICoqcnZlKTsKKyNlbmRpZgorCisgc3RydWN0CitCaWdpbnQgeworCXN0cnVjdCBCaWdpbnQgKm5leHQ7CisJaW50IGssIG1heHdkcywgc2lnbiwgd2RzOworCVVMb25nIHhbMV07CisJfTsKKworIHR5cGVkZWYgc3RydWN0IEJpZ2ludCBCaWdpbnQ7CisKKyBzdGF0aWMgQmlnaW50ICpmcmVlbGlzdFtLbWF4KzFdOworCisjaWZkZWYgQU5EUk9JRF9DSEFOR0VTCisgc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBmcmVlbGlzdF9tdXRleCA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7CisjZWxzZQorI2lmZGVmIF9SRUVOVFJBTlQKKyBzdGF0aWMgbXV0ZXhfdCBmcmVlbGlzdF9tdXRleCA9IE1VVEVYX0lOSVRJQUxJWkVSOworI2VuZGlmCisjZW5kaWYKKworIHN0YXRpYyBCaWdpbnQgKgorQmFsbG9jCisjaWZkZWYgS1JfaGVhZGVycworCShrKSBpbnQgazsKKyNlbHNlCisJKGludCBrKQorI2VuZGlmCit7CisJaW50IHg7CisJQmlnaW50ICpydjsKKworCW11dGV4X2xvY2soJmZyZWVsaXN0X211dGV4KTsKKworCWlmICgocnYgPSBmcmVlbGlzdFtrXSkgIT0gTlVMTCkgeworCQlmcmVlbGlzdFtrXSA9IHJ2LT5uZXh0OworCQl9CisJZWxzZSB7CisJCXggPSAxIDw8IGs7CisJCXJ2ID0gKEJpZ2ludCAqKU1BTExPQyhzaXplb2YoQmlnaW50KSArICh4LTEpKnNpemVvZihMb25nKSk7CisJCXJ2LT5rID0gazsKKwkJcnYtPm1heHdkcyA9IHg7CisJCX0KKwlydi0+c2lnbiA9IHJ2LT53ZHMgPSAwOworCisJbXV0ZXhfdW5sb2NrKCZmcmVlbGlzdF9tdXRleCk7CisKKwlyZXR1cm4gcnY7CisJfQorCisgc3RhdGljIHZvaWQKK0JmcmVlCisjaWZkZWYgS1JfaGVhZGVycworCSh2KSBCaWdpbnQgKnY7CisjZWxzZQorCShCaWdpbnQgKnYpCisjZW5kaWYKK3sKKwlpZiAodikgeworCQltdXRleF9sb2NrKCZmcmVlbGlzdF9tdXRleCk7CisKKwkJdi0+bmV4dCA9IGZyZWVsaXN0W3YtPmtdOworCQlmcmVlbGlzdFt2LT5rXSA9IHY7CisKKwkJbXV0ZXhfdW5sb2NrKCZmcmVlbGlzdF9tdXRleCk7CisJCX0KKwl9CisKKyNkZWZpbmUgQmNvcHkoeCx5KSBtZW1jcHkoJngtPnNpZ24sICZ5LT5zaWduLCBcCisgICAgeS0+d2RzKnNpemVvZihMb25nKSArIDIqc2l6ZW9mKGludCkpCisKKyBzdGF0aWMgQmlnaW50ICoKK211bHRhZGQKKyNpZmRlZiBLUl9oZWFkZXJzCisJKGIsIG0sIGEpIEJpZ2ludCAqYjsgaW50IG0sIGE7CisjZWxzZQorCShCaWdpbnQgKmIsIGludCBtLCBpbnQgYSkJLyogbXVsdGlwbHkgYnkgbSBhbmQgYWRkIGEgKi8KKyNlbmRpZgoreworCWludCBpLCB3ZHM7CisJVUxvbmcgKngsIHk7CisjaWZkZWYgUGFja18zMgorCVVMb25nIHhpLCB6OworI2VuZGlmCisJQmlnaW50ICpiMTsKKworCXdkcyA9IGItPndkczsKKwl4ID0gYi0+eDsKKwlpID0gMDsKKwlkbyB7CisjaWZkZWYgUGFja18zMgorCQl4aSA9ICp4OworCQl5ID0gKHhpICYgMHhmZmZmKSAqIG0gKyBhOworCQl6ID0gKHhpID4+IDE2KSAqIG0gKyAoeSA+PiAxNik7CisJCWEgPSAoaW50KSh6ID4+IDE2KTsKKwkJKngrKyA9ICh6IDw8IDE2KSArICh5ICYgMHhmZmZmKTsKKyNlbHNlCisJCXkgPSAqeCAqIG0gKyBhOworCQlhID0gKGludCkoeSA+PiAxNik7CisJCSp4KysgPSB5ICYgMHhmZmZmOworI2VuZGlmCisJCX0KKwkJd2hpbGUoKytpIDwgd2RzKTsKKwlpZiAoYSkgeworCQlpZiAod2RzID49IGItPm1heHdkcykgeworCQkJYjEgPSBCYWxsb2MoYi0+aysxKTsKKwkJCUJjb3B5KGIxLCBiKTsKKwkJCUJmcmVlKGIpOworCQkJYiA9IGIxOworCQkJfQorCQliLT54W3dkcysrXSA9IGE7CisJCWItPndkcyA9IHdkczsKKwkJfQorCXJldHVybiBiOworCX0KKworIHN0YXRpYyBCaWdpbnQgKgorczJiCisjaWZkZWYgS1JfaGVhZGVycworCShzLCBuZDAsIG5kLCB5OSkgQ09OU1QgY2hhciAqczsgaW50IG5kMCwgbmQ7IFVMb25nIHk5OworI2Vsc2UKKwkoQ09OU1QgY2hhciAqcywgaW50IG5kMCwgaW50IG5kLCBVTG9uZyB5OSkKKyNlbmRpZgoreworCUJpZ2ludCAqYjsKKwlpbnQgaSwgazsKKwlMb25nIHgsIHk7CisKKwl4ID0gKG5kICsgOCkgLyA5OworCWZvcihrID0gMCwgeSA9IDE7IHggPiB5OyB5IDw8PSAxLCBrKyspIDsKKyNpZmRlZiBQYWNrXzMyCisJYiA9IEJhbGxvYyhrKTsKKwliLT54WzBdID0geTk7CisJYi0+d2RzID0gMTsKKyNlbHNlCisJYiA9IEJhbGxvYyhrKzEpOworCWItPnhbMF0gPSB5OSAmIDB4ZmZmZjsKKwliLT53ZHMgPSAoYi0+eFsxXSA9IHk5ID4+IDE2KSA/IDIgOiAxOworI2VuZGlmCisKKwlpID0gOTsKKwlpZiAoOSA8IG5kMCkgeworCQlzICs9IDk7CisJCWRvIGIgPSBtdWx0YWRkKGIsIDEwLCAqcysrIC0gJzAnKTsKKwkJCXdoaWxlKCsraSA8IG5kMCk7CisJCXMrKzsKKwkJfQorCWVsc2UKKwkJcyArPSAxMDsKKwlmb3IoOyBpIDwgbmQ7IGkrKykKKwkJYiA9IG11bHRhZGQoYiwgMTAsICpzKysgLSAnMCcpOworCXJldHVybiBiOworCX0KKworIHN0YXRpYyBpbnQKK2hpMGJpdHMKKyNpZmRlZiBLUl9oZWFkZXJzCisJKHgpIFVMb25nIHg7CisjZWxzZQorCShVTG9uZyB4KQorI2VuZGlmCit7CisJaW50IGsgPSAwOworCisJaWYgKCEoeCAmIDB4ZmZmZjAwMDApKSB7CisJCWsgPSAxNjsKKwkJeCA8PD0gMTY7CisJCX0KKwlpZiAoISh4ICYgMHhmZjAwMDAwMCkpIHsKKwkJayArPSA4OworCQl4IDw8PSA4OworCQl9CisJaWYgKCEoeCAmIDB4ZjAwMDAwMDApKSB7CisJCWsgKz0gNDsKKwkJeCA8PD0gNDsKKwkJfQorCWlmICghKHggJiAweGMwMDAwMDAwKSkgeworCQlrICs9IDI7CisJCXggPDw9IDI7CisJCX0KKwlpZiAoISh4ICYgMHg4MDAwMDAwMCkpIHsKKwkJaysrOworCQlpZiAoISh4ICYgMHg0MDAwMDAwMCkpCisJCQlyZXR1cm4gMzI7CisJCX0KKwlyZXR1cm4gazsKKwl9CisKKyBzdGF0aWMgaW50CitsbzBiaXRzCisjaWZkZWYgS1JfaGVhZGVycworCSh5KSBVTG9uZyAqeTsKKyNlbHNlCisJKFVMb25nICp5KQorI2VuZGlmCit7CisJaW50IGs7CisJVUxvbmcgeCA9ICp5OworCisJaWYgKHggJiA3KSB7CisJCWlmICh4ICYgMSkKKwkJCXJldHVybiAwOworCQlpZiAoeCAmIDIpIHsKKwkJCSp5ID0geCA+PiAxOworCQkJcmV0dXJuIDE7CisJCQl9CisJCSp5ID0geCA+PiAyOworCQlyZXR1cm4gMjsKKwkJfQorCWsgPSAwOworCWlmICghKHggJiAweGZmZmYpKSB7CisJCWsgPSAxNjsKKwkJeCA+Pj0gMTY7CisJCX0KKwlpZiAoISh4ICYgMHhmZikpIHsKKwkJayArPSA4OworCQl4ID4+PSA4OworCQl9CisJaWYgKCEoeCAmIDB4ZikpIHsKKwkJayArPSA0OworCQl4ID4+PSA0OworCQl9CisJaWYgKCEoeCAmIDB4MykpIHsKKwkJayArPSAyOworCQl4ID4+PSAyOworCQl9CisJaWYgKCEoeCAmIDEpKSB7CisJCWsrKzsKKwkJeCA+Pj0gMTsKKwkJaWYgKCF4ICYgMSkKKwkJCXJldHVybiAzMjsKKwkJfQorCSp5ID0geDsKKwlyZXR1cm4gazsKKwl9CisKKyBzdGF0aWMgQmlnaW50ICoKK2kyYgorI2lmZGVmIEtSX2hlYWRlcnMKKwkoaSkgaW50IGk7CisjZWxzZQorCShpbnQgaSkKKyNlbmRpZgoreworCUJpZ2ludCAqYjsKKworCWIgPSBCYWxsb2MoMSk7CisJYi0+eFswXSA9IGk7CisJYi0+d2RzID0gMTsKKwlyZXR1cm4gYjsKKwl9CisKKyBzdGF0aWMgQmlnaW50ICoKK211bHQKKyNpZmRlZiBLUl9oZWFkZXJzCisJKGEsIGIpIEJpZ2ludCAqYSwgKmI7CisjZWxzZQorCShCaWdpbnQgKmEsIEJpZ2ludCAqYikKKyNlbmRpZgoreworCUJpZ2ludCAqYzsKKwlpbnQgaywgd2EsIHdiLCB3YzsKKwlVTG9uZyBjYXJyeSwgeSwgejsKKwlVTG9uZyAqeCwgKnhhLCAqeGFlLCAqeGIsICp4YmUsICp4YywgKnhjMDsKKyNpZmRlZiBQYWNrXzMyCisJVUxvbmcgejI7CisjZW5kaWYKKworCWlmIChhLT53ZHMgPCBiLT53ZHMpIHsKKwkJYyA9IGE7CisJCWEgPSBiOworCQliID0gYzsKKwkJfQorCWsgPSBhLT5rOworCXdhID0gYS0+d2RzOworCXdiID0gYi0+d2RzOworCXdjID0gd2EgKyB3YjsKKwlpZiAod2MgPiBhLT5tYXh3ZHMpCisJCWsrKzsKKwljID0gQmFsbG9jKGspOworCWZvcih4ID0gYy0+eCwgeGEgPSB4ICsgd2M7IHggPCB4YTsgeCsrKQorCQkqeCA9IDA7CisJeGEgPSBhLT54OworCXhhZSA9IHhhICsgd2E7CisJeGIgPSBiLT54OworCXhiZSA9IHhiICsgd2I7CisJeGMwID0gYy0+eDsKKyNpZmRlZiBQYWNrXzMyCisJZm9yKDsgeGIgPCB4YmU7IHhiKyssIHhjMCsrKSB7CisJCWlmICgoeSA9ICp4YiAmIDB4ZmZmZikgIT0gMCkgeworCQkJeCA9IHhhOworCQkJeGMgPSB4YzA7CisJCQljYXJyeSA9IDA7CisJCQlkbyB7CisJCQkJeiA9ICgqeCAmIDB4ZmZmZikgKiB5ICsgKCp4YyAmIDB4ZmZmZikgKyBjYXJyeTsKKwkJCQljYXJyeSA9IHogPj4gMTY7CisJCQkJejIgPSAoKngrKyA+PiAxNikgKiB5ICsgKCp4YyA+PiAxNikgKyBjYXJyeTsKKwkJCQljYXJyeSA9IHoyID4+IDE2OworCQkJCVN0b3JlaW5jKHhjLCB6Miwgeik7CisJCQkJfQorCQkJCXdoaWxlKHggPCB4YWUpOworCQkJKnhjID0gY2Fycnk7CisJCQl9CisJCWlmICgoeSA9ICp4YiA+PiAxNikgIT0gMCkgeworCQkJeCA9IHhhOworCQkJeGMgPSB4YzA7CisJCQljYXJyeSA9IDA7CisJCQl6MiA9ICp4YzsKKwkJCWRvIHsKKwkJCQl6ID0gKCp4ICYgMHhmZmZmKSAqIHkgKyAoKnhjID4+IDE2KSArIGNhcnJ5OworCQkJCWNhcnJ5ID0geiA+PiAxNjsKKwkJCQlTdG9yZWluYyh4YywgeiwgejIpOworCQkJCXoyID0gKCp4KysgPj4gMTYpICogeSArICgqeGMgJiAweGZmZmYpICsgY2Fycnk7CisJCQkJY2FycnkgPSB6MiA+PiAxNjsKKwkJCQl9CisJCQkJd2hpbGUoeCA8IHhhZSk7CisJCQkqeGMgPSB6MjsKKwkJCX0KKwkJfQorI2Vsc2UKKwlmb3IoOyB4YiA8IHhiZTsgeGMwKyspIHsKKwkJaWYgKHkgPSAqeGIrKykgeworCQkJeCA9IHhhOworCQkJeGMgPSB4YzA7CisJCQljYXJyeSA9IDA7CisJCQlkbyB7CisJCQkJeiA9ICp4KysgKiB5ICsgKnhjICsgY2Fycnk7CisJCQkJY2FycnkgPSB6ID4+IDE2OworCQkJCSp4YysrID0geiAmIDB4ZmZmZjsKKwkJCQl9CisJCQkJd2hpbGUoeCA8IHhhZSk7CisJCQkqeGMgPSBjYXJyeTsKKwkJCX0KKwkJfQorI2VuZGlmCisJZm9yKHhjMCA9IGMtPngsIHhjID0geGMwICsgd2M7IHdjID4gMCAmJiAhKi0teGM7IC0td2MpIDsKKwljLT53ZHMgPSB3YzsKKwlyZXR1cm4gYzsKKwl9CisKKyBzdGF0aWMgQmlnaW50ICpwNXM7CisKKyBzdGF0aWMgQmlnaW50ICoKK3BvdzVtdWx0CisjaWZkZWYgS1JfaGVhZGVycworCShiLCBrKSBCaWdpbnQgKmI7IGludCBrOworI2Vsc2UKKwkoQmlnaW50ICpiLCBpbnQgaykKKyNlbmRpZgoreworCUJpZ2ludCAqYjEsICpwNSwgKnA1MTsKKwlpbnQgaTsKKwlzdGF0aWMgY29uc3QgaW50IHAwNVszXSA9IHsgNSwgMjUsIDEyNSB9OworCisJaWYgKChpID0gayAmIDMpICE9IDApCisJCWIgPSBtdWx0YWRkKGIsIHAwNVtpLTFdLCAwKTsKKworCWlmICghKGsgPSAodW5zaWduZWQgaW50KSBrID4+IDIpKQorCQlyZXR1cm4gYjsKKwlpZiAoIShwNSA9IHA1cykpIHsKKwkJLyogZmlyc3QgdGltZSAqLworCQlwNSA9IHA1cyA9IGkyYig2MjUpOworCQlwNS0+bmV4dCA9IDA7CisJCX0KKwlmb3IoOzspIHsKKwkJaWYgKGsgJiAxKSB7CisJCQliMSA9IG11bHQoYiwgcDUpOworCQkJQmZyZWUoYik7CisJCQliID0gYjE7CisJCQl9CisJCWlmICghKGsgPSAodW5zaWduZWQgaW50KSBrID4+IDEpKQorCQkJYnJlYWs7CisJCWlmICghKHA1MSA9IHA1LT5uZXh0KSkgeworCQkJcDUxID0gcDUtPm5leHQgPSBtdWx0KHA1LHA1KTsKKwkJCXA1MS0+bmV4dCA9IDA7CisJCQl9CisJCXA1ID0gcDUxOworCQl9CisJcmV0dXJuIGI7CisJfQorCisgc3RhdGljIEJpZ2ludCAqCitsc2hpZnQKKyNpZmRlZiBLUl9oZWFkZXJzCisJKGIsIGspIEJpZ2ludCAqYjsgaW50IGs7CisjZWxzZQorCShCaWdpbnQgKmIsIGludCBrKQorI2VuZGlmCit7CisJaW50IGksIGsxLCBuLCBuMTsKKwlCaWdpbnQgKmIxOworCVVMb25nICp4LCAqeDEsICp4ZSwgejsKKworI2lmZGVmIFBhY2tfMzIKKwluID0gKHVuc2lnbmVkIGludClrID4+IDU7CisjZWxzZQorCW4gPSAodW5zaWduZWQgaW50KWsgPj4gNDsKKyNlbmRpZgorCWsxID0gYi0+azsKKwluMSA9IG4gKyBiLT53ZHMgKyAxOworCWZvcihpID0gYi0+bWF4d2RzOyBuMSA+IGk7IGkgPDw9IDEpCisJCWsxKys7CisJYjEgPSBCYWxsb2MoazEpOworCXgxID0gYjEtPng7CisJZm9yKGkgPSAwOyBpIDwgbjsgaSsrKQorCQkqeDErKyA9IDA7CisJeCA9IGItPng7CisJeGUgPSB4ICsgYi0+d2RzOworI2lmZGVmIFBhY2tfMzIKKwlpZiAoayAmPSAweDFmKSB7CisJCWsxID0gMzIgLSBrOworCQl6ID0gMDsKKwkJZG8geworCQkJKngxKysgPSAqeCA8PCBrIHwgejsKKwkJCXogPSAqeCsrID4+IGsxOworCQkJfQorCQkJd2hpbGUoeCA8IHhlKTsKKwkJaWYgKCgqeDEgPSB6KSAhPSAwKQorCQkJKytuMTsKKwkJfQorI2Vsc2UKKwlpZiAoayAmPSAweGYpIHsKKwkJazEgPSAxNiAtIGs7CisJCXogPSAwOworCQlkbyB7CisJCQkqeDErKyA9ICp4IDw8IGsgICYgMHhmZmZmIHwgejsKKwkJCXogPSAqeCsrID4+IGsxOworCQkJfQorCQkJd2hpbGUoeCA8IHhlKTsKKwkJaWYgKCp4MSA9IHopCisJCQkrK24xOworCQl9CisjZW5kaWYKKwllbHNlIGRvCisJCSp4MSsrID0gKngrKzsKKwkJd2hpbGUoeCA8IHhlKTsKKwliMS0+d2RzID0gbjEgLSAxOworCUJmcmVlKGIpOworCXJldHVybiBiMTsKKwl9CisKKyBzdGF0aWMgaW50CitjbXAKKyNpZmRlZiBLUl9oZWFkZXJzCisJKGEsIGIpIEJpZ2ludCAqYSwgKmI7CisjZWxzZQorCShCaWdpbnQgKmEsIEJpZ2ludCAqYikKKyNlbmRpZgoreworCVVMb25nICp4YSwgKnhhMCwgKnhiLCAqeGIwOworCWludCBpLCBqOworCisJaSA9IGEtPndkczsKKwlqID0gYi0+d2RzOworI2lmZGVmIERFQlVHCisJaWYgKGkgPiAxICYmICFhLT54W2ktMV0pCisJCUJ1ZygiY21wIGNhbGxlZCB3aXRoIGEtPnhbYS0+d2RzLTFdID09IDAiKTsKKwlpZiAoaiA+IDEgJiYgIWItPnhbai0xXSkKKwkJQnVnKCJjbXAgY2FsbGVkIHdpdGggYi0+eFtiLT53ZHMtMV0gPT0gMCIpOworI2VuZGlmCisJaWYgKGkgLT0gaikKKwkJcmV0dXJuIGk7CisJeGEwID0gYS0+eDsKKwl4YSA9IHhhMCArIGo7CisJeGIwID0gYi0+eDsKKwl4YiA9IHhiMCArIGo7CisJZm9yKDs7KSB7CisJCWlmICgqLS14YSAhPSAqLS14YikKKwkJCXJldHVybiAqeGEgPCAqeGIgPyAtMSA6IDE7CisJCWlmICh4YSA8PSB4YTApCisJCQlicmVhazsKKwkJfQorCXJldHVybiAwOworCX0KKworIHN0YXRpYyBCaWdpbnQgKgorZGlmZgorI2lmZGVmIEtSX2hlYWRlcnMKKwkoYSwgYikgQmlnaW50ICphLCAqYjsKKyNlbHNlCisJKEJpZ2ludCAqYSwgQmlnaW50ICpiKQorI2VuZGlmCit7CisJQmlnaW50ICpjOworCWludCBpLCB3YSwgd2I7CisJTG9uZyBib3Jyb3csIHk7CS8qIFdlIG5lZWQgc2lnbmVkIHNoaWZ0cyBoZXJlLiAqLworCVVMb25nICp4YSwgKnhhZSwgKnhiLCAqeGJlLCAqeGM7CisjaWZkZWYgUGFja18zMgorCUxvbmcgejsKKyNlbmRpZgorCisJaSA9IGNtcChhLGIpOworCWlmICghaSkgeworCQljID0gQmFsbG9jKDApOworCQljLT53ZHMgPSAxOworCQljLT54WzBdID0gMDsKKwkJcmV0dXJuIGM7CisJCX0KKwlpZiAoaSA8IDApIHsKKwkJYyA9IGE7CisJCWEgPSBiOworCQliID0gYzsKKwkJaSA9IDE7CisJCX0KKwllbHNlCisJCWkgPSAwOworCWMgPSBCYWxsb2MoYS0+ayk7CisJYy0+c2lnbiA9IGk7CisJd2EgPSBhLT53ZHM7CisJeGEgPSBhLT54OworCXhhZSA9IHhhICsgd2E7CisJd2IgPSBiLT53ZHM7CisJeGIgPSBiLT54OworCXhiZSA9IHhiICsgd2I7CisJeGMgPSBjLT54OworCWJvcnJvdyA9IDA7CisjaWZkZWYgUGFja18zMgorCWRvIHsKKwkJeSA9ICgqeGEgJiAweGZmZmYpIC0gKCp4YiAmIDB4ZmZmZikgKyBib3Jyb3c7CisJCWJvcnJvdyA9IChVTG9uZyl5ID4+IDE2OworCQlTaWduX0V4dGVuZChib3Jyb3csIHkpOworCQl6ID0gKCp4YSsrID4+IDE2KSAtICgqeGIrKyA+PiAxNikgKyBib3Jyb3c7CisJCWJvcnJvdyA9IChVTG9uZyl6ID4+IDE2OworCQlTaWduX0V4dGVuZChib3Jyb3csIHopOworCQlTdG9yZWluYyh4YywgeiwgeSk7CisJCX0KKwkJd2hpbGUoeGIgPCB4YmUpOworCXdoaWxlKHhhIDwgeGFlKSB7CisJCXkgPSAoKnhhICYgMHhmZmZmKSArIGJvcnJvdzsKKwkJYm9ycm93ID0gKFVMb25nKXkgPj4gMTY7CisJCVNpZ25fRXh0ZW5kKGJvcnJvdywgeSk7CisJCXogPSAoKnhhKysgPj4gMTYpICsgYm9ycm93OworCQlib3Jyb3cgPSAoVUxvbmcpeiA+PiAxNjsKKwkJU2lnbl9FeHRlbmQoYm9ycm93LCB6KTsKKwkJU3RvcmVpbmMoeGMsIHosIHkpOworCQl9CisjZWxzZQorCWRvIHsKKwkJeSA9ICp4YSsrIC0gKnhiKysgKyBib3Jyb3c7CisJCWJvcnJvdyA9IHkgPj4gMTY7CisJCVNpZ25fRXh0ZW5kKGJvcnJvdywgeSk7CisJCSp4YysrID0geSAmIDB4ZmZmZjsKKwkJfQorCQl3aGlsZSh4YiA8IHhiZSk7CisJd2hpbGUoeGEgPCB4YWUpIHsKKwkJeSA9ICp4YSsrICsgYm9ycm93OworCQlib3Jyb3cgPSB5ID4+IDE2OworCQlTaWduX0V4dGVuZChib3Jyb3csIHkpOworCQkqeGMrKyA9IHkgJiAweGZmZmY7CisJCX0KKyNlbmRpZgorCXdoaWxlKCEqLS14YykKKwkJd2EtLTsKKwljLT53ZHMgPSB3YTsKKwlyZXR1cm4gYzsKKwl9CisKKyBzdGF0aWMgZG91YmxlCit1bHAKKyNpZmRlZiBLUl9oZWFkZXJzCisJKF94KSBkb3VibGUgX3g7CisjZWxzZQorCShkb3VibGUgX3gpCisjZW5kaWYKK3sKKwlfZG91YmxlIHg7CisJTG9uZyBMOworCV9kb3VibGUgYTsKKworCXZhbHVlKHgpID0gX3g7CisJTCA9ICh3b3JkMCh4KSAmIEV4cF9tYXNrKSAtIChQLTEpKkV4cF9tc2sxOworI2lmbmRlZiBTdWRkZW5fVW5kZXJmbG93CisJaWYgKEwgPiAwKSB7CisjZW5kaWYKKyNpZmRlZiBJQk0KKwkJTCB8PSBFeHBfbXNrMSA+PiA0OworI2VuZGlmCisJCXdvcmQwKGEpID0gTDsKKwkJd29yZDEoYSkgPSAwOworI2lmbmRlZiBTdWRkZW5fVW5kZXJmbG93CisJCX0KKwllbHNlIHsKKwkJTCA9IChVTG9uZyktTCA+PiBFeHBfc2hpZnQ7CisJCWlmIChMIDwgRXhwX3NoaWZ0KSB7CisJCQl3b3JkMChhKSA9IDB4ODAwMDAgPj4gTDsKKwkJCXdvcmQxKGEpID0gMDsKKwkJCX0KKwkJZWxzZSB7CisJCQl3b3JkMChhKSA9IDA7CisJCQlMIC09IEV4cF9zaGlmdDsKKwkJCXdvcmQxKGEpID0gTCA+PSAzMSA/IDEgOiAxIDw8ICgzMSAtIEwpOworCQkJfQorCQl9CisjZW5kaWYKKwlyZXR1cm4gdmFsdWUoYSk7CisJfQorCisgc3RhdGljIGRvdWJsZQorYjJkCisjaWZkZWYgS1JfaGVhZGVycworCShhLCBlKSBCaWdpbnQgKmE7IGludCAqZTsKKyNlbHNlCisJKEJpZ2ludCAqYSwgaW50ICplKQorI2VuZGlmCit7CisJVUxvbmcgKnhhLCAqeGEwLCB3LCB5LCB6OworCWludCBrOworCV9kb3VibGUgZDsKKyNpZmRlZiBWQVgKKwlVTG9uZyBkMCwgZDE7CisjZWxzZQorI2RlZmluZSBkMCB3b3JkMChkKQorI2RlZmluZSBkMSB3b3JkMShkKQorI2VuZGlmCisKKwl4YTAgPSBhLT54OworCXhhID0geGEwICsgYS0+d2RzOworCXkgPSAqLS14YTsKKyNpZmRlZiBERUJVRworCWlmICgheSkgQnVnKCJ6ZXJvIHkgaW4gYjJkIik7CisjZW5kaWYKKwlrID0gaGkwYml0cyh5KTsKKwkqZSA9IDMyIC0gazsKKyNpZmRlZiBQYWNrXzMyCisJaWYgKGsgPCBFYml0cykgeworCQlkMCA9IEV4cF8xIHwgeSA+PiAoRWJpdHMgLSBrKTsKKwkJdyA9IHhhID4geGEwID8gKi0teGEgOiAwOworCQlkMSA9IHkgPDwgKCgzMi1FYml0cykgKyBrKSB8IHcgPj4gKEViaXRzIC0gayk7CisJCWdvdG8gcmV0X2Q7CisJCX0KKwl6ID0geGEgPiB4YTAgPyAqLS14YSA6IDA7CisJaWYgKGsgLT0gRWJpdHMpIHsKKwkJZDAgPSBFeHBfMSB8IHkgPDwgayB8IHogPj4gKDMyIC0gayk7CisJCXkgPSB4YSA+IHhhMCA/ICotLXhhIDogMDsKKwkJZDEgPSB6IDw8IGsgfCB5ID4+ICgzMiAtIGspOworCQl9CisJZWxzZSB7CisJCWQwID0gRXhwXzEgfCB5OworCQlkMSA9IHo7CisJCX0KKyNlbHNlCisJaWYgKGsgPCBFYml0cyArIDE2KSB7CisJCXogPSB4YSA+IHhhMCA/ICotLXhhIDogMDsKKwkJZDAgPSBFeHBfMSB8IHkgPDwgayAtIEViaXRzIHwgeiA+PiBFYml0cyArIDE2IC0gazsKKwkJdyA9IHhhID4geGEwID8gKi0teGEgOiAwOworCQl5ID0geGEgPiB4YTAgPyAqLS14YSA6IDA7CisJCWQxID0geiA8PCBrICsgMTYgLSBFYml0cyB8IHcgPDwgayAtIEViaXRzIHwgeSA+PiAxNiArIEViaXRzIC0gazsKKwkJZ290byByZXRfZDsKKwkJfQorCXogPSB4YSA+IHhhMCA/ICotLXhhIDogMDsKKwl3ID0geGEgPiB4YTAgPyAqLS14YSA6IDA7CisJayAtPSBFYml0cyArIDE2OworCWQwID0gRXhwXzEgfCB5IDw8IGsgKyAxNiB8IHogPDwgayB8IHcgPj4gMTYgLSBrOworCXkgPSB4YSA+IHhhMCA/ICotLXhhIDogMDsKKwlkMSA9IHcgPDwgayArIDE2IHwgeSA8PCBrOworI2VuZGlmCisgcmV0X2Q6CisjaWZkZWYgVkFYCisJd29yZDAoZCkgPSBkMCA+PiAxNiB8IGQwIDw8IDE2OworCXdvcmQxKGQpID0gZDEgPj4gMTYgfCBkMSA8PCAxNjsKKyNlbHNlCisjdW5kZWYgZDAKKyN1bmRlZiBkMQorI2VuZGlmCisJcmV0dXJuIHZhbHVlKGQpOworCX0KKworIHN0YXRpYyBCaWdpbnQgKgorZDJiCisjaWZkZWYgS1JfaGVhZGVycworCShfZCwgZSwgYml0cykgZG91YmxlIGQ7IGludCAqZSwgKmJpdHM7CisjZWxzZQorCShkb3VibGUgX2QsIGludCAqZSwgaW50ICpiaXRzKQorI2VuZGlmCit7CisJQmlnaW50ICpiOworCWludCBkZSwgaSwgazsKKwlVTG9uZyAqeCwgeSwgejsKKwlfZG91YmxlIGQ7CisjaWZkZWYgVkFYCisJVUxvbmcgZDAsIGQxOworI2VuZGlmCisKKwl2YWx1ZShkKSA9IF9kOworI2lmZGVmIFZBWAorCWQwID0gd29yZDAoZCkgPj4gMTYgfCB3b3JkMChkKSA8PCAxNjsKKwlkMSA9IHdvcmQxKGQpID4+IDE2IHwgd29yZDEoZCkgPDwgMTY7CisjZWxzZQorI2RlZmluZSBkMCB3b3JkMChkKQorI2RlZmluZSBkMSB3b3JkMShkKQorI2VuZGlmCisKKyNpZmRlZiBQYWNrXzMyCisJYiA9IEJhbGxvYygxKTsKKyNlbHNlCisJYiA9IEJhbGxvYygyKTsKKyNlbmRpZgorCXggPSBiLT54OworCisJeiA9IGQwICYgRnJhY19tYXNrOworCWQwICY9IDB4N2ZmZmZmZmY7CS8qIGNsZWFyIHNpZ24gYml0LCB3aGljaCB3ZSBpZ25vcmUgKi8KKyNpZmRlZiBTdWRkZW5fVW5kZXJmbG93CisJZGUgPSAoaW50KShkMCA+PiBFeHBfc2hpZnQpOworI2lmbmRlZiBJQk0KKwl6IHw9IEV4cF9tc2sxMTsKKyNlbmRpZgorI2Vsc2UKKwlpZiAoKGRlID0gKGludCkoZDAgPj4gRXhwX3NoaWZ0KSkgIT0gMCkKKwkJeiB8PSBFeHBfbXNrMTsKKyNlbmRpZgorI2lmZGVmIFBhY2tfMzIKKwlpZiAoKHkgPSBkMSkgIT0gMCkgeworCQlpZiAoKGsgPSBsbzBiaXRzKCZ5KSkgIT0gMCkgeworCQkJeFswXSA9IHkgfCB6IDw8ICgzMiAtIGspOworCQkJeiA+Pj0gazsKKwkJCX0KKwkJZWxzZQorCQkJeFswXSA9IHk7CisJCWkgPSBiLT53ZHMgPSAoeFsxXSA9IHopID8gMiA6IDE7CisJCX0KKwllbHNlIHsKKyNpZmRlZiBERUJVRworCQlpZiAoIXopCisJCQlCdWcoIlplcm8gcGFzc2VkIHRvIGQyYiIpOworI2VuZGlmCisJCWsgPSBsbzBiaXRzKCZ6KTsKKwkJeFswXSA9IHo7CisJCWkgPSBiLT53ZHMgPSAxOworCQlrICs9IDMyOworCQl9CisjZWxzZQorCWlmICh5ID0gZDEpIHsKKwkJaWYgKGsgPSBsbzBiaXRzKCZ5KSkKKwkJCWlmIChrID49IDE2KSB7CisJCQkJeFswXSA9IHkgfCB6IDw8IDMyIC0gayAmIDB4ZmZmZjsKKwkJCQl4WzFdID0geiA+PiBrIC0gMTYgJiAweGZmZmY7CisJCQkJeFsyXSA9IHogPj4gazsKKwkJCQlpID0gMjsKKwkJCQl9CisJCQllbHNlIHsKKwkJCQl4WzBdID0geSAmIDB4ZmZmZjsKKwkJCQl4WzFdID0geSA+PiAxNiB8IHogPDwgMTYgLSBrICYgMHhmZmZmOworCQkJCXhbMl0gPSB6ID4+IGsgJiAweGZmZmY7CisJCQkJeFszXSA9IHogPj4gaysxNjsKKwkJCQlpID0gMzsKKwkJCQl9CisJCWVsc2UgeworCQkJeFswXSA9IHkgJiAweGZmZmY7CisJCQl4WzFdID0geSA+PiAxNjsKKwkJCXhbMl0gPSB6ICYgMHhmZmZmOworCQkJeFszXSA9IHogPj4gMTY7CisJCQlpID0gMzsKKwkJCX0KKwkJfQorCWVsc2UgeworI2lmZGVmIERFQlVHCisJCWlmICgheikKKwkJCUJ1ZygiWmVybyBwYXNzZWQgdG8gZDJiIik7CisjZW5kaWYKKwkJayA9IGxvMGJpdHMoJnopOworCQlpZiAoayA+PSAxNikgeworCQkJeFswXSA9IHo7CisJCQlpID0gMDsKKwkJCX0KKwkJZWxzZSB7CisJCQl4WzBdID0geiAmIDB4ZmZmZjsKKwkJCXhbMV0gPSB6ID4+IDE2OworCQkJaSA9IDE7CisJCQl9CisJCWsgKz0gMzI7CisJCX0KKwl3aGlsZSgheFtpXSkKKwkJLS1pOworCWItPndkcyA9IGkgKyAxOworI2VuZGlmCisjaWZuZGVmIFN1ZGRlbl9VbmRlcmZsb3cKKwlpZiAoZGUpIHsKKyNlbmRpZgorI2lmZGVmIElCTQorCQkqZSA9IChkZSAtIEJpYXMgLSAoUC0xKSA8PCAyKSArIGs7CisJCSpiaXRzID0gNCpQICsgOCAtIGsgLSBoaTBiaXRzKHdvcmQwKGQpICYgRnJhY19tYXNrKTsKKyNlbHNlCisJCSplID0gZGUgLSBCaWFzIC0gKFAtMSkgKyBrOworCQkqYml0cyA9IFAgLSBrOworI2VuZGlmCisjaWZuZGVmIFN1ZGRlbl9VbmRlcmZsb3cKKwkJfQorCWVsc2UgeworCQkqZSA9IGRlIC0gQmlhcyAtIChQLTEpICsgMSArIGs7CisjaWZkZWYgUGFja18zMgorCQkqYml0cyA9IDMyKmkgLSBoaTBiaXRzKHhbaS0xXSk7CisjZWxzZQorCQkqYml0cyA9IChpKzIpKjE2IC0gaGkwYml0cyh4W2ldKTsKKyNlbmRpZgorCQl9CisjZW5kaWYKKwlyZXR1cm4gYjsKKwl9CisjdW5kZWYgZDAKKyN1bmRlZiBkMQorCisgc3RhdGljIGRvdWJsZQorcmF0aW8KKyNpZmRlZiBLUl9oZWFkZXJzCisJKGEsIGIpIEJpZ2ludCAqYSwgKmI7CisjZWxzZQorCShCaWdpbnQgKmEsIEJpZ2ludCAqYikKKyNlbmRpZgoreworCV9kb3VibGUgZGEsIGRiOworCWludCBrLCBrYSwga2I7CisKKwl2YWx1ZShkYSkgPSBiMmQoYSwgJmthKTsKKwl2YWx1ZShkYikgPSBiMmQoYiwgJmtiKTsKKyNpZmRlZiBQYWNrXzMyCisJayA9IGthIC0ga2IgKyAzMiooYS0+d2RzIC0gYi0+d2RzKTsKKyNlbHNlCisJayA9IGthIC0ga2IgKyAxNiooYS0+d2RzIC0gYi0+d2RzKTsKKyNlbmRpZgorI2lmZGVmIElCTQorCWlmIChrID4gMCkgeworCQl3b3JkMChkYSkgKz0gKGsgPj4gMikqRXhwX21zazE7CisJCWlmIChrICY9IDMpCisJCQlkYSAqPSAxIDw8IGs7CisJCX0KKwllbHNlIHsKKwkJayA9IC1rOworCQl3b3JkMChkYikgKz0gKGsgPj4gMikqRXhwX21zazE7CisJCWlmIChrICY9IDMpCisJCQlkYiAqPSAxIDw8IGs7CisJCX0KKyNlbHNlCisJaWYgKGsgPiAwKQorCQl3b3JkMChkYSkgKz0gaypFeHBfbXNrMTsKKwllbHNlIHsKKwkJayA9IC1rOworCQl3b3JkMChkYikgKz0gaypFeHBfbXNrMTsKKwkJfQorI2VuZGlmCisJcmV0dXJuIHZhbHVlKGRhKSAvIHZhbHVlKGRiKTsKKwl9CisKK3N0YXRpYyBDT05TVCBkb3VibGUKK3RlbnNbXSA9IHsKKwkJMWUwLCAxZTEsIDFlMiwgMWUzLCAxZTQsIDFlNSwgMWU2LCAxZTcsIDFlOCwgMWU5LAorCQkxZTEwLCAxZTExLCAxZTEyLCAxZTEzLCAxZTE0LCAxZTE1LCAxZTE2LCAxZTE3LCAxZTE4LCAxZTE5LAorCQkxZTIwLCAxZTIxLCAxZTIyCisjaWZkZWYgVkFYCisJCSwgMWUyMywgMWUyNAorI2VuZGlmCisJCX07CisKKyNpZmRlZiBJRUVFX0FyaXRoCitzdGF0aWMgQ09OU1QgZG91YmxlIGJpZ3RlbnNbXSA9IHsgMWUxNiwgMWUzMiwgMWU2NCwgMWUxMjgsIDFlMjU2IH07CitzdGF0aWMgQ09OU1QgZG91YmxlIHRpbnl0ZW5zW10gPSB7IDFlLTE2LCAxZS0zMiwgMWUtNjQsIDFlLTEyOCwgMWUtMjU2IH07CisjZGVmaW5lIG5fYmlndGVucyA1CisjZWxzZQorI2lmZGVmIElCTQorc3RhdGljIENPTlNUIGRvdWJsZSBiaWd0ZW5zW10gPSB7IDFlMTYsIDFlMzIsIDFlNjQgfTsKK3N0YXRpYyBDT05TVCBkb3VibGUgdGlueXRlbnNbXSA9IHsgMWUtMTYsIDFlLTMyLCAxZS02NCB9OworI2RlZmluZSBuX2JpZ3RlbnMgMworI2Vsc2UKK3N0YXRpYyBDT05TVCBkb3VibGUgYmlndGVuc1tdID0geyAxZTE2LCAxZTMyIH07CitzdGF0aWMgQ09OU1QgZG91YmxlIHRpbnl0ZW5zW10gPSB7IDFlLTE2LCAxZS0zMiB9OworI2RlZmluZSBuX2JpZ3RlbnMgMgorI2VuZGlmCisjZW5kaWYKKworIGRvdWJsZQorc3RydG9kCisjaWZkZWYgS1JfaGVhZGVycworCShzMDAsIHNlKSBDT05TVCBjaGFyICpzMDA7IGNoYXIgKipzZTsKKyNlbHNlCisJKENPTlNUIGNoYXIgKnMwMCwgY2hhciAqKnNlKQorI2VuZGlmCit7CisJaW50IGJiMiwgYmI1LCBiYmUsIGJkMiwgYmQ1LCBiYmJpdHMsIGJzMiwgYywgZHNpZ24sCisJCSBlLCBlMSwgZXNpZ24sIGksIGosIGssIG5kLCBuZDAsIG5mLCBueiwgbnowLCBzaWduOworCUNPTlNUIGNoYXIgKnMsICpzMCwgKnMxOworCWRvdWJsZSBhYWRqLCBhYWRqMSwgYWRqOworCV9kb3VibGUgcnYsIHJ2MDsKKwlMb25nIEw7CisJVUxvbmcgeSwgejsKKwlCaWdpbnQgKmJiMSwgKmJkMDsKKwlCaWdpbnQgKmJiID0gTlVMTCwgKmJkID0gTlVMTCwgKmJzID0gTlVMTCwgKmRlbHRhID0gTlVMTDsvKiBwYWNpZnkgZ2NjICovCisKKyNpZmRlZiBBTkRST0lEX0NIQU5HRVMKKwlDT05TVCBjaGFyIGRlY2ltYWxfcG9pbnQgPSAnLic7CisjZWxzZSAvKiBBTkRST0lEX0NIQU5HRVMgKi8KKyNpZm5kZWYgS1JfaGVhZGVycworCUNPTlNUIGNoYXIgZGVjaW1hbF9wb2ludCA9IGxvY2FsZWNvbnYoKS0+ZGVjaW1hbF9wb2ludFswXTsKKyNlbHNlCisJQ09OU1QgY2hhciBkZWNpbWFsX3BvaW50ID0gJy4nOworI2VuZGlmCisKKyNlbmRpZiAvKiBBTkRST0lEX0NIQU5HRVMgKi8KKworCXNpZ24gPSBuejAgPSBueiA9IDA7CisJdmFsdWUocnYpID0gMC47CisKKworCWZvcihzID0gczAwOyBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSAqcyk7IHMrKykKKwkJOworCisJaWYgKCpzID09ICctJykgeworCQlzaWduID0gMTsKKwkJcysrOworCX0gZWxzZSBpZiAoKnMgPT0gJysnKSB7CisJCXMrKzsKKwl9CisKKwlpZiAoKnMgPT0gJ1wwJykgeworCQlzID0gczAwOworCQlnb3RvIHJldDsKKwl9CisKKwkvKiAiSU5GIiBvciAiSU5GSU5JVFkiICovCisJaWYgKHRvbG93ZXIoKHVuc2lnbmVkIGNoYXIpKnMpID09ICdpJyAmJiBzdHJuY2FzZWNtcChzLCAiaW5mIiwgMykgPT0gMCkgeworCQlpZiAoc3RybmNhc2VjbXAocyArIDMsICJpbml0eSIsIDUpID09IDApCisJCQlzICs9IDg7CisJCWVsc2UKKwkJCXMgKz0gMzsKKworCQl2YWx1ZShydikgPSBIVUdFX1ZBTDsKKwkJZ290byByZXQ7CisJfQorCisjaWZkZWYgSUVFRV9Bcml0aAorCS8qICJOQU4iIG9yICJOQU4obi1jaGFyLXNlcXVlbmNlLW9wdCkiICovCisJaWYgKHRvbG93ZXIoKHVuc2lnbmVkIGNoYXIpKnMpID09ICduJyAmJiBzdHJuY2FzZWNtcChzLCAibmFuIiwgMykgPT0gMCkgeworCQkvKiBCdWlsZCBhIHF1aWV0IE5hTi4gKi8KKwkJd29yZDAocnYpID0gTkFOX1dPUkQwOworCQl3b3JkMShydikgPSBOQU5fV09SRDE7CisJCXMrPSAzOworCisJCS8qIERvbid0IGludGVycHJldCAobi1jaGFyLXNlcXVlbmNlLW9wdCksIGZvciBub3cuICovCisJCWlmICgqcyA9PSAnKCcpIHsKKwkJCXMwID0gczsKKwkJCWZvciAocysrOyAqcyAhPSAnKScgJiYgKnMgIT0gJ1wwJzsgcysrKQorCQkJCTsKKwkJCWlmICgqcyA9PSAnKScpCisJCQkJcysrOwkvKiBTa2lwIG92ZXIgY2xvc2luZyBwYXJlbiAuLi4gKi8KKwkJCWVsc2UKKwkJCQlzID0gczA7CS8qIC4uLiBvdGhlcndpc2UgZ28gYmFjay4gKi8KKwkJfQorCisJCWdvdG8gcmV0OworCX0KKyNlbmRpZgorCisJaWYgKCpzID09ICcwJykgeworCQluejAgPSAxOworCQl3aGlsZSgqKytzID09ICcwJykgOworCQlpZiAoISpzKQorCQkJZ290byByZXQ7CisJCX0KKwlzMCA9IHM7CisJeSA9IHogPSAwOworCWZvcihuZCA9IG5mID0gMDsgKGMgPSAqcykgPj0gJzAnICYmIGMgPD0gJzknOyBuZCsrLCBzKyspCisJCWlmIChuZCA8IDkpCisJCQl5ID0gMTAqeSArIGMgLSAnMCc7CisJCWVsc2UgaWYgKG5kIDwgMTYpCisJCQl6ID0gMTAqeiArIGMgLSAnMCc7CisJbmQwID0gbmQ7CisJaWYgKGMgPT0gZGVjaW1hbF9wb2ludCkgeworCQljID0gKisrczsKKwkJaWYgKCFuZCkgeworCQkJZm9yKDsgYyA9PSAnMCc7IGMgPSAqKytzKQorCQkJCW56Kys7CisJCQlpZiAoYyA+ICcwJyAmJiBjIDw9ICc5JykgeworCQkJCXMwID0gczsKKwkJCQluZiArPSBuejsKKwkJCQlueiA9IDA7CisJCQkJZ290byBoYXZlX2RpZzsKKwkJCQl9CisJCQlnb3RvIGRpZ19kb25lOworCQkJfQorCQlmb3IoOyBjID49ICcwJyAmJiBjIDw9ICc5JzsgYyA9ICorK3MpIHsKKyBoYXZlX2RpZzoKKwkJCW56Kys7CisJCQlpZiAoYyAtPSAnMCcpIHsKKwkJCQluZiArPSBuejsKKwkJCQlmb3IoaSA9IDE7IGkgPCBuejsgaSsrKQorCQkJCQlpZiAobmQrKyA8IDkpCisJCQkJCQl5ICo9IDEwOworCQkJCQllbHNlIGlmIChuZCA8PSBEQkxfRElHICsgMSkKKwkJCQkJCXogKj0gMTA7CisJCQkJaWYgKG5kKysgPCA5KQorCQkJCQl5ID0gMTAqeSArIGM7CisJCQkJZWxzZSBpZiAobmQgPD0gREJMX0RJRyArIDEpCisJCQkJCXogPSAxMCp6ICsgYzsKKwkJCQlueiA9IDA7CisJCQkJfQorCQkJfQorCQl9CisgZGlnX2RvbmU6CisJZSA9IDA7CisJaWYgKGMgPT0gJ2UnIHx8IGMgPT0gJ0UnKSB7CisJCWlmICghbmQgJiYgIW56ICYmICFuejApIHsKKwkJCXMgPSBzMDA7CisJCQlnb3RvIHJldDsKKwkJCX0KKwkJczAwID0gczsKKwkJZXNpZ24gPSAwOworCQlzd2l0Y2goYyA9ICorK3MpIHsKKwkJCWNhc2UgJy0nOgorCQkJCWVzaWduID0gMTsKKwkJCQkvKiBGQUxMVEhST1VHSCAqLworCQkJY2FzZSAnKyc6CisJCQkJYyA9ICorK3M7CisJCQl9CisJCWlmIChjID49ICcwJyAmJiBjIDw9ICc5JykgeworCQkJd2hpbGUoYyA9PSAnMCcpCisJCQkJYyA9ICorK3M7CisJCQlpZiAoYyA+ICcwJyAmJiBjIDw9ICc5JykgeworCQkJCUwgPSBjIC0gJzAnOworCQkJCXMxID0gczsKKwkJCQl3aGlsZSgoYyA9ICorK3MpID49ICcwJyAmJiBjIDw9ICc5JykKKwkJCQkJTCA9IDEwKkwgKyBjIC0gJzAnOworCQkJCWlmIChzIC0gczEgPiA4IHx8IEwgPiAxOTk5OSkKKwkJCQkJLyogQXZvaWQgY29uZnVzaW9uIGZyb20gZXhwb25lbnRzCisJCQkJCSAqIHNvIGxhcmdlIHRoYXQgZSBtaWdodCBvdmVyZmxvdy4KKwkJCQkJICovCisJCQkJCWUgPSAxOTk5OTsgLyogc2FmZSBmb3IgMTYgYml0IGludHMgKi8KKwkJCQllbHNlCisJCQkJCWUgPSAoaW50KUw7CisJCQkJaWYgKGVzaWduKQorCQkJCQllID0gLWU7CisJCQkJfQorCQkJZWxzZQorCQkJCWUgPSAwOworCQkJfQorCQllbHNlCisJCQlzID0gczAwOworCQl9CisJaWYgKCFuZCkgeworCQlpZiAoIW56ICYmICFuejApCisJCQlzID0gczAwOworCQlnb3RvIHJldDsKKwkJfQorCWUxID0gZSAtPSBuZjsKKworCS8qIE5vdyB3ZSBoYXZlIG5kMCBkaWdpdHMsIHN0YXJ0aW5nIGF0IHMwLCBmb2xsb3dlZCBieSBhCisJICogZGVjaW1hbCBwb2ludCwgZm9sbG93ZWQgYnkgbmQtbmQwIGRpZ2l0cy4gIFRoZSBudW1iZXIgd2UncmUKKwkgKiBhZnRlciBpcyB0aGUgaW50ZWdlciByZXByZXNlbnRlZCBieSB0aG9zZSBkaWdpdHMgdGltZXMKKwkgKiAxMCoqZSAqLworCisJaWYgKCFuZDApCisJCW5kMCA9IG5kOworCWsgPSBuZCA8IERCTF9ESUcgKyAxID8gbmQgOiBEQkxfRElHICsgMTsKKwl2YWx1ZShydikgPSB5OworCWlmIChrID4gOSkKKwkJdmFsdWUocnYpID0gdGVuc1trIC0gOV0gKiB2YWx1ZShydikgKyB6OworCWJkMCA9IDA7CisJaWYgKG5kIDw9IERCTF9ESUcKKyNpZm5kZWYgUk5EX1BST0RRVU9UCisJCSYmIEZMVF9ST1VORFMgPT0gMQorI2VuZGlmCisJCQkpIHsKKwkJaWYgKCFlKQorCQkJZ290byByZXQ7CisJCWlmIChlID4gMCkgeworCQkJaWYgKGUgPD0gVGVuX3BtYXgpIHsKKyNpZmRlZiBWQVgKKwkJCQlnb3RvIHZheF9vdmZsX2NoZWNrOworI2Vsc2UKKwkJCQkvKiB2YWx1ZShydikgPSAqLyByb3VuZGVkX3Byb2R1Y3QodmFsdWUocnYpLAorCQkJCSAgICB0ZW5zW2VdKTsKKwkJCQlnb3RvIHJldDsKKyNlbmRpZgorCQkJCX0KKwkJCWkgPSBEQkxfRElHIC0gbmQ7CisJCQlpZiAoZSA8PSBUZW5fcG1heCArIGkpIHsKKwkJCQkvKiBBIGZhbmNpZXIgdGVzdCB3b3VsZCBzb21ldGltZXMgbGV0IHVzIGRvCisJCQkJICogdGhpcyBmb3IgbGFyZ2VyIGkgdmFsdWVzLgorCQkJCSAqLworCQkJCWUgLT0gaTsKKwkJCQl2YWx1ZShydikgKj0gdGVuc1tpXTsKKyNpZmRlZiBWQVgKKwkJCQkvKiBWQVggZXhwb25lbnQgcmFuZ2UgaXMgc28gbmFycm93IHdlIG11c3QKKwkJCQkgKiB3b3JyeSBhYm91dCBvdmVyZmxvdyBoZXJlLi4uCisJCQkJICovCisgdmF4X292ZmxfY2hlY2s6CisJCQkJd29yZDAocnYpIC09IFAqRXhwX21zazE7CisJCQkJLyogdmFsdWUocnYpID0gKi8gcm91bmRlZF9wcm9kdWN0KHZhbHVlKHJ2KSwKKwkJCQkgICAgdGVuc1tlXSk7CisJCQkJaWYgKCh3b3JkMChydikgJiBFeHBfbWFzaykKKwkJCQkgPiBFeHBfbXNrMSooREJMX01BWF9FWFArQmlhcy0xLVApKQorCQkJCQlnb3RvIG92Zmw7CisJCQkJd29yZDAocnYpICs9IFAqRXhwX21zazE7CisjZWxzZQorCQkJCS8qIHZhbHVlKHJ2KSA9ICovIHJvdW5kZWRfcHJvZHVjdCh2YWx1ZShydiksCisJCQkJICAgIHRlbnNbZV0pOworI2VuZGlmCisJCQkJZ290byByZXQ7CisJCQkJfQorCQkJfQorI2lmbmRlZiBJbmFjY3VyYXRlX0RpdmlkZQorCQllbHNlIGlmIChlID49IC1UZW5fcG1heCkgeworCQkJLyogdmFsdWUocnYpID0gKi8gcm91bmRlZF9xdW90aWVudCh2YWx1ZShydiksCisJCQkgICAgdGVuc1stZV0pOworCQkJZ290byByZXQ7CisJCQl9CisjZW5kaWYKKwkJfQorCWUxICs9IG5kIC0gazsKKworCS8qIEdldCBzdGFydGluZyBhcHByb3hpbWF0aW9uID0gcnYgKiAxMCoqZTEgKi8KKworCWlmIChlMSA+IDApIHsKKwkJaWYgKChpID0gZTEgJiAxNSkgIT0gMCkKKwkJCXZhbHVlKHJ2KSAqPSB0ZW5zW2ldOworCQlpZiAoZTEgJj0gfjE1KSB7CisJCQlpZiAoZTEgPiBEQkxfTUFYXzEwX0VYUCkgeworIG92Zmw6CisJCQkJZXJybm8gPSBFUkFOR0U7CisJCQkJdmFsdWUocnYpID0gSFVHRV9WQUw7CisJCQkJaWYgKGJkMCkKKwkJCQkJZ290byByZXRmcmVlOworCQkJCWdvdG8gcmV0OworCQkJCX0KKwkJCWlmICgoZTEgPSAodW5zaWduZWQgaW50KWUxID4+IDQpICE9IDApIHsKKwkJCQlmb3IoaiA9IDA7IGUxID4gMTsgaisrLAorCQkJCSAgICBlMSA9ICh1bnNpZ25lZCBpbnQpZTEgPj4gMSkKKwkJCQkJaWYgKGUxICYgMSkKKwkJCQkJCXZhbHVlKHJ2KSAqPSBiaWd0ZW5zW2pdOworCQkJLyogVGhlIGxhc3QgbXVsdGlwbGljYXRpb24gY291bGQgb3ZlcmZsb3cuICovCisJCQkJd29yZDAocnYpIC09IFAqRXhwX21zazE7CisJCQkJdmFsdWUocnYpICo9IGJpZ3RlbnNbal07CisJCQkJaWYgKCh6ID0gd29yZDAocnYpICYgRXhwX21hc2spCisJCQkJID4gRXhwX21zazEqKERCTF9NQVhfRVhQK0JpYXMtUCkpCisJCQkJCWdvdG8gb3ZmbDsKKwkJCQlpZiAoeiA+IEV4cF9tc2sxKihEQkxfTUFYX0VYUCtCaWFzLTEtUCkpIHsKKwkJCQkJLyogc2V0IHRvIGxhcmdlc3QgbnVtYmVyICovCisJCQkJCS8qIChDYW4ndCB0cnVzdCBEQkxfTUFYKSAqLworCQkJCQl3b3JkMChydikgPSBCaWcwOworCQkJCQl3b3JkMShydikgPSBCaWcxOworCQkJCQl9CisJCQkJZWxzZQorCQkJCQl3b3JkMChydikgKz0gUCpFeHBfbXNrMTsKKwkJCQl9CisKKwkJCX0KKwkJfQorCWVsc2UgaWYgKGUxIDwgMCkgeworCQllMSA9IC1lMTsKKwkJaWYgKChpID0gZTEgJiAxNSkgIT0gMCkKKwkJCXZhbHVlKHJ2KSAvPSB0ZW5zW2ldOworCQlpZiAoZTEgJj0gfjE1KSB7CisJCQllMSA9ICh1bnNpZ25lZCBpbnQpZTEgPj4gNDsKKwkJCWlmIChlMSA+PSAxIDw8IG5fYmlndGVucykKKwkJCQlnb3RvIHVuZGZsOworCQkJZm9yKGogPSAwOyBlMSA+IDE7IGorKywKKwkJCSAgICBlMSA9ICh1bnNpZ25lZCBpbnQpZTEgPj4gMSkKKwkJCQlpZiAoZTEgJiAxKQorCQkJCQl2YWx1ZShydikgKj0gdGlueXRlbnNbal07CisJCQkvKiBUaGUgbGFzdCBtdWx0aXBsaWNhdGlvbiBjb3VsZCB1bmRlcmZsb3cuICovCisJCQl2YWx1ZShydjApID0gdmFsdWUocnYpOworCQkJdmFsdWUocnYpICo9IHRpbnl0ZW5zW2pdOworCQkJaWYgKCF2YWx1ZShydikpIHsKKwkJCQl2YWx1ZShydikgPSAyLip2YWx1ZShydjApOworCQkJCXZhbHVlKHJ2KSAqPSB0aW55dGVuc1tqXTsKKwkJCQlpZiAoIXZhbHVlKHJ2KSkgeworIHVuZGZsOgorCQkJCQl2YWx1ZShydikgPSAwLjsKKwkJCQkJZXJybm8gPSBFUkFOR0U7CisJCQkJCWlmIChiZDApCisJCQkJCQlnb3RvIHJldGZyZWU7CisJCQkJCWdvdG8gcmV0OworCQkJCQl9CisJCQkJd29yZDAocnYpID0gVGlueTA7CisJCQkJd29yZDEocnYpID0gVGlueTE7CisJCQkJLyogVGhlIHJlZmluZW1lbnQgYmVsb3cgd2lsbCBjbGVhbgorCQkJCSAqIHRoaXMgYXBwcm94aW1hdGlvbiB1cC4KKwkJCQkgKi8KKwkJCQl9CisJCQl9CisJCX0KKworCS8qIE5vdyB0aGUgaGFyZCBwYXJ0IC0tIGFkanVzdGluZyBydiB0byB0aGUgY29ycmVjdCB2YWx1ZS4qLworCisJLyogUHV0IGRpZ2l0cyBpbnRvIGJkOiB0cnVlIHZhbHVlID0gYmQgKiAxMF5lICovCisKKwliZDAgPSBzMmIoczAsIG5kMCwgbmQsIHkpOworCisJZm9yKDs7KSB7CisJCWJkID0gQmFsbG9jKGJkMC0+ayk7CisJCUJjb3B5KGJkLCBiZDApOworCQliYiA9IGQyYih2YWx1ZShydiksICZiYmUsICZiYmJpdHMpOwkvKiBydiA9IGJiICogMl5iYmUgKi8KKwkJYnMgPSBpMmIoMSk7CisKKwkJaWYgKGUgPj0gMCkgeworCQkJYmIyID0gYmI1ID0gMDsKKwkJCWJkMiA9IGJkNSA9IGU7CisJCQl9CisJCWVsc2UgeworCQkJYmIyID0gYmI1ID0gLWU7CisJCQliZDIgPSBiZDUgPSAwOworCQkJfQorCQlpZiAoYmJlID49IDApCisJCQliYjIgKz0gYmJlOworCQllbHNlCisJCQliZDIgLT0gYmJlOworCQliczIgPSBiYjI7CisjaWZkZWYgU3VkZGVuX1VuZGVyZmxvdworI2lmZGVmIElCTQorCQlqID0gMSArIDQqUCAtIDMgLSBiYmJpdHMgKyAoKGJiZSArIGJiYml0cyAtIDEpICYgMyk7CisjZWxzZQorCQlqID0gUCArIDEgLSBiYmJpdHM7CisjZW5kaWYKKyNlbHNlCisJCWkgPSBiYmUgKyBiYmJpdHMgLSAxOwkvKiBsb2diKHJ2KSAqLworCQlpZiAoaSA8IEVtaW4pCS8qIGRlbm9ybWFsICovCisJCQlqID0gYmJlICsgKFAtRW1pbik7CisJCWVsc2UKKwkJCWogPSBQICsgMSAtIGJiYml0czsKKyNlbmRpZgorCQliYjIgKz0gajsKKwkJYmQyICs9IGo7CisJCWkgPSBiYjIgPCBiZDIgPyBiYjIgOiBiZDI7CisJCWlmIChpID4gYnMyKQorCQkJaSA9IGJzMjsKKwkJaWYgKGkgPiAwKSB7CisJCQliYjIgLT0gaTsKKwkJCWJkMiAtPSBpOworCQkJYnMyIC09IGk7CisJCQl9CisJCWlmIChiYjUgPiAwKSB7CisJCQlicyA9IHBvdzVtdWx0KGJzLCBiYjUpOworCQkJYmIxID0gbXVsdChicywgYmIpOworCQkJQmZyZWUoYmIpOworCQkJYmIgPSBiYjE7CisJCQl9CisJCWlmIChiYjIgPiAwKQorCQkJYmIgPSBsc2hpZnQoYmIsIGJiMik7CisJCWlmIChiZDUgPiAwKQorCQkJYmQgPSBwb3c1bXVsdChiZCwgYmQ1KTsKKwkJaWYgKGJkMiA+IDApCisJCQliZCA9IGxzaGlmdChiZCwgYmQyKTsKKwkJaWYgKGJzMiA+IDApCisJCQlicyA9IGxzaGlmdChicywgYnMyKTsKKwkJZGVsdGEgPSBkaWZmKGJiLCBiZCk7CisJCWRzaWduID0gZGVsdGEtPnNpZ247CisJCWRlbHRhLT5zaWduID0gMDsKKwkJaSA9IGNtcChkZWx0YSwgYnMpOworCQlpZiAoaSA8IDApIHsKKwkJCS8qIEVycm9yIGlzIGxlc3MgdGhhbiBoYWxmIGFuIHVscCAtLSBjaGVjayBmb3IKKwkJCSAqIHNwZWNpYWwgY2FzZSBvZiBtYW50aXNzYSBhIHBvd2VyIG9mIHR3by4KKwkJCSAqLworCQkJaWYgKGRzaWduIHx8IHdvcmQxKHJ2KSB8fCB3b3JkMChydikgJiBCbmRyeV9tYXNrKQorCQkJCWJyZWFrOworCQkJZGVsdGEgPSBsc2hpZnQoZGVsdGEsTG9nMlApOworCQkJaWYgKGNtcChkZWx0YSwgYnMpID4gMCkKKwkJCQlnb3RvIGRyb3BfZG93bjsKKwkJCWJyZWFrOworCQkJfQorCQlpZiAoaSA9PSAwKSB7CisJCQkvKiBleGFjdGx5IGhhbGYtd2F5IGJldHdlZW4gKi8KKwkJCWlmIChkc2lnbikgeworCQkJCWlmICgod29yZDAocnYpICYgQm5kcnlfbWFzazEpID09IEJuZHJ5X21hc2sxCisJCQkJICYmICB3b3JkMShydikgPT0gMHhmZmZmZmZmZikgeworCQkJCQkvKmJvdW5kYXJ5IGNhc2UgLS0gaW5jcmVtZW50IGV4cG9uZW50Ki8KKwkJCQkJd29yZDAocnYpID0gKHdvcmQwKHJ2KSAmIEV4cF9tYXNrKQorCQkJCQkJKyBFeHBfbXNrMQorI2lmZGVmIElCTQorCQkJCQkJfCBFeHBfbXNrMSA+PiA0CisjZW5kaWYKKwkJCQkJCTsKKwkJCQkJd29yZDEocnYpID0gMDsKKwkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQllbHNlIGlmICghKHdvcmQwKHJ2KSAmIEJuZHJ5X21hc2spICYmICF3b3JkMShydikpIHsKKyBkcm9wX2Rvd246CisJCQkJLyogYm91bmRhcnkgY2FzZSAtLSBkZWNyZW1lbnQgZXhwb25lbnQgKi8KKyNpZmRlZiBTdWRkZW5fVW5kZXJmbG93CisJCQkJTCA9IHdvcmQwKHJ2KSAmIEV4cF9tYXNrOworI2lmZGVmIElCTQorCQkJCWlmIChMIDwgIEV4cF9tc2sxKQorI2Vsc2UKKwkJCQlpZiAoTCA8PSBFeHBfbXNrMSkKKyNlbmRpZgorCQkJCQlnb3RvIHVuZGZsOworCQkJCUwgLT0gRXhwX21zazE7CisjZWxzZQorCQkJCUwgPSAod29yZDAocnYpICYgRXhwX21hc2spIC0gRXhwX21zazE7CisjZW5kaWYKKwkJCQl3b3JkMChydikgPSBMIHwgQm5kcnlfbWFzazE7CisJCQkJd29yZDEocnYpID0gMHhmZmZmZmZmZjsKKyNpZmRlZiBJQk0KKwkJCQlnb3RvIGNvbnQ7CisjZWxzZQorCQkJCWJyZWFrOworI2VuZGlmCisJCQkJfQorI2lmbmRlZiBST1VORF9CSUFTRUQKKwkJCWlmICghKHdvcmQxKHJ2KSAmIExTQikpCisJCQkJYnJlYWs7CisjZW5kaWYKKwkJCWlmIChkc2lnbikKKwkJCQl2YWx1ZShydikgKz0gdWxwKHZhbHVlKHJ2KSk7CisjaWZuZGVmIFJPVU5EX0JJQVNFRAorCQkJZWxzZSB7CisJCQkJdmFsdWUocnYpIC09IHVscCh2YWx1ZShydikpOworI2lmbmRlZiBTdWRkZW5fVW5kZXJmbG93CisJCQkJaWYgKCF2YWx1ZShydikpCisJCQkJCWdvdG8gdW5kZmw7CisjZW5kaWYKKwkJCQl9CisjZW5kaWYKKwkJCWJyZWFrOworCQkJfQorCQlpZiAoKGFhZGogPSByYXRpbyhkZWx0YSwgYnMpKSA8PSAyLikgeworCQkJaWYgKGRzaWduKQorCQkJCWFhZGogPSBhYWRqMSA9IDEuOworCQkJZWxzZSBpZiAod29yZDEocnYpIHx8IHdvcmQwKHJ2KSAmIEJuZHJ5X21hc2spIHsKKyNpZm5kZWYgU3VkZGVuX1VuZGVyZmxvdworCQkJCWlmICh3b3JkMShydikgPT0gVGlueTEgJiYgIXdvcmQwKHJ2KSkKKwkJCQkJZ290byB1bmRmbDsKKyNlbmRpZgorCQkJCWFhZGogPSAxLjsKKwkJCQlhYWRqMSA9IC0xLjsKKwkJCQl9CisJCQllbHNlIHsKKwkJCQkvKiBzcGVjaWFsIGNhc2UgLS0gcG93ZXIgb2YgRkxUX1JBRElYIHRvIGJlICovCisJCQkJLyogcm91bmRlZCBkb3duLi4uICovCisKKwkJCQlpZiAoYWFkaiA8IDIuL0ZMVF9SQURJWCkKKwkJCQkJYWFkaiA9IDEuL0ZMVF9SQURJWDsKKwkJCQllbHNlCisJCQkJCWFhZGogKj0gMC41OworCQkJCWFhZGoxID0gLWFhZGo7CisJCQkJfQorCQkJfQorCQllbHNlIHsKKwkJCWFhZGogKj0gMC41OworCQkJYWFkajEgPSBkc2lnbiA/IGFhZGogOiAtYWFkajsKKyNpZmRlZiBDaGVja19GTFRfUk9VTkRTCisJCQlzd2l0Y2goRkxUX1JPVU5EUykgeworCQkJCWNhc2UgMjogLyogdG93YXJkcyAraW5maW5pdHkgKi8KKwkJCQkJYWFkajEgLT0gMC41OworCQkJCQlicmVhazsKKwkJCQljYXNlIDA6IC8qIHRvd2FyZHMgMCAqLworCQkJCWNhc2UgMzogLyogdG93YXJkcyAtaW5maW5pdHkgKi8KKwkJCQkJYWFkajEgKz0gMC41OworCQkJCX0KKyNlbHNlCisJCQlpZiAoRkxUX1JPVU5EUyA9PSAwKQorCQkJCWFhZGoxICs9IDAuNTsKKyNlbmRpZgorCQkJfQorCQl5ID0gd29yZDAocnYpICYgRXhwX21hc2s7CisKKwkJLyogQ2hlY2sgZm9yIG92ZXJmbG93ICovCisKKwkJaWYgKHkgPT0gRXhwX21zazEqKERCTF9NQVhfRVhQK0JpYXMtMSkpIHsKKwkJCXZhbHVlKHJ2MCkgPSB2YWx1ZShydik7CisJCQl3b3JkMChydikgLT0gUCpFeHBfbXNrMTsKKwkJCWFkaiA9IGFhZGoxICogdWxwKHZhbHVlKHJ2KSk7CisJCQl2YWx1ZShydikgKz0gYWRqOworCQkJaWYgKCh3b3JkMChydikgJiBFeHBfbWFzaykgPj0KKwkJCQkJRXhwX21zazEqKERCTF9NQVhfRVhQK0JpYXMtUCkpIHsKKwkJCQlpZiAod29yZDAocnYwKSA9PSBCaWcwICYmIHdvcmQxKHJ2MCkgPT0gQmlnMSkKKwkJCQkJZ290byBvdmZsOworCQkJCXdvcmQwKHJ2KSA9IEJpZzA7CisJCQkJd29yZDEocnYpID0gQmlnMTsKKwkJCQlnb3RvIGNvbnQ7CisJCQkJfQorCQkJZWxzZQorCQkJCXdvcmQwKHJ2KSArPSBQKkV4cF9tc2sxOworCQkJfQorCQllbHNlIHsKKyNpZmRlZiBTdWRkZW5fVW5kZXJmbG93CisJCQlpZiAoKHdvcmQwKHJ2KSAmIEV4cF9tYXNrKSA8PSBQKkV4cF9tc2sxKSB7CisJCQkJdmFsdWUocnYwKSA9IHZhbHVlKHJ2KTsKKwkJCQl3b3JkMChydikgKz0gUCpFeHBfbXNrMTsKKwkJCQlhZGogPSBhYWRqMSAqIHVscCh2YWx1ZShydikpOworCQkJCXZhbHVlKHJ2KSArPSBhZGo7CisjaWZkZWYgSUJNCisJCQkJaWYgKCh3b3JkMChydikgJiBFeHBfbWFzaykgPCAgUCpFeHBfbXNrMSkKKyNlbHNlCisJCQkJaWYgKCh3b3JkMChydikgJiBFeHBfbWFzaykgPD0gUCpFeHBfbXNrMSkKKyNlbmRpZgorCQkJCQl7CisJCQkJCWlmICh3b3JkMChydjApID09IFRpbnkwCisJCQkJCSAmJiB3b3JkMShydjApID09IFRpbnkxKQorCQkJCQkJZ290byB1bmRmbDsKKwkJCQkJd29yZDAocnYpID0gVGlueTA7CisJCQkJCXdvcmQxKHJ2KSA9IFRpbnkxOworCQkJCQlnb3RvIGNvbnQ7CisJCQkJCX0KKwkJCQllbHNlCisJCQkJCXdvcmQwKHJ2KSAtPSBQKkV4cF9tc2sxOworCQkJCX0KKwkJCWVsc2UgeworCQkJCWFkaiA9IGFhZGoxICogdWxwKHZhbHVlKHJ2KSk7CisJCQkJdmFsdWUocnYpICs9IGFkajsKKwkJCQl9CisjZWxzZQorCQkJLyogQ29tcHV0ZSBhZGogc28gdGhhdCB0aGUgSUVFRSByb3VuZGluZyBydWxlcyB3aWxsCisJCQkgKiBjb3JyZWN0bHkgcm91bmQgcnYgKyBhZGogaW4gc29tZSBoYWxmLXdheSBjYXNlcy4KKwkJCSAqIElmIHJ2ICogdWxwKHJ2KSBpcyBkZW5vcm1hbGl6ZWQgKGkuZS4sCisJCQkgKiB5IDw9IChQLTEpKkV4cF9tc2sxKSwgd2UgbXVzdCBhZGp1c3QgYWFkaiB0byBhdm9pZAorCQkJICogdHJvdWJsZSBmcm9tIGJpdHMgbG9zdCB0byBkZW5vcm1hbGl6YXRpb247CisJCQkgKiBleGFtcGxlOiAxLjJlLTMwNyAuCisJCQkgKi8KKwkJCWlmICh5IDw9IChQLTEpKkV4cF9tc2sxICYmIGFhZGogPj0gMS4pIHsKKwkJCQlhYWRqMSA9IChkb3VibGUpKGludCkoYWFkaiArIDAuNSk7CisJCQkJaWYgKCFkc2lnbikKKwkJCQkJYWFkajEgPSAtYWFkajE7CisJCQkJfQorCQkJYWRqID0gYWFkajEgKiB1bHAodmFsdWUocnYpKTsKKwkJCXZhbHVlKHJ2KSArPSBhZGo7CisjZW5kaWYKKwkJCX0KKwkJeiA9IHdvcmQwKHJ2KSAmIEV4cF9tYXNrOworCQlpZiAoeSA9PSB6KSB7CisJCQkvKiBDYW4gd2Ugc3RvcCBub3c/ICovCisJCQlMID0gYWFkajsKKwkJCWFhZGogLT0gTDsKKwkJCS8qIFRoZSB0b2xlcmFuY2VzIGJlbG93IGFyZSBjb25zZXJ2YXRpdmUuICovCisJCQlpZiAoZHNpZ24gfHwgd29yZDEocnYpIHx8IHdvcmQwKHJ2KSAmIEJuZHJ5X21hc2spIHsKKwkJCQlpZiAoYWFkaiA8IC40OTk5OTk5IHx8IGFhZGogPiAuNTAwMDAwMSkKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJZWxzZSBpZiAoYWFkaiA8IC40OTk5OTk5L0ZMVF9SQURJWCkKKwkJCQlicmVhazsKKwkJCX0KKyBjb250OgorCQlCZnJlZShiYik7CisJCUJmcmVlKGJkKTsKKwkJQmZyZWUoYnMpOworCQlCZnJlZShkZWx0YSk7CisJCX0KKyByZXRmcmVlOgorCUJmcmVlKGJiKTsKKwlCZnJlZShiZCk7CisJQmZyZWUoYnMpOworCUJmcmVlKGJkMCk7CisJQmZyZWUoZGVsdGEpOworIHJldDoKKwlpZiAoc2UpCisJCS8qIExJTlRFRCBpbnRlcmZhY2Ugc3BlY2lmaWNhdGlvbiAqLworCQkqc2UgPSAoY2hhciAqKXM7CisJcmV0dXJuIHNpZ24gPyAtdmFsdWUocnYpIDogdmFsdWUocnYpOworCX0KKworIHN0YXRpYyBpbnQKK3F1b3JlbQorI2lmZGVmIEtSX2hlYWRlcnMKKwkoYiwgUykgQmlnaW50ICpiLCAqUzsKKyNlbHNlCisJKEJpZ2ludCAqYiwgQmlnaW50ICpTKQorI2VuZGlmCit7CisJaW50IG47CisJTG9uZyBib3Jyb3csIHk7CisJVUxvbmcgY2FycnksIHEsIHlzOworCVVMb25nICpieCwgKmJ4ZSwgKnN4LCAqc3hlOworI2lmZGVmIFBhY2tfMzIKKwlMb25nIHo7CisJVUxvbmcgc2ksIHpzOworI2VuZGlmCisKKwluID0gUy0+d2RzOworI2lmZGVmIERFQlVHCisJLypkZWJ1ZyovIGlmIChiLT53ZHMgPiBuKQorCS8qZGVidWcqLwlCdWcoIm92ZXJzaXplIGIgaW4gcXVvcmVtIik7CisjZW5kaWYKKwlpZiAoYi0+d2RzIDwgbikKKwkJcmV0dXJuIDA7CisJc3ggPSBTLT54OworCXN4ZSA9IHN4ICsgLS1uOworCWJ4ID0gYi0+eDsKKwlieGUgPSBieCArIG47CisJcSA9ICpieGUgLyAoKnN4ZSArIDEpOwkvKiBlbnN1cmUgcSA8PSB0cnVlIHF1b3RpZW50ICovCisjaWZkZWYgREVCVUcKKwkvKmRlYnVnKi8gaWYgKHEgPiA5KQorCS8qZGVidWcqLwlCdWcoIm92ZXJzaXplZCBxdW90aWVudCBpbiBxdW9yZW0iKTsKKyNlbmRpZgorCWlmIChxKSB7CisJCWJvcnJvdyA9IDA7CisJCWNhcnJ5ID0gMDsKKwkJZG8geworI2lmZGVmIFBhY2tfMzIKKwkJCXNpID0gKnN4Kys7CisJCQl5cyA9IChzaSAmIDB4ZmZmZikgKiBxICsgY2Fycnk7CisJCQl6cyA9IChzaSA+PiAxNikgKiBxICsgKHlzID4+IDE2KTsKKwkJCWNhcnJ5ID0genMgPj4gMTY7CisJCQl5ID0gKCpieCAmIDB4ZmZmZikgLSAoeXMgJiAweGZmZmYpICsgYm9ycm93OworCQkJYm9ycm93ID0gKFVMb25nKXkgPj4gMTY7CisJCQlTaWduX0V4dGVuZChib3Jyb3csIHkpOworCQkJeiA9ICgqYnggPj4gMTYpIC0gKHpzICYgMHhmZmZmKSArIGJvcnJvdzsKKwkJCWJvcnJvdyA9IChVTG9uZyl6ID4+IDE2OworCQkJU2lnbl9FeHRlbmQoYm9ycm93LCB6KTsKKwkJCVN0b3JlaW5jKGJ4LCB6LCB5KTsKKyNlbHNlCisJCQl5cyA9ICpzeCsrICogcSArIGNhcnJ5OworCQkJY2FycnkgPSB5cyA+PiAxNjsKKwkJCXkgPSAqYnggLSAoeXMgJiAweGZmZmYpICsgYm9ycm93OworCQkJYm9ycm93ID0geSA+PiAxNjsKKwkJCVNpZ25fRXh0ZW5kKGJvcnJvdywgeSk7CisJCQkqYngrKyA9IHkgJiAweGZmZmY7CisjZW5kaWYKKwkJCX0KKwkJCXdoaWxlKHN4IDw9IHN4ZSk7CisJCWlmICghKmJ4ZSkgeworCQkJYnggPSBiLT54OworCQkJd2hpbGUoLS1ieGUgPiBieCAmJiAhKmJ4ZSkKKwkJCQktLW47CisJCQliLT53ZHMgPSBuOworCQkJfQorCQl9CisJaWYgKGNtcChiLCBTKSA+PSAwKSB7CisJCXErKzsKKwkJYm9ycm93ID0gMDsKKwkJY2FycnkgPSAwOworCQlieCA9IGItPng7CisJCXN4ID0gUy0+eDsKKwkJZG8geworI2lmZGVmIFBhY2tfMzIKKwkJCXNpID0gKnN4Kys7CisJCQl5cyA9IChzaSAmIDB4ZmZmZikgKyBjYXJyeTsKKwkJCXpzID0gKHNpID4+IDE2KSArICh5cyA+PiAxNik7CisJCQljYXJyeSA9IHpzID4+IDE2OworCQkJeSA9ICgqYnggJiAweGZmZmYpIC0gKHlzICYgMHhmZmZmKSArIGJvcnJvdzsKKwkJCWJvcnJvdyA9IChVTG9uZyl5ID4+IDE2OworCQkJU2lnbl9FeHRlbmQoYm9ycm93LCB5KTsKKwkJCXogPSAoKmJ4ID4+IDE2KSAtICh6cyAmIDB4ZmZmZikgKyBib3Jyb3c7CisJCQlib3Jyb3cgPSAoVUxvbmcpeiA+PiAxNjsKKwkJCVNpZ25fRXh0ZW5kKGJvcnJvdywgeik7CisJCQlTdG9yZWluYyhieCwgeiwgeSk7CisjZWxzZQorCQkJeXMgPSAqc3grKyArIGNhcnJ5OworCQkJY2FycnkgPSB5cyA+PiAxNjsKKwkJCXkgPSAqYnggLSAoeXMgJiAweGZmZmYpICsgYm9ycm93OworCQkJYm9ycm93ID0geSA+PiAxNjsKKwkJCVNpZ25fRXh0ZW5kKGJvcnJvdywgeSk7CisJCQkqYngrKyA9IHkgJiAweGZmZmY7CisjZW5kaWYKKwkJCX0KKwkJCXdoaWxlKHN4IDw9IHN4ZSk7CisJCWJ4ID0gYi0+eDsKKwkJYnhlID0gYnggKyBuOworCQlpZiAoISpieGUpIHsKKwkJCXdoaWxlKC0tYnhlID4gYnggJiYgISpieGUpCisJCQkJLS1uOworCQkJYi0+d2RzID0gbjsKKwkJCX0KKwkJfQorCXJldHVybiBxOworCX0KKworLyogZnJlZWR0b2EocykgbXVzdCBiZSB1c2VkIHRvIGZyZWUgdmFsdWVzIHMgcmV0dXJuZWQgYnkgZHRvYQorICogd2hlbiBNVUxUSVBMRV9USFJFQURTIGlzICNkZWZpbmVkLiAgSXQgc2hvdWxkIGJlIHVzZWQgaW4gYWxsIGNhc2VzLAorICogYnV0IGZvciBjb25zaXN0ZW5jeSB3aXRoIGVhcmxpZXIgdmVyc2lvbnMgb2YgZHRvYSwgaXQgaXMgb3B0aW9uYWwKKyAqIHdoZW4gTVVMVElQTEVfVEhSRUFEUyBpcyBub3QgZGVmaW5lZC4KKyAqLworCit2b2lkCisjaWZkZWYgS1JfaGVhZGVycworZnJlZWR0b2EocykgY2hhciAqczsKKyNlbHNlCitmcmVlZHRvYShjaGFyICpzKQorI2VuZGlmCit7CisJZnJlZShzKTsKK30KKworCisKKy8qIGR0b2EgZm9yIElFRUUgYXJpdGhtZXRpYyAoZG1nKTogY29udmVydCBkb3VibGUgdG8gQVNDSUkgc3RyaW5nLgorICoKKyAqIEluc3BpcmVkIGJ5ICJIb3cgdG8gUHJpbnQgRmxvYXRpbmctUG9pbnQgTnVtYmVycyBBY2N1cmF0ZWx5IiBieQorICogR3V5IEwuIFN0ZWVsZSwgSnIuIGFuZCBKb24gTC4gV2hpdGUgW1Byb2MuIEFDTSBTSUdQTEFOICc5MCwgcHAuIDkyLTEwMV0uCisgKgorICogTW9kaWZpY2F0aW9uczoKKyAqCTEuIFJhdGhlciB0aGFuIGl0ZXJhdGluZywgd2UgdXNlIGEgc2ltcGxlIG51bWVyaWMgb3ZlcmVzdGltYXRlCisgKgkgICB0byBkZXRlcm1pbmUgayA9IGZsb29yKGxvZzEwKGQpKS4gIFdlIHNjYWxlIHJlbGV2YW50CisgKgkgICBxdWFudGl0aWVzIHVzaW5nIE8obG9nMihrKSkgcmF0aGVyIHRoYW4gTyhrKSBtdWx0aXBsaWNhdGlvbnMuCisgKgkyLiBGb3Igc29tZSBtb2RlcyA+IDIgKGNvcnJlc3BvbmRpbmcgdG8gZWN2dCBhbmQgZmN2dCksIHdlIGRvbid0CisgKgkgICB0cnkgdG8gZ2VuZXJhdGUgZGlnaXRzIHN0cmljdGx5IGxlZnQgdG8gcmlnaHQuICBJbnN0ZWFkLCB3ZQorICoJICAgY29tcHV0ZSB3aXRoIGZld2VyIGJpdHMgYW5kIHByb3BhZ2F0ZSB0aGUgY2FycnkgaWYgbmVjZXNzYXJ5CisgKgkgICB3aGVuIHJvdW5kaW5nIHRoZSBmaW5hbCBkaWdpdCB1cC4gIFRoaXMgaXMgb2Z0ZW4gZmFzdGVyLgorICoJMy4gVW5kZXIgdGhlIGFzc3VtcHRpb24gdGhhdCBpbnB1dCB3aWxsIGJlIHJvdW5kZWQgbmVhcmVzdCwKKyAqCSAgIG1vZGUgMCByZW5kZXJzIDFlMjMgYXMgMWUyMyByYXRoZXIgdGhhbiA5Ljk5OTk5OTk5OTk5OTk5OWUyMi4KKyAqCSAgIFRoYXQgaXMsIHdlIGFsbG93IGVxdWFsaXR5IGluIHN0b3BwaW5nIHRlc3RzIHdoZW4gdGhlCisgKgkgICByb3VuZC1uZWFyZXN0IHJ1bGUgd2lsbCBnaXZlIHRoZSBzYW1lIGZsb2F0aW5nLXBvaW50IHZhbHVlCisgKgkgICBhcyB3b3VsZCBzYXRpc2ZhY3Rpb24gb2YgdGhlIHN0b3BwaW5nIHRlc3Qgd2l0aCBzdHJpY3QKKyAqCSAgIGluZXF1YWxpdHkuCisgKgk0LiBXZSByZW1vdmUgY29tbW9uIGZhY3RvcnMgb2YgcG93ZXJzIG9mIDIgZnJvbSByZWxldmFudAorICoJICAgcXVhbnRpdGllcy4KKyAqCTUuIFdoZW4gY29udmVydGluZyBmbG9hdGluZy1wb2ludCBpbnRlZ2VycyBsZXNzIHRoYW4gMWUxNiwKKyAqCSAgIHdlIHVzZSBmbG9hdGluZy1wb2ludCBhcml0aG1ldGljIHJhdGhlciB0aGFuIHJlc29ydGluZworICoJICAgdG8gbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXJzLgorICoJNi4gV2hlbiBhc2tlZCB0byBwcm9kdWNlIGZld2VyIHRoYW4gMTUgZGlnaXRzLCB3ZSBmaXJzdCB0cnkKKyAqCSAgIHRvIGdldCBieSB3aXRoIGZsb2F0aW5nLXBvaW50IGFyaXRobWV0aWM7IHdlIHJlc29ydCB0bworICoJICAgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgYXJpdGhtZXRpYyBvbmx5IGlmIHdlIGNhbm5vdAorICoJICAgZ3VhcmFudGVlIHRoYXQgdGhlIGZsb2F0aW5nLXBvaW50IGNhbGN1bGF0aW9uIGhhcyBnaXZlbgorICoJICAgdGhlIGNvcnJlY3RseSByb3VuZGVkIHJlc3VsdC4gIEZvciBrIHJlcXVlc3RlZCBkaWdpdHMgYW5kCisgKgkgICAidW5pZm9ybWx5IiBkaXN0cmlidXRlZCBpbnB1dCwgdGhlIHByb2JhYmlsaXR5IGlzCisgKgkgICBzb21ldGhpbmcgbGlrZSAxMF4oay0xNSkgdGhhdCB3ZSBtdXN0IHJlc29ydCB0byB0aGUgTG9uZworICoJICAgY2FsY3VsYXRpb24uCisgKi8KKworIGNoYXIgKgorX19kdG9hCisjaWZkZWYgS1JfaGVhZGVycworCShfZCwgbW9kZSwgbmRpZ2l0cywgZGVjcHQsIHNpZ24sIHJ2ZSkKKwlkb3VibGUgX2Q7IGludCBtb2RlLCBuZGlnaXRzLCAqZGVjcHQsICpzaWduOyBjaGFyICoqcnZlOworI2Vsc2UKKwkoZG91YmxlIF9kLCBpbnQgbW9kZSwgaW50IG5kaWdpdHMsIGludCAqZGVjcHQsIGludCAqc2lnbiwgY2hhciAqKnJ2ZSkKKyNlbmRpZgoreworIC8qCUFyZ3VtZW50cyBuZGlnaXRzLCBkZWNwdCwgc2lnbiBhcmUgc2ltaWxhciB0byB0aG9zZQorCW9mIGVjdnQgYW5kIGZjdnQ7IHRyYWlsaW5nIHplcm9zIGFyZSBzdXBwcmVzc2VkIGZyb20KKwl0aGUgcmV0dXJuZWQgc3RyaW5nLiAgSWYgbm90IG51bGwsICpydmUgaXMgc2V0IHRvIHBvaW50CisJdG8gdGhlIGVuZCBvZiB0aGUgcmV0dXJuIHZhbHVlLiAgSWYgZCBpcyArLUluZmluaXR5IG9yIE5hTiwKKwl0aGVuICpkZWNwdCBpcyBzZXQgdG8gOTk5OS4KKworCW1vZGU6CisJCTAgPT0+IHNob3J0ZXN0IHN0cmluZyB0aGF0IHlpZWxkcyBkIHdoZW4gcmVhZCBpbgorCQkJYW5kIHJvdW5kZWQgdG8gbmVhcmVzdC4KKwkJMSA9PT4gbGlrZSAwLCBidXQgd2l0aCBTdGVlbGUgJiBXaGl0ZSBzdG9wcGluZyBydWxlOworCQkJZS5nLiB3aXRoIElFRUUgUDc1NCBhcml0aG1ldGljICwgbW9kZSAwIGdpdmVzCisJCQkxZTIzIHdoZXJlYXMgbW9kZSAxIGdpdmVzIDkuOTk5OTk5OTk5OTk5OTk5ZTIyLgorCQkyID09PiBtYXgoMSxuZGlnaXRzKSBzaWduaWZpY2FudCBkaWdpdHMuICBUaGlzIGdpdmVzIGEKKwkJCXJldHVybiB2YWx1ZSBzaW1pbGFyIHRvIHRoYXQgb2YgZWN2dCwgZXhjZXB0CisJCQl0aGF0IHRyYWlsaW5nIHplcm9zIGFyZSBzdXBwcmVzc2VkLgorCQkzID09PiB0aHJvdWdoIG5kaWdpdHMgcGFzdCB0aGUgZGVjaW1hbCBwb2ludC4gIFRoaXMKKwkJCWdpdmVzIGEgcmV0dXJuIHZhbHVlIHNpbWlsYXIgdG8gdGhhdCBmcm9tIGZjdnQsCisJCQlleGNlcHQgdGhhdCB0cmFpbGluZyB6ZXJvcyBhcmUgc3VwcHJlc3NlZCwgYW5kCisJCQluZGlnaXRzIGNhbiBiZSBuZWdhdGl2ZS4KKwkJNC05IHNob3VsZCBnaXZlIHRoZSBzYW1lIHJldHVybiB2YWx1ZXMgYXMgMi0zLCBpLmUuLAorCQkJNCA8PSBtb2RlIDw9IDkgPT0+IHNhbWUgcmV0dXJuIGFzIG1vZGUKKwkJCTIgKyAobW9kZSAmIDEpLiAgVGhlc2UgbW9kZXMgYXJlIG1haW5seSBmb3IKKwkJCWRlYnVnZ2luZzsgb2Z0ZW4gdGhleSBydW4gc2xvd2VyIGJ1dCBzb21ldGltZXMKKwkJCWZhc3RlciB0aGFuIG1vZGVzIDItMy4KKwkJNCw1LDgsOSA9PT4gbGVmdC10by1yaWdodCBkaWdpdCBnZW5lcmF0aW9uLgorCQk2LTkgPT0+IGRvbid0IHRyeSBmYXN0IGZsb2F0aW5nLXBvaW50IGVzdGltYXRlCisJCQkoaWYgYXBwbGljYWJsZSkuCisKKwkJVmFsdWVzIG9mIG1vZGUgb3RoZXIgdGhhbiAwLTkgYXJlIHRyZWF0ZWQgYXMgbW9kZSAwLgorCisJCVN1ZmZpY2llbnQgc3BhY2UgaXMgYWxsb2NhdGVkIHRvIHRoZSByZXR1cm4gdmFsdWUKKwkJdG8gaG9sZCB0aGUgc3VwcHJlc3NlZCB0cmFpbGluZyB6ZXJvcy4KKwkqLworCisJaW50IGJiaXRzLCBiMiwgYjUsIGJlLCBkaWcsIGksIGllcHMsIGlsaW0wLAorCQlqLCBqajEsIGssIGswLCBrX2NoZWNrLCBsZWZ0cmlnaHQsIG0yLCBtNSwgczIsIHM1LAorCQl0cnlfcXVpY2s7CisJaW50IGlsaW0gPSAwLCBpbGltMSA9IDAsIHNwZWNfY2FzZSA9IDA7CS8qIHBhY2lmeSBnY2MgKi8KKwlMb25nIEw7CisjaWZuZGVmIFN1ZGRlbl9VbmRlcmZsb3cKKwlpbnQgZGVub3JtOworCVVMb25nIHg7CisjZW5kaWYKKwlCaWdpbnQgKmIsICpiMSwgKmRlbHRhLCAqbWhpLCAqUzsKKwlCaWdpbnQgKm1sbyA9IE5VTEw7IC8qIHBhY2lmeSBnY2MgKi8KKwlkb3VibGUgZHM7CisJY2hhciAqcywgKnMwOworCUJpZ2ludCAqcmVzdWx0ID0gTlVMTDsKKwlpbnQgcmVzdWx0X2sgPSAwOworCV9kb3VibGUgZCwgZDIsIGVwczsKKworCXZhbHVlKGQpID0gX2Q7CisKKwlpZiAod29yZDAoZCkgJiBTaWduX2JpdCkgeworCQkvKiBzZXQgc2lnbiBmb3IgZXZlcnl0aGluZywgaW5jbHVkaW5nIDAncyBhbmQgTmFOcyAqLworCQkqc2lnbiA9IDE7CisJCXdvcmQwKGQpICY9IH5TaWduX2JpdDsJLyogY2xlYXIgc2lnbiBiaXQgKi8KKwkJfQorCWVsc2UKKwkJKnNpZ24gPSAwOworCisjaWYgZGVmaW5lZChJRUVFX0FyaXRoKSArIGRlZmluZWQoVkFYKQorI2lmZGVmIElFRUVfQXJpdGgKKwlpZiAoKHdvcmQwKGQpICYgRXhwX21hc2spID09IEV4cF9tYXNrKQorI2Vsc2UKKwlpZiAod29yZDAoZCkgID09IDB4ODAwMCkKKyNlbmRpZgorCQl7CisJCS8qIEluZmluaXR5IG9yIE5hTiAqLworCQkqZGVjcHQgPSA5OTk5OworCQlzID0KKyNpZmRlZiBJRUVFX0FyaXRoCisJCQkhd29yZDEoZCkgJiYgISh3b3JkMChkKSAmIDB4ZmZmZmYpID8gIkluZmluaXR5IiA6CisjZW5kaWYKKwkJCQkiTmFOIjsKKyAgICAgICAgcmVzdWx0ID0gQmFsbG9jKHN0cmxlbihzKSsxKTsKKyAgICAgICAgczAgPSAoY2hhciAqKSh2b2lkICopcmVzdWx0OworICAgICAgICBzdHJjcHkoczAsIHMpOworICAgICAgICBpZiAocnZlKQorICAgICAgICAgICAgKnJ2ZSA9CisjaWZkZWYgSUVFRV9Bcml0aAorICAgICAgICAgICAgICAgIHMwWzNdID8gczAgKyA4IDoKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgczAgKyAzOworCQlyZXR1cm4gczA7CisJCX0KKyNlbmRpZgorI2lmZGVmIElCTQorCXZhbHVlKGQpICs9IDA7IC8qIG5vcm1hbGl6ZSAqLworI2VuZGlmCisJaWYgKCF2YWx1ZShkKSkgeworCQkqZGVjcHQgPSAxOworICAgICAgICByZXN1bHQgPSBCYWxsb2MoMik7CisgICAgICAgIHMwID0gKGNoYXIgKikodm9pZCAqKXJlc3VsdDsKKyAgICAgICAgc3RyY3B5KHMwLCAiMCIpOworICAgICAgICBpZiAocnZlKQorICAgICAgICAgICAgKnJ2ZSA9IHMwICsgMTsKKyAgICAgICAgcmV0dXJuIHMwOworCQl9CisKKwliID0gZDJiKHZhbHVlKGQpLCAmYmUsICZiYml0cyk7CisjaWZkZWYgU3VkZGVuX1VuZGVyZmxvdworCWkgPSAoaW50KSh3b3JkMChkKSA+PiBFeHBfc2hpZnQxICYgKEV4cF9tYXNrPj5FeHBfc2hpZnQxKSk7CisjZWxzZQorCWlmICgoaSA9IChpbnQpKHdvcmQwKGQpID4+IEV4cF9zaGlmdDEgJiAoRXhwX21hc2s+PkV4cF9zaGlmdDEpKSkgIT0gMCkgeworI2VuZGlmCisJCXZhbHVlKGQyKSA9IHZhbHVlKGQpOworCQl3b3JkMChkMikgJj0gRnJhY19tYXNrMTsKKwkJd29yZDAoZDIpIHw9IEV4cF8xMTsKKyNpZmRlZiBJQk0KKwkJaWYgKGogPSAxMSAtIGhpMGJpdHMod29yZDAoZDIpICYgRnJhY19tYXNrKSkKKwkJCXZhbHVlKGQyKSAvPSAxIDw8IGo7CisjZW5kaWYKKworCQkvKiBsb2coeCkJfj1+IGxvZygxLjUpICsgKHgtMS41KS8xLjUKKwkJICogbG9nMTAoeCkJID0gIGxvZyh4KSAvIGxvZygxMCkKKwkJICoJCX49fiBsb2coMS41KS9sb2coMTApICsgKHgtMS41KS8oMS41KmxvZygxMCkpCisJCSAqIGxvZzEwKGQpID0gKGktQmlhcykqbG9nKDIpL2xvZygxMCkgKyBsb2cxMChkMikKKwkJICoKKwkJICogVGhpcyBzdWdnZXN0cyBjb21wdXRpbmcgYW4gYXBwcm94aW1hdGlvbiBrIHRvIGxvZzEwKGQpIGJ5CisJCSAqCisJCSAqIGsgPSAoaSAtIEJpYXMpKjAuMzAxMDI5OTk1NjYzOTgxCisJCSAqCSsgKCAoZDItMS41KSowLjI4OTUyOTY1NDYwMjE2OCArIDAuMTc2MDkxMjU5MDU1NjgxICk7CisJCSAqCisJCSAqIFdlIHdhbnQgayB0byBiZSB0b28gbGFyZ2UgcmF0aGVyIHRoYW4gdG9vIHNtYWxsLgorCQkgKiBUaGUgZXJyb3IgaW4gdGhlIGZpcnN0LW9yZGVyIFRheWxvciBzZXJpZXMgYXBwcm94aW1hdGlvbgorCQkgKiBpcyBpbiBvdXIgZmF2b3IsIHNvIHdlIGp1c3Qgcm91bmQgdXAgdGhlIGNvbnN0YW50IGVub3VnaAorCQkgKiB0byBjb21wZW5zYXRlIGZvciBhbnkgZXJyb3IgaW4gdGhlIG11bHRpcGxpY2F0aW9uIG9mCisJCSAqIChpIC0gQmlhcykgYnkgMC4zMDEwMjk5OTU2NjM5ODE7IHNpbmNlIHxpIC0gQmlhc3wgPD0gMTA3NywKKwkJICogYW5kIDEwNzcgKiAwLjMwMTAzICogMl4tNTIgfj1+IDcuMmUtMTQsCisJCSAqIGFkZGluZyAxZS0xMyB0byB0aGUgY29uc3RhbnQgdGVybSBtb3JlIHRoYW4gc3VmZmljZXMuCisJCSAqIEhlbmNlIHdlIGFkanVzdCB0aGUgY29uc3RhbnQgdGVybSB0byAwLjE3NjA5MTI1OTA1NTguCisJCSAqIChXZSBjb3VsZCBnZXQgYSBtb3JlIGFjY3VyYXRlIGsgYnkgaW52b2tpbmcgbG9nMTAsCisJCSAqICBidXQgdGhpcyBpcyBwcm9iYWJseSBub3Qgd29ydGh3aGlsZS4pCisJCSAqLworCisJCWkgLT0gQmlhczsKKyNpZmRlZiBJQk0KKwkJaSA8PD0gMjsKKwkJaSArPSBqOworI2VuZGlmCisjaWZuZGVmIFN1ZGRlbl9VbmRlcmZsb3cKKwkJZGVub3JtID0gMDsKKwkJfQorCWVsc2UgeworCQkvKiBkIGlzIGRlbm9ybWFsaXplZCAqLworCisJCWkgPSBiYml0cyArIGJlICsgKEJpYXMgKyAoUC0xKSAtIDEpOworCQl4ID0gaSA+IDMyICA/IHdvcmQwKGQpIDw8ICg2NCAtIGkpIHwgd29yZDEoZCkgPj4gKGkgLSAzMikKKwkJCSAgICA6IHdvcmQxKGQpIDw8ICgzMiAtIGkpOworCQl2YWx1ZShkMikgPSB4OworCQl3b3JkMChkMikgLT0gMzEqRXhwX21zazE7IC8qIGFkanVzdCBleHBvbmVudCAqLworCQlpIC09IChCaWFzICsgKFAtMSkgLSAxKSArIDE7CisJCWRlbm9ybSA9IDE7CisJCX0KKyNlbmRpZgorCWRzID0gKHZhbHVlKGQyKS0xLjUpKjAuMjg5NTI5NjU0NjAyMTY4ICsgMC4xNzYwOTEyNTkwNTU4ICsKKwkgICAgaSowLjMwMTAyOTk5NTY2Mzk4MTsKKwlrID0gKGludClkczsKKwlpZiAoZHMgPCAwLiAmJiBkcyAhPSBrKQorCQlrLS07CS8qIHdhbnQgayA9IGZsb29yKGRzKSAqLworCWtfY2hlY2sgPSAxOworCWlmIChrID49IDAgJiYgayA8PSBUZW5fcG1heCkgeworCQlpZiAodmFsdWUoZCkgPCB0ZW5zW2tdKQorCQkJay0tOworCQlrX2NoZWNrID0gMDsKKwkJfQorCWogPSBiYml0cyAtIGkgLSAxOworCWlmIChqID49IDApIHsKKwkJYjIgPSAwOworCQlzMiA9IGo7CisJCX0KKwllbHNlIHsKKwkJYjIgPSAtajsKKwkJczIgPSAwOworCQl9CisJaWYgKGsgPj0gMCkgeworCQliNSA9IDA7CisJCXM1ID0gazsKKwkJczIgKz0gazsKKwkJfQorCWVsc2UgeworCQliMiAtPSBrOworCQliNSA9IC1rOworCQlzNSA9IDA7CisJCX0KKwlpZiAobW9kZSA8IDAgfHwgbW9kZSA+IDkpCisJCW1vZGUgPSAwOworCXRyeV9xdWljayA9IDE7CisJaWYgKG1vZGUgPiA1KSB7CisJCW1vZGUgLT0gNDsKKwkJdHJ5X3F1aWNrID0gMDsKKwkJfQorCWxlZnRyaWdodCA9IDE7CisJc3dpdGNoKG1vZGUpIHsKKwkJY2FzZSAwOgorCQljYXNlIDE6CisJCQlpbGltID0gaWxpbTEgPSAtMTsKKwkJCWkgPSAxODsKKwkJCW5kaWdpdHMgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCWxlZnRyaWdodCA9IDA7CisJCQkvKiBGQUxMVEhST1VHSCAqLworCQljYXNlIDQ6CisJCQlpZiAobmRpZ2l0cyA8PSAwKQorCQkJCW5kaWdpdHMgPSAxOworCQkJaWxpbSA9IGlsaW0xID0gaSA9IG5kaWdpdHM7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJbGVmdHJpZ2h0ID0gMDsKKwkJCS8qIEZBTExUSFJPVUdIICovCisJCWNhc2UgNToKKwkJCWkgPSBuZGlnaXRzICsgayArIDE7CisJCQlpbGltID0gaTsKKwkJCWlsaW0xID0gaSAtIDE7CisJCQlpZiAoaSA8PSAwKQorCQkJCWkgPSAxOworCQl9CisJaiA9IHNpemVvZihVTG9uZyk7CisgICAgICAgIGZvcihyZXN1bHRfayA9IDA7IChpbnQpKHNpemVvZihCaWdpbnQpIC0gc2l6ZW9mKFVMb25nKSkgKyBqIDw9IGk7CisJCWogPDw9IDEpIHJlc3VsdF9rKys7CisgICAgICAgIC8vIHRoaXMgaXMgcmVhbGx5IGEgdWdseSBoYWNrLCB0aGUgY29kZSB1c2VzIEJhbGxvYworICAgICAgICAvLyBpbnN0ZWFkIG9mIG1hbGxvYywgYnV0IGNhc3RzIHRoZSByZXN1bHQgaW50byBhIGNoYXIqCisgICAgICAgIC8vIGl0IHNlZW1zIHRoZSBvbmx5IHJlYXNvbiB0byBkbyB0aGF0IGlzIGR1ZSB0byB0aGUKKyAgICAgICAgLy8gY29tcGxpY2F0ZWQgd2F5IHRoZSBibG9jayBzaXplIG5lZWQgdG8gYmUgY29tcHV0ZWQKKyAgICAgICAgLy8gYnV1dXJrLi4uLgorCXJlc3VsdCA9IEJhbGxvYyhyZXN1bHRfayk7CisJcyA9IHMwID0gKGNoYXIgKikodm9pZCAqKXJlc3VsdDsKKworCWlmIChpbGltID49IDAgJiYgaWxpbSA8PSBRdWlja19tYXggJiYgdHJ5X3F1aWNrKSB7CisKKwkJLyogVHJ5IHRvIGdldCBieSB3aXRoIGZsb2F0aW5nLXBvaW50IGFyaXRobWV0aWMuICovCisKKwkJaSA9IDA7CisJCXZhbHVlKGQyKSA9IHZhbHVlKGQpOworCQlrMCA9IGs7CisJCWlsaW0wID0gaWxpbTsKKwkJaWVwcyA9IDI7IC8qIGNvbnNlcnZhdGl2ZSAqLworCQlpZiAoayA+IDApIHsKKwkJCWRzID0gdGVuc1trJjB4Zl07CisJCQlqID0gKHVuc2lnbmVkIGludClrID4+IDQ7CisJCQlpZiAoaiAmIEJsZXRjaCkgeworCQkJCS8qIHByZXZlbnQgb3ZlcmZsb3dzICovCisJCQkJaiAmPSBCbGV0Y2ggLSAxOworCQkJCXZhbHVlKGQpIC89IGJpZ3RlbnNbbl9iaWd0ZW5zLTFdOworCQkJCWllcHMrKzsKKwkJCQl9CisJCQlmb3IoOyBqOyBqID0gKHVuc2lnbmVkIGludClqID4+IDEsIGkrKykKKwkJCQlpZiAoaiAmIDEpIHsKKwkJCQkJaWVwcysrOworCQkJCQlkcyAqPSBiaWd0ZW5zW2ldOworCQkJCQl9CisJCQl2YWx1ZShkKSAvPSBkczsKKwkJCX0KKwkJZWxzZSBpZiAoKGpqMSA9IC1rKSAhPSAwKSB7CisJCQl2YWx1ZShkKSAqPSB0ZW5zW2pqMSAmIDB4Zl07CisJCQlmb3IoaiA9ICh1bnNpZ25lZCBpbnQpamoxID4+IDQ7IGo7CisJCQkgICAgaiA9ICh1bnNpZ25lZCBpbnQpaiA+PiAxLCBpKyspCisJCQkJaWYgKGogJiAxKSB7CisJCQkJCWllcHMrKzsKKwkJCQkJdmFsdWUoZCkgKj0gYmlndGVuc1tpXTsKKwkJCQkJfQorCQkJfQorCQlpZiAoa19jaGVjayAmJiB2YWx1ZShkKSA8IDEuICYmIGlsaW0gPiAwKSB7CisJCQlpZiAoaWxpbTEgPD0gMCkKKwkJCQlnb3RvIGZhc3RfZmFpbGVkOworCQkJaWxpbSA9IGlsaW0xOworCQkJay0tOworCQkJdmFsdWUoZCkgKj0gMTAuOworCQkJaWVwcysrOworCQkJfQorCQl2YWx1ZShlcHMpID0gaWVwcyp2YWx1ZShkKSArIDcuOworCQl3b3JkMChlcHMpIC09IChQLTEpKkV4cF9tc2sxOworCQlpZiAoaWxpbSA9PSAwKSB7CisJCQlTID0gbWhpID0gMDsKKwkJCXZhbHVlKGQpIC09IDUuOworCQkJaWYgKHZhbHVlKGQpID4gdmFsdWUoZXBzKSkKKwkJCQlnb3RvIG9uZV9kaWdpdDsKKwkJCWlmICh2YWx1ZShkKSA8IC12YWx1ZShlcHMpKQorCQkJCWdvdG8gbm9fZGlnaXRzOworCQkJZ290byBmYXN0X2ZhaWxlZDsKKwkJCX0KKyNpZm5kZWYgTm9fbGVmdHJpZ2h0CisJCWlmIChsZWZ0cmlnaHQpIHsKKwkJCS8qIFVzZSBTdGVlbGUgJiBXaGl0ZSBtZXRob2Qgb2Ygb25seQorCQkJICogZ2VuZXJhdGluZyBkaWdpdHMgbmVlZGVkLgorCQkJICovCisJCQl2YWx1ZShlcHMpID0gMC41L3RlbnNbaWxpbS0xXSAtIHZhbHVlKGVwcyk7CisJCQlmb3IoaSA9IDA7OykgeworCQkJCUwgPSB2YWx1ZShkKTsKKwkJCQl2YWx1ZShkKSAtPSBMOworCQkJCSpzKysgPSAnMCcgKyAoaW50KUw7CisJCQkJaWYgKHZhbHVlKGQpIDwgdmFsdWUoZXBzKSkKKwkJCQkJZ290byByZXQxOworCQkJCWlmICgxLiAtIHZhbHVlKGQpIDwgdmFsdWUoZXBzKSkKKwkJCQkJZ290byBidW1wX3VwOworCQkJCWlmICgrK2kgPj0gaWxpbSkKKwkJCQkJYnJlYWs7CisJCQkJdmFsdWUoZXBzKSAqPSAxMC47CisJCQkJdmFsdWUoZCkgKj0gMTAuOworCQkJCX0KKwkJCX0KKwkJZWxzZSB7CisjZW5kaWYKKwkJCS8qIEdlbmVyYXRlIGlsaW0gZGlnaXRzLCB0aGVuIGZpeCB0aGVtIHVwLiAqLworCQkJdmFsdWUoZXBzKSAqPSB0ZW5zW2lsaW0tMV07CisJCQlmb3IoaSA9IDE7OyBpKyssIHZhbHVlKGQpICo9IDEwLikgeworCQkJCUwgPSB2YWx1ZShkKTsKKwkJCQl2YWx1ZShkKSAtPSBMOworCQkJCSpzKysgPSAnMCcgKyAoaW50KUw7CisJCQkJaWYgKGkgPT0gaWxpbSkgeworCQkJCQlpZiAodmFsdWUoZCkgPiAwLjUgKyB2YWx1ZShlcHMpKQorCQkJCQkJZ290byBidW1wX3VwOworCQkJCQllbHNlIGlmICh2YWx1ZShkKSA8IDAuNSAtIHZhbHVlKGVwcykpIHsKKwkJCQkJCXdoaWxlKCotLXMgPT0gJzAnKTsKKwkJCQkJCXMrKzsKKwkJCQkJCWdvdG8gcmV0MTsKKwkJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisjaWZuZGVmIE5vX2xlZnRyaWdodAorCQkJfQorI2VuZGlmCisgZmFzdF9mYWlsZWQ6CisJCXMgPSBzMDsKKwkJdmFsdWUoZCkgPSB2YWx1ZShkMik7CisJCWsgPSBrMDsKKwkJaWxpbSA9IGlsaW0wOworCQl9CisKKwkvKiBEbyB3ZSBoYXZlIGEgInNtYWxsIiBpbnRlZ2VyPyAqLworCisJaWYgKGJlID49IDAgJiYgayA8PSBJbnRfbWF4KSB7CisJCS8qIFllcy4gKi8KKwkJZHMgPSB0ZW5zW2tdOworCQlpZiAobmRpZ2l0cyA8IDAgJiYgaWxpbSA8PSAwKSB7CisJCQlTID0gbWhpID0gMDsKKwkJCWlmIChpbGltIDwgMCB8fCB2YWx1ZShkKSA8PSA1KmRzKQorCQkJCWdvdG8gbm9fZGlnaXRzOworCQkJZ290byBvbmVfZGlnaXQ7CisJCQl9CisJCWZvcihpID0gMTs7IGkrKykgeworCQkJTCA9IHZhbHVlKGQpIC8gZHM7CisJCQl2YWx1ZShkKSAtPSBMKmRzOworI2lmZGVmIENoZWNrX0ZMVF9ST1VORFMKKwkJCS8qIElmIEZMVF9ST1VORFMgPT0gMiwgTCB3aWxsIHVzdWFsbHkgYmUgaGlnaCBieSAxICovCisJCQlpZiAodmFsdWUoZCkgPCAwKSB7CisJCQkJTC0tOworCQkJCXZhbHVlKGQpICs9IGRzOworCQkJCX0KKyNlbmRpZgorCQkJKnMrKyA9ICcwJyArIChpbnQpTDsKKwkJCWlmIChpID09IGlsaW0pIHsKKwkJCQl2YWx1ZShkKSArPSB2YWx1ZShkKTsKKwkJCQlpZiAodmFsdWUoZCkgPiBkcyB8fCAodmFsdWUoZCkgPT0gZHMgJiYgTCAmIDEpKSB7CisgYnVtcF91cDoKKwkJCQkJd2hpbGUoKi0tcyA9PSAnOScpCisJCQkJCQlpZiAocyA9PSBzMCkgeworCQkJCQkJCWsrKzsKKwkJCQkJCQkqcyA9ICcwJzsKKwkJCQkJCQlicmVhazsKKwkJCQkJCQl9CisJCQkJCSsrKnMrKzsKKwkJCQkJfQorCQkJCWJyZWFrOworCQkJCX0KKwkJCWlmICghKHZhbHVlKGQpICo9IDEwLikpCisJCQkJYnJlYWs7CisJCQl9CisJCWdvdG8gcmV0MTsKKwkJfQorCisJbTIgPSBiMjsKKwltNSA9IGI1OworCW1oaSA9IG1sbyA9IDA7CisJaWYgKGxlZnRyaWdodCkgeworCQlpZiAobW9kZSA8IDIpIHsKKwkJCWkgPQorI2lmbmRlZiBTdWRkZW5fVW5kZXJmbG93CisJCQkJZGVub3JtID8gYmUgKyAoQmlhcyArIChQLTEpIC0gMSArIDEpIDoKKyNlbmRpZgorI2lmZGVmIElCTQorCQkJCTEgKyA0KlAgLSAzIC0gYmJpdHMgKyAoKGJiaXRzICsgYmUgLSAxKSAmIDMpOworI2Vsc2UKKwkJCQkxICsgUCAtIGJiaXRzOworI2VuZGlmCisJCQl9CisJCWVsc2UgeworCQkJaiA9IGlsaW0gLSAxOworCQkJaWYgKG01ID49IGopCisJCQkJbTUgLT0gajsKKwkJCWVsc2UgeworCQkJCXM1ICs9IGogLT0gbTU7CisJCQkJYjUgKz0gajsKKwkJCQltNSA9IDA7CisJCQkJfQorCQkJaWYgKChpID0gaWxpbSkgPCAwKSB7CisJCQkJbTIgLT0gaTsKKwkJCQlpID0gMDsKKwkJCQl9CisJCQl9CisJCWIyICs9IGk7CisJCXMyICs9IGk7CisJCW1oaSA9IGkyYigxKTsKKwkJfQorCWlmIChtMiA+IDAgJiYgczIgPiAwKSB7CisJCWkgPSBtMiA8IHMyID8gbTIgOiBzMjsKKwkJYjIgLT0gaTsKKwkJbTIgLT0gaTsKKwkJczIgLT0gaTsKKwkJfQorCWlmIChiNSA+IDApIHsKKwkJaWYgKGxlZnRyaWdodCkgeworCQkJaWYgKG01ID4gMCkgeworCQkJCW1oaSA9IHBvdzVtdWx0KG1oaSwgbTUpOworCQkJCWIxID0gbXVsdChtaGksIGIpOworCQkJCUJmcmVlKGIpOworCQkJCWIgPSBiMTsKKwkJCQl9CisJCQlpZiAoKGogPSBiNSAtIG01KSAhPSAwKQorCQkJCWIgPSBwb3c1bXVsdChiLCBqKTsKKwkJCX0KKwkJZWxzZQorCQkJYiA9IHBvdzVtdWx0KGIsIGI1KTsKKwkJfQorCVMgPSBpMmIoMSk7CisJaWYgKHM1ID4gMCkKKwkJUyA9IHBvdzVtdWx0KFMsIHM1KTsKKworCS8qIENoZWNrIGZvciBzcGVjaWFsIGNhc2UgdGhhdCBkIGlzIGEgbm9ybWFsaXplZCBwb3dlciBvZiAyLiAqLworCisJaWYgKG1vZGUgPCAyKSB7CisJCWlmICghd29yZDEoZCkgJiYgISh3b3JkMChkKSAmIEJuZHJ5X21hc2spCisjaWZuZGVmIFN1ZGRlbl9VbmRlcmZsb3cKKwkJICYmIHdvcmQwKGQpICYgRXhwX21hc2sKKyNlbmRpZgorCQkJCSkgeworCQkJLyogVGhlIHNwZWNpYWwgY2FzZSAqLworCQkJYjIgKz0gTG9nMlA7CisJCQlzMiArPSBMb2cyUDsKKwkJCXNwZWNfY2FzZSA9IDE7CisJCQl9CisJCWVsc2UKKwkJCXNwZWNfY2FzZSA9IDA7CisJCX0KKworCS8qIEFycmFuZ2UgZm9yIGNvbnZlbmllbnQgY29tcHV0YXRpb24gb2YgcXVvdGllbnRzOgorCSAqIHNoaWZ0IGxlZnQgaWYgbmVjZXNzYXJ5IHNvIGRpdmlzb3IgaGFzIDQgbGVhZGluZyAwIGJpdHMuCisJICoKKwkgKiBQZXJoYXBzIHdlIHNob3VsZCBqdXN0IGNvbXB1dGUgbGVhZGluZyAyOCBiaXRzIG9mIFMgb25jZQorCSAqIGFuZCBmb3IgYWxsIGFuZCBwYXNzIHRoZW0gYW5kIGEgc2hpZnQgdG8gcXVvcmVtLCBzbyBpdAorCSAqIGNhbiBkbyBzaGlmdHMgYW5kIG9ycyB0byBjb21wdXRlIHRoZSBudW1lcmF0b3IgZm9yIHEuCisJICovCisjaWZkZWYgUGFja18zMgorCWlmICgoaSA9ICgoczUgPyAzMiAtIGhpMGJpdHMoUy0+eFtTLT53ZHMtMV0pIDogMSkgKyBzMikgJiAweDFmKSAhPSAwKQorCQlpID0gMzIgLSBpOworI2Vsc2UKKwlpZiAoaSA9ICgoczUgPyAzMiAtIGhpMGJpdHMoUy0+eFtTLT53ZHMtMV0pIDogMSkgKyBzMikgJiAweGYpCisJCWkgPSAxNiAtIGk7CisjZW5kaWYKKwlpZiAoaSA+IDQpIHsKKwkJaSAtPSA0OworCQliMiArPSBpOworCQltMiArPSBpOworCQlzMiArPSBpOworCQl9CisJZWxzZSBpZiAoaSA8IDQpIHsKKwkJaSArPSAyODsKKwkJYjIgKz0gaTsKKwkJbTIgKz0gaTsKKwkJczIgKz0gaTsKKwkJfQorCWlmIChiMiA+IDApCisJCWIgPSBsc2hpZnQoYiwgYjIpOworCWlmIChzMiA+IDApCisJCVMgPSBsc2hpZnQoUywgczIpOworCWlmIChrX2NoZWNrKSB7CisJCWlmIChjbXAoYixTKSA8IDApIHsKKwkJCWstLTsKKwkJCWIgPSBtdWx0YWRkKGIsIDEwLCAwKTsJLyogd2UgYm90Y2hlZCB0aGUgayBlc3RpbWF0ZSAqLworCQkJaWYgKGxlZnRyaWdodCkKKwkJCQltaGkgPSBtdWx0YWRkKG1oaSwgMTAsIDApOworCQkJaWxpbSA9IGlsaW0xOworCQkJfQorCQl9CisJaWYgKGlsaW0gPD0gMCAmJiBtb2RlID4gMikgeworCQlpZiAoaWxpbSA8IDAgfHwgY21wKGIsUyA9IG11bHRhZGQoUyw1LDApKSA8PSAwKSB7CisJCQkvKiBubyBkaWdpdHMsIGZjdnQgc3R5bGUgKi8KKyBub19kaWdpdHM6CisJCQlrID0gLTEgLSBuZGlnaXRzOworCQkJZ290byByZXQ7CisJCQl9Cisgb25lX2RpZ2l0OgorCQkqcysrID0gJzEnOworCQlrKys7CisJCWdvdG8gcmV0OworCQl9CisJaWYgKGxlZnRyaWdodCkgeworCQlpZiAobTIgPiAwKQorCQkJbWhpID0gbHNoaWZ0KG1oaSwgbTIpOworCisJCS8qIENvbXB1dGUgbWxvIC0tIGNoZWNrIGZvciBzcGVjaWFsIGNhc2UKKwkJICogdGhhdCBkIGlzIGEgbm9ybWFsaXplZCBwb3dlciBvZiAyLgorCQkgKi8KKworCQltbG8gPSBtaGk7CisJCWlmIChzcGVjX2Nhc2UpIHsKKwkJCW1oaSA9IEJhbGxvYyhtaGktPmspOworCQkJQmNvcHkobWhpLCBtbG8pOworCQkJbWhpID0gbHNoaWZ0KG1oaSwgTG9nMlApOworCQkJfQorCisJCWZvcihpID0gMTs7aSsrKSB7CisJCQlkaWcgPSBxdW9yZW0oYixTKSArICcwJzsKKwkJCS8qIERvIHdlIHlldCBoYXZlIHRoZSBzaG9ydGVzdCBkZWNpbWFsIHN0cmluZworCQkJICogdGhhdCB3aWxsIHJvdW5kIHRvIGQ/CisJCQkgKi8KKwkJCWogPSBjbXAoYiwgbWxvKTsKKwkJCWRlbHRhID0gZGlmZihTLCBtaGkpOworCQkJamoxID0gZGVsdGEtPnNpZ24gPyAxIDogY21wKGIsIGRlbHRhKTsKKwkJCUJmcmVlKGRlbHRhKTsKKyNpZm5kZWYgUk9VTkRfQklBU0VECisJCQlpZiAoamoxID09IDAgJiYgIW1vZGUgJiYgISh3b3JkMShkKSAmIDEpKSB7CisJCQkJaWYgKGRpZyA9PSAnOScpCisJCQkJCWdvdG8gcm91bmRfOV91cDsKKwkJCQlpZiAoaiA+IDApCisJCQkJCWRpZysrOworCQkJCSpzKysgPSBkaWc7CisJCQkJZ290byByZXQ7CisJCQkJfQorI2VuZGlmCisJCQlpZiAoaiA8IDAgfHwgKGogPT0gMCAmJiAhbW9kZQorI2lmbmRlZiBST1VORF9CSUFTRUQKKwkJCQkJCQkmJiAhKHdvcmQxKGQpICYgMSkKKyNlbmRpZgorCQkJCQkpKSB7CisJCQkJaWYgKGpqMSA+IDApIHsKKwkJCQkJYiA9IGxzaGlmdChiLCAxKTsKKwkJCQkJamoxID0gY21wKGIsIFMpOworCQkJCQlpZiAoKGpqMSA+IDAgfHwgKGpqMSA9PSAwICYmIGRpZyAmIDEpKQorCQkJCQkmJiBkaWcrKyA9PSAnOScpCisJCQkJCQlnb3RvIHJvdW5kXzlfdXA7CisJCQkJCX0KKwkJCQkqcysrID0gZGlnOworCQkJCWdvdG8gcmV0OworCQkJCX0KKwkJCWlmIChqajEgPiAwKSB7CisJCQkJaWYgKGRpZyA9PSAnOScpIHsgLyogcG9zc2libGUgaWYgaSA9PSAxICovCisgcm91bmRfOV91cDoKKwkJCQkJKnMrKyA9ICc5JzsKKwkJCQkJZ290byByb3VuZG9mZjsKKwkJCQkJfQorCQkJCSpzKysgPSBkaWcgKyAxOworCQkJCWdvdG8gcmV0OworCQkJCX0KKwkJCSpzKysgPSBkaWc7CisJCQlpZiAoaSA9PSBpbGltKQorCQkJCWJyZWFrOworCQkJYiA9IG11bHRhZGQoYiwgMTAsIDApOworCQkJaWYgKG1sbyA9PSBtaGkpCisJCQkJbWxvID0gbWhpID0gbXVsdGFkZChtaGksIDEwLCAwKTsKKwkJCWVsc2UgeworCQkJCW1sbyA9IG11bHRhZGQobWxvLCAxMCwgMCk7CisJCQkJbWhpID0gbXVsdGFkZChtaGksIDEwLCAwKTsKKwkJCQl9CisJCQl9CisJCX0KKwllbHNlCisJCWZvcihpID0gMTs7IGkrKykgeworCQkJKnMrKyA9IGRpZyA9IHF1b3JlbShiLFMpICsgJzAnOworCQkJaWYgKGkgPj0gaWxpbSkKKwkJCQlicmVhazsKKwkJCWIgPSBtdWx0YWRkKGIsIDEwLCAwKTsKKwkJCX0KKworCS8qIFJvdW5kIG9mZiBsYXN0IGRpZ2l0ICovCisKKwliID0gbHNoaWZ0KGIsIDEpOworCWogPSBjbXAoYiwgUyk7CisJaWYgKGogPiAwIHx8IChqID09IDAgJiYgZGlnICYgMSkpIHsKKyByb3VuZG9mZjoKKwkJd2hpbGUoKi0tcyA9PSAnOScpCisJCQlpZiAocyA9PSBzMCkgeworCQkJCWsrKzsKKwkJCQkqcysrID0gJzEnOworCQkJCWdvdG8gcmV0OworCQkJCX0KKwkJKysqcysrOworCQl9CisJZWxzZSB7CisJCXdoaWxlKCotLXMgPT0gJzAnKTsKKwkJcysrOworCQl9CisgcmV0OgorCUJmcmVlKFMpOworCWlmIChtaGkpIHsKKwkJaWYgKG1sbyAmJiBtbG8gIT0gbWhpKQorCQkJQmZyZWUobWxvKTsKKwkJQmZyZWUobWhpKTsKKwkJfQorIHJldDE6CisJQmZyZWUoYik7CisJaWYgKHMgPT0gczApIHsJCQkJLyogZG9uJ3QgcmV0dXJuIGVtcHR5IHN0cmluZyAqLworCQkqcysrID0gJzAnOworCQlrID0gMDsKKwl9CisJKnMgPSAwOworCSpkZWNwdCA9IGsgKyAxOworCWlmIChydmUpCisJCSpydmUgPSBzOworCXJldHVybiBzMDsKKwl9CisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9zdGRsaWIvc3RydG9pbWF4LmMgYi9saWJjL3N0ZGxpYi9zdHJ0b2ltYXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzQyZWI5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRsaWIvc3RydG9pbWF4LmMKQEAgLTAsMCArMSwxNzEgQEAKKy8qCSRPcGVuQlNEOiBzdHJ0b2ltYXguYyx2IDEuMSAyMDA2LzAxLzEzIDE3OjU4OjA5IG1pbGxlcnQgRXhwICQJKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTIgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKworLyoKKyAqIENvbnZlcnQgYSBzdHJpbmcgdG8gYW4gaW50bWF4X3QKKyAqCisgKiBJZ25vcmVzIGBsb2NhbGUnIHN0dWZmLiAgQXNzdW1lcyB0aGF0IHRoZSB1cHBlciBhbmQgbG93ZXIgY2FzZQorICogYWxwaGFiZXRzIGFuZCBkaWdpdHMgYXJlIGVhY2ggY29udGlndW91cy4KKyAqLworaW50bWF4X3QKK3N0cnRvaW1heChjb25zdCBjaGFyICpucHRyLCBjaGFyICoqZW5kcHRyLCBpbnQgYmFzZSkKK3sKKwljb25zdCBjaGFyICpzOworCWludG1heF90IGFjYywgY3V0b2ZmOworCWludCBjOworCWludCBuZWcsIGFueSwgY3V0bGltOworCisJLyoKKwkgKiBTa2lwIHdoaXRlIHNwYWNlIGFuZCBwaWNrIHVwIGxlYWRpbmcgKy8tIHNpZ24gaWYgYW55LgorCSAqIElmIGJhc2UgaXMgMCwgYWxsb3cgMHggZm9yIGhleCBhbmQgMCBmb3Igb2N0YWwsIGVsc2UKKwkgKiBhc3N1bWUgZGVjaW1hbDsgaWYgYmFzZSBpcyBhbHJlYWR5IDE2LCBhbGxvdyAweC4KKwkgKi8KKwlzID0gbnB0cjsKKwlkbyB7CisJCWMgPSAodW5zaWduZWQgY2hhcikgKnMrKzsKKwl9IHdoaWxlIChpc3NwYWNlKGMpKTsKKwlpZiAoYyA9PSAnLScpIHsKKwkJbmVnID0gMTsKKwkJYyA9ICpzKys7CisJfSBlbHNlIHsKKwkJbmVnID0gMDsKKwkJaWYgKGMgPT0gJysnKQorCQkJYyA9ICpzKys7CisJfQorCWlmICgoYmFzZSA9PSAwIHx8IGJhc2UgPT0gMTYpICYmCisJICAgIGMgPT0gJzAnICYmICgqcyA9PSAneCcgfHwgKnMgPT0gJ1gnKSkgeworCQljID0gc1sxXTsKKwkJcyArPSAyOworCQliYXNlID0gMTY7CisJfQorCWlmIChiYXNlID09IDApCisJCWJhc2UgPSBjID09ICcwJyA/IDggOiAxMDsKKworCS8qCisJICogQ29tcHV0ZSB0aGUgY3V0b2ZmIHZhbHVlIGJldHdlZW4gbGVnYWwgbnVtYmVycyBhbmQgaWxsZWdhbAorCSAqIG51bWJlcnMuICBUaGF0IGlzIHRoZSBsYXJnZXN0IGxlZ2FsIHZhbHVlLCBkaXZpZGVkIGJ5IHRoZQorCSAqIGJhc2UuICBBbiBpbnB1dCBudW1iZXIgdGhhdCBpcyBncmVhdGVyIHRoYW4gdGhpcyB2YWx1ZSwgaWYKKwkgKiBmb2xsb3dlZCBieSBhIGxlZ2FsIGlucHV0IGNoYXJhY3RlciwgaXMgdG9vIGJpZy4gIE9uZSB0aGF0CisJICogaXMgZXF1YWwgdG8gdGhpcyB2YWx1ZSBtYXkgYmUgdmFsaWQgb3Igbm90OyB0aGUgbGltaXQKKwkgKiBiZXR3ZWVuIHZhbGlkIGFuZCBpbnZhbGlkIG51bWJlcnMgaXMgdGhlbiBiYXNlZCBvbiB0aGUgbGFzdAorCSAqIGRpZ2l0LiAgRm9yIGluc3RhbmNlLCBpZiB0aGUgcmFuZ2UgZm9yIGludG1heF90IGlzCisJICogWy05MjIzMzcyMDM2ODU0Nzc1ODA4Li45MjIzMzcyMDM2ODU0Nzc1ODA3XSBhbmQgdGhlIGlucHV0IGJhc2UKKwkgKiBpcyAxMCwgY3V0b2ZmIHdpbGwgYmUgc2V0IHRvIDkyMjMzNzIwMzY4NTQ3NzU4MCBhbmQgY3V0bGltIHRvCisJICogZWl0aGVyIDcgKG5lZz09MCkgb3IgOCAobmVnPT0xKSwgbWVhbmluZyB0aGF0IGlmIHdlIGhhdmUKKwkgKiBhY2N1bXVsYXRlZCBhIHZhbHVlID4gOTIyMzM3MjAzNjg1NDc3NTgwLCBvciBlcXVhbCBidXQgdGhlCisJICogbmV4dCBkaWdpdCBpcyA+IDcgKG9yIDgpLCB0aGUgbnVtYmVyIGlzIHRvbyBiaWcsIGFuZCB3ZSB3aWxsCisJICogcmV0dXJuIGEgcmFuZ2UgZXJyb3IuCisJICoKKwkgKiBTZXQgYW55IGlmIGFueSBgZGlnaXRzJyBjb25zdW1lZDsgbWFrZSBpdCBuZWdhdGl2ZSB0byBpbmRpY2F0ZQorCSAqIG92ZXJmbG93LgorCSAqLworCisJLyogQklPTklDOiBhdm9pZCBkaXZpc2lvbiBhbmQgbW9kdWxlIGZvciBjb21tb24gY2FzZXMgKi8KKyNkZWZpbmUgIENBU0VfQkFTRSh4KSBcCisgICAgICAgICAgICBjYXNlIHg6ICBcCisJICAgICAgICBpZiAobmVnKSB7IFwKKyAgICAgICAgICAgICAgICAgICAgY3V0bGltID0gSU5UTUFYX01JTiAlIHg7IFwKKwkJICAgIGN1dG9mZiA9IElOVE1BWF9NSU4gLyB4OyBcCisJICAgICAgICB9IGVsc2UgeyBcCisJCSAgICBjdXRsaW0gPSBJTlRNQVhfTUFYICUgeDsgXAorCQkgICAgY3V0b2ZmID0gSU5UTUFYX01BWCAvIHg7IFwKKwkJIH07IFwKKwkJIGJyZWFrCisJCSAKKwlzd2l0Y2ggKGJhc2UpIHsKKyAgICAgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICAgICBpZiAobmVnKSB7CisgICAgICAgICAgICAgICAgICAgIGN1dGxpbSA9IChpbnQpKElOVE1BWF9NSU4gJSA0KTsKKyAgICAgICAgICAgICAgICAgICAgY3V0b2ZmID0gSU5UTUFYX01JTiAvIDQ7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgY3V0bGltID0gKGludCkoSU5UTUFYX01BWCAlIDQpOworICAgICAgICAgICAgICAgICAgICBjdXRvZmYgPSBJTlRNQVhfTUFYIC8gNDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkgICAgQ0FTRV9CQVNFKDgpOworCSAgICBDQVNFX0JBU0UoMTApOworCSAgICBDQVNFX0JBU0UoMTYpOworCSAgICBkZWZhdWx0OiAgCisJICAgICAgICAgICAgICBjdXRvZmYgID0gbmVnID8gSU5UTUFYX01JTiA6IElOVE1BWF9NQVg7CisJCSAgICAgIGN1dGxpbSAgPSBjdXRvZmYgJSBiYXNlOworCSAgICAgICAgICAgICAgY3V0b2ZmIC89IGJhc2U7CisJfQorI3VuZGVmIENBU0VfQkFTRQorCQorCWlmIChuZWcpIHsKKwkJaWYgKGN1dGxpbSA+IDApIHsKKwkJCWN1dGxpbSAtPSBiYXNlOworCQkJY3V0b2ZmICs9IDE7CisJCX0KKwkJY3V0bGltID0gLWN1dGxpbTsKKwl9CisJZm9yIChhY2MgPSAwLCBhbnkgPSAwOzsgYyA9ICh1bnNpZ25lZCBjaGFyKSAqcysrKSB7CisJCWlmIChpc2RpZ2l0KGMpKQorCQkJYyAtPSAnMCc7CisJCWVsc2UgaWYgKGlzYWxwaGEoYykpCisJCQljIC09IGlzdXBwZXIoYykgPyAnQScgLSAxMCA6ICdhJyAtIDEwOworCQllbHNlCisJCQlicmVhazsKKwkJaWYgKGMgPj0gYmFzZSkKKwkJCWJyZWFrOworCQlpZiAoYW55IDwgMCkKKwkJCWNvbnRpbnVlOworCQlpZiAobmVnKSB7CisJCQlpZiAoYWNjIDwgY3V0b2ZmIHx8IChhY2MgPT0gY3V0b2ZmICYmIGMgPiBjdXRsaW0pKSB7CisJCQkJYW55ID0gLTE7CisJCQkJYWNjID0gSU5UTUFYX01JTjsKKwkJCQllcnJubyA9IEVSQU5HRTsKKwkJCX0gZWxzZSB7CisJCQkJYW55ID0gMTsKKwkJCQlhY2MgKj0gYmFzZTsKKwkJCQlhY2MgLT0gYzsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChhY2MgPiBjdXRvZmYgfHwgKGFjYyA9PSBjdXRvZmYgJiYgYyA+IGN1dGxpbSkpIHsKKwkJCQlhbnkgPSAtMTsKKwkJCQlhY2MgPSBJTlRNQVhfTUFYOworCQkJCWVycm5vID0gRVJBTkdFOworCQkJfSBlbHNlIHsKKwkJCQlhbnkgPSAxOworCQkJCWFjYyAqPSBiYXNlOworCQkJCWFjYyArPSBjOworCQkJfQorCQl9CisJfQorCWlmIChlbmRwdHIgIT0gMCkKKwkJKmVuZHB0ciA9IChjaGFyICopIChhbnkgPyBzIC0gMSA6IG5wdHIpOworCXJldHVybiAoYWNjKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkbGliL3N0cnRvbC5jIGIvbGliYy9zdGRsaWIvc3RydG9sLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNjZGJjZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkbGliL3N0cnRvbC5jCkBAIC0wLDAgKzEsMTQwIEBACisvKgkkT3BlbkJTRDogc3RydG9sLmMsdiAxLjcgMjAwNS8wOC8wOCAwODowNTozNyBlc3BpZSBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKworLyoKKyAqIENvbnZlcnQgYSBzdHJpbmcgdG8gYSBsb25nIGludGVnZXIuCisgKgorICogSWdub3JlcyBgbG9jYWxlJyBzdHVmZi4gIEFzc3VtZXMgdGhhdCB0aGUgdXBwZXIgYW5kIGxvd2VyIGNhc2UKKyAqIGFscGhhYmV0cyBhbmQgZGlnaXRzIGFyZSBlYWNoIGNvbnRpZ3VvdXMuCisgKi8KK2xvbmcKK3N0cnRvbChjb25zdCBjaGFyICpucHRyLCBjaGFyICoqZW5kcHRyLCBpbnQgYmFzZSkKK3sKKwljb25zdCBjaGFyICpzOworCWxvbmcgYWNjLCBjdXRvZmY7CisJaW50IGM7CisJaW50IG5lZywgYW55LCBjdXRsaW07CisKKwkvKgorCSAqIFNraXAgd2hpdGUgc3BhY2UgYW5kIHBpY2sgdXAgbGVhZGluZyArLy0gc2lnbiBpZiBhbnkuCisJICogSWYgYmFzZSBpcyAwLCBhbGxvdyAweCBmb3IgaGV4IGFuZCAwIGZvciBvY3RhbCwgZWxzZQorCSAqIGFzc3VtZSBkZWNpbWFsOyBpZiBiYXNlIGlzIGFscmVhZHkgMTYsIGFsbG93IDB4LgorCSAqLworCXMgPSBucHRyOworCWRvIHsKKwkJYyA9ICh1bnNpZ25lZCBjaGFyKSAqcysrOworCX0gd2hpbGUgKGlzc3BhY2UoYykpOworCWlmIChjID09ICctJykgeworCQluZWcgPSAxOworCQljID0gKnMrKzsKKwl9IGVsc2UgeworCQluZWcgPSAwOworCQlpZiAoYyA9PSAnKycpCisJCQljID0gKnMrKzsKKwl9CisJaWYgKChiYXNlID09IDAgfHwgYmFzZSA9PSAxNikgJiYKKwkgICAgYyA9PSAnMCcgJiYgKCpzID09ICd4JyB8fCAqcyA9PSAnWCcpKSB7CisJCWMgPSBzWzFdOworCQlzICs9IDI7CisJCWJhc2UgPSAxNjsKKwl9CisJaWYgKGJhc2UgPT0gMCkKKwkJYmFzZSA9IGMgPT0gJzAnID8gOCA6IDEwOworCisJLyoKKwkgKiBDb21wdXRlIHRoZSBjdXRvZmYgdmFsdWUgYmV0d2VlbiBsZWdhbCBudW1iZXJzIGFuZCBpbGxlZ2FsCisJICogbnVtYmVycy4gIFRoYXQgaXMgdGhlIGxhcmdlc3QgbGVnYWwgdmFsdWUsIGRpdmlkZWQgYnkgdGhlCisJICogYmFzZS4gIEFuIGlucHV0IG51bWJlciB0aGF0IGlzIGdyZWF0ZXIgdGhhbiB0aGlzIHZhbHVlLCBpZgorCSAqIGZvbGxvd2VkIGJ5IGEgbGVnYWwgaW5wdXQgY2hhcmFjdGVyLCBpcyB0b28gYmlnLiAgT25lIHRoYXQKKwkgKiBpcyBlcXVhbCB0byB0aGlzIHZhbHVlIG1heSBiZSB2YWxpZCBvciBub3Q7IHRoZSBsaW1pdAorCSAqIGJldHdlZW4gdmFsaWQgYW5kIGludmFsaWQgbnVtYmVycyBpcyB0aGVuIGJhc2VkIG9uIHRoZSBsYXN0CisJICogZGlnaXQuICBGb3IgaW5zdGFuY2UsIGlmIHRoZSByYW5nZSBmb3IgbG9uZ3MgaXMKKwkgKiBbLTIxNDc0ODM2NDguLjIxNDc0ODM2NDddIGFuZCB0aGUgaW5wdXQgYmFzZSBpcyAxMCwKKwkgKiBjdXRvZmYgd2lsbCBiZSBzZXQgdG8gMjE0NzQ4MzY0IGFuZCBjdXRsaW0gdG8gZWl0aGVyCisJICogNyAobmVnPT0wKSBvciA4IChuZWc9PTEpLCBtZWFuaW5nIHRoYXQgaWYgd2UgaGF2ZSBhY2N1bXVsYXRlZAorCSAqIGEgdmFsdWUgPiAyMTQ3NDgzNjQsIG9yIGVxdWFsIGJ1dCB0aGUgbmV4dCBkaWdpdCBpcyA+IDcgKG9yIDgpLAorCSAqIHRoZSBudW1iZXIgaXMgdG9vIGJpZywgYW5kIHdlIHdpbGwgcmV0dXJuIGEgcmFuZ2UgZXJyb3IuCisJICoKKwkgKiBTZXQgYW55IGlmIGFueSBgZGlnaXRzJyBjb25zdW1lZDsgbWFrZSBpdCBuZWdhdGl2ZSB0byBpbmRpY2F0ZQorCSAqIG92ZXJmbG93LgorCSAqLworCWN1dG9mZiA9IG5lZyA/IExPTkdfTUlOIDogTE9OR19NQVg7CisJY3V0bGltID0gY3V0b2ZmICUgYmFzZTsKKwljdXRvZmYgLz0gYmFzZTsKKwlpZiAobmVnKSB7CisJCWlmIChjdXRsaW0gPiAwKSB7CisJCQljdXRsaW0gLT0gYmFzZTsKKwkJCWN1dG9mZiArPSAxOworCQl9CisJCWN1dGxpbSA9IC1jdXRsaW07CisJfQorCWZvciAoYWNjID0gMCwgYW55ID0gMDs7IGMgPSAodW5zaWduZWQgY2hhcikgKnMrKykgeworCQlpZiAoaXNkaWdpdChjKSkKKwkJCWMgLT0gJzAnOworCQllbHNlIGlmIChpc2FscGhhKGMpKQorCQkJYyAtPSBpc3VwcGVyKGMpID8gJ0EnIC0gMTAgOiAnYScgLSAxMDsKKwkJZWxzZQorCQkJYnJlYWs7CisJCWlmIChjID49IGJhc2UpCisJCQlicmVhazsKKwkJaWYgKGFueSA8IDApCisJCQljb250aW51ZTsKKwkJaWYgKG5lZykgeworCQkJaWYgKGFjYyA8IGN1dG9mZiB8fCAoYWNjID09IGN1dG9mZiAmJiBjID4gY3V0bGltKSkgeworCQkJCWFueSA9IC0xOworCQkJCWFjYyA9IExPTkdfTUlOOworCQkJCWVycm5vID0gRVJBTkdFOworCQkJfSBlbHNlIHsKKwkJCQlhbnkgPSAxOworCQkJCWFjYyAqPSBiYXNlOworCQkJCWFjYyAtPSBjOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKGFjYyA+IGN1dG9mZiB8fCAoYWNjID09IGN1dG9mZiAmJiBjID4gY3V0bGltKSkgeworCQkJCWFueSA9IC0xOworCQkJCWFjYyA9IExPTkdfTUFYOworCQkJCWVycm5vID0gRVJBTkdFOworCQkJfSBlbHNlIHsKKwkJCQlhbnkgPSAxOworCQkJCWFjYyAqPSBiYXNlOworCQkJCWFjYyArPSBjOworCQkJfQorCQl9CisJfQorCWlmIChlbmRwdHIgIT0gMCkKKwkJKmVuZHB0ciA9IChjaGFyICopIChhbnkgPyBzIC0gMSA6IG5wdHIpOworCXJldHVybiAoYWNjKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkbGliL3N0cnRvbGwuYyBiL2xpYmMvc3RkbGliL3N0cnRvbGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzc1MjcxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRsaWIvc3RydG9sbC5jCkBAIC0wLDAgKzEsNTAgQEAKKy8qICRPcGVuQlNEOiBzdHJ0b2xsLmMsdiAxLjYgMjAwNS8xMS8xMCAxMDowMDoxNyBlc3BpZSBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTIgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorCisvKgorICogQ29udmVydCBhIHN0cmluZyB0byBhIGxvbmcgbG9uZy4KKyAqCisgKiBJZ25vcmVzIGBsb2NhbGUnIHN0dWZmLiAgQXNzdW1lcyB0aGF0IHRoZSB1cHBlciBhbmQgbG93ZXIgY2FzZQorICogYWxwaGFiZXRzIGFuZCBkaWdpdHMgYXJlIGVhY2ggY29udGlndW91cy4KKyAqLworbG9uZyBsb25nCitzdHJ0b2xsKGNvbnN0IGNoYXIgKm5wdHIsIGNoYXIgKiplbmRwdHIsIGludCBiYXNlKQoreworICAgIHJldHVybiBzdHJ0b2ltYXgobnB0ciwgZW5kcHRyLCBiYXNlKTsKK30KKwpkaWZmIC0tZ2l0IGEvbGliYy9zdGRsaWIvc3RydG91bC5jIGIvbGliYy9zdGRsaWIvc3RydG91bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxZGJiNmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGxpYi9zdHJ0b3VsLmMKQEAgLTAsMCArMSwxMDIgQEAKKy8qCSRPcGVuQlNEOiBzdHJ0b3VsLmMsdiAxLjcgMjAwNS8wOC8wOCAwODowNTozNyBlc3BpZSBFeHAgJCAqLworLyoKKyAqIENvcHlyaWdodCAoYykgMTk5MCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisvKgorICogQ29udmVydCBhIHN0cmluZyB0byBhbiB1bnNpZ25lZCBsb25nIGludGVnZXIuCisgKgorICogSWdub3JlcyBgbG9jYWxlJyBzdHVmZi4gIEFzc3VtZXMgdGhhdCB0aGUgdXBwZXIgYW5kIGxvd2VyIGNhc2UKKyAqIGFscGhhYmV0cyBhbmQgZGlnaXRzIGFyZSBlYWNoIGNvbnRpZ3VvdXMuCisgKi8KK3Vuc2lnbmVkIGxvbmcKK3N0cnRvdWwoY29uc3QgY2hhciAqbnB0ciwgY2hhciAqKmVuZHB0ciwgaW50IGJhc2UpCit7CisJY29uc3QgY2hhciAqczsKKwl1bnNpZ25lZCBsb25nIGFjYywgY3V0b2ZmOworCWludCBjOworCWludCBuZWcsIGFueSwgY3V0bGltOworCisJLyoKKwkgKiBTZWUgc3RydG9sIGZvciBjb21tZW50cyBhcyB0byB0aGUgbG9naWMgdXNlZC4KKwkgKi8KKwlzID0gbnB0cjsKKwlkbyB7CisJCWMgPSAodW5zaWduZWQgY2hhcikgKnMrKzsKKwl9IHdoaWxlIChpc3NwYWNlKGMpKTsKKwlpZiAoYyA9PSAnLScpIHsKKwkJbmVnID0gMTsKKwkJYyA9ICpzKys7CisJfSBlbHNlIHsKKwkJbmVnID0gMDsKKwkJaWYgKGMgPT0gJysnKQorCQkJYyA9ICpzKys7CisJfQorCWlmICgoYmFzZSA9PSAwIHx8IGJhc2UgPT0gMTYpICYmCisJICAgIGMgPT0gJzAnICYmICgqcyA9PSAneCcgfHwgKnMgPT0gJ1gnKSkgeworCQljID0gc1sxXTsKKwkJcyArPSAyOworCQliYXNlID0gMTY7CisJfQorCWlmIChiYXNlID09IDApCisJCWJhc2UgPSBjID09ICcwJyA/IDggOiAxMDsKKworCWN1dG9mZiA9IFVMT05HX01BWCAvICh1bnNpZ25lZCBsb25nKWJhc2U7CisJY3V0bGltID0gVUxPTkdfTUFYICUgKHVuc2lnbmVkIGxvbmcpYmFzZTsKKwlmb3IgKGFjYyA9IDAsIGFueSA9IDA7OyBjID0gKHVuc2lnbmVkIGNoYXIpICpzKyspIHsKKwkJaWYgKGlzZGlnaXQoYykpCisJCQljIC09ICcwJzsKKwkJZWxzZSBpZiAoaXNhbHBoYShjKSkKKwkJCWMgLT0gaXN1cHBlcihjKSA/ICdBJyAtIDEwIDogJ2EnIC0gMTA7CisJCWVsc2UKKwkJCWJyZWFrOworCQlpZiAoYyA+PSBiYXNlKQorCQkJYnJlYWs7CisJCWlmIChhbnkgPCAwKQorCQkJY29udGludWU7CisJCWlmIChhY2MgPiBjdXRvZmYgfHwgKGFjYyA9PSBjdXRvZmYgJiYgYyA+IGN1dGxpbSkpIHsKKwkJCWFueSA9IC0xOworCQkJYWNjID0gVUxPTkdfTUFYOworCQkJZXJybm8gPSBFUkFOR0U7CisJCX0gZWxzZSB7CisJCQlhbnkgPSAxOworCQkJYWNjICo9ICh1bnNpZ25lZCBsb25nKWJhc2U7CisJCQlhY2MgKz0gYzsKKwkJfQorCX0KKwlpZiAobmVnICYmIGFueSA+IDApCisJCWFjYyA9IC1hY2M7CisJaWYgKGVuZHB0ciAhPSAwKQorCQkqZW5kcHRyID0gKGNoYXIgKikgKGFueSA/IHMgLSAxIDogbnB0cik7CisJcmV0dXJuIChhY2MpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRsaWIvc3RydG91bGwuYyBiL2xpYmMvc3RkbGliL3N0cnRvdWxsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY2OThhYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkbGliL3N0cnRvdWxsLmMKQEAgLTAsMCArMSw0OSBAQAorLyoJJE9wZW5CU0Q6IHN0cnRvdWxsLmMsdiAxLjUgMjAwNS8wOC8wOCAwODowNTozNyBlc3BpZSBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTIgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorCisvKgorICogQ29udmVydCBhIHN0cmluZyB0byBhbiB1bnNpZ25lZCBsb25nIGxvbmcuCisgKgorICogSWdub3JlcyBgbG9jYWxlJyBzdHVmZi4gIEFzc3VtZXMgdGhhdCB0aGUgdXBwZXIgYW5kIGxvd2VyIGNhc2UKKyAqIGFscGhhYmV0cyBhbmQgZGlnaXRzIGFyZSBlYWNoIGNvbnRpZ3VvdXMuCisgKi8KK3Vuc2lnbmVkIGxvbmcgbG9uZworc3RydG91bGwoY29uc3QgY2hhciAqbnB0ciwgY2hhciAqKmVuZHB0ciwgaW50IGJhc2UpCit7CisgICAgcmV0dXJuICh1bnNpZ25lZCBsb25nIGxvbmcpc3RydG91bWF4KG5wdHIsIGVuZHB0ciwgYmFzZSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0ZGxpYi9zdHJ0b3VtYXguYyBiL2xpYmMvc3RkbGliL3N0cnRvdW1heC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjNDUzNzcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGxpYi9zdHJ0b3VtYXguYwpAQCAtMCwwICsxLDExNSBAQAorLyoJJE9wZW5CU0Q6IHN0cnRvdW1heC5jLHYgMS4xIDIwMDYvMDEvMTMgMTc6NTg6MDkgbWlsbGVydCBFeHAgJAkqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MiBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorCisvKgorICogQ29udmVydCBhIHN0cmluZyB0byBhIHVpbnRtYXhfdC4KKyAqCisgKiBJZ25vcmVzIGBsb2NhbGUnIHN0dWZmLiAgQXNzdW1lcyB0aGF0IHRoZSB1cHBlciBhbmQgbG93ZXIgY2FzZQorICogYWxwaGFiZXRzIGFuZCBkaWdpdHMgYXJlIGVhY2ggY29udGlndW91cy4KKyAqLwordWludG1heF90CitzdHJ0b3VtYXgoY29uc3QgY2hhciAqbnB0ciwgY2hhciAqKmVuZHB0ciwgaW50IGJhc2UpCit7CisJY29uc3QgY2hhciAqczsKKwl1aW50bWF4X3QgYWNjLCBjdXRvZmY7CisJaW50IGM7CisJaW50IG5lZywgYW55LCBjdXRsaW07CisKKwkvKgorCSAqIFNlZSBzdHJ0b3EgZm9yIGNvbW1lbnRzIGFzIHRvIHRoZSBsb2dpYyB1c2VkLgorCSAqLworCXMgPSBucHRyOworCWRvIHsKKwkJYyA9ICh1bnNpZ25lZCBjaGFyKSAqcysrOworCX0gd2hpbGUgKGlzc3BhY2UoYykpOworCWlmIChjID09ICctJykgeworCQluZWcgPSAxOworCQljID0gKnMrKzsKKwl9IGVsc2UgeyAKKwkJbmVnID0gMDsKKwkJaWYgKGMgPT0gJysnKQorCQkJYyA9ICpzKys7CisJfQorCWlmICgoYmFzZSA9PSAwIHx8IGJhc2UgPT0gMTYpICYmCisJICAgIGMgPT0gJzAnICYmICgqcyA9PSAneCcgfHwgKnMgPT0gJ1gnKSkgeworCQljID0gc1sxXTsKKwkJcyArPSAyOworCQliYXNlID0gMTY7CisJfQorCWlmIChiYXNlID09IDApCisJCWJhc2UgPSBjID09ICcwJyA/IDggOiAxMDsKKworICAgICAgICAvKiBCSU9OSUM6IGF2b2lkIGRpdmlzaW9uIGFuZCBtb2R1bG8gZm9yIGNvbW1vbiBjYXNlcyAqLworI2RlZmluZSAgQ0FTRV9CQVNFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGNhc2UgeDogY3V0b2ZmID0gVUlOVE1BWF9NQVggLyB4OyAgICBcCisJICAgICAgICAgICAgY3V0bGltID0gVUlOVE1BWF9NQVggJSB4OyAgICBcCisJCSAgICBicmVhaworCQkgICAgCQorICAgICAgICBzd2l0Y2ggKGJhc2UpIHsKKyAgICAgICAgQ0FTRV9CQVNFKDgpOworCUNBU0VfQkFTRSgxMCk7CisJQ0FTRV9CQVNFKDE2KTsKKwlkZWZhdWx0OgorCSAgICBjdXRvZmYgPSBVSU5UTUFYX01BWCAvIGJhc2U7CisJICAgIGN1dGxpbSA9IFVJTlRNQVhfTUFYICUgYmFzZTsKKwl9CisJCisJZm9yIChhY2MgPSAwLCBhbnkgPSAwOzsgYyA9ICh1bnNpZ25lZCBjaGFyKSAqcysrKSB7CisJCWlmIChpc2RpZ2l0KGMpKQorCQkJYyAtPSAnMCc7CisJCWVsc2UgaWYgKGlzYWxwaGEoYykpCisJCQljIC09IGlzdXBwZXIoYykgPyAnQScgLSAxMCA6ICdhJyAtIDEwOworCQllbHNlCisJCQlicmVhazsKKwkJaWYgKGMgPj0gYmFzZSkKKwkJCWJyZWFrOworCQlpZiAoYW55IDwgMCkKKwkJCWNvbnRpbnVlOworCQlpZiAoYWNjID4gY3V0b2ZmIHx8IChhY2MgPT0gY3V0b2ZmICYmIGMgPiBjdXRsaW0pKSB7CisJCQlhbnkgPSAtMTsKKwkJCWFjYyA9IFVJTlRNQVhfTUFYOworCQkJZXJybm8gPSBFUkFOR0U7CisJCX0gZWxzZSB7CisJCQlhbnkgPSAxOworCQkJYWNjICo9ICh1aW50bWF4X3QpYmFzZTsKKwkJCWFjYyArPSBjOworCQl9CisJfQorCWlmIChuZWcgJiYgYW55ID4gMCkKKwkJYWNjID0gLWFjYzsKKwlpZiAoZW5kcHRyICE9IDApCisJCSplbmRwdHIgPSAoY2hhciAqKSAoYW55ID8gcyAtIDEgOiBucHRyKTsKKwlyZXR1cm4gKGFjYyk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0ZGxpYi90b2xvd2VyXy5jIGIvbGliYy9zdGRsaWIvdG9sb3dlcl8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGRjYzdiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRsaWIvdG9sb3dlcl8uYwpAQCAtMCwwICsxLDU3IEBACisvKgkkT3BlbkJTRDogdG9sb3dlcl8uYyx2IDEuOSAyMDA1LzA4LzA4IDA4OjA1OjM0IGVzcGllIEV4cCAkICovCisvKgorICogV3JpdHRlbiBieSBKLlQuIENvbmtsaW4gPGp0Y0BuZXRic2Qub3JnPi4KKyAqIFB1YmxpYyBkb21haW4uCisgKi8KKworI2RlZmluZSBfQU5TSV9MSUJSQVJZCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgImN0eXBlX3ByaXZhdGUuaCIKKworY29uc3Qgc2hvcnQgX0NfdG9sb3dlcl9bMSArIENUWVBFX05VTV9DSEFSU10gPSB7CisJRU9GLAorCTB4MDAsCTB4MDEsCTB4MDIsCTB4MDMsCTB4MDQsCTB4MDUsCTB4MDYsCTB4MDcsCisJMHgwOCwJMHgwOSwJMHgwYSwJMHgwYiwJMHgwYywJMHgwZCwJMHgwZSwJMHgwZiwKKwkweDEwLAkweDExLAkweDEyLAkweDEzLAkweDE0LAkweDE1LAkweDE2LAkweDE3LAorCTB4MTgsCTB4MTksCTB4MWEsCTB4MWIsCTB4MWMsCTB4MWQsCTB4MWUsCTB4MWYsCisJMHgyMCwJMHgyMSwJMHgyMiwJMHgyMywJMHgyNCwJMHgyNSwJMHgyNiwJMHgyNywKKwkweDI4LAkweDI5LAkweDJhLAkweDJiLAkweDJjLAkweDJkLAkweDJlLAkweDJmLAorCTB4MzAsCTB4MzEsCTB4MzIsCTB4MzMsCTB4MzQsCTB4MzUsCTB4MzYsCTB4MzcsCisJMHgzOCwJMHgzOSwJMHgzYSwJMHgzYiwJMHgzYywJMHgzZCwJMHgzZSwJMHgzZiwKKwkweDQwLAknYScsCSdiJywJJ2MnLAknZCcsCSdlJywJJ2YnLAknZycsCisJJ2gnLAknaScsCSdqJywJJ2snLAknbCcsCSdtJywJJ24nLAknbycsCisJJ3AnLAkncScsCSdyJywJJ3MnLAkndCcsCSd1JywJJ3YnLAkndycsCisJJ3gnLAkneScsCSd6JywJMHg1YiwJMHg1YywJMHg1ZCwJMHg1ZSwJMHg1ZiwKKwkweDYwLAkweDYxLAkweDYyLAkweDYzLAkweDY0LAkweDY1LAkweDY2LAkweDY3LAorCTB4NjgsCTB4NjksCTB4NmEsCTB4NmIsCTB4NmMsCTB4NmQsCTB4NmUsCTB4NmYsCisJMHg3MCwJMHg3MSwJMHg3MiwJMHg3MywJMHg3NCwJMHg3NSwJMHg3NiwJMHg3NywKKwkweDc4LAkweDc5LAkweDdhLAkweDdiLAkweDdjLAkweDdkLAkweDdlLAkweDdmLAorCTB4ODAsCTB4ODEsCTB4ODIsCTB4ODMsCTB4ODQsCTB4ODUsCTB4ODYsCTB4ODcsCisJMHg4OCwJMHg4OSwJMHg4YSwJMHg4YiwJMHg4YywJMHg4ZCwJMHg4ZSwJMHg4ZiwKKwkweDkwLAkweDkxLAkweDkyLAkweDkzLAkweDk0LAkweDk1LAkweDk2LAkweDk3LAorCTB4OTgsCTB4OTksCTB4OWEsCTB4OWIsCTB4OWMsCTB4OWQsCTB4OWUsCTB4OWYsCisJMHhhMCwJMHhhMSwJMHhhMiwJMHhhMywJMHhhNCwJMHhhNSwJMHhhNiwJMHhhNywKKwkweGE4LAkweGE5LAkweGFhLAkweGFiLAkweGFjLAkweGFkLAkweGFlLAkweGFmLAorCTB4YjAsCTB4YjEsCTB4YjIsCTB4YjMsCTB4YjQsCTB4YjUsCTB4YjYsCTB4YjcsCisJMHhiOCwJMHhiOSwJMHhiYSwJMHhiYiwJMHhiYywJMHhiZCwJMHhiZSwJMHhiZiwKKwkweGMwLAkweGMxLAkweGMyLAkweGMzLAkweGM0LAkweGM1LAkweGM2LAkweGM3LAorCTB4YzgsCTB4YzksCTB4Y2EsCTB4Y2IsCTB4Y2MsCTB4Y2QsCTB4Y2UsCTB4Y2YsCisJMHhkMCwJMHhkMSwJMHhkMiwJMHhkMywJMHhkNCwJMHhkNSwJMHhkNiwJMHhkNywKKwkweGQ4LAkweGQ5LAkweGRhLAkweGRiLAkweGRjLAkweGRkLAkweGRlLAkweGRmLAorCTB4ZTAsCTB4ZTEsCTB4ZTIsCTB4ZTMsCTB4ZTQsCTB4ZTUsCTB4ZTYsCTB4ZTcsCisJMHhlOCwJMHhlOSwJMHhlYSwJMHhlYiwJMHhlYywJMHhlZCwJMHhlZSwJMHhlZiwKKwkweGYwLAkweGYxLAkweGYyLAkweGYzLAkweGY0LAkweGY1LAkweGY2LAkweGY3LAorCTB4ZjgsCTB4ZjksCTB4ZmEsCTB4ZmIsCTB4ZmMsCTB4ZmQsCTB4ZmUsCTB4ZmYKK307CisKK2NvbnN0IHNob3J0ICpfdG9sb3dlcl90YWJfID0gX0NfdG9sb3dlcl87CisKKyN1bmRlZiB0b2xvd2VyCitpbnQKK3RvbG93ZXIoaW50IGMpCit7CisJaWYgKCh1bnNpZ25lZCBpbnQpYyA+IDI1NSkKKwkJcmV0dXJuKGMpOworCXJldHVybigoX3RvbG93ZXJfdGFiXyArIDEpW2NdKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkbGliL3RvdXBwZXJfLmMgYi9saWJjL3N0ZGxpYi90b3VwcGVyXy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwOTMxOTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGxpYi90b3VwcGVyXy5jCkBAIC0wLDAgKzEsNTggQEAKKy8qCSRPcGVuQlNEOiB0b3VwcGVyXy5jLHYgMS4xMCAyMDA1LzA4LzA5IDA4OjM2OjQ4IGtldmxvIEV4cCAkICovCisvKgorICogV3JpdHRlbiBieSBKLlQuIENvbmtsaW4gPGp0Y0BuZXRic2Qub3JnPi4KKyAqIFB1YmxpYyBkb21haW4uCisgKi8KKworI2RlZmluZSBfQU5TSV9MSUJSQVJZCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAiY3R5cGVfcHJpdmF0ZS5oIgorCitjb25zdCBzaG9ydCBfQ190b3VwcGVyX1sxICsgQ1RZUEVfTlVNX0NIQVJTXSA9IHsKKwlFT0YsCisJMHgwMCwJMHgwMSwJMHgwMiwJMHgwMywJMHgwNCwJMHgwNSwJMHgwNiwJMHgwNywKKwkweDA4LAkweDA5LAkweDBhLAkweDBiLAkweDBjLAkweDBkLAkweDBlLAkweDBmLAorCTB4MTAsCTB4MTEsCTB4MTIsCTB4MTMsCTB4MTQsCTB4MTUsCTB4MTYsCTB4MTcsCisJMHgxOCwJMHgxOSwJMHgxYSwJMHgxYiwJMHgxYywJMHgxZCwJMHgxZSwJMHgxZiwKKwkweDIwLAkweDIxLAkweDIyLAkweDIzLAkweDI0LAkweDI1LAkweDI2LAkweDI3LAorCTB4MjgsCTB4MjksCTB4MmEsCTB4MmIsCTB4MmMsCTB4MmQsCTB4MmUsCTB4MmYsCisJMHgzMCwJMHgzMSwJMHgzMiwJMHgzMywJMHgzNCwJMHgzNSwJMHgzNiwJMHgzNywKKwkweDM4LAkweDM5LAkweDNhLAkweDNiLAkweDNjLAkweDNkLAkweDNlLAkweDNmLAorCTB4NDAsCTB4NDEsCTB4NDIsCTB4NDMsCTB4NDQsCTB4NDUsCTB4NDYsCTB4NDcsCisJMHg0OCwJMHg0OSwJMHg0YSwJMHg0YiwJMHg0YywJMHg0ZCwJMHg0ZSwJMHg0ZiwKKwkweDUwLAkweDUxLAkweDUyLAkweDUzLAkweDU0LAkweDU1LAkweDU2LAkweDU3LAorCTB4NTgsCTB4NTksCTB4NWEsCTB4NWIsCTB4NWMsCTB4NWQsCTB4NWUsCTB4NWYsCisJMHg2MCwJJ0EnLAknQicsCSdDJywJJ0QnLAknRScsCSdGJywJJ0cnLAorCSdIJywJJ0knLAknSicsCSdLJywJJ0wnLAknTScsCSdOJywJJ08nLAorCSdQJywJJ1EnLAknUicsCSdTJywJJ1QnLAknVScsCSdWJywJJ1cnLAorCSdYJywJJ1knLAknWicsCTB4N2IsCTB4N2MsCTB4N2QsCTB4N2UsCTB4N2YsCisJMHg4MCwJMHg4MSwJMHg4MiwJMHg4MywJMHg4NCwJMHg4NSwJMHg4NiwJMHg4NywKKwkweDg4LAkweDg5LAkweDhhLAkweDhiLAkweDhjLAkweDhkLAkweDhlLAkweDhmLAorCTB4OTAsCTB4OTEsCTB4OTIsCTB4OTMsCTB4OTQsCTB4OTUsCTB4OTYsCTB4OTcsCisJMHg5OCwJMHg5OSwJMHg5YSwJMHg5YiwJMHg5YywJMHg5ZCwJMHg5ZSwJMHg5ZiwKKwkweGEwLAkweGExLAkweGEyLAkweGEzLAkweGE0LAkweGE1LAkweGE2LAkweGE3LAorCTB4YTgsCTB4YTksCTB4YWEsCTB4YWIsCTB4YWMsCTB4YWQsCTB4YWUsCTB4YWYsCisJMHhiMCwJMHhiMSwJMHhiMiwJMHhiMywJMHhiNCwJMHhiNSwJMHhiNiwJMHhiNywKKwkweGI4LAkweGI5LAkweGJhLAkweGJiLAkweGJjLAkweGJkLAkweGJlLAkweGJmLAorCTB4YzAsCTB4YzEsCTB4YzIsCTB4YzMsCTB4YzQsCTB4YzUsCTB4YzYsCTB4YzcsCisJMHhjOCwJMHhjOSwJMHhjYSwJMHhjYiwJMHhjYywJMHhjZCwJMHhjZSwJMHhjZiwKKwkweGQwLAkweGQxLAkweGQyLAkweGQzLAkweGQ0LAkweGQ1LAkweGQ2LAkweGQ3LAorCTB4ZDgsCTB4ZDksCTB4ZGEsCTB4ZGIsCTB4ZGMsCTB4ZGQsCTB4ZGUsCTB4ZGYsCisJMHhlMCwJMHhlMSwJMHhlMiwJMHhlMywJMHhlNCwJMHhlNSwJMHhlNiwJMHhlNywKKwkweGU4LAkweGU5LAkweGVhLAkweGViLAkweGVjLAkweGVkLAkweGVlLAkweGVmLAorCTB4ZjAsCTB4ZjEsCTB4ZjIsCTB4ZjMsCTB4ZjQsCTB4ZjUsCTB4ZjYsCTB4ZjcsCisJMHhmOCwJMHhmOSwJMHhmYSwJMHhmYiwJMHhmYywJMHhmZCwJMHhmZSwJMHhmZgorfTsKKworY29uc3Qgc2hvcnQgKl90b3VwcGVyX3RhYl8gPSBfQ190b3VwcGVyXzsKKworI3VuZGVmIHRvdXBwZXIKK2ludAordG91cHBlcihpbnQgYykKK3sKKwlpZiAoKHVuc2lnbmVkIGludCljID4gMjU1KQorCQlyZXR1cm4oYyk7CisJcmV0dXJuKChfdG91cHBlcl90YWJfICsgMSlbY10pOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRsaWIvd2NoYXIuYyBiL2xpYmMvc3RkbGliL3djaGFyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgwNTMzMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkbGliL3djaGFyLmMKQEAgLTAsMCArMSw0MzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDx3Y2hhci5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKy8qIHN0dWJzIGZvciB3aWRlLWNoYXIgZnVuY3Rpb25zICovCit3aW50X3QgIGJ0b3djKGludCBjKQoreworICByZXR1cm4gKGMgPT0gRU9GKSA/IFdFT0YgOiBjOworfQorCitpbnQgZndwcmludGYoRklMRSAqc3RyZWFtLCBjb25zdCB3Y2hhcl90ICpmb3JtYXQsIC4uLikKK3sKKyAgICB2YV9saXN0ICBhcmdzOworICAgIGludCAgICAgIHJlc3VsdDsKKworICAgIHZhX3N0YXJ0KGFyZ3MsIGZvcm1hdCk7CisgICAgcmVzdWx0ID0gdmZ3cHJpbnRmKHN0cmVhbSwgZm9ybWF0LCBhcmdzKTsKKyAgICB2YV9lbmQoYXJncyk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW50IHdwcmludGYoY29uc3Qgd2NoYXJfdCAqZm9ybWF0LCAuLi4pCit7CisgICAgdmFfbGlzdCAgYXJnczsKKyAgICBpbnQgICAgICByZXN1bHQ7CisKKyAgICB2YV9zdGFydChhcmdzLCBmb3JtYXQpOworICAgIHJlc3VsdCA9IHZ3cHJpbnRmKGZvcm1hdCwgYXJncyk7CisgICAgdmFfZW5kKGFyZ3MpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2ludCBzd3ByaW50Zih3Y2hhcl90ICpzLCBzaXplX3QgbiwgY29uc3Qgd2NoYXJfdCAqZm9ybWF0LCAuLi4pCit7CisgICAgdmFfbGlzdCAgYXJnczsKKyAgICBpbnQgICAgICByZXN1bHQ7CisKKyAgICB2YV9zdGFydChhcmdzLCBmb3JtYXQpOworICAgIHJlc3VsdCA9IHZzd3ByaW50ZihzLCBuLCBmb3JtYXQsIGFyZ3MpOworICAgIHZhX2VuZChhcmdzKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbnQgdndwcmludGYoY29uc3Qgd2NoYXJfdCAqZm9ybWF0LCB2YV9saXN0IGFyZykKK3sKKyAgICByZXR1cm4gdnByaW50ZigoY29uc3QgY2hhciopZm9ybWF0LCBhcmcpOworfQorCitpbnQgdmZ3cHJpbnRmKEZJTEUgKnN0cmVhbSwgY29uc3Qgd2NoYXJfdCAqZm9ybWF0LCB2YV9saXN0IGFyZykKK3sKKyAgICByZXR1cm4gdmZwcmludGYoc3RyZWFtLCAoY29uc3QgY2hhciopZm9ybWF0LCBhcmcpOworfQorCitpbnQgdnN3cHJpbnRmKHdjaGFyX3QgKnMsIHNpemVfdCBuLCBjb25zdCB3Y2hhcl90ICpmb3JtYXQsIHZhX2xpc3QgYXJnKQoreworICAgIHJldHVybiB2c25wcmludGYoIChjaGFyKilzLCBuLCAoY29uc3QgY2hhciopZm9ybWF0LCBhcmcgKTsKK30KKworaW50IGZ3c2NhbmYoRklMRSAqc3RyZWFtLCBjb25zdCB3Y2hhcl90ICpmb3JtYXQsIC4uLiApCit7CisgICAgdmFfbGlzdCAgYXJnczsKKyAgICBpbnQgICAgICByZXN1bHQ7CisKKyAgICB2YV9zdGFydCAoYXJncywgZm9ybWF0KTsKKyAgICByZXN1bHQgPSB2ZnNjYW5mKCBzdHJlYW0sIChjb25zdCBjaGFyKilmb3JtYXQsIGFyZ3MgKTsKKyAgICB2YV9lbmQgKGFyZ3MpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2ludCB3c2NhbmYoY29uc3Qgd2NoYXJfdCAqZm9ybWF0LCAuLi4gKQoreworICAgIHZhX2xpc3QgIGFyZ3M7CisgICAgaW50ICAgICAgcmVzdWx0OworCisgICAgdmFfc3RhcnQgKGFyZ3MsIGZvcm1hdCk7CisgICAgcmVzdWx0ID0gdnNjYW5mKCAoY29uc3QgY2hhciopZm9ybWF0LCBhcmdzICk7CisgICAgdmFfZW5kIChhcmdzKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbnQgc3dzY2FuZihjb25zdCB3Y2hhcl90ICpzLCBjb25zdCB3Y2hhcl90ICpmb3JtYXQsIC4uLiApCit7CisgICAgdmFfbGlzdCAgYXJnczsKKyAgICBpbnQgICAgICByZXN1bHQ7CisKKyAgICB2YV9zdGFydCAoYXJncywgZm9ybWF0KTsKKyAgICByZXN1bHQgPSB2c2NhbmYoIChjb25zdCBjaGFyKilmb3JtYXQsIGFyZ3MgKTsKKyAgICB2YV9lbmQgKGFyZ3MpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2ludCBpc3dhbG51bSh3aW50X3Qgd2MpIHsgcmV0dXJuIGlzYWxudW0od2MpOyB9CitpbnQgaXN3YWxwaGEod2ludF90IHdjKSB7IHJldHVybiBpc2FscGhhKHdjKTsgfQoraW50IGlzd2NudHJsKHdpbnRfdCB3YykgeyByZXR1cm4gaXNjbnRybCh3Yyk7IH0KK2ludCBpc3dkaWdpdCh3aW50X3Qgd2MpIHsgcmV0dXJuIGlzZGlnaXQod2MpOyB9CitpbnQgaXN3Z3JhcGgod2ludF90IHdjKSB7IHJldHVybiBpc2dyYXBoKHdjKTsgfQoraW50IGlzd2xvd2VyKHdpbnRfdCB3YykgeyByZXR1cm4gaXNsb3dlcih3Yyk7IH0KK2ludCBpc3dwcmludCh3aW50X3Qgd2MpIHsgcmV0dXJuIGlzcHJpbnQod2MpOyB9CitpbnQgaXN3cHVuY3Qod2ludF90IHdjKSB7IHJldHVybiBpc3B1bmN0KHdjKTsgfQoraW50IGlzd3NwYWNlKHdpbnRfdCB3YykgeyByZXR1cm4gaXNzcGFjZSh3Yyk7IH0KK2ludCBpc3d1cHBlcih3aW50X3Qgd2MpIHsgcmV0dXJuIGlzdXBwZXIod2MpOyB9CitpbnQgaXN3eGRpZ2l0KHdpbnRfdCB3YykgeyByZXR1cm4gaXN4ZGlnaXQod2MpOyB9CisKK2ludCBpc3djdHlwZSh3aW50X3Qgd2MsIHdjdHlwZV90IGNoYXJjbGFzcykKK3sKKyAgICBzd2l0Y2ggKGNoYXJjbGFzcykgeworICAgICAgICBjYXNlIFdDX1RZUEVfQUxOVU06IHJldHVybiBpc2FsbnVtKHdjKTsKKyAgICAgICAgY2FzZSBXQ19UWVBFX0FMUEhBOiByZXR1cm4gaXNhbHBoYSh3Yyk7CisgICAgICAgIGNhc2UgV0NfVFlQRV9CTEFOSzogcmV0dXJuIGlzYmxhbmsod2MpOworICAgICAgICBjYXNlIFdDX1RZUEVfQ05UUkw6IHJldHVybiBpc2NudHJsKHdjKTsKKyAgICAgICAgY2FzZSBXQ19UWVBFX0RJR0lUOiByZXR1cm4gaXNkaWdpdCh3Yyk7CisgICAgICAgIGNhc2UgV0NfVFlQRV9HUkFQSDogcmV0dXJuIGlzZ3JhcGgod2MpOworICAgICAgICBjYXNlIFdDX1RZUEVfTE9XRVI6IHJldHVybiBpc2xvd2VyKHdjKTsKKyAgICAgICAgY2FzZSBXQ19UWVBFX1BSSU5UOiByZXR1cm4gaXNwcmludCh3Yyk7CisgICAgICAgIGNhc2UgV0NfVFlQRV9QVU5DVDogcmV0dXJuIGlzcHVuY3Qod2MpOworICAgICAgICBjYXNlIFdDX1RZUEVfU1BBQ0U6IHJldHVybiBpc3NwYWNlKHdjKTsKKyAgICAgICAgY2FzZSBXQ19UWVBFX1VQUEVSOiByZXR1cm4gaXN1cHBlcih3Yyk7CisgICAgICAgIGNhc2UgV0NfVFlQRV9YRElHSVQ6IHJldHVybiBpc3hkaWdpdCh3Yyk7CisgICAgICAgIGRlZmF1bHQ6IHJldHVybiAwOworICAgIH07Cit9CisKK3dpbnRfdCBmZ2V0d2MoRklMRSAqc3RyZWFtKQoreworICAgIHJldHVybiBmZ2V0YyhzdHJlYW0pOworfQorCit3Y2hhcl90ICpmZ2V0d3Mod2NoYXJfdCAqd3MsIGludCBuLCBGSUxFICpzdHJlYW0pCit7CisgICAgcmV0dXJuICh3Y2hhcl90KikgZmdldHMoKGNoYXIqKXdzLCBuLCBzdHJlYW0pOworfQorCit3aW50X3QgICBmcHV0d2Mod2NoYXJfdCB3YywgRklMRSAqc3RyZWFtKQoreworICAgIHJldHVybiAod2ludF90KWZwdXRjKChjaGFyKXdjLCBzdHJlYW0pOworfQorCitpbnQgIGZwdXR3cyhjb25zdCB3Y2hhcl90ICpzdHIsIEZJTEUgKnN0cmVhbSkKK3sKKyAgICByZXR1cm4gZnB1dHMoIChjb25zdCBjaGFyKilzdHIsIHN0cmVhbSApOworfQorCitpbnQgIGZ3aWRlKEZJTEUgKnN0cmVhbSwgaW50ICBtb2RlKQoreworICAgIHN0cmVhbT1zdHJlYW07CisgICAgcmV0dXJuIChtb2RlKTsKK30KKword2ludF90ICBnZXR3YyhGSUxFICpzdHJlYW0pCit7CisgICAgcmV0dXJuIGdldGMoc3RyZWFtKTsKK30KKword2ludF90ICBnZXR3Y2hhcih2b2lkKQoreworICAgIHJldHVybiBnZXRjaGFyKCk7Cit9CisKK2ludCBtYnNpbml0KGNvbnN0IG1ic3RhdGVfdCAqcHMpCit7CisgICAgcHM9cHM7CisgICAgcmV0dXJuIDE7Cit9CisKK3NpemVfdCBtYnJsZW4oY29uc3QgY2hhciAqcywgc2l6ZV90IG4sIG1ic3RhdGVfdCAqcHMpCit7CisgICAgcmV0dXJuIChuICE9IDApOworfQorCitzaXplX3QgbWJydG93Yyh3Y2hhcl90ICpwd2MsIGNvbnN0IGNoYXIgKnMsIHNpemVfdCBuLCBtYnN0YXRlX3QgKnBzKQoreworICAgIGlmIChzID09IE5VTEwpIHsKKyAgICAgICAgcyAgID0gIiI7CisgICAgICAgIHB3YyA9IE5VTEw7CisgICAgfQorICAgIGlmIChuID09IDApIHsKKyAgICAgICAgaWYgKHB3YykKKyAgICAgICAgICAgICpwd2MgPSAwOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKHB3YykKKyAgICAgICAgKnB3YyA9ICpzOworCisgICAgcmV0dXJuICgqcyAhPSAwKTsKK30KKworc2l6ZV90IG1ic3J0b3djcyh3Y2hhcl90ICpkc3QsIGNvbnN0IGNoYXIgKipzcmMsIHNpemVfdCBsZW4sIG1ic3RhdGVfdCAqcHMpCit7CisgICAgY29uc3QgY2hhciogIHMgID0gKnNyYzsKKyAgICBjb25zdCBjaGFyKiAgczIgPSBtZW1jaHIoIHMsIDAsIGxlbiApOworCisgICAgaWYgKHMyICE9IE5VTEwpCisgICAgICAgIGxlbiA9IChzaXplX3QpKHMyIC0gcykgKyAxVTsKKworICAgIGlmIChkc3QpCisgICAgICAgIG1lbWNweSggKGNoYXIqKWRzdCwgcywgbGVuICk7CisKKyAgICAqc3JjID0gcyArIGxlbjsKKyAgICByZXR1cm4gbGVuOworfQorCit3aW50X3QgIHB1dHdjKHdjaGFyX3Qgd2MsIEZJTEUgKnN0cmVhbSkKK3sKKyAgICByZXR1cm4gZnB1dGMoKGNoYXIpd2MsIHN0cmVhbSk7Cit9CisKK3dpbnRfdCAgcHV0d2NoYXIod2NoYXJfdCB3YykKK3sKKyAgICByZXR1cm4gIHB1dGNoYXIoKGNoYXIpd2MpOworfQorCit3aW50X3QgIHRvd2xvd2VyKHdpbnRfdCB3YykKK3sKKyAgICByZXR1cm4gdG9sb3dlcih3Yyk7Cit9CisKK3dpbnRfdCAgdG93dXBwZXIod2ludF90ICB3YykKK3sKKyAgICByZXR1cm4gdG91cHBlcih3Yyk7Cit9CisKK3dpbnRfdCAgdW5nZXR3Yyh3aW50X3Qgd2MsIEZJTEUgKnN0cmVhbSkKK3sKKyAgICByZXR1cm4gdW5nZXRjKChjaGFyKXdjLCBzdHJlYW0pOworfQorCitzaXplX3Qgd2NydG9tYihjaGFyICpzLCB3Y2hhcl90IHdjLCBtYnN0YXRlX3QgKnBzKQoreworICAgIGlmIChzICE9IE5VTEwpCisgICAgICAgICpzID0gMTsKKyAgICByZXR1cm4gMTsKK30KKword2NoYXJfdCAqd2NzY2F0KHdjaGFyX3QgKndzMSwgY29uc3Qgd2NoYXJfdCAqd3MyKQoreworICAgIHJldHVybiAod2NoYXJfdCopIHN0cmNhdCgoY2hhciopd3MxLCAoY29uc3QgY2hhciopd3MyKTsKK30KKword2NoYXJfdCAqd2NzY2hyKGNvbnN0IHdjaGFyX3QgKndzLCB3Y2hhcl90IHdjKQoreworICAgIHJldHVybiAod2NoYXJfdCopc3RyY2hyKCAoY29uc3QgY2hhciopd3MsIChjaGFyKXdjICk7Cit9CisKK2ludCB3Y3NjbXAoY29uc3Qgd2NoYXJfdCAqd3MxLCBjb25zdCB3Y2hhcl90ICp3czIpCit7CisgICAgcmV0dXJuIHN0cmNtcCggKGNvbnN0IGNoYXIqKXdzMSwgKGNvbnN0IGNoYXIqKXdzMiApOworfQorCitpbnQgd2NzY29sbChjb25zdCB3Y2hhcl90ICp3czEsIGNvbnN0IHdjaGFyX3QgKndzMikKK3sKKyAgICByZXR1cm4gc3RyY21wKCAoY29uc3QgY2hhciopd3MxLCAoY29uc3QgY2hhciopd3MyICk7Cit9CisKK3djaGFyX3QgKndjc2NweSh3Y2hhcl90ICp3czEsIGNvbnN0IHdjaGFyX3QgKndzMikKK3sKKyAgICByZXR1cm4gKHdjaGFyX3QqKSBzdHJjcHkoIChjaGFyKil3czEsIChjb25zdCBjaGFyKil3czIgKTsKK30KKworc2l6ZV90IHdjc2NzcG4oY29uc3Qgd2NoYXJfdCAqd3MxLCBjb25zdCB3Y2hhcl90ICp3czIpCit7CisgICAgcmV0dXJuIHN0cnNwbiggKGNvbnN0IGNoYXIqKXdzMSwgKGNvbnN0IGNoYXIqKXdzMiApOworfQorCitzaXplX3Qgd2NzbGVuKGNvbnN0IHdjaGFyX3QgKndzKQoreworICAgIHJldHVybiAoc2l6ZV90KXN0cmxlbiggKGNvbnN0IGNoYXIqKXdzICk7Cit9CisKK3NpemVfdCB3Y3NmdGltZSh3Y2hhcl90ICp3Y3MsIHNpemVfdCBtYXhzaXplLCBjb25zdCB3Y2hhcl90ICpmb3JtYXQsICBjb25zdCBzdHJ1Y3QgdG0gKnRpbXB0cikKK3sKKyAgICByZXR1cm4gc3RyZnRpbWUoIChjaGFyKil3Y3MsIG1heHNpemUsIChjb25zdCBjaGFyKilmb3JtYXQsIHRpbXB0ciApOworfQorCit3Y2hhcl90ICp3Y3NuY2F0KHdjaGFyX3QgKndzMSwgY29uc3Qgd2NoYXJfdCAqd3MyLCBzaXplX3QgbikKK3sKKyAgICByZXR1cm4gKHdjaGFyX3QqKSBzdHJuY2F0KCAoY2hhciopd3MxLCAoY29uc3QgY2hhciopd3MyLCBuICk7Cit9CisKK2ludCB3Y3NuY21wKGNvbnN0IHdjaGFyX3QgKndzMSwgY29uc3Qgd2NoYXJfdCAqd3MyLCBzaXplX3QgbikKK3sKKyAgICByZXR1cm4gc3RybmNtcCggKGNvbnN0IGNoYXIqKXdzMSwgKGNvbnN0IGNoYXIqKXdzMiwgbiApOworfQorCit3Y2hhcl90ICp3Y3NuY3B5KHdjaGFyX3QgKndzMSwgY29uc3Qgd2NoYXJfdCAqd3MyLCBzaXplX3QgbikKK3sKKyAgICByZXR1cm4gKHdjaGFyX3QqKSBzdHJuY3B5KCAoY2hhciopd3MxLCAoY29uc3QgY2hhciopd3MyLCBuICk7Cit9CisKK3djaGFyX3QgKndjc3BicmsoY29uc3Qgd2NoYXJfdCAqd3MxLCBjb25zdCB3Y2hhcl90ICp3czIpCit7CisgICAgcmV0dXJuICh3Y2hhcl90Kikgc3RycGJyayggKGNvbnN0IGNoYXIqKXdzMSwgKGNvbnN0IGNoYXIqKXdzMiApOworfQorCit3Y2hhcl90ICp3Y3NyY2hyKGNvbnN0IHdjaGFyX3QgKndzLCB3Y2hhcl90IHdjKQoreworICAgIHJldHVybiAod2NoYXJfdCopIHN0cnJjaHIoIChjb25zdCBjaGFyKil3cywgKGludCl3YyApOworfQorCitzaXplX3Qgd2NzcnRvbWJzKGNoYXIgKmRzdCwgY29uc3Qgd2NoYXJfdCAqKnNyYywgc2l6ZV90IGxlbiwgbWJzdGF0ZV90ICpwcykKK3sKKyAgICBjb25zdCBjaGFyKiAgcyA9IChjb25zdCBjaGFyKikqc3JjOworICAgIGNvbnN0IGNoYXIqICBzMiA9IG1lbWNociggcywgMCwgbGVuICk7CisKKyAgICBpZiAoczIgIT0gTlVMTCkKKyAgICAgICAgbGVuID0gKHMyIC0gcykrMTsKKworICAgIGlmIChkc3QgIT0gTlVMTCkKKyAgICAgICAgbWVtY3B5KCBkc3QsIHMsIGxlbiApOworCisgICAgKnNyYyA9ICh3Y2hhcl90KikocyArIGxlbik7CisgICAgcmV0dXJuIGxlbjsKK30KKworc2l6ZV90IHdjc3Nwbihjb25zdCB3Y2hhcl90ICp3czEsIGNvbnN0IHdjaGFyX3QgKndzMikKK3sKKyAgICByZXR1cm4gc3Ryc3BuKCAoY29uc3QgY2hhciopd3MxLCAoY29uc3QgY2hhciopd3MyICk7Cit9CisKK3djaGFyX3QgKndjc3N0cihjb25zdCB3Y2hhcl90ICp3czEsIGNvbnN0IHdjaGFyX3QgKndzMikKK3sKKyAgICByZXR1cm4gKHdjaGFyX3QqKSBzdHJzdHIoIChjb25zdCBjaGFyKil3czEsIChjb25zdCBjaGFyKil3czIgKTsKK30KKworZG91YmxlIHdjc3RvZChjb25zdCB3Y2hhcl90ICpucHRyLCB3Y2hhcl90ICoqZW5kcHRyKQoreworICAgIHJldHVybiBzdHJ0b2QoIChjb25zdCBjaGFyKilucHRyLCAoY2hhcioqKWVuZHB0ciApOworfQorCit3Y2hhcl90ICp3Y3N0b2sod2NoYXJfdCAqd3MxLCBjb25zdCB3Y2hhcl90ICp3czIsIHdjaGFyX3QgKipwdHIpCit7CisgICAgcmV0dXJuICh3Y2hhcl90Kikgc3RydG9rX3IoIChjaGFyKil3czEsIChjb25zdCBjaGFyKil3czIsIChjaGFyKiopcHRyICk7Cit9CisKK2xvbmcgaW50IHdjc3RvbChjb25zdCB3Y2hhcl90ICpucHRyLCB3Y2hhcl90ICoqZW5kcHRyLCBpbnQgYmFzZSkKK3sKKyAgICByZXR1cm4gc3RydG9sKCAoY29uc3QgY2hhciopbnB0ciwgKGNoYXIqKillbmRwdHIsIGJhc2UgKTsKK30KKwordW5zaWduZWQgbG9uZyBpbnQgd2NzdG91bChjb25zdCB3Y2hhcl90ICpucHRyLCB3Y2hhcl90ICoqZW5kcHRyLCBpbnQgYmFzZSkKK3sKKyAgICByZXR1cm4gc3RydG91bCggKGNvbnN0IGNoYXIqKW5wdHIsIChjaGFyKiopZW5kcHRyLCBiYXNlICk7Cit9CisKK3djaGFyX3QgKndjc3djcyhjb25zdCB3Y2hhcl90ICp3czEsIGNvbnN0IHdjaGFyX3QgKndzMikKK3sKKyAgICByZXR1cm4gKHdjaGFyX3QqKSBzdHJzdHIoIChjb25zdCBjaGFyKil3czEsIChjb25zdCBjaGFyKil3czIgKTsKK30KKworaW50IHdjc3dpZHRoKGNvbnN0IHdjaGFyX3QgKnB3Y3MsIHNpemVfdCBuKQoreworICAgIHJldHVybiAgc3RybmxlbiggKGNvbnN0IGNoYXIqKXB3Y3MsIG4gKTsKK30KKworc2l6ZV90IHdjc3hmcm0od2NoYXJfdCAqd3MxLCBjb25zdCB3Y2hhcl90ICp3czIsIHNpemVfdCBuKQoreworICAgIG1lbWNweSggKGNoYXIqKXdzMSwgKGNvbnN0IGNoYXIqKXdzMiwgbiApOworICAgIHJldHVybiBuOworfQorCitpbnQgd2N0b2Iod2ludF90IGMpCit7CisgIHJldHVybiBjOworfQorCit3Y3R5cGVfdCB3Y3R5cGUoY29uc3QgY2hhciAqcHJvcGVydHkpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0ICBwcm9wZXJ0aWVzW1dDX1RZUEVfTUFYXSA9CisgICAgeworICAgICAgICAiPGludmFsaWQ+IiwKKyAgICAgICAgImFsbnVtIiwgImFscGhhIiwgImJsYW5rIiwgImNudHJsIiwgImRpZ2l0IiwgImdyYXBoIiwKKyAgICAgICAgImxvd2VyIiwgInByaW50IiwgInB1bmN0IiwgInNwYWNlIiwgInVwcGVyIiwgInhkaWdpdCIKKyAgICB9OworICAgIGludCAgbm47CisKKyAgICBmb3IgKCBubiA9IDA7IG5uIDwgV0NfVFlQRV9NQVg7IG5uKysgKQorICAgICAgICBpZiAoICFzdHJjbXAoIHByb3BlcnRpZXNbbm5dLCBwcm9wZXJ0eSApICkKKyAgICAgICAgICAgIHJldHVybiAod2N0eXBlX3QpKG5uKTsKKworICAgIHJldHVybiAwOworfQorCitpbnQgd2N3aWR0aCh3Y2hhcl90IHdjKQoreworICAgIHJldHVybiAod2MgPiAwKTsKK30KKword2NoYXJfdCAqd21lbWNocihjb25zdCB3Y2hhcl90ICp3cywgd2NoYXJfdCB3Yywgc2l6ZV90IG4pCit7CisgICAgcmV0dXJuICh3Y2hhcl90KikgIG1lbWNociggKGNvbnN0IGNoYXIqKXdzLCAoaW50KXdjLCBuICk7Cit9CisKK2ludCB3bWVtY21wKGNvbnN0IHdjaGFyX3QgKndzMSwgY29uc3Qgd2NoYXJfdCAqd3MyLCBzaXplX3QgbikKK3sKKyAgICByZXR1cm4gIG1lbWNtcCggKGNvbnN0IGNoYXIqKXdzMSwgKGNvbnN0IGNoYXIqKXdzMiwgbiApOworfQorCit3Y2hhcl90ICp3bWVtY3B5KHdjaGFyX3QgKndzMSwgY29uc3Qgd2NoYXJfdCAqd3MyLCBzaXplX3QgbikKK3sKKyAgICByZXR1cm4gKHdjaGFyX3QqKSBtZW1jcHkoIChjaGFyKil3czEsIChjb25zdCBjaGFyKil3czIsIG4gKTsKK30KKword2NoYXJfdCAqd21lbW1vdmUod2NoYXJfdCAqd3MxLCBjb25zdCB3Y2hhcl90ICp3czIsIHNpemVfdCBuKQoreworICAgIHJldHVybiAod2NoYXJfdCopbWVtbW92ZSggKGNoYXIqKXdzMSwgKGNvbnN0IGNoYXIqKXdzMiwgbiApOworfQorCit3Y2hhcl90ICp3bWVtc2V0KHdjaGFyX3QgKndzLCB3Y2hhcl90IHdjLCBzaXplX3QgbikKK3sKKyAgICByZXR1cm4gKHdjaGFyX3QqKSBtZW1zZXQoIChjaGFyKil3cywgKGludCl3YywgbiApOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdHJpbmcvYmNvcHkuYyBiL2xpYmMvc3RyaW5nL2Jjb3B5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDMwOGM2NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RyaW5nL2Jjb3B5LmMKQEAgLTAsMCArMSwxMjggQEAKKy8qCSRPcGVuQlNEOiBiY29weS5jLHYgMS41IDIwMDUvMDgvMDggMDg6MDU6MzcgZXNwaWUgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKy8qCisgKiBzaXplb2Yod29yZCkgTVVTVCBCRSBBIFBPV0VSIE9GIFRXTworICogU08gVEhBVCB3bWFzayBCRUxPVyBJUyBBTEwgT05FUworICovCit0eXBlZGVmCWxvbmcgd29yZDsJCS8qICJ3b3JkIiB1c2VkIGZvciBvcHRpbWFsIGNvcHkgc3BlZWQgKi8KKworI2RlZmluZQl3c2l6ZQlzaXplb2Yod29yZCkKKyNkZWZpbmUJd21hc2sJKHdzaXplIC0gMSkKKworLyoKKyAqIENvcHkgYSBibG9jayBvZiBtZW1vcnksIGhhbmRsaW5nIG92ZXJsYXAuCisgKiBUaGlzIGlzIHRoZSByb3V0aW5lIHRoYXQgYWN0dWFsbHkgaW1wbGVtZW50cworICogKHRoZSBwb3J0YWJsZSB2ZXJzaW9ucyBvZikgYmNvcHksIG1lbWNweSwgYW5kIG1lbW1vdmUuCisgKi8KKyNpZmRlZiBNRU1DT1BZCit2b2lkICoKK21lbWNweSh2b2lkICpkc3QwLCBjb25zdCB2b2lkICpzcmMwLCBzaXplX3QgbGVuZ3RoKQorI2Vsc2UKKyNpZmRlZiBNRU1NT1ZFCit2b2lkICoKK21lbW1vdmUodm9pZCAqZHN0MCwgY29uc3Qgdm9pZCAqc3JjMCwgc2l6ZV90IGxlbmd0aCkKKyNlbHNlCit2b2lkCitiY29weShjb25zdCB2b2lkICpzcmMwLCB2b2lkICpkc3QwLCBzaXplX3QgbGVuZ3RoKQorI2VuZGlmCisjZW5kaWYKK3sKKwljaGFyICpkc3QgPSBkc3QwOworCWNvbnN0IGNoYXIgKnNyYyA9IHNyYzA7CisJc2l6ZV90IHQ7CisKKwlpZiAobGVuZ3RoID09IDAgfHwgZHN0ID09IHNyYykJCS8qIG5vdGhpbmcgdG8gZG8gKi8KKwkJZ290byBkb25lOworCisJLyoKKwkgKiBNYWNyb3M6IGxvb3AtdC10aW1lczsgYW5kIGxvb3AtdC10aW1lcywgdD4wCisJICovCisjZGVmaW5lCVRMT09QKHMpIGlmICh0KSBUTE9PUDEocykKKyNkZWZpbmUJVExPT1AxKHMpIGRvIHsgczsgfSB3aGlsZSAoLS10KQorCisJaWYgKCh1bnNpZ25lZCBsb25nKWRzdCA8ICh1bnNpZ25lZCBsb25nKXNyYykgeworCQkvKgorCQkgKiBDb3B5IGZvcndhcmQuCisJCSAqLworCQl0ID0gKGxvbmcpc3JjOwkvKiBvbmx5IG5lZWQgbG93IGJpdHMgKi8KKwkJaWYgKCh0IHwgKGxvbmcpZHN0KSAmIHdtYXNrKSB7CisJCQkvKgorCQkJICogVHJ5IHRvIGFsaWduIG9wZXJhbmRzLiAgVGhpcyBjYW5ub3QgYmUgZG9uZQorCQkJICogdW5sZXNzIHRoZSBsb3cgYml0cyBtYXRjaC4KKwkJCSAqLworCQkJaWYgKCh0IF4gKGxvbmcpZHN0KSAmIHdtYXNrIHx8IGxlbmd0aCA8IHdzaXplKQorCQkJCXQgPSBsZW5ndGg7CisJCQllbHNlCisJCQkJdCA9IHdzaXplIC0gKHQgJiB3bWFzayk7CisJCQlsZW5ndGggLT0gdDsKKwkJCVRMT09QMSgqZHN0KysgPSAqc3JjKyspOworCQl9CisJCS8qCisJCSAqIENvcHkgd2hvbGUgd29yZHMsIHRoZW4gbW9wIHVwIGFueSB0cmFpbGluZyBieXRlcy4KKwkJICovCisJCXQgPSBsZW5ndGggLyB3c2l6ZTsKKwkJVExPT1AoKih3b3JkICopZHN0ID0gKih3b3JkICopc3JjOyBzcmMgKz0gd3NpemU7IGRzdCArPSB3c2l6ZSk7CisJCXQgPSBsZW5ndGggJiB3bWFzazsKKwkJVExPT1AoKmRzdCsrID0gKnNyYysrKTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBDb3B5IGJhY2t3YXJkcy4gIE90aGVyd2lzZSBlc3NlbnRpYWxseSB0aGUgc2FtZS4KKwkJICogQWxpZ25tZW50IHdvcmtzIGFzIGJlZm9yZSwgZXhjZXB0IHRoYXQgaXQgdGFrZXMKKwkJICogKHQmd21hc2spIGJ5dGVzIHRvIGFsaWduLCBub3Qgd3NpemUtKHQmd21hc2spLgorCQkgKi8KKwkJc3JjICs9IGxlbmd0aDsKKwkJZHN0ICs9IGxlbmd0aDsKKwkJdCA9IChsb25nKXNyYzsKKwkJaWYgKCh0IHwgKGxvbmcpZHN0KSAmIHdtYXNrKSB7CisJCQlpZiAoKHQgXiAobG9uZylkc3QpICYgd21hc2sgfHwgbGVuZ3RoIDw9IHdzaXplKQorCQkJCXQgPSBsZW5ndGg7CisJCQllbHNlCisJCQkJdCAmPSB3bWFzazsKKwkJCWxlbmd0aCAtPSB0OworCQkJVExPT1AxKCotLWRzdCA9ICotLXNyYyk7CisJCX0KKwkJdCA9IGxlbmd0aCAvIHdzaXplOworCQlUTE9PUChzcmMgLT0gd3NpemU7IGRzdCAtPSB3c2l6ZTsgKih3b3JkICopZHN0ID0gKih3b3JkICopc3JjKTsKKwkJdCA9IGxlbmd0aCAmIHdtYXNrOworCQlUTE9PUCgqLS1kc3QgPSAqLS1zcmMpOworCX0KK2RvbmU6CisjaWYgZGVmaW5lZChNRU1DT1BZKSB8fCBkZWZpbmVkKE1FTU1PVkUpCisJcmV0dXJuIChkc3QwKTsKKyNlbHNlCisJcmV0dXJuOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9saWJjL3N0cmluZy9pbmRleC5jIGIvbGliYy9zdHJpbmcvaW5kZXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjA0OTJmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdHJpbmcvaW5kZXguYwpAQCAtMCwwICsxLDQzIEBACisvKgkkT3BlbkJTRDogaW5kZXguYyx2IDEuNSAyMDA1LzA4LzA4IDA4OjA1OjM3IGVzcGllIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorCitjaGFyICoKK2luZGV4KGNvbnN0IGNoYXIgKnAsIGludCBjaCkKK3sKKwlmb3IgKDs7ICsrcCkgeworCQlpZiAoKnAgPT0gY2gpCisJCQlyZXR1cm4oKGNoYXIgKilwKTsKKwkJaWYgKCEqcCkKKwkJCXJldHVybigoY2hhciAqKU5VTEwpOworCX0KKwkvKiBOT1RSRUFDSEVEICovCit9CmRpZmYgLS1naXQgYS9saWJjL3N0cmluZy9tZW1jY3B5LmMgYi9saWJjL3N0cmluZy9tZW1jY3B5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY4OWU4MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RyaW5nL21lbWNjcHkuYwpAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK3ZvaWQgKm1lbWNjcHkodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIGludCBjLCBzaXplX3QgbikKK3sKKyAgICBjaGFyKiAgICAgICAgcSAgICAgPSBkc3Q7CisgICAgY29uc3QgY2hhciogIHAgICAgID0gc3JjOworICAgIGNvbnN0IGNoYXIqICBwX2VuZCA9IHAgKyBuOworICAgIGNoYXIgICAgICAgICBjaCAgICA9IH4oY2hhciljOyAgLyogZW5zdXJlIGNoICE9IGMgKi8KKworICAgIGZvciAoOzspIHsKKyAgICAgICAgaWYgKGNoID09IGMgfHwgcCA+PSBwX2VuZCkgYnJlYWs7CisgICAgICAgICpxKysgPSBjaCA9ICpwKys7CisKKyAgICAgICAgaWYgKGNoID09IGMgfHwgcCA+PSBwX2VuZCkgYnJlYWs7CisgICAgICAgICpxKysgPSBjaCA9ICpwKys7CisKKyAgICAgICAgaWYgKGNoID09IGMgfHwgcCA+PSBwX2VuZCkgYnJlYWs7CisgICAgICAgICpxKysgPSBjaCA9ICpwKys7CisKKyAgICAgICAgaWYgKGNoID09IGMgfHwgcCA+PSBwX2VuZCkgYnJlYWs7CisgICAgICAgICpxKysgPSBjaCA9ICpwKys7CisgICAgfQorCisgICAgaWYgKHAgPj0gcF9lbmQpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcmV0dXJuIHE7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0cmluZy9tZW1jaHIuYyBiL2xpYmMvc3RyaW5nL21lbWNoci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxNDE2N2EKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0cmluZy9tZW1jaHIuYwpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK3ZvaWQgKm1lbWNocihjb25zdCB2b2lkICpzLCBpbnQgYywgc2l6ZV90IG4pCit7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciogIHAgICA9IHM7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciogIGVuZCA9IHAgKyBuOworCisgICAgZm9yICg7OykgeworICAgICAgICBpZiAocCA+PSBlbmQgfHwgcFswXSA9PSBjKSBicmVhazsgcCsrOworICAgICAgICBpZiAocCA+PSBlbmQgfHwgcFswXSA9PSBjKSBicmVhazsgcCsrOworICAgICAgICBpZiAocCA+PSBlbmQgfHwgcFswXSA9PSBjKSBicmVhazsgcCsrOworICAgICAgICBpZiAocCA+PSBlbmQgfHwgcFswXSA9PSBjKSBicmVhazsgcCsrOworICAgIH0KKyAgICBpZiAocCA+PSBlbmQpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuICh2b2lkKikgcDsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RyaW5nL21lbWNtcC5jIGIvbGliYy9zdHJpbmcvbWVtY21wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY0MDk1NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RyaW5nL21lbWNtcC5jCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworaW50IG1lbWNtcChjb25zdCB2b2lkICpzMSwgY29uc3Qgdm9pZCAqczIsIHNpemVfdCBuKQoreworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqICBwMSAgID0gczE7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciogIGVuZDEgPSBwMSArIG47CisgICAgY29uc3QgdW5zaWduZWQgY2hhciogIHAyICAgPSBzMjsKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgZCA9IDA7CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGlmIChkIHx8IHAxID49IGVuZDEpIGJyZWFrOworICAgICAgICBkID0gKGludCkqcDErKyAtIChpbnQpKnAyKys7CisKKyAgICAgICAgaWYgKGQgfHwgcDEgPj0gZW5kMSkgYnJlYWs7CisgICAgICAgIGQgPSAoaW50KSpwMSsrIC0gKGludCkqcDIrKzsKKworICAgICAgICBpZiAoZCB8fCBwMSA+PSBlbmQxKSBicmVhazsKKyAgICAgICAgZCA9IChpbnQpKnAxKysgLSAoaW50KSpwMisrOworCisgICAgICAgIGlmIChkIHx8IHAxID49IGVuZDEpIGJyZWFrOworICAgICAgICBkID0gKGludCkqcDErKyAtIChpbnQpKnAyKys7CisgICAgfQorICAgIHJldHVybiBkOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdHJpbmcvbWVtY3B5LmMgYi9saWJjL3N0cmluZy9tZW1jcHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2Q0YTgwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdHJpbmcvbWVtY3B5LmMKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2RlZmluZSBNRU1fQ09QWQorI2luY2x1ZGUgImJjb3B5LmMiCmRpZmYgLS1naXQgYS9saWJjL3N0cmluZy9tZW1tZW0uYyBiL2xpYmMvc3RyaW5nL21lbW1lbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3MjUwMWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0cmluZy9tZW1tZW0uYwpAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisvKgorICogVGhpcyB1c2VzIHRoZSAiTm90IFNvIE5haXZlIiBhbGdvcml0aG0sIGEgdmVyeSBzaW1wbGUgYnV0CisgKiB1c3VhbGx5IGVmZmVjdGl2ZSBhbGdvcml0aG0sIHNlZToKKyAqIGh0dHA6Ly93d3ctaWdtLnVuaXYtbWx2LmZyL35sZWNyb3Evc3RyaW5nLworICovCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK3ZvaWQgKm1lbW1lbShjb25zdCB2b2lkICpoYXlzdGFjaywgc2l6ZV90IG4sIGNvbnN0IHZvaWQgKm5lZWRsZSwgc2l6ZV90IG0pCit7CisgICAgaWYgKG0gPiBuIHx8ICFtIHx8ICFuKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0KChtID4gMSksIDEpKSB7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqICB5ID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIqKSBoYXlzdGFjazsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogIHggPSAoY29uc3QgdW5zaWduZWQgY2hhciopIG5lZWRsZTsKKyAgICAgICAgc2l6ZV90ICAgICAgICAgICAgICAgIGogPSAwOworICAgICAgICBzaXplX3QgICAgICAgICAgICAgICAgayA9IDEsIGwgPSAyOworCisgICAgICAgIGlmICh4WzBdID09IHhbMV0pIHsKKyAgICAgICAgICAgIGsgPSAyOworICAgICAgICAgICAgbCA9IDE7CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKGogPD0gbi1tKSB7CisgICAgICAgICAgICBpZiAoeFsxXSAhPSB5W2orMV0pIHsKKyAgICAgICAgICAgICAgICBqICs9IGs7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmICghbWVtY21wKHgrMiwgeStqKzIsIG0tMikgJiYgeFswXSA9PSB5W2pdKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHZvaWQqKSAmeVtqXTsKKyAgICAgICAgICAgICAgICBqICs9IGw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAvKiBkZWdlbmVyYXRlIGNhc2UgKi8KKyAgICAgICAgcmV0dXJuIG1lbWNocihoYXlzdGFjaywgKCh1bnNpZ25lZCBjaGFyKiluZWVkbGUpWzBdLCBuKTsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0cmluZy9tZW1tb3ZlLmMgYi9saWJjL3N0cmluZy9tZW1tb3ZlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNhZjRlZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RyaW5nL21lbW1vdmUuYwpAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK3ZvaWQgKm1lbW1vdmUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBuKQoreworICBjb25zdCBjaGFyICpwID0gc3JjOworICBjaGFyICpxID0gZHN0OworICBpZiAoX19idWlsdGluX2V4cGVjdChxIDwgcCwgMSkpIHsKKyAgICByZXR1cm4gbWVtY3B5KGRzdCwgc3JjLCBuKTsKKyAgfSBlbHNlIHsKKyNkZWZpbmUgUFJFTE9BRF9ESVNUQU5DRSA2NAorICAgICAgLyogYSBzZW1pLW9wdGltaXplZCBtZW1tb3ZlKCkuIHdlJ3JlIHByZWxvYWRpbmcgdGhlIHNyYyBhbmQgZHN0IGJ1ZmZlcnMKKyAgICAgICAqIGFzIHdlIGdvICovCisgICAgc2l6ZV90IGMwLCBjMSwgaTsKKyAgICBwICs9IG47CisgICAgcSArPSBuOworICAgIC8qIG5vdGU6IHdlIHByZWxvYWQgdGhlIGRlc3RpbmF0aW9uIGFzIHdlbGwsIGJlY2F1c2UgdGhlIDEtYnl0ZSBhdCBhIHRpbWUKKyAgICAgKiBjb3B5IGJlbG93IGRvZXNuJ3QgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIHdyaXRlLWJ1ZmZlciwgd2UgbmVlZAorICAgICAqIHRvIHVzZSB0aGUgY2FjaGUgaW5zdGVhZCBhcyBhIHBvb3IgbWFuJ3Mgd3JpdGUtY29tYmluZXIgKi8KKyAgICBfX2J1aWx0aW5fcHJlZmV0Y2gocC0xKTsKKyAgICBfX2J1aWx0aW5fcHJlZmV0Y2gocS0xKTsKKyAgICBpZiAoUFJFTE9BRF9ESVNUQU5DRSA+IDMyKSB7CisgICAgICAgIF9fYnVpbHRpbl9wcmVmZXRjaChwLSgzMisxKSk7CisgICAgICAgIF9fYnVpbHRpbl9wcmVmZXRjaChxLSgzMisxKSk7CisgICAgfQorICAgIC8qIGRvIHRoZSBwcmVmZXRlY2ggYXMgc29vbiBhcyBwb3NzaWJsZSwgcHJldmVudCB0aGUgY29tcGlsZXIgdG8KKyAgICAgKiByZW9yZGVyIHRoZSBpbnN0cnVjdGlvbnMgYWJvdmUgdGhlIHByZWZldGNoICovCisgICAgYXNtIHZvbGF0aWxlKCIiOjo6Im1lbW9yeSIpOworICAgIGMwID0gbiAmIDB4MUY7IC8qIGNhY2hlLWxpbmUgaXMgMzIgYnl0ZXMgKi8KKyAgICBjMSA9IG4gPj4gNTsKKyAgICB3aGlsZSAoIGMxLS0gKSB7CisgICAgICAgIC8qIEFSTXY2IGNhbiBoYXZlIHVwIHRvIDMgbWVtb3J5IGFjY2VzcyBvdXRzdGFuZGluZyAqLworICAgICAgX19idWlsdGluX3ByZWZldGNoKHAgLSAoUFJFTE9BRF9ESVNUQU5DRSsxKSk7CisgICAgICBfX2J1aWx0aW5fcHJlZmV0Y2gocSAtIChQUkVMT0FEX0RJU1RBTkNFKzEpKTsKKyAgICAgIGFzbSB2b2xhdGlsZSgiIjo6OiJtZW1vcnkiKTsKKyAgICAgIGZvciAoaT0wIDsgaTwzMiA7IGkrKykgeworICAgICAgICAqLS1xID0gKi0tcDsKKyAgICAgIH0KKyAgICB9CisgICAgd2hpbGUgKCBjMC0tICkgeworICAgICAgKi0tcSA9ICotLXA7CisgICAgfQorICB9CisKKyAgcmV0dXJuIGRzdDsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RyaW5nL21lbXJjaHIuYyBiL2xpYmMvc3RyaW5nL21lbXJjaHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTMzZmVmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdHJpbmcvbWVtcmNoci5jCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKwordm9pZCAqbWVtcmNocihjb25zdCB2b2lkICpzLCBpbnQgYywgc2l6ZV90IG4pCit7CisgICAgaWYgKG4gPiAwKSB7CisgICAgICAgIGNvbnN0IGNoYXIqICBwID0gKGNvbnN0IGNoYXIqKSBzOworICAgICAgICBjb25zdCBjaGFyKiAgcSA9IHAgKyBuOworCisgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICBxLS07IGlmIChxIDwgcCB8fCBxWzBdID09IGMpIGJyZWFrOworICAgICAgICAgICAgcS0tOyBpZiAocSA8IHAgfHwgcVswXSA9PSBjKSBicmVhazsKKyAgICAgICAgICAgIHEtLTsgaWYgKHEgPCBwIHx8IHFbMF0gPT0gYykgYnJlYWs7CisgICAgICAgICAgICBxLS07IGlmIChxIDwgcCB8fCBxWzBdID09IGMpIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChxID49IHApCisgICAgICAgICAgICByZXR1cm4gKHZvaWQqKXE7CisgICAgfQorICAgIHJldHVybiBOVUxMOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdHJpbmcvbWVtc2V0LmMgYi9saWJjL3N0cmluZy9tZW1zZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDljZGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdHJpbmcvbWVtc2V0LmMKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCit2b2lkKiAgbWVtc2V0KHZvaWQqICBkc3QsIGludCBjLCBzaXplX3QgbikKK3sKKyAgICBjaGFyKiAgcSAgID0gZHN0OworICAgIGNoYXIqICBlbmQgPSBxICsgbjsKKworICAgIGZvciAoOzspIHsKKyAgICAgICAgaWYgKHEgPCBlbmQpIGJyZWFrOyAqcSsrID0gKGNoYXIpIGM7CisgICAgICAgIGlmIChxIDwgZW5kKSBicmVhazsgKnErKyA9IChjaGFyKSBjOworICAgICAgICBpZiAocSA8IGVuZCkgYnJlYWs7ICpxKysgPSAoY2hhcikgYzsKKyAgICAgICAgaWYgKHEgPCBlbmQpIGJyZWFrOyAqcSsrID0gKGNoYXIpIGM7CisgICAgfQorCisgIHJldHVybiBkc3Q7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0cmluZy9tZW1zd2FwLmMgYi9saWJjL3N0cmluZy9tZW1zd2FwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzViMGIzMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RyaW5nL21lbXN3YXAuYwpAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK3ZvaWQgbWVtc3dhcCh2b2lkICptMSwgdm9pZCAqbTIsIHNpemVfdCBuKQoreworICAgIGNoYXIqICBwICAgICA9IG0xOworICAgIGNoYXIqICBwX2VuZCA9IHAgKyBuOworICAgIGNoYXIqICBxICAgICA9IG0yOworCisgICAgd2hpbGUgKHAgPCBwX2VuZCkgeworICAgICAgICBjaGFyICB0bXAgPSAqcDsKKyAgICAgICAgKnAgPSAqcTsKKyAgICAgICAgKnEgPSB0bXA7CisgICAgICAgIHArKzsKKyAgICAgICAgcSsrOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RyaW5nL3N0cmNhc2VjbXAuYyBiL2xpYmMvc3RyaW5nL3N0cmNhc2VjbXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmYzYTA5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdHJpbmcvc3RyY2FzZWNtcC5jCkBAIC0wLDAgKzEsMTA1IEBACisvKgkkT3BlbkJTRDogc3RyY2FzZWNtcC5jLHYgMS42IDIwMDUvMDgvMDggMDg6MDU6MzcgZXNwaWUgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk4NywgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVfY2hhcjsKKworLyoKKyAqIFRoaXMgYXJyYXkgaXMgZGVzaWduZWQgZm9yIG1hcHBpbmcgdXBwZXIgYW5kIGxvd2VyIGNhc2UgbGV0dGVyCisgKiB0b2dldGhlciBmb3IgYSBjYXNlIGluZGVwZW5kZW50IGNvbXBhcmlzb24uICBUaGUgbWFwcGluZ3MgYXJlCisgKiBiYXNlZCB1cG9uIGFzY2lpIGNoYXJhY3RlciBzZXF1ZW5jZXMuCisgKi8KK3N0YXRpYyBjb25zdCB1X2NoYXIgY2hhcm1hcFtdID0geworCSdcMDAwJywgJ1wwMDEnLCAnXDAwMicsICdcMDAzJywgJ1wwMDQnLCAnXDAwNScsICdcMDA2JywgJ1wwMDcnLAorCSdcMDEwJywgJ1wwMTEnLCAnXDAxMicsICdcMDEzJywgJ1wwMTQnLCAnXDAxNScsICdcMDE2JywgJ1wwMTcnLAorCSdcMDIwJywgJ1wwMjEnLCAnXDAyMicsICdcMDIzJywgJ1wwMjQnLCAnXDAyNScsICdcMDI2JywgJ1wwMjcnLAorCSdcMDMwJywgJ1wwMzEnLCAnXDAzMicsICdcMDMzJywgJ1wwMzQnLCAnXDAzNScsICdcMDM2JywgJ1wwMzcnLAorCSdcMDQwJywgJ1wwNDEnLCAnXDA0MicsICdcMDQzJywgJ1wwNDQnLCAnXDA0NScsICdcMDQ2JywgJ1wwNDcnLAorCSdcMDUwJywgJ1wwNTEnLCAnXDA1MicsICdcMDUzJywgJ1wwNTQnLCAnXDA1NScsICdcMDU2JywgJ1wwNTcnLAorCSdcMDYwJywgJ1wwNjEnLCAnXDA2MicsICdcMDYzJywgJ1wwNjQnLCAnXDA2NScsICdcMDY2JywgJ1wwNjcnLAorCSdcMDcwJywgJ1wwNzEnLCAnXDA3MicsICdcMDczJywgJ1wwNzQnLCAnXDA3NScsICdcMDc2JywgJ1wwNzcnLAorCSdcMTAwJywgJ1wxNDEnLCAnXDE0MicsICdcMTQzJywgJ1wxNDQnLCAnXDE0NScsICdcMTQ2JywgJ1wxNDcnLAorCSdcMTUwJywgJ1wxNTEnLCAnXDE1MicsICdcMTUzJywgJ1wxNTQnLCAnXDE1NScsICdcMTU2JywgJ1wxNTcnLAorCSdcMTYwJywgJ1wxNjEnLCAnXDE2MicsICdcMTYzJywgJ1wxNjQnLCAnXDE2NScsICdcMTY2JywgJ1wxNjcnLAorCSdcMTcwJywgJ1wxNzEnLCAnXDE3MicsICdcMTMzJywgJ1wxMzQnLCAnXDEzNScsICdcMTM2JywgJ1wxMzcnLAorCSdcMTQwJywgJ1wxNDEnLCAnXDE0MicsICdcMTQzJywgJ1wxNDQnLCAnXDE0NScsICdcMTQ2JywgJ1wxNDcnLAorCSdcMTUwJywgJ1wxNTEnLCAnXDE1MicsICdcMTUzJywgJ1wxNTQnLCAnXDE1NScsICdcMTU2JywgJ1wxNTcnLAorCSdcMTYwJywgJ1wxNjEnLCAnXDE2MicsICdcMTYzJywgJ1wxNjQnLCAnXDE2NScsICdcMTY2JywgJ1wxNjcnLAorCSdcMTcwJywgJ1wxNzEnLCAnXDE3MicsICdcMTczJywgJ1wxNzQnLCAnXDE3NScsICdcMTc2JywgJ1wxNzcnLAorCSdcMjAwJywgJ1wyMDEnLCAnXDIwMicsICdcMjAzJywgJ1wyMDQnLCAnXDIwNScsICdcMjA2JywgJ1wyMDcnLAorCSdcMjEwJywgJ1wyMTEnLCAnXDIxMicsICdcMjEzJywgJ1wyMTQnLCAnXDIxNScsICdcMjE2JywgJ1wyMTcnLAorCSdcMjIwJywgJ1wyMjEnLCAnXDIyMicsICdcMjIzJywgJ1wyMjQnLCAnXDIyNScsICdcMjI2JywgJ1wyMjcnLAorCSdcMjMwJywgJ1wyMzEnLCAnXDIzMicsICdcMjMzJywgJ1wyMzQnLCAnXDIzNScsICdcMjM2JywgJ1wyMzcnLAorCSdcMjQwJywgJ1wyNDEnLCAnXDI0MicsICdcMjQzJywgJ1wyNDQnLCAnXDI0NScsICdcMjQ2JywgJ1wyNDcnLAorCSdcMjUwJywgJ1wyNTEnLCAnXDI1MicsICdcMjUzJywgJ1wyNTQnLCAnXDI1NScsICdcMjU2JywgJ1wyNTcnLAorCSdcMjYwJywgJ1wyNjEnLCAnXDI2MicsICdcMjYzJywgJ1wyNjQnLCAnXDI2NScsICdcMjY2JywgJ1wyNjcnLAorCSdcMjcwJywgJ1wyNzEnLCAnXDI3MicsICdcMjczJywgJ1wyNzQnLCAnXDI3NScsICdcMjc2JywgJ1wyNzcnLAorCSdcMzAwJywgJ1wzMDEnLCAnXDMwMicsICdcMzAzJywgJ1wzMDQnLCAnXDMwNScsICdcMzA2JywgJ1wzMDcnLAorCSdcMzEwJywgJ1wzMTEnLCAnXDMxMicsICdcMzEzJywgJ1wzMTQnLCAnXDMxNScsICdcMzE2JywgJ1wzMTcnLAorCSdcMzIwJywgJ1wzMjEnLCAnXDMyMicsICdcMzIzJywgJ1wzMjQnLCAnXDMyNScsICdcMzI2JywgJ1wzMjcnLAorCSdcMzMwJywgJ1wzMzEnLCAnXDMzMicsICdcMzMzJywgJ1wzMzQnLCAnXDMzNScsICdcMzM2JywgJ1wzMzcnLAorCSdcMzQwJywgJ1wzNDEnLCAnXDM0MicsICdcMzQzJywgJ1wzNDQnLCAnXDM0NScsICdcMzQ2JywgJ1wzNDcnLAorCSdcMzUwJywgJ1wzNTEnLCAnXDM1MicsICdcMzUzJywgJ1wzNTQnLCAnXDM1NScsICdcMzU2JywgJ1wzNTcnLAorCSdcMzYwJywgJ1wzNjEnLCAnXDM2MicsICdcMzYzJywgJ1wzNjQnLCAnXDM2NScsICdcMzY2JywgJ1wzNjcnLAorCSdcMzcwJywgJ1wzNzEnLCAnXDM3MicsICdcMzczJywgJ1wzNzQnLCAnXDM3NScsICdcMzc2JywgJ1wzNzcnLAorfTsKKworaW50CitzdHJjYXNlY21wKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMikKK3sKKwljb25zdCB1X2NoYXIgKmNtID0gY2hhcm1hcDsKKwljb25zdCB1X2NoYXIgKnVzMSA9IChjb25zdCB1X2NoYXIgKilzMTsKKwljb25zdCB1X2NoYXIgKnVzMiA9IChjb25zdCB1X2NoYXIgKilzMjsKKworCXdoaWxlIChjbVsqdXMxXSA9PSBjbVsqdXMyKytdKQorCQlpZiAoKnVzMSsrID09ICdcMCcpCisJCQlyZXR1cm4gKDApOworCXJldHVybiAoY21bKnVzMV0gLSBjbVsqLS11czJdKTsKK30KKworaW50CitzdHJuY2FzZWNtcChjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIsIHNpemVfdCBuKQoreworCWlmIChuICE9IDApIHsKKwkJY29uc3QgdV9jaGFyICpjbSA9IGNoYXJtYXA7CisJCWNvbnN0IHVfY2hhciAqdXMxID0gKGNvbnN0IHVfY2hhciAqKXMxOworCQljb25zdCB1X2NoYXIgKnVzMiA9IChjb25zdCB1X2NoYXIgKilzMjsKKworCQlkbyB7CisJCQlpZiAoY21bKnVzMV0gIT0gY21bKnVzMisrXSkKKwkJCQlyZXR1cm4gKGNtWyp1czFdIC0gY21bKi0tdXMyXSk7CisJCQlpZiAoKnVzMSsrID09ICdcMCcpCisgICAgICBicmVhazsKKwkJfSB3aGlsZSAoLS1uICE9IDApOworICB9CisJcmV0dXJuICgwKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RyaW5nL3N0cmNhc2VzdHIuYyBiL2xpYmMvc3RyaW5nL3N0cmNhc2VzdHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTc0YzAxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdHJpbmcvc3RyY2FzZXN0ci5jCkBAIC0wLDAgKzEsNjAgQEAKKy8qCSRPcGVuQlNEOiBzdHJjYXNlc3RyLmMsdiAxLjMgMjAwNi8wMy8zMSAwNTozNDo1NSBkZXJhYWR0IEV4cCAkCSovCisvKgkkTmV0QlNEOiBzdHJjYXNlc3RyLmMsdiAxLjIgMjAwNS8wMi8wOSAyMTozNTo0NyBrbGVpbmsgRXhwICQJKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworLyoKKyAqIEZpbmQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgZmluZCBpbiBzLCBpZ25vcmUgY2FzZS4KKyAqLworY2hhciAqCitzdHJjYXNlc3RyKGNvbnN0IGNoYXIgKnMsIGNvbnN0IGNoYXIgKmZpbmQpCit7CisJY2hhciBjLCBzYzsKKwlzaXplX3QgbGVuOworCisJaWYgKChjID0gKmZpbmQrKykgIT0gMCkgeworCQljID0gKGNoYXIpdG9sb3dlcigodW5zaWduZWQgY2hhciljKTsKKwkJbGVuID0gc3RybGVuKGZpbmQpOworCQlkbyB7CisJCQlkbyB7CisJCQkJaWYgKChzYyA9ICpzKyspID09IDApCisJCQkJCXJldHVybiAoTlVMTCk7CisJCQl9IHdoaWxlICgoY2hhcil0b2xvd2VyKCh1bnNpZ25lZCBjaGFyKXNjKSAhPSBjKTsKKwkJfSB3aGlsZSAoc3RybmNhc2VjbXAocywgZmluZCwgbGVuKSAhPSAwKTsKKwkJcy0tOworCX0KKwlyZXR1cm4gKChjaGFyICopcyk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0cmluZy9zdHJjYXQuYyBiL2xpYmMvc3RyaW5nL3N0cmNhdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjZWE1MjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0cmluZy9zdHJjYXQuYwpAQCAtMCwwICsxLDUxIEBACisvKgkkT3BlbkJTRDogc3RyY2F0LmMsdiAxLjggMjAwNS8wOC8wOCAwODowNTozNyBlc3BpZSBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTg4IFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiAhZGVmaW5lZChfS0VSTkVMKSAmJiAhZGVmaW5lZChfU1RBTkRBTE9ORSkKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbHNlCisjaW5jbHVkZSA8bGliL2xpYmtlcm4vbGlia2Vybi5oPgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEFQSVdBUk4pCitfX3dhcm5fcmVmZXJlbmNlcyhzdHJjYXQsCisgICAgIndhcm5pbmc6IHN0cmNhdCgpIGlzIGFsbW9zdCBhbHdheXMgbWlzdXNlZCwgcGxlYXNlIHVzZSBzdHJsY2F0KCkiKTsKKyNlbmRpZgorCitjaGFyICoKK3N0cmNhdChjaGFyICpzLCBjb25zdCBjaGFyICphcHBlbmQpCit7CisJY2hhciAqc2F2ZSA9IHM7CisKKwlmb3IgKDsgKnM7ICsrcyk7CisJd2hpbGUgKCgqcysrID0gKmFwcGVuZCsrKSAhPSAnXDAnKTsKKwlyZXR1cm4oc2F2ZSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0cmluZy9zdHJjaHIuYyBiL2xpYmMvc3RyaW5nL3N0cmNoci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzMzY5NGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0cmluZy9zdHJjaHIuYwpAQCAtMCwwICsxLDQzIEBACisvKgkkT3BlbkJTRDogaW5kZXguYyx2IDEuNSAyMDA1LzA4LzA4IDA4OjA1OjM3IGVzcGllIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorCitjaGFyICoKK3N0cmNocihjb25zdCBjaGFyICpwLCBpbnQgY2gpCit7CisJZm9yICg7OyArK3ApIHsKKwkJaWYgKCpwID09IGNoKQorCQkJcmV0dXJuKChjaGFyICopcCk7CisJCWlmICghKnApCisJCQlyZXR1cm4oKGNoYXIgKilOVUxMKTsKKyAgfQorCS8qIE5PVFJFQUNIRUQgKi8KK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RyaW5nL3N0cmNtcC5jIGIvbGliYy9zdHJpbmcvc3RyY21wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE2ZmQxMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RyaW5nL3N0cmNtcC5jCkBAIC0wLDAgKzEsNTEgQEAKKy8qCSRPcGVuQlNEOiBzdHJjbXAuYyx2IDEuNyAyMDA1LzA4LzA4IDA4OjA1OjM3IGVzcGllIEV4cCAkCSovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgIWRlZmluZWQoX0tFUk5FTCkgJiYgIWRlZmluZWQoX1NUQU5EQUxPTkUpCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZWxzZQorI2luY2x1ZGUgPGxpYi9saWJrZXJuL2xpYmtlcm4uaD4KKyNlbmRpZgorCisvKgorICogQ29tcGFyZSBzdHJpbmdzLgorICovCitpbnQKK3N0cmNtcChjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIpCit7CisJd2hpbGUgKCpzMSA9PSAqczIrKykKKwkJaWYgKCpzMSsrID09IDApCisJCQlyZXR1cm4gKDApOworCXJldHVybiAoKih1bnNpZ25lZCBjaGFyICopczEgLSAqKHVuc2lnbmVkIGNoYXIgKiktLXMyKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RyaW5nL3N0cmNvbGwuYyBiL2xpYmMvc3RyaW5nL3N0cmNvbGwuYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zNjVjYWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdHJpbmcvc3RyY29sbC5jCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworLyoKKyAqIENvbXBhcmUgc3RyaW5ncyB1c2luZyB0aGUgY3VycmVudCBsb2NhbGUuICBTaW5jZSBCaW9uaWMgcmVhbGx5IGRvZXMgbm90CisgKiBzdXBwb3J0IGxvY2FsZXMsIHdlIGFzc3VtZSB3ZSBhbHdheXMgdXNlIHRoZSBDIGxvY2FsZSBhbmQgY2FsbCBzdHJjbXAuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBwcm92aWRlZCB0byBtYWtlIGxpYnN0ZGMrKy12MyB1c2FibGUuCisgKi8KK2ludAorc3RyY29sbChjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIpCit7CisJcmV0dXJuIHN0cmNtcCAoczEsIHMyKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RyaW5nL3N0cmNweS5jIGIvbGliYy9zdHJpbmcvc3RyY3B5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIyMWQ2NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RyaW5nL3N0cmNweS5jCkBAIC0wLDAgKzEsNDEgQEAKKy8qCSRPcGVuQlNEOiBzdHJjcHkuYyx2IDEuOCAyMDA1LzA4LzA4IDA4OjA1OjM3IGVzcGllIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODggUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorCitjaGFyICoKK3N0cmNweShjaGFyICp0bywgY29uc3QgY2hhciAqZnJvbSkKK3sKKwljaGFyICpzYXZlID0gdG87CisKKwlmb3IgKDsgKCp0byA9ICpmcm9tKSAhPSAnXDAnOyArK2Zyb20sICsrdG8pOworCXJldHVybihzYXZlKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RyaW5nL3N0cmNzcG4uYyBiL2xpYmMvc3RyaW5nL3N0cmNzcG4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWIyMzM2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdHJpbmcvc3RyY3Nwbi5jCkBAIC0wLDAgKzEsNTggQEAKKy8qCSRPcGVuQlNEOiBzdHJjc3BuLmMsdiAxLjUgMjAwNS8wOC8wOCAwODowNTozNyBlc3BpZSBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworLyoKKyAqIFNwYW4gdGhlIGNvbXBsZW1lbnQgb2Ygc3RyaW5nIHMyLgorICovCitzaXplX3QKK3N0cmNzcG4oY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyKQoreworCWNvbnN0IGNoYXIgKnAsICpzcGFucDsKKwljaGFyIGMsIHNjOworCisJLyoKKwkgKiBTdG9wIGFzIHNvb24gYXMgd2UgZmluZCBhbnkgY2hhcmFjdGVyIGZyb20gczIuICBOb3RlIHRoYXQgdGhlcmUKKwkgKiBtdXN0IGJlIGEgTlVMIGluIHMyOyBpdCBzdWZmaWNlcyB0byBzdG9wIHdoZW4gd2UgZmluZCB0aGF0LCB0b28uCisJICovCisJZm9yIChwID0gczE7OykgeworCQljID0gKnArKzsKKwkJc3BhbnAgPSBzMjsKKwkJZG8geworCQkJaWYgKChzYyA9ICpzcGFucCsrKSA9PSBjKQorCQkJCXJldHVybiAocCAtIDEgLSBzMSk7CisJCX0gd2hpbGUgKHNjICE9IDApOworCX0KKwkvKiBOT1RSRUFDSEVEICovCit9CmRpZmYgLS1naXQgYS9saWJjL3N0cmluZy9zdHJkdXAuYyBiL2xpYmMvc3RyaW5nL3N0cmR1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2YWExZTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0cmluZy9zdHJkdXAuYwpAQCAtMCwwICsxLDQ5IEBACisvKgkkT3BlbkJTRDogc3RyZHVwLmMsdiAxLjYgMjAwNS8wOC8wOCAwODowNTozNyBlc3BpZSBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTg4LCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK2NoYXIgKgorc3RyZHVwKGNvbnN0IGNoYXIgKnN0cikKK3sKKwlzaXplX3Qgc2l6OworCWNoYXIgKmNvcHk7CisKKwlzaXogPSBzdHJsZW4oc3RyKSArIDE7CisJaWYgKChjb3B5ID0gbWFsbG9jKHNpeikpID09IE5VTEwpCisJCXJldHVybihOVUxMKTsKKwkodm9pZCltZW1jcHkoY29weSwgc3RyLCBzaXopOworCXJldHVybihjb3B5KTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RyaW5nL3N0cmVycm9yLmMgYi9saWJjL3N0cmluZy9zdHJlcnJvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyYWUwMDEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0cmluZy9zdHJlcnJvci5jCkBAIC0wLDAgKzEsNDEgQEAKKy8qCSRPcGVuQlNEOiBzdHJlcnJvci5jLHYgMS43IDIwMDUvMDgvMDggMDg6MDU6MzcgZXNwaWUgRXhwICQgKi8KKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODggUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorCitjaGFyICoKK3N0cmVycm9yKGludCBudW0pCit7CisJc3RhdGljIGNoYXIgYnVmWzI1Nl07CisKKwkodm9pZClzdHJlcnJvcl9yKG51bSwgYnVmLCBzaXplb2YoYnVmKSk7CisJcmV0dXJuIChidWYpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdHJpbmcvc3RyZXJyb3Jfci5jIGIvbGliYy9zdHJpbmcvc3RyZXJyb3Jfci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0M2Q0MTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0cmluZy9zdHJlcnJvcl9yLmMKQEAgLTAsMCArMSwxNjMgQEAKKy8qICRPcGVuQlNEOiBzdHJlcnJvcl9yLmMsdiAxLjYgMjAwNS8wOC8wOCAwODowNTozNyBlc3BpZSBFeHAgJCAqLworLyogUHVibGljIERvbWFpbiA8bWFyY0BzbmFmdS5vcmc+ICovCisKKyNkZWZpbmUgc3lzX3NpZ2xpc3QJX3N5c19zaWdsaXN0CisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCit0eXBlZGVmIHN0cnVjdCB7CisgIGludCAgICAgICAgICAgY29kZTsKKyAgY29uc3QgY2hhciogICBtc2c7Cit9IENvZGVTdHJpbmc7CisKK3N0YXRpYyBjb25zdCBjaGFyKgorX19jb2RlX3N0cmluZ19sb29rdXAoIGNvbnN0IENvZGVTdHJpbmcqICBzdHJpbmdzLAorICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICAgICBjb2RlICkKK3sKKyAgICBpbnQgIG5uID0gMDsKKworICAgIGZvciAoOzspCisgICAgeworICAgICAgICBpZiAoc3RyaW5nc1tubl0uY29kZSA9PSAwKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgaWYgKHN0cmluZ3Nbbm5dLmNvZGUgPT0gY29kZSkKKyAgICAgICAgICAgIHJldHVybiBzdHJpbmdzW25uXS5tc2c7CisKKyAgICAgICAgbm4rKzsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CisKKworc3RhdGljIGNvbnN0IENvZGVTdHJpbmcgIF9zeXNfZXJyb3Jfc3RyaW5nc1tdID0KK3sKKyNkZWZpbmUgIF9fQklPTklDX0VSUkRFRih4LHkseikgIHsgeSwgeiB9LAorI2luY2x1ZGUgPHN5cy9fZXJyZGVmcy5oPgorICAgIHsgMCwgTlVMTCB9Cit9OworCitzdGF0aWMgc2l6ZV90CitfX2RpZ2l0czEwKHVuc2lnbmVkIGludCBudW0pCit7CisJc2l6ZV90IGkgPSAwOworCisJZG8geworCQludW0gLz0gMTA7CisJCWkrKzsKKwl9IHdoaWxlIChudW0gIT0gMCk7CisKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIGludAorX19pdG9hKGludCBudW0sIGludCBzaWduLCBjaGFyICpidWZmZXIsIHNpemVfdCBzdGFydCwgc2l6ZV90IGVuZCkKK3sKKwlzaXplX3QgcG9zOworCXVuc2lnbmVkIGludCBhOworCWludCBuZWc7CisKKwlpZiAoc2lnbiAmJiBudW0gPCAwKSB7CisJCWEgPSAtbnVtOworCQluZWcgPSAxOworCX0KKwllbHNlIHsKKwkJYSA9IG51bTsKKwkJbmVnID0gMDsKKwl9CisKKwlwb3MgPSBzdGFydCArIF9fZGlnaXRzMTAoYSk7CisJaWYgKG5lZykKKwkgICAgcG9zKys7CisKKwlpZiAocG9zIDwgZW5kKQorCQlidWZmZXJbcG9zXSA9ICdcMCc7CisJZWxzZQorCQlyZXR1cm4gRVJBTkdFOworCXBvcy0tOworCWRvIHsKKwkJYnVmZmVyW3Bvc10gPSAoYSAlIDEwKSArICcwJzsKKwkJcG9zLS07CisJCWEgLz0gMTA7CisJfSB3aGlsZSAoYSAhPSAwKTsKKwlpZiAobmVnKQorCQlidWZmZXJbcG9zXSA9ICctJzsKKwlyZXR1cm4gMDsKK30KKworCitpbnQKK3N0cmVycm9yX3IoaW50IGVycm51bSwgY2hhciAqc3RyZXJyYnVmLCBzaXplX3QgYnVmbGVuKQoreworICAgIGludCAgICAgICAgICBzYXZlX2Vycm5vOworICAgIGludCAgICAgICAgICBsZW4sIHJldCA9IDA7CisgICAgY29uc3QgY2hhciogIG1zZzsKKworICAgIHNhdmVfZXJybm8gPSBlcnJubzsKKyAgICBtc2cgICAgICAgID0gX19jb2RlX3N0cmluZ19sb29rdXAoIF9zeXNfZXJyb3Jfc3RyaW5ncywgZXJybnVtICk7CisgICAgaWYgKG1zZyAhPSBOVUxMKSB7CisgICAgICAgIGxlbiA9IHN0cmxjcHkoc3RyZXJyYnVmLCBtc2csIGJ1Zmxlbik7CisgICAgICAgIGlmICgoc2l6ZV90KWxlbiA+PSBidWZsZW4pCisgICAgICAgICAgICByZXQgPSBFUkFOR0U7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGVuID0gc3RybGNweShzdHJlcnJidWYsICJVbmtub3duIGVycm9yOiAiLCBidWZsZW4pOworICAgICAgICBpZiAoKHNpemVfdClsZW4gPj0gYnVmbGVuKQorICAgICAgICAgICAgcmV0ID0gRVJBTkdFOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGludCAgcmV0ID0gX19pdG9hKGVycm51bSwgMSwgc3RyZXJyYnVmLCBsZW4sIGJ1Zmxlbik7CisKKyAgICAgICAgICAgIGlmIChyZXQgPT0gMCkKKyAgICAgICAgICAgICAgICByZXQgPSBFSU5WQUw7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJldDsKK30KKworI2lmIDAKK3N0YXRpYyBjb25zdCBDb2RlU3RyaW5nICBfc3lzX3NpZ25hbF9zdHJpbmdzW10gPQoreworI2RlZmluZSAgU0lHREVGKHgseSx6KSAgeyB5LCB6IH0sCisjaW5jbHVkZSA8c3lzL19zaWdkZWZzLmg+Cit9OworCisKK3N0YXRpYyBpbnQKK19fbnVtMnN0cmluZyhpbnQgbnVtLCBpbnQgc2lnbiwgaW50IHNldGlkLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4sCisgICAgY2hhciAqIGxpc3RbXSwgc2l6ZV90IG1heCwgY29uc3QgY2hhciAqZGVmKQoreworCWludCByZXQgPSAwOworCXNpemVfdCBsZW47CisKKwlpZiAoMCA8PSBudW0gJiYgbnVtIDwgbWF4KSB7CisJCWxlbiA9IHN0cmxjcHkoYnVmLCBkZWYsIGJ1Zmxlbik7CisJCWlmIChsZW4gPj0gYnVmbGVuKQorCQkJcmV0ID0gRVJBTkdFOworCX0gZWxzZSB7CisJCWxlbiA9IHN0cmxjcHkoYnVmLCBkZWYsIGJ1Zmxlbik7CisJCWlmIChsZW4gPj0gYnVmbGVuKQorCQkJcmV0ID0gRVJBTkdFOworCQllbHNlIHsKKwkJCXJldCA9IF9faXRvYShudW0sIHNpZ24sIGJ1ZiwgbGVuLCBidWZsZW4pOworCQkJaWYgKHJldCA9PSAwKQorCQkJCXJldCA9IEVJTlZBTDsKKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisKKworCisjZGVmaW5lIFVTSUdQUkVGSVggIlVua25vd24gc2lnbmFsOiAiCisKK2NoYXIgKgorX19zdHJzaWduYWwoaW50IG51bSwgY2hhciAqYnVmKQoreworCV9fbnVtMnN0cmluZyhudW0sIDAsIDIsIGJ1ZiwgTkxfVEVYVE1BWCwgKGNoYXIgKiopc3lzX3NpZ2xpc3QsIE5TSUcsCisJICAgIFVTSUdQUkVGSVgpOworCXJldHVybiBidWY7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvc3RyaW5nL3N0cmxjYXQuYyBiL2xpYmMvc3RyaW5nL3N0cmxjYXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDIyMTViCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdHJpbmcvc3RybGNhdC5jCkBAIC0wLDAgKzEsNTUgQEAKKy8qCSRPcGVuQlNEOiBzdHJsY2F0LmMsdiAxLjEzIDIwMDUvMDgvMDggMDg6MDU6MzcgZXNwaWUgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk5OCBUb2RkIEMuIE1pbGxlciA8VG9kZC5NaWxsZXJAY291cnRlc2FuLmNvbT4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKy8qCisgKiBBcHBlbmRzIHNyYyB0byBzdHJpbmcgZHN0IG9mIHNpemUgc2l6ICh1bmxpa2Ugc3RybmNhdCwgc2l6IGlzIHRoZQorICogZnVsbCBzaXplIG9mIGRzdCwgbm90IHNwYWNlIGxlZnQpLiAgQXQgbW9zdCBzaXotMSBjaGFyYWN0ZXJzCisgKiB3aWxsIGJlIGNvcGllZC4gIEFsd2F5cyBOVUwgdGVybWluYXRlcyAodW5sZXNzIHNpeiA8PSBzdHJsZW4oZHN0KSkuCisgKiBSZXR1cm5zIHN0cmxlbihzcmMpICsgTUlOKHNpeiwgc3RybGVuKGluaXRpYWwgZHN0KSkuCisgKiBJZiByZXR2YWwgPj0gc2l6LCB0cnVuY2F0aW9uIG9jY3VycmVkLgorICovCitzaXplX3QKK3N0cmxjYXQoY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBzaXopCit7CisJY2hhciAqZCA9IGRzdDsKKwljb25zdCBjaGFyICpzID0gc3JjOworCXNpemVfdCBuID0gc2l6OworCXNpemVfdCBkbGVuOworCisJLyogRmluZCB0aGUgZW5kIG9mIGRzdCBhbmQgYWRqdXN0IGJ5dGVzIGxlZnQgYnV0IGRvbid0IGdvIHBhc3QgZW5kICovCisJd2hpbGUgKG4tLSAhPSAwICYmICpkICE9ICdcMCcpCisJCWQrKzsKKwlkbGVuID0gZCAtIGRzdDsKKwluID0gc2l6IC0gZGxlbjsKKworCWlmIChuID09IDApCisJCXJldHVybihkbGVuICsgc3RybGVuKHMpKTsKKwl3aGlsZSAoKnMgIT0gJ1wwJykgeworCQlpZiAobiAhPSAxKSB7CisJCQkqZCsrID0gKnM7CisJCQluLS07CisgIH0KKwkJcysrOworICB9CisJKmQgPSAnXDAnOworCisJcmV0dXJuKGRsZW4gKyAocyAtIHNyYykpOwkvKiBjb3VudCBkb2VzIG5vdCBpbmNsdWRlIE5VTCAqLworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdHJpbmcvc3RybGNweS5jIGIvbGliYy9zdHJpbmcvc3RybGNweS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4Mjc3ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0cmluZy9zdHJsY3B5LmMKQEAgLTAsMCArMSw1MSBAQAorLyoJJE9wZW5CU0Q6IHN0cmxjcHkuYyx2IDEuMTEgMjAwNi8wNS8wNSAxNToyNzozOCBtaWxsZXJ0IEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTggVG9kZCBDLiBNaWxsZXIgPFRvZGQuTWlsbGVyQGNvdXJ0ZXNhbi5jb20+CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisvKgorICogQ29weSBzcmMgdG8gc3RyaW5nIGRzdCBvZiBzaXplIHNpei4gIEF0IG1vc3Qgc2l6LTEgY2hhcmFjdGVycworICogd2lsbCBiZSBjb3BpZWQuICBBbHdheXMgTlVMIHRlcm1pbmF0ZXMgKHVubGVzcyBzaXogPT0gMCkuCisgKiBSZXR1cm5zIHN0cmxlbihzcmMpOyBpZiByZXR2YWwgPj0gc2l6LCB0cnVuY2F0aW9uIG9jY3VycmVkLgorICovCitzaXplX3QKK3N0cmxjcHkoY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBzaXopCit7CisJY2hhciAqZCA9IGRzdDsKKwljb25zdCBjaGFyICpzID0gc3JjOworCXNpemVfdCBuID0gc2l6OworCisJLyogQ29weSBhcyBtYW55IGJ5dGVzIGFzIHdpbGwgZml0ICovCisJaWYgKG4gIT0gMCkgeworCQl3aGlsZSAoLS1uICE9IDApIHsKKwkJCWlmICgoKmQrKyA9ICpzKyspID09ICdcMCcpCisJCQkJYnJlYWs7CisJCX0KKyAgfQorCisJLyogTm90IGVub3VnaCByb29tIGluIGRzdCwgYWRkIE5VTCBhbmQgdHJhdmVyc2UgcmVzdCBvZiBzcmMgKi8KKwlpZiAobiA9PSAwKSB7CisJCWlmIChzaXogIT0gMCkKKwkJCSpkID0gJ1wwJzsJCS8qIE5VTC10ZXJtaW5hdGUgZHN0ICovCisJCXdoaWxlICgqcysrKQorCQkJOworCX0KKworCXJldHVybihzIC0gc3JjIC0gMSk7CS8qIGNvdW50IGRvZXMgbm90IGluY2x1ZGUgTlVMICovCit9CmRpZmYgLS1naXQgYS9saWJjL3N0cmluZy9zdHJsZW4uYyBiL2xpYmMvc3RyaW5nL3N0cmxlbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyZDllYzQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0cmluZy9zdHJsZW4uYwpAQCAtMCwwICsxLDQ3IEBACisvKgkkT3BlbkJTRDogc3RybGVuLmMsdiAxLjcgMjAwNS8wOC8wOCAwODowNTozNyBlc3BpZSBFeHAgJAkqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiAhZGVmaW5lZChfS0VSTkVMKSAmJiAhZGVmaW5lZChfU1RBTkRBTE9ORSkKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbHNlCisjaW5jbHVkZSA8bGliL2xpYmtlcm4vbGlia2Vybi5oPgorI2VuZGlmCisKK3NpemVfdAorc3RybGVuKGNvbnN0IGNoYXIgKnN0cikKK3sKKwljb25zdCBjaGFyICpzOworCisJZm9yIChzID0gc3RyOyAqczsgKytzKQorCQk7CisJcmV0dXJuIChzIC0gc3RyKTsKK30KKwpkaWZmIC0tZ2l0IGEvbGliYy9zdHJpbmcvc3RybmNhdC5jIGIvbGliYy9zdHJpbmcvc3RybmNhdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjYjk0MDUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0cmluZy9zdHJuY2F0LmMKQEAgLTAsMCArMSw1NyBAQAorLyoJJE9wZW5CU0Q6IHN0cm5jYXQuYyx2IDEuNSAyMDA1LzA4LzA4IDA4OjA1OjM3IGVzcGllIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisvKgorICogQ29uY2F0ZW5hdGUgc3JjIG9uIHRoZSBlbmQgb2YgZHN0LiAgQXQgbW9zdCBzdHJsZW4oZHN0KStuKzEgYnl0ZXMKKyAqIGFyZSB3cml0dGVuIGF0IGRzdCAoYXQgbW9zdCBuKzEgYnl0ZXMgYmVpbmcgYXBwZW5kZWQpLiAgUmV0dXJuIGRzdC4KKyAqLworY2hhciAqCitzdHJuY2F0KGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3QgbikKK3sKKwlpZiAobiAhPSAwKSB7CisJCWNoYXIgKmQgPSBkc3Q7CisJCWNvbnN0IGNoYXIgKnMgPSBzcmM7CisKKwkJd2hpbGUgKCpkICE9IDApCisJCQlkKys7CisJCWRvIHsKKwkJCWlmICgoKmQgPSAqcysrKSA9PSAwKQorCQkJCWJyZWFrOworCQkJZCsrOworCQl9IHdoaWxlICgtLW4gIT0gMCk7CisJCSpkID0gMDsKKyAgfQorCXJldHVybiAoZHN0KTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RyaW5nL3N0cm5jbXAuYyBiL2xpYmMvc3RyaW5nL3N0cm5jbXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGE0MWFiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdHJpbmcvc3RybmNtcC5jCkBAIC0wLDAgKzEsNTEgQEAKKy8qCSRPcGVuQlNEOiBzdHJuY21wLmMsdiAxLjcgMjAwNS8wOC8wOCAwODowNTozNyBlc3BpZSBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTg5IFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgIWRlZmluZWQoX0tFUk5FTCkgJiYgIWRlZmluZWQoX1NUQU5EQUxPTkUpCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZWxzZQorI2luY2x1ZGUgPGxpYi9saWJrZXJuL2xpYmtlcm4uaD4KKyNlbmRpZgorCitpbnQKK3N0cm5jbXAoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyLCBzaXplX3QgbikKK3sKKworCWlmIChuID09IDApCisJCXJldHVybiAoMCk7CisJZG8geworCQlpZiAoKnMxICE9ICpzMisrKQorCQkJcmV0dXJuICgqKHVuc2lnbmVkIGNoYXIgKilzMSAtICoodW5zaWduZWQgY2hhciAqKS0tczIpOworCQlpZiAoKnMxKysgPT0gMCkKKyAgICAgIGJyZWFrOworCX0gd2hpbGUgKC0tbiAhPSAwKTsKKwlyZXR1cm4gKDApOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdHJpbmcvc3RybmNweS5jIGIvbGliYy9zdHJpbmcvc3RybmNweS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5MTA5MWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0cmluZy9zdHJuY3B5LmMKQEAgLTAsMCArMSw2MiBAQAorLyoJJE9wZW5CU0Q6IHN0cm5jcHkuYyx2IDEuNiAyMDA1LzA4LzA4IDA4OjA1OjM3IGVzcGllIEV4cCAkCSovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgIWRlZmluZWQoX0tFUk5FTCkgJiYgIWRlZmluZWQoX1NUQU5EQUxPTkUpCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZWxzZQorI2luY2x1ZGUgPGxpYi9saWJrZXJuL2xpYmtlcm4uaD4KKyNlbmRpZgorCisvKgorICogQ29weSBzcmMgdG8gZHN0LCB0cnVuY2F0aW5nIG9yIG51bGwtcGFkZGluZyB0byBhbHdheXMgY29weSBuIGJ5dGVzLgorICogUmV0dXJuIGRzdC4KKyAqLworY2hhciAqCitzdHJuY3B5KGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3QgbikKK3sKKwlpZiAobiAhPSAwKSB7CisJCWNoYXIgKmQgPSBkc3Q7CisJCWNvbnN0IGNoYXIgKnMgPSBzcmM7CisKKwkJZG8geworCQkJaWYgKCgqZCsrID0gKnMrKykgPT0gMCkgeworCQkJCS8qIE5VTCBwYWQgdGhlIHJlbWFpbmluZyBuLTEgYnl0ZXMgKi8KKwkJCQl3aGlsZSAoLS1uICE9IDApCisJCQkJCSpkKysgPSAwOworICAgICAgYnJlYWs7CisgIH0KKwkJfSB3aGlsZSAoLS1uICE9IDApOworCX0KKwlyZXR1cm4gKGRzdCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0cmluZy9zdHJuZHVwLmMgYi9saWJjL3N0cmluZy9zdHJuZHVwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE5YTU1ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RyaW5nL3N0cm5kdXAuYwpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKK2NoYXIqICBzdHJuZHVwKGNvbnN0IGNoYXIqICBzLCBzaXplX3QgbikKK3sKKyAgICBzaXplX3QgIHNsZW4gPSAoc2l6ZV90KXN0cmxlbihzKTsKKyAgICBpbnQgICAgIGxlbiAgPSBzbGVuIDwgbiA/IHNsZW4gOiBuOworICAgIGNoYXIqICAgY29weSA9IG1hbGxvYyhsZW4rMSk7CisKKyAgICBpZiAoY29weSkgeworICAgICAgICBtZW1jcHkoIGNvcHksIHMsIGxlbiApOworICAgICAgICBjb3B5W2xlbl0gPSAwOworICAgIH0KKyAgICByZXR1cm4gY29weTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RyaW5nL3N0cm5sZW4uYyBiL2xpYmMvc3RyaW5nL3N0cm5sZW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzZmNjBhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdHJpbmcvc3Rybmxlbi5jCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworc2l6ZV90ICBzdHJubGVuKGNvbnN0IGNoYXIqICBzdHIsIHNpemVfdCAgbWF4bGVuKQoreworICAgIGNoYXIqICBwID0gbWVtY2hyKHN0ciwgMCwgbWF4bGVuKTsKKworICAgIGlmIChwID09IE5VTEwpCisgICAgICAgIHJldHVybiBtYXhsZW47CisgICAgZWxzZQorICAgICAgICByZXR1cm4gKHAgLSBzdHIpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdHJpbmcvc3RycGJyay5jIGIvbGliYy9zdHJpbmcvc3RycGJyay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiYTM3OTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0cmluZy9zdHJwYnJrLmMKQEAgLTAsMCArMSw0OCBAQAorLyoJJE9wZW5CU0Q6IHN0cnBicmsuYyx2IDEuNSAyMDA1LzA4LzA4IDA4OjA1OjM3IGVzcGllIEV4cCAkICovCisvKgorICogQ29weXJpZ2h0IChjKSAxOTg1IFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworLyoKKyAqIEZpbmQgdGhlIGZpcnN0IG9jY3VycmVuY2UgaW4gczEgb2YgYSBjaGFyYWN0ZXIgaW4gczIgKGV4Y2x1ZGluZyBOVUwpLgorICovCitjaGFyICoKK3N0cnBicmsoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyKQoreworCWNvbnN0IGNoYXIgKnNjYW5wOworCWludCBjLCBzYzsKKyAgCisJd2hpbGUgKChjID0gKnMxKyspICE9IDApIHsKKwkJZm9yIChzY2FucCA9IHMyOyAoc2MgPSAqc2NhbnArKykgIT0gMDspCisJCQlpZiAoc2MgPT0gYykKKwkJCQlyZXR1cm4gKChjaGFyICopKHMxIC0gMSkpOworCX0KKwlyZXR1cm4gKE5VTEwpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdHJpbmcvc3RycmNoci5jIGIvbGliYy9zdHJpbmcvc3RycmNoci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4MDA3ODEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0cmluZy9zdHJyY2hyLmMKQEAgLTAsMCArMSw0NSBAQAorLyoJJE9wZW5CU0Q6IHJpbmRleC5jLHYgMS42IDIwMDUvMDgvMDggMDg6MDU6MzcgZXNwaWUgRXhwICQgKi8KKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODggUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorCitjaGFyICoKK3N0cnJjaHIoY29uc3QgY2hhciAqcCwgaW50IGNoKQoreworCWNoYXIgKnNhdmU7CisgIAorCWZvciAoc2F2ZSA9IE5VTEw7OyArK3ApIHsKKwkJaWYgKCpwID09IGNoKQorCQkJc2F2ZSA9IChjaGFyICopcDsKKwkJaWYgKCEqcCkKKwkJCXJldHVybihzYXZlKTsKKyAgfQorCS8qIE5PVFJFQUNIRUQgKi8KK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RyaW5nL3N0cnNlcC5jIGIvbGliYy9zdHJpbmcvc3Ryc2VwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNjYTY4MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RyaW5nL3N0cnNlcC5jCkBAIC0wLDAgKzEsNzEgQEAKKy8qCSRPcGVuQlNEOiBzdHJzZXAuYyx2IDEuNiAyMDA1LzA4LzA4IDA4OjA1OjM3IGVzcGllIEV4cCAkCSovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKy8qCisgKiBHZXQgbmV4dCB0b2tlbiBmcm9tIHN0cmluZyAqc3RyaW5ncCwgd2hlcmUgdG9rZW5zIGFyZSBwb3NzaWJseS1lbXB0eQorICogc3RyaW5ncyBzZXBhcmF0ZWQgYnkgY2hhcmFjdGVycyBmcm9tIGRlbGltLiAgCisgKgorICogV3JpdGVzIE5VTHMgaW50byB0aGUgc3RyaW5nIGF0ICpzdHJpbmdwIHRvIGVuZCB0b2tlbnMuCisgKiBkZWxpbSBuZWVkIG5vdCByZW1haW4gY29uc3RhbnQgZnJvbSBjYWxsIHRvIGNhbGwuCisgKiBPbiByZXR1cm4sICpzdHJpbmdwIHBvaW50cyBwYXN0IHRoZSBsYXN0IE5VTCB3cml0dGVuIChpZiB0aGVyZSBtaWdodAorICogYmUgZnVydGhlciB0b2tlbnMpLCBvciBpcyBOVUxMIChpZiB0aGVyZSBhcmUgZGVmaW5pdGVseSBubyBtb3JlIHRva2VucykuCisgKgorICogSWYgKnN0cmluZ3AgaXMgTlVMTCwgc3Ryc2VwIHJldHVybnMgTlVMTC4KKyAqLworY2hhciAqCitzdHJzZXAoY2hhciAqKnN0cmluZ3AsIGNvbnN0IGNoYXIgKmRlbGltKQoreworCWNoYXIgKnM7CisJY29uc3QgY2hhciAqc3BhbnA7CisJaW50IGMsIHNjOworCWNoYXIgKnRvazsKKworCWlmICgocyA9ICpzdHJpbmdwKSA9PSBOVUxMKQorCQlyZXR1cm4gKE5VTEwpOworCWZvciAodG9rID0gczs7KSB7CisJCWMgPSAqcysrOworCQlzcGFucCA9IGRlbGltOworCQlkbyB7CisJCQlpZiAoKHNjID0gKnNwYW5wKyspID09IGMpIHsKKwkJCQlpZiAoYyA9PSAwKQorCQkJCQlzID0gTlVMTDsKKwkJCQllbHNlCisJCQkJCXNbLTFdID0gMDsKKwkJCQkqc3RyaW5ncCA9IHM7CisJCQkJcmV0dXJuICh0b2spOworCQkJfQorCQl9IHdoaWxlIChzYyAhPSAwKTsKKwl9CisJLyogTk9UUkVBQ0hFRCAqLworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdHJpbmcvc3Ryc3BuLmMgYi9saWJjL3N0cmluZy9zdHJzcG4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODU2NDljCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdHJpbmcvc3Ryc3BuLmMKQEAgLTAsMCArMSw1MSBAQAorLyoJJE9wZW5CU0Q6IHN0cnNwbi5jLHYgMS41IDIwMDUvMDgvMDggMDg6MDU6MzcgZXNwaWUgRXhwICQgKi8KKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODkgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworLyoKKyAqIFNwYW4gdGhlIHN0cmluZyBzMiAoc2tpcCBjaGFyYWN0ZXJzIHRoYXQgYXJlIGluIHMyKS4KKyAqLworc2l6ZV90CitzdHJzcG4oY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyKQoreworCWNvbnN0IGNoYXIgKnAgPSBzMSwgKnNwYW5wOworCWNoYXIgYywgc2M7CisKKwkvKgorCSAqIFNraXAgYW55IGNoYXJhY3RlcnMgaW4gczIsIGV4Y2x1ZGluZyB0aGUgdGVybWluYXRpbmcgXDAuCisJICovCitjb250OgorCWMgPSAqcCsrOworCWZvciAoc3BhbnAgPSBzMjsgKHNjID0gKnNwYW5wKyspICE9IDA7KQorCQlpZiAoc2MgPT0gYykKKwkJCWdvdG8gY29udDsKKwlyZXR1cm4gKHAgLSAxIC0gczEpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdHJpbmcvc3Ryc3RyLmMgYi9saWJjL3N0cmluZy9zdHJzdHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWJlOTZjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdHJpbmcvc3Ryc3RyLmMKQEAgLTAsMCArMSw1NiBAQAorLyoJJE9wZW5CU0Q6IHN0cnN0ci5jLHYgMS41IDIwMDUvMDgvMDggMDg6MDU6MzcgZXNwaWUgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKy8qCisgKiBGaW5kIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGZpbmQgaW4gcy4KKyAqLworY2hhciAqCitzdHJzdHIoY29uc3QgY2hhciAqcywgY29uc3QgY2hhciAqZmluZCkKK3sKKwljaGFyIGMsIHNjOworCXNpemVfdCBsZW47CisKKwlpZiAoKGMgPSAqZmluZCsrKSAhPSAwKSB7CisJCWxlbiA9IHN0cmxlbihmaW5kKTsKKwkJZG8geworCQkJZG8geworCQkJCWlmICgoc2MgPSAqcysrKSA9PSAwKQorCQkJCQlyZXR1cm4gKE5VTEwpOworCQkJfSB3aGlsZSAoc2MgIT0gYyk7CisJCX0gd2hpbGUgKHN0cm5jbXAocywgZmluZCwgbGVuKSAhPSAwKTsKKwkJcy0tOworICAgIH0KKwlyZXR1cm4gKChjaGFyICopcyk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0cmluZy9zdHJ0b2suYyBiL2xpYmMvc3RyaW5nL3N0cnRvay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlOTYzYTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0cmluZy9zdHJ0b2suYwpAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAxOTg4IFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworY2hhciAqCitzdHJ0b2soY2hhciAqcywgY29uc3QgY2hhciAqZGVsaW0pCit7CisJc3RhdGljIGNoYXIgKmxhc3Q7CisKKwlyZXR1cm4gc3RydG9rX3IocywgZGVsaW0sICZsYXN0KTsKK30KKworY2hhciAqCitzdHJ0b2tfcihjaGFyICpzLCBjb25zdCBjaGFyICpkZWxpbSwgY2hhciAqKmxhc3QpCit7CisJY2hhciAqc3BhbnA7CisJaW50IGMsIHNjOworCWNoYXIgKnRvazsKKworCisJaWYgKHMgPT0gTlVMTCAmJiAocyA9ICpsYXN0KSA9PSBOVUxMKQorCQlyZXR1cm4gKE5VTEwpOworCisJLyoKKwkgKiBTa2lwIChzcGFuKSBsZWFkaW5nIGRlbGltaXRlcnMgKHMgKz0gc3Ryc3BuKHMsIGRlbGltKSwgc29ydCBvZikuCisJICovCitjb250OgorCWMgPSAqcysrOworCWZvciAoc3BhbnAgPSAoY2hhciAqKWRlbGltOyAoc2MgPSAqc3BhbnArKykgIT0gMDspIHsKKwkJaWYgKGMgPT0gc2MpCisJCQlnb3RvIGNvbnQ7CisJfQorCisJaWYgKGMgPT0gMCkgewkJLyogbm8gbm9uLWRlbGltaXRlciBjaGFyYWN0ZXJzICovCisJCSpsYXN0ID0gTlVMTDsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJdG9rID0gcyAtIDE7CisKKwkvKgorCSAqIFNjYW4gdG9rZW4gKHNjYW4gZm9yIGRlbGltaXRlcnM6IHMgKz0gc3RyY3NwbihzLCBkZWxpbSksIHNvcnQgb2YpLgorCSAqIE5vdGUgdGhhdCBkZWxpbSBtdXN0IGhhdmUgb25lIE5VTDsgd2Ugc3RvcCBpZiB3ZSBzZWUgdGhhdCwgdG9vLgorCSAqLworCWZvciAoOzspIHsKKwkJYyA9ICpzKys7CisJCXNwYW5wID0gKGNoYXIgKilkZWxpbTsKKwkJZG8geworCQkJaWYgKChzYyA9ICpzcGFucCsrKSA9PSBjKSB7CisJCQkJaWYgKGMgPT0gMCkKKwkJCQkJcyA9IE5VTEw7CisJCQkJZWxzZQorCQkJCQlzWy0xXSA9IDA7CisJCQkJKmxhc3QgPSBzOworCQkJCXJldHVybiAodG9rKTsKKwkJCX0KKwkJfSB3aGlsZSAoc2MgIT0gMCk7CisJfQorCS8qIE5PVFJFQUNIRUQgKi8KK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RyaW5nL3N0cnRvdGltZXZhbC5jIGIvbGliYy9zdHJpbmcvc3RydG90aW1ldmFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMxMzJlYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RyaW5nL3N0cnRvdGltZXZhbC5jCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGludHR5cGVzLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKworY2hhciAqIHN0cnRvdGltZXZhbCAoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgdGltZXZhbCAqdHMpCit7CisgICAgaW50IG47CisgICAgY2hhciAqcywgKnMwOworICAgIGxvbmcgIGZzOwkvKiBGcmFjdGlvbmFsIHNlY29uZHMgKi8KKworICAgIHRzLT50dl9zZWMgPSBzdHJ0b3VtYXgoc3RyLCAmcywgMTApOworICAgIGZzID0gMDsKKworICAgIGlmICggKnMgPT0gJy4nICkgeworCWludCAgY291bnQ7CisKKyAgICAgICAgczAgPSBzKzE7CisKKwkvKiByZWFkIHVwIHRvIDYgZGlnaXRzICovCisJZnMgICAgPSAwOworCWNvdW50ID0gMDsKKwl3aGlsZSAoICpzICYmIGlzZGlnaXQoKnMpICkKKwl7CisgICAgICAgICAgICBpZiAoICsrY291bnQgPCA3ICkKKwkgICAgICAgIGZzID0gZnMqMTAgKyAoKnMgLSAnMCcpOworCSAgICBzKys7CisJfQorCisJZm9yICggOyBjb3VudCA8IDY7IGNvdW50KysgKQorCSAgICBmcyAqPSAxMDsKKyAgICB9CisKKyAgICB0cy0+dHZfdXNlYyA9IGZzOworICAgIHJldHVybiBzOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdHJpbmcvc3RyeGZybS5jIGIvbGliYy9zdHJpbmcvc3RyeGZybS5jCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmYxODQzYjUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0cmluZy9zdHJ4ZnJtLmMKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHN0cmluZy5oPgorCisvKgorICogVHJhbnNmb3JtIHN0cmluZyBzMiB0byBzdHJpbmcgczEgdXNpbmcgdGhlIGN1cnJlbnQgbG9jYWxlIHNvIHRoYXQKKyAqIHN0cmNtcCBvZiB0cmFuc2Zvcm1lZCBzdHJpbmdzIHlpZWxkcyB0aGUgc2FtZSByZXN1bHQgYXMgc3RyY29sbC4gCisgKiBTaW5jZSBCaW9uaWMgcmVhbGx5IGRvZXMgbm90IHN1cHBvcnQgbG9jYWxlcywgd2UgYXNzdW1lIHdlIGFsd2F5cyB1c2UKKyAqIHRoZSBDIGxvY2FsZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIHRvIG1ha2UgbGlic3RkYysrLXYzIHVzYWJsZS4KKyAqLworc2l6ZV90CitzdHJ4ZnJtKGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwgc2l6ZV90IG4pCit7CisJc2l6ZV90IGxlbiA9IHN0cmxlbihzMikgKyAxOworCisJaWYgKGxlbiA8IG4pCisJCW4gPSBsZW47CisJbWVtY3B5KHMxLCBzMiwgbik7CisJcmV0dXJuIGxlbjsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdG9vbHMvYmlvbmljX3V0aWxzLnB5IGIvbGliYy90b29scy9iaW9uaWNfdXRpbHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVmZjA0MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdG9vbHMvYmlvbmljX3V0aWxzLnB5CkBAIC0wLDAgKzEsMzA2IEBACisjIGNvbW1vbiBweXRob24gdXRpbGl0eSByb3V0aW5lcyBmb3IgdGhlIEJpb25pYyB0b29sIHNjcmlwdHMKKworaW1wb3J0IHN5cywgb3MsIGNvbW1hbmRzLCBzdHJpbmcKKworIyBzdXBwb3J0IEJpb25pYyBhcmNoaXRlY3R1cmVzLCBhZGQgbmV3IG9uZXMgYXMgYXBwcm9wcmlhdGUKKyMKK2Jpb25pY19hcmNocyA9IFsgImFybSIsICJ4ODYiIF0KKworIyBiYXNpYyBkZWJ1Z2dpbmcgdHJhY2Ugc3VwcG9ydAorIyBjYWxsIERfc2V0bGV2ZWwgdG8gc2V0IHRoZSB2ZXJib3NpdHkgbGV2ZWwKKyMgYW5kIEQoKSwgRDIoKSwgRDMoKSwgRDQoKSB0byBhZGQgdHJhY2VzCisjCit2ZXJib3NlID0gMQorCitkZWYgRChtc2cpOgorICAgIGdsb2JhbCB2ZXJib3NlCisgICAgaWYgdmVyYm9zZSA+IDA6CisgICAgICAgIHByaW50IG1zZworCitkZWYgRDIobXNnKToKKyAgICBnbG9iYWwgdmVyYm9zZQorICAgIGlmIHZlcmJvc2UgPj0gMjoKKyAgICAgICAgcHJpbnQgbXNnCisKK2RlZiBEMyhtc2cpOgorICAgIGdsb2JhbCB2ZXJib3NlCisgICAgaWYgdmVyYm9zZSA+PSAzOgorICAgICAgICBwcmludCBtc2cKKworZGVmIEQ0KG1zZyk6CisgICAgZ2xvYmFsIHZlcmJvc2UKKyAgICBpZiB2ZXJib3NlID49IDQ6CisgICAgICAgIHByaW50IG1zZworCitkZWYgRF9zZXRsZXZlbChsZXZlbCk6CisgICAgZ2xvYmFsIHZlcmJvc2UKKyAgICB2ZXJib3NlID0gbGV2ZWwKKworCitkZWYgZmluZF9kaXJfb2YocGF0aCk6CisgICAgJycncmV0dXJuIHRoZSBkaXJlY3RvcnkgbmFtZSBvZiAncGF0aCcsIG9yICIuIiBpZiB0aGVyZSBpcyBub25lJycnCisgICAgIyByZW1vdmUgdHJhaWxpbmcgc2xhc2gKKyAgICBpZiBsZW4ocGF0aCkgPiAxIGFuZCBwYXRoWy0xXSA9PSAnLyc6CisgICAgICAgIHBhdGggPSBwYXRoWzotMV0KKworICAgICMgZmluZCBwYXJlbnQgZGlyZWN0b3J5IG5hbWUKKyAgICBkID0gb3MucGF0aC5kaXJuYW1lKHBhdGgpCisgICAgaWYgZCA9PSAiIjoKKyAgICAgICAgcmV0dXJuICIuIgorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBkCisKKyMgIG90aGVyIHN0dWZmCisjCisjCitkZWYgZmluZF9maWxlX2Zyb21fdXB3YXJkcyhmcm9tX3BhdGgsdGFyZ2V0X2ZpbGUpOgorICAgICIiImZpbmQgYSBmaWxlIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBvciBpdHMgcGFyZW50cy4gaWYgJ2Zyb21fcGF0aCcgaXMgTm9uZSwKKyAgICAgICBzZWFjaCBmcm9tIHRoZSBjdXJyZW50IHByb2dyYW0ncyBkaXJlY3RvcnkiIiIKKyAgICBwYXRoID0gZnJvbV9wYXRoCisgICAgaWYgcGF0aCA9PSBOb25lOgorICAgICAgICBwYXRoID0gZmluZF9kaXJfb2Yoc3lzLmFyZ3ZbMF0pCisgICAgICAgIEQoInRoaXMgc2NyaXB0IHNlZW1zIHRvIGJlIGxvY2F0ZWQgaW46ICVzIiAlIHBhdGgpCisKKyAgICB3aGlsZSAxOgorICAgICAgICBpZiBwYXRoID09ICIiOgorICAgICAgICAgICAgcGF0aCA9ICIuIgorCisgICAgICAgIGZpbGUgPSBwYXRoICsgIi8iICsgdGFyZ2V0X2ZpbGUKKyAgICAgICAgRCgicHJvYmluZyAiK2ZpbGUpCisKKyAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoZmlsZSk6CisgICAgICAgICAgICBEKCJmb3VuZCAlcyBpbiAlcyIgJSAodGFyZ2V0X2ZpbGUsIHBhdGgpKQorICAgICAgICAgICAgcmV0dXJuIGZpbGUKKworICAgICAgICBpZiBwYXRoID09ICIuIjoKKyAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgcGF0aCA9IG9zLnBhdGguZGlybmFtZShwYXRoKQorCisgICAgcGF0aCA9ICIiCisgICAgd2hpbGUgMToKKyAgICAgICAgcGF0aCA9ICIuLi8iICsgcGF0aAorICAgICAgICBmaWxlID0gcGF0aCArIHRhcmdldF9maWxlCisgICAgICAgIEQoInByb2JpbmcgIitmaWxlKQorCisgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGZpbGUpOgorICAgICAgICAgICAgRCgiZm91bmQgJXMgaW4gJXMiICUgKHRhcmdldF9maWxlLCBwYXRoKSkKKyAgICAgICAgICAgIHJldHVybiBmaWxlCisKKworICAgIHJldHVybiBOb25lCisKK2RlZiBmaW5kX2Jpb25pY19yb290KCk6CisgICAgJycnZmluZCB0aGUgcm9vdCBvZiB0aGUgQmlvbmljIHNvdXJjZSB0cmVlLiB3ZSBjaGVjayBmb3IgdGhlIFNZU0NBTExTLlRYVCBmaWxlCisgICAgICAgZnJvbSB0aGUgbG9jYXRpb24gb2YgdGhlIGN1cnJlbnQgcHJvZ3JhbSdzIGRpcmVjdG9yeS4nJycKKworICAgICMgbm90ZSB0aGF0IHdlIGNhbid0IHVzZSBmaW5kX2ZpbGVfZnJvbV91cHdhcmRzKCkgc2luY2Ugd2UgY2FuJ3QgdXNlIG9zLnBhdGguYWJzcGF0aAorICAgICMgdGhhdCdzIGJlY2F1c2UgaW4gc29tZSBjYXNlcyB0aGUgcDQgY2xpZW50IGlzIGluIGEgc3ltbGlua2VkIGRpcmVjdG9yeSwgYW5kIHRoaXMKKyAgICAjIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRoZSByZWFsIHBhdGggaW5zdGVhZCwgd2hpY2ggbGF0ZXIgY3JlYXRlcyBwcm9ibGVtcyB3aGVuCisgICAgIyBwNCBjb21tYW5kcyBhcmUgaXNzdWVkCisgICAgIworICAgIGZpbGUgPSBmaW5kX2ZpbGVfZnJvbV91cHdhcmRzKE5vbmUsICJTWVNDQUxMUy5UWFQiKQorICAgIGlmIGZpbGU6CisgICAgICAgIHJldHVybiBvcy5wYXRoLmRpcm5hbWUoZmlsZSkKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gTm9uZQorCitkZWYgZmluZF9rZXJuZWxfaGVhZGVycygpOgorICAgICIiInRyeSB0byBmaW5kIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUga2VybmVsIGhlYWRlcnMgZm9yIHRoaXMgbWFjaGluZSIiIgorICAgIHN0YXR1cywgdmVyc2lvbiA9IGNvbW1hbmRzLmdldHN0YXR1c291dHB1dCggInVuYW1lIC1yIiApICAjIGdldCBMaW51eCBrZXJuZWwgdmVyc2lvbgorICAgIGlmIHN0YXR1cyAhPSAwOgorICAgICAgICBEKCJjb3VsZCBub3QgZXhlY3V0ZSAndW5hbWUgLXInIGNvbW1hbmQgcHJvcGVybHkiKQorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgIyBnZXQgcmlkIG9mIHRoZSAiLXhlblUiIHN1ZmZpeCB0aGF0IGlzIGZvdW5kIGluIFhlbiB2aXJ0dWFsIG1hY2hpbmVzCisgICAgaWYgbGVuKHZlcnNpb24pID4gNSBhbmQgdmVyc2lvblstNTpdID09ICIteGVuVSI6CisgICAgICAgIHZlcnNpb24gPSB2ZXJzaW9uWzotNV0KKworICAgIHBhdGggPSAiL3Vzci9zcmMvbGludXgtaGVhZGVycy0iICsgdmVyc2lvbgorICAgIEQoInByb2JpbmcgJXMgZm9yIGtlcm5lbCBoZWFkZXJzIiAlIChwYXRoKyIvaW5jbHVkZSIpKQorICAgIHJldCA9IG9zLnBhdGguaXNkaXIoIHBhdGggKQorICAgIGlmIHJldDoKKyAgICAgICAgRCgiZm91bmQga2VybmVsIGhlYWRlcnMgaW46ICVzIiAlIChwYXRoICsgIi9pbmNsdWRlIikpCisgICAgICAgIHJldHVybiBwYXRoCisgICAgcmV0dXJuIE5vbmUKKworCisjIHBhcnNlciBmb3IgdGhlIFNZU0NBTExTLlRYVCBmaWxlCisjCitjbGFzcyBTeXNDYWxsc1R4dFBhcnNlcjoKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuc3lzY2FsbHMgPSBbXQorICAgICAgICBzZWxmLmxpbmVubyAgID0gMAorCisgICAgZGVmIEUobXNnKToKKyAgICAgICAgcHJpbnQgIiVkOiAlcyIgJSAoc2VsZi5saW5lbm8sIG1zZykKKworICAgIGRlZiBwYXJzZV9saW5lKHNlbGYsIGxpbmUpOgorICAgICAgICAiIiIgcGFyc2UgYSBzeXNjYWxsIHNwZWMgbGluZS4KKworICAgICAgICBsaW5lIHByb2Nlc3NpbmcsIGZvcm1hdCBpcworICAgICAgICAgICByZXR1cm4gdHlwZSAgICBmdW5jX25hbWVbOnN5c2NhbGxfbmFtZVs6Y2FsbF9pZF1dICggW3BhcmFtbGlzdF0gKSAgIChzeXNjYWxsX251bWJlclssc3lzY2FsbF9udW1iZXJfeDg2XSl8c3R1YgorICAgICAgICAiIiIKKyAgICAgICAgcG9zX2xwYXJlbiA9IGxpbmUuZmluZCgnKCcpCisgICAgICAgIEUgICAgICAgICAgPSBzZWxmLkUKKyAgICAgICAgaWYgcG9zX2xwYXJlbiA8IDA6CisgICAgICAgICAgICBFKCJtaXNzaW5nIGxlZnQgcGFyZW50aGVzaXMgaW4gJyVzJyIgJSBsaW5lKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgcG9zX3JwYXJlbiA9IGxpbmUucmZpbmQoJyknKQorICAgICAgICBpZiBwb3NfcnBhcmVuIDwgMCBvciBwb3NfcnBhcmVuIDw9IHBvc19scGFyZW46CisgICAgICAgICAgICBFKCJtaXNzaW5nIG9yIG1pc3BsYWNlZCByaWdodCBwYXJlbnRoZXNpcyBpbiAnJXMnIiAlIGxpbmUpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICByZXR1cm5fdHlwZSA9IGxpbmVbOnBvc19scGFyZW5dLnN0cmlwKCkuc3BsaXQoKQorICAgICAgICBpZiBsZW4ocmV0dXJuX3R5cGUpIDwgMjoKKyAgICAgICAgICAgIEUoIm1pc3NpbmcgcmV0dXJuIHR5cGUgaW4gJyVzJyIgJSBsaW5lKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc3lzY2FsbF9mdW5jID0gcmV0dXJuX3R5cGVbLTFdCisgICAgICAgIHJldHVybl90eXBlICA9IHN0cmluZy5qb2luKHJldHVybl90eXBlWzotMV0sJyAnKQorICAgICAgICBjYWxsX2lkID0gLTEKKworICAgICAgICBwb3NfY29sb24gPSBzeXNjYWxsX2Z1bmMuZmluZCgnOicpCisgICAgICAgIGlmIHBvc19jb2xvbiA8IDA6CisgICAgICAgICAgICBzeXNjYWxsX25hbWUgPSBzeXNjYWxsX2Z1bmMKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHBvc19jb2xvbiA9PSAwIG9yIHBvc19jb2xvbisxID49IGxlbihzeXNjYWxsX2Z1bmMpOgorICAgICAgICAgICAgICAgIEUoIm1pc3BsYWNlZCBjb2xvbiBpbiAnJXMnIiAlIGxpbmUpCisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgICMgbm93IGZpbmQgaWYgdGhlcmUgaXMgYSBjYWxsX2lkIGZvciBhIGRpc3BhdGNoLXR5cGUgc3lzY2FsbAorICAgICAgICAgICAgIyBhZnRlciB0aGUgb3B0aW9uYWwgMm5kIGNvbG9uCisgICAgICAgICAgICBwb3NfY29sb24yID0gc3lzY2FsbF9mdW5jLmZpbmQoJzonLCBwb3NfY29sb24gKyAxKQorICAgICAgICAgICAgaWYgcG9zX2NvbG9uMiA8IDA6CisgICAgICAgICAgICAgICAgc3lzY2FsbF9uYW1lID0gc3lzY2FsbF9mdW5jW3Bvc19jb2xvbisxOl0KKyAgICAgICAgICAgICAgICBzeXNjYWxsX2Z1bmMgPSBzeXNjYWxsX2Z1bmNbOnBvc19jb2xvbl0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgcG9zX2NvbG9uMisxID49IGxlbihzeXNjYWxsX2Z1bmMpOgorICAgICAgICAgICAgICAgICAgICBFKCJtaXNwbGFjZWQgY29sb24yIGluICclcyciICUgbGluZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgc3lzY2FsbF9uYW1lID0gc3lzY2FsbF9mdW5jWyhwb3NfY29sb24rMSk6cG9zX2NvbG9uMl0KKyAgICAgICAgICAgICAgICBjYWxsX2lkID0gaW50KHN5c2NhbGxfZnVuY1twb3NfY29sb24yKzE6XSkKKyAgICAgICAgICAgICAgICBzeXNjYWxsX2Z1bmMgPSBzeXNjYWxsX2Z1bmNbOnBvc19jb2xvbl0KKworICAgICAgICBpZiBwb3NfcnBhcmVuID4gcG9zX2xwYXJlbisxOgorICAgICAgICAgICAgc3lzY2FsbF9wYXJhbXMgPSBsaW5lW3Bvc19scGFyZW4rMTpwb3NfcnBhcmVuXS5zcGxpdCgnLCcpCisgICAgICAgICAgICBwYXJhbXMgICAgICAgICA9IHN0cmluZy5qb2luKHN5c2NhbGxfcGFyYW1zLCcsJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN5c2NhbGxfcGFyYW1zID0gW10KKyAgICAgICAgICAgIHBhcmFtcyAgICAgICAgID0gInZvaWQiCisKKyAgICAgICAgbnVtYmVyID0gbGluZVtwb3NfcnBhcmVuKzE6XS5zdHJpcCgpCisgICAgICAgIGlmIG51bWJlciA9PSAic3R1YiI6CisgICAgICAgICAgICBzeXNjYWxsX2lkICA9IC0xCisgICAgICAgICAgICBzeXNjYWxsX2lkMiA9IC0xCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgbnVtYmVyWzBdID09ICcjJzoKKyAgICAgICAgICAgICAgICAgICAgbnVtYmVyID0gbnVtYmVyWzE6XS5zdHJpcCgpCisgICAgICAgICAgICAgICAgbnVtYmVycyA9IHN0cmluZy5zcGxpdChudW1iZXIsJywnKQorICAgICAgICAgICAgICAgIHN5c2NhbGxfaWQgID0gaW50KG51bWJlcnNbMF0pCisgICAgICAgICAgICAgICAgc3lzY2FsbF9pZDIgPSBzeXNjYWxsX2lkCisgICAgICAgICAgICAgICAgaWYgbGVuKG51bWJlcnMpID4gMToKKyAgICAgICAgICAgICAgICAgICAgc3lzY2FsbF9pZDIgPSBpbnQobnVtYmVyc1sxXSkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBFKCJpbnZhbGlkIHN5c2NhbGwgbnVtYmVyIGluICclcyciICUgbGluZSkKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICB0ID0geyAiaWQiICAgICA6IHN5c2NhbGxfaWQsCisgICAgICAgICAgICAgICJpZDIiICAgIDogc3lzY2FsbF9pZDIsCisgICAgICAgICAgICAgICJjaWQiICAgIDogY2FsbF9pZCwKKyAgICAgICAgICAgICAgIm5hbWUiICAgOiBzeXNjYWxsX25hbWUsCisgICAgICAgICAgICAgICJmdW5jIiAgIDogc3lzY2FsbF9mdW5jLAorICAgICAgICAgICAgICAicGFyYW1zIiA6IHN5c2NhbGxfcGFyYW1zLAorICAgICAgICAgICAgICAiZGVjbCIgICA6ICIlLTE1cyAgJXMgKCVzKTsiICUgKHJldHVybl90eXBlLCBzeXNjYWxsX2Z1bmMsIHBhcmFtcykgfQorCisgICAgICAgIHNlbGYuc3lzY2FsbHMuYXBwZW5kKHQpCisKKyAgICBkZWYgcGFyc2VfZmlsZShzZWxmLCBmaWxlX3BhdGgpOgorICAgICAgICBEMigicGFyc2VfZmlsZTogJXMiICUgZmlsZV9wYXRoKQorICAgICAgICBmcCA9IG9wZW4oZmlsZV9wYXRoKQorICAgICAgICBmb3IgbGluZSBpbiBmcC54cmVhZGxpbmVzKCk6CisgICAgICAgICAgICBzZWxmLmxpbmVubyArPSAxCisgICAgICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCisgICAgICAgICAgICBpZiBub3QgbGluZTogY29udGludWUKKyAgICAgICAgICAgIGlmIGxpbmVbMF0gPT0gJyMnOiBjb250aW51ZQorICAgICAgICAgICAgc2VsZi5wYXJzZV9saW5lKGxpbmUpCisKKyAgICAgICAgZnAuY2xvc2UoKQorCisKK2NsYXNzIE91dHB1dDoKKyAgICBkZWYgIF9faW5pdF9fKHNlbGYsb3V0PXN5cy5zdGRvdXQpOgorICAgICAgICBzZWxmLm91dCA9IG91dAorCisgICAgZGVmIHdyaXRlKHNlbGYsbXNnKToKKyAgICAgICAgc2VsZi5vdXQud3JpdGUobXNnKQorCisgICAgZGVmIHdyaXRlbG4oc2VsZixtc2cpOgorICAgICAgICBzZWxmLm91dC53cml0ZShtc2cpCisgICAgICAgIHNlbGYub3V0LndyaXRlKCJcbiIpCisKK2NsYXNzIFN0cmluZ091dHB1dDoKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYubGluZSA9ICIiCisKKyAgICBkZWYgd3JpdGUoc2VsZixtc2cpOgorICAgICAgICBzZWxmLmxpbmUgKz0gbXNnCisgICAgICAgIEQyKCJ3cml0ZSAnJXMnIiAlIG1zZykKKworICAgIGRlZiB3cml0ZWxuKHNlbGYsbXNnKToKKyAgICAgICAgc2VsZi5saW5lICs9IG1zZyArICdcbicKKyAgICAgICAgRDIoIndyaXRlICclc1xcbiciJSBtc2cpCisKKyAgICBkZWYgZ2V0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5saW5lCisKKworZGVmIGNyZWF0ZV9maWxlX3BhdGgocGF0aCk6CisgICAgZGlycyA9IFtdCisgICAgd2hpbGUgMToKKyAgICAgICAgcGFyZW50ID0gb3MucGF0aC5kaXJuYW1lKHBhdGgpCisgICAgICAgIGlmIHBhcmVudCA9PSAiLyI6CisgICAgICAgICAgICBicmVhaworICAgICAgICBkaXJzLmFwcGVuZChwYXJlbnQpCisgICAgICAgIHBhdGggPSBwYXJlbnQKKworICAgIGRpcnMucmV2ZXJzZSgpCisgICAgZm9yIGRpciBpbiBkaXJzOgorICAgICAgICAjcHJpbnQgImRpciAlcyIgJSBkaXIKKyAgICAgICAgaWYgb3MucGF0aC5pc2RpcihkaXIpOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgb3MubWtkaXIoZGlyKQorCitkZWYgd2Fsa19zb3VyY2VfZmlsZXMocGF0aHMsY2FsbGJhY2ssYXJncyxleGNsdWRlcz1bXSk6CisgICAgIiIicmVjdXJzaXZlbHkgd2FsayBhIGxpc3Qgb2YgcGF0aHMgYW5kIGZpbGVzLCBvbmx5IGtlZXBpbmcgdGhlIHNvdXJjZSBmaWxlcyBpbiBkaXJlY3RvcmllcyIiIgorICAgIGZvciBwYXRoIGluIHBhdGhzOgorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihwYXRoKToKKyAgICAgICAgICAgIGNhbGxiYWNrKHBhdGgsYXJncykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHBhdGgpOgorICAgICAgICAgICAgICAgICNwcmludCAidy0tICVzIChleDogJXMpIiAlIChyZXByKChyb290LGRpcnMpKSwgcmVwcihleGNsdWRlcykpCisgICAgICAgICAgICAgICAgaWYgbGVuKGV4Y2x1ZGVzKToKKyAgICAgICAgICAgICAgICAgICAgZm9yIGQgaW4gZGlyc1s6XToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGQgaW4gZXhjbHVkZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlycy5yZW1vdmUoZCkKKyAgICAgICAgICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICAgICAgciwgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChmKQorICAgICAgICAgICAgICAgICAgICBpZiBleHQgaW4gWyAiLmgiLCAiLmMiLCAiLmNwcCIsICIuUyIgXToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCAiJXMvJXMiICUgKHJvb3QsZiksIGFyZ3MgKQorCitkZWYgY2xlYW51cF9kaXIocGF0aCk6CisgICAgIiIiY3JlYXRlIGEgZGlyZWN0b3J5IGlmIG5lZWRlZCwgYW5kIGVuc3VyZSB0aGF0IGl0IGlzIHRvdGFsbHkgZW1wdHkKKyAgICAgICBieSByZW1vdmluZyBhbnkgZXhpc3RpbmcgY29udGVudCBpbiBpdCIiIgorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhwYXRoKToKKyAgICAgICAgb3MubWtkaXIocGF0aCkKKyAgICBlbHNlOgorICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhwYXRoLCB0b3Bkb3duPUZhbHNlKToKKyAgICAgICAgICAgIGlmIHJvb3QuZW5kc3dpdGgoImtlcm5lbF9oZWFkZXJzLyIpOgorICAgICAgICAgICAgICAgICMgc2tpcCAna2VybmVsX2hlYWRlcnMnCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGZvciBuYW1lIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIG9zLnJlbW92ZShvcy5wYXRoLmpvaW4ocm9vdCwgbmFtZSkpCisgICAgICAgICAgICBmb3IgbmFtZSBpbiBkaXJzOgorICAgICAgICAgICAgICAgIG9zLnJtZGlyKG9zLnBhdGguam9pbihyb290LCBuYW1lKSkKZGlmZiAtLWdpdCBhL2xpYmMvdG9vbHMvY2hlY2tzeXNjYWxscy5weSBiL2xpYmMvdG9vbHMvY2hlY2tzeXNjYWxscy5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45ZWRiMzkwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy90b29scy9jaGVja3N5c2NhbGxzLnB5CkBAIC0wLDAgKzEsMTc1IEBACisjIS91c3IvYmluL3B5dGhvbgorIworIyB0aGlzIHRvb2wgaXMgdXNlZCB0byBjaGVjayB0aGF0IHRoZSBzeXNjYWxsIG51bWJlcnMgdGhhdCBhcmUgaW4KKyMgU1lTQ0FMTFMuVFhUIGNvcnJlc3BvbmQgdG8gdGhvc2UgZm91bmQgaW4gdGhlIExpbnV4IGtlcm5lbCBzb3VyY2VzCisjIGZvciB0aGUgYXJtIGFuZCBpMzg2IGFyY2hpdGVjdHVyZXMKKyMKKworaW1wb3J0IHN5cywgcmUsIHN0cmluZywgb3MsIGNvbW1hbmRzCitmcm9tICAgYmlvbmljX3V0aWxzIGltcG9ydCAqCisKKyMgY2hhbmdlIHRoaXMgaWYgbmVjZXNzYXJ5CitzeXNjYWxsc190eHQgPSAiU1lTQ0FMTFMuVFhUIgorCitkZWYgdXNhZ2UoKToKKyAgICBwcmludCAidXNhZ2U6IGNoZWNrc3lzY2FsbHMgW29wdGlvbnNdIFtrZXJuZWxfaGVhZGVyc19yb290ZGlyXSIKKyAgICBwcmludCAiICAgIG9wdGlvbnM6ICAgIC12ICAgZW5hYmxlIHZlcmJvc2UgbW9kZSIKKyAgICBzeXMuZXhpdCgxKQorCisKK2xpbnV4X3Jvb3QgICAgPSBOb25lCitzeXNjYWxsc19maWxlID0gTm9uZQorCitkZWYgcGFyc2VfY29tbWFuZF9saW5lKGFyZ3MpOgorICAgIGdsb2JhbCBsaW51eF9yb290LCBzeXNjYWxsc19maWxlLCB2ZXJib3NlCisKKyAgICBwcm9ncmFtID0gYXJnc1swXQorICAgIGFyZ3MgICAgPSBhcmdzWzE6XQorICAgIHdoaWxlIGxlbihhcmdzKSA+IDAgYW5kIGFyZ3NbMF1bMF0gPT0gIi0iOgorICAgICAgICBvcHRpb24gPSBhcmdzWzBdWzE6XQorICAgICAgICBhcmdzICAgPSBhcmdzWzE6XQorCisgICAgICAgIGlmIG9wdGlvbiA9PSAidiI6CisgICAgICAgICAgICBEX3NldGxldmVsKDEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB1c2FnZSgpCisKKyAgICBpZiBsZW4oYXJncykgPiAyOgorICAgICAgICB1c2FnZSgpCisKKyAgICBpZiBsZW4oYXJncykgPT0gMDoKKyAgICAgICAgbGludXhfcm9vdCA9IGZpbmRfa2VybmVsX2hlYWRlcnMoKQorICAgICAgICBpZiBsaW51eF9yb290ID09IE5vbmU6CisgICAgICAgICAgICBwcmludCAiY291bGQgbm90IGxvY2F0ZSB0aGlzIHN5c3RlbSBrZXJuZWwgaGVhZGVycyByb290IGRpcmVjdG9yeSwgcGxlYXNlIgorICAgICAgICAgICAgcHJpbnQgInNwZWNpZnkgb25lIHdoZW4gY2FsbGluZyB0aGlzIHByb2dyYW0sIGkuZS4gJ2NoZWNrc3lzY2FsbHMgPGhlYWRlcnMtZGlyZWN0b3J5PiciCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICBwcmludCAidXNpbmcgdGhlIGZvbGxvd2luZyBrZXJuZWwgaGVhZGVycyByb290OiAnJXMnIiAlIGxpbnV4X3Jvb3QKKyAgICBlbHNlOgorICAgICAgICBsaW51eF9yb290ID0gYXJnc1swXQorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihsaW51eF9yb290KToKKyAgICAgICAgICAgIHByaW50ICJ0aGUgZGlyZWN0b3J5ICclcycgZG9lcyBub3QgZXhpc3QuIGFib3J0aW5nXG4iICUgaGVhZGVyc19yb290CisgICAgICAgICAgICBzeXMuZXhpdCgxKQorCitwYXJzZV9jb21tYW5kX2xpbmUoc3lzLmFyZ3YpCisKK3N5c2NhbGxzX2ZpbGUgPSBmaW5kX2ZpbGVfZnJvbV91cHdhcmRzKE5vbmUsIHN5c2NhbGxzX3R4dCkKK2lmIG5vdCBzeXNjYWxsc19maWxlOgorICAgIHByaW50ICJjb3VsZCBub3QgbG9jYXRlIHRoZSAlcyBmaWxlLiBBYm9ydGluZyIgJSBzeXNjYWxsc190eHQKKyAgICBzeXMuZXhpdCgxKQorCitwcmludCAicGFyc2luZyAlcyIgJSBzeXNjYWxsc19maWxlCisKKyMgcmVhZCB0aGUgc3lzY2FsbHMgZGVzY3JpcHRpb24gZmlsZQorIworCitwYXJzZXIgPSBTeXNDYWxsc1R4dFBhcnNlcigpCitwYXJzZXIucGFyc2VfZmlsZShzeXNjYWxsc19maWxlKQorc3lzY2FsbHMgPSBwYXJzZXIuc3lzY2FsbHMKKworcmVfbnJfbGluZSAgICAgICA9IHJlLmNvbXBpbGUoIHIiI2RlZmluZSBfX05SXyhcdyopXHMqXChfX05SX1NZU0NBTExfQkFTRVwrXHMqKFx3KilcKSIgKQorcmVfbnJfY2xvY2tfbGluZSA9IHJlLmNvbXBpbGUoIHIiI2RlZmluZSBfX05SXyhcdyopXHMqXChfX05SX3RpbWVyX2NyZWF0ZVwrKFx3KilcKSIgKQorcmVfYXJtX25yX2xpbmUgICA9IHJlLmNvbXBpbGUoIHIiI2RlZmluZSBfX0FSTV9OUl8oXHcqKVxzKlwoX19BUk1fTlJfQkFTRVwrXHMqKFx3KilcKSIgKQorcmVfeDg2X2xpbmUgICAgICA9IHJlLmNvbXBpbGUoIHIiI2RlZmluZSBfX05SXyhcdyopXHMqKFswLTldKikiICkKKworIyBub3cgcmVhZCB0aGUgTGludXggYXJtIGhlYWRlcgorZGVmIHByb2Nlc3NfbnJfbGluZShsaW5lLGRpY3QpOgorCisgICAgbSA9IHJlX25yX2xpbmUubWF0Y2gobGluZSkKKyAgICBpZiBtOgorICAgICAgICBkaWN0W20uZ3JvdXAoMSldID0gaW50KG0uZ3JvdXAoMikpCisgICAgICAgIHJldHVybgorCisgICAgbSA9IHJlX25yX2Nsb2NrX2xpbmUubWF0Y2gobGluZSkKKyAgICBpZiBtOgorICAgICAgICBkaWN0W20uZ3JvdXAoMSldID0gaW50KG0uZ3JvdXAoMikpICsgMjU5CisgICAgICAgIHJldHVybgorCisgICAgbSA9IHJlX2FybV9ucl9saW5lLm1hdGNoKGxpbmUpCisgICAgaWYgbToKKyAgICAgICAgI3ByaW50ICIlcyA9ICVzIiAlIChtLmdyb3VwKDEpLCBtLmdyb3VwKDIpKQorICAgICAgICBkaWN0WyJBUk1fIittLmdyb3VwKDEpXSA9IGludChtLmdyb3VwKDIpKSArIDB4MGYwMDAwCisgICAgICAgIHJldHVybgorCisgICAgbSA9IHJlX3g4Nl9saW5lLm1hdGNoKGxpbmUpCisgICAgaWYgbToKKyAgICAgICAgIyB0cnkgYmxvY2sgYmVjYXVzZSB0aGUgQVJNIGhlYWRlciBoYXMgc29tZSAjZGVmaW5lIF9OUl9YWFhYWCAgLyogbm90aGluZyAqLworICAgICAgICB0cnk6CisgICAgICAgICAgICAjcHJpbnQgIiVzID0gJXMiICUgKG0uZ3JvdXAoMSksIG0uZ3JvdXAoMikpCisgICAgICAgICAgICBkaWN0W20uZ3JvdXAoMSldID0gaW50KG0uZ3JvdXAoMikpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgcmV0dXJuCisKKworZGVmIHByb2Nlc3NfaGVhZGVyKGhlYWRlcl9maWxlLGRpY3QpOgorICAgIGZwID0gb3BlbihoZWFkZXJfZmlsZSkKKyAgICBEKCJyZWFkaW5nICIraGVhZGVyX2ZpbGUpCisgICAgZm9yIGxpbmUgaW4gZnAueHJlYWRsaW5lcygpOgorICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCisgICAgICAgIGlmIG5vdCBsaW5lOiBjb250aW51ZQorICAgICAgICBwcm9jZXNzX25yX2xpbmUobGluZSxkaWN0KQorICAgIGZwLmNsb3NlKCkKKworYXJtX2RpY3QgPSB7fQoreDg2X2RpY3QgPSB7fQorCisKKyMgcmVtb3ZlIHRyYWlsaW5nIHNsYXNoIGFuZCAnL2luY2x1ZGUnIGZyb20gdGhlIGxpbnV4X3Jvb3QsIGlmIGFueQoraWYgbGludXhfcm9vdFstMV0gPT0gJy8nOgorICAgIGxpbnV4X3Jvb3QgPSBsaW51eF9yb290WzotMV0KKworaWYgbGVuKGxpbnV4X3Jvb3QpID4gOCBhbmQgbGludXhfcm9vdFstODpdID09ICcvaW5jbHVkZSc6CisgICAgbGludXhfcm9vdCA9IGxpbnV4X3Jvb3RbOi04XQorCithcm1fdW5pc3RkID0gbGludXhfcm9vdCArICIvaW5jbHVkZS9hc20tYXJtL3VuaXN0ZC5oIgoraWYgbm90IG9zLnBhdGguZXhpc3RzKGFybV91bmlzdGQpOgorICAgIHByaW50ICJXRUlSRDogY291bGQgbm90IGxvY2F0ZSB0aGUgQVJNIHVuaXN0ZC5oIGhlYWRlciBmaWxlIgorICAgIHByaW50ICJ0cmllZCBzZWFyY2hpbmcgaW4gJyVzJyIgJSBhcm1fdW5pc3RkCisgICAgcHJpbnQgIm1heWJlIHVzaW5nIGEgZGlmZmVyZW50IHNldCBvZiBrZXJuZWwgaGVhZGVycyBtaWdodCBoZWxwIgorICAgIHN5cy5leGl0KDEpCisKKyMgb24gcmVjZW50IGtlcm5lbHMsIGFzbS1pMzg2IGFuZCBhc20teDY0XzY0IGhhdmUgYmVlbiBtZXJnZWQgaW50byBhc20teDg2CisjIHdpdGggdHdvIGRpc3RpbmN0IHVuaXN0ZF8zMi5oIGFuZCB1bmlzdGRfNjQuaCBkZWZpbml0aW9uIGZpbGVzLgorIyB0YWtlIGNhcmUgb2YgdGhpcyBoZXJlCisjCit4ODZfdW5pc3RkID0gbGludXhfcm9vdCArICIvaW5jbHVkZS9hc20taTM4Ni91bmlzdGQuaCIKK2lmIG5vdCBvcy5wYXRoLmV4aXN0cyh4ODZfdW5pc3RkKToKKyAgICB4ODZfdW5pc3RkMSA9IHg4Nl91bmlzdGQKKyAgICB4ODZfdW5pc3RkID0gbGludXhfcm9vdCArICIvaW5jbHVkZS9hc20teDg2L3VuaXN0ZF8zMi5oIgorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyh4ODZfdW5pc3RkKToKKyAgICAgICAgcHJpbnQgIldFSVJEOiBjb3VsZCBub3QgbG9jYXRlIHRoZSBpMzg2L3g4NiB1bmlzdGQuaCBoZWFkZXIgZmlsZSIKKyAgICAgICAgcHJpbnQgInRyaWVkIHNlYXJjaGluZyBpbiAnJXMnIGFuZCAnJXMnIiAlICh4ODZfdW5pc3RkMSwgeDg2X3VuaXN0ZCkKKyAgICAgICAgcHJpbnQgIm1heWJlIHVzaW5nIGEgZGlmZmVyZW50IHNldCBvZiBrZXJuZWwgaGVhZGVycyBtaWdodCBoZWxwIgorICAgICAgICBzeXMuZXhpdCgxKQorCitwcm9jZXNzX2hlYWRlciggbGludXhfcm9vdCsiL2luY2x1ZGUvYXNtLWFybS91bmlzdGQuaCIsIGFybV9kaWN0ICkKK3Byb2Nlc3NfaGVhZGVyKCB4ODZfdW5pc3RkLCB4ODZfZGljdCApCisKKyMgbm93IHBlcmZvcm0gdGhlIGNvbXBhcmlzb24KK2Vycm9ycyA9IDAKK2ZvciBzYyBpbiBzeXNjYWxsczoKKyAgICBzY19uYW1lID0gc2NbIm5hbWUiXQorICAgIHNjX2lkICAgPSBzY1siaWQiXQorICAgIGlmIHNjX2lkID49IDA6CisgICAgICAgIGlmIG5vdCBhcm1fZGljdC5oYXNfa2V5KHNjX25hbWUpOgorICAgICAgICAgICAgcHJpbnQgImFybSBzeXNjYWxsICVzIG5vdCBkZWZpbmVkICEhIiAlIHNjX25hbWUKKyAgICAgICAgICAgIGVycm9ycyArPSAxCisgICAgICAgIGVsaWYgYXJtX2RpY3Rbc2NfbmFtZV0gIT0gc2NfaWQ6CisgICAgICAgICAgICBwcmludCAiYXJtIHN5c2NhbGwgJXMgc2hvdWxkIGJlICVkIGluc3RlYWQgb2YgJWQgISEiICUgKHNjX25hbWUsIGFybV9kaWN0W3NjX25hbWVdLCBzY19pZCkKKyAgICAgICAgICAgIGVycm9ycyArPSAxCisKK2ZvciBzYyBpbiBzeXNjYWxsczoKKyAgICBzY19uYW1lID0gc2NbIm5hbWUiXQorICAgIHNjX2lkMiAgPSBzY1siaWQyIl0KKyAgICBpZiBzY19pZDIgPj0gMDoKKyAgICAgICAgaWYgbm90IHg4Nl9kaWN0Lmhhc19rZXkoc2NfbmFtZSk6CisgICAgICAgICAgICBwcmludCAieDg2IHN5c2NhbGwgJXMgbm90IGRlZmluZWQgISEiICUgc2NfbmFtZQorICAgICAgICAgICAgZXJyb3JzICs9IDEKKyAgICAgICAgZWxpZiB4ODZfZGljdFtzY19uYW1lXSAhPSBzY19pZDI6CisgICAgICAgICAgICBwcmludCAieDg2IHN5c2NhbGwgJXMgc2hvdWxkIGJlICVkIGluc3RlYWQgb2YgJWQgISEiICUgKHNjX25hbWUsIHg4Nl9kaWN0W3NjX25hbWVdLCBzY19pZDIpCisgICAgICAgICAgICBlcnJvcnMgKz0gMQorCitpZiBlcnJvcnMgPT0gMDoKKyAgICBwcmludCAiY29uZ3JhdHVsYXRpb25zLCBldmVyeXRoaW5nJ3MgZmluZSAhISIKK2Vsc2U6CisgICAgcHJpbnQgImNvcnJlY3QgJWQgZXJyb3JzICEhIiAlIGVycm9ycwpkaWZmIC0tZ2l0IGEvbGliYy90b29scy9nZW5zZXJ2LnB5IGIvbGliYy90b29scy9nZW5zZXJ2LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmUzN2QyOGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Rvb2xzL2dlbnNlcnYucHkKQEAgLTAsMCArMSw3NiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisKK2ltcG9ydCBzeXMsIG9zLCBzdHJpbmcsIHJlCisKK2RlZiB1c2FnZSgpOgorICAgIHByaW50ICIiIlwKKyAgdXNhZ2U6ICBnZW5zZXJ2IDwgL2V0Yy9zZXJ2aWNlcyA+IG5ldGJzZC9uZXQvc2VydmljZXMuaAorCisgIHRoaXMgcHJvZ3JhbSBpcyB1c2VkIHRvIGdlbmVyYXRlIHRoZSBoYXJkLWNvZGVkIGludGVybmV0IHNlcnZpY2UgbGlzdCBmb3IgdGhlCisgIEJpb25pYyBDIGxpYnJhcnkuCisiIiIKKworcmVfc2VydmljZSA9IHJlLmNvbXBpbGUociIoW1xkXHdcLV9dKylccysoXGQrKS8odGNwfHVkcCkoLiopIikKK3JlX2FsaWFzICAgPSByZS5jb21waWxlKHIiKFtcZFx3XC1fXSspKC4qKSIpCisKK2NsYXNzIFNlcnZpY2U6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsbmFtZSxwb3J0LHByb3RvKToKKyAgICAgICAgc2VsZi5uYW1lICAgID0gbmFtZQorICAgICAgICBzZWxmLnBvcnQgICAgPSBwb3J0CisgICAgICAgIHNlbGYucHJvdG8gICA9IHByb3RvCisgICAgICAgIHNlbGYuYWxpYXNlcyA9IFtdCisKKyAgICBkZWYgYWRkX2FsaWFzKHNlbGYsYWxpYXMpOgorICAgICAgICBzZWxmLmFsaWFzZXMuYXBwZW5kKGFsaWFzKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJlc3VsdCAgPSAiXFwlMG8lcyIgJSAobGVuKHNlbGYubmFtZSksc2VsZi5uYW1lKQorICAgICAgICByZXN1bHQgKz0gIlxcJTBvXFwlMG8iICUgKCgoc2VsZi5wb3J0ID4+IDgpICYgMjU1KSwgc2VsZi5wb3J0ICYgMjU1KQorICAgICAgICBpZiBzZWxmLnByb3RvID09ICJ0Y3AiOgorICAgICAgICAgICAgcmVzdWx0ICs9ICJ0IgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVzdWx0ICs9ICJ1IgorCisgICAgICAgIHJlc3VsdCArPSAiXFwlMG8iICUgbGVuKHNlbGYuYWxpYXNlcykKKyAgICAgICAgZm9yIGFsaWFzIGluIHNlbGYuYWxpYXNlczoKKyAgICAgICAgICAgIHJlc3VsdCArPSAiXFwlMG8lcyIgJSAobGVuKGFsaWFzKSwgYWxpYXMpCisKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCitkZWYgcGFyc2UoZik6CisgICAgcmVzdWx0ID0gW10gICMgbGlzdCBvZiBTZXJ2aWNlIG9iamVjdHMKKyAgICBmb3IgbGluZSBpbiBmLnhyZWFkbGluZXMoKToKKyAgICAgICAgaWYgbGVuKGxpbmUpID4gMCBhbmQgbGluZVstMV0gPT0gIlxuIjoKKyAgICAgICAgICAgIGxpbmUgPSBsaW5lWzotMV0KKyAgICAgICAgaWYgbGVuKGxpbmUpID4gMCBhbmQgbGluZVstMV0gPT0gIlxyIjoKKyAgICAgICAgICAgIGxpbmUgPSBsaW5lWzotMV0KKworICAgICAgICBsaW5lID0gc3RyaW5nLnN0cmlwKGxpbmUpCisgICAgICAgIGlmIGxlbihsaW5lKSA9PSAwIG9yIGxpbmVbMF0gPT0gIiMiOgorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICBtID0gcmVfc2VydmljZS5tYXRjaChsaW5lKQorICAgICAgICBpZiBtOgorICAgICAgICAgICAgc2VydmljZSA9IFNlcnZpY2UoIG0uZ3JvdXAoMSksIGludChtLmdyb3VwKDIpKSwgbS5ncm91cCgzKSApCisgICAgICAgICAgICByZXN0ICAgID0gc3RyaW5nLnN0cmlwKG0uZ3JvdXAoNCkpCisKKyAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgbSA9IHJlX2FsaWFzLm1hdGNoKHJlc3QpCisgICAgICAgICAgICAgICAgaWYgbm90IG06CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgc2VydmljZS5hZGRfYWxpYXMobS5ncm91cCgxKSkKKyAgICAgICAgICAgICAgICByZXN0ID0gc3RyaW5nLnN0cmlwKG0uZ3JvdXAoMikpCisKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoc2VydmljZSkKKworICAgIHJldHVybiByZXN1bHQKKworc2VydmljZXMgPSBwYXJzZShzeXMuc3RkaW4pCitsaW5lID0gJy8qIGdlbmVyYXRlZCBieSBnZW5zZXJ2LnB5IC0gZG8gbm90IGVkaXQgKi9cbnN0YXRpYyBjb25zdCBjaGFyICBfc2VydmljZXNbXSA9ICJcXFxuJworZm9yIHMgaW4gc2VydmljZXM6CisgICAgbGluZSArPSBzdHIocykrIlxcXG4iCitsaW5lICs9ICdcXDAiO1xuJworcHJpbnQgbGluZQorCisKZGlmZiAtLWdpdCBhL2xpYmMvdG9vbHMvZ2Vuc3lzY2FsbHMucHkgYi9saWJjL3Rvb2xzL2dlbnN5c2NhbGxzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjUzMGU1NjUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Rvb2xzL2dlbnN5c2NhbGxzLnB5CkBAIC0wLDAgKzEsNTA2IEBACisjIS91c3IvYmluL3B5dGhvbgorIworIyB0aGlzIHRvb2wgaXMgdXNlZCB0byBnZW5lcmF0ZSB0aGUgc3lzY2FsbCBhc3NtYmxlciB0ZW1wbGF0ZXMKKyMgdG8gYmUgcGxhY2VkIGludG8gYXJjaC14ODYvc3lzY2FsbHMsIGFzIHdlbGwgYXMgdGhlIGNvbnRlbnQKKyMgb2YgYXJjaC14ODYvbGludXgvX3N5c2NhbGxzLmgKKyMKKworaW1wb3J0IHN5cywgb3MucGF0aCwgZ2xvYiwgcmUsIGNvbW1hbmRzLCBmaWxlY21wLCBzaHV0aWwKKworZnJvbSBiaW9uaWNfdXRpbHMgaW1wb3J0ICoKKworIyBzZXQgdGhpcyB0byAxIGlmIHlvdSB3YW50IHRvIGdlbmVyYXRlIHRodW1iIHN0dWJzCitnZW5fdGh1bWJfc3R1YnMgPSAwCisKKyMgc2V0IHRoaXMgdG8gMSBpZiB5b3Ugd2FudCB0byBnZW5lcmF0ZSBBUk0gRUFCSSBzdHVicworZ2VuX2VhYmlfc3R1YnMgPSAxCisKKyMgZ2V0IHRoZSByb290IEJpb25pYyBkaXJlY3RvcnksIHNpbXBseSB0aGlzIHNjcmlwdCdzIGRpcm5hbWUKKyMKK2Jpb25pY19yb290ID0gZmluZF9iaW9uaWNfcm9vdCgpCitpZiBub3QgYmlvbmljX3Jvb3Q6CisgICAgcHJpbnQgImNvdWxkIG5vdCBmaW5kIHRoZSBCaW9uaWMgcm9vdCBkaXJlY3RvcnkuIGFib3J0aW5nIgorICAgIHN5cy5leGl0KDEpCisKK2lmIGJpb25pY19yb290Wy0xXSAhPSAnLyc6CisgICAgYmlvbmljX3Jvb3QgKz0gIi8iCisKK3ByaW50ICJiaW9uaWNfcm9vdCBpcyAlcyIgJSBiaW9uaWNfcm9vdAorCisjIHRlbXAgZGlyZWN0b3J5IHdoZXJlIHdlIHN0b3JlIGFsbCBpbnRlcm1lZGlhdGUgZmlsZXMKK2Jpb25pY190ZW1wID0gIi90bXAvYmlvbmljX2dlbnN5c2NhbGxzLyIKKworIyBhbGwgYXJjaGl0ZWN0dXJlcywgdXBkYXRlIGFzIHlvdSBzZWUgZml0CithbGxfYXJjaHMgPSBbICJhcm0iLCAieDg2IiBdCisKK2RlZiBtYWtlX2RpciggcGF0aCApOgorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhwYXRoKToKKyAgICAgICAgcGFyZW50ID0gb3MucGF0aC5kaXJuYW1lKHBhdGgpCisgICAgICAgIGlmIHBhcmVudDoKKyAgICAgICAgICAgIG1ha2VfZGlyKHBhcmVudCkKKyAgICAgICAgb3MubWtkaXIocGF0aCkKKworZGVmIGNyZWF0ZV9maWxlKCByZWxwYXRoICk6CisgICAgZGlyID0gb3MucGF0aC5kaXJuYW1lKCBiaW9uaWNfdGVtcCArIHJlbHBhdGggKQorICAgIG1ha2VfZGlyKGRpcikKKyAgICByZXR1cm4gb3BlbiggYmlvbmljX3RlbXAgKyByZWxwYXRoLCAidyIgKQorCisjIHg4NiBhc3NlbWJsZXIgdGVtcGxhdGVzIGZvciBlYWNoIHN5c2NhbGwgc3R1YgorIworCit4ODZfaGVhZGVyID0gIiIiLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSAlKGZuYW1lKXMsIEBmdW5jdGlvbgorICAgIC5nbG9ibCAlKGZuYW1lKXMKKyAgICAuYWxpZ24gNAorCislKGZuYW1lKXM6CisiIiIKKworeDg2X3JlZ2lzdGVycyA9IFsgIiVlYngiLCAiJWVjeCIsICIlZWR4IiwgIiVlc2kiLCAiJWVkaSIsICIlZWJwIiBdCisKK3g4Nl9jYWxsID0gIiIiICAgIG1vdmwgICAgJCUoaWRuYW1lKXMsICUlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICUlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJSVlYXgKKyAgICBwdXNobCAgICUlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICUlZXNwCisgICAgb3JsICAgICAkLTEsICUlZWF4CisxOgorIiIiCisKK3g4Nl9yZXR1cm4gPSAiIiIgICAgcmV0CisiIiIKKworIyBBUk0gYXNzZW1ibGVyIHRlbXBsYXRlcyBmb3IgZWFjaCBzeXNjYWxsIHN0dWIKKyMKK2FybV9oZWFkZXIgPSAiIiIvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlICUoZm5hbWUpcywgI2Z1bmN0aW9uCisgICAgLmdsb2JsICUoZm5hbWUpcworICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworJShmbmFtZSlzOgorIiIiCisKK2FybV9jYWxsX2RlZmF1bHQgPSBhcm1faGVhZGVyICsgIiIiXAorICAgIHN3aSAgICMlKGlkbmFtZSlzCisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCisiIiIKKworYXJtX2NhbGxfbG9uZyA9IGFybV9oZWFkZXIgKyAiIiJcCisgICAgLnNhdmUgICB7cjQsIHI1LCBscn0KKyAgICBzdG1mZCAgIHNwISwge3I0LCByNSwgbHJ9CisgICAgbGRyICAgICByNCwgW3NwLCAjMTJdCisgICAgbGRyICAgICByNSwgW3NwLCAjMTZdCisgICAgc3dpICAgICAjICUoaWRuYW1lKXMKKyAgICBsZG1mZCAgIHNwISwge3I0LCByNSwgbHJ9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCisiIiIKKworYXJtX2VhYmlfY2FsbF9kZWZhdWx0ID0gYXJtX2hlYWRlciArICIiIlwKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPSUoaWRuYW1lKXMKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCisiIiIKKworYXJtX2VhYmlfY2FsbF9sb25nID0gYXJtX2hlYWRlciArICIiIlwKKyAgICBtb3YgICAgIGlwLCBzcAorICAgIC5zYXZlICAge3I0LCByNSwgcjYsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9CisgICAgbGRtZmQgICBpcCwge3I0LCByNSwgcjZ9CisgICAgbGRyICAgICByNywgPSUoaWRuYW1lKXMKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjUsIHI2LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKKyIiIgorCisjIEFSTSB0aHVtYiBhc3NlbWJsZXIgdGVtcGxhdGVzIGZvciBlYWNoIHN5c2NhbGwgc3R1YgorIwordGh1bWJfaGVhZGVyID0gIiIiLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworICAgIC50ZXh0CisgICAgLnR5cGUgJShmbmFtZSlzLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgJShmbmFtZSlzCisgICAgLmFsaWduIDQKKyAgICAudGh1bWJfZnVuYworICAgIC5mbnN0YXJ0CisKKyNkZWZpbmUgIF9fdGh1bWJfXworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisKKyUoZm5hbWUpczoKKyIiIgorCit0aHVtYl9jYWxsX2RlZmF1bHQgPSB0aHVtYl9oZWFkZXIgKyAiIiJcCisgICAgLnNhdmUgICB7cjcsbHJ9CisgICAgcHVzaCAgICB7cjcsbHJ9CisgICAgbGRyICAgICByNywgPSUoaWRuYW1lKXMKKyAgICBzd2kgICAgICMwCisgICAgdHN0ICAgICByMCwgcjAKKyAgICBibWkgICAgIDFmCisgICAgcG9wICAgICB7cjcscGN9CisxOgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgbGRyICAgICByMSwgPV9fc2V0X2Vycm5vCisgICAgYmx4ICAgICByMQorICAgIHBvcCAgICAge3I3LHBjfQorICAgIC5mbmVuZAorIiIiCisKK3RodW1iX2NhbGxfbG9uZyA9IHRodW1iX2hlYWRlciArICIiIlwKKyAgICAuc2F2ZSAge3I0LHI1LHI3LGxyfQorICAgIHB1c2ggICB7cjQscjUscjcsbHJ9CisgICAgbGRyICAgIHI0LCBbc3AsIzE2XQorICAgIGxkciAgICByNSwgW3NwLCMyMF0KKyAgICBsZHIgICAgcjcsID0lKGlkbmFtZSlzCisgICAgc3dpICAgICMwCisgICAgdHN0ICAgIHIwLCByMAorICAgIGJtaSAgICAxZgorICAgIHBvcCAgICB7cjQscjUscjcscGN9CisxOgorICAgIG5lZyAgICByMCwgcjAKKyAgICBsZHIgICAgcjEsID1fX3NldF9lcnJubworICAgIGJseCAgICByMQorICAgIHBvcCAgICB7cjQscjUscjcscGN9CisgICAgLmZuZW5kCisiIiIKKworCitjbGFzcyBTdGF0ZToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYub2xkX3N0dWJzID0gW10KKyAgICAgICAgc2VsZi5uZXdfc3R1YnMgPSBbXQorICAgICAgICBzZWxmLm90aGVyX2ZpbGVzID0gW10KKyAgICAgICAgc2VsZi5zeXNjYWxscyA9IFtdCisKKyAgICBkZWYgeDg2X2dlbnN0dWIoc2VsZiwgZm5hbWUsIG51bXBhcmFtcywgaWRuYW1lKToKKyAgICAgICAgdCA9IHsgImZuYW1lIiAgOiBmbmFtZSwKKyAgICAgICAgICAgICAgImlkbmFtZSIgOiBpZG5hbWUgfQorCisgICAgICAgIHJlc3VsdCAgICAgPSB4ODZfaGVhZGVyICUgdAorICAgICAgICBzdGFja19iaWFzID0gNAorICAgICAgICBmb3IgciBpbiByYW5nZShudW1wYXJhbXMpOgorICAgICAgICAgICAgcmVzdWx0ICAgICArPSAiICAgIHB1c2hsICAgIiArIHg4Nl9yZWdpc3RlcnNbcl0gKyAiXG4iCisgICAgICAgICAgICBzdGFja19iaWFzICs9IDQKKworICAgICAgICBmb3IgciBpbiByYW5nZShudW1wYXJhbXMpOgorICAgICAgICAgICAgcmVzdWx0ICs9ICIgICAgbW92ICAgICAlZCglJWVzcCksICVzIiAlIChzdGFja19iaWFzK3IqNCwgeDg2X3JlZ2lzdGVyc1tyXSkgKyAiXG4iCisKKyAgICAgICAgcmVzdWx0ICs9IHg4Nl9jYWxsICUgdAorCisgICAgICAgIGZvciByIGluIHJhbmdlKG51bXBhcmFtcyk6CisgICAgICAgICAgICByZXN1bHQgKz0gIiAgICBwb3BsICAgICIgKyB4ODZfcmVnaXN0ZXJzW251bXBhcmFtcy1yLTFdICsgIlxuIgorCisgICAgICAgIHJlc3VsdCArPSB4ODZfcmV0dXJuCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiB4ODZfZ2Vuc3R1Yl9jaWQoc2VsZiwgZm5hbWUsIG51bXBhcmFtcywgaWRuYW1lLCBjaWQpOgorICAgICAgICAjIFdlJ2xsIGlnbm9yZSBudW1wYXJhbXMgaGVyZSBiZWNhdXNlIGluIHJlYWxpdHksIGlmIHRoZXJlIGlzIGEKKyAgICAgICAgIyBkaXNwYXRjaCBjYWxsIChsaWtlIGEgc29ja2V0Y2FsbCBzeXNjYWxsKSB0aGVyZSBhcmUgYWN0dWFsbHkKKyAgICAgICAgIyBvbmx5IDIgYXJndW1lbnRzIHRvIHRoZSBzeXNjYWxsIGFuZCAyIHJlZ3Mgd2UgaGF2ZSB0byBzYXZlOgorICAgICAgICAjICAgJWVieCA8LS0tIEFyZ3VtZW50IDEgLSBUaGUgY2FsbCBpZCBvZiB0aGUgbmVlZGVkIHZlY3RvcmVkCisgICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2NhbGwgKHNvY2tldCwgYmluZCwgcmVjdiwgZXRjKQorICAgICAgICAjICAgJWVjeCA8LS0tIEFyZ3VtZW50IDIgLSBQb2ludGVyIHRvIHRoZSByZXN0IG9mIHRoZSBhcmd1bWVudHMKKyAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gY2FsbGVkIChzb2NrZXQoKSkKKyAgICAgICAgdCA9IHsgImZuYW1lIiAgOiBmbmFtZSwKKyAgICAgICAgICAgICAgImlkbmFtZSIgOiBpZG5hbWUgfQorCisgICAgICAgIHJlc3VsdCA9IHg4Nl9oZWFkZXIgJSB0CisgICAgICAgIHN0YWNrX2JpYXMgPSA0CisKKyAgICAgICAgIyBzYXZlIHRoZSByZWdzIHdlIG5lZWQKKyAgICAgICAgcmVzdWx0ICs9ICIgICAgcHVzaGwgICAlZWJ4IiArICJcbiIKKyAgICAgICAgc3RhY2tfYmlhcyArPSA0CisgICAgICAgIHJlc3VsdCArPSAiICAgIHB1c2hsICAgJWVjeCIgKyAiXG4iCisgICAgICAgIHN0YWNrX2JpYXMgKz0gNAorCisgICAgICAgICMgc2V0IHRoZSBjYWxsIGlkICglZWJ4KQorICAgICAgICByZXN1bHQgKz0gIiAgICBtb3YgICAgICQlZCwgJSVlYngiICUgKGNpZCkgKyAiXG4iCisKKyAgICAgICAgIyBzZXQgdGhlIHBvaW50ZXIgdG8gdGhlIHJlc3Qgb2YgdGhlIGFyZ3MgaW50byAlZWN4CisgICAgICAgIHJlc3VsdCArPSAiICAgIG1vdiAgICAgJWVzcCwgJWVjeCIgKyAiXG4iCisgICAgICAgIHJlc3VsdCArPSAiICAgIGFkZGwgICAgJCVkLCAlJWVjeCIgJSAoc3RhY2tfYmlhcykgKyAiXG4iCisKKyAgICAgICAgIyBub3cgZG8gdGhlIHN5c2NhbGwgY29kZSBpdHNlbGYKKyAgICAgICAgcmVzdWx0ICs9IHg4Nl9jYWxsICUgdAorCisgICAgICAgICMgbm93IHJlc3RvcmUgdGhlIHNhdmVkIHJlZ3MKKyAgICAgICAgcmVzdWx0ICs9ICIgICAgcG9wbCAgICAlZWN4IiArICJcbiIKKyAgICAgICAgcmVzdWx0ICs9ICIgICAgcG9wbCAgICAlZWJ4IiArICJcbiIKKworICAgICAgICAjIGVwaWxvZworICAgICAgICByZXN1bHQgKz0geDg2X3JldHVybgorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgYXJtX2dlbnN0dWIoc2VsZixmbmFtZSwgZmxhZ3MsIGlkbmFtZSk6CisgICAgICAgIHQgPSB7ICJmbmFtZSIgIDogZm5hbWUsCisgICAgICAgICAgICAgICJpZG5hbWUiIDogaWRuYW1lIH0KKyAgICAgICAgaWYgZmxhZ3M6CisgICAgICAgICAgICBudW1hcmdzID0gaW50KGZsYWdzKQorICAgICAgICAgICAgaWYgbnVtYXJncyA+IDQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGFybV9jYWxsX2xvbmcgJSB0CisgICAgICAgIHJldHVybiBhcm1fY2FsbF9kZWZhdWx0ICUgdAorCisKKyAgICBkZWYgYXJtX2VhYmlfZ2Vuc3R1YihzZWxmLGZuYW1lLCBmbGFncywgaWRuYW1lKToKKyAgICAgICAgdCA9IHsgImZuYW1lIiAgOiBmbmFtZSwKKyAgICAgICAgICAgICAgImlkbmFtZSIgOiBpZG5hbWUgfQorICAgICAgICBpZiBmbGFnczoKKyAgICAgICAgICAgIG51bWFyZ3MgPSBpbnQoZmxhZ3MpCisgICAgICAgICAgICBpZiBudW1hcmdzID4gNDoKKyAgICAgICAgICAgICAgICByZXR1cm4gYXJtX2VhYmlfY2FsbF9sb25nICUgdAorICAgICAgICByZXR1cm4gYXJtX2VhYmlfY2FsbF9kZWZhdWx0ICUgdAorCisKKyAgICBkZWYgdGh1bWJfZ2Vuc3R1YihzZWxmLGZuYW1lLCBmbGFncywgaWRuYW1lKToKKyAgICAgICAgdCA9IHsgImZuYW1lIiAgOiBmbmFtZSwKKyAgICAgICAgICAgICAgImlkbmFtZSIgOiBpZG5hbWUgfQorICAgICAgICBpZiBmbGFnczoKKyAgICAgICAgICAgIG51bWFyZ3MgPSBpbnQoZmxhZ3MpCisgICAgICAgICAgICBpZiBudW1hcmdzID4gNDoKKyAgICAgICAgICAgICAgICByZXR1cm4gdGh1bWJfY2FsbF9sb25nICUgdAorICAgICAgICByZXR1cm4gdGh1bWJfY2FsbF9kZWZhdWx0ICUgdAorCisKKyAgICBkZWYgcHJvY2Vzc19maWxlKHNlbGYsaW5wdXQpOgorICAgICAgICBwYXJzZXIgPSBTeXNDYWxsc1R4dFBhcnNlcigpCisgICAgICAgIHBhcnNlci5wYXJzZV9maWxlKGlucHV0KQorICAgICAgICBzZWxmLnN5c2NhbGxzID0gcGFyc2VyLnN5c2NhbGxzCisgICAgICAgIHBhcnNlciA9IE5vbmUKKworICAgICAgICBmb3IgdCBpbiBzZWxmLnN5c2NhbGxzOgorICAgICAgICAgICAgc3lzY2FsbF9mdW5jICAgPSB0WyJmdW5jIl0KKyAgICAgICAgICAgIHN5c2NhbGxfcGFyYW1zID0gdFsicGFyYW1zIl0KKyAgICAgICAgICAgIHN5c2NhbGxfbmFtZSAgID0gdFsibmFtZSJdCisKKyAgICAgICAgICAgIGlmIHRbImlkIl0gPj0gMDoKKyAgICAgICAgICAgICAgICBpZiBnZW5fdGh1bWJfc3R1YnM6CisgICAgICAgICAgICAgICAgICAgIHRbImFzbS10aHVtYiJdID0gc2VsZi50aHVtYl9nZW5zdHViKHN5c2NhbGxfZnVuYyxsZW4oc3lzY2FsbF9wYXJhbXMpLCJfX05SXyIrc3lzY2FsbF9uYW1lKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGlmIGdlbl9lYWJpX3N0dWJzOgorICAgICAgICAgICAgICAgICAgICAgICAgdFsiYXNtLWFybSJdICAgPSBzZWxmLmFybV9lYWJpX2dlbnN0dWIoc3lzY2FsbF9mdW5jLGxlbihzeXNjYWxsX3BhcmFtcyksIl9fTlJfIitzeXNjYWxsX25hbWUpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICB0WyJhc20tYXJtIl0gICA9IHNlbGYuYXJtX2dlbnN0dWIoc3lzY2FsbF9mdW5jLGxlbihzeXNjYWxsX3BhcmFtcyksIl9fTlJfIitzeXNjYWxsX25hbWUpCisKKyAgICAgICAgICAgIGlmIHRbImlkMiJdID49IDA6CisgICAgICAgICAgICAgICAgaWYgdFsiY2lkIl0gPj0gMDoKKyAgICAgICAgICAgICAgICAgICAgdFsiYXNtLXg4NiJdID0gc2VsZi54ODZfZ2Vuc3R1Yl9jaWQoc3lzY2FsbF9mdW5jLCBsZW4oc3lzY2FsbF9wYXJhbXMpLCAiX19OUl8iK3N5c2NhbGxfbmFtZSwgdFsiY2lkIl0pCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgdFsiYXNtLXg4NiJdID0gc2VsZi54ODZfZ2Vuc3R1YihzeXNjYWxsX2Z1bmMsbGVuKHN5c2NhbGxfcGFyYW1zKSwiX19OUl8iK3N5c2NhbGxfbmFtZSkKKyAgICAgICAgICAgIGVsaWYgdFsiY2lkIl0gPj0gMDoKKyAgICAgICAgICAgICAgICBFKCJjaWQgZm9yIGRpc3BhdGNoIHN5c2NhbGxzIGlzIG9ubHkgc3VwcG9ydGVkIGZvciB4ODYgaW4gIgorICAgICAgICAgICAgICAgICAgIiclcyciICUgc3lzY2FsbF9uYW1lKQorICAgICAgICAgICAgICAgIHJldHVybgorCisKKyAgICBkZWYgZ2VuX05SX3N5c2NhbGwoc2VsZixmcCxuYW1lLGlkKToKKyAgICAgICAgZnAud3JpdGUoICIjZGVmaW5lIF9fTlJfJS0yNXMgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgJWQpXG4iICUgKG5hbWUsaWQpICkKKworICAgICMgbm93IGR1bXAgdGhlIGNvbnRlbnQgb2YgbGludXgvX3N5c2NhbGxzLmgKKyAgICBkZWYgZ2VuX2xpbnV4X3N5c2NhbGxzX2goc2VsZik6CisgICAgICAgIHBhdGggPSAiaW5jbHVkZS9zeXMvbGludXgtc3lzY2FsbHMuaCIKKyAgICAgICAgRCggImdlbmVyYXRpbmcgIitwYXRoICkKKyAgICAgICAgZnAgPSBjcmVhdGVfZmlsZSggcGF0aCApCisgICAgICAgIGZwLndyaXRlKCAiLyogYXV0by1nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHksIGRvIG5vdCB0b3VjaCAqL1xuIiApCisgICAgICAgIGZwLndyaXRlKCAiI2lmbmRlZiBfQklPTklDX0xJTlVYX1NZU0NBTExTX0hfXG5cbiIgKQorICAgICAgICBmcC53cml0ZSggIiNpZiAhZGVmaW5lZCBfX0FTTV9BUk1fVU5JU1REX0ggJiYgIWRlZmluZWQgX19BU01fSTM4Nl9VTklTVERfSFxuIiApCisgICAgICAgIGZwLndyaXRlKCAiI2lmIGRlZmluZWQgX19hcm1fXyAmJiAhZGVmaW5lZCBfX0FSTV9FQUJJX18gJiYgIWRlZmluZWQgX190aHVtYl9fXG4iICkKKyAgICAgICAgZnAud3JpdGUoICIgICMgIGRlZmluZSBfX05SX1NZU0NBTExfQkFTRSAgMHg5MDAwMDBcbiIgKQorICAgICAgICBmcC53cml0ZSggIiAgI2Vsc2VcbiIgKQorICAgICAgICBmcC53cml0ZSggIiAgIyAgZGVmaW5lICBfX05SX1NZU0NBTExfQkFTRSAgMFxuIiApCisgICAgICAgIGZwLndyaXRlKCAiICAjZW5kaWZcblxuIiApCisKKyAgICAgICAgIyBmaXJzdCwgYWxsIGNvbW1vbiBzeXNjYWxscworICAgICAgICBmb3Igc2MgaW4gc2VsZi5zeXNjYWxsczoKKyAgICAgICAgICAgIHNjX2lkICA9IHNjWyJpZCJdCisgICAgICAgICAgICBzY19pZDIgPSBzY1siaWQyIl0KKyAgICAgICAgICAgIHNjX25hbWUgPSBzY1sibmFtZSJdCisgICAgICAgICAgICBpZiBzY19pZCA9PSBzY19pZDIgYW5kIHNjX2lkID49IDA6CisgICAgICAgICAgICAgICAgc2VsZi5nZW5fTlJfc3lzY2FsbCggZnAsIHNjX25hbWUsIHNjX2lkICkKKworICAgICAgICAjIG5vdywgYWxsIGFybS1zcGVjaWZpYyBzeXNjYWxscworICAgICAgICBmcC53cml0ZSggIlxuI2lmZGVmIF9fYXJtX19cbiIgKTsKKyAgICAgICAgZm9yIHNjIGluIHNlbGYuc3lzY2FsbHM6CisgICAgICAgICAgICBzY19pZCAgPSBzY1siaWQiXQorICAgICAgICAgICAgc2NfaWQyID0gc2NbImlkMiJdCisgICAgICAgICAgICBzY19uYW1lID0gc2NbIm5hbWUiXQorICAgICAgICAgICAgaWYgc2NfaWQgIT0gc2NfaWQyIGFuZCBzY19pZCA+PSAwOgorICAgICAgICAgICAgICAgIHNlbGYuZ2VuX05SX3N5c2NhbGwoIGZwLCBzY19uYW1lLCBzY19pZCApCisgICAgICAgIGZwLndyaXRlKCAiI2VuZGlmXG4iICk7CisKKyAgICAgICAgZ2VuX3N5c2NhbGxzID0ge30KKyAgICAgICAgIyBmaW5hbGx5LCBhbGwgaTM4Ni1zcGVjaWZpYyBzeXNjYWxscworICAgICAgICBmcC53cml0ZSggIlxuI2lmZGVmIF9faTM4Nl9fXG4iICk7CisgICAgICAgIGZvciBzYyBpbiBzZWxmLnN5c2NhbGxzOgorICAgICAgICAgICAgc2NfaWQgID0gc2NbImlkIl0KKyAgICAgICAgICAgIHNjX2lkMiA9IHNjWyJpZDIiXQorICAgICAgICAgICAgc2NfbmFtZSA9IHNjWyJuYW1lIl0KKyAgICAgICAgICAgIGlmIHNjX2lkICE9IHNjX2lkMiBhbmQgc2NfaWQyID49IDAgYW5kIHNjX25hbWUgbm90IGluIGdlbl9zeXNjYWxsczoKKyAgICAgICAgICAgICAgICBzZWxmLmdlbl9OUl9zeXNjYWxsKCBmcCwgc2NfbmFtZSwgc2NfaWQyICkKKyAgICAgICAgICAgICAgICBnZW5fc3lzY2FsbHNbc2NfbmFtZV0gPSBUcnVlCisgICAgICAgIGZwLndyaXRlKCAiI2VuZGlmXG4iICk7CisKKyAgICAgICAgZnAud3JpdGUoICJcbiNlbmRpZlxuIiApCisgICAgICAgIGZwLndyaXRlKCAiXG4jZW5kaWYgLyogX0JJT05JQ19MSU5VWF9TWVNDQUxMU19IXyAqL1xuIiApOworICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgIHNlbGYub3RoZXJfZmlsZXMuYXBwZW5kKCBwYXRoICkKKworCisgICAgIyBub3cgZHVtcCB0aGUgY29udGVudCBvZiBsaW51eC9fc3lzY2FsbHMuaAorICAgIGRlZiBnZW5fbGludXhfdW5pc3RkX2goc2VsZik6CisgICAgICAgIHBhdGggPSAiaW5jbHVkZS9zeXMvbGludXgtdW5pc3RkLmgiCisgICAgICAgIEQoICJnZW5lcmF0aW5nICIrcGF0aCApCisgICAgICAgIGZwID0gY3JlYXRlX2ZpbGUoIHBhdGggKQorICAgICAgICBmcC53cml0ZSggIi8qIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LCBkbyBub3QgdG91Y2ggKi9cbiIgKQorICAgICAgICBmcC53cml0ZSggIiNpZm5kZWYgX0JJT05JQ19MSU5VWF9VTklTVERfSF9cblxuIiApOworICAgICAgICBmcC53cml0ZSggIiNpZmRlZiBfX2NwbHVzcGx1c1xuZXh0ZXJuIFwiQ1wiIHtcbiNlbmRpZlxuXG4iICkKKworICAgICAgICBmb3Igc2MgaW4gc2VsZi5zeXNjYWxsczoKKyAgICAgICAgICAgIGZwLndyaXRlKCBzY1siZGVjbCJdKyJcbiIgKQorCisgICAgICAgIGZwLndyaXRlKCAiI2lmZGVmIF9fY3BsdXNwbHVzXG59XG4jZW5kaWZcbiIgKQorICAgICAgICBmcC53cml0ZSggIlxuI2VuZGlmIC8qIF9CSU9OSUNfTElOVVhfVU5JU1REX0hfICovXG4iICk7CisgICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgc2VsZi5vdGhlcl9maWxlcy5hcHBlbmQoIHBhdGggKQorCisgICAgIyBub3cgZHVtcCB0aGUgY29udGVudHMgb2Ygc3lzY2FsbHMubWsKKyAgICBkZWYgZ2VuX2FyY2hfc3lzY2FsbHNfbWsoc2VsZiwgYXJjaCk6CisgICAgICAgIHBhdGggPSAiYXJjaC0lcy9zeXNjYWxscy5tayIgJSBhcmNoCisgICAgICAgIEQoICJnZW5lcmF0aW5nICIrcGF0aCApCisgICAgICAgIGZwID0gY3JlYXRlX2ZpbGUoIHBhdGggKQorICAgICAgICBmcC53cml0ZSggIiMgYXV0by1nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHksIGRvIG5vdCB0b3VjaFxuIiApCisgICAgICAgIGZwLndyaXRlKCAic3lzY2FsbF9zcmMgOj0gXG4iICkKKyAgICAgICAgYXJjaF90ZXN0ID0geworICAgICAgICAgICAgImFybSI6IGxhbWJkYSB4OiB4Lmhhc19rZXkoImFzbS1hcm0iKSBvciB4Lmhhc19rZXkoImFzbS10aHVtYiIpLAorICAgICAgICAgICAgIng4NiI6IGxhbWJkYSB4OiB4Lmhhc19rZXkoImFzbS14ODYiKQorICAgICAgICB9CisKKyAgICAgICAgZm9yIHNjIGluIHNlbGYuc3lzY2FsbHM6CisgICAgICAgICAgICBpZiBhcmNoX3Rlc3RbYXJjaF0oc2MpOgorICAgICAgICAgICAgICAgIGZwLndyaXRlKCJzeXNjYWxsX3NyYyArPSBhcmNoLSVzL3N5c2NhbGxzLyVzLlNcbiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgIChhcmNoLCBzY1siZnVuYyJdKSkKKyAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICBzZWxmLm90aGVyX2ZpbGVzLmFwcGVuZCggcGF0aCApCisKKyAgICAjIG5vdyBnZW5lcmF0ZSBlYWNoIHN5c2NhbGwgc3R1YgorICAgIGRlZiBnZW5fc3lzY2FsbF9zdHVicyhzZWxmKToKKyAgICAgICAgZm9yIHNjIGluIHNlbGYuc3lzY2FsbHM6CisgICAgICAgICAgICBpZiBzYy5oYXNfa2V5KCJhc20tYXJtIikgYW5kICdhcm0nIGluIGFsbF9hcmNoczoKKyAgICAgICAgICAgICAgICBmbmFtZSA9ICJhcmNoLWFybS9zeXNjYWxscy8lcy5TIiAlIHNjWyJmdW5jIl0KKyAgICAgICAgICAgICAgICBEKCAiPj4+IGdlbmVyYXRpbmcgIitmbmFtZSApCisgICAgICAgICAgICAgICAgZnAgPSBjcmVhdGVfZmlsZSggZm5hbWUgKQorICAgICAgICAgICAgICAgIGZwLndyaXRlKHNjWyJhc20tYXJtIl0pCisgICAgICAgICAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICAgICAgICAgIHNlbGYubmV3X3N0dWJzLmFwcGVuZCggZm5hbWUgKQorCisgICAgICAgICAgICBpZiBzYy5oYXNfa2V5KCJhc20tdGh1bWIiKSBhbmQgJ2FybScgaW4gYWxsX2FyY2hzOgorICAgICAgICAgICAgICAgIGZuYW1lID0gImFyY2gtYXJtL3N5c2NhbGxzLyVzLlMiICUgc2NbImZ1bmMiXQorICAgICAgICAgICAgICAgIEQoICI+Pj4gZ2VuZXJhdGluZyAiK2ZuYW1lICkKKyAgICAgICAgICAgICAgICBmcCA9IGNyZWF0ZV9maWxlKCBmbmFtZSApCisgICAgICAgICAgICAgICAgZnAud3JpdGUoc2NbImFzbS10aHVtYiJdKQorICAgICAgICAgICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBzZWxmLm5ld19zdHVicy5hcHBlbmQoIGZuYW1lICkKKworICAgICAgICAgICAgaWYgc2MuaGFzX2tleSgiYXNtLXg4NiIpIGFuZCAneDg2JyBpbiBhbGxfYXJjaHM6CisgICAgICAgICAgICAgICAgZm5hbWUgPSAiYXJjaC14ODYvc3lzY2FsbHMvJXMuUyIgJSBzY1siZnVuYyJdCisgICAgICAgICAgICAgICAgRCggIj4+PiBnZW5lcmF0aW5nICIrZm5hbWUgKQorICAgICAgICAgICAgICAgIGZwID0gY3JlYXRlX2ZpbGUoIGZuYW1lICkKKyAgICAgICAgICAgICAgICBmcC53cml0ZShzY1siYXNtLXg4NiJdKQorICAgICAgICAgICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBzZWxmLm5ld19zdHVicy5hcHBlbmQoIGZuYW1lICkKKworCisgICAgZGVmICByZWdlbmVyYXRlKHNlbGYpOgorICAgICAgICBEKCAic2Nhbm5pbmcgZm9yIGV4aXN0aW5nIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBzdHViIGZpbGVzIiApCisKKyAgICAgICAgYmlvbmljX3Jvb3RfbGVuID0gbGVuKGJpb25pY19yb290KQorCisgICAgICAgIGZvciBhcmNoIGluIGFsbF9hcmNoczoKKyAgICAgICAgICAgIGFyY2hfcGF0aCA9IGJpb25pY19yb290ICsgImFyY2gtIiArIGFyY2gKKyAgICAgICAgICAgIEQoICJzY2FubmluZyAiICsgYXJjaF9wYXRoICkKKyAgICAgICAgICAgIGZpbGVzID0gZ2xvYi5nbG9iKCBhcmNoX3BhdGggKyAiL3N5c2NhbGxzLyouUyIgKQorICAgICAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgc2VsZi5vbGRfc3R1YnMuYXBwZW5kKCBmW2Jpb25pY19yb290X2xlbjpdICkKKworICAgICAgICBEKCAiZm91bmQgJWQgc3R1YiBmaWxlcyIgJSBsZW4oc2VsZi5vbGRfc3R1YnMpICkKKworICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoIGJpb25pY190ZW1wICk6CisgICAgICAgICAgICBEKCAiY3JlYXRpbmcgJXMiICUgYmlvbmljX3RlbXAgKQorICAgICAgICAgICAgb3MubWtkaXIoIGJpb25pY190ZW1wICkKKworIyAgICAgICAgRCggInA0IGVkaXRpbmcgc291cmNlIGZpbGVzIiApCisjICAgICAgICBmb3IgYXJjaCBpbiBhbGxfYXJjaHM6CisjICAgICAgICAgICAgY29tbWFuZHMuZ2V0b3V0cHV0KCAicDQgZWRpdCAiICsgYXJjaCArICIvc3lzY2FsbHMvKi5TICIgKQorIyAgICAgICAgICAgIGNvbW1hbmRzLmdldG91dHB1dCggInA0IGVkaXQgIiArIGFyY2ggKyAiL3N5c2NhbGxzLm1rIiApCisjICAgICAgICBjb21tYW5kcy5nZXRvdXRwdXQoICJwNCBlZGl0ICIgKyBiaW9uaWNfcm9vdCArICJpbmNsdWRlL3N5cy9saW51eC1zeXNjYWxscy5oIiApCisKKyAgICAgICAgRCggInJlLWdlbmVyYXRpbmcgc3R1YnMgYW5kIHN1cHBvcnQgZmlsZXMiICkKKworICAgICAgICBzZWxmLmdlbl9saW51eF9zeXNjYWxsc19oKCkKKyAgICAgICAgZm9yIGFyY2ggaW4gYWxsX2FyY2hzOgorICAgICAgICAgICAgc2VsZi5nZW5fYXJjaF9zeXNjYWxsc19tayhhcmNoKQorICAgICAgICBzZWxmLmdlbl9saW51eF91bmlzdGRfaCgpCisgICAgICAgIHNlbGYuZ2VuX3N5c2NhbGxfc3R1YnMoKQorCisgICAgICAgIEQoICJjb21wYXJpbmcgZmlsZXMiICkKKyAgICAgICAgYWRkcyAgICA9IFtdCisgICAgICAgIGVkaXRzICAgPSBbXQorCisgICAgICAgIGZvciBzdHViIGluIHNlbGYubmV3X3N0dWJzICsgc2VsZi5vdGhlcl9maWxlczoKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyggYmlvbmljX3Jvb3QgKyBzdHViICk6CisgICAgICAgICAgICAgICAgIyBuZXcgZmlsZSwgUDQgYWRkIGl0CisgICAgICAgICAgICAgICAgRCggIm5ldyBmaWxlOiAgICAgIiArIHN0dWIpCisgICAgICAgICAgICAgICAgYWRkcy5hcHBlbmQoIGJpb25pY19yb290ICsgc3R1YiApCisgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKCBiaW9uaWNfdGVtcCArIHN0dWIsIGJpb25pY19yb290ICsgc3R1YiApCisKKyAgICAgICAgICAgIGVsaWYgbm90IGZpbGVjbXAuY21wKCBiaW9uaWNfdGVtcCArIHN0dWIsIGJpb25pY19yb290ICsgc3R1YiApOgorICAgICAgICAgICAgICAgIEQoICJjaGFuZ2VkIGZpbGU6ICIgKyBzdHViKQorICAgICAgICAgICAgICAgIGVkaXRzLmFwcGVuZCggc3R1YiApCisKKyAgICAgICAgZGVsZXRlcyA9IFtdCisgICAgICAgIGZvciBzdHViIGluIHNlbGYub2xkX3N0dWJzOgorICAgICAgICAgICAgaWYgbm90IHN0dWIgaW4gc2VsZi5uZXdfc3R1YnM6CisgICAgICAgICAgICAgICAgRCggImRlbGV0ZWQgZmlsZTogIiArIHN0dWIpCisgICAgICAgICAgICAgICAgZGVsZXRlcy5hcHBlbmQoIGJpb25pY19yb290ICsgc3R1YiApCisKKworICAgICAgICBpZiBhZGRzOgorICAgICAgICAgICAgY29tbWFuZHMuZ2V0b3V0cHV0KCJwNCBhZGQgIiArICIgIi5qb2luKGFkZHMpKQorICAgICAgICBpZiBkZWxldGVzOgorICAgICAgICAgICAgY29tbWFuZHMuZ2V0b3V0cHV0KCJwNCBkZWxldGUgIiArICIgIi5qb2luKGRlbGV0ZXMpKQorICAgICAgICBpZiBlZGl0czoKKyAgICAgICAgICAgIGNvbW1hbmRzLmdldG91dHB1dCgicDQgZWRpdCAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICIuam9pbigoYmlvbmljX3Jvb3QgKyBmaWxlKSBmb3IgZmlsZSBpbiBlZGl0cykpCisgICAgICAgICAgICBmb3IgZmlsZSBpbiBlZGl0czoKKyAgICAgICAgICAgICAgICBzaHV0aWwuY29weWZpbGUoIGJpb25pY190ZW1wICsgZmlsZSwgYmlvbmljX3Jvb3QgKyBmaWxlICkKKworICAgICAgICBEKCJyZWFkeSB0byBnbyAhISIpCisKK0Rfc2V0bGV2ZWwoMSkKKworc3RhdGUgPSBTdGF0ZSgpCitzdGF0ZS5wcm9jZXNzX2ZpbGUoYmlvbmljX3Jvb3QrIlNZU0NBTExTLlRYVCIpCitzdGF0ZS5yZWdlbmVyYXRlKCkKZGlmZiAtLWdpdCBhL2xpYmMvdHpjb2RlL2FzY3RpbWUuYyBiL2xpYmMvdHpjb2RlL2FzY3RpbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDgwNGYxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy90emNvZGUvYXNjdGltZS5jCkBAIC0wLDAgKzEsMTM4IEBACisvKgorKiogVGhpcyBmaWxlIGlzIGluIHRoZSBwdWJsaWMgZG9tYWluLCBzbyBjbGFyaWZpZWQgYXMgb2YKKyoqIDE5OTYtMDYtMDUgYnkgQXJ0aHVyIERhdmlkIE9sc29uLgorKi8KKworLyoKKyoqIEF2b2lkIHRoZSB0ZW1wdGF0aW9uIHRvIHB1bnQgZW50aXJlbHkgdG8gc3RyZnRpbWU7CisqKiB0aGUgb3V0cHV0IG9mIHN0cmZ0aW1lIGlzIHN1cHBvc2VkIHRvIGJlIGxvY2FsZSBzcGVjaWZpYworKiogd2hlcmVhcyB0aGUgb3V0cHV0IG9mIGFzY3RpbWUgaXMgc3VwcG9zZWQgdG8gYmUgY29uc3RhbnQuCisqLworCisjaWZuZGVmIGxpbnQKKyNpZm5kZWYgTk9JRAorc3RhdGljIGNoYXIJZWxzaWVpZFtdID0gIkAoIylhc2N0aW1lLmMJOC4yIjsKKyNlbmRpZiAvKiAhZGVmaW5lZCBOT0lEICovCisjZW5kaWYgLyogIWRlZmluZWQgbGludCAqLworCisvKkxJTlRMSUJSQVJZKi8KKworI2luY2x1ZGUgInByaXZhdGUuaCIKKyNpbmNsdWRlICJ0emZpbGUuaCIKKworLyoKKyoqIFNvbWUgc3lzdGVtcyBvbmx5IGhhbmRsZSAiJS4yZCI7IG90aGVycyBvbmx5IGhhbmRsZSAiJTAyZCI7CisqKiAiJTAyLjJkIiBtYWtlcyAobW9zdCkgZXZlcnlib2R5IGhhcHB5LgorKiogQXQgbGVhc3Qgc29tZSB2ZXJzaW9ucyBvZiBnY2Mgd2FybiBhYm91dCB0aGUgJTAyLjJkOworKiogd2UgY29uZGl0aW9uYWxpemUgYmVsb3cgdG8gYXZvaWQgdGhlIHdhcm5pbmcuCisqLworLyoKKyoqIEFsbCB5ZWFycyBhc3NvY2lhdGVkIHdpdGggMzItYml0IHRpbWVfdCB2YWx1ZXMgYXJlIGV4YWN0bHkgZm91ciBkaWdpdHMgbG9uZzsKKyoqIHNvbWUgeWVhcnMgYXNzb2NpYXRlZCB3aXRoIDY0LWJpdCB0aW1lX3QgdmFsdWVzIGFyZSBub3QuCisqKiBWaW50YWdlIHByb2dyYW1zIGFyZSBjb2RlZCBmb3IgeWVhcnMgdGhhdCBhcmUgYWx3YXlzIGZvdXIgZGlnaXRzIGxvbmcKKyoqIGFuZCBtYXkgYXNzdW1lIHRoYXQgdGhlIG5ld2xpbmUgYWx3YXlzIGxhbmRzIGluIHRoZSBzYW1lIHBsYWNlLgorKiogRm9yIHllYXJzIHRoYXQgYXJlIGxlc3MgdGhhbiBmb3VyIGRpZ2l0cywgd2UgcGFkIHRoZSBvdXRwdXQgd2l0aAorKiogbGVhZGluZyB6ZXJvZXMgdG8gZ2V0IHRoZSBuZXdsaW5lIGluIHRoZSB0cmFkaXRpb25hbCBwbGFjZS4KKyoqIFRoZSAtNCBlbnN1cmVzIHRoYXQgd2UgZ2V0IGZvdXIgY2hhcmFjdGVycyBvZiBvdXRwdXQgZXZlbiBpZgorKiogd2UgY2FsbCBhIHN0cmZ0aW1lIHZhcmlhbnQgdGhhdCBwcm9kdWNlcyBmZXdlciBjaGFyYWN0ZXJzIGZvciBzb21lIHllYXJzLgorKiogVGhlIElTTyBDIDE5OTkgYW5kIFBPU0lYIDEwMDMuMS0yMDA0IHN0YW5kYXJkcyBwcm9oaWJpdCBwYWRkaW5nIHRoZSB5ZWFyLAorKiogYnV0IG1hbnkgaW1wbGVtZW50YXRpb25zIHBhZCBhbnl3YXk7IG1vc3QgbGlrZWx5IHRoZSBzdGFuZGFyZHMgYXJlIGJ1Z2d5LgorKi8KKyNpZmRlZiBfX0dOVUNfXworI2RlZmluZSBBU0NUSU1FX0ZNVAkiJS4zcyAlLjNzJTNkICUyLjJkOiUyLjJkOiUyLjJkICUtNHNcbiIKKyNlbHNlIC8qICFkZWZpbmVkIF9fR05VQ19fICovCisjZGVmaW5lIEFTQ1RJTUVfRk1UCSIlLjNzICUuM3MlM2QgJTAyLjJkOiUwMi4yZDolMDIuMmQgJS00c1xuIgorI2VuZGlmIC8qICFkZWZpbmVkIF9fR05VQ19fICovCisvKgorKiogRm9yIHllYXJzIHRoYXQgYXJlIG1vcmUgdGhhbiBmb3VyIGRpZ2l0cyB3ZSBwdXQgZXh0cmEgc3BhY2VzIGJlZm9yZSB0aGUgeWVhcgorKiogc28gdGhhdCBjb2RlIHRyeWluZyB0byBvdmVyd3JpdGUgdGhlIG5ld2xpbmUgd29uJ3QgZW5kIHVwIG92ZXJ3cml0aW5nCisqKiBhIGRpZ2l0IHdpdGhpbiBhIHllYXIgYW5kIHRydW5jYXRpbmcgdGhlIHllYXIgKG9wZXJhdGluZyBvbiB0aGUgYXNzdW1wdGlvbgorKiogdGhhdCBubyBvdXRwdXQgaXMgYmV0dGVyIHRoYW4gd3Jvbmcgb3V0cHV0KS4KKyovCisjaWZkZWYgX19HTlVDX18KKyNkZWZpbmUgQVNDVElNRV9GTVRfQgkiJS4zcyAlLjNzJTNkICUyLjJkOiUyLjJkOiUyLjJkICAgICAlc1xuIgorI2Vsc2UgLyogIWRlZmluZWQgX19HTlVDX18gKi8KKyNkZWZpbmUgQVNDVElNRV9GTVRfQgkiJS4zcyAlLjNzJTNkICUwMi4yZDolMDIuMmQ6JTAyLjJkICAgICAlc1xuIgorI2VuZGlmIC8qICFkZWZpbmVkIF9fR05VQ19fICovCisKKyNkZWZpbmUgU1REX0FTQ1RJTUVfQlVGX1NJWkUJMjYKKy8qCisqKiBCaWcgZW5vdWdoIGZvciBzb21ldGhpbmcgc3VjaCBhcworKiogPz8/ID8/Py0yMTQ3NDgzNjQ4IC0yMTQ3NDgzNjQ4Oi0yMTQ3NDgzNjQ4Oi0yMTQ3NDgzNjQ4ICAgICAtMjE0NzQ4MzY0OFxuCisqKiAodHdvIHRocmVlLWNoYXJhY3RlciBhYmJyZXZpYXRpb25zLCBmaXZlIHN0cmluZ3MgZGVub3RpbmcgaW50ZWdlcnMsCisqKiBzZXZlbiBleHBsaWNpdCBzcGFjZXMsIHR3byBleHBsaWNpdCBjb2xvbnMsIGEgbmV3bGluZSwKKyoqIGFuZCBhIHRyYWlsaW5nIEFTQ0lJIG51bCkuCisqKiBUaGUgdmFsdWVzIGFib3ZlIGFyZSBmb3Igc3lzdGVtcyB3aGVyZSBhbiBpbnQgaXMgMzIgYml0cyBhbmQgYXJlIHByb3ZpZGVkCisqKiBhcyBhbiBleGFtcGxlOyB0aGUgZGVmaW5lIGJlbG93IGNhbGN1bGF0ZXMgdGhlIG1heGltdW0gZm9yIHRoZSBzeXN0ZW0gYXQKKyoqIGhhbmQuCisqLworI2RlZmluZSBNQVhfQVNDVElNRV9CVUZfU0laRQkoMiozKzUqSU5UX1NUUkxFTl9NQVhJTVVNKGludCkrNysyKzErMSkKKworc3RhdGljIGNoYXIJYnVmX2FzY3RpbWVbTUFYX0FTQ1RJTUVfQlVGX1NJWkVdOworCisvKgorKiogQSBsYSBJU08vSUVDIDk5NDUtMSwgQU5TSS9JRUVFIFN0ZCAxMDAzLjEsIDIwMDQgRWRpdGlvbi4KKyovCisKK2NoYXIgKgorYXNjdGltZV9yKHRpbWVwdHIsIGJ1ZikKK3JlZ2lzdGVyIGNvbnN0IHN0cnVjdCB0bSAqCXRpbWVwdHI7CitjaGFyICoJCQkJYnVmOworeworCXN0YXRpYyBjb25zdCBjaGFyCXdkYXlfbmFtZVtdWzNdID0geworCQkiU3VuIiwgIk1vbiIsICJUdWUiLCAiV2VkIiwgIlRodSIsICJGcmkiLCAiU2F0IgorCX07CisJc3RhdGljIGNvbnN0IGNoYXIJbW9uX25hbWVbXVszXSA9IHsKKwkJIkphbiIsICJGZWIiLCAiTWFyIiwgIkFwciIsICJNYXkiLCAiSnVuIiwKKwkJIkp1bCIsICJBdWciLCAiU2VwIiwgIk9jdCIsICJOb3YiLCAiRGVjIgorCX07CisJcmVnaXN0ZXIgY29uc3QgY2hhciAqCXduOworCXJlZ2lzdGVyIGNvbnN0IGNoYXIgKgltbjsKKwljaGFyCQkJeWVhcltJTlRfU1RSTEVOX01BWElNVU0oaW50KSArIDJdOworCWNoYXIJCQlyZXN1bHRbTUFYX0FTQ1RJTUVfQlVGX1NJWkVdOworCisJaWYgKHRpbWVwdHItPnRtX3dkYXkgPCAwIHx8IHRpbWVwdHItPnRtX3dkYXkgPj0gREFZU1BFUldFRUspCisJCXduID0gIj8/PyI7CisJZWxzZQl3biA9IHdkYXlfbmFtZVt0aW1lcHRyLT50bV93ZGF5XTsKKwlpZiAodGltZXB0ci0+dG1fbW9uIDwgMCB8fCB0aW1lcHRyLT50bV9tb24gPj0gTU9OU1BFUllFQVIpCisJCW1uID0gIj8/PyI7CisJZWxzZQltbiA9IG1vbl9uYW1lW3RpbWVwdHItPnRtX21vbl07CisJLyoKKwkqKiBVc2Ugc3RyZnRpbWUncyAlWSB0byBnZW5lcmF0ZSB0aGUgeWVhciwgdG8gYXZvaWQgb3ZlcmZsb3cgcHJvYmxlbXMKKwkqKiB3aGVuIGNvbXB1dGluZyB0aW1lcHRyLT50bV95ZWFyICsgVE1fWUVBUl9CQVNFLgorCSoqIEFzc3VtZSB0aGF0IHN0cmZ0aW1lIGlzIHVuYWZmZWN0ZWQgYnkgb3RoZXIgb3V0LW9mLXJhbmdlIG1lbWJlcnMKKwkqKiAoZS5nLiwgdGltZXB0ci0+dG1fbWRheSkgd2hlbiBwcm9jZXNzaW5nICIlWSIuCisJKi8KKwkodm9pZCkgc3RyZnRpbWUoeWVhciwgc2l6ZW9mIHllYXIsICIlWSIsIHRpbWVwdHIpOworCS8qCisJKiogV2UgYXZvaWQgdXNpbmcgc25wcmludGYgc2luY2UgaXQncyBub3QgYXZhaWxhYmxlIG9uIGFsbCBzeXN0ZW1zLgorCSovCisJKHZvaWQpIHNwcmludGYocmVzdWx0LAorCQkoKHN0cmxlbih5ZWFyKSA8PSA0KSA/IEFTQ1RJTUVfRk1UIDogQVNDVElNRV9GTVRfQiksCisJCXduLCBtbiwKKwkJdGltZXB0ci0+dG1fbWRheSwgdGltZXB0ci0+dG1faG91ciwKKwkJdGltZXB0ci0+dG1fbWluLCB0aW1lcHRyLT50bV9zZWMsCisJCXllYXIpOworCWlmIChzdHJsZW4ocmVzdWx0KSA8IFNURF9BU0NUSU1FX0JVRl9TSVpFIHx8IGJ1ZiA9PSBidWZfYXNjdGltZSkgeworCQkodm9pZCkgc3RyY3B5KGJ1ZiwgcmVzdWx0KTsKKwkJcmV0dXJuIGJ1ZjsKKwl9IGVsc2UgeworI2lmZGVmIEVPVkVSRkxPVworCQllcnJubyA9IEVPVkVSRkxPVzsKKyNlbHNlIC8qICFkZWZpbmVkIEVPVkVSRkxPVyAqLworCQllcnJubyA9IEVJTlZBTDsKKyNlbmRpZiAvKiAhZGVmaW5lZCBFT1ZFUkZMT1cgKi8KKwkJcmV0dXJuIE5VTEw7CisJfQorfQorCisvKgorKiogQSBsYSBJU08vSUVDIDk5NDUtMSwgQU5TSS9JRUVFIFN0ZCAxMDAzLjEsIDIwMDQgRWRpdGlvbi4KKyovCisKK2NoYXIgKgorYXNjdGltZSh0aW1lcHRyKQorcmVnaXN0ZXIgY29uc3Qgc3RydWN0IHRtICoJdGltZXB0cjsKK3sKKwlyZXR1cm4gYXNjdGltZV9yKHRpbWVwdHIsIGJ1Zl9hc2N0aW1lKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdHpjb2RlL2RpZmZ0aW1lLmMgYi9saWJjL3R6Y29kZS9kaWZmdGltZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNzc5NzcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3R6Y29kZS9kaWZmdGltZS5jCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisqKiBUaGlzIGZpbGUgaXMgaW4gdGhlIHB1YmxpYyBkb21haW4sIHNvIGNsYXJpZmllZCBhcyBvZgorKiogMTk5Ni0wNi0wNSBieSBBcnRodXIgRGF2aWQgT2xzb24uCisqLworCisjaWZuZGVmIGxpbnQKKyNpZm5kZWYgTk9JRAorc3RhdGljIGNoYXIJZWxzaWVpZFtdID0gIkAoIylkaWZmdGltZS5jCTguMSI7CisjZW5kaWYgLyogIWRlZmluZWQgTk9JRCAqLworI2VuZGlmIC8qICFkZWZpbmVkIGxpbnQgKi8KKworLypMSU5UTElCUkFSWSovCisKKyNpbmNsdWRlICJwcml2YXRlLmgiCS8qIGZvciB0aW1lX3QsIFRZUEVfSU5URUdSQUwsIGFuZCBUWVBFX1NJR05FRCAqLworCitkb3VibGUKK2RpZmZ0aW1lKHRpbWUxLCB0aW1lMCkKK2NvbnN0IHRpbWVfdAl0aW1lMTsKK2NvbnN0IHRpbWVfdAl0aW1lMDsKK3sKKwkvKgorCSoqIElmIChzaXplb2YgKGRvdWJsZSkgPiBzaXplb2YgKHRpbWVfdCkpIHNpbXBseSBjb252ZXJ0IGFuZCBzdWJ0cmFjdAorCSoqIChhc3N1bWluZyB0aGF0IHRoZSBsYXJnZXIgdHlwZSBoYXMgbW9yZSBwcmVjaXNpb24pLgorCSoqIFRoaXMgaXMgdGhlIGNvbW1vbiByZWFsLXdvcmxkIGNhc2UgY2lyY2EgMjAwNC4KKwkqLworCWlmIChzaXplb2YgKGRvdWJsZSkgPiBzaXplb2YgKHRpbWVfdCkpCisJCXJldHVybiAoZG91YmxlKSB0aW1lMSAtIChkb3VibGUpIHRpbWUwOworCWlmICghVFlQRV9JTlRFR1JBTCh0aW1lX3QpKSB7CisJCS8qCisJCSoqIHRpbWVfdCBpcyBmbG9hdGluZy4KKwkJKi8KKwkJcmV0dXJuIHRpbWUxIC0gdGltZTA7CisJfQorCWlmICghVFlQRV9TSUdORUQodGltZV90KSkgeworCQkvKgorCQkqKiB0aW1lX3QgaXMgaW50ZWdyYWwgYW5kIHVuc2lnbmVkLgorCQkqKiBUaGUgZGlmZmVyZW5jZSBvZiB0d28gdW5zaWduZWQgdmFsdWVzIGNhbid0IG92ZXJmbG93CisJCSoqIGlmIHRoZSBtaW51ZW5kIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgc3VidHJhaGVuZC4KKwkJKi8KKwkJaWYgKHRpbWUxID49IHRpbWUwKQorCQkJcmV0dXJuIHRpbWUxIC0gdGltZTA7CisJCWVsc2UJcmV0dXJuIC0oKGRvdWJsZSkgKHRpbWUwIC0gdGltZTEpKTsKKwl9CisJLyoKKwkqKiB0aW1lX3QgaXMgaW50ZWdyYWwgYW5kIHNpZ25lZC4KKwkqKiBIYW5kbGUgY2FzZXMgd2hlcmUgYm90aCB0aW1lMSBhbmQgdGltZTAgaGF2ZSB0aGUgc2FtZSBzaWduCisJKiogKG1lYW5pbmcgdGhhdCB0aGVpciBkaWZmZXJlbmNlIGNhbm5vdCBvdmVyZmxvdykuCisJKi8KKwlpZiAoKHRpbWUxIDwgMCkgPT0gKHRpbWUwIDwgMCkpCisJCXJldHVybiB0aW1lMSAtIHRpbWUwOworCS8qCisJKiogdGltZTEgYW5kIHRpbWUwIGhhdmUgb3Bwb3NpdGUgc2lnbnMuCisJKiogUHVudCBpZiB1bnNpZ25lZCBsb25nIGlzIHRvbyBuYXJyb3cuCisJKi8KKwlpZiAoc2l6ZW9mICh1bnNpZ25lZCBsb25nKSA8IHNpemVvZiAodGltZV90KSkKKwkJcmV0dXJuIChkb3VibGUpIHRpbWUxIC0gKGRvdWJsZSkgdGltZTA7CisJLyoKKwkqKiBTdGF5IGNhbG0uLi5kZWNlbnQgb3B0aW1pemVycyB3aWxsIGVsaW1pbmF0ZSB0aGUgY29tcGxleGl0eSBiZWxvdy4KKwkqLworCWlmICh0aW1lMSA+PSAwIC8qICYmIHRpbWUwIDwgMCAqLykKKwkJcmV0dXJuICh1bnNpZ25lZCBsb25nKSB0aW1lMSArCisJCQkodW5zaWduZWQgbG9uZykgKC0odGltZTAgKyAxKSkgKyAxOworCXJldHVybiAtKGRvdWJsZSkgKCh1bnNpZ25lZCBsb25nKSB0aW1lMCArCisJCSh1bnNpZ25lZCBsb25nKSAoLSh0aW1lMSArIDEpKSArIDEpOworfQpkaWZmIC0tZ2l0IGEvbGliYy90emNvZGUvbG9jYWx0aW1lLmMgYi9saWJjL3R6Y29kZS9sb2NhbHRpbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWQwZmJjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy90emNvZGUvbG9jYWx0aW1lLmMKQEAgLTAsMCArMSwyMTMyIEBACisvKgorKiogVGhpcyBmaWxlIGlzIGluIHRoZSBwdWJsaWMgZG9tYWluLCBzbyBjbGFyaWZpZWQgYXMgb2YKKyoqIDE5OTYtMDYtMDUgYnkgQXJ0aHVyIERhdmlkIE9sc29uLgorKi8KKworI2lmbmRlZiBsaW50CisjaWZuZGVmIE5PSUQKK3N0YXRpYyBjaGFyCWVsc2llaWRbXSA9ICJAKCMpbG9jYWx0aW1lLmMJOC4zIjsKKyNlbmRpZiAvKiAhZGVmaW5lZCBOT0lEICovCisjZW5kaWYgLyogIWRlZmluZWQgbGludCAqLworCisvKgorKiogTGVhcCBzZWNvbmQgaGFuZGxpbmcgZnJvbSBCcmFkbGV5IFdoaXRlLgorKiogUE9TSVgtc3R5bGUgVFogZW52aXJvbm1lbnQgdmFyaWFibGUgaGFuZGxpbmcgZnJvbSBHdXkgSGFycmlzLgorKi8KKworLypMSU5UTElCUkFSWSovCisKKyNpbmNsdWRlICJwcml2YXRlLmgiCisjaW5jbHVkZSAidHpmaWxlLmgiCisjaW5jbHVkZSAiZmNudGwuaCIKKyNpbmNsdWRlICJmbG9hdC5oIgkvKiBmb3IgRkxUX01BWCBhbmQgREJMX01BWCAqLworCisjaW5jbHVkZSA8c3lzL3N5c3RlbV9wcm9wZXJ0aWVzLmg+CisKKyNpZm5kZWYgVFpfQUJCUl9NQVhfTEVOCisjZGVmaW5lIFRaX0FCQlJfTUFYX0xFTgkxNgorI2VuZGlmIC8qICFkZWZpbmVkIFRaX0FCQlJfTUFYX0xFTiAqLworCisjaWZuZGVmIFRaX0FCQlJfQ0hBUl9TRVQKKyNkZWZpbmUgVFpfQUJCUl9DSEFSX1NFVCBcCisJImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVowMTIzNDU2Nzg5IDorLS5fIgorI2VuZGlmIC8qICFkZWZpbmVkIFRaX0FCQlJfQ0hBUl9TRVQgKi8KKworI2lmbmRlZiBUWl9BQkJSX0VSUl9DSEFSCisjZGVmaW5lIFRaX0FCQlJfRVJSX0NIQVIJJ18nCisjZW5kaWYgLyogIWRlZmluZWQgVFpfQUJCUl9FUlJfQ0hBUiAqLworCisjZGVmaW5lIElOREVYRklMRSAiL3N5c3RlbS91c3Ivc2hhcmUvem9uZWluZm8vem9uZWluZm8uaWR4IgorI2RlZmluZSBEQVRBRklMRSAiL3N5c3RlbS91c3Ivc2hhcmUvem9uZWluZm8vem9uZWluZm8uZGF0IgorI2RlZmluZSBOQU1FTEVOIDQwCisjZGVmaW5lIElOVExFTiA0CisjZGVmaW5lIFJFQURMRU4gKE5BTUVMRU4gKyAzICogSU5UTEVOKQorCisvKgorKiogU3VuT1MgNC4xLjEgaGVhZGVycyBsYWNrIE9fQklOQVJZLgorKi8KKworI2lmZGVmIE9fQklOQVJZCisjZGVmaW5lIE9QRU5fTU9ERQkoT19SRE9OTFkgfCBPX0JJTkFSWSkKKyNlbmRpZiAvKiBkZWZpbmVkIE9fQklOQVJZICovCisjaWZuZGVmIE9fQklOQVJZCisjZGVmaW5lIE9QRU5fTU9ERQlPX1JET05MWQorI2VuZGlmIC8qICFkZWZpbmVkIE9fQklOQVJZICovCisKKyNpZiAwCisjICBkZWZpbmUgIFhMT0coeHgpICBwcmludGYgeHggLCBmZmx1c2goc3Rkb3V0KQorI2Vsc2UKKyMgIGRlZmluZSAgWExPRyh4KSAgIGRve313aGlsZSAoMCkKKyNlbmRpZgorCisKKyNpZm5kZWYgV0lMREFCQlIKKy8qCisqKiBTb21lb25lIG1pZ2h0IG1ha2UgaW5jb3JyZWN0IHVzZSBvZiBhIHRpbWUgem9uZSBhYmJyZXZpYXRpb246CisqKgkxLglUaGV5IG1pZ2h0IHJlZmVyZW5jZSB0em5hbWVbMF0gYmVmb3JlIGNhbGxpbmcgdHpzZXQgKGV4cGxpY2l0bHkKKyoqCQlvciBpbXBsaWNpdGx5KS4KKyoqCTIuCVRoZXkgbWlnaHQgcmVmZXJlbmNlIHR6bmFtZVsxXSBiZWZvcmUgY2FsbGluZyB0enNldCAoZXhwbGljaXRseQorKioJCW9yIGltcGxpY2l0bHkpLgorKioJMy4JVGhleSBtaWdodCByZWZlcmVuY2UgdHpuYW1lWzFdIGFmdGVyIHNldHRpbmcgdG8gYSB0aW1lIHpvbmUKKyoqCQlpbiB3aGljaCBEYXlsaWdodCBTYXZpbmcgVGltZSBpcyBuZXZlciBvYnNlcnZlZC4KKyoqCTQuCVRoZXkgbWlnaHQgcmVmZXJlbmNlIHR6bmFtZVswXSBhZnRlciBzZXR0aW5nIHRvIGEgdGltZSB6b25lCisqKgkJaW4gd2hpY2ggU3RhbmRhcmQgVGltZSBpcyBuZXZlciBvYnNlcnZlZC4KKyoqCTUuCVRoZXkgbWlnaHQgcmVmZXJlbmNlIHRtLlRNX1pPTkUgYWZ0ZXIgY2FsbGluZyBvZmZ0aW1lLgorKiogV2hhdCdzIGJlc3QgdG8gZG8gaW4gdGhlIGFib3ZlIGNhc2VzIGlzIG9wZW4gdG8gZGViYXRlOworKiogZm9yIG5vdywgd2UganVzdCBzZXQgdGhpbmdzIHVwIHNvIHRoYXQgaW4gYW55IG9mIHRoZSBmaXZlIGNhc2VzCisqKiBXSUxEQUJCUiBpcyB1c2VkLiBBbm90aGVyIHBvc3NpYmlsaXR5OiBpbml0aWFsaXplIHR6bmFtZVswXSB0byB0aGUKKyoqIHN0cmluZyAidHpuYW1lWzBdIHVzZWQgYmVmb3JlIHNldCIsIGFuZCBzaW1pbGFybHkgZm9yIHRoZSBvdGhlciBjYXNlcy4KKyoqIEFuZCBhbm90aGVyOiBpbml0aWFsaXplIHR6bmFtZVswXSB0byAiRVJBIiwgd2l0aCBhbiBleHBsYW5hdGlvbiBpbiB0aGUKKyoqIG1hbnVhbCBwYWdlIG9mIHdoYXQgdGhpcyAidGltZSB6b25lIGFiYnJldmlhdGlvbiIgbWVhbnMgKGRvaW5nIHRoaXMgc28KKyoqIHRoYXQgdHpuYW1lWzBdIGhhcyB0aGUgIm5vcm1hbCIgbGVuZ3RoIG9mIHRocmVlIGNoYXJhY3RlcnMpLgorKi8KKyNkZWZpbmUgV0lMREFCQlIJIiAgICIKKyNlbmRpZiAvKiAhZGVmaW5lZCBXSUxEQUJCUiAqLworCitzdGF0aWMgY2hhcgkJd2lsZGFiYnJbXSA9IFdJTERBQkJSOworCitzdGF0aWMgY29uc3QgY2hhcglnbXRbXSA9ICJHTVQiOworCisvKgorKiogVGhlIERTVCBydWxlcyB0byB1c2UgaWYgVFogaGFzIG5vIHJ1bGVzIGFuZCB3ZSBjYW4ndCBsb2FkIFRaREVGUlVMRVMuCisqKiBXZSBkZWZhdWx0IHRvIFVTIHJ1bGVzIGFzIG9mIDE5OTktMDgtMTcuCisqKiBQT1NJWCAxMDAzLjEgc2VjdGlvbiA4LjEuMSBzYXlzIHRoYXQgdGhlIGRlZmF1bHQgRFNUIHJ1bGVzIGFyZQorKiogaW1wbGVtZW50YXRpb24gZGVwZW5kZW50OyBmb3IgaGlzdG9yaWNhbCByZWFzb25zLCBVUyBydWxlcyBhcmUgYQorKiogY29tbW9uIGRlZmF1bHQuCisqLworI2lmbmRlZiBUWkRFRlJVTEVTVFJJTkcKKyNkZWZpbmUgVFpERUZSVUxFU1RSSU5HICIsTTQuMS4wLE0xMC41LjAiCisjZW5kaWYgLyogIWRlZmluZWQgVFpERUZEU1QgKi8KKworc3RydWN0IHR0aW5mbyB7CQkJCS8qIHRpbWUgdHlwZSBpbmZvcm1hdGlvbiAqLworCWxvbmcJCXR0X2dtdG9mZjsJLyogVVRDIG9mZnNldCBpbiBzZWNvbmRzICovCisJaW50CQl0dF9pc2RzdDsJLyogdXNlZCB0byBzZXQgdG1faXNkc3QgKi8KKwlpbnQJCXR0X2FiYnJpbmQ7CS8qIGFiYnJldmlhdGlvbiBsaXN0IGluZGV4ICovCisJaW50CQl0dF90dGlzc3RkOwkvKiBUUlVFIGlmIHRyYW5zaXRpb24gaXMgc3RkIHRpbWUgKi8KKwlpbnQJCXR0X3R0aXNnbXQ7CS8qIFRSVUUgaWYgdHJhbnNpdGlvbiBpcyBVVEMgKi8KK307CisKK3N0cnVjdCBsc2luZm8gewkJCQkvKiBsZWFwIHNlY29uZCBpbmZvcm1hdGlvbiAqLworCXRpbWVfdAkJbHNfdHJhbnM7CS8qIHRyYW5zaXRpb24gdGltZSAqLworCWxvbmcJCWxzX2NvcnI7CS8qIGNvcnJlY3Rpb24gdG8gYXBwbHkgKi8KK307CisKKyNkZWZpbmUgQklHR0VTVChhLCBiKQkoKChhKSA+IChiKSkgPyAoYSkgOiAoYikpCisKKyNpZmRlZiBUWk5BTUVfTUFYCisjZGVmaW5lIE1ZX1RaTkFNRV9NQVgJVFpOQU1FX01BWAorI2VuZGlmIC8qIGRlZmluZWQgVFpOQU1FX01BWCAqLworI2lmbmRlZiBUWk5BTUVfTUFYCisjZGVmaW5lIE1ZX1RaTkFNRV9NQVgJMjU1CisjZW5kaWYgLyogIWRlZmluZWQgVFpOQU1FX01BWCAqLworCitzdHJ1Y3Qgc3RhdGUgeworCWludAkJbGVhcGNudDsKKwlpbnQJCXRpbWVjbnQ7CisJaW50CQl0eXBlY250OworCWludAkJY2hhcmNudDsKKwlpbnQJCWdvYmFjazsKKwlpbnQJCWdvYWhlYWQ7CisJdGltZV90CQlhdHNbVFpfTUFYX1RJTUVTXTsKKwl1bnNpZ25lZCBjaGFyCXR5cGVzW1RaX01BWF9USU1FU107CisJc3RydWN0IHR0aW5mbwl0dGlzW1RaX01BWF9UWVBFU107CisJY2hhcgkJY2hhcnNbQklHR0VTVChCSUdHRVNUKFRaX01BWF9DSEFSUyArIDEsIHNpemVvZiBnbXQpLAorCQkJCSgyICogKE1ZX1RaTkFNRV9NQVggKyAxKSkpXTsKKwlzdHJ1Y3QgbHNpbmZvCWxzaXNbVFpfTUFYX0xFQVBTXTsKK307CisKK3N0cnVjdCBydWxlIHsKKwlpbnQJCXJfdHlwZTsJCS8qIHR5cGUgb2YgcnVsZS0tc2VlIGJlbG93ICovCisJaW50CQlyX2RheTsJCS8qIGRheSBudW1iZXIgb2YgcnVsZSAqLworCWludAkJcl93ZWVrOwkJLyogd2VlayBudW1iZXIgb2YgcnVsZSAqLworCWludAkJcl9tb247CQkvKiBtb250aCBudW1iZXIgb2YgcnVsZSAqLworCWxvbmcJCXJfdGltZTsJCS8qIHRyYW5zaXRpb24gdGltZSBvZiBydWxlICovCit9OworCisjZGVmaW5lIEpVTElBTl9EQVkJCTAJLyogSm4gLSBKdWxpYW4gZGF5ICovCisjZGVmaW5lIERBWV9PRl9ZRUFSCQkxCS8qIG4gLSBkYXkgb2YgeWVhciAqLworI2RlZmluZSBNT05USF9OVEhfREFZX09GX1dFRUsJMgkvKiBNbS5uLmQgLSBtb250aCwgd2VlaywgZGF5IG9mIHdlZWsgKi8KKworLyoKKyoqIFByb3RvdHlwZXMgZm9yIHN0YXRpYyBmdW5jdGlvbnMuCisqLworCitzdGF0aWMgbG9uZwkJZGV0emNvZGUgUCgoY29uc3QgY2hhciAqIGNvZGVwKSk7CitzdGF0aWMgdGltZV90CQlkZXR6Y29kZTY0IFAoKGNvbnN0IGNoYXIgKiBjb2RlcCkpOworc3RhdGljIGludAkJZGlmZmVyX2J5X3JlcGVhdCBQKCh0aW1lX3QgdDEsIHRpbWVfdCB0MCkpOworc3RhdGljIGNvbnN0IGNoYXIgKglnZXR6bmFtZSBQKChjb25zdCBjaGFyICogc3RycCkpOworc3RhdGljIGNvbnN0IGNoYXIgKglnZXRxem5hbWUgUCgoY29uc3QgY2hhciAqIHN0cnAsIGNvbnN0IGludCBkZWxpbSkpOworc3RhdGljIGNvbnN0IGNoYXIgKglnZXRudW0gUCgoY29uc3QgY2hhciAqIHN0cnAsIGludCAqIG51bXAsIGludCBtaW4sCisJCQkJaW50IG1heCkpOworc3RhdGljIGNvbnN0IGNoYXIgKglnZXRzZWNzIFAoKGNvbnN0IGNoYXIgKiBzdHJwLCBsb25nICogc2Vjc3ApKTsKK3N0YXRpYyBjb25zdCBjaGFyICoJZ2V0b2Zmc2V0IFAoKGNvbnN0IGNoYXIgKiBzdHJwLCBsb25nICogb2Zmc2V0cCkpOworc3RhdGljIGNvbnN0IGNoYXIgKglnZXRydWxlIFAoKGNvbnN0IGNoYXIgKiBzdHJwLCBzdHJ1Y3QgcnVsZSAqIHJ1bGVwKSk7CitzdGF0aWMgdm9pZAkJZ210bG9hZCBQKChzdHJ1Y3Qgc3RhdGUgKiBzcCkpOworc3RhdGljIHN0cnVjdCB0bSAqCWdtdHN1YiBQKChjb25zdCB0aW1lX3QgKiB0aW1lcCwgbG9uZyBvZmZzZXQsCisJCQkJc3RydWN0IHRtICogdG1wKSk7CitzdGF0aWMgc3RydWN0IHRtICoJbG9jYWxzdWIgUCgoY29uc3QgdGltZV90ICogdGltZXAsIGxvbmcgb2Zmc2V0LAorCQkJCXN0cnVjdCB0bSAqIHRtcCkpOworc3RhdGljIGludAkJaW5jcmVtZW50X292ZXJmbG93IFAoKGludCAqIG51bWJlciwgaW50IGRlbHRhKSk7CitzdGF0aWMgaW50CQlsZWFwc190aHJ1X2VuZF9vZiBQKChpbnQgeSkpOworc3RhdGljIGludAkJbG9uZ19pbmNyZW1lbnRfb3ZlcmZsb3cgUCgobG9uZyAqIG51bWJlciwgaW50IGRlbHRhKSk7CitzdGF0aWMgaW50CQlsb25nX25vcm1hbGl6ZV9vdmVyZmxvdyBQKChsb25nICogdGVuc3B0ciwKKwkJCQlpbnQgKiB1bml0c3B0ciwgaW50IGJhc2UpKTsKK3N0YXRpYyBpbnQJCW5vcm1hbGl6ZV9vdmVyZmxvdyBQKChpbnQgKiB0ZW5zcHRyLCBpbnQgKiB1bml0c3B0ciwKKwkJCQlpbnQgYmFzZSkpOworc3RhdGljIHZvaWQJCXNldHR6bmFtZSBQKCh2b2lkKSk7CitzdGF0aWMgdGltZV90CQl0aW1lMSBQKChzdHJ1Y3QgdG0gKiB0bXAsCisJCQkJc3RydWN0IHRtICogKCpmdW5jcCkgUCgoY29uc3QgdGltZV90ICosCisJCQkJbG9uZywgc3RydWN0IHRtICopKSwKKwkJCQlsb25nIG9mZnNldCkpOworc3RhdGljIHRpbWVfdAkJdGltZTIgUCgoc3RydWN0IHRtICp0bXAsCisJCQkJc3RydWN0IHRtICogKCpmdW5jcCkgUCgoY29uc3QgdGltZV90ICosCisJCQkJbG9uZywgc3RydWN0IHRtKikpLAorCQkJCWxvbmcgb2Zmc2V0LCBpbnQgKiBva2F5cCkpOworc3RhdGljIHRpbWVfdAkJdGltZTJzdWIgUCgoc3RydWN0IHRtICp0bXAsCisJCQkJc3RydWN0IHRtICogKCpmdW5jcCkgUCgoY29uc3QgdGltZV90ICosCisJCQkJbG9uZywgc3RydWN0IHRtKikpLAorCQkJCWxvbmcgb2Zmc2V0LCBpbnQgKiBva2F5cCwgaW50IGRvX25vcm1fc2VjcykpOworc3RhdGljIHN0cnVjdCB0bSAqCXRpbWVzdWIgUCgoY29uc3QgdGltZV90ICogdGltZXAsIGxvbmcgb2Zmc2V0LAorCQkJCWNvbnN0IHN0cnVjdCBzdGF0ZSAqIHNwLCBzdHJ1Y3QgdG0gKiB0bXApKTsKK3N0YXRpYyBpbnQJCXRtY29tcCBQKChjb25zdCBzdHJ1Y3QgdG0gKiBhdG1wLAorCQkJCWNvbnN0IHN0cnVjdCB0bSAqIGJ0bXApKTsKK3N0YXRpYyB0aW1lX3QJCXRyYW5zdGltZSBQKCh0aW1lX3QgamFuZmlyc3QsIGludCB5ZWFyLAorCQkJCWNvbnN0IHN0cnVjdCBydWxlICogcnVsZXAsIGxvbmcgb2Zmc2V0KSk7CitzdGF0aWMgaW50CQl0emxvYWQgUCgoY29uc3QgY2hhciAqIG5hbWUsIHN0cnVjdCBzdGF0ZSAqIHNwLAorCQkJCWludCBkb2V4dGVuZCkpOworc3RhdGljIGludAkJdHpwYXJzZSBQKChjb25zdCBjaGFyICogbmFtZSwgc3RydWN0IHN0YXRlICogc3AsCisJCQkJaW50IGxhc3RkaXRjaCkpOworCisjaWZkZWYgQUxMX1NUQVRFCitzdGF0aWMgc3RydWN0IHN0YXRlICoJbGNscHRyOworc3RhdGljIHN0cnVjdCBzdGF0ZSAqCWdtdHB0cjsKKyNlbmRpZiAvKiBkZWZpbmVkIEFMTF9TVEFURSAqLworCisjaWZuZGVmIEFMTF9TVEFURQorc3RhdGljIHN0cnVjdCBzdGF0ZQlsY2xtZW07CitzdGF0aWMgc3RydWN0IHN0YXRlCWdtdG1lbTsKKyNkZWZpbmUgbGNscHRyCQkoJmxjbG1lbSkKKyNkZWZpbmUgZ210cHRyCQkoJmdtdG1lbSkKKyNlbmRpZiAvKiBTdGF0ZSBGYXJtICovCisKKyNpZm5kZWYgVFpfU1RSTEVOX01BWAorI2RlZmluZSBUWl9TVFJMRU5fTUFYIDI1NQorI2VuZGlmIC8qICFkZWZpbmVkIFRaX1NUUkxFTl9NQVggKi8KKworc3RhdGljIGNoYXIJCWxjbF9UWm5hbWVbVFpfU1RSTEVOX01BWCArIDFdOworc3RhdGljIGludAkJbGNsX2lzX3NldDsKK3N0YXRpYyBpbnQJCWdtdF9pc19zZXQ7CisKK2NoYXIgKgkJCXR6bmFtZVsyXSA9IHsKKwl3aWxkYWJiciwKKwl3aWxkYWJicgorfTsKKworLyoKKyoqIFNlY3Rpb24gNC4xMi4zIG9mIFgzLjE1OS0xOTg5IHJlcXVpcmVzIHRoYXQKKyoqCUV4Y2VwdCBmb3IgdGhlIHN0cmZ0aW1lIGZ1bmN0aW9uLCB0aGVzZSBmdW5jdGlvbnMgW2FzY3RpbWUsCisqKgljdGltZSwgZ210aW1lLCBsb2NhbHRpbWVdIHJldHVybiB2YWx1ZXMgaW4gb25lIG9mIHR3byBzdGF0aWMKKyoqCW9iamVjdHM6IGEgYnJva2VuLWRvd24gdGltZSBzdHJ1Y3R1cmUgYW5kIGFuIGFycmF5IG9mIGNoYXIuCisqKiBUaGFua3MgdG8gUGF1bCBFZ2dlcnQgZm9yIG5vdGluZyB0aGlzLgorKi8KKworc3RhdGljIHN0cnVjdCB0bQl0bTsKKworI2lmZGVmIFVTR19DT01QQVQKK3RpbWVfdAkJCXRpbWV6b25lID0gMDsKK2ludAkJCWRheWxpZ2h0ID0gMDsKKyNlbmRpZiAvKiBkZWZpbmVkIFVTR19DT01QQVQgKi8KKworI2lmZGVmIEFMVFpPTkUKK3RpbWVfdAkJCWFsdHpvbmUgPSAwOworI2VuZGlmIC8qIGRlZmluZWQgQUxUWk9ORSAqLworCitzdGF0aWMgbG9uZworZGV0emNvZGUoY29kZXApCitjb25zdCBjaGFyICogY29uc3QJY29kZXA7Cit7CisJcmVnaXN0ZXIgbG9uZwlyZXN1bHQ7CisJcmVnaXN0ZXIgaW50CWk7CisKKwlyZXN1bHQgPSAoY29kZXBbMF0gJiAweDgwKSA/IH4wTCA6IDA7CisJZm9yIChpID0gMDsgaSA8IDQ7ICsraSkKKwkJcmVzdWx0ID0gKHJlc3VsdCA8PCA4KSB8IChjb2RlcFtpXSAmIDB4ZmYpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB0aW1lX3QKK2RldHpjb2RlNjQoY29kZXApCitjb25zdCBjaGFyICogY29uc3QJY29kZXA7Cit7CisJcmVnaXN0ZXIgdGltZV90CXJlc3VsdDsKKwlyZWdpc3RlciBpbnQJaTsKKworCXJlc3VsdCA9IChjb2RlcFswXSAmIDB4ODApID8gICh+KGludF9mYXN0NjRfdCkgMCkgOiAwOworCWZvciAoaSA9IDA7IGkgPCA4OyArK2kpCisJCXJlc3VsdCA9IHJlc3VsdCAqIDI1NiArIChjb2RlcFtpXSAmIDB4ZmYpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitzZXR0em5hbWUgUCgodm9pZCkpCit7CisJcmVnaXN0ZXIgc3RydWN0IHN0YXRlICogY29uc3QJc3AgPSBsY2xwdHI7CisJcmVnaXN0ZXIgaW50CQkJaTsKKworCXR6bmFtZVswXSA9IHdpbGRhYmJyOworCXR6bmFtZVsxXSA9IHdpbGRhYmJyOworI2lmZGVmIFVTR19DT01QQVQKKwlkYXlsaWdodCA9IDA7CisJdGltZXpvbmUgPSAwOworI2VuZGlmIC8qIGRlZmluZWQgVVNHX0NPTVBBVCAqLworI2lmZGVmIEFMVFpPTkUKKwlhbHR6b25lID0gMDsKKyNlbmRpZiAvKiBkZWZpbmVkIEFMVFpPTkUgKi8KKyNpZmRlZiBBTExfU1RBVEUKKwlpZiAoc3AgPT0gTlVMTCkgeworCQl0em5hbWVbMF0gPSB0em5hbWVbMV0gPSBnbXQ7CisJCXJldHVybjsKKwl9CisjZW5kaWYgLyogZGVmaW5lZCBBTExfU1RBVEUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc3AtPnR5cGVjbnQ7ICsraSkgeworCQlyZWdpc3RlciBjb25zdCBzdHJ1Y3QgdHRpbmZvICogY29uc3QJdHRpc3AgPSAmc3AtPnR0aXNbaV07CisKKwkJdHpuYW1lW3R0aXNwLT50dF9pc2RzdF0gPQorCQkJJnNwLT5jaGFyc1t0dGlzcC0+dHRfYWJicmluZF07CisjaWZkZWYgVVNHX0NPTVBBVAorCQlpZiAodHRpc3AtPnR0X2lzZHN0KQorCQkJZGF5bGlnaHQgPSAxOworCQlpZiAoaSA9PSAwIHx8ICF0dGlzcC0+dHRfaXNkc3QpCisJCQl0aW1lem9uZSA9IC0odHRpc3AtPnR0X2dtdG9mZik7CisjZW5kaWYgLyogZGVmaW5lZCBVU0dfQ09NUEFUICovCisjaWZkZWYgQUxUWk9ORQorCQlpZiAoaSA9PSAwIHx8IHR0aXNwLT50dF9pc2RzdCkKKwkJCWFsdHpvbmUgPSAtKHR0aXNwLT50dF9nbXRvZmYpOworI2VuZGlmIC8qIGRlZmluZWQgQUxUWk9ORSAqLworCX0KKwkvKgorCSoqIEFuZCB0byBnZXQgdGhlIGxhdGVzdCB6b25lIG5hbWVzIGludG8gdHpuYW1lLiAuIC4KKwkqLworCWZvciAoaSA9IDA7IGkgPCBzcC0+dGltZWNudDsgKytpKSB7CisJCXJlZ2lzdGVyIGNvbnN0IHN0cnVjdCB0dGluZm8gKiBjb25zdAl0dGlzcCA9CisJCQkJCQkJJnNwLT50dGlzWworCQkJCQkJCQlzcC0+dHlwZXNbaV1dOworCisJCXR6bmFtZVt0dGlzcC0+dHRfaXNkc3RdID0KKwkJCSZzcC0+Y2hhcnNbdHRpc3AtPnR0X2FiYnJpbmRdOworCX0KKwkvKgorCSoqIEZpbmFsbHksIHNjcnViIHRoZSBhYmJyZXZpYXRpb25zLgorCSoqIEZpcnN0LCByZXBsYWNlIGJvZ3VzIGNoYXJhY3RlcnMuCisJKi8KKwlmb3IgKGkgPSAwOyBpIDwgc3AtPmNoYXJjbnQ7ICsraSkKKwkJaWYgKHN0cmNocihUWl9BQkJSX0NIQVJfU0VULCBzcC0+Y2hhcnNbaV0pID09IE5VTEwpCisJCQlzcC0+Y2hhcnNbaV0gPSBUWl9BQkJSX0VSUl9DSEFSOworCS8qCisJKiogU2Vjb25kLCB0cnVuY2F0ZSBsb25nIGFiYnJldmlhdGlvbnMuCisJKi8KKwlmb3IgKGkgPSAwOyBpIDwgc3AtPnR5cGVjbnQ7ICsraSkgeworCQlyZWdpc3RlciBjb25zdCBzdHJ1Y3QgdHRpbmZvICogY29uc3QJdHRpc3AgPSAmc3AtPnR0aXNbaV07CisJCXJlZ2lzdGVyIGNoYXIgKgkJCQljcCA9ICZzcC0+Y2hhcnNbdHRpc3AtPnR0X2FiYnJpbmRdOworCisJCWlmIChzdHJsZW4oY3ApID4gVFpfQUJCUl9NQVhfTEVOICYmCisJCQlzdHJjbXAoY3AsIEdSQU5EUEFSRU5URUQpICE9IDApCisJCQkJKihjcCArIFRaX0FCQlJfTUFYX0xFTikgPSAnXDAnOworCX0KK30KKworc3RhdGljIGludAorZGlmZmVyX2J5X3JlcGVhdCh0MSwgdDApCitjb25zdCB0aW1lX3QJdDE7Citjb25zdCB0aW1lX3QJdDA7Cit7CisJaWYgKFRZUEVfSU5URUdSQUwodGltZV90KSAmJgorCQlUWVBFX0JJVCh0aW1lX3QpIC0gVFlQRV9TSUdORUQodGltZV90KSA8IFNFQ1NQRVJSRVBFQVRfQklUUykKKwkJCXJldHVybiAwOworICAgICAgICByZXR1cm4gKHQxIC0gdDApID09IFNFQ1NQRVJSRVBFQVQ7Cit9CisKK3N0YXRpYyBpbnQgdG9pbnQodW5zaWduZWQgY2hhciAqcykgeworICAgIHJldHVybiAoc1swXSA8PCAyNCkgfCAoc1sxXSA8PCAxNikgfCAoc1syXSA8PCA4KSB8IHNbM107Cit9CisKK3N0YXRpYyBpbnQKK3R6bG9hZChuYW1lLCBzcCwgZG9leHRlbmQpCityZWdpc3RlciBjb25zdCBjaGFyICoJCW5hbWU7CityZWdpc3RlciBzdHJ1Y3Qgc3RhdGUgKiBjb25zdAlzcDsKK3JlZ2lzdGVyIGNvbnN0IGludAkJZG9leHRlbmQ7Cit7CisJcmVnaXN0ZXIgY29uc3QgY2hhciAqCQlwOworCXJlZ2lzdGVyIGludAkJCWk7CisJcmVnaXN0ZXIgaW50CQkJZmlkOworCXJlZ2lzdGVyIGludAkJCXN0b3JlZDsKKwlyZWdpc3RlciBpbnQJCQlucmVhZDsKKwl1bmlvbiB7CisJCXN0cnVjdCB0emhlYWQJdHpoZWFkOworCQljaGFyCQlidWZbMiAqIHNpemVvZihzdHJ1Y3QgdHpoZWFkKSArCisJCQkJCTIgKiBzaXplb2YgKnNwICsKKwkJCQkJNCAqIFRaX01BWF9USU1FU107CisJfSB1OworICAgIGludCAgICAgICAgICAgICAgICAgICAgIHRvcmVhZCA9IHNpemVvZiB1LmJ1ZjsKKworICAgICAgICBpZiAobmFtZSA9PSBOVUxMICYmIChuYW1lID0gVFpERUZBVUxUKSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgWExPRygoInR6bG9hZDogbnVsbCAnbmFtZScgcGFyYW1ldGVyXG4iICkpOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCXsKKwkJcmVnaXN0ZXIgaW50CWRvYWNjZXNzOworCQkvKgorCQkqKiBTZWN0aW9uIDQuOS4xIG9mIHRoZSBDIHN0YW5kYXJkIHNheXMgdGhhdAorCQkqKiAiRklMRU5BTUVfTUFYIGV4cGFuZHMgdG8gYW4gaW50ZWdyYWwgY29uc3RhbnQgZXhwcmVzc2lvbgorCQkqKiB0aGF0IGlzIHRoZSBzaXplIG5lZWRlZCBmb3IgYW4gYXJyYXkgb2YgY2hhciBsYXJnZSBlbm91Z2gKKwkJKiogdG8gaG9sZCB0aGUgbG9uZ2VzdCBmaWxlIG5hbWUgc3RyaW5nIHRoYXQgdGhlIGltcGxlbWVudGF0aW9uCisJCSoqIGd1YXJhbnRlZXMgY2FuIGJlIG9wZW5lZC4iCisJCSovCisJCWNoYXIJCWZ1bGxuYW1lW0ZJTEVOQU1FX01BWCArIDFdOworICAgICAgICAgICAgICAgIGNoYXIgICAgICAgICpvcmlnbmFtZSA9IChjaGFyKikgbmFtZTsKKworCQlpZiAobmFtZVswXSA9PSAnOicpCisJCQkrK25hbWU7CisJCWRvYWNjZXNzID0gbmFtZVswXSA9PSAnLyc7CisJCWlmICghZG9hY2Nlc3MpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgocCA9IFRaRElSKSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhMT0coKCJ0emxvYWQ6IG51bGwgVFpESVIgbWFjcm8gP1xuIiApKTsKKwkJCQlyZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHN0cmxlbihwKSArIHN0cmxlbihuYW1lKSArIDEpID49IHNpemVvZiBmdWxsbmFtZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTE9HKCggInR6bG9hZDogcGF0aCB0b28gbG9uZzogJXMvJXNcbiIsIHAsIG5hbWUgKSk7CisJCQkJcmV0dXJuIC0xOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCQkJKHZvaWQpIHN0cmNweShmdWxsbmFtZSwgcCk7CisJCQkodm9pZCkgc3RyY2F0KGZ1bGxuYW1lLCAiLyIpOworCQkJKHZvaWQpIHN0cmNhdChmdWxsbmFtZSwgbmFtZSk7CisJCQkvKgorCQkJKiogU2V0IGRvYWNjZXNzIGlmICcuJyAoYXMgaW4gIi4uLyIpIHNob3dzIHVwIGluIG5hbWUuCisJCQkqLworCQkJaWYgKHN0cmNocihuYW1lLCAnLicpICE9IE5VTEwpCisJCQkJZG9hY2Nlc3MgPSBUUlVFOworCQkJbmFtZSA9IGZ1bGxuYW1lOworCQl9CisgICAgICAgICAgICAgICAgaWYgKGRvYWNjZXNzICYmIGFjY2VzcyhuYW1lLCBSX09LKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBYTE9HKCggInR6bG9hZDogY291bGQgbm90IGZpbmQgJyVzJ1xuIiwgbmFtZSApKTsKKwkJCXJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB9CisJCWlmICgoZmlkID0gb3BlbihuYW1lLCBPUEVOX01PREUpKSA9PSAtMSkgeworICAgICAgICAgICAgY2hhciBidWZbUkVBRExFTl07CisgICAgICAgICAgICBjaGFyIG5hbWVbTkFNRUxFTiArIDFdOworICAgICAgICAgICAgaW50IGZpZGl4ID0gb3BlbihJTkRFWEZJTEUsIE9QRU5fTU9ERSk7CisgICAgICAgICAgICBpbnQgb2ZmID0gLTE7CisKKyAgICAgICAgICAgIFhMT0coKCAidHpsb2FkOiBjb3VsZCBub3Qgb3BlbiAnJXMnLCB0cnlpbmcgJyVzJ1xuIiwgZnVsbG5hbWUsIElOREVYRklMRSApKTsKKyAgICAgICAgICAgIGlmIChmaWRpeCA8IDApIHsKKyAgICAgICAgICAgICAgICBYTE9HKCggInR6bG9hZDogY291bGQgbm90IGZpbmQgJyVzJ1xuIiwgSU5ERVhGSUxFICkpOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgd2hpbGUgKHJlYWQoZmlkaXgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpID09IHNpemVvZihidWYpKSB7CisgICAgICAgICAgICAgICAgbWVtY3B5KG5hbWUsIGJ1ZiwgTkFNRUxFTik7CisgICAgICAgICAgICAgICAgbmFtZVtOQU1FTEVOXSA9ICdcMCc7CisKKyAgICAgICAgICAgICAgICBpZiAoc3RyY21wKG5hbWUsIG9yaWduYW1lKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIG9mZiA9IHRvaW50KCh1bnNpZ25lZCBjaGFyICopIGJ1ZiArIE5BTUVMRU4pOworICAgICAgICAgICAgICAgICAgICB0b3JlYWQgPSB0b2ludCgodW5zaWduZWQgY2hhciAqKSBidWYgKyBOQU1FTEVOICsgSU5UTEVOKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjbG9zZShmaWRpeCk7CisKKyAgICAgICAgICAgIGlmIChvZmYgPCAwKSB7CisgICAgICAgICAgICAgICAgWExPRygoICJ0emxvYWQ6IGludmFsaWQgb2Zmc2V0ICglZClcbiIsIG9mZiApKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZpZCA9IG9wZW4oREFUQUZJTEUsIE9QRU5fTU9ERSk7CisKKyAgICAgICAgICAgIGlmIChmaWQgPCAwKSB7CisgICAgICAgICAgICAgICAgWExPRygoICJ0emxvYWQ6IGNvdWxkIG5vdCBvcGVuICclcydcbiIsIERBVEFGSUxFICkpOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGxzZWVrKGZpZCwgb2ZmLCBTRUVLX1NFVCkgPCAwKSB7CisgICAgICAgICAgICAgICAgWExPRygoICJ0emxvYWQ6IGNvdWxkIG5vdCBzZWVrIHRvICVkIGluICclcydcbiIsIG9mZiwgREFUQUZJTEUgKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICB9CisJfQorCW5yZWFkID0gcmVhZChmaWQsIHUuYnVmLCB0b3JlYWQpOworICAgICAgICBpZiAoY2xvc2UoZmlkKSA8IDAgfHwgbnJlYWQgPD0gMCkgeworICAgICAgICAgICAgICAgIFhMT0coKCAidHpsb2FkOiBjb3VsZCBub3QgcmVhZCBjb250ZW50IG9mICclcydcbiIsIERBVEFGSUxFICkpOworCQlyZXR1cm4gLTE7CisgICAgICAgIH0KKwlmb3IgKHN0b3JlZCA9IDQ7IHN0b3JlZCA8PSA4OyBzdG9yZWQgKj0gMikgeworCQlpbnQJCXR0aXNzdGRjbnQ7CisJCWludAkJdHRpc2dtdGNudDsKKworCQl0dGlzc3RkY250ID0gKGludCkgZGV0emNvZGUodS50emhlYWQudHpoX3R0aXNzdGRjbnQpOworCQl0dGlzZ210Y250ID0gKGludCkgZGV0emNvZGUodS50emhlYWQudHpoX3R0aXNnbXRjbnQpOworCQlzcC0+bGVhcGNudCA9IChpbnQpIGRldHpjb2RlKHUudHpoZWFkLnR6aF9sZWFwY250KTsKKwkJc3AtPnRpbWVjbnQgPSAoaW50KSBkZXR6Y29kZSh1LnR6aGVhZC50emhfdGltZWNudCk7CisJCXNwLT50eXBlY250ID0gKGludCkgZGV0emNvZGUodS50emhlYWQudHpoX3R5cGVjbnQpOworCQlzcC0+Y2hhcmNudCA9IChpbnQpIGRldHpjb2RlKHUudHpoZWFkLnR6aF9jaGFyY250KTsKKwkJcCA9IHUudHpoZWFkLnR6aF9jaGFyY250ICsgc2l6ZW9mIHUudHpoZWFkLnR6aF9jaGFyY250OworCQlpZiAoc3AtPmxlYXBjbnQgPCAwIHx8IHNwLT5sZWFwY250ID4gVFpfTUFYX0xFQVBTIHx8CisJCQlzcC0+dHlwZWNudCA8PSAwIHx8IHNwLT50eXBlY250ID4gVFpfTUFYX1RZUEVTIHx8CisJCQlzcC0+dGltZWNudCA8IDAgfHwgc3AtPnRpbWVjbnQgPiBUWl9NQVhfVElNRVMgfHwKKwkJCXNwLT5jaGFyY250IDwgMCB8fCBzcC0+Y2hhcmNudCA+IFRaX01BWF9DSEFSUyB8fAorCQkJKHR0aXNzdGRjbnQgIT0gc3AtPnR5cGVjbnQgJiYgdHRpc3N0ZGNudCAhPSAwKSB8fAorCQkJKHR0aXNnbXRjbnQgIT0gc3AtPnR5cGVjbnQgJiYgdHRpc2dtdGNudCAhPSAwKSkKKwkJCQlyZXR1cm4gLTE7CisJCWlmIChucmVhZCAtIChwIC0gdS5idWYpIDwKKwkJCXNwLT50aW1lY250ICogc3RvcmVkICsJCS8qIGF0cyAqLworCQkJc3AtPnRpbWVjbnQgKwkJCS8qIHR5cGVzICovCisJCQlzcC0+dHlwZWNudCAqIDYgKwkJLyogdHRpbmZvcyAqLworCQkJc3AtPmNoYXJjbnQgKwkJCS8qIGNoYXJzICovCisJCQlzcC0+bGVhcGNudCAqIChzdG9yZWQgKyA0KSArCS8qIGxzaW5mb3MgKi8KKwkJCXR0aXNzdGRjbnQgKwkJCS8qIHR0aXNzdGRzICovCisJCQl0dGlzZ210Y250KQkJCS8qIHR0aXNnbXRzICovCisJCQkJcmV0dXJuIC0xOworCQlmb3IgKGkgPSAwOyBpIDwgc3AtPnRpbWVjbnQ7ICsraSkgeworCQkJc3AtPmF0c1tpXSA9IChzdG9yZWQgPT0gNCkgPworCQkJCWRldHpjb2RlKHApIDogZGV0emNvZGU2NChwKTsKKwkJCXAgKz0gc3RvcmVkOworCQl9CisJCWZvciAoaSA9IDA7IGkgPCBzcC0+dGltZWNudDsgKytpKSB7CisJCQlzcC0+dHlwZXNbaV0gPSAodW5zaWduZWQgY2hhcikgKnArKzsKKwkJCWlmIChzcC0+dHlwZXNbaV0gPj0gc3AtPnR5cGVjbnQpCisJCQkJcmV0dXJuIC0xOworCQl9CisJCWZvciAoaSA9IDA7IGkgPCBzcC0+dHlwZWNudDsgKytpKSB7CisJCQlyZWdpc3RlciBzdHJ1Y3QgdHRpbmZvICoJdHRpc3A7CisKKwkJCXR0aXNwID0gJnNwLT50dGlzW2ldOworCQkJdHRpc3AtPnR0X2dtdG9mZiA9IGRldHpjb2RlKHApOworCQkJcCArPSA0OworCQkJdHRpc3AtPnR0X2lzZHN0ID0gKHVuc2lnbmVkIGNoYXIpICpwKys7CisJCQlpZiAodHRpc3AtPnR0X2lzZHN0ICE9IDAgJiYgdHRpc3AtPnR0X2lzZHN0ICE9IDEpCisJCQkJcmV0dXJuIC0xOworCQkJdHRpc3AtPnR0X2FiYnJpbmQgPSAodW5zaWduZWQgY2hhcikgKnArKzsKKwkJCWlmICh0dGlzcC0+dHRfYWJicmluZCA8IDAgfHwKKwkJCQl0dGlzcC0+dHRfYWJicmluZCA+IHNwLT5jaGFyY250KQorCQkJCQlyZXR1cm4gLTE7CisJCX0KKwkJZm9yIChpID0gMDsgaSA8IHNwLT5jaGFyY250OyArK2kpCisJCQlzcC0+Y2hhcnNbaV0gPSAqcCsrOworCQlzcC0+Y2hhcnNbaV0gPSAnXDAnOwkvKiBlbnN1cmUgJ1wwJyBhdCBlbmQgKi8KKwkJZm9yIChpID0gMDsgaSA8IHNwLT5sZWFwY250OyArK2kpIHsKKwkJCXJlZ2lzdGVyIHN0cnVjdCBsc2luZm8gKglsc2lzcDsKKworCQkJbHNpc3AgPSAmc3AtPmxzaXNbaV07CisJCQlsc2lzcC0+bHNfdHJhbnMgPSAoc3RvcmVkID09IDQpID8KKwkJCQlkZXR6Y29kZShwKSA6IGRldHpjb2RlNjQocCk7CisJCQlwICs9IHN0b3JlZDsKKwkJCWxzaXNwLT5sc19jb3JyID0gZGV0emNvZGUocCk7CisJCQlwICs9IDQ7CisJCX0KKwkJZm9yIChpID0gMDsgaSA8IHNwLT50eXBlY250OyArK2kpIHsKKwkJCXJlZ2lzdGVyIHN0cnVjdCB0dGluZm8gKgl0dGlzcDsKKworCQkJdHRpc3AgPSAmc3AtPnR0aXNbaV07CisJCQlpZiAodHRpc3N0ZGNudCA9PSAwKQorCQkJCXR0aXNwLT50dF90dGlzc3RkID0gRkFMU0U7CisJCQllbHNlIHsKKwkJCQl0dGlzcC0+dHRfdHRpc3N0ZCA9ICpwKys7CisJCQkJaWYgKHR0aXNwLT50dF90dGlzc3RkICE9IFRSVUUgJiYKKwkJCQkJdHRpc3AtPnR0X3R0aXNzdGQgIT0gRkFMU0UpCisJCQkJCQlyZXR1cm4gLTE7CisJCQl9CisJCX0KKwkJZm9yIChpID0gMDsgaSA8IHNwLT50eXBlY250OyArK2kpIHsKKwkJCXJlZ2lzdGVyIHN0cnVjdCB0dGluZm8gKgl0dGlzcDsKKworCQkJdHRpc3AgPSAmc3AtPnR0aXNbaV07CisJCQlpZiAodHRpc2dtdGNudCA9PSAwKQorCQkJCXR0aXNwLT50dF90dGlzZ210ID0gRkFMU0U7CisJCQllbHNlIHsKKwkJCQl0dGlzcC0+dHRfdHRpc2dtdCA9ICpwKys7CisJCQkJaWYgKHR0aXNwLT50dF90dGlzZ210ICE9IFRSVUUgJiYKKwkJCQkJdHRpc3AtPnR0X3R0aXNnbXQgIT0gRkFMU0UpCisJCQkJCQlyZXR1cm4gLTE7CisJCQl9CisJCX0KKwkJLyoKKwkJKiogT3V0LW9mLXNvcnQgYXRzIHNob3VsZCBtZWFuIHdlJ3JlIHJ1bm5pbmcgb24gYQorCQkqKiBzaWduZWQgdGltZV90IHN5c3RlbSBidXQgdXNpbmcgYSBkYXRhIGZpbGUgd2l0aAorCQkqKiB1bnNpZ25lZCB2YWx1ZXMgKG9yIHZpY2UgdmVyc2EpLgorCQkqLworCQlmb3IgKGkgPSAwOyBpIDwgc3AtPnRpbWVjbnQgLSAyOyArK2kpCisJCQlpZiAoc3AtPmF0c1tpXSA+IHNwLT5hdHNbaSArIDFdKSB7CisJCQkJKytpOworCQkJCWlmIChUWVBFX1NJR05FRCh0aW1lX3QpKSB7CisJCQkJCS8qCisJCQkJCSoqIElnbm9yZSB0aGUgZW5kIChlYXN5KS4KKwkJCQkJKi8KKwkJCQkJc3AtPnRpbWVjbnQgPSBpOworCQkJCX0gZWxzZSB7CisJCQkJCS8qCisJCQkJCSoqIElnbm9yZSB0aGUgYmVnaW5uaW5nIChoYXJkZXIpLgorCQkJCQkqLworCQkJCQlyZWdpc3RlciBpbnQJajsKKworCQkJCQlmb3IgKGogPSAwOyBqICsgaSA8IHNwLT50aW1lY250OyArK2opIHsKKwkJCQkJCXNwLT5hdHNbal0gPSBzcC0+YXRzW2ogKyBpXTsKKwkJCQkJCXNwLT50eXBlc1tqXSA9IHNwLT50eXBlc1tqICsgaV07CisJCQkJCX0KKwkJCQkJc3AtPnRpbWVjbnQgPSBqOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwkJLyoKKwkJKiogSWYgdGhpcyBpcyBhbiBvbGQgZmlsZSwgd2UncmUgZG9uZS4KKwkJKi8KKwkJaWYgKHUudHpoZWFkLnR6aF92ZXJzaW9uWzBdID09ICdcMCcpCisJCQlicmVhazsKKwkJbnJlYWQgLT0gcCAtIHUuYnVmOworCQlmb3IgKGkgPSAwOyBpIDwgbnJlYWQ7ICsraSkKKwkJCXUuYnVmW2ldID0gcFtpXTsKKwkJLyoKKwkJKiogSWYgdGhpcyBpcyBhIG5hcnJvdyBpbnRlZ2VyIHRpbWVfdCBzeXN0ZW0sIHdlJ3JlIGRvbmUuCisJCSovCisJCWlmIChzdG9yZWQgPj0gKGludCkgc2l6ZW9mKHRpbWVfdCkgJiYgVFlQRV9JTlRFR1JBTCh0aW1lX3QpKQorCQkJYnJlYWs7CisJfQorCWlmIChkb2V4dGVuZCAmJiBucmVhZCA+IDIgJiYKKwkJdS5idWZbMF0gPT0gJ1xuJyAmJiB1LmJ1ZltucmVhZCAtIDFdID09ICdcbicgJiYKKwkJc3AtPnR5cGVjbnQgKyAyIDw9IFRaX01BWF9UWVBFUykgeworCQkJc3RydWN0IHN0YXRlCXRzOworCQkJcmVnaXN0ZXIgaW50CXJlc3VsdDsKKworCQkJdS5idWZbbnJlYWQgLSAxXSA9ICdcMCc7CisJCQlyZXN1bHQgPSB0enBhcnNlKCZ1LmJ1ZlsxXSwgJnRzLCBGQUxTRSk7CisJCQlpZiAocmVzdWx0ID09IDAgJiYgdHMudHlwZWNudCA9PSAyICYmCisJCQkJc3AtPmNoYXJjbnQgKyB0cy5jaGFyY250IDw9IFRaX01BWF9DSEFSUykgeworCQkJCQlmb3IgKGkgPSAwOyBpIDwgMjsgKytpKQorCQkJCQkJdHMudHRpc1tpXS50dF9hYmJyaW5kICs9CisJCQkJCQkJc3AtPmNoYXJjbnQ7CisJCQkJCWZvciAoaSA9IDA7IGkgPCB0cy5jaGFyY250OyArK2kpCisJCQkJCQlzcC0+Y2hhcnNbc3AtPmNoYXJjbnQrK10gPQorCQkJCQkJCXRzLmNoYXJzW2ldOworCQkJCQlpID0gMDsKKwkJCQkJd2hpbGUgKGkgPCB0cy50aW1lY250ICYmCisJCQkJCQl0cy5hdHNbaV0gPD0KKwkJCQkJCXNwLT5hdHNbc3AtPnRpbWVjbnQgLSAxXSkKKwkJCQkJCQkrK2k7CisJCQkJCXdoaWxlIChpIDwgdHMudGltZWNudCAmJgorCQkJCQkgICAgc3AtPnRpbWVjbnQgPCBUWl9NQVhfVElNRVMpIHsKKwkJCQkJCXNwLT5hdHNbc3AtPnRpbWVjbnRdID0KKwkJCQkJCQl0cy5hdHNbaV07CisJCQkJCQlzcC0+dHlwZXNbc3AtPnRpbWVjbnRdID0KKwkJCQkJCQlzcC0+dHlwZWNudCArCisJCQkJCQkJdHMudHlwZXNbaV07CisJCQkJCQkrK3NwLT50aW1lY250OworCQkJCQkJKytpOworCQkJCQl9CisJCQkJCXNwLT50dGlzW3NwLT50eXBlY250KytdID0gdHMudHRpc1swXTsKKwkJCQkJc3AtPnR0aXNbc3AtPnR5cGVjbnQrK10gPSB0cy50dGlzWzFdOworCQkJfQorCX0KKwlpID0gMiAqIFlFQVJTUEVSUkVQRUFUOworCXNwLT5nb2JhY2sgPSBzcC0+Z29haGVhZCA9IHNwLT50aW1lY250ID4gaTsKKwlzcC0+Z29iYWNrICY9IHNwLT50eXBlc1tpXSA9PSBzcC0+dHlwZXNbMF0gJiYKKwkJZGlmZmVyX2J5X3JlcGVhdChzcC0+YXRzW2ldLCBzcC0+YXRzWzBdKTsKKwlzcC0+Z29haGVhZCAmPQorCQlzcC0+dHlwZXNbc3AtPnRpbWVjbnQgLSAxXSA9PSBzcC0+dHlwZXNbc3AtPnRpbWVjbnQgLSAxIC0gaV0gJiYKKwkJZGlmZmVyX2J5X3JlcGVhdChzcC0+YXRzW3NwLT50aW1lY250IC0gMV0sCisJCQkgc3AtPmF0c1tzcC0+dGltZWNudCAtIDEgLSBpXSk7CisgICAgICAgIFhMT0coKCAidHpsb2FkOiBsb2FkIG9rICEhXG4iICkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgaW50CW1vbl9sZW5ndGhzWzJdW01PTlNQRVJZRUFSXSA9IHsKKwl7IDMxLCAyOCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzEgfSwKKwl7IDMxLCAyOSwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzEgfQorfTsKKworc3RhdGljIGNvbnN0IGludAl5ZWFyX2xlbmd0aHNbMl0gPSB7CisJREFZU1BFUk5ZRUFSLCBEQVlTUEVSTFlFQVIKK307CisKKy8qCisqKiBHaXZlbiBhIHBvaW50ZXIgaW50byBhIHRpbWUgem9uZSBzdHJpbmcsIHNjYW4gdW50aWwgYSBjaGFyYWN0ZXIgdGhhdCBpcyBub3QKKyoqIGEgdmFsaWQgY2hhcmFjdGVyIGluIGEgem9uZSBuYW1lIGlzIGZvdW5kLiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoYXQKKyoqIGNoYXJhY3Rlci4KKyovCisKK3N0YXRpYyBjb25zdCBjaGFyICoKK2dldHpuYW1lKHN0cnApCityZWdpc3RlciBjb25zdCBjaGFyICoJc3RycDsKK3sKKwlyZWdpc3RlciBjaGFyCWM7CisKKwl3aGlsZSAoKGMgPSAqc3RycCkgIT0gJ1wwJyAmJiAhaXNfZGlnaXQoYykgJiYgYyAhPSAnLCcgJiYgYyAhPSAnLScgJiYKKwkJYyAhPSAnKycpCisJCQkrK3N0cnA7CisJcmV0dXJuIHN0cnA7Cit9CisKKy8qCisqKiBHaXZlbiBhIHBvaW50ZXIgaW50byBhbiBleHRlbmRlZCB0aW1lIHpvbmUgc3RyaW5nLCBzY2FuIHVudGlsIHRoZSBlbmRpbmcKKyoqIGRlbGltaXRlciBvZiB0aGUgem9uZSBuYW1lIGlzIGxvY2F0ZWQuIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGRlbGltaXRlci4KKyoqCisqKiBBcyB3aXRoIGdldHpuYW1lIGFib3ZlLCB0aGUgbGVnYWwgY2hhcmFjdGVyIHNldCBpcyBhY3R1YWxseSBxdWl0ZQorKiogcmVzdHJpY3RlZCwgd2l0aCBvdGhlciBjaGFyYWN0ZXJzIHByb2R1Y2luZyB1bmRlZmluZWQgcmVzdWx0cy4KKyoqIFdlIGRvbid0IGRvIGFueSBjaGVja2luZyBoZXJlOyBjaGVja2luZyBpcyBkb25lIGxhdGVyIGluIGNvbW1vbi1jYXNlIGNvZGUuCisqLworCitzdGF0aWMgY29uc3QgY2hhciAqCitnZXRxem5hbWUocmVnaXN0ZXIgY29uc3QgY2hhciAqc3RycCwgY29uc3QgaW50IGRlbGltKQoreworCXJlZ2lzdGVyIGludAljOworCisJd2hpbGUgKChjID0gKnN0cnApICE9ICdcMCcgJiYgYyAhPSBkZWxpbSkKKwkJKytzdHJwOworCXJldHVybiBzdHJwOworfQorCisvKgorKiogR2l2ZW4gYSBwb2ludGVyIGludG8gYSB0aW1lIHpvbmUgc3RyaW5nLCBleHRyYWN0IGEgbnVtYmVyIGZyb20gdGhhdCBzdHJpbmcuCisqKiBDaGVjayB0aGF0IHRoZSBudW1iZXIgaXMgd2l0aGluIGEgc3BlY2lmaWVkIHJhbmdlOyBpZiBpdCBpcyBub3QsIHJldHVybgorKiogTlVMTC4KKyoqIE90aGVyd2lzZSwgcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIG5vdCBwYXJ0IG9mIHRoZSBudW1iZXIuCisqLworCitzdGF0aWMgY29uc3QgY2hhciAqCitnZXRudW0oc3RycCwgbnVtcCwgbWluLCBtYXgpCityZWdpc3RlciBjb25zdCBjaGFyICoJc3RycDsKK2ludCAqIGNvbnN0CQludW1wOworY29uc3QgaW50CQltaW47Citjb25zdCBpbnQJCW1heDsKK3sKKwlyZWdpc3RlciBjaGFyCWM7CisJcmVnaXN0ZXIgaW50CW51bTsKKworCWlmIChzdHJwID09IE5VTEwgfHwgIWlzX2RpZ2l0KGMgPSAqc3RycCkpCisJCXJldHVybiBOVUxMOworCW51bSA9IDA7CisJZG8geworCQludW0gPSBudW0gKiAxMCArIChjIC0gJzAnKTsKKwkJaWYgKG51bSA+IG1heCkKKwkJCXJldHVybiBOVUxMOwkvKiBpbGxlZ2FsIHZhbHVlICovCisJCWMgPSAqKytzdHJwOworCX0gd2hpbGUgKGlzX2RpZ2l0KGMpKTsKKwlpZiAobnVtIDwgbWluKQorCQlyZXR1cm4gTlVMTDsJCS8qIGlsbGVnYWwgdmFsdWUgKi8KKwkqbnVtcCA9IG51bTsKKwlyZXR1cm4gc3RycDsKK30KKworLyoKKyoqIEdpdmVuIGEgcG9pbnRlciBpbnRvIGEgdGltZSB6b25lIHN0cmluZywgZXh0cmFjdCBhIG51bWJlciBvZiBzZWNvbmRzLAorKiogaW4gaGhbOm1tWzpzc11dIGZvcm0sIGZyb20gdGhlIHN0cmluZy4KKyoqIElmIGFueSBlcnJvciBvY2N1cnMsIHJldHVybiBOVUxMLgorKiogT3RoZXJ3aXNlLCByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBmaXJzdCBjaGFyYWN0ZXIgbm90IHBhcnQgb2YgdGhlIG51bWJlcgorKiogb2Ygc2Vjb25kcy4KKyovCisKK3N0YXRpYyBjb25zdCBjaGFyICoKK2dldHNlY3Moc3RycCwgc2Vjc3ApCityZWdpc3RlciBjb25zdCBjaGFyICoJc3RycDsKK2xvbmcgKiBjb25zdAkJc2Vjc3A7Cit7CisJaW50CW51bTsKKworCS8qCisJKiogYEhPVVJTUEVSREFZICogREFZU1BFUldFRUsgLSAxJyBhbGxvd3MgcXVhc2ktUG9zaXggcnVsZXMgbGlrZQorCSoqICJNMTAuNC42LzI2Iiwgd2hpY2ggZG9lcyBub3QgY29uZm9ybSB0byBQb3NpeCwKKwkqKiBidXQgd2hpY2ggc3BlY2lmaWVzIHRoZSBlcXVpdmFsZW50IG9mCisJKiogYGAwMjowMCBvbiB0aGUgZmlyc3QgU3VuZGF5IG9uIG9yIGFmdGVyIDIzIE9jdCcnLgorCSovCisJc3RycCA9IGdldG51bShzdHJwLCAmbnVtLCAwLCBIT1VSU1BFUkRBWSAqIERBWVNQRVJXRUVLIC0gMSk7CisJaWYgKHN0cnAgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisJKnNlY3NwID0gbnVtICogKGxvbmcpIFNFQ1NQRVJIT1VSOworCWlmICgqc3RycCA9PSAnOicpIHsKKwkJKytzdHJwOworCQlzdHJwID0gZ2V0bnVtKHN0cnAsICZudW0sIDAsIE1JTlNQRVJIT1VSIC0gMSk7CisJCWlmIChzdHJwID09IE5VTEwpCisJCQlyZXR1cm4gTlVMTDsKKwkJKnNlY3NwICs9IG51bSAqIFNFQ1NQRVJNSU47CisJCWlmICgqc3RycCA9PSAnOicpIHsKKwkJCSsrc3RycDsKKwkJCS8qIGBTRUNTUEVSTUlOJyBhbGxvd3MgZm9yIGxlYXAgc2Vjb25kcy4gKi8KKwkJCXN0cnAgPSBnZXRudW0oc3RycCwgJm51bSwgMCwgU0VDU1BFUk1JTik7CisJCQlpZiAoc3RycCA9PSBOVUxMKQorCQkJCXJldHVybiBOVUxMOworCQkJKnNlY3NwICs9IG51bTsKKwkJfQorCX0KKwlyZXR1cm4gc3RycDsKK30KKworLyoKKyoqIEdpdmVuIGEgcG9pbnRlciBpbnRvIGEgdGltZSB6b25lIHN0cmluZywgZXh0cmFjdCBhbiBvZmZzZXQsIGluCisqKiBbKy1daGhbOm1tWzpzc11dIGZvcm0sIGZyb20gdGhlIHN0cmluZy4KKyoqIElmIGFueSBlcnJvciBvY2N1cnMsIHJldHVybiBOVUxMLgorKiogT3RoZXJ3aXNlLCByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBmaXJzdCBjaGFyYWN0ZXIgbm90IHBhcnQgb2YgdGhlIHRpbWUuCisqLworCitzdGF0aWMgY29uc3QgY2hhciAqCitnZXRvZmZzZXQoc3RycCwgb2Zmc2V0cCkKK3JlZ2lzdGVyIGNvbnN0IGNoYXIgKglzdHJwOworbG9uZyAqIGNvbnN0CQlvZmZzZXRwOworeworCXJlZ2lzdGVyIGludAluZWcgPSAwOworCisJaWYgKCpzdHJwID09ICctJykgeworCQluZWcgPSAxOworCQkrK3N0cnA7CisJfSBlbHNlIGlmICgqc3RycCA9PSAnKycpCisJCSsrc3RycDsKKwlzdHJwID0gZ2V0c2VjcyhzdHJwLCBvZmZzZXRwKTsKKwlpZiAoc3RycCA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsJCS8qIGlsbGVnYWwgdGltZSAqLworCWlmIChuZWcpCisJCSpvZmZzZXRwID0gLSpvZmZzZXRwOworCXJldHVybiBzdHJwOworfQorCisvKgorKiogR2l2ZW4gYSBwb2ludGVyIGludG8gYSB0aW1lIHpvbmUgc3RyaW5nLCBleHRyYWN0IGEgcnVsZSBpbiB0aGUgZm9ybQorKiogZGF0ZVsvdGltZV0uIFNlZSBQT1NJWCBzZWN0aW9uIDggZm9yIHRoZSBmb3JtYXQgb2YgImRhdGUiIGFuZCAidGltZSIuCisqKiBJZiBhIHZhbGlkIHJ1bGUgaXMgbm90IGZvdW5kLCByZXR1cm4gTlVMTC4KKyoqIE90aGVyd2lzZSwgcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIG5vdCBwYXJ0IG9mIHRoZSBydWxlLgorKi8KKworc3RhdGljIGNvbnN0IGNoYXIgKgorZ2V0cnVsZShzdHJwLCBydWxlcCkKK2NvbnN0IGNoYXIgKgkJCXN0cnA7CityZWdpc3RlciBzdHJ1Y3QgcnVsZSAqIGNvbnN0CXJ1bGVwOworeworCWlmICgqc3RycCA9PSAnSicpIHsKKwkJLyoKKwkJKiogSnVsaWFuIGRheS4KKwkJKi8KKwkJcnVsZXAtPnJfdHlwZSA9IEpVTElBTl9EQVk7CisJCSsrc3RycDsKKwkJc3RycCA9IGdldG51bShzdHJwLCAmcnVsZXAtPnJfZGF5LCAxLCBEQVlTUEVSTllFQVIpOworCX0gZWxzZSBpZiAoKnN0cnAgPT0gJ00nKSB7CisJCS8qCisJCSoqIE1vbnRoLCB3ZWVrLCBkYXkuCisJCSovCisJCXJ1bGVwLT5yX3R5cGUgPSBNT05USF9OVEhfREFZX09GX1dFRUs7CisJCSsrc3RycDsKKwkJc3RycCA9IGdldG51bShzdHJwLCAmcnVsZXAtPnJfbW9uLCAxLCBNT05TUEVSWUVBUik7CisJCWlmIChzdHJwID09IE5VTEwpCisJCQlyZXR1cm4gTlVMTDsKKwkJaWYgKCpzdHJwKysgIT0gJy4nKQorCQkJcmV0dXJuIE5VTEw7CisJCXN0cnAgPSBnZXRudW0oc3RycCwgJnJ1bGVwLT5yX3dlZWssIDEsIDUpOworCQlpZiAoc3RycCA9PSBOVUxMKQorCQkJcmV0dXJuIE5VTEw7CisJCWlmICgqc3RycCsrICE9ICcuJykKKwkJCXJldHVybiBOVUxMOworCQlzdHJwID0gZ2V0bnVtKHN0cnAsICZydWxlcC0+cl9kYXksIDAsIERBWVNQRVJXRUVLIC0gMSk7CisJfSBlbHNlIGlmIChpc19kaWdpdCgqc3RycCkpIHsKKwkJLyoKKwkJKiogRGF5IG9mIHllYXIuCisJCSovCisJCXJ1bGVwLT5yX3R5cGUgPSBEQVlfT0ZfWUVBUjsKKwkJc3RycCA9IGdldG51bShzdHJwLCAmcnVsZXAtPnJfZGF5LCAwLCBEQVlTUEVSTFlFQVIgLSAxKTsKKwl9IGVsc2UJcmV0dXJuIE5VTEw7CQkvKiBpbnZhbGlkIGZvcm1hdCAqLworCWlmIChzdHJwID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCWlmICgqc3RycCA9PSAnLycpIHsKKwkJLyoKKwkJKiogVGltZSBzcGVjaWZpZWQuCisJCSovCisJCSsrc3RycDsKKwkJc3RycCA9IGdldHNlY3Moc3RycCwgJnJ1bGVwLT5yX3RpbWUpOworCX0gZWxzZQlydWxlcC0+cl90aW1lID0gMiAqIFNFQ1NQRVJIT1VSOwkvKiBkZWZhdWx0ID0gMjowMDowMCAqLworCXJldHVybiBzdHJwOworfQorCisvKgorKiogR2l2ZW4gdGhlIEVwb2NoLXJlbGF0aXZlIHRpbWUgb2YgSmFudWFyeSAxLCAwMDowMDowMCBVVEMsIGluIGEgeWVhciwgdGhlCisqKiB5ZWFyLCBhIHJ1bGUsIGFuZCB0aGUgb2Zmc2V0IGZyb20gVVRDIGF0IHRoZSB0aW1lIHRoYXQgcnVsZSB0YWtlcyBlZmZlY3QsCisqKiBjYWxjdWxhdGUgdGhlIEVwb2NoLXJlbGF0aXZlIHRpbWUgdGhhdCBydWxlIHRha2VzIGVmZmVjdC4KKyovCisKK3N0YXRpYyB0aW1lX3QKK3RyYW5zdGltZShqYW5maXJzdCwgeWVhciwgcnVsZXAsIG9mZnNldCkKK2NvbnN0IHRpbWVfdAkJCQlqYW5maXJzdDsKK2NvbnN0IGludAkJCQl5ZWFyOworcmVnaXN0ZXIgY29uc3Qgc3RydWN0IHJ1bGUgKiBjb25zdAlydWxlcDsKK2NvbnN0IGxvbmcJCQkJb2Zmc2V0OworeworCXJlZ2lzdGVyIGludAlsZWFweWVhcjsKKwlyZWdpc3RlciB0aW1lX3QJdmFsdWU7CisJcmVnaXN0ZXIgaW50CWk7CisJaW50CQlkLCBtMSwgeXkwLCB5eTEsIHl5MiwgZG93OworCisJSU5JVElBTElaRSh2YWx1ZSk7CisJbGVhcHllYXIgPSBpc2xlYXAoeWVhcik7CisJc3dpdGNoIChydWxlcC0+cl90eXBlKSB7CisKKwljYXNlIEpVTElBTl9EQVk6CisJCS8qCisJCSoqIEpuIC0gSnVsaWFuIGRheSwgMSA9PSBKYW51YXJ5IDEsIDYwID09IE1hcmNoIDEgZXZlbiBpbiBsZWFwCisJCSoqIHllYXJzLgorCQkqKiBJbiBub24tbGVhcCB5ZWFycywgb3IgaWYgdGhlIGRheSBudW1iZXIgaXMgNTkgb3IgbGVzcywganVzdAorCQkqKiBhZGQgU0VDU1BFUkRBWSB0aW1lcyB0aGUgZGF5IG51bWJlci0xIHRvIHRoZSB0aW1lIG9mCisJCSoqIEphbnVhcnkgMSwgbWlkbmlnaHQsIHRvIGdldCB0aGUgZGF5LgorCQkqLworCQl2YWx1ZSA9IGphbmZpcnN0ICsgKHJ1bGVwLT5yX2RheSAtIDEpICogU0VDU1BFUkRBWTsKKwkJaWYgKGxlYXB5ZWFyICYmIHJ1bGVwLT5yX2RheSA+PSA2MCkKKwkJCXZhbHVlICs9IFNFQ1NQRVJEQVk7CisJCWJyZWFrOworCisJY2FzZSBEQVlfT0ZfWUVBUjoKKwkJLyoKKwkJKiogbiAtIGRheSBvZiB5ZWFyLgorCQkqKiBKdXN0IGFkZCBTRUNTUEVSREFZIHRpbWVzIHRoZSBkYXkgbnVtYmVyIHRvIHRoZSB0aW1lIG9mCisJCSoqIEphbnVhcnkgMSwgbWlkbmlnaHQsIHRvIGdldCB0aGUgZGF5LgorCQkqLworCQl2YWx1ZSA9IGphbmZpcnN0ICsgcnVsZXAtPnJfZGF5ICogU0VDU1BFUkRBWTsKKwkJYnJlYWs7CisKKwljYXNlIE1PTlRIX05USF9EQVlfT0ZfV0VFSzoKKwkJLyoKKwkJKiogTW0ubi5kIC0gbnRoICJkdGggZGF5IiBvZiBtb250aCBtLgorCQkqLworCQl2YWx1ZSA9IGphbmZpcnN0OworCQlmb3IgKGkgPSAwOyBpIDwgcnVsZXAtPnJfbW9uIC0gMTsgKytpKQorCQkJdmFsdWUgKz0gbW9uX2xlbmd0aHNbbGVhcHllYXJdW2ldICogU0VDU1BFUkRBWTsKKworCQkvKgorCQkqKiBVc2UgWmVsbGVyJ3MgQ29uZ3J1ZW5jZSB0byBnZXQgZGF5LW9mLXdlZWsgb2YgZmlyc3QgZGF5IG9mCisJCSoqIG1vbnRoLgorCQkqLworCQltMSA9IChydWxlcC0+cl9tb24gKyA5KSAlIDEyICsgMTsKKwkJeXkwID0gKHJ1bGVwLT5yX21vbiA8PSAyKSA/ICh5ZWFyIC0gMSkgOiB5ZWFyOworCQl5eTEgPSB5eTAgLyAxMDA7CisJCXl5MiA9IHl5MCAlIDEwMDsKKwkJZG93ID0gKCgyNiAqIG0xIC0gMikgLyAxMCArCisJCQkxICsgeXkyICsgeXkyIC8gNCArIHl5MSAvIDQgLSAyICogeXkxKSAlIDc7CisJCWlmIChkb3cgPCAwKQorCQkJZG93ICs9IERBWVNQRVJXRUVLOworCisJCS8qCisJCSoqICJkb3ciIGlzIHRoZSBkYXktb2Ytd2VlayBvZiB0aGUgZmlyc3QgZGF5IG9mIHRoZSBtb250aC4gR2V0CisJCSoqIHRoZSBkYXktb2YtbW9udGggKHplcm8tb3JpZ2luKSBvZiB0aGUgZmlyc3QgImRvdyIgZGF5IG9mIHRoZQorCQkqKiBtb250aC4KKwkJKi8KKwkJZCA9IHJ1bGVwLT5yX2RheSAtIGRvdzsKKwkJaWYgKGQgPCAwKQorCQkJZCArPSBEQVlTUEVSV0VFSzsKKwkJZm9yIChpID0gMTsgaSA8IHJ1bGVwLT5yX3dlZWs7ICsraSkgeworCQkJaWYgKGQgKyBEQVlTUEVSV0VFSyA+PQorCQkJCW1vbl9sZW5ndGhzW2xlYXB5ZWFyXVtydWxlcC0+cl9tb24gLSAxXSkKKwkJCQkJYnJlYWs7CisJCQlkICs9IERBWVNQRVJXRUVLOworCQl9CisKKwkJLyoKKwkJKiogImQiIGlzIHRoZSBkYXktb2YtbW9udGggKHplcm8tb3JpZ2luKSBvZiB0aGUgZGF5IHdlIHdhbnQuCisJCSovCisJCXZhbHVlICs9IGQgKiBTRUNTUEVSREFZOworCQlicmVhazsKKwl9CisKKwkvKgorCSoqICJ2YWx1ZSIgaXMgdGhlIEVwb2NoLXJlbGF0aXZlIHRpbWUgb2YgMDA6MDA6MDAgVVRDIG9uIHRoZSBkYXkgaW4KKwkqKiBxdWVzdGlvbi4gVG8gZ2V0IHRoZSBFcG9jaC1yZWxhdGl2ZSB0aW1lIG9mIHRoZSBzcGVjaWZpZWQgbG9jYWwKKwkqKiB0aW1lIG9uIHRoYXQgZGF5LCBhZGQgdGhlIHRyYW5zaXRpb24gdGltZSBhbmQgdGhlIGN1cnJlbnQgb2Zmc2V0CisJKiogZnJvbSBVVEMuCisJKi8KKwlyZXR1cm4gdmFsdWUgKyBydWxlcC0+cl90aW1lICsgb2Zmc2V0OworfQorCisvKgorKiogR2l2ZW4gYSBQT1NJWCBzZWN0aW9uIDgtc3R5bGUgVFogc3RyaW5nLCBmaWxsIGluIHRoZSBydWxlIHRhYmxlcyBhcworKiogYXBwcm9wcmlhdGUuCisqLworCitzdGF0aWMgaW50Cit0enBhcnNlKG5hbWUsIHNwLCBsYXN0ZGl0Y2gpCitjb25zdCBjaGFyICoJCQluYW1lOworcmVnaXN0ZXIgc3RydWN0IHN0YXRlICogY29uc3QJc3A7Citjb25zdCBpbnQJCQlsYXN0ZGl0Y2g7Cit7CisJY29uc3QgY2hhciAqCQkJc3RkbmFtZTsKKwljb25zdCBjaGFyICoJCQlkc3RuYW1lOworCXNpemVfdAkJCQlzdGRsZW47CisJc2l6ZV90CQkJCWRzdGxlbjsKKwlsb25nCQkJCXN0ZG9mZnNldDsKKwlsb25nCQkJCWRzdG9mZnNldDsKKwlyZWdpc3RlciB0aW1lX3QgKgkJYXRwOworCXJlZ2lzdGVyIHVuc2lnbmVkIGNoYXIgKgl0eXBlcDsKKwlyZWdpc3RlciBjaGFyICoJCQljcDsKKwlyZWdpc3RlciBpbnQJCQlsb2FkX3Jlc3VsdDsKKworCUlOSVRJQUxJWkUoZHN0bmFtZSk7CisJc3RkbmFtZSA9IG5hbWU7CisJaWYgKGxhc3RkaXRjaCkgeworCQlzdGRsZW4gPSBzdHJsZW4obmFtZSk7CS8qIGxlbmd0aCBvZiBzdGFuZGFyZCB6b25lIG5hbWUgKi8KKwkJbmFtZSArPSBzdGRsZW47CisJCWlmIChzdGRsZW4gPj0gc2l6ZW9mIHNwLT5jaGFycykKKwkJCXN0ZGxlbiA9IChzaXplb2Ygc3AtPmNoYXJzKSAtIDE7CisJCXN0ZG9mZnNldCA9IDA7CisJfSBlbHNlIHsKKwkJaWYgKCpuYW1lID09ICc8JykgeworCQkJbmFtZSsrOworCQkJc3RkbmFtZSA9IG5hbWU7CisJCQluYW1lID0gZ2V0cXpuYW1lKG5hbWUsICc+Jyk7CisJCQlpZiAoKm5hbWUgIT0gJz4nKQorCQkJCXJldHVybiAoLTEpOworCQkJc3RkbGVuID0gbmFtZSAtIHN0ZG5hbWU7CisJCQluYW1lKys7CisJCX0gZWxzZSB7CisJCQluYW1lID0gZ2V0em5hbWUobmFtZSk7CisJCQlzdGRsZW4gPSBuYW1lIC0gc3RkbmFtZTsKKwkJfQorCQlpZiAoKm5hbWUgPT0gJ1wwJykKKwkJCXJldHVybiAtMTsKKwkJbmFtZSA9IGdldG9mZnNldChuYW1lLCAmc3Rkb2Zmc2V0KTsKKwkJaWYgKG5hbWUgPT0gTlVMTCkKKwkJCXJldHVybiAtMTsKKwl9CisJbG9hZF9yZXN1bHQgPSB0emxvYWQoVFpERUZSVUxFUywgc3AsIEZBTFNFKTsKKwlpZiAobG9hZF9yZXN1bHQgIT0gMCkKKwkJc3AtPmxlYXBjbnQgPSAwOwkJLyogc28sIHdlJ3JlIG9mZiBhIGxpdHRsZSAqLworCXNwLT50aW1lY250ID0gMDsKKwlpZiAoKm5hbWUgIT0gJ1wwJykgeworCQlpZiAoKm5hbWUgPT0gJzwnKSB7CisJCQlkc3RuYW1lID0gKytuYW1lOworCQkJbmFtZSA9IGdldHF6bmFtZShuYW1lLCAnPicpOworCQkJaWYgKCpuYW1lICE9ICc+JykKKwkJCQlyZXR1cm4gLTE7CisJCQlkc3RsZW4gPSBuYW1lIC0gZHN0bmFtZTsKKwkJCW5hbWUrKzsKKwkJfSBlbHNlIHsKKwkJCWRzdG5hbWUgPSBuYW1lOworCQkJbmFtZSA9IGdldHpuYW1lKG5hbWUpOworCQkJZHN0bGVuID0gbmFtZSAtIGRzdG5hbWU7IC8qIGxlbmd0aCBvZiBEU1Qgem9uZSBuYW1lICovCisJCX0KKwkJaWYgKCpuYW1lICE9ICdcMCcgJiYgKm5hbWUgIT0gJywnICYmICpuYW1lICE9ICc7JykgeworCQkJbmFtZSA9IGdldG9mZnNldChuYW1lLCAmZHN0b2Zmc2V0KTsKKwkJCWlmIChuYW1lID09IE5VTEwpCisJCQkJcmV0dXJuIC0xOworCQl9IGVsc2UJZHN0b2Zmc2V0ID0gc3Rkb2Zmc2V0IC0gU0VDU1BFUkhPVVI7CisJCWlmICgqbmFtZSA9PSAnXDAnICYmIGxvYWRfcmVzdWx0ICE9IDApCisJCQluYW1lID0gVFpERUZSVUxFU1RSSU5HOworCQlpZiAoKm5hbWUgPT0gJywnIHx8ICpuYW1lID09ICc7JykgeworCQkJc3RydWN0IHJ1bGUJc3RhcnQ7CisJCQlzdHJ1Y3QgcnVsZQllbmQ7CisJCQlyZWdpc3RlciBpbnQJeWVhcjsKKwkJCXJlZ2lzdGVyIHRpbWVfdAlqYW5maXJzdDsKKwkJCXRpbWVfdAkJc3RhcnR0aW1lOworCQkJdGltZV90CQllbmR0aW1lOworCisJCQkrK25hbWU7CisJCQlpZiAoKG5hbWUgPSBnZXRydWxlKG5hbWUsICZzdGFydCkpID09IE5VTEwpCisJCQkJcmV0dXJuIC0xOworCQkJaWYgKCpuYW1lKysgIT0gJywnKQorCQkJCXJldHVybiAtMTsKKwkJCWlmICgobmFtZSA9IGdldHJ1bGUobmFtZSwgJmVuZCkpID09IE5VTEwpCisJCQkJcmV0dXJuIC0xOworCQkJaWYgKCpuYW1lICE9ICdcMCcpCisJCQkJcmV0dXJuIC0xOworCQkJc3AtPnR5cGVjbnQgPSAyOwkvKiBzdGFuZGFyZCB0aW1lIGFuZCBEU1QgKi8KKwkJCS8qCisJCQkqKiBUd28gdHJhbnNpdGlvbnMgcGVyIHllYXIsIGZyb20gRVBPQ0hfWUVBUiBmb3J3YXJkLgorCQkJKi8KKwkJCXNwLT50dGlzWzBdLnR0X2dtdG9mZiA9IC1kc3RvZmZzZXQ7CisJCQlzcC0+dHRpc1swXS50dF9pc2RzdCA9IDE7CisJCQlzcC0+dHRpc1swXS50dF9hYmJyaW5kID0gc3RkbGVuICsgMTsKKwkJCXNwLT50dGlzWzFdLnR0X2dtdG9mZiA9IC1zdGRvZmZzZXQ7CisJCQlzcC0+dHRpc1sxXS50dF9pc2RzdCA9IDA7CisJCQlzcC0+dHRpc1sxXS50dF9hYmJyaW5kID0gMDsKKwkJCWF0cCA9IHNwLT5hdHM7CisJCQl0eXBlcCA9IHNwLT50eXBlczsKKwkJCWphbmZpcnN0ID0gMDsKKwkJCWZvciAoeWVhciA9IEVQT0NIX1lFQVI7CisJCQkgICAgc3AtPnRpbWVjbnQgKyAyIDw9IFRaX01BWF9USU1FUzsKKwkJCSAgICArK3llYXIpIHsKKwkJCSAgICAJdGltZV90CW5ld2ZpcnN0OworCisJCQkJc3RhcnR0aW1lID0gdHJhbnN0aW1lKGphbmZpcnN0LCB5ZWFyLCAmc3RhcnQsCisJCQkJCXN0ZG9mZnNldCk7CisJCQkJZW5kdGltZSA9IHRyYW5zdGltZShqYW5maXJzdCwgeWVhciwgJmVuZCwKKwkJCQkJZHN0b2Zmc2V0KTsKKwkJCQlpZiAoc3RhcnR0aW1lID4gZW5kdGltZSkgeworCQkJCQkqYXRwKysgPSBlbmR0aW1lOworCQkJCQkqdHlwZXArKyA9IDE7CS8qIERTVCBlbmRzICovCisJCQkJCSphdHArKyA9IHN0YXJ0dGltZTsKKwkJCQkJKnR5cGVwKysgPSAwOwkvKiBEU1QgYmVnaW5zICovCisJCQkJfSBlbHNlIHsKKwkJCQkJKmF0cCsrID0gc3RhcnR0aW1lOworCQkJCQkqdHlwZXArKyA9IDA7CS8qIERTVCBiZWdpbnMgKi8KKwkJCQkJKmF0cCsrID0gZW5kdGltZTsKKwkJCQkJKnR5cGVwKysgPSAxOwkvKiBEU1QgZW5kcyAqLworCQkJCX0KKwkJCQlzcC0+dGltZWNudCArPSAyOworCQkJCW5ld2ZpcnN0ID0gamFuZmlyc3Q7CisJCQkJbmV3Zmlyc3QgKz0geWVhcl9sZW5ndGhzW2lzbGVhcCh5ZWFyKV0gKgorCQkJCQlTRUNTUEVSREFZOworCQkJCWlmIChuZXdmaXJzdCA8PSBqYW5maXJzdCkKKwkJCQkJYnJlYWs7CisJCQkJamFuZmlyc3QgPSBuZXdmaXJzdDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXJlZ2lzdGVyIGxvbmcJdGhlaXJzdGRvZmZzZXQ7CisJCQlyZWdpc3RlciBsb25nCXRoZWlyZHN0b2Zmc2V0OworCQkJcmVnaXN0ZXIgbG9uZwl0aGVpcm9mZnNldDsKKwkJCXJlZ2lzdGVyIGludAlpc2RzdDsKKwkJCXJlZ2lzdGVyIGludAlpOworCQkJcmVnaXN0ZXIgaW50CWo7CisKKwkJCWlmICgqbmFtZSAhPSAnXDAnKQorCQkJCXJldHVybiAtMTsKKwkJCS8qCisJCQkqKiBJbml0aWFsIHZhbHVlcyBvZiB0aGVpcnN0ZG9mZnNldCBhbmQgdGhlaXJkc3RvZmZzZXQuCisJCQkqLworCQkJdGhlaXJzdGRvZmZzZXQgPSAwOworCQkJZm9yIChpID0gMDsgaSA8IHNwLT50aW1lY250OyArK2kpIHsKKwkJCQlqID0gc3AtPnR5cGVzW2ldOworCQkJCWlmICghc3AtPnR0aXNbal0udHRfaXNkc3QpIHsKKwkJCQkJdGhlaXJzdGRvZmZzZXQgPQorCQkJCQkJLXNwLT50dGlzW2pdLnR0X2dtdG9mZjsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJdGhlaXJkc3RvZmZzZXQgPSAwOworCQkJZm9yIChpID0gMDsgaSA8IHNwLT50aW1lY250OyArK2kpIHsKKwkJCQlqID0gc3AtPnR5cGVzW2ldOworCQkJCWlmIChzcC0+dHRpc1tqXS50dF9pc2RzdCkgeworCQkJCQl0aGVpcmRzdG9mZnNldCA9CisJCQkJCQktc3AtPnR0aXNbal0udHRfZ210b2ZmOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQkvKgorCQkJKiogSW5pdGlhbGx5IHdlJ3JlIGFzc3VtZWQgdG8gYmUgaW4gc3RhbmRhcmQgdGltZS4KKwkJCSovCisJCQlpc2RzdCA9IEZBTFNFOworCQkJdGhlaXJvZmZzZXQgPSB0aGVpcnN0ZG9mZnNldDsKKwkJCS8qCisJCQkqKiBOb3cganVnZ2xlIHRyYW5zaXRpb24gdGltZXMgYW5kIHR5cGVzCisJCQkqKiB0cmFja2luZyBvZmZzZXRzIGFzIHlvdSBkby4KKwkJCSovCisJCQlmb3IgKGkgPSAwOyBpIDwgc3AtPnRpbWVjbnQ7ICsraSkgeworCQkJCWogPSBzcC0+dHlwZXNbaV07CisJCQkJc3AtPnR5cGVzW2ldID0gc3AtPnR0aXNbal0udHRfaXNkc3Q7CisJCQkJaWYgKHNwLT50dGlzW2pdLnR0X3R0aXNnbXQpIHsKKwkJCQkJLyogTm8gYWRqdXN0bWVudCB0byB0cmFuc2l0aW9uIHRpbWUgKi8KKwkJCQl9IGVsc2UgeworCQkJCQkvKgorCQkJCQkqKiBJZiBzdW1tZXIgdGltZSBpcyBpbiBlZmZlY3QsIGFuZCB0aGUKKwkJCQkJKiogdHJhbnNpdGlvbiB0aW1lIHdhcyBub3Qgc3BlY2lmaWVkIGFzCisJCQkJCSoqIHN0YW5kYXJkIHRpbWUsIGFkZCB0aGUgc3VtbWVyIHRpbWUKKwkJCQkJKiogb2Zmc2V0IHRvIHRoZSB0cmFuc2l0aW9uIHRpbWU7CisJCQkJCSoqIG90aGVyd2lzZSwgYWRkIHRoZSBzdGFuZGFyZCB0aW1lCisJCQkJCSoqIG9mZnNldCB0byB0aGUgdHJhbnNpdGlvbiB0aW1lLgorCQkJCQkqLworCQkJCQkvKgorCQkJCQkqKiBUcmFuc2l0aW9ucyBmcm9tIERTVCB0byBERFNUCisJCQkJCSoqIHdpbGwgZWZmZWN0aXZlbHkgZGlzYXBwZWFyIHNpbmNlCisJCQkJCSoqIFBPU0lYIHByb3ZpZGVzIGZvciBvbmx5IG9uZSBEU1QKKwkJCQkJKiogb2Zmc2V0LgorCQkJCQkqLworCQkJCQlpZiAoaXNkc3QgJiYgIXNwLT50dGlzW2pdLnR0X3R0aXNzdGQpIHsKKwkJCQkJCXNwLT5hdHNbaV0gKz0gZHN0b2Zmc2V0IC0KKwkJCQkJCQl0aGVpcmRzdG9mZnNldDsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCXNwLT5hdHNbaV0gKz0gc3Rkb2Zmc2V0IC0KKwkJCQkJCQl0aGVpcnN0ZG9mZnNldDsKKwkJCQkJfQorCQkJCX0KKwkJCQl0aGVpcm9mZnNldCA9IC1zcC0+dHRpc1tqXS50dF9nbXRvZmY7CisJCQkJaWYgKHNwLT50dGlzW2pdLnR0X2lzZHN0KQorCQkJCQl0aGVpcmRzdG9mZnNldCA9IHRoZWlyb2Zmc2V0OworCQkJCWVsc2UJdGhlaXJzdGRvZmZzZXQgPSB0aGVpcm9mZnNldDsKKwkJCX0KKwkJCS8qCisJCQkqKiBGaW5hbGx5LCBmaWxsIGluIHR0aXMuCisJCQkqKiB0dGlzc3RkIGFuZCB0dGlzZ210IG5lZWQgbm90IGJlIGhhbmRsZWQuCisJCQkqLworCQkJc3AtPnR0aXNbMF0udHRfZ210b2ZmID0gLXN0ZG9mZnNldDsKKwkJCXNwLT50dGlzWzBdLnR0X2lzZHN0ID0gRkFMU0U7CisJCQlzcC0+dHRpc1swXS50dF9hYmJyaW5kID0gMDsKKwkJCXNwLT50dGlzWzFdLnR0X2dtdG9mZiA9IC1kc3RvZmZzZXQ7CisJCQlzcC0+dHRpc1sxXS50dF9pc2RzdCA9IFRSVUU7CisJCQlzcC0+dHRpc1sxXS50dF9hYmJyaW5kID0gc3RkbGVuICsgMTsKKwkJCXNwLT50eXBlY250ID0gMjsKKwkJfQorCX0gZWxzZSB7CisJCWRzdGxlbiA9IDA7CisJCXNwLT50eXBlY250ID0gMTsJCS8qIG9ubHkgc3RhbmRhcmQgdGltZSAqLworCQlzcC0+dGltZWNudCA9IDA7CisJCXNwLT50dGlzWzBdLnR0X2dtdG9mZiA9IC1zdGRvZmZzZXQ7CisJCXNwLT50dGlzWzBdLnR0X2lzZHN0ID0gMDsKKwkJc3AtPnR0aXNbMF0udHRfYWJicmluZCA9IDA7CisJfQorCXNwLT5jaGFyY250ID0gc3RkbGVuICsgMTsKKwlpZiAoZHN0bGVuICE9IDApCisJCXNwLT5jaGFyY250ICs9IGRzdGxlbiArIDE7CisJaWYgKChzaXplX3QpIHNwLT5jaGFyY250ID4gc2l6ZW9mIHNwLT5jaGFycykKKwkJcmV0dXJuIC0xOworCWNwID0gc3AtPmNoYXJzOworCSh2b2lkKSBzdHJuY3B5KGNwLCBzdGRuYW1lLCBzdGRsZW4pOworCWNwICs9IHN0ZGxlbjsKKwkqY3ArKyA9ICdcMCc7CisJaWYgKGRzdGxlbiAhPSAwKSB7CisJCSh2b2lkKSBzdHJuY3B5KGNwLCBkc3RuYW1lLCBkc3RsZW4pOworCQkqKGNwICsgZHN0bGVuKSA9ICdcMCc7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorZ210bG9hZChzcCkKK3N0cnVjdCBzdGF0ZSAqIGNvbnN0CXNwOworeworCWlmICh0emxvYWQoZ210LCBzcCwgVFJVRSkgIT0gMCkKKwkJKHZvaWQpIHR6cGFyc2UoZ210LCBzcCwgVFJVRSk7Cit9CisKKyNpZm5kZWYgU1REX0lOU1BJUkVECisvKgorKiogQSBub24tc3RhdGljIGRlY2xhcmF0aW9uIG9mIHR6c2V0d2FsbCBpbiBhIHN5c3RlbSBoZWFkZXIgZmlsZQorKiogbWF5IGNhdXNlIGEgd2FybmluZyBhYm91dCB0aGlzIHVwY29taW5nIHN0YXRpYyBkZWNsYXJhdGlvbi4uLgorKi8KK3N0YXRpYworI2VuZGlmIC8qICFkZWZpbmVkIFNURF9JTlNQSVJFRCAqLwordm9pZAordHpzZXR3YWxsIFAoKHZvaWQpKQoreworCWlmIChsY2xfaXNfc2V0IDwgMCkKKwkJcmV0dXJuOworCWxjbF9pc19zZXQgPSAtMTsKKworI2lmZGVmIEFMTF9TVEFURQorCWlmIChsY2xwdHIgPT0gTlVMTCkgeworCQlsY2xwdHIgPSAoc3RydWN0IHN0YXRlICopIG1hbGxvYyhzaXplb2YgKmxjbHB0cik7CisJCWlmIChsY2xwdHIgPT0gTlVMTCkgeworCQkJc2V0dHpuYW1lKCk7CS8qIGFsbCB3ZSBjYW4gZG8gKi8KKwkJCXJldHVybjsKKwkJfQorCX0KKyNlbmRpZiAvKiBkZWZpbmVkIEFMTF9TVEFURSAqLworCWlmICh0emxvYWQoKGNoYXIgKikgTlVMTCwgbGNscHRyLCBUUlVFKSAhPSAwKQorCQlnbXRsb2FkKGxjbHB0cik7CisJc2V0dHpuYW1lKCk7Cit9CisKK3ZvaWQKK3R6c2V0IFAoKHZvaWQpKQoreworCXJlZ2lzdGVyIGNvbnN0IGNoYXIgKgluYW1lID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciBidWZbUFJPUF9WQUxVRV9NQVhdOworCisJbmFtZSA9IGdldGVudigiVFoiKTsKKworCS8vIHRyeSB0aGUgInBlcnNpc3Quc3lzLnRpbWV6b25lIiBzeXN0ZW0gcHJvcGVydHkgZmlyc3QKKwlpZiAobmFtZSA9PSBOVUxMICYmIF9fc3lzdGVtX3Byb3BlcnR5X2dldCgicGVyc2lzdC5zeXMudGltZXpvbmUiLCBidWYpID4gMCkKKwkgICAgbmFtZSA9IGJ1ZjsKKworCWlmIChuYW1lID09IE5VTEwpIHsKKwkJdHpzZXR3YWxsKCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAobGNsX2lzX3NldCA+IDAgJiYgc3RyY21wKGxjbF9UWm5hbWUsIG5hbWUpID09IDApCisJCXJldHVybjsKKwlsY2xfaXNfc2V0ID0gc3RybGVuKG5hbWUpIDwgc2l6ZW9mIGxjbF9UWm5hbWU7CisJaWYgKGxjbF9pc19zZXQpCisJCSh2b2lkKSBzdHJjcHkobGNsX1RabmFtZSwgbmFtZSk7CisKKyNpZmRlZiBBTExfU1RBVEUKKwlpZiAobGNscHRyID09IE5VTEwpIHsKKwkJbGNscHRyID0gKHN0cnVjdCBzdGF0ZSAqKSBtYWxsb2Moc2l6ZW9mICpsY2xwdHIpOworCQlpZiAobGNscHRyID09IE5VTEwpIHsKKwkJCXNldHR6bmFtZSgpOwkvKiBhbGwgd2UgY2FuIGRvICovCisJCQlyZXR1cm47CisJCX0KKwl9CisjZW5kaWYgLyogZGVmaW5lZCBBTExfU1RBVEUgKi8KKwlpZiAoKm5hbWUgPT0gJ1wwJykgeworCQkvKgorCQkqKiBVc2VyIHdhbnRzIGl0IGZhc3QgcmF0aGVyIHRoYW4gcmlnaHQuCisJCSovCisJCWxjbHB0ci0+bGVhcGNudCA9IDA7CQkvKiBzbywgd2UncmUgb2ZmIGEgbGl0dGxlICovCisJCWxjbHB0ci0+dGltZWNudCA9IDA7CisJCWxjbHB0ci0+dHlwZWNudCA9IDA7CisJCWxjbHB0ci0+dHRpc1swXS50dF9pc2RzdCA9IDA7CisJCWxjbHB0ci0+dHRpc1swXS50dF9nbXRvZmYgPSAwOworCQlsY2xwdHItPnR0aXNbMF0udHRfYWJicmluZCA9IDA7CisJCSh2b2lkKSBzdHJjcHkobGNscHRyLT5jaGFycywgZ210KTsKKwl9IGVsc2UgaWYgKHR6bG9hZChuYW1lLCBsY2xwdHIsIFRSVUUpICE9IDApCisJCWlmIChuYW1lWzBdID09ICc6JyB8fCB0enBhcnNlKG5hbWUsIGxjbHB0ciwgRkFMU0UpICE9IDApCisJCQkodm9pZCkgZ210bG9hZChsY2xwdHIpOworCXNldHR6bmFtZSgpOworfQorCisvKgorKiogVGhlIGVhc3kgd2F5IHRvIGJlaGF2ZSAiYXMgaWYgbm8gbGlicmFyeSBmdW5jdGlvbiBjYWxscyIgbG9jYWx0aW1lCisqKiBpcyB0byBub3QgY2FsbCBpdC0tc28gd2UgZHJvcCBpdHMgZ3V0cyBpbnRvICJsb2NhbHN1YiIsIHdoaWNoIGNhbiBiZQorKiogZnJlZWx5IGNhbGxlZC4gKEFuZCBubywgdGhlIFBBTlMgZG9lc24ndCByZXF1aXJlIHRoZSBhYm92ZSBiZWhhdmlvci0tCisqKiBidXQgaXQgKmlzKiBkZXNpcmFibGUuKQorKioKKyoqIFRoZSB1bnVzZWQgb2Zmc2V0IGFyZ3VtZW50IGlzIGZvciB0aGUgYmVuZWZpdCBvZiBta3RpbWUgdmFyaWFudHMuCisqLworCisvKkFSR1NVU0VEKi8KK3N0YXRpYyBzdHJ1Y3QgdG0gKgorbG9jYWxzdWIodGltZXAsIG9mZnNldCwgdG1wKQorY29uc3QgdGltZV90ICogY29uc3QJdGltZXA7Citjb25zdCBsb25nCQlvZmZzZXQ7CitzdHJ1Y3QgdG0gKiBjb25zdAl0bXA7Cit7CisJcmVnaXN0ZXIgc3RydWN0IHN0YXRlICoJCXNwOworCXJlZ2lzdGVyIGNvbnN0IHN0cnVjdCB0dGluZm8gKgl0dGlzcDsKKwlyZWdpc3RlciBpbnQJCQlpOworCXJlZ2lzdGVyIHN0cnVjdCB0bSAqCQlyZXN1bHQ7CisJY29uc3QgdGltZV90CQkJdCA9ICp0aW1lcDsKKworCXNwID0gbGNscHRyOworI2lmZGVmIEFMTF9TVEFURQorCWlmIChzcCA9PSBOVUxMKQorCQlyZXR1cm4gZ210c3ViKHRpbWVwLCBvZmZzZXQsIHRtcCk7CisjZW5kaWYgLyogZGVmaW5lZCBBTExfU1RBVEUgKi8KKwlpZiAoKHNwLT5nb2JhY2sgJiYgdCA8IHNwLT5hdHNbMF0pIHx8CisJCShzcC0+Z29haGVhZCAmJiB0ID4gc3AtPmF0c1tzcC0+dGltZWNudCAtIDFdKSkgeworCQkJdGltZV90CQkJbmV3dCA9IHQ7CisJCQlyZWdpc3RlciB0aW1lX3QJCXNlY29uZHM7CisJCQlyZWdpc3RlciB0aW1lX3QJCXRjeWNsZXM7CisJCQlyZWdpc3RlciBpbnRfZmFzdDY0X3QJaWN5Y2xlczsKKworCQkJaWYgKHQgPCBzcC0+YXRzWzBdKQorCQkJCXNlY29uZHMgPSBzcC0+YXRzWzBdIC0gdDsKKwkJCWVsc2UJc2Vjb25kcyA9IHQgLSBzcC0+YXRzW3NwLT50aW1lY250IC0gMV07CisJCQktLXNlY29uZHM7CisJCQl0Y3ljbGVzID0gc2Vjb25kcyAvIFlFQVJTUEVSUkVQRUFUIC8gQVZHU0VDU1BFUllFQVI7CisJCQkrK3RjeWNsZXM7CisJCQlpY3ljbGVzID0gdGN5Y2xlczsKKwkJCWlmICh0Y3ljbGVzIC0gaWN5Y2xlcyA+PSAxIHx8IGljeWNsZXMgLSB0Y3ljbGVzID49IDEpCisJCQkJcmV0dXJuIE5VTEw7CisJCQlzZWNvbmRzID0gaWN5Y2xlczsKKwkJCXNlY29uZHMgKj0gWUVBUlNQRVJSRVBFQVQ7CisJCQlzZWNvbmRzICo9IEFWR1NFQ1NQRVJZRUFSOworCQkJaWYgKHQgPCBzcC0+YXRzWzBdKQorCQkJCW5ld3QgKz0gc2Vjb25kczsKKwkJCWVsc2UJbmV3dCAtPSBzZWNvbmRzOworCQkJaWYgKG5ld3QgPCBzcC0+YXRzWzBdIHx8CisJCQkJbmV3dCA+IHNwLT5hdHNbc3AtPnRpbWVjbnQgLSAxXSkKKwkJCQkJcmV0dXJuIE5VTEw7CS8qICJjYW5ub3QgaGFwcGVuIiAqLworCQkJcmVzdWx0ID0gbG9jYWxzdWIoJm5ld3QsIG9mZnNldCwgdG1wKTsKKwkJCWlmIChyZXN1bHQgPT0gdG1wKSB7CisJCQkJcmVnaXN0ZXIgdGltZV90CW5ld3k7CisKKwkJCQluZXd5ID0gdG1wLT50bV95ZWFyOworCQkJCWlmICh0IDwgc3AtPmF0c1swXSkKKwkJCQkJbmV3eSAtPSBpY3ljbGVzICogWUVBUlNQRVJSRVBFQVQ7CisJCQkJZWxzZQluZXd5ICs9IGljeWNsZXMgKiBZRUFSU1BFUlJFUEVBVDsKKwkJCQl0bXAtPnRtX3llYXIgPSBuZXd5OworCQkJCWlmICh0bXAtPnRtX3llYXIgIT0gbmV3eSkKKwkJCQkJcmV0dXJuIE5VTEw7CisJCQl9CisJCQlyZXR1cm4gcmVzdWx0OworCX0KKwlpZiAoc3AtPnRpbWVjbnQgPT0gMCB8fCB0IDwgc3AtPmF0c1swXSkgeworCQlpID0gMDsKKwkJd2hpbGUgKHNwLT50dGlzW2ldLnR0X2lzZHN0KQorCQkJaWYgKCsraSA+PSBzcC0+dHlwZWNudCkgeworCQkJCWkgPSAwOworCQkJCWJyZWFrOworCQkJfQorCX0gZWxzZSB7CisJCXJlZ2lzdGVyIGludAlsbyA9IDE7CisJCXJlZ2lzdGVyIGludAloaSA9IHNwLT50aW1lY250OworCisJCXdoaWxlIChsbyA8IGhpKSB7CisJCQlyZWdpc3RlciBpbnQJbWlkID0gKGxvICsgaGkpID4+IDE7CisKKwkJCWlmICh0IDwgc3AtPmF0c1ttaWRdKQorCQkJCWhpID0gbWlkOworCQkJZWxzZQlsbyA9IG1pZCArIDE7CisJCX0KKwkJaSA9IChpbnQpIHNwLT50eXBlc1tsbyAtIDFdOworCX0KKwl0dGlzcCA9ICZzcC0+dHRpc1tpXTsKKwkvKgorCSoqIFRvIGdldCAod3JvbmcpIGJlaGF2aW9yIHRoYXQncyBjb21wYXRpYmxlIHdpdGggU3lzdGVtIFYgUmVsZWFzZSAyLjAKKwkqKiB5b3UnZCByZXBsYWNlIHRoZSBzdGF0ZW1lbnQgYmVsb3cgd2l0aAorCSoqCXQgKz0gdHRpc3AtPnR0X2dtdG9mZjsKKwkqKgl0aW1lc3ViKCZ0LCAwTCwgc3AsIHRtcCk7CisJKi8KKwlyZXN1bHQgPSB0aW1lc3ViKCZ0LCB0dGlzcC0+dHRfZ210b2ZmLCBzcCwgdG1wKTsKKwl0bXAtPnRtX2lzZHN0ID0gdHRpc3AtPnR0X2lzZHN0OworCXR6bmFtZVt0bXAtPnRtX2lzZHN0XSA9ICZzcC0+Y2hhcnNbdHRpc3AtPnR0X2FiYnJpbmRdOworI2lmZGVmIFRNX1pPTkUKKwl0bXAtPlRNX1pPTkUgPSAmc3AtPmNoYXJzW3R0aXNwLT50dF9hYmJyaW5kXTsKKyNlbmRpZiAvKiBkZWZpbmVkIFRNX1pPTkUgKi8KKwlyZXR1cm4gcmVzdWx0OworfQorCitzdHJ1Y3QgdG0gKgorbG9jYWx0aW1lKHRpbWVwKQorY29uc3QgdGltZV90ICogY29uc3QJdGltZXA7Cit7CisJdHpzZXQoKTsKKwlyZXR1cm4gbG9jYWxzdWIodGltZXAsIDBMLCAmdG0pOworfQorCisvKgorKiogUmUtZW50cmFudCB2ZXJzaW9uIG9mIGxvY2FsdGltZS4KKyovCisKK3N0cnVjdCB0bSAqCitsb2NhbHRpbWVfcih0aW1lcCwgdG1wKQorY29uc3QgdGltZV90ICogY29uc3QJdGltZXA7CitzdHJ1Y3QgdG0gKgkJdG1wOworeworICAgICAgICB0enNldCgpOworCXJldHVybiBsb2NhbHN1Yih0aW1lcCwgMEwsIHRtcCk7Cit9CisKKy8qCisqKiBnbXRzdWIgaXMgdG8gZ210aW1lIGFzIGxvY2Fsc3ViIGlzIHRvIGxvY2FsdGltZS4KKyovCisKK3N0YXRpYyBzdHJ1Y3QgdG0gKgorZ210c3ViKHRpbWVwLCBvZmZzZXQsIHRtcCkKK2NvbnN0IHRpbWVfdCAqIGNvbnN0CXRpbWVwOworY29uc3QgbG9uZwkJb2Zmc2V0Oworc3RydWN0IHRtICogY29uc3QJdG1wOworeworCXJlZ2lzdGVyIHN0cnVjdCB0bSAqCXJlc3VsdDsKKworCWlmICghZ210X2lzX3NldCkgeworCQlnbXRfaXNfc2V0ID0gVFJVRTsKKyNpZmRlZiBBTExfU1RBVEUKKwkJZ210cHRyID0gKHN0cnVjdCBzdGF0ZSAqKSBtYWxsb2Moc2l6ZW9mICpnbXRwdHIpOworCQlpZiAoZ210cHRyICE9IE5VTEwpCisjZW5kaWYgLyogZGVmaW5lZCBBTExfU1RBVEUgKi8KKwkJCWdtdGxvYWQoZ210cHRyKTsKKwl9CisJcmVzdWx0ID0gdGltZXN1Yih0aW1lcCwgb2Zmc2V0LCBnbXRwdHIsIHRtcCk7CisjaWZkZWYgVE1fWk9ORQorCS8qCisJKiogQ291bGQgZ2V0IGZhbmN5IGhlcmUgYW5kIGRlbGl2ZXIgc29tZXRoaW5nIHN1Y2ggYXMKKwkqKiAiVVRDK3h4eHgiIG9yICJVVEMteHh4eCIgaWYgb2Zmc2V0IGlzIG5vbi16ZXJvLAorCSoqIGJ1dCB0aGlzIGlzIG5vIHRpbWUgZm9yIGEgdHJlYXN1cmUgaHVudC4KKwkqLworCWlmIChvZmZzZXQgIT0gMCkKKwkJdG1wLT5UTV9aT05FID0gd2lsZGFiYnI7CisJZWxzZSB7CisjaWZkZWYgQUxMX1NUQVRFCisJCWlmIChnbXRwdHIgPT0gTlVMTCkKKwkJCXRtcC0+VE1fWk9ORSA9IGdtdDsKKwkJZWxzZQl0bXAtPlRNX1pPTkUgPSBnbXRwdHItPmNoYXJzOworI2VuZGlmIC8qIGRlZmluZWQgQUxMX1NUQVRFICovCisjaWZuZGVmIEFMTF9TVEFURQorCQl0bXAtPlRNX1pPTkUgPSBnbXRwdHItPmNoYXJzOworI2VuZGlmIC8qIFN0YXRlIEZhcm0gKi8KKwl9CisjZW5kaWYgLyogZGVmaW5lZCBUTV9aT05FICovCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RydWN0IHRtICoKK2dtdGltZSh0aW1lcCkKK2NvbnN0IHRpbWVfdCAqIGNvbnN0CXRpbWVwOworeworCXJldHVybiBnbXRzdWIodGltZXAsIDBMLCAmdG0pOworfQorCisvKgorKiBSZS1lbnRyYW50IHZlcnNpb24gb2YgZ210aW1lLgorKi8KKworc3RydWN0IHRtICoKK2dtdGltZV9yKHRpbWVwLCB0bXApCitjb25zdCB0aW1lX3QgKiBjb25zdAl0aW1lcDsKK3N0cnVjdCB0bSAqCQl0bXA7Cit7CisJcmV0dXJuIGdtdHN1Yih0aW1lcCwgMEwsIHRtcCk7Cit9CisKKyNpZmRlZiBTVERfSU5TUElSRUQKKworc3RydWN0IHRtICoKK29mZnRpbWUodGltZXAsIG9mZnNldCkKK2NvbnN0IHRpbWVfdCAqIGNvbnN0CXRpbWVwOworY29uc3QgbG9uZwkJb2Zmc2V0OworeworCXJldHVybiBnbXRzdWIodGltZXAsIG9mZnNldCwgJnRtKTsKK30KKworI2VuZGlmIC8qIGRlZmluZWQgU1REX0lOU1BJUkVEICovCisKKy8qCisqKiBSZXR1cm4gdGhlIG51bWJlciBvZiBsZWFwIHllYXJzIHRocm91Z2ggdGhlIGVuZCBvZiB0aGUgZ2l2ZW4geWVhcgorKiogd2hlcmUsIHRvIG1ha2UgdGhlIG1hdGggZWFzeSwgdGhlIGFuc3dlciBmb3IgeWVhciB6ZXJvIGlzIGRlZmluZWQgYXMgemVyby4KKyovCisKK3N0YXRpYyBpbnQKK2xlYXBzX3RocnVfZW5kX29mKHkpCityZWdpc3RlciBjb25zdCBpbnQJeTsKK3sKKwlyZXR1cm4gKHkgPj0gMCkgPyAoeSAvIDQgLSB5IC8gMTAwICsgeSAvIDQwMCkgOgorCQktKGxlYXBzX3RocnVfZW5kX29mKC0oeSArIDEpKSArIDEpOworfQorCitzdGF0aWMgc3RydWN0IHRtICoKK3RpbWVzdWIodGltZXAsIG9mZnNldCwgc3AsIHRtcCkKK2NvbnN0IHRpbWVfdCAqIGNvbnN0CQkJdGltZXA7Citjb25zdCBsb25nCQkJCW9mZnNldDsKK3JlZ2lzdGVyIGNvbnN0IHN0cnVjdCBzdGF0ZSAqIGNvbnN0CXNwOworcmVnaXN0ZXIgc3RydWN0IHRtICogY29uc3QJCXRtcDsKK3sKKwlyZWdpc3RlciBjb25zdCBzdHJ1Y3QgbHNpbmZvICoJbHA7CisJcmVnaXN0ZXIgdGltZV90CQkJdGRheXM7CisJcmVnaXN0ZXIgaW50CQkJaWRheXM7CS8qIHVuc2lnbmVkIHdvdWxkIGJlIHNvIDIwMDMgKi8KKwlyZWdpc3RlciBsb25nCQkJcmVtOworCWludAkJCQl5OworCXJlZ2lzdGVyIGNvbnN0IGludCAqCQlpcDsKKwlyZWdpc3RlciBsb25nCQkJY29ycjsKKwlyZWdpc3RlciBpbnQJCQloaXQ7CisJcmVnaXN0ZXIgaW50CQkJaTsKKworCWNvcnIgPSAwOworCWhpdCA9IDA7CisjaWZkZWYgQUxMX1NUQVRFCisJaSA9IChzcCA9PSBOVUxMKSA/IDAgOiBzcC0+bGVhcGNudDsKKyNlbmRpZiAvKiBkZWZpbmVkIEFMTF9TVEFURSAqLworI2lmbmRlZiBBTExfU1RBVEUKKwlpID0gc3AtPmxlYXBjbnQ7CisjZW5kaWYgLyogU3RhdGUgRmFybSAqLworCXdoaWxlICgtLWkgPj0gMCkgeworCQlscCA9ICZzcC0+bHNpc1tpXTsKKwkJaWYgKCp0aW1lcCA+PSBscC0+bHNfdHJhbnMpIHsKKwkJCWlmICgqdGltZXAgPT0gbHAtPmxzX3RyYW5zKSB7CisJCQkJaGl0ID0gKChpID09IDAgJiYgbHAtPmxzX2NvcnIgPiAwKSB8fAorCQkJCQlscC0+bHNfY29yciA+IHNwLT5sc2lzW2kgLSAxXS5sc19jb3JyKTsKKwkJCQlpZiAoaGl0KQorCQkJCQl3aGlsZSAoaSA+IDAgJiYKKwkJCQkJCXNwLT5sc2lzW2ldLmxzX3RyYW5zID09CisJCQkJCQlzcC0+bHNpc1tpIC0gMV0ubHNfdHJhbnMgKyAxICYmCisJCQkJCQlzcC0+bHNpc1tpXS5sc19jb3JyID09CisJCQkJCQlzcC0+bHNpc1tpIC0gMV0ubHNfY29yciArIDEpIHsKKwkJCQkJCQkrK2hpdDsKKwkJCQkJCQktLWk7CisJCQkJCX0KKwkJCX0KKwkJCWNvcnIgPSBscC0+bHNfY29ycjsKKwkJCWJyZWFrOworCQl9CisJfQorCXkgPSBFUE9DSF9ZRUFSOworCXRkYXlzID0gKnRpbWVwIC8gU0VDU1BFUkRBWTsKKwlyZW0gPSAqdGltZXAgLSB0ZGF5cyAqIFNFQ1NQRVJEQVk7CisJd2hpbGUgKHRkYXlzIDwgMCB8fCB0ZGF5cyA+PSB5ZWFyX2xlbmd0aHNbaXNsZWFwKHkpXSkgeworCQlpbnQJCW5ld3k7CisJCXJlZ2lzdGVyIHRpbWVfdAl0ZGVsdGE7CisJCXJlZ2lzdGVyIGludAlpZGVsdGE7CisJCXJlZ2lzdGVyIGludAlsZWFwZGF5czsKKworCQl0ZGVsdGEgPSB0ZGF5cyAvIERBWVNQRVJMWUVBUjsKKwkJaWRlbHRhID0gdGRlbHRhOworCQlpZiAodGRlbHRhIC0gaWRlbHRhID49IDEgfHwgaWRlbHRhIC0gdGRlbHRhID49IDEpCisJCQlyZXR1cm4gTlVMTDsKKwkJaWYgKGlkZWx0YSA9PSAwKQorCQkJaWRlbHRhID0gKHRkYXlzIDwgMCkgPyAtMSA6IDE7CisJCW5ld3kgPSB5OworCQlpZiAoaW5jcmVtZW50X292ZXJmbG93KCZuZXd5LCBpZGVsdGEpKQorCQkJcmV0dXJuIE5VTEw7CisJCWxlYXBkYXlzID0gbGVhcHNfdGhydV9lbmRfb2YobmV3eSAtIDEpIC0KKwkJCWxlYXBzX3RocnVfZW5kX29mKHkgLSAxKTsKKwkJdGRheXMgLT0gKCh0aW1lX3QpIG5ld3kgLSB5KSAqIERBWVNQRVJOWUVBUjsKKwkJdGRheXMgLT0gbGVhcGRheXM7CisJCXkgPSBuZXd5OworCX0KKwl7CisJCXJlZ2lzdGVyIGxvbmcJc2Vjb25kczsKKworCQlzZWNvbmRzID0gdGRheXMgKiBTRUNTUEVSREFZICsgMC41OworCQl0ZGF5cyA9IHNlY29uZHMgLyBTRUNTUEVSREFZOworCQlyZW0gKz0gc2Vjb25kcyAtIHRkYXlzICogU0VDU1BFUkRBWTsKKwl9CisJLyoKKwkqKiBHaXZlbiB0aGUgcmFuZ2UsIHdlIGNhbiBub3cgZmVhcmxlc3NseSBjYXN0Li4uCisJKi8KKwlpZGF5cyA9IHRkYXlzOworCXJlbSArPSBvZmZzZXQgLSBjb3JyOworCXdoaWxlIChyZW0gPCAwKSB7CisJCXJlbSArPSBTRUNTUEVSREFZOworCQktLWlkYXlzOworCX0KKwl3aGlsZSAocmVtID49IFNFQ1NQRVJEQVkpIHsKKwkJcmVtIC09IFNFQ1NQRVJEQVk7CisJCSsraWRheXM7CisJfQorCXdoaWxlIChpZGF5cyA8IDApIHsKKwkJaWYgKGluY3JlbWVudF9vdmVyZmxvdygmeSwgLTEpKQorCQkJcmV0dXJuIE5VTEw7CisJCWlkYXlzICs9IHllYXJfbGVuZ3Roc1tpc2xlYXAoeSldOworCX0KKwl3aGlsZSAoaWRheXMgPj0geWVhcl9sZW5ndGhzW2lzbGVhcCh5KV0pIHsKKwkJaWRheXMgLT0geWVhcl9sZW5ndGhzW2lzbGVhcCh5KV07CisJCWlmIChpbmNyZW1lbnRfb3ZlcmZsb3coJnksIDEpKQorCQkJcmV0dXJuIE5VTEw7CisJfQorCXRtcC0+dG1feWVhciA9IHk7CisJaWYgKGluY3JlbWVudF9vdmVyZmxvdygmdG1wLT50bV95ZWFyLCAtVE1fWUVBUl9CQVNFKSkKKwkJcmV0dXJuIE5VTEw7CisJdG1wLT50bV95ZGF5ID0gaWRheXM7CisJLyoKKwkqKiBUaGUgImV4dHJhIiBtb2RzIGJlbG93IGF2b2lkIG92ZXJmbG93IHByb2JsZW1zLgorCSovCisJdG1wLT50bV93ZGF5ID0gRVBPQ0hfV0RBWSArCisJCSgoeSAtIEVQT0NIX1lFQVIpICUgREFZU1BFUldFRUspICoKKwkJKERBWVNQRVJOWUVBUiAlIERBWVNQRVJXRUVLKSArCisJCWxlYXBzX3RocnVfZW5kX29mKHkgLSAxKSAtCisJCWxlYXBzX3RocnVfZW5kX29mKEVQT0NIX1lFQVIgLSAxKSArCisJCWlkYXlzOworCXRtcC0+dG1fd2RheSAlPSBEQVlTUEVSV0VFSzsKKwlpZiAodG1wLT50bV93ZGF5IDwgMCkKKwkJdG1wLT50bV93ZGF5ICs9IERBWVNQRVJXRUVLOworCXRtcC0+dG1faG91ciA9IChpbnQpIChyZW0gLyBTRUNTUEVSSE9VUik7CisJcmVtICU9IFNFQ1NQRVJIT1VSOworCXRtcC0+dG1fbWluID0gKGludCkgKHJlbSAvIFNFQ1NQRVJNSU4pOworCS8qCisJKiogQSBwb3NpdGl2ZSBsZWFwIHNlY29uZCByZXF1aXJlcyBhIHNwZWNpYWwKKwkqKiByZXByZXNlbnRhdGlvbi4gVGhpcyB1c2VzICIuLi4gPz86NTk6NjAiIGV0IHNlcS4KKwkqLworCXRtcC0+dG1fc2VjID0gKGludCkgKHJlbSAlIFNFQ1NQRVJNSU4pICsgaGl0OworCWlwID0gbW9uX2xlbmd0aHNbaXNsZWFwKHkpXTsKKwlmb3IgKHRtcC0+dG1fbW9uID0gMDsgaWRheXMgPj0gaXBbdG1wLT50bV9tb25dOyArKyh0bXAtPnRtX21vbikpCisJCWlkYXlzIC09IGlwW3RtcC0+dG1fbW9uXTsKKwl0bXAtPnRtX21kYXkgPSAoaW50KSAoaWRheXMgKyAxKTsKKwl0bXAtPnRtX2lzZHN0ID0gMDsKKyNpZmRlZiBUTV9HTVRPRkYKKwl0bXAtPlRNX0dNVE9GRiA9IG9mZnNldDsKKyNlbmRpZiAvKiBkZWZpbmVkIFRNX0dNVE9GRiAqLworCXJldHVybiB0bXA7Cit9CisKK2NoYXIgKgorY3RpbWUodGltZXApCitjb25zdCB0aW1lX3QgKiBjb25zdAl0aW1lcDsKK3sKKy8qCisqKiBTZWN0aW9uIDQuMTIuMy4yIG9mIFgzLjE1OS0xOTg5IHJlcXVpcmVzIHRoYXQKKyoqCVRoZSBjdGltZSBmdW5jdGlvbiBjb252ZXJ0cyB0aGUgY2FsZW5kYXIgdGltZSBwb2ludGVkIHRvIGJ5IHRpbWVyCisqKgl0byBsb2NhbCB0aW1lIGluIHRoZSBmb3JtIG9mIGEgc3RyaW5nLiBJdCBpcyBlcXVpdmFsZW50IHRvCisqKgkJYXNjdGltZShsb2NhbHRpbWUodGltZXIpKQorKi8KKwlyZXR1cm4gYXNjdGltZShsb2NhbHRpbWUodGltZXApKTsKK30KKworY2hhciAqCitjdGltZV9yKHRpbWVwLCBidWYpCitjb25zdCB0aW1lX3QgKiBjb25zdAl0aW1lcDsKK2NoYXIgKgkJCWJ1ZjsKK3sKKwlzdHJ1Y3QgdG0JbXl0bTsKKworCXJldHVybiBhc2N0aW1lX3IobG9jYWx0aW1lX3IodGltZXAsICZteXRtKSwgYnVmKTsKK30KKworLyoKKyoqIEFkYXB0ZWQgZnJvbSBjb2RlIHByb3ZpZGVkIGJ5IFJvYmVydCBFbHosIHdobyB3cml0ZXM6CisqKglUaGUgImJlc3QiIHdheSB0byBkbyBta3RpbWUgSSB0aGluayBpcyBiYXNlZCBvbiBhbiBpZGVhIG9mIEJvYgorKioJS3JpZGxlJ3MgKHNvIGl0cyBzYWlkLi4uKSBmcm9tIGEgbG9uZyB0aW1lIGFnby4KKyoqCUl0IGRvZXMgYSBiaW5hcnkgc2VhcmNoIG9mIHRoZSB0aW1lX3Qgc3BhY2UuIFNpbmNlIHRpbWVfdCdzIGFyZQorKioJanVzdCAzMiBiaXRzLCBpdHMgYSBtYXggb2YgMzIgaXRlcmF0aW9ucyAoZXZlbiBhdCA2NCBiaXRzIGl0CisqKgl3b3VsZCBzdGlsbCBiZSB2ZXJ5IHJlYXNvbmFibGUpLgorKi8KKworI2lmbmRlZiBXUk9ORworI2RlZmluZSBXUk9ORwkoLTEpCisjZW5kaWYgLyogIWRlZmluZWQgV1JPTkcgKi8KKworLyoKKyoqIFNpbXBsaWZpZWQgbm9ybWFsaXplIGxvZ2ljIGNvdXJ0ZXN5IFBhdWwgRWdnZXJ0LgorKi8KKworc3RhdGljIGludAoraW5jcmVtZW50X292ZXJmbG93KG51bWJlciwgZGVsdGEpCitpbnQgKgludW1iZXI7CitpbnQJZGVsdGE7Cit7CisJaW50CW51bWJlcjA7CisKKwludW1iZXIwID0gKm51bWJlcjsKKwkqbnVtYmVyICs9IGRlbHRhOworCXJldHVybiAoKm51bWJlciA8IG51bWJlcjApICE9IChkZWx0YSA8IDApOworfQorCitzdGF0aWMgaW50Citsb25nX2luY3JlbWVudF9vdmVyZmxvdyhudW1iZXIsIGRlbHRhKQorbG9uZyAqCW51bWJlcjsKK2ludAlkZWx0YTsKK3sKKwlsb25nCW51bWJlcjA7CisKKwludW1iZXIwID0gKm51bWJlcjsKKwkqbnVtYmVyICs9IGRlbHRhOworCXJldHVybiAoKm51bWJlciA8IG51bWJlcjApICE9IChkZWx0YSA8IDApOworfQorCitzdGF0aWMgaW50Citub3JtYWxpemVfb3ZlcmZsb3codGVuc3B0ciwgdW5pdHNwdHIsIGJhc2UpCitpbnQgKiBjb25zdAl0ZW5zcHRyOworaW50ICogY29uc3QJdW5pdHNwdHI7Citjb25zdCBpbnQJYmFzZTsKK3sKKwlyZWdpc3RlciBpbnQJdGVuc2RlbHRhOworCisJdGVuc2RlbHRhID0gKCp1bml0c3B0ciA+PSAwKSA/CisJCSgqdW5pdHNwdHIgLyBiYXNlKSA6CisJCSgtMSAtICgtMSAtICp1bml0c3B0cikgLyBiYXNlKTsKKwkqdW5pdHNwdHIgLT0gdGVuc2RlbHRhICogYmFzZTsKKwlyZXR1cm4gaW5jcmVtZW50X292ZXJmbG93KHRlbnNwdHIsIHRlbnNkZWx0YSk7Cit9CisKK3N0YXRpYyBpbnQKK2xvbmdfbm9ybWFsaXplX292ZXJmbG93KHRlbnNwdHIsIHVuaXRzcHRyLCBiYXNlKQorbG9uZyAqIGNvbnN0CXRlbnNwdHI7CitpbnQgKiBjb25zdAl1bml0c3B0cjsKK2NvbnN0IGludAliYXNlOworeworCXJlZ2lzdGVyIGludAl0ZW5zZGVsdGE7CisKKwl0ZW5zZGVsdGEgPSAoKnVuaXRzcHRyID49IDApID8KKwkJKCp1bml0c3B0ciAvIGJhc2UpIDoKKwkJKC0xIC0gKC0xIC0gKnVuaXRzcHRyKSAvIGJhc2UpOworCSp1bml0c3B0ciAtPSB0ZW5zZGVsdGEgKiBiYXNlOworCXJldHVybiBsb25nX2luY3JlbWVudF9vdmVyZmxvdyh0ZW5zcHRyLCB0ZW5zZGVsdGEpOworfQorCitzdGF0aWMgaW50Cit0bWNvbXAoYXRtcCwgYnRtcCkKK3JlZ2lzdGVyIGNvbnN0IHN0cnVjdCB0bSAqIGNvbnN0IGF0bXA7CityZWdpc3RlciBjb25zdCBzdHJ1Y3QgdG0gKiBjb25zdCBidG1wOworeworCXJlZ2lzdGVyIGludAlyZXN1bHQ7CisKKwlpZiAoKHJlc3VsdCA9IChhdG1wLT50bV95ZWFyIC0gYnRtcC0+dG1feWVhcikpID09IDAgJiYKKwkJKHJlc3VsdCA9IChhdG1wLT50bV9tb24gLSBidG1wLT50bV9tb24pKSA9PSAwICYmCisJCShyZXN1bHQgPSAoYXRtcC0+dG1fbWRheSAtIGJ0bXAtPnRtX21kYXkpKSA9PSAwICYmCisJCShyZXN1bHQgPSAoYXRtcC0+dG1faG91ciAtIGJ0bXAtPnRtX2hvdXIpKSA9PSAwICYmCisJCShyZXN1bHQgPSAoYXRtcC0+dG1fbWluIC0gYnRtcC0+dG1fbWluKSkgPT0gMCkKKwkJCXJlc3VsdCA9IGF0bXAtPnRtX3NlYyAtIGJ0bXAtPnRtX3NlYzsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdGltZV90Cit0aW1lMnN1Yih0bXAsIGZ1bmNwLCBvZmZzZXQsIG9rYXlwLCBkb19ub3JtX3NlY3MpCitzdHJ1Y3QgdG0gKiBjb25zdAl0bXA7CitzdHJ1Y3QgdG0gKiAoKiBjb25zdAlmdW5jcCkgUCgoY29uc3QgdGltZV90KiwgbG9uZywgc3RydWN0IHRtKikpOworY29uc3QgbG9uZwkJb2Zmc2V0OworaW50ICogY29uc3QJCW9rYXlwOworY29uc3QgaW50CQlkb19ub3JtX3NlY3M7Cit7CisJcmVnaXN0ZXIgY29uc3Qgc3RydWN0IHN0YXRlICoJc3A7CisJcmVnaXN0ZXIgaW50CQkJZGlyOworCXJlZ2lzdGVyIGludAkJCWksIGo7CisJcmVnaXN0ZXIgaW50CQkJc2F2ZWRfc2Vjb25kczsKKwlyZWdpc3RlciBsb25nCQkJbGk7CisJcmVnaXN0ZXIgdGltZV90CQkJbG87CisJcmVnaXN0ZXIgdGltZV90CQkJaGk7CisJbG9uZwkJCQl5OworCXRpbWVfdAkJCQluZXd0OworCXRpbWVfdAkJCQl0OworCXN0cnVjdCB0bQkJCXlvdXJ0bSwgbXl0bTsKKworCSpva2F5cCA9IEZBTFNFOworCXlvdXJ0bSA9ICp0bXA7CisJaWYgKGRvX25vcm1fc2VjcykgeworCQlpZiAobm9ybWFsaXplX292ZXJmbG93KCZ5b3VydG0udG1fbWluLCAmeW91cnRtLnRtX3NlYywKKwkJCVNFQ1NQRVJNSU4pKQorCQkJCXJldHVybiBXUk9ORzsKKwl9CisJaWYgKG5vcm1hbGl6ZV9vdmVyZmxvdygmeW91cnRtLnRtX2hvdXIsICZ5b3VydG0udG1fbWluLCBNSU5TUEVSSE9VUikpCisJCXJldHVybiBXUk9ORzsKKwlpZiAobm9ybWFsaXplX292ZXJmbG93KCZ5b3VydG0udG1fbWRheSwgJnlvdXJ0bS50bV9ob3VyLCBIT1VSU1BFUkRBWSkpCisJCXJldHVybiBXUk9ORzsKKwl5ID0geW91cnRtLnRtX3llYXI7CisJaWYgKGxvbmdfbm9ybWFsaXplX292ZXJmbG93KCZ5LCAmeW91cnRtLnRtX21vbiwgTU9OU1BFUllFQVIpKQorCQlyZXR1cm4gV1JPTkc7CisJLyoKKwkqKiBUdXJuIHkgaW50byBhbiBhY3R1YWwgeWVhciBudW1iZXIgZm9yIG5vdy4KKwkqKiBJdCBpcyBjb252ZXJ0ZWQgYmFjayB0byBhbiBvZmZzZXQgZnJvbSBUTV9ZRUFSX0JBU0UgbGF0ZXIuCisJKi8KKwlpZiAobG9uZ19pbmNyZW1lbnRfb3ZlcmZsb3coJnksIFRNX1lFQVJfQkFTRSkpCisJCXJldHVybiBXUk9ORzsKKwl3aGlsZSAoeW91cnRtLnRtX21kYXkgPD0gMCkgeworCQlpZiAobG9uZ19pbmNyZW1lbnRfb3ZlcmZsb3coJnksIC0xKSkKKwkJCXJldHVybiBXUk9ORzsKKwkJbGkgPSB5ICsgKDEgPCB5b3VydG0udG1fbW9uKTsKKwkJeW91cnRtLnRtX21kYXkgKz0geWVhcl9sZW5ndGhzW2lzbGVhcChsaSldOworCX0KKwl3aGlsZSAoeW91cnRtLnRtX21kYXkgPiBEQVlTUEVSTFlFQVIpIHsKKwkJbGkgPSB5ICsgKDEgPCB5b3VydG0udG1fbW9uKTsKKwkJeW91cnRtLnRtX21kYXkgLT0geWVhcl9sZW5ndGhzW2lzbGVhcChsaSldOworCQlpZiAobG9uZ19pbmNyZW1lbnRfb3ZlcmZsb3coJnksIDEpKQorCQkJcmV0dXJuIFdST05HOworCX0KKwlmb3IgKCA7IDsgKSB7CisJCWkgPSBtb25fbGVuZ3Roc1tpc2xlYXAoeSldW3lvdXJ0bS50bV9tb25dOworCQlpZiAoeW91cnRtLnRtX21kYXkgPD0gaSkKKwkJCWJyZWFrOworCQl5b3VydG0udG1fbWRheSAtPSBpOworCQlpZiAoKyt5b3VydG0udG1fbW9uID49IE1PTlNQRVJZRUFSKSB7CisJCQl5b3VydG0udG1fbW9uID0gMDsKKwkJCWlmIChsb25nX2luY3JlbWVudF9vdmVyZmxvdygmeSwgMSkpCisJCQkJcmV0dXJuIFdST05HOworCQl9CisJfQorCWlmIChsb25nX2luY3JlbWVudF9vdmVyZmxvdygmeSwgLVRNX1lFQVJfQkFTRSkpCisJCXJldHVybiBXUk9ORzsKKwl5b3VydG0udG1feWVhciA9IHk7CisJaWYgKHlvdXJ0bS50bV95ZWFyICE9IHkpCisJCXJldHVybiBXUk9ORzsKKwlpZiAoeW91cnRtLnRtX3NlYyA+PSAwICYmIHlvdXJ0bS50bV9zZWMgPCBTRUNTUEVSTUlOKQorCQlzYXZlZF9zZWNvbmRzID0gMDsKKwllbHNlIGlmICh5ICsgVE1fWUVBUl9CQVNFIDwgRVBPQ0hfWUVBUikgeworCQkvKgorCQkqKiBXZSBjYW4ndCBzZXQgdG1fc2VjIHRvIDAsIGJlY2F1c2UgdGhhdCBtaWdodCBwdXNoIHRoZQorCQkqKiB0aW1lIGJlbG93IHRoZSBtaW5pbXVtIHJlcHJlc2VudGFibGUgdGltZS4KKwkJKiogU2V0IHRtX3NlYyB0byA1OSBpbnN0ZWFkLgorCQkqKiBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgbWluaW11bSByZXByZXNlbnRhYmxlIHRpbWUgaXMKKwkJKiogbm90IGluIHRoZSBzYW1lIG1pbnV0ZSB0aGF0IGEgbGVhcCBzZWNvbmQgd2FzIGRlbGV0ZWQgZnJvbSwKKwkJKiogd2hpY2ggaXMgYSBzYWZlciBhc3N1bXB0aW9uIHRoYW4gdXNpbmcgNTggd291bGQgYmUuCisJCSovCisJCWlmIChpbmNyZW1lbnRfb3ZlcmZsb3coJnlvdXJ0bS50bV9zZWMsIDEgLSBTRUNTUEVSTUlOKSkKKwkJCXJldHVybiBXUk9ORzsKKwkJc2F2ZWRfc2Vjb25kcyA9IHlvdXJ0bS50bV9zZWM7CisJCXlvdXJ0bS50bV9zZWMgPSBTRUNTUEVSTUlOIC0gMTsKKwl9IGVsc2UgeworCQlzYXZlZF9zZWNvbmRzID0geW91cnRtLnRtX3NlYzsKKwkJeW91cnRtLnRtX3NlYyA9IDA7CisJfQorCS8qCisJKiogRG8gYSBiaW5hcnkgc2VhcmNoICh0aGlzIHdvcmtzIHdoYXRldmVyIHRpbWVfdCdzIHR5cGUgaXMpLgorCSovCisJaWYgKCFUWVBFX1NJR05FRCh0aW1lX3QpKSB7CisJCWxvID0gMDsKKwkJaGkgPSBsbyAtIDE7CisJfSBlbHNlIGlmICghVFlQRV9JTlRFR1JBTCh0aW1lX3QpKSB7CisJCWlmIChzaXplb2YodGltZV90KSA+IHNpemVvZihmbG9hdCkpCisJCQloaSA9ICh0aW1lX3QpIERCTF9NQVg7CisJCWVsc2UJaGkgPSAodGltZV90KSBGTFRfTUFYOworCQlsbyA9IC1oaTsKKwl9IGVsc2UgeworCQlsbyA9IDE7CisJCWZvciAoaSA9IDA7IGkgPCAoaW50KSBUWVBFX0JJVCh0aW1lX3QpIC0gMTsgKytpKQorCQkJbG8gKj0gMjsKKwkJaGkgPSAtKGxvICsgMSk7CisJfQorCWZvciAoIDsgOyApIHsKKwkJdCA9IGxvIC8gMiArIGhpIC8gMjsKKwkJaWYgKHQgPCBsbykKKwkJCXQgPSBsbzsKKwkJZWxzZSBpZiAodCA+IGhpKQorCQkJdCA9IGhpOworCQlpZiAoKCpmdW5jcCkoJnQsIG9mZnNldCwgJm15dG0pID09IE5VTEwpIHsKKwkJCS8qCisJCQkqKiBBc3N1bWUgdGhhdCB0IGlzIHRvbyBleHRyZW1lIHRvIGJlIHJlcHJlc2VudGVkIGluCisJCQkqKiBhIHN0cnVjdCB0bTsgYXJyYW5nZSB0aGluZ3Mgc28gdGhhdCBpdCBpcyBsZXNzCisJCQkqKiBleHRyZW1lIG9uIHRoZSBuZXh0IHBhc3MuCisJCQkqLworCQkJZGlyID0gKHQgPiAwKSA/IDEgOiAtMTsKKwkJfSBlbHNlCWRpciA9IHRtY29tcCgmbXl0bSwgJnlvdXJ0bSk7CisJCWlmIChkaXIgIT0gMCkgeworCQkJaWYgKHQgPT0gbG8pIHsKKwkJCQkrK3Q7CisJCQkJaWYgKHQgPD0gbG8pCisJCQkJCXJldHVybiBXUk9ORzsKKwkJCQkrK2xvOworCQkJfSBlbHNlIGlmICh0ID09IGhpKSB7CisJCQkJLS10OworCQkJCWlmICh0ID49IGhpKQorCQkJCQlyZXR1cm4gV1JPTkc7CisJCQkJLS1oaTsKKwkJCX0KKwkJCWlmIChsbyA+IGhpKQorCQkJCXJldHVybiBXUk9ORzsKKwkJCWlmIChkaXIgPiAwKQorCQkJCWhpID0gdDsKKwkJCWVsc2UJbG8gPSB0OworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHlvdXJ0bS50bV9pc2RzdCA8IDAgfHwgbXl0bS50bV9pc2RzdCA9PSB5b3VydG0udG1faXNkc3QpCisJCQlicmVhazsKKwkJLyoKKwkJKiogUmlnaHQgdGltZSwgd3JvbmcgdHlwZS4KKwkJKiogSHVudCBmb3IgcmlnaHQgdGltZSwgcmlnaHQgdHlwZS4KKwkJKiogSXQncyBva2F5IHRvIGd1ZXNzIHdyb25nIHNpbmNlIHRoZSBndWVzcworCQkqKiBnZXRzIGNoZWNrZWQuCisJCSovCisJCS8qCisJCSoqIFRoZSAodm9pZCAqKSBjYXN0cyBhcmUgdGhlIGJlbmVmaXQgb2YgU3VuT1MgMy4zIG9uIFN1biAyJ3MuCisJCSovCisJCXNwID0gKGNvbnN0IHN0cnVjdCBzdGF0ZSAqKQorCQkJKCgodm9pZCAqKSBmdW5jcCA9PSAodm9pZCAqKSBsb2NhbHN1YikgPworCQkJbGNscHRyIDogZ210cHRyKTsKKyNpZmRlZiBBTExfU1RBVEUKKwkJaWYgKHNwID09IE5VTEwpCisJCQlyZXR1cm4gV1JPTkc7CisjZW5kaWYgLyogZGVmaW5lZCBBTExfU1RBVEUgKi8KKwkJZm9yIChpID0gc3AtPnR5cGVjbnQgLSAxOyBpID49IDA7IC0taSkgeworCQkJaWYgKHNwLT50dGlzW2ldLnR0X2lzZHN0ICE9IHlvdXJ0bS50bV9pc2RzdCkKKwkJCQljb250aW51ZTsKKwkJCWZvciAoaiA9IHNwLT50eXBlY250IC0gMTsgaiA+PSAwOyAtLWopIHsKKwkJCQlpZiAoc3AtPnR0aXNbal0udHRfaXNkc3QgPT0geW91cnRtLnRtX2lzZHN0KQorCQkJCQljb250aW51ZTsKKwkJCQluZXd0ID0gdCArIHNwLT50dGlzW2pdLnR0X2dtdG9mZiAtCisJCQkJCXNwLT50dGlzW2ldLnR0X2dtdG9mZjsKKwkJCQlpZiAoKCpmdW5jcCkoJm5ld3QsIG9mZnNldCwgJm15dG0pID09IE5VTEwpCisJCQkJCWNvbnRpbnVlOworCQkJCWlmICh0bWNvbXAoJm15dG0sICZ5b3VydG0pICE9IDApCisJCQkJCWNvbnRpbnVlOworCQkJCWlmIChteXRtLnRtX2lzZHN0ICE9IHlvdXJ0bS50bV9pc2RzdCkKKwkJCQkJY29udGludWU7CisJCQkJLyoKKwkJCQkqKiBXZSBoYXZlIGEgbWF0Y2guCisJCQkJKi8KKwkJCQl0ID0gbmV3dDsKKwkJCQlnb3RvIGxhYmVsOworCQkJfQorCQl9CisJCXJldHVybiBXUk9ORzsKKwl9CitsYWJlbDoKKwluZXd0ID0gdCArIHNhdmVkX3NlY29uZHM7CisJaWYgKChuZXd0IDwgdCkgIT0gKHNhdmVkX3NlY29uZHMgPCAwKSkKKwkJcmV0dXJuIFdST05HOworCXQgPSBuZXd0OworCWlmICgoKmZ1bmNwKSgmdCwgb2Zmc2V0LCB0bXApKQorCQkqb2theXAgPSBUUlVFOworCXJldHVybiB0OworfQorCitzdGF0aWMgdGltZV90Cit0aW1lMih0bXAsIGZ1bmNwLCBvZmZzZXQsIG9rYXlwKQorc3RydWN0IHRtICogY29uc3QJdG1wOworc3RydWN0IHRtICogKCogY29uc3QJZnVuY3ApIFAoKGNvbnN0IHRpbWVfdCosIGxvbmcsIHN0cnVjdCB0bSopKTsKK2NvbnN0IGxvbmcJCW9mZnNldDsKK2ludCAqIGNvbnN0CQlva2F5cDsKK3sKKwl0aW1lX3QJdDsKKworCS8qCisJKiogRmlyc3QgdHJ5IHdpdGhvdXQgbm9ybWFsaXphdGlvbiBvZiBzZWNvbmRzCisJKiogKGluIGNhc2UgdG1fc2VjIGNvbnRhaW5zIGEgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIGEgbGVhcCBzZWNvbmQpLgorCSoqIElmIHRoYXQgZmFpbHMsIHRyeSB3aXRoIG5vcm1hbGl6YXRpb24gb2Ygc2Vjb25kcy4KKwkqLworCXQgPSB0aW1lMnN1Yih0bXAsIGZ1bmNwLCBvZmZzZXQsIG9rYXlwLCBGQUxTRSk7CisJcmV0dXJuICpva2F5cCA/IHQgOiB0aW1lMnN1Yih0bXAsIGZ1bmNwLCBvZmZzZXQsIG9rYXlwLCBUUlVFKTsKK30KKworc3RhdGljIHRpbWVfdAordGltZTEodG1wLCBmdW5jcCwgb2Zmc2V0KQorc3RydWN0IHRtICogY29uc3QJdG1wOworc3RydWN0IHRtICogKCogY29uc3QJZnVuY3ApIFAoKGNvbnN0IHRpbWVfdCAqLCBsb25nLCBzdHJ1Y3QgdG0gKikpOworY29uc3QgbG9uZwkJb2Zmc2V0OworeworCXJlZ2lzdGVyIHRpbWVfdAkJCXQ7CisJcmVnaXN0ZXIgY29uc3Qgc3RydWN0IHN0YXRlICoJc3A7CisJcmVnaXN0ZXIgaW50CQkJc2FtZWksIG90aGVyaTsKKwlyZWdpc3RlciBpbnQJCQlzYW1laW5kLCBvdGhlcmluZDsKKwlyZWdpc3RlciBpbnQJCQlpOworCXJlZ2lzdGVyIGludAkJCW5zZWVuOworCWludAkJCQlzZWVuW1RaX01BWF9UWVBFU107CisJaW50CQkJCXR5cGVzW1RaX01BWF9UWVBFU107CisJaW50CQkJCW9rYXk7CisKKwlpZiAodG1wLT50bV9pc2RzdCA+IDEpCisJCXRtcC0+dG1faXNkc3QgPSAxOworCXQgPSB0aW1lMih0bXAsIGZ1bmNwLCBvZmZzZXQsICZva2F5KTsKKyNpZmRlZiBQQ1RTCisJLyoKKwkqKiBQQ1RTIGNvZGUgY291cnRlc3kgR3JhbnQgU3VsbGl2YW4uCisJKi8KKwlpZiAob2theSkKKwkJcmV0dXJuIHQ7CisJaWYgKHRtcC0+dG1faXNkc3QgPCAwKQorCQl0bXAtPnRtX2lzZHN0ID0gMDsJLyogcmVzZXQgdG8gc3RkIGFuZCB0cnkgYWdhaW4gKi8KKyNlbmRpZiAvKiBkZWZpbmVkIFBDVFMgKi8KKyNpZm5kZWYgUENUUworCWlmIChva2F5IHx8IHRtcC0+dG1faXNkc3QgPCAwKQorCQlyZXR1cm4gdDsKKyNlbmRpZiAvKiAhZGVmaW5lZCBQQ1RTICovCisJLyoKKwkqKiBXZSdyZSBzdXBwb3NlZCB0byBhc3N1bWUgdGhhdCBzb21lYm9keSB0b29rIGEgdGltZSBvZiBvbmUgdHlwZQorCSoqIGFuZCBkaWQgc29tZSBtYXRoIG9uIGl0IHRoYXQgeWllbGRlZCBhICJzdHJ1Y3QgdG0iIHRoYXQncyBiYWQuCisJKiogV2UgdHJ5IHRvIGRpdmluZSB0aGUgdHlwZSB0aGV5IHN0YXJ0ZWQgZnJvbSBhbmQgYWRqdXN0IHRvIHRoZQorCSoqIHR5cGUgdGhleSBuZWVkLgorCSovCisJLyoKKwkqKiBUaGUgKHZvaWQgKikgY2FzdHMgYXJlIHRoZSBiZW5lZml0IG9mIFN1bk9TIDMuMyBvbiBTdW4gMidzLgorCSovCisJc3AgPSAoY29uc3Qgc3RydWN0IHN0YXRlICopICgoKHZvaWQgKikgZnVuY3AgPT0gKHZvaWQgKikgbG9jYWxzdWIpID8KKwkJbGNscHRyIDogZ210cHRyKTsKKyNpZmRlZiBBTExfU1RBVEUKKwlpZiAoc3AgPT0gTlVMTCkKKwkJcmV0dXJuIFdST05HOworI2VuZGlmIC8qIGRlZmluZWQgQUxMX1NUQVRFICovCisJZm9yIChpID0gMDsgaSA8IHNwLT50eXBlY250OyArK2kpCisJCXNlZW5baV0gPSBGQUxTRTsKKwluc2VlbiA9IDA7CisJZm9yIChpID0gc3AtPnRpbWVjbnQgLSAxOyBpID49IDA7IC0taSkKKwkJaWYgKCFzZWVuW3NwLT50eXBlc1tpXV0pIHsKKwkJCXNlZW5bc3AtPnR5cGVzW2ldXSA9IFRSVUU7CisJCQl0eXBlc1tuc2VlbisrXSA9IHNwLT50eXBlc1tpXTsKKwkJfQorCWZvciAoc2FtZWluZCA9IDA7IHNhbWVpbmQgPCBuc2VlbjsgKytzYW1laW5kKSB7CisJCXNhbWVpID0gdHlwZXNbc2FtZWluZF07CisJCWlmIChzcC0+dHRpc1tzYW1laV0udHRfaXNkc3QgIT0gdG1wLT50bV9pc2RzdCkKKwkJCWNvbnRpbnVlOworCQlmb3IgKG90aGVyaW5kID0gMDsgb3RoZXJpbmQgPCBuc2VlbjsgKytvdGhlcmluZCkgeworCQkJb3RoZXJpID0gdHlwZXNbb3RoZXJpbmRdOworCQkJaWYgKHNwLT50dGlzW290aGVyaV0udHRfaXNkc3QgPT0gdG1wLT50bV9pc2RzdCkKKwkJCQljb250aW51ZTsKKwkJCXRtcC0+dG1fc2VjICs9IHNwLT50dGlzW290aGVyaV0udHRfZ210b2ZmIC0KKwkJCQkJc3AtPnR0aXNbc2FtZWldLnR0X2dtdG9mZjsKKwkJCXRtcC0+dG1faXNkc3QgPSAhdG1wLT50bV9pc2RzdDsKKwkJCXQgPSB0aW1lMih0bXAsIGZ1bmNwLCBvZmZzZXQsICZva2F5KTsKKwkJCWlmIChva2F5KQorCQkJCXJldHVybiB0OworCQkJdG1wLT50bV9zZWMgLT0gc3AtPnR0aXNbb3RoZXJpXS50dF9nbXRvZmYgLQorCQkJCQlzcC0+dHRpc1tzYW1laV0udHRfZ210b2ZmOworCQkJdG1wLT50bV9pc2RzdCA9ICF0bXAtPnRtX2lzZHN0OworCQl9CisJfQorCXJldHVybiBXUk9ORzsKK30KKwordGltZV90Citta3RpbWUodG1wKQorc3RydWN0IHRtICogY29uc3QJdG1wOworeworCXR6c2V0KCk7CisJcmV0dXJuIHRpbWUxKHRtcCwgbG9jYWxzdWIsIDBMKTsKK30KKworI2lmZGVmIFNURF9JTlNQSVJFRAorCit0aW1lX3QKK3RpbWVsb2NhbCh0bXApCitzdHJ1Y3QgdG0gKiBjb25zdAl0bXA7Cit7CisJdG1wLT50bV9pc2RzdCA9IC0xOwkvKiBpbiBjYXNlIGl0IHdhc24ndCBpbml0aWFsaXplZCAqLworCXJldHVybiBta3RpbWUodG1wKTsKK30KKwordGltZV90Cit0aW1lZ20odG1wKQorc3RydWN0IHRtICogY29uc3QJdG1wOworeworCXRtcC0+dG1faXNkc3QgPSAwOworCXJldHVybiB0aW1lMSh0bXAsIGdtdHN1YiwgMEwpOworfQorCit0aW1lX3QKK3RpbWVvZmYodG1wLCBvZmZzZXQpCitzdHJ1Y3QgdG0gKiBjb25zdAl0bXA7Citjb25zdCBsb25nCQlvZmZzZXQ7Cit7CisJdG1wLT50bV9pc2RzdCA9IDA7CisJcmV0dXJuIHRpbWUxKHRtcCwgZ210c3ViLCBvZmZzZXQpOworfQorCisjZW5kaWYgLyogZGVmaW5lZCBTVERfSU5TUElSRUQgKi8KKworI2lmZGVmIENNVUNTCisKKy8qCisqKiBUaGUgZm9sbG93aW5nIGlzIHN1cHBsaWVkIGZvciBjb21wYXRpYmlsaXR5IHdpdGgKKyoqIHByZXZpb3VzIHZlcnNpb25zIG9mIHRoZSBDTVVDUyBydW50aW1lIGxpYnJhcnkuCisqLworCitsb25nCitndGltZSh0bXApCitzdHJ1Y3QgdG0gKiBjb25zdAl0bXA7Cit7CisJY29uc3QgdGltZV90CXQgPSBta3RpbWUodG1wKTsKKworCWlmICh0ID09IFdST05HKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIHQ7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkIENNVUNTICovCisKKy8qCisqKiBYWFgtLWlzIHRoZSBiZWxvdyB0aGUgcmlnaHQgd2F5IHRvIGNvbmRpdGlvbmFsaXplPz8KKyovCisKKyNpZmRlZiBTVERfSU5TUElSRUQKKworLyoKKyoqIElFRUUgU3RkIDEwMDMuMS0xOTg4IChQT1NJWCkgbGVnaXNsYXRlcyB0aGF0IDUzNjQ1NzU5OQorKiogc2hhbGwgY29ycmVzcG9uZCB0byAiV2VkIERlYyAzMSAyMzo1OTo1OSBVVEMgMTk4NiIsIHdoaWNoCisqKiBpcyBub3QgdGhlIGNhc2UgaWYgd2UgYXJlIGFjY291bnRpbmcgZm9yIGxlYXAgc2Vjb25kcy4KKyoqIFNvLCB3ZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgY29udmVyc2lvbiByb3V0aW5lcyBmb3IgdXNlCisqKiB3aGVuIGV4Y2hhbmdpbmcgdGltZXN0YW1wcyB3aXRoIFBPU0lYIGNvbmZvcm1pbmcgc3lzdGVtcy4KKyovCisKK3N0YXRpYyBsb25nCitsZWFwY29ycih0aW1lcCkKK3RpbWVfdCAqCXRpbWVwOworeworCXJlZ2lzdGVyIHN0cnVjdCBzdGF0ZSAqCQlzcDsKKwlyZWdpc3RlciBzdHJ1Y3QgbHNpbmZvICoJbHA7CisJcmVnaXN0ZXIgaW50CQkJaTsKKworCXNwID0gbGNscHRyOworCWkgPSBzcC0+bGVhcGNudDsKKwl3aGlsZSAoLS1pID49IDApIHsKKwkJbHAgPSAmc3AtPmxzaXNbaV07CisJCWlmICgqdGltZXAgPj0gbHAtPmxzX3RyYW5zKQorCQkJcmV0dXJuIGxwLT5sc19jb3JyOworCX0KKwlyZXR1cm4gMDsKK30KKwordGltZV90Cit0aW1lMnBvc2l4KHQpCit0aW1lX3QJdDsKK3sKKwl0enNldCgpOworCXJldHVybiB0IC0gbGVhcGNvcnIoJnQpOworfQorCit0aW1lX3QKK3Bvc2l4MnRpbWUodCkKK3RpbWVfdAl0OworeworCXRpbWVfdAl4OworCXRpbWVfdAl5OworCisJdHpzZXQoKTsKKwkvKgorCSoqIEZvciBhIHBvc2l0aXZlIGxlYXAgc2Vjb25kIGhpdCwgdGhlIHJlc3VsdAorCSoqIGlzIG5vdCB1bmlxdWUuIEZvciBhIG5lZ2F0aXZlIGxlYXAgc2Vjb25kCisJKiogaGl0LCB0aGUgY29ycmVzcG9uZGluZyB0aW1lIGRvZXNuJ3QgZXhpc3QsCisJKiogc28gd2UgcmV0dXJuIGFuIGFkamFjZW50IHNlY29uZC4KKwkqLworCXggPSB0ICsgbGVhcGNvcnIoJnQpOworCXkgPSB4IC0gbGVhcGNvcnIoJngpOworCWlmICh5IDwgdCkgeworCQlkbyB7CisJCQl4Kys7CisJCQl5ID0geCAtIGxlYXBjb3JyKCZ4KTsKKwkJfSB3aGlsZSAoeSA8IHQpOworCQlpZiAodCAhPSB5KQorCQkJcmV0dXJuIHggLSAxOworCX0gZWxzZSBpZiAoeSA+IHQpIHsKKwkJZG8geworCQkJLS14OworCQkJeSA9IHggLSBsZWFwY29ycigmeCk7CisJCX0gd2hpbGUgKHkgPiB0KTsKKwkJaWYgKHQgIT0geSkKKwkJCXJldHVybiB4ICsgMTsKKwl9CisJcmV0dXJuIHg7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkIFNURF9JTlNQSVJFRCAqLwpkaWZmIC0tZ2l0IGEvbGliYy90emNvZGUvcHJpdmF0ZS5oIGIvbGliYy90emNvZGUvcHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4MzdiNzAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3R6Y29kZS9wcml2YXRlLmgKQEAgLTAsMCArMSwzNjggQEAKKyNpZm5kZWYgUFJJVkFURV9ICisKKyNkZWZpbmUgUFJJVkFURV9ICisKKy8qCisqKiBUaGlzIGZpbGUgaXMgaW4gdGhlIHB1YmxpYyBkb21haW4sIHNvIGNsYXJpZmllZCBhcyBvZgorKiogMTk5Ni0wNi0wNSBieSBBcnRodXIgRGF2aWQgT2xzb24uCisqLworCisvKgorKiogVGhpcyBoZWFkZXIgaXMgZm9yIHVzZSBPTkxZIHdpdGggdGhlIHRpbWUgY29udmVyc2lvbiBjb2RlLgorKiogVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgaXQgd2lsbCByZW1haW4gdW5jaGFuZ2VkLAorKiogb3IgdGhhdCBpdCB3aWxsIHJlbWFpbiBhdCBhbGwuCisqKiBEbyBOT1QgY29weSBpdCB0byBhbnkgc3lzdGVtIGluY2x1ZGUgZGlyZWN0b3J5LgorKiogVGhhbmsgeW91IQorKi8KKworLyoKKyoqIElECisqLworCisjaWZuZGVmIGxpbnQKKyNpZm5kZWYgTk9JRAorc3RhdGljIGNoYXIJcHJpdmF0ZWhpZFtdID0gIkAoIylwcml2YXRlLmgJOC4yIjsKKyNlbmRpZiAvKiAhZGVmaW5lZCBOT0lEICovCisjZW5kaWYgLyogIWRlZmluZWQgbGludCAqLworCisjZGVmaW5lIEdSQU5EUEFSRU5URUQJIkxvY2FsIHRpbWUgem9uZSBtdXN0IGJlIHNldC0tc2VlIHppYyBtYW51YWwgcGFnZSIKKworLyoKKyoqIERlZmF1bHRzIGZvciBwcmVwcm9jZXNzb3Igc3ltYm9scy4KKyoqIFlvdSBjYW4gb3ZlcnJpZGUgdGhlc2UgaW4geW91ciBDIGNvbXBpbGVyIG9wdGlvbnMsIGUuZy4gYC1ESEFWRV9BREpUSU1FPTAnLgorKi8KKworI2lmbmRlZiBIQVZFX0FESlRJTUUKKyNkZWZpbmUgSEFWRV9BREpUSU1FCQkxCisjZW5kaWYgLyogIWRlZmluZWQgSEFWRV9BREpUSU1FICovCisKKyNpZm5kZWYgSEFWRV9HRVRURVhUCisjZGVmaW5lIEhBVkVfR0VUVEVYVAkJMAorI2VuZGlmIC8qICFkZWZpbmVkIEhBVkVfR0VUVEVYVCAqLworCisjaWZuZGVmIEhBVkVfSU5DT01QQVRJQkxFX0NUSU1FX1IKKyNkZWZpbmUgSEFWRV9JTkNPTVBBVElCTEVfQ1RJTUVfUgkwCisjZW5kaWYgLyogIWRlZmluZWQgSU5DT01QQVRJQkxFX0NUSU1FX1IgKi8KKworI2lmbmRlZiBIQVZFX1NFVFRJTUVPRkRBWQorI2RlZmluZSBIQVZFX1NFVFRJTUVPRkRBWQkzCisjZW5kaWYgLyogIWRlZmluZWQgSEFWRV9TRVRUSU1FT0ZEQVkgKi8KKworI2lmbmRlZiBIQVZFX1NUUkVSUk9SCisjZGVmaW5lIEhBVkVfU1RSRVJST1IJCTEKKyNlbmRpZiAvKiAhZGVmaW5lZCBIQVZFX1NUUkVSUk9SICovCisKKyNpZm5kZWYgSEFWRV9TWU1MSU5LCisjZGVmaW5lIEhBVkVfU1lNTElOSwkJMQorI2VuZGlmIC8qICFkZWZpbmVkIEhBVkVfU1lNTElOSyAqLworCisjaWZuZGVmIEhBVkVfU1lTX1NUQVRfSAorI2RlZmluZSBIQVZFX1NZU19TVEFUX0gJCTEKKyNlbmRpZiAvKiAhZGVmaW5lZCBIQVZFX1NZU19TVEFUX0ggKi8KKworI2lmbmRlZiBIQVZFX1NZU19XQUlUX0gKKyNkZWZpbmUgSEFWRV9TWVNfV0FJVF9ICQkxCisjZW5kaWYgLyogIWRlZmluZWQgSEFWRV9TWVNfV0FJVF9IICovCisKKyNpZm5kZWYgSEFWRV9VTklTVERfSAorI2RlZmluZSBIQVZFX1VOSVNURF9ICQkxCisjZW5kaWYgLyogIWRlZmluZWQgSEFWRV9VTklTVERfSCAqLworCisjaWZuZGVmIEhBVkVfVVRNUFhfSAorI2RlZmluZSBIQVZFX1VUTVBYX0gJCTAKKyNlbmRpZiAvKiAhZGVmaW5lZCBIQVZFX1VUTVBYX0ggKi8KKworI2lmbmRlZiBMT0NBTEVfSE9NRQorI2RlZmluZSBMT0NBTEVfSE9NRQkJIi91c3IvbGliL2xvY2FsZSIKKyNlbmRpZiAvKiAhZGVmaW5lZCBMT0NBTEVfSE9NRSAqLworCisjaWYgSEFWRV9JTkNPTVBBVElCTEVfQ1RJTUVfUgorI2RlZmluZSBhc2N0aW1lX3IgX2luY29tcGF0aWJsZV9hc2N0aW1lX3IKKyNkZWZpbmUgY3RpbWVfciBfaW5jb21wYXRpYmxlX2N0aW1lX3IKKyNlbmRpZiAvKiBIQVZFX0lOQ09NUEFUSUJMRV9DVElNRV9SICovCisKKy8qCisqKiBOZXN0ZWQgaW5jbHVkZXMKKyovCisKKyNpbmNsdWRlICJzeXMvdHlwZXMuaCIJLyogZm9yIHRpbWVfdCAqLworI2luY2x1ZGUgInN0ZGlvLmgiCisjaW5jbHVkZSAiZXJybm8uaCIKKyNpbmNsdWRlICJzdHJpbmcuaCIKKyNpbmNsdWRlICJsaW1pdHMuaCIJLyogZm9yIENIQVJfQklUIGV0IGFsLiAqLworI2luY2x1ZGUgInRpbWUuaCIKKyNpbmNsdWRlICJzdGRsaWIuaCIKKworI2lmIEhBVkVfR0VUVEVYVAorI2luY2x1ZGUgImxpYmludGwuaCIKKyNlbmRpZiAvKiBIQVZFX0dFVFRFWFQgKi8KKworI2lmIEhBVkVfU1lTX1dBSVRfSAorI2luY2x1ZGUgPHN5cy93YWl0Lmg+CS8qIGZvciBXSUZFWElURUQgYW5kIFdFWElUU1RBVFVTICovCisjZW5kaWYgLyogSEFWRV9TWVNfV0FJVF9IICovCisKKyNpZm5kZWYgV0lGRVhJVEVECisjZGVmaW5lIFdJRkVYSVRFRChzdGF0dXMpCSgoKHN0YXR1cykgJiAweGZmKSA9PSAwKQorI2VuZGlmIC8qICFkZWZpbmVkIFdJRkVYSVRFRCAqLworI2lmbmRlZiBXRVhJVFNUQVRVUworI2RlZmluZSBXRVhJVFNUQVRVUyhzdGF0dXMpCSgoKHN0YXR1cykgPj4gOCkgJiAweGZmKQorI2VuZGlmIC8qICFkZWZpbmVkIFdFWElUU1RBVFVTICovCisKKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSAidW5pc3RkLmgiCS8qIGZvciBGX09LIGFuZCBSX09LICovCisjZW5kaWYgLyogSEFWRV9VTklTVERfSCAqLworCisjaWYgIUhBVkVfVU5JU1REX0gKKyNpZm5kZWYgRl9PSworI2RlZmluZSBGX09LCTAKKyNlbmRpZiAvKiAhZGVmaW5lZCBGX09LICovCisjaWZuZGVmIFJfT0sKKyNkZWZpbmUgUl9PSwk0CisjZW5kaWYgLyogIWRlZmluZWQgUl9PSyAqLworI2VuZGlmIC8qICFIQVZFX1VOSVNURF9IICovCisKKy8qIFVubGlrZSA8Y3R5cGUuaD4ncyBpc2RpZ2l0LCB0aGlzIGFsc28gd29ya3MgaWYgYyA8IDAgfCBjID4gVUNIQVJfTUFYLiAqLworI2RlZmluZSBpc19kaWdpdChjKSAoKHVuc2lnbmVkKShjKSAtICcwJyA8PSA5KQorCisvKgorKiogRGVmaW5lIEhBVkVfU1RESU5UX0gncyBkZWZhdWx0IHZhbHVlIGhlcmUsIHJhdGhlciB0aGFuIGF0IHRoZQorKiogc3RhcnQsIHNpbmNlIF9fR0xJQkNfXydzIHZhbHVlIGRlcGVuZHMgb24gcHJldmlvdXNseS1pbmNsdWRlZAorKiogZmlsZXMuCisqKiAoZ2xpYmMgMi4xIGFuZCBsYXRlciBoYXZlIHN0ZGludC5oLCBldmVuIHdpdGggcHJlLUM5OSBjb21waWxlcnMuKQorKi8KKyNpZm5kZWYgSEFWRV9TVERJTlRfSAorI2RlZmluZSBIQVZFX1NURElOVF9IIFwKKwkoMTk5OTAxIDw9IF9fU1REQ19WRVJTSU9OX18gfHwgXAorCTIgPCAoX19HTElCQ19fICsgKDAgPCBfX0dMSUJDX01JTk9SX18pKSkKKyNlbmRpZiAvKiAhZGVmaW5lZCBIQVZFX1NURElOVF9IICovCisKKyNpZiBIQVZFX1NURElOVF9ICisjaW5jbHVkZSAic3RkaW50LmgiCisjZW5kaWYgLyogIUhBVkVfU1RESU5UX0ggKi8KKworI2lmbmRlZiBJTlRfRkFTVDY0X01BWAorLyogUHJlLUM5OSBHQ0MgY29tcGlsZXJzIGRlZmluZSBfX0xPTkdfTE9OR19NQVhfXyBpbnN0ZWFkIG9mIExMT05HX01BWC4gICovCisjaWYgZGVmaW5lZCBMTE9OR19NQVggfHwgZGVmaW5lZCBfX0xPTkdfTE9OR19NQVhfXwordHlwZWRlZiBsb25nIGxvbmcJaW50X2Zhc3Q2NF90OworI2Vsc2UgLyogISAoZGVmaW5lZCBMTE9OR19NQVggfHwgZGVmaW5lZCBfX0xPTkdfTE9OR19NQVhfXykgKi8KKyNpZiAoTE9OR19NQVggPj4gMzEpIDwgMHhmZmZmZmZmZgorUGxlYXNlIHVzZSBhIGNvbXBpbGVyIHRoYXQgc3VwcG9ydHMgYSA2NC1iaXQgaW50ZWdlciB0eXBlIChvciB3aWRlcik7Cit5b3UgbWF5IG5lZWQgdG8gY29tcGlsZSB3aXRoICItREhBVkVfU1RESU5UX0giLgorI2VuZGlmIC8qIChMT05HX01BWCA+PiAzMSkgPCAweGZmZmZmZmZmICovCit0eXBlZGVmIGxvbmcJCWludF9mYXN0NjRfdDsKKyNlbmRpZiAvKiAhIChkZWZpbmVkIExMT05HX01BWCB8fCBkZWZpbmVkIF9fTE9OR19MT05HX01BWF9fKSAqLworI2VuZGlmIC8qICFkZWZpbmVkIElOVF9GQVNUNjRfTUFYICovCisKKyNpZm5kZWYgSU5UMzJfTUFYCisjZGVmaW5lIElOVDMyX01BWCAweDdmZmZmZmZmCisjZW5kaWYgLyogIWRlZmluZWQgSU5UMzJfTUFYICovCisjaWZuZGVmIElOVDMyX01JTgorI2RlZmluZSBJTlQzMl9NSU4gKC0xIC0gSU5UMzJfTUFYKQorI2VuZGlmIC8qICFkZWZpbmVkIElOVDMyX01JTiAqLworCisvKgorKiogV29ya2Fyb3VuZHMgZm9yIGNvbXBpbGVycy9zeXN0ZW1zLgorKi8KKworLyoKKyoqIElmIHlvdXIgY29tcGlsZXIgbGFja3MgcHJvdG90eXBlcywgIiNkZWZpbmUgUCh4KSAoKSIuCisqLworCisjaWZuZGVmIFAKKyNkZWZpbmUgUCh4KQl4CisjZW5kaWYgLyogIWRlZmluZWQgUCAqLworCisvKgorKiogU3VuT1MgNC4xLjEgaGVhZGVycyBsYWNrIEVYSVRfU1VDQ0VTUy4KKyovCisKKyNpZm5kZWYgRVhJVF9TVUNDRVNTCisjZGVmaW5lIEVYSVRfU1VDQ0VTUwkwCisjZW5kaWYgLyogIWRlZmluZWQgRVhJVF9TVUNDRVNTICovCisKKy8qCisqKiBTdW5PUyA0LjEuMSBoZWFkZXJzIGxhY2sgRVhJVF9GQUlMVVJFLgorKi8KKworI2lmbmRlZiBFWElUX0ZBSUxVUkUKKyNkZWZpbmUgRVhJVF9GQUlMVVJFCTEKKyNlbmRpZiAvKiAhZGVmaW5lZCBFWElUX0ZBSUxVUkUgKi8KKworLyoKKyoqIFN1bk9TIDQuMS4xIGhlYWRlcnMgbGFjayBGSUxFTkFNRV9NQVguCisqLworCisjaWZuZGVmIEZJTEVOQU1FX01BWAorCisjaWZuZGVmIE1BWFBBVEhMRU4KKyNpZmRlZiB1bml4CisjaW5jbHVkZSAic3lzL3BhcmFtLmgiCisjZW5kaWYgLyogZGVmaW5lZCB1bml4ICovCisjZW5kaWYgLyogIWRlZmluZWQgTUFYUEFUSExFTiAqLworCisjaWZkZWYgTUFYUEFUSExFTgorI2RlZmluZSBGSUxFTkFNRV9NQVgJTUFYUEFUSExFTgorI2VuZGlmIC8qIGRlZmluZWQgTUFYUEFUSExFTiAqLworI2lmbmRlZiBNQVhQQVRITEVOCisjZGVmaW5lIEZJTEVOQU1FX01BWAkxMDI0CQkvKiBQdXJlIGd1ZXNzd29yayAqLworI2VuZGlmIC8qICFkZWZpbmVkIE1BWFBBVEhMRU4gKi8KKworI2VuZGlmIC8qICFkZWZpbmVkIEZJTEVOQU1FX01BWCAqLworCisvKgorKiogU3VuT1MgNC4xLjEgbGlicmFyaWVzIGxhY2sgcmVtb3ZlLgorKi8KKworI2lmbmRlZiByZW1vdmUKK2V4dGVybiBpbnQJdW5saW5rIFAoKGNvbnN0IGNoYXIgKiBmaWxlbmFtZSkpOworI2RlZmluZSByZW1vdmUJdW5saW5rCisjZW5kaWYgLyogIWRlZmluZWQgcmVtb3ZlICovCisKKy8qCisqKiBTb21lIGFuY2llbnQgZXJybm8uaCBpbXBsZW1lbnRhdGlvbnMgZG9uJ3QgZGVjbGFyZSBlcnJuby4KKyoqIEJ1dCBzb21lIG5ld2VyIGVycm5vLmggaW1wbGVtZW50YXRpb25zIGRlZmluZSBpdCBhcyBhIG1hY3JvLgorKiogRml4IHRoZSBmb3JtZXIgd2l0aG91dCBhZmZlY3RpbmcgdGhlIGxhdHRlci4KKyovCisKKyNpZm5kZWYgZXJybm8KK2V4dGVybiBpbnQgZXJybm87CisjZW5kaWYgLyogIWRlZmluZWQgZXJybm8gKi8KKworLyoKKyoqIFNvbWUgdGltZS5oIGltcGxlbWVudGF0aW9ucyBkb24ndCBkZWNsYXJlIGFzY3RpbWVfci4KKyoqIE90aGVycyBtaWdodCBkZWZpbmUgaXQgYXMgYSBtYWNyby4KKyoqIEZpeCB0aGUgZm9ybWVyIHdpdGhvdXQgYWZmZWN0aW5nIHRoZSBsYXR0ZXIuCisqLworCisjaWZuZGVmIGFzY3RpbWVfcgorZXh0ZXJuIGNoYXIgKglhc2N0aW1lX3IoKTsKKyNlbmRpZgorCisvKgorKiogUHJpdmF0ZSBmdW5jdGlvbiBkZWNsYXJhdGlvbnMuCisqLworCitjaGFyICoJCWljYWxsb2MgUCgoaW50IG5lbGVtLCBpbnQgZWxzaXplKSk7CitjaGFyICoJCWljYXRhbGxvYyBQKChjaGFyICogb2xkLCBjb25zdCBjaGFyICogbmV3KSk7CitjaGFyICoJCWljcHlhbGxvYyBQKChjb25zdCBjaGFyICogc3RyaW5nKSk7CitjaGFyICoJCWltYWxsb2MgUCgoaW50IG4pKTsKK3ZvaWQgKgkJaXJlYWxsb2MgUCgodm9pZCAqIHBvaW50ZXIsIGludCBzaXplKSk7Cit2b2lkCQlpY2ZyZWUgUCgoY2hhciAqIHBvaW50ZXIpKTsKK3ZvaWQJCWlmcmVlIFAoKGNoYXIgKiBwb2ludGVyKSk7Citjb25zdCBjaGFyICoJc2NoZWNrIFAoKGNvbnN0IGNoYXIgKiBzdHJpbmcsIGNvbnN0IGNoYXIgKiBmb3JtYXQpKTsKKworLyoKKyoqIEZpbmFsbHksIHNvbWUgY29udmVuaWVuY2UgaXRlbXMuCisqLworCisjaWZuZGVmIFRSVUUKKyNkZWZpbmUgVFJVRQkxCisjZW5kaWYgLyogIWRlZmluZWQgVFJVRSAqLworCisjaWZuZGVmIEZBTFNFCisjZGVmaW5lIEZBTFNFCTAKKyNlbmRpZiAvKiAhZGVmaW5lZCBGQUxTRSAqLworCisjaWZuZGVmIFRZUEVfQklUCisjZGVmaW5lIFRZUEVfQklUKHR5cGUpCShzaXplb2YgKHR5cGUpICogQ0hBUl9CSVQpCisjZW5kaWYgLyogIWRlZmluZWQgVFlQRV9CSVQgKi8KKworI2lmbmRlZiBUWVBFX1NJR05FRAorI2RlZmluZSBUWVBFX1NJR05FRCh0eXBlKSAoKCh0eXBlKSAtMSkgPCAwKQorI2VuZGlmIC8qICFkZWZpbmVkIFRZUEVfU0lHTkVEICovCisKKy8qCisqKiBTaW5jZSB0aGUgZGVmaW5pdGlvbiBvZiBUWVBFX0lOVEVHUkFMIGNvbnRhaW5zIGZsb2F0aW5nIHBvaW50IG51bWJlcnMsCisqKiBpdCBjYW5ub3QgYmUgdXNlZCBpbiBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcy4KKyovCisKKyNpZm5kZWYgVFlQRV9JTlRFR1JBTAorI2RlZmluZSBUWVBFX0lOVEVHUkFMKHR5cGUpICgoKHR5cGUpIDAuNSkgIT0gMC41KQorI2VuZGlmIC8qICFkZWZpbmVkIFRZUEVfSU5URUdSQUwgKi8KKworI2lmbmRlZiBJTlRfU1RSTEVOX01BWElNVU0KKy8qCisqKiAzMDIgLyAxMDAwIGlzIGxvZzEwKDIuMCkgcm91bmRlZCB1cC4KKyoqIFN1YnRyYWN0IG9uZSBmb3IgdGhlIHNpZ24gYml0IGlmIHRoZSB0eXBlIGlzIHNpZ25lZDsKKyoqIGFkZCBvbmUgZm9yIGludGVnZXIgZGl2aXNpb24gdHJ1bmNhdGlvbjsKKyoqIGFkZCBvbmUgbW9yZSBmb3IgYSBtaW51cyBzaWduIGlmIHRoZSB0eXBlIGlzIHNpZ25lZC4KKyovCisjZGVmaW5lIElOVF9TVFJMRU5fTUFYSU1VTSh0eXBlKSBcCisJKChUWVBFX0JJVCh0eXBlKSAtIFRZUEVfU0lHTkVEKHR5cGUpKSAqIDMwMiAvIDEwMDAgKyBcCisJMSArIFRZUEVfU0lHTkVEKHR5cGUpKQorI2VuZGlmIC8qICFkZWZpbmVkIElOVF9TVFJMRU5fTUFYSU1VTSAqLworCisvKgorKiogSU5JVElBTElaRSh4KQorKi8KKworI2lmbmRlZiBHTlVDX29yX2xpbnQKKyNpZmRlZiBsaW50CisjZGVmaW5lIEdOVUNfb3JfbGludAorI2VuZGlmIC8qIGRlZmluZWQgbGludCAqLworI2lmbmRlZiBsaW50CisjaWZkZWYgX19HTlVDX18KKyNkZWZpbmUgR05VQ19vcl9saW50CisjZW5kaWYgLyogZGVmaW5lZCBfX0dOVUNfXyAqLworI2VuZGlmIC8qICFkZWZpbmVkIGxpbnQgKi8KKyNlbmRpZiAvKiAhZGVmaW5lZCBHTlVDX29yX2xpbnQgKi8KKworI2lmbmRlZiBJTklUSUFMSVpFCisjaWZkZWYgR05VQ19vcl9saW50CisjZGVmaW5lIElOSVRJQUxJWkUoeCkJKCh4KSA9IDApCisjZW5kaWYgLyogZGVmaW5lZCBHTlVDX29yX2xpbnQgKi8KKyNpZm5kZWYgR05VQ19vcl9saW50CisjZGVmaW5lIElOSVRJQUxJWkUoeCkKKyNlbmRpZiAvKiAhZGVmaW5lZCBHTlVDX29yX2xpbnQgKi8KKyNlbmRpZiAvKiAhZGVmaW5lZCBJTklUSUFMSVpFICovCisKKy8qCisqKiBGb3IgdGhlIGJlbmVmaXQgb2YgR05VIGZvbGsuLi4KKyoqIGBfKE1TR0lEKScgdXNlcyB0aGUgY3VycmVudCBsb2NhbGUncyBtZXNzYWdlIGxpYnJhcnkgc3RyaW5nIGZvciBNU0dJRC4KKyoqIFRoZSBkZWZhdWx0IGlzIHRvIHVzZSBnZXR0ZXh0IGlmIGF2YWlsYWJsZSwgYW5kIHVzZSBNU0dJRCBvdGhlcndpc2UuCisqLworCisjaWZuZGVmIF8KKyNpZiBIQVZFX0dFVFRFWFQKKyNkZWZpbmUgXyhtc2dpZCkgZ2V0dGV4dChtc2dpZCkKKyNlbHNlIC8qICFIQVZFX0dFVFRFWFQgKi8KKyNkZWZpbmUgXyhtc2dpZCkgbXNnaWQKKyNlbmRpZiAvKiAhSEFWRV9HRVRURVhUICovCisjZW5kaWYgLyogIWRlZmluZWQgXyAqLworCisjaWZuZGVmIFRaX0RPTUFJTgorI2RlZmluZSBUWl9ET01BSU4gInR6IgorI2VuZGlmIC8qICFkZWZpbmVkIFRaX0RPTUFJTiAqLworCisjaWYgSEFWRV9JTkNPTVBBVElCTEVfQ1RJTUVfUgorI3VuZGVmIGFzY3RpbWVfcgorI3VuZGVmIGN0aW1lX3IKK2NoYXIgKmFzY3RpbWVfciBQKChzdHJ1Y3QgdG0gY29uc3QgKiwgY2hhciAqKSk7CitjaGFyICpjdGltZV9yIFAoKHRpbWVfdCBjb25zdCAqLCBjaGFyICopKTsKKyNlbmRpZiAvKiBIQVZFX0lOQ09NUEFUSUJMRV9DVElNRV9SICovCisKKyNpZm5kZWYgWUVBUlNQRVJSRVBFQVQKKyNkZWZpbmUgWUVBUlNQRVJSRVBFQVQJCTQwMAkvKiB5ZWFycyBiZWZvcmUgYSBHcmVnb3JpYW4gcmVwZWF0ICovCisjZW5kaWYgLyogIWRlZmluZWQgWUVBUlNQRVJSRVBFQVQgKi8KKworLyoKKyoqIFRoZSBHcmVnb3JpYW4geWVhciBhdmVyYWdlcyAzNjUuMjQyNSBkYXlzLCB3aGljaCBpcyAzMTU1Njk1MiBzZWNvbmRzLgorKi8KKworI2lmbmRlZiBBVkdTRUNTUEVSWUVBUgorI2RlZmluZSBBVkdTRUNTUEVSWUVBUgkJMzE1NTY5NTJMCisjZW5kaWYgLyogIWRlZmluZWQgQVZHU0VDU1BFUllFQVIgKi8KKworI2lmbmRlZiBTRUNTUEVSUkVQRUFUCisjZGVmaW5lIFNFQ1NQRVJSRVBFQVQJCSgoaW50X2Zhc3Q2NF90KSBZRUFSU1BFUlJFUEVBVCAqIChpbnRfZmFzdDY0X3QpIEFWR1NFQ1NQRVJZRUFSKQorI2VuZGlmIC8qICFkZWZpbmVkIFNFQ1NQRVJSRVBFQVQgKi8KKyAKKyNpZm5kZWYgU0VDU1BFUlJFUEVBVF9CSVRTCisjZGVmaW5lIFNFQ1NQRVJSRVBFQVRfQklUUwkzNAkvKiBjZWlsKGxvZzIoU0VDU1BFUlJFUEVBVCkpICovCisjZW5kaWYgLyogIWRlZmluZWQgU0VDU1BFUlJFUEVBVF9CSVRTICovCisKKy8qCisqKiBVTklYIHdhcyBhIHJlZ2lzdGVyZWQgdHJhZGVtYXJrIG9mIFRoZSBPcGVuIEdyb3VwIGluIDIwMDMuCisqLworCisjZW5kaWYgLyogIWRlZmluZWQgUFJJVkFURV9IICovCmRpZmYgLS1naXQgYS9saWJjL3R6Y29kZS9zdHJmdGltZS5jIGIvbGliYy90emNvZGUvc3RyZnRpbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDZjOTFjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy90emNvZGUvc3RyZnRpbWUuYwpAQCAtMCwwICsxLDg3MiBAQAorI2lmbmRlZiBsaW50CisjaWZuZGVmIE5PSUQKK3N0YXRpYyBjaGFyCWVsc2llaWRbXSA9ICJAKCMpc3RyZnRpbWUuYwk4LjEiOworLyoKKyoqIEJhc2VkIG9uIHRoZSBVQ0IgdmVyc2lvbiB3aXRoIHRoZSBJRCBhcHBlYXJpbmcgYmVsb3cuCisqKiBUaGlzIGlzIEFOU0lpc2ggb25seSB3aGVuICJtdWx0aWJ5dGUgY2hhcmFjdGVyID09IHBsYWluIGNoYXJhY3RlciIuCisqLworI2VuZGlmIC8qICFkZWZpbmVkIE5PSUQgKi8KKyNlbmRpZiAvKiAhZGVmaW5lZCBsaW50ICovCisKKyNpbmNsdWRlICJwcml2YXRlLmgiCisKKy8qCisqKiBDb3B5cmlnaHQgKGMpIDE5ODkgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyoqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqKgorKiogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3JtcyBhcmUgcGVybWl0dGVkCisqKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBhcmFncmFwaCBhcmUKKyoqIGR1cGxpY2F0ZWQgaW4gYWxsIHN1Y2ggZm9ybXMgYW5kIHRoYXQgYW55IGRvY3VtZW50YXRpb24sCisqKiBhZHZlcnRpc2luZyBtYXRlcmlhbHMsIGFuZCBvdGhlciBtYXRlcmlhbHMgcmVsYXRlZCB0byBzdWNoCisqKiBkaXN0cmlidXRpb24gYW5kIHVzZSBhY2tub3dsZWRnZSB0aGF0IHRoZSBzb2Z0d2FyZSB3YXMgZGV2ZWxvcGVkCisqKiBieSB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLCBCZXJrZWxleS4gVGhlIG5hbWUgb2YgdGhlCisqKiBVbml2ZXJzaXR5IG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorKiogZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKiogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyoqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisqKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisqLworCisjaWZuZGVmIExJQkNfU0NDUworI2lmbmRlZiBsaW50CitzdGF0aWMgY29uc3QgY2hhcglzY2NzaWRbXSA9ICJAKCMpc3RyZnRpbWUuYwk1LjQgKEJlcmtlbGV5KSAzLzE0Lzg5IjsKKyNlbmRpZiAvKiAhZGVmaW5lZCBsaW50ICovCisjZW5kaWYgLyogIWRlZmluZWQgTElCQ19TQ0NTICovCisKKyNpbmNsdWRlICJ0emZpbGUuaCIKKyNpbmNsdWRlICJmY250bC5oIgorI2luY2x1ZGUgImxvY2FsZS5oIgorI2luY2x1ZGUgPGN0eXBlLmg+CisKK3N0cnVjdCBsY190aW1lX1QgeworCWNvbnN0IGNoYXIgKgltb25bTU9OU1BFUllFQVJdOworCWNvbnN0IGNoYXIgKgltb250aFtNT05TUEVSWUVBUl07CisJY29uc3QgY2hhciAqCXdkYXlbREFZU1BFUldFRUtdOworCWNvbnN0IGNoYXIgKgl3ZWVrZGF5W0RBWVNQRVJXRUVLXTsKKwljb25zdCBjaGFyICoJWF9mbXQ7CisJY29uc3QgY2hhciAqCXhfZm10OworCWNvbnN0IGNoYXIgKgljX2ZtdDsKKwljb25zdCBjaGFyICoJYW07CisJY29uc3QgY2hhciAqCXBtOworCWNvbnN0IGNoYXIgKglkYXRlX2ZtdDsKK307CisKKyNpZmRlZiBMT0NBTEVfSE9NRQorI2luY2x1ZGUgInN5cy9zdGF0LmgiCitzdGF0aWMgc3RydWN0IGxjX3RpbWVfVAkJbG9jYWxlYnVmOworc3RhdGljIHN0cnVjdCBsY190aW1lX1QgKglfbG9jIFAoKHZvaWQpKTsKKyNkZWZpbmUgTG9jYWxlCV9sb2MoKQorI2VuZGlmIC8qIGRlZmluZWQgTE9DQUxFX0hPTUUgKi8KKyNpZm5kZWYgTE9DQUxFX0hPTUUKKyNkZWZpbmUgTG9jYWxlCSgmQ190aW1lX2xvY2FsZSkKKyNlbmRpZiAvKiAhZGVmaW5lZCBMT0NBTEVfSE9NRSAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGxjX3RpbWVfVAlDX3RpbWVfbG9jYWxlID0geworCXsKKwkJIkphbiIsICJGZWIiLCAiTWFyIiwgIkFwciIsICJNYXkiLCAiSnVuIiwKKwkJIkp1bCIsICJBdWciLCAiU2VwIiwgIk9jdCIsICJOb3YiLCAiRGVjIgorCX0sIHsKKwkJIkphbnVhcnkiLCAiRmVicnVhcnkiLCAiTWFyY2giLCAiQXByaWwiLCAiTWF5IiwgIkp1bmUiLAorCQkiSnVseSIsICJBdWd1c3QiLCAiU2VwdGVtYmVyIiwgIk9jdG9iZXIiLCAiTm92ZW1iZXIiLCAiRGVjZW1iZXIiCisJfSwgeworCQkiU3VuIiwgIk1vbiIsICJUdWUiLCAiV2VkIiwKKwkJIlRodSIsICJGcmkiLCAiU2F0IgorCX0sIHsKKwkJIlN1bmRheSIsICJNb25kYXkiLCAiVHVlc2RheSIsICJXZWRuZXNkYXkiLAorCQkiVGh1cnNkYXkiLCAiRnJpZGF5IiwgIlNhdHVyZGF5IgorCX0sCisKKwkvKiBYX2ZtdCAqLworCSIlSDolTTolUyIsCisKKwkvKgorCSoqIHhfZm10CisJKiogQzk5IHJlcXVpcmVzIHRoaXMgZm9ybWF0LgorCSoqIFVzaW5nIGp1c3QgbnVtYmVycyAoYXMgaGVyZSkgbWFrZXMgUXVha2VycyBoYXBwaWVyOworCSoqIGl0J3MgYWxzbyBjb21wYXRpYmxlIHdpdGggU1ZSNC4KKwkqLworCSIlbS8lZC8leSIsCisKKwkvKgorCSoqIGNfZm10CisJKiogQzk5IHJlcXVpcmVzIHRoaXMgZm9ybWF0LgorCSoqIFByZXZpb3VzbHkgdGhpcyBjb2RlIHVzZWQgIiVEICVYIiwgYnV0IHdlIG5vdyBjb25mb3JtIHRvIEM5OS4KKwkqKiBOb3RlIHRoYXQKKwkqKgkiJWEgJWIgJWQgJUg6JU06JVMgJVkiCisJKiogaXMgdXNlZCBieSBTb2xhcmlzIDIuMy4KKwkqLworCSIlYSAlYiAlZSAlVCAlWSIsCisKKwkvKiBhbSAqLworCSJBTSIsCisKKwkvKiBwbSAqLworCSJQTSIsCisKKwkvKiBkYXRlX2ZtdCAqLworCSIlYSAlYiAlZSAlSDolTTolUyAlWiAlWSIKK307CisKK3N0YXRpYyBjaGFyICoJX2FkZCBQKChjb25zdCBjaGFyICosIGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQpKTsKK3N0YXRpYyBjaGFyICoJX2NvbnYgUCgoaW50LCBjb25zdCBjaGFyICosIGNoYXIgKiwgY29uc3QgY2hhciAqKSk7CitzdGF0aWMgY2hhciAqCV9mbXQgUCgoY29uc3QgY2hhciAqLCBjb25zdCBzdHJ1Y3QgdG0gKiwgY2hhciAqLCBjb25zdCBjaGFyICosCisJCQlpbnQgKikpOworc3RhdGljIGNoYXIgKglfeWNvbnYgUCgoaW50LCBpbnQsIGludCwgaW50LCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50KSk7CitzdGF0aWMgY2hhciAqCWdldGZvcm1hdCBQKChpbnQsIGNoYXIgKiwgY2hhciAqLCBjaGFyICosIGNoYXIgKikpOworCitleHRlcm4gY2hhciAqCXR6bmFtZVtdOworCisjaWZuZGVmIFlFQVJfMjAwMF9OQU1FCisjZGVmaW5lIFlFQVJfMjAwMF9OQU1FCSJDSEVDS19TVFJGVElNRV9GT1JNQVRTX0ZPUl9UV09fRElHSVRfWUVBUlMiCisjZW5kaWYgLyogIWRlZmluZWQgWUVBUl8yMDAwX05BTUUgKi8KKworI2RlZmluZSBJTl9OT05FCTAKKyNkZWZpbmUgSU5fU09NRQkxCisjZGVmaW5lIElOX1RISVMJMgorI2RlZmluZSBJTl9BTEwJMworCisjZGVmaW5lIEZPUkNFX0xPV0VSX0NBU0UgMHgxMDAKKworc2l6ZV90CitzdHJmdGltZShzLCBtYXhzaXplLCBmb3JtYXQsIHQpCitjaGFyICogY29uc3QJCXM7Citjb25zdCBzaXplX3QJCW1heHNpemU7Citjb25zdCBjaGFyICogY29uc3QJZm9ybWF0OworY29uc3Qgc3RydWN0IHRtICogY29uc3QJdDsKK3sKKwljaGFyICoJcDsKKwlpbnQJd2FybjsKKworCXR6c2V0KCk7CisjaWZkZWYgTE9DQUxFX0hPTUUKKwlsb2NhbGVidWYubW9uWzBdID0gMDsKKyNlbmRpZiAvKiBkZWZpbmVkIExPQ0FMRV9IT01FICovCisJd2FybiA9IElOX05PTkU7CisJcCA9IF9mbXQoKChmb3JtYXQgPT0gTlVMTCkgPyAiJWMiIDogZm9ybWF0KSwgdCwgcywgcyArIG1heHNpemUsICZ3YXJuKTsKKyNpZm5kZWYgTk9fUlVOX1RJTUVfV0FSTklOR1NfQUJPVVRfWUVBUl8yMDAwX1BST0JMRU1TX1RIQU5LX1lPVQorCWlmICh3YXJuICE9IElOX05PTkUgJiYgZ2V0ZW52KFlFQVJfMjAwMF9OQU1FKSAhPSBOVUxMKSB7CisJCSh2b2lkKSBmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisJCWlmIChmb3JtYXQgPT0gTlVMTCkKKwkJCSh2b2lkKSBmcHJpbnRmKHN0ZGVyciwgIk5VTEwgc3RyZnRpbWUgZm9ybWF0ICIpOworCQllbHNlCSh2b2lkKSBmcHJpbnRmKHN0ZGVyciwgInN0cmZ0aW1lIGZvcm1hdCBcIiVzXCIgIiwKKwkJCQlmb3JtYXQpOworCQkodm9pZCkgZnByaW50ZihzdGRlcnIsICJ5aWVsZHMgb25seSB0d28gZGlnaXRzIG9mIHllYXJzIGluICIpOworCQlpZiAod2FybiA9PSBJTl9TT01FKQorCQkJKHZvaWQpIGZwcmludGYoc3RkZXJyLCAic29tZSBsb2NhbGVzIik7CisJCWVsc2UgaWYgKHdhcm4gPT0gSU5fVEhJUykKKwkJCSh2b2lkKSBmcHJpbnRmKHN0ZGVyciwgInRoZSBjdXJyZW50IGxvY2FsZSIpOworCQllbHNlCSh2b2lkKSBmcHJpbnRmKHN0ZGVyciwgImFsbCBsb2NhbGVzIik7CisJCSh2b2lkKSBmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisJfQorI2VuZGlmIC8qICFkZWZpbmVkIE5PX1JVTl9USU1FX1dBUk5JTkdTX0FCT1VUX1lFQVJfMjAwMF9QUk9CTEVNU19USEFOS19ZT1UgKi8KKwlpZiAocCA9PSBzICsgbWF4c2l6ZSkKKwkJcmV0dXJuIDA7CisJKnAgPSAnXDAnOworCXJldHVybiBwIC0gczsKK30KKworc3RhdGljIGNoYXIgKmdldGZvcm1hdChpbnQgbW9kaWZpZXIsIGNoYXIgKm5vcm1hbCwgY2hhciAqdW5kZXJzY29yZSwKKyAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZGFzaCwgY2hhciAqemVybykgeworICAgIHN3aXRjaCAobW9kaWZpZXIpIHsKKyAgICBjYXNlICdfJzoKKyAgICAgICAgcmV0dXJuIHVuZGVyc2NvcmU7CisKKyAgICBjYXNlICctJzoKKyAgICAgICAgcmV0dXJuIGRhc2g7CisKKyAgICBjYXNlICcwJzoKKyAgICAgICAgcmV0dXJuIHplcm87CisgICAgfQorCisgICAgcmV0dXJuIG5vcm1hbDsKK30KKworc3RhdGljIGNoYXIgKgorX2ZtdChmb3JtYXQsIHQsIHB0LCBwdGxpbSwgd2FybnApCitjb25zdCBjaGFyICoJCWZvcm1hdDsKK2NvbnN0IHN0cnVjdCB0bSAqIGNvbnN0CXQ7CitjaGFyICoJCQlwdDsKK2NvbnN0IGNoYXIgKiBjb25zdAlwdGxpbTsKK2ludCAqCQkJd2FybnA7Cit7CisJZm9yICggOyAqZm9ybWF0OyArK2Zvcm1hdCkgeworCQlpZiAoKmZvcm1hdCA9PSAnJScpIHsKKyAgICAgICAgICAgIGludCBtb2RpZmllciA9IDA7CitsYWJlbDoKKwkJCXN3aXRjaCAoKisrZm9ybWF0KSB7CisJCQljYXNlICdcMCc6CisJCQkJLS1mb3JtYXQ7CisJCQkJYnJlYWs7CisJCQljYXNlICdBJzoKKwkJCQlwdCA9IF9hZGQoKHQtPnRtX3dkYXkgPCAwIHx8CisJCQkJCXQtPnRtX3dkYXkgPj0gREFZU1BFUldFRUspID8KKwkJCQkJIj8iIDogTG9jYWxlLT53ZWVrZGF5W3QtPnRtX3dkYXldLAorCQkJCQlwdCwgcHRsaW0sIG1vZGlmaWVyKTsKKwkJCQljb250aW51ZTsKKwkJCWNhc2UgJ2EnOgorCQkJCXB0ID0gX2FkZCgodC0+dG1fd2RheSA8IDAgfHwKKwkJCQkJdC0+dG1fd2RheSA+PSBEQVlTUEVSV0VFSykgPworCQkJCQkiPyIgOiBMb2NhbGUtPndkYXlbdC0+dG1fd2RheV0sCisJCQkJCXB0LCBwdGxpbSwgbW9kaWZpZXIpOworCQkJCWNvbnRpbnVlOworCQkJY2FzZSAnQic6CisJCQkJcHQgPSBfYWRkKCh0LT50bV9tb24gPCAwIHx8CisJCQkJCXQtPnRtX21vbiA+PSBNT05TUEVSWUVBUikgPworCQkJCQkiPyIgOiBMb2NhbGUtPm1vbnRoW3QtPnRtX21vbl0sCisJCQkJCXB0LCBwdGxpbSwgbW9kaWZpZXIpOworCQkJCWNvbnRpbnVlOworCQkJY2FzZSAnYic6CisJCQljYXNlICdoJzoKKwkJCQlwdCA9IF9hZGQoKHQtPnRtX21vbiA8IDAgfHwKKwkJCQkJdC0+dG1fbW9uID49IE1PTlNQRVJZRUFSKSA/CisJCQkJCSI/IiA6IExvY2FsZS0+bW9uW3QtPnRtX21vbl0sCisJCQkJCXB0LCBwdGxpbSwgbW9kaWZpZXIpOworCQkJCWNvbnRpbnVlOworCQkJY2FzZSAnQyc6CisJCQkJLyoKKwkJCQkqKiAlQyB1c2VkIHRvIGRvIGEuLi4KKwkJCQkqKglfZm10KCIlYSAlYiAlZSAlWCAlWSIsIHQpOworCQkJCSoqIC4uLndoZXJlYXMgbm93IFBPU0lYIDEwMDMuMiBjYWxscyBmb3IKKwkJCQkqKiBzb21ldGhpbmcgY29tcGxldGVseSBkaWZmZXJlbnQuCisJCQkJKiogKGFkbywgMTk5My0wNS0yNCkKKwkJCQkqLworCQkJCXB0ID0gX3ljb252KHQtPnRtX3llYXIsIFRNX1lFQVJfQkFTRSwgMSwgMCwKKwkJCQkJcHQsIHB0bGltLCBtb2RpZmllcik7CisJCQkJY29udGludWU7CisJCQljYXNlICdjJzoKKwkJCQl7CisJCQkJaW50IHdhcm4yID0gSU5fU09NRTsKKworCQkJCXB0ID0gX2ZtdChMb2NhbGUtPmNfZm10LCB0LCBwdCwgcHRsaW0sIHdhcm5wKTsKKwkJCQlpZiAod2FybjIgPT0gSU5fQUxMKQorCQkJCQl3YXJuMiA9IElOX1RISVM7CisJCQkJaWYgKHdhcm4yID4gKndhcm5wKQorCQkJCQkqd2FybnAgPSB3YXJuMjsKKwkJCQl9CisJCQkJY29udGludWU7CisJCQljYXNlICdEJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHQgPSBfZm10KCIlbS8lZC8leSIsIHQsIHB0LCBwdGxpbSwgd2FybnApOworCQkJCWNvbnRpbnVlOworCQkJY2FzZSAnZCc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0ID0gX2NvbnYodC0+dG1fbWRheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRmb3JtYXQobW9kaWZpZXIsICIlMDJkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUyZCIsICIlZCIsICIlMDJkIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHQsIHB0bGltKTsKKwkJCQljb250aW51ZTsKKwkJCWNhc2UgJ0UnOgorCQkJY2FzZSAnTyc6CisJCQkJLyoKKwkJCQkqKiBDOTkgbG9jYWxlIG1vZGlmaWVycy4KKwkJCQkqKiBUaGUgc2VxdWVuY2VzCisJCQkJKioJJUVjICVFQyAlRXggJUVYICVFeSAlRVkKKwkJCQkqKgklT2QgJW9lICVPSCAlT0kgJU9tICVPTQorCQkJCSoqCSVPUyAlT3UgJU9VICVPViAlT3cgJU9XICVPeQorCQkJCSoqIGFyZSBzdXBwb3NlZCB0byBwcm92aWRlIGFsdGVybmF0ZQorCQkJCSoqIHJlcHJlc2VudGF0aW9ucy4KKwkJCQkqLworCQkJCWdvdG8gbGFiZWw7CisgICAgICAgICAgICBjYXNlICdfJzoKKyAgICAgICAgICAgIGNhc2UgJy0nOgorICAgICAgICAgICAgY2FzZSAnMCc6CisgICAgICAgICAgICBjYXNlICdeJzoKKyAgICAgICAgICAgIGNhc2UgJyMnOgorICAgICAgICAgICAgICAgIG1vZGlmaWVyID0gKmZvcm1hdDsKKyAgICAgICAgICAgICAgICBnb3RvIGxhYmVsOworCQkJY2FzZSAnZSc6CisJCQkJcHQgPSBfY29udih0LT50bV9tZGF5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldGZvcm1hdChtb2RpZmllciwgIiUyZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlMmQiLCAiJWQiLCAiJTAyZCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0LCBwdGxpbSk7CisJCQkJY29udGludWU7CisJCQljYXNlICdGJzoKKwkJCQlwdCA9IF9mbXQoIiVZLSVtLSVkIiwgdCwgcHQsIHB0bGltLCB3YXJucCk7CisJCQkJY29udGludWU7CisJCQljYXNlICdIJzoKKwkJCQlwdCA9IF9jb252KHQtPnRtX2hvdXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Zm9ybWF0KG1vZGlmaWVyLCAiJTAyZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlMmQiLCAiJWQiLCAiJTAyZCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0LCBwdGxpbSk7CisJCQkJY29udGludWU7CisJCQljYXNlICdJJzoKKwkJCQlwdCA9IF9jb252KCh0LT50bV9ob3VyICUgMTIpID8KKwkJCQkJKHQtPnRtX2hvdXIgJSAxMikgOiAxMiwKKwkJCQkJZ2V0Zm9ybWF0KG1vZGlmaWVyLCAiJTAyZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlMmQiLCAiJWQiLCAiJTAyZCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0LCBwdGxpbSk7CisJCQkJY29udGludWU7CisJCQljYXNlICdqJzoKKwkJCQlwdCA9IF9jb252KHQtPnRtX3lkYXkgKyAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Zm9ybWF0KG1vZGlmaWVyLCAiJTAzZCIsICIlM2QiLCAiJWQiLCAiJTAzZCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcHQsIHB0bGltKTsKKwkJCQljb250aW51ZTsKKwkJCWNhc2UgJ2snOgorCQkJCS8qCisJCQkJKiogVGhpcyB1c2VkIHRvIGJlLi4uCisJCQkJKioJX2NvbnYodC0+dG1faG91ciAlIDEyID8KKwkJCQkqKgkJdC0+dG1faG91ciAlIDEyIDogMTIsIDIsICcgJyk7CisJCQkJKiogLi4uYW5kIGhhcyBiZWVuIGNoYW5nZWQgdG8gdGhlIGJlbG93IHRvCisJCQkJKiogbWF0Y2ggU3VuT1MgNC4xLjEgYW5kIEFybm9sZCBSb2JiaW5zJworCQkJCSoqIHN0cmZ0aW1lIHZlcnNpb24gMy4wLiBUaGF0IGlzLCAiJWsiIGFuZAorCQkJCSoqICIlbCIgaGF2ZSBiZWVuIHN3YXBwZWQuCisJCQkJKiogKGFkbywgMTk5My0wNS0yNCkKKwkJCQkqLworCQkJCXB0ID0gX2NvbnYodC0+dG1faG91ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRmb3JtYXQobW9kaWZpZXIsICIlMmQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJTJkIiwgIiVkIiwgIiUwMmQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdCwgcHRsaW0pOworCQkJCWNvbnRpbnVlOworI2lmZGVmIEtJVENIRU5fU0lOSworCQkJY2FzZSAnSyc6CisJCQkJLyoKKwkJCQkqKiBBZnRlciBhbGwgdGhpcyB0aW1lLCBzdGlsbCB1bmNsYWltZWQhCisJCQkJKi8KKwkJCQlwdCA9IF9hZGQoImtpdGNoZW4gc2luayIsIHB0LCBwdGxpbSwgbW9kaWZpZXIpOworCQkJCWNvbnRpbnVlOworI2VuZGlmIC8qIGRlZmluZWQgS0lUQ0hFTl9TSU5LICovCisJCQljYXNlICdsJzoKKwkJCQkvKgorCQkJCSoqIFRoaXMgdXNlZCB0byBiZS4uLgorCQkJCSoqCV9jb252KHQtPnRtX2hvdXIsIDIsICcgJyk7CisJCQkJKiogLi4uYW5kIGhhcyBiZWVuIGNoYW5nZWQgdG8gdGhlIGJlbG93IHRvCisJCQkJKiogbWF0Y2ggU3VuT1MgNC4xLjEgYW5kIEFybm9sZCBSb2JiaW4ncworCQkJCSoqIHN0cmZ0aW1lIHZlcnNpb24gMy4wLiBUaGF0IGlzLCAiJWsiIGFuZAorCQkJCSoqICIlbCIgaGF2ZSBiZWVuIHN3YXBwZWQuCisJCQkJKiogKGFkbywgMTk5My0wNS0yNCkKKwkJCQkqLworCQkJCXB0ID0gX2NvbnYoKHQtPnRtX2hvdXIgJSAxMikgPworCQkJCQkodC0+dG1faG91ciAlIDEyKSA6IDEyLAorCQkJCQlnZXRmb3JtYXQobW9kaWZpZXIsICIlMmQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJTJkIiwgIiVkIiwgIiUwMmQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdCwgcHRsaW0pOworCQkJCWNvbnRpbnVlOworCQkJY2FzZSAnTSc6CisJCQkJcHQgPSBfY29udih0LT50bV9taW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Zm9ybWF0KG1vZGlmaWVyLCAiJTAyZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlMmQiLCAiJWQiLCAiJTAyZCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0LCBwdGxpbSk7CisJCQkJY29udGludWU7CisJCQljYXNlICdtJzoKKwkJCQlwdCA9IF9jb252KHQtPnRtX21vbiArIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Zm9ybWF0KG1vZGlmaWVyLCAiJTAyZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlMmQiLCAiJWQiLCAiJTAyZCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0LCBwdGxpbSk7CisJCQkJY29udGludWU7CisJCQljYXNlICduJzoKKwkJCQlwdCA9IF9hZGQoIlxuIiwgcHQsIHB0bGltLCBtb2RpZmllcik7CisJCQkJY29udGludWU7CisJCQljYXNlICdwJzoKKwkJCQlwdCA9IF9hZGQoKHQtPnRtX2hvdXIgPj0gKEhPVVJTUEVSREFZIC8gMikpID8KKwkJCQkJTG9jYWxlLT5wbSA6CisJCQkJCUxvY2FsZS0+YW0sCisJCQkJCXB0LCBwdGxpbSwgbW9kaWZpZXIpOworCQkJCWNvbnRpbnVlOworCQkJY2FzZSAnUCc6CisJCQkJcHQgPSBfYWRkKCh0LT50bV9ob3VyID49IChIT1VSU1BFUkRBWSAvIDIpKSA/CisJCQkJCUxvY2FsZS0+cG0gOgorCQkJCQlMb2NhbGUtPmFtLAorCQkJCQlwdCwgcHRsaW0sIEZPUkNFX0xPV0VSX0NBU0UpOworCQkJCWNvbnRpbnVlOworCQkJY2FzZSAnUic6CisJCQkJcHQgPSBfZm10KCIlSDolTSIsIHQsIHB0LCBwdGxpbSwgd2FybnApOworCQkJCWNvbnRpbnVlOworCQkJY2FzZSAncic6CisJCQkJcHQgPSBfZm10KCIlSTolTTolUyAlcCIsIHQsIHB0LCBwdGxpbSwgd2FybnApOworCQkJCWNvbnRpbnVlOworCQkJY2FzZSAnUyc6CisJCQkJcHQgPSBfY29udih0LT50bV9zZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Zm9ybWF0KG1vZGlmaWVyLCAiJTAyZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlMmQiLCAiJWQiLCAiJTAyZCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0LCBwdGxpbSk7CisJCQkJY29udGludWU7CisJCQljYXNlICdzJzoKKwkJCQl7CisJCQkJCXN0cnVjdCB0bQl0bTsKKwkJCQkJY2hhcgkJYnVmW0lOVF9TVFJMRU5fTUFYSU1VTSgKKwkJCQkJCQkJdGltZV90KSArIDFdOworCQkJCQl0aW1lX3QJCW1rdDsKKworCQkJCQl0bSA9ICp0OworCQkJCQlta3QgPSBta3RpbWUoJnRtKTsKKwkJCQkJaWYgKFRZUEVfU0lHTkVEKHRpbWVfdCkpCisJCQkJCQkodm9pZCkgc3ByaW50ZihidWYsICIlbGQiLAorCQkJCQkJCShsb25nKSBta3QpOworCQkJCQllbHNlCSh2b2lkKSBzcHJpbnRmKGJ1ZiwgIiVsdSIsCisJCQkJCQkJKHVuc2lnbmVkIGxvbmcpIG1rdCk7CisJCQkJCXB0ID0gX2FkZChidWYsIHB0LCBwdGxpbSwgbW9kaWZpZXIpOworCQkJCX0KKwkJCQljb250aW51ZTsKKwkJCWNhc2UgJ1QnOgorCQkJCXB0ID0gX2ZtdCgiJUg6JU06JVMiLCB0LCBwdCwgcHRsaW0sIHdhcm5wKTsKKwkJCQljb250aW51ZTsKKwkJCWNhc2UgJ3QnOgorCQkJCXB0ID0gX2FkZCgiXHQiLCBwdCwgcHRsaW0sIG1vZGlmaWVyKTsKKwkJCQljb250aW51ZTsKKwkJCWNhc2UgJ1UnOgorCQkJCXB0ID0gX2NvbnYoKHQtPnRtX3lkYXkgKyBEQVlTUEVSV0VFSyAtCisJCQkJCXQtPnRtX3dkYXkpIC8gREFZU1BFUldFRUssCisJCQkJCWdldGZvcm1hdChtb2RpZmllciwgIiUwMmQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJTJkIiwgIiVkIiwgIiUwMmQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdCwgcHRsaW0pOworCQkJCWNvbnRpbnVlOworCQkJY2FzZSAndSc6CisJCQkJLyoKKwkJCQkqKiBGcm9tIEFybm9sZCBSb2JiaW5zJyBzdHJmdGltZSB2ZXJzaW9uIDMuMDoKKwkJCQkqKiAiSVNPIDg2MDE6IFdlZWtkYXkgYXMgYSBkZWNpbWFsIG51bWJlcgorCQkJCSoqIFsxIChNb25kYXkpIC0gN10iCisJCQkJKiogKGFkbywgMTk5My0wNS0yNCkKKwkJCQkqLworCQkJCXB0ID0gX2NvbnYoKHQtPnRtX3dkYXkgPT0gMCkgPworCQkJCQlEQVlTUEVSV0VFSyA6IHQtPnRtX3dkYXksICIlZCIsIHB0LCBwdGxpbSk7CisJCQkJY29udGludWU7CisJCQljYXNlICdWJzoJLyogSVNPIDg2MDEgd2VlayBudW1iZXIgKi8KKwkJCWNhc2UgJ0cnOgkvKiBJU08gODYwMSB5ZWFyIChmb3VyIGRpZ2l0cykgKi8KKwkJCWNhc2UgJ2cnOgkvKiBJU08gODYwMSB5ZWFyICh0d28gZGlnaXRzKSAqLworLyoKKyoqIEZyb20gQXJub2xkIFJvYmJpbnMnIHN0cmZ0aW1lIHZlcnNpb24gMy4wOiAidGhlIHdlZWsgbnVtYmVyIG9mIHRoZQorKiogeWVhciAodGhlIGZpcnN0IE1vbmRheSBhcyB0aGUgZmlyc3QgZGF5IG9mIHdlZWsgMSkgYXMgYSBkZWNpbWFsIG51bWJlcgorKiogKDAxLTUzKS4iCisqKiAoYWRvLCAxOTkzLTA1LTI0KQorKioKKyoqIEZyb20gImh0dHA6Ly93d3cuZnQudW5pLWVybGFuZ2VuLmRlL35tc2t1aG4vaXNvLXRpbWUuaHRtbCIgYnkgTWFya3VzIEt1aG46CisqKiAiV2VlayAwMSBvZiBhIHllYXIgaXMgcGVyIGRlZmluaXRpb24gdGhlIGZpcnN0IHdlZWsgd2hpY2ggaGFzIHRoZQorKiogVGh1cnNkYXkgaW4gdGhpcyB5ZWFyLCB3aGljaCBpcyBlcXVpdmFsZW50IHRvIHRoZSB3ZWVrIHdoaWNoIGNvbnRhaW5zCisqKiB0aGUgZm91cnRoIGRheSBvZiBKYW51YXJ5LiBJbiBvdGhlciB3b3JkcywgdGhlIGZpcnN0IHdlZWsgb2YgYSBuZXcgeWVhcgorKiogaXMgdGhlIHdlZWsgd2hpY2ggaGFzIHRoZSBtYWpvcml0eSBvZiBpdHMgZGF5cyBpbiB0aGUgbmV3IHllYXIuIFdlZWsgMDEKKyoqIG1pZ2h0IGFsc28gY29udGFpbiBkYXlzIGZyb20gdGhlIHByZXZpb3VzIHllYXIgYW5kIHRoZSB3ZWVrIGJlZm9yZSB3ZWVrCisqKiAwMSBvZiBhIHllYXIgaXMgdGhlIGxhc3Qgd2VlayAoNTIgb3IgNTMpIG9mIHRoZSBwcmV2aW91cyB5ZWFyIGV2ZW4gaWYKKyoqIGl0IGNvbnRhaW5zIGRheXMgZnJvbSB0aGUgbmV3IHllYXIuIEEgd2VlayBzdGFydHMgd2l0aCBNb25kYXkgKGRheSAxKQorKiogYW5kIGVuZHMgd2l0aCBTdW5kYXkgKGRheSA3KS4gRm9yIGV4YW1wbGUsIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyCisqKiAxOTk3IGxhc3RzIGZyb20gMTk5Ni0xMi0zMCB0byAxOTk3LTAxLTA1Li4uIgorKiogKGFkbywgMTk5Ni0wMS0wMikKKyovCisJCQkJeworCQkJCQlpbnQJeWVhcjsKKwkJCQkJaW50CWJhc2U7CisJCQkJCWludAl5ZGF5OworCQkJCQlpbnQJd2RheTsKKwkJCQkJaW50CXc7CisKKwkJCQkJeWVhciA9IHQtPnRtX3llYXI7CisJCQkJCWJhc2UgPSBUTV9ZRUFSX0JBU0U7CisJCQkJCXlkYXkgPSB0LT50bV95ZGF5OworCQkJCQl3ZGF5ID0gdC0+dG1fd2RheTsKKwkJCQkJZm9yICggOyA7ICkgeworCQkJCQkJaW50CWxlbjsKKwkJCQkJCWludAlib3Q7CisJCQkJCQlpbnQJdG9wOworCisJCQkJCQlsZW4gPSBpc2xlYXBfc3VtKHllYXIsIGJhc2UpID8KKwkJCQkJCQlEQVlTUEVSTFlFQVIgOgorCQkJCQkJCURBWVNQRVJOWUVBUjsKKwkJCQkJCS8qCisJCQkJCQkqKiBXaGF0IHlkYXkgKC0zIC4uLiAzKSBkb2VzCisJCQkJCQkqKiB0aGUgSVNPIHllYXIgYmVnaW4gb24/CisJCQkJCQkqLworCQkJCQkJYm90ID0gKCh5ZGF5ICsgMTEgLSB3ZGF5KSAlCisJCQkJCQkJREFZU1BFUldFRUspIC0gMzsKKwkJCQkJCS8qCisJCQkJCQkqKiBXaGF0IHlkYXkgZG9lcyB0aGUgTkVYVAorCQkJCQkJKiogSVNPIHllYXIgYmVnaW4gb24/CisJCQkJCQkqLworCQkJCQkJdG9wID0gYm90IC0KKwkJCQkJCQkobGVuICUgREFZU1BFUldFRUspOworCQkJCQkJaWYgKHRvcCA8IC0zKQorCQkJCQkJCXRvcCArPSBEQVlTUEVSV0VFSzsKKwkJCQkJCXRvcCArPSBsZW47CisJCQkJCQlpZiAoeWRheSA+PSB0b3ApIHsKKwkJCQkJCQkrK2Jhc2U7CisJCQkJCQkJdyA9IDE7CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCQlpZiAoeWRheSA+PSBib3QpIHsKKwkJCQkJCQl3ID0gMSArICgoeWRheSAtIGJvdCkgLworCQkJCQkJCQlEQVlTUEVSV0VFSyk7CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCQktLWJhc2U7CisJCQkJCQl5ZGF5ICs9IGlzbGVhcF9zdW0oeWVhciwgYmFzZSkgPworCQkJCQkJCURBWVNQRVJMWUVBUiA6CisJCQkJCQkJREFZU1BFUk5ZRUFSOworCQkJCQl9CisjaWZkZWYgWFBHNF8xOTk0XzA0XzA5CisJCQkJCWlmICgodyA9PSA1MiAmJgorCQkJCQkJdC0+dG1fbW9uID09IFRNX0pBTlVBUlkpIHx8CisJCQkJCQkodyA9PSAxICYmCisJCQkJCQl0LT50bV9tb24gPT0gVE1fREVDRU1CRVIpKQorCQkJCQkJCXcgPSA1MzsKKyNlbmRpZiAvKiBkZWZpbmVkIFhQRzRfMTk5NF8wNF8wOSAqLworCQkJCQlpZiAoKmZvcm1hdCA9PSAnVicpCisJCQkJCQlwdCA9IF9jb252KHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldGZvcm1hdChtb2RpZmllciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlMDJkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlMmQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlMDJkIiksCisJCQkJCQkJICAgcHQsIHB0bGltKTsKKwkJCQkJZWxzZSBpZiAoKmZvcm1hdCA9PSAnZycpIHsKKwkJCQkJCSp3YXJucCA9IElOX0FMTDsKKwkJCQkJCXB0ID0gX3ljb252KHllYXIsIGJhc2UsIDAsIDEsCisJCQkJCQkJcHQsIHB0bGltLCBtb2RpZmllcik7CisJCQkJCX0gZWxzZQlwdCA9IF95Y29udih5ZWFyLCBiYXNlLCAxLCAxLAorCQkJCQkJCXB0LCBwdGxpbSwgbW9kaWZpZXIpOworCQkJCX0KKwkJCQljb250aW51ZTsKKwkJCWNhc2UgJ3YnOgorCQkJCS8qCisJCQkJKiogRnJvbSBBcm5vbGQgUm9iYmlucycgc3RyZnRpbWUgdmVyc2lvbiAzLjA6CisJCQkJKiogImRhdGUgYXMgZGQtYmJiLVlZWVkiCisJCQkJKiogKGFkbywgMTk5My0wNS0yNCkKKwkJCQkqLworCQkJCXB0ID0gX2ZtdCgiJWUtJWItJVkiLCB0LCBwdCwgcHRsaW0sIHdhcm5wKTsKKwkJCQljb250aW51ZTsKKwkJCWNhc2UgJ1cnOgorCQkJCXB0ID0gX2NvbnYoKHQtPnRtX3lkYXkgKyBEQVlTUEVSV0VFSyAtCisJCQkJCSh0LT50bV93ZGF5ID8KKwkJCQkJKHQtPnRtX3dkYXkgLSAxKSA6CisJCQkJCShEQVlTUEVSV0VFSyAtIDEpKSkgLyBEQVlTUEVSV0VFSywKKwkJCQkJZ2V0Zm9ybWF0KG1vZGlmaWVyLCAiJTAyZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlMmQiLCAiJWQiLCAiJTAyZCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0LCBwdGxpbSk7CisJCQkJY29udGludWU7CisJCQljYXNlICd3JzoKKwkJCQlwdCA9IF9jb252KHQtPnRtX3dkYXksICIlZCIsIHB0LCBwdGxpbSk7CisJCQkJY29udGludWU7CisJCQljYXNlICdYJzoKKwkJCQlwdCA9IF9mbXQoTG9jYWxlLT5YX2ZtdCwgdCwgcHQsIHB0bGltLCB3YXJucCk7CisJCQkJY29udGludWU7CisJCQljYXNlICd4JzoKKwkJCQl7CisJCQkJaW50CXdhcm4yID0gSU5fU09NRTsKKworCQkJCXB0ID0gX2ZtdChMb2NhbGUtPnhfZm10LCB0LCBwdCwgcHRsaW0sICZ3YXJuMik7CisJCQkJaWYgKHdhcm4yID09IElOX0FMTCkKKwkJCQkJd2FybjIgPSBJTl9USElTOworCQkJCWlmICh3YXJuMiA+ICp3YXJucCkKKwkJCQkJKndhcm5wID0gd2FybjI7CisJCQkJfQorCQkJCWNvbnRpbnVlOworCQkJY2FzZSAneSc6CisJCQkJKndhcm5wID0gSU5fQUxMOworCQkJCXB0ID0gX3ljb252KHQtPnRtX3llYXIsIFRNX1lFQVJfQkFTRSwgMCwgMSwKKwkJCQkJcHQsIHB0bGltLCBtb2RpZmllcik7CisJCQkJY29udGludWU7CisJCQljYXNlICdZJzoKKwkJCQlwdCA9IF95Y29udih0LT50bV95ZWFyLCBUTV9ZRUFSX0JBU0UsIDEsIDEsCisJCQkJCXB0LCBwdGxpbSwgbW9kaWZpZXIpOworCQkJCWNvbnRpbnVlOworCQkJY2FzZSAnWic6CisjaWZkZWYgVE1fWk9ORQorCQkJCWlmICh0LT5UTV9aT05FICE9IE5VTEwpCisJCQkJCXB0ID0gX2FkZCh0LT5UTV9aT05FLCBwdCwgcHRsaW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVyKTsKKwkJCQllbHNlCisjZW5kaWYgLyogZGVmaW5lZCBUTV9aT05FICovCisJCQkJaWYgKHQtPnRtX2lzZHN0ID49IDApCisJCQkJCXB0ID0gX2FkZCh0em5hbWVbdC0+dG1faXNkc3QgIT0gMF0sCisJCQkJCQlwdCwgcHRsaW0sIG1vZGlmaWVyKTsKKwkJCQkvKgorCQkJCSoqIEM5OSBzYXlzIHRoYXQgJVogbXVzdCBiZSByZXBsYWNlZCBieSB0aGUKKwkJCQkqKiBlbXB0eSBzdHJpbmcgaWYgdGhlIHRpbWUgem9uZSBpcyBub3QKKwkJCQkqKiBkZXRlcm1pbmFibGUuCisJCQkJKi8KKwkJCQljb250aW51ZTsKKwkJCWNhc2UgJ3onOgorCQkJCXsKKwkJCQlpbnQJCWRpZmY7CisJCQkJY2hhciBjb25zdCAqCXNpZ247CisKKwkJCQlpZiAodC0+dG1faXNkc3QgPCAwKQorCQkJCQljb250aW51ZTsKKyNpZmRlZiBUTV9HTVRPRkYKKwkJCQlkaWZmID0gdC0+VE1fR01UT0ZGOworI2Vsc2UgLyogIWRlZmluZWQgVE1fR01UT0ZGICovCisJCQkJLyoKKwkJCQkqKiBDOTkgc2F5cyB0aGF0IHRoZSBVVEMgb2Zmc2V0IG11c3QKKwkJCQkqKiBiZSBjb21wdXRlZCBieSBsb29raW5nIG9ubHkgYXQKKwkJCQkqKiB0bV9pc2RzdC4gVGhpcyByZXF1aXJlbWVudCBpcworCQkJCSoqIGluY29ycmVjdCwgc2luY2UgaXQgbWVhbnMgdGhlIGNvZGUKKwkJCQkqKiBtdXN0IHJlbHkgb24gbWFnaWMgKGluIHRoaXMgY2FzZQorCQkJCSoqIGFsdHpvbmUgYW5kIHRpbWV6b25lKSwgYW5kIHRoZQorCQkJCSoqIG1hZ2ljIG1pZ2h0IG5vdCBoYXZlIHRoZSBjb3JyZWN0CisJCQkJKiogb2Zmc2V0LiBEb2luZyB0aGluZ3MgY29ycmVjdGx5IGlzCisJCQkJKiogdHJpY2t5IGFuZCByZXF1aXJlcyBkaXNvYmV5aW5nIEM5OTsKKwkJCQkqKiBzZWUgR05VIEMgc3RyZnRpbWUgZm9yIGRldGFpbHMuCisJCQkJKiogRm9yIG5vdywgcHVudCBhbmQgY29uZm9ybSB0byB0aGUKKwkJCQkqKiBzdGFuZGFyZCwgZXZlbiB0aG91Z2ggaXQncyBpbmNvcnJlY3QuCisJCQkJKioKKwkJCQkqKiBDOTkgc2F5cyB0aGF0ICV6IG11c3QgYmUgcmVwbGFjZWQgYnkgdGhlCisJCQkJKiogZW1wdHkgc3RyaW5nIGlmIHRoZSB0aW1lIHpvbmUgaXMgbm90CisJCQkJKiogZGV0ZXJtaW5hYmxlLCBzbyBvdXRwdXQgbm90aGluZyBpZiB0aGUKKwkJCQkqKiBhcHByb3ByaWF0ZSB2YXJpYWJsZXMgYXJlIG5vdCBhdmFpbGFibGUuCisJCQkJKi8KKwkJCQlpZiAodC0+dG1faXNkc3QgPT0gMCkKKyNpZmRlZiBVU0dfQ09NUEFUCisJCQkJCWRpZmYgPSAtdGltZXpvbmU7CisjZWxzZSAvKiAhZGVmaW5lZCBVU0dfQ09NUEFUICovCisJCQkJCWNvbnRpbnVlOworI2VuZGlmIC8qICFkZWZpbmVkIFVTR19DT01QQVQgKi8KKwkJCQllbHNlCisjaWZkZWYgQUxUWk9ORQorCQkJCQlkaWZmID0gLWFsdHpvbmU7CisjZWxzZSAvKiAhZGVmaW5lZCBBTFRaT05FICovCisJCQkJCWNvbnRpbnVlOworI2VuZGlmIC8qICFkZWZpbmVkIEFMVFpPTkUgKi8KKyNlbmRpZiAvKiAhZGVmaW5lZCBUTV9HTVRPRkYgKi8KKwkJCQlpZiAoZGlmZiA8IDApIHsKKwkJCQkJc2lnbiA9ICItIjsKKwkJCQkJZGlmZiA9IC1kaWZmOworCQkJCX0gZWxzZQlzaWduID0gIisiOworCQkJCXB0ID0gX2FkZChzaWduLCBwdCwgcHRsaW0sIG1vZGlmaWVyKTsKKwkJCQlkaWZmIC89IFNFQ1NQRVJNSU47CisJCQkJZGlmZiA9IChkaWZmIC8gTUlOU1BFUkhPVVIpICogMTAwICsKKwkJCQkJKGRpZmYgJSBNSU5TUEVSSE9VUik7CisJCQkJcHQgPSBfY29udihkaWZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldGZvcm1hdChtb2RpZmllciwgIiUwNGQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJTRkIiwgIiVkIiwgIiUwNGQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdCwgcHRsaW0pOworCQkJCX0KKwkJCQljb250aW51ZTsKKwkJCWNhc2UgJysnOgorCQkJCXB0ID0gX2ZtdChMb2NhbGUtPmRhdGVfZm10LCB0LCBwdCwgcHRsaW0sCisJCQkJCXdhcm5wKTsKKwkJCQljb250aW51ZTsKKwkJCWNhc2UgJyUnOgorCQkJLyoKKwkJCSoqIFgzMTFKLzg4LTA5MCAoNC4xMi4zLjUpOiBpZiBjb252ZXJzaW9uIGNoYXIgaXMKKwkJCSoqIHVuZGVmaW5lZCwgYmVoYXZpb3IgaXMgdW5kZWZpbmVkLiBQcmludCBvdXQgdGhlCisJCQkqKiBjaGFyYWN0ZXIgaXRzZWxmIGFzIHByaW50ZigzKSBhbHNvIGRvZXMuCisJCQkqLworCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAocHQgPT0gcHRsaW0pCisJCQlicmVhazsKKwkJKnB0KysgPSAqZm9ybWF0OworCX0KKwlyZXR1cm4gcHQ7Cit9CisKK3N0YXRpYyBjaGFyICoKK19jb252KG4sIGZvcm1hdCwgcHQsIHB0bGltKQorY29uc3QgaW50CQluOworY29uc3QgY2hhciAqIGNvbnN0CWZvcm1hdDsKK2NoYXIgKiBjb25zdAkJcHQ7Citjb25zdCBjaGFyICogY29uc3QJcHRsaW07Cit7CisJY2hhcglidWZbSU5UX1NUUkxFTl9NQVhJTVVNKGludCkgKyAxXTsKKworCSh2b2lkKSBzcHJpbnRmKGJ1ZiwgZm9ybWF0LCBuKTsKKwlyZXR1cm4gX2FkZChidWYsIHB0LCBwdGxpbSwgMCk7Cit9CisKK3N0YXRpYyBjaGFyICoKK19hZGQoc3RyLCBwdCwgcHRsaW0sIG1vZGlmaWVyKQorY29uc3QgY2hhciAqCQlzdHI7CitjaGFyICoJCQlwdDsKK2NvbnN0IGNoYXIgKiBjb25zdAlwdGxpbTsKK2ludCAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVyOworeworICAgICAgICBpbnQgYzsKKworICAgICAgICBzd2l0Y2ggKG1vZGlmaWVyKSB7CisgICAgICAgIGNhc2UgRk9SQ0VfTE9XRVJfQ0FTRToKKyAgICAgICAgICAgICAgICB3aGlsZSAocHQgPCBwdGxpbSAmJiAoKnB0ID0gdG9sb3dlcigqc3RyKyspKSAhPSAnXDAnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICArK3B0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlICdeJzoKKyAgICAgICAgICAgICAgICB3aGlsZSAocHQgPCBwdGxpbSAmJiAoKnB0ID0gdG91cHBlcigqc3RyKyspKSAhPSAnXDAnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICArK3B0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlICcjJzoKKyAgICAgICAgICAgICAgICB3aGlsZSAocHQgPCBwdGxpbSAmJiAoYyA9ICpzdHIrKykgIT0gJ1wwJykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzdXBwZXIoYykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IHRvbG93ZXIoYyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzbG93ZXIoYykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IHRvdXBwZXIoYyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAqcHQgPSBjOworICAgICAgICAgICAgICAgICAgICAgICAgKytwdDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHdoaWxlIChwdCA8IHB0bGltICYmICgqcHQgPSAqc3RyKyspICE9ICdcMCcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICsrcHQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisKKwlyZXR1cm4gcHQ7Cit9CisKKy8qCisqKiBQT1NJWCBhbmQgdGhlIEMgU3RhbmRhcmQgYXJlIHVuY2xlYXIgb3IgaW5jb25zaXN0ZW50IGFib3V0CisqKiB3aGF0ICVDIGFuZCAleSBkbyBpZiB0aGUgeWVhciBpcyBuZWdhdGl2ZSBvciBleGNlZWRzIDk5OTkuCisqKiBVc2UgdGhlIGNvbnZlbnRpb24gdGhhdCAlQyBjb25jYXRlbmF0ZWQgd2l0aCAleSB5aWVsZHMgdGhlCisqKiBzYW1lIG91dHB1dCBhcyAlWSwgYW5kIHRoYXQgJVkgY29udGFpbnMgYXQgbGVhc3QgNCBieXRlcywKKyoqIHdpdGggbW9yZSBvbmx5IGlmIG5lY2Vzc2FyeS4KKyovCisKK3N0YXRpYyBjaGFyICoKK195Y29udihhLCBiLCBjb252ZXJ0X3RvcCwgY29udmVydF95eSwgcHQsIHB0bGltLCBtb2RpZmllcikKK2NvbnN0IGludAkJYTsKK2NvbnN0IGludAkJYjsKK2NvbnN0IGludAkJY29udmVydF90b3A7Citjb25zdCBpbnQJCWNvbnZlcnRfeXk7CitjaGFyICoJCQlwdDsKK2NvbnN0IGNoYXIgKiBjb25zdAlwdGxpbTsKK2ludCAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVyOworeworCXJlZ2lzdGVyIGludAlsZWFkOworCXJlZ2lzdGVyIGludAl0cmFpbDsKKworI2RlZmluZSBESVZJU09SCTEwMAorCXRyYWlsID0gYSAlIERJVklTT1IgKyBiICUgRElWSVNPUjsKKwlsZWFkID0gYSAvIERJVklTT1IgKyBiIC8gRElWSVNPUiArIHRyYWlsIC8gRElWSVNPUjsKKwl0cmFpbCAlPSBESVZJU09SOworCWlmICh0cmFpbCA8IDAgJiYgbGVhZCA+IDApIHsKKwkJdHJhaWwgKz0gRElWSVNPUjsKKwkJLS1sZWFkOworCX0gZWxzZSBpZiAobGVhZCA8IDAgJiYgdHJhaWwgPiAwKSB7CisJCXRyYWlsIC09IERJVklTT1I7CisJCSsrbGVhZDsKKwl9CisJaWYgKGNvbnZlcnRfdG9wKSB7CisJCWlmIChsZWFkID09IDAgJiYgdHJhaWwgPCAwKQorCQkJcHQgPSBfYWRkKCItMCIsIHB0LCBwdGxpbSwgbW9kaWZpZXIpOworCQllbHNlCXB0ID0gX2NvbnYobGVhZCwgZ2V0Zm9ybWF0KG1vZGlmaWVyLCAiJTAyZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJTJkIiwgIiVkIiwgIiUwMmQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHQsIHB0bGltKTsKKwl9CisJaWYgKGNvbnZlcnRfeXkpCisJCXB0ID0gX2NvbnYoKCh0cmFpbCA8IDApID8gLXRyYWlsIDogdHJhaWwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Zm9ybWF0KG1vZGlmaWVyLCAiJTAyZCIsICIlMmQiLCAiJWQiLCAiJTAyZCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcHQsIHB0bGltKTsKKwlyZXR1cm4gcHQ7Cit9CisKKyNpZmRlZiBMT0NBTEVfSE9NRQorc3RhdGljIHN0cnVjdCBsY190aW1lX1QgKgorX2xvYyBQKCh2b2lkKSkKK3sKKwlzdGF0aWMgY29uc3QgY2hhcglsb2NhbGVfaG9tZVtdID0gTE9DQUxFX0hPTUU7CisJc3RhdGljIGNvbnN0IGNoYXIJbGNfdGltZVtdID0gIkxDX1RJTUUiOworCXN0YXRpYyBjaGFyICoJCWxvY2FsZV9idWY7CisKKwlpbnQJCQlmZDsKKwlpbnQJCQlvbGRzdW47CS8qICIuLi5haW4ndCBnb3Qgbm90aGluJyB0byBkby4uLiIgKi8KKwljaGFyICoJCQlsYnVmOworCWNoYXIgKgkJCW5hbWU7CisJY2hhciAqCQkJcDsKKwljb25zdCBjaGFyICoqCQlhcDsKKwljb25zdCBjaGFyICoJCXBsaW07CisJY2hhcgkJCWZpbGVuYW1lW0ZJTEVOQU1FX01BWF07CisJc3RydWN0IHN0YXQJCXN0OworCXNpemVfdAkJCW5hbWVzaXplOworCXNpemVfdAkJCWJ1ZnNpemU7CisKKwkvKgorCSoqIFVzZSBsb2NhbGVidWYubW9uWzBdIHRvIHNpZ25hbCB3aGV0aGVyIGxvY2FsZSBpcyBhbHJlYWR5IHNldCB1cC4KKwkqLworCWlmIChsb2NhbGVidWYubW9uWzBdKQorCQlyZXR1cm4gJmxvY2FsZWJ1ZjsKKwluYW1lID0gc2V0bG9jYWxlKExDX1RJTUUsIChjaGFyICopIE5VTEwpOworCWlmIChuYW1lID09IE5VTEwgfHwgKm5hbWUgPT0gJ1wwJykKKwkJZ290byBub19sb2NhbGU7CisJLyoKKwkqKiBJZiB0aGUgbG9jYWxlIG5hbWUgaXMgdGhlIHNhbWUgYXMgb3VyIGNhY2hlLCB1c2UgdGhlIGNhY2hlLgorCSovCisJbGJ1ZiA9IGxvY2FsZV9idWY7CisJaWYgKGxidWYgIT0gTlVMTCAmJiBzdHJjbXAobmFtZSwgbGJ1ZikgPT0gMCkgeworCQlwID0gbGJ1ZjsKKwkJZm9yIChhcCA9IChjb25zdCBjaGFyICoqKSAmbG9jYWxlYnVmOworCQkJYXAgPCAoY29uc3QgY2hhciAqKikgKCZsb2NhbGVidWYgKyAxKTsKKwkJCQkrK2FwKQorCQkJCQkqYXAgPSBwICs9IHN0cmxlbihwKSArIDE7CisJCXJldHVybiAmbG9jYWxlYnVmOworCX0KKwkvKgorCSoqIFNsdXJwIHRoZSBsb2NhbGUgZmlsZSBpbnRvIHRoZSBjYWNoZS4KKwkqLworCW5hbWVzaXplID0gc3RybGVuKG5hbWUpICsgMTsKKwlpZiAoc2l6ZW9mIGZpbGVuYW1lIDwKKwkJKChzaXplb2YgbG9jYWxlX2hvbWUpICsgbmFtZXNpemUgKyAoc2l6ZW9mIGxjX3RpbWUpKSkKKwkJCWdvdG8gbm9fbG9jYWxlOworCW9sZHN1biA9IDA7CisJKHZvaWQpIHNwcmludGYoZmlsZW5hbWUsICIlcy8lcy8lcyIsIGxvY2FsZV9ob21lLCBuYW1lLCBsY190aW1lKTsKKwlmZCA9IG9wZW4oZmlsZW5hbWUsIE9fUkRPTkxZKTsKKwlpZiAoZmQgPCAwKSB7CisJCS8qCisJCSoqIE9sZCBTdW4gc3lzdGVtcyBoYXZlIGEgZGlmZmVyZW50IG5hbWluZyBhbmQgZGF0YSBjb252ZW50aW9uLgorCQkqLworCQlvbGRzdW4gPSAxOworCQkodm9pZCkgc3ByaW50ZihmaWxlbmFtZSwgIiVzLyVzLyVzIiwgbG9jYWxlX2hvbWUsCisJCQlsY190aW1lLCBuYW1lKTsKKwkJZmQgPSBvcGVuKGZpbGVuYW1lLCBPX1JET05MWSk7CisJCWlmIChmZCA8IDApCisJCQlnb3RvIG5vX2xvY2FsZTsKKwl9CisJaWYgKGZzdGF0KGZkLCAmc3QpICE9IDApCisJCWdvdG8gYmFkX2xvY2FsZTsKKwlpZiAoc3Quc3Rfc2l6ZSA8PSAwKQorCQlnb3RvIGJhZF9sb2NhbGU7CisJYnVmc2l6ZSA9IG5hbWVzaXplICsgc3Quc3Rfc2l6ZTsKKwlsb2NhbGVfYnVmID0gTlVMTDsKKwlsYnVmID0gKGxidWYgPT0gTlVMTCkgPyBtYWxsb2MoYnVmc2l6ZSkgOiByZWFsbG9jKGxidWYsIGJ1ZnNpemUpOworCWlmIChsYnVmID09IE5VTEwpCisJCWdvdG8gYmFkX2xvY2FsZTsKKwkodm9pZCkgc3RyY3B5KGxidWYsIG5hbWUpOworCXAgPSBsYnVmICsgbmFtZXNpemU7CisJcGxpbSA9IHAgKyBzdC5zdF9zaXplOworCWlmIChyZWFkKGZkLCBwLCAoc2l6ZV90KSBzdC5zdF9zaXplKSAhPSBzdC5zdF9zaXplKQorCQlnb3RvIGJhZF9sYnVmOworCWlmIChjbG9zZShmZCkgIT0gMCkKKwkJZ290byBiYWRfbGJ1ZjsKKwkvKgorCSoqIFBhcnNlIHRoZSBsb2NhbGUgZmlsZSBpbnRvIGxvY2FsZWJ1Zi4KKwkqLworCWlmIChwbGltWy0xXSAhPSAnXG4nKQorCQlnb3RvIGJhZF9sYnVmOworCWZvciAoYXAgPSAoY29uc3QgY2hhciAqKikgJmxvY2FsZWJ1ZjsKKwkJYXAgPCAoY29uc3QgY2hhciAqKikgKCZsb2NhbGVidWYgKyAxKTsKKwkJCSsrYXApIHsKKwkJCQlpZiAocCA9PSBwbGltKQorCQkJCQlnb3RvIGJhZF9sYnVmOworCQkJCSphcCA9IHA7CisJCQkJd2hpbGUgKCpwICE9ICdcbicpCisJCQkJCSsrcDsKKwkJCQkqcCsrID0gJ1wwJzsKKwl9CisJaWYgKG9sZHN1bikgeworCQkvKgorCQkqKiBTdW5PUyA0IHVzZWQgYW4gb2Jzb2xlc2NlbnQgZm9ybWF0OyBzZWUgbG9jYWxkdGNvbnYoMykuCisJCSoqIGNfZm10IGhhZCB0aGUgYGBzaG9ydCBmb3JtYXQgZm9yIGRhdGVzIGFuZCB0aW1lcyB0b2dldGhlcicnCisJCSoqIChTdW5PUyA0IGRhdGUsICIlYSAlYiAlZSAlVCAlWiAlWSIgaW4gdGhlIEMgbG9jYWxlKTsKKwkJKiogZGF0ZV9mbXQgaGFkIHRoZSBgYGxvbmcgZm9ybWF0IGZvciBkYXRlcycnCisJCSoqIChTdW5PUyA0IHN0cmZ0aW1lICVDLCAiJUEsICVCICVlLCAlWSIgaW4gdGhlIEMgbG9jYWxlKS4KKwkJKiogRGlzY2FyZCB0aGUgbGF0dGVyIGluIGZhdm9yIG9mIHRoZSBmb3JtZXIuCisJCSovCisJCWxvY2FsZWJ1Zi5kYXRlX2ZtdCA9IGxvY2FsZWJ1Zi5jX2ZtdDsKKwl9CisJLyoKKwkqKiBSZWNvcmQgdGhlIHN1Y2Nlc3NmdWwgcGFyc2UgaW4gdGhlIGNhY2hlLgorCSovCisJbG9jYWxlX2J1ZiA9IGxidWY7CisKKwlyZXR1cm4gJmxvY2FsZWJ1ZjsKKworYmFkX2xidWY6CisJZnJlZShsYnVmKTsKK2JhZF9sb2NhbGU6CisJKHZvaWQpIGNsb3NlKGZkKTsKK25vX2xvY2FsZToKKwlsb2NhbGVidWYgPSBDX3RpbWVfbG9jYWxlOworCWxvY2FsZV9idWYgPSBOVUxMOworCXJldHVybiAmbG9jYWxlYnVmOworfQorI2VuZGlmIC8qIGRlZmluZWQgTE9DQUxFX0hPTUUgKi8KZGlmZiAtLWdpdCBhL2xpYmMvdHpjb2RlL3N0cnB0aW1lLmMgYi9saWJjL3R6Y29kZS9zdHJwdGltZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4MmRhZjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3R6Y29kZS9zdHJwdGltZS5jCkBAIC0wLDAgKzEsNDMwIEBACisvKgkkT3BlbkJTRDogc3RycHRpbWUuYyx2IDEuMTEgMjAwNS8wOC8wOCAwODowNTozOCBlc3BpZSBFeHAgJCAqLworLyoJJE5ldEJTRDogc3RycHRpbWUuYyx2IDEuMTIgMTk5OC8wMS8yMCAyMTozOTo0MCBteWNyb2Z0IEV4cCAkCSovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTk3LCAxOTk4IFRoZSBOZXRCU0QgRm91bmRhdGlvbiwgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgd2FzIGNvbnRyaWJ1dGVkIHRvIFRoZSBOZXRCU0QgRm91bmRhdGlvbiBieSBLbGF1cyBLbGVpbi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICogICAgICAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE5ldEJTRAorICogICAgICAgIEZvdW5kYXRpb24sIEluYy4gYW5kIGl0cyBjb250cmlidXRvcnMuCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIFRoZSBOZXRCU0QgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgTkVUQlNEIEZPVU5EQVRJT04sIElOQy4gQU5EIENPTlRSSUJVVE9SUworICogYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECisgKiBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8jaW5jbHVkZSA8c3lzL2xvY2FsZWRlZi5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8bG9jYWxlLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgInR6ZmlsZS5oIgorCitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwljb25zdCBjaGFyICphYmRheVs3XTsKKwljb25zdCBjaGFyICpkYXlbN107CisJY29uc3QgY2hhciAqYWJtb25bMTJdOworCWNvbnN0IGNoYXIgKm1vblsxMl07CisJY29uc3QgY2hhciAqYW1fcG1bMl07CisJY29uc3QgY2hhciAqZF90X2ZtdDsKKwljb25zdCBjaGFyICpkX2ZtdDsKKwljb25zdCBjaGFyICp0X2ZtdDsKKwljb25zdCBjaGFyICp0X2ZtdF9hbXBtOworfSBfRGVmYXVsdFRpbWVMb2NhbGUgPSB7CisJeworCQkiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0IiwKKwl9LAorCXsKKwkJIlN1bmRheSIsICJNb25kYXkiLCAiVHVlc2RheSIsICJXZWRuZXNkYXkiLCAiVGh1cnNkYXkiLAorCQkiRnJpZGF5IiwgIlNhdHVyZGF5IgorCX0sCisJeworCQkiSmFuIiwgIkZlYiIsICJNYXIiLCAiQXByIiwgIk1heSIsICJKdW4iLAorCQkiSnVsIiwgIkF1ZyIsICJTZXAiLCAiT2N0IiwgIk5vdiIsICJEZWMiCisJfSwKKwl7CisJCSJKYW51YXJ5IiwgIkZlYnJ1YXJ5IiwgIk1hcmNoIiwgIkFwcmlsIiwgIk1heSIsICJKdW5lIiwgIkp1bHkiLAorCQkiQXVndXN0IiwgIlNlcHRlbWJlciIsICJPY3RvYmVyIiwgIk5vdmVtYmVyIiwgIkRlY2VtYmVyIgorCX0sCisJeworCQkiQU0iLCAiUE0iCisJfSwKKwkiJWEgJWIgJWQgJUg6JU06JVMgJVkiLAorCSIlbS8lZC8leSIsCisJIiVIOiVNOiVTIiwKKwkiJUk6JU06JVMgJXAiCit9OworCisjZGVmaW5lCV9jdGxvYyh4KSAoX0RlZmF1bHRUaW1lTG9jYWxlLngpCisKKy8qCisgKiBXZSBkbyBub3QgaW1wbGVtZW50IGFsdGVybmF0ZSByZXByZXNlbnRhdGlvbnMuIEhvd2V2ZXIsIHdlIGFsd2F5cworICogY2hlY2sgd2hldGhlciBhIGdpdmVuIG1vZGlmaWVyIGlzIGFsbG93ZWQgZm9yIGEgY2VydGFpbiBjb252ZXJzaW9uLgorICovCisjZGVmaW5lIF9BTFRfRQkJCTB4MDEKKyNkZWZpbmUgX0FMVF9PCQkJMHgwMgorI2RlZmluZQlfTEVHQUxfQUxUKHgpCQl7IGlmIChhbHRfZm9ybWF0ICYgfih4KSkgcmV0dXJuICgwKTsgfQorCisKK3N0YXRpYwlpbnQgX2NvbnZfbnVtKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiosIGludCAqLCBpbnQsIGludCk7CitzdGF0aWMJY2hhciAqX3N0cnB0aW1lKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBzdHJ1Y3QgdG0gKiwgaW50KTsKKworCitjaGFyICoKK3N0cnB0aW1lKGNvbnN0IGNoYXIgKmJ1ZiwgY29uc3QgY2hhciAqZm10LCBzdHJ1Y3QgdG0gKnRtKQoreworCXJldHVybihfc3RycHRpbWUoYnVmLCBmbXQsIHRtLCAxKSk7Cit9CisKK3N0YXRpYyBjaGFyICoKK19zdHJwdGltZShjb25zdCBjaGFyICpidWYsIGNvbnN0IGNoYXIgKmZtdCwgc3RydWN0IHRtICp0bSwgaW50IGluaXRpYWxpemUpCit7CisJdW5zaWduZWQgY2hhciBjOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJwOworCXNpemVfdCBsZW47CisJaW50IGFsdF9mb3JtYXQsIGk7CisJc3RhdGljIGludCBjZW50dXJ5LCByZWx5ZWFyOworCisJaWYgKGluaXRpYWxpemUpIHsKKwkJY2VudHVyeSA9IFRNX1lFQVJfQkFTRTsKKwkJcmVseWVhciA9IC0xOworCX0KKworCWJwID0gKHVuc2lnbmVkIGNoYXIgKilidWY7CisJd2hpbGUgKChjID0gKmZtdCkgIT0gJ1wwJykgeworCQkvKiBDbGVhciBgYWx0ZXJuYXRlJyBtb2RpZmllciBwcmlvciB0byBuZXcgY29udmVyc2lvbi4gKi8KKwkJYWx0X2Zvcm1hdCA9IDA7CisKKwkJLyogRWF0IHVwIHdoaXRlLXNwYWNlLiAqLworCQlpZiAoaXNzcGFjZShjKSkgeworCQkJd2hpbGUgKGlzc3BhY2UoKmJwKSkKKwkJCQlicCsrOworCisJCQlmbXQrKzsKKwkJCWNvbnRpbnVlOworCQl9CisJCQkJCisJCWlmICgoYyA9ICpmbXQrKykgIT0gJyUnKQorCQkJZ290byBsaXRlcmFsOworCisKK2FnYWluOgkJc3dpdGNoIChjID0gKmZtdCsrKSB7CisJCWNhc2UgJyUnOgkvKiAiJSUiIGlzIGNvbnZlcnRlZCB0byAiJSIuICovCitsaXRlcmFsOgorCQlpZiAoYyAhPSAqYnArKykKKwkJCXJldHVybiAoTlVMTCk7CisKKwkJYnJlYWs7CisKKwkJLyoKKwkJICogIkFsdGVybmF0aXZlIiBtb2RpZmllcnMuIEp1c3Qgc2V0IHRoZSBhcHByb3ByaWF0ZSBmbGFnCisJCSAqIGFuZCBzdGFydCBvdmVyIGFnYWluLgorCQkgKi8KKwkJY2FzZSAnRSc6CS8qICIlRT8iIGFsdGVybmF0aXZlIGNvbnZlcnNpb24gbW9kaWZpZXIuICovCisJCQlfTEVHQUxfQUxUKDApOworCQkJYWx0X2Zvcm1hdCB8PSBfQUxUX0U7CisJCQlnb3RvIGFnYWluOworCisJCWNhc2UgJ08nOgkvKiAiJU8/IiBhbHRlcm5hdGl2ZSBjb252ZXJzaW9uIG1vZGlmaWVyLiAqLworCQkJX0xFR0FMX0FMVCgwKTsKKwkJCWFsdF9mb3JtYXQgfD0gX0FMVF9POworCQkJZ290byBhZ2FpbjsKKwkJCQorCQkvKgorCQkgKiAiQ29tcGxleCIgY29udmVyc2lvbiBydWxlcywgaW1wbGVtZW50ZWQgdGhyb3VnaCByZWN1cnNpb24uCisJCSAqLworCQljYXNlICdjJzoJLyogRGF0ZSBhbmQgdGltZSwgdXNpbmcgdGhlIGxvY2FsZSdzIGZvcm1hdC4gKi8KKwkJCV9MRUdBTF9BTFQoX0FMVF9FKTsKKwkJCWlmICghKGJwID0gX3N0cnB0aW1lKGJwLCBfY3Rsb2MoZF90X2ZtdCksIHRtLCAwKSkpCisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCWJyZWFrOworCisJCWNhc2UgJ0QnOgkvKiBUaGUgZGF0ZSBhcyAiJW0vJWQvJXkiLiAqLworCQkJX0xFR0FMX0FMVCgwKTsKKwkJCWlmICghKGJwID0gX3N0cnB0aW1lKGJwLCAiJW0vJWQvJXkiLCB0bSwgMCkpKQorCQkJCXJldHVybiAoTlVMTCk7CisJCQlicmVhazsKKwkKKwkJY2FzZSAnUic6CS8qIFRoZSB0aW1lIGFzICIlSDolTSIuICovCisJCQlfTEVHQUxfQUxUKDApOworCQkJaWYgKCEoYnAgPSBfc3RycHRpbWUoYnAsICIlSDolTSIsIHRtLCAwKSkpCisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCWJyZWFrOworCisJCWNhc2UgJ3InOgkvKiBUaGUgdGltZSBhcyAiJUk6JU06JVMgJXAiLiAqLworCQkJX0xFR0FMX0FMVCgwKTsKKwkJCWlmICghKGJwID0gX3N0cnB0aW1lKGJwLCAiJUk6JU06JVMgJXAiLCB0bSwgMCkpKQorCQkJCXJldHVybiAoTlVMTCk7CisJCQlicmVhazsKKworCQljYXNlICdUJzoJLyogVGhlIHRpbWUgYXMgIiVIOiVNOiVTIi4gKi8KKwkJCV9MRUdBTF9BTFQoMCk7CisJCQlpZiAoIShicCA9IF9zdHJwdGltZShicCwgIiVIOiVNOiVTIiwgdG0sIDApKSkKKwkJCQlyZXR1cm4gKE5VTEwpOworCQkJYnJlYWs7CisKKwkJY2FzZSAnWCc6CS8qIFRoZSB0aW1lLCB1c2luZyB0aGUgbG9jYWxlJ3MgZm9ybWF0LiAqLworCQkJX0xFR0FMX0FMVChfQUxUX0UpOworCQkJaWYgKCEoYnAgPSBfc3RycHRpbWUoYnAsIF9jdGxvYyh0X2ZtdCksIHRtLCAwKSkpCisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCWJyZWFrOworCisJCWNhc2UgJ3gnOgkvKiBUaGUgZGF0ZSwgdXNpbmcgdGhlIGxvY2FsZSdzIGZvcm1hdC4gKi8KKwkJCV9MRUdBTF9BTFQoX0FMVF9FKTsKKwkJCWlmICghKGJwID0gX3N0cnB0aW1lKGJwLCBfY3Rsb2MoZF9mbXQpLCB0bSwgMCkpKQorCQkJCXJldHVybiAoTlVMTCk7CisJCQlicmVhazsKKworCQkvKgorCQkgKiAiRWxlbWVudGFyeSIgY29udmVyc2lvbiBydWxlcy4KKwkJICovCisJCWNhc2UgJ0EnOgkvKiBUaGUgZGF5IG9mIHdlZWssIHVzaW5nIHRoZSBsb2NhbGUncyBmb3JtLiAqLworCQljYXNlICdhJzoKKwkJCV9MRUdBTF9BTFQoMCk7CisJCQlmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7CisJCQkJLyogRnVsbCBuYW1lLiAqLworCQkJCWxlbiA9IHN0cmxlbihfY3Rsb2MoZGF5W2ldKSk7CisJCQkJaWYgKHN0cm5jYXNlY21wKF9jdGxvYyhkYXlbaV0pLCBicCwgbGVuKSA9PSAwKQorCQkJCQlicmVhazsKKworCQkJCS8qIEFiYnJldmlhdGVkIG5hbWUuICovCisJCQkJbGVuID0gc3RybGVuKF9jdGxvYyhhYmRheVtpXSkpOworCQkJCWlmIChzdHJuY2FzZWNtcChfY3Rsb2MoYWJkYXlbaV0pLCBicCwgbGVuKSA9PSAwKQorCQkJCQlicmVhazsKKwkJCX0KKworCQkJLyogTm90aGluZyBtYXRjaGVkLiAqLworCQkJaWYgKGkgPT0gNykKKwkJCQlyZXR1cm4gKE5VTEwpOworCisJCQl0bS0+dG1fd2RheSA9IGk7CisJCQlicCArPSBsZW47CisJCQlicmVhazsKKworCQljYXNlICdCJzoJLyogVGhlIG1vbnRoLCB1c2luZyB0aGUgbG9jYWxlJ3MgZm9ybS4gKi8KKwkJY2FzZSAnYic6CisJCWNhc2UgJ2gnOgorCQkJX0xFR0FMX0FMVCgwKTsKKwkJCWZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKSB7CisJCQkJLyogRnVsbCBuYW1lLiAqLworCQkJCWxlbiA9IHN0cmxlbihfY3Rsb2MobW9uW2ldKSk7CisJCQkJaWYgKHN0cm5jYXNlY21wKF9jdGxvYyhtb25baV0pLCBicCwgbGVuKSA9PSAwKQorCQkJCQlicmVhazsKKworCQkJCS8qIEFiYnJldmlhdGVkIG5hbWUuICovCisJCQkJbGVuID0gc3RybGVuKF9jdGxvYyhhYm1vbltpXSkpOworCQkJCWlmIChzdHJuY2FzZWNtcChfY3Rsb2MoYWJtb25baV0pLCBicCwgbGVuKSA9PSAwKQorCQkJCQlicmVhazsKKwkJCX0KKworCQkJLyogTm90aGluZyBtYXRjaGVkLiAqLworCQkJaWYgKGkgPT0gMTIpCisJCQkJcmV0dXJuIChOVUxMKTsKKworCQkJdG0tPnRtX21vbiA9IGk7CisJCQlicCArPSBsZW47CisJCQlicmVhazsKKworCQljYXNlICdDJzoJLyogVGhlIGNlbnR1cnkgbnVtYmVyLiAqLworCQkJX0xFR0FMX0FMVChfQUxUX0UpOworCQkJaWYgKCEoX2NvbnZfbnVtKCZicCwgJmksIDAsIDk5KSkpCisJCQkJcmV0dXJuIChOVUxMKTsKKworCQkJY2VudHVyeSA9IGkgKiAxMDA7CisJCQlicmVhazsKKworCQljYXNlICdkJzoJLyogVGhlIGRheSBvZiBtb250aC4gKi8KKwkJY2FzZSAnZSc6CisJCQlfTEVHQUxfQUxUKF9BTFRfTyk7CisJCQlpZiAoIShfY29udl9udW0oJmJwLCAmdG0tPnRtX21kYXksIDEsIDMxKSkpCisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCWJyZWFrOworCisJCWNhc2UgJ2snOgkvKiBUaGUgaG91ciAoMjQtaG91ciBjbG9jayByZXByZXNlbnRhdGlvbikuICovCisJCQlfTEVHQUxfQUxUKDApOworCQkJLyogRkFMTFRIUk9VR0ggKi8KKwkJY2FzZSAnSCc6CisJCQlfTEVHQUxfQUxUKF9BTFRfTyk7CisJCQlpZiAoIShfY29udl9udW0oJmJwLCAmdG0tPnRtX2hvdXIsIDAsIDIzKSkpCisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCWJyZWFrOworCisJCWNhc2UgJ2wnOgkvKiBUaGUgaG91ciAoMTItaG91ciBjbG9jayByZXByZXNlbnRhdGlvbikuICovCisJCQlfTEVHQUxfQUxUKDApOworCQkJLyogRkFMTFRIUk9VR0ggKi8KKwkJY2FzZSAnSSc6CisJCQlfTEVHQUxfQUxUKF9BTFRfTyk7CisJCQlpZiAoIShfY29udl9udW0oJmJwLCAmdG0tPnRtX2hvdXIsIDEsIDEyKSkpCisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCWJyZWFrOworCisJCWNhc2UgJ2onOgkvKiBUaGUgZGF5IG9mIHllYXIuICovCisJCQlfTEVHQUxfQUxUKDApOworCQkJaWYgKCEoX2NvbnZfbnVtKCZicCwgJnRtLT50bV95ZGF5LCAxLCAzNjYpKSkKKwkJCQlyZXR1cm4gKE5VTEwpOworCQkJdG0tPnRtX3lkYXktLTsKKwkJCWJyZWFrOworCisJCWNhc2UgJ00nOgkvKiBUaGUgbWludXRlLiAqLworCQkJX0xFR0FMX0FMVChfQUxUX08pOworCQkJaWYgKCEoX2NvbnZfbnVtKCZicCwgJnRtLT50bV9taW4sIDAsIDU5KSkpCisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCWJyZWFrOworCisJCWNhc2UgJ20nOgkvKiBUaGUgbW9udGguICovCisJCQlfTEVHQUxfQUxUKF9BTFRfTyk7CisJCQlpZiAoIShfY29udl9udW0oJmJwLCAmdG0tPnRtX21vbiwgMSwgMTIpKSkKKwkJCQlyZXR1cm4gKE5VTEwpOworCQkJdG0tPnRtX21vbi0tOworCQkJYnJlYWs7CisKKwkJY2FzZSAncCc6CS8qIFRoZSBsb2NhbGUncyBlcXVpdmFsZW50IG9mIEFNL1BNLiAqLworCQkJX0xFR0FMX0FMVCgwKTsKKwkJCS8qIEFNPyAqLworCQkJbGVuID0gc3RybGVuKF9jdGxvYyhhbV9wbVswXSkpOworCQkJaWYgKHN0cm5jYXNlY21wKF9jdGxvYyhhbV9wbVswXSksIGJwLCBsZW4pID09IDApIHsKKwkJCQlpZiAodG0tPnRtX2hvdXIgPiAxMikJLyogaS5lLiwgMTM6MDAgQU0gPyEgKi8KKwkJCQkJcmV0dXJuIChOVUxMKTsKKwkJCQllbHNlIGlmICh0bS0+dG1faG91ciA9PSAxMikKKwkJCQkJdG0tPnRtX2hvdXIgPSAwOworCisJCQkJYnAgKz0gbGVuOworCQkJCWJyZWFrOworCQkJfQorCQkJLyogUE0/ICovCisJCQlsZW4gPSBzdHJsZW4oX2N0bG9jKGFtX3BtWzFdKSk7CisJCQlpZiAoc3RybmNhc2VjbXAoX2N0bG9jKGFtX3BtWzFdKSwgYnAsIGxlbikgPT0gMCkgeworCQkJCWlmICh0bS0+dG1faG91ciA+IDEyKQkvKiBpLmUuLCAxMzowMCBQTSA/ISAqLworCQkJCQlyZXR1cm4gKE5VTEwpOworCQkJCWVsc2UgaWYgKHRtLT50bV9ob3VyIDwgMTIpCisJCQkJCXRtLT50bV9ob3VyICs9IDEyOworCisJCQkJYnAgKz0gbGVuOworCQkJCWJyZWFrOworCQkJfQorCisJCQkvKiBOb3RoaW5nIG1hdGNoZWQuICovCisJCQlyZXR1cm4gKE5VTEwpOworCisJCWNhc2UgJ1MnOgkvKiBUaGUgc2Vjb25kcy4gKi8KKwkJCV9MRUdBTF9BTFQoX0FMVF9PKTsKKwkJCWlmICghKF9jb252X251bSgmYnAsICZ0bS0+dG1fc2VjLCAwLCA2MSkpKQorCQkJCXJldHVybiAoTlVMTCk7CisJCQlicmVhazsKKworCQljYXNlICdVJzoJLyogVGhlIHdlZWsgb2YgeWVhciwgYmVnaW5uaW5nIG9uIHN1bmRheS4gKi8KKwkJY2FzZSAnVyc6CS8qIFRoZSB3ZWVrIG9mIHllYXIsIGJlZ2lubmluZyBvbiBtb25kYXkuICovCisJCQlfTEVHQUxfQUxUKF9BTFRfTyk7CisJCQkvKgorCQkJICogWFhYIFRoaXMgaXMgYm9ndXMsIGFzIHdlIGNhbiBub3QgYXNzdW1lIGFueSB2YWxpZAorCQkJICogaW5mb3JtYXRpb24gcHJlc2VudCBpbiB0aGUgdG0gc3RydWN0dXJlIGF0IHRoaXMKKwkJCSAqIHBvaW50IHRvIGNhbGN1bGF0ZSBhIHJlYWwgdmFsdWUsIHNvIGp1c3QgY2hlY2sgdGhlCisJCQkgKiByYW5nZSBmb3Igbm93LgorCQkJICovCisJCQkgaWYgKCEoX2NvbnZfbnVtKCZicCwgJmksIDAsIDUzKSkpCisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCSBicmVhazsKKworCQljYXNlICd3JzoJLyogVGhlIGRheSBvZiB3ZWVrLCBiZWdpbm5pbmcgb24gc3VuZGF5LiAqLworCQkJX0xFR0FMX0FMVChfQUxUX08pOworCQkJaWYgKCEoX2NvbnZfbnVtKCZicCwgJnRtLT50bV93ZGF5LCAwLCA2KSkpCisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCWJyZWFrOworCisJCWNhc2UgJ1knOgkvKiBUaGUgeWVhci4gKi8KKwkJCV9MRUdBTF9BTFQoX0FMVF9FKTsKKwkJCWlmICghKF9jb252X251bSgmYnAsICZpLCAwLCA5OTk5KSkpCisJCQkJcmV0dXJuIChOVUxMKTsKKworCQkJcmVseWVhciA9IC0xOworCQkJdG0tPnRtX3llYXIgPSBpIC0gVE1fWUVBUl9CQVNFOworCQkJYnJlYWs7CisKKwkJY2FzZSAneSc6CS8qIFRoZSB5ZWFyIHdpdGhpbiB0aGUgY2VudHVyeSAoMiBkaWdpdHMpLiAqLworCQkJX0xFR0FMX0FMVChfQUxUX0UgfCBfQUxUX08pOworCQkJaWYgKCEoX2NvbnZfbnVtKCZicCwgJnJlbHllYXIsIDAsIDk5KSkpCisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCWJyZWFrOworCisJCS8qCisJCSAqIE1pc2NlbGxhbmVvdXMgY29udmVyc2lvbnMuCisJCSAqLworCQljYXNlICduJzoJLyogQW55IGtpbmQgb2Ygd2hpdGUtc3BhY2UuICovCisJCWNhc2UgJ3QnOgorCQkJX0xFR0FMX0FMVCgwKTsKKwkJCXdoaWxlIChpc3NwYWNlKCpicCkpCisJCQkJYnArKzsKKwkJCWJyZWFrOworCisKKwkJZGVmYXVsdDoJLyogVW5rbm93bi91bnN1cHBvcnRlZCBjb252ZXJzaW9uLiAqLworCQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCisKKwl9CisKKwkvKgorCSAqIFdlIG5lZWQgdG8gZXZhbHVhdGUgdGhlIHR3byBkaWdpdCB5ZWFyIHNwZWMgKCV5KQorCSAqIGxhc3QgYXMgd2UgY2FuIGdldCBhIGNlbnR1cnkgc3BlYyAoJUMpIGF0IGFueSB0aW1lLgorCSAqLworCWlmIChyZWx5ZWFyICE9IC0xKSB7CisJCWlmIChjZW50dXJ5ID09IFRNX1lFQVJfQkFTRSkgeworCQkJaWYgKHJlbHllYXIgPD0gNjgpCisJCQkJdG0tPnRtX3llYXIgPSByZWx5ZWFyICsgMjAwMCAtIFRNX1lFQVJfQkFTRTsKKwkJCWVsc2UKKwkJCQl0bS0+dG1feWVhciA9IHJlbHllYXIgKyAxOTAwIC0gVE1fWUVBUl9CQVNFOworCQl9IGVsc2UgeworCQkJdG0tPnRtX3llYXIgPSByZWx5ZWFyICsgY2VudHVyeSAtIFRNX1lFQVJfQkFTRTsKKwkJfQorCX0KKworCXJldHVybiAoKGNoYXIgKilicCk7Cit9CisKKworc3RhdGljIGludAorX2NvbnZfbnVtKGNvbnN0IHVuc2lnbmVkIGNoYXIgKipidWYsIGludCAqZGVzdCwgaW50IGxsaW0sIGludCB1bGltKQoreworCWludCByZXN1bHQgPSAwOworCWludCBydWxpbSA9IHVsaW07CisKKwlpZiAoKipidWYgPCAnMCcgfHwgKipidWYgPiAnOScpCisJCXJldHVybiAoMCk7CisKKwkvKiB3ZSB1c2UgcnVsaW0gdG8gYnJlYWsgb3V0IG9mIHRoZSBsb29wIHdoZW4gd2UgcnVuIG91dCBvZiBkaWdpdHMgKi8KKwlkbyB7CisJCXJlc3VsdCAqPSAxMDsKKwkJcmVzdWx0ICs9ICooKmJ1ZikrKyAtICcwJzsKKwkJcnVsaW0gLz0gMTA7CisJfSB3aGlsZSAoKHJlc3VsdCAqIDEwIDw9IHVsaW0pICYmIHJ1bGltICYmICoqYnVmID49ICcwJyAmJiAqKmJ1ZiA8PSAnOScpOworCisJaWYgKHJlc3VsdCA8IGxsaW0gfHwgcmVzdWx0ID4gdWxpbSkKKwkJcmV0dXJuICgwKTsKKworCSpkZXN0ID0gcmVzdWx0OworCXJldHVybiAoMSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3R6Y29kZS90emZpbGUuaCBiL2xpYmMvdHpjb2RlL3R6ZmlsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4MDY4MmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3R6Y29kZS90emZpbGUuaApAQCAtMCwwICsxLDE4MCBAQAorI2lmbmRlZiBUWkZJTEVfSAorCisjZGVmaW5lIFRaRklMRV9ICisKKy8qCisqKiBUaGlzIGZpbGUgaXMgaW4gdGhlIHB1YmxpYyBkb21haW4sIHNvIGNsYXJpZmllZCBhcyBvZgorKiogMTk5Ni0wNi0wNSBieSBBcnRodXIgRGF2aWQgT2xzb24uCisqLworCisvKgorKiogVGhpcyBoZWFkZXIgaXMgZm9yIHVzZSBPTkxZIHdpdGggdGhlIHRpbWUgY29udmVyc2lvbiBjb2RlLgorKiogVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgaXQgd2lsbCByZW1haW4gdW5jaGFuZ2VkLAorKiogb3IgdGhhdCBpdCB3aWxsIHJlbWFpbiBhdCBhbGwuCisqKiBEbyBOT1QgY29weSBpdCB0byBhbnkgc3lzdGVtIGluY2x1ZGUgZGlyZWN0b3J5LgorKiogVGhhbmsgeW91IQorKi8KKworLyoKKyoqIElECisqLworCisjaWZuZGVmIGxpbnQKKyNpZm5kZWYgTk9JRAorc3RhdGljIGNoYXIJdHpmaWxlaGlkW10gPSAiQCgjKXR6ZmlsZS5oCTguMSI7CisjZW5kaWYgLyogIWRlZmluZWQgTk9JRCAqLworI2VuZGlmIC8qICFkZWZpbmVkIGxpbnQgKi8KKworLyoKKyoqIEluZm9ybWF0aW9uIGFib3V0IHRpbWUgem9uZSBmaWxlcy4KKyovCisKKyNpZm5kZWYgVFpESVIKKyNkZWZpbmUgVFpESVIgIi9zeXN0ZW0vdXNyL3NoYXJlL3pvbmVpbmZvIiAvKiBUaW1lIHpvbmUgb2JqZWN0IGZpbGUgZGlyZWN0b3J5ICovCisjZW5kaWYgLyogIWRlZmluZWQgVFpESVIgKi8KKworI2lmbmRlZiBUWkRFRkFVTFQKKyNkZWZpbmUgVFpERUZBVUxUCSJsb2NhbHRpbWUiCisjZW5kaWYgLyogIWRlZmluZWQgVFpERUZBVUxUICovCisKKyNpZm5kZWYgVFpERUZSVUxFUworI2RlZmluZSBUWkRFRlJVTEVTCSJwb3NpeHJ1bGVzIgorI2VuZGlmIC8qICFkZWZpbmVkIFRaREVGUlVMRVMgKi8KKworLyoKKyoqIEVhY2ggZmlsZSBiZWdpbnMgd2l0aC4gLiAuCisqLworCisjZGVmaW5lCVRaX01BR0lDCSJUWmlmIgorCitzdHJ1Y3QgdHpoZWFkIHsKKwljaGFyCXR6aF9tYWdpY1s0XTsJCS8qIFRaX01BR0lDICovCisJY2hhcgl0emhfdmVyc2lvblsxXTsJCS8qICdcMCcgb3IgJzInIGFzIG9mIDIwMDUgKi8KKwljaGFyCXR6aF9yZXNlcnZlZFsxNV07CS8qIHJlc2VydmVkLS1tdXN0IGJlIHplcm8gKi8KKwljaGFyCXR6aF90dGlzZ210Y250WzRdOwkvKiBjb2RlZCBudW1iZXIgb2YgdHJhbnMuIHRpbWUgZmxhZ3MgKi8KKwljaGFyCXR6aF90dGlzc3RkY250WzRdOwkvKiBjb2RlZCBudW1iZXIgb2YgdHJhbnMuIHRpbWUgZmxhZ3MgKi8KKwljaGFyCXR6aF9sZWFwY250WzRdOwkJLyogY29kZWQgbnVtYmVyIG9mIGxlYXAgc2Vjb25kcyAqLworCWNoYXIJdHpoX3RpbWVjbnRbNF07CQkvKiBjb2RlZCBudW1iZXIgb2YgdHJhbnNpdGlvbiB0aW1lcyAqLworCWNoYXIJdHpoX3R5cGVjbnRbNF07CQkvKiBjb2RlZCBudW1iZXIgb2YgbG9jYWwgdGltZSB0eXBlcyAqLworCWNoYXIJdHpoX2NoYXJjbnRbNF07CQkvKiBjb2RlZCBudW1iZXIgb2YgYWJici4gY2hhcnMgKi8KK307CisKKy8qCisqKiAuIC4gLmZvbGxvd2VkIGJ5LiAuIC4KKyoqCisqKgl0emhfdGltZWNudCAoY2hhciBbNF0pcwkJY29kZWQgdHJhbnNpdGlvbiB0aW1lcyBhIGxhIHRpbWUoMikKKyoqCXR6aF90aW1lY250ICh1bnNpZ25lZCBjaGFyKXMJdHlwZXMgb2YgbG9jYWwgdGltZSBzdGFydGluZyBhdCBhYm92ZQorKioJdHpoX3R5cGVjbnQgcmVwZXRpdGlvbnMgb2YKKyoqCQlvbmUgKGNoYXIgWzRdKQkJY29kZWQgVVRDIG9mZnNldCBpbiBzZWNvbmRzCisqKgkJb25lICh1bnNpZ25lZCBjaGFyKQl1c2VkIHRvIHNldCB0bV9pc2RzdAorKioJCW9uZSAodW5zaWduZWQgY2hhcikJdGhhdCdzIGFuIGFiYnJldmlhdGlvbiBsaXN0IGluZGV4CisqKgl0emhfY2hhcmNudCAoY2hhcilzCQknXDAnLXRlcm1pbmF0ZWQgem9uZSBhYmJyZXZpYXRpb25zCisqKgl0emhfbGVhcGNudCByZXBldGl0aW9ucyBvZgorKioJCW9uZSAoY2hhciBbNF0pCQljb2RlZCBsZWFwIHNlY29uZCB0cmFuc2l0aW9uIHRpbWVzCisqKgkJb25lIChjaGFyIFs0XSkJCXRvdGFsIGNvcnJlY3Rpb24gYWZ0ZXIgYWJvdmUKKyoqCXR6aF90dGlzc3RkY250IChjaGFyKXMJCWluZGV4ZWQgYnkgdHlwZTsgaWYgVFJVRSwgdHJhbnNpdGlvbgorKioJCQkJCXRpbWUgaXMgc3RhbmRhcmQgdGltZSwgaWYgRkFMU0UsCisqKgkJCQkJdHJhbnNpdGlvbiB0aW1lIGlzIHdhbGwgY2xvY2sgdGltZQorKioJCQkJCWlmIGFic2VudCwgdHJhbnNpdGlvbiB0aW1lcyBhcmUKKyoqCQkJCQlhc3N1bWVkIHRvIGJlIHdhbGwgY2xvY2sgdGltZQorKioJdHpoX3R0aXNnbXRjbnQgKGNoYXIpcwkJaW5kZXhlZCBieSB0eXBlOyBpZiBUUlVFLCB0cmFuc2l0aW9uCisqKgkJCQkJdGltZSBpcyBVVEMsIGlmIEZBTFNFLAorKioJCQkJCXRyYW5zaXRpb24gdGltZSBpcyBsb2NhbCB0aW1lCisqKgkJCQkJaWYgYWJzZW50LCB0cmFuc2l0aW9uIHRpbWVzIGFyZQorKioJCQkJCWFzc3VtZWQgdG8gYmUgbG9jYWwgdGltZQorKi8KKworLyoKKyoqIElmIHR6aF92ZXJzaW9uIGlzICcyJyBvciBncmVhdGVyLCB0aGUgYWJvdmUgaXMgZm9sbG93ZWQgYnkgYSBzZWNvbmQgaW5zdGFuY2UKKyoqIG9mIHR6aGVhZCBhbmQgYSBzZWNvbmQgaW5zdGFuY2Ugb2YgdGhlIGRhdGEgaW4gd2hpY2ggZWFjaCBjb2RlZCB0cmFuc2l0aW9uCisqKiB0aW1lIHVzZXMgOCByYXRoZXIgdGhhbiA0IGNoYXJzLAorKiogdGhlbiBhIFBPU0lYLVRaLWVudmlyb25tZW50LXZhcmlhYmxlLXN0eWxlIHN0cmluZyBmb3IgdXNlIGluIGhhbmRsaW5nCisqKiBpbnN0YW50cyBhZnRlciB0aGUgbGFzdCB0cmFuc2l0aW9uIHRpbWUgc3RvcmVkIGluIHRoZSBmaWxlCisqKiAod2l0aCBub3RoaW5nIGJldHdlZW4gdGhlIG5ld2xpbmVzIGlmIHRoZXJlIGlzIG5vIFBPU0lYIHJlcHJlc2VudGF0aW9uIGZvcgorKiogc3VjaCBpbnN0YW50cykuCisqLworCisvKgorKiogSW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sICJ0enNldCgpIiByZWZ1c2VzIHRvIGRlYWwgd2l0aCBmaWxlcyB0aGF0CisqKiBleGNlZWQgYW55IG9mIHRoZSBsaW1pdHMgYmVsb3cuCisqLworCisjaWZuZGVmIFRaX01BWF9USU1FUworI2RlZmluZSBUWl9NQVhfVElNRVMJMTIwMAorI2VuZGlmIC8qICFkZWZpbmVkIFRaX01BWF9USU1FUyAqLworCisjaWZuZGVmIFRaX01BWF9UWVBFUworI2lmbmRlZiBOT1NPTEFSCisjZGVmaW5lIFRaX01BWF9UWVBFUwkyNTYgLyogTGltaXRlZCBieSB3aGF0ICh1bnNpZ25lZCBjaGFyKSdzIGNhbiBob2xkICovCisjZW5kaWYgLyogIWRlZmluZWQgTk9TT0xBUiAqLworI2lmZGVmIE5PU09MQVIKKy8qCisqKiBNdXN0IGJlIGF0IGxlYXN0IDE0IGZvciBFdXJvcGUvUmlnYSBhcyBvZiBKYW4gMTIgMTk5NSwKKyoqIGFzIG5vdGVkIGJ5IEVhcmwgQ2hldy4KKyovCisjZGVmaW5lIFRaX01BWF9UWVBFUwkyMAkvKiBNYXhpbXVtIG51bWJlciBvZiBsb2NhbCB0aW1lIHR5cGVzICovCisjZW5kaWYgLyogIWRlZmluZWQgTk9TT0xBUiAqLworI2VuZGlmIC8qICFkZWZpbmVkIFRaX01BWF9UWVBFUyAqLworCisjaWZuZGVmIFRaX01BWF9DSEFSUworI2RlZmluZSBUWl9NQVhfQ0hBUlMJNTAJLyogTWF4aW11bSBudW1iZXIgb2YgYWJicmV2aWF0aW9uIGNoYXJhY3RlcnMgKi8KKwkJCQkvKiAobGltaXRlZCBieSB3aGF0IHVuc2lnbmVkIGNoYXJzIGNhbiBob2xkKSAqLworI2VuZGlmIC8qICFkZWZpbmVkIFRaX01BWF9DSEFSUyAqLworCisjaWZuZGVmIFRaX01BWF9MRUFQUworI2RlZmluZSBUWl9NQVhfTEVBUFMJNTAJLyogTWF4aW11bSBudW1iZXIgb2YgbGVhcCBzZWNvbmQgY29ycmVjdGlvbnMgKi8KKyNlbmRpZiAvKiAhZGVmaW5lZCBUWl9NQVhfTEVBUFMgKi8KKworI2RlZmluZSBTRUNTUEVSTUlOCTYwCisjZGVmaW5lIE1JTlNQRVJIT1VSCTYwCisjZGVmaW5lIEhPVVJTUEVSREFZCTI0CisjZGVmaW5lIERBWVNQRVJXRUVLCTcKKyNkZWZpbmUgREFZU1BFUk5ZRUFSCTM2NQorI2RlZmluZSBEQVlTUEVSTFlFQVIJMzY2CisjZGVmaW5lIFNFQ1NQRVJIT1VSCShTRUNTUEVSTUlOICogTUlOU1BFUkhPVVIpCisjZGVmaW5lIFNFQ1NQRVJEQVkJKChsb25nKSBTRUNTUEVSSE9VUiAqIEhPVVJTUEVSREFZKQorI2RlZmluZSBNT05TUEVSWUVBUgkxMgorCisjZGVmaW5lIFRNX1NVTkRBWQkwCisjZGVmaW5lIFRNX01PTkRBWQkxCisjZGVmaW5lIFRNX1RVRVNEQVkJMgorI2RlZmluZSBUTV9XRURORVNEQVkJMworI2RlZmluZSBUTV9USFVSU0RBWQk0CisjZGVmaW5lIFRNX0ZSSURBWQk1CisjZGVmaW5lIFRNX1NBVFVSREFZCTYKKworI2RlZmluZSBUTV9KQU5VQVJZCTAKKyNkZWZpbmUgVE1fRkVCUlVBUlkJMQorI2RlZmluZSBUTV9NQVJDSAkyCisjZGVmaW5lIFRNX0FQUklMCTMKKyNkZWZpbmUgVE1fTUFZCQk0CisjZGVmaW5lIFRNX0pVTkUJCTUKKyNkZWZpbmUgVE1fSlVMWQkJNgorI2RlZmluZSBUTV9BVUdVU1QJNworI2RlZmluZSBUTV9TRVBURU1CRVIJOAorI2RlZmluZSBUTV9PQ1RPQkVSCTkKKyNkZWZpbmUgVE1fTk9WRU1CRVIJMTAKKyNkZWZpbmUgVE1fREVDRU1CRVIJMTEKKworI2RlZmluZSBUTV9ZRUFSX0JBU0UJMTkwMAorCisjZGVmaW5lIEVQT0NIX1lFQVIJMTk3MAorI2RlZmluZSBFUE9DSF9XREFZCVRNX1RIVVJTREFZCisKKyNkZWZpbmUgaXNsZWFwKHkpICgoKHkpICUgNCkgPT0gMCAmJiAoKCh5KSAlIDEwMCkgIT0gMCB8fCAoKHkpICUgNDAwKSA9PSAwKSkKKworLyoKKyoqIFNpbmNlIGV2ZXJ5dGhpbmcgaW4gaXNsZWFwIGlzIG1vZHVsbyA0MDAgKG9yIGEgZmFjdG9yIG9mIDQwMCksIHdlIGtub3cgdGhhdAorKioJaXNsZWFwKHkpID09IGlzbGVhcCh5ICUgNDAwKQorKiogYW5kIHNvCisqKglpc2xlYXAoYSArIGIpID09IGlzbGVhcCgoYSArIGIpICUgNDAwKQorKiogb3IKKyoqCWlzbGVhcChhICsgYikgPT0gaXNsZWFwKGEgJSA0MDAgKyBiICUgNDAwKQorKiogVGhpcyBpcyB0cnVlIGV2ZW4gaWYgJSBtZWFucyBtb2R1bG8gcmF0aGVyIHRoYW4gRm9ydHJhbiByZW1haW5kZXIKKyoqICh3aGljaCBpcyBhbGxvd2VkIGJ5IEM4OSBidXQgbm90IEM5OSkuCisqKiBXZSB1c2UgdGhpcyB0byBhdm9pZCBhZGRpdGlvbiBvdmVyZmxvdyBwcm9ibGVtcy4KKyovCisKKyNkZWZpbmUgaXNsZWFwX3N1bShhLCBiKQlpc2xlYXAoKGEpICUgNDAwICsgKGIpICUgNDAwKQorCisjZW5kaWYgLyogIWRlZmluZWQgVFpGSUxFX0ggKi8KZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL2Fib3J0LmMgYi9saWJjL3VuaXN0ZC9hYm9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0ZTQwZTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3VuaXN0ZC9hYm9ydC5jCkBAIC0wLDAgKzEsMTAxIEBACisvKgkkT3BlbkJTRDogYWJvcnQuYyx2IDEuMTQgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLworLyoKKyAqIENvcHlyaWdodCAoYykgMTk4NSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSAidGhyZWFkX3ByaXZhdGUuaCIKKyNpbmNsdWRlICJhdGV4aXQuaCIKKworLyogdGVtcG9yYXJ5LCBmb3IgYnVnIGh1bnRpbmcgKi8KKyNpbmNsdWRlICJsb2dkLmgiCisjZGVmaW5lIGRlYnVnX2xvZyhmb3JtYXQsIC4uLikgIFwKKyAgICBfX2xpYmNfYW5kcm9pZF9sb2dfcHJpbnQoQU5EUk9JRF9MT0dfREVCVUcsICJsaWJjLWFib3J0IiwgKGZvcm1hdCksICMjX19WQV9BUkdTX18gKQorCit2b2lkCithYm9ydCh2b2lkKQoreworCXN0cnVjdCBhdGV4aXQgKnAgPSBfX2F0ZXhpdDsKKwlzdGF0aWMgaW50IGNsZWFudXBfY2FsbGVkID0gMDsKKwlzaWdzZXRfdCBtYXNrOworCisgIAorCXNpZ2ZpbGxzZXQoJm1hc2spOworCS8qCisJICogZG9uJ3QgYmxvY2sgU0lHQUJSVCB0byBnaXZlIGFueSBoYW5kbGVyIGEgY2hhbmNlOyB3ZSBpZ25vcmUKKwkgKiBhbnkgZXJyb3JzIC0tIFgzMTFKIGRvZXNuJ3QgYWxsb3cgYWJvcnQgdG8gcmV0dXJuIGFueXdheS4KKwkgKi8KKwlzaWdkZWxzZXQoJm1hc2ssIFNJR0FCUlQpOworICAgIC8qIHRlbXBvcmFyeSwgc28gZGVsaWJlcmF0ZSBzZWcgZmF1bHQgY2FuIGJlIGNhdWdodCBieSBkZWJ1Z2dlcmQgKi8KKwlzaWdkZWxzZXQoJm1hc2ssIFNJR1NFR1YpOworICAgIC8qIC0tICovCisJKHZvaWQpc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZtYXNrLCAoc2lnc2V0X3QgKilOVUxMKTsKKworCS8qCisJICogUE9TSVggcmVxdWlyZXMgd2UgZmx1c2ggc3RkaW8gYnVmZmVycyBvbiBhYm9ydAorCSAqLworCWlmIChjbGVhbnVwX2NhbGxlZCA9PSAwKSB7CisJCXdoaWxlIChwICE9IE5VTEwgJiYgcC0+bmV4dCAhPSBOVUxMKQorCQkJcCA9IHAtPm5leHQ7CisJCS8qIHRoZSBjaGVjayBmb3IgZm5fZHNvID09IE5VTEwgaXMgbW9zdGx5IHBhcmFub2lhICovCisJCWlmIChwICE9IE5VTEwgJiYgcC0+Zm5zWzBdLmZuX2RzbyA9PSBOVUxMICYmCisJCSAgICBwLT5mbnNbMF0uZm5fcHRyLnN0ZF9mdW5jICE9IE5VTEwpIHsKKwkJCWNsZWFudXBfY2FsbGVkID0gMTsKKwkJCSgqcC0+Zm5zWzBdLmZuX3B0ci5zdGRfZnVuYykoKTsKKwkJfQorCX0KKworICAgIC8qIHRlbXBvcmFyeSwgZm9yIGJ1ZyBodW50aW5nICovCisgICAgZGVidWdfbG9nKCJhYm9ydCgpIGNhbGxlZCBpbiBwaWQgJWRcbiIsIGdldHBpZCgpKTsKKyAgICAvKiBzZWcgZmF1bHQgc2VlbXMgdG8gcHJvZHVjZSBiZXR0ZXIgZGVidWdnZXJkIHJlc3VsdHMgdGhhbiBTSUdBQlJUICovCisgICAgKigoY2hhciopMHhkZWFkYmFhZCkgPSAzOTsKKyAgICBkZWJ1Z19sb2coInNvbWVob3cgd2UncmUgbm90IGRlYWQ/XG4iKTsKKyAgICAvKiAtLSAqLworCisJKHZvaWQpa2lsbChnZXRwaWQoKSwgU0lHQUJSVCk7CisKKwkvKgorCSAqIGlmIFNJR0FCUlQgaWdub3JlZCwgb3IgY2F1Z2h0IGFuZCB0aGUgaGFuZGxlciByZXR1cm5zLCBkbworCSAqIGl0IGFnYWluLCBvbmx5IGhhcmRlci4KKwkgKi8KKyAgICAgICAgeworICAgICAgICAgICAgc3RydWN0IHNpZ2FjdGlvbiBzYTsKKworICAgICAgICAgICAgc2Euc2FfaGFuZGxlciA9IFNJR19ERkw7CisgICAgICAgICAgICBzYS5zYV9mbGFncyAgID0gU0FfUkVTVEFSVDsKKyAgICAgICAgICAgIHNpZ2VtcHR5c2V0KCZzYS5zYV9tYXNrKTsKKworICAgICAgICAgICAgKHZvaWQpc2lnYWN0aW9uKCBTSUdBQlJULCAmc2EsICZzYSApOworICAgICAgICB9CisKKwkodm9pZClzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJm1hc2ssIChzaWdzZXRfdCAqKU5VTEwpOworCSh2b2lkKWtpbGwoZ2V0cGlkKCksIFNJR0FCUlQpOworCV9leGl0KDEpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvYWxhcm0uYyBiL2xpYmMvdW5pc3RkL2FsYXJtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE4NjNhNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdW5pc3RkL2FsYXJtLmMKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMTk4MywgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKK3N0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylhbGFybS5jCTguMSAoQmVya2VsZXkpIDYvNC85MyI7CisjZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorLy9fX0ZCU0RJRCgiJEZyZWVCU0Q6IC9yZXBvbWFuL3IvbmN2cy9zcmMvbGliL2xpYmMvZ2VuL2FsYXJtLmMsdiAxLjMgMjAwNy8wMS8wOSAwMDoyNzo1MyBpbXAgRXhwICQiKTsKKworLyoKKyAqIEJhY2t3YXJkcyBjb21wYXRpYmxlIGFsYXJtLgorICovCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKwordW5zaWduZWQgaW50CithbGFybShzZWNzKQorCXVuc2lnbmVkIGludCBzZWNzOworeworCXN0cnVjdCBpdGltZXJ2YWwgaXQsIG9pdHY7CisJc3RydWN0IGl0aW1lcnZhbCAqaXRwID0gJml0OworCisgICAgaXRwLT5pdF9pbnRlcnZhbC50dl91c2VjID0gMDsKKyAgICBpdHAtPml0X2ludGVydmFsLnR2X3NlYyA9IDA7CisJaXRwLT5pdF92YWx1ZS50dl9zZWMgPSBzZWNzOworCWl0cC0+aXRfdmFsdWUudHZfdXNlYyA9IDA7CisJaWYgKHNldGl0aW1lcihJVElNRVJfUkVBTCwgaXRwLCAmb2l0dikgPCAwKQorCQlyZXR1cm4gKC0xKTsKKwlpZiAob2l0di5pdF92YWx1ZS50dl91c2VjKQorCQlvaXR2Lml0X3ZhbHVlLnR2X3NlYysrOworCXJldHVybiAob2l0di5pdF92YWx1ZS50dl9zZWMpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvYnJrLmMgYi9saWJjL3VuaXN0ZC9icmsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjJmMTA4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91bmlzdGQvYnJrLmMKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisvKiBzaGFyZWQgd2l0aCBzYnJrLmMgKi8KK2NoYXIgKl9fYmlvbmljX2JyazsKKworaW50IGJyayh2b2lkKiAgZW5kX2RhdGEpCit7CisgICAgY2hhciogIG5ld19icmsgPSBfX2JyayggZW5kX2RhdGEgKTsKKworICAgIGlmIChuZXdfYnJrICE9IGVuZF9kYXRhKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBfX2Jpb25pY19icmsgPSBuZXdfYnJrOworICAKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9jcmVhdC5jIGIvbGliYy91bmlzdGQvY3JlYXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjE0NDY1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91bmlzdGQvY3JlYXQuYwpAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKworaW50IGNyZWF0KGNvbnN0IGNoYXIqICBwYXRobmFtZSwgbW9kZV90ICBtb2RlKQoreworICAgIHJldHVybiBvcGVuKHBhdGhuYW1lLCBPX1dST05MWXxPX1RSVU5DfE9fQ1JFQVQsIG1vZGUpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvZGFlbW9uLmMgYi9saWJjL3VuaXN0ZC9kYWVtb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTgxZDE2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91bmlzdGQvZGFlbW9uLmMKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisKK2ludCAgZGFlbW9uKCBpbnQgIG5vY2hkaXIsIGludCAgbm9jbG9zZSApCit7CisgICBwaWRfdCAgcGlkOworCisgICBpZiAoICFub2NoZGlyICYmIGNoZGlyKCIvIikgIT0gMCApCisgICAgICAgcmV0dXJuIC0xOworICAgCisgICBpZiAoICFub2Nsb3NlICkKKyAgIHsKKyAgICAgaW50ICBmZCA9IG9wZW4oIi9kZXYvbnVsbCIsIE9fUkRXUik7CisKKyAgICAgaWYgKCBmZCA8IDAgKQorICAgICAgcmV0dXJuIC0xOworCisgICAgIGlmICggZHVwMiggZmQsIDAgKSA8IDAgfHwKKwkgIGR1cDIoIGZkLCAxICkgPCAwIHx8CisgICAgICAgICAgZHVwMiggZmQsIDIgKSA8IDAgKSAKKyAgICAgeworICAgICAgIGNsb3NlKGZkKTsKKyAgICAgIHJldHVybiAtMTsKKyAgICAgfQorICAgICBjbG9zZShmZCk7CisgIH0KKyAgCisgICBwaWQgPSBmb3JrKCk7CisgICBpZiAocGlkIDwgMCkKKyAgICByZXR1cm4gLTE7CisKKyAgIGlmIChwaWQgPiAwKQorICAgIF9leGl0KDApOworCisgICBpZiAoIHNldHNpZCgpIDwgMCApCisgICAgIHJldHVybiAtMTsKKworICAgcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL2V4ZWMuYyBiL2xpYmMvdW5pc3RkL2V4ZWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmI5OGIzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91bmlzdGQvZXhlYy5jCkBAIC0wLDAgKzEsMjQ0IEBACisvKgkkT3BlbkJTRDogZXhlYy5jLHYgMS4xOCAyMDA1LzA4LzA4IDA4OjA1OjM0IGVzcGllIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MSwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvdWlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHBhdGhzLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8YWxsb2NhLmg+CisKK2V4dGVybiBjaGFyICoqZW52aXJvbjsKKworaW50CitleGVjbChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICphcmcsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCWNoYXIgKiphcmd2OworCWludCBuOworCisJdmFfc3RhcnQoYXAsIGFyZyk7CisJbiA9IDE7CisJd2hpbGUgKHZhX2FyZyhhcCwgY2hhciAqKSAhPSBOVUxMKQorCQluKys7CisJdmFfZW5kKGFwKTsKKwlhcmd2ID0gYWxsb2NhKChuICsgMSkgKiBzaXplb2YoKmFyZ3YpKTsKKwlpZiAoYXJndiA9PSBOVUxMKSB7CisJCWVycm5vID0gRU5PTUVNOworCQlyZXR1cm4gKC0xKTsKKwl9CisJdmFfc3RhcnQoYXAsIGFyZyk7CisJbiA9IDE7CisJYXJndlswXSA9IChjaGFyICopYXJnOworCXdoaWxlICgoYXJndltuXSA9IHZhX2FyZyhhcCwgY2hhciAqKSkgIT0gTlVMTCkKKwkJbisrOworCXZhX2VuZChhcCk7CisJcmV0dXJuIChleGVjdmUobmFtZSwgYXJndiwgZW52aXJvbikpOworfQorCitpbnQKK2V4ZWNsZShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICphcmcsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCWNoYXIgKiphcmd2LCAqKmVudnA7CisJaW50IG47CisKKwl2YV9zdGFydChhcCwgYXJnKTsKKwluID0gMTsKKwl3aGlsZSAodmFfYXJnKGFwLCBjaGFyICopICE9IE5VTEwpCisJCW4rKzsKKwl2YV9lbmQoYXApOworCWFyZ3YgPSBhbGxvY2EoKG4gKyAxKSAqIHNpemVvZigqYXJndikpOworCWlmIChhcmd2ID09IE5VTEwpIHsKKwkJZXJybm8gPSBFTk9NRU07CisJCXJldHVybiAoLTEpOworCX0KKwl2YV9zdGFydChhcCwgYXJnKTsKKwluID0gMTsKKwlhcmd2WzBdID0gKGNoYXIgKilhcmc7CisJd2hpbGUgKChhcmd2W25dID0gdmFfYXJnKGFwLCBjaGFyICopKSAhPSBOVUxMKQorCQluKys7CisJZW52cCA9IHZhX2FyZyhhcCwgY2hhciAqKik7CisJdmFfZW5kKGFwKTsKKwlyZXR1cm4gKGV4ZWN2ZShuYW1lLCBhcmd2LCBlbnZwKSk7Cit9CisKK2ludAorZXhlY2xwKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmFyZywgLi4uKQoreworCXZhX2xpc3QgYXA7CisJY2hhciAqKmFyZ3Y7CisJaW50IG47CisKKwl2YV9zdGFydChhcCwgYXJnKTsKKwluID0gMTsKKwl3aGlsZSAodmFfYXJnKGFwLCBjaGFyICopICE9IE5VTEwpCisJCW4rKzsKKwl2YV9lbmQoYXApOworCWFyZ3YgPSBhbGxvY2EoKG4gKyAxKSAqIHNpemVvZigqYXJndikpOworCWlmIChhcmd2ID09IE5VTEwpIHsKKwkJZXJybm8gPSBFTk9NRU07CisJCXJldHVybiAoLTEpOworCX0KKwl2YV9zdGFydChhcCwgYXJnKTsKKwluID0gMTsKKwlhcmd2WzBdID0gKGNoYXIgKilhcmc7CisJd2hpbGUgKChhcmd2W25dID0gdmFfYXJnKGFwLCBjaGFyICopKSAhPSBOVUxMKQorCQluKys7CisJdmFfZW5kKGFwKTsKKwlyZXR1cm4gKGV4ZWN2cChuYW1lLCBhcmd2KSk7Cit9CisKK2ludAorZXhlY3YoY29uc3QgY2hhciAqbmFtZSwgY2hhciAqIGNvbnN0ICphcmd2KQoreworCSh2b2lkKWV4ZWN2ZShuYW1lLCBhcmd2LCBlbnZpcm9uKTsKKwlyZXR1cm4gKC0xKTsKK30KKworaW50CitleGVjdnAoY29uc3QgY2hhciAqbmFtZSwgY2hhciAqIGNvbnN0ICphcmd2KQoreworCWNoYXIgKiptZW1wOworCWludCBjbnQsIGxwLCBsbiwgbGVuOworCWNoYXIgKnA7CisJaW50IGVhY2NlcyA9IDA7CisJY2hhciAqYnAsICpjdXIsICpwYXRoLCBidWZbTUFYUEFUSExFTl07CisKKwkvKgorCSAqIERvIG5vdCBhbGxvdyBudWxsIG5hbWUKKwkgKi8KKwlpZiAobmFtZSA9PSBOVUxMIHx8ICpuYW1lID09ICdcMCcpIHsKKwkJZXJybm8gPSBFTk9FTlQ7CisJCXJldHVybiAoLTEpOworIAl9CisKKwkvKiBJZiBpdCdzIGFuIGFic29sdXRlIG9yIHJlbGF0aXZlIHBhdGggbmFtZSwgaXQncyBlYXN5LiAqLworCWlmIChzdHJjaHIobmFtZSwgJy8nKSkgeworCQlicCA9IChjaGFyICopbmFtZTsKKwkJY3VyID0gcGF0aCA9IE5VTEw7CisJCWdvdG8gcmV0cnk7CisJfQorCWJwID0gYnVmOworCisJLyogR2V0IHRoZSBwYXRoIHdlJ3JlIHNlYXJjaGluZy4gKi8KKwlpZiAoIShwYXRoID0gZ2V0ZW52KCJQQVRIIikpKQorCQlwYXRoID0gX1BBVEhfREVGUEFUSDsKKwlsZW4gPSBzdHJsZW4ocGF0aCkgKyAxOworCWN1ciA9IGFsbG9jYShsZW4pOworCWlmIChjdXIgPT0gTlVMTCkgeworCQllcnJubyA9IEVOT01FTTsKKwkJcmV0dXJuICgtMSk7CisJfQorCXN0cmxjcHkoY3VyLCBwYXRoLCBsZW4pOworCXBhdGggPSBjdXI7CisJd2hpbGUgKChwID0gc3Ryc2VwKCZjdXIsICI6IikpKSB7CisJCS8qCisJCSAqIEl0J3MgYSBTSEVMTCBwYXRoIC0tIGRvdWJsZSwgbGVhZGluZyBhbmQgdHJhaWxpbmcgY29sb25zCisJCSAqIG1lYW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorCQkgKi8KKwkJaWYgKCEqcCkgeworCQkJcCA9ICIuIjsKKwkJCWxwID0gMTsKKwkJfSBlbHNlCisJCQlscCA9IHN0cmxlbihwKTsKKwkJbG4gPSBzdHJsZW4obmFtZSk7CisKKwkJLyoKKwkJICogSWYgdGhlIHBhdGggaXMgdG9vIGxvbmcgY29tcGxhaW4uICBUaGlzIGlzIGEgcG9zc2libGUKKwkJICogc2VjdXJpdHkgaXNzdWU7IGdpdmVuIGEgd2F5IHRvIG1ha2UgdGhlIHBhdGggdG9vIGxvbmcKKwkJICogdGhlIHVzZXIgbWF5IGV4ZWN1dGUgdGhlIHdyb25nIHByb2dyYW0uCisJCSAqLworCQlpZiAobHAgKyBsbiArIDIgPiAoaW50KXNpemVvZihidWYpKSB7CisJCQlzdHJ1Y3QgaW92ZWMgaW92WzNdOworCisJCQlpb3ZbMF0uaW92X2Jhc2UgPSAiZXhlY3ZwOiAiOworCQkJaW92WzBdLmlvdl9sZW4gPSA4OworCQkJaW92WzFdLmlvdl9iYXNlID0gcDsKKwkJCWlvdlsxXS5pb3ZfbGVuID0gbHA7CisJCQlpb3ZbMl0uaW92X2Jhc2UgPSAiOiBwYXRoIHRvbyBsb25nXG4iOworCQkJaW92WzJdLmlvdl9sZW4gPSAxNjsKKwkJCSh2b2lkKXdyaXRldihTVERFUlJfRklMRU5PLCBpb3YsIDMpOworCQkJY29udGludWU7CisJCX0KKwkJYmNvcHkocCwgYnVmLCBscCk7CisJCWJ1ZltscF0gPSAnLyc7CisJCWJjb3B5KG5hbWUsIGJ1ZiArIGxwICsgMSwgbG4pOworCQlidWZbbHAgKyBsbiArIDFdID0gJ1wwJzsKKworcmV0cnk6CQkodm9pZClleGVjdmUoYnAsIGFyZ3YsIGVudmlyb24pOworCQlzd2l0Y2goZXJybm8pIHsKKwkJY2FzZSBFMkJJRzoKKwkJCWdvdG8gZG9uZTsKKwkJY2FzZSBFSVNESVI6CisJCWNhc2UgRUxPT1A6CisJCWNhc2UgRU5BTUVUT09MT05HOgorCQljYXNlIEVOT0VOVDoKKwkJCWJyZWFrOworCQljYXNlIEVOT0VYRUM6CisJCQlmb3IgKGNudCA9IDA7IGFyZ3ZbY250XTsgKytjbnQpCisJCQkJOworCQkJbWVtcCA9IGFsbG9jYSgoY250ICsgMikgKiBzaXplb2YoY2hhciAqKSk7CisJCQlpZiAobWVtcCA9PSBOVUxMKQorCQkJCWdvdG8gZG9uZTsKKwkJCW1lbXBbMF0gPSAic2giOworCQkJbWVtcFsxXSA9IGJwOworCQkJYmNvcHkoYXJndiArIDEsIG1lbXAgKyAyLCBjbnQgKiBzaXplb2YoY2hhciAqKSk7CisJCQkodm9pZClleGVjdmUoX1BBVEhfQlNIRUxMLCBtZW1wLCBlbnZpcm9uKTsKKwkJCWdvdG8gZG9uZTsKKwkJY2FzZSBFTk9NRU06CisJCQlnb3RvIGRvbmU7CisJCWNhc2UgRU5PVERJUjoKKwkJCWJyZWFrOworCQljYXNlIEVUWFRCU1k6CisJCQkvKgorCQkJICogV2UgdXNlZCB0byByZXRyeSBoZXJlLCBidXQgc2goMSkgZG9lc24ndC4KKwkJCSAqLworCQkJZ290byBkb25lOworCQljYXNlIEVBQ0NFUzoKKwkJCWVhY2NlcyA9IDE7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWdvdG8gZG9uZTsKKwkJfQorCX0KKwlpZiAoZWFjY2VzKQorCQllcnJubyA9IEVBQ0NFUzsKKwllbHNlIGlmICghZXJybm8pCisJCWVycm5vID0gRU5PRU5UOworZG9uZToKKwlyZXR1cm4gKC0xKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL2ZjbnRsLmMgYi9saWJjL3VuaXN0ZC9mY250bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0OWRiMGEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3VuaXN0ZC9mY250bC5jCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCitleHRlcm4gaW50IF9fZmNudGw2NChpbnQsIGludCwgdm9pZCAqKTsKKworaW50IGZjbnRsKGludCBmZCwgaW50IGNtZCwgLi4uKQoreworICAgIHZhX2xpc3QgYXA7CisgICAgdm9pZCAqIGFyZzsKKworICAgIHZhX3N0YXJ0KGFwLCBjbWQpOworICAgIGFyZyA9IHZhX2FyZyhhcCwgdm9pZCAqKTsKKyAgICB2YV9lbmQoYXApOworCisgICAgcmV0dXJuIF9fZmNudGw2NChmZCwgY21kLCBhcmcpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvZm5tYXRjaC5jIGIvbGliYy91bmlzdGQvZm5tYXRjaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkMzFjOWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3VuaXN0ZC9mbm1hdGNoLmMKQEAgLTAsMCArMSwyMDUgQEAKKy8qICAgICAgJE9wZW5CU0Q6IGZubWF0Y2guYyx2IDEuMTMgMjAwNi8wMy8zMSAwNTozNDoxNCBkZXJhYWR0IEV4cCAkICAgICAgICAqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTg5LCAxOTkzLCAxOTk0CisgKiAgICAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIEd1aWRvIHZhbiBSb3NzdW0uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgKiBGdW5jdGlvbiBmbm1hdGNoKCkgYXMgc3BlY2lmaWVkIGluIFBPU0lYIDEwMDMuMi0xOTkyLCBzZWN0aW9uIEIuNi4KKyAqIENvbXBhcmVzIGEgZmlsZW5hbWUgb3IgcGF0aG5hbWUgdG8gYSBwYXR0ZXJuLgorICovCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8Zm5tYXRjaC5oPgorCisjZGVmaW5lIEVPUyAgICAgICAgJ1wwJworCisjZGVmaW5lIFJBTkdFX01BVENIICAgICAgICAxCisjZGVmaW5lIFJBTkdFX05PTUFUQ0ggICAgICAgIDAKKyNkZWZpbmUgUkFOR0VfRVJST1IgICAgICAgICgtMSkKKworc3RhdGljIGludCByYW5nZW1hdGNoKGNvbnN0IGNoYXIgKiwgY2hhciwgaW50LCBjaGFyICoqKTsKKworaW50Citmbm1hdGNoKGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNvbnN0IGNoYXIgKnN0cmluZywgaW50IGZsYWdzKQoreworICAgICAgICBjb25zdCBjaGFyICpzdHJpbmdzdGFydDsKKyAgICAgICAgY2hhciAqbmV3cDsKKyAgICAgICAgY2hhciBjLCB0ZXN0OworCisgICAgICAgIGZvciAoc3RyaW5nc3RhcnQgPSBzdHJpbmc7OykKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGMgPSAqcGF0dGVybisrKSB7CisgICAgICAgICAgICAgICAgY2FzZSBFT1M6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGZsYWdzICYgRk5NX0xFQURJTkdfRElSKSAmJiAqc3RyaW5nID09ICcvJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoKnN0cmluZyA9PSBFT1MgPyAwIDogRk5NX05PTUFUQ0gpOworICAgICAgICAgICAgICAgIGNhc2UgJz8nOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCpzdHJpbmcgPT0gRU9TKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKEZOTV9OT01BVENIKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgqc3RyaW5nID09ICcvJyAmJiAoZmxhZ3MgJiBGTk1fUEFUSE5BTUUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKEZOTV9OT01BVENIKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgqc3RyaW5nID09ICcuJyAmJiAoZmxhZ3MgJiBGTk1fUEVSSU9EKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmcgPT0gc3RyaW5nc3RhcnQgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGZsYWdzICYgRk5NX1BBVEhOQU1FKSAmJiAqKHN0cmluZyAtIDEpID09ICcvJykpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKEZOTV9OT01BVENIKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICsrc3RyaW5nOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAnKic6CisgICAgICAgICAgICAgICAgICAgICAgICBjID0gKnBhdHRlcm47CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb2xsYXBzZSBtdWx0aXBsZSBzdGFycy4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChjID09ICcqJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9ICorK3BhdHRlcm47CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgqc3RyaW5nID09ICcuJyAmJiAoZmxhZ3MgJiBGTk1fUEVSSU9EKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmcgPT0gc3RyaW5nc3RhcnQgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGZsYWdzICYgRk5NX1BBVEhOQU1FKSAmJiAqKHN0cmluZyAtIDEpID09ICcvJykpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKEZOTV9OT01BVENIKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLyogT3B0aW1pemUgZm9yIHBhdHRlcm4gd2l0aCAqIGF0IGVuZCBvciBiZWZvcmUgLy4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID09IEVPUykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmxhZ3MgJiBGTk1fUEFUSE5BTUUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgoZmxhZ3MgJiBGTk1fTEVBRElOR19ESVIpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNocihzdHJpbmcsICcvJykgPT0gTlVMTCA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOiBGTk1fTk9NQVRDSCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDApOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjID09ICcvJyAmJiAoZmxhZ3MgJiBGTk1fUEFUSE5BTUUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoc3RyaW5nID0gc3RyY2hyKHN0cmluZywgJy8nKSkgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKEZOTV9OT01BVENIKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdlbmVyYWwgY2FzZSwgdXNlIHJlY3Vyc2lvbi4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgodGVzdCA9ICpzdHJpbmcpICE9IEVPUykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZubWF0Y2gocGF0dGVybiwgc3RyaW5nLCBmbGFncyAmIH5GTk1fUEVSSU9EKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGVzdCA9PSAnLycgJiYgKGZsYWdzICYgRk5NX1BBVEhOQU1FKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytzdHJpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKEZOTV9OT01BVENIKTsKKyAgICAgICAgICAgICAgICBjYXNlICdbJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgqc3RyaW5nID09IEVPUykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChGTk1fTk9NQVRDSCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKnN0cmluZyA9PSAnLycgJiYgKGZsYWdzICYgRk5NX1BBVEhOQU1FKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChGTk1fTk9NQVRDSCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKnN0cmluZyA9PSAnLicgJiYgKGZsYWdzICYgRk5NX1BFUklPRCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nID09IHN0cmluZ3N0YXJ0IHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChmbGFncyAmIEZOTV9QQVRITkFNRSkgJiYgKihzdHJpbmcgLSAxKSA9PSAnLycpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChGTk1fTk9NQVRDSCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocmFuZ2VtYXRjaChwYXR0ZXJuLCAqc3RyaW5nLCBmbGFncywgJm5ld3ApKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFJBTkdFX0VSUk9SOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBub3QgYSBnb29kIHJhbmdlLCB0cmVhdCBhcyBub3JtYWwgdGV4dCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG5vcm1hbDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgUkFOR0VfTUFUQ0g6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm4gPSBuZXdwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgUkFOR0VfTk9NQVRDSDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChGTk1fTk9NQVRDSCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICArK3N0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgJ1xcJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGZsYWdzICYgRk5NX05PRVNDQVBFKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGMgPSAqcGF0dGVybisrKSA9PSBFT1MpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0gJ1xcJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLXBhdHRlcm47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZBTExUSFJPVUdIICovCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBub3JtYWw6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyAhPSAqc3RyaW5nICYmICEoKGZsYWdzICYgRk5NX0NBU0VGT0xEKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRvbG93ZXIoKHVuc2lnbmVkIGNoYXIpYykgPT0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvbG93ZXIoKHVuc2lnbmVkIGNoYXIpKnN0cmluZykpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChGTk1fTk9NQVRDSCk7CisgICAgICAgICAgICAgICAgICAgICAgICArK3N0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgLyogTk9UUkVBQ0hFRCAqLworfQorCitzdGF0aWMgaW50CityYW5nZW1hdGNoKGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNoYXIgdGVzdCwgaW50IGZsYWdzLCBjaGFyICoqbmV3cCkKK3sKKyAgICAgICAgaW50IG5lZ2F0ZSwgb2s7CisgICAgICAgIGNoYXIgYywgYzI7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogQSBicmFja2V0IGV4cHJlc3Npb24gc3RhcnRpbmcgd2l0aCBhbiB1bnF1b3RlZCBjaXJjdW1mbGV4CisgICAgICAgICAqIGNoYXJhY3RlciBwcm9kdWNlcyB1bnNwZWNpZmllZCByZXN1bHRzIChJRUVFIDEwMDMuMi0xOTkyLAorICAgICAgICAgKiAzLjEzLjIpLiAgVGhpcyBpbXBsZW1lbnRhdGlvbiB0cmVhdHMgaXQgbGlrZSAnIScsIGZvcgorICAgICAgICAgKiBjb25zaXN0ZW5jeSB3aXRoIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gc3ludGF4LgorICAgICAgICAgKiBKLlQuIENvbmtsaW4gKGNvbmtsaW5AbmdhaS5rYWxlaWRhLmNvbSkKKyAgICAgICAgICovCisgICAgICAgIGlmICgobmVnYXRlID0gKCpwYXR0ZXJuID09ICchJyB8fCAqcGF0dGVybiA9PSAnXicpKSkKKyAgICAgICAgICAgICAgICArK3BhdHRlcm47CisKKyAgICAgICAgaWYgKGZsYWdzICYgRk5NX0NBU0VGT0xEKQorICAgICAgICAgICAgICAgIHRlc3QgPSAoY2hhcil0b2xvd2VyKCh1bnNpZ25lZCBjaGFyKXRlc3QpOworCisgICAgICAgIC8qCisgICAgICAgICAqIEEgcmlnaHQgYnJhY2tldCBzaGFsbCBsb3NlIGl0cyBzcGVjaWFsIG1lYW5pbmcgYW5kIHJlcHJlc2VudAorICAgICAgICAgKiBpdHNlbGYgaW4gYSBicmFja2V0IGV4cHJlc3Npb24gaWYgaXQgb2NjdXJzIGZpcnN0IGluIHRoZSBsaXN0LgorICAgICAgICAgKiAtLSBQT1NJWC4yIDIuOC4zLjIKKyAgICAgICAgICovCisgICAgICAgIG9rID0gMDsKKyAgICAgICAgYyA9ICpwYXR0ZXJuKys7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICBpZiAoYyA9PSAnXFwnICYmICEoZmxhZ3MgJiBGTk1fTk9FU0NBUEUpKQorICAgICAgICAgICAgICAgICAgICAgICAgYyA9ICpwYXR0ZXJuKys7CisgICAgICAgICAgICAgICAgaWYgKGMgPT0gRU9TKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChSQU5HRV9FUlJPUik7CisgICAgICAgICAgICAgICAgaWYgKGMgPT0gJy8nICYmIChmbGFncyAmIEZOTV9QQVRITkFNRSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFJBTkdFX05PTUFUQ0gpOworICAgICAgICAgICAgICAgIGlmICgoZmxhZ3MgJiBGTk1fQ0FTRUZPTEQpKQorICAgICAgICAgICAgICAgICAgICAgICAgYyA9IChjaGFyKXRvbG93ZXIoKHVuc2lnbmVkIGNoYXIpYyk7CisgICAgICAgICAgICAgICAgaWYgKCpwYXR0ZXJuID09ICctJworICAgICAgICAgICAgICAgICAgICAmJiAoYzIgPSAqKHBhdHRlcm4rMSkpICE9IEVPUyAmJiBjMiAhPSAnXScpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm4gKz0gMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjMiA9PSAnXFwnICYmICEoZmxhZ3MgJiBGTk1fTk9FU0NBUEUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjMiA9ICpwYXR0ZXJuKys7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYzIgPT0gRU9TKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFJBTkdFX0VSUk9SKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmbGFncyAmIEZOTV9DQVNFRk9MRCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYzIgPSAoY2hhcil0b2xvd2VyKCh1bnNpZ25lZCBjaGFyKWMyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjIDw9IHRlc3QgJiYgdGVzdCA8PSBjMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2sgPSAxOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PSB0ZXN0KQorICAgICAgICAgICAgICAgICAgICAgICAgb2sgPSAxOworICAgICAgICB9IHdoaWxlICgoYyA9ICpwYXR0ZXJuKyspICE9ICddJyk7CisKKyAgICAgICAgKm5ld3AgPSAoY2hhciAqKXBhdHRlcm47CisgICAgICAgIHJldHVybiAob2sgPT0gbmVnYXRlID8gUkFOR0VfTk9NQVRDSCA6IFJBTkdFX01BVENIKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL2Z0aW1lLmMgYi9saWJjL3VuaXN0ZC9mdGltZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MTM1OTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3VuaXN0ZC9mdGltZS5jCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDxzeXMvdGltZWIuaD4KKworaW50IGZ0aW1lKHN0cnVjdCB0aW1lYiAqdGIpCit7CisgICAgc3RydWN0IHRpbWV2YWwgIHR2OworICAgIHN0cnVjdCB0aW1lem9uZSB0ejsKKworICAgIGlmIChnZXR0aW1lb2ZkYXkgKCZ0diwgJnR6KSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHRiLT50aW1lICAgID0gdHYudHZfc2VjOworICAgIHRiLT5taWxsaXRtID0gKHR2LnR2X3VzZWMgKyA1MDApIC8gMTAwMDsKKworICAgIGlmICh0Yi0+bWlsbGl0bSA9PSAxMDAwKSB7CisgICAgICAgICsrdGItPnRpbWU7CisgICAgICAgIHRiLT5taWxsaXRtID0gMDsKKyAgICB9CisgICAgdGItPnRpbWV6b25lID0gdHoudHpfbWludXRlc3dlc3Q7CisgICAgdGItPmRzdGZsYWcgID0gdHoudHpfZHN0dGltZTsKKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvZnRvay5jIGIvbGliYy91bmlzdGQvZnRvay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzOGJkMGEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3VuaXN0ZC9mdG9rLmMKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy9pcGMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCitrZXlfdCAgZnRvayhjb25zdCBjaGFyKiAgcGF0aCwgaW50ICBpZCkKK3sKKyAgICBzdHJ1Y3Qgc3RhdCAgIHN0OworCisgICAgaWYgKCBsc3RhdChwYXRoLCAmc3QpIDwgMCApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHJldHVybiAoa2V5X3QpKCAoc3Quc3RfaW5vICYgMHhmZmZmKSB8ICgoc3Quc3RfZGV2ICYgMHhmZikgPDwgMTYpIHwgKChpZCAmIDI1NSkgPDwgMjQpICk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9nZXRjd2QuYyBiL2xpYmMvdW5pc3RkL2dldGN3ZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjZjgwZTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3VuaXN0ZC9nZXRjd2QuYwpAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8dW5pc3RkLmg+CisKK2V4dGVybiBpbnQgX19nZXRjd2QoY2hhciAqIGJ1Ziwgc2l6ZV90IHNpemUpOworCitjaGFyICpnZXRjd2QoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKyAgcmV0dXJuICggX19nZXRjd2QoYnVmLCBzaXplKSA8IDAgKSA/IE5VTEwgOiBidWY7Cit9CmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9nZXRkdGFibGVzaXplLmMgYi9saWJjL3VuaXN0ZC9nZXRkdGFibGVzaXplLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTEzMTVhNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdW5pc3RkL2dldGR0YWJsZXNpemUuYwpAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CisjaW5jbHVkZSA8c3lzL3N5c2NvbmYuaD4KKworaW50IGdldGR0YWJsZXNpemUoKQoreworICAgIHN0cnVjdCBybGltaXQgcjsKKworICAgIGlmIChnZXRybGltaXQoUkxJTUlUX05PRklMRSwgJnIpIDwgMCkgeworICAgICAgICByZXR1cm4gc3lzY29uZihfU0NfT1BFTl9NQVgpOworICAgIH0KKyAgICByZXR1cm4gci5ybGltX2N1cjsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL2dldGhvc3RuYW1lLmMgYi9saWJjL3VuaXN0ZC9nZXRob3N0bmFtZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2OWQyMWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3VuaXN0ZC9nZXRob3N0bmFtZS5jCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy91dHNuYW1lLmg+CisKK2ludCBnZXRob3N0bmFtZShjaGFyKiAgYnVmZiwgc2l6ZV90ICBidWZsZW4pCit7CisgICAgc3RydWN0IHV0c25hbWUgIG5hbWU7CisgICAgaW50ICAgICAgICAgICAgIHJlc3VsdCA9IDA7CisKKyAgICByZXN1bHQgPSB1bmFtZSgmbmFtZSk7CisgICAgaWYgKHJlc3VsdCAhPSAtMSkKKyAgICB7CisgICAgICAgIGludCAgbmFtZWxlbiA9IHN0cmxlbihuYW1lLm5vZGVuYW1lKTsKKworICAgICAgICBpZiAoKGludClidWZsZW4gPCBuYW1lbGVuKzEpIHsKKyAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgICAgICAgIHJlc3VsdCA9IC0xOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbWVtY3B5KCBidWZmLCBuYW1lLm5vZGVuYW1lLCBuYW1lbGVuKzEgKTsKKyAgfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvZ2V0b3B0X2xvbmcuYyBiL2xpYmMvdW5pc3RkL2dldG9wdF9sb25nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJkZjAxYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdW5pc3RkL2dldG9wdF9sb25nLmMKQEAgLTAsMCArMSw1MzcgQEAKKy8qCSRPcGVuQlNEOiBnZXRvcHRfbG9uZy5jLHYgMS4yMCAyMDA1LzEwLzI1IDE1OjQ5OjM3IGptYyBFeHAgJAkqLworLyoJJE5ldEJTRDogZ2V0b3B0X2xvbmcuYyx2IDEuMTUgMjAwMi8wMS8zMSAyMjo0Mzo0MCB0diBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAyMDAyIFRvZGQgQy4gTWlsbGVyIDxUb2RkLk1pbGxlckBjb3VydGVzYW4uY29tPgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICoKKyAqIFNwb25zb3JlZCBpbiBwYXJ0IGJ5IHRoZSBEZWZlbnNlIEFkdmFuY2VkIFJlc2VhcmNoIFByb2plY3RzCisgKiBBZ2VuY3kgKERBUlBBKSBhbmQgQWlyIEZvcmNlIFJlc2VhcmNoIExhYm9yYXRvcnksIEFpciBGb3JjZQorICogTWF0ZXJpZWwgQ29tbWFuZCwgVVNBRiwgdW5kZXIgYWdyZWVtZW50IG51bWJlciBGMzk1MDItOTktMS0wNTEyLgorICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwMCBUaGUgTmV0QlNEIEZvdW5kYXRpb24sIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBUaGUgTmV0QlNEIEZvdW5kYXRpb24KKyAqIGJ5IERpZXRlciBCYXJvbiBhbmQgVGhvbWFzIEtsYXVzbmVyLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKiAgICAgICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgTmV0QlNECisgKiAgICAgICAgRm91bmRhdGlvbiwgSW5jLiBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgVGhlIE5ldEJTRCBGb3VuZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBORVRCU0QgRk9VTkRBVElPTiwgSU5DLiBBTkQgQ09OVFJJQlVUT1JTCisgKiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKKyAqIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEZPVU5EQVRJT04gT1IgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8ZXJyLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxnZXRvcHQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjZGVmaW5lCVJFUExBQ0VfR0VUT1BUCQkvKiB1c2UgdGhpcyBnZXRvcHQgYXMgdGhlIHN5c3RlbSBnZXRvcHQoMykgKi8KKworI2lmZGVmIFJFUExBQ0VfR0VUT1BUCitpbnQJb3B0ZXJyID0gMTsJCS8qIGlmIGVycm9yIG1lc3NhZ2Ugc2hvdWxkIGJlIHByaW50ZWQgKi8KK2ludAlvcHRpbmQgPSAxOwkJLyogaW5kZXggaW50byBwYXJlbnQgYXJndiB2ZWN0b3IgKi8KK2ludAlvcHRvcHQgPSAnPyc7CQkvKiBjaGFyYWN0ZXIgY2hlY2tlZCBmb3IgdmFsaWRpdHkgKi8KK2NoYXIgICAgKm9wdGFyZzsJCS8qIGFyZ3VtZW50IGFzc29jaWF0ZWQgd2l0aCBvcHRpb24gKi8KKyNlbmRpZgoraW50CW9wdHJlc2V0OwkJLyogcmVzZXQgZ2V0b3B0ICovCisKKyNkZWZpbmUgUFJJTlRfRVJST1IJKChvcHRlcnIpICYmICgqb3B0aW9ucyAhPSAnOicpKQorCisjZGVmaW5lIEZMQUdfUEVSTVVURQkweDAxCS8qIHBlcm11dGUgbm9uLW9wdGlvbnMgdG8gdGhlIGVuZCBvZiBhcmd2ICovCisjZGVmaW5lIEZMQUdfQUxMQVJHUwkweDAyCS8qIHRyZWF0IG5vbi1vcHRpb25zIGFzIGFyZ3MgdG8gb3B0aW9uICItMSIgKi8KKyNkZWZpbmUgRkxBR19MT05HT05MWQkweDA0CS8qIG9wZXJhdGUgYXMgZ2V0b3B0X2xvbmdfb25seSAqLworCisvKiByZXR1cm4gdmFsdWVzICovCisjZGVmaW5lCUJBRENICQkoaW50KSc/JworI2RlZmluZQlCQURBUkcJCSgoKm9wdGlvbnMgPT0gJzonKSA/IChpbnQpJzonIDogKGludCknPycpCisjZGVmaW5lCUlOT1JERVIgCShpbnQpMQorCisjZGVmaW5lCUVNU0cJCSIiCisKK3N0YXRpYyBpbnQgZ2V0b3B0X2ludGVybmFsKGludCwgY2hhciAqIGNvbnN0ICosIGNvbnN0IGNoYXIgKiwKKwkJCSAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKiwgaW50ICosIGludCk7CitzdGF0aWMgaW50IHBhcnNlX2xvbmdfb3B0aW9ucyhjaGFyICogY29uc3QgKiwgY29uc3QgY2hhciAqLAorCQkJICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqLCBpbnQgKiwgaW50KTsKK3N0YXRpYyBpbnQgZ2NkKGludCwgaW50KTsKK3N0YXRpYyB2b2lkIHBlcm11dGVfYXJncyhpbnQsIGludCwgaW50LCBjaGFyICogY29uc3QgKik7CisKK3N0YXRpYyBjaGFyICpwbGFjZSA9IEVNU0c7IC8qIG9wdGlvbiBsZXR0ZXIgcHJvY2Vzc2luZyAqLworCisvKiBYWFg6IHNldCBvcHRyZXNldCB0byAxIHJhdGhlciB0aGFuIHRoZXNlIHR3byAqLworc3RhdGljIGludCBub25vcHRfc3RhcnQgPSAtMTsgLyogZmlyc3Qgbm9uIG9wdGlvbiBhcmd1bWVudCAoZm9yIHBlcm11dGUpICovCitzdGF0aWMgaW50IG5vbm9wdF9lbmQgPSAtMTsgICAvKiBmaXJzdCBvcHRpb24gYWZ0ZXIgbm9uIG9wdGlvbnMgKGZvciBwZXJtdXRlKSAqLworCisvKiBFcnJvciBtZXNzYWdlcyAqLworc3RhdGljIGNvbnN0IGNoYXIgcmVjYXJnY2hhcltdID0gIm9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCAtLSAlYyI7CitzdGF0aWMgY29uc3QgY2hhciByZWNhcmdzdHJpbmdbXSA9ICJvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQgLS0gJXMiOworc3RhdGljIGNvbnN0IGNoYXIgYW1iaWdbXSA9ICJhbWJpZ3VvdXMgb3B0aW9uIC0tICUuKnMiOworc3RhdGljIGNvbnN0IGNoYXIgbm9hcmdbXSA9ICJvcHRpb24gZG9lc24ndCB0YWtlIGFuIGFyZ3VtZW50IC0tICUuKnMiOworc3RhdGljIGNvbnN0IGNoYXIgaWxsb3B0Y2hhcltdID0gInVua25vd24gb3B0aW9uIC0tICVjIjsKK3N0YXRpYyBjb25zdCBjaGFyIGlsbG9wdHN0cmluZ1tdID0gInVua25vd24gb3B0aW9uIC0tICVzIjsKKworLyoKKyAqIENvbXB1dGUgdGhlIGdyZWF0ZXN0IGNvbW1vbiBkaXZpc29yIG9mIGEgYW5kIGIuCisgKi8KK3N0YXRpYyBpbnQKK2djZChpbnQgYSwgaW50IGIpCit7CisJaW50IGM7CisKKwljID0gYSAlIGI7CisJd2hpbGUgKGMgIT0gMCkgeworCQlhID0gYjsKKwkJYiA9IGM7CisJCWMgPSBhICUgYjsKKwl9CisKKwlyZXR1cm4gKGIpOworfQorCisvKgorICogRXhjaGFuZ2UgdGhlIGJsb2NrIGZyb20gbm9ub3B0X3N0YXJ0IHRvIG5vbm9wdF9lbmQgd2l0aCB0aGUgYmxvY2sKKyAqIGZyb20gbm9ub3B0X2VuZCB0byBvcHRfZW5kIChrZWVwaW5nIHRoZSBzYW1lIG9yZGVyIG9mIGFyZ3VtZW50cworICogaW4gZWFjaCBibG9jaykuCisgKi8KK3N0YXRpYyB2b2lkCitwZXJtdXRlX2FyZ3MoaW50IHBhbm9ub3B0X3N0YXJ0LCBpbnQgcGFub25vcHRfZW5kLCBpbnQgb3B0X2VuZCwKKwljaGFyICogY29uc3QgKm5hcmd2KQoreworCWludCBjc3RhcnQsIGN5Y2xlbGVuLCBpLCBqLCBuY3ljbGUsIG5ub25vcHRzLCBub3B0cywgcG9zOworCWNoYXIgKnN3YXA7CisKKwkvKgorCSAqIGNvbXB1dGUgbGVuZ3RocyBvZiBibG9ja3MgYW5kIG51bWJlciBhbmQgc2l6ZSBvZiBjeWNsZXMKKwkgKi8KKwlubm9ub3B0cyA9IHBhbm9ub3B0X2VuZCAtIHBhbm9ub3B0X3N0YXJ0OworCW5vcHRzID0gb3B0X2VuZCAtIHBhbm9ub3B0X2VuZDsKKwluY3ljbGUgPSBnY2Qobm5vbm9wdHMsIG5vcHRzKTsKKwljeWNsZWxlbiA9IChvcHRfZW5kIC0gcGFub25vcHRfc3RhcnQpIC8gbmN5Y2xlOworCisJZm9yIChpID0gMDsgaSA8IG5jeWNsZTsgaSsrKSB7CisJCWNzdGFydCA9IHBhbm9ub3B0X2VuZCtpOworCQlwb3MgPSBjc3RhcnQ7CisJCWZvciAoaiA9IDA7IGogPCBjeWNsZWxlbjsgaisrKSB7CisJCQlpZiAocG9zID49IHBhbm9ub3B0X2VuZCkKKwkJCQlwb3MgLT0gbm5vbm9wdHM7CisJCQllbHNlCisJCQkJcG9zICs9IG5vcHRzOworCQkJc3dhcCA9IG5hcmd2W3Bvc107CisJCQkvKiBMSU5URUQgY29uc3QgY2FzdCAqLworCQkJKChjaGFyICoqKSBuYXJndilbcG9zXSA9IG5hcmd2W2NzdGFydF07CisJCQkvKiBMSU5URUQgY29uc3QgY2FzdCAqLworCQkJKChjaGFyICoqKW5hcmd2KVtjc3RhcnRdID0gc3dhcDsKKwkJfQorCX0KK30KKworLyoKKyAqIHBhcnNlX2xvbmdfb3B0aW9ucyAtLQorICoJUGFyc2UgbG9uZyBvcHRpb25zIGluIGFyZ2MvYXJndiBhcmd1bWVudCB2ZWN0b3IuCisgKiBSZXR1cm5zIC0xIGlmIHNob3J0X3RvbyBpcyBzZXQgYW5kIHRoZSBvcHRpb24gZG9lcyBub3QgbWF0Y2ggbG9uZ19vcHRpb25zLgorICovCitzdGF0aWMgaW50CitwYXJzZV9sb25nX29wdGlvbnMoY2hhciAqIGNvbnN0ICpuYXJndiwgY29uc3QgY2hhciAqb3B0aW9ucywKKwljb25zdCBzdHJ1Y3Qgb3B0aW9uICpsb25nX29wdGlvbnMsIGludCAqaWR4LCBpbnQgc2hvcnRfdG9vKQoreworCWNoYXIgKmN1cnJlbnRfYXJndiwgKmhhc19lcXVhbDsKKwlzaXplX3QgY3VycmVudF9hcmd2X2xlbjsKKwlpbnQgaSwgbWF0Y2g7CisKKwljdXJyZW50X2FyZ3YgPSBwbGFjZTsKKwltYXRjaCA9IC0xOworCisJb3B0aW5kKys7CisKKwlpZiAoKGhhc19lcXVhbCA9IHN0cmNocihjdXJyZW50X2FyZ3YsICc9JykpICE9IE5VTEwpIHsKKwkJLyogYXJndW1lbnQgZm91bmQgKC0tb3B0aW9uPWFyZykgKi8KKwkJY3VycmVudF9hcmd2X2xlbiA9IGhhc19lcXVhbCAtIGN1cnJlbnRfYXJndjsKKwkJaGFzX2VxdWFsKys7CisJfSBlbHNlCisJCWN1cnJlbnRfYXJndl9sZW4gPSBzdHJsZW4oY3VycmVudF9hcmd2KTsKKworCWZvciAoaSA9IDA7IGxvbmdfb3B0aW9uc1tpXS5uYW1lOyBpKyspIHsKKwkJLyogZmluZCBtYXRjaGluZyBsb25nIG9wdGlvbiAqLworCQlpZiAoc3RybmNtcChjdXJyZW50X2FyZ3YsIGxvbmdfb3B0aW9uc1tpXS5uYW1lLAorCQkgICAgY3VycmVudF9hcmd2X2xlbikpCisJCQljb250aW51ZTsKKworCQlpZiAoc3RybGVuKGxvbmdfb3B0aW9uc1tpXS5uYW1lKSA9PSBjdXJyZW50X2FyZ3ZfbGVuKSB7CisJCQkvKiBleGFjdCBtYXRjaCAqLworCQkJbWF0Y2ggPSBpOworCQkJYnJlYWs7CisJCX0KKwkJLyoKKwkJICogSWYgdGhpcyBpcyBhIGtub3duIHNob3J0IG9wdGlvbiwgZG9uJ3QgYWxsb3cKKwkJICogYSBwYXJ0aWFsIG1hdGNoIG9mIGEgc2luZ2xlIGNoYXJhY3Rlci4KKwkJICovCisJCWlmIChzaG9ydF90b28gJiYgY3VycmVudF9hcmd2X2xlbiA9PSAxKQorCQkJY29udGludWU7CisKKwkJaWYgKG1hdGNoID09IC0xKQkvKiBwYXJ0aWFsIG1hdGNoICovCisJCQltYXRjaCA9IGk7CisJCWVsc2UgeworCQkJLyogYW1iaWd1b3VzIGFiYnJldmlhdGlvbiAqLworCQkJaWYgKFBSSU5UX0VSUk9SKQorCQkJCWZwcmludGYoc3RkZXJyLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIGFtYmlnLCAoaW50KWN1cnJlbnRfYXJndl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50X2FyZ3YpOworCQkJb3B0b3B0ID0gMDsKKwkJCXJldHVybiAoQkFEQ0gpOworCQl9CisJfQorCWlmIChtYXRjaCAhPSAtMSkgewkJLyogb3B0aW9uIGZvdW5kICovCisJCWlmIChsb25nX29wdGlvbnNbbWF0Y2hdLmhhc19hcmcgPT0gbm9fYXJndW1lbnQKKwkJICAgICYmIGhhc19lcXVhbCkgeworCQkJaWYgKFBSSU5UX0VSUk9SKQorCQkJCWZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgICAgICAgICAgICAgbm9hcmcsIChpbnQpY3VycmVudF9hcmd2X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfYXJndik7CisJCQkvKgorCQkJICogWFhYOiBHTlUgc2V0cyBvcHRvcHQgdG8gdmFsIHJlZ2FyZGxlc3Mgb2YgZmxhZworCQkJICovCisJCQlpZiAobG9uZ19vcHRpb25zW21hdGNoXS5mbGFnID09IE5VTEwpCisJCQkJb3B0b3B0ID0gbG9uZ19vcHRpb25zW21hdGNoXS52YWw7CisJCQllbHNlCisJCQkJb3B0b3B0ID0gMDsKKwkJCXJldHVybiAoQkFEQVJHKTsKKwkJfQorCQlpZiAobG9uZ19vcHRpb25zW21hdGNoXS5oYXNfYXJnID09IHJlcXVpcmVkX2FyZ3VtZW50IHx8CisJCSAgICBsb25nX29wdGlvbnNbbWF0Y2hdLmhhc19hcmcgPT0gb3B0aW9uYWxfYXJndW1lbnQpIHsKKwkJCWlmIChoYXNfZXF1YWwpCisJCQkJb3B0YXJnID0gaGFzX2VxdWFsOworCQkJZWxzZSBpZiAobG9uZ19vcHRpb25zW21hdGNoXS5oYXNfYXJnID09CisJCQkgICAgcmVxdWlyZWRfYXJndW1lbnQpIHsKKwkJCQkvKgorCQkJCSAqIG9wdGlvbmFsIGFyZ3VtZW50IGRvZXNuJ3QgdXNlIG5leHQgbmFyZ3YKKwkJCQkgKi8KKwkJCQlvcHRhcmcgPSBuYXJndltvcHRpbmQrK107CisJCQl9CisJCX0KKwkJaWYgKChsb25nX29wdGlvbnNbbWF0Y2hdLmhhc19hcmcgPT0gcmVxdWlyZWRfYXJndW1lbnQpCisJCSAgICAmJiAob3B0YXJnID09IE5VTEwpKSB7CisJCQkvKgorCQkJICogTWlzc2luZyBhcmd1bWVudDsgbGVhZGluZyAnOicgaW5kaWNhdGVzIG5vIGVycm9yCisJCQkgKiBzaG91bGQgYmUgZ2VuZXJhdGVkLgorCQkJICovCisJCQlpZiAoUFJJTlRfRVJST1IpCisJCQkJZnByaW50ZihzdGRlcnIsIAorICAgICAgICAgICAgICAgICAgICAgICAgcmVjYXJnc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudF9hcmd2KTsKKwkJCS8qCisJCQkgKiBYWFg6IEdOVSBzZXRzIG9wdG9wdCB0byB2YWwgcmVnYXJkbGVzcyBvZiBmbGFnCisJCQkgKi8KKwkJCWlmIChsb25nX29wdGlvbnNbbWF0Y2hdLmZsYWcgPT0gTlVMTCkKKwkJCQlvcHRvcHQgPSBsb25nX29wdGlvbnNbbWF0Y2hdLnZhbDsKKwkJCWVsc2UKKwkJCQlvcHRvcHQgPSAwOworCQkJLS1vcHRpbmQ7CisJCQlyZXR1cm4gKEJBREFSRyk7CisJCX0KKwl9IGVsc2UgewkJCS8qIHVua25vd24gb3B0aW9uICovCisJCWlmIChzaG9ydF90b28pIHsKKwkJCS0tb3B0aW5kOworCQkJcmV0dXJuICgtMSk7CisJCX0KKwkJaWYgKFBSSU5UX0VSUk9SKQorCQkJZnByaW50ZihzdGRlcnIsIGlsbG9wdHN0cmluZywgY3VycmVudF9hcmd2KTsKKwkJb3B0b3B0ID0gMDsKKwkJcmV0dXJuIChCQURDSCk7CisJfQorCWlmIChpZHgpCisJCSppZHggPSBtYXRjaDsKKwlpZiAobG9uZ19vcHRpb25zW21hdGNoXS5mbGFnKSB7CisJCSpsb25nX29wdGlvbnNbbWF0Y2hdLmZsYWcgPSBsb25nX29wdGlvbnNbbWF0Y2hdLnZhbDsKKwkJcmV0dXJuICgwKTsKKwl9IGVsc2UKKwkJcmV0dXJuIChsb25nX29wdGlvbnNbbWF0Y2hdLnZhbCk7Cit9CisKKy8qCisgKiBnZXRvcHRfaW50ZXJuYWwgLS0KKyAqCVBhcnNlIGFyZ2MvYXJndiBhcmd1bWVudCB2ZWN0b3IuICBDYWxsZWQgYnkgdXNlciBsZXZlbCByb3V0aW5lcy4KKyAqLworc3RhdGljIGludAorZ2V0b3B0X2ludGVybmFsKGludCBuYXJnYywgY2hhciAqIGNvbnN0ICpuYXJndiwgY29uc3QgY2hhciAqb3B0aW9ucywKKwljb25zdCBzdHJ1Y3Qgb3B0aW9uICpsb25nX29wdGlvbnMsIGludCAqaWR4LCBpbnQgZmxhZ3MpCit7CisJY2hhciAqb2xpOwkJCQkvKiBvcHRpb24gbGV0dGVyIGxpc3QgaW5kZXggKi8KKwlpbnQgb3B0Y2hhciwgc2hvcnRfdG9vOworCXN0YXRpYyBpbnQgcG9zaXhseV9jb3JyZWN0ID0gLTE7CisKKwlpZiAob3B0aW9ucyA9PSBOVUxMKQorCQlyZXR1cm4gKC0xKTsKKworCS8qCisJICogRGlzYWJsZSBHTlUgZXh0ZW5zaW9ucyBpZiBQT1NJWExZX0NPUlJFQ1QgaXMgc2V0IG9yIG9wdGlvbnMKKwkgKiBzdHJpbmcgYmVnaW5zIHdpdGggYSAnKycuCisJICovCisJaWYgKHBvc2l4bHlfY29ycmVjdCA9PSAtMSkKKwkJcG9zaXhseV9jb3JyZWN0ID0gKGdldGVudigiUE9TSVhMWV9DT1JSRUNUIikgIT0gTlVMTCk7CisJaWYgKHBvc2l4bHlfY29ycmVjdCB8fCAqb3B0aW9ucyA9PSAnKycpCisJCWZsYWdzICY9IH5GTEFHX1BFUk1VVEU7CisJZWxzZSBpZiAoKm9wdGlvbnMgPT0gJy0nKQorCQlmbGFncyB8PSBGTEFHX0FMTEFSR1M7CisJaWYgKCpvcHRpb25zID09ICcrJyB8fCAqb3B0aW9ucyA9PSAnLScpCisJCW9wdGlvbnMrKzsKKworCS8qCisJICogWFhYIFNvbWUgR05VIHByb2dyYW1zIChsaWtlIGN2cykgc2V0IG9wdGluZCB0byAwIGluc3RlYWQgb2YKKwkgKiBYWFggdXNpbmcgb3B0cmVzZXQuICBXb3JrIGFyb3VuZCB0aGlzIGJyYWluZGFtYWdlLgorCSAqLworCWlmIChvcHRpbmQgPT0gMCkKKwkJb3B0aW5kID0gb3B0cmVzZXQgPSAxOworCisJb3B0YXJnID0gTlVMTDsKKwlpZiAob3B0cmVzZXQpCisJCW5vbm9wdF9zdGFydCA9IG5vbm9wdF9lbmQgPSAtMTsKK3N0YXJ0OgorCWlmIChvcHRyZXNldCB8fCAhKnBsYWNlKSB7CQkvKiB1cGRhdGUgc2Nhbm5pbmcgcG9pbnRlciAqLworCQlvcHRyZXNldCA9IDA7CisJCWlmIChvcHRpbmQgPj0gbmFyZ2MpIHsgICAgICAgICAgLyogZW5kIG9mIGFyZ3VtZW50IHZlY3RvciAqLworCQkJcGxhY2UgPSBFTVNHOworCQkJaWYgKG5vbm9wdF9lbmQgIT0gLTEpIHsKKwkJCQkvKiBkbyBwZXJtdXRhdGlvbiwgaWYgd2UgaGF2ZSB0byAqLworCQkJCXBlcm11dGVfYXJncyhub25vcHRfc3RhcnQsIG5vbm9wdF9lbmQsCisJCQkJICAgIG9wdGluZCwgbmFyZ3YpOworCQkJCW9wdGluZCAtPSBub25vcHRfZW5kIC0gbm9ub3B0X3N0YXJ0OworCQkJfQorCQkJZWxzZSBpZiAobm9ub3B0X3N0YXJ0ICE9IC0xKSB7CisJCQkJLyoKKwkJCQkgKiBJZiB3ZSBza2lwcGVkIG5vbi1vcHRpb25zLCBzZXQgb3B0aW5kCisJCQkJICogdG8gdGhlIGZpcnN0IG9mIHRoZW0uCisJCQkJICovCisJCQkJb3B0aW5kID0gbm9ub3B0X3N0YXJ0OworCQkJfQorCQkJbm9ub3B0X3N0YXJ0ID0gbm9ub3B0X2VuZCA9IC0xOworCQkJcmV0dXJuICgtMSk7CisJCX0KKwkJaWYgKCoocGxhY2UgPSBuYXJndltvcHRpbmRdKSAhPSAnLScgfHwKKwkJICAgIChwbGFjZVsxXSA9PSAnXDAnICYmIHN0cmNocihvcHRpb25zLCAnLScpID09IE5VTEwpKSB7CisJCQlwbGFjZSA9IEVNU0c7CQkvKiBmb3VuZCBub24tb3B0aW9uICovCisJCQlpZiAoZmxhZ3MgJiBGTEFHX0FMTEFSR1MpIHsKKwkJCQkvKgorCQkJCSAqIEdOVSBleHRlbnNpb246CisJCQkJICogcmV0dXJuIG5vbi1vcHRpb24gYXMgYXJndW1lbnQgdG8gb3B0aW9uIDEKKwkJCQkgKi8KKwkJCQlvcHRhcmcgPSBuYXJndltvcHRpbmQrK107CisJCQkJcmV0dXJuIChJTk9SREVSKTsKKwkJCX0KKwkJCWlmICghKGZsYWdzICYgRkxBR19QRVJNVVRFKSkgeworCQkJCS8qCisJCQkJICogSWYgbm8gcGVybXV0YXRpb24gd2FudGVkLCBzdG9wIHBhcnNpbmcKKwkJCQkgKiBhdCBmaXJzdCBub24tb3B0aW9uLgorCQkJCSAqLworCQkJCXJldHVybiAoLTEpOworCQkJfQorCQkJLyogZG8gcGVybXV0YXRpb24gKi8KKwkJCWlmIChub25vcHRfc3RhcnQgPT0gLTEpCisJCQkJbm9ub3B0X3N0YXJ0ID0gb3B0aW5kOworCQkJZWxzZSBpZiAobm9ub3B0X2VuZCAhPSAtMSkgeworCQkJCXBlcm11dGVfYXJncyhub25vcHRfc3RhcnQsIG5vbm9wdF9lbmQsCisJCQkJICAgIG9wdGluZCwgbmFyZ3YpOworCQkJCW5vbm9wdF9zdGFydCA9IG9wdGluZCAtCisJCQkJICAgIChub25vcHRfZW5kIC0gbm9ub3B0X3N0YXJ0KTsKKwkJCQlub25vcHRfZW5kID0gLTE7CisJCQl9CisJCQlvcHRpbmQrKzsKKwkJCS8qIHByb2Nlc3MgbmV4dCBhcmd1bWVudCAqLworCQkJZ290byBzdGFydDsKKwkJfQorCQlpZiAobm9ub3B0X3N0YXJ0ICE9IC0xICYmIG5vbm9wdF9lbmQgPT0gLTEpCisJCQlub25vcHRfZW5kID0gb3B0aW5kOworCisJCS8qCisJCSAqIElmIHdlIGhhdmUgIi0iIGRvIG5vdGhpbmcsIGlmICItLSIgd2UgYXJlIGRvbmUuCisJCSAqLworCQlpZiAocGxhY2VbMV0gIT0gJ1wwJyAmJiAqKytwbGFjZSA9PSAnLScgJiYgcGxhY2VbMV0gPT0gJ1wwJykgeworCQkJb3B0aW5kKys7CisJCQlwbGFjZSA9IEVNU0c7CisJCQkvKgorCQkJICogV2UgZm91bmQgYW4gb3B0aW9uICgtLSksIHNvIGlmIHdlIHNraXBwZWQKKwkJCSAqIG5vbi1vcHRpb25zLCB3ZSBoYXZlIHRvIHBlcm11dGUuCisJCQkgKi8KKwkJCWlmIChub25vcHRfZW5kICE9IC0xKSB7CisJCQkJcGVybXV0ZV9hcmdzKG5vbm9wdF9zdGFydCwgbm9ub3B0X2VuZCwKKwkJCQkgICAgb3B0aW5kLCBuYXJndik7CisJCQkJb3B0aW5kIC09IG5vbm9wdF9lbmQgLSBub25vcHRfc3RhcnQ7CisJCQl9CisJCQlub25vcHRfc3RhcnQgPSBub25vcHRfZW5kID0gLTE7CisJCQlyZXR1cm4gKC0xKTsKKwkJfQorCX0KKworCS8qCisJICogQ2hlY2sgbG9uZyBvcHRpb25zIGlmOgorCSAqICAxKSB3ZSB3ZXJlIHBhc3NlZCBzb21lCisJICogIDIpIHRoZSBhcmcgaXMgbm90IGp1c3QgIi0iCisJICogIDMpIGVpdGhlciB0aGUgYXJnIHN0YXJ0cyB3aXRoIC0tIHdlIGFyZSBnZXRvcHRfbG9uZ19vbmx5KCkKKwkgKi8KKwlpZiAobG9uZ19vcHRpb25zICE9IE5VTEwgJiYgcGxhY2UgIT0gbmFyZ3Zbb3B0aW5kXSAmJgorCSAgICAoKnBsYWNlID09ICctJyB8fCAoZmxhZ3MgJiBGTEFHX0xPTkdPTkxZKSkpIHsKKwkJc2hvcnRfdG9vID0gMDsKKwkJaWYgKCpwbGFjZSA9PSAnLScpCisJCQlwbGFjZSsrOwkJLyogLS1mb28gbG9uZyBvcHRpb24gKi8KKwkJZWxzZSBpZiAoKnBsYWNlICE9ICc6JyAmJiBzdHJjaHIob3B0aW9ucywgKnBsYWNlKSAhPSBOVUxMKQorCQkJc2hvcnRfdG9vID0gMTsJCS8qIGNvdWxkIGJlIHNob3J0IG9wdGlvbiB0b28gKi8KKworCQlvcHRjaGFyID0gcGFyc2VfbG9uZ19vcHRpb25zKG5hcmd2LCBvcHRpb25zLCBsb25nX29wdGlvbnMsCisJCSAgICBpZHgsIHNob3J0X3Rvbyk7CisJCWlmIChvcHRjaGFyICE9IC0xKSB7CisJCQlwbGFjZSA9IEVNU0c7CisJCQlyZXR1cm4gKG9wdGNoYXIpOworCQl9CisJfQorCisJaWYgKCgob3B0Y2hhciA9IChpbnQpKnBsYWNlKyspID09IChpbnQpJzonKSB8fAorCSAgICAob3B0Y2hhciA9PSAoaW50KSctJyAmJiAqcGxhY2UgIT0gJ1wwJykgfHwKKwkgICAgKG9saSA9IHN0cmNocihvcHRpb25zLCBvcHRjaGFyKSkgPT0gTlVMTCkgeworCQkvKgorCQkgKiBJZiB0aGUgdXNlciBzcGVjaWZpZWQgIi0iIGFuZCAgJy0nIGlzbid0IGxpc3RlZCBpbgorCQkgKiBvcHRpb25zLCByZXR1cm4gLTEgKG5vbi1vcHRpb24pIGFzIHBlciBQT1NJWC4KKwkJICogT3RoZXJ3aXNlLCBpdCBpcyBhbiB1bmtub3duIG9wdGlvbiBjaGFyYWN0ZXIgKG9yICc6JykuCisJCSAqLworCQlpZiAob3B0Y2hhciA9PSAoaW50KSctJyAmJiAqcGxhY2UgPT0gJ1wwJykKKwkJCXJldHVybiAoLTEpOworCQlpZiAoISpwbGFjZSkKKwkJCSsrb3B0aW5kOworCQlpZiAoUFJJTlRfRVJST1IpCisJCQlmcHJpbnRmKHN0ZGVyciwgaWxsb3B0Y2hhciwgb3B0Y2hhcik7CisJCW9wdG9wdCA9IG9wdGNoYXI7CisJCXJldHVybiAoQkFEQ0gpOworCX0KKwlpZiAobG9uZ19vcHRpb25zICE9IE5VTEwgJiYgb3B0Y2hhciA9PSAnVycgJiYgb2xpWzFdID09ICc7JykgeworCQkvKiAtVyBsb25nLW9wdGlvbiAqLworCQlpZiAoKnBsYWNlKQkJCS8qIG5vIHNwYWNlICovCisJCQkvKiBOT1RISU5HICovOworCQllbHNlIGlmICgrK29wdGluZCA+PSBuYXJnYykgewkvKiBubyBhcmcgKi8KKwkJCXBsYWNlID0gRU1TRzsKKwkJCWlmIChQUklOVF9FUlJPUikKKwkJCQlmcHJpbnRmKHN0ZGVyciwgcmVjYXJnY2hhciwgb3B0Y2hhcik7CisJCQlvcHRvcHQgPSBvcHRjaGFyOworCQkJcmV0dXJuIChCQURBUkcpOworCQl9IGVsc2UJCQkJLyogd2hpdGUgc3BhY2UgKi8KKwkJCXBsYWNlID0gbmFyZ3Zbb3B0aW5kXTsKKwkJb3B0Y2hhciA9IHBhcnNlX2xvbmdfb3B0aW9ucyhuYXJndiwgb3B0aW9ucywgbG9uZ19vcHRpb25zLAorCQkgICAgaWR4LCAwKTsKKwkJcGxhY2UgPSBFTVNHOworCQlyZXR1cm4gKG9wdGNoYXIpOworCX0KKwlpZiAoKisrb2xpICE9ICc6JykgewkJCS8qIGRvZXNuJ3QgdGFrZSBhcmd1bWVudCAqLworCQlpZiAoISpwbGFjZSkKKwkJCSsrb3B0aW5kOworCX0gZWxzZSB7CQkJCS8qIHRha2VzIChvcHRpb25hbCkgYXJndW1lbnQgKi8KKwkJb3B0YXJnID0gTlVMTDsKKwkJaWYgKCpwbGFjZSkJCQkvKiBubyB3aGl0ZSBzcGFjZSAqLworCQkJb3B0YXJnID0gcGxhY2U7CisJCS8qIFhYWDogZGlzYWJsZSB0ZXN0IGZvciA6OiBpZiBQQz8gKEdOVSBkb2Vzbid0KSAqLworCQllbHNlIGlmIChvbGlbMV0gIT0gJzonKSB7CS8qIGFyZyBub3Qgb3B0aW9uYWwgKi8KKwkJCWlmICgrK29wdGluZCA+PSBuYXJnYykgewkvKiBubyBhcmcgKi8KKwkJCQlwbGFjZSA9IEVNU0c7CisJCQkJaWYgKFBSSU5UX0VSUk9SKQorCQkJCQlmcHJpbnRmKHN0ZGVyciwgcmVjYXJnY2hhciwgb3B0Y2hhcik7CisJCQkJb3B0b3B0ID0gb3B0Y2hhcjsKKwkJCQlyZXR1cm4gKEJBREFSRyk7CisJCQl9IGVsc2UKKwkJCQlvcHRhcmcgPSBuYXJndltvcHRpbmRdOworCQl9IGVsc2UgaWYgKCEoZmxhZ3MgJiBGTEFHX1BFUk1VVEUpKSB7CisJCQkvKgorCQkJICogSWYgcGVybXV0YXRpb24gaXMgZGlzYWJsZWQsIHdlIGNhbiBhY2NlcHQgYW4KKwkJCSAqIG9wdGlvbmFsIGFyZyBzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZSBzbyBsb25nCisJCQkgKiBhcyBpdCBkb2VzIG5vdCBzdGFydCB3aXRoIGEgZGFzaCAoLSkuCisJCQkgKi8KKwkJCWlmIChvcHRpbmQgKyAxIDwgbmFyZ2MgJiYgKm5hcmd2W29wdGluZCArIDFdICE9ICctJykKKwkJCQlvcHRhcmcgPSBuYXJndlsrK29wdGluZF07CisJCX0KKwkJcGxhY2UgPSBFTVNHOworCQkrK29wdGluZDsKKwl9CisJLyogZHVtcCBiYWNrIG9wdGlvbiBsZXR0ZXIgKi8KKwlyZXR1cm4gKG9wdGNoYXIpOworfQorCisjaWZkZWYgUkVQTEFDRV9HRVRPUFQKKy8qCisgKiBnZXRvcHQgLS0KKyAqCVBhcnNlIGFyZ2MvYXJndiBhcmd1bWVudCB2ZWN0b3IuCisgKgorICogW2V2ZW50dWFsbHkgdGhpcyB3aWxsIHJlcGxhY2UgdGhlIEJTRCBnZXRvcHRdCisgKi8KK2ludAorZ2V0b3B0KGludCBuYXJnYywgY2hhciAqIGNvbnN0ICpuYXJndiwgY29uc3QgY2hhciAqb3B0aW9ucykKK3sKKworCS8qCisJICogV2UgZG9uJ3QgcGFzcyBGTEFHX1BFUk1VVEUgdG8gZ2V0b3B0X2ludGVybmFsKCkgc2luY2UKKwkgKiB0aGUgQlNEIGdldG9wdCgzKSAodW5saWtlIEdOVSkgaGFzIG5ldmVyIGRvbmUgdGhpcy4KKwkgKgorCSAqIEZ1cnRoZXJtb3JlLCBzaW5jZSBtYW55IHByaXZpbGVnZWQgcHJvZ3JhbXMgY2FsbCBnZXRvcHQoKQorCSAqIGJlZm9yZSBkcm9wcGluZyBwcml2aWxlZ2VzIGl0IG1ha2VzIHNlbnNlIHRvIGtlZXAgdGhpbmdzCisJICogYXMgc2ltcGxlIChhbmQgYnVnLWZyZWUpIGFzIHBvc3NpYmxlLgorCSAqLworCXJldHVybiAoZ2V0b3B0X2ludGVybmFsKG5hcmdjLCBuYXJndiwgb3B0aW9ucywgTlVMTCwgTlVMTCwgMCkpOworfQorI2VuZGlmIC8qIFJFUExBQ0VfR0VUT1BUICovCisKKy8qCisgKiBnZXRvcHRfbG9uZyAtLQorICoJUGFyc2UgYXJnYy9hcmd2IGFyZ3VtZW50IHZlY3Rvci4KKyAqLworaW50CitnZXRvcHRfbG9uZyhpbnQgbmFyZ2MsIGNoYXIgKiBjb25zdCAqbmFyZ3YsIGNvbnN0IGNoYXIgKm9wdGlvbnMsCisgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqbG9uZ19vcHRpb25zLCBpbnQgKmlkeCkKK3sKKworCXJldHVybiAoZ2V0b3B0X2ludGVybmFsKG5hcmdjLCBuYXJndiwgb3B0aW9ucywgbG9uZ19vcHRpb25zLCBpZHgsCisJICAgIEZMQUdfUEVSTVVURSkpOworfQorCisvKgorICogZ2V0b3B0X2xvbmdfb25seSAtLQorICoJUGFyc2UgYXJnYy9hcmd2IGFyZ3VtZW50IHZlY3Rvci4KKyAqLworaW50CitnZXRvcHRfbG9uZ19vbmx5KGludCBuYXJnYywgY2hhciAqIGNvbnN0ICpuYXJndiwgY29uc3QgY2hhciAqb3B0aW9ucywKKyAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpsb25nX29wdGlvbnMsIGludCAqaWR4KQoreworCisJcmV0dXJuIChnZXRvcHRfaW50ZXJuYWwobmFyZ2MsIG5hcmd2LCBvcHRpb25zLCBsb25nX29wdGlvbnMsIGlkeCwKKwkgICAgRkxBR19QRVJNVVRFfEZMQUdfTE9OR09OTFkpKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL2dldHBncnAuYyBiL2xpYmMvdW5pc3RkL2dldHBncnAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjdjZWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91bmlzdGQvZ2V0cGdycC5jCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworcGlkX3QgIGdldHBncnAodm9pZCkgCit7CisgIHJldHVybiBnZXRwZ2lkKDApOworfQpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvZ2V0cHJpb3JpdHkuYyBiL2xpYmMvdW5pc3RkL2dldHByaW9yaXR5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZjOWQ0ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdW5pc3RkL2dldHByaW9yaXR5LmMKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgorCitleHRlcm4gaW50IF9fZ2V0cHJpb3JpdHkoaW50LCBpbnQpOworCitpbnQgZ2V0cHJpb3JpdHkoaW50IHdoaWNoLCBpbnQgd2hvKQoreworICBpbnQgcmVzdWx0ID0gX19nZXRwcmlvcml0eSh3aGljaCwgd2hvKTsKKworICByZXR1cm4gKCByZXN1bHQgPCAwICkgPyByZXN1bHQgOiAyMC1yZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9nZXRwdC5jIGIvbGliYy91bmlzdGQvZ2V0cHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmI1YzExCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91bmlzdGQvZ2V0cHQuYwpAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKworaW50IGdldHB0KHZvaWQpCit7CisgIHJldHVybiBvcGVuKCIvZGV2L3B0bXgiLCBPX1JEV1J8T19OT0NUVFkpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvaW5pdGdyb3Vwcy5jIGIvbGliYy91bmlzdGQvaW5pdGdyb3Vwcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlYTZkOTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3VuaXN0ZC9pbml0Z3JvdXBzLmMKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPGdycC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjZGVmaW5lICBJTklUX0dST1VQUyAgMgorCitpbnQKK2luaXRncm91cHMgKGNvbnN0IGNoYXIgKnVzZXIsIGdpZF90IGdyb3VwKQoreworICAgIGdpZF90ICAgZ3JvdXBzMFsgSU5JVF9HUk9VUFMgXTsKKyAgICBnaWRfdCogIGdyb3VwcyAgICA9IGdyb3VwczA7CisgICAgaW50ICAgICByZXQgICAgICAgPSAtMTsKKyAgICBpbnQgICAgIG51bWdyb3VwcyA9IElOSVRfR1JPVVBTOworCisgICAgaWYgKGdldGdyb3VwbGlzdCh1c2VyLCBncm91cCwgZ3JvdXBzLCAmbnVtZ3JvdXBzKSA8IDApIHsKKyAgICAgICAgZ3JvdXBzID0gbWFsbG9jKG51bWdyb3VwcypzaXplb2YoZ3JvdXBzWzBdKSk7CisgICAgICAgIGlmIChncm91cHMgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgaWYgKGdldGdyb3VwbGlzdCh1c2VyLGdyb3VwLGdyb3VwcywmbnVtZ3JvdXBzKSA8IDApIHsKKyAgICAgICAgICAgIGdvdG8gRVhJVDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldCA9IHNldGdyb3VwcyhudW1ncm91cHMsIGdyb3Vwcyk7CisKK0VYSVQ6CisgICAgaWYgKGdyb3VwcyAhPSBncm91cHMwKQorICAgICAgICBmcmVlKGdyb3Vwcyk7CisKKyAgICByZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvaXNhdHR5LmMgYi9saWJjL3VuaXN0ZC9pc2F0dHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2FmNmM1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91bmlzdGQvaXNhdHR5LmMKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8dGVybWlvcy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKK2ludAoraXNhdHR5IChpbnQgIGZkKQoreworICBzdHJ1Y3QgdGVybWlvcyB0ZXJtOworCisgIHJldHVybiB0Y2dldGF0dHIgKGZkLCAmdGVybSkgPT0gMDsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL2lzc2V0dWdpZC5jIGIvbGliYy91bmlzdGQvaXNzZXR1Z2lkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFmOGU0MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdW5pc3RkL2lzc2V0dWdpZC5jCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworaW50ICBpc3NldHVnaWQodm9pZCkKK3sKKyAgICAvKiBmb3IgQmlvbmljLCB0aGlzIGlzIHN1ZmZpY2llbnQgKi8KKyAgICByZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvbHNlZWs2NC5jIGIvbGliYy91bmlzdGQvbHNlZWs2NC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxN2IzMzEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3VuaXN0ZC9sc2VlazY0LmMKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHVuaXN0ZC5oPgorCitleHRlcm4gaW50IF9fbGxzZWVrKGludCBmZCwgdW5zaWduZWQgbG9uZyAgb2Zmc2V0X2hpLCB1bnNpZ25lZCBsb25nICBvZmZzZXRfbG8sIGxvZmZfdCogIHJlc3VsdCwgaW50ICB3aGVuY2UpOworCitsb2ZmX3QgbHNlZWs2NChpbnQgZmQsIGxvZmZfdCBvZmYsIGludCB3aGVuY2UpCit7CisgICAgbG9mZl90ICByZXN1bHQ7CisKKyAgICBpZiAoIF9fbGxzZWVrKGZkLCAodW5zaWduZWQgbG9uZykob2ZmID4+IDMyKSwodW5zaWduZWQgbG9uZykob2ZmKSwgJnJlc3VsdCwgd2hlbmNlICkgPCAwICkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL21tYXAuYyBiL2xpYmMvdW5pc3RkL21tYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDhhYmJiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91bmlzdGQvbW1hcC5jCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisKK2V4dGVybiB2b2lkKiAgX19tbWFwMih2b2lkKiwgc2l6ZV90LCBpbnQsIGludCwgaW50LCBzaXplX3QpOworCisjZGVmaW5lICBNTUFQMl9TSElGVCAgMTIKK3ZvaWQqICAgbW1hcCggdm9pZCogIGFkZHIsICBzaXplX3QgIHNpemUsIGludCAgcHJvdCwgaW50ICBmbGFncywgaW50ICBmZCwgIGxvbmcgIG9mZnNldCApCit7CisgICAgaWYgKCBvZmZzZXQgJiAoKDFVTCA8PCBNTUFQMl9TSElGVCktMSkgKSB7CisgICAgZXJybm8gPSBFSU5WQUw7CisgICAgcmV0dXJuIE1BUF9GQUlMRUQ7CisgIH0KKworICAgIHJldHVybiBfX21tYXAyKGFkZHIsIHNpemUsIHByb3QsIGZsYWdzLCBmZCwgKHNpemVfdClvZmZzZXQgPj4gTU1BUDJfU0hJRlQpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvbmljZS5jIGIvbGliYy91bmlzdGQvbmljZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5YjY0NjkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3VuaXN0ZC9uaWNlLmMKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgorCitpbnQgbmljZShpbnQgaW5jcmVtZW50KQoreworICAgIGludCAgcHJpb3JpdHkgPSBnZXRwcmlvcml0eShQUklPX1BST0NFU1MsIDApOworCisgICAgcmV0dXJuIHNldHByaW9yaXR5KCBQUklPX1BST0NFU1MsIDAsIHByaW9yaXR5K2luY3JlbWVudCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9vcGVuLmMgYi9saWJjL3VuaXN0ZC9vcGVuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThiMWM4OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdW5pc3RkL29wZW4uYwpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworZXh0ZXJuIGludCAgX19vcGVuKGNvbnN0IGNoYXIqLCBpbnQsIGludCk7CisKK2ludCBvcGVuKGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBpbnQgZmxhZ3MsIC4uLikKK3sKKyAgICBtb2RlX3QgIG1vZGUgPSAwOworCisjaWYgIWRlZmluZWQoX19pMzg2X18pCisgICAgZmxhZ3MgfD0gT19MQVJHRUZJTEU7CisjZW5kaWYKKworICAgIGlmIChmbGFncyAmIE9fQ1JFQVQpCisgICAgeworICAgICAgICB2YV9saXN0ICBhcmdzOworCisgICAgICAgIHZhX3N0YXJ0KGFyZ3MsIGZsYWdzKTsKKyAgICAgICAgbW9kZSA9IChtb2RlX3QpIHZhX2FyZyhhcmdzLCBpbnQpOworICAgICAgICB2YV9lbmQoYXJncyk7CisgICAgfQorCisgICAgcmV0dXJuIF9fb3BlbihwYXRobmFtZSwgZmxhZ3MsIG1vZGUpOworfQorCmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9vcGVuYXQuYyBiL2xpYmMvdW5pc3RkL29wZW5hdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4YjM5YTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3VuaXN0ZC9vcGVuYXQuYwpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworZXh0ZXJuIGludCAgX19vcGVuYXQoaW50LCBjb25zdCBjaGFyKiwgaW50LCBpbnQpOworCitpbnQgb3BlbmF0KGludCBmZCwgY29uc3QgY2hhciAqcGF0aG5hbWUsIGludCBmbGFncywgLi4uKQoreworICAgIG1vZGVfdCAgbW9kZSA9IDA7CisKKyNpZiAhZGVmaW5lZChfX2kzODZfXykKKyAgICBmbGFncyB8PSBPX0xBUkdFRklMRTsKKyNlbmRpZgorCisgICAgaWYgKGZsYWdzICYgT19DUkVBVCkKKyAgICB7CisgICAgICAgIHZhX2xpc3QgIGFyZ3M7CisKKyAgICAgICAgdmFfc3RhcnQoYXJncywgZmxhZ3MpOworICAgICAgICBtb2RlID0gKG1vZGVfdCkgdmFfYXJnKGFyZ3MsIGludCk7CisgICAgICAgIHZhX2VuZChhcmdzKTsKKyAgICB9CisKKyAgICByZXR1cm4gX19vcGVuYXQoZmQsIHBhdGhuYW1lLCBmbGFncywgbW9kZSk7Cit9CisKZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL29wZW5kaXIuYyBiL2xpYmMvdW5pc3RkL29wZW5kaXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmEzZWEwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91bmlzdGQvb3BlbmRpci5jCkBAIC0wLDAgKzEsMjY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZGlyZW50Lmg+CisjaW5jbHVkZSA8bWVtb3J5Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworc3RydWN0IERJUgoreworICAgIGludCAgICAgICAgICAgICAgX0RJUl9mZDsKKyAgICBzaXplX3QgICAgICAgICAgIF9ESVJfYXZhaWw7CisgICAgc3RydWN0IGRpcmVudCogICBfRElSX25leHQ7CisgICAgcHRocmVhZF9tdXRleF90ICBfRElSX2xvY2s7CisgICAgc3RydWN0IGRpcmVudCAgICBfRElSX2J1ZmZbMTVdOworfTsKKworaW50IGRpcmZkKERJUiogZGlycCkKK3sKKyAgICByZXR1cm4gZGlycC0+X0RJUl9mZDsKK30KKworRElSKiAgb3BlbmRpciggY29uc3QgY2hhciogIGRpcnBhdGggKQoreworICAgIERJUiogIGRpciA9IG1hbGxvYyhzaXplb2YoRElSKSk7CisKKyAgICBpZiAoIWRpcikKKyAgICAgICAgZ290byBFeGl0OworCisgICAgZGlyLT5fRElSX2ZkID0gb3BlbihkaXJwYXRoLCBPX1JET05MWXxPX0RJUkVDVE9SWSk7CisgICAgaWYgKGRpci0+X0RJUl9mZCA8IDApCisgICAgeworICAgICAgICBmcmVlKGRpcik7CisgICAgICAgIGRpciA9IE5VTEw7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGRpci0+X0RJUl9hdmFpbCA9IDA7CisgICAgICAgIGRpci0+X0RJUl9uZXh0ICA9IE5VTEw7CisgICAgICAgIHB0aHJlYWRfbXV0ZXhfaW5pdCggJmRpci0+X0RJUl9sb2NrLCBOVUxMICk7CisgICAgfQorRXhpdDoKKyAgICByZXR1cm4gZGlyOworfQorCisKK0RJUiogIGZkb3BlbmRpcihpbnQgZmQpCit7CisgICAgRElSKiAgZGlyID0gbWFsbG9jKHNpemVvZihESVIpKTsKKworICAgIGlmICghZGlyKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGRpci0+X0RJUl9mZCA9IGZkOworICAgIGRpci0+X0RJUl9hdmFpbCA9IDA7CisgICAgZGlyLT5fRElSX25leHQgID0gTlVMTDsKKyAgICBwdGhyZWFkX211dGV4X2luaXQoICZkaXItPl9ESVJfbG9jaywgTlVMTCApOworCisgICAgcmV0dXJuIGRpcjsKK30KKworCitzdGF0aWMgc3RydWN0IGRpcmVudCoKK19yZWFkZGlyX3VubG9ja2VkKERJUiogIGRpcikKK3sKKyAgICBzdHJ1Y3QgZGlyZW50KiAgZW50cnk7CisKKyAgICBpZiAoICFkaXItPl9ESVJfYXZhaWwgKQorICAgIHsKKyAgICAgICAgaW50ICByYzsKKworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICByYyA9IGdldGRlbnRzKCBkaXItPl9ESVJfZmQsIGRpci0+X0RJUl9idWZmLCBzaXplb2YoZGlyLT5fRElSX2J1ZmYpKTsKKyAgICAgICAgICAgIGlmIChyYyA+PSAwIHx8IGVycm5vICE9IEVJTlRSKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJjIDw9IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKworICAgICAgICBkaXItPl9ESVJfYXZhaWwgPSByYzsKKyAgICAgICAgZGlyLT5fRElSX25leHQgID0gZGlyLT5fRElSX2J1ZmY7CisgICAgfQorCisgICAgZW50cnkgPSBkaXItPl9ESVJfbmV4dDsKKworICAgIC8qIHBlcmZvcm0gc29tZSBzYW5pdHkgY2hlY2tzIGhlcmUgKi8KKyAgICBpZiAoKChsb25nKSh2b2lkKillbnRyeSAmIDMpICE9IDApCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKCAodW5zaWduZWQpZW50cnktPmRfcmVjbGVuID4gc2l6ZW9mKCplbnRyeSkgICAgICAgICB8fAorICAgICAgICAgZW50cnktPmRfcmVjbGVuIDw9IG9mZnNldG9mKHN0cnVjdCBkaXJlbnQsIGRfbmFtZSkgKQorICAgICAgICBnb3RvIEJhZDsKKworICAgIGlmICggKGNoYXIqKWVudHJ5ICsgZW50cnktPmRfcmVjbGVuID4gKGNoYXIqKWRpci0+X0RJUl9idWZmICsgc2l6ZW9mKGRpci0+X0RJUl9idWZmKSApCisgICAgICAgIGdvdG8gQmFkOworCisgICAgaWYgKCAhbWVtY2hyKCBlbnRyeS0+ZF9uYW1lLCAwLCBlbnRyeS0+ZF9yZWNsZW4gLSBvZmZzZXRvZihzdHJ1Y3QgZGlyZW50LCBkX25hbWUpKSApCisgICAgICAgIGdvdG8gQmFkOyAKKworICAgIGRpci0+X0RJUl9uZXh0ICAgPSAoc3RydWN0IGRpcmVudCopKChjaGFyKillbnRyeSArIGVudHJ5LT5kX3JlY2xlbik7CisgICAgZGlyLT5fRElSX2F2YWlsIC09IGVudHJ5LT5kX3JlY2xlbjsKKworICAgIHJldHVybiBlbnRyeTsKKworICBCYWQ6CisgICAgZXJybm8gPSBFSU5WQUw7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKKworc3RydWN0IGRpcmVudCoKK3JlYWRkaXIoRElSICogZGlyKQoreworICAgIHN0cnVjdCBkaXJlbnQgKmVudHJ5ID0gTlVMTDsKKworICAgIHB0aHJlYWRfbXV0ZXhfbG9jayggJmRpci0+X0RJUl9sb2NrICk7CisgICAgZW50cnkgPSBfcmVhZGRpcl91bmxvY2tlZChkaXIpOworICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCAmZGlyLT5fRElSX2xvY2sgKTsKKworICAgIHJldHVybiBlbnRyeTsKK30KKworCitpbnQgcmVhZGRpcl9yKERJUiogIGRpciwgc3RydWN0IGRpcmVudCAqZW50cnksIHN0cnVjdCBkaXJlbnQgKipyZXN1bHQpCit7CisgICAgc3RydWN0IGRpcmVudCogIGVudDsKKyAgICBpbnQgIHNhdmVfZXJybm8gPSBlcnJubzsKKyAgICBpbnQgIHJldHZhbDsKKworICAgICpyZXN1bHQgPSBOVUxMOworICAgIGVycm5vICAgPSAwOworCisgICAgcHRocmVhZF9tdXRleF9sb2NrKCAmZGlyLT5fRElSX2xvY2sgKTsKKworICAgIGVudCAgICA9IF9yZWFkZGlyX3VubG9ja2VkKGRpcik7CisgICAgcmV0dmFsID0gZXJybm87CisgICAgaWYgKGVudCA9PSBOVUxMKSB7CisgICAgICAgIGlmICghcmV0dmFsKSB7CisgICAgICAgICAgICBlcnJubyA9IHNhdmVfZXJybm87CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoIXJldHZhbCkgeworICAgICAgICAgICAgZXJybm8gICA9IHNhdmVfZXJybm87CisgICAgICAgICAgICAqcmVzdWx0ID0gZW50cnk7CisgICAgICAgICAgICBtZW1jcHkoIGVudHJ5LCBlbnQsIGVudC0+ZF9yZWNsZW4gKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCAmZGlyLT5fRElSX2xvY2sgKTsKKworICAgIHJldHVybiByZXR2YWw7Cit9CisKKworCitpbnQgY2xvc2VkaXIoRElSICpkaXIpCit7CisgIGludCByYzsKKworICByYyA9IGNsb3NlKGRpci0+X0RJUl9mZCk7CisgIGRpci0+X0RJUl9mZCA9IC0xOworCisgIHB0aHJlYWRfbXV0ZXhfZGVzdHJveSggJmRpci0+X0RJUl9sb2NrICk7CisKKyAgZnJlZShkaXIpOworICByZXR1cm4gcmM7Cit9CisKKwordm9pZCAgIHJld2luZGRpcihESVIgKmRpcikKK3sKKyAgICBwdGhyZWFkX211dGV4X2xvY2soICZkaXItPl9ESVJfbG9jayApOworICAgIGxzZWVrKCBkaXItPl9ESVJfZmQsIDAsIFNFRUtfU0VUICk7CisgICAgZGlyLT5fRElSX2F2YWlsID0gMDsKKyAgICBwdGhyZWFkX211dGV4X3VubG9jayggJmRpci0+X0RJUl9sb2NrICk7Cit9CisKKworaW50IGFscGhhc29ydChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQoreworICAgICAgICBzdHJ1Y3QgZGlyZW50ICoqZDEsICoqZDI7CisKKyAgICAgICAgZDEgPSAoc3RydWN0IGRpcmVudCAqKikgYTsKKyAgICAgICAgZDIgPSAoc3RydWN0IGRpcmVudCAqKikgYjsKKyAgICAgICAgcmV0dXJuIHN0cmNtcCgoKmQxKS0+ZF9uYW1lLCAoKmQyKS0+ZF9uYW1lKTsKK30KKworCitpbnQgc2NhbmRpcihjb25zdCBjaGFyICpkaXIsIHN0cnVjdCBkaXJlbnQgKioqbmFtZWxpc3QsCisgICAgICAgICAgICBpbnQoKmZpbHRlcikoY29uc3Qgc3RydWN0IGRpcmVudCAqKSwKKyAgICAgICAgICAgIGludCgqY29tcGFyKShjb25zdCBzdHJ1Y3QgZGlyZW50ICoqLCBjb25zdCBzdHJ1Y3QgZGlyZW50ICoqKSkKK3sKKyAgICBESVIgKmQ7CisgICAgaW50IG5fZWxlbSA9IDA7CisgICAgc3RydWN0IGRpcmVudCAqdGhpc19kZSwgKmRlOworICAgIHN0cnVjdCBkaXJlbnQgKipkZV9saXN0ID0gTlVMTDsKKyAgICBpbnQgZGVfbGlzdF9zaXplID0gMDsKKworICAgIGQgPSBvcGVuZGlyKGRpcik7CisgICAgaWYgKGQgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgd2hpbGUgKCh0aGlzX2RlID0gcmVhZGRpcihkKSkgIT0gTlVMTCkgeworICAgICAgICBpZiAoZmlsdGVyICYmICgqZmlsdGVyKSh0aGlzX2RlKSA9PSAwKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAobl9lbGVtID09IDApIHsKKyAgICAgICAgICAgIGRlX2xpc3Rfc2l6ZSA9IDQ7CisgICAgICAgICAgICBkZV9saXN0ID0gKHN0cnVjdCBkaXJlbnQgKiopIAorICAgICAgICAgICAgICAgICAgICBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBkaXJlbnQgKikqZGVfbGlzdF9zaXplKTsKKyAgICAgICAgICAgIGlmIChkZV9saXN0ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobl9lbGVtID09IGRlX2xpc3Rfc2l6ZSkgeworICAgICAgICAgICAgc3RydWN0IGRpcmVudCAqKmRlX2xpc3RfbmV3OworCisgICAgICAgICAgICBkZV9saXN0X3NpemUgKz0gMTA7CisgICAgICAgICAgICBkZV9saXN0X25ldyA9IChzdHJ1Y3QgZGlyZW50ICoqKSAKKyAgICAgICAgICAgICAgICAgICAgcmVhbGxvYyhkZV9saXN0LCBzaXplb2Yoc3RydWN0IGRpcmVudCAqKSpkZV9saXN0X3NpemUpOworICAgICAgICAgICAgaWYgKGRlX2xpc3RfbmV3ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBmcmVlKGRlX2xpc3QpOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlX2xpc3QgPSBkZV9saXN0X25ldzsKKyAgICAgICAgfQorICAgICAgICBkZSA9IChzdHJ1Y3QgZGlyZW50ICopIG1hbGxvYyhzaXplb2Yoc3RydWN0IGRpcmVudCkpOworICAgICAgICAqZGUgPSAqdGhpc19kZTsKKyAgICAgICAgZGVfbGlzdFtuX2VsZW0rK10gPSBkZTsKKyAgICB9CisgICAgY2xvc2VkaXIoZCk7CisgICAgaWYgKG5fZWxlbSAmJiBjb21wYXIpIHsKKyAgICAgICAgcXNvcnQoZGVfbGlzdCwgbl9lbGVtLCBzaXplb2Yoc3RydWN0IGRpcmVudCAqKSwgCisgICAgICAgICAgICAgIChpbnQgKCopKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSkgY29tcGFyKTsKKyAgICB9CisgICAgKm5hbWVsaXN0ID0gZGVfbGlzdDsKKyAgICByZXR1cm4gbl9lbGVtOworfQpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvcGF0aGNvbmYuYyBiL2xpYmMvdW5pc3RkL3BhdGhjb25mLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMyZjkxOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdW5pc3RkL3BhdGhjb25mLmMKQEAgLTAsMCArMSwyNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDxwYXRoY29uZi5oPgorI2luY2x1ZGUgPHN5cy92ZnMuaD4KKyNpbmNsdWRlIDxzeXMvbGltaXRzLmg+CisjaW5jbHVkZSA8bGludXgvZXh0Ml9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2V4dDNfZnMuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisvKiB0aGVzZSBtYXkgbm90IGJlIGRlZmluZWQgeWV0IGJ5IG91ciBoZWFkZXJzICovCisjaWZuZGVmIF9QT1NJWF9WRElTQUJMRQorI2RlZmluZSBfUE9TSVhfVkRJU0FCTEUgIC0xCisjZW5kaWYKKworI2lmbmRlZiBfUE9TSVhfU1lOQ19JTworI2RlZmluZSBfUE9TSVhfU1lOQ19JTyAgLTEKKyNlbmRpZgorCisjaWZuZGVmIF9QT1NJWF9QUklPX0lPCisjZGVmaW5lIF9QT1NJWF9QUklPX0lPICAtMQorI2VuZGlmCisKKyNpZm5kZWYgX1BPU0lYX0FTWU5DX0lPCisjZGVmaW5lIF9QT1NJWF9BU1lOQ19JTyAgLTEKKyNlbmRpZgorCisKK3N0YXRpYyBsb25nCitfX2ZpbGVzaXplYml0cyggc3RydWN0IHN0YXRmcyogIHMgKQoreworI2RlZmluZSAgIEVPTF9NQUdJQyAgIDB4MDAwMFUKKworICAgIC8qIGxpc3Qgb2Yga25vd24gNjQtYml0IGF3YXJlIGZpbGVzeXN0ZW1zICovCisgICAgc3RhdGljIGNvbnN0IHVpbnQzMl90ICBrbm93bjY0W10gPSB7CisgICAgICAgIEVYVDJfU1VQRVJfTUFHSUMsCisgICAgICAgIFVGU19NQUdJQywKKyAgICAgICAgUkVJU0VSRlNfU1VQRVJfTUFHSUMsCisgICAgICAgIFhGU19TVVBFUl9NQUdJQywKKyAgICAgICAgU01CX1NVUEVSX01BR0lDLAorICAgICAgICBVREZfU1VQRVJfTUFHSUMsCisgICAgICAgIEpGU19TVVBFUl9NQUdJQywKKyAgICAgICAgTlRGU19TQl9NQUdJQywKKyAgICAgICAgVlhGU19TVVBFUl9NQUdJQywKKyAgICAgICAgRU9MX01BR0lDCisgICAgfTsKKyAgICBpbnQgIG5uID0gMDsKKworICAgIGZvciAoOzspIHsKKyAgICAgICAgaWYgKCBrbm93bjY0W25uXSA9PSBFT0xfTUFHSUMgKQorICAgICAgICAgICAgcmV0dXJuIDMyOworCisgICAgICAgIGlmICgga25vd242NFtubl0gPT0gcy0+Zl90eXBlICkKKyAgICAgICAgICAgIHJldHVybiA2NDsKKyAgICB9Cit9CisKKworc3RhdGljIGxvbmcKK19fbGlua19tYXgoIHN0cnVjdCBzdGF0ZnMqICBzICkKK3sKKyAgIC8qIGNvbnN0YW50IHZhbHVlcyB3ZXJlIHRha2VuIGZyb20gb2ZmaWNpYWwga2VybmVsIGhlYWRlcnMuCisgICAgKiBJIGRvbid0IHRoaW5rIHRoaXMganVzdGlmaWVkIGJyaW5naW5nIGluIDxsaW51eC9taW5peF9mcy5oPiBldCBhbAorICAgICogaW50byBvdXIgY2xlYW5lZC11cCBrZXJuZWwgdGhyZWUKKyAgICAqLworICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeyB1aW50MzJfdCAgdHlwZTsgaW50ICBtYXg7IH0gIGtub3duTWF4W10gPQorICAgIHsKKyAgICAgICAgeyBFWFQyX1NVUEVSX01BR0lDLCBFWFQyX0xJTktfTUFYIH0sCisgICAgICAgIHsgRVhUM19TVVBFUl9NQUdJQywgRVhUM19MSU5LX01BWCB9LAorICAgICAgICB7IE1JTklYX1NVUEVSX01BR0lDLCAyNTAgfSwKKyAgICAgICAgeyBNSU5JWDJfU1VQRVJfTUFHSUMsIDY1NTMwIH0sCisgICAgICAgIHsgUkVJU0VSRlNfU1VQRVJfTUFHSUMsIDB4ZmZmZiAtIDEwMDAgfSwKKyAgICAgICAgeyBVRlNfTUFHSUMsIDMyMDAwIH0sCisgICAgICAgIHsgRU9MX01BR0lDLCAwIH0KKyAgICB9OworICAgIGludCAgIG5uID0gMDsKKworICAgIGZvciAoOzspIHsKKyAgICAgICAgaWYgKCBrbm93bk1heFtubl0udHlwZSA9PSBFT0xfTUFHSUMgKQorICAgICAgICAgICAgcmV0dXJuIExJTktfTUFYOworCisgICAgICAgIGlmICgga25vd25NYXhbbm5dLnR5cGUgPT0gcy0+Zl90eXBlICkKKyAgICAgICAgICAgIHJldHVybiBrbm93bk1heFtubl0ubWF4OworICAgIH0KKyAgICByZXR1cm4gTElOS19NQVg7Cit9CisKK3N0YXRpYyBsb25nCitfXzJfc3ltbGlua3MoIHN0cnVjdCBzdGF0ZnMqICBzICkKK3sKKyAgICAvKiBsaXN0IG9mIGtub3cgZmlsZXN5c3RlbXMgdGhhdCBkb24ndCBzdXBwb3J0IHN5bWxpbmtzICovCisgICAgc3RhdGljIGNvbnN0IHVpbnQzMl90ICBrbm93bk5vU3ltbGlua3NbXSA9IHsKKyAgICAgICAgQURGU19TVVBFUl9NQUdJQywgQkZTX01BR0lDLCBDUkFNRlNfTUFHSUMsCisgICAgICAgIEVGU19TVVBFUl9NQUdJQywgTVNET1NfU1VQRVJfTUFHSUMsIE5URlNfU0JfTUFHSUMsCisgICAgICAgIFFOWDRfU1VQRVJfTUFHSUMsCisgICAgICAgIEVPTF9NQUdJQworICAgIH07CisgICAgaW50ICBubiA9IDA7CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGlmIChrbm93bk5vU3ltbGlua3Nbbm5dID09IDApCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgaWYgKGtub3duTm9TeW1saW5rc1tubl0gPT0gcy0+Zl90eXBlKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitzdGF0aWMgbG9uZworX19uYW1lX21heCggc3RydWN0IHN0YXRmcyogIHMgKQoreworICAgIHJldHVybiBzLT5mX25hbWVsZW47Cit9CisKK2xvbmcKK3BhdGhjb25mKGNvbnN0IGNoYXIgKnBhdGgsIGludCBuYW1lKQoreworICAgIHN0cnVjdCBzdGF0ZnMgIGJ1ZjsKKyAgICBpbnQgICAgICAgICAgICByZXQgPSBzdGF0ZnMoIHBhdGgsICZidWYgKTsKKworICAgIGlmIChyZXQgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBzd2l0Y2ggKG5hbWUpIHsKKyAgICBjYXNlIF9QQ19GSUxFU0laRUJJVFM6CisgICAgICAgIHJldHVybiBfX2ZpbGVzaXplYml0cygmYnVmKTsKKworICAgIGNhc2UgX1BDX0xJTktfTUFYOgorICAgICAgICByZXR1cm4gX19saW5rX21heCgmYnVmKTsKKworICAgIGNhc2UgX1BDX01BWF9DQU5PTjoKKyAgICAgICAgcmV0dXJuIE1BWF9DQU5PTjsKKworICAgIGNhc2UgX1BDX01BWF9JTlBVVDoKKyAgICAgICAgcmV0dXJuIE1BWF9JTlBVVDsKKworICAgIGNhc2UgX1BDX05BTUVfTUFYOgorICAgICAgICByZXR1cm4gX19uYW1lX21heCgmYnVmKTsKKworICAgIGNhc2UgX1BDX1BBVEhfTUFYOgorICAgICAgICByZXR1cm4gUEFUSF9NQVg7CisKKyAgICBjYXNlIF9QQ19QSVBFX0JVRjoKKyAgICAgICAgcmV0dXJuIFBJUEVfQlVGOworCisgICAgY2FzZSBfUENfMl9TWU1MSU5LUzoKKyAgICAgICAgcmV0dXJuIF9fMl9zeW1saW5rcygmYnVmKTsKKworI2lmIDAgIC8qIGRvbid0IGtub3cgd2hhdCB0byBkbyB0aGVyZSwgdGhlIHNwZWNzIGFyZSByZWFsbHkgd2VpcmQgKi8KKyAgICBjYXNlIF9QQ19BTExPQ19TSVpFX01JTjoKKyAgICBjYXNlIF9QQ19SRUNfSU5DUl9YRkVSX1NJWkU6CisgICAgY2FzZSBfUENfUkVDX01BWF9YRkVSX1NJWkU6CisgICAgY2FzZSBfUENfUkVDX01JTl9YRkVSX1NJWkU6CisgICAgY2FzZSBfUENfUkVDX1hGRVJfQUxJR046CisjZW5kaWYKKworICAgIGNhc2UgX1BDX1NZTUxJTktfTUFYOgorICAgICAgICByZXR1cm4gLTE7ICAvKiBubyBsaW1pdCAqLworCisgICAgY2FzZSBfUENfQ0hPV05fUkVTVFJJQ1RFRDoKKyAgICAgICAgcmV0dXJuIF9QT1NJWF9DSE9XTl9SRVNUUklDVEVEOworCisgICAgY2FzZSBfUENfTk9fVFJVTkM6CisgICAgICAgIHJldHVybiBfUE9TSVhfTk9fVFJVTkM7CisKKyAgICBjYXNlIF9QQ19WRElTQUJMRToKKyAgICAgICAgcmV0dXJuIF9QT1NJWF9WRElTQUJMRTsKKworICAgIGNhc2UgX1BDX0FTWU5DX0lPOgorICAgICAgICByZXR1cm4gX1BPU0lYX0FTWU5DX0lPOworCisgICAgY2FzZSBfUENfUFJJT19JTzoKKyAgICAgICAgcmV0dXJuIF9QT1NJWF9QUklPX0lPOworCisgICAgY2FzZSBfUENfU1lOQ19JTzoKKyAgICAgICAgcmV0dXJuIF9QT1NJWF9TWU5DX0lPOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgZXJybm8gPSBFSU5WQUw7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9Cit9CisKK2xvbmcgZnBhdGhjb25mKGludCBmaWxkZXMsIGludCBuYW1lKQoreworICAgIHN0cnVjdCBzdGF0ZnMgIGJ1ZjsKKyAgICBpbnQgICAgICAgICAgICByZXQgPSBmc3RhdGZzKGZpbGRlcywgJmJ1Zik7CisKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgc3dpdGNoIChuYW1lKSB7CisgICAgY2FzZSBfUENfRklMRVNJWkVCSVRTOgorICAgICAgICByZXR1cm4gX19maWxlc2l6ZWJpdHMoJmJ1Zik7CisKKyAgICBjYXNlIF9QQ19MSU5LX01BWDoKKyAgICAgICAgcmV0dXJuIF9fbGlua19tYXgoJmJ1Zik7CisKKyAgICBjYXNlIF9QQ19NQVhfQ0FOT046CisgICAgICAgIHJldHVybiBNQVhfQ0FOT047CisKKyAgICBjYXNlIF9QQ19NQVhfSU5QVVQ6CisgICAgICAgIHJldHVybiBNQVhfSU5QVVQ7CisKKyAgICBjYXNlIF9QQ19OQU1FX01BWDoKKyAgICAgICAgcmV0dXJuIF9fbmFtZV9tYXgoJmJ1Zik7CisKKyAgICBjYXNlIF9QQ19QQVRIX01BWDoKKyAgICAgICAgcmV0dXJuIFBBVEhfTUFYOworCisgICAgY2FzZSBfUENfUElQRV9CVUY6CisgICAgICAgIHJldHVybiBQSVBFX0JVRjsKKworICAgIGNhc2UgX1BDXzJfU1lNTElOS1M6CisgICAgICAgIHJldHVybiBfXzJfc3ltbGlua3MoJmJ1Zik7CisKKyNpZiAwICAvKiBkb24ndCBrbm93IHdoYXQgdG8gZG8gdGhlcmUsIHRoZSBzcGVjcyBhcmUgcmVhbGx5IHdlaXJkICovCisgICAgY2FzZSBfUENfQUxMT0NfU0laRV9NSU46CisgICAgY2FzZSBfUENfUkVDX0lOQ1JfWEZFUl9TSVpFOgorICAgIGNhc2UgX1BDX1JFQ19NQVhfWEZFUl9TSVpFOgorICAgIGNhc2UgX1BDX1JFQ19NSU5fWEZFUl9TSVpFOgorICAgIGNhc2UgX1BDX1JFQ19YRkVSX0FMSUdOOgorI2VuZGlmCisKKyAgICBjYXNlIF9QQ19TWU1MSU5LX01BWDoKKyAgICAgICAgcmV0dXJuIC0xOyAgLyogbm8gbGltaXQgKi8KKworICAgIGNhc2UgX1BDX0NIT1dOX1JFU1RSSUNURUQ6CisgICAgICAgIHJldHVybiBfUE9TSVhfQ0hPV05fUkVTVFJJQ1RFRDsKKworICAgIGNhc2UgX1BDX05PX1RSVU5DOgorICAgICAgICByZXR1cm4gX1BPU0lYX05PX1RSVU5DOworCisgICAgY2FzZSBfUENfVkRJU0FCTEU6CisgICAgICAgIHJldHVybiBfUE9TSVhfVkRJU0FCTEU7CisKKyAgICBjYXNlIF9QQ19BU1lOQ19JTzoKKyAgICAgICAgcmV0dXJuIF9QT1NJWF9BU1lOQ19JTzsKKworICAgIGNhc2UgX1BDX1BSSU9fSU86CisgICAgICAgIHJldHVybiBfUE9TSVhfUFJJT19JTzsKKworICAgIGNhc2UgX1BDX1NZTkNfSU86CisgICAgICAgIHJldHVybiBfUE9TSVhfU1lOQ19JTzsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvcGVycm9yLmMgYi9saWJjL3VuaXN0ZC9wZXJyb3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTU1ZjcyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91bmlzdGQvcGVycm9yLmMKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK3ZvaWQgcGVycm9yKGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKyAgICBjaGFyICAgYnVmZlsyNTZdOworCisgICAgc3RyZXJyb3JfciggZXJybm8sIGJ1ZmYsIHNpemVvZihidWZmKSApOworCisgICAgaWYgKHByZWZpeCkgeworICAgICAgICB3cml0ZSggMiwgcHJlZml4LCBzdHJsZW4ocHJlZml4KSApOworICAgICAgICB3cml0ZSggMiwgIjogIiwgMiApOworICAgIH0KKyAgICB3cml0ZSggMiwgYnVmZiwgc3RybGVuKGJ1ZmYpICk7CisgICAgd3JpdGUoIDIsICJcbiIsIDEgKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL3BvcGVuLmMgYi9saWJjL3VuaXN0ZC9wb3Blbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1ZjgzMjUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3VuaXN0ZC9wb3Blbi5jCkBAIC0wLDAgKzEsMTY3IEBACisvKgkkT3BlbkJTRDogcG9wZW4uYyx2IDEuMTcgMjAwNS8wOC8wOCAwODowNTozNCBlc3BpZSBFeHAgJCAqLworLyoKKyAqIENvcHlyaWdodCAoYykgMTk4OCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSB3cml0dGVuIGJ5IEtlbiBBcm5vbGQgYW5kCisgKiBwdWJsaXNoZWQgaW4gVU5JWCBSZXZpZXcsIFZvbC4gNiwgTm8uIDguCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgorCisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHBhdGhzLmg+CisKK3N0YXRpYyBzdHJ1Y3QgcGlkIHsKKwlzdHJ1Y3QgcGlkICpuZXh0OworCUZJTEUgKmZwOworCXBpZF90IHBpZDsKK30gKnBpZGxpc3Q7CisKK0ZJTEUgKgorcG9wZW4oY29uc3QgY2hhciAqcHJvZ3JhbSwgY29uc3QgY2hhciAqdHlwZSkKK3sKKwlzdHJ1Y3QgcGlkICogdm9sYXRpbGUgY3VyOworCUZJTEUgKmlvcDsKKwlpbnQgcGRlc1syXTsKKwlwaWRfdCBwaWQ7CisKKwlpZiAoKCp0eXBlICE9ICdyJyAmJiAqdHlwZSAhPSAndycpIHx8IHR5cGVbMV0gIT0gJ1wwJykgeworCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisKKwlpZiAoKGN1ciA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IHBpZCkpKSA9PSBOVUxMKQorCQlyZXR1cm4gKE5VTEwpOworCisJaWYgKHBpcGUocGRlcykgPCAwKSB7CisJCWZyZWUoY3VyKTsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisKKwlzd2l0Y2ggKHBpZCA9IHZmb3JrKCkpIHsKKwljYXNlIC0xOgkJCS8qIEVycm9yLiAqLworCQkodm9pZCljbG9zZShwZGVzWzBdKTsKKwkJKHZvaWQpY2xvc2UocGRlc1sxXSk7CisJCWZyZWUoY3VyKTsKKwkJcmV0dXJuIChOVUxMKTsKKwkJLyogTk9UUkVBQ0hFRCAqLworCWNhc2UgMDoJCQkJLyogQ2hpbGQuICovCisJICAgIHsKKwkJc3RydWN0IHBpZCAqcGN1cjsKKwkJLyoKKwkJICogYmVjYXVzZSB2Zm9yaygpIGluc3RlYWQgb2YgZm9yaygpLCBtdXN0IGxlYWsgRklMRSAqLAorCQkgKiBidXQgbHVja2lseSB3ZSBhcmUgdGVybWluYWxseSBoZWFkZWQgZm9yIGFuIGV4ZWNsKCkKKwkJICovCisJCWZvciAocGN1ciA9IHBpZGxpc3Q7IHBjdXI7IHBjdXIgPSBwY3VyLT5uZXh0KQorCQkJY2xvc2UoZmlsZW5vKHBjdXItPmZwKSk7CisKKwkJaWYgKCp0eXBlID09ICdyJykgeworCQkJaW50IHRwZGVzMSA9IHBkZXNbMV07CisKKwkJCSh2b2lkKSBjbG9zZShwZGVzWzBdKTsKKwkJCS8qCisJCQkgKiBXZSBtdXN0IE5PVCBtb2RpZnkgcGRlcywgZHVlIHRvIHRoZQorCQkJICogc2VtYW50aWNzIG9mIHZmb3JrLgorCQkJICovCisJCQlpZiAodHBkZXMxICE9IFNURE9VVF9GSUxFTk8pIHsKKwkJCQkodm9pZClkdXAyKHRwZGVzMSwgU1RET1VUX0ZJTEVOTyk7CisJCQkJKHZvaWQpY2xvc2UodHBkZXMxKTsKKwkJCQl0cGRlczEgPSBTVERPVVRfRklMRU5POworCQkJfQorCQl9IGVsc2UgeworCQkJKHZvaWQpY2xvc2UocGRlc1sxXSk7CisJCQlpZiAocGRlc1swXSAhPSBTVERJTl9GSUxFTk8pIHsKKwkJCQkodm9pZClkdXAyKHBkZXNbMF0sIFNURElOX0ZJTEVOTyk7CisJCQkJKHZvaWQpY2xvc2UocGRlc1swXSk7CisJCQl9CisJCX0KKwkJZXhlY2woX1BBVEhfQlNIRUxMLCAic2giLCAiLWMiLCBwcm9ncmFtLCAoY2hhciAqKU5VTEwpOworCQlfZXhpdCgxMjcpOworCQkvKiBOT1RSRUFDSEVEICovCisJICAgIH0KKwl9CisKKwkvKiBQYXJlbnQ7IGFzc3VtZSBmZG9wZW4gY2FuJ3QgZmFpbC4gKi8KKwlpZiAoKnR5cGUgPT0gJ3InKSB7CisJCWlvcCA9IGZkb3BlbihwZGVzWzBdLCB0eXBlKTsKKwkJKHZvaWQpY2xvc2UocGRlc1sxXSk7CisJfSBlbHNlIHsKKwkJaW9wID0gZmRvcGVuKHBkZXNbMV0sIHR5cGUpOworCQkodm9pZCljbG9zZShwZGVzWzBdKTsKKwl9CisKKwkvKiBMaW5rIGludG8gbGlzdCBvZiBmaWxlIGRlc2NyaXB0b3JzLiAqLworCWN1ci0+ZnAgPSBpb3A7CisJY3VyLT5waWQgPSAgcGlkOworCWN1ci0+bmV4dCA9IHBpZGxpc3Q7CisJcGlkbGlzdCA9IGN1cjsKKworCXJldHVybiAoaW9wKTsKK30KKworLyoKKyAqIHBjbG9zZSAtLQorICoJUGNsb3NlIHJldHVybnMgLTEgaWYgc3RyZWFtIGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggYSBgcG9wZW5lZCcgY29tbWFuZCwKKyAqCWlmIGFscmVhZHkgYHBjbG9zZWQnLCBvciB3YWl0cGlkIHJldHVybnMgYW4gZXJyb3IuCisgKi8KK2ludAorcGNsb3NlKEZJTEUgKmlvcCkKK3sKKwlzdHJ1Y3QgcGlkICpjdXIsICpsYXN0OworCWludCBwc3RhdDsKKwlwaWRfdCBwaWQ7CisKKwkvKiBGaW5kIHRoZSBhcHByb3ByaWF0ZSBmaWxlIHBvaW50ZXIuICovCisJZm9yIChsYXN0ID0gTlVMTCwgY3VyID0gcGlkbGlzdDsgY3VyOyBsYXN0ID0gY3VyLCBjdXIgPSBjdXItPm5leHQpCisJCWlmIChjdXItPmZwID09IGlvcCkKKwkJCWJyZWFrOworCisJaWYgKGN1ciA9PSBOVUxMKQorCQlyZXR1cm4gKC0xKTsKKworCSh2b2lkKWZjbG9zZShpb3ApOworCisJZG8geworCQlwaWQgPSB3YWl0cGlkKGN1ci0+cGlkLCAmcHN0YXQsIDApOworCX0gd2hpbGUgKHBpZCA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUik7CisKKwkvKiBSZW1vdmUgdGhlIGVudHJ5IGZyb20gdGhlIGxpbmtlZCBsaXN0LiAqLworCWlmIChsYXN0ID09IE5VTEwpCisJCXBpZGxpc3QgPSBjdXItPm5leHQ7CisJZWxzZQorCQlsYXN0LT5uZXh0ID0gY3VyLT5uZXh0OworCWZyZWUoY3VyKTsKKworCXJldHVybiAocGlkID09IC0xID8gLTEgOiBwc3RhdCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9wcmVhZC5jIGIvbGliYy91bmlzdGQvcHJlYWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmY3MWY3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91bmlzdGQvcHJlYWQuYwpAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyAqICAgICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCitleHRlcm4gaW50IF9fcHJlYWQ2NChpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IG5ieXRlcywgb2ZmX3QgbG8sIG9mZl90IGhpKTsKKworc3NpemVfdCBwcmVhZChpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IG5ieXRlcywgb2ZmX3Qgb2Zmc2V0KQoreworICAgIHJldHVybiBfX3ByZWFkNjQoZmQsIGJ1ZiwgbmJ5dGVzLCBvZmZzZXQsIDApOworfQorCmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9wc2VsZWN0LmMgYi9saWJjL3VuaXN0ZC9wc2VsZWN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZjZTJjMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdW5pc3RkL3BzZWxlY3QuYwpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHB0aHJlYWQuaD4KKworaW50Citwc2VsZWN0KGludCAgbiwgZmRfc2V0KiAgcmVhZGZkcywgZmRfc2V0KiAgd3JpdGVmZHMsIGZkX3NldCogIGVycmZkcywKKyAgICAgICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjKiAgdGltZW91dCwgY29uc3Qgc2lnc2V0X3QqICBzaWdtYXNrKQoreworICAgIHNpZ3NldF90ICAgICAgICBvbGRtYXNrOworICAgIGludCAgICAgICAgICAgICByZXN1bHQ7CisgICAgc3RydWN0IHRpbWV2YWwgIHR2LCAqdHZfdGltZW91dCA9IE5VTEw7CisKKyAgICBpZiAoc2lnbWFzayAhPSBOVUxMKQorICAgICAgICBwdGhyZWFkX3NpZ21hc2soIFNJR19TRVRNQVNLLCBzaWdtYXNrLCAmb2xkbWFzayApOworCisgICAgaWYgKHRpbWVvdXQgIT0gTlVMTCkgeworICAgICAgICB0dl90aW1lb3V0ID0gJnR2OworICAgICAgICB0di50dl9zZWMgID0gdGltZW91dC0+dHZfc2VjOworICAgICAgICB0di50dl91c2VjID0gKHRpbWVvdXQtPnR2X25zZWMgKyA5OTkpLzEwMDA7ICAvLyByb3VuZCB1cAorICAgICAgICBpZiAodHYudHZfdXNlYyA+PSAxMDAwMDAwKSB7CisgICAgICAgICAgICB0di50dl9zZWMgICs9IDE7CisgICAgICAgICAgICB0di50dl91c2VjIC09IDEwMDAwMDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXN1bHQgPSBzZWxlY3QoIG4sIHJlYWRmZHMsIHdyaXRlZmRzLCBlcnJmZHMsIHR2X3RpbWVvdXQgKTsKKworICAgIGlmIChzaWdtYXNrICE9IE5VTEwpCisgICAgICAgIHB0aHJlYWRfc2lnbWFzayggU0lHX1NFVE1BU0ssICZvbGRtYXNrLCBOVUxMICk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvcHRzbmFtZS5jIGIvbGliYy91bmlzdGQvcHRzbmFtZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0ZDVkMzAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3VuaXN0ZC9wdHNuYW1lLmMKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8dGVybWlvcy5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorCisvKiBub3QgdGhyZWFkLXNhZmUgKi8KK2NoYXIqICBwdHNuYW1lKCBpbnQgZmQgKQoreworICAgIHVuc2lnbmVkIGludCAgcHR5X251bTsKKyAgICBzdGF0aWMgY2hhciAgIGJ1ZmZbNjRdOworCisgICAgaWYgKCBpb2N0bCggZmQsIFRJT0NHUFROLCAmcHR5X251bSApICE9IDAgKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHNucHJpbnRmKCBidWZmLCBzaXplb2YoYnVmZiksICIvZGV2L3B0cy8ldSIsIHB0eV9udW0gKTsKKyAgICByZXR1cm4gYnVmZjsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL3B0c25hbWVfci5jIGIvbGliYy91bmlzdGQvcHRzbmFtZV9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVkMDY3YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdW5pc3RkL3B0c25hbWVfci5jCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHRlcm1pb3MuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCitjaGFyKiAgcHRzbmFtZV9yKCBpbnQgIGZkLCBjaGFyKiAgYnVmLCBzaXplX3QgIGJ1ZmxlbikKK3sKKyAgICB1bnNpZ25lZCBpbnQgIHB0eV9udW07CisgICAgY2hhciAgICAgICAgICBidWZmWzY0XTsKKyAgICBpbnQgICAgICAgICAgIGxlbjsKKworICAgIGlmIChidWYgPT0gTlVMTCkgeworICAgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKCBpb2N0bCggZmQsIFRJT0NHUFROLCAmcHR5X251bSApICE9IDAgKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGxlbiA9IHNucHJpbnRmKCBidWZmLCBzaXplb2YoYnVmZiksICIvZGV2L3B0cy8ldSIsIHB0eV9udW0gKTsKKyAgICBpZiAobGVuKzEgPiAoaW50KWJ1ZmxlbikgeworICAgICAgICBlcnJubyA9IEVSQU5HRTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIG1lbWNweSggYnVmLCBidWZmLCBsZW4rMSApOworICAgIHJldHVybiBidWY7Cit9CmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9wd3JpdGUuYyBiL2xpYmMvdW5pc3RkL3B3cml0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhZGY0MGEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3VuaXN0ZC9wd3JpdGUuYwpAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKK2V4dGVybiBpbnQgX19wd3JpdGU2NChpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IG5ieXRlcywgb2ZmX3QgbG8sIG9mZl90IGhpKTsKKworc3NpemVfdCBwd3JpdGUoaW50IGZkLCB2b2lkICpidWYsIHNpemVfdCBuYnl0ZXMsIG9mZl90IG9mZnNldCkKK3sKKyAgICByZXR1cm4gX19wd3JpdGU2NChmZCwgYnVmLCBuYnl0ZXMsIG9mZnNldCwgMCk7Cit9CisKZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL3JhaXNlLmMgYi9saWJjL3VuaXN0ZC9yYWlzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMDk5ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3VuaXN0ZC9yYWlzZS5jCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKworaW50IHJhaXNlKGludCBzaWdudW0pCit7CisgICAgcmV0dXJuIGtpbGwoZ2V0cGlkKCksIHNpZ251bSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9yZWJvb3QuYyBiL2xpYmMvdW5pc3RkL3JlYm9vdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmZThjZGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3VuaXN0ZC9yZWJvb3QuYwpAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL3JlYm9vdC5oPgorCitpbnQgcmVib290IChpbnQgIG1vZGUpIAoreworICAgIHJldHVybiBfX3JlYm9vdCggTElOVVhfUkVCT09UX01BR0lDMSwgTElOVVhfUkVCT09UX01BR0lDMiwgbW9kZSwgTlVMTCApOworfQpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvcmVjdi5jIGIvbGliYy91bmlzdGQvcmVjdi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3OWQ3ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3VuaXN0ZC9yZWN2LmMKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKworc3NpemVfdCByZWN2KGludCBzb2NrZXQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbiwgdW5zaWduZWQgaW50IGZsYWdzKQoreworICAgIHJldHVybiByZWN2ZnJvbShzb2NrZXQsIGJ1ZiwgYnVmbGVuLCBmbGFncywgTlVMTCwgMCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9zYnJrLmMgYi9saWJjL3VuaXN0ZC9zYnJrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTExMmI2YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdW5pc3RkL3NicmsuYwpAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworCisjZGVmaW5lICBTQlJLX0FMSUdOICAzMgorCisvKiBzaGFyZWQgd2l0aCBicmsoKSBpbXBsZW1lbnRhdGlvbiAqLworY2hhciogICBfX2Jpb25pY19icms7CisKK3ZvaWQgKnNicmsocHRyZGlmZl90IGluY3JlbWVudCkKK3sKKyAgICBjaGFyKiAgc3RhcnQ7CisgICAgY2hhciogIGVuZDsKKyAgICBjaGFyKiAgbmV3X2JyazsKKyAgCisgICAgaWYgKCAhX19iaW9uaWNfYnJrKQorICAgICAgICBfX2Jpb25pY19icmsgPSBfX2Jyaygodm9pZCopMCk7CisKKyAgICBzdGFydCA9IChjaGFyKikoKChsb25nKV9fYmlvbmljX2JyayArIFNCUktfQUxJR04tMSkgJiB+KFNCUktfQUxJR04tMSkpOworICBlbmQgICA9IHN0YXJ0ICsgaW5jcmVtZW50OworCisgIG5ld19icmsgPSBfX2JyayhlbmQpOworICAgIGlmIChuZXdfYnJrID09ICh2b2lkKiktMSkKKyAgICAgICAgcmV0dXJuIG5ld19icms7CisgICAgZWxzZSBpZiAobmV3X2JyayA8IGVuZCkKKyAgICB7CisgICAgZXJybm8gPSBFTk9NRU07CisgICAgICAgIHJldHVybiAodm9pZCopLTE7CisgIH0KKworICAgIF9fYmlvbmljX2JyayA9IG5ld19icms7CisgIHJldHVybiBzdGFydDsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL3NlbmQuYyBiL2xpYmMvdW5pc3RkL3NlbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTc4Zjk4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91bmlzdGQvc2VuZC5jCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisKK3NzaXplX3Qgc2VuZChpbnQgc29ja2V0LCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBidWZsZW4sIHVuc2lnbmVkIGludCBmbGFncykKK3sKKyAgICByZXR1cm4gKHNzaXplX3QpIHNlbmR0byhzb2NrZXQsIGJ1ZiwgYnVmbGVuLCBmbGFncywgTlVMTCwgMCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9zZXRlZ2lkLmMgYi9saWJjL3VuaXN0ZC9zZXRlZ2lkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJkNjk3YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdW5pc3RkL3NldGVnaWQuYwpAQCAtMCwwICsxLDMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8dW5pc3RkLmg+CisKK2ludCBzZXRlZ2lkKGdpZF90IGVnaWQpCit7CisgICAgcmV0dXJuIHNldHJlc2dpZCgtMSwgZWdpZCwgLTEpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvc2V0ZXVpZC5jIGIvbGliYy91bmlzdGQvc2V0ZXVpZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyZWU3ODAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3VuaXN0ZC9zZXRldWlkLmMKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHVuaXN0ZC5oPgorCitpbnQgc2V0ZXVpZCh1aWRfdCBldWlkKQoreworICAgIHJldHVybiBzZXRyZXN1aWQoLTEsIGV1aWQsLTEpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvc2V0cGdycC5jIGIvbGliYy91bmlzdGQvc2V0cGdycC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkZmY4MjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3VuaXN0ZC9zZXRwZ3JwLmMKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHVuaXN0ZC5oPgorCitpbnQgc2V0cGdycCh2b2lkKQoreworICByZXR1cm4gc2V0cGdpZCgwLDApOworfQpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvc2lnYmxvY2suYyBiL2xpYmMvdW5pc3RkL3NpZ2Jsb2NrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYzZDdkYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdW5pc3RkL3NpZ2Jsb2NrLmMKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHNpZ25hbC5oPgorCisvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRoZSBBUk0gYXNzZW1ibHkgc2V0am1wIGZyYWdtZW50cyAqLworaW50CitzaWdibG9jayhpbnQgbWFzaykKK3sKKyAgICBpbnQgIG47CisgICAgdW5pb24geworICAgICAgICBpbnQgICAgICAgdGhlX21hc2s7CisgICAgICAgIHNpZ3NldF90ICB0aGVfc2lnc2V0OworICAgIH0gaW4sIG91dDsKKworICAgIGluLnRoZV9tYXNrID0gbWFzazsKKworICAgIG4gPSBzaWdwcm9jbWFzayhTSUdfQkxPQ0ssICZpbi50aGVfc2lnc2V0LCAmb3V0LnRoZV9zaWdzZXQpOworICAgIGlmIChuKQorICAgICAgICByZXR1cm4gbjsKKworICAgIHJldHVybiBvdXQudGhlX21hc2s7Cit9CisKKwpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvc2lnaW50ZXJydXB0LmMgYi9saWJjL3VuaXN0ZC9zaWdpbnRlcnJ1cHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTkxZWRiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91bmlzdGQvc2lnaW50ZXJydXB0LmMKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c2lnbmFsLmg+CisKKy8qIHRoaXMgaXMgb25seSB1c2VmdWwgZm9yIGxlZ2FjeSBwcm9ncmFtcyAqLworaW50IHNpZ2ludGVycnVwdChpbnQgc2lnLCBpbnQgZmxhZykgCit7CisgICAgc3RydWN0IHNpZ2FjdGlvbiBhY3Q7CisKKyAgICAodm9pZCkgc2lnYWN0aW9uKHNpZywgTlVMTCwgJmFjdCk7CisKKyAgICBpZiAoZmxhZykKKyAgICAgICAgYWN0LnNhX2ZsYWdzICY9IH5TQV9SRVNUQVJUOworICAgIGVsc2UKKyAgICAgICAgYWN0LnNhX2ZsYWdzIHw9IFNBX1JFU1RBUlQ7CisKKyAgICByZXR1cm4gc2lnYWN0aW9uKHNpZywgJmFjdCwgTlVMTCk7Cit9CisKZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL3NpZ2xpc3QuYyBiL2xpYmMvdW5pc3RkL3NpZ2xpc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmFjOWZlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91bmlzdGQvc2lnbGlzdC5jCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDxzaWduYWwuaD4KKworY29uc3QgY2hhciAqIGNvbnN0IHN5c19zaWdsaXN0W05TSUddID0geworI2RlZmluZSAgX19CSU9OSUNfU0lHREVGKHgseSx6KSAgIFsgeCBdID0geiwKKyNpbmNsdWRlIDxzeXMvX3NpZ2RlZnMuaD4KK307CmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9zaWduYWwuYyBiL2xpYmMvdW5pc3RkL3NpZ25hbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0OWRiMTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3VuaXN0ZC9zaWduYWwuYwpAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8c2lnbmFsLmg+CisKKworc3RhdGljIF9fc2lnaGFuZGxlcl90Citfc2lnbmFsKGludCAgc2lnbnVtLCBfX3NpZ2hhbmRsZXJfdCAgaGFuZGxlciwgaW50ICBmbGFncykKK3sKKyAgICBzdHJ1Y3Qgc2lnYWN0aW9uICBzYTsKKyAgICBfX3NpZ2hhbmRsZXJfdCAgICByZXN1bHQgPSBTSUdfRVJSOworCisgICAgc2lnZW1wdHlzZXQoICZzYS5zYV9tYXNrICk7CisKKyAgICBzYS5zYV9oYW5kbGVyID0gaGFuZGxlcjsKKyAgICBzYS5zYV9mbGFncyAgID0gZmxhZ3M7CisKKyAgICBpZiAoICFzaWdhY3Rpb24oIHNpZ251bSwgJnNhLCAmc2EgKSApCisgICAgICAgIHJlc3VsdCA9IChfX3NpZ2hhbmRsZXJfdCkgc2Euc2FfaGFuZGxlcjsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKworX19zaWdoYW5kbGVyX3QgYnNkX3NpZ25hbChpbnQgc2lnbnVtLCBfX3NpZ2hhbmRsZXJfdCBoYW5kbGVyKQoreworICByZXR1cm4gX3NpZ25hbChzaWdudW0sIGhhbmRsZXIsIFNBX1JFU1RBUlQpOworfQorCitfX3NpZ2hhbmRsZXJfdCBzeXN2X3NpZ25hbChpbnQgc2lnbnVtLCBfX3NpZ2hhbmRsZXJfdCBoYW5kbGVyKQoreworICByZXR1cm4gX3NpZ25hbChzaWdudW0sIGhhbmRsZXIsIFNBX1JFU0VUSEFORCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9zaWdzZXRtYXNrLmMgYi9saWJjL3VuaXN0ZC9zaWdzZXRtYXNrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk4NzU5NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdW5pc3RkL3NpZ3NldG1hc2suYwpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8c2lnbmFsLmg+CisKKy8qIGNhbGxlZCBmcm9tIHNldGptcCBhc3NlbWJseSBmcmFnbWVudCAqLworaW50CitzaWdzZXRtYXNrKGludCBtYXNrKQoreworICAgIGludCAgbjsKKworICAgIHVuaW9uIHsKKyAgICAgICAgaW50ICAgICAgIHRoZV9tYXNrOworICAgICAgICBzaWdzZXRfdCAgdGhlX3NpZ3NldDsKKyAgICB9IGluLCBvdXQ7CisKKyAgICBuID0gc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZpbi50aGVfc2lnc2V0LCAmb3V0LnRoZV9zaWdzZXQpOworICAgIGlmIChuKQorICAgICAgICByZXR1cm4gbjsKKworICAgIHJldHVybiBvdXQudGhlX21hc2s7Cit9CisKZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL3NpZ3N1c3BlbmQuYyBiL2xpYmMvdW5pc3RkL3NpZ3N1c3BlbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGIwNWVkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91bmlzdGQvc2lnc3VzcGVuZC5jCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDxzaWduYWwuaD4KKworZXh0ZXJuIGludCBfX3NpZ3N1c3BlbmQoaW50LCBpbnQsIHVuc2lnbmVkIGludCk7CisKK2ludCBzaWdzdXNwZW5kKGNvbnN0IHNpZ3NldF90ICpfbWFzaykKK3sKKyAgICB1bnNpZ25lZCBpbnQgICAgbWFzayA9ICh1bnNpZ25lZCBpbnQpKl9tYXNrOworCisJcmV0dXJuIF9fc2lnc3VzcGVuZCgwLCAwLCBtYXNrKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL3NpZ3dhaXQuYyBiL2xpYmMvdW5pc3RkL3NpZ3dhaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWMyYTU0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91bmlzdGQvc2lnd2FpdC5jCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKworaW50IF9fcnRfc2lndGltZWR3YWl0KGNvbnN0IHNpZ3NldF90ICp1dGhlc2UsIHNpZ2luZm9fdCAqdWluZm8sIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqdXRzLCBzaXplX3Qgc2lnc2V0c2l6ZSk7CisKKy8qIG9rLCB0aGlzIGlzIHJlYWxseSBzdWJ0bGU6IDxhc20vc2lnbmFsLmg+IGRlZmluZXMgc2lnc2V0X3QgZGlmZmVyZW50bHkKKyAqIHdoZW4geW91J3JlIGluIHRoZSBrZXJuZWwgb3IgaW4gdGhlIEMgbGlicmFyeS4KKyAqCisgKiBpbiB0aGUga2VybmVsLCB0aGlzIGlzIGFuIGFycmF5IG9mIDIgMzItYml0IHVuc2lnbmVkIGxvbmdzCisgKiBpbiB0aGUgQyBsaWJyYXJ5LCB0aGlzIGlzIGEgc2luZ2xlIDMyLWJpdCB1bnNpZ25lZCBsb25nCisgKgorICogbW9yZW92ZXIsIHRoZSBrZXJuZWwgaW1wbGVtZW50YXRpb24gb2YgcnRfc2lndGltZWR3YWl0IGRvZXNuJ3QKKyAqIGFjY2VwdCBhbnl0aGluZyBleGNlcHQga2VybmVsLXNpemVkIHNpZ25hbCBzZXRzIChwcm9iYWJseSBhIGJ1ZyAhKQorICoKKyAqIHdlIHRodXMgbmVlZCB0byBjcmVhdGUgYSBmYWtlIGtlcm5lbCBzaWdzZXQgISEKKyAqLworCitpbnQgc2lnd2FpdChjb25zdCBzaWdzZXRfdCAqc2V0LCBpbnQgKnNpZykKK3sKKyAgICBpbnQgIHJldDsKKyAgICAvKiB1c2UgYSB1bmlvbiB0byBnZXQgcmlkIG9mIGFsaWFzaW5nIHdhcm5pbmdzICovCisgICAgdW5pb24geworICAgICAgdW5zaWduZWQgbG9uZyAga2VybmVsX3NpZ3NldFsyXTsKKyAgICAgIHNpZ3NldF90ICAgICAgIGR1bW15X3NpZ3NldDsKKyAgICB9IHU7CisKKyAgICB1Lmtlcm5lbF9zaWdzZXRbMF0gPSAqc2V0OworICAgIHUua2VybmVsX3NpZ3NldFsxXSA9IDA7ICAvKiBubyByZWFsLXRpbWUgc2lnbmFscyBzdXBwb3J0ZWQgPyAqLworICAgIGZvciAoOzspCisgICAgeworICAgICAvKiBfX3J0X3NpZ3RpbWVkd2FpdCBjYW4gcmV0dXJuIEVBR0FJTiBvciBFSU5UUiwgd2UgbmVlZCB0byBsb29wCisgICAgICAqIGFyb3VuZCB0aGVtIHNpbmNlIHNpZ3dhaXQgaXMgb25seSBhbGxvd2VkIHRvIHJldHVybiBFSU5WQUwKKyAgICAgICovCisgICAgICByZXQgPSBfX3J0X3NpZ3RpbWVkd2FpdCAoICZ1LmR1bW15X3NpZ3NldCwgTlVMTCwgTlVMTCwgc2l6ZW9mKHUua2VybmVsX3NpZ3NldCkpOworICAgICAgaWYgKHJldCA+PSAwKQorICAgICAgICBicmVhazsKKworICAgICAgaWYgKGVycm5vICE9IEVBR0FJTiAmJiBlcnJubyAhPSBFSU5UUikKKyAgICAgICAgcmV0dXJuIGVycm5vOworICAgIH0KKworICAgICpzaWcgPSByZXQ7CisgICAgcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL3NsZWVwLmMgYi9saWJjL3VuaXN0ZC9zbGVlcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhZmJkNjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3VuaXN0ZC9zbGVlcC5jCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKwordW5zaWduZWQgaW50IHNsZWVwKHVuc2lnbmVkIGludCBzZWNvbmRzKQoreworICAgIHN0cnVjdCB0aW1lc3BlYyAgdDsKKworICAgLyogc2Vjb25kcyBpcyB1bnNpZ25lZCwgd2hpbGUgdC50dl9zZWMgaXMgc2lnbmVkCisgICAgKiBzb21lIHBlb3BsZSB3YW50IHRvIGRvIHNsZWVwKFVJTlRfTUFYKSwgc28gZmFrZQorICAgICogc3VwcG9ydCBmb3IgaXQgYnkgb25seSBzbGVlcGluZyAyIGJpbGxpb24gc2Vjb25kcworICAgICovCisgICAgaWYgKChpbnQpc2Vjb25kcyA8IDApCisgICAgICAgIHNlY29uZHMgPSAweDdmZmZmZmZmOworICAgICAgICAKKyAgICB0LnR2X3NlYyAgPSBzZWNvbmRzOworICAgIHQudHZfbnNlYyA9IDA7CisKKyAgICBpZiAoICFuYW5vc2xlZXAoICZ0LCAmdCApICkKKyAgICByZXR1cm4gMDsKKworICAgIGlmICggZXJybm8gPT0gRUlOVFIgKQorICAgICAgICByZXR1cm4gdC50dl9zZWM7CisKKyAgICByZXR1cm4gLTE7Cit9CmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9zb2NrZXRjYWxscy5jIGIvbGliYy91bmlzdGQvc29ja2V0Y2FsbHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTdhYmMyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91bmlzdGQvc29ja2V0Y2FsbHMuYwpAQCAtMCwwICsxLDI1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworZW51bQoreworICAgIFNZU19TT0NLRVQgPSAxLAorICAgIFNZU19CSU5ELAorICAgIFNZU19DT05ORUNULAorICAgIFNZU19MSVNURU4sCisgICAgU1lTX0FDQ0VQVCwKKyAgICBTWVNfR0VUU09DS05BTUUsCisgICAgU1lTX0dFVFBFRVJOQU1FLAorICAgIFNZU19TT0NLRVRQQUlSLAorICAgIFNZU19TRU5ELAorICAgIFNZU19SRUNWLAorICAgIFNZU19TRU5EVE8sCisgICAgU1lTX1JFQ1ZGUk9NLAorICAgIFNZU19TSFVURE9XTiwKKyAgICBTWVNfU0VUU09DS09QVCwKKyAgICBTWVNfR0VUU09DS09QVCwKKyAgICBTWVNfU0VORE1TRywKKyAgICBTWVNfUkVDVk1TRworfTsKKworI2lmbmRlZiBfX05SX3NvY2tldAoraW50IHNvY2tldChpbnQgZG9tYWluLCBpbnQgdHlwZSwgaW50IHByb3RvY29sKQoreworICAgIHVuc2lnbmVkIGxvbmcgIHRbM107CisKKyAgICB0WzBdID0gKHVuc2lnbmVkIGxvbmcpIGRvbWFpbjsKKyAgICB0WzFdID0gKHVuc2lnbmVkIGxvbmcpIHR5cGU7CisgICAgdFsyXSA9ICh1bnNpZ25lZCBsb25nKSBwcm90b2NvbDsKKworICAgIHJldHVybiAoaW50KSBfX3NvY2tldGNhbGwoIFNZU19TT0NLRVQsIHQgKTsKK30KKyNlbmRpZiAvKiAhX19OUl9zb2NrZXQgKi8KKworCisjaWZuZGVmIF9fTlJfYmluZAoraW50IGJpbmQoaW50IHNvY2tmZCwgY29uc3Qgc3RydWN0IHNvY2thZGRyICpteV9hZGRyLCBzb2NrbGVuX3QgYWRkcmxlbikKK3sKKyAgICB1bnNpZ25lZCBsb25nICB0WzNdOworCisgICAgdFswXSA9ICh1bnNpZ25lZCBsb25nKSBzb2NrZmQ7CisgICAgdFsxXSA9ICh1bnNpZ25lZCBsb25nKSBteV9hZGRyOworICAgIHRbMl0gPSAodW5zaWduZWQgbG9uZykgYWRkcmxlbjsKKworICAgIHJldHVybiAoaW50KSBfX3NvY2tldGNhbGwoIFNZU19CSU5ELCB0ICk7Cit9CisjZW5kaWYgIC8qICFfX05SX2JpbmQgKi8KKworI2lmbmRlZiBfX05SX2Nvbm5lY3QKK2ludCBjb25uZWN0KGludCBzb2NrZmQsIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2Vydl9hZGRyLCBzb2NrbGVuX3QgIGFkZHJsZW4gKQoreworICAgIHVuc2lnbmVkIGxvbmcgIHRbM107CisKKyAgICB0WzBdID0gKHVuc2lnbmVkIGxvbmcpIHNvY2tmZDsKKyAgICB0WzFdID0gKHVuc2lnbmVkIGxvbmcpIHNlcnZfYWRkcjsKKyAgICB0WzJdID0gKHVuc2lnbmVkIGxvbmcpIGFkZHJsZW47CisKKyAgICByZXR1cm4gKGludCkgX19zb2NrZXRjYWxsKCBTWVNfQ09OTkVDVCwgdCApOworfQorI2VuZGlmIC8qICFfX05SX2Nvbm5lY3QgKi8KKworI2lmbmRlZiBfX05SX2xpc3RlbgoraW50IGxpc3RlbihpbnQgcywgaW50IGJhY2tsb2cpCit7CisgICAgdW5zaWduZWQgbG9uZyAgdFsyXTsKKworICAgIHRbMF0gPSAodW5zaWduZWQgbG9uZykgczsKKyAgICB0WzFdID0gKHVuc2lnbmVkIGxvbmcpIGJhY2tsb2c7CisKKyAgICByZXR1cm4gKGludCkgX19zb2NrZXRjYWxsKCBTWVNfTElTVEVOLCB0ICk7Cit9CisjZW5kaWYgLyogX19OUl9saXN0ZW4gKi8KKworI2lmbmRlZiBfX05SX2FjY2VwdAoraW50IGFjY2VwdChpbnQgc29jaywgc3RydWN0IHNvY2thZGRyICphZHJlc3NlLCBzb2NrbGVuX3QgKmxvbmd1ZXVyKQoreworICAgIHVuc2lnbmVkIGxvbmcgIHRbM107CisKKyAgICB0WzBdID0gKHVuc2lnbmVkIGxvbmcpIHNvY2s7CisgICAgdFsxXSA9ICh1bnNpZ25lZCBsb25nKSBhZHJlc3NlOworICAgIHRbMl0gPSAodW5zaWduZWQgbG9uZykgbG9uZ3VldXI7CisKKyAgICByZXR1cm4gKGludCkgX19zb2NrZXRjYWxsKCBTWVNfQUNDRVBULCB0ICk7Cit9CisjZW5kaWYgLyogX19OUl9hY2NlcHQgKi8KKworI2lmbmRlZiBfX05SX2dldHNvY2tuYW1lCitpbnQgZ2V0c29ja25hbWUoaW50IHMsIHN0cnVjdCBzb2NrYWRkciAqIG5hbWUsIHNvY2tsZW5fdCAqIG5hbWVsZW4gKQoreworICAgIHVuc2lnbmVkIGxvbmcgIHRbM107CisKKyAgICB0WzBdID0gKHVuc2lnbmVkIGxvbmcpIHM7CisgICAgdFsxXSA9ICh1bnNpZ25lZCBsb25nKSBuYW1lOworICAgIHRbMl0gPSAodW5zaWduZWQgbG9uZykgbmFtZWxlbjsKKworICAgIHJldHVybiAoaW50KSBfX3NvY2tldGNhbGwoIFNZU19HRVRTT0NLTkFNRSwgdCApOworfQorI2VuZGlmIC8qIF9fTlJfZ2V0c29ja25hbWUgKi8KKworI2lmbmRlZiBfX05SX2dldHBlZXJuYW1lCitpbnQgZ2V0cGVlcm5hbWUoaW50IHMsIHN0cnVjdCBzb2NrYWRkciAqbmFtZSwgc29ja2xlbl90ICpuYW1lbGVuKQoreworICAgIHVuc2lnbmVkIGxvbmcgIHRbM107CisKKyAgICB0WzBdID0gKHVuc2lnbmVkIGxvbmcpIHM7CisgICAgdFsxXSA9ICh1bnNpZ25lZCBsb25nKSBuYW1lOworICAgIHRbMl0gPSAodW5zaWduZWQgbG9uZykgbmFtZWxlbjsKKworICAgIHJldHVybiAoaW50KSBfX3NvY2tldGNhbGwoIFNZU19HRVRQRUVSTkFNRSwgdCApOworfQorI2VuZGlmIC8qICFfX05SX2dldHBlZXJuYW1lICovCisKKyNpZm5kZWYgX19OUl9zb2NrZXRwYWlyCitpbnQgc29ja2V0cGFpcihpbnQgZCwgaW50IHR5cGUsIGludCBwcm90b2NvbCwgaW50IHN2WzJdKQoreworICAgIHVuc2lnbmVkIGxvbmcgIHRbNF07CisKKyAgICB0WzBdID0gKHVuc2lnbmVkIGxvbmcpIGQ7CisgICAgdFsxXSA9ICh1bnNpZ25lZCBsb25nKSB0eXBlOworICAgIHRbMl0gPSAodW5zaWduZWQgbG9uZykgcHJvdG9jb2w7CisgICAgdFszXSA9ICh1bnNpZ25lZCBsb25nKSBzdjsKKworICAgIHJldHVybiAoaW50KSBfX3NvY2tldGNhbGwoIFNZU19TT0NLRVRQQUlSLCB0ICk7Cit9CisjZW5kaWYgLyogX19OUl9zb2NrZXRwYWlyICovCisKKyNpZm5kZWYgX19OUl9zZW5kdG8KK3NzaXplX3Qgc2VuZHRvKGludCBzb2NrZXQsIGNvbnN0IHZvaWQgKm1lc3NhZ2UsIHNpemVfdCBsZW5ndGgsIGludCBmbGFncywKKyAgICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqZGVzdF9hZGRyLCBzb2NrbGVuX3QgZGVzdF9sZW4pCit7CisgICAgdW5zaWduZWQgbG9uZyAgdFs2XTsKKworICAgIHRbMF0gPSAodW5zaWduZWQgbG9uZykgc29ja2V0OworICAgIHRbMV0gPSAodW5zaWduZWQgbG9uZykgbWVzc2FnZTsKKyAgICB0WzJdID0gKHVuc2lnbmVkIGxvbmcpIGxlbmd0aDsKKyAgICB0WzNdID0gKHVuc2lnbmVkIGxvbmcpIGZsYWdzOworICAgIHRbNF0gPSAodW5zaWduZWQgbG9uZykgZGVzdF9hZGRyOworICAgIHRbNV0gPSAodW5zaWduZWQgbG9uZykgZGVzdF9sZW47CisKKyAgIHJldHVybiBfX3NvY2tldGNhbGwoIFNZU19TRU5EVE8sIHQgKTsKK30KKyNlbmRpZiAvKiAhX19OUl9zZW5kdG8gKi8KKworI2lmbmRlZiBfX05SX3JlY3Zmcm9tCitzc2l6ZV90IHJlY3Zmcm9tKGludCBzb2NrZXQsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCwgdW5zaWduZWQgaW50IGZsYWdzLAorICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqYWRkcmVzcywgc29ja2xlbl90ICphZGRyZXNzX2xlbikKK3sKKyAgICB1bnNpZ25lZCBsb25nICB0WzZdOworCisgICAgdFswXSA9ICh1bnNpZ25lZCBsb25nKSBzb2NrZXQ7CisgICAgdFsxXSA9ICh1bnNpZ25lZCBsb25nKSBidWZmZXI7CisgICAgdFsyXSA9ICh1bnNpZ25lZCBsb25nKSBsZW5ndGg7CisgICAgdFszXSA9ICh1bnNpZ25lZCBsb25nKSBmbGFnczsKKyAgICB0WzRdID0gKHVuc2lnbmVkIGxvbmcpIGFkZHJlc3M7CisgICAgdFs1XSA9ICh1bnNpZ25lZCBsb25nKSBhZGRyZXNzX2xlbjsKKworICAgcmV0dXJuIF9fc29ja2V0Y2FsbCggU1lTX1JFQ1ZGUk9NLCB0ICk7Cit9CisjZW5kaWYgLyogIV9fTlJfcmVjdmZyb20gKi8KKworI2lmbmRlZiBfX05SX3NodXRkb3duCitpbnQgc2h1dGRvd24oaW50IHNvY2tldCwgaW50IGhvdykKK3sKKyAgICB1bnNpZ25lZCBsb25nICB0WzJdOworCisgICAgdFswXSA9ICh1bnNpZ25lZCBsb25nKSBzb2NrZXQ7CisgICAgdFsxXSA9ICh1bnNpZ25lZCBsb25nKSBob3c7CisKKyAgIHJldHVybiAoaW50KSBfX3NvY2tldGNhbGwoIFNZU19TSFVURE9XTiwgdCApOworfQorI2VuZGlmIC8qICFfX05SX3NodXRkb3duICovCisKKyNpZm5kZWYgX19OUl9zZXRzb2Nrb3B0CitpbnQgIHNldHNvY2tvcHQoIGludCAgcywgaW50ICBsZXZlbCwgaW50ICBvcHRuYW1lLCBjb25zdCB2b2lkKiAgb3B0dmFsLCBzb2NrbGVuX3QgIG9wdGxlbiApCit7CisgICAgdW5zaWduZWQgbG9uZyAgdFs1XTsKKworICAgIHRbMF0gPSAodW5zaWduZWQgbG9uZykgczsKKyAgICB0WzFdID0gKHVuc2lnbmVkIGxvbmcpIGxldmVsOworICAgIHRbMl0gPSAodW5zaWduZWQgbG9uZykgb3B0bmFtZTsKKyAgICB0WzNdID0gKHVuc2lnbmVkIGxvbmcpIG9wdHZhbDsKKyAgICB0WzRdID0gKHVuc2lnbmVkIGxvbmcpIG9wdGxlbjsKKworICAgcmV0dXJuIChpbnQpIF9fc29ja2V0Y2FsbCggU1lTX1NFVFNPQ0tPUFQsIHQgKTsKK30KKyNlbmRpZiAvKiAhX19OUl9zZXRzb2Nrb3B0ICovCisKKyNpZm5kZWYgX19OUl9nZXRzb2Nrb3B0CitpbnQgZ2V0c29ja29wdChpbnQgcywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwgdm9pZCAqb3B0dmFsLCBzb2NrbGVuX3QgKm9wdGxlbikKK3sKKyAgICB1bnNpZ25lZCBsb25nICB0WzVdOworCisgICAgdFswXSA9ICh1bnNpZ25lZCBsb25nKSBzOworICAgIHRbMV0gPSAodW5zaWduZWQgbG9uZykgbGV2ZWw7CisgICAgdFsyXSA9ICh1bnNpZ25lZCBsb25nKSBvcHRuYW1lOworICAgIHRbM10gPSAodW5zaWduZWQgbG9uZykgb3B0dmFsOworICAgIHRbNF0gPSAodW5zaWduZWQgbG9uZykgb3B0bGVuOworCisgICAgcmV0dXJuIChpbnQpIF9fc29ja2V0Y2FsbCggU1lTX0dFVFNPQ0tPUFQsIHQgKTsKK30KKyNlbmRpZiAvKiAhX19OUl9nZXRzb2Nrb3B0ICovCisKKyNpZm5kZWYgX19OUl9zZW5kbXNnCitzc2l6ZV90IHNlbmRtc2cgKGludCBzb2NrZXQsIGNvbnN0IHN0cnVjdCBtc2doZHIgKm1lc3NhZ2UsIHVuc2lnbmVkIGludCBmbGFncykKK3sKKyAgICB1bnNpZ25lZCBsb25nICB0WzNdOworCisgICAgdFswXSA9ICh1bnNpZ25lZCBsb25nKSBzb2NrZXQ7CisgICAgdFsxXSA9ICh1bnNpZ25lZCBsb25nKSBtZXNzYWdlOworICAgIHRbMl0gPSAodW5zaWduZWQgbG9uZykgZmxhZ3M7CisKKyAgIHJldHVybiBfX3NvY2tldGNhbGwoIFNZU19TRU5ETVNHLCB0ICk7Cit9CisjZW5kaWYgLyogX19OUl9zZW5kbXNnICovCisKKyNpZm5kZWYgX19OUl9yZWN2bXNnCitzc2l6ZV90IHJlY3Ztc2coaW50IHNvY2tldCwgc3RydWN0IG1zZ2hkciAqbWVzc2FnZSwgdW5zaWduZWQgaW50IGZsYWdzKQoreworICAgIHVuc2lnbmVkIGxvbmcgIHRbM107CisKKyAgICB0WzBdID0gKHVuc2lnbmVkIGxvbmcpIHNvY2tldDsKKyAgICB0WzFdID0gKHVuc2lnbmVkIGxvbmcpIG1lc3NhZ2U7CisgICAgdFsyXSA9ICh1bnNpZ25lZCBsb25nKSBmbGFnczsKKworICAgcmV0dXJuIF9fc29ja2V0Y2FsbCggU1lTX1JFQ1ZNU0csIHQgKTsKK30KKyNlbmRpZiAvKiBfX05SX3JlY3Ztc2cgKi8KKwpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvc3RhdGZzLmMgYi9saWJjL3VuaXN0ZC9zdGF0ZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTFlZjdhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91bmlzdGQvc3RhdGZzLmMKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHN5cy92ZnMuaD4KKworZXh0ZXJuIGludCBfX3N0YXRmczY0KGNvbnN0IGNoYXIgKiwgc2l6ZV90LCBzdHJ1Y3Qgc3RhdGZzICopOworCitpbnQgc3RhdGZzKGNvbnN0IGNoYXIqICBwYXRoLCBzdHJ1Y3Qgc3RhdGZzKiAgc3RhdCkKK3sKKyAgICByZXR1cm4gX19zdGF0ZnM2NChwYXRoLCBzaXplb2Yoc3RydWN0IHN0YXRmcyksIHN0YXQpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvc3Ryc2lnbmFsLmMgYi9saWJjL3VuaXN0ZC9zdHJzaWduYWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzFkZTNkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91bmlzdGQvc3Ryc2lnbmFsLmMKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCitjaGFyKgorc3Ryc2lnbmFsKGludCAgc2lnKQoreworICAgIGlmICgodW5zaWduZWQpc2lnIDwgTlNJRykKKyAgICAgICAgcmV0dXJuIChjaGFyKikgc3lzX3NpZ2xpc3Rbc2lnXTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiAiSW52YWxpZCBzaWduYWwgbnVtYmVyIjsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL3N5c2NvbmYuYyBiL2xpYmMvdW5pc3RkL3N5c2NvbmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzA4OWE0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91bmlzdGQvc3lzY29uZi5jCkBAIC0wLDAgKzEsNDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL3N5c2NvbmYuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxiaW9uaWNfdGxzLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxzdGRpby5oPiAgLyogZm9yIEZPUEVOX01BWCAqLworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorCisvKiBzZWVtcyB0byBiZSB0aGUgZGVmYXVsdCBvbiBMaW51eCwgcGVyIHRoZSBHTGliYyBzb3VyY2VzIGFuZCBteSBvd24gZGlnZ2luZyAqLworCisjZGVmaW5lICBTWVNURU1fQ0xLX1RDSyAgICAgICAgIDEwMAorI2RlZmluZSAgU1lTVEVNX0lPVl9NQVggICAgICAgICAxMDI0CisjZGVmaW5lICBTWVNURU1fREVMQVlUSU1FUl9NQVggIDIxNDc0ODM2NDcKKyNkZWZpbmUgIFNZU1RFTV9NUV9PUEVOX01BWCAgICAgOAorI2RlZmluZSAgU1lTVEVNX01RX1BSSU9fTUFYICAgICAzMjc2OAorI2RlZmluZSAgU1lTVEVNX1NFTV9OU0VNU19NQVggICAyNTYKKyNkZWZpbmUgIFNZU1RFTV9TRU1fVkFMVUVfTUFYICAgKDIxNDc0ODM2NDcpCisjZGVmaW5lICBTWVNURU1fU0lHUVVFVUVfTUFYICAgIDMyCisjZGVmaW5lICBTWVNURU1fVElNRVJfTUFYICAgICAgIDMyCisjZGVmaW5lICBTWVNURU1fTE9HSU5fTkFNRV9NQVggIDI1NgorI2RlZmluZSAgU1lTVEVNX1RUWV9OQU1FX01BWCAgICAzMgorCisvKiB0aGUgZm9sbG93aW5nIGRlcGVuZHMgb24gb3VyIGltcGxlbWVudGF0aW9uICovCisjZGVmaW5lICBTWVNURU1fQVRFWElUX01BWCAgICAgICAgICA2NTUzNiAgICAvKiBvdXIgaW1wbGVtZW50YXRpb24gaXMgdW5saW1pdGVkICovCisjZGVmaW5lICBTWVNURU1fVEhSRUFEX0tFWVNfTUFYICAgICBCSU9OSUNfVExTX1NMT1RTCisjZGVmaW5lICBTWVNURU1fVEhSRUFEX1NUQUNLX01JTiAgICAzMjc2OCAgICAvKiBsb3dlciB2YWx1ZXMgbWF5IGJlIHBvc3NpYmxlLCBidXQgYmUgY29uc2VydmF0aXZlICovCisjZGVmaW5lICBTWVNURU1fVEhSRUFEX1RIUkVBRFNfTUFYICAyMDQ4ICAgICAvKiByZWFsbHkgdW5saW1pdGVkICovCisKKyNkZWZpbmUgIFNZU1RFTV8yX0NfQklORCAgICAgX1BPU0lYX1ZFUlNJT04gIC8qIFBvc2l4IEMgYmluZGluZyB2ZXJzaW9uICovCisjZGVmaW5lICBTWVNURU1fMl9DX1ZFUiAgICAgIF9QT1NJWDJfQ19WRVJTSU9OCisjZGVmaW5lICBTWVNURU1fMl9DX0RFViAgICAgIC0xICAgICAgIC8qIFBvc2l4IEMgZGV2ZWxvcG1lbnQgdG9vbHMgdW5zdXBwb3J0ZWQgb24gdGhlIGRldmljZSAqLworI2RlZmluZSAgU1lTVEVNXzJfRk9SVF9ERVYgICAtMSAgICAgICAvKiBGb3J0cmFuIGRldmVsb3BtZW50IHVuc3VwcG9ydGVkICovCisjZGVmaW5lICBTWVNURU1fMl9GT1JUX1JVTiAgIC0xICAgICAgIC8qIEZvcnRyYW4gcnVudGltZSB1bnN1cHBvcnRlZCAqLworI2RlZmluZSAgU1lTVEVNXzJfU1dfREVWICAgICAtMSAgICAgICAvKiBwb3NpeCBzb2Z0d2FyZSBkZXYgdXRpbGl0aWVzIHVuc3VwcG9ydGVkICovCisjZGVmaW5lICBTWVNURU1fMl9MT0NBTEVERUYgIC0xICAgICAgIC8qIGxvY2FsZGVmKCkgdW5pbXBsZW1lbnRlZCAqLworI2RlZmluZSAgU1lTVEVNXzJfVVBFICAgICAgICAtMSAgICAgICAvKiBObyBVUEUgZm9yIHlvdSAhIChVc2VyIFBvcnRhYmlsaXR5IFV0aWxpdGllcykgKi8KKyNkZWZpbmUgIFNZU1RFTV8yX1ZFUlNJT04gICAgLTEgICAgICAgLyogTm8gcG9zaXggY29tbWFuZC1saW5lIHRvb2xzICovCisKK3N0YXRpYyBpbnQgIF9fZ2V0X25wcm9jX2NvbmYodm9pZCk7CitzdGF0aWMgaW50ICBfX2dldF9ucHJvY19vbmxuKHZvaWQpOworc3RhdGljIGludCAgX19nZXRfcGh5c19wYWdlcyh2b2lkKTsKK3N0YXRpYyBpbnQgIF9fZ2V0X2F2cGh5c19wYWdlcyh2b2lkKTsKKworaW50CitzeXNjb25mKCBpbnQgIG5hbWUgKQoreworICAgIHN3aXRjaCAobmFtZSkgeworI2lmZGVmIF9QT1NJWF9BUkdfTUFYCisgICAgY2FzZSBfU0NfQVJHX01BWDogICAgICAgICAgIHJldHVybiBfUE9TSVhfQVJHX01BWDsKKyNlbmRpZgorI2lmZGVmIF9QT1NJWDJfQkNfQkFTRV9NQVgKKyAgICBjYXNlIF9TQ19CQ19CQVNFX01BWDogICAgICAgcmV0dXJuIF9QT1NJWDJfQkNfQkFTRV9NQVg7CisjZW5kaWYKKyNpZmRlZiBfUE9TSVgyX0JDX0RJTV9NQVgKKyAgICBjYXNlIF9TQ19CQ19ESU1fTUFYOiAgICAgICAgcmV0dXJuIF9QT1NJWDJfQkNfRElNX01BWDsKKyNlbmRpZgorI2lmZGVmIF9QT1NJWDJfQkNfU0NBTEVfTUFYCisgICAgY2FzZSBfU0NfQkNfU0NBTEVfTUFYOiAgICAgIHJldHVybiBfUE9TSVgyX0JDX1NDQUxFX01BWDsKKyNlbmRpZgorI2lmZGVmIF9QT1NJWDJfQkNfU1RSSU5HX01BWAorICAgIGNhc2UgX1NDX0JDX1NUUklOR19NQVg6ICAgICByZXR1cm4gX1BPU0lYMl9CQ19TVFJJTkdfTUFYOworI2VuZGlmCisgICAgY2FzZSBfU0NfQ0hJTERfTUFYOiAgICAgICAgIHJldHVybiBDSElMRF9NQVg7CisgICAgY2FzZSBfU0NfQ0xLX1RDSzogICAgICAgICAgIHJldHVybiBTWVNURU1fQ0xLX1RDSzsKKyNpZmRlZiBfUE9TSVgyX0NPTExfV0VJR0hUU19NQVNLCisgICAgY2FzZSBfU0NfQ09MTF9XRUlHSFRTX01BWDogIHJldHVybiBfUE9TSVgyX0NPTExfV0VJR0hUU19NQVNLOworI2VuZGlmCisjaWZkZWYgX1BPU0lYMl9FWFBSX05FU1RfTUFYCisgICAgY2FzZSBfU0NfRVhQUl9ORVhUX01BU0s6ICAgIHJldHVybiBfUE9TSVgyX0VYUFJfTkVTVF9NQVg7CisjZW5kaWYKKyNpZmRlZiBfUE9TSVgyX0xJTkVfTUFYCisgICAgY2FzZSBfU0NfTElORV9NQVg6ICAgICAgICAgIHJldHVybiBfUE9TSVgyX0xJTkVfTUFYOworI2VuZGlmCisgICAgY2FzZSBfU0NfTkdST1VQU19NQVg6ICAgICAgIHJldHVybiBOR1JPVVBTX01BWDsKKyAgICBjYXNlIF9TQ19PUEVOX01BWDogICAgICAgICAgcmV0dXJuIE9QRU5fTUFYOworICAgIC8vY2FzZSBfU0NfUEFTU19NQVg6ICAgICAgICAgIHJldHVybiBQQVNTX01BWDsKKyAgICBjYXNlIF9TQ18yX0NfQklORDogICAgICAgICAgcmV0dXJuIFNZU1RFTV8yX0NfQklORDsKKyAgICBjYXNlIF9TQ18yX0NfREVWOiAgICAgICAgICAgcmV0dXJuIFNZU1RFTV8yX0NfREVWOworICAgIGNhc2UgX1NDXzJfQ19WRVJTSU9OOiAgICAgICByZXR1cm4gU1lTVEVNXzJfQ19WRVI7CisgICAgLy9jYXNlIF9TQ18yX0NIQVJfVEVSTTogICAgICAgICByZXR1cm4gOworICAgIGNhc2UgX1NDXzJfRk9SVF9ERVY6ICAgICAgICByZXR1cm4gU1lTVEVNXzJfRk9SVF9ERVY7CisgICAgY2FzZSBfU0NfMl9GT1JUX1JVTjogICAgICAgIHJldHVybiBTWVNURU1fMl9GT1JUX1JVTjsKKyAgICBjYXNlIF9TQ18yX0xPQ0FMRURFRjogICAgICAgcmV0dXJuIFNZU1RFTV8yX0xPQ0FMRURFRjsKKyAgICBjYXNlIF9TQ18yX1NXX0RFVjogICAgICAgICAgcmV0dXJuIFNZU1RFTV8yX1NXX0RFVjsKKyAgICBjYXNlIF9TQ18yX1VQRTogICAgICAgICAgICAgcmV0dXJuIFNZU1RFTV8yX1VQRTsKKyAgICBjYXNlIF9TQ18yX1ZFUlNJT046ICAgICAgICAgcmV0dXJuIFNZU1RFTV8yX1ZFUlNJT047CisjaWZkZWYgX1BPU0lYX0pPQl9DT05UUk9MCisgICAgY2FzZSBfU0NfSk9CX0NPTlRST0w6ICAgICAgIHJldHVybiBfUE9TSVhfSk9CX0NPTlRST0w7CisjZW5kaWYKKyNpZmRlZiBfUE9TSVhfU0FWRURfSURTCisgICAgY2FzZSBfU0NfU0FWRURfSURTOiAgICAgICAgIHJldHVybiBfUE9TSVhfU0FWRURfSURTOworI2VuZGlmCisjaWZkZWYgX1BPU0lYX1ZFUlNJT04KKyAgICBjYXNlIF9TQ19WRVJTSU9OOiAgICAgICAgICAgcmV0dXJuIF9QT1NJWF9WRVJTSU9OOworI2VuZGlmCisgICAgLy9jYXNlIF9TQ19SRV9EVVBfPEFYOiAgICAgICAgcmV0dXJuIDsKKyAgICBjYXNlIF9TQ19TVFJFQU1fTUFYOiAgICAgICAgcmV0dXJuIEZPUEVOX01BWDsKKyAgICAvL2Nhc2UgX1NDX1RaTkFNRV9NQVg6ICAgICAgICByZXR1cm4gOworI2lmIF9YT1BFTl9DUllQVAorICAgIGNhc2UgX1NDX1hPUEVOX0NSWVBUOiAgICAgICByZXR1cm4gX1hPUEVOX0NSWVBUOworI2VuZGlmCisjaWZkZWYgX1hPUEVOX0VOSF9JMThOCisgICAgY2FzZSBfU0NfWE9QRU5fRU5IX0kxOE46ICAgIHJldHVybiBfWE9QRU5fRU5IX0kxOE47CisjZW5kaWYKKyNpZmRlZiBfWE9QRU5fU0hNCisgICAgY2FzZSBfU0NfWE9QRU5fU0hNOiAgICAgICAgIHJldHVybiBfWE9QRU5fU0hNOworI2VuZGlmCisjaWZkZWYgX1hPUEVOX1ZFUlNJT04KKyAgICBjYXNlIF9TQ19YT1BFTl9WRVJTSU9OOiAgICAgcmV0dXJuIF9YT1BFTl9WRVJTSU9OOworI2VuZGlmCisjaWZkZWYgX1hPUEVOX1hDVV9WRVJTSU9OCisgICAgY2FzZSBfU0NfWE9QRU5fWENVX1ZFUlNJT046IHJldHVybiBfWE9QRU5fWENVX1ZFUlNJT047CisjZW5kaWYKKyNpZmRlZiBfWE9QRU5fUkVBTFRJTUUKKyAgICBjYXNlIF9TQ19YT1BFTl9SRUFMVElNRTogICAgcmV0dXJuIF9YT1BFTl9SRUFMVElNRTsKKyNlbmRpZgorI2lmZGVmIF9YT1BFTl9SRUFMVElNRV9USFJFQURTCisgICAgY2FzZSBfU0NfWE9QRU5fUkVBTFRJTUVfVEhSRUFEUzogcmV0dXJuIF9YT1BFTl9SRUFMVElNRV9USFJFQURTOworI2VuZGlmCisjaWZkZWYgX1hPUEVOX0xFR0FDWQorICAgIGNhc2UgX1NDX1hPUEVOX0xFR0FDWTogICAgICByZXR1cm4gX1hPUEVOX0xFR0FDWTsKKyNlbmRpZgorICAgIGNhc2UgX1NDX0FURVhJVF9NQVg6ICAgICAgICByZXR1cm4gU1lTVEVNX0FURVhJVF9NQVg7CisgICAgY2FzZSBfU0NfSU9WX01BWDogICAgICAgICAgIHJldHVybiBTWVNURU1fSU9WX01BWDsKKyAgICBjYXNlIF9TQ19QQUdFU0laRTogICAgICAgICAgcmV0dXJuIFBBR0VfU0laRTsKKyAgICBjYXNlIF9TQ19QQUdFX1NJWkU6ICAgICAgICAgcmV0dXJuIFBBR0VfU0laRTsKKyNpZmRlZiBfWE9QRU5fVU5JWAorICAgIGNhc2UgX1NDX1hPUEVOX1VOSVg6ICAgICAgICByZXR1cm4gX1hPUEVOX1VOSVg7CisjZW5kaWYKKworICAgIC8vIFhYWDogVE9ETzogWEJTNSBub25zZW5zZQorCisjaWZkZWYgQUlPX0xJU1RJT19NQVgKKyAgICBjYXNlIF9TQ19BSU9fTElTVElPX01BWDogICAgICAgcmV0dXJuIEFJT19MSVNUSU9fTUFYOworI2VuZGlmCisjaWZkZWYgQUlPX01BWAorICAgIGNhc2UgX1NDX0FJT19NQVg6ICAgICAgICAgICAgICByZXR1cm4gQUlPX01BWDsKKyNlbmRpZgorI2lmZGVmIEFJT19QUklPX0RFTFRBX01BWAorICAgIGNhc2UgX1NDX0FJT19QUklPX0RFTFRBX01BWDogICByZXR1cm4gQUlPX1BSSU9fREVMVEFfTUFYOworI2VuZGlmCisgICAgY2FzZSBfU0NfREVMQVlUSU1FUl9NQVg6ICAgIHJldHVybiBTWVNURU1fREVMQVlUSU1FUl9NQVg7CisgICAgY2FzZSBfU0NfTVFfT1BFTl9NQVg6ICAgICAgIHJldHVybiBTWVNURU1fTVFfT1BFTl9NQVg7CisgICAgY2FzZSBfU0NfTVFfUFJJT19NQVg6ICAgICAgIHJldHVybiBTWVNURU1fTVFfUFJJT19NQVg7CisgICAgY2FzZSBfU0NfUlRTSUdfTUFYOiAgICAgICAgIHJldHVybiBSVFNJR19NQVg7CisgICAgY2FzZSBfU0NfU0VNX05TRU1TX01BWDogICAgIHJldHVybiBTWVNURU1fU0VNX05TRU1TX01BWDsKKyAgICBjYXNlIF9TQ19TRU1fVkFMVUVfTUFYOiAgICAgcmV0dXJuIFNZU1RFTV9TRU1fVkFMVUVfTUFYOworICAgIGNhc2UgX1NDX1NJR1FVRVVFX01BWDogICAgICByZXR1cm4gU1lTVEVNX1NJR1FVRVVFX01BWDsKKyAgICBjYXNlIF9TQ19USU1FUl9NQVg6ICAgICAgICAgcmV0dXJuIFNZU1RFTV9USU1FUl9NQVg7CisjaWZkZWYgX1BPU0lYX0FTWU5DSFJPTk9VU19JTworICAgIGNhc2UgX1NDX0FTWU5DSFJPTk9VU19JTzogICByZXR1cm4gX1BPU0lYX0FTWU5DSFJPTk9VU19JTzsKKyNlbmRpZgorI2lmZGVmIF9QT1NJWF9GU1lOQworICAgIGNhc2UgX1NDX0ZTWU5DOiAgICAgICAgICAgICByZXR1cm4gX1BPU0lYX0ZTWU5DOworI2VuZGlmCisjaWZkZWYgX1BPU0lYX01BUFBFRF9GSUxFUworICAgIGNhc2UgX1NDX01BUFBFRF9GSUxFUzogICAgICByZXR1cm4gX1BPU0lYX01BUFBFRF9GSUxFUzsKKyNlbmRpZgorI2lmZGVmIF9QT1NJWF9NRU1MT0NLCisgICAgY2FzZSBfU0NfTUVNTE9DSzogICAgICAgICAgIHJldHVybiBfUE9TSVhfTUVNTE9DSzsKKyNlbmRpZgorI2lmZGVmIF9QT1NJWF9NRU1MT0NLX1JBTkdFCisgICAgY2FzZSBfU0NfTUVNTE9DS19SQU5HRTogICAgIHJldHVybiBfUE9TSVhfTUVNTE9DS19SQU5HRQorI2VuZGlmCisjaWZkZWYgX1BPU0lYX01FTU9SWV9QUk9URUNUSU9OCisgICAgY2FzZSBfU0NfTUVNT1JZX1BST1RFQ1RJT046IHJldHVybiBfUE9TSVhfTUVNT1JZX1BST1RFQ1RJT047CisjZW5kaWYKKyNpZmRlZiBfUE9TSVhfTUVTU0FHRV9QQVNTSU5HCisgICAgY2FzZSBfU0NfTUVTU0FHRV9QQVNTSU5HOiAgIHJldHVybiBfUE9TSVhfTUVTU0FHRV9QQVNTSU5HOworI2VuZGlmCisjaWZkZWYgX1BPU0lYX1BSSU9SSVRJWkVEX0lPCisgICAgY2FzZSBfU0NfUFJJT1JJVElaRURfSU86ICAgIHJldHVybiBfUE9TSVhfUFJJT1JJVElaRURfSU87CisjZW5kaWYKKyNpZmRlZiBfUE9TSVhfUFJJT1JJVFlfU0NIRURVTElORworICAgIGNhc2UgX1NDX1BSSU9SSVRZX1NDSEVEVUxJTkc6ICByZXR1cm4gX1BPU0lYX1BSSU9SSVRZX1NDSEVEVUxJTkc7CisjZW5kaWYKKyNpZmRlZiBfUE9TSVhfUkVBTFRJTUVfU0lHTkFMUworICAgIGNhc2UgX1NDX1JFQUxUSU1FX1NJR05BTFM6ICByZXR1cm4gX1BPU0lYX1JFQUxUSU1FX1NJR05BTFM7CisjZW5kaWYKKyNpZmRlZiBfUE9TSVhfU0VNQVBIT1JFUworICAgIGNhc2UgX1NDX1NFTUFQSE9SRVM6ICAgICAgICByZXR1cm4gX1BPU0lYX1NFTUFQSE9SRVM7CisjZW5kaWYKKyNpZmRlZiBfUE9TSVhfU0hBUkVEX01FTU9SWV9PQkpFQ1RTCisgICAgY2FzZSBfU0NfU0hBUkVEX01FTU9SWV9PQkpFQ1RTOiAgcmV0dXJuIF9QT1NJWF9TSEFSRURfTUVNT1JZX09CSkVDVFM7CisjZW5kaWYKKyNpZmRlZiBfUE9TSVhfU1lOQ0hST05JWkVEX0lPCisgICAgY2FzZSBfU0NfU1lOQ0hST05JWkVEX0lPOiAgIHJldHVybiBfUE9TSVhfU1lOQ0hST05JWkVEX0lPOworI2VuZGlmCisjaWZkZWYgX1BPU0lYX1RJTUVSUworICAgIGNhc2UgX1NDX1RJTUVSUzogICAgICAgICAgICByZXR1cm4gX1BPU0lYX1RJTUVSUzsKKyNlbmRpZgorCisgICAgLy8gR0VUR1JfUl9TSVpFX01BWCA/CisgICAgLy8gR0VUUFdfUl9TSVpFX01BWCA/CisKKyAgICBjYXNlIF9TQ19MT0dJTl9OQU1FX01BWDogICAgcmV0dXJuIFNZU1RFTV9MT0dJTl9OQU1FX01BWDsKKyNpZmRlZiBfUE9TSVhfVEhSRUFEX0RFU1RSVUNUT1JfSVRFUkFUSU9OUworICAgIGNhc2UgX1NDX1RIUkVBRF9ERVNUUlVDVE9SX0lURVJBVElPTlM6ICByZXR1cm4gX1BPU0lYX1RIUkVBRF9ERVNUUlVDVE9SX0lURVJBVElPTlM7CisjZW5kaWYKKyAgICBjYXNlIF9TQ19USFJFQURfS0VZU19NQVg6ICAgICByZXR1cm4gU1lTVEVNX1RIUkVBRF9LRVlTX01BWDsKKyAgICBjYXNlIF9TQ19USFJFQURfU1RBQ0tfTUlOOiAgICByZXR1cm4gU1lTVEVNX1RIUkVBRF9TVEFDS19NSU47CisgICAgY2FzZSBfU0NfVEhSRUFEX1RIUkVBRFNfTUFYOiAgcmV0dXJuIFNZU1RFTV9USFJFQURfVEhSRUFEU19NQVg7CisgICAgY2FzZSBfU0NfVFRZX05BTUVfTUFYOiAgICAgICAgcmV0dXJuIFNZU1RFTV9UVFlfTkFNRV9NQVg7CisjaWZkZWYgX1BPU0lYX1RIUkVBRFMKKyAgICBjYXNlIF9TQ19USFJFQURTOiAgICAgICAgICAgICByZXR1cm4gX1BPU0lYX1RIUkVBRFM7CisjZW5kaWYKKyNpZmRlZiBfUE9TSVhfVEhSRUFEX0FUVFJfU1RBQ0tBRERSCisgICAgY2FzZSBfU0NfVEhSRUFEX0FUVFJfU1RBQ0tBRERSOiAgIHJldHVybiBfUE9TSVhfVEhSRUFEX0FUVFJfU1RBQ0tBRERSOworI2VuZGlmCisjaWZkZWYgX1BPU0lYX1RIUkVBRF9BVFRSX1NUQUNLU0laRQorICAgIGNhc2UgX1NDX1RIUkVBRF9BVFRSX1NUQUNLU0laRTogICByZXR1cm4gX1BPU0lYX1RIUkVBRF9BVFRSX1NUQUNLU0laRTsKKyNlbmRpZgorI2lmZGVmIF9QT1NJWF9USFJFQURfUFJJT1JJVFlfU0NIRURVTElORworICAgIGNhc2UgX1NDX1RIUkVBRF9QUklPUklUWV9TQ0hFRFVMSU5HOiAgcmV0dXJuIF9QT1NJWF9USFJFQURfUFJJT1JJVFlfU0NIRURVTElORzsKKyNlbmRpZgorI2lmZGVmIF9QT1NJWF9USFJFQURfUFJJT19JTkhFUklUCisgICAgY2FzZSBfU0NfVEhSRUFEX1BSSU9fSU5IRVJJVDogICAgICAgICByZXR1cm4gX1BPU0lYX1RIUkVBRF9QUklPX0lOSEVSSVQ7CisjZW5kaWYKKyNpZmRlZiBfUE9TSVhfVEhSRUFEX1BSSU9fUFJPVEVDVAorICAgIGNhc2UgX1NDX1RIUkVBRF9QUklPX1BST1RFQ1Q6IHJldHVybiBfUE9TSVhfVEhSRUFEX1BSSU9fUFJPVEVDVDsKKyNlbmRpZgorI2lmZGVmIF9QT1NJWF9USFJFQURfU0FGRV9GVU5DVElPTlMKKyAgICBjYXNlIF9TQ19USFJFQURfU0FGRV9GVU5DVElPTlM6ICByZXR1cm4gX1BPU0lYX1RIUkVBRF9TQUZFX0ZVTkNUSU9OUworI2VuZGlmCisKKworICAgIGNhc2UgX1NDX05QUk9DRVNTT1JTX0NPTkY6ICByZXR1cm4gX19nZXRfbnByb2NfY29uZigpOworICAgIGNhc2UgX1NDX05QUk9DRVNTT1JTX09OTE46ICByZXR1cm4gX19nZXRfbnByb2Nfb25sbigpOworICAgIGNhc2UgX1NDX1BIWVNfUEFHRVM6ICAgICAgICByZXR1cm4gX19nZXRfcGh5c19wYWdlcygpOworICAgIGNhc2UgX1NDX0FWUEhZU19QQUdFUzogICAgICByZXR1cm4gX19nZXRfYXZwaHlzX3BhZ2VzKCk7CisKKyAgICBkZWZhdWx0OgorICAgICAgIC8qIFBvc2l4IHNheXMgRUlOVkFMIGlzIHRoZSBvbmx5IGVycm9yIHRoYXQgc2hhbGwgYmUgcmV0dXJuZWQsCisgICAgICAgICogYnV0IEdMaWJjIHVzZXMgRU5PU1lTICovCisgICAgICAgIGVycm5vID0gRU5PU1lTOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorfQorCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBpbnQgICBycG9zOworICAgIGludCAgIGxlbjsKKyAgICBpbnQgICBvdmVyZmxvdzsKKyAgICBpbnQgICBmZDsKKyAgICBpbnQgICBpbl9sZW47CisgICAgaW50ICAgaW5fcG9zOworICAgIGNoYXIgIGJ1ZmZbMTI4XTsKKyAgICBjaGFyICBpbnB1dFsxMjhdOworfSBMaW5lUGFyc2VyOworCitzdGF0aWMgaW50CitsaW5lX3BhcnNlcl9pbml0KCBMaW5lUGFyc2VyKiAgcCwgY29uc3QgY2hhciogIHBhdGggKQoreworICAgIHAtPnJwb3MgICAgID0gMDsKKyAgICBwLT5sZW4gICAgICA9IChpbnQpc2l6ZW9mKHAtPmJ1ZmYpOworICAgIHAtPm92ZXJmbG93ID0gMDsKKworICAgIHAtPmluX2xlbiAgID0gMDsKKyAgICBwLT5pbl9wb3MgICA9IDA7CisgICAgcC0+ZmQgICAgICAgPSBvcGVuKCBwYXRoLCBPX1JET05MWSApOworCisgICAgcmV0dXJuIHAtPmZkOworfQorCisKK3N0YXRpYyBpbnQKK2xpbmVfcGFyc2VyX2FkZGMoIExpbmVQYXJzZXIqICBwLCBpbnQgIGMgKQoreworICAgIGlmIChwLT5vdmVyZmxvdykgeworICAgICAgICBwLT5vdmVyZmxvdyA9IChjID09ICdcbicpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKHAtPnJwb3MgPj0gcC0+bGVuKSB7CisgICAgICAgIHAtPm92ZXJmbG93ID0gMTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmIChjID09ICdcbicpIHsKKyAgICAgICAgcC0+YnVmZltwLT5ycG9zXSA9IDA7CisgICAgICAgIHAtPnJwb3MgPSAwOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgcC0+YnVmZltwLT5ycG9zKytdID0gKGNoYXIpIGM7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2xpbmVfcGFyc2VyX2dldGMoIExpbmVQYXJzZXIqICBwICkKK3sKKyAgICBpZiAocC0+aW5fbGVuID49IHAtPmluX3BvcykgeworICAgICAgICBpbnQgIHJldDsKKworICAgICAgICBwLT5pbl9sZW4gPSBwLT5pbl9wb3MgPSAwOworICAgICAgICBkbyB7CisgICAgICAgICAgICByZXQgPSByZWFkKHAtPmZkLCBwLT5pbnB1dCwgc2l6ZW9mKHAtPmlucHV0KSk7CisgICAgICAgIH0gd2hpbGUgKHJldCA8IDAgJiYgZXJybm8gPT0gRUlOVFIpOworCisgICAgICAgIGlmIChyZXQgPD0gMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKworICAgICAgICBwLT5pbl9sZW4gPSByZXQ7CisgICAgfQorICAgIHJldHVybiBwLT5pbnB1dFsgcC0+aW5fcG9zKysgXTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIqCitsaW5lX3BhcnNlcl9nZXRzKCBMaW5lUGFyc2VyKiAgcCApCit7CisgICAgZm9yICg7OykgeworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICBpbnQgIGMgPSBsaW5lX3BhcnNlcl9nZXRjKHApOworCisgICAgICAgICAgICBpZiAoYyA8IDApIHsKKyAgICAgICAgICAgICAgICBjbG9zZShwLT5mZCk7CisgICAgICAgICAgICAgICAgcC0+ZmQgPSAtMTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgaWYgKGxpbmVfcGFyc2VyX2FkZGMocCwgYykpCisgICAgICAgICAgICAgICAgcmV0dXJuIHAtPmJ1ZmY7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitsaW5lX3BhcnNlcl9kb25lKCBMaW5lUGFyc2VyKiBwICkKK3sKKyAgICBpZiAocC0+ZmQgPj0gMCkgeworICAgICAgICBjbG9zZShwLT5mZCk7CisgICAgICAgIHAtPmZkID0gLTE7CisgICAgfQorfQorCitzdGF0aWMgaW50CitfX2dldF9ucHJvY19jb25mKHZvaWQpCit7CisgICAgTGluZVBhcnNlciAgIHBhcnNlclsxXTsKKyAgICBjb25zdCBjaGFyKiAgcDsKKyAgICBpbnQgICAgICAgICAgY291bnQgPSAwOworCisgICAgaWYgKGxpbmVfcGFyc2VyX2luaXQocGFyc2VyLCAiL3Byb2MvY3B1aW5mbyIpIDwgMCkKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICB3aGlsZSAoKHAgPSBsaW5lX3BhcnNlcl9nZXRzKHBhcnNlcikpKSB7CisgICAgICAgIGlmICggIW1lbWNtcChwLCAicHJvY2Vzc29yIiwgOSkgKQorICAgICAgICAgICAgY291bnQgKz0gMTsKKyAgICB9CisgICAgcmV0dXJuIChjb3VudCA8IDEpID8gMSA6IGNvdW50OworfQorCisKK3N0YXRpYyBpbnQKK19fZ2V0X25wcm9jX29ubG4odm9pZCkKK3sKKyAgICBMaW5lUGFyc2VyICAgcGFyc2VyWzFdOworICAgIGNvbnN0IGNoYXIqICBwOworICAgIGludCAgICAgICAgICBjb3VudCA9IDA7CisKKyAgICBpZiAobGluZV9wYXJzZXJfaW5pdChwYXJzZXIsICIvcHJvYy9zdGF0IikgPCAwKQorICAgICAgICByZXR1cm4gMTsKKworICAgIHdoaWxlICgocCA9IGxpbmVfcGFyc2VyX2dldHMocGFyc2VyKSkpIHsKKyAgICAgICAgaWYgKCAhbWVtY21wKHAsICJjcHUiLCAzKSAmJiBpc2RpZ2l0KHBbM10pICkKKyAgICAgICAgICAgIGNvdW50ICs9IDE7CisgICAgfQorICAgIHJldHVybiAoY291bnQgPCAxKSA/IDEgOiBjb3VudDsKK30KKworc3RhdGljIGludAorX19nZXRfcGh5c19wYWdlcyh2b2lkKQoreworICAgIExpbmVQYXJzZXIgICBwYXJzZXJbMV07CisgICAgY29uc3QgY2hhciogIHA7CisKKyAgICBpZiAobGluZV9wYXJzZXJfaW5pdChwYXJzZXIsICIvcHJvYy9tZW1pbmZvIikgPCAwKQorICAgICAgICByZXR1cm4gLTI7ICAvKiB3aGF0ID8gKi8KKworICAgIHdoaWxlICgocCA9IGxpbmVfcGFyc2VyX2dldHMocGFyc2VyKSkpIHsKKyAgICAgICAgbG9uZyAgdG90YWw7CisgICAgICAgIGlmICggc3NjYW5mKHAsICJNZW1Ub3RhbDogJWxkIGtCIiwgJnRvdGFsKSA9PSAxICkgeworICAgICAgICAgICAgbGluZV9wYXJzZXJfZG9uZShwYXJzZXIpOworICAgICAgICAgICAgcmV0dXJuIChpbnQpICh0b3RhbCAvIChQQUdFX1NJWkUvMTAyNCkpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAtMzsKK30KKworc3RhdGljIGludAorX19nZXRfYXZwaHlzX3BhZ2VzKHZvaWQpCit7CisgICAgTGluZVBhcnNlciAgIHBhcnNlclsxXTsKKyAgICBjb25zdCBjaGFyKiAgcDsKKworICAgIGlmIChsaW5lX3BhcnNlcl9pbml0KHBhcnNlciwgIi9wcm9jL21lbWluZm8iKSA8IDApCisgICAgICAgIHJldHVybiAtMTsgIC8qIHdoYXQgPyAqLworCisgICAgd2hpbGUgKChwID0gbGluZV9wYXJzZXJfZ2V0cyhwYXJzZXIpKSkgeworICAgICAgICBsb25nICB0b3RhbDsKKyAgICAgICAgaWYgKCBzc2NhbmYocCwgIk1lbUZyZWU6ICVsZCBrQiIsICZ0b3RhbCkgPT0gMSApIHsKKyAgICAgICAgICAgIGxpbmVfcGFyc2VyX2RvbmUocGFyc2VyKTsKKyAgICAgICAgICAgIHJldHVybiAoaW50KSAodG90YWwgLyAoUEFHRV9TSVpFLzEwMjQpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gLTE7Cit9CmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9zeXNsb2cuYyBiL2xpYmMvdW5pc3RkL3N5c2xvZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1NzFkNTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3VuaXN0ZC9zeXNsb2cuYwpAQCAtMCwwICsxLDM2OCBAQAorLyoJJE9wZW5CU0Q6IHN5c2xvZy5jLHYgMS4yOCAyMDA1LzA4LzA4IDA4OjA1OjM0IGVzcGllIEV4cCAkICovCisvKgorICogQ29weXJpZ2h0IChjKSAxOTgzLCAxOTg4LCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvdWlvLmg+CisjaW5jbHVkZSA8c3lzbG9nLmg+CisjaW5jbHVkZSA8c3lzL3VuLmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxwYXRocy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorCitzdGF0aWMgc3RydWN0IHN5c2xvZ19kYXRhIHNkYXRhID0gU1lTTE9HX0RBVEFfSU5JVDsKKworZXh0ZXJuIGNoYXIJKl9fcHJvZ25hbWU7CQkvKiBQcm9ncmFtIG5hbWUsIGZyb20gY3J0MC4gKi8KKworc3RhdGljIHZvaWQJZGlzY29ubmVjdGxvZ19yKHN0cnVjdCBzeXNsb2dfZGF0YSAqKTsJLyogZGlzY29ubmVjdCBmcm9tIHN5c2xvZ2QgKi8KK3N0YXRpYyB2b2lkCWNvbm5lY3Rsb2dfcihzdHJ1Y3Qgc3lzbG9nX2RhdGEgKik7CS8qIChyZSljb25uZWN0IHRvIHN5c2xvZ2QgKi8KKworLyoKKyAqIHN5c2xvZywgdnN5c2xvZyAtLQorICoJcHJpbnQgbWVzc2FnZSBvbiBsb2cgZmlsZTsgb3V0cHV0IGlzIGludGVuZGVkIGZvciBzeXNsb2dkKDgpLgorICovCit2b2lkCitzeXNsb2coaW50IHByaSwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXZzeXNsb2cocHJpLCBmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworfQorCit2b2lkCit2c3lzbG9nKGludCBwcmksIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCkKK3sKKwl2c3lzbG9nX3IocHJpLCAmc2RhdGEsIGZtdCwgYXApOworfQorCit2b2lkCitvcGVubG9nKGNvbnN0IGNoYXIgKmlkZW50LCBpbnQgbG9nc3RhdCwgaW50IGxvZ2ZhYykKK3sKKwlvcGVubG9nX3IoaWRlbnQsIGxvZ3N0YXQsIGxvZ2ZhYywgJnNkYXRhKTsKK30KKwordm9pZAorY2xvc2Vsb2codm9pZCkKK3sKKwljbG9zZWxvZ19yKCZzZGF0YSk7Cit9CisKKy8qIHNldGxvZ21hc2sgLS0gc2V0IHRoZSBsb2cgbWFzayBsZXZlbCAqLworaW50CitzZXRsb2dtYXNrKGludCBwbWFzaykKK3sKKwlyZXR1cm4gc2V0bG9nbWFza19yKHBtYXNrLCAmc2RhdGEpOworfQorCisvKiBSZWVudHJhbnQgdmVyc2lvbiBvZiBzeXNsb2csIGkuZS4gc3lzbG9nX3IoKSAqLworCit2b2lkCitzeXNsb2dfcihpbnQgcHJpLCBzdHJ1Y3Qgc3lzbG9nX2RhdGEgKmRhdGEsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwl2c3lzbG9nX3IocHJpLCBkYXRhLCBmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworfQorCit2b2lkCit2c3lzbG9nX3IoaW50IHByaSwgc3RydWN0IHN5c2xvZ19kYXRhICpkYXRhLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApCit7CisJaW50IGNudDsKKwljaGFyIGNoLCAqcCwgKnQ7CisJdGltZV90IG5vdzsKKwlpbnQgZmQsIHNhdmVkX2Vycm5vLCBlcnJvcjsKKyNkZWZpbmUJVEJVRl9MRU4JMjA0OAorI2RlZmluZQlGTVRfTEVOCQkxMDI0CisJY2hhciAqc3RkcCA9IE5VTEwsIHRidWZbVEJVRl9MRU5dLCBmbXRfY3B5W0ZNVF9MRU5dOworCWludCB0YnVmX2xlZnQsIGZtdF9sZWZ0LCBwcmxlbjsKKworI2RlZmluZQlJTlRFUk5BTExPRwlMT0dfRVJSfExPR19DT05TfExPR19QRVJST1J8TE9HX1BJRAorCS8qIENoZWNrIGZvciBpbnZhbGlkIGJpdHMuICovCisJaWYgKHByaSAmIH4oTE9HX1BSSU1BU0t8TE9HX0ZBQ01BU0spKSB7CisJCWlmIChkYXRhID09ICZzZGF0YSkgeworCQkJc3lzbG9nKElOVEVSTkFMTE9HLAorCQkJICAgICJzeXNsb2c6IHVua25vd24gZmFjaWxpdHkvcHJpb3JpdHk6ICV4IiwgcHJpKTsKKwkJfSBlbHNlIHsKKwkJCXN5c2xvZ19yKElOVEVSTkFMTE9HLCBkYXRhLAorCQkJICAgICJzeXNsb2dfcjogdW5rbm93biBmYWNpbGl0eS9wcmlvcml0eTogJXgiLCBwcmkpOworCQl9CisJCXByaSAmPSBMT0dfUFJJTUFTS3xMT0dfRkFDTUFTSzsKKwl9CisKKwkvKiBDaGVjayBwcmlvcml0eSBhZ2FpbnN0IHNldGxvZ21hc2sgdmFsdWVzLiAqLworCWlmICghKExPR19NQVNLKExPR19QUkkocHJpKSkgJiBkYXRhLT5sb2dfbWFzaykpCisJCXJldHVybjsKKworCXNhdmVkX2Vycm5vID0gZXJybm87CisKKwkvKiBTZXQgZGVmYXVsdCBmYWNpbGl0eSBpZiBub25lIHNwZWNpZmllZC4gKi8KKwlpZiAoKHByaSAmIExPR19GQUNNQVNLKSA9PSAwKQorCQlwcmkgfD0gZGF0YS0+bG9nX2ZhYzsKKworCS8qIElmIHdlIGhhdmUgYmVlbiBjYWxsZWQgdGhyb3VnaCBzeXNsb2coKSwgbm8gbmVlZCBmb3IgcmVlbnRyYW5jeS4gKi8KKwlpZiAoZGF0YSA9PSAmc2RhdGEpCisJCSh2b2lkKXRpbWUoJm5vdyk7CisKKwlwID0gdGJ1ZjsKKwl0YnVmX2xlZnQgPSBUQlVGX0xFTjsKKworI2RlZmluZQlERUMoKQlcCisJZG8gewkJCQkJXAorCQlpZiAocHJsZW4gPCAwKQkJCVwKKwkJCXBybGVuID0gMDsJCVwKKwkJaWYgKHBybGVuID49IHRidWZfbGVmdCkJCVwKKwkJCXBybGVuID0gdGJ1Zl9sZWZ0IC0gMTsJXAorCQlwICs9IHBybGVuOwkJCVwKKwkJdGJ1Zl9sZWZ0IC09IHBybGVuOwkJXAorCX0gd2hpbGUgKDApCisKKwlwcmxlbiA9IHNucHJpbnRmKHAsIHRidWZfbGVmdCwgIjwlZD4iLCBwcmkpOworCURFQygpOworCisJLyogCisJICogc3lzbG9nZCB3aWxsIGV4cGFuZCB0aW1lIGF1dG9tYWdpY2FsbHkgZm9yIHJlZW50cmFudCBjYXNlLCBhbmQKKwkgKiBmb3Igbm9ybWFsIGNhc2UsIGp1c3QgZG8gbGlrZSBiZWZvcmUKKwkgKi8KKwlpZiAoZGF0YSA9PSAmc2RhdGEpIHsKKwkJcHJsZW4gPSBzdHJmdGltZShwLCB0YnVmX2xlZnQsICIlaCAlZSAlVCAiLCBsb2NhbHRpbWUoJm5vdykpOworCQlERUMoKTsKKwl9CisKKwlpZiAoZGF0YS0+bG9nX3N0YXQgJiBMT0dfUEVSUk9SKQorCQlzdGRwID0gcDsKKwlpZiAoZGF0YS0+bG9nX3RhZyA9PSBOVUxMKQorCQlkYXRhLT5sb2dfdGFnID0gX19wcm9nbmFtZTsKKwlpZiAoZGF0YS0+bG9nX3RhZyAhPSBOVUxMKSB7CisJCXBybGVuID0gc25wcmludGYocCwgdGJ1Zl9sZWZ0LCAiJXMiLCBkYXRhLT5sb2dfdGFnKTsKKwkJREVDKCk7CisJfQorCWlmIChkYXRhLT5sb2dfc3RhdCAmIExPR19QSUQpIHsKKwkJcHJsZW4gPSBzbnByaW50ZihwLCB0YnVmX2xlZnQsICJbJWxkXSIsIChsb25nKWdldHBpZCgpKTsKKwkJREVDKCk7CisJfQorCWlmIChkYXRhLT5sb2dfdGFnICE9IE5VTEwpIHsKKwkJaWYgKHRidWZfbGVmdCA+IDEpIHsKKwkJCSpwKysgPSAnOic7CisJCQl0YnVmX2xlZnQtLTsKKwkJfQorCQlpZiAodGJ1Zl9sZWZ0ID4gMSkgeworCQkJKnArKyA9ICcgJzsKKwkJCXRidWZfbGVmdC0tOworCQl9CisJfQorCisJLyogc3RyZXJyb3IoKSBpcyBub3QgcmVlbnRyYW50ICovCisKKwlmb3IgKHQgPSBmbXRfY3B5LCBmbXRfbGVmdCA9IEZNVF9MRU47IChjaCA9ICpmbXQpOyArK2ZtdCkgeworCQlpZiAoY2ggPT0gJyUnICYmIGZtdFsxXSA9PSAnbScpIHsKKwkJCSsrZm10OworCQkJaWYgKGRhdGEgPT0gJnNkYXRhKSB7CisJCQkJcHJsZW4gPSBzbnByaW50Zih0LCBmbXRfbGVmdCwgIiVzIiwKKwkJCQkgICAgc3RyZXJyb3Ioc2F2ZWRfZXJybm8pKTsgCisJCQl9IGVsc2UgeworCQkJCXBybGVuID0gc25wcmludGYodCwgZm10X2xlZnQsICJFcnJvciAlZCIsCisJCQkJICAgIHNhdmVkX2Vycm5vKTsgCisJCQl9CisJCQlpZiAocHJsZW4gPCAwKQorCQkJCXBybGVuID0gMDsKKwkJCWlmIChwcmxlbiA+PSBmbXRfbGVmdCkKKwkJCQlwcmxlbiA9IGZtdF9sZWZ0IC0gMTsKKwkJCXQgKz0gcHJsZW47CisJCQlmbXRfbGVmdCAtPSBwcmxlbjsKKwkJfSBlbHNlIGlmIChjaCA9PSAnJScgJiYgZm10WzFdID09ICclJyAmJiBmbXRfbGVmdCA+IDIpIHsKKwkJCSp0KysgPSAnJSc7CisJCQkqdCsrID0gJyUnOworCQkJZm10Kys7CisJCQlmbXRfbGVmdCAtPSAyOworCQl9IGVsc2UgeworCQkJaWYgKGZtdF9sZWZ0ID4gMSkgeworCQkJCSp0KysgPSBjaDsKKwkJCQlmbXRfbGVmdC0tOworCQkJfQorCQl9CisJfQorCSp0ID0gJ1wwJzsKKworCXBybGVuID0gdnNucHJpbnRmKHAsIHRidWZfbGVmdCwgZm10X2NweSwgYXApOworCURFQygpOworCWNudCA9IHAgLSB0YnVmOworCisJLyogT3V0cHV0IHRvIHN0ZGVyciBpZiByZXF1ZXN0ZWQuICovCisJaWYgKGRhdGEtPmxvZ19zdGF0ICYgTE9HX1BFUlJPUikgeworCQlzdHJ1Y3QgaW92ZWMgaW92WzJdOworCisJCWlvdlswXS5pb3ZfYmFzZSA9IHN0ZHA7CisJCWlvdlswXS5pb3ZfbGVuID0gY250IC0gKHN0ZHAgLSB0YnVmKTsKKwkJaW92WzFdLmlvdl9iYXNlID0gIlxuIjsKKwkJaW92WzFdLmlvdl9sZW4gPSAxOworCQkodm9pZCl3cml0ZXYoU1RERVJSX0ZJTEVOTywgaW92LCAyKTsKKwl9CisKKwkvKiBHZXQgY29ubmVjdGVkLCBvdXRwdXQgdGhlIG1lc3NhZ2UgdG8gdGhlIGxvY2FsIGxvZ2dlci4gKi8KKwlpZiAoIWRhdGEtPm9wZW5lZCkKKwkJb3BlbmxvZ19yKGRhdGEtPmxvZ190YWcsIGRhdGEtPmxvZ19zdGF0LCAwLCBkYXRhKTsKKwljb25uZWN0bG9nX3IoZGF0YSk7CisKKwkvKgorCSAqIElmIHRoZSBzZW5kKCkgZmFpbGVkLCB0aGVyZSBhcmUgdHdvIGxpa2VseSBzY2VuYXJpb3M6CisJICogIDEpIHN5c2xvZ2Qgd2FzIHJlc3RhcnRlZAorCSAqICAyKSAvZGV2L2xvZyBpcyBvdXQgb2Ygc29ja2V0IGJ1ZmZlciBzcGFjZQorCSAqIFdlIGF0dGVtcHQgdG8gcmVjb25uZWN0IHRvIC9kZXYvbG9nIHRvIHRha2UgY2FyZSBvZgorCSAqIGNhc2UgIzEgYW5kIGtlZXAgc2VuZCgpaW5nIGRhdGEgdG8gY292ZXIgY2FzZSAjMgorCSAqIHRvIGdpdmUgc3lzbG9nZCBhIGNoYW5jZSB0byBlbXB0eSBpdHMgc29ja2V0IGJ1ZmZlci4KKwkgKi8KKwlpZiAoKGVycm9yID0gc2VuZChkYXRhLT5sb2dfZmlsZSwgdGJ1ZiwgY250LCAwKSkgPCAwKSB7CisJCWlmIChlcnJubyAhPSBFTk9CVUZTKSB7CisJCQlkaXNjb25uZWN0bG9nX3IoZGF0YSk7CisJCQljb25uZWN0bG9nX3IoZGF0YSk7CisJCX0KKwkJZG8geworCQkJdXNsZWVwKDEpOworCQkJaWYgKChlcnJvciA9IHNlbmQoZGF0YS0+bG9nX2ZpbGUsIHRidWYsIGNudCwgMCkpID49IDApCisJCQkJYnJlYWs7CisJCX0gd2hpbGUgKGVycm5vID09IEVOT0JVRlMpOworCX0KKworCS8qCisJICogT3V0cHV0IHRoZSBtZXNzYWdlIHRvIHRoZSBjb25zb2xlOyB0cnkgbm90IHRvIGJsb2NrCisJICogYXMgYSBibG9ja2luZyBjb25zb2xlIHNob3VsZCBub3Qgc3RvcCBvdGhlciBwcm9jZXNzZXMuCisJICogTWFrZSBzdXJlIHRoZSBlcnJvciByZXBvcnRlZCBpcyB0aGUgb25lIGZyb20gdGhlIHN5c2xvZ2QgZmFpbHVyZS4KKwkgKi8KKwlpZiAoZXJyb3IgPT0gLTEgJiYgKGRhdGEtPmxvZ19zdGF0ICYgTE9HX0NPTlMpICYmCisJICAgIChmZCA9IG9wZW4oX1BBVEhfQ09OU09MRSwgT19XUk9OTFl8T19OT05CTE9DSywgMCkpID49IDApIHsKKwkJc3RydWN0IGlvdmVjIGlvdlsyXTsKKwkJCisJCXAgPSBzdHJjaHIodGJ1ZiwgJz4nKSArIDE7CisJCWlvdlswXS5pb3ZfYmFzZSA9IHA7CisJCWlvdlswXS5pb3ZfbGVuID0gY250IC0gKHAgLSB0YnVmKTsKKwkJaW92WzFdLmlvdl9iYXNlID0gIlxyXG4iOworCQlpb3ZbMV0uaW92X2xlbiA9IDI7CisJCSh2b2lkKXdyaXRldihmZCwgaW92LCAyKTsKKwkJKHZvaWQpY2xvc2UoZmQpOworCX0KKworCWlmIChkYXRhICE9ICZzZGF0YSkKKwkJY2xvc2Vsb2dfcihkYXRhKTsKK30KKworc3RhdGljIHZvaWQKK2Rpc2Nvbm5lY3Rsb2dfcihzdHJ1Y3Qgc3lzbG9nX2RhdGEgKmRhdGEpCit7CisJLyoKKwkgKiBJZiB0aGUgdXNlciBjbG9zZWQgdGhlIEZEIGFuZCBvcGVuZWQgYW5vdGhlciBpbiB0aGUgc2FtZSBzbG90LAorCSAqIHRoYXQncyB0aGVpciBwcm9ibGVtLiAgVGhleSBzaG91bGQgY2xvc2UgaXQgYmVmb3JlIGNhbGxpbmcgb24KKwkgKiBzeXN0ZW0gc2VydmljZXMuCisJICovCisJaWYgKGRhdGEtPmxvZ19maWxlICE9IC0xKSB7CisJCWNsb3NlKGRhdGEtPmxvZ19maWxlKTsKKwkJZGF0YS0+bG9nX2ZpbGUgPSAtMTsKKwl9CisJZGF0YS0+Y29ubmVjdGVkID0gMDsJCS8qIHJldHJ5IGNvbm5lY3QgKi8KK30KKworc3RhdGljIHZvaWQKK2Nvbm5lY3Rsb2dfcihzdHJ1Y3Qgc3lzbG9nX2RhdGEgKmRhdGEpCit7CisgICAgdW5pb24geworICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgICAgIHN5c2xvZ0FkZHI7CisgICAgICAgIHN0cnVjdCBzb2NrYWRkcl91biAgc3lzbG9nQWRkclVuOworICAgIH0gdTsKKworI2RlZmluZSBTeXNsb2dBZGRyICAgdS5zeXNsb2dBZGRyVW4KKworCWlmIChkYXRhLT5sb2dfZmlsZSA9PSAtMSkgeworCQlpZiAoKGRhdGEtPmxvZ19maWxlID0gc29ja2V0KEFGX1VOSVgsIFNPQ0tfREdSQU0sIDApKSA9PSAtMSkKKwkJCXJldHVybjsKKwkJKHZvaWQpZmNudGwoZGF0YS0+bG9nX2ZpbGUsIEZfU0VURkQsIDEpOworCX0KKwlpZiAoZGF0YS0+bG9nX2ZpbGUgIT0gLTEgJiYgIWRhdGEtPmNvbm5lY3RlZCkgeworCQltZW1zZXQoJlN5c2xvZ0FkZHIsICdcMCcsIHNpemVvZihTeXNsb2dBZGRyKSk7CisjaWYgMAorICAgICAgICAgICAgICAgIC8qIEJJT05JQzogbm8gc3VuX2xlbiBmaWVsZCB0byBmaWxsIG9uIExpbnV4ICovCisJCVN5c2xvZ0FkZHIuc3VuX2xlbiA9IHNpemVvZihTeXNsb2dBZGRyKTsKKyNlbmRpZgorCQlTeXNsb2dBZGRyLnN1bl9mYW1pbHkgPSBBRl9VTklYOworCQlzdHJsY3B5KFN5c2xvZ0FkZHIuc3VuX3BhdGgsIF9QQVRIX0xPRywKKwkJICAgIHNpemVvZihTeXNsb2dBZGRyLnN1bl9wYXRoKSk7CisJCWlmIChjb25uZWN0KGRhdGEtPmxvZ19maWxlLCAmdS5zeXNsb2dBZGRyLAorCQkgICAgc2l6ZW9mKFN5c2xvZ0FkZHIpKSA9PSAtMSkgeworCQkJKHZvaWQpY2xvc2UoZGF0YS0+bG9nX2ZpbGUpOworCQkJZGF0YS0+bG9nX2ZpbGUgPSAtMTsKKwkJfSBlbHNlCisJCQlkYXRhLT5jb25uZWN0ZWQgPSAxOworCX0KK30KKwordm9pZAorb3BlbmxvZ19yKGNvbnN0IGNoYXIgKmlkZW50LCBpbnQgbG9nc3RhdCwgaW50IGxvZ2ZhYywgc3RydWN0IHN5c2xvZ19kYXRhICpkYXRhKQoreworCWlmIChpZGVudCAhPSBOVUxMKQorCQlkYXRhLT5sb2dfdGFnID0gaWRlbnQ7CisJZGF0YS0+bG9nX3N0YXQgPSBsb2dzdGF0OworCWlmIChsb2dmYWMgIT0gMCAmJiAobG9nZmFjICZ+IExPR19GQUNNQVNLKSA9PSAwKQorCQlkYXRhLT5sb2dfZmFjID0gbG9nZmFjOworCisJaWYgKGRhdGEtPmxvZ19zdGF0ICYgTE9HX05ERUxBWSkJLyogb3BlbiBpbW1lZGlhdGVseSAqLworCQljb25uZWN0bG9nX3IoZGF0YSk7CisKKwlkYXRhLT5vcGVuZWQgPSAxOwkvKiBpZGVudCBhbmQgZmFjaWxpdHkgaGFzIGJlZW4gc2V0ICovCit9CisKK3ZvaWQKK2Nsb3NlbG9nX3Ioc3RydWN0IHN5c2xvZ19kYXRhICpkYXRhKQoreworCSh2b2lkKWNsb3NlKGRhdGEtPmxvZ19maWxlKTsKKwlkYXRhLT5sb2dfZmlsZSA9IC0xOworCWRhdGEtPmNvbm5lY3RlZCA9IDA7CisJZGF0YS0+bG9nX3RhZyA9IE5VTEw7Cit9CisKKy8qIHNldGxvZ21hc2sgLS0gc2V0IHRoZSBsb2cgbWFzayBsZXZlbCAqLworaW50CitzZXRsb2dtYXNrX3IoaW50IHBtYXNrLCBzdHJ1Y3Qgc3lzbG9nX2RhdGEgKmRhdGEpCit7CisJaW50IG9tYXNrOworCisJb21hc2sgPSBkYXRhLT5sb2dfbWFzazsKKwlpZiAocG1hc2sgIT0gMCkKKwkJZGF0YS0+bG9nX21hc2sgPSBwbWFzazsKKwlyZXR1cm4gKG9tYXNrKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL3N5c3RlbS5jIGIvbGliYy91bmlzdGQvc3lzdGVtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJjYzM3ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdW5pc3RkL3N5c3RlbS5jCkBAIC0wLDAgKzEsNzQgQEAKKy8qCSRPcGVuQlNEOiBzeXN0ZW0uYyx2IDEuOCAyMDA1LzA4LzA4IDA4OjA1OjM3IGVzcGllIEV4cCAkICovCisvKgorICogQ29weXJpZ2h0IChjKSAxOTg4IFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8cGF0aHMuaD4KKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgorCitleHRlcm4gY2hhciAqKmVudmlyb247CisKK2ludAorc3lzdGVtKGNvbnN0IGNoYXIgKmNvbW1hbmQpCit7CisgIHBpZF90IHBpZDsKKwlzaWdfdCBpbnRzYXZlLCBxdWl0c2F2ZTsKKwlzaWdzZXRfdCBtYXNrLCBvbWFzazsKKwlpbnQgcHN0YXQ7CisJY2hhciAqYXJncFtdID0geyJzaCIsICItYyIsIE5VTEwsIE5VTEx9OworCisJaWYgKCFjb21tYW5kKQkJLyoganVzdCBjaGVja2luZy4uLiAqLworCQlyZXR1cm4oMSk7CisKKwlhcmdwWzJdID0gKGNoYXIgKiljb21tYW5kOworCisJc2lnZW1wdHlzZXQoJm1hc2spOworCXNpZ2FkZHNldCgmbWFzaywgU0lHQ0hMRCk7CisJc2lncHJvY21hc2soU0lHX0JMT0NLLCAmbWFzaywgJm9tYXNrKTsKKwlzd2l0Y2ggKHBpZCA9IHZmb3JrKCkpIHsKKwljYXNlIC0xOgkJCS8qIGVycm9yICovCisJCXNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmb21hc2ssIE5VTEwpOworCQlyZXR1cm4oLTEpOworCWNhc2UgMDoJCQkJLyogY2hpbGQgKi8KKwkJc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZvbWFzaywgTlVMTCk7CisJCWV4ZWN2ZShfUEFUSF9CU0hFTEwsIGFyZ3AsIGVudmlyb24pOworICAgIF9leGl0KDEyNyk7CisgIH0KKworCWludHNhdmUgPSAoc2lnX3QpICBic2Rfc2lnbmFsKFNJR0lOVCwgU0lHX0lHTik7CisJcXVpdHNhdmUgPSAoc2lnX3QpIGJzZF9zaWduYWwoU0lHUVVJVCwgU0lHX0lHTik7CisJcGlkID0gd2FpdHBpZChwaWQsIChpbnQgKikmcHN0YXQsIDApOworCXNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmb21hc2ssIE5VTEwpOworCSh2b2lkKWJzZF9zaWduYWwoU0lHSU5ULCBpbnRzYXZlKTsKKwkodm9pZClic2Rfc2lnbmFsKFNJR1FVSVQsIHF1aXRzYXZlKTsKKwlyZXR1cm4gKHBpZCA9PSAtMSA/IC0xIDogcHN0YXQpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvdGNnZXRwZ3JwLmMgYi9saWJjL3VuaXN0ZC90Y2dldHBncnAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzU1MDE0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91bmlzdGQvdGNnZXRwZ3JwLmMKQEAgLTAsMCArMSwzNCBAQAorLyogYmlvbmljL3VuaXN0ZC90Y2dldHBncnAuYworKioKKyoqIENvcHlyaWdodCAyMDA2LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisqKgorKiogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyoqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKiogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiogICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorKiogICAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyoqICAgICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKioKKyoqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgR29vZ2xlIEluYy4gYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorKiogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8KKyoqIEVWRU5UIFNIQUxMIEdvb2dsZSBJbmMuIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisqKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsKKyoqIE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorKiogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IKKyoqIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKKyoqIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDx0ZXJtaW9zLmg+CisKK3BpZF90IHRjZ2V0cGdycChpbnQgZmQpCit7CisgICAgcGlkX3QgX3BpZDsKKyAgICByZXR1cm4gaW9jdGwoZmQsIFRJT0NHUEdSUCwgJl9waWQpID8gKHBpZF90KS0xIDogX3BpZDsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL3Rjc2V0cGdycC5jIGIvbGliYy91bmlzdGQvdGNzZXRwZ3JwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjgzYjk5NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdW5pc3RkL3Rjc2V0cGdycC5jCkBAIC0wLDAgKzEsMzMgQEAKKy8qIGJpb25pYy91bmlzdGQvdGNzZXRwZ3JwLmMKKyoqCisqKiBDb3B5cmlnaHQgMjAwNiwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorKioKKyoqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisqKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKiogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyoqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyoqICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyoqICAgICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisqKiAgICAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoqCisqKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdvb2dsZSBJbmMuIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyoqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyoqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PCisqKiBFVkVOVCBTSEFMTCBHb29nbGUgSW5jLiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKiogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorKiogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7CisqKiBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyoqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SCisqKiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCisqKiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8dGVybWlvcy5oPgorCitpbnQgdGNzZXRwZ3JwKGludCBmZCwgcGlkX3QgX3BpZCkKK3sKKyAgICByZXR1cm4gaW9jdGwoZmQsIFRJT0NTUEdSUCwgJl9waWQpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvdGltZS5jIGIvbGliYy91bmlzdGQvdGltZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzZDczNjYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3VuaXN0ZC90aW1lLmMKQEAgLTAsMCArMSw2MiBAQAorLyoJJE9wZW5CU0Q6IHRpbWUuYyx2IDEuNSAyMDA1LzA4LzA4IDA4OjA1OjM0IGVzcGllIEV4cCAkICovCisvKgorICogQ29weXJpZ2h0IChjKSAxOTgzLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHRpbWUuaD4KKwordGltZV90Cit0aW1lKHRpbWVfdCAqdCkKK3sKKwlzdHJ1Y3QgdGltZXZhbCB0dDsKKworCWlmIChnZXR0aW1lb2ZkYXkoJnR0LCAoc3RydWN0IHRpbWV6b25lICopMCkgPCAwKQorCQlyZXR1cm4gKC0xKTsKKwlpZiAodCkKKwkJKnQgPSAodGltZV90KXR0LnR2X3NlYzsKKwlyZXR1cm4gKHR0LnR2X3NlYyk7Cit9CisKKworY2xvY2tfdAorY2xvY2sodm9pZCkKK3sKKwlzdHJ1Y3QgdGltZXNwZWMgIHRtOworCXN0YXRpYyBpbnQgICAgICAgY2xvY2tfaW5pdGVkOworCXN0YXRpYyBjbG9ja190ICAgY2xvY2tfc3RhcnQ7CisJY2xvY2tfdCAgICAgICAgICBub3c7CisKKwljbG9ja19nZXR0aW1lKCBDTE9DS19NT05PVE9OSUMsICZ0bSk7CisJbm93ID0gdG0udHZfc2VjICogQ0xPQ0tTX1BFUl9TRUMgKyAodG0udHZfbnNlYyAqIChDTE9DS1NfUEVSX1NFQy8xZTkpKTsKKworCWlmICghY2xvY2tfaW5pdGVkKSB7CisJCWNsb2NrX3N0YXJ0ICA9IG5vdzsKKwkJY2xvY2tfaW5pdGVkID0gMTsKKwl9CisJcmV0dXJuICBub3cgLSBjbG9ja19zdGFydDsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL3Vtb3VudC5jIGIvbGliYy91bmlzdGQvdW1vdW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQyZTQyYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdW5pc3RkL3Vtb3VudC5jCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworZXh0ZXJuIGludCAgdW1vdW50Mihjb25zdCBjaGFyKiwgaW50KTsKKworaW50ICB1bW91bnQoY29uc3QgY2hhciogIGRpcikKK3sKKyAgcmV0dXJuIHVtb3VudDIoZGlyLCAwKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL3VubG9ja3B0LmMgYi9saWJjL3VuaXN0ZC91bmxvY2twdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5OGI3YTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3VuaXN0ZC91bmxvY2twdC5jCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKworaW50ICB1bmxvY2twdCggaW50ICBmZCApCit7CisgICAgaW50ICB1bmxvY2sgPSAwOworCisgICAgcmV0dXJuIGlvY3RsKCBmZCwgVElPQ1NQVExDSywgJnVubG9jayApOworfQpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvdXNsZWVwLmMgYi9saWJjL3VuaXN0ZC91c2xlZXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTQ1OGIxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91bmlzdGQvdXNsZWVwLmMKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCit2b2lkIHVzbGVlcCh1bnNpZ25lZCBsb25nIHVzZWMpCit7CisgIHN0cnVjdCB0aW1lc3BlYyB0czsKKworICB0cy50dl9zZWMgID0gdXNlYy8xMDAwMDAwVUw7CisKKyNpZmRlZiBfX2FybV9fCisgICAgLyogYXZvaWQgZGl2aXNpb25zIGFuZCBtb2R1bG9zIG9uIHRoZSBBUk0gKi8KKyAgdHMudHZfbnNlYyA9ICh1c2VjIC0gdHMudHZfc2VjKjEwMDAwMDBVTCkqMTAwMDsKKyNlbHNlCisgIHRzLnR2X25zZWMgPSAodXNlYyAlIDEwMDAwMDBVTCkgKiAxMDAwVUw7CisjZW5kaWYKKworICBmb3IgKDs7KQorICB7CisgICAgaWYgKCBuYW5vc2xlZXAoICZ0cywgJnRzICkgPj0gMCApCisgICAgICAgIGJyZWFrOworCisgICAgaWYgKCBlcnJubyAhPSBFSU5UUiApCisgICAgICAgIGJyZWFrOworICB9Cit9CmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC93YWl0LmMgYi9saWJjL3VuaXN0ZC93YWl0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE3MjQxOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdW5pc3RkL3dhaXQuYwpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8c3lzL3dhaXQuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworZXh0ZXJuIHBpZF90ICBfX3dhaXQ0IChwaWRfdCBwaWQsIGludCAqc3RhdHVzLCBpbnQgb3B0aW9ucywgc3RydWN0IHJ1c2FnZSAqcnVzYWdlKTsKKworcGlkX3QgIHdhaXQoIGludCogIHN0YXR1cyApCit7CisgICAgcmV0dXJuIF9fd2FpdDQoIChwaWRfdCktMSwgc3RhdHVzLCAwLCBOVUxMICk7Cit9CisKK3BpZF90ICB3YWl0MyhpbnQqICBzdGF0dXMsIGludCBvcHRpb25zLCBzdHJ1Y3QgcnVzYWdlKiAgcnVzYWdlKQoreworICAgIHJldHVybiBfX3dhaXQ0KCAocGlkX3QpLTEsIHN0YXR1cywgb3B0aW9ucywgcnVzYWdlICk7Cit9CisKK3BpZF90ICB3YWl0cGlkKHBpZF90ICBwaWQsIGludCogIHN0YXR1cywgaW50ICBvcHRpb25zKQoreworICAgIHJldHVybiBfX3dhaXQ0KCBwaWQsIHN0YXR1cywgb3B0aW9ucywgTlVMTCApOworfQpkaWZmIC0tZ2l0IGEvbGliYy96b25laW5mby9BbmRyb2lkLm1rIGIvbGliYy96b25laW5mby9BbmRyb2lkLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmMzZmOWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3pvbmVpbmZvL0FuZHJvaWQubWsKQEAgLTAsMCArMSwxNCBAQAorTE9DQUxfUEFUSDo9ICQoY2FsbCBteS1kaXIpCitpbmNsdWRlICQoQ0xFQVJfVkFSUykKKworQUxMX1BSRUJVSUxUICs9ICQoVEFSR0VUX09VVCkvdXNyL3NoYXJlL3pvbmVpbmZvL3pvbmVpbmZvLmRhdAorJChUQVJHRVRfT1VUKS91c3Ivc2hhcmUvem9uZWluZm8vem9uZWluZm8uZGF0IDogJChMT0NBTF9QQVRIKS96b25laW5mby5kYXQgfCAkKEFDUCkKKwkkKHRyYW5zZm9ybS1wcmVidWlsdC10by10YXJnZXQpCisKK0FMTF9QUkVCVUlMVCArPSAkKFRBUkdFVF9PVVQpL3Vzci9zaGFyZS96b25laW5mby96b25laW5mby5pZHgKKyQoVEFSR0VUX09VVCkvdXNyL3NoYXJlL3pvbmVpbmZvL3pvbmVpbmZvLmlkeCA6ICQoTE9DQUxfUEFUSCkvem9uZWluZm8uaWR4IHwgJChBQ1ApCisJJCh0cmFuc2Zvcm0tcHJlYnVpbHQtdG8tdGFyZ2V0KQorCitBTExfUFJFQlVJTFQgKz0gJChUQVJHRVRfT1VUKS91c3Ivc2hhcmUvem9uZWluZm8vem9uZWluZm8udmVyc2lvbgorJChUQVJHRVRfT1VUKS91c3Ivc2hhcmUvem9uZWluZm8vem9uZWluZm8udmVyc2lvbiA6ICQoTE9DQUxfUEFUSCkvem9uZWluZm8udmVyc2lvbiB8ICQoQUNQKQorCSQodHJhbnNmb3JtLXByZWJ1aWx0LXRvLXRhcmdldCkKZGlmZiAtLWdpdCBhL2xpYmMvem9uZWluZm8vem9uZWluZm8uZGF0IGIvbGliYy96b25laW5mby96b25laW5mby5kYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTViZjI1YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvem9uZWluZm8vem9uZWluZm8uZGF0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2xpYmMvem9uZWluZm8vem9uZWluZm8uaWR4IGIvbGliYy96b25laW5mby96b25laW5mby5pZHgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhhMzY1MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvem9uZWluZm8vem9uZWluZm8uaWR4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2xpYmMvem9uZWluZm8vem9uZWluZm8udmVyc2lvbiBiL2xpYmMvem9uZWluZm8vem9uZWluZm8udmVyc2lvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODljNWQxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy96b25laW5mby96b25laW5mby52ZXJzaW9uCkBAIC0wLDAgKzEgQEAKKzIwMDdoCg==